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 Map<String, Topic> configTopics = new HashMap(); // attached object cache 022 023 private final ViewConfigurationModel model; // underlying model 024 private final RoleModel configurable; 025 026 private final EmbeddedService dms; 027 028 // ---------------------------------------------------------------------------------------------------- Constructors 029 030 AttachedViewConfiguration(RoleModel configurable, ViewConfigurationModel model, EmbeddedService dms) { 031 this.configurable = configurable; 032 this.model = model; 033 this.dms = dms; 034 initConfigTopics(); 035 } 036 037 // -------------------------------------------------------------------------------------------------- Public Methods 038 039 // === ViewConfiguration Implementation === 040 041 @Override 042 public Iterable<Topic> getConfigTopics() { 043 return configTopics.values(); 044 } 045 046 @Override 047 public void addSetting(String configTypeUri, String settingUri, Object value) { 048 Topic configTopic = getConfigTopic(configTypeUri); 049 if (configTopic == null) { 050 // update DB 051 configTopic = dms.typeStorage.storeViewConfigTopic(configurable, new TopicModel(configTypeUri)); 052 // update memory 053 model.addConfigTopic(configTopic.getModel()); 054 // update attached object cache 055 addConfigTopic(configTopic); 056 } 057 configTopic.getChildTopics().set(settingUri, value); 058 } 059 060 @Override 061 public void updateConfigTopic(TopicModel configTopic) { 062 model.updateConfigTopic(configTopic); 063 } 064 065 // --- 066 067 @Override 068 public ViewConfigurationModel getModel() { 069 return model; 070 } 071 072 // ------------------------------------------------------------------------------------------------- Private Methods 073 074 private void initConfigTopics() { 075 for (TopicModel configTopic : model.getConfigTopics()) { 076 addConfigTopic(new AttachedTopic(configTopic, dms)); 077 } 078 } 079 080 // --- 081 082 private Topic getConfigTopic(String configTypeUri) { 083 return configTopics.get(configTypeUri); 084 } 085 086 private void addConfigTopic(Topic configTopic) { 087 configTopics.put(configTopic.getTypeUri(), configTopic); 088 } 089 }