de.itemis.gmf.tools.contribution.GMFToolsGeneration.java Source code

Java tutorial

Introduction

Here is the source code for de.itemis.gmf.tools.contribution.GMFToolsGeneration.java

Source

/*******************************************************************************
 * Copyright (c) 2009 itemis AG (http://www.itemis.eu) and others.
 * 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
 *******************************************************************************/
package de.itemis.gmf.tools.contribution;

import java.lang.reflect.InvocationTargetException;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;

import de.itemis.gmf.tools.preferences.GmfModel;
import de.itemis.gmf.tools.preferences.PreferenceUtil;

public class GMFToolsGeneration implements IRunnableWithProgress {

    private final GmfModel gmfModel;
    private boolean deleteGmfGenModel = PreferenceUtil.isDeleteGmfGen();
    private boolean transformMapping2GmfGenModel = PreferenceUtil.isTransformMap2GmfGen();
    private boolean transformGmfGenModels = PreferenceUtil.isTransformGmfGen();
    private boolean fixRegisteredTypes = PreferenceUtil.isFixTypeRegistration();
    private boolean deletegeGeneratedDiagramPlugin = PreferenceUtil.isDeleteDiagramPlugin();
    private boolean generateDiagramPlugin = PreferenceUtil.isGenerateDiagramPlugin();
    private String figureTemplatePath = PreferenceUtil.getFigureTemplatePath();

    public GMFToolsGeneration(GmfModel gmfModel, Map<String, String> options) {
        this.gmfModel = gmfModel;
        if (options.containsKey(PreferenceUtil.GMF_DELETE_GMFGEN)) {
            deleteGmfGenModel = new Boolean(options.get(PreferenceUtil.GMF_DELETE_GMFGEN));
        }
        if (options.containsKey(PreferenceUtil.GMF_TRANSFORM_MAP_2_GMFGEN)) {
            transformMapping2GmfGenModel = new Boolean(options.get(PreferenceUtil.GMF_TRANSFORM_MAP_2_GMFGEN));
        }
        if (options.containsKey(PreferenceUtil.GMF_TRANSFORM_GMFGEN)) {
            transformGmfGenModels = new Boolean(options.get(PreferenceUtil.GMF_TRANSFORM_GMFGEN));
        }
        if (options.containsKey(PreferenceUtil.GMF_FIX_TYPE_REGISTRY)) {
            fixRegisteredTypes = new Boolean(options.get(PreferenceUtil.GMF_FIX_TYPE_REGISTRY));
        }
        if (options.containsKey(PreferenceUtil.GMF_DELETE_GENERATED_PLUGIN)) {
            deletegeGeneratedDiagramPlugin = new Boolean(options.get(PreferenceUtil.GMF_DELETE_GENERATED_PLUGIN));
        }
        if (options.containsKey(PreferenceUtil.GMF_GENERATE_DIAGRAM_PLUGIN)) {
            generateDiagramPlugin = new Boolean(options.get(PreferenceUtil.GMF_GENERATE_DIAGRAM_PLUGIN));
        }
        if (options.containsKey(PreferenceUtil.GMF_FIGURE_TEMPLATE_PATH)) {
            figureTemplatePath = options.get(PreferenceUtil.GMF_FIGURE_TEMPLATE_PATH);
        }
    }

    public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
        try {
            Set<IFile> changedGmfGenModels = new HashSet<IFile>();
            boolean isOK = false;
            monitor.beginTask("Creating transformed GMF generator model", 5);
            if (transformMapping2GmfGenModel) {
                isOK = GmfMappingToGenModelTransformer.transformMapToGmfGenModel(gmfModel, deleteGmfGenModel,
                        figureTemplatePath, monitor);
                if (!isOK) {
                    return;
                }
                if (!transformGmfGenModels) {
                    changedGmfGenModels.add(gmfModel.getGmfGenModelFile());
                }
            }
            if (transformGmfGenModels) {
                isOK = GmfGenModelTransformer.createOrGetTransformationFile(gmfModel, monitor);
                if (!isOK) {
                    return;
                }
                isOK = GmfGenModelTransformer.transformGmfGenModelFile(gmfModel, monitor);
                if (!isOK) {
                    return;
                }
                changedGmfGenModels.add(gmfModel.getTransformedGmfGenModelFile());
            }
            if (fixRegisteredTypes) {
                isOK = GmfGenModelTypeRegistryHarmonizer.harmonizeTypeRegistration(PreferenceUtil.getGmfModels(),
                        changedGmfGenModels, monitor);
                if (!isOK) {
                    return;
                }
            }
            if (deletegeGeneratedDiagramPlugin && !changedGmfGenModels.isEmpty()) {
                isOK = GmfGeneratedPluginRemover.deleteGeneratedPlugins(changedGmfGenModels, monitor);
            }
            if (isOK && generateDiagramPlugin) {
                for (IFile gmfGenModel : changedGmfGenModels) {
                    GmfDiagramCodeGenerator.generateDiagramCode(gmfGenModel);
                }
            }
        } catch (Exception exc) {
            throw new InvocationTargetException(exc);
        }
    }

}