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}