X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeHttp.java;h=0510b3c837116053f1ac5c8265e5c2213b96885d;hb=61780b581925666edd4bd7743a00dca7170f1d35;hp=de635983999998a5bcb2e6ad02d7ebad0f259d8b;hpb=c90be8d8cf3c1b52480e51fb7841cd3e7a5a3796;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java index de6359839..0510b3c83 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java @@ -10,6 +10,7 @@ import java.io.PrintWriter; import java.security.PrivilegedExceptionAction; import java.security.cert.X509Certificate; import java.util.Calendar; +import java.util.Collection; import java.util.Enumeration; import javax.jcr.Node; @@ -28,16 +29,17 @@ import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; -import org.argeo.cms.util.CmsUtils; -import org.argeo.jcr.ArgeoJcrConstants; import org.argeo.jcr.JcrUtils; -import org.eclipse.equinox.http.servlet.ExtendedHttpService; +import org.argeo.node.NodeConstants; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.http.HttpService; /** * Intercepts and enriches http access, mainly focusing on security and * transactionality. */ -class NodeHttp implements KernelConstants, ArgeoJcrConstants { +class NodeHttp implements KernelConstants { private final static Log log = LogFactory.getLog(NodeHttp.class); // Filters @@ -46,16 +48,16 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { // private final DoSFilter dosFilter; // private final QoSFilter qosFilter; - private Repository repository; + private BundleContext bc; - NodeHttp(ExtendedHttpService httpService, Repository node) { - this.repository = node; + NodeHttp(HttpService httpService, BundleContext bc) { + this.bc = bc; // rootFilter = new RootFilter(); // dosFilter = new CustomDosFilter(); // qosFilter = new QoSFilter(); try { - httpService.registerServlet("/!", new LinkServlet(repository), null, null); + httpService.registerServlet("/!", new LinkServlet(), null, null); httpService.registerServlet("/robots.txt", new RobotServlet(), null, null); } catch (Exception e) { throw new CmsException("Cannot register filters", e); @@ -65,13 +67,8 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { public void destroy() { } - static class LinkServlet extends HttpServlet { + class LinkServlet extends HttpServlet { private static final long serialVersionUID = 3749990143146845708L; - private final Repository repository; - - public LinkServlet(Repository repository) { - this.repository = repository; - } @Override protected void service(HttpServletRequest request, HttpServletResponse response) @@ -118,6 +115,9 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { @Override public Session run() throws Exception { + Collection> srs = bc.getServiceReferences(Repository.class, "(" + + NodeConstants.JCR_REPOSITORY_ALIAS + "=" + NodeConstants.ALIAS_NODE + ")"); + Repository repository = bc.getService(srs.iterator().next()); return repository.login(); } @@ -127,13 +127,13 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { String desc = node.hasProperty(JCR_DESCRIPTION) ? node.getProperty(JCR_DESCRIPTION).getString() : null; Calendar lastUpdate = node.hasProperty(JCR_LAST_MODIFIED) ? node.getProperty(JCR_LAST_MODIFIED).getDate() : null; - String url = CmsUtils.getCanonicalUrl(node, request); + String url = KernelUtils.getCanonicalUrl(node, request); String imgUrl = null; loop: for (NodeIterator it = node.getNodes(); it.hasNext();) { // Takes the first found cms:image Node child = it.nextNode(); if (child.isNodeType(CMS_IMAGE)) { - imgUrl = CmsUtils.getDataUrl(child, request); + imgUrl = KernelUtils.getDataUrl(child, request); break loop; } } @@ -176,7 +176,7 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { * escaping-html-in-java (+ escaping '). TODO Use * org.apache.commons.lang.StringEscapeUtils */ - private static String escapeHTML(String s) { + private String escapeHTML(String s) { StringBuilder out = new StringBuilder(Math.max(16, s.length())); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i);