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 getCustomAssocTypeUri() { 043 return getModel().getCustomAssocTypeUri(); 044 } 045 046 @Override 047 public String getInstanceLevelAssocTypeUri() { 048 return getModel().getInstanceLevelAssocTypeUri(); 049 } 050 051 @Override 052 public String getParentTypeUri() { 053 return getModel().getParentTypeUri(); 054 } 055 056 @Override 057 public String getChildTypeUri() { 058 return getModel().getChildTypeUri(); 059 } 060 061 @Override 062 public String getParentCardinalityUri() { 063 return getModel().getParentCardinalityUri(); 064 } 065 066 @Override 067 public String getChildCardinalityUri() { 068 return getModel().getChildCardinalityUri(); 069 } 070 071 @Override 072 public ViewConfiguration getViewConfig() { 073 return viewConfig; 074 } 075 076 // --- 077 078 @Override 079 public AssociationDefinitionModel getModel() { 080 return (AssociationDefinitionModel) super.getModel(); 081 } 082 083 // --- 084 085 @Override 086 public void setCustomAssocTypeUri(String customAssocTypeUri) { 087 if (customAssocTypeUri != null) { 088 getChildTopics().setRef("dm4.core.assoc_type", customAssocTypeUri); 089 } else { 090 getChildTopics().setDeletionRef("dm4.core.assoc_type", customAssocTypeUri); 091 } 092 } 093 094 // --- 095 096 @Override 097 public void setParentCardinalityUri(String parentCardinalityUri) { 098 // update memory 099 getModel().setParentCardinalityUri(parentCardinalityUri); 100 // update DB 101 dms.typeStorage.storeParentCardinalityUri(getId(), parentCardinalityUri); 102 } 103 104 @Override 105 public void setChildCardinalityUri(String childCardinalityUri) { 106 // update memory 107 getModel().setChildCardinalityUri(childCardinalityUri); 108 // update DB 109 dms.typeStorage.storeChildCardinalityUri(getId(), childCardinalityUri); 110 } 111 112 113 114 // === Updating === 115 116 @Override 117 public void update(AssociationDefinitionModel newModel) { 118 // assoc type 119 updateAssocTypeUri(newModel); 120 // custom assoc type 121 updateCustomAssocTypeUri(newModel.getCustomAssocTypeUri()); 122 // cardinality 123 updateParentCardinality(newModel.getParentCardinalityUri()); 124 updateChildCardinality(newModel.getChildCardinalityUri()); 125 } 126 127 // ------------------------------------------------------------------------------------------------- Private Methods 128 129 130 131 // === Update === 132 133 private void updateAssocTypeUri(AssociationDefinitionModel newModel) { 134 String newTypeUri = newModel.getTypeUri(); 135 // abort if no update is requested 136 if (newTypeUri == null) { 137 return; 138 } 139 // 140 String typeUri = getTypeUri(); 141 if (!typeUri.equals(newTypeUri)) { 142 super.update(newModel); 143 } 144 } 145 146 private void updateCustomAssocTypeUri(String newCustomAssocTypeUri) { 147 /* abort if no update is requested ### TODO 148 if (newCustomAssocTypeUri == null) { 149 return; 150 } */ 151 // 152 String customAssocTypeUri = getCustomAssocTypeUri(); 153 if (customAssocTypeUri != null ? !customAssocTypeUri.equals(newCustomAssocTypeUri) : 154 newCustomAssocTypeUri != null) { 155 logger.info("### Changing custom association type URI from \"" + customAssocTypeUri + "\" -> \"" + 156 newCustomAssocTypeUri + "\""); 157 setCustomAssocTypeUri(newCustomAssocTypeUri); 158 } 159 } 160 161 // --- 162 163 private void updateParentCardinality(String newParentCardinalityUri) { 164 // abort if no update is requested 165 if (newParentCardinalityUri == null) { 166 return; 167 } 168 // 169 String parentCardinalityUri = getParentCardinalityUri(); 170 if (!parentCardinalityUri.equals(newParentCardinalityUri)) { 171 logger.info("### Changing parent cardinality URI from \"" + parentCardinalityUri + "\" -> \"" + 172 newParentCardinalityUri + "\""); 173 setParentCardinalityUri(newParentCardinalityUri); 174 } 175 } 176 177 private void updateChildCardinality(String newChildCardinalityUri) { 178 // abort if no update is requested 179 if (newChildCardinalityUri == null) { 180 return; 181 } 182 // 183 String childCardinalityUri = getChildCardinalityUri(); 184 if (!childCardinalityUri.equals(newChildCardinalityUri)) { 185 logger.info("### Changing child cardinality URI from \"" + childCardinalityUri + "\" -> \"" + 186 newChildCardinalityUri + "\""); 187 setChildCardinalityUri(newChildCardinalityUri); 188 } 189 } 190 191 192 193 // === Attached Object Cache === 194 195 private void initViewConfig() { 196 RoleModel configurable = dms.typeStorage.createConfigurableAssocDef(getId()); // ### ID is uninitialized 197 this.viewConfig = new AttachedViewConfiguration(configurable, getModel().getViewConfigModel(), dms); 198 } 199 }