package org.neo4j.meta.model;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.util.RelationshipSet;
class ObjectCollection<T extends MetaModelObject>
extends RelationshipSet<T>
{
private MetaModel model;
private Class<T> cls;
ObjectCollection( GraphDatabaseService graphDb, Node node,
RelationshipType relType, Direction direction,
MetaModel model, Class<T> cls )
{
super( graphDb, node, relType, direction );
this.model = model;
this.cls = cls;
}
protected MetaModel model()
{
return this.model;
}
@Override
protected Node getNodeFromItem( Object item )
{
return ( ( MetaModelObject ) item ).node();
}
@Override
protected T newObject( Node node, Relationship rel )
{
try
{
return cls.getConstructor( MetaModel.class,
Node.class ).newInstance( model(), node );
}
catch ( Exception e )
{
throw new RuntimeException( e );
}
}
@Override
protected void removeItem( Relationship rel )
{
throw new UnsupportedOperationException( "Not supported, as of yet" );
}
}