Project

General

Profile

Download (6.82 KB) Statistics
| Branch: | Tag: | Revision:
1 3be6ef3e n.hoffmann
/**
2
* Copyright (C) 2007 EDIT
3 9e59c2ac Patric Plitzner
* European Distributed Institute of Taxonomy
4 3be6ef3e n.hoffmann
* http://www.e-taxonomy.eu
5 9e59c2ac Patric Plitzner
*
6 3be6ef3e n.hoffmann
* 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
package eu.etaxonomy.taxeditor.bulkeditor.input;
10
11
import java.util.ArrayList;
12
import java.util.Collections;
13
import java.util.Comparator;
14
import java.util.List;
15 ac1f29b5 Cherian Mathew
import java.util.Map;
16 3be6ef3e n.hoffmann
import java.util.UUID;
17
18
import org.eclipse.jface.resource.ImageDescriptor;
19
import org.eclipse.ui.IEditorInput;
20
import org.eclipse.ui.IPersistableElement;
21
22 51188df7 Katja Luther
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
23 3be6ef3e n.hoffmann
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
24 a60842d7 n.hoffmann
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
25 3a8e076a Cherian Mathew
import eu.etaxonomy.cdm.model.common.CdmBase;
26 db5e366d n.hoffmann
import eu.etaxonomy.cdm.model.common.ICdmBase;
27 3be6ef3e n.hoffmann
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
28
import eu.etaxonomy.cdm.model.common.MarkerType;
29 db5e366d n.hoffmann
import eu.etaxonomy.cdm.strategy.merge.IMergable;
30 3be6ef3e n.hoffmann
import eu.etaxonomy.cdm.strategy.merge.MergeException;
31 db5e366d n.hoffmann
import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
32 3be6ef3e n.hoffmann
import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService;
33 db5e366d n.hoffmann
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorQuery;
34
import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
35 5cfc8708 Patrick Plitzner
import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
36 db5e366d n.hoffmann
import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.CdmBaseSortProvider;
37
import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.TitleCacheComparator;
38 1b9ae425 Cherian Mathew
import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
39 8c8ead8a Cherian Mathew
import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput;
40 41e2f693 Cherian Mathew
import eu.etaxonomy.taxeditor.model.MessagingUtils;
41 3be6ef3e n.hoffmann
import eu.etaxonomy.taxeditor.store.CdmStore;
42
43
/**
44
 * @author p.ciardelli
45
 * @created 25.06.2009
46
 * @version 1.0
47
 * @param <T>
48
 */
