pow.views.EntityView.java Source code

Java tutorial

Introduction

Here is the source code for pow.views.EntityView.java

Source

/*******************************************************************************
 * Copyright (C) 2013 Prisoners of War - All Rights Reserved
 *
 * This file is part of POW.
 *
 * POW is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * POW is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with POW.  If not, see <http://www.gnu.org/licenses/>.
 *******************************************************************************/
package pow.views;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Observable;
import java.util.Observer;

import ole.OLEModel;
import ole.OLEntity;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.part.ViewPart;

import pow.Activator;
import pow.Parameter;
import bpmn.BPMNModel;
import bpmn.BPMNObject;

public class EntityView extends ViewPart {
    public static final String ID = "pow.views.EntityView";

    private TreeViewer tv;
    private OLEModel ole;
    private BPMNModel bpmn;
    private HashMap<String, EntityViewElement> entities;
    private Action action1;
    private boolean nonExistingEntities = false;

    private class EntityViewElement {
        public String name;
        public ArrayList<Parameter> params;
        public boolean inDataModel;

        @Override
        public boolean equals(Object o) {
            if (!(o instanceof EntityViewElement))
                return false;
            return this.name.equals(((EntityViewElement) o).name);
        }

        @Override
        public int hashCode() {
            return name.hashCode();
        }

        public EntityViewElement(OLEntity ent) {
            this.params = new ArrayList<Parameter>();
            this.name = ent.getEntityName();
            this.inDataModel = true;
        }

        public EntityViewElement(Parameter param) {
            this.params = new ArrayList<Parameter>();
            this.params.add(param);
            this.name = param.getType();
            this.inDataModel = false;
        }
    }

    private class EntityContentProvider implements IStructuredContentProvider, ITreeContentProvider, Observer {

        @Override
        public void dispose() {
        }

        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }

        @Override
        public synchronized void update(Observable arg0, Object arg1) {
            if (Activator.getDefault().getPOWModel() == null) {
                entities = null;
                tv.refresh();
                return;
            }
            ole = Activator.getDefault().getPOWModel().getOlemodel();
            bpmn = Activator.getDefault().getPOWModel().getBPMNModel();
            if (ole == null || bpmn == null)
                return;

            ArrayList<Parameter> parameters = bpmn.getAllParameters();
            ArrayList<OLEntity> olentities = ole.getEntities();

            entities = new HashMap<String, EntityViewElement>();
            for (OLEntity oe : olentities) {
                entities.put(oe.getEntityName(), new EntityViewElement(oe));
            }
            boolean b = false;
            for (Parameter p : parameters) {
                EntityViewElement eve = new EntityViewElement(p);
                if (entities.containsKey(eve.name)) {
                    eve = entities.get(eve.name);
                    eve.params.add(p);
                } else if (Character.isUpperCase(p.getType().charAt(0))) {
                    entities.put(eve.name, eve);
                    b = true;
                }
            }
            nonExistingEntities = b;
            action1.setEnabled(nonExistingEntities);
            tv.refresh();
        }

        @Override
        public Object[] getChildren(Object parentElement) {
            if (ole == null || bpmn == null || entities == null)
                return new Object[0];
            if (parentElement.equals(entities))
                return entities.values().toArray();
            if (!(parentElement instanceof EntityViewElement))
                return new Object[0];
            EntityViewElement eve = (EntityViewElement) parentElement;
            return eve.params.toArray();
        }

        @Override
        public Object getParent(Object element) {
            if (element.equals(entities))
                return null;
            return entities;
        }

        @Override
        public boolean hasChildren(Object element) {
            if (element.equals(entities))
                return entities.size() > 0;
            if (!(element instanceof EntityViewElement))
                return false;
            EntityViewElement eve = (EntityViewElement) element;
            return eve.params.size() > 0;
        }

        @Override
        public Object[] getElements(Object inputElement) {
            return getChildren(entities);
        }

        public EntityContentProvider() {
            Activator.getDefault().addObserver(this);
        }
    }

    public class EntityLabelProvider extends LabelProvider {
        @Override
        public String getText(Object elm) {
            if (elm instanceof EntityViewElement)
                return ((EntityViewElement) elm).name;
            if (elm instanceof Parameter) {
                Parameter par = (Parameter) elm;
                return par.getName() + " (" + par.getActivity().getName() + ")";
            }
            return null;
        }

        @Override
        public Image getImage(Object elm) {
            if (elm instanceof Parameter) {
                Parameter par = (Parameter) elm;
                return PlatformUI.getWorkbench().getSharedImages()
                        .getImage(par.isInput() ? ISharedImages.IMG_TOOL_FORWARD : ISharedImages.IMG_TOOL_BACK);
            }

            if (!(elm instanceof EntityViewElement))
                return null;

            EntityViewElement eve = (EntityViewElement) elm;
            if (!eve.inDataModel)
                return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
            return Activator.getDefault().getImageRegistry().get("ole-entity");
        }
    }

    @Override
    public void createPartControl(Composite parent) {
        tv = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        tv.setContentProvider(new EntityContentProvider());
        tv.setLabelProvider(new EntityLabelProvider());
        tv.setInput(getViewSite());
        tv.setSorter(new ViewerSorter());
        getSite().setSelectionProvider(tv);

        tv.addDoubleClickListener(new IDoubleClickListener() {

            @Override
            public void doubleClick(DoubleClickEvent event) {
                IStructuredSelection thisSelection = (IStructuredSelection) event.getSelection();
                Object selectedNode = thisSelection.getFirstElement();
                if (selectedNode instanceof Parameter) {
                    ArrayList<Object> path = new ArrayList<Object>();
                    BPMNObject current = ((Parameter) selectedNode).getActivity();
                    TreeViewer viewer = Activator.getDefault().bpmnView.getViewer();
                    while (current != null) {
                        path.add(current);
                        current = current.getParent();
                    }

                    path.add(Activator.getDefault().getPOWModel());
                    Collections.reverse(path);
                    TreePath tp = new TreePath(path.toArray());
                    TreeSelection sel = new TreeSelection(tp);
                    viewer.setExpandedTreePaths(new TreePath[] { tp });
                    viewer.setExpandedState(((Parameter) selectedNode).getActivity(), true);
                    viewer.setSelection(sel, true);

                    IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
                    try {
                        handlerService.executeCommand("pow.commands.openactivityeditor", null);
                    } catch (Exception ex) {
                        POWConsole.printError(ex.getMessage());
                        ex.printStackTrace();
                    }
                }
            }

        });
        makeActions();
        contributeToActionBars();

    }

    private void fillLocalToolBar(IToolBarManager manager) {
        manager.add(action1);
    }

    private void contributeToActionBars() {
        IActionBars bars = getViewSite().getActionBars();
        fillLocalToolBar(bars.getToolBarManager());
    }

    private void makeActions() {
        action1 = new Action() {
            public void run() {
                if (Activator.getDefault().getPOWModel() == null)
                    return;
                if (MessageDialog.openConfirm(null, "Confirm",
                        "Are you sure you want to delete the parameters with non-existing entities?")) {
                    Activator.getDefault().getPOWModel().cleanParameterReferences();
                    nonExistingEntities = false;
                }
            }
        };
        action1.setText("Delete parameters with non-existing Entities");
        action1.setToolTipText("Delete parameters with non-existing Entities");
        action1.setImageDescriptor(Activator.getDefault().getImageRegistry().getDescriptor("bin-parameters"));
        action1.setEnabled(nonExistingEntities);
    }

    @Override
    public void setFocus() {
        tv.getControl().setFocus();
    }

}