001 package de.deepamehta.plugins.boxrenderer.dom; 002 003 import de.deepamehta.plugins.topicmaps.ViewmodelCustomizer; 004 import de.deepamehta.plugins.topicmaps.service.TopicmapsService; 005 006 import de.deepamehta.core.Topic; 007 import de.deepamehta.core.model.CompositeValueModel; 008 import de.deepamehta.core.osgi.PluginActivator; 009 import de.deepamehta.core.service.PluginService; 010 import de.deepamehta.core.service.annotation.ConsumesService; 011 012 import java.util.logging.Logger; 013 014 015 016 public class BoxRendererPlugin extends PluginActivator implements ViewmodelCustomizer { 017 018 // ------------------------------------------------------------------------------------------------------- Constants 019 020 private static final String PROP_COLOR = "dm4.boxrenderer.color"; 021 private static final String PROP_EXPANDED = "dm4.boxrenderer.expanded"; 022 023 // ---------------------------------------------------------------------------------------------- Instance Variables 024 025 private Logger logger = Logger.getLogger(getClass().getName()); 026 027 // -------------------------------------------------------------------------------------------------- Public Methods 028 029 // *** Hook Implementations *** 030 031 @Override 032 @ConsumesService("de.deepamehta.plugins.topicmaps.service.TopicmapsService") 033 public void serviceArrived(PluginService service) { 034 ((TopicmapsService) service).registerViewmodelCustomizer(this); 035 } 036 037 @Override 038 public void serviceGone(PluginService service) { 039 // Note: unregistering is important. Otherwise the Topicmaps plugin would hold a viewmodel 040 // customizer with a stale dms instance as soon as the Box Renderer is redeployed. 041 // A subsequent storeViewProperties() call (see below) would fail. 042 ((TopicmapsService) service).unregisterViewmodelCustomizer(this); 043 } 044 045 // *** ViewmodelCustomizer Implementation *** 046 047 @Override 048 public void enrichViewProperties(Topic topic, CompositeValueModel viewProps) { 049 boolean expanded = _enrichViewProperties(topic, viewProps); 050 if (expanded) { 051 topic.loadChildTopics("dm4.notes.text"); 052 } 053 } 054 055 @Override 056 public void storeViewProperties(Topic topic, CompositeValueModel viewProps) { 057 storeColor(topic, viewProps); 058 storeExpanded(topic, viewProps); 059 } 060 061 // ------------------------------------------------------------------------------------------------- Private Methods 062 063 private boolean _enrichViewProperties(Topic topic, CompositeValueModel viewProps) { 064 // 1) color 065 if (topic.hasProperty(PROP_COLOR)) { 066 String color = (String) topic.getProperty(PROP_COLOR); 067 viewProps.put(PROP_COLOR, color); 068 } 069 // 2) expanded 070 boolean expanded = false; 071 if (topic.getTypeUri().equals("dm4.notes.note")) { 072 if (topic.hasProperty(PROP_EXPANDED)) { 073 expanded = (Boolean) topic.getProperty(PROP_EXPANDED); 074 viewProps.put(PROP_EXPANDED, expanded); 075 } 076 } 077 return expanded; 078 } 079 080 // --- 081 082 private void storeColor(Topic topic, CompositeValueModel viewProps) { 083 if (viewProps.has(PROP_COLOR)) { 084 String color = viewProps.getString(PROP_COLOR); 085 topic.setProperty(PROP_COLOR, color, false); // addToIndex = false 086 } 087 } 088 089 private void storeExpanded(Topic topic, CompositeValueModel viewProps) { 090 if (viewProps.has(PROP_EXPANDED)) { 091 boolean expanded = viewProps.getBoolean(PROP_EXPANDED); 092 topic.setProperty(PROP_EXPANDED, expanded, false); // addToIndex = false 093 // ### TODO: store the expanded flag *per-topicmap* 094 } 095 } 096 }