package org.eclipse.qvto.examples.xtext.imperativeocl.cs2as;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.xtext.base.cs2as.CS2AS;
import org.eclipse.ocl.xtext.base.cs2as.CS2ASConversion;
import org.eclipse.ocl.xtext.base.cs2as.tx.CS2ASDiagnostic;
import org.eclipse.ocl.xtext.base.cs2as.tx.CS2ASException;
import org.eclipse.ocl.xtext.base.cs2as.tx.CS2ASTransformationExecutor;
import org.eclipse.ocl.xtext.base.cs2as.tx.CS2ASTransformer;
import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
import org.eclipse.ocl.xtext.basecs.ElementCS;
import org.eclipse.xtext.diagnostics.ExceptionDiagnostic;
import org.eclipse.xtext.diagnostics.IDiagnosticConsumer;
public class NewCS2AS extends CS2ASConversion {
public NewCS2AS(CS2AS converter, IDiagnosticConsumer diagnosticsConsumer) {
super(converter, diagnosticsConsumer);
}
@Override
public boolean update(@NonNull BaseCSResource csResource) {
ResourceSet rSet = csResource.getResourceSet();
CS2ASTransformer tx = null;
try {
CS2ASTransformationExecutor txExecutor= createTransformationExecutor();
tx = txExecutor.getTransformer();
tx.addRootObjects("leftCS", ClassUtil.nonNullState(csResource.getContents()));
if (tx.run()) {
URI asModelURI = csResource.getURI().appendFileExtension("xmi");
Resource outputResource = rSet.getResource(asModelURI, false);
if (outputResource == null) {
outputResource = rSet.createResource(asModelURI);
}
outputResource.getContents().clear();
outputResource.getContents().addAll(tx.getRootEObjects("rightAS"));
outputResource.save(null); // FIXME
}
return true;
}
catch (CS2ASException exception) {
addDiagnostic((ElementCS) exception.getCSObject(), exception.getMessage());
return false;
} catch(Exception exception) {
csResource.getErrors().add(new ExceptionDiagnostic(exception));
return false;
} finally {
if (tx != null) {
List<CS2ASDiagnostic> txErrors = tx.getErrors();
for (CS2ASDiagnostic diagnostic : txErrors) {
addDiagnostic((ElementCS)diagnostic.getCSObject(), diagnostic.getMessage());
}
txErrors.clear();
}
//qvt.dispose();
}
}
protected Class<? extends CS2ASTransformer> getCS2ASTxClass() {
return null; // TODO for ImperativeOCL
}
/**
* Just getCS2ASTxClass() should be overridden
*/
protected final CS2ASTransformationExecutor createTransformationExecutor() throws ReflectiveOperationException {
return new CS2ASTransformationExecutor(environmentFactory, getCS2ASTxClass());
}
}