From: Patrick Plitzner Date: Mon, 7 Dec 2015 13:31:47 +0000 (+0100) Subject: Merge branch 'develop' of ssh://dev.e-taxonomy.eu/var/git/taxeditor into develop X-Git-Tag: 3.12.0^2~32 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/9e56f862eb2e623f68c2194c9ccd74862634f4dd?hp=74cf02468ad8898c035b01e59d149bbd0e4f43c4 Merge branch 'develop' of ssh://dev.e-taxonomy.eu/var/git/taxeditor into develop --- diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java deleted file mode 100644 index 6884ba88c..000000000 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java +++ /dev/null @@ -1,53 +0,0 @@ -// $Id$ -/** -* Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy -* http://www.e-taxonomy.eu -* -* The contents of this file are subject to the Mozilla Public License Version 1.1 -* See LICENSE.TXT at the top of this package for the full license terms. -*/ - -package eu.etaxonomy.taxeditor.model; - -import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; -import eu.etaxonomy.cdm.model.agent.Person; -import eu.etaxonomy.cdm.model.agent.Team; -import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase; - -/** - * Utility class for handling of authorship related elements. - * - * @author n.hoffmann - * @created Sep 8, 2010 - * @version 1.0 - */ -public class AuthorHelper { - - /** - * If the given {@link TeamOrPersonBase} is a {@link Person} this methods - * creates a new {@link Team} with this person. If it already a team the - * team is returned. - * - * @param teamOrPerson - * a team or a person - * @return the given team or a newly created team with the given person - */ - public static Team getAuthor(TeamOrPersonBase teamOrPerson){ - if(teamOrPerson == null){ - return null; - } - Object deproxiedObject = HibernateProxyHelper.deproxy(teamOrPerson); - if(deproxiedObject instanceof Person){ - Person person = (Person) deproxiedObject; - Team team = Team.NewInstance(); - team.addTeamMember(person); - return team; - } - else if(deproxiedObject instanceof Team){ - return (Team) deproxiedObject; - }else{ - throw new IllegalArgumentException("Given object os of the wrong type"); - } - } -} diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java index f4c502803..8972e222a 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java @@ -2637,7 +2637,7 @@ public class CdmFormFactory extends FormToolkit { * a {@link ConversationHolder} object. * @return a {@link EntitySelectionElement} object. */ - public EntitySelectionElement createSelectionElement(Class clazz, + public EntitySelectionElement createSelectionElement(Class clazz, ConversationHolder conversation, ICdmFormElement parentElement, String labelString, T selection, int mode, int style) { EntitySelectionElement element = new EntitySelectionElement(this, conversation, parentElement, clazz, @@ -2679,7 +2679,7 @@ public class CdmFormFactory extends FormToolkit { * a {@link ConversationHolder} object. * @return a {@link EntitySelectionElement} object. */ - public EntitySelectionElementWithAbbreviatedTitle createSelectionElementWithAbbreviatedTitle( + public EntitySelectionElementWithAbbreviatedTitle createSelectionElementWithAbbreviatedTitle( Class clazz, ConversationHolder conversation, ICdmFormElement parentElement, String labelString, T selection, int mode, int style) { EntitySelectionElementWithAbbreviatedTitle element = new EntitySelectionElementWithAbbreviatedTitle(this, conversation, parentElement, clazz, diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailElement.java index 346b22cad..1f26a8bc2 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailElement.java @@ -22,7 +22,6 @@ import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase; import eu.etaxonomy.cdm.model.reference.Reference; import eu.etaxonomy.cdm.model.reference.ReferenceFactory; import eu.etaxonomy.cdm.model.reference.ReferenceType; -import eu.etaxonomy.taxeditor.model.AuthorHelper; import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent; @@ -127,7 +126,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem selection_authorTeam = formFactory .createSelectionElement(AgentBase.class, getConversationHolder(), formElement, "Author", - AuthorHelper.getAuthor(entity.getAuthorship()), + entity.getAuthorship(), EntitySelectionElement.ALL, style); ReferenceType referenceType = entity.getType(); @@ -550,18 +549,18 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem } } } - + @Override protected void handleToggleableCacheField() { - + boolean pushedState = toggleable_cache.getState(); getEntity().setTitleCache(toggleable_cache.getText(), pushedState); setIrrelevantReferenceDetail(false); updateToggleableCacheField(); } - + protected void setIrrelevantReferenceDetail(boolean abbrev){ - + List except = new ArrayList(); except.addAll( Arrays.asList(new Object[] { toggleable_cache, toggleableAbbrevCache, text_editor, text_isbn, text_issn, text_organisation, text_pages, text_placePublished, text_publisher, text_referenceAbstract, text_uri, selection_institution})); boolean pushedState; @@ -582,7 +581,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem break; default: break; - } + } setIrrelevant(pushedState, except); } } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EditFromSelectionWizard.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EditFromSelectionWizard.java index 22d5dd7a3..04771ac13 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EditFromSelectionWizard.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EditFromSelectionWizard.java @@ -10,20 +10,24 @@ 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; @@ -34,13 +38,14 @@ import eu.etaxonomy.cdm.model.occurrence.FieldUnit; 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; @@ -55,30 +60,24 @@ import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceWizardPage; import eu.etaxonomy.taxeditor.ui.section.user.UserDetailWizardPage; /** - *

