Fix refresh problem when creating a FieldUnit with no previous viewer
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / contextMenu / CreateFieldUnitContextMenu.java
1 package eu.etaxonomy.taxeditor.editor.view.derivate.contextMenu;
2
3 import org.eclipse.jface.action.ContributionItem;
4 import org.eclipse.jface.action.IContributionItem;
5 import org.eclipse.swt.SWT;
6 import org.eclipse.swt.events.SelectionAdapter;
7 import org.eclipse.swt.events.SelectionEvent;
8 import org.eclipse.swt.widgets.Menu;
9 import org.eclipse.swt.widgets.MenuItem;
10 import org.eclipse.ui.IWorkbenchPart;
11 import org.eclipse.ui.IWorkbenchWindow;
12 import org.eclipse.ui.PlatformUI;
13 import org.eclipse.ui.actions.CompoundContributionItem;
14
15 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
16 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
17 import eu.etaxonomy.cdm.model.common.CdmBase;
18 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
19 import eu.etaxonomy.cdm.model.description.TaxonDescription;
20 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
21 import eu.etaxonomy.cdm.model.taxon.Taxon;
22 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
23 import eu.etaxonomy.taxeditor.model.MessagingUtils;
24 import eu.etaxonomy.taxeditor.store.CdmStore;
25
26 /**
27 * Context menu for the SingleReads in the derivate hierarchy.
28 *
29 */
30 public class CreateFieldUnitContextMenu extends CompoundContributionItem {
31
32 private enum CommandType {
33 COPY_TO_CLIPBOARD, REMOVE_FROM_SEQUENCE, ADD_TO_SEQUENCE
34 }
35
36 @Override
37 protected IContributionItem[] getContributionItems() {
38 IContributionItem[] contributionItems = new IContributionItem[] {
39 new ContributionItem() {
40 @Override
41 public void fill(Menu menu, int index) {
42 final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
43 IWorkbenchPart activePart = window.getActivePage().getActivePart();
44 if(activePart instanceof DerivateView){
45 final DerivateView derivateView = (DerivateView) activePart;
46 if(derivateView.isListenToSelectionChange()){
47 Object selectionInput = derivateView.getSelectionInput();
48 if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){
49 final Taxon taxon = HibernateProxyHelper.deproxy(selectionInput, Taxon.class);
50 MenuItem item = new MenuItem(menu, SWT.NONE);
51 item.setText("Create FieldUnit for "+taxon.getName());
52 item.addSelectionListener(new SelectionAdapter() {
53 @Override
54 public void widgetSelected(SelectionEvent e) {
55 if(derivateView.isDirty()){
56 MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
57 return;
58 }
59 FieldUnit fieldUnit = FieldUnit.NewInstance();
60 fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
61 IndividualsAssociation association = IndividualsAssociation.NewInstance(fieldUnit);
62 TaxonDescription description;
63 if(!taxon.getDescriptions().isEmpty()){
64 description = taxon.getDescriptions().iterator().next();
65 }
66 else{
67 description = TaxonDescription.NewInstance(taxon);
68 }
69 description.addElement(association);
70
71 derivateView.getConversationHolder().commit();
72 derivateView.addFieldUnit(fieldUnit);
73 derivateView.refreshTree();
74 }
75 });
76 }
77 }
78 else{
79 MenuItem item = new MenuItem(menu, SWT.NONE);
80 item.setText("Create FieldUnit");
81 item.addSelectionListener(new SelectionAdapter() {
82 @Override
83 public void widgetSelected(SelectionEvent e) {
84 if(derivateView.isDirty()){
85 MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
86 return;
87 }
88 FieldUnit fieldUnit = FieldUnit.NewInstance();
89 fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
90 derivateView.getConversationHolder().commit();
91 derivateView.addFieldUnit(fieldUnit);
92 derivateView.updateRootEntities();
93 }
94 });
95 }
96 }
97 }
98 }
99 };
100 return contributionItems;
101 }
102 }
103