001 package de.deepamehta.plugins.boxrenderer.dom; 002 003 import de.deepamehta.plugins.topicmaps.ViewmodelCustomizer; 004 import de.deepamehta.plugins.topicmaps.model.ViewProperties; 005 import de.deepamehta.plugins.topicmaps.service.TopicmapsService; 006 007 import de.deepamehta.core.Association; 008 import de.deepamehta.core.RelatedTopic; 009 import de.deepamehta.core.osgi.PluginActivator; 010 import de.deepamehta.core.service.Inject; 011 import de.deepamehta.core.service.PluginService; 012 013 import java.util.logging.Logger; 014 015 016 017 public class BoxRendererPlugin extends PluginActivator implements ViewmodelCustomizer { 018 019 // ------------------------------------------------------------------------------------------------------- Constants 020 021 private static final String PROP_COLOR = "dm4.boxrenderer.color"; 022 private static final String PROP_EXPANDED = "dm4.boxrenderer.expanded"; 023 024 // ---------------------------------------------------------------------------------------------- Instance Variables 025 026 // Note: this instance variable is not used but we must declare it in order to initiate service tracking. 027 // The Topicmaps service is accessed only on-the-fly within the serviceArrived() and serviceGone() hooks. 028 @Inject 029 private TopicmapsService topicmapsService; 030 031 private Logger logger = Logger.getLogger(getClass().getName()); 032 033 // -------------------------------------------------------------------------------------------------- Public Methods 034 035 // *** Hook Implementations *** 036 037 @Override 038 public void serviceArrived(PluginService service) { 039 ((TopicmapsService) service).registerViewmodelCustomizer(this); 040 } 041 042 @Override 043 public void serviceGone(PluginService service) { 044 // Note 1: unregistering is crucial. Otherwise the Topicmaps plugin would hold a viewmodel customizer with 045 // a stale dms instance as soon as the Box Renderer is redeployed. A subsequent storeViewProperties() call 046 // (see below) would fail. 047 // Note 2: we must unregister via serviceGone() hook, that is immediately when the Topicmaps service is about 048 // to go away. Using the shutdown() hook instead would be too late as the Topicmaps service might already gone. 049 ((TopicmapsService) service).unregisterViewmodelCustomizer(this); 050 } 051 052 // *** ViewmodelCustomizer Implementation *** 053 054 @Override 055 public void enrichViewProperties(RelatedTopic topic, ViewProperties viewProps) { 056 boolean expanded = _enrichViewProperties(topic, viewProps); 057 if (expanded) { 058 topic.loadChildTopics("dm4.notes.text"); 059 } 060 } 061 062 // ------------------------------------------------------------------------------------------------- Private Methods 063 064 private boolean _enrichViewProperties(RelatedTopic topic, ViewProperties viewProps) { 065 Association mapcontextAssoc = topic.getRelatingAssociation(); 066 // 1) color 067 if (mapcontextAssoc.hasProperty(PROP_COLOR)) { 068 String color = (String) mapcontextAssoc.getProperty(PROP_COLOR); 069 viewProps.put(PROP_COLOR, color); 070 } 071 // 2) expanded 072 boolean expanded = false; 073 if (topic.getTypeUri().equals("dm4.notes.note")) { 074 if (mapcontextAssoc.hasProperty(PROP_EXPANDED)) { 075 expanded = (Boolean) mapcontextAssoc.getProperty(PROP_EXPANDED); 076 viewProps.put(PROP_EXPANDED, expanded); 077 } 078 } 079 return expanded; 080 } 081 }