/* * Copyright 2012 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.artificer.common.visitors; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Actor; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.AttributeDeclaration; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Binding; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BindingOperation; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BindingOperationFault; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BindingOperationInput; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BindingOperationOutput; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Choreography; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ChoreographyProcess; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Collaboration; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.CollaborationProcess; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ComplexTypeDeclaration; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Composition; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.DerivedArtifactType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Document; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.DocumentArtifactType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Effect; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Element; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ElementDeclaration; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Event; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ExtendedArtifactType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ExtendedDocument; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Fault; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.InformationType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Message; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.NamedWsdlDerivedArtifactType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Operation; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.OperationInput; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.OperationOutput; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Orchestration; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.OrchestrationProcess; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Organization; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Part; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Policy; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PolicyAttachment; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PolicyDocument; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PolicyExpression; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PolicySubject; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Port; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PortType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Process; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Service; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceComposition; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceContract; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceEndpoint; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceImplementationModelType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceInstance; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceInterface; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceOperation; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.SimpleTypeDeclaration; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.SoaModelType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.SoapAddress; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.SoapBinding; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.System; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Task; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.WsdlDerivedArtifactType; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.WsdlDocument; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.WsdlExtension; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.WsdlService; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.XmlDocument; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.XsdDocument; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.XsdType; /** * A base class for visitors that are interested in specific sections of the * S-RAMP class hierarchy. This class provides methods for the various * shared (abstract) base classes within the hierarchy. * * Processing is ordered most-specific to most-generic, as some impls require it and the rest aren't affected. * * @author eric.wittmann@redhat.com */ public abstract class HierarchicalArtifactVisitor extends AbstractArtifactVisitor { protected Exception error; /** * Default constructor. */ public HierarchicalArtifactVisitor() { } /** * Common visit method for derived artifacts. * @param artifact */ protected void visitDerived(DerivedArtifactType artifact) { // Subclasses can do common visit logic here } /** * Common visit method for WSDL derived artifacts. * @param artifact */ protected void visitWsdlDerived(WsdlDerivedArtifactType artifact) { // Subclasses can do common visit logic here } /** * Common visit method for named WSDL derived artifacts. * @param artifact */ protected void visitNamedWsdlDerived(NamedWsdlDerivedArtifactType artifact) { // Subclasses can do common visit logic here } /** * Common visit method for XSD derived artifacts. * @param artifact */ protected void visitXsdDerived(XsdType artifact) { // Subclasses can do common visit logic here } /** * Common visit method for document artifacts. * @param artifact */ protected void visitDocument(DocumentArtifactType artifact) { // Subclasses can do common visit logic here } /** * Common visit method for XML document artifacts. * @param artifact */ protected void visitXmlDocument(XmlDocument artifact) { // Subclasses can do common visit logic here } /** * Common visit method for service implementation artifacts. * @param artifact */ protected void visitServiceImplementation(ServiceImplementationModelType artifact) { // Subclasses can do common visit logic here } /** * Common visit method for SOA model artifacts. * @param artifact */ protected void visitSoa(SoaModelType artifact) { // Subclasses can do common visit logic here } /** * Common visit method for Extended artifacts. * @param artifact */ protected void visitExtended(ExtendedArtifactType artifact) { // Subclasses can do common visit logic here } /** * Common visit method for Extended document artifacts. * @param artifact */ protected void visitExtendedDocument(ExtendedDocument artifact) { // Subclasses can do common visit logic here } /** * Common visit method for Element artifacts. * @param artifact */ protected void visitElement(Element artifact) { // Subclasses can do common visit logic here } /** * Common visit method for Actor artifacts. * @param artifact */ protected void visitActor(Actor artifact) { visitElement(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Document) */ @Override public void visit(Document artifact) { visitDocument(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.XmlDocument) */ @Override public void visit(XmlDocument artifact) { visitXmlDocument(artifact); visitDocument(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.XsdDocument) */ @Override public void visit(XsdDocument artifact) { visitXmlDocument(artifact); visitDocument(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.AttributeDeclaration) */ @Override public void visit(AttributeDeclaration artifact) { visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ElementDeclaration) */ @Override public void visit(ElementDeclaration artifact) { visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.SimpleTypeDeclaration) */ @Override public void visit(SimpleTypeDeclaration artifact) { visitXsdDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ComplexTypeDeclaration) */ @Override public void visit(ComplexTypeDeclaration artifact) { visitXsdDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PolicyDocument) */ @Override public void visit(PolicyDocument artifact) { visitXmlDocument(artifact); visitDocument(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PolicyExpression) */ @Override public void visit(PolicyExpression artifact) { visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PolicyAttachment) */ @Override public void visit(PolicyAttachment artifact) { visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.SoapAddress) */ @Override public void visit(SoapAddress artifact) { visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.SoapBinding) */ @Override public void visit(SoapBinding artifact) { visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.WsdlDocument) */ @Override public void visit(WsdlDocument artifact) { visitXmlDocument(artifact); visitDocument(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.WsdlService) */ @Override public void visit(WsdlService artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Port) */ @Override public void visit(Port artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.WsdlExtension) */ @Override public void visit(WsdlExtension artifact) { visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Part) */ @Override public void visit(Part artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Message) */ @Override public void visit(Message artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Fault) */ @Override public void visit(Fault artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PortType) */ @Override public void visit(PortType artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Operation) */ @Override public void visit(Operation artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.OperationInput) */ @Override public void visit(OperationInput artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.OperationOutput) */ @Override public void visit(OperationOutput artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Binding) */ @Override public void visit(Binding artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BindingOperation) */ @Override public void visit(BindingOperation artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BindingOperationInput) */ @Override public void visit(BindingOperationInput artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BindingOperationOutput) */ @Override public void visit(BindingOperationOutput artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BindingOperationFault) */ @Override public void visit(BindingOperationFault artifact) { visitNamedWsdlDerived(artifact); visitWsdlDerived(artifact); visitDerived(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Organization) */ @Override public void visit(Organization artifact) { visitActor(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceEndpoint) */ @Override public void visit(ServiceEndpoint artifact) { visitServiceImplementation(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceInstance) */ @Override public void visit(ServiceInstance artifact) { visitServiceImplementation(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceOperation) */ @Override public void visit(ServiceOperation artifact) { visitServiceImplementation(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ExtendedArtifactType) */ @Override public void visit(ExtendedArtifactType artifact) { visitExtended(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ExtendedDocument) */ @Override public void visit(ExtendedDocument artifact) { visitExtendedDocument(artifact); visitDocument(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Actor) */ @Override public void visit(Actor artifact) { visitActor(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Choreography) */ @Override public void visit(Choreography artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ChoreographyProcess) */ @Override public void visit(ChoreographyProcess artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Collaboration) */ @Override public void visit(Collaboration artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.CollaborationProcess) */ @Override public void visit(CollaborationProcess artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Composition) */ @Override public void visit(Composition artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Effect) */ @Override public void visit(Effect artifact) { visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Element) */ @Override public void visit(Element artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Event) */ @Override public void visit(Event artifact) { visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.InformationType) */ @Override public void visit(InformationType artifact) { visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Orchestration) */ @Override public void visit(Orchestration artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.OrchestrationProcess) */ @Override public void visit(OrchestrationProcess artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Policy) */ @Override public void visit(Policy artifact) { visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.PolicySubject) */ @Override public void visit(PolicySubject artifact) { visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Process) */ @Override public void visit(Process artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Service) */ @Override public void visit(Service artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceContract) */ @Override public void visit(ServiceContract artifact) { visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceComposition) */ @Override public void visit(ServiceComposition artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.ServiceInterface) */ @Override public void visit(ServiceInterface artifact) { visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.System) */ @Override public void visit(System artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } /** * @see ArtifactVisitor#visit(org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Task) */ @Override public void visit(Task artifact) { visitElement(artifact); visitSoa(artifact); super.visit(artifact); } public void throwError() throws Exception { if (error != null) { throw error; } } }