1 10 package org.mmbase.bridge.jsp.taglib.editor; 11 12 import java.io.*; 13 import java.util.*; 14 15 import org.mmbase.bridge.*; 16 import org.mmbase.bridge.jsp.taglib.LocaleTag; 17 import javax.servlet.jsp.PageContext ; 18 import org.mmbase.util.functions.*; 19 import org.mmbase.util.logging.Logger; 20 import org.mmbase.util.logging.Logging; 21 22 35 36 public class BasicEditor extends Editor { 37 38 private static final Logger log = Logging.getLoggerInstance(BasicEditor.class); 39 40 private static final FunctionProvider patterns = PatternNodeFunctionProvider.getInstance(); 41 42 private static final Parameter[] PARAMS = new Parameter[] { 43 new Parameter("url", String .class, "/mmbase/edit/basic/"), 44 new Parameter("urlparams", Map.class, null), 45 new Parameter("icon", String .class, ""), 46 new Parameter("iconparams", Map.class, null), 47 new Parameter("when", String .class, "always"), 48 new Parameter("target", String .class, "new"), 49 Parameter.CLOUD 50 }; 51 52 53 protected Parameter[] getParameterDefinition() { 54 return PARAMS; 55 } 56 57 58 63 public void getEditorHTML(PageContext context) throws IOException { 64 65 String nodenr = ""; 66 if (!nodenrList.isEmpty()) { nodenr = (String ) nodenrList.get(0); 68 } 69 70 makeHTML(nodenr, context); 71 72 } 73 76 protected String getValue(String param, Cloud cloud, String nodenr, PageContext context) { 77 Function urlFunction = patterns.getFunction(parameters.getString(param)); 78 Parameters urlParameters = urlFunction.createParameters(); 79 if (cloud != null) { 80 Node node = cloud.getNode(nodenr); 81 urlParameters.set(Parameter.NODE, node); 82 } 83 urlParameters.setAll((Map) parameters.get(param + "params")); 84 urlParameters.setIfDefined(Parameter.REQUEST, context.getRequest()); 85 urlParameters.setIfDefined(Parameter.RESPONSE, context.getResponse()); 86 return (String ) urlFunction.getFunctionValue(urlParameters); 87 } 88 94 protected void makeHTML(String nodenr, PageContext context) throws IOException { 95 String when = parameters.getString("when"); 96 97 if ("always".equals(when) || "true".equals(context.getRequest().getParameter("edit"))) { 98 Cloud cloud = (Cloud) parameters.get(Parameter.CLOUD); 99 100 String url = getValue("url", cloud, nodenr, context); 101 String icon = getValue("icon", cloud, nodenr, context); 102 url = makeRelative(url, context); 103 Writer html = context.getOut(); 104 Locale locale = (Locale) context.getAttribute(LocaleTag.KEY, PageContext.PAGE_SCOPE); 105 if (locale == null) { 106 locale = org.mmbase.bridge.ContextProvider.getDefaultCloudContext().getDefaultLocale(); 107 } 108 String title = ResourceBundle.getBundle("org.mmbase.bridge.jsp.taglib.resources.messages", locale).getString("edit"); 109 html.write("<a class=\"mm_edit\" title=\"" + title + "\" HREF=\""); 110 html.write(url); 111 html.write("\" "); 112 if ("new".equals(parameters.getString("target"))) { 113 html.write("onclick=\"window.open(this.href); return false;\" "); 114 } 115 html.write(">"); 116 if (! "".equals(icon)) { 117 icon = makeRelative(icon, context); 118 html.write("<img SRC=\""); 119 html.write(icon); 120 html.write("\" alt=\"" + title + "\">"); 121 } else { 122 html.write("[" + title + "]"); 123 } 124 html.write("</a>"); 125 } 126 } 127 128 136 protected String makeRelative(String url, PageContext pageContext) { 137 StringBuffer show = new StringBuffer (url); 138 javax.servlet.http.HttpServletRequest req = (javax.servlet.http.HttpServletRequest )pageContext.getRequest(); 139 if (show.charAt(0) == '/') { if (show.length() > 1 && show.charAt(1) == '/') { 141 log.debug("'absolute' url, not making relative"); 142 show.deleteCharAt(0); 143 show.insert(0, req.getContextPath()); 144 145 } else { 146 log.debug("'absolute' url"); 147 String thisDir = new java.io.File (req.getServletPath()).getParent(); 148 show.insert(0, org.mmbase.util.UriParser.makeRelative(thisDir, "/")); } 150 } 151 return show.toString(); 152 } 153 154 } 155 | Popular Tags |