package eu.etaxonomy.taxeditor.ui.selection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.ui.IEditorPart;
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
+import eu.etaxonomy.cdm.api.service.IService;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
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.ICdmBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
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.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.model.TextHelper;
import eu.etaxonomy.taxeditor.newWizard.AmplificationGeneralWizardPage;
import eu.etaxonomy.taxeditor.newWizard.PrimerWizardPage;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionWizardPage;
import eu.etaxonomy.taxeditor.ui.section.agent.PersonWizardPage;
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailWizardPage;
/**
- * <p>
- * EditFromSelectionWizard class.
- * </p>
- *
* @author n.hoffmann
* @created Jun 1, 2010
* @version 1.0
*/
public class EditFromSelectionWizard extends Wizard implements
- SelectionListener {
+ SelectionListener, ICdmEntitySessionEnabled {
+ private ICdmEntitySession cdmEntitySession;
+ private ICdmEntitySession previousCdmEntitySession;
private final EntitySelectionElement selectionElement;
+ private CdmBase rootElement;
- /**
- * <p>
- * Constructor for EditFromSelectionWizard.
- * </p>
- *
- * @param selectionElement
- * a
- * {@link eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement}
- * object.
- */
public EditFromSelectionWizard(EntitySelectionElement selectionElement) {
+ if (CdmStore.isActive() && CdmStore.getCurrentSessionManager().isRemoting()) {
+ previousCdmEntitySession = CdmStore.getCurrentSessionManager().getActiveSession();
+ cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+ cdmEntitySession.bind();
+ }
this.selectionElement = selectionElement;
this.setWindowTitle(String.format("Edit %s", TextHelper.deproxyClassName(selectionElement.getEntity().getClass())));
}
public void addPages() {
CdmFormFactory formFactory = selectionElement.getFormFactory();
- ICdmBase entity = (ICdmBase) HibernateProxyHelper
+ CdmBase entity = (CdmBase) HibernateProxyHelper
.deproxy(selectionElement.getEntity());
-
- if (entity instanceof Reference) {
+ IService<CdmBase> service = EntitySelectionElement.getService(entity);
+ rootElement = service.load(entity.getUuid());
+ if (rootElement.isInstanceOf(Reference.class)) {
addPage(new ReferenceWizardPage(formFactory,
selectionElement.getConversationHolder(),
- (Reference) entity));
- } else if (entity instanceof Team) {
+ (HibernateProxyHelper.deproxy(rootElement, Reference.class))));
+ } else if (rootElement.isInstanceOf(Team.class)) {
addPage(new TeamWizardPage(formFactory,
- selectionElement.getConversationHolder(), (Team) entity));
- } else if (entity instanceof Person) {
+ selectionElement.getConversationHolder(), HibernateProxyHelper.deproxy(rootElement, Team.class)));
+ } else if (rootElement.isInstanceOf(Person.class)) {
addPage(new PersonWizardPage(formFactory,
- selectionElement.getConversationHolder(), (Person) entity));
- } else if (entity instanceof NonViralName) {
+ selectionElement.getConversationHolder(), HibernateProxyHelper.deproxy(rootElement, Person.class)));
+ } else if (rootElement.isInstanceOf(NonViralName.class)) {
addPage(new NonViralNameWizardPage(formFactory,
selectionElement.getConversationHolder(),
- (NonViralName) entity));
- } else if (entity instanceof SpecimenOrObservationBase) {
+ HibernateProxyHelper.deproxy(rootElement, NonViralName.class)));
+ } else if (rootElement.isInstanceOf(SpecimenOrObservationBase.class)) {
DerivedUnitFacade facade;
try {
- if(((SpecimenOrObservationBase) entity).isInstanceOf(DerivedUnit.class)){
+ if(rootElement.isInstanceOf(DerivedUnit.class)){
facade = DerivedUnitFacade.NewInstance(
- HibernateProxyHelper.deproxy(entity, DerivedUnit.class),
+ HibernateProxyHelper.deproxy(rootElement, DerivedUnit.class),
PreferencesUtil.getDerivedUnitConfigurator());
}
else {
facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit,
- HibernateProxyHelper.deproxy(entity, FieldUnit.class),
+ HibernateProxyHelper.deproxy(rootElement, FieldUnit.class),
PreferencesUtil.getDerivedUnitConfigurator());
}
addPage(new DerivedUnitBaseWizardPage(formFactory,
selectionElement.getConversationHolder(), facade));
}
- } else if (entity instanceof Collection) {
+ } else if (rootElement.isInstanceOf(Collection.class)) {
addPage(new CollectionWizardPage(formFactory,
selectionElement.getConversationHolder(),
- (Collection) entity));
- } else if (entity instanceof Institution) {
+ HibernateProxyHelper.deproxy(rootElement, Collection.class)));
+ } else if (rootElement instanceof Institution) {
addPage(new InstitutionWizardPage(formFactory,
selectionElement.getConversationHolder(),
- (Institution) entity));
- } else if (entity instanceof User) {
+ HibernateProxyHelper.deproxy(rootElement, Institution.class)));
+ } else if (rootElement instanceof User) {
addPage(new UserDetailWizardPage(formFactory,
selectionElement.getConversationHolder(),
- (User) entity));
- } else if (entity instanceof Primer) {
+ HibernateProxyHelper.deproxy(rootElement, User.class)));
+ } else if (rootElement instanceof Primer) {
addPage(new PrimerWizardPage(formFactory,
selectionElement.getConversationHolder(),
- (Primer) entity));
- } else if (entity instanceof Amplification) {
+ HibernateProxyHelper.deproxy(rootElement, Primer.class)));
+ } else if (rootElement instanceof Amplification) {
addPage(new AmplificationGeneralWizardPage(formFactory,
selectionElement.getConversationHolder(),
- (Amplification) entity));
+ HibernateProxyHelper.deproxy(rootElement, Amplification.class)));
} else {
MessagingUtils.warningDialog("Missing interface", this,
"No detail element for current selection");
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.wizard.Wizard#performFinish()
- */
/** {@inheritDoc} */
@Override
public boolean performFinish() {
- IEditorPart activeEditor = AbstractUtility.getActiveEditor();
- /*
- * forceDirty() for cases when one or more EditFromSelectionWizards are
- * opened cascadingly to trigger the save button. Otherwise the dirty
- * state would not be set and the user will have no feedback that he/she
- * actually still has ounsaved changes. This is necessary because
- * editing in these wizards is done on clones of the CDM entities which
- * are merged back with the original when pressing "Finish"
- */
- if (activeEditor instanceof IDirtyMarkable){
- ((IDirtyMarkable) activeEditor).forceDirty();
- }
+ IService<CdmBase> service = EntitySelectionElement.getService(rootElement);
+ service.merge(rootElement, true);
+ previousCdmEntitySession.load(rootElement, true);
return true;
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ if(cdmEntitySession != null) {
+ cdmEntitySession.dispose();
+ }
+ if(previousCdmEntitySession!=null){
+ previousCdmEntitySession.bind();
+ }
+ }
+
+ @Override
+ public ICdmEntitySession getCdmEntitySession() {
+ return cdmEntitySession;
+ }
+
+ @Override
+ public java.util.Collection<CdmBase> getRootEntities() {
+ return Collections.singleton(rootElement);
+ }
+
+ @Override
+ public Map<Object, List<String>> getPropertyPathsMap() {
+ return null;
+ }
}