[Yanel-commits] rev 54487 - in
public/yanel/trunk/src/realms/from-scratch-realm-template/src/java:
. org org/wyona org/wyona/yanel org/wyona/yanel/servlet
org/wyona/yanel/servlet/toolbar org/wyona/yanel/servlet/toolbar/impl
michi at wyona.com
michi at wyona.com
Mon Nov 8 09:50:49 CET 2010
Author: michi
Date: 2010-11-08 09:50:49 +0100 (Mon, 08 Nov 2010)
New Revision: 54487
Added:
public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/
public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/
public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/yanel/
public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/yanel/servlet/
public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/yanel/servlet/toolbar/
public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/yanel/servlet/toolbar/impl/
public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/yanel/servlet/toolbar/impl/FromScratchRealmToolbar.java
Log:
example of a custom toolbar impl added
Added: public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/yanel/servlet/toolbar/impl/FromScratchRealmToolbar.java
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/yanel/servlet/toolbar/impl/FromScratchRealmToolbar.java (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/src/java/org/wyona/yanel/servlet/toolbar/impl/FromScratchRealmToolbar.java 2010-11-08 08:50:49 UTC (rev 54487)
@@ -0,0 +1,194 @@
+package org.wyona.yanel.servlet.toolbar.impl;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.log4j.Logger;
+
+import org.wyona.security.core.api.Identity;
+import org.wyona.yanel.core.Resource;
+import org.wyona.yanel.core.api.attributes.VersionableV2;
+import org.wyona.yanel.core.map.Map;
+import org.wyona.yanel.core.util.PathUtil;
+import org.wyona.yanel.core.util.ResourceAttributeHelper;
+import org.wyona.yanel.servlet.YanelServlet;
+import org.wyona.yanel.servlet.menu.Menu;
+import org.wyona.yanel.servlet.toolbar.YanelToolbar;
+import org.wyona.yanel.servlet.toolbar.YanelToolbarException;
+
+/**
+ * The from scratch realm toolbar example, wrapping a {@link Menu}.
+ */
+public class FromScratchRealmToolbar implements YanelToolbar {
+
+ private static Logger log = Logger.getLogger(FromScratchRealmToolbar.class);
+
+ private final Menu menu;
+
+ public FromScratchRealmToolbar() {
+ this.menu = new org.wyona.yanel.servlet.menu.impl.DefaultMenuV2();
+ }
+
+ public String getToolbarBodyStart(Resource resource, HttpServletRequest request, Map map, String reservedPrefix) {
+ try {
+ String backToRealm = PathUtil.backToRealm(resource.getPath());
+ StringBuilder buf = new StringBuilder();
+ buf.append("<div id=\"yaneltoolbar_headerwrap\">");
+ buf.append("<div id=\"yaneltoolbar_menu\">");
+ buf.append(getToolbarMenus(resource, request, map, reservedPrefix));
+ buf.append("</div>");
+
+ buf.append(getInfo(resource, request, map));
+
+ buf.append("<span id=\"yaneltoolbar_logo\">");
+ buf.append("<a href=\"http://www.wyona.com\"><img src=\"" + backToRealm + reservedPrefix
+ + "/yanel_toolbar_logo.png\" border=\"0\"/></a>");
+ buf.append("</span>");
+
+ buf.append("</div>");
+ buf.append("<div id=\"yaneltoolbar_middlewrap\">");
+ return buf.toString();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new YanelToolbarException("Couldn't generate toolbar body start markup: " + e.getMessage(), e);
+ }
+ }
+
+ public String getToolbarHeader(Resource resource, HttpServletRequest request, Map map, String reservedPrefix) {
+
+ String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(resource.getPath());
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("<!-- START: Dynamically added code by " + this.getClass().getName() + " -->");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("<link type=\"text/css\" href=\"" + backToRealm + reservedPrefix + "/toolbar.css\" rel=\"stylesheet\"/>");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("<style type=\"text/css\" media=\"screen\">");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("#yaneltoolbar_menu li li.haschild{ background: lightgrey url(" + backToRealm + reservedPrefix
+ + "/yanel-img/submenu.gif) no-repeat 98% 50%;}");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("#yaneltoolbar_menu li li.haschild:hover{ background: lightsteelblue url(" + backToRealm + reservedPrefix
+ + "/yanel-img/submenu.gif) no-repeat 98% 50%;}");
+ sb.append("</style>");
+ sb.append(System.getProperty("line.separator"));
+
+ // If browser is Mozilla (gecko engine rv:1.7)
+ if (request.getHeader("User-Agent").indexOf("rv:1.7") >= 0) {
+ sb.append("<link type=\"text/css\" href=\"" + backToRealm + reservedPrefix
+ + "/toolbarMozilla.css\" rel=\"stylesheet\"/>");
+ sb.append(System.getProperty("line.separator"));
+ }
+ // If browser is IE
+ if (request.getHeader("User-Agent").indexOf("compatible; MSIE") >= 0
+ && request.getHeader("User-Agent").indexOf("Windows") >= 0) {
+ sb.append("<link type=\"text/css\" href=\"" + backToRealm + reservedPrefix + "/toolbarIE.css\" rel=\"stylesheet\"/>");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("<style type=\"text/css\" media=\"screen\">");
+ sb.append(" body{behavior:url(" + backToRealm + reservedPrefix + "/csshover.htc);font-size:100%;}");
+ sb.append("</style>");
+
+ }
+ // If browser is IE6
+ if (request.getHeader("User-Agent").indexOf("compatible; MSIE 6") >= 0
+ && request.getHeader("User-Agent").indexOf("Windows") >= 0) {
+ sb.append("<link type=\"text/css\" href=\"" + backToRealm + reservedPrefix + "/toolbarIE6.css\" rel=\"stylesheet\"/>");
+ sb.append(System.getProperty("line.separator"));
+ }
+ sb.append("<!-- END: Dynamically added code by " + this.getClass().getName() + " -->");
+
+ return sb.toString();
+ }
+
+ public String getToolbarBodyEnd(Resource resource, HttpServletRequest request, Map map, String reservedPrefix) {
+ return "</div>";
+ }
+
+ /**
+ * Gets the toolbar menus.
+ */
+ private String getToolbarMenus(Resource resource, HttpServletRequest request, Map map, String reservedPrefix) throws Exception {
+ return menu.getAllMenus(resource, request, map, reservedPrefix);
+ }
+
+ /**
+ * Gets information such as realm name, user name, etc.
+ */
+ private String getInfo(Resource resource, HttpServletRequest request, Map map) throws Exception {
+ String userLanguage = getUserLanguage(resource);
+ StringBuilder buf = new StringBuilder();
+ buf.append("<span id=\"yaneltoolbar_info\">");
+ //buf.append("Version: " + yanel.getVersion() + "-r" + yanel.getRevision() + "  ");
+
+ if (ResourceAttributeHelper.hasAttributeImplemented(resource, "Versionable", "2")) {
+ VersionableV2 versionableRes = (VersionableV2) resource;
+ if (versionableRes.isCheckedOut()) {
+ buf.append(getLabel("page", userLanguage) + ": <b>Locked by " + versionableRes.getCheckoutUserID()
+ + "</b> (<a href=\"?" + YanelServlet.YANEL_RESOURCE_USECASE + "=" + YanelServlet.RELEASE_LOCK
+ + "\">unlock</a>)  ");
+ }
+ }
+ Identity identity = resource.getEnvironment().getIdentity();
+ if (identity != null && !identity.isWorld()) {
+ String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(resource.getPath());
+ buf.append(getLabel("user", userLanguage) + ": <b><a href=\"" + backToRealm + "yanel/users/" + identity.getUsername()
+ + ".html\" style=\"font-size: 13px; text-decoration: none;\">" + identity.getAlias() + "</a></b>"); // TODO: yanel/users should be replaced by reservedPrefix, also see src/webapp/src/java/org/wyona/yanel/servlet/menu/Menu.java
+ } else {
+ buf.append(getLabel("user", userLanguage) + ": <b>Not signed in!</b>");
+ }
+ buf.append("</span>");
+ return buf.toString();
+ }
+
+ /**
+ * Gets user language (order: profile, browser, ...) (Also see
+ * org/wyona/yanel/servlet/menu/Menu.java)
+ */
+ private String getUserLanguage(Resource resource) throws Exception {
+ Identity identity = resource.getEnvironment().getIdentity();
+ String language = resource.getRequestedLanguage();
+ String userID = identity.getUsername();
+ if (userID != null) {
+ String userLanguage = resource.getRealm().getIdentityManager().getUserManager().getUser(userID).getLanguage();
+ if (userLanguage != null) {
+ language = userLanguage;
+ log.debug("Use user profile language: " + language);
+ } else {
+ log.debug("Use requested language: " + language);
+ }
+ }
+ return language;
+ }
+
+ /**
+ * Gets i18n (TODO: Replace this by something more generic)
+ *
+ * @param key I18n key
+ * @param language Language
+ */
+ private static String getLabel(String key, String language) {
+ if (language.equals("de")) {
+ if (key.equals("user")) {
+ return "Benutzer";
+ } else if (key.equals("page")) {
+ return "Seite";
+ } else {
+ log.warn("Key '" + key + "' not supported yet by requested language '" + language + "'. Fallback to english!");
+ return getLabel(key, "en");
+ }
+ } else if (language.equals("en")) {
+ if (key.equals("user")) {
+ return "User";
+ } else if (key.equals("page")) {
+ return "Page";
+ } else {
+ log.warn("Key '" + key + "' not supported yet!");
+ return key;
+ }
+ } else {
+ log.warn("Language '" + language + "' not supported yet. Fallback to english!");
+ return getLabel(key, "en");
+ }
+ }
+
+}
More information about the Yanel-commits
mailing list