Revision 37f997b9
Added by Patrick Plitzner over 8 years ago
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java | ||
---|---|---|
8 | 8 |
import java.util.Observer; |
9 | 9 |
|
10 | 10 |
import org.eclipse.core.runtime.IStatus; |
11 |
import org.eclipse.core.runtime.NullProgressMonitor; |
|
12 | 11 |
import org.eclipse.jface.wizard.WizardDialog; |
13 | 12 |
import org.eclipse.swt.SWT; |
14 | 13 |
import org.eclipse.swt.events.SelectionAdapter; |
... | ... | |
24 | 23 |
|
25 | 24 |
import eu.etaxonomy.cdm.api.conversation.ConversationHolder; |
26 | 25 |
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; |
27 |
import eu.etaxonomy.cdm.api.service.IAgentService; |
|
28 |
import eu.etaxonomy.cdm.api.service.ICollectionService; |
|
29 |
import eu.etaxonomy.cdm.api.service.INameService; |
|
30 |
import eu.etaxonomy.cdm.api.service.IOccurrenceService; |
|
31 |
import eu.etaxonomy.cdm.api.service.IReferenceService; |
|
32 |
import eu.etaxonomy.cdm.api.service.IService; |
|
33 |
import eu.etaxonomy.cdm.api.service.IUserService; |
|
34 |
import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService; |
|
35 |
import eu.etaxonomy.cdm.api.service.molecular.IPrimerService; |
|
36 | 26 |
import eu.etaxonomy.cdm.common.CdmUtils; |
37 |
import eu.etaxonomy.cdm.model.agent.Institution; |
|
38 |
import eu.etaxonomy.cdm.model.agent.Person; |
|
39 |
import eu.etaxonomy.cdm.model.agent.Team; |
|
40 | 27 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
41 | 28 |
import eu.etaxonomy.cdm.model.common.Group; |
42 | 29 |
import eu.etaxonomy.cdm.model.common.ICdmBase; |
... | ... | |
44 | 31 |
import eu.etaxonomy.cdm.model.common.User; |
45 | 32 |
import eu.etaxonomy.cdm.model.molecular.Amplification; |
46 | 33 |
import eu.etaxonomy.cdm.model.molecular.Primer; |
47 |
import eu.etaxonomy.cdm.model.name.NonViralName; |
|
48 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
|
49 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; |
|
50 |
import eu.etaxonomy.cdm.model.reference.Reference; |
|
51 | 34 |
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; |
52 | 35 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; |
53 |
import eu.etaxonomy.taxeditor.model.AbstractUtility; |
|
54 | 36 |
import eu.etaxonomy.taxeditor.model.ImageResources; |
55 |
import eu.etaxonomy.taxeditor.model.MessagingUtils; |
|
56 | 37 |
import eu.etaxonomy.taxeditor.preference.Resources; |
57 | 38 |
import eu.etaxonomy.taxeditor.store.CdmStore; |
58 | 39 |
import eu.etaxonomy.taxeditor.store.LoginManager; |
... | ... | |
429 | 410 |
|
430 | 411 |
private class EditListener extends SelectionAdapter { |
431 | 412 |
|
432 |
private static final String TRANSIENT_EDITING_WARNING_TEXT = "Warning: All changes for this element are directly reflected in the data base.\nThe \"Cancel\" button has no effect"; |
|
433 |
private static final String TRANSIENT_EDITING_WARNING_TITLE = "CDM element not yet saved."; |
|
434 | 413 |
private final EntitySelectionElement<T> selectionElement; |
435 | 414 |
|
436 | 415 |
public EditListener(EntitySelectionElement<T> selectionElement) { |
... | ... | |
440 | 419 |
/** {@inheritDoc} */ |
441 | 420 |
@Override |
442 | 421 |
public void widgetSelected(SelectionEvent e) { |
443 |
T originalEntity = selectionElement.getEntity(); |
|
444 |
T clonedEntity = null; |
|
445 |
IService<T> service = null; |
|
446 |
if(originalEntity instanceof CdmBase){ |
|
447 |
//get corresponding service |
|
448 |
if(entity instanceof Reference<?>){ |
|
449 |
service = (IService<T>) CdmStore.getService(IReferenceService.class); |
|
450 |
} |
|
451 |
else if (entity instanceof Team || entity instanceof Person || entity instanceof Institution) { |
|
452 |
service = (IService<T>) CdmStore.getService(IAgentService.class); |
|
453 |
} |
|
454 |
else if (entity instanceof NonViralName) { |
|
455 |
service = (IService<T>) CdmStore.getService(INameService.class); |
|
456 |
} |
|
457 |
else if (entity instanceof SpecimenOrObservationBase) { |
|
458 |
service = (IService<T>) CdmStore.getService(IOccurrenceService.class); |
|
459 |
} |
|
460 |
else if (entity instanceof Collection) { |
|
461 |
service = (IService<T>) CdmStore.getService(ICollectionService.class); |
|
462 |
} |
|
463 |
else if (entity instanceof User) { |
|
464 |
service = (IService<T>) CdmStore.getService(IUserService.class); |
|
465 |
} |
|
466 |
else if (entity instanceof Primer) { |
|
467 |
service = (IService<T>) CdmStore.getService(IPrimerService.class); |
|
468 |
} |
|
469 |
else if (entity instanceof Amplification) { |
|
470 |
service = (IService<T>) CdmStore.getService(IAmplificationService.class); |
|
471 |
} |
|
472 |
//check if original already exists in data base. If not then do not clone and all changes will be persisted directly -> Warning to user. |
|
473 |
if(service !=null && service.find(originalEntity.getUuid())==null && originalEntity.getId() != 0){ |
|
474 |
if(MessagingUtils.confirmDialog(TRANSIENT_EDITING_WARNING_TITLE, "["+originalEntity.getClass().getSimpleName()+"]"+originalEntity + " has to be saved before it can be edited. Save now?")){ |
|
475 |
service.save(originalEntity); |
|
476 |
AbstractUtility.getActiveEditor().doSave(new NullProgressMonitor()); |
|
477 |
} |
|
478 |
else{ |
|
479 |
//transient CDM elements should not be edited to avoid merge conflicts |
|
480 |
// when the elements are cascaded |
|
481 |
return; |
|
482 |
} |
|
483 |
} |
|
484 |
else{ |
|
485 |
//FIXME temporarily disabled cloning re-opening bug #2645 (EditFromSelectionWizard persists data even when canceled) |
|
486 |
// try { |
|
487 |
// //clone original |
|
488 |
// clonedEntity = (T) ((CdmBase) originalEntity).clone(); |
|
489 |
// } catch (CloneNotSupportedException e1) { |
|
490 |
// MessagingUtils.warningDialog(TRANSIENT_EDITING_WARNING_TITLE, this, TRANSIENT_EDITING_WARNING_TEXT); |
|
491 |
// } |
|
492 |
} |
|
493 |
|
|
494 |
} |
|
495 |
if(clonedEntity!=null){ |
|
496 |
selectionElement.setEntity(clonedEntity); |
|
497 |
} |
|
498 | 422 |
WizardDialog dialog = new WizardDialog(selectionElement.getShell(), |
499 | 423 |
new EditFromSelectionWizard(selectionElement)); |
500 | 424 |
if (dialog.open() == IStatus.OK) { |
501 |
if(service!=null && clonedEntity!=null){//check if cloning happened |
|
502 |
T editedClonedEntity = selectionElement.getEntity(); |
|
503 |
editedClonedEntity.setId(originalEntity.getId()); |
|
504 |
editedClonedEntity.setUuid(originalEntity.getUuid()); |
|
505 |
|
|
506 |
//merge clone and original |
|
507 |
service.merge(editedClonedEntity); |
|
508 |
originalEntity = service.load(originalEntity.getUuid()); |
|
509 |
|
|
510 |
} |
|
511 |
selectionElement.setEntity(originalEntity); |
|
512 | 425 |
selectionElement.updateFromWizard(); |
513 | 426 |
} |
514 |
//be sure to reset to original in all cases |
|
515 |
selectionElement.setEntity(originalEntity); |
|
516 |
selectionElement.refresh(); |
|
517 | 427 |
} |
518 | 428 |
} |
519 | 429 |
|
Also available in: Unified diff
Remove unused entity cloning