blob: 593783f64de3df8eae1eeda598d08e22cd903133 [file] [log] [blame]
/*
* Copyright (c) 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*/
package org.eclipse.wst.wsdl.ui.internal.parameters;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.wst.wsdl.Fault;
import org.eclipse.wst.wsdl.Input;
import org.eclipse.wst.wsdl.Message;
import org.eclipse.wst.wsdl.MessageReference;
import org.eclipse.wst.wsdl.Operation;
import org.eclipse.wst.wsdl.Output;
import org.eclipse.wst.wsdl.Part;
import org.eclipse.wst.wsdl.PortType;
import org.eclipse.xsd.XSDComplexTypeDefinition;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDModelGroup;
import org.eclipse.xsd.XSDParticle;
import org.eclipse.xsd.XSDSchema;
public class WNameHelperUtil {
public static String getMessageName(MessageReference messageRef) {
String messageName = "NewMessage";
List messageNames = new ArrayList();
Operation operation = (Operation) messageRef.getContainer();
Iterator messageIt = operation.getEnclosingDefinition().getEMessages().iterator();
while (messageIt.hasNext()) {
messageNames.add(((Message) messageIt.next()).getQName().getLocalPart());
}
String requestResponseString = getRequestOrResponse(messageRef) + "Msg";
messageName = getUniqueName(operation.getName() + requestResponseString, messageNames);
return messageName;
}
public static String getPartName(MessageReference messageRef) {
String partName = "NewPart";
Message message = messageRef.getEMessage();
Operation operation = (Operation) messageRef.getContainer();
// Operation operation = (Operation) ((WOperation) ownerMessage.getOwnerOperation()).getModel();
String operationName = operation.getName();
String appendString = "";
if (messageRef instanceof Input) {
appendString = "Parameters";
}
else if (messageRef instanceof Output) {
appendString = "Result";
}
else if (messageRef instanceof Fault) {
appendString = "Fault";
}
partName = operationName + appendString;
List usedPartNames = new ArrayList();
if (message != null) {
Iterator partIt = message.getEParts().iterator();
while (partIt.hasNext()) {
usedPartNames.add(((Part) partIt.next()).getName());
}
}
partName = getUniqueName(partName, usedPartNames);
return partName;
}
public static String getOperationName(PortType portType) {
String operationName = "NewOperation";
Iterator operationIt = portType.getEOperations().iterator();
List usedNames = new ArrayList();
while (operationIt.hasNext()) {
usedNames.add(((Operation) operationIt.next()).getName());
}
operationName = getUniqueName("NewOperation", usedNames);
return operationName;
}
public static String getRequestOrResponse(MessageReference messageRef) {
if (messageRef instanceof Input)
{
return "Request";
}
else if (messageRef instanceof Output)
{
return "Response";
}
else if (messageRef instanceof Fault)
{
return "_Fault";
}
return "";
}
public static String getFaultName(Operation operation) {
String faultName = "fault";
List nameList = new ArrayList();
Iterator faultIt = operation.getEFaults().iterator();
while (faultIt.hasNext()) {
nameList.add(((Fault) faultIt.next()).getName());
}
faultName = getUniqueName(faultName, nameList);
return faultName;
}
public static String getXSDElementName(String baseName, Object parent) {
String elementName = "";
if (parent instanceof XSDSchema) {
elementName = getUniqueName(baseName, getUsedElementNames((XSDSchema) parent));
}
else if (parent instanceof XSDModelGroup) {
List existingNames = new ArrayList();
XSDModelGroup modelGroup = (XSDModelGroup) parent;
Iterator modelGroupIt = modelGroup.getContents().iterator();
while (modelGroupIt.hasNext()) {
Object item = modelGroupIt.next();
if (item instanceof XSDParticle) {
XSDParticle existingParticle = (XSDParticle) item;
if (existingParticle.getContent() instanceof XSDElementDeclaration) {
existingNames.add(((XSDElementDeclaration) existingParticle.getContent()).getName());
}
}
}
elementName = getUniqueName(baseName, existingNames);
}
return elementName;
}
public static String getXSDComplexTypeName(String baseName, XSDSchema schema) {
String typeName = "";
List existingNames = new ArrayList();
Iterator it = schema.getTypeDefinitions().iterator();
while (it.hasNext()) {
Object item = it.next();
if (item instanceof XSDComplexTypeDefinition) {
existingNames.add(((XSDComplexTypeDefinition) item).getName());
}
}
typeName = getUniqueName(baseName, existingNames);
return typeName;
}
private static List getUsedElementNames(XSDSchema xsdSchema) {
List usedNames = new ArrayList();
Iterator schemaIt = xsdSchema.getContents().iterator();
while (schemaIt.hasNext()) {
Object item = schemaIt.next();
if (item instanceof XSDElementDeclaration) {
usedNames.add(((XSDElementDeclaration) item).getName());
}
}
return usedNames;
}
private static String getUniqueName(String baseName, List existingNames) {
int count = 1;
if (!existingNames.contains(baseName)) {
return baseName;
}
Iterator namesIt = existingNames.iterator();
boolean foundMatch = true;
while (foundMatch) {
foundMatch = false;
while (namesIt.hasNext()) {
String name = (String) namesIt.next();
if (name.equals(baseName + String.valueOf(count))) {
count++;
foundMatch = true;
break;
}
}
}
return baseName + String.valueOf(count);
}
}