package rocks.inspectit.shared.cs.indexing.indexer.impl;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.communication.data.InvocationSequenceData;
import rocks.inspectit.shared.all.indexing.IIndexQuery;
import rocks.inspectit.shared.cs.indexing.indexer.AbstractSharedInstanceBranchIndexer;
import rocks.inspectit.shared.cs.indexing.indexer.IBranchIndexer;
import rocks.inspectit.shared.cs.indexing.storage.impl.StorageIndexQuery;
/**
* Special indexer, that indexes invocations without children in one branch and every other object,
* including invocations with children, in second one.
*
* @author Ivan Senic
*
* @param <E>
*/
public class InvocationChildrenIndexer<E extends DefaultData> extends AbstractSharedInstanceBranchIndexer<E> implements IBranchIndexer<E> {
/**
* {@inheritDoc}
*/
@Override
public Object getKey(E element) {
if (element instanceof InvocationSequenceData) {
InvocationSequenceData invoc = (InvocationSequenceData) element;
if ((invoc.getNestedSequences() == null) || invoc.getNestedSequences().isEmpty()) {
return Boolean.TRUE;
}
}
return Boolean.FALSE;
}
/**
* {@inheritDoc}
*/
@Override
public Object[] getKeys(IIndexQuery query) {
Object[] keys = new Object[1];
if (query instanceof StorageIndexQuery) {
if (((StorageIndexQuery) query).isOnlyInvocationsWithoutChildren()) {
keys[0] = Boolean.TRUE;
} else {
keys[0] = Boolean.FALSE;
}
} else {
keys[0] = Boolean.FALSE;
}
return keys;
}
}