Project

General

Profile

Download (5.52 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.ui.section.name;
11

    
12
import org.eclipse.jface.action.Action;
13
import org.eclipse.jface.action.IAction;
14
import org.eclipse.jface.action.ToolBarManager;
15
import org.eclipse.jface.viewers.ISelectionProvider;
16
import org.eclipse.swt.SWT;
17
import org.eclipse.swt.widgets.Control;
18

    
19
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
20
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
21
import eu.etaxonomy.cdm.model.name.INonViralName;
22
import eu.etaxonomy.cdm.model.name.TaxonName;
23
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
24
import eu.etaxonomy.taxeditor.event.EventUtility;
25
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
26
import eu.etaxonomy.taxeditor.model.ImageResources;
27
import eu.etaxonomy.taxeditor.model.MessagingUtils;
28
import eu.etaxonomy.taxeditor.remoting.CdmEagerLoadingException;
29
import eu.etaxonomy.taxeditor.ui.dialog.selection.NameSelectionDialog;
30
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
31
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
32
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
33
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
34
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
35
import eu.etaxonomy.taxeditor.ui.section.ITaxonBaseDetailSection;
36

    
37
/**
38
 * @author n.hoffmann
39
 * @created May 20, 2010
40
 */
41
public class NonViralNameDetailSection extends AbstractCdmDetailSection<TaxonName>
42
		implements ITaxonBaseDetailSection {
43

    
44
	private TaxonBase taxonBase;
45
	boolean nameChoosable = false;
46

    
47
	/**
48
	 * <p>Constructor for NonViralNameDetailSection.</p>
49
	 *
50
	 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
51
	 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
52
	 * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
53
	 * @param selectionProvider a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
54
	 * @param nameChoosable if <code>true</code> adds a button to choose the displayed name
55
	 * @param style a int.
56
	 */
57
	public NonViralNameDetailSection(CdmFormFactory formFactory, ConversationHolder conversation,
58
			ICdmFormElement parentElement, ISelectionProvider selectionProvider, boolean nameChoosable, int style) {
59
		super(formFactory, conversation, parentElement, selectionProvider, style);
60
		this.nameChoosable = nameChoosable;
61
	}
62

    
63
	@Override
64
	protected Control createToolbar() {
65
	        ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
66

    
67
	        if(nameChoosable ){
68
	            //choose name
69
	            Action chooseNameAction = new Action("Choose Name", IAction.AS_PUSH_BUTTON){
70
	                @Override
71
	                public void run() {
72
	                    TaxonName taxonName = NameSelectionDialog.select(getShell(), //getConversationHolder(),
73
	                            getEntity());
74
	                    if(taxonName!=null){
75
                            TaxonName nonViralName = HibernateProxyHelper.deproxy(taxonName);
76
                            taxonBase.setName(nonViralName);
77
                            setEntity(nonViralName);
78

    
79
                            firePropertyChangeEvent(NonViralNameDetailSection.this);
80
                            EventUtility.postEvent(WorkbenchEventConstants.REFRESH_DETAILS, true);
81
                            EventUtility.postEvent(WorkbenchEventConstants.REFRESH_SUPPLEMENTAL, true);
82
	                    }
83
	                }
84
	            };
85
	            chooseNameAction.setToolTipText("Choose name for this taxon");
86
	            chooseNameAction.setImageDescriptor(ImageResources.getImageDescriptor(ImageResources.BROWSE_ICON));
87

    
88
	            toolBarManager.add(chooseNameAction);
89
	    }
90

    
91
		//clone
92
		if(getEntity() != null && checkForMultipleNameUsages(getEntity())){
93

    
94
			Action cloneAction = new Action("Clone", IAction.AS_PUSH_BUTTON){
95
			    @Override
96
			    public void run() {
97
					boolean confirm = MessagingUtils.confirmDialog("Confirm cloning", "Do you really want to clone the name?");
98

    
99
					if(confirm){
100
						TaxonName clonedName;
101
						clonedName = (TaxonName) getEntity().clone();
102
						setEntity(clonedName);
103
						taxonBase.setName(clonedName);
104
						taxonBase.generateTitle();
105
						firePropertyChangeEvent(new CdmPropertyChangeEvent(NonViralNameDetailSection.this, null));
106
					}
107

    
108
				};
109
			};
110

    
111
			cloneAction.setToolTipText("Clone the name if you do not want to edit the shared instance");
112

    
113
			toolBarManager.add(cloneAction);
114

    
115
		}
116
		return toolBarManager.createControl(this);
117
	}
118

    
119

    
120
	private boolean checkForMultipleNameUsages(INonViralName nonViralName) {
121
	    try{
122
	        return nonViralName.getTaxonBases().size() != 1;
123
	    }catch (CdmEagerLoadingException e){
124
	        System.out.println(e.getLocalizedMessage());
125
	        return false;
126
	    }
127
	}
128

    
129
	/** {@inheritDoc} */
130
	@Override
131
	public String getHeading() {
132
		return "Name";
133
	}
134

    
135
	/** {@inheritDoc} */
136
	@Override
137
    public void setTaxonBase(TaxonBase taxon) {
138
		taxonBase = taxon;
139
		TaxonName name = HibernateProxyHelper.deproxy(taxon.getName());
140
		setEntity(name);
141
	}
142

    
143
	@Override
144
	public TaxonBase getTaxonBase() {
145
		return taxonBase;
146
	}
147

    
148
	@Override
149
	protected AbstractCdmDetailElement<TaxonName> createCdmDetailElement(
150
			AbstractCdmDetailSection<TaxonName> parentElement, int style) {
151
	    return formFactory.createNonViralNameDetailElement(parentElement);
152
	}
153
}
(16-16/21)