001package de.mikromedia.stableviews;
002
003
004
005import java.util.logging.Logger;
006import javax.ws.rs.Path;
007import javax.ws.rs.PathParam;
008import javax.ws.rs.Produces;
009import javax.ws.rs.Consumes;
010
011import de.deepamehta.core.Topic;
012
013import de.deepamehta.core.osgi.PluginActivator;
014import de.deepamehta.core.service.Inject;
015import de.deepamehta.core.service.Transactional;
016import de.deepamehta.plugins.topicmaps.TopicmapsService;
017import de.deepamehta.plugins.topicmaps.model.TopicmapViewmodel;
018import de.mikromedia.stableviews.model.StableviewsTopicmapModel;
019import javax.ws.rs.GET;
020import javax.ws.rs.POST;
021import javax.ws.rs.core.MediaType;
022
023
024/**
025 * @author Malte Reißig (<malte@mikromedia.de>)
026 * @website http://github.com/mukil/stableviews
027 * @version 0.4-SNAPSHOT - compatible with DM 4.7
028 *
029 */
030@Path("/stableview")
031@Consumes(MediaType.APPLICATION_JSON)
032@Produces(MediaType.APPLICATION_JSON)
033public class StableviewsPlugin extends PluginActivator {
034
035    private Logger log = Logger.getLogger(getClass().getName());
036
037    // --- Topicmap Extension URIs
038
039    static final String PROP_MAP_STYLESHEET = "dm4.topicmaps.stylesheet";
040
041    @Inject
042    private TopicmapsService tmService;
043
044    @GET
045    @Path("/{id}")
046    public StableviewsTopicmapModel getStyledTopicmap(@PathParam("id") long topicmapId) {
047        TopicmapViewmodel topicmapViewModel = tmService.getTopicmap(topicmapId, true);
048        StableviewsTopicmapModel svtm = new StableviewsTopicmapModel(topicmapViewModel);
049        enrichWithCustomStylesheet(svtm, topicmapViewModel.getId());
050        return svtm;
051    }
052
053    @POST
054    @Path("/topicmap/stylesheet/{styleSheetPath}/{id}")
055    @Transactional
056    public void setTopicmapStylesheet(@PathParam("styleSheetPath") String cssPath, @PathParam("id") long topicmapId) {
057        Topic topicmap = dms.getTopic(topicmapId);
058        if (topicmap.getTypeUri().equals("dm4.topicmaps.topicmap")) {
059            log.info("Set Topicmap Stylesheet on " + topicmap.getSimpleValue());
060            topicmap.setProperty(PROP_MAP_STYLESHEET, cssPath, false);
061        }
062    }
063
064    public void enrichWithCustomStylesheet(StableviewsTopicmapModel topic, long topicmapId) {
065        Topic topicmap = dms.getTopic(topicmapId);
066        if (topicmap.getTypeUri().equals("dm4.topicmaps.topicmap")) {
067            String mapStyleURL = "/de.mikromedia.stableviews/assets/css/custom-graph.css";
068            if (topicmap.hasProperty(PROP_MAP_STYLESHEET)) {
069                mapStyleURL = (String) topicmap.getProperty(PROP_MAP_STYLESHEET);
070            }
071            topic.setMapStylesheet(mapStyleURL);
072        }
073    }
074}