blob: 5edde7ea7b3b928a9f3c0ed832ee48542c28f12c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 by SAP AG, Walldorf.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.jaxws.utils;
import org.eclipse.jdt.core.IType;
/**
* Utility that contains JAX-WS releated functionality
*
* @author Danail Branekov
*
*/
public class JaxWsUtils
{
private static final String BEAN_SUFFIX = "Bean"; //$NON-NLS-1$
private static final String PORT_SUFFIX = "Port"; //$NON-NLS-1$
private static final String SERVICE_SUFFIX = "Service"; //$NON-NLS-1$
private JaxWsUtils()
{
// hide default constructor
}
/**
* An utility method for composing a default target namespace for JaxWs customization
* out of a package name.
* Algorithm:
* <li>In case the package has 0 fragment (default package) the result would be http:///</li>
* <li>In case the package has 1 fragment the result would be http://fragment1/</li>
* <li>In case the package has 2 fragments the result would be http://fragment2.fragment1/</li>
* <li>In case the package has more than 2 fragments the result would be http://fragment2.fragment1/fragment3/fragment4/.../fragmentn/</li>
* @param packageName Name of the package
* @return the composed namespace
* @thorws NullPointerException when package name specified is null
*/
public static String composeJaxWsTargetNamespaceByPackage(String packageName)
{
if(packageName == null)
{
throw new NullPointerException("Package name cannot be null"); //$NON-NLS-1$
}
String[] pkgFragments = packageName.split("\\."); //$NON-NLS-1$
if(pkgFragments.length > 1)
{
// reverse the first two fragments in case there are at least two fragments available
String frag0 = pkgFragments[0];
pkgFragments[0] = pkgFragments[1];
pkgFragments[1] = frag0;
}
StringBuilder result = new StringBuilder("http://"); //$NON-NLS-1$
for (int i = 0; i < pkgFragments.length; i++)
{
result.append(pkgFragments[i]);
result.append(i==0 && pkgFragments.length>1 ? "." : "/"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result.toString();
}
/**
* Same as composeJaxWsTargetNamespaceByPackage() but first extracts the package out of class
* fully qualified name
* @param fqName the class fully qualified name
* @return calculated target namespace
*/
public static String composeJaxWsTargetNamespaceByFQName(String fqName)
{
ContractChecker.nullCheckParam(fqName, "fqName"); //$NON-NLS-1$
return composeJaxWsTargetNamespaceByPackage(extractPackage(fqName));
}
/**
* Returns the PortType name from the <code>endpointType</code> and <code>seiName</code>.
* @param endpoint class.
* @param seiName
* @return PortType name for the @WebService annotation, the name of the <code>endpointType</code> with the "Port" suffix.
* @throws NullPointerException when <code>endpointType</code> specified is null.
*/
public static String getPorttypeName(IType endpointType, String seiName)
{
if(endpointType == null)
{
throw new NullPointerException("endpointType could not be null!"); //$NON-NLS-1$
}
if(seiName != null && seiName.length() > 0)
{
return seiName;
}
return removeBeanSuffixIfRequired(endpointType.getElementName());
}
/**
* Removes the "Bean" suffix from the <code>endpointType</code> in case it is present and generates Service name for the specified IType.
* @param endpoint class.
* @return Service name for the @WebService annotation, the name of the <code>endpointType</code> without the "Bean" suffix and <code>"Service"</code> at the end.
* In case the name of the <code>endpointType</code> equals "Bean" then the original name is returned with <code>"Service"</code> ate the end.
* @throws NullPointerException when <code>endpointType</code> specified is null
*/
public static String getServiceName(final IType endpointType)
{
if(endpointType == null)
{
throw new NullPointerException("endpointType could not be null!"); //$NON-NLS-1$
}
return removeBeanSuffixIfRequired(endpointType.getElementName()) + SERVICE_SUFFIX;
}
/**
* Removes the "Bean" suffix from the endpoint name in case it is present.
* @param endpointName the name of the endpoint
* @return the name of the endpoint without the "Bean" suffix. In case the name of the endpoint equals "Bean" then the original name is returned
*/
private static String removeBeanSuffixIfRequired(final String endpointName)
{
assert endpointName != null && endpointName.length() > 0;
if(endpointName.equals(BEAN_SUFFIX))
{
return endpointName;
}
if(endpointName.endsWith(BEAN_SUFFIX))
{
return endpointName.substring(0, endpointName.lastIndexOf(BEAN_SUFFIX));
}
return endpointName;
}
/**
* Returns the Port name from the <code>endpointType</code>.
* @param endpoint class.
* @return Port name for the @WebService annotation, the name of the <code>endpointType</code> with the "Port" suffix.
* @throws NullPointerException when <code>endpointType</code> specified is null.
*/
public static String getPortName(final IType endpointType)
{
return getDefaultPortName(endpointType.getElementName());
}
/**
* Returns the default service name calculated as the specification states.
* @param fqName
* @return the default service name
* @throws NullPointerException in case <code>endpointType</code> is <code>null</code>
*/
public static String getDefaultServiceName(final String fqName)
{
if(fqName == null)
{
throw new NullPointerException("endpointType could not be null!"); //$NON-NLS-1$
}
return extractShortName(fqName) + SERVICE_SUFFIX;
}
/**
* Returns the default wsdl:portType name defined as JAX-WS specification states.
* @param fqName
* @return
*/
public static String getDefaultPorttypeName(final String fqName)
{
if(fqName == null)
{
throw new NullPointerException("fqName could not be null!"); //$NON-NLS-1$
}
return extractShortName(fqName);
}
/**
* Return the default name for a wsdl:port defined as JAX-WS specification states
* @param fqName
* @return the calculated name
*/
public static String getDefaultPortName(final String fqName)
{
if(fqName == null)
{
throw new NullPointerException("fqName could not be null!"); //$NON-NLS-1$
}
return extractShortName(fqName) + PORT_SUFFIX;
}
private static String extractShortName(String fqName)
{
int pos = fqName.lastIndexOf('.');
if (pos ==-1 ) {
return fqName;
}
return fqName.substring(pos+1);
}
private static String extractPackage(final String fqName)
{
int pos = fqName.lastIndexOf('.');
if (pos ==-1 ) {
return fqName;
}
return fqName.substring(0, pos);
}
}