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 if (newTypeUri == null) { 121 return; 122 } 123 // 124 String typeUri = getTypeUri(); 125 if (!typeUri.equals(newTypeUri)) { 126 super.update(newModel, clientState, directives); 127 } 128 } 129 130 // --- 131 132 private void updateParentCardinality(String newParentCardinalityUri, ClientState clientState, 133 Directives directives) { 134 if (newParentCardinalityUri == null) { 135 return; 136 } 137 // 138 String parentCardinalityUri = getParentCardinalityUri(); 139 if (!parentCardinalityUri.equals(newParentCardinalityUri)) { 140 logger.info("### Changing parent cardinality URI from \"" + parentCardinalityUri + "\" -> \"" + 141 newParentCardinalityUri + "\""); 142 setParentCardinalityUri(newParentCardinalityUri, clientState, directives); 143 } 144 } 145 146 private void updateChildCardinality(String newChildCardinalityUri, ClientState clientState, 147 Directives directives) { 148 if (newChildCardinalityUri == null) { 149 return; 150 } 151 // 152 String childCardinalityUri = getChildCardinalityUri(); 153 if (!childCardinalityUri.equals(newChildCardinalityUri)) { 154 logger.info("### Changing child cardinality URI from \"" + childCardinalityUri + "\" -> \"" + 155 newChildCardinalityUri + "\""); 156 setChildCardinalityUri(newChildCardinalityUri, clientState, directives); 157 } 158 } 159 160 161 162 // === Attached Object Cache === 163 164 private void initViewConfig() { 165 RoleModel configurable = dms.typeStorage.createConfigurableAssocDef(getId()); // ### ID is uninitialized 166 this.viewConfig = new AttachedViewConfiguration(configurable, getModel().getViewConfigModel(), dms); 167 } 168 }