taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/OpenExternalAboutPlatformHandler.java -text
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/OpenExternalHelpHandler.java -text
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/OpenExternalParserHelpHandler.java -text
+taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/P2Util.java -text
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Perspective.java -text
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/SaveAllHandler.java -text
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/SaveHandler.java -text
taxeditor-editor/pom.xml -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/AbstractFilteredCdmResourceSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredAgentSelectionDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredClassificationSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredDerivedUnitSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredFieldObservationSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredNameSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredReferenceSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTaxonNodeSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTaxonSelectionDialog.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTaxonomicTreeSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTeamSelectionDialog.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/CdmDataTransfer.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/LoginDialog.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/NewReferenceInputDialog.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/UriDialog.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizard.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizardPage.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizardPage.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowDataSourceViewHandler.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowLoginWindowHandler.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowUserManagerViewHandler.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/labels/ZoologicalNameLabelStrategy.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractDataChangeBehaviour.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ColorFactory.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/CommonHelper.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DataChangeBridge.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/parser/ParseHandler.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferences.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/DescriptionPreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/IPreferenceKeys.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/InitNomenclaturalCodePrefDialog.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/MatchingPreferences.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/ReferenceMatchingPreference.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/TeamOrPersonMatchingPreference.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/AbstractMenuPreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseContentProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseLabelProvider.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/ExtensionTypeMenuPreferences.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/FeatureMenuPreferences.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/LanguageMenuPreferences.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreUtil.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/VocabularyStore.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/internal/TaxeditorStorePlugin.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/AuthenticatedUserBar.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/CreateUserHandler.java -text
Bundle-Localization: plugin
Export-Package: eu.etaxonomy.taxeditor
Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.apache.log4j,
org.eclipse.equinox.app,
org.osgi.framework,
org.osgi.service.packageadmin
-Require-Bundle: org.eclipse.ui;bundle-version="3.5.2",
- org.eclipse.core.runtime;bundle-version="3.5.0",
+Require-Bundle: eu.etaxonomy.taxeditor.store;bundle-version="2.1.0",
eu.etaxonomy.taxeditor.navigation;bundle-version="2.1.0",
eu.etaxonomy.taxeditor.bulkeditor;bundle-version="2.1.0",
eu.etaxonomy.taxeditor.editor;bundle-version="2.1.0",
- eu.etaxonomy.taxeditor.store;bundle-version="2.1.0",
+ eu.etaxonomy.printpublisher.plugin;bundle-version="1.0.0",
+ org.eclipse.core.runtime;bundle-version="3.5.0",
+ org.eclipse.equinox.ds;bundle-version="1.2.0",
+ org.eclipse.equinox.util;bundle-version="1.0.200",
+ org.eclipse.equinox.p2.core;bundle-version="2.0.0",
org.eclipse.equinox.p2.ui;bundle-version="1.0.101",
- org.eclipse.equinox.p2.updatechecker;bundle-version="1.1.0"
+ org.eclipse.equinox.p2.ui.sdk;bundle-version="1.0.100",
+ org.eclipse.equinox.p2.updatechecker;bundle-version="1.1.0",
+ org.eclipse.equinox.p2.operations;bundle-version="2.0.0",
+ org.eclipse.ui;bundle-version="3.5.2"
package eu.etaxonomy.taxeditor;
+import java.lang.reflect.InvocationTargetException;
+
import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.operations.UpdateOperation;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
private static final Logger logger = Logger.getLogger(ApplicationWorkbenchWindowAdvisor.class);
+ private static final String JUSTUPDATED = "justUpdated";
+
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
if(PreferencesUtil.shouldConnectAtStartUp())
CdmStore.initialize();
+
+ automaticUpdate();
+
}
private int authenticate(){
LoginDialog loginDialog = new LoginDialog(shell);
return loginDialog.open();
}
+
+ private void automaticUpdate(){
+ final IProvisioningAgent agent = (IProvisioningAgent) ServiceHelper.getService(TaxonomicEditorPlugin.bundleContext,
+ IProvisioningAgent.SERVICE_NAME);
+ if (agent == null) {
+ logger.error("No provisioning agent found. This application is not set up for updates.");
+ return;
+ }
+ // if we're restarting after updating, don't check again.
+ final IPreferenceStore prefStore = TaxonomicEditorPlugin.getDefault().getPreferenceStore();
+ if (prefStore.getBoolean(JUSTUPDATED)) {
+ prefStore.setValue(JUSTUPDATED, false);
+ return;
+ }
+
+ // check for updates before starting up.
+ // If an update is performed, restart. Otherwise log
+ // the status.
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException {
+ IStatus updateStatus = P2Util.checkForUpdates(agent, monitor);
+ if (updateStatus.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) {
+ PlatformUI.getWorkbench().getDisplay()
+ .asyncExec(new Runnable() {
+ public void run() {
+ MessageDialog.openInformation(null,
+ "Updates", "No updates were found");
+ }
+ });
+ } else if (updateStatus.getSeverity() != IStatus.ERROR) {
+ prefStore.setValue(JUSTUPDATED, true);
+ PlatformUI.getWorkbench().restart();
+ } else {
+ logger.info(updateStatus);
+ }
+ }
+ };
+ try {
+ new ProgressMonitorDialog(null).run(true, true, runnable);
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ }
+ }
}
\ No newline at end of file
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
*/\r
public Object execute(ExecutionEvent event) throws ExecutionException {\r
- String url = "http://wp5.e-taxonomy.eu/taxeditor/TaxonomicEditor-UserManual-Version2.1.pdf";\r
+ String url = "http://wp5.e-taxonomy.eu/download/taxeditor/stable/EDITTaxonomicEditor-UserManual.pdf";\r
\r
try {\r
PlatformUI.getWorkbench().getBrowserSupport().createBrowser\r
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package eu.etaxonomy.taxeditor;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.operations.ProvisioningJob;
+import org.eclipse.equinox.p2.operations.ProvisioningSession;
+import org.eclipse.equinox.p2.operations.UpdateOperation;
+
+/**
+ * This class shows an example for checking for updates and performing the
+ * update synchronously. It is up to the caller to run this in a job if
+ * a background update check is desired. This is a reasonable way to run an
+ * operation when user intervention is not required. Another approach is
+ * to separately perform the resolution and provisioning steps, deciding
+ * whether to perform these synchronously or in a job.
+ *
+ * Any p2 operation can be run modally (synchronously), or the job
+ * can be requested and scheduled by the caller.
+ *
+ * @see UpdateOperation#resolveModal(IProgressMonitor)
+ * @see UpdateOperation#getResolveJob(IProgressMonitor)
+ * @see UpdateOperation#getProvisioningJob(IProgressMonitor)
+ */
+public class P2Util {
+ // XXX Check for updates to this application and return a status.
+ static IStatus checkForUpdates(IProvisioningAgent agent, IProgressMonitor monitor) throws OperationCanceledException {
+ ProvisioningSession session = new ProvisioningSession(agent);
+ // the default update operation looks for updates to the currently
+ // running profile, using the default profile root marker. To change
+ // which installable units are being updated, use the more detailed
+ // constructors.
+ UpdateOperation operation = new UpdateOperation(session);
+ SubMonitor sub = SubMonitor.convert(monitor,
+ "Checking for application updates...", 200);
+ IStatus status = operation.resolveModal(sub.newChild(100));
+ if (status.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) {
+ return status;
+ }
+ if (status.getSeverity() == IStatus.CANCEL)
+ throw new OperationCanceledException();
+
+ if (status.getSeverity() != IStatus.ERROR) {
+ // More complex status handling might include showing the user what updates
+ // are available if there are multiples, differentiating patches vs. updates, etc.
+ // In this example, we simply update as suggested by the operation.
+ ProvisioningJob job = operation.getProvisioningJob(null);
+ status = job.runModal(sub.newChild(100));
+ if (status.getSeverity() == IStatus.CANCEL)
+ throw new OperationCanceledException();
+ }
+ return status;
+ }
+}
private ServiceReference packageAdminRef;
- private BundleContext bundleContext;
+ protected static BundleContext bundleContext;
private ServiceRegistration policyRegistration;
org.eclipse.core.expressions,
eu.etaxonomy.cdmlib;bundle-version="2.3.0",
eu.etaxonomy.taxeditor.store;bundle-version="2.1.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.core.runtime,
org.eclipse.equinox.app,
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;\r
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
import eu.etaxonomy.taxeditor.store.CdmStore;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
\r
/**\r
* @author p.ciardelli\r
* @return\r
*/\r
private boolean isEditableMarkerTypes() { \r
- for (MarkerType markerType : VocabularyStore.getNonTechnicalMarkerTypes()) {\r
+ for (MarkerType markerType : TermStore.getNonTechnicalMarkerTypes()) {\r
if (((AbstractBulkEditorInput) getEditorInput()).isMarkerTypeEditingEnabled(markerType)) {\r
return true;\r
}\r
* @see eu.etaxonomy.taxeditor.bulkeditor.ILineDisplayStrategy#getText(java.lang.Object)\r
*/\r
public String getText(Object entity) { \r
+ String text = null;\r
+ \r
if(entity instanceof IdentifiableEntity){\r
IdentifiableEntity identifiableEntity = (IdentifiableEntity) HibernateProxyHelper.deproxy(entity);\r
- String text = identifiableEntity.getTitleCache();\r
- return text == null ? "" : text;\r
+ if(identifiableEntity instanceof TaxonNameBase){\r
+ // TODO it is not very nice to do this here. Please refactor\r
+ text = ((TaxonNameBase) identifiableEntity).getFullTitleCache();\r
+ }else{\r
+ text = identifiableEntity.getTitleCache();\r
+ }\r
}\r
\r
- return "";\r
+ return text == null ? "" : text;\r
}\r
\r
\r
import eu.etaxonomy.cdm.model.common.MarkerType;\r
import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;\r
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
\r
/**\r
* @author p.ciardelli\r
gridLayout.marginWidth = 12;\r
setLayout(gridLayout);\r
\r
- for (final MarkerType markerType : VocabularyStore.getNonTechnicalMarkerTypes()) {\r
+ for (final MarkerType markerType : TermStore.getNonTechnicalMarkerTypes()) {\r
if (editorInput.isMarkerTypeEditingEnabled(markerType)) {\r
final Button button = new Button(this, SWT.CHECK);\r
button.setText("Edit " + markerType.getLabel() + " markers");\r
\r
// TODO user role determines which editor inputs are returned\r
for (BulkEditorInputType inputType : BulkEditorInputType.values()){\r
- // do not add the occurrence bulk editor\r
- if(! inputType.label.equals(BulkEditorInputType.OCCURRENCE.label))\r
- values.put(inputType.label, inputType.id);\r
+ values.put(inputType.label, inputType.id);\r
} \r
\r
return values;\r
import eu.etaxonomy.cdm.model.common.MarkerType;\r
import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;\r
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
\r
/**\r
* @author p.ciardelli\r
IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();\r
if (editor.getEditorInput() instanceof AbstractBulkEditorInput) {\r
AbstractBulkEditorInput input = (AbstractBulkEditorInput) editor.getEditorInput(); \r
- for (final MarkerType markerType : VocabularyStore.getNonTechnicalMarkerTypes()) {\r
+ for (final MarkerType markerType : TermStore.getNonTechnicalMarkerTypes()) {\r
if (input.isMarkerTypeEditingEnabled(markerType) && PreferencesUtil.getEditMarkerTypePreference(input, markerType)) {\r
contributions.add(new ContributionItem() {\r
/* (non-Javadoc)\r
import org.eclipse.swt.graphics.Image;\r
\r
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
\r
/**\r
*/\r
public String getColumnText(Object element, int columnIndex) {\r
String text = null;\r
+ \r
+ Object deproxiedElement = HibernateProxyHelper.deproxy(element);\r
+ \r
if (columnIndex == 0) {\r
- text = (HibernateProxyHelper.deproxy(element)).getClass().getSimpleName();\r
- }\r
- if (columnIndex == 1) {\r
- text = DescriptionHelper.getObjectDescription(element);\r
+ text = DescriptionHelper.getObjectClassname(deproxiedElement);\r
+ }else if (columnIndex == 1) {\r
+ text = DescriptionHelper.getObjectDescription(deproxiedElement);\r
+ }else if (columnIndex == 2) {\r
+ if(element instanceof CdmBase){\r
+ text = ((CdmBase) element).getUuid().toString();\r
+ }\r
+ }else if (columnIndex == 3) {\r
+ if(element instanceof CdmBase){\r
+ text = ((CdmBase) element).getId() + "";\r
+ }\r
}\r
+ \r
return text == null ? element.toString() : text;\r
+ \r
}\r
}\r
\r
package eu.etaxonomy.taxeditor.bulkeditor.referencingobjects;\r
\r
-import java.lang.reflect.InvocationTargetException;\r
import java.util.ArrayList;\r
import java.util.Collections;\r
import java.util.Comparator;\r
import org.eclipse.core.runtime.IStatus;\r
import org.eclipse.core.runtime.Status;\r
import org.eclipse.core.runtime.jobs.Job;\r
-import org.eclipse.jface.operation.IRunnableWithProgress;\r
import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
import org.eclipse.jface.viewers.TableViewer;\r
import org.eclipse.jface.viewers.TableViewerColumn;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
import org.eclipse.swt.widgets.Table;\r
import org.eclipse.ui.ISelectionListener;\r
import org.eclipse.ui.ISelectionService;\r
import org.eclipse.ui.part.ViewPart;\r
\r
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
-import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;\r
-import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorUtil;\r
import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
import eu.etaxonomy.taxeditor.model.LineSelection;\r
import eu.etaxonomy.taxeditor.store.CdmStore;\r
\r
private CdmBase referencedObject;\r
\r
- private ArrayList<CdmBase> referencingObjects;\r
-\r
\r
public ReferencingObjectsView() {}\r
\r
// This will create the columns for the table\r
private void createColumns(TableViewer viewer) {\r
Table table = viewer.getTable();\r
- String[] titles = {"Class", "Description" };\r
- int[] bounds = { 100, 200 };\r
+ String[] titles = {"Class", "Description", "UUID", "Object ID" };\r
+ int[] bounds = { 100, 200, 100, 70};\r
\r
for (int i = 0; i < titles.length; i++) {\r
TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);\r
* \r
*/\r
public void updateReferencingObjects(final IdentifiableEntity entity) {\r
-// IEditorPart editor = getSite().getPage().getActiveEditor();\r
-// ISelection selection = editor.getEditorSite().getSelectionProvider()\r
-// .getSelection();\r
-//\r
-// if ((selection != null) && selection instanceof LineSelection) {\r
-// final Object entity = ((IStructuredSelection) selection).getFirstElement();\r
+ \r
+ final Display display = Display.getCurrent();\r
\r
Job job = new Job("Update Referencing Objects") {\r
\r
@Override\r
protected IStatus run(IProgressMonitor monitor) {\r
monitor.beginTask("Calculating referencing objects", 10);\r
- ConversationHolder conversation = CdmStore.createConversation();\r
- conversation.bind();\r
+ \r
monitor.worked(3);\r
- doUpdateReferencingObjects(entity);\r
+ \r
+ \r
+ display.asyncExec(new Runnable() {\r
+ \r
+ @Override\r
+ public void run() {\r
+ ConversationHolder conversation = CdmStore.createConversation();\r
+ List<CdmBase> referencingObjects = getReferencingObjects(entity);\r
+ updateView(referencingObjects);\r
+ conversation.close();\r
+ }\r
+ });\r
+ \r
monitor.done();\r
- conversation.close();\r
+ \r
+ \r
return Status.OK_STATUS;\r
}\r
};\r
- \r
- IRunnableWithProgress runnable = new IRunnableWithProgress() {\r
- \r
- public void run(IProgressMonitor monitor) throws InvocationTargetException,\r
- InterruptedException {\r
- monitor.beginTask("Calculating referencing objects", 10);\r
- ConversationHolder conversation = CdmStore.createConversation();\r
- conversation.bind();\r
- monitor.worked(3);\r
- doUpdateReferencingObjects(entity);\r
- monitor.done();\r
- conversation.close();\r
- }\r
- };\r
- \r
-// BulkEditorUtil.busyCursorWhile(runnable);\r
- \r
-// BulkEditorUtil.runAsynchroneously(runnable);\r
- \r
+ \r
job.schedule();\r
\r
- updateView();\r
+ \r
}\r
\r
- private void doUpdateReferencingObjects(Object entity) {\r
+ private List<CdmBase> getReferencingObjects(Object entity) {\r
try {\r
if(entity instanceof CdmBase){\r
referencedObject = (CdmBase) entity;\r
Set<CdmBase> setOfReferencingObjects = CdmStore.getCommonService().getReferencingObjects(referencedObject);\r
\r
- referencingObjects = new ArrayList<CdmBase>(setOfReferencingObjects);\r
+ List<CdmBase> referencingObjects = new ArrayList<CdmBase>(setOfReferencingObjects); \r
\r
Collections.sort(referencingObjects, new ReferencingClassComparator());\r
+ \r
+ return referencingObjects;\r
}\r
} catch (Exception e) {\r
logger.error("Error retrieving referencing objects", e);\r
}\r
+ return null;\r
}\r
\r
class ReferencingClassComparator implements Comparator<CdmBase> {\r
/**\r
* \r
*/\r
- private void updateView() {\r
+ private void updateView(List<CdmBase> referencingObjects) {\r
referencingObjectsViewer.setInput(referencingObjects);\r
setContentDescription("'" + referencedObject + "' is referenced by:");\r
}\r
@Override\r
public void dispose() {\r
selectionService.removePostSelectionListener(this);\r
+ selectionService.removeSelectionListener(this);\r
super.dispose();\r
}\r
\r
eu.etaxonomy.taxeditor.section.reference,
eu.etaxonomy.taxeditor.section.supplemental,
eu.etaxonomy.taxeditor.section.taxon
-Require-Bundle: org.eclipse.ui;bundle-version="3.4.1",
+Require-Bundle: org.eclipse.ui;bundle-version="3.5.2",
org.eclipse.core.runtime;bundle-version="3.5.0",
org.eclipse.core.expressions;bundle-version="3.4.0",
org.eclipse.ui.forms;bundle-version="3.4.1",
- eu.etaxonomy.cdmlib;bundle-version="2.3.0",
+ eu.etaxonomy.cdmlib;bundle-version="2.4.0",
eu.etaxonomy.taxeditor.store;bundle-version="2.1.0",
eu.etaxonomy.taxeditor.bulkeditor;bundle-version="2.1.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.core.databinding.beans,
org.eclipse.core.databinding.observable.list,
org.eclipse.jface.text.source,
org.eclipse.ui.forms.widgets,
org.eclipse.ui.texteditor,
- org.eclipse.ui.views.properties.tabbed,
org.osgi.framework
id="eu.etaxonomy.taxeditor.new.person"
name="Person">
</wizard>
- <!--wizard
+ <wizard
category="eu.etaxonomy.taxeditor.new.category.cdm"
class="eu.etaxonomy.taxeditor.editor.newWizard.NewDerivedUnitBaseWizard"
hasPages="true"
id="eu.etaxonomy.taxeditor.new.specimen"
name="Specimen">
- </wizard-->
+ </wizard>
</extension>
<extension
point="org.eclipse.ui.menus">
label="Person"
style="push">
</command>
- <!--command
+ <command
commandId="eu.etaxonomy.taxeditor.editor.command.new.specimen"
label="Specimen"
style="push">
- </command-->
+ </command>
</menuContribution>
</extension>
<extension
* @created Sep 21, 2009
* @version 1.0
*/
-public class FilteredTaxonomicTreeSelectionDialog extends
+public class FilteredClassificationSelectionDialog extends
AbstractFilteredCdmResourceSelectionDialog<TaxonomicTree> {
private static final Logger logger = Logger
- .getLogger(FilteredTaxonomicTreeSelectionDialog.class);
+ .getLogger(FilteredClassificationSelectionDialog.class);
/**
* @return
*/
public static TaxonomicTree selectTaxonomicTree(Shell shell, ConversationHolder conversation) {
- FilteredTaxonomicTreeSelectionDialog dialog = new FilteredTaxonomicTreeSelectionDialog(shell, conversation,
- "Choose a taxonomic tree", false, "", null);
+ FilteredClassificationSelectionDialog dialog = new FilteredClassificationSelectionDialog(shell, conversation,
+ "Choose a Classification", false, "", null);
return getSelectionFromDialog(dialog);
}
* @param multi
* @param settings
*/
- protected FilteredTaxonomicTreeSelectionDialog(Shell shell, ConversationHolder conversation, String title,
- boolean multi, String settings, TaxonomicTree tree) {
- super(shell, conversation, title, multi, settings, tree);
+ protected FilteredClassificationSelectionDialog(Shell shell, ConversationHolder conversation, String title,
+ boolean multi, String settings, TaxonomicTree classification) {
+ super(shell, conversation, title, multi, settings, classification);
}
/* (non-Javadoc)
private Control createTreeSelectionCombo(Composite parent){\r
// classifications = CdmStore.getTaxonTreeService().list(null, null, null, null, null);\r
\r
- Composite taxonomicTreeSelection = new Composite(parent, SWT.NULL);\r
- taxonomicTreeSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
+ Composite classificationSelection = new Composite(parent, SWT.NULL);\r
+ classificationSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
\r
GridLayout layout = new GridLayout();\r
- taxonomicTreeSelection.setLayout(layout);\r
+ classificationSelection.setLayout(layout);\r
\r
- Label label = new Label(taxonomicTreeSelection, SWT.NULL);\r
+ Label label = new Label(classificationSelection, SWT.NULL);\r
// TODO not working is not really true but leave it there to remind everyone that this is under construction\r
- label.setText("Select Taxonomic Tree (not completely working at the moment)");\r
- classificationSelectionCombo = new Combo(taxonomicTreeSelection, SWT.BORDER | SWT.READ_ONLY);\r
+ label.setText("Select Classification (experimental)");\r
+ classificationSelectionCombo = new Combo(classificationSelection, SWT.BORDER | SWT.READ_ONLY);\r
classificationSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
\r
for(TaxonomicTree tree : classifications){\r
\r
classificationSelectionCombo.addSelectionListener(this);\r
\r
- return taxonomicTreeSelection;\r
+ return classificationSelection;\r
}\r
\r
@Override\r
import org.eclipse.jface.dialogs.MessageDialog;\r
import org.eclipse.jface.viewers.ISelection;\r
import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.swt.widgets.Display;\r
import org.eclipse.swt.widgets.Shell;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IEditorPart;\r
open(input);\r
}\r
\r
- /**\r
- * Taxon Editors may be opened by supplying a taxon uuid only.\r
- * Session gets initialised here and is passed to the editor\r
- * \r
- * @param taxonNodeUuid\r
- * @return\r
- * @throws PartInitException \r
- */\r
- public static void openTaxon(UUID taxonUuid) throws PartInitException {\r
- TaxonEditorInput input = TaxonEditorInput.NewInstanceFromTaxon(taxonUuid); \r
- open(input);\r
- }\r
- \r
public static void openTaxonBase(UUID taxonBaseUuid) throws PartInitException {\r
TaxonEditorInput input = TaxonEditorInput.NewInstanceFromTaxonBase(taxonBaseUuid); \r
open(input);\r
private ConversationHolder conversation;
- private static List<String> propertyPaths = Arrays.asList(new String[]{"*",
- "taxonomicTree.*",
- "referenceForParentChildRelation.*",
- "taxon.*",
- "taxon.relationsFromThisTaxon.*",
- "taxon.relationsToThisTaxon.*",
- //
- "taxon.synonymRelations.synonym.name.*",
- "taxon.synonymRelations.synonym.name.nomenclaturalReference.*",
- "taxon.synonymRelations.synonym.name.combinationAuthorTeam.*",
- "taxon.synonymRelations.synonym.name.exCombinationAuthorTeam.*",
- "taxon.synonymRelations.synonym.name.basionymAuthorTeam.*",
- "taxon.synonymRelations.synonym.name.exBasionymAuthorTeam.*",
- //
- "taxon.name.*",
- "taxon.name.homotypicalGroup.*",
- "taxon.name.nomenclaturalReference.*",
- "taxon.name.combinationAuthorTeam.*",
- "taxon.name.exCombinationAuthorTeam.*",
- "taxon.name.basionymAuthorTeam.*",
- "taxon.name.exBasionymAuthorTeam.*"});
-
private TaxonNode taxonNode;
private TaxonEditorInputDataChangeBehaviour dataChangeBehavior;
+ private TaxonBase initiallySelectedTaxonBase;
+
private TaxonEditorInput(TaxonNode taxonNode, ConversationHolder conversation){
this.conversation = conversation;
this.taxonNode = taxonNode;
return new TaxonEditorInput(taxonNode, conversation);
}
- @Deprecated
- public static TaxonEditorInput NewInstanceFromTaxon(UUID taxonUuid){
- ConversationHolder conversation = CdmStore.createConversation();
-
- Taxon taxon = (Taxon) CdmStore.getTaxonService().find(taxonUuid);
-
- if(taxon.isMisappliedName()){
- logger.warn("Mispplied Name in Search Result");
- }
-
- return getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
- }
-
public static TaxonEditorInput NewInstanceFromTaxonBase(UUID taxonBaseUuid){
ConversationHolder conversation = CdmStore.createConversation();
+ TaxonEditorInput input = null;
+
TaxonBase taxonBase = CdmStore.getTaxonService().find(taxonBaseUuid);
if(taxonBase instanceof Taxon){
acceptedTaxa.add(relation.getToTaxon());
}
}
- return getInputForMultipleTaxa(conversation, acceptedTaxa);
+ input = getInputForMultipleTaxa(conversation, acceptedTaxa);
}else{
- return getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
+ input = getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
}
}else if(taxonBase instanceof Synonym){
Synonym synonym = (Synonym) taxonBase;
Set<Taxon> taxa = synonym.getAcceptedTaxa();
- return getInputForMultipleTaxa(conversation, taxa);
+ input = getInputForMultipleTaxa(conversation, taxa);
}
- return null;
+
+ input.setInitiallySelectedTaxonBase(taxonBase);
+
+ return input;
}
-
- private static TaxonEditorInput getInputForMultipleNodes(ConversationHolder conversation, Set<TaxonNode> taxonNodes){
+
+
+
+
+ private static TaxonEditorInput getInputForMultipleNodes(ConversationHolder conversation, Set<TaxonNode> taxonNodes){
if(taxonNodes.size() == 1){
TaxonNode taxonNode = taxonNodes.iterator().next();
return NewInstance(taxonNode.getUuid(), conversation);
public void saveState(IMemento memento) {
TaxonEditorInputFactory.saveState(memento, this);
}
+
+
+ private void setInitiallySelectedTaxonBase(TaxonBase taxonBase) {
+ this.initiallySelectedTaxonBase = taxonBase;
+ }
+
+ public TaxonBase getInitiallySelectedTaxonBase() {
+ return initiallySelectedTaxonBase;
+ }
}
import eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage;\r
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
import eu.etaxonomy.taxeditor.editor.SimpleSelectionProvider;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
import eu.etaxonomy.taxeditor.model.IPartChangeListener;\r
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;\r
import eu.etaxonomy.taxeditor.model.TaxeditorPartService;\r
\r
public AbstractGroupedContainer getSelectedObject(){\r
if(selectedObject == null){\r
+ TaxonEditorInput input = (TaxonEditorInput) editor.getEditorInput();\r
+ \r
+ if(input.getInitiallySelectedTaxonBase() != null){\r
+ TaxonBase initiallySelectedTaxonBase = input.getInitiallySelectedTaxonBase();\r
+ AbstractGroupedContainer container = getContainerForData(initiallySelectedTaxonBase);\r
+ if(container != null){\r
+ return container;\r
+ }\r
+ }\r
+ \r
return acceptedNameContainer;\r
}else{\r
return selectedObject;\r
ILabelImageStrategy strategy = LabelImageProvider.getLabelStrategy(name);\r
LabelImageProvider labelProvider = new LabelImageProvider(strategy);\r
return (name.isGroupsBasionym() ? "Remove" : "Set")\r
- + " as " + labelProvider.getNameRelationTypeDescription(NameRelationshipType.BASIONYM()) + " for Group";\r
+ + " as " + labelProvider.getNameRelationTypeDescription(NameRelationshipType.BASIONYM()) + " for Homotypic Group";\r
}\r
}
\ No newline at end of file
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.forms.IFormPart;
import org.eclipse.ui.forms.ManagedForm;
-import org.eclipse.ui.forms.events.IExpansionListener;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import org.eclipse.ui.IWorkbenchPart;
import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.description.DescriptionBase;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
import eu.etaxonomy.cdm.model.description.Feature;
import eu.etaxonomy.cdm.model.description.TaxonDescription;
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
public boolean postOperation(CdmBase objectAffectedByOperation) {
boolean result = super.postOperation(objectAffectedByOperation);
- StructuredSelection selection;
- if(objectAffectedByOperation == null){
- selection = new StructuredSelection();
- }else {
- selection = new StructuredSelection(objectAffectedByOperation);
+ if(objectAffectedByOperation != null){
+
+ if(objectAffectedByOperation instanceof DescriptionElementBase){
+ DescriptionElementBase descriptionElement = (DescriptionElementBase) objectAffectedByOperation;
+ TaxonDescriptionFeature taxonDescriptionFeature = getTaxonDescriptionFeatureForDescriptionElement(descriptionElement);
+ descriptionViewer.expandToLevel(taxonDescriptionFeature, 1);
+ }
+
+ StructuredSelection selection = new StructuredSelection(objectAffectedByOperation);
+ descriptionViewer.setSelection(selection, true);
}
- descriptionViewer.setSelection(selection, true);
-
-
+
return result;
}
}
+ private TaxonDescriptionFeature getTaxonDescriptionFeatureForDescriptionElement(DescriptionElementBase descriptionElement){
+ Map<Feature, TaxonDescriptionFeature> map = descriptionFeatureCache.get(descriptionElement.getInDescription());
+ return map.get(descriptionElement.getFeature());
+ }
public boolean onComplete() {
// TODO Auto-generated method stub
private void createNameSections(RootElement parent) {
destroySections();
- AbstractFormSection nameDetailSection =
+ AbstractFormSection nonViralNameSection =
formFactory.createCdmDetailSection(DetailType.NONVIRALNAME, getConversationHolder(), parent, this, Section.EXPANDED);
- addPart(nameDetailSection);
+ formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+ AbstractFormSection referenceBaseDetailSection =
+ formFactory.createCdmDetailSection(DetailType.NOMENCLATURALREFERENCE, getConversationHolder(), parent, this, Section.TWISTIE);
+
+ formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+ AbstractFormSection nomenclaturalStatusSection =
+ formFactory.createEntityDetailSection(EntityDetailType.NOMENCLATURALSTATUS, getConversationHolder(), parent, Section.TWISTIE);
+
+ formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+ AbstractFormSection protologSection =
+ formFactory.createEntityDetailSection(EntityDetailType.PROTOLOG, getConversationHolder(), parent, Section.TWISTIE);
+
+ formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+ AbstractFormSection typeDesignationSection =
+ formFactory.createEntityDetailSection(EntityDetailType.TYPEDESIGNATION, getConversationHolder(), parent, Section.TWISTIE);
+
+ formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+ AbstractFormSection nameRelationshipSection =
+ formFactory.createEntityDetailSection(EntityDetailType.NAME_RELATIONSHIP, getConversationHolder(), parent, Section.TWISTIE);
+
+ formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+ addPart(nonViralNameSection);
+ addPart(nomenclaturalStatusSection);
+ addPart(protologSection);
+ addPart(referenceBaseDetailSection);
+ addPart(typeDesignationSection);
+ addPart(nameRelationshipSection);
}
private void createReferenceSections(RootElement parent) {
return conversation;
}
+ @Override
+ public void dispose() {
+ super.dispose();
+ detailElement.removeElements();
+ }
+
public void update(CdmDataChangeMap changeEvents) {}
}
String freeText = text_freeText.getText();
timePeriod = TimePeriod.parseString(freeText);
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
}else if(eventSource == section_dateDetails){
timePeriod = section_dateDetails.getTimePeriod();
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
}
+
+
+ }
+
+ /**
+ * @param timePeriod the timePeriod to set
+ */
+ public void setTimePeriod(TimePeriod timePeriod) {
+ this.timePeriod = timePeriod;
+ }
+
+ /**
+ * @return the timePeriod
+ */
+ public TimePeriod getTimePeriod() {
+ return timePeriod;
}
}
button_selection = formFactory.createButton(selectableComposite, null, SWT.PUSH);
button_selection.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
- button_selection.setToolTipText("Browse existing entities");
+ button_selection.setToolTipText("Browse existing");
addControl(button_selection);
button_selection.addSelectionListener(this);
if(isEditable){
button_edit = formFactory.createButton(selectableComposite, null, SWT.PUSH);
button_edit.setImage(ImageResources.getImage(ImageResources.EDIT_ICON));
- button_edit.setToolTipText("Edit entity");
+ button_edit.setToolTipText("Edit");
addControl(button_edit);
}
if(isDeletable){
button_remove = formFactory.createButton(selectableComposite, null, SWT.PUSH);
button_remove.setImage(ImageResources.getImage(ImageResources.TRASH_ICON));
- button_remove.setToolTipText("Remove entity");
+ button_remove.setToolTipText("Remove");
addControl(button_remove);
button_remove.addSelectionListener(new DeleteListener(this));
}
* Updates this elements view
*/
protected void updateElement(){
- text.setText(CdmUtils.Nz(getTitle())); // title can be null
+ String title = CdmUtils.Nz(getTitle());
+ text.setText(title); // title can be null
if(isEditable){
button_edit.setEnabled(entity != null);
}
*/
@Override
public boolean performFinish() {
+ page.dispose();
return true;
}
import eu.etaxonomy.cdm.model.description.TextData;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
-import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory.DetailType;
+import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
import eu.etaxonomy.taxeditor.operations.ChangeDescriptionElementType;
-import eu.etaxonomy.taxeditor.operations.ChangeDescriptionElementType.DestinationType;
import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
import eu.etaxonomy.taxeditor.store.CdmStore;
public DescriptionElementDetailSection(CdmFormFactory cdmFormFactory, ConversationHolder conversation,
ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
super(cdmFormFactory, conversation, parentElement, selectionProvider, style);
-
- setTextClient(createToolbar());
}
private Control createToolbar() {
+ if(! hasSpecificElement()){
+ return null;
+ }
+
ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
final String destinationString = (getEntity() instanceof TextData) ? "the specific element" : "free text";
*/
@Override
public void run() {
- boolean confirmed = EditorUtil.confirmDialog("Confirmation", "Do you really want to change to " + destinationString + "? Current data will be lost.");
+ boolean confirmed = EditorUtil.confirmDialog("Confirmation", "Do you really want to change to "
+ + destinationString + "? Current data will be lost.");
if (confirmed) {
- ChangeDescriptionElementType operation = new ChangeDescriptionElementType(label, getEntity(), EditorUtil.getDetailsView(), EditorUtil.getActiveMultiPageTaxonEditor().getUndoContext());
+ ChangeDescriptionElementType operation = new ChangeDescriptionElementType(label,
+ getEntity(), EditorUtil.getDetailsView(), EditorUtil.getActiveMultiPageTaxonEditor().getUndoContext());
EditorUtil.executeOperation(operation);
}
}
@Override
protected void setSectionTitle() {
this.setText(getHeading() + ": " + getEntity().getFeature().getLabel(CdmStore.getDefaultLanguage()));
+ setTextClient(createToolbar());
+ }
+
+ private boolean hasSpecificElement(){
+ return getEntity().getFeature().isSupportsCategoricalData()
+ || getEntity().getFeature().isSupportsCommonTaxonName()
+ || getEntity().getFeature().isSupportsDistribution()
+ || getEntity().getFeature().isSupportsIndividualAssociation()
+ || getEntity().getFeature().isSupportsQuantitativeData()
+ || getEntity().getFeature().isSupportsTaxonInteraction();
}
}
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
import eu.etaxonomy.cdm.model.name.NonViralName;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
import eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent;
import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
import eu.etaxonomy.taxeditor.forms.IEnableableFormElement;
import eu.etaxonomy.taxeditor.forms.ToggleableTextElement;
-import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
import eu.etaxonomy.taxeditor.forms.selection.AbstractSelectionElement;
+import eu.etaxonomy.taxeditor.model.AuthorHelper;
import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
protected void createControls(ICdmFormElement formElement, NonViralName entity, int style) {
toggleable_cache = formFactory.createToggleableTextField(this, "Authorship Cache", entity.getAuthorshipCache(), entity.isProtectedAuthorshipCache(), style);
- selection_combinationAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), formElement, "Combination Author Team", getAuthor(entity.getCombinationAuthorTeam()), style);
+ selection_combinationAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(),
+ formElement, "Combination Author", AuthorHelper.getAuthor(entity.getCombinationAuthorTeam()), style);
addElement(selection_combinationAuthorTeam);
- selection_exCombinationAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), formElement, "Ex Combination Author Team",getAuthor(entity.getExCombinationAuthorTeam()), style);
+ selection_exCombinationAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(),
+ formElement, "Ex Combination Author", AuthorHelper.getAuthor(entity.getExCombinationAuthorTeam()), style);
addElement(selection_exCombinationAuthorTeam);
- selection_basionymAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), formElement, "Basionym Author Team", getAuthor(entity.getBasionymAuthorTeam()), style);
+ selection_basionymAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(),
+ formElement, "Basionym Author", AuthorHelper.getAuthor(entity.getBasionymAuthorTeam()), style);
addElement(selection_basionymAuthorTeam);
- selection_exBasionymAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), formElement, "Ex Basionym Author Team", getAuthor(entity.getExBasionymAuthorTeam()), style);
+ selection_exBasionymAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(),
+ formElement, "Ex Basionym Author", AuthorHelper.getAuthor(entity.getExBasionymAuthorTeam()), style);
addElement(selection_exBasionymAuthorTeam);
}
if(getParentElement() instanceof AbstractCdmDetailSection)
firePropertyChangeEvent(new CdmPropertyChangeEvent(getParentElement(), null));
}
-
- private TeamOrPersonBase getAuthor(Object object){
- if(object == null){
- return null;
- }
- Object deproxiedObject = HibernateProxyHelper.deproxy(object);
- 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");
- }
- }
}
import eu.etaxonomy.cdm.model.name.ZoologicalName;
import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.Page;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory.TermComboType;
import eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent;
import eu.etaxonomy.taxeditor.forms.CheckboxElement;
import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
import eu.etaxonomy.taxeditor.forms.SelectionArbitrator;
import eu.etaxonomy.taxeditor.forms.TextWithLabelElement;
import eu.etaxonomy.taxeditor.forms.ToggleableTextElement;
-import eu.etaxonomy.taxeditor.forms.CdmFormFactory.TermComboType;
import eu.etaxonomy.taxeditor.forms.term.AbstractTermComboElement;
import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
protected void clearCheckRankWarnings() {
if(getEntity().hasProblem(ParserProblem.CheckRank)){
getEntity().removeParsingProblem(ParserProblem.CheckRank);
+
+ TaxonNameEditor nameEditor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
+ nameEditor.getSelectedObject().getNameViewer().clearErrors();
}
}
if(eventSource == combo_rank){
getEntity().setRank(combo_rank.getSelection());
clearCheckRankWarnings();
+ // TODO
+ logger.warn("Refreshing the details view at this stage may lead to 'Widget is disposed' errors. They can be ignored.");
EditorUtil.refreshDetailsViewer();
}
else if(eventSource == text_appendedPhrase){
((BotanicalName)getEntity()).setAnamorphic(checkbox_anamorphic.getSelection());
}
+
if(eventSource != toggleable_cache){
- toggleable_cache.setText(getEntity().getTitleCache());
+ toggleable_cache.setText(getEntity().getNameCache());
}
// we have to notify the parent if this is embedded in the nonviral name section
@Override
protected void createControls(ICdmFormElement formElement,
NonViralName entity, int style) {
- toggleable_cache = formFactory.createToggleableTextField(formElement, "Cache", entity.getTitleCache(), entity.isProtectedTitleCache(), style);
+ toggleable_cache = formFactory.createToggleableTextField(formElement, "Cache", entity.getTitleCache(), entity.isProtectedTitleCache() || entity.isProtectedFullTitleCache(), style);
combo_nomenclaturalCode = (NomenclaturalCodeComboElement) formFactory.createEnumComboElement(EnumComboType.NOMENCLATURALCODE, formElement, style);
combo_nomenclaturalCode.setSelection(entity.getNomenclaturalCode());
public void removeElements() {
super.removeElements();
if(section_name != null){
+ section_name.removeElements();
removeControl(section_name);
section_name.dispose();
section_name = null;
}
if(section_author != null){
+ section_author.removeElements();
removeControl(section_author);
section_author.dispose();
section_author = null;
public void handleEvent(Object eventSource) {
if(eventSource == toggleable_cache){
getEntity().setTitleCache(toggleable_cache.getText(), toggleable_cache.getState());
+ // we never want the fullTitleCache to be protected since we only use it for
+ // initiating the free text name editor
+ getEntity().setProtectedFullTitleCache(false);
boolean irrelevant = toggleable_cache.getState();
List<Object> except = Arrays.asList(new Object[]{toggleable_cache});
setIrrelevant(irrelevant, except);
private static final Logger logger = Logger
.getLogger(NonViralNameWizardPage.class);
+ private NonViralNameDetailElement nameElement;
public NonViralNameWizardPage(CdmFormFactory formFactory, ConversationHolder conversation,
NonViralName entity) {
@Override
public AbstractCdmDetailElement createElement(ICdmFormElement rootElement) {
- NonViralNameDetailElement nameElement = (NonViralNameDetailElement) formFactory.createCdmDetailElement(DetailType.NONVIRALNAME, rootElement, SWT.NULL);
+ nameElement = (NonViralNameDetailElement) formFactory.createCdmDetailElement(DetailType.NONVIRALNAME, rootElement, SWT.NULL);
nameElement.setEntity(entity);
return nameElement;
}
+
+ @Override
+ public void dispose() {
+ nameElement.removeElements();
+ super.dispose();
+ }
}
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
import eu.etaxonomy.cdm.model.description.TextData;
import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
* @created Nov 5, 2009
* @version 1.0
*/
-public class ProtologueSection extends AbstractEntityCollectionSection<TaxonNameDescription, DescriptionElementBase> implements ITaxonDetailSection{
+public class ProtologueSection extends AbstractEntityCollectionSection<TaxonNameBase, DescriptionElementBase> implements ITaxonDetailSection{
private static final Logger logger = Logger
.getLogger(ProtologueSection.class);
@Override
public Collection<DescriptionElementBase> getCollection(
- TaxonNameDescription entity) {
+ TaxonNameBase entity) {
if(entity != null){
- return entity.getElements();
+ return getTaxonNameDescription(entity).getElements();
}
return null;
}
@Override
public void addElement(DescriptionElementBase element) {
- getEntity().addElement(element);
+ getTaxonNameDescription(getEntity()).addElement(element);
}
@Override
public void removeElement(DescriptionElementBase element) {
- getEntity().removeElement(element);
+ getTaxonNameDescription(getEntity()).removeElement(element);
}
public void setTaxon(TaxonBase taxon) {
NonViralName name = (NonViralName) HibernateProxyHelper.deproxy(taxon.getName());
+ setEntity(name);
+ }
+
+ private TaxonNameDescription getTaxonNameDescription(TaxonNameBase name){
// FIXME does not handle multiple name descriptions at the moment
if(name.getDescriptions().size() == 0){
name.addDescription(TaxonNameDescription.NewInstance(name));
}
- setEntity((TaxonNameDescription) name.getDescriptions().iterator().next());
+ return (TaxonNameDescription) name.getDescriptions().iterator().next();
}
}
import eu.etaxonomy.taxeditor.forms.selection.AbstractSelectionElement;
import eu.etaxonomy.taxeditor.forms.selection.ReferenceSelectionElement;
import eu.etaxonomy.taxeditor.forms.term.ReferenceTypeComboElement;
+import eu.etaxonomy.taxeditor.model.AuthorHelper;
import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
/**
text_title = formFactory.createTextWithLabelElement(formElement, "Title", entity.getTitle(), style);
// author team
- selection_authorTeam = formFactory.createSelectionElement(SelectionType.TEAM, getConversationHolder(), formElement, "Author Team", entity.getAuthorTeam(), style);
+ selection_authorTeam = formFactory.createSelectionElement(SelectionType.TEAM, getConversationHolder(), formElement, "Author", AuthorHelper.getAuthor(entity.getAuthorTeam()), style);
ReferenceType referenceType = entity.getType();
getParentElement().refresh();
}
else if(eventSource == composite_timePeriod){
- // TODO
+ getEntity().setDatePublished(composite_timePeriod.getTimePeriod());
}
// selections
else if(eventSource == selection_authorTeam){
else if(eventSource == selection_inReference){
getEntity().setInReference(selection_inReference.getSelection());
}
+ else if(eventSource == selection_inSeries){
+ getEntity().setInReference(selection_inSeries.getSelection());
+ }
else if(eventSource == selection_institution){
getEntity().setInstitution(selection_institution.getSelection());
}
import java.util.Arrays;
import org.apache.log4j.Logger;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
import eu.etaxonomy.taxeditor.forms.CheckboxElement;
import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
import eu.etaxonomy.taxeditor.forms.TextWithLabelElement;
import eu.etaxonomy.taxeditor.forms.ToggleableTextElement;
-import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
import eu.etaxonomy.taxeditor.forms.selection.ReferenceSelectionElement;
import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
+import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
+import eu.etaxonomy.taxeditor.section.name.NameDetailElement;
+import eu.etaxonomy.taxeditor.section.name.NonViralNameDetailElement;
/**
* @author n.hoffmann
setIrrelevant(toggleable_cache.getState(), Arrays.asList(new Object[]{toggleable_cache}));
}
+ @Override
+ public void propertyChange(PropertyChangeEvent event) {
+ Object eventSource = event.getSource();
+ if(eventSource instanceof ICdmFormElement){
+ ICdmFormElement element = (ICdmFormElement) eventSource;
+ ICdmFormElement parentElement = element.getParentElement();
+ if(parentElement instanceof NonViralNameDetailElement){
+ String title = getEntity().generateTitle();
+ getEntity().setTitleCache(title);
+ toggleable_cache.setText(title);
+ if(getParentElement() instanceof AbstractCdmDetailSection)
+ ((AbstractCdmDetailSection)getParentElement()).updateTitle();
+ }
+ }
+
+ super.propertyChange(event);
+ }
@Override
public void handleEvent(Object eventSource) {
version="0.0.0"
unpack="false"/>
+ <plugin
+ id="org.eclipse.equinox.ds"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.p2.ui.sdk"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.util"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
</feature>
id="org.eclipse.equinox.p2.user.ui"
version="0.0.0"/>
+ <includes
+ id="eu.etaxonomy.printpublisher.feature"
+ version="0.0.0"/>
+
<plugin
id="eu.etaxonomy.cdmlib"
download-size="0"
</configIni>
<launcherArgs>
- <vmArgs>-Xmx256M</vmArgs>
+ <vmArgs>-Xmx256M -XX:MaxPermSize=128m</vmArgs>
<vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
</launcherArgs>
eu.etaxonomy.taxeditor.store;bundle-version="2.1.0",
eu.etaxonomy.taxeditor.editor;bundle-version="2.1.0",
org.eclipse.core.expressions,
- eu.etaxonomy.cdmlib;bundle-version="2.3.0"
+ eu.etaxonomy.cdmlib;bundle-version="2.4.0"
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.core.resources,
org.eclipse.core.runtime,
org.eclipse.equinox.app,
org.osgi.framework
Bundle-Activator: eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
</command>
<command
commandId="eu.etaxonomy.taxeditor.navigation.command.moveTaxon"
- label="Move Taxon (with Subtree)"
+ label="Move Taxon (with child taxa)"
style="push">
<visibleWhen>
<reference
</separator>
<command
commandId="org.eclipse.ui.file.refresh"
- label="Refresh Tree"
+ label="Refresh"
style="push">
</command>
</menuContribution>
import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;\r
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
+import eu.etaxonomy.taxeditor.model.IContextListener;\r
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;\r
import eu.etaxonomy.taxeditor.navigation.search.SearchBar.SearchOption;\r
import eu.etaxonomy.taxeditor.store.CdmStore;\r
* @version 1.0\r
* @author n.hoffmann\r
*/\r
-public class SearchResultView extends ViewPart implements IConversationEnabled{\r
+public class SearchResultView extends ViewPart implements IConversationEnabled, IContextListener{\r
private static final Logger logger = Logger\r
.getLogger(SearchResultView.class);\r
\r
\r
conversation = CdmStore.createConversation();\r
\r
+ CdmStore.addContextListener(this);\r
+ \r
GridLayout layout = new GridLayout();\r
layout.marginWidth = 0;\r
layout.marginHeight = 0;\r
\r
searchJob = new SearchJob(Display.getCurrent(), configurator);\r
searchJob.schedule();\r
+ \r
}\r
\r
protected void displaySearchResult(List<IdentifiableEntity> result) {\r
conversation.close();\r
if(searchJob != null)\r
searchJob.cancel();\r
+ CdmStore.removeContextListener(this);\r
}\r
\r
/**\r
* @param name\r
*/\r
public SearchJob(Display display, ITaxonServiceConfigurator configurator) {\r
- super("searchJob");\r
+ super("Performing Search");\r
this.display = display;\r
this.configurator = configurator;\r
}\r
*/\r
@Override\r
protected IStatus run(IProgressMonitor monitor) {\r
-// monitor.beginTask("Performing Search", 100);\r
-// monitor.worked(20);\r
+ monitor.beginTask("", 100);\r
+ monitor.worked(20);\r
\r
final List<IdentifiableEntity> searchResult = CdmStore.findTaxaAndNames(configurator);\r
-// monitor.worked(40);\r
- display.asyncExec(new Runnable() {\r
- \r
- public void run() {\r
- displaySearchResult(searchResult);\r
- }\r
- });\r
-// monitor.done();\r
+ monitor.worked(40);\r
+ \r
+ if(! monitor.isCanceled()){\r
+ display.asyncExec(new Runnable() {\r
+ public void run() {\r
+ displaySearchResult(searchResult);\r
+ }\r
+ });\r
+ }else{\r
+ display.asyncExec(new Runnable() {\r
+ public void run() {\r
+ status.setText("Cancelled");\r
+ }\r
+ });\r
+ }\r
+ monitor.done();\r
return Status.OK_STATUS;\r
}\r
\r
}\r
+\r
+ @Override\r
+ public boolean onContextEvent(EventType eventType) {\r
+ if(eventType.equals(EventType.STOP)){\r
+ NavigationUtil.hideView(this);\r
+ }\r
+ return true;\r
+ }\r
}\r
import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredNameSelectionDialog;
import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonNodeSelectionDialog;
import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonSelectionDialog;
-import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonomicTreeSelectionDialog;
+import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredClassificationSelectionDialog;
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
import eu.etaxonomy.taxeditor.parser.ParseHandler;
private static final String BUTTON_TEXT_BROWSE = "Browse";
- private static final String ERROR_MESSAGE_TAXONOMIC_TREE_EMPTY = "Taxonomic Tree must not be empty";
+ private static final String ERROR_MESSAGE_TAXONOMIC_TREE_EMPTY = "Classification must not be empty";
- private TaxonomicTree taxonomicTree;
+ private TaxonomicTree classification;
private ParseHandler parseHandler;
if(parentNode instanceof TaxonNode){
parentTaxonNode = (TaxonNode) parentNode;
- taxonomicTree = parentTaxonNode.getTaxonomicTree();
+ classification = parentTaxonNode.getTaxonomicTree();
}else{
- taxonomicTree = (TaxonomicTree) parentNode;
+ classification = (TaxonomicTree) parentNode;
}
}
}else{
// taxonomic tree
Label label_taxonomicTree = new Label(composite, SWT.NULL);
- label_taxonomicTree.setText("Taxonomic Tree");
+ label_taxonomicTree.setText("Classification");
text_taxonomicTree = new Text(composite, SWT.BORDER | SWT.SINGLE);
text_taxonomicTree.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
text_taxonomicTree.setEnabled(false);
text_taxonomicTree.addModifyListener(this);
- text_taxonomicTree.setText(taxonomicTree != null ? taxonomicTree.getTitleCache() : "");
+ text_taxonomicTree.setText(classification != null ? classification.getTitleCache() : "");
Button button_taxonomicTree = new Button(composite, SWT.PUSH);
button_taxonomicTree.setText(BUTTON_TEXT_BROWSE);
// parental node
Label label_parentTaxonNode = new Label(composite, SWT.NULL);
- label_parentTaxonNode.setText("Parent Taxon Node");
+ label_parentTaxonNode.setText("Parent Taxon");
text_parentTaxonNode = new Text(composite, SWT.BORDER | SWT.SINGLE);
text_parentTaxonNode.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
* @return
*/
public ITreeNode getParentNode() {
- return parentTaxonNode != null ? parentTaxonNode : taxonomicTree;
+ return parentTaxonNode != null ? parentTaxonNode : classification;
}
public boolean openInEditor(){
@Override
public void widgetSelected(SelectionEvent e) {
super.widgetSelected(e);
- taxonomicTree = FilteredTaxonomicTreeSelectionDialog.selectTaxonomicTree(NavigationUtil.getShell(), null);
- if (taxonomicTree != null) {
- text_taxonomicTree.setText(taxonomicTree.getTitleCache());
+ classification = FilteredClassificationSelectionDialog.selectTaxonomicTree(NavigationUtil.getShell(), null);
+ if (classification != null) {
+ text_taxonomicTree.setText(classification.getTitleCache());
text_parentTaxonNode.setText("");
parentTaxonNode = null;
}
eu.etaxonomy.taxeditor.datasource.view,
eu.etaxonomy.taxeditor.datasource.wizard,
eu.etaxonomy.taxeditor.dialogs,
+ eu.etaxonomy.taxeditor.featuretree,
eu.etaxonomy.taxeditor.forms.section,
eu.etaxonomy.taxeditor.forms.section.reference,
eu.etaxonomy.taxeditor.handler,
eu.etaxonomy.taxeditor.user.wizard
Require-Bundle: org.eclipse.osgi;bundle-version="3.5.2",
org.eclipse.ui;bundle-version="3.5.1",
- eu.etaxonomy.cdmlib;bundle-version="2.3.0",
+ eu.etaxonomy.cdmlib;bundle-version="2.4.0",
org.eclipse.jface.text,
org.eclipse.ui.forms,
org.eclipse.core.runtime;bundle-version="3.5.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
Import-Package: junit.framework,
org.eclipse.core.commands,
org.eclipse.core.commands.operations,
org.junit,
org.osgi.framework
Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
id="eu.etaxonomy.taxeditor.preferences.preservationMethod"
name="Preservation Method">
</page>
+ <page
+ category="eu.etaxonomy.taxeditor.preferences.general"
+ class="eu.etaxonomy.taxeditor.preference.FeatureTreePreferences"
+ id="eu.etaxonomy.taxeditor.preferences.featureTree"
+ name="Feature Tree">
+ </page>
</extension>
<extension
point="org.eclipse.ui.views">
categoryId="eu.etaxonomy.taxeditor.preferences.themeElementCategory.nameEditor"
id="eu.etaxonomy.taxeditor.preferences.colorDefinition.nameEditor.colorContainerSelectedFocus"
label="Container Selected Focus"
- value="181,213,255">
+ value="232,242,254">
</colorDefinition>
<colorDefinition
categoryId="eu.etaxonomy.taxeditor.preferences.themeElementCategory.nameEditor"
private void createColumns(TableViewer viewer) {
Table table = viewer.getTable();
String[] titles = {"Connected", "Name", "Server", "Type", "Database", "Nomenclatural Code", "Created", "CDM Version", "Notes"};
- int[] bounds = { 20, 100, 100, 100 , 100, 150, 100, 100, 100};
+ int[] bounds = { 24, 200, 100, 100 , 200, 120, 100, 100, 100};
for (int i = 0; i < titles.length; i++) {
TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
--- /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.featuretree;
+
+import java.util.List;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.wizard.Wizard;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class AvailableFeaturesWizard extends Wizard {
+ private static final Logger logger = Logger
+ .getLogger(AvailableFeaturesWizard.class);
+
+ private FeatureTree featureTree;
+
+ private AvailableFeaturesWizardPage page;
+
+ private Set<Feature> additionalFeatures;
+
+ public AvailableFeaturesWizard(FeatureTree featureTree){
+ this.featureTree = featureTree;
+ }
+
+ @Override
+ public void addPages() {
+ page = new AvailableFeaturesWizardPage(featureTree);
+ addPage(page);
+ }
+
+ @Override
+ public boolean performFinish() {
+ additionalFeatures = page.getSelectedFeatures();
+ return additionalFeatures.size() > 0;
+ }
+
+ public Set<Feature> getAdditionalFeatures() {
+ return additionalFeatures;
+ }
+}
--- /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.featuretree;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.preference.menu.DefinedTermBaseContentProvider;
+import eu.etaxonomy.taxeditor.preference.menu.DefinedTermBaseLabelProvider;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class AvailableFeaturesWizardPage extends WizardPage {
+
+
+ private static final Logger logger = Logger
+ .getLogger(AvailableFeaturesWizardPage.class);
+ private CheckboxTableViewer viewer;
+
+ protected AvailableFeaturesWizardPage(FeatureTree featureTree) {
+ super("AvailableFeaturesWizardPage");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout());
+
+ viewer = CheckboxTableViewer.newCheckList(composite, SWT.NULL);
+
+ viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ viewer.setContentProvider(new DefinedTermBaseContentProvider());
+ viewer.setLabelProvider(new DefinedTermBaseLabelProvider());
+
+ viewer.setInput(PreferencesUtil.getPreferredFeatures());
+
+ setControl(composite);
+ }
+
+ public Set<Feature> getSelectedFeatures() {
+
+ Object[] checkedElements = viewer.getCheckedElements();
+
+ Set<Feature> features = new HashSet<Feature>(checkedElements.length);
+
+ for(Object element : checkedElements){
+ features.add((Feature) element);
+ }
+
+ return features;
+ }
+}
--- /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.featuretree;
+
+import java.util.Collection;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceAdapter;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class EditFeatureTreeWizardPage extends WizardPage implements ModifyListener, ISelectionChangedListener{
+
+ private static final Logger logger = Logger
+ .getLogger(EditFeatureTreeWizardPage.class);
+ private TreeViewer viewer;
+ private Label label_title;
+ private Text text_title;
+ private Button button_add;
+ private Button button_remove;
+ private Label label_treeInfo;
+ private FeatureTree featureTree;
+
+ protected EditFeatureTreeWizardPage(String pageName) {
+ super(pageName);
+ setMessage("Edit the Feature Tree.");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
+ * .Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setLayout(new GridLayout());
+
+ Composite composite_treeTitle = new Composite(composite, SWT.NULL);
+ composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
+ false));
+ composite_treeTitle.setLayout(new GridLayout(2, false));
+
+ label_title = new Label(composite_treeTitle, SWT.NULL);
+ label_title.setText("Title");
+
+ text_title = new Text(composite_treeTitle, SWT.NULL);
+ text_title.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ Composite composite_treeContent = new Composite(composite, SWT.NULL);
+ composite_treeContent.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
+ true, true));
+ composite_treeContent.setLayout(new GridLayout(2, false));
+
+ viewer = new TreeViewer(composite_treeContent);
+ viewer.getControl().setLayoutData(
+ new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ Composite composite_buttons = new Composite(composite_treeContent,
+ SWT.NULL);
+ composite_buttons.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false,
+ false));
+ composite_buttons.setLayout(new GridLayout());
+
+ button_add = new Button(composite_buttons, SWT.PUSH);
+ button_add.setText("Add");
+ button_add.setToolTipText("Add a feature to this feature treee.");
+ button_remove = new Button(composite_buttons, SWT.PUSH);
+ button_remove.setText("Remove");
+ button_remove
+ .setToolTipText("Remove a feature from this feature tree.");
+
+ label_treeInfo = new Label(composite, SWT.NULL);
+ label_treeInfo.setText("Order and nesting of feature nodes may be changed through drag and drop.");
+
+ viewer.setContentProvider(new FeatureTreeContentProvider());
+ viewer.setLabelProvider(new FeatureTreeLabelProvider());
+
+
+
+ int ops = DND.DROP_COPY | DND.DROP_MOVE;
+ Transfer[] transfers = new Transfer[] { FeatureNodeTransfer
+ .getInstance() };
+ viewer.addDragSupport(ops, transfers, new FeatureNodeDragListener(
+ viewer));
+ viewer.addDropSupport(ops, transfers,
+ new FeatureNodeDropAdapter(viewer));
+
+ viewer.addSelectionChangedListener(this);
+
+ button_add.addSelectionListener(new AddButtonListener());
+ button_remove.addSelectionListener(new RemoveSelectionListener());
+
+ setControl(composite);
+ }
+
+ public void setSelectedTree(FeatureTree featureTree) {
+ this.featureTree = featureTree;
+ viewer.setInput(featureTree);
+
+ text_title.removeModifyListener(this);
+ text_title.setText(featureTree.getTitleCache());
+ text_title.addModifyListener(this);
+ }
+
+ @Override
+ public void modifyText(ModifyEvent e) {
+ featureTree.setTitleCache(text_title.getText(), true);
+ }
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+
+ button_add.setEnabled(selection.size() <= 1);
+ button_remove.setEnabled(selection.size() > 0);
+ }
+
+ private class AddButtonListener extends SelectionAdapter{
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(featureTree);
+ WizardDialog dialog = new WizardDialog(getShell(), wizard);
+
+ if(dialog.open() == IStatus.OK){
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+ FeatureNode parent = (FeatureNode) (selection.getFirstElement() != null ? selection.getFirstElement() : ((FeatureTree) viewer.getInput()).getRoot());
+ Collection<Feature> additionalFeatures = wizard.getAdditionalFeatures();
+ for(Feature feature : additionalFeatures){
+ FeatureNode child = FeatureNode.NewInstance(feature);
+ CdmStore.getFeatureNodeService().saveOrUpdate(child);
+ parent.addChild(child);
+ }
+ viewer.refresh();
+ }
+ }
+ }
+
+
+ private class RemoveSelectionListener extends SelectionAdapter{
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+
+ for(Object selectedObject : selection.toArray()){
+ FeatureNode featureNode = (FeatureNode) selectedObject;
+ FeatureNode parent = featureNode.getParent();
+ parent.removeChild(featureNode);
+ }
+ }
+ }
+
+ private class FeatureNodeDragListener extends DragSourceAdapter {
+
+ private TreeViewer viewer;
+
+ public FeatureNodeDragListener(TreeViewer viewer) {
+ this.viewer = viewer;
+ }
+
+ /**
+ * Method declared on DragSourceListener
+ */
+ public void dragFinished(DragSourceEvent event) {
+ if (!event.doit)
+ return;
+ // if the featureNode was moved, remove it from the source viewer
+ if (event.detail == DND.DROP_MOVE) {
+ IStructuredSelection selection = (IStructuredSelection) viewer
+ .getSelection();
+ viewer.refresh();
+ }
+ }
+
+ /**
+ * Method declared on DragSourceListener
+ */
+ public void dragSetData(DragSourceEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) viewer
+ .getSelection();
+ FeatureNode[] featureNodes = (FeatureNode[]) selection.toList().toArray(new FeatureNode[selection.size()]);
+ if (FeatureNodeTransfer.getInstance().isSupportedType(
+ event.dataType)) {
+ event.data = featureNodes;
+ }
+ }
+
+ /**
+ * Method declared on DragSourceListener
+ */
+ public void dragStart(DragSourceEvent event) {
+ event.doit = !viewer.getSelection().isEmpty();
+ }
+
+ }
+
+ private class FeatureNodeDropAdapter extends ViewerDropAdapter {
+
+ protected FeatureNodeDropAdapter(Viewer viewer) {
+ super(viewer);
+ }
+
+ @Override
+ public boolean performDrop(Object data) {
+ FeatureNode target = (FeatureNode) getCurrentTarget();
+ int position = 0;
+
+ if (target != null) {
+ int location = getCurrentLocation();
+ FeatureNode parent = target.getParent();
+ if (location == LOCATION_BEFORE){
+ position = parent.getIndex(target) - 1;
+ target = parent;
+ }
+
+ if(location == LOCATION_AFTER) {
+ position = parent.getIndex(target);
+ target = parent;
+ }
+ }
+
+ // set target to root node if there is no target specified
+ if (target == null) {
+ FeatureTree featureTree = (FeatureTree) getViewer().getInput();
+ target = featureTree.getRoot();
+ }
+
+ FeatureNode[] droppedNodes = (FeatureNode[]) data;
+ TreeViewer viewer = (TreeViewer) getViewer();
+
+ // cannot drop a feature node onto itself
+ for (FeatureNode droppedNode : droppedNodes) {
+ if (droppedNode == null){
+ StoreUtil.warningDialog("Operation not supported yet", "We are currently unable to change the order of freshly created " +
+ "feature trees nodes. Please close and reopen the dialog to change the order of features.");
+ return false;
+ }
+ if (droppedNode.equals(target)) {
+ return false;
+ }
+ }
+ for (FeatureNode droppedNode : droppedNodes) {
+ target.addChild(droppedNode, position);
+ viewer.add(target, droppedNode);
+ viewer.reveal(droppedNode);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean validateDrop(Object target, int operation,
+ TransferData transferData) {
+ return FeatureNodeTransfer.getInstance().isSupportedType(
+ transferData);
+ }
+
+ }
+}
--- /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.featuretree;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.TransferData;
+
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureNodeTransfer extends ByteArrayTransfer {
+ private static final Logger logger = Logger
+ .getLogger(FeatureNodeTransfer.class);
+
+ private static FeatureNodeTransfer instance = new FeatureNodeTransfer();
+ private static final String TYPE_NAME = "featureNode-transfer-format";
+ private static final int TYPEID = registerType(TYPE_NAME);
+
+ public static synchronized FeatureNodeTransfer getInstance() {
+ return instance;
+ }
+
+ private FeatureNodeTransfer() {
+
+ }
+
+ @Override
+ protected int[] getTypeIds() {
+ return new int[] { TYPEID };
+ }
+
+ @Override
+ protected String[] getTypeNames() {
+ return new String[] { TYPE_NAME };
+ }
+
+ /*
+ * Method declared on Transfer.
+ */
+ protected void javaToNative(Object object, TransferData transferData) {
+ byte[] bytes = toByteArray((FeatureNode[]) object);
+ if (bytes != null)
+ super.javaToNative(bytes, transferData);
+ }
+
+ /*
+ * Method declared on Transfer.
+ */
+ protected Object nativeToJava(TransferData transferData) {
+ byte[] bytes = (byte[]) super.nativeToJava(transferData);
+ return fromByteArray(bytes);
+ }
+
+ protected byte[] toByteArray(FeatureNode[] featureNodes) {
+ /**
+ * Transfer data is an array of gadgets. Serialized version is: (int)
+ * number of gadgets (Gadget) gadget 1 (Gadget) gadget 2 ... repeat for
+ * each subsequent gadget see writeGadget for the (Gadget) format.
+ */
+ ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ DataOutputStream out = new DataOutputStream(byteOut);
+
+ byte[] bytes = null;
+
+ try {
+
+ for(FeatureNode featureNode : featureNodes){
+ writeFeatureNode(featureNode, out);
+ }
+ out.close();
+ bytes = byteOut.toByteArray();
+ } catch (IOException e) {
+ // when in doubt send nothing
+ }
+ return bytes;
+ }
+
+ protected FeatureNode[] fromByteArray(byte[] bytes) {
+ DataInputStream in = new DataInputStream(
+ new ByteArrayInputStream(bytes));
+
+ try {
+ List<FeatureNode> featureNodes = new ArrayList<FeatureNode>();
+
+ try{
+ while(true){
+ featureNodes.add(readFeatureNode(in));
+ }
+ }catch(EOFException e){
+ return featureNodes.toArray(new FeatureNode[]{});
+ }
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
+ /**
+ * Reads and returns a single featureNode from the given stream.
+ */
+ private FeatureNode readFeatureNode(DataInputStream dataIn) throws IOException {
+
+ UUID uuid = UUID.fromString(dataIn.readUTF());
+
+ FeatureNode featureNode = CdmStore.getFeatureNodeService().load(uuid);
+
+ return featureNode;
+ }
+
+ /**
+ * Writes the given featureNode to the stream.
+ */
+ private void writeFeatureNode(FeatureNode featureNode,
+ DataOutputStream dataOut) throws IOException {
+ dataOut.writeUTF(featureNode.getUuid().toString());
+ }
+}
--- /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.featuretree;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureTreeContentProvider implements ITreeContentProvider {
+ private static final Logger logger = Logger
+ .getLogger(FeatureTreeContentProvider.class);
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ @Override
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return this.getChildren(inputElement);
+ }
+
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ if(parentElement instanceof FeatureTree){
+ List<FeatureNode> children = ((FeatureTree) parentElement).getRootChildren();
+ return children.toArray();
+ }else if(parentElement instanceof FeatureNode){
+ List<FeatureNode> children = ((FeatureNode) parentElement).getChildren();
+ return children.toArray();
+ }else if(parentElement instanceof List){
+ return ((List) parentElement).toArray();
+ }else{
+ return new Object[]{};
+ }
+ }
+
+ @Override
+ public Object getParent(Object element) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length != 0;
+ }
+}
--- /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.featuretree;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.wizard.Wizard;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureTreeEditorWizard extends Wizard {
+
+ private static final Logger logger = Logger
+ .getLogger(FeatureTreeEditorWizard.class);
+
+ private SelectFeatureTreeWizardPage selectFeatureTreePage;
+ private EditFeatureTreeWizardPage editFeatureTreePage;
+
+ private FeatureTree selectedFeatureTree;
+
+ private ConversationHolder conversation;
+
+ public FeatureTreeEditorWizard(){
+ conversation = CdmStore.createConversation();
+ setWindowTitle("Feature Tree Editor");
+ }
+
+ public void addPages() {
+ selectFeatureTreePage = new SelectFeatureTreeWizardPage("SELECT");
+ addPage(selectFeatureTreePage);
+
+ editFeatureTreePage = new EditFeatureTreeWizardPage("EDIT");
+ addPage(editFeatureTreePage);
+ }
+
+
+
+ @Override
+ public boolean performFinish() {
+ try{
+ CdmStore.getFeatureTreeService().saveOrUpdate(selectedFeatureTree);
+ conversation.commit();
+ }finally{
+ conversation.close();
+ }
+
+ return true;
+ }
+
+ /**
+ * @param selectedFeatureTree the selectedFeatureTree to set
+ */
+ public void setSelectedFeatureTree(FeatureTree selectedFeatureTree) {
+ this.selectedFeatureTree = selectedFeatureTree;
+ editFeatureTreePage.setSelectedTree(selectedFeatureTree);
+ }
+
+ /**
+ * @return the selectedFeatureTree
+ */
+ public FeatureTree getSelectedFeatureTree() {
+ return selectedFeatureTree;
+ }
+
+}
--- /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.featuretree;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.LabelProvider;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureTreeLabelProvider extends LabelProvider {
+ private static final Logger logger = Logger
+ .getLogger(FeatureTreeLabelProvider.class);
+
+ private Feature feature;
+
+ @Override
+ public String getText(Object element) {
+ if(element instanceof FeatureTree){
+ return ((FeatureTree) element).getTitleCache();
+ }else if(element instanceof FeatureNode){
+ feature = ((FeatureNode) element).getFeature();
+
+ return feature.getTitleCache();
+
+ }else{
+ return "No label provided";
+ }
+ }
+
+ public Feature getFeature(){
+ return feature;
+ }
+}
--- /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.featuretree;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class SelectFeatureTreeWizardPage extends WizardPage implements ISelectionChangedListener, ModifyListener{
+
+
+ private static final Logger logger = Logger
+ .getLogger(SelectFeatureTreeWizardPage.class);
+ private ListViewer viewer;
+ private Text text_title;
+ private Button button_add;
+ private Button button_remove;
+
+ protected SelectFeatureTreeWizardPage(String pageName) {
+ super(pageName);
+ setMessage("Select a Feature Tree or create a new one.");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NULL);
+
+ composite.setLayout(new GridLayout());
+
+ Composite composite_treeContent = new Composite(composite, SWT.NULL);
+ composite_treeContent.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
+ true, true));
+ composite_treeContent.setLayout(new GridLayout(2, false));
+
+ viewer = new ListViewer(composite_treeContent);
+ viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ button_remove = new Button(composite_treeContent, SWT.PUSH);
+ button_remove.setText("Remove");
+ button_remove.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false));
+
+ Composite composite_treeTitle = new Composite(composite, SWT.NULL);
+ composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
+ false));
+ composite_treeTitle.setLayout(new GridLayout(3, false));
+
+
+
+ Label label_title = new Label(composite_treeTitle, SWT.NULL);
+ label_title.setText("New Feature Tree");
+
+ text_title = new Text(composite_treeTitle, SWT.NULL);
+ text_title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+ button_add = new Button(composite_treeTitle, SWT.PUSH);
+ button_add.setText("Add");
+
+ viewer.setContentProvider(new FeatureTreeContentProvider());
+ viewer.setLabelProvider(new FeatureTreeLabelProvider());
+
+ viewer.addSelectionChangedListener(this);
+
+ text_title.addModifyListener(this);
+ button_add.addSelectionListener(new AddButtonSelectionListener());
+ button_remove.addSelectionListener(new RemoveButtonSelectionListener());
+
+ List<FeatureTree> input = CdmStore.getFeatureTreeService().list(FeatureTree.class, null, null, null, null);
+
+ viewer.setInput(input);
+ modifyText(null);
+ setControl(composite);
+ }
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+
+ if(selection.size() == 1){
+ FeatureTree selectedFeatureTree = (FeatureTree) selection.getFirstElement();
+ ((FeatureTreeEditorWizard) getWizard()).setSelectedFeatureTree(selectedFeatureTree);
+
+ }
+
+ setPageComplete(true);
+
+ button_remove.setEnabled(selection.size() >= 1);
+ }
+
+ @Override
+ public boolean canFlipToNextPage() {
+ return ((IStructuredSelection) viewer.getSelection()).size() == 1;
+ }
+
+ @Override
+ public void modifyText(ModifyEvent e) {
+ button_add.setEnabled(! text_title.getText().isEmpty());
+ }
+
+ private class AddButtonSelectionListener extends SelectionAdapter {
+ public void widgetSelected(SelectionEvent e) {
+ FeatureTree featureTree = FeatureTree.NewInstance();
+ featureTree.setTitleCache(text_title.getText(), true);
+
+ viewer.add(featureTree);
+ CdmStore.getFeatureTreeService().saveOrUpdate(featureTree);
+ text_title.setText("");
+ viewer.setSelection(new StructuredSelection(featureTree));
+
+ }
+ }
+
+ private class RemoveButtonSelectionListener extends SelectionAdapter {
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+ for(Object element : selection.toArray()){
+ viewer.remove(element);
+ CdmStore.getFeatureTreeService().delete((FeatureTree) element);
+ viewer.setSelection(new StructuredSelection(new Object[0]));
+ }
+ }
+ }
+}
*/\r
package eu.etaxonomy.taxeditor.labels;\r
\r
+import java.util.List;\r
import java.util.SortedSet;\r
\r
import org.eclipse.swt.graphics.Image;\r
\r
import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
import eu.etaxonomy.taxeditor.model.ImageResources;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
\r
/**\r
* @author p.ciardelli\r
* @see eu.etaxonomy.taxeditor.editor.labels.IEditorLabelStrategy#getNameRelationTypeLabel(eu.etaxonomy.cdm.model.name.NameRelationshipType)\r
*/\r
public String getNameRelationTypeLabel(NameRelationshipType type) {\r
- SortedSet<NameRelationshipType> vocab = \r
- VocabularyStore.getNameRelationshipTypes();\r
+ List<NameRelationshipType> vocab = \r
+ TermStore.getNameRelationshipTypes();\r
\r
for (NameRelationshipType type1 : vocab) {\r
if (type1.equals(type)) {\r
*/\r
public String getNameRelationTypeInverseLabel(NameRelationshipType type) {\r
\r
- SortedSet<NameRelationshipType> vocab = \r
- VocabularyStore.getNameRelationshipTypes();\r
+ List<NameRelationshipType> vocab = \r
+ TermStore.getNameRelationshipTypes();\r
\r
for (NameRelationshipType type1 : vocab) {\r
if (type1.equals(type)) {\r
}
}
+ public static void hideView(IViewPart view){
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(view);
+ }
+
public static IViewPart getView(String id, boolean restore){
IViewReference[] references = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences();
for (IViewReference reference : references){
}
- protected static IProgressMonitor getMonitor() {
+ public static IProgressMonitor getMonitor() {
statusLineManager.setCancelEnabled(false);
return statusLineManager.getProgressMonitor();
}
--- /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;
+
+import org.apache.log4j.Logger;
+
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.agent.Team;
+
+/**
+ * @author n.hoffmann
+ * @created Sep 8, 2010
+ * @version 1.0
+ */
+public class AuthorHelper {
+ private static final Logger logger = Logger.getLogger(AuthorHelper.class);
+
+ public static Team getAuthor(Object object){
+ if(object == null){
+ return null;
+ }
+ Object deproxiedObject = HibernateProxyHelper.deproxy(object);
+ 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");
+ }
+ }
+}
package eu.etaxonomy.taxeditor.model;
import org.apache.log4j.Logger;
+import org.hibernate.LazyInitializationException;
import eu.etaxonomy.cdm.common.CdmUtils;
import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
if (element instanceof IdentifiableEntity) {
try{
return ((IdentifiableEntity) element).getTitleCache();
- }catch(Exception e){
- // TODO we have to make sure that we will never get here.
- // It is not clear at the moment how we can accomplish that.
- String result = "Error initializing title cache for object";
+ }catch(LazyInitializationException e){
+ String result = "No Session to initialize title cache for IdentifiableEntity";
logger.error(result);
- return "TODO" + result;
+ return "TODO: " + result;
}
}
if (element instanceof OriginalSourceBase) {
- OriginalSourceBase originalSource = (OriginalSourceBase) element;
-// ReferenceBase citation = HibernateProxyHelper.deproxy(originalSource.getCitation(), ReferenceBase.class);
- ISourceable sourcedObject = originalSource.getSourcedObj();
- String sourceObjectTitle = "";
- if(sourcedObject instanceof IIdentifiableEntity){
- sourceObjectTitle = ((IdentifiableEntity) sourcedObject).getTitleCache();
- }else if(sourcedObject instanceof DescriptionElementBase){
- sourceObjectTitle = "Element for description: " + ((DescriptionElementBase) sourcedObject).getInDescription().getTitleCache();
- }else{
- throw new IllegalStateException("Unknown ISourceable object for given OriginalSourceBase");
+ try{
+ OriginalSourceBase originalSource = (OriginalSourceBase) element;
+ ISourceable sourcedObject = originalSource.getSourcedObj();
+ String sourceObjectTitle = "";
+ if(sourcedObject instanceof IIdentifiableEntity){
+ sourceObjectTitle = ((IdentifiableEntity) sourcedObject).getTitleCache();
+ }else if(sourcedObject instanceof DescriptionElementBase){
+ sourceObjectTitle = "Element for description: " + ((DescriptionElementBase) sourcedObject).getInDescription().getTitleCache();
+ }else{
+ throw new IllegalStateException("Unknown ISourceable object for given OriginalSourceBase");
+ }
+
+ return CdmUtils.concat("; ", new String[]{originalSource.getIdNamespace(), originalSource.getIdInSource(), sourceObjectTitle});
+ }catch(LazyInitializationException e){
+ String result = "Error initializing title cache for ISourceable of an OriginalSourceBase";
+ logger.error(result);
+ return "TODO: " + result;
}
-
- return CdmUtils.concat(";", new String[]{originalSource.getIdNamespace(), originalSource.getIdInSource(), sourceObjectTitle});
}
if (element instanceof LanguageStringBase) {
return ((LanguageStringBase) element).getText();
// TODO write return texts for NameRelationship, HomotypicalGroup, SpecimenTypeDesignation, etc.
return element.toString();
}
+
+ public static String getObjectClassname(Object element) {
+ return element.getClass().getSimpleName();
+ }
}
package eu.etaxonomy.taxeditor.model;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
@SuppressWarnings("unchecked")
public static String getDisplayNameWithRef(TaxonBase taxonBase) {
- TaxonNameBase name = taxonBase.getName();
+ TaxonNameBase name = (TaxonNameBase) HibernateProxyHelper.deproxy(taxonBase.getName());
if (name != null) {
return name.generateFullTitle();
}
--- /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.preference;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+import eu.etaxonomy.taxeditor.featuretree.FeatureTreeEditorWizard;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureTreePreferences extends PreferencePage implements
+ IWorkbenchPreferencePage {
+ private static final Logger logger = Logger
+ .getLogger(FeatureTreePreferences.class);
+
+ /**
+ *
+ */
+ public FeatureTreePreferences() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param title
+ */
+ public FeatureTreePreferences(String title) {
+ super(title);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param title
+ * @param image
+ */
+ public FeatureTreePreferences(String title, ImageDescriptor image) {
+ super(title, image);
+ // TODO Auto-generated constructor stub
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+ */
+ @Override
+ public void init(IWorkbench workbench) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createContents(Composite parent) {
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout());
+
+ final Button button_openFeatureTree = new Button(composite, SWT.PUSH);
+ button_openFeatureTree.setText("Open FeatureTree Editor");
+
+ button_openFeatureTree.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ FeatureTreeEditorWizard featureTreeEditorDialog = new FeatureTreeEditorWizard();
+ WizardDialog dialog = new WizardDialog(getShell(), featureTreeEditorDialog);
+
+ dialog.open();
+ }
+ });
+
+ return composite;
+ }
+}
import eu.etaxonomy.cdm.strategy.match.MatchMode;\r
import eu.etaxonomy.taxeditor.model.NomenclaturalCodeHelper;\r
import eu.etaxonomy.taxeditor.store.StoreUtil;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;\r
\r
/**\r
* Generic method to get term preferences for a term vocabulary\r
* \r
* @param <T>\r
- * @param initialTerms\r
+ * @param initialVocabulary\r
* @return\r
*/\r
- public static <T extends DefinedTermBase> List<T> getPreferredTerms(Set<T> initialTerms){\r
+ public static <T extends DefinedTermBase> List<T> getPreferredTerms(List<T> initialVocabulary){\r
\r
// set default for non existent preferences\r
- defaultTerms(initialTerms);\r
+ defaultTerms(initialVocabulary);\r
\r
List<T> preferredTerms = new ArrayList<T>();\r
\r
- for (T term : initialTerms){\r
+ for (T term : initialVocabulary){\r
if(getPreferenceStore().getBoolean(getPreferenceKey((ICdmBase) term))){\r
preferredTerms.add(term);\r
}\r
return preferredTerms; \r
}\r
\r
- private static <T extends DefinedTermBase> boolean defaultTerms(Set<T> initialTerms){\r
+ private static <T extends DefinedTermBase> boolean defaultTerms(List<T> initialVocabulary){\r
// set default for non existen preferences\r
- for(T term : initialTerms){\r
+ for(T term : initialVocabulary){\r
if(getPreferenceStore().getBoolean(term.getClass().getName())){\r
break;\r
}else{\r
getPreferenceStore().setValue(term.getClass().getName(), true);\r
- setPreferredTerms(new ArrayList(initialTerms), initialTerms);\r
+ setPreferredTerms(new ArrayList(initialVocabulary), initialVocabulary);\r
break;\r
}\r
}\r
\r
\r
/** @return a <code>List</code> containing user preferred <code>SpecimenTypeDesignationStatus</code> terms */\r
- public static List<SpecimenTypeDesignationStatus> getPreferredSpecimenTypeDesignationStatus() { return getPreferredTerms(VocabularyStore.getSpecimenTypeDesignationStatus());}\r
+ public static List<SpecimenTypeDesignationStatus> getPreferredSpecimenTypeDesignationStatus() { return getPreferredTerms(TermStore.getSpecimenTypeDesignationStatus());}\r
\r
/** @return a <code>List</code> containing user preferred <code>NameTypeDesignationStatus</code> terms */\r
- public static List<NameTypeDesignationStatus> getPreferredNameTypeDesignationStatus() { return getPreferredTerms(VocabularyStore.getNameTypeDesignationStatus()); }\r
+ public static List<NameTypeDesignationStatus> getPreferredNameTypeDesignationStatus() { return getPreferredTerms(TermStore.getNameTypeDesignationStatus()); }\r
\r
/** @return a <code>List</code> containing user preferred <code>TaxonRelationshipTypes</code> terms */\r
- public static List<TaxonRelationshipType> getPreferredTaxonRelationshipTypes() { return getPreferredTerms(VocabularyStore.getTaxonRelationshipTypes());}\r
+ public static List<TaxonRelationshipType> getPreferredTaxonRelationshipTypes() { return getPreferredTerms(TermStore.getTaxonRelationshipTypes());}\r
\r
/** @return a <code>List</code> containing user preferred <code>Feature</code> terms */\r
- public static List<Feature> getPreferredFeatures() { return getPreferredTerms(VocabularyStore.getFeatures());}\r
+ public static List<Feature> getPreferredFeatures() { return getPreferredTerms(TermStore.getFeatures());}\r
\r
/** @return a <code>List</code> containing user preferred <code>Rank</code> terms */\r
- public static List<Rank> getPreferredRanks() { return getPreferredTerms(VocabularyStore.getRanks());}\r
+ public static List<Rank> getPreferredRanks() { return getPreferredTerms(TermStore.getRanks());}\r
\r
/** @return a <code>List</code> containing user preferred <code>PresenceAbsenceTermBase</code> terms */\r
- public static List<PresenceAbsenceTermBase> getPreferredPresenceAbsenceTerms(){ return getPreferredTerms(VocabularyStore.getPresenceAbsenceTerms());}\r
+ public static List<PresenceAbsenceTermBase> getPreferredPresenceAbsenceTerms(){ return getPreferredTerms(TermStore.getPresenceAbsenceTerms());}\r
\r
/** @return a <code>List</code> containing user preferred <code>NomenclaturalStatusType</code> terms */\r
- public static List<NomenclaturalStatusType> getPreferredNomenclaturalStatusTypes(){ return getPreferredTerms(VocabularyStore.getNomenclaturalStatusTypes());}\r
+ public static List<NomenclaturalStatusType> getPreferredNomenclaturalStatusTypes(){ return getPreferredTerms(TermStore.getNomenclaturalStatusTypes());}\r
\r
/** @return a <code>List</code> containing user preferred <code>NameRelationshipType</code> terms */\r
- public static List<NameRelationshipType> getPreferredNameRelationshipTypes(){ return getPreferredTerms(VocabularyStore.getNameRelationshipTypes());}\r
+ public static List<NameRelationshipType> getPreferredNameRelationshipTypes(){ return getPreferredTerms(TermStore.getNameRelationshipTypes());}\r
\r
/** @return a <code>List</code> containing user preferred <code>Language</code> terms */\r
- public static List<Language> getPreferredLanguages() { return getPreferredTerms(VocabularyStore.getLanguages()); }\r
+ public static List<Language> getPreferredLanguages() { return getPreferredTerms(TermStore.getLanguages()); }\r
\r
/** @return a <code>List</code> containing user preferred <code>MarkerType</code> terms */\r
- public static List<MarkerType> getPreferredMarkerTypes() { return getPreferredTerms(VocabularyStore.getNonTechnicalMarkerTypes()); }\r
+ public static List<MarkerType> getPreferredMarkerTypes() { return getPreferredTerms(TermStore.getNonTechnicalMarkerTypes()); }\r
\r
/** @return a <code>List</code> containing user preferred <code>ExtensionType</code> terms */\r
- public static List<ExtensionType> getPreferredExtensionTypes() { return getPreferredTerms(VocabularyStore.getExtensionTypes()); }\r
+ public static List<ExtensionType> getPreferredExtensionTypes() { return getPreferredTerms(TermStore.getExtensionTypes()); }\r
\r
/** @return a <code>List</code> containing user preferred <code>RightsType</code> terms */\r
- public static List<RightsTerm> getPreferredRightsTypes() { return getPreferredTerms(VocabularyStore.getRightsTypes());}\r
+ public static List<RightsTerm> getPreferredRightsTypes() { return getPreferredTerms(TermStore.getRightsTypes());}\r
\r
/** @return a <code>List</code> containing user preferred <code>NamedAreaType</code> terms */\r
- public static List<NamedAreaType> getPreferredNamedAreaTypes() { return getPreferredTerms(VocabularyStore.getNamedAreaTypes()); } \r
+ public static List<NamedAreaType> getPreferredNamedAreaTypes() { return getPreferredTerms(TermStore.getNamedAreaTypes()); } \r
\r
/** @return a <code>List</code> containing user preferred <code>AnnotationType</code> terms */\r
- public static List<AnnotationType> getPreferredAnnotationTypes() { return getPreferredTerms(VocabularyStore.getAnnotationTypes()); } \r
+ public static List<AnnotationType> getPreferredAnnotationTypes() { return getPreferredTerms(TermStore.getAnnotationTypes()); } \r
\r
/** @return a <code>List</code> containing user preferred <code>Stage</code> terms */\r
- public static List<Stage> getPreferredStages() { return getPreferredTerms(VocabularyStore.getStages()); }\r
+ public static List<Stage> getPreferredStages() { return getPreferredTerms(TermStore.getStages()); }\r
\r
/** @return a <code>List</code> containing user preferred <code>PreservationMethod</code> terms */\r
- public static List<PreservationMethod> getPreferredPreservationMethods() { return getPreferredTerms(VocabularyStore.getPreservationMethods()); }\r
+ public static List<PreservationMethod> getPreferredPreservationMethods() { return getPreferredTerms(TermStore.getPreservationMethods()); }\r
\r
/**\r
* Generic method to set term preferences\r
* \r
* @param preferredTerms\r
- * @param initialTerms\r
+ * @param initialVocabulary\r
*/\r
- public static <T extends DefinedTermBase> void setPreferredTerms(List<T> preferredTerms, Set<T> initialTerms){\r
- for(TermBase term : initialTerms){\r
+ public static <T extends DefinedTermBase> void setPreferredTerms(List<T> preferredTerms, List<T> initialVocabulary){\r
+ for(TermBase term : initialVocabulary){\r
getPreferenceStore().setValue(getPreferenceKey(term), preferredTerms.contains(term));\r
}\r
}\r
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
protected Button editButton;
protected Button removeButton;
- protected Set<T> vocabulary;
+ protected List<T> vocabulary;
private List<T> preferedTerms;
* whether this vocabulary should be editable. Will render "New", "Edit", "Delete" buttons
* Handler for these buttons have to be overriding addEditButtonListeners()
*/
- public AbstractMenuPreferences(Set<T> initialVocabulary, String title, String description, boolean editable) {
+ public AbstractMenuPreferences(List<T> initialVocabulary, String title, String description, boolean editable) {
super(title);
vocabulary = initialVocabulary;
preferedTerms = PreferencesUtil.getPreferredTerms(initialVocabulary);
tableLayoutData.heightHint = 300;
tableViewer.getTable().setLayoutData(tableLayoutData);
- tableViewer.setContentProvider(new MenuPreferenceContentProvider());
- tableViewer.setLabelProvider(new MenuPreferenceLabelProvider());
+ tableViewer.setContentProvider(new DefinedTermBaseContentProvider());
+ tableViewer.setLabelProvider(new DefinedTermBaseLabelProvider());
tableViewer.setInput(vocabulary);
protected void performDefaults() {
tableViewer.setAllChecked(true);
}
-
- /**
- *
- * @author n.hoffmann
- * @created 12.06.2009
- * @version 1.0
- */
- private class MenuPreferenceContentProvider implements IStructuredContentProvider{
-
- public Object[] getElements(Object inputElement) {
- return ((Set<?>) inputElement).toArray(new DefinedTermBase[0]);
- }
-
- public void dispose() {}
-
- public void inputChanged(Viewer viewer, Object oldInput,
- Object newInput) {}
-
- };
-
-
-
- /**
- *
- * @author n.hoffmann
- * @created 12.06.2009
- * @version 1.0
- */
- class MenuPreferenceLabelProvider extends LabelProvider implements ITableLabelProvider{
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
- */
- public Image getColumnImage(Object element, int columnIndex) {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
- */
- public String getColumnText(Object element, int columnIndex) {
- return ((DefinedTermBase)element).getLabel();
- }
-
- }
/**
* @return the tableViewer
--- /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.preference.menu;
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class DefinedTermBaseContentProvider implements
+ IStructuredContentProvider {
+ private static final Logger logger = Logger
+ .getLogger(DefinedTermBaseContentProvider.class);
+
+ public Object[] getElements(Object inputElement) {
+ if(inputElement instanceof Collection){
+ return ((Collection<DefinedTermBase>) inputElement).toArray(new DefinedTermBase[0]);
+ }
+ return new Object[]{};
+ }
+
+ public void dispose() {}
+
+ public void inputChanged(Viewer viewer, Object oldInput,
+ Object newInput) {}
+}
--- /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.preference.menu;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class DefinedTermBaseLabelProvider extends LabelProvider implements
+ ITableLabelProvider {
+ private static final Logger logger = Logger
+ .getLogger(DefinedTermBaseLabelProvider.class);
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+ */
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ return ((DefinedTermBase)element).getLabel();
+ }
+}
import eu.etaxonomy.cdm.model.common.VocabularyEnum;
import eu.etaxonomy.taxeditor.preference.wizard.VocabularyTermWizard;
import eu.etaxonomy.taxeditor.store.StoreUtil;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
*
*/
public ExtensionTypeMenuPreferences() {
- super(VocabularyStore.getExtensionTypes(),
+ super(TermStore.getExtensionTypes(),
"Extension Type Preferences" ,
"Choose which extension types to display",
true);
WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
dialog.open();
- tableViewer.setInput(VocabularyStore.getExtensionTypes());
+ tableViewer.setInput(TermStore.getExtensionTypes());
}
});
}
import eu.etaxonomy.cdm.model.description.Feature;
import eu.etaxonomy.taxeditor.preference.wizard.VocabularyTermWizard;
import eu.etaxonomy.taxeditor.store.StoreUtil;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author p.ciardelli
public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences.feature";
public FeatureMenuPreferences() {
- super(VocabularyStore.getFeatures(),
+ super(TermStore.getFeatures(),
"Feature Preferences",
"Choose which features you would like to use for descriptive elements.",
true);
WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
dialog.open();
- tableViewer.setInput(VocabularyStore.getFeatures());
+ tableViewer.setInput(TermStore.getFeatures());
}
});
}
WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
dialog.open();
- tableViewer.setInput(VocabularyStore.getFeatures());
+ tableViewer.setInput(TermStore.getFeatures());
tableViewer.reveal(selection);
}
});
import org.eclipse.swt.widgets.Control;
import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author p.ciardelli
* @param description
*/
public LanguageMenuPreferences() {
- super(VocabularyStore.getLanguages(),
+ super(TermStore.getLanguages(),
"Language Preferences",
"Configure language preferences.",
false);
import org.apache.log4j.Logger;
import eu.etaxonomy.cdm.model.common.MarkerType;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
* @param description
*/
public MarkerTypeMenuPreferences() {
- super(VocabularyStore.getNonTechnicalMarkerTypes(),
+ super(TermStore.getNonTechnicalMarkerTypes(),
"Marker Type Preferences" ,
"Choose which markers to display",
false);
import eu.etaxonomy.taxeditor.labels.ILabelImageStrategy;
import eu.etaxonomy.taxeditor.labels.LabelImageProvider;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.preference.menu.AbstractMenuPreferences.MenuPreferenceLabelProvider;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
public NameRelationshipTypeMenuPreferences() {
- super(VocabularyStore.getNameRelationshipTypes(),
+ super(TermStore.getNameRelationshipTypes(),
"Name relationship types",
"Configure name relationship types",
false);
return container;
}
- public class NameRelationLabelProvider extends MenuPreferenceLabelProvider {
+ public class NameRelationLabelProvider extends DefinedTermBaseLabelProvider {
private LabelImageProvider labelProvider;
package eu.etaxonomy.taxeditor.preference.menu;
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
* @param description
*/
public NameTypeDesignationStatusMenuPreferences() {
- super(VocabularyStore.getNameTypeDesignationStatus(),
+ super(TermStore.getNameTypeDesignationStatus(),
"Name Type Designation Status Preferences",
"Configure name type designation status",
false);
import org.apache.log4j.Logger;
import eu.etaxonomy.cdm.model.location.NamedAreaType;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
.getLogger(NamedAreaTypeMenuPreferences.class);
public NamedAreaTypeMenuPreferences() {
- super(VocabularyStore.getNamedAreaTypes(),
+ super(TermStore.getNamedAreaTypes(),
"Named Area Types",
"Edit displayed named area types",
true);
package eu.etaxonomy.taxeditor.preference.menu;
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
AbstractMenuPreferences<NomenclaturalStatusType> {
public NomenclaturalStatusTypeMenuPreferences() {
- super(VocabularyStore.getNomenclaturalStatusTypes(),
+ super(TermStore.getNomenclaturalStatusTypes(),
"Nomenlcatural Status Type Preferences",
"Configure nomenclatural status types",
false);
import org.eclipse.ui.IWorkbenchPreferencePage;
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
* @param description
*/
public PresenceAbsenceMenuPreferences() {
- super(VocabularyStore.getPresenceAbsenceTerms(),
+ super(TermStore.getPresenceAbsenceTerms(),
"Distribution Status Preferences",
"Choose which distribution states should be shown.",
false);
import org.apache.log4j.Logger;
import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
.getLogger(PreservationMethodMenuPreferences.class);
public PreservationMethodMenuPreferences() {
- super(VocabularyStore.getPreservationMethods(),
+ super(TermStore.getPreservationMethods(),
"Preservation Method Preferences",
"Select preservation methods to be shown in selections",
false);
import org.eclipse.ui.IWorkbenchPreferencePage;
import eu.etaxonomy.cdm.model.name.Rank;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* Allows the user to choose which <code>Rank</code>s to display in the
public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences.ranks";
public RankMenuPreferences() {
- super(VocabularyStore.getRanks(),
+ super(TermStore.getRanks(),
"Rank Preferences",
"Choose which ranks to display in the property sheet drop-down menu.",
false);
package eu.etaxonomy.taxeditor.preference.menu;
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
* @param description
*/
public SpecimenTypeDesignationStatusMenuPreferences() {
- super(VocabularyStore.getSpecimenTypeDesignationStatus(),
+ super(TermStore.getSpecimenTypeDesignationStatus(),
"Specimen Type Designation Status Preferences",
"Configure specimen type designation status",
false);
import org.apache.log4j.Logger;
import eu.etaxonomy.cdm.model.description.Stage;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
.getLogger(StageMenuPreferences.class);
public StageMenuPreferences() {
- super(VocabularyStore.getStages(),
+ super(TermStore.getStages(),
"Stage Preferences",
"Choose stages to be shown in selection combos",
false);
package eu.etaxonomy.taxeditor.preference.menu;
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
* @param description
*/
public TaxonRelationshipTypeMenuPreferences() {
- super(VocabularyStore.getTaxonRelationshipTypes(),
+ super(TermStore.getTaxonRelationshipTypes(),
"Taxon Relationship Type Preferences",
"Configure taxon relationship types",
false);
import eu.etaxonomy.cdm.model.common.Representation;
import eu.etaxonomy.cdm.model.common.VocabularyEnum;
import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
* @author n.hoffmann
ConversationHolder conversation = CdmStore.createConversation();
if(editMode){
- VocabularyStore.updateVocabulary(getTerm());
+ TermStore.updateVocabulary(getTerm());
}else{
- VocabularyStore.saveTerm(getTerm(), getVocabulary());
+ TermStore.saveTerm(getTerm(), getVocabulary());
}
conversation.commit(false);
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.widgets.Display;
+import org.jdom.Element;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.security.authentication.ProviderManager;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.service.IAgentService;
import eu.etaxonomy.cdm.api.service.ICommonService;
+import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
+import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
import eu.etaxonomy.cdm.api.service.ILocationService;
import eu.etaxonomy.cdm.api.service.IMediaService;
import eu.etaxonomy.cdm.api.service.INameService;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
+import eu.etaxonomy.cdm.remote.view.BaseView;
+import eu.etaxonomy.cdm.remote.view.JsonView;
import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
import eu.etaxonomy.taxeditor.datasource.view.CdmDataSourceView;
import eu.etaxonomy.taxeditor.dialogs.LoginDialog;
public class CdmStore{
private static final Logger logger = Logger.getLogger(CdmStore.class);
- // FIXME change this to ClassPathResources as soon as it is included into the plugin
private static final Resource DEFAULT_APPLICATION_CONTEXT = new ClassPathResource("/eu/etaxonomy/cdm/editorApplicationContext.xml", TaxeditorStorePlugin.class.getClassLoader());
private static final DbSchemaValidation DEFAULT_DB_SCHEMA_VALIDATION = DbSchemaValidation.UPDATE;
private boolean isConnected;
-
/**
*
* @param applicationContextBean
"datasource '" + datasource + "'. Please check settings in datasources.xml. If the datasource " +
"is located on a remote machine, make sure you are connected to the network.");
logger.error(e);
+ throw new RuntimeException(e);
} catch (NullPointerException e){
StoreUtil.errorDialog("Corrupt Datasource", "The configuration for the chosen " +
"datasource '" + datasource + "' is corrupt. Please check settings in datasources.xml.");
logger.error(e);
+ throw new RuntimeException(e);
} catch (DatabaseSchemaMismatchException e){
StoreUtil.errorDialog("Database Schema incompatible", "The database schema for the chosen " +
"datasource '" + datasource + "' is not valid for this version of the taxonomic editor.");
logger.error(e);
+ throw new RuntimeException(e);
} catch (Exception e){
StoreUtil.errorDialog("Unknown Datasource Error", "An error occurred while connecting to the datasource." +
"Please refer to the error log.");
logger.error(e);
+ throw new RuntimeException(e);
}
}
}
return null;
}
+
+ public static CdmApplicationController getCurrentApplicationController(){
+ return getDefault().getApplicationController();
+ }
/*
* CONVERSATIONS
public static IOccurrenceService getOccurrenceService() { return getDefault().getApplicationController().getOccurrenceService(); }
+ public static IFeatureTreeService getFeatureTreeService() { return getDefault().getApplicationController().getFeatureTreeService(); }
+
+ public static IFeatureNodeService getFeatureNodeService() { return getDefault().getApplicationController().getFeatureNodeService(); }
+
public static IEditGeoService getGeoService(){
return (IEditGeoService) getDefault().getApplicationController().getBean("editGeoService");
}
}
public static void notifyContextStart() {
- logger.warn("Application event occured");
+ logger.info("Notifying context listeners, that the context has started.");
instance.authenticate();
getTaxonTreeService().saveOrUpdate(defaultClassification);
conversation.commit(true);
}
-
}
--- /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.store;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.ExtensionType;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.cdm.model.common.OrderedTermBase;
+import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.common.VocabularyEnum;
+import eu.etaxonomy.cdm.model.description.AbsenceTerm;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
+import eu.etaxonomy.cdm.model.description.PresenceTerm;
+import eu.etaxonomy.cdm.model.description.Stage;
+import eu.etaxonomy.cdm.model.location.NamedAreaType;
+import eu.etaxonomy.cdm.model.media.RightsTerm;
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;
+import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
+import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+
+/**
+ * All terms may be accessed through this store.
+ * Note: This is for internal use. When using vocabularies in the UI, try to use the preferred terms from
+ * PreferenceUtil
+ *
+ * @author n.hoffmann
+ * @created 25.06.2009
+ * @version 1.0
+ */
+public class TermStore {
+
+ /**
+ *
+ * @return
+ */
+ public static List<SpecimenTypeDesignationStatus> getSpecimenTypeDesignationStatus() {
+ return getTerms(SpecimenTypeDesignationStatus.class);
+ }
+
+
+ /**
+ *
+ * @return
+ */
+ public static List<NameTypeDesignationStatus> getNameTypeDesignationStatus() {
+ return getTerms(NameTypeDesignationStatus.class);
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static List<NamedAreaType> getNamedAreaTypes(){
+ return getTerms(NamedAreaType.class);
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static List<AnnotationType> getAnnotationTypes(){
+ return getTerms(AnnotationType.class);
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static List<TaxonRelationshipType> getTaxonRelationshipTypes(){
+ return getTerms(TaxonRelationshipType.class);
+ }
+
+
+ /**
+ *
+ * @return
+ */
+ public static List<Language> getLanguages(){
+ return getTerms(Language.class);
+ }
+
+
+ /**
+ * @param selected
+ */
+ public static void delete(DefinedTermBase selected) {
+ CdmStore.getTermService().delete(selected);
+ }
+ /**
+ *
+ * @return
+ */
+ public static List<Feature> getFeatures() {
+ List<Feature> features = getTerms(Feature.class);
+ features.remove(Feature.IMAGE());
+ return features;
+
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static List<NameRelationshipType> getNameRelationshipTypes() {
+ return getTerms(NameRelationshipType.class);
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static List<NomenclaturalStatusType> getNomenclaturalStatusTypes(){
+ return getTerms(NomenclaturalStatusType.class);
+ }
+
+
+ /**
+ * @return
+ *
+ */
+ public static List<MarkerType> getNonTechnicalMarkerTypes() {
+ List<MarkerType> nonTechnicalMarkerTypes = new ArrayList<MarkerType>();
+ List<MarkerType> markerTypes = getTerms(MarkerType.class);
+
+ for (Object type : markerTypes) {
+ if (((MarkerType) type).isTechnical() == false) {
+ nonTechnicalMarkerTypes.add((MarkerType) type);
+ }
+ }
+
+ return nonTechnicalMarkerTypes;
+ }
+
+
+ /**
+ * @return
+ */
+ public static List<ExtensionType> getExtensionTypes() {
+ return getTerms(ExtensionType.class);
+ }
+
+ /**
+ * @return
+ */
+ public static List<RightsTerm> getRightsTypes() {
+ return getTerms(RightsTerm.class);
+ }
+
+
+ /**
+ * Retrieve all ranks from data store.
+ *
+ * @return
+ */
+ public static List<Rank> getRanks(){
+ return getTerms(Rank.class, new Comparator<Rank>(){
+
+ @Override
+ public int compare(Rank o1, Rank o2) {
+ return o1.compareTo(o2);
+ }
+
+ });
+ }
+
+
+ /**
+ * Retrieve all presence and absence terms from data store.
+ *
+ * @return
+ */
+ public static List<PresenceAbsenceTermBase> getPresenceAbsenceTerms() {
+ List presenceAbsenceTerms = getTerms(PresenceTerm.class);
+ presenceAbsenceTerms.addAll(getTerms(AbsenceTerm.class));
+
+ return presenceAbsenceTerms;
+ }
+
+ /**
+ * Retrieve all stages from data store.
+ *
+ * @return
+ */
+ public static List<Stage> getStages(){
+ return getTerms(Stage.class);
+ }
+
+ /**
+ * Retrieve all preservation methods from data store.
+ *
+ * @return
+ */
+ public static List<PreservationMethod> getPreservationMethods(){
+ return getTerms(PreservationMethod.class);
+ }
+
+
+ /*************** save methods ******************************/
+ /**
+ * Adds a term to a vocabulary
+ *
+ * @param feature
+ */
+ public static void saveTerm(DefinedTermBase term, VocabularyEnum vocabularyType) {
+ TermVocabulary<DefinedTermBase> vocabulary = getTermVocabulary(vocabularyType);
+ vocabulary.addTerm(term);
+
+ CdmStore.getVocabularyService().save(vocabulary);
+ }
+
+ /**
+ * Save a vacabulary to data store
+ *
+ * @param feature
+ */
+ public static void updateVocabulary(DefinedTermBase term) {
+ CdmStore.getTermService().save(term);
+ }
+
+
+
+ /*************** internal methods **************************/
+
+ private static Language getDefaultLanguage(){
+ return CdmStore.getDefaultLanguage();
+ }
+
+ private static OrderedTermVocabulary<? extends OrderedTermBase> getOrderedTermVocabulary(VocabularyEnum vocabularyType){
+ TermVocabulary<DefinedTermBase> vocabulary = getTermVocabulary(vocabularyType);
+ return HibernateProxyHelper.deproxy(vocabulary, OrderedTermVocabulary.class);
+ }
+
+ public static TermVocabulary<DefinedTermBase> getTermVocabulary(VocabularyEnum vocabularyType){
+
+ return CdmStore.getVocabularyService().getVocabulary(vocabularyType);
+ }
+
+ private static <TERM extends DefinedTermBase> List<TERM> getTerms(Class<TERM> clazz){
+ Comparator comparator = new Comparator<TERM>() {
+ @Override
+ public int compare(TERM o1, TERM o2) {
+ String label1 = o1.getLabel(getDefaultLanguage()) != null ? o1.getLabel(getDefaultLanguage()) : o1.getTitleCache();
+ String label2 = o2.getLabel(getDefaultLanguage()) != null ? o2.getLabel(getDefaultLanguage()) : o2.getTitleCache();
+ return label1.compareTo(label2);
+ }
+ };
+
+ return getTerms(clazz, comparator);
+ }
+
+
+ private static <TERM extends DefinedTermBase> List<TERM> getTerms(Class<TERM> clazz, Comparator comparator){
+
+ List<TERM> terms = CdmStore.getTermService().listByTermClass(clazz, null, null, null, null);
+
+ Collections.sort(terms, comparator);
+
+ return terms;
+
+ }
+}
+++ /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.store;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.SortedSet;
-
-import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.AnnotationType;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.ExtensionType;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.common.MarkerType;
-import eu.etaxonomy.cdm.model.common.OrderedTermBase;
-import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
-import eu.etaxonomy.cdm.model.common.VocabularyEnum;
-import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
-import eu.etaxonomy.cdm.model.description.Stage;
-import eu.etaxonomy.cdm.model.location.NamedAreaType;
-import eu.etaxonomy.cdm.model.media.RightsTerm;
-import eu.etaxonomy.cdm.model.name.NameRelationshipType;
-import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
-import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
-import eu.etaxonomy.cdm.model.name.Rank;
-import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
-import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
-
-/**
- * All vocabularies may be accessed through this store.
- * Note: This is for internal use. When using vocabularies in the UI, try to use the preferred terms from
- * PreferenceUtil
- *
- * @author n.hoffmann
- * @created 25.06.2009
- * @version 1.0
- */
-public class VocabularyStore {
-
- /**
- *
- * @return
- */
- public static SortedSet<SpecimenTypeDesignationStatus> getSpecimenTypeDesignationStatus() {
- SortedSet specimenTypeDesignationStatus = getTermVocabulary(VocabularyEnum.SpecimenTypeDesignationStatus).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- return specimenTypeDesignationStatus;
- }
-
-
- /**
- *
- * @return
- */
- public static SortedSet<NameTypeDesignationStatus> getNameTypeDesignationStatus() {
- SortedSet nameTypeDesignationStatus = getTermVocabulary(VocabularyEnum.NameTypeDesignationStatus).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- return nameTypeDesignationStatus;
- }
-
- /**
- *
- * @return
- */
- public static SortedSet<NamedAreaType> getNamedAreaTypes(){
- SortedSet namedAreaTypes = getTermVocabulary(VocabularyEnum.NamedAreaType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- return namedAreaTypes;
- }
-
- /**
- *
- * @return
- */
- public static SortedSet<AnnotationType> getAnnotationTypes(){
- SortedSet annotationTypes = getTermVocabulary(VocabularyEnum.AnnotationType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- return annotationTypes;
- }
-
- /**
- *
- * @return
- */
- public static SortedSet<TaxonRelationshipType> getTaxonRelationshipTypes(){
- SortedSet taxonRelationshipTypes = getOrderedTermVocabulary(VocabularyEnum.TaxonRelationshipType).getOrderedTerms();
- return taxonRelationshipTypes;
- }
-
- /**
- *
- * @return
- *
- * @deprecated handle via preferences
- */
- public static SortedSet<TaxonRelationshipType> getConceptRelationshipTypes() {
- SortedSet<TaxonRelationshipType> conceptRelationshipTypes = getTaxonRelationshipTypes();
- // remove these two relations as they are considered standard taxon relations
- conceptRelationshipTypes.remove(TaxonRelationshipType.MISAPPLIED_NAME_FOR());
- conceptRelationshipTypes.remove(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN());
-
- return conceptRelationshipTypes;
- }
-
- /**
- *
- * @return
- */
- public static Set<Language> getLanguages(){
-
- Set languages = getTermVocabulary(VocabularyEnum.Language).getTerms();
-
-// SortedSet languages = getDefault().getTermVocabulary(VocabularyEnum.Language).getTermsOrderedByLabels(getDefaultLanguage());
- return languages;
- }
-
- public static SortedSet<? extends DefinedTermBase> getTerms(VocabularyEnum vocabularyType){
-
- TermVocabulary<DefinedTermBase> terms = getTermVocabulary(vocabularyType);
-
- if(terms != null) {
- return terms.getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- }
- return null;
- }
-
- /**
- * @param selected
- */
- public static void delete(DefinedTermBase selected) {
- CdmStore.getTermService().delete(selected);
- }
- /**
- *
- * @return
- */
- public static SortedSet<Feature> getFeatures() {
- SortedSet features = getTermVocabulary(VocabularyEnum.Feature).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- features.remove(Feature.IMAGE());
- return features;
-
- }
-
- /**
- *
- * @return
- */
- public static SortedSet<NameRelationshipType> getNameRelationshipTypes() {
- SortedSet nameRelationshipTypes = getTermVocabulary(VocabularyEnum.NameRelationshipType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- return nameRelationshipTypes;
- }
-
- /**
- *
- * @return
- */
- public static Set<NomenclaturalStatusType> getNomenclaturalStatusTypes(){
- // TODO sort types
- Set nomenclaturalStatusTypes = getTermVocabulary(VocabularyEnum.NomenclaturalStatusType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- return nomenclaturalStatusTypes;
- }
-
-
- /**
- * @return
- *
- */
- public static Set<MarkerType> getNonTechnicalMarkerTypes() {
- Set<MarkerType> nonTechnicalMarkerTypes = new HashSet<MarkerType>();
- for (Object type : getTermVocabulary(VocabularyEnum.MarkerType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage())) {
- if (((MarkerType) type).isTechnical() == false) {
- nonTechnicalMarkerTypes.add((MarkerType) type);
- }
- }
-
- return nonTechnicalMarkerTypes;
- }
-
-
- /**
- * @return
- */
- public static Set<ExtensionType> getExtensionTypes() {
- List<ExtensionType> extensionTypes = CdmStore.getTermService().listByTermClass(ExtensionType.class, null, null, null, null);
- return new HashSet(extensionTypes);
- }
-
- /**
- * @return
- */
- public static Set<RightsTerm> getRightsTypes() {
- Set rightsTypes = getTermVocabulary(VocabularyEnum.RightsTerm).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- return rightsTypes;
- }
-
-
- /**
- * Retrieve all ranks from data store.
- *
- * @return
- */
- public static SortedSet<Rank> getRanks(){
- SortedSet ranks = getOrderedTermVocabulary(VocabularyEnum.Rank).getOrderedTerms();
- return ranks;
- }
-
-
- /**
- * Retrieve all presence and absence terms from data store.
- *
- * @return
- */
- public static SortedSet<PresenceAbsenceTermBase> getPresenceAbsenceTerms() {
- SortedSet presenceAbsenceTerms = getTermVocabulary(VocabularyEnum.PresenceTerm).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
- presenceAbsenceTerms.addAll(getTermVocabulary(VocabularyEnum.AbsenceTerm).getTermsOrderedByLabels(CdmStore.getDefaultLanguage()));
-
- return presenceAbsenceTerms;
- }
-
- /**
- * Retrieve all stages from data store.
- *
- * @return
- */
- public static SortedSet<Stage> getStages(){
- SortedSet stages = getTermVocabulary(VocabularyEnum.Stage).getTermsOrderedByLabels(getDefaultLanguage());
- return stages;
- }
-
- /**
- * Retrieve all preservation methods from data store.
- *
- * @return
- */
- public static SortedSet<PreservationMethod> getPreservationMethods(){
- SortedSet preservationMethods = getTermVocabulary(VocabularyEnum.PreservationMethod).getTermsOrderedByLabels(getDefaultLanguage());
- return preservationMethods;
- }
-
-
- /*************** save methods ******************************/
- /**
- * Adds a term to a vocabulary
- *
- * @param feature
- */
- public static void saveTerm(DefinedTermBase term, VocabularyEnum vocabularyType) {
- TermVocabulary<DefinedTermBase> vocabulary = getTermVocabulary(vocabularyType);
- vocabulary.addTerm(term);
-
- CdmStore.getVocabularyService().save(vocabulary);
- }
-
- /**
- * Save a vacabulary to data store
- *
- * @param feature
- */
- public static void updateVocabulary(DefinedTermBase term) {
- CdmStore.getTermService().save(term);
- }
-
-
-
- /*************** internal methods **************************/
-
- private static Language getDefaultLanguage(){
- return CdmStore.getDefaultLanguage();
- }
-
- private static OrderedTermVocabulary<? extends OrderedTermBase> getOrderedTermVocabulary(VocabularyEnum vocabularyType){
- TermVocabulary<DefinedTermBase> vocabulary = getTermVocabulary(vocabularyType);
- return HibernateProxyHelper.deproxy(vocabulary, OrderedTermVocabulary.class);
- }
-
- public static TermVocabulary<DefinedTermBase> getTermVocabulary(VocabularyEnum vocabularyType){
- return CdmStore.getVocabularyService().getVocabulary(vocabularyType);
- }
-
-}
<?xml version="1.0" encoding="UTF-8"?>\r
<beans xmlns="http://www.springframework.org/schema/beans"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
- xmlns:context="http://www.springframework.org/schema/context"\r
- xmlns:tx="http://www.springframework.org/schema/tx"\r
- xsi:schemaLocation=\r
- "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\r
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xmlns:context="http://www.springframework.org/schema/context"\r
+ xmlns:tx="http://www.springframework.org/schema/tx"\r
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">\r
\r
- <import resource="classpath:/eu/etaxonomy/cdm/defaultApplicationContext.xml"/> \r
- <context:component-scan base-package="eu/etaxonomy/cdm/ext"/>\r
- \r
-</beans>
\ No newline at end of file
+ <import resource="classpath:/eu/etaxonomy/cdm/defaultApplicationContext.xml"/>\r
+ <import resource="classpath:/eu/etaxonomy/cdm/remote.xml"/>\r
+ <import resource="classpath:eu/etaxonomy/cdm/remote/json/jsonConfigurations.xml"/>\r
+\r
+ <context:component-scan base-package="eu/etaxonomy/cdm/remote">\r
+ <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.remote\.config\.DataSourceConfigurer" />\r
+ <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.remote\.config\.LoggingConfigurer" />\r
+ <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.remote\.view\.PatternViewResolver" />\r
+ </context:component-scan>\r
+ <context:component-scan base-package="eu/etaxonomy/cdm/ext"/>\r
+</beans>\r
package eu.etaxonomy.taxeditor.store;
-import java.util.Set;
+import java.util.List;
import org.junit.Assert;
import org.junit.BeforeClass;
@Ignore
public void testGetConceptRelationshipTypes(){
conversation.bind();
- Set<TaxonRelationshipType> conceptRelationshipTypes = VocabularyStore.getTaxonRelationshipTypes();
+ List<TaxonRelationshipType> conceptRelationshipTypes = TermStore.getTaxonRelationshipTypes();
Assert.assertNotNull(conceptRelationshipTypes);
}
}