/** * Copyright (c) 2011-2012 Eclipse contributors and others. * 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 */ package org.eclipse.emf.ecore.xcore.impl; import java.util.Map; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.impl.EFactoryImpl; import org.eclipse.emf.ecore.plugin.EcorePlugin; import org.eclipse.emf.ecore.xcore.*; /** * <!-- begin-user-doc --> * An implementation of the model <b>Factory</b>. * <!-- end-user-doc --> * @generated */ public class XcoreFactoryImpl extends EFactoryImpl implements XcoreFactory { /** * Creates the default factory implementation. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public static XcoreFactory init() { try { XcoreFactory theXcoreFactory = (XcoreFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/emf/2011/Xcore"); if (theXcoreFactory != null) { return theXcoreFactory; } } catch (Exception exception) { EcorePlugin.INSTANCE.log(exception); } return new XcoreFactoryImpl(); } /** * Creates an instance of the factory. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XcoreFactoryImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public EObject create(EClass eClass) { switch (eClass.getClassifierID()) { case XcorePackage.XANNOTATION: return createXAnnotation(); case XcorePackage.XANNOTATION_DIRECTIVE: return createXAnnotationDirective(); case XcorePackage.XATTRIBUTE: return createXAttribute(); case XcorePackage.XCLASS: return createXClass(); case XcorePackage.XDATA_TYPE: return createXDataType(); case XcorePackage.XENUM: return createXEnum(); case XcorePackage.XENUM_LITERAL: return createXEnumLiteral(); case XcorePackage.XGENERIC_TYPE: return createXGenericType(); case XcorePackage.XIMPORT_DIRECTIVE: return createXImportDirective(); case XcorePackage.XOPERATION: return createXOperation(); case XcorePackage.XPACKAGE: return createXPackage(); case XcorePackage.XPARAMETER: return createXParameter(); case XcorePackage.XREFERENCE: return createXReference(); case XcorePackage.XSTRING_TO_STRING_MAP_ENTRY: return (EObject)createXStringToStringMapEntry(); case XcorePackage.XTYPE_PARAMETER: return createXTypeParameter(); default: throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); } } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public Object createFromString(EDataType eDataType, String initialValue) { switch (eDataType.getClassifierID()) { case XcorePackage.XMULTIPLICITY: return createXMultiplicityFromString(eDataType, initialValue); default: throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); } } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public String convertToString(EDataType eDataType, Object instanceValue) { switch (eDataType.getClassifierID()) { case XcorePackage.XMULTIPLICITY: return convertXMultiplicityToString(eDataType, instanceValue); default: throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); } } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XAnnotation createXAnnotation() { XAnnotationImpl xAnnotation = new XAnnotationImpl(); return xAnnotation; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XAnnotationDirective createXAnnotationDirective() { XAnnotationDirectiveImpl xAnnotationDirective = new XAnnotationDirectiveImpl(); return xAnnotationDirective; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XAttribute createXAttribute() { XAttributeImpl xAttribute = new XAttributeImpl(); return xAttribute; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XClass createXClass() { XClassImpl xClass = new XClassImpl(); return xClass; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XDataType createXDataType() { XDataTypeImpl xDataType = new XDataTypeImpl(); return xDataType; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XEnum createXEnum() { XEnumImpl xEnum = new XEnumImpl(); return xEnum; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XEnumLiteral createXEnumLiteral() { XEnumLiteralImpl xEnumLiteral = new XEnumLiteralImpl(); return xEnumLiteral; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XGenericType createXGenericType() { XGenericTypeImpl xGenericType = new XGenericTypeImpl(); return xGenericType; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XImportDirective createXImportDirective() { XImportDirectiveImpl xImportDirective = new XImportDirectiveImpl(); return xImportDirective; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XOperation createXOperation() { XOperationImpl xOperation = new XOperationImpl(); return xOperation; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XPackage createXPackage() { XPackageImpl xPackage = new XPackageImpl(); return xPackage; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XParameter createXParameter() { XParameterImpl xParameter = new XParameterImpl(); return xParameter; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XReference createXReference() { XReferenceImpl xReference = new XReferenceImpl(); return xReference; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public Map.Entry<String, String> createXStringToStringMapEntry() { XStringToStringMapEntryImpl xStringToStringMapEntry = new XStringToStringMapEntryImpl(); return xStringToStringMapEntry; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XTypeParameter createXTypeParameter() { XTypeParameterImpl xTypeParameter = new XTypeParameterImpl(); return xTypeParameter; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public int[] createXMultiplicityFromString(EDataType eDataType, String initialValue) { if (initialValue == null) { return null; } else { int startingIndex = initialValue.indexOf('['); if (startingIndex != -1) { int endingIndex = initialValue.indexOf(']'); if (endingIndex != -1) { String bounds = initialValue.substring(startingIndex + 1, endingIndex).trim(); int rangeIndex = bounds.indexOf(".."); if (rangeIndex == -1) { if ("".equals(bounds)) { return new int [0]; } int[] result = new int [1]; if ("?".equals(bounds)) { result[0] = -3; } else if ("+".equals(bounds)) { result[0] = -2; } else if ("*".equals(bounds)) { result[0] = -1; } else { result[0] = Integer.valueOf(bounds); } return result; } else { String lowerBound = bounds.substring(0, rangeIndex).trim(); String upperBound = bounds.substring(rangeIndex + 2).trim(); int[] result = new int [2]; result[0] = Integer.valueOf(lowerBound); if ("?".equals(upperBound)) { result[1] = -2; } else if ("*".equals(upperBound)) { result[1] = -1; } else { result[1] = Integer.valueOf(upperBound); } return result; } } else { throw new RuntimeException("Expecting a final ']'"); } } else { throw new RuntimeException("Expecting an initial '['"); } } } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public String convertXMultiplicityToString(EDataType eDataType, Object instanceValue) { if (instanceValue == null) { return null; } else { int[] multiplicity = (int[])instanceValue; if (multiplicity.length == 0) { return "[]"; } else if (multiplicity.length == 1) { if (multiplicity[0] == -3) { return "[?]"; } else if (multiplicity[0] == -2) { return "[+]"; } else if (multiplicity[0] == -1) { return "[*]"; } else { return "[" + multiplicity[0] + "]"; } } else if (multiplicity[1] == -1) { return "[" + multiplicity[0] + "..*]"; } else if (multiplicity[1] == -2) { return "[" + multiplicity[0] + "..?]"; } else { return "[" + multiplicity[0] + ".." + multiplicity[1] + "]"; } } } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XcorePackage getXcorePackage() { return (XcorePackage)getEPackage(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @deprecated * @generated */ @Deprecated public static XcorePackage getPackage() { return XcorePackage.eINSTANCE; } } //XcoreFactoryImpl