first version of new ui
Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/a6148677 Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/a6148677 Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/a6148677 Branch: refs/heads/MARMOTTA-228 Commit: a6148677561beb107433129f9ace32f360a2b1cb Parents: 7f6c383 Author: tkurz <[email protected]> Authored: Fri May 10 15:43:07 2013 +0200 Committer: tkurz <[email protected]> Committed: Fri May 10 15:43:07 2013 +0200 ---------------------------------------------------------------------- .../platform/core/api/modules/ModuleService.java | 18 +- .../core/api/templating/AdminInterfaceService.java | 3 + .../platform/core/model/template/MenuItem.java | 72 +++++- .../platform/core/model/template/MenuItemType.java | 21 ++ .../core/services/modules/ModuleServiceImpl.java | 164 ++++++++----- .../templating/AdminTemplatingServiceImpl.java | 196 ++++----------- .../src/main/resources/config-defaults.properties | 3 + .../src/main/resources/kiwi-module.properties | 40 ++-- .../src/main/resources/templates/admin.ftl | 56 +++-- 9 files changed, 301 insertions(+), 272 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ModuleService.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ModuleService.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ModuleService.java index b099921..7f26205 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ModuleService.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ModuleService.java @@ -17,14 +17,12 @@ */ package org.apache.marmotta.platform.core.api.modules; -import org.apache.commons.configuration.Configuration; import org.apache.marmotta.platform.core.model.module.ModuleConfiguration; -import org.apache.marmotta.platform.core.services.modules.AdminPage; -import org.apache.marmotta.platform.core.services.modules.AdminPageContainer; import javax.enterprise.inject.spi.InjectionPoint; import java.net.URL; import java.util.Collection; +import java.util.HashMap; import java.util.List; /** @@ -114,7 +112,6 @@ public interface ModuleService { * @param moduleName * @return */ - @Deprecated public List<String> getAdminPages(String moduleName); /** @@ -141,16 +138,19 @@ public interface ModuleService { public String getIcon(String moduleName); /** - * Returns a list of AdminPage Objects - * @param moduleName + * Lists containers and underlying modules * @return */ - public List<AdminPage> getAdminPageList(String moduleName); + public Collection<String> listContainers(); + public List<String> listSortedContainers(); /** - * Lists containers and underlying modules + * returns all modules within a container + * @param container * @return */ - public List<AdminPageContainer> listContainers(); + public Collection<String> listModules(String container); + public List<String> listSortedModules(String container); + List<HashMap<String,String>> getAdminPageObjects(String moduleName); } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/templating/AdminInterfaceService.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/templating/AdminInterfaceService.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/templating/AdminInterfaceService.java index d60e9b4..5ec3a6c 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/templating/AdminInterfaceService.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/templating/AdminInterfaceService.java @@ -29,6 +29,9 @@ import javax.servlet.ServletContext; public interface AdminInterfaceService { public final static String PATH = "/templates/"; + public final static String DEFAULT_REST_PATH = "doc/rest/"; + public final static String DEFAULT_MENU_ICON = "icon-asterisk"; + public final static String DEFAULT_WEBSERVICE_TITLE = "Webservice"; /** * inits a freebase template service with a servlet context http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItem.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItem.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItem.java index 883d01e..fd8dfe9 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItem.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItem.java @@ -17,11 +17,16 @@ */ package org.apache.marmotta.platform.core.model.template; +import org.apache.marmotta.platform.core.api.templating.AdminInterfaceService; +import org.apache.marmotta.platform.core.services.templating.AdminTemplatingServiceImpl; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import static org.apache.marmotta.platform.core.model.template.MenuItemType.*; + /** * Created with IntelliJ IDEA. * User: tkurz @@ -31,19 +36,68 @@ import java.util.Map; */ public class MenuItem { - private Map<String,Object> properties; - private List<MenuItem> submenu; + private boolean active; + private String label; + private String path; + private MenuItemType type; + private List<MenuItem> items; + private String icon; + + public MenuItem(String label, MenuItemType type) { + this.type = type; + this.label = label; + this.items = new ArrayList<MenuItem>(); + this.active = false; + this.icon = AdminInterfaceService.DEFAULT_MENU_ICON; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getLabel() { + return label; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } - public MenuItem() { - properties = new HashMap<String, Object>(); - submenu = new ArrayList<MenuItem>(); + public List<MenuItem> getItems() { + return this.items; } - public Map<String, Object> getProperties() { - return properties; + public void addItem(MenuItem item) { + this.addItem(item); } - public List<MenuItem> getSubmenu() { - return submenu; + public boolean setActive(String path) { + switch(type) { + case ROOT: + case CONTAINER: + case MODULE: + for(MenuItem item : items) { + if(item.setActive(path)) { + active = true; + } else { + active = false; + } + } + return active; + case PAGE: + return active = this.path.equals(path); + case WEBSERVICE: + return active = path.contains(AdminInterfaceService.DEFAULT_REST_PATH); + default: + return false; + } } } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItemType.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItemType.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItemType.java index ce212f6..16872ef 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItemType.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/model/template/MenuItemType.java @@ -1,3 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.marmotta.platform.core.model.template; /** @@ -6,4 +24,7 @@ package org.apache.marmotta.platform.core.model.template; * Author: Thomas Kurz ([email protected]) */ public enum MenuItemType { + + ROOT,CONTAINER,MODULE,PAGE,WEBSERVICE + } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/ModuleServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/ModuleServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/ModuleServiceImpl.java index 9dbfca9..4864fe1 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/ModuleServiceImpl.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/ModuleServiceImpl.java @@ -18,9 +18,7 @@ package org.apache.marmotta.platform.core.services.modules; import com.google.common.collect.ImmutableList; -import org.apache.marmotta.platform.core.api.config.ConfigurationService; import org.apache.marmotta.platform.core.api.modules.ModuleService; -import org.apache.marmotta.platform.core.exception.MarmottaException; import org.apache.marmotta.platform.core.model.module.ModuleConfiguration; import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; @@ -34,7 +32,6 @@ import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.InjectionPoint; -import javax.inject.Inject; import java.io.IOException; import java.net.JarURLConnection; import java.net.MalformedURLException; @@ -51,28 +48,29 @@ import java.util.*; public class ModuleServiceImpl implements ModuleService { private String default_container_name = "Others"; - private int default_container_number = 100; + //private int default_container_number = 100; private Logger log = LoggerFactory.getLogger(ModuleServiceImpl.class); private Set<String> modules; - private List<AdminPageContainer> containers; + private HashMap<String,ArrayList<String>> containers; + + private HashMap<String,Integer> container_weight; private Map<String,Configuration> configurationMap; private Map<String, Configuration> jarURLs; - @Inject - ConfigurationService configurationService; - @PostConstruct public void initialize() { - default_container_name = configurationService.getStringConfiguration("kiwi.pages.default_container.name",default_container_name); - default_container_number = configurationService.getIntConfiguration("kiwi.pages.default_container.number",default_container_number); + //default_container_name = configurationService.getStringConfiguration("kiwi.pages.default_container.name",default_container_name); + //default_container_number = configurationService.getIntConfiguration("kiwi.pages.default_container.number",default_container_number); modules = new HashSet<String>(); - containers = new ArrayList<AdminPageContainer>(); + containers = new HashMap<String,ArrayList<String>>(); + container_weight = new HashMap<String, Integer>(); + configurationMap = new HashMap<String, Configuration>(); jarURLs = new HashMap<String, Configuration>(); @@ -93,14 +91,20 @@ public class ModuleServiceImpl implements ModuleService { String moduleName = moduleProperties.getString("name"); modules.add(moduleName); + String c_name = moduleProperties.getString("container") != null ? moduleProperties.getString("container") : default_container_name; + if(containers.get(c_name) == null) { + containers.put(c_name, new ArrayList<String>()); + } + containers.get(c_name).add(moduleName); - if(moduleProperties.getString("container") != null) { - addContainerModule(moduleProperties.getString("container"),moduleName,moduleProperties.getInt("container.weight",-1)); - } else { - addContainerModule(default_container_name,moduleName,default_container_number); + if(container_weight.get(c_name) == null ) { + container_weight.put(c_name,-1); } + if(moduleProperties.getString("container.weight") != null) { + container_weight.put(c_name,Math.max(container_weight.get(c_name),moduleProperties.getInt("container.weight",-1))); + } URLConnection urlConnection = moduleUrl.openConnection(); URL jarUrl; @@ -130,8 +134,6 @@ public class ModuleServiceImpl implements ModuleService { } catch(ConfigurationException ex) { } - - // create runtime configuration MapConfiguration runtimeConfiguration = new MapConfiguration(new HashMap<String, Object>()); runtimeConfiguration.setProperty("runtime.jarfile", jarUrl.toString()); @@ -148,26 +150,12 @@ public class ModuleServiceImpl implements ModuleService { } + //TODO container should be sortable } catch (IOException ex) { log.error("I/O error while trying to retrieve kiwi-module.properties file",ex); } } - private void addContainerModule(String container, String module, int number) { - AdminPageContainer c; - int i = containers.indexOf(container); - if(i>=0) { - c = containers.get(i); - c.addModule(module); - } - else { - c = new AdminPageContainer(container); - containers.add(c); - c.addModule(module); - } - if(number>0) c.setNumber(number); - } - /** * Provide the current module configuration to the service injecting it * @@ -225,12 +213,60 @@ public class ModuleServiceImpl implements ModuleService { return modules; } + public List<String> listSortedModules() { + return sortModules(modules); + } + + /** + * returns all modules within a container + * @param container + * @return + */ + public Collection<String> listModules(String container) { + if(containers.containsKey(container)) { + return containers.get(container); + } else return null; + } + + public List<String> listSortedModules(String container) { + if(containers.containsKey(container)) { + return sortModules(containers.get(container)); + } else return null; + } + + /** + * sort modules + * @param m + * @return + */ + private List<String> sortModules(Collection<String> m) { + List<String> sorted = new ArrayList<String>(m); + Collections.sort(sorted,new Comparator<String>() { + @Override + public int compare(String o, String o2) { + return ((Integer) getWeight(o)).compareTo(getWeight(o2)); + } + }); + return sorted; + } + /** * Lists containers and underlying modules * @return */ - public List<AdminPageContainer> listContainers() { - return containers; + public Collection<String> listContainers() { + return containers.keySet(); + } + + public List<String> listSortedContainers() { + List sorted = new ArrayList(containers.keySet()); + Collections.sort(sorted,new Comparator<String>() { + @Override + public int compare(String o, String o2) { + return ((Integer)container_weight.get(o)).compareTo(container_weight.get(o2)); + } + }); + return sorted; } /** @@ -324,53 +360,53 @@ public class ModuleServiceImpl implements ModuleService { } /** - * Return a list of admin pages (paths) + * Return a list of admin pages (links) * @param moduleName * @return */ @Override - @Deprecated public List<String> getAdminPages(String moduleName) { Configuration config = getModuleConfiguration(moduleName).getConfiguration(); - if(config != null) return ImmutableList.copyOf(config.getStringArray("adminpages")); - else + if(config != null) { + if(!config.subset("adminpage.").isEmpty()) { + ArrayList<String> l = new ArrayList<String>(); + while(config.getString("adminpage."+l.size()+".link") != null) { + l.add(config.getString("adminpage."+l.size()+".link")); + } + return l; + } else return ImmutableList.copyOf(config.getStringArray("adminpages")); + } else return null; } /** - * Returns a list of AdminPage Objects + * returns more complex admin page description * @param moduleName * @return */ @Override - public List<AdminPage> getAdminPageList(String moduleName) { - ArrayList<AdminPage> l = new ArrayList<AdminPage>(); + public List<HashMap<String,String>> getAdminPageObjects(String moduleName) { Configuration config = getModuleConfiguration(moduleName).getConfiguration(); - - if(config==null) return null; - - //test if there are names and order for admin pages - if(config.getString("adminpages.0") != null) { - int i=0; - while(config.getString("adminpages."+i) != null) { - try { - l.add(new AdminPage( - i, - config.getString("adminpages." + i + ".path", null), - config.getString("adminpages."+i+".title",null), - config.getBoolean("adminpages."+i+".important",false) - )); - } catch (MarmottaException e) { - log.error("admin page cannot be added for module "+moduleName); + if(config != null) { + ArrayList<HashMap<String,String>> l = new ArrayList<HashMap<String,String>>(); + if(!config.subset("adminpage.").isEmpty()) { + while(config.getString("adminpage."+l.size()+".link") != null) { + HashMap<String,String> map = new HashMap<String, String>(); + map.put("link",config.getString("baseurl")+config.getString("adminpage."+l.size()+".link")); + map.put("title",config.getString("adminpage."+l.size()+".title")); + l.add(map); + } + } else { + for(String path : config.getStringArray("adminpages")) { + HashMap<String,String> map = new HashMap<String, String>(); + map.put("link",config.getString("baseurl")+path); + map.put("title",path.substring(path.lastIndexOf("/"),path.lastIndexOf(".")).replaceAll("_"," ")); + l.add(map); } } - } else { - for(String path : getAdminPages(moduleName)) { - l.add(new AdminPage(path)); - } - } - Collections.sort(l); - return l; + return l; + } else + return null; } @Override http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/templating/AdminTemplatingServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/templating/AdminTemplatingServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/templating/AdminTemplatingServiceImpl.java index 2a0279d..247a0b4 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/templating/AdminTemplatingServiceImpl.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/templating/AdminTemplatingServiceImpl.java @@ -19,12 +19,7 @@ package org.apache.marmotta.platform.core.services.templating; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -38,6 +33,7 @@ import org.apache.marmotta.platform.core.api.templating.AdminInterfaceService; import org.apache.marmotta.platform.core.api.templating.TemplatingService; import org.apache.marmotta.platform.core.exception.TemplatingException; import org.apache.marmotta.platform.core.model.template.MenuItem; +import org.apache.marmotta.platform.core.model.template.MenuItemType; /** * User: Thomas Kurz @@ -61,15 +57,13 @@ public class AdminTemplatingServiceImpl implements AdminInterfaceService { private ConfigurationService configurationService; //some statics + private static final String DEFAULT_ICON = "icon-beaker"; private static final String TEMPLATE_STRING = "admin.ftl"; - private static final String DEFAULT_REST_PATH = "/doc/rest/"; - private static final String DEFAULT_REST_FILE = "overview-summary.html"; - private static final String DEFAULT_TITLE_FOR_WEBSERVICES = "webservices"; //pattern to filter comments content private static final Pattern PATTERN = Pattern.compile("\\<!--###BEGIN_([^#]+)###--\\>(.+)\\<!--###END_\\1###--\\>",Pattern.DOTALL); - private Menu menu; + private MenuItem menu; /** * inits a freemarker template service with a servlet context @@ -77,7 +71,7 @@ public class AdminTemplatingServiceImpl implements AdminInterfaceService { */ @Override public void init(ServletContext context) throws TemplatingException { - menu = new Menu(); + buildMenu(); this.context = context; try { //try-run to check it from the very beginning @@ -88,20 +82,6 @@ public class AdminTemplatingServiceImpl implements AdminInterfaceService { } /** - * Check whether the templating service considers the resource passed in the path as a menu entry it is - * responsible for. - * - * @param path a url path - * @return if the give path points to an admin page - */ - @Override - public boolean isMenuEntry(String path) { - if(menu.path_titles.keySet().contains(configurationService.getPath()+path)) return true; - if(path.contains(DEFAULT_REST_PATH)) return true; - else return false; - } - - /** * this method wraps a file with a specified admin template. If the file is not a admin page, * the bytes are returned unprocessed * @param bytes content represented in a byte array @@ -112,11 +92,9 @@ public class AdminTemplatingServiceImpl implements AdminInterfaceService { if(!configurationService.getBooleanConfiguration("templating.cache.enabled",true) && context!=null) { init(context); + menu.setActive(path); } - //apply template - if(!isMenuEntry(path)) return bytes; - //activate - String module = menu.getCurrentModule(configurationService.getPath() + path); + //fill data model Map<String, Object> datamodel = new HashMap<String,Object>(); for(Properties p : Properties.values()) { @@ -125,9 +103,9 @@ public class AdminTemplatingServiceImpl implements AdminInterfaceService { //begin hack!!! datamodel.put("USER_MODULE_IS_ACTIVE", moduleService.listModules().contains("Users")); //end hack!!! - datamodel.put("MODULE_MENU",menu.menuItems); - datamodel.put("CURRENT_TITLE", getNameFromPath(path)); - datamodel.put("CURRENT_MODULE", module); + + //add menu + datamodel.put("MENU",menu); try { String s = new String(bytes); Matcher m = PATTERN.matcher(s); @@ -151,133 +129,47 @@ public class AdminTemplatingServiceImpl implements AdminInterfaceService { return bytes; } + @Override + public boolean isMenuEntry(String path) { + return menu.setActive(path); + } + /** - * This object represents a menu for the admin interface. It is build using the ModuleService. + * build menu + * @return */ - class Menu { - - public List<MenuItem> menuItems; - public Map<String,String> path_titles; - - public Menu() { - //instantiate - menuItems = new ArrayList<MenuItem>(); - path_titles = new HashMap<String, String>(); - //sort menu - ArrayList<String> menuSorted = new ArrayList<String>(moduleService.listModules()); - if(configurationService.getBooleanConfiguration("templating.sort_by_weight", true)) { - Collections.sort(menuSorted, new Comparator<String>() { - @Override - public int compare(String o1, String o2) { - final int w1 = moduleService.getWeight(o1), w2 = moduleService.getWeight(o2); - if (w1 == w2) return o1.compareTo(o2); - return w1 - w2; - } - }); - } else { - Collections.sort(menuSorted); - } - - //build structure - for(String module : menuSorted) { - String path = configurationService.getPath() + moduleService.getModuleWeb(module); - if(moduleHasAdminPages(module)) { - MenuItem menu_item = new MenuItem(); - menu_item.getProperties().put("title",module); - menu_item.getProperties().put("baseurl",moduleService.getModuleConfiguration(module).getConfiguration().getString("baseurl","/"+module)); - for(String page : moduleService.getAdminPages(module)) { - if(page.equals("")) { - continue; - } - MenuItem submenu = new MenuItem(); - submenu.getProperties().put("title",getNameFromPath(page)); - submenu.getProperties().put("path",path+page); - //test if it is active - menu_item.getSubmenu().add(submenu); - path_titles.put(path+page,page); - } - if(moduleService.getWebservices(module)!=null && - !moduleService.getWebservices(module).isEmpty() && - !moduleService.getWebservices(module).iterator().next().equals("")) { - MenuItem submenu = new MenuItem(); - submenu.getProperties().put("title",DEFAULT_TITLE_FOR_WEBSERVICES); - submenu.getProperties().put("path",path+DEFAULT_REST_PATH+DEFAULT_REST_FILE); - //test if it is active - menu_item.getSubmenu().add(submenu); - path_titles.put(path+DEFAULT_REST_PATH+DEFAULT_REST_FILE,DEFAULT_TITLE_FOR_WEBSERVICES); - } - menuItems.add(menu_item); + private MenuItem buildMenu() { + MenuItem menu = new MenuItem("MENU",MenuItemType.ROOT); + + for(String container_string : moduleService.listSortedContainers()) { + MenuItem container = new MenuItem(container_string, MenuItemType.CONTAINER); + + //add modules + for(String module_string : moduleService.listSortedModules(container_string)) { + MenuItem module = new MenuItem(module_string, MenuItemType.MODULE); + module.setPath(moduleService.getModuleWeb(module_string)); + module.setIcon(moduleService.getIcon(module_string)); + + //add pages + for(HashMap<String,String> page_object : moduleService.getAdminPageObjects(module_string)) { + MenuItem page = new MenuItem(page_object.get("title"), MenuItemType.PAGE); + page.setPath(page_object.get("path")); + module.addItem(page); } - } - } - /** - * get current module and set submenu to active - * @param path the current system path - * @return current module name - */ - public String getCurrentModule(String path) { - String module = ""; - boolean active = false; - //test with module and submenu must be active - for(MenuItem menuItem : menuItems) { - if(path.startsWith((String)menuItem.getProperties().get("baseurl"))) { - module = (String)menuItem.getProperties().get("title"); + //add webservice + if(!moduleService.getWebservices(module_string).isEmpty()) { + MenuItem page = new MenuItem(DEFAULT_WEBSERVICE_TITLE, MenuItemType.MODULE); + page.setPath(module.getPath()+DEFAULT_REST_PATH); } - menuItem.getProperties().put("active",false); - for(MenuItem submenu : menuItem.getSubmenu()) { - if(submenu.getProperties().get("path").equals(path)) { - submenu.getProperties().put("active",true); - menuItem.getProperties().put("active",true); - module = (String)menuItem.getProperties().get("title"); - active = true; - } else { - submenu.getProperties().put("active",false); - } - } - } - //workaround for webservices (autogenerated pages that are nit fix stored in the menu structure) - if(!active) { - for(MenuItem menuItem : menuItems) { - if(module.equals(menuItem.getProperties().get("title"))) { - for(MenuItem submenu : menuItem.getSubmenu()) { - if(submenu.getProperties().get("title").equals(DEFAULT_TITLE_FOR_WEBSERVICES)) { - submenu.getProperties().put("active",true); - menuItem.getProperties().put("active",true); - } - } - } - } - } - return module; - } - /** - * Tests if a module should appear in the menu - * @param module a module name - * @return true is module should appear, false if not - */ - private boolean moduleHasAdminPages(String module) { - if(moduleService.getAdminPages(module)!=null && - !moduleService.getAdminPages(module).isEmpty() && - !moduleService.getAdminPages(module).get(0).equals("")) - return true; - else if(moduleService.getWebservices(module)!=null && - !moduleService.getWebservices(module).isEmpty() && - !moduleService.getWebservices(module).iterator().next().equals("")) return true; - return false; + //add if there are pages to display + if(!module.getItems().isEmpty()) container.addItem(module); + } + menu.addItem(container); } + return menu; } - /** - * returns a proper name for a path by using the filename. - * @param path - * @return - */ - private String getNameFromPath(String path) { - if(path.contains(DEFAULT_REST_PATH)) return DEFAULT_TITLE_FOR_WEBSERVICES; - return path.substring(path.lastIndexOf("/")).replaceAll("/"," ").replaceAll("_"," ").replaceAll(".html","").replaceAll(".jsp",""); - } - -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/resources/config-defaults.properties ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/resources/config-defaults.properties b/platform/marmotta-core/src/main/resources/config-defaults.properties index 32911a2..8d70256 100644 --- a/platform/marmotta-core/src/main/resources/config-defaults.properties +++ b/platform/marmotta-core/src/main/resources/config-defaults.properties @@ -68,6 +68,9 @@ kiwi.pages.default_container.name = Others # ordering number for default container kiwi.pages.default_container.number = 100 +# default icon for admin page +kiwi.pages.link.default_icon = icon-beaker + # enable or disable the logging of debugging messages for the whole system debug.enabled = false http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/resources/kiwi-module.properties ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/resources/kiwi-module.properties b/platform/marmotta-core/src/main/resources/kiwi-module.properties index adce8f8..7265954 100644 --- a/platform/marmotta-core/src/main/resources/kiwi-module.properties +++ b/platform/marmotta-core/src/main/resources/kiwi-module.properties @@ -31,35 +31,35 @@ icon_small = /admin/img/config_small.png #do not change!!! baseurl=/core -adminpages.0.title=About -adminpages.0.link=/admin/about.html +adminpage.0.title=About +adminpage.0.link=/admin/about.html -adminpages.1.title=Core Configuration -adminpages.1.link=/admin/configuration.html +adminpage.1.title=Core Configuration +adminpage.1.link=/admin/configuration.html -adminpages.2.title=Tasks -adminpages.2.link=/admin/tasks.html +adminpage.2.title=Tasks +adminpage.2.link=/admin/tasks.html -adminpages.3.title=Import -adminpages.3.link=/admin/import.html +adminpage.3.title=Import +adminpage.3.link=/admin/import.html -adminpages.4.title=Export -adminpages.4.link=/admin/export.html +adminpage.4.title=Export +adminpage.4.link=/admin/export.html -adminpages.5.title=Data Views -adminpages.5.link=/admin/dataview.html +adminpage.5.title=Data Views +adminpage.5.link=/admin/dataview.html -adminpages.6.title=Context Manager -adminpages.6.link=/admin/contexts.html +adminpage.6.title=Context Manager +adminpage.6.link=/admin/contexts.html -adminpages.7.title=Prefix Manager -adminpages.7.link=/admin/prefixes.html +adminpage.7.title=Prefix Manager +adminpage.7.link=/admin/prefixes.html -adminpages.8.title=System -adminpages.8.link=/admin/system.html +adminpage.8.title=System +adminpage.8.link=/admin/system.html -adminpages.9.title=Database -adminpages.9.link=/admin/database.html +adminpage.9.title=Database +adminpage.9.link=/admin/database.html webservices=org.apache.marmotta.platform.core.webservices.config.ConfigurationWebService,\ org.apache.marmotta.platform.core.webservices.config.DependenciesWebService,\ http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/a6148677/platform/marmotta-core/src/main/resources/templates/admin.ftl ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/resources/templates/admin.ftl b/platform/marmotta-core/src/main/resources/templates/admin.ftl index 370c415..fa0e2ed 100644 --- a/platform/marmotta-core/src/main/resources/templates/admin.ftl +++ b/platform/marmotta-core/src/main/resources/templates/admin.ftl @@ -64,17 +64,25 @@ <div class="well sidebar-nav square-corners menu-level-2 span3 full-height"> <ul class="nav nav-list"> - <li class="nav-header">$menu_container</li> - <#list MODULE_MENU as menu> - <li - <#if menu.properties["active"]> class="active" </#if> + <#list MENU as menu> + <li class="nav-header">${menu["label"]}</li> + <#list menu.modules as submenu> + <li + <#if submenu["active"]> class="active" </#if> > - <a href="${menu.submenu[0].properties["path"]}"> - <i class="icon-random"></i> <!-- TODO icon --> - <span>${menu.properties["title"]}</span> - </a> - </li> - </#list> + <a href="${SERVER_URL}${submenu["path"]} + <#if submenu["pages"]??> + ${submenu["pages"][0]["link"]}" + <#else> + doc/rest/index.html" + </#if> + > + <i class="${submenu["icon"]}"></i> <!-- TODO icon --> + <span>${submenu["label"]}</span> + </a> + </li> + </#list> + </#list> </ul> </div><!--/.well --> @@ -82,14 +90,26 @@ <div class="offset3 span9"> <ul class="nav nav-tabs square-corners"> - <#list MODULE_MENU as menu> - <#if menu.properties["active"]> - <#list menu.submenu as submenu> - <li - <#if submenu.properties["active"]> class="active" </#if> - > - <a href="${submenu.properties["path"]}">${submenu.properties["title"]}</a> - </li> + <#list MENU as menu> + <#if menu["active"]> + <#list menu["modules"] as submenu> + <#if submenu["active"]> + <#list submenu["pages"] as pages> + <li + <#if pages["active"]> class="active" </#if> + > + <a href="${SERVER_URL}${submenu["path"]}${pages["link"]}">${pages["label"]}</a> + </li> + </#list> + <#if submenu["webservice"]> + <li + <#if submenu["webservice_active"]> class="active" </#if> + > + <a href="${SERVER_URL}${submenu["path"]}doc/rest/index.html">webservice</a> + </li> + + </#if> + </#if> </#list> </#if> </#list>
