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