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}