/**
* generated by Xtext
*/
package emfviews.dsl.generator;
import armines.execution.RunTransfoJava;
import com.google.common.collect.Iterables;
import emfviews.dsl.sqlview.Metamodel;
import emfviews.dsl.sqlview.Model;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.generator.IGenerator;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.IteratorExtensions;
/**
* Generates code from your model files on save.
*
* see http://www.eclipse.org/Xtext/documentation.html#TutorialCodeGeneration
*/
@SuppressWarnings("all")
public class VpdlGenerator implements IGenerator {
public void doGenerate(final Resource resource, final IFileSystemAccess fsa) {
CharSequence _compileEviewtype = this.compileEviewtype(resource);
fsa.generateFile("myEAviewpoint.eviewtype", _compileEviewtype);
CharSequence _compileEcl = this.compileEcl(resource);
fsa.generateFile("myEAviewpoint.ecl", _compileEcl);
CharSequence _compileXmi = this.compileXmi(resource);
fsa.generateFile("myEAviewpoint.xmi", _compileXmi);
//Generate .xmi
RunTransfoJava rtj = new RunTransfoJava();
//change the extension of vpdl to .xmi
String inputModel = resource.getURI().toString().split("\\.")[0].concat(".xmi");
System.out.println("inputModel: "+ inputModel);
String filename = resource.getURI().toString().split("\\/")[resource.getURI().toString().split("\\/").length-1].toString();
String outputModel = resource.getURI().toString().substring(0, resource.getURI().toString().indexOf(filename)).concat("myEAviewpoint.xmi");
System.out.println("outputModel: "+ outputModel);
rtj.runTransformation("http://www.dsl.emfviews/Sqlview", "http://www.dsl.emfviews/virtualLinks", "/transformations/SQL2VirtualLinks.asm",
inputModel, outputModel);
CharSequence _compileEcore = this.compileEcore(resource);
fsa.generateFile("myEAviewpoint.ecore", _compileEcore);
}
public Iterable<Metamodel> getListMetamodels(final Resource r) {
TreeIterator<EObject> _allContents = r.getAllContents();
List<EObject> _list = IteratorExtensions.<EObject>toList(_allContents);
return Iterables.<Metamodel>filter(_list, Metamodel.class);
}
public CharSequence compileEviewtype(final Resource r) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("contributingMetamodels=");
_builder.newLine();
{
Iterable<Metamodel> _listMetamodels = this.getListMetamodels(r);
for(final Metamodel e : _listMetamodels) {
{
EList<String> _metamodelURL = e.getMetamodelURL();
String _string = _metamodelURL.toString();
TreeIterator<EObject> _allContents = r.getAllContents();
List<EObject> _list = IteratorExtensions.<EObject>toList(_allContents);
Iterable<Metamodel> _filter = Iterables.<Metamodel>filter(_list, Metamodel.class);
final Function1<Metamodel, Boolean> _function = new Function1<Metamodel, Boolean>() {
public Boolean apply(final Metamodel it) {
return Boolean.valueOf(true);
}
};
Metamodel _findFirst = IterableExtensions.<Metamodel>findFirst(_filter, _function);
EList<String> _metamodelURL_1 = _findFirst.getMetamodelURL();
String _string_1 = _metamodelURL_1.toString();
int _compareTo = _string.compareTo(_string_1);
boolean _equals = (_compareTo == 0);
if (_equals) {
EList<String> _metamodelURL_2 = e.getMetamodelURL();
String _string_2 = _metamodelURL_2.toString();
EList<String> _metamodelURL_3 = e.getMetamodelURL();
String _string_3 = _metamodelURL_3.toString();
int _length = _string_3.length();
int _minus = (_length - 2);
String _substring = _string_2.substring(2, _minus);
_builder.append(_substring, "");
_builder.newLineIfNotEmpty();
} else {
EList<String> _metamodelURL_4 = e.getMetamodelURL();
String _string_4 = _metamodelURL_4.toString();
EList<String> _metamodelURL_5 = e.getMetamodelURL();
String _string_5 = _metamodelURL_5.toString();
int _length_1 = _string_5.length();
int _minus_1 = (_length_1 - 2);
String _substring_1 = _string_4.substring(2, _minus_1);
_builder.append(_substring_1, "");
_builder.append(",");
_builder.newLineIfNotEmpty();
}
}
}
}
_builder.newLine();
_builder.append("correspondenceModel=EAview_Test/1_viewtype/");
TreeIterator<EObject> _allContents_1 = r.getAllContents();
List<EObject> _list_1 = IteratorExtensions.<EObject>toList(_allContents_1);
Iterable<Model> _filter_1 = Iterables.<Model>filter(_list_1, Model.class);
final Function1<Model, Boolean> _function_1 = new Function1<Model, Boolean>() {
public Boolean apply(final Model it) {
return Boolean.valueOf(true);
}
};
Model _findFirst_1 = IterableExtensions.<Model>findFirst(_filter_1, _function_1);
String _viewName = _findFirst_1.getViewName();
_builder.append(_viewName, "");
_builder.append(".xmi");
_builder.newLineIfNotEmpty();
_builder.append("correspondenceModelBase=EAview_Test/1_viewtype/");
TreeIterator<EObject> _allContents_2 = r.getAllContents();
List<EObject> _list_2 = IteratorExtensions.<EObject>toList(_allContents_2);
Iterable<Model> _filter_2 = Iterables.<Model>filter(_list_2, Model.class);
final Function1<Model, Boolean> _function_2 = new Function1<Model, Boolean>() {
public Boolean apply(final Model it) {
return Boolean.valueOf(true);
}
};
Model _findFirst_2 = IterableExtensions.<Model>findFirst(_filter_2, _function_2);
String _viewName_1 = _findFirst_2.getViewName();
_builder.append(_viewName_1, "");
_builder.append(".ecl");
_builder.newLineIfNotEmpty();
_builder.append("filtersMetamodel=/EAview_Test/1_viewtype/");
TreeIterator<EObject> _allContents_3 = r.getAllContents();
List<EObject> _list_3 = IteratorExtensions.<EObject>toList(_allContents_3);
Iterable<Model> _filter_3 = Iterables.<Model>filter(_list_3, Model.class);
final Function1<Model, Boolean> _function_3 = new Function1<Model, Boolean>() {
public Boolean apply(final Model it) {
return Boolean.valueOf(true);
}
};
Model _findFirst_3 = IterableExtensions.<Model>findFirst(_filter_3, _function_3);
String _viewName_2 = _findFirst_3.getViewName();
_builder.append(_viewName_2, "");
_builder.append(".ecore");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.newLine();
return _builder;
}
public CharSequence compileEcl(final Resource r) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("//alias_togaf=http://www.obeonetwork.org/dsl/togaf/contentfwk/9.0.0");
_builder.newLine();
_builder.append("//alias_bpmn=http://www.omg.org/spec/BPMN/20100524/MODEL-XMI");
_builder.newLine();
_builder.append("//alias_reqif=http://www.omg.org/spec/ReqIF/20110401/reqif.xsd");
_builder.newLine();
_builder.newLine();
_builder.append("rule detailedProcess");
_builder.newLine();
_builder.append("match s : togaf!Process");
_builder.newLine();
_builder.append("with t : bpmn!Process");
_builder.newLine();
_builder.append("{");
_builder.newLine();
_builder.append("\t");
_builder.append("compare");
_builder.newLine();
_builder.append("\t");
_builder.append("{");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return s.name = t.name;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("rule detailedRequirement");
_builder.newLine();
_builder.append("match s : togaf!Requirement");
_builder.newLine();
_builder.append("with t : reqif!SpecObject");
_builder.newLine();
_builder.append("{");
_builder.newLine();
_builder.append("\t");
_builder.append("compare");
_builder.newLine();
_builder.append("\t");
_builder.append("{");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return t.values.exists(v | v.theValue=s.name);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.newLine();
return _builder;
}
public CharSequence compileXmi(final Resource r) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("\t");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
return _builder;
}
public CharSequence compileEcore(final Resource r) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("\t");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
return _builder;
}
}