/** * */ package de.urszeidler.shr5.ecp.editor.pages.generator; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map.Entry; import java.util.Set; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.conversion.Converter; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.databinding.EMFUpdateValueStrategy; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.Diagnostician; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.wb.swt.ResourceManager; import com.google.common.base.Function; import com.google.common.collect.FluentIterable; import de.urszeidler.eclipse.shr5.Erlernbar; import de.urszeidler.eclipse.shr5.Fertigkeit; import de.urszeidler.eclipse.shr5.FertigkeitsGruppe; import de.urszeidler.eclipse.shr5.PersonaEigenschaft; import de.urszeidler.eclipse.shr5.PersonaFertigkeit; import de.urszeidler.eclipse.shr5.PersonaFertigkeitsGruppe; import de.urszeidler.eclipse.shr5.Shr5Factory; import de.urszeidler.eclipse.shr5.Spezialisierung; import de.urszeidler.eclipse.shr5.Wissensfertigkeit; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5.util.ShadowrunTools; import de.urszeidler.eclipse.shr5Management.AttributeChange; import de.urszeidler.eclipse.shr5Management.GeneratorState; import de.urszeidler.eclipse.shr5Management.LifeModule; import de.urszeidler.eclipse.shr5Management.LifeModulesGenerator; import de.urszeidler.eclipse.shr5Management.LifeModulesSystem; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.ModuleAttributeChange; import de.urszeidler.eclipse.shr5Management.ModuleChange; import de.urszeidler.eclipse.shr5Management.ModuleFeatureChange; import de.urszeidler.eclipse.shr5Management.ModuleSkillChange; import de.urszeidler.eclipse.shr5Management.ModuleSkillGroupChange; import de.urszeidler.eclipse.shr5Management.ModuleTeachableChange; import de.urszeidler.eclipse.shr5Management.PersonaChange; import de.urszeidler.eclipse.shr5Management.Resourcen; import de.urszeidler.eclipse.shr5Management.Shr5managementFactory; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage.Literals; import de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools; import de.urszeidler.emf.commons.ui.dialogs.OwnChooseDialog; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager; import de.urszeidler.emf.commons.ui.util.NullObject; import de.urszeidler.shr5.ecp.editor.ShrReferenceManager; import de.urszeidler.shr5.ecp.editor.pages.Messages; import de.urszeidler.shr5.ecp.editor.widgets.ResourceGeneratorOption; /** * @author urs */ public class LifeModuleGeneratorPage extends AbstractGeneratorPage { protected static final String EMPTY = ""; //$NON-NLS-1$ private LifeModulesGenerator object;// = Shr5managementFactory.eINSTANCE.createShr5KarmaGenerator(); private EditingDomain editingDomain; private DataBindingContext m_bindingContext; private Button btnPlayerButton; private ToolItem tltmNewItem; private ToolItem tltmCommit; private ToolItem restItem; private ToolItem tltmChoose; private Section sctnChoose; private Section sctnCreate; // private DiagnosticComposite diagnosticComposite; private Label lblInstruction; private Spinner spinner; private Label lblPhasestate; private Label lblKarmaToResorcen; private Label lblKarmaSpend; private ResourceGeneratorOption resourceGeneratorOption; private boolean optionWidgetsCreated; private Resourcen resourcen; private Group grpResources; private Set<String> changeSet; public LifeModuleGeneratorPage(FormEditor editor, String id, String title) { super(editor, id, title); } /** * The main constructor. * * @param editor * @param id * @param title * @param object * @param editingDomain * @param manager */ public LifeModuleGeneratorPage(FormEditor editor, String id, String title, LifeModulesGenerator object, EditingDomain editingDomain, ReferenceManager manager) { super(editor, id, title, manager); this.object = object; this.editingDomain = editingDomain; context = createValidationContext(); } /** * Create contents of the form. * * @param managedForm */ @Override protected void createFormContent(IManagedForm managedForm) { FormToolkit toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); form.setText(AdapterFactoryUtil.getInstance().getLabelProvider().getText(object)); Composite body = form.getBody(); toolkit.decorateFormHeading(form.getForm()); toolkit.paintBordersFor(body); managedForm.getForm().setEnabled(object.getState() != GeneratorState.COMMITED); managedForm.getForm().getBody().setLayout(new GridLayout(1, false)); ToolBar toolBar = new ToolBar(managedForm.getForm().getBody(), SWT.FLAT | SWT.RIGHT | SWT.SHADOW_OUT); managedForm.getToolkit().adapt(toolBar); managedForm.getToolkit().paintBordersFor(toolBar); tltmChoose = new ToolItem(toolBar, SWT.NONE); tltmChoose.setText(Messages.GeneratorPage_Step_One); tltmChoose.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_1.png")); //$NON-NLS-1$ //$NON-NLS-2$ tltmChoose.setToolTipText(Messages.Shr5KarmaGeneratorPage_Step_One_tooltip); tltmNewItem = new ToolItem(toolBar, SWT.NONE); tltmNewItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { createManagedCharacter(); } }); tltmNewItem.setText(Messages.GeneratorPage_Step_Two); tltmNewItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_2.png")); //$NON-NLS-1$ //$NON-NLS-2$ tltmNewItem.setToolTipText(Messages.GeneratorPage_Step_Two_tooltip); tltmCommit = new ToolItem(toolBar, SWT.NONE); tltmCommit.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { commitCharacter(); } }); tltmCommit.setText(Messages.GeneratorPage_Step_Three); tltmCommit.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_3.png")); //$NON-NLS-1$ //$NON-NLS-2$ tltmCommit.setToolTipText(Messages.GeneratorPage_Step_Tree_tooltip); restItem = new ToolItem(toolBar, SWT.NONE); restItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { resetCharacter(object); } }); restItem.setText(Messages.GeneratorPage_reset); restItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_4.png")); //$NON-NLS-1$ //$NON-NLS-2$ restItem.setToolTipText(Messages.GeneratorPage_Reset_tooltip); Group grpOverview = new Group(managedForm.getForm().getBody(), SWT.NONE); grpOverview.setLayout(new GridLayout(1, false)); grpOverview.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1)); grpOverview.setText(Messages.GeneratorPage_overview); managedForm.getToolkit().adapt(grpOverview); managedForm.getToolkit().paintBordersFor(grpOverview); Composite composite_overview = managedForm.getToolkit().createComposite(grpOverview, SWT.NONE); composite_overview.setLayout(new GridLayout(3, false)); composite_overview.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().paintBordersFor(composite_overview); Composite composite_1 = managedForm.getToolkit().createComposite(grpOverview, SWT.NONE); composite_1.setLayout(new FillLayout(SWT.HORIZONTAL)); composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); managedForm.getToolkit().paintBordersFor(composite_1); lblInstruction = managedForm.getToolkit().createLabel(composite_1, "ttt", SWT.NONE); //$NON-NLS-1$ sctnChoose = managedForm.getToolkit().createSection(managedForm.getForm().getBody(), Section.TWISTIE | Section.TITLE_BAR); sctnChoose.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); managedForm.getToolkit().paintBordersFor(sctnChoose); sctnChoose.setText(Messages.GeneratorPage_Step_One); sctnChoose.setExpanded(true); Composite grpAuswahl = new Composite(sctnChoose, SWT.NONE); sctnChoose.setClient(grpAuswahl); grpAuswahl.setLayout(new GridLayout(3, false)); managedForm.getToolkit().adapt(grpAuswahl); managedForm.getToolkit().paintBordersFor(grpAuswahl); Composite grpTyp = new Composite(grpAuswahl, SWT.NONE); managedForm.getToolkit().adapt(grpTyp); managedForm.getToolkit().paintBordersFor(grpTyp); grpTyp.setLayout(new GridLayout(1, false)); btnPlayerButton = new Button(grpTyp, SWT.RADIO); btnPlayerButton.setSelection(true); managedForm.getToolkit().adapt(btnPlayerButton, true, true); btnPlayerButton.setText(Messages.GeneratorPage_player); Button btnRadioButton_1 = new Button(grpTyp, SWT.RADIO); managedForm.getToolkit().adapt(btnRadioButton_1, true, true); btnRadioButton_1.setText(Messages.GeneratorPage_non_player); Composite compositePrio = new Composite(grpAuswahl, SWT.NONE); compositePrio.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); compositePrio.setLayout(new GridLayout(3, false)); managedForm.getToolkit().adapt(compositePrio); managedForm.getToolkit().paintBordersFor(compositePrio); Composite compositeAllowedSource = new Composite(grpAuswahl, SWT.NONE); compositeAllowedSource.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); compositeAllowedSource.setLayout(new GridLayout(1, false)); managedForm.getToolkit().adapt(compositeAllowedSource); managedForm.getToolkit().paintBordersFor(compositeAllowedSource); Composite composite_group = new Composite(grpAuswahl, SWT.NONE); composite_group.setLayout(new GridLayout(3, false)); composite_group.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); managedForm.getToolkit().adapt(composite_group); managedForm.getToolkit().paintBordersFor(composite_group); sctnCreate = managedForm.getToolkit().createSection(managedForm.getForm().getBody(), Section.TWISTIE | Section.TITLE_BAR); sctnCreate.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().paintBordersFor(sctnCreate); sctnCreate.setText(Messages.GeneratorPage_Step_Two); sctnCreate.setExpanded(true); Composite composite_3 = managedForm.getToolkit().createComposite(sctnCreate, SWT.NONE); managedForm.getToolkit().paintBordersFor(composite_3); sctnCreate.setClient(composite_3); composite_3.setLayout(new GridLayout(3, false)); managedForm.getToolkit().createLabel(composite_3, Messages.GeneratorPage_phase, SWT.NONE); lblPhasestate = managedForm.getToolkit().createLabel(composite_3, "phase_State", SWT.NONE); //$NON-NLS-1$ GridData gd_lblPhasestate = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1); gd_lblPhasestate.widthHint = 150; lblPhasestate.setLayoutData(gd_lblPhasestate); lblKarmaToResorcen = new Label(composite_3, SWT.NONE); managedForm.getToolkit().adapt(lblKarmaToResorcen, true, true); lblKarmaToResorcen.setText(Messages.GeneratorPage_karma2Resource); spinner = new Spinner(composite_3, SWT.BORDER); GridData gd_spinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_spinner.widthHint = 40; spinner.setLayoutData(gd_spinner); managedForm.getToolkit().adapt(spinner); managedForm.getToolkit().paintBordersFor(spinner); ControlDecoration controlDecorationKarma = new ControlDecoration(spinner, SWT.LEFT | SWT.TOP); controlDecorationKarma.setDescriptionText("Some description"); //$NON-NLS-1$ lblKarmaSpend = new Label(composite_3, SWT.NONE); GridData gd_lblKarmaSpend = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_lblKarmaSpend.widthHint = 60; lblKarmaSpend.setLayoutData(gd_lblKarmaSpend); managedForm.getToolkit().adapt(lblKarmaSpend, true, true); lblKarmaSpend.setText("New Label"); //$NON-NLS-1$ resourcen = Shr5managementFactory.eINSTANCE.createResourcen(); resourcen.setResource(0); grpResources = new Group(composite_3, SWT.NONE); grpResources.setLayout(new GridLayout(3, false)); grpResources.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); grpResources.setText(Messages.Shr5KarmaGeneratorPage_grpResources_text); managedForm.getToolkit().adapt(grpResources); managedForm.getToolkit().paintBordersFor(grpResources); new Label(composite_3, SWT.NONE); new Label(composite_3, SWT.NONE); new Label(composite_3, SWT.NONE); m_bindingContext = initDataBindings(); // -------------- ownBinding(m_bindingContext); createFormBuilder(managedForm); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_GENERATOR__SELECTED_GROUP, composite_group); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_GENERATOR__CHARACTER_NAME, composite_overview); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_GENERATOR__GENERATOR, composite_overview); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.KARMA_GENERATOR__META_TYPE, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.KARMA_GENERATOR__CHARACTER_CONCEPT, compositePrio); emfFormBuilder.addSeperatorEntry(compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.LIFE_MODULES_GENERATOR__NATIONALITY, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.LIFE_MODULES_GENERATOR__FORMATIVE_YEARS, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.LIFE_MODULES_GENERATOR__TEEN_YEARS, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.LIFE_MODULES_GENERATOR__FURTHER_EDUCATION, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.LIFE_MODULES_GENERATOR__REAL_LIFE, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.KARMA_GENERATOR__CHOISE_KARMA_COST, compositePrio, labelEntryFactory); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.LIFE_MODULES_GENERATOR__MODULE_KARMA_COST, compositePrio, labelEntryFactory); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.LIFE_MODULES_GENERATOR__STARTING_AGE, compositePrio, labelEntryFactory); // emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.FREE_STYLE_GENERATOR__SELECTED_PERSONA, compositePrio); GridData controlGridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 3); controlGridData.heightHint = 150; emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.SHR5_RULE_GENERATOR__ALLOWED_SOURCES, compositeAllowedSource, controlGridData); emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object); managedForm.reflow(true); if (!object.eAdapters().contains(this)) object.eAdapters().add(this); if (object.getCharacter() != null && object.getCharacter().getPersona() != null && object.getState() != GeneratorState.COMMITED) { addPersonaPage(object.getCharacter()); } validateChange(); } /** * Commit the character. */ protected void commitCharacter() { final int calcResourcesLeft = ShadowrunManagmentTools.calcResourcesLeft(object); int startMoney = calcResourcesLeft; startMoney = lifeStyleToStartMoneyDialog(calcResourcesLeft, startMoney,object); if(startMoney==-1) return; moveGeneratorToCharacterCommit(object); validateChange(); } // /** // * // */ // protected void moveGeneratorToCharacterCommit() { // CompoundCommand command = new CompoundCommand(); // command.append(SetCommand.create(getEditingDomain(), object, Shr5managementPackage.Literals.CHARACTER_GENERATOR__STATE, // GeneratorState.COMMITED)); // command.append(SetCommand.create(getEditingDomain(), object.getCharacter(), Shr5managementPackage.Literals.MANAGED_CHARACTER__GENERATOR_SRC, // object)); // // getEditingDomain().getCommandStack().execute(command); // } protected void createManagedCharacter() { ManagedCharacter managedCharacter = createManagedCharacter(object.getCharacterConcept().getSelectableTypes(), object.getMetaType() .getChoosableTypes(), btnPlayerButton.getSelection(), object); ArrayList<ModuleChange> list = new ArrayList<ModuleChange>(); list.addAll(object.getNationality().getCharacterChanges()); list.addAll(object.getFormativeYears().getCharacterChanges()); list.addAll(object.getTeenYears().getCharacterChanges()); if (object.getFurtherEducation() != null) list.addAll(object.getFurtherEducation().getCharacterChanges()); for (LifeModule lm : object.getRealLife()) { list.addAll(lm.getCharacterChanges()); } FluentIterable<ModuleChange> transform = FluentIterable.from(list).transform(new Function<ModuleChange, ModuleChange>() { @Override public ModuleChange apply(ModuleChange input) { return EcoreUtil.copy(input); } }); FluentIterable<ModuleAttributeChange> attributes = transform.filter(ModuleAttributeChange.class); FluentIterable<ModuleTeachableChange> teachable = transform.filter(ModuleTeachableChange.class); FluentIterable<ModuleFeatureChange> featueChanges = transform.filter(ModuleFeatureChange.class); FluentIterable<ModuleSkillGroupChange> skillGroups = transform.filter(ModuleSkillGroupChange.class); FluentIterable<ModuleSkillChange> skills = transform.filter(ModuleSkillChange.class); createAttributes(managedCharacter, attributes); createSkillGroups(managedCharacter, skillGroups); createSkills(managedCharacter, skills); createTachables(managedCharacter, teachable); // features for (ModuleFeatureChange mfc : featueChanges) { try { managedCharacter.eSet(mfc.getFeature(), mfc.getValue()); } catch (Exception e) { } } addPersonaPage(object.getCharacter()); validateChange(); } private void createTachables(ManagedCharacter managedCharacter, FluentIterable<ModuleTeachableChange> teachable) { for (ModuleTeachableChange mtc : teachable) { Erlernbar teachable2 = mtc.getTeachable(); if (teachable2 == null && !mtc.getSelectOne().isEmpty()) { displayChooseDialog(mtc); } if (teachable2 instanceof Spezialisierung) { Spezialisierung s = (Spezialisierung)teachable2; PersonaChange personaChange = Shr5managementFactory.eINSTANCE.createPersonaChange(); managedCharacter.getChanges().add(personaChange); personaChange.setChangeable((Erlernbar)s); personaChange.setTo(1); personaChange.applyChanges(); personaChange.setDateApplied(null); } else if (teachable2 instanceof PersonaEigenschaft) { PersonaEigenschaft pe = (PersonaEigenschaft)teachable2; EObject withParentId = ShrReferenceManager.copyWithParentId(pe); PersonaChange personaChange = Shr5managementFactory.eINSTANCE.createPersonaChange(); managedCharacter.getChanges().add(personaChange); personaChange.setChangeable((Erlernbar)withParentId); personaChange.setTo(1); personaChange.applyChanges(); personaChange.setDateApplied(null); } } } /** * Displayes a choose dialog to fill in the objects not defined. * * @param mtc */ private void displayChooseDialog(ModuleChange mc) { if (mc instanceof ModuleAttributeChange) { ModuleAttributeChange ma = (ModuleAttributeChange)mc; OwnChooseDialog ownChooseDialog = new OwnChooseDialog(getSite().getShell(), NullObject.toChoises(ma.getSelectOne())); ownChooseDialog.setLabelProvider(labelprovider); if (ownChooseDialog.open() == Dialog.OK) { Object[] result = ownChooseDialog.getResult(); ma.setAttribute((EAttribute)result[0]); ma.setSelected((EAttribute)result[0]); } } else if (mc instanceof ModuleSkillChange) { ModuleSkillChange ma = (ModuleSkillChange)mc; OwnChooseDialog ownChooseDialog = new OwnChooseDialog(getSite().getShell(), NullObject.toChoises(ma.getSelectOne()), "Select a skill", "Select a skill 1"); ownChooseDialog.setLabelProvider(labelprovider); if (ownChooseDialog.open() == Dialog.OK) { Object[] result = ownChooseDialog.getResult(); ma.setSkill((Fertigkeit)result[0]); ma.setSelected((Fertigkeit)result[0]); } } else if (mc instanceof ModuleSkillGroupChange) { ModuleSkillGroupChange ma = (ModuleSkillGroupChange)mc; OwnChooseDialog ownChooseDialog = new OwnChooseDialog(getSite().getShell(), NullObject.toChoises(ma.getSelectOne())); ownChooseDialog.setLabelProvider(labelprovider); if (ownChooseDialog.open() == Dialog.OK) { Object[] result = ownChooseDialog.getResult(); ma.setSkillGroup((FertigkeitsGruppe)result[0]); ma.setSelected((FertigkeitsGruppe)result[0]); } } } /** * @param managedCharacter * @param skills */ private void createSkills(ManagedCharacter managedCharacter, FluentIterable<ModuleSkillChange> skills) { // for (ModuleSkillChange moduleSkillChange : skills) { // if (moduleSkillChange.getSkill() == null && !moduleSkillChange.getSelectOne().isEmpty()) // displayChooseDialog(moduleSkillChange); // } HashMap<Fertigkeit, Integer> hashMap2 = new HashMap<Fertigkeit, Integer>(); for (ModuleSkillChange msc : skills) { Fertigkeit skill = msc.getSkill(); if (skill == null && !msc.getSelectOne().isEmpty()) { displayChooseDialog(msc); skill = msc.getSkill(); } Integer value = hashMap2.get(skill); if (value == null) { value = 0; hashMap2.put(skill, msc.getGrade()); } else { hashMap2.put(skill, value + msc.getGrade()); } } Set<Entry<Fertigkeit, Integer>> entrySet2 = hashMap2.entrySet(); for (Entry<Fertigkeit, Integer> entry : entrySet2) { if (entry.getKey() == null) continue; PersonaChange personaChange = Shr5managementFactory.eINSTANCE.createPersonaChange(); PersonaFertigkeit fertigkeit = ShadowrunTools.findFertigkeit(entry.getKey(), managedCharacter.getPersona()); if (fertigkeit == null) { fertigkeit = Shr5Factory.eINSTANCE.createPersonaFertigkeit(); fertigkeit.setFertigkeit(entry.getKey()); fertigkeit.setStufe(0); } managedCharacter.getChanges().add(personaChange); personaChange.setChangeable(fertigkeit); int min = Math.max(ShadowrunTools.findFertigkeitValue(entry.getKey(), managedCharacter.getPersona()), 0); // personaChange.setTo(min + entry.getValue()); if (entry.getKey() instanceof Wissensfertigkeit) { personaChange.setTo(Math.min(object.getGenerator().getKnowlegeSkillMax(), min + entry.getValue())); }else{ personaChange.setTo(Math.min(object.getGenerator().getSkillMax(), min + entry.getValue()) ); } personaChange.applyChanges(); personaChange.setDateApplied(null); } } /** * @param managedCharacter * @param skills */ private void createSkillGroups(ManagedCharacter managedCharacter, FluentIterable<ModuleSkillGroupChange> skills) { // for (ModuleSkillGroupChange moduleSkillGroupChange : skills) { // if (moduleSkillGroupChange.getSkillGroup() == null && !moduleSkillGroupChange.getSelectOne().isEmpty()) // displayChooseDialog(moduleSkillGroupChange); // } LifeModulesSystem shr5System = object.getGenerator(); HashMap<FertigkeitsGruppe, Integer> hashMap2 = new HashMap<FertigkeitsGruppe, Integer>(); for (ModuleSkillGroupChange msc : skills) { FertigkeitsGruppe skill = msc.getSkillGroup(); if (skill == null && !msc.getSelectOne().isEmpty()) { displayChooseDialog(msc); skill = msc.getSkillGroup(); } Integer value = hashMap2.get(skill); if (value == null) { value = 0; hashMap2.put(skill, msc.getGrade()); } else { hashMap2.put(skill, value + msc.getGrade()); } } Set<Entry<FertigkeitsGruppe, Integer>> entrySet2 = hashMap2.entrySet(); for (Entry<FertigkeitsGruppe, Integer> entry : entrySet2) { PersonaChange personaChange = Shr5managementFactory.eINSTANCE.createPersonaChange(); PersonaFertigkeitsGruppe fertigkeit = ShadowrunTools.findGruppe(entry.getKey(), managedCharacter.getPersona()); if (fertigkeit == null) { fertigkeit = Shr5Factory.eINSTANCE.createPersonaFertigkeitsGruppe(); fertigkeit.setGruppe(entry.getKey()); fertigkeit.setStufe(0); } managedCharacter.getChanges().add(personaChange); personaChange.setChangeable(fertigkeit); personaChange.setTo(Math.min(shr5System.getSkillMax(), fertigkeit.getStufe() + entry.getValue()) ); personaChange.applyChanges(); personaChange.setDateApplied(null); } } /** * @param managedCharacter * @param attributes */ private void createAttributes(ManagedCharacter managedCharacter, FluentIterable<ModuleAttributeChange> attributes) { for (ModuleAttributeChange moduleAttributeChange : attributes) { if (moduleAttributeChange.getAttribute() == null && !moduleAttributeChange.getSelectOne().isEmpty()) { displayChooseDialog(moduleAttributeChange); } } // Attributes HashMap<EAttribute, Integer> hashMap = new HashMap<EAttribute, Integer>(); for (ModuleAttributeChange mac : attributes) { EAttribute attribute = mac.getAttribute(); if (attribute == null && !mac.getSelectOne().isEmpty()) { displayChooseDialog(mac); attribute = mac.getAttribute(); } Integer value = hashMap.get(attribute); if (value == null) { value = 0; hashMap.put(attribute, mac.getGrade()); } else { hashMap.put(attribute, value + mac.getGrade()); } } Set<Entry<EAttribute, Integer>> entrySet = hashMap.entrySet(); for (Entry<EAttribute, Integer> entry : entrySet) { AttributeChange change = Shr5managementFactory.eINSTANCE.createAttributeChange(); change.setAttibute(entry.getKey()); managedCharacter.getChanges().add(change); Integer eGet = (Integer)managedCharacter.getPersona().eGet(change.getAttibute()); change.setFrom(eGet); change.setTo(eGet + entry.getValue()); change.applyChanges(); change.setDateApplied(null); } } /** * Validates the changes. */ @Override protected void validateChange() { if (object.getState() == GeneratorState.COMMITED) { tltmNewItem.setEnabled(false); tltmChoose.setEnabled(false); tltmCommit.setEnabled(false); restItem.setEnabled(false); // grpAuswahl.setEnabled(false); sctnCreate.setEnabled(false); return; } Diagnostic validate = Diagnostician.INSTANCE.validate(object, context); Set<String> newChangeset = new HashSet<String>(); List<Diagnostic> children = validate.getChildren(); for (Diagnostic diagnostic : children) { updateGeneratorState(diagnostic, object); newChangeset.add(diagnostic.getMessage()); } if (newChangeset.equals(changeSet)) return; changeSet = newChangeset; if (object.getGenerator() != null) spinner.setMaximum(object.getGenerator().getMaxKarmaToResources()); if ((object.getCharacterConcept() == null || object.getMetaType() == null || object.getNationality() == null || object.getFormativeYears() == null) || object.getTeenYears() == null || object.getRealLife().isEmpty()) object.setState(GeneratorState.NEW); if (object.getState() == GeneratorState.PERSONA_CREATED) createOptionWidgets(); tltmNewItem.setEnabled(object.getState() == GeneratorState.READY_FOR_CREATION); tltmChoose.setEnabled(object.getState() == GeneratorState.NEW); tltmCommit.setEnabled(object.getState() == GeneratorState.PERSONA_CREATED && validate.getChildren().isEmpty()); sctnChoose.setExpanded(object.getState() == GeneratorState.NEW || object.getState() == GeneratorState.READY_FOR_CREATION); sctnCreate.setExpanded(object.getState() == GeneratorState.PERSONA_CREATED); restItem.setEnabled(object.getCharacter()!=null); validationService.updateValidation(object, validate); } @Override protected boolean notificationIsRequierd(Notification notification) { return true; } @Override protected EditingDomain getEditingDomain() { return editingDomain; } @Override public void dispose() { if (object != null) object.eAdapters().remove(this); super.dispose(); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue observeTextLblInstructionObserveWidget = WidgetProperties.text().observe(lblInstruction); IObservableValue objectCurrentInstructionObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.CHARACTER_GENERATOR__CURRENT_INSTRUCTION); bindingContext.bindValue(observeTextLblInstructionObserveWidget, objectCurrentInstructionObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), null); // IObservableValue observeSelectionSpinnerObserveWidget = WidgetProperties.selection().observe(spinner); IObservableValue objectKarmaToResourceObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.KARMA_GENERATOR__KARMA_TO_RESOURCE); UpdateValueStrategy modelToTarget = new EMFUpdateValueStrategy(); bindingContext.bindValue(observeSelectionSpinnerObserveWidget, objectKarmaToResourceObserveValue, modelToTarget, modelToTarget); // IObservableValue observeTextLblPhasestateObserveWidget = WidgetProperties.text().observe(lblPhasestate); IObservableValue objectStateObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.CHARACTER_GENERATOR__STATE); bindingContext.bindValue(observeTextLblPhasestateObserveWidget, objectStateObserveValue, new EMFUpdateValueStrategy(), new EMFUpdateValueStrategy()); // // return bindingContext; } /** * Creates the option widget lazy. */ private void createOptionWidgets() { if (object.getCharacter() == null || optionWidgetsCreated) return; if (resourceGeneratorOption != null) resourceGeneratorOption.dispose(); resourceGeneratorOption = new ResourceGeneratorOption(grpResources, SWT.NONE, resourcen, object.getCharacter(), getManagedForm().getToolkit(), editingDomain, Literals.KARMA_GENERATOR__RESOURCE_SPEND); resourceGeneratorOption.layout(); optionWidgetsCreated = true; } private void ownBinding(DataBindingContext bindingContext) { IObservableValue observeTextLblKarmaSpendObserveWidget = WidgetProperties.text().observe(lblKarmaSpend); IObservableValue objectKarmaSpendObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.KARMA_GENERATOR__KARMA_SPEND); EMFUpdateValueStrategy modelToTarget = new EMFUpdateValueStrategy(); modelToTarget.setConverter(new Converter(Integer.class, String.class) { @Override public Object convert(Object fromObject) { if (object.getGenerator() == null) return Messages.GeneratorPage_left1; return Messages.GeneratorPage_left + (ShadowrunManagmentTools.calcKarmaLeft(object) + EMPTY); } }); bindingContext.bindValue(observeTextLblKarmaSpendObserveWidget, objectKarmaSpendObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), modelToTarget); // ---- } }