package de.urszeidler.shr5.ecp.editor.pages;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
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 com.google.common.base.Joiner;
import com.google.common.collect.FluentIterable;
import de.urszeidler.eclipse.shr5.AttributModifikatorWert;
import de.urszeidler.eclipse.shr5.PersonaMartialartStyle;
import de.urszeidler.eclipse.shr5.Shr5Package;
import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil;
import de.urszeidler.eclipse.shr5Management.CharacterChange;
import de.urszeidler.eclipse.shr5Management.CharacterDiary;
import de.urszeidler.eclipse.shr5Management.ContractPayment;
import de.urszeidler.eclipse.shr5Management.DiaryEntry;
import de.urszeidler.eclipse.shr5Management.IncreaseCharacterPart;
import de.urszeidler.eclipse.shr5Management.ManagedCharacter;
import de.urszeidler.eclipse.shr5Management.ModuleAttributeChange;
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.PersonaMartialArtChange;
import de.urszeidler.eclipse.shr5Management.QuellenConstrain;
import de.urszeidler.eclipse.shr5Management.Shr5managementPackage;
import de.urszeidler.eclipse.shr5Management.TrainingRange;
import de.urszeidler.eclipse.shr5Management.TrainingRate;
import de.urszeidler.eclipse.shr5Management.TrainingsTime;
import de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools;
import de.urszeidler.emf.commons.ui.util.EmfFormBuilder;
import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager;
import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools;
public class EObjectBasicPage extends AbstractShr5Page<EObject> implements Adapter {
private EObject object;
private EditingDomain editingDomain;
private DataBindingContext m_bindingContext;
private Composite compositedetail_1;
private EmfFormBuilder changeFormBuilder;
private Composite compositedetail_2;
private Composite composite_1;
private Composite composite_2;
private Label validateText;
/**
* Create the form page.
*
* @param id
* @param title
*/
public EObjectBasicPage(String id, String title) {
super(id, title);
}
/**
* Create the form page.
*
* @param editor
* @param id
* @param title
* @wbp.parser.constructor
* @wbp.eval.method.parameter id "Some id"
* @wbp.eval.method.parameter title "Some title"
*/
public EObjectBasicPage(FormEditor editor, String id, String title) {
super(editor, id, title);
}
public EObjectBasicPage(FormEditor editor, String id, String title, EObject object) {
super(editor, id, title);
this.object = object;
}
public EObjectBasicPage(FormEditor editor, String id, String title, EObject object, EditingDomain editingDomain, ReferenceManager manager) {
super(editor, id, title, manager);
this.object = object;
this.editingDomain = editingDomain;
// if (!object.eAdapters().contains(this))
// object.eAdapters().add(this);
object.eAdapters().add(this);
}
@Override
public void dispose() {
if (object.eAdapters().contains(this))
object.eAdapters().remove(this);
if (changeFormBuilder != null)
changeFormBuilder.dispose();
super.dispose();
}
/**
* 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.eClass()));
Composite body = form.getBody();
toolkit.decorateFormHeading(form.getForm());
toolkit.paintBordersFor(body);
managedForm.getForm().getBody().setLayout(new GridLayout(1, false));
composite_1 = new Composite(managedForm.getForm().getBody(), SWT.NONE);
composite_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
managedForm.getToolkit().adapt(composite_1);
managedForm.getToolkit().paintBordersFor(composite_1);
composite_1.setLayout(new GridLayout(1, false));
Composite composite = new Composite(composite_1, SWT.NONE);
composite.setLayout(new GridLayout(3, false));
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
managedForm.getToolkit().adapt(composite);
managedForm.getToolkit().paintBordersFor(composite);
compositedetail_1 = new Composite(composite_1, SWT.NONE);
compositedetail_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
compositedetail_1.setSize(10, 10);
compositedetail_1.setLayout(new GridLayout(3, false));
managedForm.getToolkit().adapt(compositedetail_1);
managedForm.getToolkit().paintBordersFor(compositedetail_1);
compositedetail_2 = new Composite(managedForm.getForm().getBody(), SWT.NONE);
compositedetail_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
compositedetail_2.setLayout(new GridLayout(3, false));
managedForm.getToolkit().adapt(compositedetail_2);
managedForm.getToolkit().paintBordersFor(compositedetail_2);
composite_2 = managedForm.getToolkit().createComposite(managedForm.getForm().getBody(), SWT.NONE);
composite_2.setLayout(new GridLayout(1, false));
composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
managedForm.getToolkit().paintBordersFor(composite_2);
m_bindingContext = initDataBindings();
createFormBuilder(managedForm);
DateEntryFactory dateEntryFactory = new DateEntryFactory(toolkit);
if (object instanceof ModuleSkillChange) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_SKILL_CHANGE__SKILL, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TYPE_CHANGE__GRADE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TYPE_CHANGE__SELECT_ONE, composite);
} else if (object instanceof ModuleTeachableChange) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TEACHABLE_CHANGE__TEACHABLE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TYPE_CHANGE__GRADE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TYPE_CHANGE__SELECT_ONE, composite);
} else if (object instanceof ModuleAttributeChange) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_ATTRIBUTE_CHANGE__ATTRIBUTE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TYPE_CHANGE__GRADE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TYPE_CHANGE__SELECT_ONE, composite);
} else if (object instanceof ModuleFeatureChange) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_FEATURE_CHANGE__FEATURE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_FEATURE_CHANGE__VALUE, composite);
} else if (object instanceof ModuleSkillGroupChange) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_SKILL_GROUP_CHANGE__SKILL_GROUP, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TYPE_CHANGE__GRADE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MODULE_TYPE_CHANGE__SELECT_ONE, composite);
} else if (object instanceof QuellenConstrain) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.QUELLEN_CONSTRAIN__SOURCE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.QUELLEN_CONSTRAIN__CONSTRAIN_TYPE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.QUELLEN_CONSTRAIN__TARGETS, composite);
} else if (object instanceof IncreaseCharacterPart) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.INCREASE_CHARACTER_PART__TYPE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.ADVANCEMENT__KARMA_FACTOR, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.RANGE_TABLE__RANGE_TABLE_ENTRIES, composite);
} else if (object instanceof TrainingRate) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.RANGE_TABLE_ENTRY__FROM, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.RANGE_TABLE_ENTRY__TO, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAINING_RATE__FACTOR, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAINING_RATE__TIME_UNIT, composite);
} else if (object instanceof AttributModifikatorWert) {
emfFormBuilder.addTextEntry(Shr5Package.Literals.ATTRIBUT_MODIFIKATOR_WERT__ATTRIBUT, composite);
emfFormBuilder.addTextEntry(Shr5Package.Literals.ATTRIBUT_MODIFIKATOR_WERT__MODIFYABLE, composite);
emfFormBuilder.addTextEntry(Shr5Package.Literals.ATTRIBUT_MODIFIKATOR_WERT__WERT, composite);
} else if (object instanceof DiaryEntry) {
DiaryEntry de = (DiaryEntry)object;
EObject eContainer = de.eContainer();
if (de.getDate() == null && eContainer instanceof CharacterDiary && eContainer.eContainer() instanceof ManagedCharacter)
de.setDate(ShadowrunManagmentTools.findCorrenspondingDate((ManagedCharacter)eContainer.eContainer()));
if (object instanceof TrainingsTime) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_CHANGE__CHANGE, composite);
emfFormBuilder.addTextEntry("Training Start", Shr5managementPackage.Literals.DIARY_ENTRY__DATE, composite, dateEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAININGS_TIME__DAYS_TRAINED, composite, labelEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAININGS_TIME__DAYS_REMAINS, composite, labelEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAININGS_TIME__TRAINING_COMPLETE, composite, labelEntryFactory);
// emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAININGS_TIME__TRAINING_COMPLETE, composite);
TrainingsTime tt = (TrainingsTime)object;
if (tt.getChange() instanceof PersonaMartialArtChange) {
// emfFormBuilder.addTextEntry(tt.getChange(),Shr5managementPackage.Literals.PERSONA_CHANGE__CHANGEABLE, composite);
// emfFormBuilder.addTextEntry(tt.getChange(),Shr5managementPackage.Literals.PERSONA_MARTIAL_ART_CHANGE__STYLE, composite);
// emfFormBuilder.addTextEntry(tt.getChange(),Shr5managementPackage.Literals.PERSONA_MARTIAL_ART_CHANGE__TECHNIQUE, composite);
PersonaMartialArtChange pmac = (PersonaMartialArtChange)tt.getChange();
compositedetail_1 = createChangeDetail(managedForm, pmac, compositedetail_1);
}
// emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAININGS_TIME__TRAINING, composite, createControllGridData(80));
createTreeTableWidget(compositedetail_2, Shr5managementPackage.Literals.TRAININGS_TIME__TRAINING, managedForm, tt);
validateText = new Label(composite_2, SWT.WRAP);
validateText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
managedForm.getToolkit().adapt(validateText, true, true);
validateText.setText("");
} else if (object instanceof CharacterChange) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.DIARY_ENTRY__DATE, composite, dateEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_CHANGE__CHANGE, composite);
} else if (object instanceof ContractPayment) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.DIARY_ENTRY__DATE, composite, dateEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.DIARY_ENTRY__MESSAGE, composite);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CONTRACT_PAYMENT__CONTRACT_TO_PAY, composite, new ReadOnlyLinkEntry(
toolkit));
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CONTRACT_PAYMENT__PAYED, composite);
managedForm.getForm().setEnabled(!((ContractPayment)object).isPayed());
} else {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.DIARY_ENTRY__DATE, composite, dateEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.DIARY_ENTRY__MESSAGE, composite, createControllGridData(300));
}
} else if (object instanceof PersonaMartialartStyle) {
emfFormBuilder.addTextEntry(Shr5Package.Literals.PERSONA_MARTIALART_STYLE__STYLE, composite, new ReadOnlyLinkEntry(toolkit));
emfFormBuilder.addTextEntry(Shr5Package.Literals.PERSONA_MARTIALART_STYLE__TECHNIQUES, composite, createControllGridData(100));
} else if (object instanceof TrainingRange) {
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAINING_RANGE__DAYS_TRAINED, composite, labelEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAINING_RANGE__START, composite, dateEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.TRAINING_RANGE__END, composite, dateEntryFactory);
// emfFormBuilder.addTextEntry(((TrainingRange)object).getTrainingTime(), Shr5managementPackage.Literals.TRAININGS_TIME__DAYS_REMAINS,
// composite);
}
emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object);
}
private Composite createChangeDetail(IManagedForm managedForm, PersonaMartialArtChange pmac, Composite compositedetail_12) {
if (changeFormBuilder != null)
changeFormBuilder.dispose();
compositedetail_12.dispose();
Group composite = new Group(composite_1, SWT.NONE);
composite.setText(labelprovider.getText(Shr5managementPackage.Literals.PERSONA_MARTIAL_ART_CHANGE));
composite.setLayout(new GridLayout(3, false));
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
managedForm.getToolkit().adapt(composite);
managedForm.getToolkit().paintBordersFor(composite);
changeFormBuilder = createConfiguredFormBuilder(managedForm);
changeFormBuilder.addTextEntry(Shr5managementPackage.Literals.PERSONA_CHANGE__CHANGEABLE, composite);
changeFormBuilder.addTextEntry(Shr5managementPackage.Literals.PERSONA_MARTIAL_ART_CHANGE__STYLE, composite);
changeFormBuilder.addTextEntry(Shr5managementPackage.Literals.PERSONA_MARTIAL_ART_CHANGE__TECHNIQUE, composite);
changeFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), pmac);
composite.getParent().layout(true);
managedForm.reflow(true);
return composite;
}
protected DataBindingContext initDataBindings() {
DataBindingContext bindingContext = new DataBindingContext();
//
return bindingContext;
}
@Override
protected EditingDomain getEditingDomain() {
return editingDomain;
}
protected String featureName(EStructuralFeature feature) {
return ShadowrunEditingTools.toFeatureName(object, feature);
}
@Override
public void notifyChanged(Notification notification) {
Object feature = notification.getFeature();
if (Shr5managementPackage.Literals.CHARACTER_CHANGE__CHANGE.equals(feature)) {
if (((TrainingsTime)object).getChange() instanceof PersonaMartialArtChange)
compositedetail_1 = createChangeDetail(getManagedForm(), (PersonaMartialArtChange)((TrainingsTime)object).getChange(),
compositedetail_1);
else
compositedetail_1.dispose();
} else if (Shr5managementPackage.Literals.TRAININGS_TIME__DAYS_TRAINED.equals(feature)) {
Diagnostic validate = Diagnostician.INSTANCE.validate(object, createValidationContext());
if (!validate.getChildren().isEmpty()) {
final String message = Joiner.on("\n").join(
FluentIterable.from(validate.getChildren()).transform(ShadowrunEditingTools.diagnosticToStringTransformer()));
validateText.setText(message);
} else
validateText.setText("");
if (object instanceof TrainingsTime) {
TrainingsTime tt = (TrainingsTime)object;
if (tt.getDaysRemains() == 0)
getManagedForm().getForm().setEnabled(false);
}
} else if (Shr5managementPackage.Literals.CONTRACT_PAYMENT__PAYED.equals(feature)) {
if (object instanceof ContractPayment) {
ContractPayment cp = (ContractPayment)object;
getManagedForm().getForm().setEnabled(!cp.isPayed());
}
}
}
@Override
public Notifier getTarget() {
return null;
}
@Override
public void setTarget(Notifier newTarget) {
}
@Override
public boolean isAdapterForType(Object type) {
return false;
}
}