package de.urszeidler.shr5.scripting.ui.wizards; import java.util.Date; import java.util.List; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchWizard; import de.urszeidler.commons.functors.Predicate; import de.urszeidler.eclipse.shr5.runtime.RuntimeFactory; import de.urszeidler.eclipse.shr5.runtime.Team; import de.urszeidler.eclipse.shr5Management.GeneratorState; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.shr5.ecp.Activator; import de.urszeidler.shr5.ecp.service.ScriptService; import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools; import de.urszeidler.shr5.scripting.Placement; import de.urszeidler.shr5.scripting.Script; import de.urszeidler.shr5.scripting.ScriptingFactory; import de.urszeidler.shr5.scripting.Scripts; import de.urszeidler.shr5.scripting.ui.Messages; import de.urszeidler.shr5.scripting.ui.handlers.ScriptHandler; public class CombatScriptWizard extends Wizard implements INewWizard { private CombatScriptWizardPage page; private List<EObject> scripts; private List<EObject> characters; // private List<RuntimeCharacter> runtimeCharacters; private WritableValue selectedScriptContainer = new WritableValue(); private WritableValue selectedScriptName = new WritableValue(); private WritableValue startDate = new WritableValue(); private WritableList runtimeCharacters = new WritableList(); private Shell shell; private ScriptService scriptService; /** * Constructor for CombatScriptWizard. */ public CombatScriptWizard() { super(); setNeedsProgressMonitor(true); } /** * Adding the page to the wizard. */ public void addPages() { page = new CombatScriptWizardPage(scripts, characters, selectedScriptContainer, selectedScriptName, startDate, runtimeCharacters); addPage(page); } /** * This method is called when 'Finish' button is pressed in * the wizard. We will create an operation and run it * using wizard as execution context. */ public boolean performFinish() { try { doFinish(); } catch (Exception e) { Activator.logError("Error creating combat script", e);//$NON-NLS-1$ } return true; } /** * The worker method. */ private void doFinish() throws Exception { String sName = (String)selectedScriptName.getValue(); Scripts sc = (Scripts)selectedScriptContainer.getValue(); Script script = ScriptingFactory.eINSTANCE.createScript(); script.setName(sName); Placement placement = ScriptingFactory.eINSTANCE.createPlacement(); placement.setName(sName); placement.setActualDate((Date)startDate.getValue()); script.getPlacements().add(placement); script.setEntry(placement); Team team = RuntimeFactory.eINSTANCE.createTeam(); team.setName(Messages.CombatScriptWizard_enemies_name_default); script.getAllTeams().add(team); Team playerTeam = RuntimeFactory.eINSTANCE.createTeam(); playerTeam.setName(Messages.CombatScriptWizard_players_name_default); script.setPlayer(playerTeam); placement.getTeams().add(team); team.getMembers().addAll(runtimeCharacters); sc.getStories().add(script); ScriptHandler.startScript(script, shell, scriptService); saveSettings(); } private void saveSettings() { IDialogSettings settings = getDialogSettings(); settings.put("scriptName", (String)selectedScriptName.getValue());//$NON-NLS-1$ Date value = (Date)startDate.getValue(); if (value != null) settings.put("scriptDate", value.getTime());//$NON-NLS-1$ } /** * We will accept the selection in the workbench to see if * we can initialize from it. * * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) */ public void init(IWorkbench workbench, IStructuredSelection selection) { shell = workbench.getActiveWorkbenchWindow().getShell(); scriptService = (ScriptService)workbench.getActiveWorkbenchWindow().getService(ScriptService.class); setDialogSettings(de.urszeidler.shr5.scripting.ui.Activator.getDefault().getDialogSettings()); EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); scripts = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (input instanceof Scripts) { return true; } return false; } }); characters = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (input instanceof ManagedCharacter) { ManagedCharacter input2 = (ManagedCharacter)input; if (input2.getGeneratorSrc() != null) return input2.getGeneratorSrc().getState() == GeneratorState.COMMITED; } return false; } }); selectedScriptContainer.setValue(scripts.get(0)); selectedScriptName.setValue(Messages.CombatScriptWizard_script_default); try { IDialogSettings settings = getDialogSettings(); if (settings != null) { String name = settings.get("scriptName");//$NON-NLS-1$ if(name!=null && !name.isEmpty()) selectedScriptName.setValue(name); String date = settings.get("scriptDate");//$NON-NLS-1$ Date sDate = new Date(Long.parseLong(date)); startDate.setValue(sDate); } } catch (Exception e) { startDate.setValue(new Date(3281986800365L)); } } }