import java.util.Observer;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
-import eu.etaxonomy.cdm.api.service.IAgentService;
-import eu.etaxonomy.cdm.api.service.ICollectionService;
-import eu.etaxonomy.cdm.api.service.INameService;
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
-import eu.etaxonomy.cdm.api.service.IReferenceService;
import eu.etaxonomy.cdm.api.service.IService;
-import eu.etaxonomy.cdm.api.service.IUserService;
-import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
-import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.model.agent.Institution;
-import eu.etaxonomy.cdm.model.agent.Person;
-import eu.etaxonomy.cdm.model.agent.Team;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.common.Group;
-import eu.etaxonomy.cdm.model.common.ICdmBase;
import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
import eu.etaxonomy.cdm.model.common.User;
import eu.etaxonomy.cdm.model.molecular.Amplification;
import eu.etaxonomy.cdm.model.molecular.Primer;
-import eu.etaxonomy.cdm.model.name.NonViralName;
-import eu.etaxonomy.cdm.model.occurrence.Collection;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
-import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.ImageResources;
-import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.preference.Resources;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.store.LoginManager;
* @version 1.0
* @param <T>
*/
-public class EntitySelectionElement<T extends ICdmBase> extends
+public class EntitySelectionElement<T extends CdmBase> extends
AbstractCdmFormElement implements SelectionListener, IEnableableFormElement, ISelectableElement, IEntityElement<T>, ILabeledElement, IConversationEnabled, Observer {
private static final EnumSet<CRUD> UPDATE = EnumSet.of(CRUD.UPDATE);
this.isDeletable = (mode & DELETABLE) == DELETABLE;
boolean isSelectable = (mode & SELECTABLE) == SELECTABLE;
- this.labelString = (labelString == null || labelString.equals("")) ? "" : labelString + " : ";
+ this.labelString = (labelString == null || labelString.equals("")) ? "" : labelString;
this.conversation = conversation;
*/
protected String getTitle() {
if (entity != null){
- if(entity instanceof IIdentifiableEntity) {
- return ((IIdentifiableEntity) entity).getTitleCache();
- } else if(entity instanceof Group){
+ if(entity instanceof Group){
return ((Group) entity).getName();
} else if(entity instanceof GrantedAuthority){
return GrantedAuthorityLabelTextProvider.getText(((GrantedAuthority) entity));
} else if (entity instanceof Amplification){
return ((Amplification) entity).getLabelCache();
}
+ else if(entity instanceof IIdentifiableEntity) {
+ return ((IIdentifiableEntity) entity).getTitleCache();
+ }
}
return "";
private class EditListener extends SelectionAdapter {
- 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";
- private static final String TRANSIENT_EDITING_WARNING_TITLE = "CDM element not yet saved.";
private final EntitySelectionElement<T> selectionElement;
public EditListener(EntitySelectionElement<T> selectionElement) {
/** {@inheritDoc} */
@Override
public void widgetSelected(SelectionEvent e) {
- T originalEntity = selectionElement.getEntity();
- T clonedEntity = null;
- IService<T> service = null;
- if(originalEntity instanceof CdmBase){
- //get corresponding service
- if(entity instanceof Reference<?>){
- service = (IService<T>) CdmStore.getService(IReferenceService.class);
- }
- else if (entity instanceof Team || entity instanceof Person || entity instanceof Institution) {
- service = (IService<T>) CdmStore.getService(IAgentService.class);
- }
- else if (entity instanceof NonViralName) {
- service = (IService<T>) CdmStore.getService(INameService.class);
- }
- else if (entity instanceof SpecimenOrObservationBase) {
- service = (IService<T>) CdmStore.getService(IOccurrenceService.class);
- }
- else if (entity instanceof Collection) {
- service = (IService<T>) CdmStore.getService(ICollectionService.class);
- }
- else if (entity instanceof User) {
- service = (IService<T>) CdmStore.getService(IUserService.class);
- }
- else if (entity instanceof Primer) {
- service = (IService<T>) CdmStore.getService(IPrimerService.class);
- }
- else if (entity instanceof Amplification) {
- service = (IService<T>) CdmStore.getService(IAmplificationService.class);
- }
- //check if original already exists in data base. If not then do not clone and all changes will be persisted directly -> Warning to user.
- if(service !=null && service.find(originalEntity.getUuid())==null && originalEntity.getId() != 0){
- if(MessagingUtils.confirmDialog(TRANSIENT_EDITING_WARNING_TITLE, "["+originalEntity.getClass().getSimpleName()+"]"+originalEntity + " has to be saved before it can be edited. Save now?")){
- service.save(originalEntity);
- AbstractUtility.getActiveEditor().doSave(new NullProgressMonitor());
- }
- else{
- //transient CDM elements should not be edited to avoid merge conflicts
- // when the elements are cascaded
- return;
- }
- }
- else{
- //FIXME temporarily disabled cloning re-opening bug #2645 (EditFromSelectionWizard persists data even when canceled)
-// try {
-// //clone original
-// clonedEntity = (T) ((CdmBase) originalEntity).clone();
-// } catch (CloneNotSupportedException e1) {
-// MessagingUtils.warningDialog(TRANSIENT_EDITING_WARNING_TITLE, this, TRANSIENT_EDITING_WARNING_TEXT);
-// }
- }
-
- }
- if(clonedEntity!=null){
- selectionElement.setEntity(clonedEntity);
- }
+
+ IService<T> service = CdmStore.getService(entity);
+ T loadedEntity = service.load(entity.getUuid());
+ if (loadedEntity==null){
+ MessageDialog.openInformation(null,"Save changes", "You have made changes that must be saved before this query can be executed");
+ return;
+ }
WizardDialog dialog = new WizardDialog(selectionElement.getShell(),
new EditFromSelectionWizard(selectionElement));
if (dialog.open() == IStatus.OK) {
- if(service!=null && clonedEntity!=null){//check if cloning happened
- T editedClonedEntity = selectionElement.getEntity();
- editedClonedEntity.setId(originalEntity.getId());
- editedClonedEntity.setUuid(originalEntity.getUuid());
-
- //merge clone and original
- service.merge(editedClonedEntity);
- originalEntity = service.load(originalEntity.getUuid());
- }
- selectionElement.setEntity(originalEntity);
selectionElement.updateFromWizard();
}
- //be sure to reset to original in all cases
- selectionElement.setEntity(originalEntity);
- selectionElement.refresh();
}
}
private void updateButtonStates() {
if(button_edit != null && !button_selection.isDisposed()){
- button_edit.setEnabled(isEditable && button_selection.isEnabled() && getEntity() != null && CdmStore.currentAuthentiationHasPermission((CdmBase) getEntity(), UPDATE));
+ button_edit.setEnabled(isEditable && button_selection.isEnabled() && getEntity() != null && CdmStore.currentAuthentiationHasPermission(getEntity(), UPDATE));
}
}
}