commit - 2ce6b28b221bde671d1b0e3fa38206b5236dba70
commit + d62310388e98a99aed5c22aa3299b846ceddf559
blob - dd2bef600f4c05da08c6afa9fff7c21240ed815e
blob + 6171455cc05eefce4e5f3eb6bdf5012cc4582b09
--- src/org/snipsnap/net/CommentStoreServlet.java
+++ src/org/snipsnap/net/CommentStoreServlet.java
}
private String sanitize(String parameter) {
- return parameter.split("[\r\n]")[0];
+ if(parameter != null) {
+ return parameter.split("[\r\n]")[0];
+ }
+ return parameter;
}
}
blob - 252e4c2e2683dc139feb79112e0636ed1302ed48
blob + c00c0a82f7c408644783f1da0699f8331cf940da
--- src/org/snipsnap/net/LoginServlet.java
+++ src/org/snipsnap/net/LoginServlet.java
}
private String sanitize(String parameter) {
- return parameter.split("[\r\n]")[0];
+ if(parameter != null) {
+ return parameter.split("[\r\n]")[0];
+ }
+ return parameter;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
blob - cfddca598f3dbee5d31ec023db4c6a485c66a2fd
blob + 4919d42a1ff71b796379ee57aeb708361755bf54
--- src/org/snipsnap/net/NewUserServlet.java
+++ src/org/snipsnap/net/NewUserServlet.java
}
private String sanitize(String parameter) {
- return parameter.split("[\r\n]")[0];
+ if(parameter != null) {
+ return parameter.split("[\r\n]")[0];
+ }
+ return parameter;
}
}
blob - 6a77592a4284ad8a3b3d9c1ff50a98f9531ea313
blob + cd7665ca1cf187acd6b0d93afa804cd9b1f131d5
--- src/org/snipsnap/net/RenderServlet.java
+++ src/org/snipsnap/net/RenderServlet.java
import org.radeox.util.Service;
import org.snipsnap.graph.ContentRenderer;
import org.snipsnap.graph.HorizontalContentRenderer;
+import org.snipsnap.graph.builder.StringTreeBuilder;
+import org.snipsnap.graph.builder.TreeBuilder;
+import org.snipsnap.graph.context.UrlContext;
+import org.snipsnap.graph.renderer.HtmlMapRenderer;
+import org.snipsnap.graph.renderer.Renderer;
+import snipsnap.api.app.Application;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.util.Collections;
-import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
-import java.io.IOException;
+import java.util.Map;
/**
* Render special content added to a temporary store. This is used for the
* @version $Id$
*/
public class RenderServlet extends HttpServlet {
+ private final static String RENDER_ID = "__render_id";
+
private static Map contentMap = Collections.synchronizedMap(new HashMap());
- private Map handlers = new HashMap();
+ private static Map handlers = new HashMap();
private final static ContentRenderer DEFAULT_HANDLER = new HorizontalContentRenderer();
/**
+ * Initialize the render servlet by loading the content handlers.
+ */
+ static {
+ Iterator contentRenderer =
+ Service.providers(org.snipsnap.graph.ContentRenderer.class);
+ while (contentRenderer.hasNext()) {
+ ContentRenderer renderer = (ContentRenderer) contentRenderer.next();
+ handlers.put(renderer.getName(), renderer);
+ }
+ }
+
+
+ /**
* Add content to the temporary store and return an id that can be used to select
* the content later. The graph macro uses this to store the graph description
* here which is then handed over to the rendering handler to translate to an image.
+ * The id will persist until content for the same name is added.
* <p/>
* Example:
* <img src="/exec/render?id=XXXX&handler=YYYY"/>
* @param content the textual content to be rendered
* @return an it to add to the url for retrieving the rendered content
*/
- public static String addContent(String content) {
- String key = null;
+ public static String addContent(String name, String content) {
+ Application app = Application.get();
+ String baseId = RENDER_ID + name;
+ String renderId = null;
synchronized (contentMap) {
+ String key = null;
int add = 0;
- int hashCode = content.hashCode();
do {
- key = String.valueOf(hashCode + add++);
- } while (contentMap.containsKey(key));
- contentMap.put(key, content);
+ key = String.valueOf(baseId + add++);
+ } while (app.getObject(key) != null);
+ // store a dummy to ensure the id is taken
+ app.storeObject(key, "");
+ // store content with corresponding id
+ renderId = Integer.toHexString(key.hashCode());
+ contentMap.put(renderId, content);
}
- return key;
+ return renderId;
}
- /**
- * Initialize the render servlet by loading the content handlers.
- *
- * @throws ServletException
- */
- public void init() throws ServletException {
- Iterator contentRenderer =
- Service.providers(org.snipsnap.graph.ContentRenderer.class);
- while (contentRenderer.hasNext()) {
- ContentRenderer renderer = (ContentRenderer) contentRenderer.next();
- handlers.put(renderer.getName(), renderer);
+ public static String getImageMap(String renderId, String handler) {
+ HtmlMapRenderer mapRenderer = new HtmlMapRenderer();
+ TreeBuilder builder = new StringTreeBuilder((String) contentMap.get(renderId));
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+ Renderer renderer = ((ContentRenderer) handlers.get(handler)).getRenderer();
+ if (null != renderer) {
+ UrlContext context = new UrlContext(renderId, renderer);
+ mapRenderer.render(builder.build(), out, context);
+ try {
+ out.flush();
+ out.close();
+ } catch (IOException e) {
+ // ignore as this is unlikely to happen
+ e.printStackTrace();
+ }
+ try {
+ return out.toString(Application.get().getConfiguration().getEncoding());
+ } catch (UnsupportedEncodingException e) {
+ return out.toString();
+ }
+ } else {
+ // we can't render the image map, so return comment
+ return "<!-- image map not possible, missing renderer for handler: " + handler + " -->";
}
}
+
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String handler = request.getParameter("handler");
String id = request.getParameter("id");
String content = (String) contentMap.get(id);
- contentMap.remove(id);
ContentRenderer renderer = (ContentRenderer) handlers.get(handler);
if (null == renderer) {
blob - ccda977a3cdadfd903feedc6a7a00fc43b69d367
blob + 1b3faeea18196d44917f6f498b87830c665d161e
--- src/org/snipsnap/net/SnipEditServlet.java
+++ src/org/snipsnap/net/SnipEditServlet.java
import org.radeox.util.Encoder;
import org.radeox.util.logging.Logger;
-import snipsnap.api.app.Application;
-import snipsnap.api.container.Components;
import org.snipsnap.security.AccessController;
-import snipsnap.api.snip.Snip;
-import snipsnap.api.snip.SnipSpace;
-import snipsnap.api.label.Label;
-import snipsnap.api.label.Labels;
import org.snipsnap.snip.label.TypeLabel;
-import org.snipsnap.user.Permissions;
import org.snipsnap.user.Roles;
import org.snipsnap.user.Security;
+import snipsnap.api.app.Application;
+import snipsnap.api.container.Components;
+import snipsnap.api.label.Label;
+import snipsnap.api.label.Labels;
+import snipsnap.api.snip.Snip;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
}
private String sanitize(String parameter) {
- return parameter.split("[\r\n]")[0];
+ if (parameter != null) {
+ return parameter.split("[\r\n]")[0];
+ }
+ return parameter;
}
}
blob - f2f7b94c1adb26059ae36ae8f78dbf6ea5b823c2
blob + 98681ba8a7d60edabf3b3c90ca8404eef28263f3
--- src/org/snipsnap/net/SnipStoreServlet.java
+++ src/org/snipsnap/net/SnipStoreServlet.java
package org.snipsnap.net;
import org.radeox.util.logging.Logger;
-import snipsnap.api.app.Application;
-import snipsnap.api.config.Configuration;
-import snipsnap.api.container.Components;
import org.snipsnap.net.filter.MultipartWrapper;
import org.snipsnap.security.AccessController;
-import snipsnap.api.snip.Snip;
import org.snipsnap.snip.SnipFormatter;
+import org.snipsnap.user.AuthenticationService;
import snipsnap.api.snip.SnipLink;
import snipsnap.api.snip.SnipSpace;
import snipsnap.api.snip.SnipSpaceFactory;
-import org.snipsnap.user.AuthenticationService;
-import org.snipsnap.user.Permissions;
-import org.snipsnap.user.Security;
import snipsnap.api.user.User;
import javax.servlet.RequestDispatcher;
}
private String sanitize(String parameter) {
- return parameter.split("[\r\n]")[0];
+ if (parameter != null) {
+ return parameter.split("[\r\n]")[0];
+ }
+ return parameter;
}
}