/** * */ package de.urszeidler.shr5.ecp.editor.pages.character; import java.math.BigDecimal; import java.util.Comparator; import java.util.Date; import java.util.List; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.action.Action; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; 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.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.wb.swt.ResourceManager; import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; import de.urszeidler.eclipse.shr5.CredstickTransaction; import de.urszeidler.eclipse.shr5.IntervallVertrag; import de.urszeidler.eclipse.shr5.Shr5Factory; import de.urszeidler.eclipse.shr5.Vertrag; import de.urszeidler.eclipse.shr5Management.CharacterDiary; import de.urszeidler.eclipse.shr5Management.ContractPayment; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.PlayerCharacter; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; import de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager; import de.urszeidler.shr5.ecp.dialogs.PayFineDialog; import de.urszeidler.shr5.ecp.editor.pages.AbstractShr5Page; import de.urszeidler.shr5.ecp.editor.widgets.TreeTableWidget; /** * @author urs */ public class CharacterDiaryPage extends AbstractShr5Page<CharacterDiary> { private CharacterDiary object; private EditingDomain editingDomain; protected DataBindingContext m_bindingContext; /** * Create the form page. * * @param id * @param title */ public CharacterDiaryPage(String id, String title) { super(id, title); } /** * The main contructor. * * @param editor * @param id * @param title * @param object * @param editingDomain * @param manager */ public CharacterDiaryPage(FormEditor editor, String id, String title, CharacterDiary object, EditingDomain editingDomain, ReferenceManager manager) { super(editor, id, title); this.object = object; this.editingDomain = editingDomain; this.mananger = manager; } /** * Create contents of the form. * * @param managedForm */ @Override protected void createFormContent(IManagedForm managedForm) { final FormToolkit toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); form.setText(labelprovider.getText(object)); Composite body = form.getBody(); toolkit.decorateFormHeading(form.getForm()); Action action = new Action(null,ResourceManager.getPluginImageDescriptor("de.urszeidler.shr5.ecp", "images/newyen.png")) { @Override public void run() { PlayerCharacter character = (PlayerCharacter)object.eContainer(); PayFineDialog payFineDialog = new PayFineDialog(getEditor().getSite().getShell(), character, object.getCharacterDate()); if (payFineDialog.open() == org.eclipse.jface.dialogs.Dialog.OK) { List<ContractPayment> payments = payFineDialog.getPayments(); if(payments==null) return; for (ContractPayment contractPayment : payments) { IntervallVertrag contractToPay = (IntervallVertrag)contractPayment.getContractToPay(); if(contractPayment.isPayed()) continue; Date paymentDate = getPaymentDate(contractToPay); Date date = paymentDate != null ? paymentDate : contractToPay.getBegin(); Date nextDate = PayFineDialog.getNextPayment(contractToPay, date).getTime(); BigDecimal wert = contractToPay.getWert(); CredstickTransaction transaction = Shr5Factory.eINSTANCE.createCredstickTransaction(); transaction.setAmount(wert.negate()); transaction.setDate(nextDate); transaction.setDescription(contractPayment.getMessage()); payFineDialog.getSelectedCredstick().getTransactionlog().add(transaction); contractPayment.setDate(nextDate); contractPayment.setPayed(true); object.getEntries().add(contractPayment); } } } }; action.setToolTipText("Pay all contracts."); Action syncDiaryAction = new Action(null,ResourceManager.getPluginImageDescriptor("de.urszeidler.shr5.ecp", "images/sync-time.png")) { @Override public void run() { ManagedCharacter character = (ManagedCharacter)object.eContainer(); object.setCharacterDate(ShadowrunManagmentTools.findCorrenspondingDate(character)); } }; syncDiaryAction.setToolTipText("Sync the diary Date."); form.getToolBarManager().add(syncDiaryAction); form.getToolBarManager().add(action); form.getToolBarManager().update(true); toolkit.paintBordersFor(body); managedForm.getForm().getBody().setLayout(new GridLayout(1, false)); Group grpCurrentDate = new Group(managedForm.getForm().getBody(), SWT.NONE); grpCurrentDate.setLayout(new GridLayout(3, false)); grpCurrentDate.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1)); grpCurrentDate.setText("Personal Diary"); managedForm.getToolkit().adapt(grpCurrentDate); managedForm.getToolkit().paintBordersFor(grpCurrentDate); Composite composite = new Composite(managedForm.getForm().getBody(), SWT.NONE); composite.setLayout(new GridLayout(6, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); managedForm.getToolkit().adapt(composite); managedForm.getToolkit().paintBordersFor(composite); initDataBindings(); createFormBuilder(managedForm); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_DIARY__CHARACTER_DATE, grpCurrentDate, new DateEntryFactory(toolkit)); // emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_DIARY__ENTRIES, grpCurrentDate, createControllGridData(300)); Composite compositeEigenschaften = new Composite(managedForm.getForm().getBody(), SWT.NONE); compositeEigenschaften.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); compositeEigenschaften.setLayout(new FillLayout(SWT.HORIZONTAL)); toolkit.adapt(compositeEigenschaften); toolkit.paintBordersFor(compositeEigenschaften); TreeTableWidget treeTableWidgetEigenschaften = new TreeTableWidget(compositeEigenschaften,labelprovider.getText(object.eClass()), SWT.NONE, object, Shr5managementPackage.Literals.CHARACTER_DIARY__ENTRIES, toolkit, mananger, editingDomain, this,this); managedForm.getToolkit().adapt(treeTableWidgetEigenschaften); managedForm.getToolkit().paintBordersFor(treeTableWidgetEigenschaften); emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object); managedForm.reflow(true); } private Date getPaymentDate(final Vertrag contractToPay) { ImmutableList<ContractPayment> sortedList = FluentIterable.from(object.getEntries()).filter(ContractPayment.class) .filter(new Predicate<ContractPayment>() { @Override public boolean apply(ContractPayment input) { return input.getContractToPay()==contractToPay; } }).toSortedList(new Comparator<ContractPayment>() { @Override public int compare(ContractPayment o2, ContractPayment o1) { if(o1==null && o2==null) return 0; if(o1.getDate()==null) return -1; if(o2==null) return 1; return o1.getDate().compareTo(o2.getDate()); } }); if (sortedList.isEmpty()) return null; else return sortedList.get(0).getDate(); } @Override protected EditingDomain getEditingDomain() { return editingDomain; } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); m_bindingContext = bindingContext; // return bindingContext; } }