001 package de.deepamehta.storage.neo4j; 002 003 import de.deepamehta.core.model.AssociationRoleModel; 004 import de.deepamehta.core.model.RoleModel; 005 import de.deepamehta.core.model.TopicRoleModel; 006 007 import org.neo4j.graphdb.Node; 008 009 010 011 enum 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 }