001package de.deepamehta.storage.neo4j; 002 003import org.neo4j.graphdb.DynamicRelationshipType; 004import org.neo4j.graphdb.GraphDatabaseService; 005import org.neo4j.graphdb.RelationshipType; 006 007import java.util.HashMap; 008import java.util.Map; 009import java.util.logging.Logger; 010 011 012 013class 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}