49 8c8ead8a Cherian Mathew
public abstract class AbstractBulkEditorInput<T extends ICdmBase> extends CdmEntitySessionInput implements IEditorInput ,
50
    IEntityPersistenceService<T> {
51 db5e366d n.hoffmann
52 3be6ef3e n.hoffmann
	private UUID entityUuid;
53
54 db5e366d n.hoffmann
	private List<T> model;
55 9e59c2ac Patric Plitzner
56 db5e366d n.hoffmann
	private IEntityCreator<T> entityCreator;
57 51188df7 Katja Luther
	private final ConversationHolder conversation;
58 233a8fe2 Cherian Mathew
59 8c8ead8a Cherian Mathew
	public AbstractBulkEditorInput() {
60 c9f13bde Cherian Mathew
	    super(true);
61 51188df7 Katja Luther
	    this.conversation = CdmStore.createConversation();
62 8c8ead8a Cherian Mathew
	}
63
64 3be6ef3e n.hoffmann
	static public AbstractBulkEditorInput NewInstance(BulkEditorInputType inputType) {
65 233a8fe2 Cherian Mathew
66 3be6ef3e n.hoffmann
		return BulkEditorInputType.getInput(inputType);
67
	}
68 9e59c2ac Patric Plitzner
69 3be6ef3e n.hoffmann
	public static AbstractBulkEditorInput NewInstance(IdentifiableEntity entity) {
70 9e59c2ac Patric Plitzner
71 3be6ef3e n.hoffmann
		BulkEditorInputType inputType = BulkEditorInputType.getByType(entity.getClass());
72 9e59c2ac Patric Plitzner
73 3be6ef3e n.hoffmann
		AbstractBulkEditorInput editorInput = NewInstance(inputType);
74 9e59c2ac Patric Plitzner
75 3be6ef3e n.hoffmann
		editorInput.setEntityUuid(entity.getUuid());
76 9e59c2ac Patric Plitzner
77 3be6ef3e n.hoffmann
		return editorInput;
78
	}
79 9e59c2ac Patric Plitzner
80 3be6ef3e n.hoffmann
	protected abstract List<T> listEntities(IIdentifiableEntityServiceConfigurator configurator);
81 9e59c2ac Patric Plitzner
82 222d6e76 Patrick Plitzner
	protected abstract T loadEntity(UUID entityUuid);
83 3be6ef3e n.hoffmann
84
	private void setEntityUuid(UUID entityUuid){
85
		this.entityUuid = entityUuid;
86
	}
87 9e59c2ac Patric Plitzner
88 3be6ef3e n.hoffmann
	public UUID getEntityUuid() {
89
		return entityUuid;
90
	}
91
92 9e59c2ac Patric Plitzner
	@Override
93
    public boolean exists() {
94 3be6ef3e n.hoffmann
		// TODO Auto-generated method stub
95
		return false;
96
	}
97
98 9e59c2ac Patric Plitzner
	@Override
99
    public ImageDescriptor getImageDescriptor() {
100 3be6ef3e n.hoffmann
		// TODO Auto-generated method stub
101
		return null;
102
	}
103
104 9e59c2ac Patric Plitzner
	@Override
105
    public IPersistableElement getPersistable() {
106 3be6ef3e n.hoffmann
		return null;
107
	}
108
109
	/** {@inheritDoc} */
110 9e59c2ac Patric Plitzner
	@Override
111
    @SuppressWarnings("unchecked")
112 3be6ef3e n.hoffmann
	public Object getAdapter(Class adapter) {
113
		return null;
114
	}
115
116 db5e366d n.hoffmann
	public void performSearch(final BulkEditorQuery bulkEditorQuery) {
117 9e59c2ac Patric Plitzner
118 db5e366d n.hoffmann
		List<T> entityList = new ArrayList<T>();
119 9e59c2ac Patric Plitzner
120 db5e366d n.hoffmann
		if(getEntityUuid() != null){
121 9e59c2ac Patric Plitzner
122 233a8fe2 Cherian Mathew
			T entity = loadEntity(getEntityUuid());
123 db5e366d n.hoffmann
			entityList.add(entity);
124
			model = entityList;
125 3be6ef3e n.hoffmann
		}
126 db5e366d n.hoffmann
		else if(bulkEditorQuery != null){
127 9e59c2ac Patric Plitzner
128 db5e366d n.hoffmann
			IIdentifiableEntityServiceConfigurator configurator = bulkEditorQuery.getSearchConfigurator();
129
			Comparator queryComparator = (bulkEditorQuery.getComparator() != null) ? bulkEditorQuery.getComparator() : new TitleCacheComparator();
130 9e59c2ac Patric Plitzner
131 db5e366d n.hoffmann
			entityList = listEntities(configurator);
132 9e59c2ac Patric Plitzner
133
			Collections.sort(entityList, queryComparator);
134 233a8fe2 Cherian Mathew
135 9e59c2ac Patric Plitzner
136 db5e366d n.hoffmann
		}
137 9e59c2ac Patric Plitzner
138 db5e366d n.hoffmann
		model = entityList;
139 3be6ef3e n.hoffmann
	}
140 9e59c2ac Patric Plitzner
141 3be6ef3e n.hoffmann
	public boolean isMergingEnabled() {
142
		return false;
143
	}
144
145 635b598e Katja Luther
	public boolean isConvertingEnabled() {
146
		return false;
147
	}
148 efc9727a Patrick Plitzner
149 3be6ef3e n.hoffmann
	public boolean isMarkerTypeEditingEnabled(MarkerType markerType) {
150
		return false;
151
	}
152 9e59c2ac Patric Plitzner
153 635b598e Katja Luther
154 3be6ef3e n.hoffmann
	/** {@inheritDoc} */
155 9e59c2ac Patric Plitzner
	@Override
156
    public boolean merge(T entity, T mergeTarget) {
157 db5e366d n.hoffmann
		if (entity instanceof IMergable) {
158 3be6ef3e n.hoffmann
			try {
159 eedeeaee Cherian Mathew
				CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), (Class<? extends CdmBase>)entity.getClass());
160 3be6ef3e n.hoffmann
			} catch (MergeException e) {
161 1b9ae425 Cherian Mathew
				MessagingUtils.errorDialog("Bulk Editor Merge Error",
162
						this,
163
						"Could not merge chosen objects of type " + entity.getClass().getName(),
164
						TaxeditorBulkeditorPlugin.PLUGIN_ID,
165
						e,
166
						true);
167 3be6ef3e n.hoffmann
			}
168
		}
