You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by og...@apache.org on 2011/04/01 12:53:35 UTC

svn commit: r1087645 - in /incubator/stanbol/branches/http-endpoint-refactoring: commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/ commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/resource/ commons/web/home/src/main/...

Author: ogrisel
Date: Fri Apr  1 10:53:35 2011
New Revision: 1087645

URL: http://svn.apache.org/viewvc?rev=1087645&view=rev
Log:
STANBOL-120: work in progress on dynamic menu

Added:
    incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/NavigationLink.java
Modified:
    incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/JerseyEndpoint.java
    incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/LinkResource.java
    incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/ScriptResource.java
    incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/WebFragment.java
    incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/resource/BaseStanbolResource.java
    incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/HomeWebFragment.java
    incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/resource/StanbolRootResource.java
    incubator/stanbol/branches/http-endpoint-refactoring/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/fragment/EnhancerWebFragment.java

Modified: incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/JerseyEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/JerseyEndpoint.java?rev=1087645&r1=1087644&r2=1087645&view=diff
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/JerseyEndpoint.java (original)
+++ incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/JerseyEndpoint.java Fri Apr  1 10:53:35 2011
@@ -2,6 +2,7 @@ package org.apache.stanbol.commons.web.b
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.List;
@@ -77,10 +78,12 @@ public class JerseyEndpoint {
         // incrementally contribute fragment resources
         List<LinkResource> linkResources = new ArrayList<LinkResource>();
         List<ScriptResource> scriptResources = new ArrayList<ScriptResource>();
+        List<NavigationLink> navigationLinks = new ArrayList<NavigationLink>();
         for (WebFragment fragment : webFragments) {
             log.info("Registering web fragment '{}' into jaxrs application", fragment.getName());
             linkResources.addAll(fragment.getLinkResources());
             scriptResources.addAll(fragment.getScriptResources());
+            navigationLinks.addAll(fragment.getNavigationLinks());
             app.contributeClasses(fragment.getJaxrsResourceClasses());
             app.contributeSingletons(fragment.getJaxrsResourceSingletons());
             app.contributeTemplateLoader(fragment.getTemplateLoader());
@@ -89,6 +92,9 @@ public class JerseyEndpoint {
                 new BundleHttpContext(fragment));
             registeredAliases.add(resourceAlias);
         }
+        Collections.sort(linkResources);
+        Collections.sort(scriptResources);
+        Collections.sort(navigationLinks);
 
         // bind the aggregate JAX-RS application to a dedicated servlet
         ServletContainer container = new ServletContainer(app);
@@ -106,6 +112,7 @@ public class JerseyEndpoint {
         servletContext.setAttribute(BaseStanbolResource.STATIC_RESOURCES_ROOT_URL, staticUrlRoot);
         servletContext.setAttribute(BaseStanbolResource.LINK_RESOURCES, linkResources);
         servletContext.setAttribute(BaseStanbolResource.SCRIPT_RESOURCES, scriptResources);
+        servletContext.setAttribute(BaseStanbolResource.NAVIGATION_LINKS, navigationLinks);
         log.info("JerseyEndpoint servlet registered at {}", applicationAlias);
     }
 
@@ -146,4 +153,8 @@ public class JerseyEndpoint {
         }
     }
 
+    public List<WebFragment> getWebFragments() {
+        return webFragments;
+    }
+
 }

Modified: incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/LinkResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/LinkResource.java?rev=1087645&r1=1087644&r2=1087645&view=diff
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/LinkResource.java (original)
+++ incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/LinkResource.java Fri Apr  1 10:53:35 2011
@@ -4,16 +4,21 @@ package org.apache.stanbol.commons.web.b
  * Simple data transfer object for stylesheet (CSS) and fiveicon list to be contributed by WebFragment for
  * inclusion to the HTML head of the pages by the NavigationMixin abstract JAX-RS resource.
  */
