/*******************************************************************************
* Copyright (c) 2010-2015 Henshin developers. 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:
* TU Berlin, University of Luxembourg, SES S.A.
*******************************************************************************/
package de.tub.tfs.henshin.editor.model;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.henshin.model.Attribute;
import org.eclipse.emf.henshin.model.ConditionalUnit;
import org.eclipse.emf.henshin.model.Edge;
import org.eclipse.emf.henshin.model.HenshinFactory;
import org.eclipse.emf.henshin.model.IndependentUnit;
import org.eclipse.emf.henshin.model.LoopUnit;
import org.eclipse.emf.henshin.model.Mapping;
import org.eclipse.emf.henshin.model.Node;
import org.eclipse.emf.henshin.model.Parameter;
import org.eclipse.emf.henshin.model.ParameterMapping;
import org.eclipse.emf.henshin.model.PriorityUnit;
import org.eclipse.emf.henshin.model.Rule;
import org.eclipse.emf.henshin.model.SequentialUnit;
import org.eclipse.gef.requests.CreationFactory;
/**
* A factory for creating ModelCreation objects.
*/
public class ModelCreationFactory implements CreationFactory {
/** The clazz. */
private Class<?> clazz;
/** The eclass. */
private EClass eclass;
/**
* Instantiates a new model creation factory.
*
* @param clazz
* the clazz
*/
public ModelCreationFactory(Class<?> clazz) {
this.clazz = clazz;
}
/**
* Instantiates a new model creation factory.
*
* @param clazz
* the clazz
* @param eclass
* the eclass
*/
public ModelCreationFactory(Class<?> clazz, EClass eclass) {
this.clazz = clazz;
this.eclass = eclass;
}
/**
* Factory Klasse liefert entsprechend der Instanzierung ein Objekt
* zur�ck.
*
* @return liefert Objekt der Klasse clazz zur�ck
*/
@Override
public Object getNewObject() {
if (clazz == Node.class) {
Node node = HenshinFactory.eINSTANCE.createNode();
if (eclass != null) {
node.setType(eclass);
}
return node;
}
if (clazz == Edge.class) {
return HenshinFactory.eINSTANCE.createEdge();
}
if (clazz == Attribute.class) {
return HenshinFactory.eINSTANCE.createAttribute();
}
if (clazz == Mapping.class) {
return HenshinFactory.eINSTANCE.createMapping();
}
if (clazz == Rule.class) {
return HenshinFactory.eINSTANCE.createRule();
}
if (clazz == SequentialUnit.class) {
return HenshinFactory.eINSTANCE.createSequentialUnit();
}
if (clazz == PriorityUnit.class) {
return HenshinFactory.eINSTANCE.createPriorityUnit();
}
if (clazz == IndependentUnit.class) {
return HenshinFactory.eINSTANCE.createIndependentUnit();
}
if (clazz == ConditionalUnit.class) {
return HenshinFactory.eINSTANCE.createConditionalUnit();
}
if (clazz == Parameter.class) {
Parameter parameter = HenshinFactory.eINSTANCE.createParameter();
return parameter;
}
if (clazz == ParameterMapping.class) {
return HenshinFactory.eINSTANCE.createParameterMapping();
}
if (LoopUnit.class.equals(clazz)) {
return HenshinFactory.eINSTANCE.createLoopUnit();
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.requests.CreationFactory#getObjectType()
*/
@Override
public Object getObjectType() {
return clazz;
}
}