/** * Copyright (c) 2002-2010 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.neo4j.util; import java.util.Iterator; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.RelationshipType; /** * A String collection, persistent in Neo4j. */ public class GraphDbStringSet extends RelationshipSet<String> { private static final String VALUE_KEY = "value"; /** * @param node the {@link Node} which is the collection node. * @param type the relationship type to use internally for each element. */ public GraphDbStringSet( Node node, RelationshipType type ) { super( node, type ); } @Override protected Node getNodeFromItem( Object item ) { String value = ( String ) item; Node node = this.getUnderlyingNode().getGraphDatabase().createNode(); node.setProperty( VALUE_KEY, value ); return node; } @Override protected String newObject( Node node, Relationship relationship ) { return ( String ) node.getProperty( VALUE_KEY ); } @Override protected Relationship findRelationship( Object item ) { String value = ( String ) item; Relationship result = null; Iterator<Relationship> itr = this.getAllRelationships(); while ( itr.hasNext() ) { Relationship rel = itr.next(); Node node = rel.getOtherNode( this.getUnderlyingNode() ); String nodeValue = newObject( node, rel ); if ( value.equals( nodeValue ) ) { result = rel; break; } } return result; } @Override protected void removeItem( Relationship rel ) { Node node = this.getOtherNode( rel ); super.removeItem( rel ); node.delete(); } }