eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesLabelProvider.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesViewPart.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/CreateUseHandler.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/CreateUseRecordHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/DeleteUseHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/DynamicFeatureMenu.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateTaxonUseOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateUseRecordOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/DeleteTaxonUseOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/resources/TaonDescriptionEditor.screen -text
eu.etaxonomy.taxeditor.editor/src/main/resources/log4j.properties -text
--- /dev/null
+package eu.etaxonomy.taxeditor.editor.view.uses.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
+import eu.etaxonomy.taxeditor.editor.view.uses.operation.CreateUseRecordOperation;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+
+public class CreateUseRecordHandler extends AbstractHandler {
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IWorkbenchPart part = HandlerUtil.getActivePart(event);
+ IPostOperationEnabled postOperationEnabled = (part instanceof IPostOperationEnabled) ? (IPostOperationEnabled) part
+ : null;
+
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);
+ if (editor instanceof FormEditor) {
+ editor = ((FormEditor) editor).getActiveEditor();
+ }
+ IEditorInput input = editor.getEditorInput();
+ if (input instanceof TaxonEditorInput) {
+ Taxon taxon = ((TaxonEditorInput) input).getTaxon();
+
+ TaxonDescription description = null;
+
+ ISelection selection = HandlerUtil.getActiveMenuSelection(event);
+ if (selection instanceof ITreeSelection) {
+ TreePath[] paths = ((ITreeSelection) selection).getPaths();
+ Object firstSegment = paths[0].getFirstSegment();
+ if (firstSegment instanceof TaxonDescription) {
+ description = (TaxonDescription) firstSegment;
+ }
+ }else if (selection instanceof IStructuredSelection) {
+ Object selectedElement = ((IStructuredSelection) selection)
+ .getFirstElement();
+ if (selectedElement instanceof TaxonDescription){
+ description = (TaxonDescription) selectedElement;
+ }
+ }
+
+ if (description != null) {
+
+ Feature feature = (Feature) ((Event) event.getTrigger()).data;
+
+ AbstractPostOperation operation = null;
+ try {
+ // TODO use undo context specific to editor
+ operation = new CreateUseRecordOperation(event
+ .getCommand().getName(),
+ EditorUtil.getUndoContext(), taxon,
+ description, element, postOperationEnabled);
+ EditorUtil.executeOperation(operation);
+ } catch (NotDefinedException e) {
+ EditorUtil.warn(getClass(), "Command name not set");
+ }
+ } else {
+ EditorUtil.error(getClass(), new IllegalArgumentException("Could not determine the taxon description"));
+ return null;
+ }
+ }
+ return null;
+
+ }
+}
--- /dev/null
+package eu.etaxonomy.taxeditor.editor.view.uses.operation;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+
+import eu.etaxonomy.cdm.model.description.CategoricalData;
+import eu.etaxonomy.cdm.model.description.CommonTaxonName;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.Distribution;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
+import eu.etaxonomy.cdm.model.description.QuantitativeData;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.description.TaxonInteraction;
+import eu.etaxonomy.cdm.model.description.TextData;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+
+public class CreateUseRecordOperation extends AbstractPostOperation {
+
+ public static final String ID = "eu.etaxonomy.taxeditor.editor.use.createUseRecord";
+
+ private TaxonDescription description;
+ private Feature feature;
+ private DescriptionElementBase element;
+
+
+ public CreateUseRecordOperation(String label, IUndoContext undoContext,
+ Taxon taxon, TaxonDescription description, DescriptionElementBase element, IPostOperationEnabled postOperationEnabled) {
+ super(label, undoContext, taxon, postOperationEnabled);
+
+ this.description = description;
+ this.element = element;
+ }
+
+ public CreateUseRecordOperation(String label,
+ IUndoContext undoContext, Taxon taxon,
+ TaxonDescription description, Feature feature,
+ DescriptionElementBase element, IPostOperationEnabled postOperationEnabled) {
+ this(label, undoContext, taxon, description, element, postOperationEnabled);
+
+ this.element = element;
+ }
+
+ @Override
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ monitor.worked(20);
+ if (element == null) {
+ if (feature.isSupportsCommonTaxonName()) {
+ element = CommonTaxonName.NewInstance("", null);
+ }
+ else if (feature.isSupportsDistribution()) {
+ element = Distribution.NewInstance();
+ }
+ else if(feature.isSupportsTaxonInteraction()){
+ element = TaxonInteraction.NewInstance();
+ }
+ else if(feature.isSupportsIndividualAssociation()){
+ element = IndividualsAssociation.NewInstance();
+ }
+ else if(feature.isSupportsCategoricalData()){
+ element = CategoricalData.NewInstance();
+ }
+ else if(feature.isSupportsQuantitativeData()){
+ element = QuantitativeData.NewInstance();
+ }
+ else {
+ element = TextData.NewInstance();
+ }
+ }
+
+
+ element.setFeature(feature);
+ description.addElement(element);
+ monitor.worked(40);
+
+ return postExecute(element);
+ }
+
+ @Override
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+
+ description.addElement(element);
+
+ return postExecute(element);
+ }
+
+ @Override
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ description.removeElement(element);
+
+ return postExecute(null);
+ }
+}