Project

General

Profile

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

    
11
package eu.etaxonomy.taxeditor.ui.dialog.selection;
12

    
13
import java.util.ArrayList;
14
import java.util.Collection;
15
import java.util.HashSet;
16
import java.util.List;
17
import java.util.Set;
18
import java.util.UUID;
19

    
20
import org.eclipse.jface.action.Action;
21
import org.eclipse.jface.action.IAction;
22
import org.eclipse.jface.action.IMenuManager;
23
import org.eclipse.swt.widgets.Composite;
24
import org.eclipse.swt.widgets.Control;
25
import org.eclipse.swt.widgets.Shell;
26

    
27
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
28
import eu.etaxonomy.cdm.api.service.IVocabularyService;
29
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
30
import eu.etaxonomy.cdm.model.common.CdmBase;
31
import eu.etaxonomy.cdm.model.common.TermType;
32
import eu.etaxonomy.cdm.model.common.TermVocabulary;
33
import eu.etaxonomy.cdm.model.location.NamedArea;
34
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
35
import eu.etaxonomy.taxeditor.model.MessagingUtils;
36
import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
37
import eu.etaxonomy.taxeditor.store.CdmStore;
38

    
39
/**
40
 * @author n.hoffmann
41
 * @created May 11, 2010
42
 * @version 1.0
43
 */
