[Yanel-commits] rev 41411 -
public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet
michi at wyona.com
michi at wyona.com
Mon Feb 9 10:29:54 CET 2009
Author: michi
Date: 2009-02-09 10:29:53 +0100 (Mon, 09 Feb 2009)
New Revision: 41411
Added:
public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelHTMLUI.java
Modified:
public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
Toolbar methods moved into seperate class
Copied: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelHTMLUI.java (from rev 41410, public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java)
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelHTMLUI.java (rev 0)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelHTMLUI.java 2009-02-09 09:29:53 UTC (rev 41411)
@@ -0,0 +1,277 @@
+package org.wyona.yanel.servlet;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.log4j.Logger;
+import org.wyona.security.core.api.Identity;
+import org.wyona.yanel.core.Resource;
+import org.wyona.yanel.core.attributes.viewable.View;
+import org.wyona.yanel.core.map.Map;
+
+class YanelHTMLUI {
+
+ private static final String TOOLBAR_KEY = "toolbar";
+
+ private String reservedPrefix;
+ private Map map;
+
+ private static Logger log = Logger.getLogger(YanelHTMLUI.class);
+
+ YanelHTMLUI(Map map, String reservedPrefix) {
+ this.reservedPrefix = reservedPrefix;
+ this.map = map;
+ }
+
+ /**
+ * Checks if the yanel.toolbar request parameter is set and stores
+ * the value of the parameter in the session.
+ * @param request
+ */
+ void switchToolbar(HttpServletRequest request) {
+ // Check for toolbar ...
+ String yanelToolbar = request.getParameter("yanel.toolbar");
+ if(yanelToolbar != null) {
+ if (yanelToolbar.equals("on")) {
+ log.info("Turn on toolbar!");
+ enableToolbar(request);
+ } else if (yanelToolbar.equals("off")) {
+ log.info("Turn off toolbar!");
+ disableToolbar(request);
+ } else {
+ log.warn("No such toolbar value: " + yanelToolbar);
+ }
+ }
+ }
+
+ /**
+ * Get toolbar menus
+ */
+ private String getToolbarMenus(Resource resource, HttpServletRequest request) throws ServletException, IOException, Exception {
+ org.wyona.yanel.servlet.menu.Menu menu = null;
+ String menuRealmClass = resource.getRealm().getMenuClass();
+ if (menuRealmClass != null) {
+ menu = (org.wyona.yanel.servlet.menu.Menu) Class.forName(menuRealmClass).newInstance();
+ // TODO: Check resource configuration ...
+ //} else if (RESOURCE) {
+ } else {
+ menu = new org.wyona.yanel.servlet.menu.impl.DefaultMenu();
+ }
+ final String reservedPrefix = this.reservedPrefix;
+ final Map map = this.map;
+ return menu.getAllMenus(resource, request, map, reservedPrefix);
+ }
+
+ /**
+ * Gets the part of the toolbar which has to be inserted into the html header.
+ * @param resource
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ private String getToolbarHeader(Resource resource, HttpServletRequest request) throws Exception {
+ final String reservedPrefix = this.reservedPrefix;
+
+ String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(resource.getPath());
+ StringBuffer sb= new StringBuffer();
+
+ 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"));
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * Gets the part of the toolbar which has to be inserted into the html body
+ * right after the opening body tag.
+ * @param resource
+ * @return
+ * @throws Exception
+ */
+ private String getToolbarBodyStart(Resource resource, HttpServletRequest request) throws Exception {
+ final String reservedPrefix = this.reservedPrefix;
+ final Map map = this.map;
+
+ String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(resource.getPath());
+ StringBuffer buf = new StringBuffer();
+ buf.append("<div id=\"yaneltoolbar_headerwrap\">");
+ buf.append("<div id=\"yaneltoolbar_menu\">");
+ buf.append(getToolbarMenus(resource, request));
+ buf.append("</div>");
+
+ buf.append("<span id=\"yaneltoolbar_info\">");
+ //buf.append("Version: " + yanel.getVersion() + "-r" + yanel.getRevision() + "  ");
+ buf.append("Realm: <b>" + resource.getRealm().getName() + "</b>  ");
+ Identity identity = YanelServlet.getIdentity(request, map);
+ if (identity != null && !identity.isWorld()) {
+ buf.append("User: <b>" + identity.getUsername() + "</b>");
+ } else {
+ buf.append("User: <b>Not signed in!</b>");
+ }
+ buf.append("</span>");
+
+ buf.append("<span id=\"yaneltoolbar_logo\">");
+ buf.append("<img src=\"" + backToRealm + reservedPrefix + "/yanel_toolbar_logo.png\"/>");
+ buf.append("</span>");
+
+ buf.append("</div>");
+ buf.append("<div id=\"yaneltoolbar_middlewrap\">");
+ return buf.toString();
+ }
+
+ /**
+ * Gets the part of the toolbar which has to be inserted into the html body
+ * right before the closing body tag.
+ * @param resource
+ * @return
+ * @throws Exception
+ */
+ private String getToolbarBodyEnd(Resource resource, HttpServletRequest request) throws Exception {
+ return "</div>";
+ }
+
+ /**
+ * Merges the toolbar and the page content. This will parse the html stream and add
+ * the toolbar.
+ * @param response
+ * @param resource
+ * @param view
+ * @throws Exception
+ */
+ void mergeToolbarWithContent(HttpServletRequest request, HttpServletResponse response,
+ Resource resource, View view) throws Exception {
+
+ final int INSIDE_TAG = 0;
+ final int OUTSIDE_TAG = 1;
+
+ String encoding = view.getEncoding();
+ if (encoding == null) {
+ encoding = "UTF-8";
+ }
+ InputStreamReader reader = new InputStreamReader(view.getInputStream(), encoding);
+ OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream(), encoding);
+ int c;
+ int state = OUTSIDE_TAG;
+ StringBuffer tagBuf = null;
+ int headcount = 0;
+ int bodycount = 0;
+ while ((c = reader.read()) != -1) {
+ switch (state) {
+ case OUTSIDE_TAG:
+ if (c == '<') {
+ tagBuf = new StringBuffer("<");
+ state = INSIDE_TAG;
+ } else {
+ writer.write(c);
+ }
+ break;
+ case INSIDE_TAG:
+ //writer.write(c);
+ if (c == '>') {
+ state = OUTSIDE_TAG;
+ tagBuf.append((char)c);
+ String tag = tagBuf.toString();
+ if (tag.startsWith("<head")) {
+ if (headcount == 0) {
+ writer.write(tag, 0, tag.length());
+ String toolbarString = getToolbarHeader(resource, request);
+ writer.write(toolbarString, 0, toolbarString.length());
+ } else {
+ writer.write(tag, 0, tag.length());
+ }
+ headcount++;
+ } else if (tag.startsWith("<body")) {
+ if (bodycount == 0) {
+ writer.write(tag, 0, tag.length());
+ String toolbarString = getToolbarBodyStart(resource, request);
+ writer.write(toolbarString, 0, toolbarString.length());
+ } else {
+ writer.write(tag, 0, tag.length());
+ }
+ bodycount++;
+ } else if (tag.equals("</body>")) {
+ bodycount--;
+ if (bodycount == 0) {
+ String toolbarString = getToolbarBodyEnd(resource, request);
+ writer.write(toolbarString, 0, toolbarString.length());
+ writer.write(tag, 0, tag.length());
+ } else {
+ writer.write(tag, 0, tag.length());
+ }
+ } else {
+ writer.write(tag, 0, tag.length());
+ }
+ } else {
+ tagBuf.append((char)c);
+ }
+ break;
+ }
+ }
+ writer.flush();
+ writer.close();
+ reader.close();
+ }
+
+ /**
+ *
+ */
+ void enableToolbar(HttpServletRequest request) {
+ request.getSession(true).setAttribute(TOOLBAR_KEY, "on");
+ }
+
+ /**
+ *
+ */
+ void disableToolbar(HttpServletRequest request) {
+ request.getSession(true).setAttribute(TOOLBAR_KEY, "off");
+ }
+
+ /**
+ *
+ */
+ boolean isToolbarEnabled(HttpServletRequest request) {
+ String toolbarStatus = (String) request.getSession(true).getAttribute(TOOLBAR_KEY);
+ if (toolbarStatus != null && toolbarStatus.equals("on")) {
+ String yanelToolbar = request.getParameter("yanel.toolbar");
+ if(yanelToolbar != null && request.getParameter("yanel.toolbar").equals("suppress")) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java 2009-02-08 23:01:27 UTC (rev 41410)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java 2009-02-09 09:29:53 UTC (rev 41411)
@@ -4,9 +4,7 @@
import java.io.File;
import java.io.InputStream;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.io.OutputStream;
-import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Calendar;
@@ -85,10 +83,6 @@
private static Category log = Category.getInstance(YanelServlet.class);
- private ServletConfig config;
-
- private ResourceTypeRegistry rtr;
-
private Map map;
private Yanel yanelInstance;
private Sitetree sitetree;
@@ -97,8 +91,7 @@
private String xsltLoginScreenDefault;
public static final String IDENTITY_MAP_KEY = "identity-map";
- private static final String TOOLBAR_KEY = "toolbar";
- private static final String TOOLBAR_USECASE = "toolbar"; //TODO is this the same as TOOLBAR_KEY?
+ private static final String TOOLBAR_USECASE = "toolbar"; //TODO is this the same as YanelAuthoringUI.TOOLBAR_KEY?
public static final String NAMESPACE = "http://www.wyona.org/yanel/1.0";
private static final String METHOD_PROPFIND = "PROPFIND";
@@ -108,14 +101,14 @@
private static final String METHOD_PUT = "PUT";
private static final String METHOD_DELETE = "DELETE";
private static final String HTTP_REFERRER = "Referer"; // ah, misspellings, how I hate thee (http://en.wikipedia.org/wiki/Referer)!
- private static final int INSIDE_TAG = 0;
- private static final int OUTSIDE_TAG = 1;
private String sslPort = null;
private String toolbarMasterSwitch = "off";
private String reservedPrefix;
private String servletContextRealPath;
private int cacheExpires = 0;
+
+ private YanelHTMLUI yanelUI;
public static final String DEFAULT_ENCODING = "UTF-8";
@@ -134,8 +127,6 @@
*
*/
public void init(ServletConfig config) throws ServletException {
- this.config = config;
-
servletContextRealPath = config.getServletContext().getRealPath("/");
xsltInfoAndException = org.wyona.commons.io.FileUtil.file(servletContextRealPath, config.getInitParameter("exception-and-info-screen-xslt"));
@@ -144,8 +135,6 @@
yanelInstance = Yanel.getInstance();
yanelInstance.init();
- rtr = yanelInstance.getResourceTypeRegistry();
-
map = (Map) yanelInstance.getBeanFactory().getBean("map");
sitetree = (Sitetree) yanelInstance.getBeanFactory().getBean("repo-navigation");
@@ -157,6 +146,8 @@
if (expires != null) {
this.cacheExpires = Integer.parseInt(expires);
}
+
+ yanelUI = new YanelHTMLUI(map, reservedPrefix);
} catch (Exception e) {
log.error(e);
throw new ServletException(e.getMessage(), e);
@@ -237,7 +228,7 @@
Resource resource = getResource(request, response);
// Enable or disable toolbar
- switchToolbar(request);
+ yanelUI.switchToolbar(request);
String transition = request.getParameter(YANEL_RESOURCE_WORKFLOW_TRANSITION);
if (transition != null) {
@@ -271,9 +262,9 @@
}
}
return;
- } else if (value != null && value.equals("roll-back")) {
+ } else if (value != null && value.equals("roll-back")) {
log.debug("Roll back ...");
- org.wyona.yanel.core.util.VersioningUtil.rollBack(resource, request.getParameter(YANEL_RESOURCE_REVN), getIdentity(request).getUsername());
+ org.wyona.yanel.core.util.VersioningUtil.rollBack(resource, request.getParameter(YANEL_RESOURCE_REVN), getIdentity(request, map).getUsername());
// TODO: Send confirmation screen
getContent(request, response);
return;
@@ -288,28 +279,6 @@
}
/**
- * Checks if the yanel.toolbar request parameter is set and stores
- * the value of the parameter in the session.
- * @param request
- */
- private void switchToolbar(HttpServletRequest request) {
- // Check for toolbar ...
- String yanelToolbar = request.getParameter("yanel.toolbar");
- if(yanelToolbar != null) {
- HttpSession session = request.getSession(false);
- if (yanelToolbar.equals("on")) {
- log.info("Turn on toolbar!");
- enableToolbar(request);
- } else if (yanelToolbar.equals("off")) {
- log.info("Turn off toolbar!");
- disableToolbar(request);
- } else {
- log.warn("No such toolbar value: " + yanelToolbar);
- }
- }
- }
-
- /**
* Returns the mime-type according to the given file extension.
* Default is application/octet-stream.
* @param extension
@@ -356,7 +325,7 @@
HttpSession session = request.getSession(true);
Element sessionElement = (Element) rootElement.appendChild(doc.createElement("session"));
sessionElement.setAttribute("id", session.getId());
- Enumeration attrNames = session.getAttributeNames();
+ Enumeration<?> attrNames = session.getAttributeNames();
if (!attrNames.hasMoreElements()) {
Element sessionNoAttributesElement = (Element) sessionElement.appendChild(doc.createElement("no-attributes"));
}
@@ -720,7 +689,7 @@
}
// Enable or disable toolbar
- switchToolbar(request);
+ yanelUI.switchToolbar(request);
getContent(request, response);
}
@@ -901,10 +870,10 @@
private Environment getEnvironment(HttpServletRequest request, HttpServletResponse response) throws ServletException {
Identity identity;
try {
- identity = getIdentity(request);
+ identity = getIdentity(request, map);
Realm realm = map.getRealm(request.getServletPath());
String stateOfView = StateOfView.AUTHORING;
- if (isToolbarEnabled(request)) {
+ if (yanelUI.isToolbarEnabled(request)) {
stateOfView = StateOfView.AUTHORING;
} else {
stateOfView = StateOfView.LIVE;
@@ -1083,7 +1052,7 @@
Realm realm;
String path;
try {
- identity = getIdentity(request);
+ identity = getIdentity(request, map);
realm = map.getRealm(request.getServletPath());
path = map.getPath(realm, request.getServletPath());
} catch (Exception e) {
@@ -1147,9 +1116,9 @@
- Or authentication was successful and web authenticator sends a redirect
*/
return response;
- } else {
+ } else {
try {
- log.warn("Authentication was successful for user: " + getIdentity(request).getUsername());
+ log.warn("Authentication was successful for user: " + getIdentity(request, map).getUsername());
} catch (Exception e) {
log.error(e, e);
}
@@ -1392,10 +1361,10 @@
*/
public HttpServletResponse doLogout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
- if (isToolbarEnabled(request)) {
+ if (yanelUI.isToolbarEnabled(request)) {
// TODO: Check if WORLD has access to the toolbar
//if (getRealm().getPolicyManager().authorize(path, new Identity(), new Usecase(TOOLBAR_USECASE))) {
- disableToolbar(request);
+ yanelUI.disableToolbar(request);
//}
}
@@ -1608,198 +1577,12 @@
}
/**
- * Get toolbar menus
- */
- private String getToolbarMenus(Resource resource, HttpServletRequest request) throws ServletException, IOException, Exception {
- org.wyona.yanel.servlet.menu.Menu menu = null;
- String menuRealmClass = resource.getRealm().getMenuClass();
- if (menuRealmClass != null) {
- menu = (org.wyona.yanel.servlet.menu.Menu) Class.forName(menuRealmClass).newInstance();
- // TODO: Check resource configuration ...
- //} else if (RESOURCE) {
- } else {
- menu = new org.wyona.yanel.servlet.menu.impl.DefaultMenu();
- }
- return menu.getAllMenus(resource, request, map, reservedPrefix);
- }
-
- /**
- * Gets the part of the toolbar which has to be inserted into the html header.
- * @param resource
- * @param request
- * @return
- * @throws Exception
- */
- private String getToolbarHeader(Resource resource, HttpServletRequest request) throws Exception {
- String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(resource.getPath());
- StringBuffer sb= new StringBuffer();
-
- 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"));
- }
-
- return sb.toString();
- }
-
- /**
- * Gets the part of the toolbar which has to be inserted into the html body
- * right after the opening body tag.
- * @param resource
- * @param request
- * @return
- * @throws Exception
- */
- private String getToolbarBodyStart(Resource resource, HttpServletRequest request) throws Exception {
- String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(resource.getPath());
- StringBuffer buf = new StringBuffer();
- buf.append("<div id=\"yaneltoolbar_headerwrap\">");
- buf.append("<div id=\"yaneltoolbar_menu\">");
- buf.append(getToolbarMenus(resource, request));
- buf.append("</div>");
-
- buf.append("<span id=\"yaneltoolbar_info\">");
- //buf.append("Version: " + yanel.getVersion() + "-r" + yanel.getRevision() + "  ");
- buf.append("Realm: <b>" + resource.getRealm().getName() + "</b>  ");
- Identity identity = getIdentity(request);
- if (identity != null && !identity.isWorld()) {
- buf.append("User: <b>" + identity.getUsername() + "</b>");
- } else {
- buf.append("User: <b>Not signed in!</b>");
- }
- buf.append("</span>");
-
- buf.append("<span id=\"yaneltoolbar_logo\">");
- buf.append("<img src=\"" + backToRealm + reservedPrefix + "/yanel_toolbar_logo.png\"/>");
- buf.append("</span>");
-
- buf.append("</div>");
- buf.append("<div id=\"yaneltoolbar_middlewrap\">");
- return buf.toString();
- }
-
- /**
- * Gets the part of the toolbar which has to be inserted into the html body
- * right before the closing body tag.
- * @param resource
- * @param request
- * @return
- * @throws Exception
- */
- private String getToolbarBodyEnd(Resource resource, HttpServletRequest request) throws Exception {
- return "</div>";
- }
-
- /**
- * Merges the toolbar and the page content. This will parse the html stream and add
- * the toolbar.
- * @param request
- * @param response
- * @param resource
- * @param view
- * @throws Exception
- */
- private void mergeToolbarWithContent(HttpServletRequest request, HttpServletResponse response,
- Resource resource, View view) throws Exception {
- String encoding = view.getEncoding();
- if (encoding == null) {
- encoding = "UTF-8";
- }
- InputStreamReader reader = new InputStreamReader(view.getInputStream(), encoding);
- OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream(), encoding);
- int c;
- int state = OUTSIDE_TAG;
- StringBuffer tagBuf = null;
- int headcount = 0;
- int bodycount = 0;
- while ((c = reader.read()) != -1) {
- switch (state) {
- case OUTSIDE_TAG:
- if (c == '<') {
- tagBuf = new StringBuffer("<");
- state = INSIDE_TAG;
- } else {
- writer.write(c);
- }
- break;
- case INSIDE_TAG:
- //writer.write(c);
- if (c == '>') {
- state = OUTSIDE_TAG;
- tagBuf.append((char)c);
- String tag = tagBuf.toString();
- if (tag.startsWith("<head")) {
- if (headcount == 0) {
- writer.write(tag, 0, tag.length());
- String toolbarString = getToolbarHeader(resource, request);
- writer.write(toolbarString, 0, toolbarString.length());
- } else {
- writer.write(tag, 0, tag.length());
- }
- headcount++;
- } else if (tag.startsWith("<body")) {
- if (bodycount == 0) {
- writer.write(tag, 0, tag.length());
- String toolbarString = getToolbarBodyStart(resource, request);
- writer.write(toolbarString, 0, toolbarString.length());
- } else {
- writer.write(tag, 0, tag.length());
- }
- bodycount++;
- } else if (tag.equals("</body>")) {
- bodycount--;
- if (bodycount == 0) {
- String toolbarString = getToolbarBodyEnd(resource, request);
- writer.write(toolbarString, 0, toolbarString.length());
- writer.write(tag, 0, tag.length());
- } else {
- writer.write(tag, 0, tag.length());
- }
- } else {
- writer.write(tag, 0, tag.length());
- }
- } else {
- tagBuf.append((char)c);
- }
- break;
- }
- }
- writer.flush();
- writer.close();
- reader.close();
- }
-
- /**
* Gets the identity from the session associated with the given request.
* @param request
+ * @param map
* @return identity or null if there is no identity in the session for the current realm or if there is no session at all
*/
- private Identity getIdentity(HttpServletRequest request) throws Exception {
+ static Identity getIdentity(HttpServletRequest request, Map map) throws Exception {
Realm realm = map.getRealm(request.getServletPath());
HttpSession session = request.getSession(false);
if (session != null) {
@@ -2076,8 +1859,8 @@
}
// Set HTTP headers:
- HashMap headers = view.getHttpHeaders();
- Iterator iter = headers.keySet().iterator();
+ HashMap<?, ?> headers = view.getHttpHeaders();
+ Iterator<?> iter = headers.keySet().iterator();
while (iter.hasNext()) {
String name = (String)iter.next();
String value = (String)headers.get(name);
@@ -2089,7 +1872,7 @@
// Possibly embed toolbar:
// TODO: Check if user is authorized to actually see toolbar (Current flaw: Enabled Toolbar, Login, Toolbar is enabled, Logout, Toolbar is still visible!)
- if (isToolbarEnabled(request)) {
+ if (yanelUI.isToolbarEnabled(request)) {
String mimeType = view.getMimeType();
if (mimeType != null && mimeType.indexOf("html") > 0) {
// TODO: What about other query strings or frames or TinyMCE?
@@ -2097,7 +1880,7 @@
if (toolbarMasterSwitch.equals("on")) {
OutputStream os = response.getOutputStream();
try {
- mergeToolbarWithContent(request, response, res, view);
+ yanelUI.mergeToolbarWithContent(request, response, res, view);
} catch (Exception e) {
log.error(e, e);
String message = "Error merging toolbar into content: " + e.toString();
@@ -2296,36 +2079,6 @@
}
/**
- *
- */
- private void enableToolbar(HttpServletRequest request) {
- request.getSession(true).setAttribute(TOOLBAR_KEY, "on");
- }
-
- /**
- *
- */
- private void disableToolbar(HttpServletRequest request) {
- request.getSession(true).setAttribute(TOOLBAR_KEY, "off");
- }
-
- /**
- *
- */
- private static boolean isToolbarEnabled(HttpServletRequest request) {
- String toolbarStatus = (String) request.getSession(true).getAttribute(TOOLBAR_KEY);
- if (toolbarStatus != null && toolbarStatus.equals("on")) {
- String yanelToolbar = request.getParameter("yanel.toolbar");
- if(yanelToolbar != null && request.getParameter("yanel.toolbar").equals("suppress")) {
- return false;
- } else {
- return true;
- }
- }
- return false;
- }
-
- /**
* Handle delete usecase
*/
private void handleDeleteUsecase(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
More information about the Yanel-commits
mailing list