package rocks.inspectit.shared.cs.indexing.indexer.impl;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.indexing.IIndexQuery;
import rocks.inspectit.shared.cs.indexing.ITreeComponent;
import rocks.inspectit.shared.cs.indexing.indexer.AbstractSharedInstanceBranchIndexer;
import rocks.inspectit.shared.cs.indexing.indexer.IBranchIndexer;
/**
* {@link IBranchIndexer} that makes indexes based on a object class. Thus all same object types
* will be in one {@link ITreeComponent}.
*
* @author Ivan Senic
*
* @param <E>
*/
public class ObjectTypeIndexer<E extends DefaultData> extends AbstractSharedInstanceBranchIndexer<E> implements IBranchIndexer<E> {
/**
* {@inheritDoc}
*/
@Override
public Object getKey(E element) {
return element.getClass();
}
/**
* {@inheritDoc}
*/
@Override
public Object[] getKeys(IIndexQuery query) {
if (null == query.getObjectClasses()) {
return new Object[0];
}
Object[] keys = new Object[query.getObjectClasses().size()];
int index = 0;
for (Object key : query.getObjectClasses()) {
keys[index++] = key;
}
return keys;
}
/**
* {@inheritDoc}
*/
@Override
public boolean sharedInstance() {
return true;
}
}