001    package de.deepamehta.storage.neo4j;
002    
003    import org.neo4j.graphdb.DynamicRelationshipType;
004    import org.neo4j.graphdb.GraphDatabaseService;
005    import org.neo4j.graphdb.RelationshipType;
006    
007    import java.util.HashMap;
008    import java.util.Map;
009    import java.util.logging.Logger;
010    
011    
012    
013    class RelationtypeCache {
014    
015        // ---------------------------------------------------------------------------------------------- Instance Variables
016    
017        private final Map<String, RelationshipType> relTypeCache;
018    
019        private final Logger logger = Logger.getLogger(getClass().getName());
020    
021        // ---------------------------------------------------------------------------------------------------- Constructors
022    
023        RelationtypeCache(GraphDatabaseService neo4j) {
024            this.relTypeCache = createRelTypeCache(neo4j);
025        }
026    
027        // ----------------------------------------------------------------------------------------- Package Private Methods
028    
029        RelationshipType get(String typeName) {
030            RelationshipType relType = relTypeCache.get(typeName);
031            if (relType == null) {
032                logger.fine("Creating Neo4j relationship type \"" + typeName + "\" dynamically");
033                relType = DynamicRelationshipType.withName(typeName);
034                relTypeCache.put(typeName, relType);
035            }
036            return relType;
037        }
038    
039        // ------------------------------------------------------------------------------------------------- Private Methods
040    
041        private Map<String, RelationshipType> createRelTypeCache(GraphDatabaseService neo4j) {
042            Map<String, RelationshipType> relTypeCache = new HashMap();
043            for (RelationshipType relType : neo4j.getRelationshipTypes()) {
044                relTypeCache.put(relType.name(), relType);
045            }
046            return relTypeCache;
047        }
048    }