44
public class NamedAreaSelectionDialog extends
45
		AbstractFilteredCdmResourceSelectionDialog<NamedArea> {
46

    
47
	private class IncludeNamedAreaVocabulary extends Action {
48
		private final TermVocabulary<NamedArea> vocabulary;
49

    
50
		/**
51
		 * Creates a new instance of the class.
52
		 */
53
		public IncludeNamedAreaVocabulary(TermVocabulary<NamedArea> vocabulary) {
54
			super(vocabulary.getTitleCache(), IAction.AS_CHECK_BOX);
55
			this.vocabulary = vocabulary;
56
		}
57

    
58
		@Override
59
        public void run(){
60
			if(isChecked()){
61
				selectedVocabularies.add(vocabulary);
62
			}else{
63
				selectedVocabularies.remove(vocabulary);
64
			}
65
			initModel();
66
		}
67
	}
68

    
69
	private Collection<TermVocabulary> selectedVocabularies;
70
    private ArrayList<TermVocabulary> preselectedVocabularies;
71

    
72

    
73
	/**
74
	 * Creates a filtered selection dialog to select a named area.
75
	 *
76
	 * @param shell
77
	 * 				The shell for displaying this widget
78
	 * @param namedArea
79
	 * 				A namedArea that should be selected when the dialog opens
80
	 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
81
	 * @param preselectedVocabularyUuids the {@link UUID}s of the pre-selected vocabularies
82
	 * @return a {@link eu.etaxonomy.cdm.model.location.NamedArea} object.
83
	 */
84
	public static NamedArea select(Shell shell, ConversationHolder conversation, NamedArea namedArea, UUID... preselectedVocabularyUuids) {
85
		NamedAreaSelectionDialog dialog = new NamedAreaSelectionDialog(shell, conversation,
86
				"Choose an area", false, namedArea, preselectedVocabularyUuids);
87
		return getSelectionFromDialog(dialog);
88
	}
89

    
90
	protected NamedAreaSelectionDialog(Shell shell, ConversationHolder conversation, String title, boolean multi, NamedArea namedArea, UUID... preselectedVocabularyUuids) {
91
		super(shell, conversation, title, multi, NamedAreaSelectionDialog.class.getCanonicalName(), namedArea);
92
		if(preselectedVocabularyUuids.length>0){
93
		    preselectedVocabularies = new ArrayList<TermVocabulary>();
94
		    for(int i=0;i<preselectedVocabularyUuids.length;i++){
95
		        TermVocabulary preselectedVocabulary = CdmStore.getService(IVocabularyService.class).find(preselectedVocabularyUuids[i]);
96
		        preselectedVocabularies.add(preselectedVocabulary);
97
		    }
98
		    selectedVocabularies.retainAll(preselectedVocabularies);
99
		    initModel();//re-init to consider pre-selected vocabularies
100
		}
101
	}
102

    
103
	/** {@inheritDoc} */
104
	@Override
105
	protected void fillViewMenu(IMenuManager menuManager) {
106

    
107
		super.fillViewMenu(menuManager);
108

    
109
		for(TermVocabulary<NamedArea> vocabulary : getAvailableVocabularies()){
110
			IncludeNamedAreaVocabulary action = new IncludeNamedAreaVocabulary(vocabulary);
111
			menuManager.add(action);
112
			if(preselectedVocabularies==null || preselectedVocabularies.isEmpty() || preselectedVocabularies.contains(vocabulary)) {
113
			    action.setChecked(true);
114
			}
115
		}
116
	}
117

    
118
	/** {@inheritDoc} */
119
	@Override
120
	protected NamedArea getPersistentObject(UUID uuid) {
121
		for(TermVocabulary<NamedArea> vocabulary : selectedVocabularies){
122
			for(Object object : vocabulary.getTerms()){
123
				CdmBase cdmBaseObject = (CdmBase) object;
124
				if(uuid.equals(cdmBaseObject.getUuid())){
125
					return CdmBase.deproxy(cdmBaseObject, NamedArea.class);
126
				}
127
			}
128
		}
129
		return null;
130
	}
131

    
132
	/** {@inheritDoc} */
133
	@Override
134
	protected void init() {
135
		selectedVocabularies = getAvailableVocabularies();
136
	}
137

    
138
	private List<TermVocabulary> getAvailableVocabularies(){
139
		List<TermVocabulary> vocabularies = CdmStore.getService(IVocabularyService.class).listByTermType(TermType.NamedArea, true, null, null, null, null);
140
		return vocabularies;
141
	}
142

    
143
	/** {@inheritDoc} */
144
	@Override
145
	protected void initModel() {
146

    
147
		Set<NamedArea> terms = new HashSet<NamedArea>();
148
		for(TermVocabulary<NamedArea> vocabulary : selectedVocabularies){
149
			terms.addAll(vocabulary.getTermsOrderedByLabels(CdmStore.getDefaultLanguage()));
150
		}
151

    
152
		if(model == null){
153
			model = new ArrayList<UuidAndTitleCache<NamedArea>>();
154
		}
155
		model.clear();
156
		for(Object areaObject : terms){
157
			NamedArea area = (NamedArea) HibernateProxyHelper.deproxy(areaObject);
158
			UuidAndTitleCache<NamedArea> element = new UuidAndTitleCache<NamedArea>(NamedArea.class, area.getUuid(), area.getId(), getTitle(area));
159
			model.add(element);
160
		}
161
	}
162

    
163
	/** {@inheritDoc} */
164
	@Override
165
	protected Control createExtendedContentArea(Composite parent) {
166
		return null;
167
	}
168

    
169
	/** {@inheritDoc} */
170
	@Override
171
	protected String getTitle(NamedArea namedArea) {
172
		try {
173
			String result = NamedArea.labelWithLevel(namedArea, CdmStore.getDefaultLanguage());
174
			return result;
175
		} catch (Exception e) {
176
			MessagingUtils.error(NamedAreaSelectionDialog.class, "Error occurred when trying retrieve title for Named Area: " + namedArea.getUuid(), e);
177
			return namedArea.getTitleCache();
178
		}
179
	}
180

    
181
	/** {@inheritDoc} */
182
	@Override
183
	protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
184
		return null;
185
	}
186

    
187
	/** {@inheritDoc} */
188
	@Override
189
	protected String getNewWizardLinkText() {
190
		return null;
191
	}
192
}
(16-16/30)