/** * */ package de.urszeidler.shr5.ecp.handlers; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.handlers.HandlerUtil; import de.urszeidler.commons.functors.Predicate; import de.urszeidler.eclipse.shr5.AbstraktGegenstand; import de.urszeidler.eclipse.shr5.Beschreibbar; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5Management.CharacterGenerator; import de.urszeidler.eclipse.shr5Management.GeneratorState; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.emf.commons.ui.dialogs.OwnChooseDialog; import de.urszeidler.shr5.ecp.Activator; import de.urszeidler.shr5.ecp.service.ScriptService; import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools; /** * @author urs */ public class OpenObjectHandler extends AbstractHandler { public static final String RUNTIME_PERSPECTIVE = "de.urszeidler.shr5.product.application.RuntimePerspective"; //$NON-NLS-1$ private ScriptService scriptService; /* * (non-Javadoc) * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { final String parameter = event.getParameter("de.urszeidler.shr5.ecp.commands.openObjectCommand.parameter.type"); //$NON-NLS-1$ IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); final Shell shell = window.getShell(); scriptService = (ScriptService)window.getService(ScriptService.class); IRunnableWithProgress runnable = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { executeAction(parameter, shell, monitor); } }; try { window.run(false, false, runnable); } catch (InvocationTargetException e) { Activator.logError(e); } catch (InterruptedException e) { Activator.logError(e); } return null; } /** * The worker method. * * @param parameter * @param shell * @param monitor */ private void executeAction(String parameter, Shell shell, IProgressMonitor monitor) { try { int parseInt = Integer.parseInt(parameter); switch (parseInt) { case 1: openGenerator(shell, Messages.OpenObjectHandler_open_Generator_titel, Messages.OpenObjectHandler_open_Generator_message, monitor); break; case 2: openCharacter(shell, Messages.OpenObjectHandler_open_character_titel, Messages.OpenObjectHandler_open_character_message, monitor); break; case 3: openBeschreibbar(shell, Messages.OpenObjectHandler_open_any_titel, Messages.OpenObjectHandler_open_any_message, monitor); break; case 4: openItem(shell, Messages.OpenObjectHandler_open_item_titel, Messages.OpenObjectHandler_open_item_message, monitor); break; // case 5: // openScript(shell, Messages.OpenObjectHandler_playScript_titel, Messages.OpenObjectHandler_playScript_message, monitor, true); // break; // case 6: // openScript(shell, Messages.OpenObjectHandler_openScrip_titel, Messages.OpenObjectHandler_openScrip_message, monitor, false); // break; default: break; } } catch (Exception e) { Activator.logError(e); } } // private void openScript(Shell shell, String titel, String message, IProgressMonitor monitor, boolean start) { // monitor.beginTask(Messages.OpenObjectHandler_openScript_task, 1); // EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); // Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { // @Override // public boolean evaluate(Object input) { // if (input instanceof Script) { // return true; // } // return false; // } // }); // monitor.done(); // // OwnChooseDialog dialog = new OwnChooseDialog(shell, filteredObject.toArray(new Object[]{}), titel, message); // dialog.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider()); // int open = dialog.open(); // if (open == Dialog.OK) { // Object[] result = dialog.getResult(); // if (result.length > 0) { // Script eo = (Script)result[0]; // if (start) // startScript(eo, shell); // else // openOneObject(shell,Collections.singleton((EObject)eo), titel, message); // // } // } // } // // protected void startScript(Script eo, Shell shell) { // // Placement placement = eo.getEntry(); // if (eo.getHistory() == null) { // initalizeScript(eo, shell); // } else { // if (MessageDialog.open(MessageDialog.QUESTION, shell, Messages.OpenObjectHandler_playScript_titel, Messages.OpenObjectHandler_playScript_continue, SWT.NONE)) // placement = eo.getHistory().getCurrentPlacement(); // else { // eo.getPlayer().getMembers().clear(); // initalizeScript(eo, shell); // } // } // try { // PlatformUI.getWorkbench().showPerspective(RUNTIME_PERSPECTIVE, PlatformUI.getWorkbench().getActiveWorkbenchWindow()); // } catch (WorkbenchException e) { // Activator.logError(e); // } // // scriptService.setScript(eo); // scriptService.setPlacement(placement); // } // // protected void initalizeScript(Script eo, Shell shell) { // eo.setHistory(ScriptingFactory.eINSTANCE.createScriptHistory()); // // if (eo.getHistory().getCommandStack() == null) { // eo.getHistory().setCommandStack(GameplayFactory.eINSTANCE.createExecutionStack()); // eo.getHistory().getCommandStack().setProtocol(GameplayFactory.eINSTANCE.createExecutionProtocol()); // } // fillPayerGoup(eo, shell); // } // // @SuppressWarnings("unchecked") // protected void fillPayerGoup(Script eo, Shell shell) { // Collection<? extends EObject> choiceOfValues = ItemPropertyDescriptor.getReachableObjectsOfType(eo, // Shr5managementPackage.Literals.PLAYER_CHARACTER); // eo.getPlayer().getMembers().clear(); // FeatureEditorDialogWert dialog = new FeatureEditorDialogWert(shell, AdapterFactoryUtil.getInstance().getLabelProvider(), eo.getPlayer(), // RuntimePackage.Literals.TEAM__MEMBERS, Messages.OpenObjectHandler_select_combatans, new ArrayList<EObject>(Collections2.filter( // (Collection<ManagedCharacter>)choiceOfValues, // ShadowrunManagmentTools.characterGeneratorStatePredicate(GeneratorState.COMMITED))),eo,DialogType.simple); // // int result = dialog.open(); // if (result == Window.OK) { // EList<?> list = dialog.getResult(); // Team player = eo.getPlayer(); // if (player == null) // player = RuntimeFactory.eINSTANCE.createTeam(); // // player.getMembers().addAll( // Collections2.transform((Collection<ManagedCharacter>)list, ShadowrunEditingTools.managedCharacter2RuntimeFunction())); // } // } private void openItem(Shell shell, String titel, String message, IProgressMonitor monitor) { monitor.beginTask(Messages.OpenObjectHandler_collect_items, 1); EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (input instanceof AbstraktGegenstand) { return true; } return false; } }); monitor.done(); openOneObject(shell, filteredObject, titel, message); } private void openBeschreibbar(Shell shell, String titel, String message, IProgressMonitor monitor) { monitor.beginTask(Messages.OpenObjectHandler_collect_objects, 1); EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (input instanceof Beschreibbar) { return true; } return false; } }); monitor.done(); openOneObject(shell, filteredObject, titel, message); } private void openCharacter(Shell shell, String titel, String message, IProgressMonitor monitor) { EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (input instanceof ManagedCharacter) { return true; } return false; } }); monitor.done(); openOneObject(shell, filteredObject, titel, message); } private void openGenerator(Shell shell, String titel, String message, IProgressMonitor monitor) { EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (input instanceof CharacterGenerator) { CharacterGenerator<?> cg = (CharacterGenerator<?>)input; if (cg.getState() != GeneratorState.COMMITED) return true; } return false; } }); monitor.done(); openOneObject(shell, filteredObject, titel, message); } /** * Open one object of in the list. If selected. * * @param shell * @param filteredObject * @param titel * @param message */ public static void openOneObject(Shell shell, Collection<EObject> filteredObject, String titel, String message) { if (filteredObject.size() == 1) { EObject eo = filteredObject.iterator().next(); ShadowrunEditingTools.openEObject(eo); return; } OwnChooseDialog dialog = new OwnChooseDialog(shell, filteredObject.toArray(new Object[]{}), titel, message); dialog.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider()); int open = dialog.open(); if (open == Dialog.OK) { Object[] result = dialog.getResult(); if (result.length > 0) { EObject eo = (EObject)result[0]; ShadowrunEditingTools.openEObject(eo); return; } } return; } }