blob: 185337446b742bdaa2a32472450c39b489ae2c82 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 The University of York.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Dimitrios Kolovos - initial API and implementation
******************************************************************************/
package org.eclipse.epsilon.eol.dom;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.epsilon.common.module.AbstractModuleElement;
import org.eclipse.epsilon.common.module.IModule;
import org.eclipse.epsilon.common.parse.AST;
import org.eclipse.epsilon.common.util.AstUtil;
import org.eclipse.epsilon.eol.m3.Metamodel;
import org.eclipse.epsilon.eol.models.IModel;
import org.eclipse.epsilon.eol.parse.EolParser;
public class ModelDeclaration extends AbstractModuleElement {
protected NameExpression nameExpression;
protected List<NameExpression> aliasNameExpressions = new ArrayList<>();
protected NameExpression driverNameExpression;
protected List<ModelDeclarationParameter> modelDeclarationParameters = new ArrayList<>();
protected Metamodel metamodel = null;
protected IModel model;
public ModelDeclaration() {}
@Override
public void build(AST cst, IModule module) {
super.build(cst, module);
nameExpression = (NameExpression) module.createAst(cst.getFirstChild(), this);
driverNameExpression = (NameExpression) module.createAst(AstUtil.getChild(cst, EolParser.DRIVER).getFirstChild(), this);
AST aliasesAst = AstUtil.getChild(cst, EolParser.ALIAS);
if (aliasesAst != null) {
for (AST aliasAst : aliasesAst.getChildren()) {
aliasNameExpressions.add((NameExpression) module.createAst(aliasAst, this));
}
}
AST parametersAst = AstUtil.getChild(cst, EolParser.MODELDECLARATIONPARAMETERS);
if (parametersAst != null) {
for (AST parameterAst : parametersAst.getChildren()) {
modelDeclarationParameters.add((ModelDeclarationParameter) module.createAst(parameterAst, this));
}
}
}
public NameExpression getNameExpression() {
return nameExpression;
}
public void setNameExpression(NameExpression nameExpression) {
this.nameExpression = nameExpression;
}
public NameExpression getDriverNameExpression() {
return driverNameExpression;
}
public void setDriverNameExpression(NameExpression driverNameExpression) {
this.driverNameExpression = driverNameExpression;
}
public List<NameExpression> getAliasNameExpressions() {
return aliasNameExpressions;
}
public List<ModelDeclarationParameter> getModelDeclarationParameters() {
return modelDeclarationParameters;
}
public ModelDeclarationParameter getModelDeclarationParameter(String parameterName) {
for (ModelDeclarationParameter parameter : modelDeclarationParameters) {
if (parameter.getKey().equals(parameterName)) return parameter;
}
return null;
}
public List<?> getModuleElements() {
return Collections.emptyList();
}
public Metamodel getMetamodel() {
return metamodel;
}
public void setMetamodel(Metamodel metamodel) {
this.metamodel = metamodel;
}
public IModel getModel() {
return model;
}
public void setModel(IModel model) {
this.model = model;
}
public void accept(IEolVisitor visitor) {
visitor.visit(this);
}
}