/** * Replaces an entity if the current state allows it. * * @return the next character after the text replacement or '&' if no replacement took place. */ private char replaceEntity() throws XMLStreamException { if ((_state == STATE_COMMENT) || (_state == STATE_PI) || (_state == STATE_CDATA)) return '&'; // (&2.4) int start = _index; // Index of first replacement character. _data[_index++] = '&'; while (true) { if (_readIndex >= _readCount) reloadBuffer(); char c = _data[_index++] = _readBuffer[_readIndex++]; _location._totalCharsRead++; if (c == ';') break; if (c <= ' ') throw new XMLStreamException("';' expected", _location); } // Ensures that the replacement string holds in the data buffer. while (start + _entities.getMaxLength() >= _data.length) { increaseDataBuffer(); } // Replaces the entity. int length = _entities.replaceEntity(_data, start, _index - start); // Returns the next character after entity unless ampersand. _index = start + length; // Local character reading block. if (_readIndex >= _readCount) reloadBuffer(); char c = _readBuffer[_readIndex++]; _location._totalCharsRead++; return c == '&' ? replaceEntity() : c; }
@Override public int hashCode() { int result = createdAt != null ? createdAt.hashCode() : 0; result = 31 * result + (int) (id ^ (id >>> 32)); result = 31 * result + (text != null ? text.hashCode() : 0); result = 31 * result + (source != null ? source.hashCode() : 0); result = 31 * result + (truncated ? 1 : 0); result = 31 * result + (entities != null ? entities.hashCode() : 0); result = 31 * result + (extendedEntities != null ? extendedEntities.hashCode() : 0); result = 31 * result + (int) (inReplyToStatusId ^ (inReplyToStatusId >>> 32)); result = 31 * result + (int) (inReplyToUserId ^ (inReplyToUserId >>> 32)); result = 31 * result + (inReplyToScreenName != null ? inReplyToScreenName.hashCode() : 0); result = 31 * result + (user != null ? user.hashCode() : 0); result = 31 * result + (geo != null ? geo.hashCode() : 0); result = 31 * result + (place != null ? place.hashCode() : 0); result = 31 * result + (currentUserRetweet != null ? currentUserRetweet.hashCode() : 0); result = 31 * result + (contributors != null ? Arrays.hashCode(contributors) : 0); result = 31 * result + (int) (retweetCount ^ (retweetCount >>> 32)); result = 31 * result + (int) (favoriteCount ^ (favoriteCount >>> 32)); result = 31 * result + (int) (replyCount ^ (replyCount >>> 32)); result = 31 * result + (favorited ? 1 : 0); result = 31 * result + (retweeted ? 1 : 0); result = 31 * result + (lang != null ? lang.hashCode() : 0); result = 31 * result + (int) (descendentReplyCount ^ (descendentReplyCount >>> 32)); result = 31 * result + (retweetedStatus != null ? retweetedStatus.hashCode() : 0); result = 31 * result + (quotedStatus != null ? quotedStatus.hashCode() : 0); result = 31 * result + (card != null ? card.hashCode() : 0); result = 31 * result + (possiblySensitive ? 1 : 0); return result; }
// Implements Reusable. public void reset() { // Resets all members (alphabetically ordered). _attributes.reset(); _attrPrefixSep = 0; _attrQName = null; _attrValue = null; _attrQName = null; _charactersPending = false; _encoding = null; _entities.reset(); _eventType = START_DOCUMENT; _index = 0; _isEmpty = false; _location.reset(); _namespaces.reset(); _prolog = null; _readCount = 0; _reader = null; _depth = 0; _readIndex = 0; _seqsIndex = 0; _start = 0; _startOffset = 0; _state = STATE_CHARACTERS; _utf8StreamReader.reset(); // Recycles if factory produced. if (_factory != null) _factory.recycle(this); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; StatusImpl status = (StatusImpl) o; if (id != status.id) return false; if (truncated != status.truncated) return false; if (inReplyToStatusId != status.inReplyToStatusId) return false; if (inReplyToUserId != status.inReplyToUserId) return false; if (retweetCount != status.retweetCount) return false; if (favoriteCount != status.favoriteCount) return false; if (replyCount != status.replyCount) return false; if (favorited != status.favorited) return false; if (retweeted != status.retweeted) return false; if (descendentReplyCount != status.descendentReplyCount) return false; if (possiblySensitive != status.possiblySensitive) return false; if (createdAt != null ? !createdAt.equals(status.createdAt) : status.createdAt != null) return false; if (text != null ? !text.equals(status.text) : status.text != null) return false; if (source != null ? !source.equals(status.source) : status.source != null) return false; if (entities != null ? !entities.equals(status.entities) : status.entities != null) return false; if (extendedEntities != null ? !extendedEntities.equals(status.extendedEntities) : status.extendedEntities != null) return false; if (inReplyToScreenName != null ? !inReplyToScreenName.equals(status.inReplyToScreenName) : status.inReplyToScreenName != null) return false; if (user != null ? !user.equals(status.user) : status.user != null) return false; if (geo != null ? !geo.equals(status.geo) : status.geo != null) return false; if (place != null ? !place.equals(status.place) : status.place != null) return false; if (currentUserRetweet != null ? !currentUserRetweet.equals(status.currentUserRetweet) : status.currentUserRetweet != null) return false; if (!Arrays.equals(contributors, status.contributors)) return false; if (lang != null ? !lang.equals(status.lang) : status.lang != null) return false; if (retweetedStatus != null ? !retweetedStatus.equals(status.retweetedStatus) : status.retweetedStatus != null) return false; if (quotedStatus != null ? !quotedStatus.equals(status.quotedStatus) : status.quotedStatus != null) return false; return !(card != null ? !card.equals(status.card) : status.card != null); }
// Implements XMLStreamReader Interface. public Object getProperty(String name) throws IllegalArgumentException { if (name.equals(XMLInputFactory.IS_COALESCING)) { return Boolean.TRUE; } else if (name.equals(XMLInputFactory.ENTITIES)) { return _entities.getEntitiesMapping(); } else { throw new IllegalArgumentException("Property: " + name + " not supported"); } }
@Override public UserMentionEntity[] getUserMentionEntities() { if (entities == null) return null; return entities.getUserMentions(); }
@Override public UrlEntity[] getUrlEntities() { if (entities == null) return null; return entities.getUrls(); }
@Override public MediaEntity[] getMediaEntities() { if (entities == null) return null; return entities.getMedia(); }
@Override public HashtagEntity[] getHashtagEntities() { if (entities == null) return null; return entities.getHashtags(); }
@Override public MediaEntity[] getExtendedMediaEntities() { if (extendedEntities == null) return null; return extendedEntities.getMedia(); }
/** * Defines a custom entities to replacement text mapping for this reader. For example:[code] * FastMap<String, String> HTML_ENTITIES = new FastMap<String, String>(); * HTML_ENTITIES.put("nbsp", " "); HTML_ENTITIES.put("copy", "©"); HTML_ENTITIES.put("eacute", * "é"); ... XMLStreamReaderImpl reader = new XMLStreamReaderImpl(); * reader.setEntities(HTML_ENTITIES); [/code] The entities mapping may be changed dynamically * (e.g. after reading the DTD and all external entities references are resolved). * * @param entities the entities to replacement texts mapping (both must be <code>CharSequence * </code> instances). */ public void setEntities(Map<String, String> entities) { _entities.setEntitiesMapping(entities); }