1 10 package org.mmbase.bridge.jsp.taglib.editor; 11 12 import java.io.IOException ; 13 import java.util.*; 14 15 import org.mmbase.bridge.*; 16 import org.mmbase.util.functions.*; 17 import org.mmbase.storage.search.*; 18 import org.mmbase.util.logging.Logger; 19 import org.mmbase.util.logging.Logging; 20 import javax.servlet.jsp.PageContext ; 21 22 36 37 public class YAMMEditor extends Editor { 38 39 private static final Logger log = Logging.getLoggerInstance(YAMMEditor.class); 40 41 private static final Parameter[] PARAMS = new Parameter[] { 42 new Parameter("url", String .class, "/mmbase/edit/yammeditor/yammeditor.jsp"), 43 new Parameter("icon", String .class, "/mmbase/style/images/change.gif") 44 }; 45 46 47 protected Parameter[] getParameterDefinition() { 48 return PARAMS; 49 } 50 51 52 53 private List startList = new ArrayList(); private List pathList = new ArrayList(); private List nList = new ArrayList(); private List fList = new ArrayList(); private Map fld2snMap = new HashMap(); 59 60 61 68 public void getEditorHTML(PageContext context) throws IOException { 69 String html = "Sorry. You should see an icon and a link to yammeditor here."; 70 71 String url = parameters.getString("url"); 72 String icon = parameters.getString("icon"); 73 74 url = makeRelative(url, context); 75 icon = makeRelative(icon, context); 76 html = makeHTML(url, icon); 77 78 log.debug("returning: " + html); 79 context.getOut().write(html); 80 } 81 82 89 public void registerFields(List queryList, List nodenrList, List fieldList) { 90 log.debug("processing fields"); 91 for (int i = 0; i < nodenrList.size(); i++) { 92 String fldName = (String ) fieldList.get(i); 93 log.debug("processing field '" + fldName + "'"); 94 Query query = (Query) queryList.get(i); 95 String nodenr = (String ) nodenrList.get(i); 96 97 processField(query, nodenr, fldName); 98 } 99 100 } 105 106 113 protected void processField(Query query, String nodenr, String fieldName) { 114 115 String path = getPathFromQuery(query); 117 if (!path.equals("") && !pathList.contains(path)) { 118 pathList.add(path); 119 log.debug("Added path : " + path); 120 } 121 122 List nl = getNodesFromQuery(query, nodenr); 123 Iterator e = nl.iterator(); while (e.hasNext()) { 125 String nr = (String )e.next(); 126 boolean startnode = false; 127 128 132 133 if (!fld2snMap.containsValue(nr) ) { 134 fld2snMap.put(String.valueOf(nodenr), nr); 135 log.debug("Added nodenr : " + nodenr + " sn : " + nr + " to fld2snMap"); 136 } else if (fld2snMap.isEmpty()) { 137 fld2snMap.put(String.valueOf(nodenr), nr); 138 startnode = true; 139 log.debug("Added nodenr (startnode): " + nodenr + " sn : " + nr + " to fld2snMap"); 140 } else { startnode = true; } 143 144 if (!startList.contains(nr) && startnode) { startList.add(nr); 147 log.debug("Added startnode : " + nr); 148 } 149 150 String str = nr + "_" + String.valueOf(nodenr); if (!nList.contains(str)) { 153 nList.add(str); 154 log.debug("Added nodenr : " + str); 155 } 156 157 String fieldstr = nr + "_" + fieldName; 159 if (!fList.contains(fieldstr)) { 160 fList.add(fieldstr); 161 log.debug("Added field : " + fieldstr); 162 } 163 } 164 165 } 166 167 protected List getNodesFromQuery(Query query, String nr) { 168 List nl = new ArrayList(); 169 List steps = query.getSteps(); 170 171 if (steps.size() == 1) { nl.add(nr); 173 log.debug("1. added nr to list of all the nodes in query: " + nr); 174 } 175 176 Iterator si = steps.iterator(); 177 while (si.hasNext()) { 178 Step step = (Step) si.next(); 179 180 SortedSet nodeSet = step.getNodes(); 183 for (Iterator nsi = nodeSet.iterator(); nsi.hasNext();) { 184 Integer n = (Integer )nsi.next(); 185 nr = String.valueOf(n); 186 187 if (!nl.contains(nr)) { 188 nl.add(nr); 189 log.debug("2. added nr to list of all the nodes in query: " + nr); 190 } 191 } 192 193 } 194 return nl; 195 } 196 197 198 205 protected List fillPathList(List ql) { 206 List pl = new ArrayList(); 207 208 Iterator i = ql.iterator(); 209 while (i.hasNext()) { 210 Query q = (Query) i.next(); 211 String path = getPathFromQuery(q); 212 if (!path.equals("") && !pl.contains(path)) { 213 pl.add(path); 214 log.debug("Added path '" + path + "' to pl"); 215 } 216 } 217 log.debug("Filled pathList with " + pl.size() + " paths."); 218 219 return pl; 220 } 221 222 230 protected String getPathFromQuery(Query query) { 231 StringBuffer path = new StringBuffer (); 232 233 java.util.List steps = query.getSteps(); 234 log.debug("Nr of steps : " + steps.size()); 235 if (steps.size() > 1) { Iterator si = steps.iterator(); 237 while (si.hasNext()) { 238 Step step = (Step) si.next(); 239 240 String nodenrs = ""; 241 SortedSet nodeSet = step.getNodes(); for (Iterator nsi = nodeSet.iterator(); nsi.hasNext();) { 243 Integer number = (Integer )nsi.next(); 244 if (nodenrs.equals("")) { 245 nodenrs = String.valueOf(number); 246 } else { 247 nodenrs = nodenrs + "," + String.valueOf(number); 248 } 249 250 } 251 252 if (step.getAlias() != null) { 254 if (path.length() == 0) { 255 path.append(nodenrs).append('_').append(step.getAlias()); 256 } else { 257 path.append(",").append(step.getAlias()); 258 } 259 } 260 } 261 } 262 return path.toString(); 263 } 264 265 273 protected String makeList4Url(List al) { 274 StringBuffer sb = new StringBuffer (); 275 if (al.size() > 0) { 276 Iterator e = al.iterator(); 277 while(e.hasNext()) { 278 if (sb.length() == 0) { 279 sb.append( (String ) e.next() ); 280 } else { 281 sb.append(';').append( (String ) e.next() ); 282 } 283 } 284 } 285 return sb.toString(); 286 } 287 288 296 public String makeHTML(String url, String icon) { 297 StringBuffer html = new StringBuffer (); 298 299 html.append("<div class=\"et\"><a title=\"click to edit\" HREF=\""); 300 html.append(url); 301 html.append("?nrs=").append(makeList4Url(startList)); html.append("&paths=").append(makeList4Url(pathList)); html.append("&fields=").append(makeList4Url(fList)); html.append("&nodes=").append(makeList4Url(nList)); html.append("\" onclick=\"window.open(this.href); return false;\">"); 306 307 if (!icon.equals("")) { 308 html.append("<img SRC=\"").append(icon).append("\" alt=\"edit\">"); 309 } else { 310 html.append("edit"); 311 } 312 313 html.append("</a></div>"); 314 315 return html.toString(); 316 } 317 318 326 protected String makeRelative(String url, PageContext pageContext) { 327 StringBuffer show = new StringBuffer (url); 328 javax.servlet.http.HttpServletRequest req = (javax.servlet.http.HttpServletRequest )pageContext.getRequest(); 329 if (show.charAt(0) == '/') { if (show.length() > 1 && show.charAt(1) == '/') { 331 log.debug("'absolute' url, not making relative"); 332 338 } else { 339 log.debug("'absolute' url"); 340 String thisDir = new java.io.File (req.getServletPath()).getParent(); 341 show.insert(0, org.mmbase.util.UriParser.makeRelative(thisDir, "/")); } 343 } 344 return show.toString(); 345 } 346 347 } 348 | Popular Tags |