/******************************************************************************* | |
* 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; | |
} | |
} | |
} |