eu.etaxonomy.taxeditor.cdmlib/lib/jboss-transaction-api_1.1_spec-1.0.0.Final.jar -text
eu.etaxonomy.taxeditor.cdmlib/lib/jdbc4-2.0.jar -text
eu.etaxonomy.taxeditor.cdmlib/lib/jdom-1.1.3.jar -text
-eu.etaxonomy.taxeditor.cdmlib/lib/jena-core-2.12.1-SNAPSHOT.jar -text
-eu.etaxonomy.taxeditor.cdmlib/lib/jena-iri-1.1.1-SNAPSHOT.jar -text
+eu.etaxonomy.taxeditor.cdmlib/lib/jena-core-2.11.2.jar -text
+eu.etaxonomy.taxeditor.cdmlib/lib/jena-iri-1.0.2.jar -text
eu.etaxonomy.taxeditor.cdmlib/lib/joda-time-2.1.jar -text
eu.etaxonomy.taxeditor.cdmlib/lib/json-lib-2.4-jdk15.jar -text
eu.etaxonomy.taxeditor.cdmlib/lib/jsr250-api-1.0.jar -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/ICdmEditorHandle.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/IContextListener.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/IDataChangeBehavior.java -text
-eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/IDirtyMarkableSelectionProvider.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/IDirtyMarkable.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/IElementHasDetails.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/IPartChangeListener.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/IPartContentHasDetails.java -text
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.apache.log4j,
org.eclipse.equinox.app,
+ org.eclipse.equinox.p2.repository.metadata,
org.osgi.framework,
org.osgi.service.packageadmin
Require-Bundle: org.eclipse.ui,
org.eclipse.equinox.p2.updatechecker,
org.eclipse.equinox.p2.operations,
org.eclipse.help.ui,
- org.eclipse.equinox.p2.metadata;bundle-version="2.1.0",
- org.eclipse.equinox.p2.engine;bundle-version="2.1.1"
+ org.eclipse.equinox.p2.metadata,
+ org.eclipse.equinox.p2.engine,
+ org.eclipse.equinox.p2.metadata.repository,
+ org.eclipse.equinox.p2.repository
CdmStore.connect();
}
- P2Util.setDefaultUpdateRepositories();
+ P2Util.setP2UpdateRepositories();
}
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#postWindowClose()
+ */
+ @Override
+ public void postWindowClose() {
+ P2Util.saveP2RepositoryPreferences();
+ }
+
private int authenticate(){
Shell shell = TaxonomicEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell();
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
import org.eclipse.equinox.internal.p2.ui.model.ElementUtils;
import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement;
+import org.eclipse.equinox.p2.repository.IRepository;
+import org.eclipse.equinox.p2.repository.IRepositoryManager;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.operations.ProvisioningJob;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
+import org.eclipse.equinox.p2.operations.RepositoryTracker;
import org.eclipse.equinox.p2.operations.Update;
import org.eclipse.equinox.p2.operations.UpdateOperation;
import org.eclipse.equinox.p2.ui.ProvisioningUI;
import eu.etaxonomy.taxeditor.ApplicationUtil;
import eu.etaxonomy.taxeditor.TaxonomicEditorPlugin;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
/**
* This class is a utility class for updating the editor from a p2 update site,
* - Allow configurable update sites
*
* Notes :
- * - tried to get rid of the popup dialog which warns about unsigned jars using
- * -Declipse.p2.unsignedPolicy=allow but this does not work due to
- * https://bugs.eclipse.org/bugs/show_bug.cgi?id=391399, so the only solution
- * is to sign the jars with an official certificate.
+ *
*
* @see http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application
* @see http://bugs.eclipse.org/281226
public class P2Util {
//private static String LOCAL_UPDATE_SITE = "file:///path/.../to/Development/EDIT/taxeditor/eu.etaxonomy.taxeditor/target/repository/";
+
private static String EDIT_NIGHTLY_UPDATE_SITE = "http://cybertaxonomy.eu/download/taxeditor/update/nightly/";
private static String EDIT_NIGHTLY_UPDATE_SITE_NAME = "Taxonomic Editor Nightly";
private static String EDIT_STABLE_UPDATE_SITE = "http://cybertaxonomy.eu/download/taxeditor/update/stable/";
private static String EDIT_STABLE_UPDATE_SITE_NAME = "Taxonomic Editor Stable";
+ /**
+ * Retrieve and load the saved list of repositories from the preference store,
+ * making sure that at least the default repository is always loaded.
+ */
@SuppressWarnings("restriction")
- public static void setDefaultUpdateRepositories() {
+ public static void setP2UpdateRepositories() {
String updateSite = EDIT_NIGHTLY_UPDATE_SITE;
String updateSiteName = EDIT_NIGHTLY_UPDATE_SITE_NAME;
updateSite = EDIT_STABLE_UPDATE_SITE;
updateSiteName = EDIT_STABLE_UPDATE_SITE_NAME;
}
- try {
- final MetadataRepositoryElement element = new MetadataRepositoryElement(null, new URI(updateSite), true);
- element.setNickname(updateSiteName);
- ElementUtils.updateRepositoryUsingElements(ProvisioningUI.getDefaultUI(),new MetadataRepositoryElement[] {element}, null);
- } catch (URISyntaxException e) {
- MessagingUtils.errorDialog("Invalid update site URI",
- P2Util.class,
- "The update site URI has an invalid syntax",
- TaxonomicEditorPlugin.PLUGIN_ID,
- e,
- false);
+ List<MetadataRepositoryElement> repoElements = new ArrayList<MetadataRepositoryElement>();
+ List<MetadataRepositoryElement> savedRepoElements = PreferencesUtil.getP2Repositories();
+ if(savedRepoElements.isEmpty()) {
+ // we always need an update site, so we add the default one
+ try {
+ MetadataRepositoryElement element = new MetadataRepositoryElement(null, new URI(updateSite), true);
+ element.setNickname(updateSiteName);
+ repoElements.add(element);
+ } catch (URISyntaxException e) {
+ MessagingUtils.errorDialog("Invalid update site URI",
+ P2Util.class,
+ "The update site URI has an invalid syntax",
+ TaxonomicEditorPlugin.PLUGIN_ID,
+ e,
+ false);
+ }
+ }
+ repoElements.addAll(savedRepoElements);
+
+ ElementUtils.updateRepositoryUsingElements(ProvisioningUI.getDefaultUI(),repoElements
+ .toArray(new MetadataRepositoryElement[]{} ), null);
+
+ }
+
+ /**
+ * {@link org.eclipse.equinox.p2.ui.RepositoryManipulationPage} which handles the repsitory site list
+ * in preferences does not create a preference store and hence the changes are not saved. This means
+ * that we need to save it ourselves.
+ *
+ * This method saves the list of current repositories in the preference store as a string with
+ * specific delimiters.
+ */
+
+ public static void saveP2RepositoryPreferences() {
+
+ IMetadataRepositoryManager metaManager = ProvUI.getMetadataRepositoryManager(ProvisioningUI.getDefaultUI().getSession());
+
+ URI[] currentlyEnabled = metaManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
+ URI[] currentlyDisabled = metaManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_DISABLED);
+
+ List<MetadataRepositoryElement> repoElements = new ArrayList<MetadataRepositoryElement>();
+
+ for(URI repo : currentlyEnabled) {
+ boolean enabled = true;
+ String nickname = metaManager.getRepositoryProperty(repo, IRepository.PROP_NICKNAME);
+ MetadataRepositoryElement element = new MetadataRepositoryElement(null, repo, true);
+ element.setNickname(nickname);
+ element.setEnabled(enabled);
+ repoElements.add(element);
}
- }
+
+ for(URI repo : currentlyDisabled) {
+ boolean enabled = false;
+ String nickname = metaManager.getRepositoryProperty(repo, IRepository.PROP_NICKNAME);
+ MetadataRepositoryElement element = new MetadataRepositoryElement(null, repo, true);
+ element.setNickname(nickname);
+ element.setEnabled(enabled);
+ repoElements.add(element);
+ }
+ PreferencesUtil.setP2Repositories(repoElements);
+ }
/**
*
import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation;
import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotationModel;
import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
* @version 1.0
*/
public class BulkEditor extends AnnotatedLineEditor implements IPartContentHasDetails, IPartContentHasMedia,
- IDirtyMarkableSelectionProvider {
+ IDirtyMarkable {
/** Constant <code>ID="bulkeditor.editor"</code> */
public static final String ID = "bulkeditor.editor";
<classpathentry exported="true" kind="lib" path="lib/odfdom-0.8.jar"/>
<classpathentry exported="true" kind="lib" path="lib/h2mig_pagestore_addon.jar"/>
<classpathentry exported="true" kind="lib" path="lib/spring-security-remoting-3.1.3.RELEASE.jar"/>
- <classpathentry exported="true" kind="lib" path="lib/jena-core-2.12.1-SNAPSHOT.jar"/>
- <classpathentry exported="true" kind="lib" path="lib/jena-iri-1.1.1-SNAPSHOT.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/jena-core-2.11.2.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/jena-iri-1.0.2.jar"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
lib/odfdom-0.8.jar,
lib/h2mig_pagestore_addon.jar,
lib/spring-security-remoting-3.1.3.RELEASE.jar,
- lib/jena-core-2.12.1-SNAPSHOT.jar,
- lib/jena-iri-1.1.1-SNAPSHOT.jar,
+ lib/jena-core-2.11.2.jar,
+ lib/jena-iri-1.0.2.jar,
lib/cdmlib-commons-3.4.0-SNAPSHOT-sources.jar,
lib/cdmlib-commons-3.4.0-SNAPSHOT.jar,
lib/cdmlib-ext-3.4.0-SNAPSHOT-sources.jar,
class="eu.etaxonomy.taxeditor.editor.view.derivate.contextMenu.DerivateViewContextMenu"
id="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateContextMenu">
</dynamic>
+ <command
+ commandId="org.eclipse.ui.edit.delete"
+ label="Delete"
+ style="push">
+ </command>
</menuContribution>
<menuContribution
locationURI="popup:eu.etaxonomy.taxeditor.editor.view.dataimport.SpecimenImportEditor">
<equals
value="eu.etaxonomy.taxeditor.editor.view.media">
</equals>
+ <equals
+ value="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView">
+ </equals>
</or>
</with>
</activeWhen>
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.DataChangeBridge;
import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
+import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
*/
public class MultiPageTaxonEditor extends FormEditor implements
IPartContentHasFactualData, IConversationEnabled, IPostOperationEnabled,
- IDirtyMarkableSelectionProvider, IPartContentHasDetails, ISecuredEditor {
+ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
/** Constant <code>ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked}</code> */
public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon";
monitor.worked(1);
this.setDirty(false);
- monitor.worked(1);
+ monitor.worked(1);
} catch (Exception e) {
setFocus();
MessagingUtils.operationDialog(this, e, TaxeditorEditorPlugin.PLUGIN_ID,"saving a taxon", " Please close and reopen the taxon again.");
}
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
+
/**
* The accepted taxon that is the input for this editor
*
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.model.common.Group;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.ui.group.grantedauthority.CdmAuthorityCompositeViewer;
/**
* @created Mar 28, 2013
*
*/
-public class CdmAuthorityEditor extends EditorPart implements IConversationEnabled, IDirtyMarkableSelectionProvider {
+public class CdmAuthorityEditor extends EditorPart implements IConversationEnabled, IDirtyMarkable {
public static final String ID = "eu.etaxonomy.taxeditor.editor.group.authority"; //$NON-NLS-1$
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
+
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
*/
/**
- *
+ *
*/
package eu.etaxonomy.taxeditor.editor.key;
import eu.etaxonomy.cdm.model.description.IIdentificationKey;
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
/**
* @author n.hoffmann
- *
+ *
*/
public abstract class AbstractGraphKeyEditor<T extends IIdentificationKey>
extends EditorPart implements IConversationEnabled,
IZoomableWorkbenchPart, IPostOperationEnabled,
- IDirtyMarkableSelectionProvider {
+ IDirtyMarkable {
private CdmFormFactory formFactory;
private Composite container;
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
* IProgressMonitor)
*/
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSaveAs()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
* org.eclipse.ui.IEditorInput)
*/
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isDirty()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
* .Composite)
/**
* Return the key that this editor
- *
+ *
* @return
*/
public abstract T getKey();
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
* java.lang.Object)
viewer.update(element, null);
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
+
}
// $Id$
/**
* Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy
+ * 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.
*/
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyGraphEditor;
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor;
import eu.etaxonomy.taxeditor.model.DataChangeBridge;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
* @version 1.0
*/
public class KeyEditor extends FormEditor implements IConversationEnabled,
- IDirtyMarkableSelectionProvider, IPartContentHasDetails {
+ IDirtyMarkable, IPartContentHasDetails {
public static final String ID = "eu.etaxonomy.taxeditor.editor.key";
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
* IProgressMonitor)
*/
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSaveAs()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
*/
@Override
}
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
* (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
* ()
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
* java.lang.Object)
public void changed(Object element) {
editorDirtyStateChanged();
IEditorPart activeEditor = getActiveEditor();
- if (activeEditor instanceof IDirtyMarkableSelectionProvider) {
- ((IDirtyMarkableSelectionProvider) activeEditor).changed(element);
+ if (activeEditor instanceof IDirtyMarkable) {
+ ((IDirtyMarkable) activeEditor).changed(element);
}
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
+
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.editor.FormEditor#isDirty()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.editor.FormEditor#dispose()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.editor.FormEditor#addPages()
*/
@Override
MessagingUtils.error(getClass(), e);
}
-
+
setPartName();
}
/**
- *
+ *
*/
public void setPartName() {
AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
// $Id$
/**
* Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy
+ * 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.
*/
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
/**
* @version 1.0
*/
public class PolytomousKeyListEditor extends EditorPart implements
- IConversationEnabled, IDirtyMarkableSelectionProvider,
+ IConversationEnabled, IDirtyMarkable,
IPolytomousKeyEditorPage {
private class LinkListener extends MouseAdapter {
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events
* .MouseEvent)
int selectedColumn = getSelectedColumn(table, point);
PolytomousKeyNode node = (PolytomousKeyNode) getTableItem(
table, point).getData();
-
- if (selectedColumn == 4) {
+
+ if (selectedColumn == 4) {
PolytomousKeyNode linkData = getItemLinkData(node);
if (linkData != null) {
viewer.setSelection(new StructuredSelection(linkData), true);
- }
+ }
}
if (selectedColumn == 5) {
Taxon taxon = getItemTaxon(node);
return node.getChildren().isEmpty() ? null : node
.getChildAt(0);
}
-
+
/**
* @return
*/
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
* (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
* ()
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
* IProgressMonitor)
*/
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSaveAs()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
* org.eclipse.ui.IEditorInput)
*/
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isDirty()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
* .Composite)
if (viewer != null && viewer.getTable() != null) {
return viewer.getTable().getItemCount();
}
-
+
return 0;
}
-
+
public PolytomousKey getViewerInputKey() {
return (PolytomousKey) viewer.getInput();
}
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
* java.lang.Object)
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
+
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(
* eu.etaxonomy.cdm.model.common.CdmBase)
/*
* (non-Javadoc)
- *
+ *
* @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete()
*/
@Override
import eu.etaxonomy.taxeditor.editor.view.checklist.listener.ChecklistFocusListener;
import eu.etaxonomy.taxeditor.editor.view.checklist.listener.ChecklistModifyListener;
import eu.etaxonomy.taxeditor.model.IContextListener;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
* @version 1.0
*/
public class ChecklistEditor extends EditorPart implements ISelectionListener, IPartContentHasFactualData,
- IConversationEnabled, IContextListener, IPartContentHasDetails, IDirtyMarkableSelectionProvider {
+ IConversationEnabled, IContextListener, IPartContentHasDetails, IDirtyMarkable {
private static final Logger logger = Logger.getLogger(ChecklistEditor.class);
/**
}
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
+
public void setDirty(boolean dirty) {
this.dirty = dirty;
firePropertyChange(PROP_DIRTY);
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.taxeditor.model.IContextListener;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
* @date 20.09.2013
*
*/
-public abstract class DataImportEditor<T> extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider,
+public abstract class DataImportEditor<T> extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable,
IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IContextListener{
protected Logger logger = Logger.getLogger(DataImportEditor.class);
// cannot be changed
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ // cannot be dirty
+ }
+
/* (non-Javadoc)
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
*/
import eu.etaxonomy.cdm.model.molecular.SingleRead;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
* Displays the derivate hierarchy of the specimen specified in the editor input.
*
*/
-public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider,
+public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable,
IConversationEnabled, IPartContentHasDetails, IPartContentHasMedia, IPartContentHasSupplementalData,
ISelectionChangedListener {
viewer.refresh();
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
+
/**
* Refreshes the derivate hierarchy tree and expands the tree
* to show and select the given object.
/** {@inheritDoc} */
@Override
protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) {
+ if(part==this){
+ return;
+ }
if(AbstractUtility.getActiveEditor() == null){
showEmptyPage();
return;
org.eclipse.core.expressions,
org.eclipse.core.runtime,
org.eclipse.core.runtime.jobs,
- org.eclipse.core.runtime.preferences;
+ org.eclipse.core.runtime.preferences,
+ org.eclipse.equinox.internal.p2.ui.model,
org.eclipse.jface.action,
org.eclipse.jface.dialogs,
org.eclipse.jface.preference,
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;\r
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;\r
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;\r
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
import eu.etaxonomy.taxeditor.store.CdmStore;\r
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;\r
* @date 3 Jan 2012\r
*\r
*/\r
-public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkableSelectionProvider, IPostOperationEnabled {\r
+public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkable, IPostOperationEnabled {\r
\r
public static final String ID = "eu.etaxonomy.taxeditor.editor.definedTerm";\r
\r
viewer.update(element, null);\r
}\r
\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()\r
+ */\r
+ @Override\r
+ public void forceDirty() {\r
+ changed(null);\r
+ }\r
+\r
/**\r
* @param dirty the dirty to set\r
*/\r
// $Id$
/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* 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.
*/
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;
/**
- * <p>AuthorHelper class.</p>
+ * Utility class for handling of authorship related elements.
*
* @author n.hoffmann
* @created Sep 8, 2010
* @version 1.0
*/
public class AuthorHelper {
-
- /**
- * <p>getAuthor</p>
- *
- * @param object a {@link java.lang.Object} object.
- * @return a {@link eu.etaxonomy.cdm.model.agent.Team} object.
- */
- public static Team getAuthor(Object object){
- if(object == null){
+
+ /**
+ * 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(object);
+ Object deproxiedObject = HibernateProxyHelper.deproxy(teamOrPerson);
if(deproxiedObject instanceof Person){
Person person = (Person) deproxiedObject;
Team team = Team.NewInstance();
--- /dev/null
+// $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;
+
+
+/**
+ * Interface for handling the current "dirty" state of an object. An object is
+ * dirty when changes are done but not saved/persisted yet.
+ *
+ * @author n.hoffmann
+ * @created Mar 8, 2010
+ * @version 1.0
+ */
+public interface IDirtyMarkable {
+
+ /**
+ * Sets the implementor to the "dirty" state specifying the object that was changed.
+ *
+ * @param element the element that was changed causing the "dirty" state.
+ */
+ public abstract void changed(Object element);
+
+ /**
+ * Forces the implementing class to be set to the "dirty" state.
+ */
+ public abstract void forceDirty();
+}
+++ /dev/null
-// $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;
-
-
-/**
- * <p>IDirtyMarkableSelectionProvider interface.</p>
- *
- * @author n.hoffmann
- * @created Mar 8, 2010
- * @version 1.0
- */
-public interface IDirtyMarkableSelectionProvider {
-
- /**
- * <p>changed</p>
- *
- * @param element a {@link java.lang.Object} object.
- */
- public abstract void changed(Object element);
-}
public static final String DEFAULT_LANGUAGE_EDITOR = "eu.etaxonomy.taxeditor.default.language";
+ /**
+ * Key for the saved P2 repositories
+ */
+ public static final String P2_REPOSITORY_LIST = "eu.etaxonomy.taxeditor.p2.repositories";
+
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import java.util.StringTokenizer;
import java.util.UUID;
import org.apache.commons.lang.StringUtils;
+import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
*/
public static final String PREFERRED_TERMS_CHANGE = "preferred_terms";
+ public static final String P2_REPOSITORIES_DELIM = ",";
+ public static final String P2_REPOSITORY_FIELDS_DELIM = ";";
+
/**
* <p>
* getPreferenceStore
fos.close();
}
+ /**
+ * Saves a list of P2 Metadata Repositories as string with specified delimiters
+ *
+ * @param p2Repos
+ */
+ public static void setP2Repositories(List<MetadataRepositoryElement> p2Repos) {
+ StringBuilder sb = new StringBuilder();
+ for(MetadataRepositoryElement p2Repo : p2Repos) {
+ sb.append(P2_REPOSITORIES_DELIM);
+ if(p2Repo.getName() == null || p2Repo.getName().isEmpty()) {
+ sb.append("-");
+ } else {
+ sb.append(p2Repo.getName());
+ }
+ sb.append(P2_REPOSITORY_FIELDS_DELIM);
+ sb.append(p2Repo.getLocation().toString());
+ sb.append(P2_REPOSITORY_FIELDS_DELIM);
+ sb.append(String.valueOf(p2Repo.isEnabled()));
+ }
+ getPreferenceStore().setValue(P2_REPOSITORY_LIST, sb.toString());
+ }
+
+
+ /**
+ * Retrieves a list of previously saved P2 repositories
+ *
+ * @return
+ */
+ public static List<MetadataRepositoryElement> getP2Repositories() {
+ List<MetadataRepositoryElement> p2Repos = new ArrayList<MetadataRepositoryElement>();
+ String p2ReposPref = getPreferenceStore().getString(P2_REPOSITORY_LIST);
+ if(p2ReposPref != null && !p2ReposPref.isEmpty()) {
+ StringTokenizer p2ReposPrefST = new StringTokenizer(p2ReposPref,P2_REPOSITORIES_DELIM);
+
+ while(p2ReposPrefST.hasMoreTokens()) {
+ String p2RepoStr = p2ReposPrefST.nextToken();
+ StringTokenizer p2ReposStrST = new StringTokenizer(p2RepoStr,P2_REPOSITORY_FIELDS_DELIM);
+ if(p2ReposStrST.countTokens()==3) {
+ String nickname = p2ReposStrST.nextToken();
+ URI uri = null;
+ try {
+ uri = new URI(p2ReposStrST.nextToken());
+ } catch (URISyntaxException e) {
+ continue;
+ }
+ boolean enabled = Boolean.parseBoolean(p2ReposStrST.nextToken());
+ MetadataRepositoryElement mre = new MetadataRepositoryElement(null, uri, true);
+ mre.setNickname(nickname);
+ mre.setEnabled(enabled);
+ p2Repos.add(mre);
+ }
+ }
+ }
+
+ return p2Repos;
+ }
}
import eu.etaxonomy.cdm.model.common.Group;
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
//FIXME:move warning dialogs to the table class
public class CdmAuthorityCompositeViewer extends ContentViewer {
- private IDirtyMarkableSelectionProvider dirtyMarkerEditor;
+ private IDirtyMarkable dirtyMarkerEditor;
private CdmAuthorityComposite cdmAuthorityComposite;
private Group group;
private boolean isDirty = false;
* @param group input data object
*/
public CdmAuthorityCompositeViewer(Composite composite,
- IDirtyMarkableSelectionProvider dirtyMarkerEditor,
+ IDirtyMarkable dirtyMarkerEditor,
Group group) {
this.dirtyMarkerEditor = dirtyMarkerEditor;
this.group = group;
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.model.occurrence.Collection;
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
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.AmplificationCloningWizardPage;
/** {@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();
+ }
return true;
}
import java.util.Observer;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
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.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;
}
private void createControls(Composite parent, int style) {
-
+
label = formFactory.createLabel(getLayoutComposite(), labelString,
SWT.NULL);
private class EditListener extends SelectionAdapter {
- private final EntitySelectionElement<T> selectionElement;
+ 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) {
this.selectionElement = 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){
+ 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{
+ 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);
+ }
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);
}
}
import eu.etaxonomy.taxeditor.editor.ISecuredEditor;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
/**
* <p>
((AbstractCdmViewPart) part).changed(object);
} else {
IEditorPart editor = getEditor();
- if (editor != null && editor instanceof IDirtyMarkableSelectionProvider) {
- ((IDirtyMarkableSelectionProvider) editor).changed(object);
+ if (editor != null && editor instanceof IDirtyMarkable) {
+ ((IDirtyMarkable) editor).changed(object);
}
}
}
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
/**
* @created Jun 15, 2010
* @version 1.0
*/
-public abstract class AbstractCdmViewPart extends ViewPart implements ISelectionListener, IPostOperationEnabled, IConversationEnabled, IDirtyMarkableSelectionProvider{
+public abstract class AbstractCdmViewPart extends ViewPart implements ISelectionListener, IPostOperationEnabled, IConversationEnabled, IDirtyMarkable{
protected ISelectionService selectionService;
selectionService.removeSelectionListener(this);
super.dispose();
}
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
}
</profile>
<profile>
<!-- Upload the repo to the server -->
+ <!-- ATTENTION : This does not work well currently since the file permissions
+ are set with read permission set to off after upload -->
<id>uploadRepo</id>
<build>
<plugins>