blob: fdddb03c8e56497fe206a1916d915882692be9f3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.sdk.ws.jaxws.util;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.pde.core.plugin.IPluginAttribute;
import org.eclipse.pde.core.plugin.IPluginElement;
import org.eclipse.scout.commons.StringUtility;
import org.eclipse.scout.commons.xmlparser.ScoutXmlDocument;
import org.eclipse.scout.commons.xmlparser.ScoutXmlDocument.ScoutXmlElement;
import org.eclipse.scout.sdk.util.pde.PluginModelHelper;
import org.eclipse.scout.sdk.util.type.TypeUtility;
import org.eclipse.scout.sdk.workspace.IScoutBundle;
import org.eclipse.scout.sdk.workspace.IScoutBundleFilter;
import org.eclipse.scout.sdk.ws.jaxws.JaxWsConstants;
import org.eclipse.scout.sdk.ws.jaxws.JaxWsRuntimeClasses;
import org.eclipse.scout.sdk.ws.jaxws.resource.ResourceFactory;
public final class ServletRegistrationUtility {
public static final String XML_SERVLET_BUNDLE = "servlet-bundle";
public static final String XML_NAME = "name";
private ServletRegistrationUtility() {
}
public static String getBuildJaxServletRegistrationBundleName(IScoutBundle bundle) {
if (bundle == null) {
return null;
}
if (bundle.getType() != IScoutBundle.BUNDLE_SERVER) {
return null;
}
ScoutXmlDocument document = ResourceFactory.getBuildJaxWsResource(bundle).loadXml();
if (document == null || document.getRoot() == null) {
return null;
}
ScoutXmlElement xml = document.getRoot().getChild(XML_SERVLET_BUNDLE);
if (xml == null) {
return null;
}
if (!xml.hasAttribute(XML_NAME)) {
return null;
}
final String bundleName = xml.getAttribute(XML_NAME);
if (!StringUtility.hasText(bundleName)) {
return null;
}
return bundleName;
}
public static Registration getServletRegistration(IScoutBundle bundle) {
final String bundleName = getBuildJaxServletRegistrationBundleName(bundle);
Registration[] registrations = getJaxWsServletRegistrationsOnClasspath(bundle);
for (Registration registration : registrations) {
if (registration.getBundle().getBundleName().equals(bundleName)) {
return registration;
}
}
return null;
}
public static IScoutBundle[] getJaxWsBundlesOnClasspath(IScoutBundle bundle) {
// get bundles on classpath with JAX-WS dependency installed
if (bundle == null) {
return new IScoutBundle[0];
}
// find required bundles with JAX-WS on classpath
return bundle.getRequiredBundles(new IScoutBundleFilter() {
@Override
public boolean accept(IScoutBundle candidate) {
// ensure server bundle
if (candidate.getType() != IScoutBundle.BUNDLE_SERVER) {
return false;
}
// check whether JAX-WS dependency is installed on bundle
if (!TypeUtility.exists(TypeUtility.getType(JaxWsRuntimeClasses.JaxWsActivator)) || !TypeUtility.isOnClasspath(TypeUtility.getType(JaxWsRuntimeClasses.JaxWsActivator), candidate.getJavaProject())) {
return false;
}
return true;
}
}, true);
}
/**
* All JAX-WS servlet registrations on the classpath of the given bundle
*
* @param bundle
* @return
*/
public static Registration[] getJaxWsServletRegistrationsOnClasspath(IScoutBundle bundle) {
// filter bundles with JAX-WS servlet registration in plugin.xml
Set<Registration> bundles = new HashSet<Registration>();
for (IScoutBundle candidate : getJaxWsBundlesOnClasspath(bundle)) {
String extensionPoint = JaxWsConstants.SERVER_EXTENSION_POINT_SERVLETS;
HashMap<String, String> attributes = new HashMap<String, String>();
attributes.put("class", TypeUtility.getType(JaxWsRuntimeClasses.JaxWsServlet).getFullyQualifiedName());
PluginModelHelper h = new PluginModelHelper(candidate.getProject());
IPluginElement ex = h.PluginXml.getSimpleExtension(extensionPoint, "servlet", attributes);
if (ex == null) {
continue;
}
IPluginAttribute a = ex.getAttribute("alias");
if (a == null) {
continue;
}
bundles.add(new Registration(candidate, a.getValue()));
}
return bundles.toArray(new Registration[bundles.size()]);
}
public static String getAlias(IScoutBundle bundle) {
Registration registration = ServletRegistrationUtility.getServletRegistration(bundle);
if (registration == null) {
return null;
}
return registration.getAlias();
}
public static class Registration {
private IScoutBundle m_bundle;
private String m_alias;
private Registration(IScoutBundle bundle, String alias) {
m_bundle = bundle;
m_alias = alias;
}
public IScoutBundle getBundle() {
return m_bundle;
}
public void setBundle(IScoutBundle bundle) {
m_bundle = bundle;
}
public String getAlias() {
return m_alias;
}
public void setAlias(String alias) {
m_alias = alias;
}
}
}