/******************************************************************************* | |
* CHESS core plugin | |
* | |
* Copyright (C) 2011-2015 | |
* Mälardalen University, Sweden | |
* | |
* | |
* 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-v20.html | |
*******************************************************************************/ | |
package org.polarsys.chess.fla.impl; | |
import java.io.File; | |
import java.util.Map; | |
import org.eclipse.core.resources.IFile; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.emf.common.util.URI; | |
import org.eclipse.emf.ecore.resource.Resource; | |
import org.eclipse.emf.ecore.resource.ResourceSet; | |
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; | |
import org.polarsys.chess.fla.common.TransformationException; | |
import org.polarsys.chess.fla.flamm.FlammPackage; | |
import org.polarsys.chess.fla.flamm.analysis.FlaSystem; | |
import org.polarsys.chess.fla.flaxml.FlaxmlPackage; | |
import org.polarsys.chess.fla.flaxml.util.FlaxmlResourceFactoryImpl; | |
import org.polarsys.chess.fla.transformations.QVToTransformation; | |
public class FlaAnalysisRunnerXml extends FlaAnalysisRunner { | |
protected IFile selectedXmlFile; | |
public void setSelectedXmlFile(IFile file) { | |
this.selectedXmlFile = file; | |
} | |
@Override | |
protected void runInput2FlaTransformation(IProgressMonitor monitor) throws TransformationException{ | |
Resource xmlResource = readXml(iFileToUri(selectedXmlFile)); | |
URI flaMMUri = createFlaModelUri().appendFileExtension(FLA_MM_EXTENSION); | |
ResourceSet resourceSet = new ResourceSetImpl(); | |
new File(flaMMUri.path()).delete(); | |
flaResource = resourceSet.createResource(flaMMUri); | |
QVToTransformation transformation = new QVToTransformation(); | |
transformation.performConcertoFlaXml2ConcertoFlaTransformation(xmlResource, flaResource, monitor); | |
} | |
@Override | |
protected void backpropagateAnalysisResults(FlaSystem system, IProgressMonitor monitor) {}; | |
@Override | |
protected String getModelName() { | |
return selectedXmlFile.getName().substring(0, selectedXmlFile.getName().lastIndexOf('.')); | |
} | |
protected Resource readXml(URI uri) { | |
// Initialize the model | |
FlaxmlPackage.eINSTANCE.eClass(); | |
FlammPackage.eINSTANCE.eClass(); | |
// Register the resource factory for the .flaxml extension | |
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE; | |
Map<String, Object> m = reg.getExtensionToFactoryMap(); | |
m.put("xml", new FlaxmlResourceFactoryImpl()); | |
// Obtain a new resource set | |
ResourceSet resSet = new ResourceSetImpl(); | |
// Get the resource | |
Resource resource = resSet.getResource(uri, true); | |
return resource; | |
} | |
URI iFileToUri(IFile iFile) { | |
// according to | |
// http://wiki.eclipse.org/index.php/EMF/FAQ#How_do_I_map_between_an_EMF_Resource_and_an_Eclipse_IFile.3F | |
return URI.createPlatformResourceURI(iFile.getFullPath().toString(), true); | |
} | |
} |