/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* 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:
* Emil Simeonov - initial API and implementation.
* Dimitar Donchev - initial API and implementation.
* Dimitar Tenev - initial API and implementation.
* Nevena Manova - initial API and implementation.
* Georgi Konstantinov - initial API and implementation.
*******************************************************************************/
package org.eclipse.wst.sse.sieditor.model.utils;
import org.eclipse.wst.sse.sieditor.model.api.IModelObject;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IServiceInterface;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
public class NameGenerator {
public static final String ELEMENT_DEFAULT_NAME = "Element"; //$NON-NLS-1$
public static final String FAULT_ELEMENT_DEFAULT_NAME = "FaultElement"; //$NON-NLS-1$
public static final String STRUCTURE_TYPE_DEFAULT_NAME = "StructureType"; //$NON-NLS-1$
public static final String SIMPLE_TYPE_DEFAULT_NAME = "SimpleType"; //$NON-NLS-1$
public static final String ATTRIBUTE_DEFAULT_NAME = "Attribute"; //$NON-NLS-1$
// WSDL related
public static final String SERVICE_INTERFACE = "ServiceInterface"; //$NON-NLS-1$
public static final String NEW_OPERATION = "NewOperation"; //$NON-NLS-1$
public static final String PARAMETER = "Parameter"; //$NON-NLS-1$
public static final String FAULT = "Fault"; //$NON-NLS-1$
public static String getNewFaultElementDefaultName(final IModelObject modelObject) {
return getNewElementDefaultName(modelObject, FAULT_ELEMENT_DEFAULT_NAME);
}
public static String getNewElementDefaultName(final IModelObject modelObject) {
return getNewElementDefaultName(modelObject, ELEMENT_DEFAULT_NAME);
}
private static String getNewElementDefaultName(final IModelObject modelObject, final String elementDefaultName) {
return generateName(elementDefaultName, new ICondition<String>() {
public boolean isSatisfied(final String in) {
if (modelObject instanceof ISchema) {
return ((ISchema) modelObject).getAllTypes(in) == null;
}
if (modelObject instanceof IStructureType) {
final IStructureType structureType = (IStructureType) modelObject;
boolean isSatisfied = structureType.getElements(in).size() == 0;
final IType baseType = structureType.getBaseType();
if (baseType instanceof IStructureType) {
isSatisfied &= ((IStructureType) baseType).getElements(in).size() == 0;
}
return isSatisfied;
}
throw new IllegalArgumentException(
"The new element name method should be used with a schema or a Structured type"); //$NON-NLS-1$
}
});
}
public static String getNewAttributeDefaultName(final IStructureType structureType) {
return NameGenerator.generateName(ATTRIBUTE_DEFAULT_NAME, new ICondition<String>() {
public boolean isSatisfied(final String in) {
boolean isSatisfied = structureType.getElements(in).size() == 0;
final IType baseType = structureType.getBaseType();
if (baseType instanceof IStructureType) {
isSatisfied &= ((IStructureType) baseType).getElements(in).size() == 0;
}
return isSatisfied;
}
});
}
public static String generateName(final String prefix, final ICondition<String> condition) {
for (int counter = 1; counter < Integer.MAX_VALUE; counter++) {
if (condition.isSatisfied(prefix + counter))
return prefix + counter;
}
throw new IllegalStateException("Could not generate name for prefix " + prefix); //$NON-NLS-1$
}
public static String getNewSimpleTypeDefaultName(final ISchema schema) {
return NameGenerator.generateName(SIMPLE_TYPE_DEFAULT_NAME, new ICondition<String>() {
public boolean isSatisfied(final String in) {
return schema.getAllTypes(in) == null;
}
});
}
public static String getNewStructureTypeDefaultName(final ISchema schema) {
return NameGenerator.generateName(STRUCTURE_TYPE_DEFAULT_NAME, new ICondition<String>() {
public boolean isSatisfied(final String in) {
return schema.getAllTypes(in) == null;
}
});
}
// WSDL related
/**
* Generates Name for a new Operation
*/
public static String getNewOperationName(final IServiceInterface serviceInterface) {
return NameGenerator.generateName(NEW_OPERATION, new ICondition<String>() {
public boolean isSatisfied(final String in) {
return serviceInterface.getOperation(in).isEmpty();
}
});
}
/**
* Generates Name for a new Service Interface
*/
public static String getNewServiceInterfaceName(final IDescription description) {
return NameGenerator.generateName(SERVICE_INTERFACE, new ICondition<String>() {
public boolean isSatisfied(final String in) {
return description.getInterface(in).isEmpty();
}
});
}
/**
* Generates Name for a new Parameter
*/
public static String getInputParameterName(final IOperation operation) {
return NameGenerator.generateName(PARAMETER, new ICondition<String>() {
public boolean isSatisfied(final String in) {
return operation.getInputParameter(in).isEmpty();
}
});
}
/**
* Generates Name for a new Parameter
*/
public static String getOutputParameterName(final IOperation operation) {
return NameGenerator.generateName(PARAMETER, new ICondition<String>() {
public boolean isSatisfied(final String in) {
return operation.getOutputParameter(in).isEmpty();
}
});
}
/**
* Generates Name for a new Fault
*/
public static String getNewFaultName(final IOperation operation) {
return NameGenerator.generateName(FAULT, new ICondition<String>() {
public boolean isSatisfied(final String in) {
return operation.getFault(in).isEmpty();
}
});
}
}