package de.deepamehta.boxrenderer.dom;
import de.deepamehta.topicmaps.TopicmapsService;
import de.deepamehta.topicmaps.ViewmodelCustomizer;
import de.deepamehta.core.Association;
import de.deepamehta.core.RelatedTopic;
import de.deepamehta.core.model.topicmaps.ViewProperties;
import de.deepamehta.core.osgi.PluginActivator;
import de.deepamehta.core.service.Inject;
import java.util.logging.Logger;
public class BoxRendererPlugin extends PluginActivator implements ViewmodelCustomizer {
// ------------------------------------------------------------------------------------------------------- Constants
private static final String PROP_COLOR = "dm4.boxrenderer.color";
private static final String PROP_EXPANDED = "dm4.boxrenderer.expanded";
// ---------------------------------------------------------------------------------------------- Instance Variables
// Note: this instance variable is not used but we must declare it in order to initiate service tracking.
// The Topicmaps service is accessed only on-the-fly within the serviceArrived() and serviceGone() hooks.
@Inject
private TopicmapsService topicmapsService;
private Logger logger = Logger.getLogger(getClass().getName());
// -------------------------------------------------------------------------------------------------- Public Methods
// *** Hook Implementations ***
@Override
public void serviceArrived(Object service) {
((TopicmapsService) service).registerViewmodelCustomizer(this);
}
@Override
public void serviceGone(Object service) {
// Note 1: unregistering is crucial. Otherwise the Topicmaps plugin would hold a viewmodel customizer with
// a stale dm4 instance as soon as the Box Renderer is redeployed. A subsequent storeViewProperties() call
// (see below) would fail.
// Note 2: we must unregister via serviceGone() hook, that is immediately when the Topicmaps service is about
// to go away. Using the shutdown() hook instead would be too late as the Topicmaps service might already gone.
((TopicmapsService) service).unregisterViewmodelCustomizer(this);
}
// *** ViewmodelCustomizer Implementation ***
@Override
public void enrichViewProperties(RelatedTopic topic, ViewProperties viewProps) {
boolean expanded = _enrichViewProperties(topic, viewProps);
if (expanded) {
topic.loadChildTopics("dm4.notes.text");
}
}
// ------------------------------------------------------------------------------------------------- Private Methods
private boolean _enrichViewProperties(RelatedTopic topic, ViewProperties viewProps) {
Association mapcontextAssoc = topic.getRelatingAssociation();
// 1) color
if (mapcontextAssoc.hasProperty(PROP_COLOR)) {
String color = (String) mapcontextAssoc.getProperty(PROP_COLOR);
viewProps.put(PROP_COLOR, color);
}
// 2) expanded
boolean expanded = false;
if (topic.getTypeUri().equals("dm4.notes.note")) {
if (mapcontextAssoc.hasProperty(PROP_EXPANDED)) {
expanded = (Boolean) mapcontextAssoc.getProperty(PROP_EXPANDED);
viewProps.put(PROP_EXPANDED, expanded);
}
}
return expanded;
}
}