001 package de.deepamehta.core.impl; 002 003 import de.deepamehta.core.Topic; 004 import de.deepamehta.core.ViewConfiguration; 005 import de.deepamehta.core.model.RoleModel; 006 import de.deepamehta.core.model.TopicModel; 007 import de.deepamehta.core.model.ViewConfigurationModel; 008 009 import java.util.HashMap; 010 import java.util.Map; 011 012 013 014 /** 015 * A view configuration that is attached to the {@link DeepaMehtaService}. 016 */ 017 class AttachedViewConfiguration implements ViewConfiguration { 018 019 // ---------------------------------------------------------------------------------------------- Instance Variables 020 021 private final RoleModel configurable; 022 private final ViewConfigurationModel model; 023 private final EmbeddedService dms; 024 025 private Map<String, Topic> configTopics = new HashMap(); // attached object cache 026 027 // ---------------------------------------------------------------------------------------------------- Constructors 028 029 AttachedViewConfiguration(RoleModel configurable, ViewConfigurationModel model, EmbeddedService dms) { 030 this.configurable = configurable; 031 this.model = model; 032 this.dms = dms; 033 initConfigTopics(); 034 } 035 036 // -------------------------------------------------------------------------------------------------- Public Methods 037 038 // === ViewConfiguration Implementation === 039 040 @Override 041 public Iterable<Topic> getConfigTopics() { 042 return configTopics.values(); 043 } 044 045 @Override 046 public void addSetting(String configTypeUri, String settingUri, Object value) { 047 // update memory 048 TopicModel createdTopicModel = model.addSetting(configTypeUri, settingUri, value); 049 // update DB 050 if (createdTopicModel != null) { 051 // attached object cache 052 addConfigTopic(createdTopicModel); 053 // Note: a new created view config topic model needs an ID (required for setting up access control). 054 // So, the storage layer must operate on that very topic model (instead of creating another one). 055 dms.typeStorage.storeViewConfigTopic(configurable, createdTopicModel); 056 } else { 057 dms.typeStorage.storeViewConfigSetting(configurable, configTypeUri, settingUri, value); 058 } 059 } 060 061 @Override 062 public void updateConfigTopic(TopicModel configTopic) { 063 model.updateConfigTopic(configTopic); 064 } 065 066 // --- 067 068 @Override 069 public ViewConfigurationModel getModel() { 070 return model; 071 } 072 073 // ------------------------------------------------------------------------------------------------- Private Methods 074 075 private void initConfigTopics() { 076 for (TopicModel configTopic : model.getConfigTopics()) { 077 addConfigTopic(configTopic); 078 } 079 } 080 081 private void addConfigTopic(TopicModel configTopic) { 082 configTopics.put(configTopic.getTypeUri(), new AttachedTopic(configTopic, dms)); 083 } 084 }