- * EditFromSelectionWizard class. - *

- * * @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; - /** - *

- * Constructor for EditFromSelectionWizard. - *

- * - * @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()))); } @@ -88,35 +87,36 @@ public class EditFromSelectionWizard extends Wizard implements public void addPages() { CdmFormFactory formFactory = selectionElement.getFormFactory(); - ICdmBase entity = (ICdmBase) HibernateProxyHelper + CdmBase entity = (CdmBase) HibernateProxyHelper .deproxy(selectionElement.getEntity()); - - if (entity instanceof Reference) { + IService 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()); } @@ -135,26 +135,26 @@ public class EditFromSelectionWizard extends Wizard implements 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"); @@ -162,26 +162,12 @@ public class EditFromSelectionWizard extends Wizard implements } - /* - * (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 service = EntitySelectionElement.getService(rootElement); + service.merge(rootElement, true); + previousCdmEntitySession.load(rootElement, true); return true; } @@ -199,4 +185,30 @@ public class EditFromSelectionWizard extends Wizard implements @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 getRootEntities() { + return Collections.singleton(rootElement); + } + + @Override + public Map> getPropertyPathsMap() { + return null; + } } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java index 75821c515..cd600411f 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java @@ -23,14 +23,27 @@ import org.springframework.security.core.GrantedAuthority; 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.AgentBase; 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.ImageResources; @@ -61,7 +74,7 @@ import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityLabelT * @version 1.0 * @param */ -public class EntitySelectionElement extends +public class EntitySelectionElement extends AbstractCdmFormElement implements SelectionListener, IEnableableFormElement, ISelectableElement, IEntityElement, ILabeledElement, IConversationEnabled, Observer { private static final EnumSet UPDATE = EnumSet.of(CRUD.UPDATE); @@ -223,6 +236,38 @@ public class EntitySelectionElement extends setSelectionInternal(selection); } + public static IService getService(T cdmBase){ + IService service = null; + if(cdmBase!=null){ + //get corresponding service + if(cdmBase.isInstanceOf(Reference.class)){ + service = (IService) CdmStore.getService(IReferenceService.class); + } + else if (cdmBase.isInstanceOf(AgentBase.class)){ + service = (IService) CdmStore.getService(IAgentService.class); + } + else if (cdmBase instanceof NonViralName) { + service = (IService) CdmStore.getService(INameService.class); + } + else if (cdmBase instanceof SpecimenOrObservationBase) { + service = (IService) CdmStore.getService(IOccurrenceService.class); + } + else if (cdmBase instanceof Collection) { + service = (IService) CdmStore.getService(ICollectionService.class); + } + else if (cdmBase instanceof User) { + service = (IService) CdmStore.getService(IUserService.class); + } + else if (cdmBase instanceof Primer) { + service = (IService) CdmStore.getService(IPrimerService.class); + } + else if (cdmBase instanceof Amplification) { + service = (IService) CdmStore.getService(IAmplificationService.class); + } + } + return service; + } + /** * Return the selected object * @@ -313,9 +358,7 @@ public class EntitySelectionElement extends */ 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)); @@ -326,6 +369,9 @@ public class EntitySelectionElement extends } else if (entity instanceof Amplification){ return ((Amplification) entity).getLabelCache(); } + else if(entity instanceof IIdentifiableEntity) { + return ((IIdentifiableEntity) entity).getTitleCache(); + } } return ""; @@ -422,6 +468,7 @@ public class EntitySelectionElement extends WizardDialog dialog = new WizardDialog(selectionElement.getShell(), new EditFromSelectionWizard(selectionElement)); if (dialog.open() == IStatus.OK) { + selectionElement.updateFromWizard(); } } @@ -501,7 +548,7 @@ public class EntitySelectionElement extends 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)); } } } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElementWithAbbreviatedTitle.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElementWithAbbreviatedTitle.java index 5c2a267c1..ac926a725 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElementWithAbbreviatedTitle.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElementWithAbbreviatedTitle.java @@ -5,12 +5,12 @@ package eu.etaxonomy.taxeditor.ui.selection; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase; -import eu.etaxonomy.cdm.model.common.ICdmBase; +import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.reference.Reference; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement; -public class EntitySelectionElementWithAbbreviatedTitle extends EntitySelectionElement { +public class EntitySelectionElementWithAbbreviatedTitle extends EntitySelectionElement { /** * @param formFactory