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