com.archimatetool.help.cheatsheets.CreateMapViewCheatSheetAction.java Source code

Java tutorial

Introduction

Here is the source code for com.archimatetool.help.cheatsheets.CreateMapViewCheatSheetAction.java

Source

/**
 * This program and the accompanying materials
 * are made available under the terms of the License
 * which accompanies this distribution in the file LICENSE.txt
 */
package com.archimatetool.help.cheatsheets;

import org.eclipse.emf.common.util.EList;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.cheatsheets.ICheatSheetAction;
import org.eclipse.ui.cheatsheets.ICheatSheetManager;

import com.archimatetool.editor.ui.services.EditorManager;
import com.archimatetool.editor.ui.services.ViewManager;
import com.archimatetool.editor.views.tree.ITreeModelView;
import com.archimatetool.model.IArchimateDiagramModel;
import com.archimatetool.model.IArchimateFactory;
import com.archimatetool.model.IArchimateModel;
import com.archimatetool.model.IDiagramModel;
import com.archimatetool.model.IDiagramModelReference;
import com.archimatetool.model.IFolder;

/**
 * Action to programmatically create a Map View
 * 
 * @author Phillip Beauvoir
 */
public class CreateMapViewCheatSheetAction extends Action implements ICheatSheetAction {

    public void run(String[] params, ICheatSheetManager manager) {
        IViewPart viewPart = ViewManager.showViewPart(ITreeModelView.ID, true);
        if (viewPart == null) {
            MessageDialog.openWarning(Display.getCurrent().getActiveShell(),
                    Messages.CreateMapViewCheatSheetAction_0, Messages.CreateMapViewCheatSheetAction_1);
            return;
        }

        IArchimateModel model = (IArchimateModel) viewPart.getAdapter(IArchimateModel.class);
        if (model == null) {
            MessageDialog.openWarning(Display.getCurrent().getActiveShell(),
                    Messages.CreateMapViewCheatSheetAction_2, Messages.CreateMapViewCheatSheetAction_3);
            return;
        }

        EList<IDiagramModel> diagramModels = model.getDiagramModels();
        if (diagramModels.size() < 2) {
            MessageDialog.openWarning(Display.getCurrent().getActiveShell(),
                    Messages.CreateMapViewCheatSheetAction_4, Messages.CreateMapViewCheatSheetAction_5);
            return;
        }

        CommandStack stack = (CommandStack) model.getAdapter(CommandStack.class);
        if (stack != null) {
            IArchimateDiagramModel diagramModel = IArchimateFactory.eINSTANCE.createArchimateDiagramModel();
            diagramModel.setName(Messages.CreateMapViewCheatSheetAction_6);

            int y = 20;

            for (IDiagramModel dm : diagramModels) {
                IDiagramModelReference ref = IArchimateFactory.eINSTANCE.createDiagramModelReference();
                ref.setReferencedModel(dm);
                ref.setBounds(20, y, 400, 100);
                diagramModel.getChildren().add(ref);
                y += 120;
            }

            IFolder folder = model.getDefaultFolderForElement(diagramModel);

            stack.execute(new NewViewCommand(folder, diagramModel));
        }
    }

    private static class NewViewCommand extends Command {
        IFolder fParent;
        IDiagramModel fDiagramModel;

        NewViewCommand(IFolder parent, IDiagramModel model) {
            super(Messages.CreateMapViewCheatSheetAction_7);
            fParent = parent;
            fDiagramModel = model;
        }

        @Override
        public void execute() {
            fParent.getElements().add(0, fDiagramModel);
            EditorManager.openDiagramEditor(fDiagramModel);
        }

        @Override
        public void undo() {
            // Close Editor FIRST!
            EditorManager.closeDiagramEditor(fDiagramModel);
            fParent.getElements().remove(fDiagramModel);
        }
    }

}