in entity-store/src/main/java/jetbrains/exodus/entitystore/iterate/SortIndirectIterable.java [142:235]
protected EntityIterableHandle getHandleImpl() {
return new EntityIterableHandleDecorator(getStore(), getType(), source.getHandle()) {
private final EntityIterableHandleBase sortedLinksHandle = (EntityIterableHandleBase) sortedLinks.getHandle();
@NotNull
private final int[] linkIds = mergeFieldIds(new int[]{linkId}, mergeFieldIds(decorated.getLinkIds(), sortedLinksHandle.getLinkIds()));
@NotNull
@Override
public int[] getLinkIds() {
return linkIds;
}
@Override
public void toString(@NotNull final StringBuilder builder) {
super.toString(builder);
builder.append(sourceTypeId);
builder.append('-');
builder.append(linkId);
builder.append('-');
applyDecoratedToBuilder(builder);
builder.append('-');
sortedLinksHandle.toString(builder);
}
@Override
public void hashCode(@NotNull final EntityIterableHandleHash hash) {
hash.apply(sourceTypeId);
hash.applyDelimiter();
hash.apply(linkId);
hash.applyDelimiter();
super.hashCode(hash);
hash.applyDelimiter();
hash.apply(sortedLinksHandle);
}
@Override
public boolean isMatchedEntityAdded(@NotNull final EntityId added) {
return decorated.isMatchedEntityAdded(added) ||
sortedLinksHandle.isMatchedEntityAdded(added);
}
@Override
public boolean isMatchedEntityDeleted(@NotNull final EntityId deleted) {
return decorated.isMatchedEntityDeleted(deleted) ||
sortedLinksHandle.isMatchedEntityDeleted(deleted);
}
@Override
public boolean isMatchedLinkAdded(@NotNull final EntityId source,
@NotNull final EntityId target,
final int linkId) {
if (SortIndirectIterable.this.linkId == linkId) {
return true;
}
if (decorated.hasLinkId(linkId)) {
if (decorated.isMatchedLinkAdded(source, target, linkId)) {
return true;
}
if (!sortedLinksHandle.hasLinkId(linkId)) {
return false;
}
}
return sortedLinksHandle.isMatchedLinkAdded(source, target, linkId);
}
@Override
public boolean isMatchedLinkDeleted(@NotNull final EntityId source,
@NotNull final EntityId target,
final int linkId) {
if (SortIndirectIterable.this.linkId == linkId) {
return true;
}
if (decorated.hasLinkId(linkId)) {
if (decorated.isMatchedLinkDeleted(source, target, linkId)) {
return true;
}
if (!sortedLinksHandle.hasLinkId(linkId)) {
return false;
}
}
return sortedLinksHandle.isMatchedLinkDeleted(source, target, linkId);
}
@Override
public boolean isMatchedPropertyChanged(@NotNull EntityId id,
final int propertyId,
@Nullable final Comparable oldValue,
@Nullable final Comparable newValue) {
return decorated.isMatchedPropertyChanged(id, propertyId, oldValue, newValue) ||
sortedLinksHandle.isMatchedPropertyChanged(id, propertyId, oldValue, newValue);
}
};
}