/*******************************************************************************
* Copyright (c) 2008, 2012 Obeo.
* 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-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.eef.codegen.flow.util;
import java.io.IOException;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.eef.codegen.core.util.EMFHelper;
/**
* @author <a href="mailto:goulwen.lefur@obeo.fr">Goulwen Le Fur</a>
*
*/
public class GenmodelHelper {
private static final String EDITOR_SUFFIX = "editor";
private static final String PLATFORM_RESOURCE_SCHEME = "platform:/resource";
private static final String GENMODEL_EXTENSION = "genmodel";
private static final String EEF_MODELS_PATH = "models";
private static final String COMPONENTS_FILE_EXTENSION = "components";
private static final String EEFGEN_FILE_EXTENSION = "eefgen";
private IFile ecoreModel;
private IContainer targetFolder;
private ResourceSet resourceSet;
private URI ecoreModelURI;
private GenModel genmodel;
private URI genmodelURI;
/**
* @param ecoreModel
* @param targetFolder
*/
public GenmodelHelper(ResourceSet resourceSet, IFile ecoreModel, IContainer targetFolder) {
this.ecoreModel = ecoreModel;
this.targetFolder = targetFolder;
this.resourceSet = resourceSet;
}
/**
* @return the targetFolder
*/
public IContainer getTargetFolder() {
return targetFolder;
}
/**
* @return the ecoreModel
*/
public IFile getEcoreModel() {
return ecoreModel;
}
/**
* @return the ecoremodelURI
*/
public URI ecoreModelURI() {
return computeEcoreModelURI();
}
/**
* @return the IFile containing the GenModel
*/
public IFile getGenModelFile() {
return targetFolder.getFile(new Path(genmodelFileName()));
}
/**
* @return the generated genmodel URI.
*/
public URI genmodelURI() {
if (genmodelURI == null) {
genmodelURI = GenmodelHelper.computeGenmodelURI(targetFolder, genmodelFileName());
}
return genmodelURI;
}
/**
* @return the genmodel
*/
public GenModel getGenModel() {
if (genmodel == null) {
genmodel = loadGenmodel();
}
return genmodel;
}
/**
* @return the EEF models {@link IFolder}
*/
public IFolder getEEFModelsFolder() {
IProject editProject = targetFolder.getWorkspace().getRoot().getProject(getGenModel().getEditPluginID());
IFolder modelsFolder = editProject.getFolder(new Path(eefmodelsFolderPath()));
return modelsFolder;
}
/**
* @return folder path for the EEF models
*/
public String eefmodelsFolderPath() {
return EEF_MODELS_PATH;
}
/**
* @return components file for EEF properties
*/
public IFile getEEFPropertiesComponentsModel() {
return getEEFModelsFolder().getFile(new Path(genmodelURI().trimFileExtension().appendFileExtension(COMPONENTS_FILE_EXTENSION).lastSegment()));
}
/**
* @return components file for EEF properties
*/
public IFile getEEFPropertiesEEFGenModel() {
return getEEFModelsFolder().getFile(new Path(genmodelURI().trimFileExtension().appendFileExtension(EEFGEN_FILE_EXTENSION).lastSegment()));
}
/**
* @return components file for EEF Editor
*/
public IFile getEEFEditorComponentsModel() {
return getEEFModelsFolder().getFile(new Path(genmodelURI().trimFileExtension().lastSegment() + "-" + EDITOR_SUFFIX + "." + COMPONENTS_FILE_EXTENSION));
}
/**
* @return components file for EEF Editor
*/
public IFile getEEFEditorEEFGenModel() {
return getEEFModelsFolder().getFile(new Path(genmodelURI().trimFileExtension().lastSegment() + "-" + EDITOR_SUFFIX + "." + EEFGEN_FILE_EXTENSION));
}
/**
* @return the Source folder of the EMF model plugin if genmodel found. null otherwise.
*/
public IFolder getEMFModelSrcFolder() {
if (getGenModel() != null) {
return targetFolder.getWorkspace().getRoot().getFolder(new Path(getGenModel().getModelDirectory()));
}
return null;
}
/**
* @return the Source folder of the EMF edit plugin if genmodel found. null otherwise.
*/
public IFolder getEMFEditSrcFolder() {
if (getGenModel() != null) {
return targetFolder.getWorkspace().getRoot().getFolder(new Path(getGenModel().getEditDirectory()));
}
return null;
}
/**
* @return the Source folder of the EMF editor plugin if genmodel found. null otherwise.
*/
public IFolder getEMFEditorSrcFolder() {
if (getGenModel() != null) {
return targetFolder.getWorkspace().getRoot().getFolder(new Path(getGenModel().getEditorDirectory()));
}
return null;
}
/**
* Compute the Ecore Model URI for the given ecore file
* @param ecoreModel the ecore file
* @return the ecore model URI
*/
private URI computeEcoreModelURI() {
if (ecoreModelURI == null) {
ecoreModelURI = URI.createURI(PLATFORM_RESOURCE_SCHEME + ecoreModel.getFullPath());
}
return ecoreModelURI;
}
/**
* Compute the GenModel URI for the given ecore modelURI
* @param ecoreModelURI
* @return
*/
public static URI computeGenmodelURI(IContainer targetFolder, String genmodelFileName) {
return URI.createPlatformResourceURI(targetFolder.getFullPath() + "/" + genmodelFileName, true);
}
/**
* @param modelURI
* @return
*/
public String genmodelFileName() {
return ecoreModelURI().trimFileExtension().appendFileExtension(GENMODEL_EXTENSION).lastSegment();
}
/**
* @return the created genmodel
*/
private GenModel loadGenmodel() {
try {
URI genmodelURI = genmodelURI();
EObject model = EMFHelper.load(genmodelURI, resourceSet);
if (model instanceof GenModel) {
return (GenModel) model;
}
} catch (IOException e) {
// Silent catch
}
return null;
}
public static URI computePropertiesComponentsModelURI(IContainer targetFolder, URI genmodelURI) {
return URI.createPlatformResourceURI(targetFolder.getFullPath() + "/" + genmodelURI.trimFileExtension().appendFileExtension(COMPONENTS_FILE_EXTENSION).lastSegment(), false);
}
public static URI computePropertiesEEFGenModelURI(IContainer targetFolder, URI genmodelURI) {
return URI.createPlatformResourceURI(targetFolder.getFullPath() + "/" + genmodelURI.trimFileExtension().appendFileExtension(EEFGEN_FILE_EXTENSION).lastSegment(), false);
}
public static URI computeEditorComponentsModelURI(IContainer targetFolder, URI genmodelURI) {
return URI.createPlatformResourceURI(targetFolder.getFullPath() + "/" + genmodelURI.trimFileExtension().lastSegment() + "-" + EDITOR_SUFFIX + "." + COMPONENTS_FILE_EXTENSION, false);
}
public static URI computeEditorEEFGenModelURI(IContainer targetFolder, URI genmodelURI) {
return URI.createPlatformResourceURI(targetFolder.getFullPath() + "/" + genmodelURI.trimFileExtension().lastSegment() + "-" + EDITOR_SUFFIX + "." + EEFGEN_FILE_EXTENSION, false);
}
}