001 package de.deepamehta.core.impl; 002 003 import de.deepamehta.core.AssociationDefinition; 004 import de.deepamehta.core.ViewConfiguration; 005 import de.deepamehta.core.model.AssociationDefinitionModel; 006 import de.deepamehta.core.model.RoleModel; 007 import de.deepamehta.core.model.TopicModel; 008 009 import java.util.logging.Logger; 010 011 012 013 /** 014 * An association definition that is attached to the {@link DeepaMehtaService}. 015 */ 016 class AttachedAssociationDefinition extends AttachedAssociation implements AssociationDefinition { 017 018 // ---------------------------------------------------------------------------------------------- Instance Variables 019 020 private AttachedViewConfiguration viewConfig; // attached object cache 021 022 private Logger logger = Logger.getLogger(getClass().getName()); 023 024 // ---------------------------------------------------------------------------------------------------- Constructors 025 026 AttachedAssociationDefinition(AssociationDefinitionModel model, EmbeddedService dms) { 027 super(model, dms); 028 initViewConfig(); 029 } 030 031 // -------------------------------------------------------------------------------------------------- Public Methods 032 033 034 035 // ******************************************** 036 // *** AssociationDefinition Implementation *** 037 // ******************************************** 038 039 040 041 @Override 042 public String getInstanceLevelAssocTypeUri() { 043 return getModel().getInstanceLevelAssocTypeUri(); 044 } 045 046 @Override 047 public String getParentTypeUri() { 048 return getModel().getParentTypeUri(); 049 } 050 051 @Override 052 public String getChildTypeUri() { 053 return getModel().getChildTypeUri(); 054 } 055 056 @Override 057 public String getParentCardinalityUri() { 058 return getModel().getParentCardinalityUri(); 059 } 060 061 @Override 062 public String getChildCardinalityUri() { 063 return getModel().getChildCardinalityUri(); 064 } 065 066 @Override 067 public ViewConfiguration getViewConfig() { 068 return viewConfig; 069 } 070 071 // --- 072 073 @Override 074 public AssociationDefinitionModel getModel() { 075 return (AssociationDefinitionModel) super.getModel(); 076 } 077 078 // --- 079 080 @Override 081 public void setParentCardinalityUri(String parentCardinalityUri) { 082 // update memory 083 getModel().setParentCardinalityUri(parentCardinalityUri); 084 // update DB 085 dms.typeStorage.storeParentCardinalityUri(getId(), parentCardinalityUri); 086 } 087 088 @Override 089 public void setChildCardinalityUri(String childCardinalityUri) { 090 // update memory 091 getModel().setChildCardinalityUri(childCardinalityUri); 092 // update DB 093 dms.typeStorage.storeChildCardinalityUri(getId(), childCardinalityUri); 094 } 095 096 097 098 // === Updating === 099 100 @Override 101 public void update(AssociationDefinitionModel newModel) { 102 // assoc type 103 updateAssocTypeUri(newModel); 104 // cardinality 105 updateParentCardinality(newModel.getParentCardinalityUri()); 106 updateChildCardinality(newModel.getChildCardinalityUri()); 107 } 108 109 // ------------------------------------------------------------------------------------------------- Private Methods 110 111 112 113 // === Update === 114 115 private void updateAssocTypeUri(AssociationDefinitionModel newModel) { 116 String newTypeUri = newModel.getTypeUri(); 117 // abort if no update is requested 118 if (newTypeUri == null) { 119 return; 120 } 121 // 122 String typeUri = getTypeUri(); 123 if (!typeUri.equals(newTypeUri)) { 124 super.update(newModel); 125 } 126 } 127 128 // --- 129 130 private void updateParentCardinality(String newParentCardinalityUri) { 131 // abort if no update is requested 132 if (newParentCardinalityUri == null) { 133 return; 134 } 135 // 136 String parentCardinalityUri = getParentCardinalityUri(); 137 if (!parentCardinalityUri.equals(newParentCardinalityUri)) { 138 logger.info("### Changing parent cardinality URI from \"" + parentCardinalityUri + "\" -> \"" + 139 newParentCardinalityUri + "\""); 140 setParentCardinalityUri(newParentCardinalityUri); 141 } 142 } 143 144 private void updateChildCardinality(String newChildCardinalityUri) { 145 // abort if no update is requested 146 if (newChildCardinalityUri == null) { 147 return; 148 } 149 // 150 String childCardinalityUri = getChildCardinalityUri(); 151 if (!childCardinalityUri.equals(newChildCardinalityUri)) { 152 logger.info("### Changing child cardinality URI from \"" + childCardinalityUri + "\" -> \"" + 153 newChildCardinalityUri + "\""); 154 setChildCardinalityUri(newChildCardinalityUri); 155 } 156 } 157 158 159 160 // === Attached Object Cache === 161 162 private void initViewConfig() { 163 RoleModel configurable = dms.typeStorage.createConfigurableAssocDef(getId()); // ### ID is uninitialized 164 this.viewConfig = new AttachedViewConfiguration(configurable, getModel().getViewConfigModel(), dms); 165 } 166 }