blob: a354538e5b14e512700aff468dde5ee50f5fa720 [file] [log] [blame]
package org.eclipse.wst.wsdl.ui.internal.visitor;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.wst.wsdl.Message;
import org.eclipse.wst.wsdl.MessageReference;
import org.eclipse.wst.wsdl.Part;
import org.eclipse.wst.wsdl.ui.internal.adapters.visitor.W11XSDVisitorForFields;
import org.eclipse.xsd.XSDComplexTypeDefinition;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDTypeDefinition;
public class WSDLVisitorForParameters
{
public List concreteComponents = new ArrayList();
public List thingsToListenTo = new ArrayList();
public void visitMessageReference(MessageReference messageReference)
{
if (messageReference.getEMessage() != null)
{
visitMessage(messageReference.getEMessage());
}
}
public void visitMessage(Message message)
{
// for now we assume that the first part is the only one that
// should be used to deduce the parameters
// TODO (cs) we need to revist this, multiple parts need to be considered
//
if (message != null) {
thingsToListenTo.add(message);
for (Iterator i = message.getEParts().iterator(); i.hasNext(); )
{
visitPart((Part)i.next());
}
}
}
void visitPart(Part part)
{
thingsToListenTo.add(part);
if (part.getElementDeclaration() != null)
{
visitXSDElementDeclaration(part.getElementDeclaration());
}
else
// if (part.getTypeDefinition() instanceof XSDSimpleTypeDefinition)
{
concreteComponents.add(part);
}
}
void visitXSDElementDeclaration(XSDElementDeclaration ed)
{
XSDTypeDefinition td = ed.getTypeDefinition();
if (td != null)
{
if (td.getName() != null)
{
concreteComponents.add(ed);
}
else
{
// we're dealing with an anonymous locally defined type
// se we need to visit it's children
thingsToListenTo.add(ed);
visitXSDComplextTypeDefinition((XSDComplexTypeDefinition) td);
}
}
}
void visitXSDComplextTypeDefinition(XSDComplexTypeDefinition td)
{
// TODO (cs) revisit to see if it makes sense for the WSDL editor to redisplay
// the 'Fields' (in XSD editor lingo) as paramters
// perhaps the WSDL Editor should simply reuse the XSD Editor's
// ComplexType edit part when displaying these sections?
W11XSDVisitorForFields fieldVisitor = new W11XSDVisitorForFields();
fieldVisitor.visitComplexTypeDefinition(td);
concreteComponents.addAll(fieldVisitor.getConcreteComponentList());
thingsToListenTo.addAll(fieldVisitor.getThingsWeNeedToListenTo());
}
}