-public class LinkResource {
+public class LinkResource implements Comparable<LinkResource> {
 
     private final String rel;
+
     private final String relativePath;
+
     private final WebFragment fragment;
 
-    public LinkResource(String rel, String relativePath, WebFragment fragment) {
+    protected final int order;
+
+    public LinkResource(String rel, String relativePath, WebFragment fragment, int order) {
         this.rel = rel;
         this.relativePath = relativePath;
         this.fragment = fragment;
+        this.order = order;
     }
 
     public String getRel() {
@@ -27,4 +32,9 @@ public class LinkResource {
     public String getFragmentName() {
         return fragment.getName();
     }
+
+    @Override
+    public int compareTo(LinkResource o) {
+        return order - o.order;
+    }
 }

Added: incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/NavigationLink.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/NavigationLink.java?rev=1087645&view=auto
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/NavigationLink.java (added)
+++ incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/NavigationLink.java Fri Apr  1 10:53:35 2011
@@ -0,0 +1,28 @@
+package org.apache.stanbol.commons.web.base;
+
+/**
+ * Data transfer object to define an entry in the main navigation menu.
+ */
+public class NavigationLink implements Comparable<NavigationLink> {
+
+    public final String label;
+
+    public final String path;
+
+    public final String descriptionTemplate;
+
+    public final int order;
+
+    public NavigationLink(String path, String label, String descriptionTemplate, int order) {
+        this.path = path;
+        this.label = label;
+        this.descriptionTemplate = descriptionTemplate;
+        this.order = order;
+    }
+
+    @Override
+    public int compareTo(NavigationLink other) {
+        return order - other.order;
+    }
+
+}

Modified: incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/ScriptResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/ScriptResource.java?rev=1087645&r1=1087644&r2=1087645&view=diff
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/ScriptResource.java (original)
+++ incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/ScriptResource.java Fri Apr  1 10:53:35 2011
@@ -4,16 +4,21 @@ package org.apache.stanbol.commons.web.b
  * Simple data transfer object for scripts (typically javascript) to be contributed by WebFragment for
  * inclusion to the HTML head of the pages by the NavigationMixin abstract JAX-RS resource.
  */
-public class ScriptResource {
+public class ScriptResource implements Comparable<ScriptResource> {
 
     private final String type;
+
     private final String relativePath;
+
     private final WebFragment fragment;
+    
+    protected final int order;
 
-    public ScriptResource(String type, String relativePath, WebFragment fragment) {
+    public ScriptResource(String type, String relativePath, WebFragment fragment, int order) {
         this.type = type;
         this.relativePath = relativePath;
         this.fragment = fragment;
+        this.order = order;
     }
 
     public String getType() {
@@ -28,4 +33,9 @@ public class ScriptResource {
         return fragment.getName();
     }
 
+    @Override
+    public int compareTo(ScriptResource o) {
+        return order - o.order;
+    }
+
 }

Modified: incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/WebFragment.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/WebFragment.java?rev=1087645&r1=1087644&r2=1087645&view=diff
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/WebFragment.java (original)
+++ incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/WebFragment.java Fri Apr  1 10:53:35 2011
@@ -67,7 +67,16 @@ public interface WebFragment {
      * ${it.staticRootUrl}/${script.fragmentName}/${script.relativePath}
      */
     public List<ScriptResource> getScriptResources();
-    
+
+    /**
+     * List of link descriptions to contribute to the main navigation menu.
+     */
+    public List<NavigationLink> getNavigationLinks();
+
+    /**
+     * @return the bundle context who contributed this fragment (useful for loading the resources from the
+     *         right classloading context)
+     */
     public BundleContext getBundleContext();
 
 }

Modified: incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/resource/BaseStanbolResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/resource/BaseStanbolResource.java?rev=1087645&r1=1087644&r2=1087645&view=diff
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/resource/BaseStanbolResource.java (original)
+++ incubator/stanbol/branches/http-endpoint-refactoring/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/resource/BaseStanbolResource.java Fri Apr  1 10:53:35 2011
@@ -2,7 +2,6 @@ package org.apache.stanbol.commons.web.b
 
 import java.net.URI;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -11,6 +10,7 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.UriInfo;
 
 import org.apache.stanbol.commons.web.base.LinkResource;
+import org.apache.stanbol.commons.web.base.NavigationLink;
 import org.apache.stanbol.commons.web.base.ScriptResource;
 
 /**
@@ -26,6 +26,8 @@ public class BaseStanbolResource {
 
     public static final String STATIC_RESOURCES_ROOT_URL = "org.apache.stanbol.commons.web.base.resource.static.root";
 
+    public static final String NAVIGATION_LINKS = "org.apache.stanbol.commons.web.base.navigation.link";
+
     public static final String ROOT_URL = "org.apache.stanbol.commons.web.base.root";
 
     @Context
@@ -38,10 +40,21 @@ public class BaseStanbolResource {
         return uriInfo.getBaseUri();
     }
 
+    /**
+     * @return the sorted list of navigation links data transfer objects
+     */
+    @SuppressWarnings("unchecked")
+    public List<NavigationLink> getNavigationLinks() {
+        return (List<NavigationLink>) servletContext.getAttribute(NAVIGATION_LINKS);
+    }
+
+    /**
+     * @return menu items with "selected" CSS class for the active link precomputed where applicable
+     */
     public List<MenuItem> getMainMenuItems() {
         List<MenuItem> items = new ArrayList<MenuItem>();
-        for (String path: Arrays.asList("/engines", "/store", "/sparql")) {
-            items.add(new MenuItem(path, path, uriInfo));
+        for (NavigationLink link : getNavigationLinks()) {
+            items.add(new MenuItem(link.label, link.path, uriInfo));
         }
         return items;
     }
@@ -80,7 +93,7 @@ public class BaseStanbolResource {
     public String getRootUrl() {
         return (String) servletContext.getAttribute(ROOT_URL);
     }
-    
+
     public String getStaticRootUrl() {
         return (String) servletContext.getAttribute(STATIC_RESOURCES_ROOT_URL);
     }

Modified: incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/HomeWebFragment.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/HomeWebFragment.java?rev=1087645&r1=1087644&r2=1087645&view=diff
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/HomeWebFragment.java (original)
+++ incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/HomeWebFragment.java Fri Apr  1 10:53:35 2011
@@ -10,6 +10,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.stanbol.commons.web.base.LinkResource;
+import org.apache.stanbol.commons.web.base.NavigationLink;
 import org.apache.stanbol.commons.web.base.ScriptResource;
 import org.apache.stanbol.commons.web.base.WebFragment;
 import org.apache.stanbol.commons.web.home.resource.StanbolRootResource;
@@ -70,14 +71,14 @@ public class HomeWebFragment implements 
     @Override
     public List<LinkResource> getLinkResources() {
         List<LinkResource> resources = new ArrayList<LinkResource>();
-        resources.add(new LinkResource("stylesheet", "style/stanbol.css", this));
+        resources.add(new LinkResource("stylesheet", "style/stanbol.css", this, 0));
         return resources;
     }
 
     @Override
     public List<ScriptResource> getScriptResources() {
         List<ScriptResource> resources = new ArrayList<ScriptResource>();
-        // resources.add(new ScriptResource("text/javascript", "scripts/jquery-1.4.2.js", this));
+        // resources.add(new ScriptResource("text/javascript", "scripts/jquery-1.4.2.js", this, 0));
         return resources;
     }
 
@@ -86,4 +87,9 @@ public class HomeWebFragment implements 
         return bundleContext;
     }
 
+    @Override
+    public List<NavigationLink> getNavigationLinks() {
+        return Collections.emptyList();
+    }
+
 }

Modified: incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/resource/StanbolRootResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/resource/StanbolRootResource.java?rev=1087645&r1=1087644&r2=1087645&view=diff
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/resource/StanbolRootResource.java (original)
+++ incubator/stanbol/branches/http-endpoint-refactoring/commons/web/home/src/main/java/org/apache/stanbol/commons/web/home/resource/StanbolRootResource.java Fri Apr  1 10:53:35 2011
@@ -23,5 +23,5 @@ public class StanbolRootResource extends
     public Response get() {
         return Response.ok(new Viewable("index", this), TEXT_HTML).build();
     }
-
+    
 }

Modified: incubator/stanbol/branches/http-endpoint-refactoring/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/fragment/EnhancerWebFragment.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/http-endpoint-refactoring/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/fragment/EnhancerWebFragment.java?rev=1087645&r1=1087644&r2=1087645&view=diff
==============================================================================
--- incubator/stanbol/branches/http-endpoint-refactoring/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/fragment/EnhancerWebFragment.java (original)
+++ incubator/stanbol/branches/http-endpoint-refactoring/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/fragment/EnhancerWebFragment.java Fri Apr  1 10:53:35 2011
@@ -10,6 +10,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.stanbol.commons.web.base.LinkResource;
+import org.apache.stanbol.commons.web.base.NavigationLink;
 import org.apache.stanbol.commons.web.base.ScriptResource;
 import org.apache.stanbol.commons.web.base.WebFragment;
 import org.apache.stanbol.enhancer.jersey.resource.EnginesRootResource;
@@ -41,7 +42,7 @@ public class EnhancerWebFragment impleme
     public String getName() {
         return NAME;
     }
-    
+
     @Activate
     protected void activate(ComponentContext ctx) {
         this.bundleContext = ctx.getBundleContext();
@@ -75,21 +76,29 @@ public class EnhancerWebFragment impleme
     @Override
     public List<LinkResource> getLinkResources() {
         List<LinkResource> resources = new ArrayList<LinkResource>();
-        resources.add(new LinkResource("stylesheet", "openlayers-2.9/theme/default/style.css", this));
-        resources.add(new LinkResource("stylesheet", "scripts/prettify/prettify.css", this));
+        resources.add(new LinkResource("stylesheet", "openlayers-2.9/theme/default/style.css", this, 10));
+        resources.add(new LinkResource("stylesheet", "scripts/prettify/prettify.css", this, 20));
         return resources;
     }
 
     @Override
     public List<ScriptResource> getScriptResources() {
         List<ScriptResource> resources = new ArrayList<ScriptResource>();
-        resources.add(new ScriptResource("text/javascript", "openlayers-2.9/OpenLayers.js", this));
-        resources.add(new ScriptResource("text/javascript", "scripts/prettify/prettify.js", this));
-        resources.add(new ScriptResource("text/javascript", "scripts/jquery-1.4.2.js", this));
+        resources.add(new ScriptResource("text/javascript", "openlayers-2.9/OpenLayers.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "scripts/prettify/prettify.js", this, 20));
+        resources.add(new ScriptResource("text/javascript", "scripts/jquery-1.4.2.js", this, 30));
         return resources;
     }
 
     @Override
+    public List<NavigationLink> getNavigationLinks() {
+        List<NavigationLink> links = new ArrayList<NavigationLink>();
+        links.add(new NavigationLink("engines", "/engines", "todo", 10));
+        links.add(new NavigationLink("store", "/store", "todo", 20));
+        return links;
+    }
+
+    @Override
     public BundleContext getBundleContext() {
         return bundleContext;
     }