Java tutorial
// license-header java merge-point // // Generated by: MetafacadeLogicImpl.vsl in andromda-meta-cartridge. package org.andromda.cartridges.webservice.metafacades; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.andromda.cartridges.webservice.WebServiceGlobals; import org.andromda.cartridges.webservice.WebServiceUtils; import org.andromda.core.metafacade.MetafacadeBase; import org.andromda.core.metafacade.ModelValidationMessage; import org.andromda.metafacades.uml.PackageFacade; import org.andromda.metafacades.uml.UMLProfile; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; /** * * MetafacadeLogic implementation for org.andromda.cartridges.webservice.metafacades.WebServicePackage. * * @see org.andromda.cartridges.webservice.metafacades.WebServicePackage */ public class WebServicePackageLogicImpl extends WebServicePackageLogic { private static final long serialVersionUID = 34L; private static final String DEFAULT = "default"; /** * Public constructor for WebServicePackageLogicImpl * @param metaObject * @param context * @see org.andromda.cartridges.webservice.metafacades.WebServicePackage */ public WebServicePackageLogicImpl(Object metaObject, String context) { super(metaObject, context); } /** * The logger instance. */ private static final Logger logger = Logger.getLogger(WebServicePackageLogicImpl.class); /** * The property defining the default style to give the web services. */ private static final String DEFAULT_ATTRIBUTE_FORM = "UNQUALIFIED"; /** * * @return findTaggedValue(WebServiceGlobals.ATTRIBUTE_FORM_DEFAULT) or DEFAULT_ATTRIBUTE_FORM * @see org.andromda.cartridges.webservice.metafacades.WebServicePackage#getAttributeFormDefault() */ protected String handleGetAttributeFormDefault() { String style = (String) this.findTaggedValue(WebServiceGlobals.ATTRIBUTE_FORM_DEFAULT); if (StringUtils.isEmpty(style) || style.equals(DEFAULT)) { style = DEFAULT_ATTRIBUTE_FORM; } return style; } /** * The property defining the default style to give the web services. */ private static final String DEFAULT_ELEMENT_FORM = "QUALIFIED"; /** * * @return findTaggedValue(WebServiceGlobals.ELEMENT_FORM_DEFAULT) or DEFAULT_ELEMENT_FORM * @see org.andromda.cartridges.webservice.metafacades.WebServicePackage#getElementFormDefault() */ protected String handleGetElementFormDefault() { String style = (String) this.findTaggedValue(WebServiceGlobals.ELEMENT_FORM_DEFAULT); if (StringUtils.isEmpty(style) || style.equals(DEFAULT)) { style = DEFAULT_ELEMENT_FORM; } return style; } /** * reverseNamespace */ static final String REVERSE_NAMESPACE = "reverseNamespace"; /** * Backslash char / */ static final String BACKSLASH = "/"; /** * * @return findTaggedValue(WebServiceGlobals.XML_NAMESPACE) or REVERSE_NAMESPACE * @see org.andromda.cartridges.webservice.metafacades.WebServicePackage#getNamespace() */ protected String handleGetNamespace() { String namespace = (String) this.findTaggedValue(WebServiceGlobals.XML_NAMESPACE); if (StringUtils.isEmpty(namespace)) { if (Boolean.valueOf(String.valueOf(this.getConfiguredProperty(REVERSE_NAMESPACE))).booleanValue()) { namespace = WebServiceUtils.reversePackage(this.getName()); } String namespacePattern = (String) this.getConfiguredProperty(WebServiceLogicImpl.NAMESPACE_PATTERN); namespace = MessageFormat.format(namespacePattern, new Object[] { StringUtils.trimToEmpty(namespace) }); Boolean addNamespaceBackslash = Boolean .valueOf((String) this.getConfiguredProperty(WebServiceGlobals.ADD_NAMESPACE_BACKSLASH)); if (addNamespaceBackslash && !namespace.endsWith(BACKSLASH)) { namespace += BACKSLASH; } } return namespace; } /** * @return findTaggedValue(WebServiceGlobals.XML_XMLNS) or WebServiceUtils.getPkgAbbr(this) * @see org.andromda.cartridges.webservice.WebServiceUtils#getPkgAbbr(PackageFacade) */ protected String handleGetXmlns() { WebServiceUtils utils = new WebServiceUtils(); String abbr = (String) this.findTaggedValue(WebServiceGlobals.XML_XMLNS); if (StringUtils.isEmpty(abbr)) { abbr = utils.getPkgAbbr(this); } else { utils.addPkgAbbr(this, abbr); } return abbr; } /** * @return findTaggedValue(WebServiceGlobals.XML_XMLNS) or WebServiceUtils.getPkgAbbr(this) * @see org.andromda.cartridges.webservice.WebServiceUtils#getPkgAbbr(PackageFacade) */ protected String handleGetSchemaLocation() { String packageNamespace = this.getNamespace().substring(7) + ".xsd"; packageNamespace = StringUtils.replaceChars(packageNamespace, "/\\", "."); packageNamespace = "xsd/" + StringUtils.replace(packageNamespace, "..", "."); return packageNamespace; } /** * * @return new WebServiceUtils().getPackageReferences(this, true) * @see org.andromda.cartridges.webservice.WebServiceUtils#getPackageReferences(PackageFacade, boolean) */ protected Collection<PackageFacade> handleGetPackages() { return new WebServiceUtils().getPackageReferences(this, true); } /** * <p> * Package Abbreviation * </p> * @return findTaggedValue(WebServiceGlobals.XML_XMLNS) or WebServiceUtils.getPkgAbbr(this) * @see org.andromda.cartridges.webservice.metafacades.WebServicePackage#getPackageAbbr() */ protected String handleGetPackageAbbr() { WebServiceUtils utils = new WebServiceUtils(); String namespace = (String) this.findTaggedValue(WebServiceGlobals.XML_XMLNS); if (StringUtils.isEmpty(namespace)) { namespace = utils.getPkgAbbr(this); } else { utils.addPkgAbbr(this, namespace); } return namespace; } /** * <p> * Packages referenced by this package * </p> * @return WebServiceUtils.getPackageReferences(this, true) * @see org.andromda.cartridges.webservice.metafacades.WebServicePackage#getPackageReferences() * @see org.andromda.cartridges.webservice.WebServiceUtils#getPackageReferences(WebServiceLogicImpl, java.util.Set, String, boolean) */ protected Collection<PackageFacade> handleGetPackageReferences() { WebServiceUtils utils = new WebServiceUtils(); return utils.getPackageReferences(this, true); } /** * * @param follow * @return WebServiceUtils.getPackageReferences(this, follow) * @see org.andromda.cartridges.webservice.metafacades.WebServicePackage#getPackageReferences(boolean) */ protected Collection<PackageFacade> handleGetPackageReferences(boolean follow) { WebServiceUtils utils = new WebServiceUtils(); return utils.getPackageReferences(this, follow); } /** * Allow sorting and use in TreeSet * @see Comparable#compareTo(Object) */ public int compareTo(Object object) { if (object == null || !(object instanceof WebServicePackageLogic)) { return -1; } return ((WebServicePackageLogic) object).getFullyQualifiedName().compareTo(this.getFullyQualifiedName()); } private static List<WebServiceOperation> warnedOperations = new ArrayList<WebServiceOperation>(); /** * @see org.andromda.cartridges.webservice.metafacades.WebServicePackageLogic#handleGetAllowedOperations() */ @Override protected Collection<WebServiceOperation> handleGetAllowedOperations() { Collection<WebServiceOperation> operations = new WebServiceUtils().getAllowedOperations(this); // Log the actual offending operation name, since validator only shows the package name String webserviceStack = String.valueOf(this.getConfiguredProperty("webserviceStack")); if (webserviceStack.equals("cxf") || webserviceStack.equals("jaxws")) { for (WebServiceOperation operation : operations) { int matchCount = 0; String operationName = operation.getName(); for (WebServiceOperation operationToCheck : operations) { if (operationName.equals(operationToCheck.getName())) { matchCount++; } } if (matchCount > 1 && !warnedOperations.contains(operation)) { warnedOperations.add(operation); logger.warn(operation.getFullyQualifiedName() + " Duplicate webservice operation in package " + this.getFullyQualifiedName()); } } } return operations; } private static List<String> checkedPackages = new ArrayList<String>(); /** * @see org.andromda.cartridges.webservice.metafacades.WebServicePackageLogic#handleGetAllowedOperations() */ @Override protected boolean handleIsMissingXmlSchema() { boolean result = false; // If the cartridge is configured to use CXF or JAX-WS, and schemas are imported... String webserviceStack = String.valueOf(this.getConfiguredProperty("webserviceStack")); String importedSchema = String.valueOf(this.getConfiguredProperty("importedXSD")); if (importedSchema.equals("true") && (webserviceStack.equals("cxf") || webserviceStack.equals("jaxws"))) { int serviceCount = this.getAllowedOperations().size(); // Check this package is it contains services if (serviceCount > 0 && !this.hasStereotype(UMLProfile.STEREOTYPE_XMLSCHEMA)) { // the packages containing the webservices must be labeled with XmlSchema result = true; if (!checkedPackages.contains(this.getFullyQualifiedName())) { // Only display the error message once for each referenced package checkedPackages.add(this.getFullyQualifiedName()); } } // Check packages referenced by this package if (serviceCount > 0 || this.hasStereotype(UMLProfile.STEREOTYPE_XMLSCHEMA)) { Collection<PackageFacade> references = new WebServiceUtils().getPackageReferences(this, true); for (PackageFacade pkg : references) { if (!pkg.hasStereotype(UMLProfile.STEREOTYPE_XMLSCHEMA)) { result = true; if (!checkedPackages.contains(pkg.getFullyQualifiedName())) { // Only display the error message once for each referenced package checkedPackages.add(pkg.getFullyQualifiedName()); logger.warn(pkg.getFullyQualifiedName() + " package is missing XmlSchema stereotype"); } } } } } return result; } /** * <p><b>Constraint:</b> org::andromda::cartridges::webservice::metafacades::WebServicePackage::package must be lowercase</p> * <p><b>Error:</b>XmlSchema Package name must be lowercase.</p> * @param validationMessages Collection<ModelValidationMessage> * @see MetafacadeBase#validateInvariants(Collection validationMessages) */ @Override public void validateInvariants(Collection<ModelValidationMessage> validationMessages) { super.validateInvariants(validationMessages); try { final Object contextElement = this.THIS(); final String name = this.getName(); boolean constraintValid = name != null && name.toLowerCase().equals(name); // Exclude common package names from validation //boolean common = name.equals("PrimitiveTypes") || name.equals("datatype") || name.startsWith("UML"); if (!constraintValid && this.hasStereotype(UMLProfile.STEREOTYPE_XMLSCHEMA)) { validationMessages.add(new ModelValidationMessage((MetafacadeBase) contextElement, "org::andromda::cartridges::webservice::metafacades::WebServicePackage::package must be lowercase", "Package name must be lowercase.")); } } catch (Throwable th) { Throwable cause = th.getCause(); int depth = 0; // Some throwables have infinite recursion while (cause != null && depth < 7) { th = cause; depth++; } logger.error( "Error validating constraint 'org::andromda::cartridges::webservice::metafacades::WebServicePackage::package must be lowercase' ON " + this.THIS().toString() + ": " + th.getMessage(), th); } } }