001package de.deepamehta.storage.neo4j;
002
003import de.deepamehta.core.model.AssociationRoleModel;
004import de.deepamehta.core.model.RoleModel;
005import de.deepamehta.core.model.TopicRoleModel;
006
007import org.neo4j.graphdb.Node;
008
009
010
011enum NodeType {
012
013    TOPIC {
014        @Override
015        RoleModel createRoleModel(Node node, String roleTypeUri) {
016            return new TopicRoleModel(node.getId(), roleTypeUri);
017        }
018
019        @Override
020        String error(Node node) {
021            return "ID " + node.getId() + " refers to an Association when the caller expects a Topic";
022        }
023    },
024    ASSOC {
025        @Override
026        RoleModel createRoleModel(Node node, String roleTypeUri) {
027            return new AssociationRoleModel(node.getId(), roleTypeUri);
028        }
029
030        @Override
031        String error(Node node) {
032            return "ID " + node.getId() + " refers to a Topic when the caller expects an Association";
033        }
034    };
035
036    // ---
037
038    abstract RoleModel createRoleModel(Node node, String roleTypeUri);
039
040    abstract String error(Node node);
041
042    // ---
043
044    static NodeType of(Node node) {
045        String type = (String) node.getProperty("node_type");
046        return valueOf(type.toUpperCase());
047    }
048
049    boolean isTypeOf(Node node) {
050        return node.getProperty("node_type").equals(stringify());
051    }
052
053    String stringify() {
054        return name().toLowerCase();
055    }
056}