169
		return true;
170 9e59c2ac Patric Plitzner
	}
171
172 635b598e Katja Luther
173 3be6ef3e n.hoffmann
	/** {@inheritDoc} */
174 9e59c2ac Patric Plitzner
	@Override
175 76fe3732 Cherian Mathew
    public T create(T entity) {
176 9e59c2ac Patric Plitzner
		return save(entity);
177
	}
178
179 db5e366d n.hoffmann
	public IEntityCreator<T> getEntityCreator(){
180
		if(entityCreator == null){
181
			entityCreator = createEntityCreator();
182
		}
183
		return entityCreator;
184
	}
185
186
	protected abstract IEntityCreator<T> createEntityCreator();
187
188
	/**
189
	 * The default implementation returns an empty list of sort providers.
190
	 * @return
191
	 */
192
	public List<IBulkEditorSortProvider<T>> getSortProviders(){
193
		List<IBulkEditorSortProvider<T>> sortProviders = new ArrayList<IBulkEditorSortProvider<T>>();
194 9e59c2ac Patric Plitzner
195 db5e366d n.hoffmann
		sortProviders.add(new CdmBaseSortProvider<T>());
196 9e59c2ac Patric Plitzner
197 db5e366d n.hoffmann
		return sortProviders;
198
	}
199
200
	/**
201 6484eff8 Andreas Kohlbecker
	 * Returns a textual representation given object. The default implementation
202
	 * in the abstract base class returns the simple name of the class, this may
203
	 * be overwritten to something more specific in subclasses.
204 233a8fe2 Cherian Mathew
	 *
205 db5e366d n.hoffmann
	 * @param entity
206 6484eff8 Andreas Kohlbecker
	 * @return a textual representation given object.
207 db5e366d n.hoffmann
	 */
208
	public String getTypeText(Object entity){
209 b664b229 Andreas Kohlbecker
		return entity.getClass().getSimpleName();
210 db5e366d n.hoffmann
	}
211
212 a60842d7 n.hoffmann
	public String getText(T entity) {
213
		if(entity instanceof IdentifiableEntity){
214
			IdentifiableEntity identifiableEntity = (IdentifiableEntity) HibernateProxyHelper.deproxy(entity);
215 9e59c2ac Patric Plitzner
216 a60842d7 n.hoffmann
			return identifiableEntity.getTitleCache();
217
		}
218 9e59c2ac Patric Plitzner
219 a60842d7 n.hoffmann
		return "No text. Implement in subclass";
220
	}
221 9e59c2ac Patric Plitzner
222 8c8ead8a Cherian Mathew
	public List<T> getModel() {
223 db5e366d n.hoffmann
		return model;
224
	}
225 a60842d7 n.hoffmann
226 5cfc8708 Patrick Plitzner
	public List<AnnotatedTableItem<T>> getWrappedModel() {
227
	    List<AnnotatedTableItem<T>> wrappetItems = new ArrayList<>();
228
	    for(T t:model){
229
	        wrappetItems.add(new AnnotatedTableItem<T>(t));
230
	    }
231
	    return wrappetItems;
232
	}
233
234 76fe3732 Cherian Mathew
	protected boolean replaceInModel(T entity) {
235
	    int index = model.indexOf(entity);
236
	    if(index >= 0) {
237
	        model.set(index, entity);
238
	        return true;
239
	    } else {
240
	        return false;
241
	    }
242
	}
243 8c8ead8a Cherian Mathew
244
    @Override
245
    public   List<T> getRootEntities() {
246
        return getModel();
247
    }
248 ac1f29b5 Cherian Mathew
249
250
    @Override
251
    public Map<Object, List<String>> getPropertyPathsMap() {
252
        // TODO Auto-generated method stub
253
        return null;
254
    }
255 51188df7 Katja Luther
256
	public ConversationHolder getConversation() {
257
		return conversation;
258
	}
259 3be6ef3e n.hoffmann
}