X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=systems%2Forg.argeo.suite.studio%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fstudio%2Fparts%2FServletElem.java;fp=systems%2Forg.argeo.suite.studio%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fstudio%2Fparts%2FServletElem.java;h=51657955eabb24391e5b9bd016c9c29ed7a0e843;hb=baf563976c7595d5e50f2e38bb684196618b402f;hp=0000000000000000000000000000000000000000;hpb=129a2170cfbfaa6a972f79068d6892f9c2bb1d08;p=gpl%2Fargeo-suite.git diff --git a/systems/org.argeo.suite.studio/src/org/argeo/suite/studio/parts/ServletElem.java b/systems/org.argeo.suite.studio/src/org/argeo/suite/studio/parts/ServletElem.java new file mode 100644 index 0000000..5165795 --- /dev/null +++ b/systems/org.argeo.suite.studio/src/org/argeo/suite/studio/parts/ServletElem.java @@ -0,0 +1,62 @@ +package org.argeo.suite.studio.parts; + +import java.util.Arrays; +import java.util.Collection; + +import javax.servlet.Servlet; + +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; +import org.osgi.service.http.context.ServletContextHelper; +import org.osgi.service.http.whiteboard.HttpWhiteboardConstants; + +/** Site map element which is a plain servlet. */ +class ServletElem extends SiteElem { + private final ServiceReference serviceReference; + + public ServletElem(ServiceReference serviceReference) { + super(extractPath(serviceReference)); + this.serviceReference = serviceReference; + } + + + + public ServiceReference getServiceReference() { + return serviceReference; + } + + + + private static String extractPath(ServiceReference serviceReference) { + Object servletPattern = serviceReference.getProperties() + .get(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN); + Object servletContextSelect = serviceReference.getProperties() + .get(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT); + String servletContextPath = ""; + if (servletContextSelect != null) { + try { + Collection> scSr = serviceReference.getBundle() + .getBundleContext() + .getServiceReferences(ServletContextHelper.class, servletContextSelect.toString()); + if (scSr.size() > 0) { + servletContextPath = scSr.iterator().next() + .getProperty(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH).toString(); + if (servletContextPath.equals("/"))// default servlet context + servletContextPath = ""; + } + } catch (InvalidSyntaxException e) { + throw new IllegalArgumentException(e); + } + } + + if (servletPattern instanceof String) + return servletContextPath + servletPattern.toString(); + else if (servletPattern instanceof String[]) { + String[] patterns = (String[]) servletPattern; + if (patterns.length == 2 && patterns[1].equals(patterns[0] + "/*")) // RAP servlets + return servletContextPath + patterns[0]; + return servletContextPath + Arrays.asList(patterns).toString(); + } else + throw new IllegalArgumentException("Cannot interpret servlet pattern " + servletPattern.getClass()); + } +}