package org.hawk.modelio;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashSet;
import org.modelio.gproject.data.project.DefinitionScope;
import org.modelio.gproject.data.project.ProjectDescriptor;
import org.modelio.gproject.data.project.ProjectDescriptorReader;
import org.modelio.gproject.gproject.GProject;
import org.modelio.gproject.gproject.GProjectFactory;
import org.modelio.gproject.module.catalog.FileModuleStore;
import org.modelio.metamodel.data.MetamodelLoader;
import org.modelio.vbasic.auth.NoneAuthData;
import org.modelio.vbasic.progress.NullProgress;
import org.hawk.core.IModelResourceFactory;
import org.hawk.core.model.IHawkModelResource;
public class ModelioModelFactory implements IModelResourceFactory {
String type = "uk.ac.york.cs.mde.hawk.ifc.model.ModelioModelFactory";
String metamodeltype = "com.googlecode.hawk.emf.metamodel.EMFMetaModelParser";
HashSet<String> modelExtensions;
public ModelioModelFactory() {
modelExtensions = new HashSet<String>();
modelExtensions.add("conf");
}
public void init(String t, String t2) {
type = t;
metamodeltype = t2;
}
@Override
public String getType() {
return this.getClass().getCanonicalName();
}
@Override
public IHawkModelResource parse(File f) {
return new ModelioModelResource(f, this);
}
@Override
public void shutdown() {
type = null;
modelExtensions = null;
}
@Override
public HashSet<String> getModelExtensions() {
return modelExtensions;
}
@Override
public boolean canParse(File f) {
boolean parseable = false;
if(!f.canRead() && !f.isFile() && !f.getName().endsWith("conf")){
return false;
}
//Load a Modelio project
//Start by loading the Modelio Metamodel
MetamodelLoader.Load();
ProjectDescriptor pd;
try {
String path = f.getCanonicalPath();
//Load the description of a given project
Path p = Paths.get(path);
pd = new ProjectDescriptorReader().read(p, DefinitionScope.LOCAL);
//Load the project
Path fms = Paths.get("/home/shah/.modelio/3.0/modules");
@SuppressWarnings("deprecation")
GProject gp = GProjectFactory.openProject(pd, new NoneAuthData(), new FileModuleStore(fms), new NullProgress());
gp.close();
parseable= true;
} catch (IOException e) {
parseable= false;
}
return parseable;
}
public String getMetaModelType() {
return metamodeltype;
}
@Override
public String getHumanReadableName() {
// TODO Auto-generated method stub
return "Modelio parser for Hawk";
}
}