Java tutorial
/******************************************************************************* * 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(); } }