taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorInput.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorPersistenceService.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorSearchComposite.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IBulkEditorConstants.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IBulkEditorQuery.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainer.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityCreator.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityPersistenceService.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelection.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelectionSource.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelectionViewer.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ListEditor.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ListEditorDocumentProvider.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ListEditorReconcilingStrategy.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ListEditorSourceViewerConfiguration.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceCreator.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceEditorInput.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/MergeGroupHandler.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/NewObjectHandler.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/OpenBulkEditorHandler.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/SetMergeTargetHandler.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ShowReferencingObjectsHandler.java -text
LineSelectionViewer viewer = new LineSelectionViewer(parent, ruler, getOverviewRuler(), \r
isOverviewRulerVisible(), styles | SWT.WRAP);\r
getSourceViewerDecorationSupport(viewer);\r
- \r
-// viewer.getTextWidget().setI\r
- \r
+ \r
return viewer;\r
}\r
}
\ No newline at end of file
\r
package eu.etaxonomy.taxeditor.bulkeditor;\r
\r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
+\r
import org.apache.log4j.Logger;\r
import org.eclipse.jface.text.IDocument;\r
import org.eclipse.jface.text.source.Annotation;\r
import org.eclipse.jface.text.source.ISourceViewer;\r
import org.eclipse.jface.text.source.IVerticalRuler;\r
+import org.eclipse.swt.SWT;\r
import org.eclipse.swt.custom.StyledText;\r
import org.eclipse.swt.events.MouseAdapter;\r
import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Control;\r
import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
import org.eclipse.ui.IEditorSite;\r
import org.eclipse.ui.PartInitException;\r
\r
* @created 07.07.2009\r
* @version 1.0\r
*/\r
-public class BulkEditor extends AnnotatedLineEditor {\r
+public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeListener {\r
private static final Logger logger = Logger.getLogger(BulkEditor.class);\r
\r
public static final String ID = "bulkeditor.editor";\r
* see AbstractTextEditor javadoc for explanation of context menu ids\r
*/\r
setEditorContextMenuId("#BulkEditorContext");\r
-\r
+ \r
setEntityCreator(new ReferenceCreator());\r
\r
setPersistenceService(new BulkEditorPersistenceService());\r
ISourceViewer viewer = super.createSourceViewer(parent, ruler, styles);\r
setSourceViewerConfiguration(new AnnotatedLineEditorSourceViewerConfiguration());\r
addToggleMergeCandidateListener(ruler.getControl());\r
- \r
return viewer;\r
}\r
-\r
+ \r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.AnnotatedLineEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)\r
+ */\r
+ @Override\r
+ public void init(IEditorSite site, IEditorInput input)\r
+ throws PartInitException {\r
+ \r
+ if (!(input instanceof BulkEditorInput)) {\r
+ throw new PartInitException("Invalid Input: Must be BulkEditorInput");\r
+ }\r
+ \r
+ super.init(site, input);\r
+ \r
+ ((BulkEditorInput) input).addPropertyChangeListener(this);\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createPartControl(org.eclipse.swt.widgets.Composite)\r
+ */\r
+ @Override\r
+ public void createPartControl(Composite parent) {\r
+ \r
+ GridLayout rowLayout = new GridLayout();\r
+ parent.setLayout(rowLayout);\r
+ \r
+ BulkEditorSearchComposite searchBar = new BulkEditorSearchComposite(this, parent, SWT.NONE);\r
+ searchBar.getParent().setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));\r
+ \r
+ super.createPartControl(parent);\r
+ \r
+ // \r
+ for (Control control : parent.getChildren()) {\r
+ if (control instanceof Composite && !(control instanceof BulkEditorSearchComposite)) {\r
+ control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+ }\r
+ }\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#isEditable()\r
+ */\r
+ @Override\r
+ public boolean isEditable() {\r
+ return false;\r
+ }\r
+ \r
/**\r
* @param control\r
*/\r
}\r
}\r
}\r
+\r
+ /* (non-Javadoc)\r
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)\r
+ */\r
+ public void propertyChange(PropertyChangeEvent evt) {\r
+ if (evt.getPropertyName().equals(BulkEditorInput.QUERY_CHANGED)) {\r
+ // TODO check if dirty, prompt save\r
+ \r
+ setInput(getEditorInput());\r
+ }\r
+ }\r
}\r
*/\r
package eu.etaxonomy.taxeditor.bulkeditor;\r
\r
-import org.apache.log4j.Logger;\r
+import java.beans.PropertyChangeSupport;\r
+\r
import org.eclipse.jface.resource.ImageDescriptor;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IPersistableElement;\r
* @version 1.0\r
* @param <T>\r
*/\r
-abstract public class BulkEditorInput implements IEditorInput {\r
- @SuppressWarnings("unused")\r
- private static final Logger logger = Logger\r
- .getLogger(BulkEditorInput.class);\r
+abstract public class BulkEditorInput extends PropertyChangeSupport implements IEditorInput {\r
+\r
+ /**\r
+ * @param sourceBean\r
+ */\r
+ public BulkEditorInput(Object sourceBean) {\r
+ super(sourceBean);\r
+ }\r
\r
/**\r
* See menu parameters for "taxeditor-bulkeditor.commandParameter.inputType" \r
*/\r
private static final String REFERENCE_INPUT_TYPE = "referenceInputType";\r
\r
+ public static final String QUERY_CHANGED = "query_changed";\r
+ \r
static public BulkEditorInput NewInstance(String inputType) {\r
+ \r
if (REFERENCE_INPUT_TYPE.equals(inputType)) {\r
return (BulkEditorInput) new ReferenceEditorInput(); \r
}\r
return null;\r
}\r
- \r
+\r
+ private IBulkEditorQuery query;\r
+ \r
/* (non-Javadoc)\r
* @see org.eclipse.ui.IEditorInput#exists()\r
*/\r
public Object getAdapter(Class adapter) {\r
return null;\r
}\r
+\r
+ /**\r
+ * @param bulkEditorQuery\r
+ */\r
+ public void setQuery(IBulkEditorQuery bulkEditorQuery) {\r
+ this.query = bulkEditorQuery;\r
+ \r
+ firePropertyChange(QUERY_CHANGED, null, null);\r
+ }\r
+ \r
+ public IBulkEditorQuery getQuery() {\r
+ return query;\r
+ }\r
}
\ No newline at end of file
\r
package eu.etaxonomy.taxeditor.bulkeditor;\r
\r
-import java.util.ArrayList;\r
import java.util.List;\r
\r
import org.apache.log4j.Logger;\r
// entityList.add(creator.createEntity("Acta geobotanica hungarica Debrecen, Hungary"));\r
// return entityList;\r
\r
- return CdmStore.getReferencesByTitle("S*");\r
+ if (element instanceof BulkEditorInput) {\r
+ IBulkEditorQuery query = ((BulkEditorInput) element).getQuery();\r
+ String queryString = "S*";\r
+ if (query != null) {\r
+ queryString = query.getSearchString();\r
+ }\r
+ return CdmStore.getReferencesByTitle(queryString);\r
+ }\r
+ \r
+ return null;\r
}\r
\r
/* (non-Javadoc)\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.bulkeditor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.events.KeyAdapter;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.graphics.Point;\r
+import org.eclipse.swt.graphics.Rectangle;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Menu;\r
+import org.eclipse.swt.widgets.MenuItem;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.swt.widgets.ToolBar;\r
+import org.eclipse.swt.widgets.ToolItem;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.part.EditorPart;\r
+\r
+import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;\r
+import eu.etaxonomy.taxeditor.model.Resources;\r
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 17.08.2009\r
+ * @version 1.0\r
+ */\r
+public class BulkEditorSearchComposite extends Composite implements IBulkEditorQuery {\r
+ \r
+ private IEditorPart editor;\r
+\r
+ /**\r
+ * @param parent\r
+ * @param style\r
+ */\r
+ public BulkEditorSearchComposite(EditorPart editor, Composite parent, int style) {\r
+ super(parent, style);\r
+ \r
+ this.editor = editor;\r
+ \r
+ createControl();\r
+ }\r
+\r
+ private static final Logger logger = Logger.getLogger(BulkEditorSearchComposite.class);\r
+ private Text text;\r
+ \r
+ private String defaultText = "Use \"*\" for wildcard searching";\r
+ \r
+ final private ConfigurationSelectionListener configurationListener = new ConfigurationSelectionListener();\r
+\r
+ protected void createControl() {\r
+ \r
+ GridLayout gridLayout = new GridLayout();\r
+ gridLayout.numColumns = 3;\r
+ gridLayout.marginHeight = 0;\r
+ gridLayout.marginWidth = 12;\r
+ setLayout(gridLayout);\r
+ \r
+ text = new Text(this, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);\r
+ text.setText(defaultText);\r
+ text.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));\r
+ \r
+ text.addFocusListener(new FocusListener() {\r
+\r
+ public void focusGained(FocusEvent e) {\r
+ text.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOCUS));\r
+ text.setText("");\r
+ }\r
+\r
+ public void focusLost(FocusEvent e) {\r
+ if (text.getText() == "") {\r
+ text.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));\r
+ text.setText(defaultText); \r
+ } \r
+ }\r
+ });\r
+ \r
+ text.addKeyListener(new KeyAdapter() {\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent)\r
+ */\r
+ @Override\r
+ public void keyReleased(KeyEvent e) {\r
+ if (e.keyCode == SWT.CR) {\r
+ updateEditorInput();\r
+ }\r
+ }\r
+ });\r
+ \r
+ GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false);\r
+ text.setLayoutData(gridData);\r
+ \r
+ final ToolBar toolBar = new ToolBar(this, SWT.NULL);\r
+ \r
+ ToolItem toolItem = new ToolItem(toolBar, SWT.DROP_DOWN);\r
+ toolItem.setText("Search");\r
+ \r
+ DropdownSelectionListener dropdownListener = new DropdownSelectionListener(toolItem);\r
+ \r
+ dropdownListener.add(SearchOption.TAXON);\r
+ dropdownListener.add(SearchOption.SYNONYM);\r
+ dropdownListener.add(SearchOption.NAME);\r
+ dropdownListener.add(SearchOption.COMMON_NAME);\r
+ \r
+ toolItem.addSelectionListener(dropdownListener);\r
+ }\r
+ \r
+ private void updateEditorInput() {\r
+ \r
+ String searchString = getSearchString();\r
+ \r
+ if(searchString.length() > 0){\r
+ \r
+ ITaxonServiceConfigurator configurator = configurationListener.getConfigurator();\r
+ configurator.setSearchString(searchString);\r
+ \r
+ // update query in IEditorInput\r
+ IEditorInput input = editor.getEditorInput();\r
+ if (input instanceof BulkEditorInput) {\r
+ ((BulkEditorInput) input).setQuery(this);\r
+ }\r
+ }\r
+ }\r
+ \r
+ class DropdownSelectionListener extends SelectionAdapter {\r
+\r
+ private Menu menu;\r
+\r
+ public DropdownSelectionListener(ToolItem dropdown) {\r
+ menu = new Menu(dropdown.getParent().getShell());\r
+ \r
+ MenuItem menuItem = new MenuItem(menu, SWT.PUSH);\r
+ menuItem.setText("Order by"); \r
+ }\r
+\r
+ public void add(SearchOption option) {\r
+ MenuItem menuItem = new MenuItem(menu, SWT.CHECK);\r
+ menuItem.setData(option);\r
+ menuItem.setText(option.getLabel());\r
+ menuItem.setSelection(option.getPreference());\r
+ menuItem.addSelectionListener(configurationListener);\r
+ }\r
+\r
+ public void widgetSelected(SelectionEvent event) {\r
+ if (event.detail == SWT.ARROW) {\r
+ ToolItem item = (ToolItem) event.widget;\r
+ Rectangle rect = item.getBounds();\r
+ Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));\r
+ menu.setLocation(pt.x, pt.y + rect.height);\r
+ menu.setVisible(true);\r
+ } else {\r
+ updateEditorInput();\r
+ }\r
+ }\r
+ }\r
+ \r
+ class ConfigurationSelectionListener extends SelectionAdapter{\r
+\r
+ ITaxonServiceConfigurator configurator;\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)\r
+ */\r
+ public void widgetSelected(SelectionEvent e) {\r
+ logger.warn("configuration menu clicked");\r
+ SearchOption option = (SearchOption) e.widget.getData();\r
+ \r
+ \r
+ \r
+ if(option == SearchOption.TAXON){\r
+ getConfigurator().setDoTaxa(configurator.isDoTaxa() ? false : true);\r
+ }\r
+ \r
+ if(option == SearchOption.SYNONYM){\r
+ getConfigurator().setDoSynonyms(configurator.isDoSynonyms() ? false : true);\r
+ }\r
+ \r
+ if(option == SearchOption.NAME){\r
+ getConfigurator().setDoNamesWithoutTaxa(configurator.isDoNamesWithoutTaxa() ? false : true);\r
+ }\r
+ \r
+ if(option == SearchOption.COMMON_NAME){\r
+ getConfigurator().setDoTaxaByCommonNames(configurator.isDoTaxaByCommonNames() ? false : true);\r
+ }\r
+ saveConfigurator();\r
+ }\r
+ \r
+ public ITaxonServiceConfigurator getConfigurator(){\r
+ if(configurator == null){\r
+ configurator = PreferencesUtil.getSearchConfigurator();\r
+ }\r
+ return configurator;\r
+ }\r
+ \r
+ private void saveConfigurator(){\r
+ PreferencesUtil.setSearchConfigurator(configurator);\r
+ this.configurator = PreferencesUtil.getSearchConfigurator();\r
+ }\r
+ }\r
+ \r
+ enum SearchOption {\r
+ TAXON("Taxa"),\r
+ SYNONYM("Synonyms"),\r
+ NAME("Names (without taxa)"),\r
+ COMMON_NAME("Common Names");\r
+ \r
+ private String label;\r
+ \r
+ private SearchOption(String label){\r
+ this.label = label;\r
+ }\r
+ \r
+ public String getLabel(){\r
+ return label;\r
+ }\r
+ \r
+ public boolean getPreference(){\r
+ if(! PreferencesUtil.getPreferenceStore().contains(PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_TAXA)){\r
+ // initializes the search configurator\r
+ PreferencesUtil.initializeSearchConfigurator();\r
+ }\r
+ \r
+ switch(this){\r
+ case TAXON:\r
+ boolean result = PreferencesUtil.getPreferenceStore().getBoolean(PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_TAXA);\r
+ return result;\r
+ case SYNONYM:\r
+ return PreferencesUtil.getPreferenceStore().getBoolean(PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_SYNONYMS);\r
+ case NAME:\r
+ return PreferencesUtil.getPreferenceStore().getBoolean(PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_NAMES);\r
+ case COMMON_NAME:\r
+ return PreferencesUtil.getPreferenceStore().getBoolean(PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES);\r
+ }\r
+ \r
+ return true;\r
+ }\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorQuery#getSearchString()\r
+ */\r
+ public String getSearchString() {\r
+ return text.getText().trim();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorQuery#setSearchString()\r
+ */\r
+ public void setSearchString() {\r
+ // TODO Auto-generated method stub\r
+ }\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.bulkeditor;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 19.08.2009\r
+ * @version 1.0\r
+ */\r
+public interface IBulkEditorQuery {\r
+\r
+ String getSearchString();\r
+ \r
+ void setSearchString(); \r
+}\r
*/\r
public LineSelection(TextSelection selection, IDocument document, Object selectedObject) {\r
super(document, selection.getOffset(), selection.getLength());\r
- this.structuredSelection = new StructuredSelection(selectedObject);\r
+ if (selectedObject != null) {\r
+ this.structuredSelection = new StructuredSelection(selectedObject);\r
+ } else {\r
+ this.structuredSelection = StructuredSelection.EMPTY;\r
+ }\r
}\r
\r
/* (non-Javadoc)\r
+++ /dev/null
-// $Id$\r
-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-package eu.etaxonomy.taxeditor.bulkeditor;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jface.text.source.ISourceViewer;\r
-import org.eclipse.jface.text.source.IVerticalRuler;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.editors.text.TextEditor;\r
-\r
-/**\r
- * A list-based editor, where each line in the editor's document is associated with a domain object.\r
- * <p>\r
- * Extending classes must set:\r
- * <ul>\r
- * <li>an <code>IEntityCreator</code> to create a new domain object when the user creates a new line;\r
- * <li>an <code>IEntityPersistenceService</code> for interacting with the persistence layer; and\r
- * <li>an <code>ILineDisplayStrategy</code> for various visual manifestations of the domain object. \r
- * </ul>\r
- * \r
- * @author p.ciardelli\r
- * @created 25.06.2009\r
- * @version 1.0\r
- */\r
-public class ListEditor extends TextEditor {\r
- @SuppressWarnings("unused")\r
- private static final Logger logger = Logger\r
- .getLogger(ListEditor.class);\r
- \r
- private IEntityCreator<?> entityCreator;\r
- private IEntityPersistenceService persistenceService;\r
- private ILineDisplayStrategy lineDisplayStrategy;\r
- \r
- @Override\r
- public void init(IEditorSite site, IEditorInput input)\r
- throws PartInitException {\r
- \r
- ListEditorDocumentProvider provider = new ListEditorDocumentProvider();\r
- provider.setEntityCreator(entityCreator, input);\r
- provider.setPersistenceService(persistenceService, input);\r
- provider.setLineDisplayStrategy(lineDisplayStrategy, input);\r
- setDocumentProvider(provider);\r
- \r
- super.init(site, input);\r
- }\r
- \r
- /**\r
- * @param referenceCreator\r
- */\r
- protected void setEntityCreator(IEntityCreator<?> entityCreator) {\r
- this.entityCreator = entityCreator;\r
- }\r
- \r
- /**\r
- * @param bulkEditorPersistenceService\r
- */\r
- protected void setPersistenceService(\r
- IEntityPersistenceService persistenceService) {\r
- this.persistenceService = persistenceService; \r
- }\r
-\r
- /**\r
- * @param bulkEditorLineDisplay\r
- */\r
- protected void setLineDisplayStrategy(\r
- ILineDisplayStrategy lineDisplayStrategy) {\r
- this.lineDisplayStrategy = lineDisplayStrategy; \r
- }\r
- \r
- @Override\r
- protected ISourceViewer createSourceViewer(Composite parent,\r
- IVerticalRuler ruler, int styles) {\r
- \r
- fAnnotationAccess= getAnnotationAccess();\r
- fOverviewRuler= createOverviewRuler(getSharedColors()); \r
- LineSelectionViewer viewer = new LineSelectionViewer(parent, ruler, getOverviewRuler(), \r
- isOverviewRulerVisible(), styles | SWT.WRAP);\r
- getSourceViewerDecorationSupport(viewer);\r
- return viewer;\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-// $Id$\r
-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-package eu.etaxonomy.taxeditor.bulkeditor;\r
-\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.operation.IRunnableContext;\r
-import org.eclipse.jface.text.Document;\r
-import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.Position;\r
-import org.eclipse.jface.text.source.Annotation;\r
-import org.eclipse.jface.text.source.IAnnotationModel;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.texteditor.AbstractDocumentProvider;\r
-\r
-/**\r
- * Using an <code>IEditorPart</code>, creates a document where each line is associated\r
- * with an entity. Mapping between document positions and entities is stored in\r
- * <code>LineAnnotation</code>s in a <code>LineAnnotationModdel</code>. \r
- * <p>\r
- * Requires:\r
- * <ul>\r
- * <li>an <code>IEntityCreator</code> to create entities for new lines;\r
- * <li>an <code>IEntityPersistenceService</code> for interacting with the persistence layer; and\r
- * <li>an <code>ILineDisplayStrategy</code> for various visual manifestations of the domain object. \r
- * </ul> \r
- * \r
- * @author p.ciardelli\r
- * @created 25.06.2009\r
- * @version 1.0\r
- */\r
-public class ListEditorDocumentProvider extends AbstractDocumentProvider {\r
-\r
- private static final Logger logger = Logger\r
- .getLogger(ListEditorDocumentProvider.class);\r
- \r
- private Map<IEditorInput, IDocument> documents = \r
- new HashMap<IEditorInput, IDocument>();\r
-\r
- private Map<IEditorInput, IAnnotationModel> annotationModels = \r
- new HashMap<IEditorInput, IAnnotationModel>();\r
-\r
- private Map<IEditorInput, IEntityCreator<?>> entityCreators = \r
- new HashMap<IEditorInput, IEntityCreator<?>>();\r
-\r
- private Map<IEditorInput, IEntityPersistenceService> persistenceServices = \r
- new HashMap<IEditorInput, IEntityPersistenceService>();\r
-\r
- private Map<IEditorInput, ILineDisplayStrategy> lineDisplayStrategies = \r
- new HashMap<IEditorInput, ILineDisplayStrategy>();\r
- \r
- \r
- @Override\r
- public IAnnotationModel getAnnotationModel(Object element) {\r
- if (element instanceof IEditorInput) {\r
- \r
- IEditorInput input = (IEditorInput) element;\r
- IAnnotationModel model = annotationModels.get((IEditorInput) element);\r
- \r
- // Create model as necessary\r
- if (model == null) {\r
- model = new LineAnnotationModel(getLineDisplayStrategy(element));\r
- ((LineAnnotationModel) model).setEntityCreator(getEntityCreator(element));\r
- annotationModels.put(input, model);\r
- } \r
- return model;\r
- }\r
- \r
- return null;\r
- }\r
- \r
- @Override\r
- protected IAnnotationModel createAnnotationModel(Object element)\r
- throws CoreException {\r
- return getAnnotationModel(element);\r
- }\r
-\r
- @Override\r
- public IDocument getDocument(Object element) {\r
- if (element instanceof IEditorInput) {\r
- return documents.get((IEditorInput) element);\r
- }\r
- return null;\r
- }\r
- \r
- @Override\r
- protected IDocument createDocument(Object element) throws CoreException {\r
- \r
- if (element instanceof IEditorInput) {\r
- IEditorInput input = (IEditorInput) element;\r
- Document document = new Document("");\r
- IAnnotationModel model = getAnnotationModel(element);\r
- \r
- String text = "";\r
- String line;\r
- for (Object entity : getEntityList(element)) {\r
- \r
- Annotation annotation = new LineAnnotation(entity, getLineDisplayStrategy(element));\r
- \r
- line = annotation.getText() + document.getDefaultLineDelimiter();\r
- Position position = new Position(text.length(), line.length());\r
- model.addAnnotation(annotation, position);\r
- logger.info("Adding annotation " + entity);\r
- document.set(document.get() + line);\r
- \r
- text += line;\r
- }\r
- documents.put(input, document);\r
- if (model instanceof LineAnnotationModel) {\r
- ((LineAnnotationModel) model).printAnnotations();\r
- }\r
- return document;\r
- }\r
- return null;\r
- }\r
-\r
- /**\r
- * @param element \r
- * @return\r
- */\r
- private List<?> getEntityList(Object element) {\r
- if (element instanceof IEditorInput) {\r
- return getPersistenceService(element).getEntityList(element);\r
- }\r
- return null;\r
- }\r
-\r
- @Override\r
- protected void doSaveDocument(IProgressMonitor monitor, Object element,\r
- IDocument document, boolean overwrite) throws CoreException {\r
- if (element instanceof IEditorInput) {\r
- \r
- IEntityPersistenceService persistenceService = getPersistenceService(element);\r
- \r
- // Get new containers from annotation model\r
- LineAnnotationModel model = (LineAnnotationModel) getAnnotationModel(element);\r
- Iterator iterator = model.getAnnotationIterator();\r
- while (iterator.hasNext()) {\r
- Annotation annotation = (Annotation) iterator.next();\r
- if (annotation instanceof IEntityContainer<?>) {\r
- IEntityContainer<?> container = (IEntityContainer<?>) annotation;\r
- if (container.isMarkedAsNew() || container.isDirty()) {\r
- persistenceService.save(container.getEntity(), element);\r
- container.setDirty(false);\r
- container.markAsNew(false);\r
- }\r
- }\r
- }\r
- for (LineAnnotation annotation : model.getDeletedAnnotations()) {\r
- if (annotation.isMarkedAsNew()) {\r
- continue;\r
- }\r
- if (annotation.isMarkedAsMerged()) {\r
- persistenceService.merge(annotation.getEntity(), annotation.getMergeTarget(), element); \r
- }\r
- persistenceService.delete(annotation.getEntity(), element);\r
- }\r
- model.clearDeletedAnnotations();\r
- }\r
- }\r
-\r
- @Override\r
- protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {\r
- return null;\r
- }\r
- \r
- @Override\r
- public boolean isModifiable(Object element) {\r
- return true;\r
- }\r
- \r
- @Override\r
- public boolean isReadOnly(Object element) {\r
- // enables copy & paste\r
- return false;\r
- }\r
-\r
- /**\r
- * @param entityCreator\r
- * @param element\r
- */\r
- public void setEntityCreator(IEntityCreator<?> entityCreator, Object element) {\r
- if (element instanceof IEditorInput) {\r
- entityCreators.put((IEditorInput) element, entityCreator);\r
- }\r
- }\r
- \r
- /**\r
- * @param element\r
- * @return\r
- */\r
- public IEntityCreator<?> getEntityCreator(Object element) {\r
- if (element instanceof IEditorInput) {\r
- IEntityCreator<?> entityCreator = entityCreators.get(element);\r
- Assert.isNotNull(entityCreator, "No IEntityCreator set for this element.");\r
- return entityCreator;\r
- }\r
- return null;\r
- }\r
-\r
- /**\r
- * @param persistenceService\r
- * @param input\r
- */\r
- public void setPersistenceService(\r
- IEntityPersistenceService persistenceService, Object element) {\r
- if (element instanceof IEditorInput) {\r
- persistenceServices.put((IEditorInput) element, persistenceService);\r
- }\r
- }\r
- \r
- public IEntityPersistenceService getPersistenceService(Object element) {\r
- if (element instanceof IEditorInput) {\r
- IEntityPersistenceService persistenceService = persistenceServices.get((IEditorInput) element);\r
- Assert.isNotNull(persistenceService, "No IEntityPersistenceService set for this element.");\r
- return persistenceService;\r
- }\r
- return null;\r
- }\r
-\r
- /**\r
- * @param lineDisplayStrategy\r
- * @param input\r
- */\r
- public void setLineDisplayStrategy(\r
- ILineDisplayStrategy lineDisplayStrategy, Object element) {\r
- if (element instanceof IEditorInput) {\r
- lineDisplayStrategies.put((IEditorInput) element, lineDisplayStrategy);\r
- } \r
- }\r
- \r
- /**\r
- * @param element\r
- * @return\r
- */\r
- private ILineDisplayStrategy getLineDisplayStrategy(Object element) {\r
- if (element instanceof IEditorInput) {\r
- ILineDisplayStrategy lineDisplayStrategy = lineDisplayStrategies.get((IEditorInput) element);\r
- Assert.isNotNull(lineDisplayStrategy, "No ILineDisplayStrategy set for this element.");\r
- return lineDisplayStrategy;\r
- }\r
- return null;\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-// $Id$\r
-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-package eu.etaxonomy.taxeditor.bulkeditor;\r
-\r
-import java.util.List;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jface.text.BadLocationException;\r
-import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.IRegion;\r
-import org.eclipse.jface.text.Position;\r
-import org.eclipse.jface.text.reconciler.DirtyRegion;\r
-import org.eclipse.jface.text.reconciler.IReconcilingStrategy;\r
-import org.eclipse.jface.text.source.Annotation;\r
-import org.eclipse.jface.text.source.IAnnotationModel;\r
-import org.eclipse.jface.text.source.ISourceViewer;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 25.06.2009\r
- * @version 1.0\r
- */\r
-public class ListEditorReconcilingStrategy implements IReconcilingStrategy {\r
- private static final Logger logger = Logger\r
- .getLogger(ListEditorReconcilingStrategy.class);\r
-\r
- private IDocument document;\r
- private ISourceViewer viewer;\r
-\r
- public ListEditorReconcilingStrategy(ISourceViewer sourceViewer) {\r
- this.viewer = sourceViewer;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.jface.text.reconciler.IReconcilingStrategy#reconcile(org.eclipse.jface.text.IRegion)\r
- */\r
- public void reconcile(IRegion partition) {\r
- // not used\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.jface.text.reconciler.IReconcilingStrategy#reconcile(org.eclipse.jface.text.reconciler.DirtyRegion, org.eclipse.jface.text.IRegion)\r
- */\r
- public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {\r
- try {\r
- doReconcile(dirtyRegion);\r
- } catch (BadLocationException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- }\r
- \r
- synchronized private void doReconcile(DirtyRegion dirtyRegion) throws BadLocationException {\r
- // Get all affected lines\r
- int dirtyOffset = dirtyRegion.getOffset();\r
- int dirtyLength = dirtyRegion.getLength();\r
- \r
- int lineChangeStart = document.getLineOfOffset(dirtyOffset);\r
- int lineChangeEnd;\r
- if (DirtyRegion.INSERT.equals(dirtyRegion.getType())) {\r
- lineChangeEnd = document.getLineOfOffset(dirtyOffset + dirtyLength);\r
- } else {\r
- lineChangeEnd = lineChangeStart;\r
- }\r
- \r
- for (int i = lineChangeStart; i <= lineChangeEnd; i++) {\r
- int lineOffset = document.getLineOffset(i);\r
- int lineLength = document.getLineLength(i);\r
- IRegion lineRegion = document.getLineInformation(i);\r
- String lineText = document.get(lineRegion.getOffset(), lineRegion.getLength());\r
- \r
- List<LineAnnotation> annotationsCurrentLine = \r
- ((LineAnnotationModel) getAnnotationModel()).getUndeletedAnnotations(lineOffset, lineLength);\r
- \r
- if (annotationsCurrentLine.size() == 0) {\r
- logger.debug("Adding new annotation " + lineText);\r
- addAnnotation(lineText, lineRegion);\r
- } else {\r
- LineAnnotation currentAnnotation = annotationsCurrentLine.get(0);\r
- int length = lineLength;\r
- getAnnotationModel().getPosition(currentAnnotation).setLength(length);\r
- currentAnnotation.setText(lineText);\r
- \r
- for (int j = 1; j < annotationsCurrentLine.size(); j++) {\r
- annotationsCurrentLine.get(j).markAsMerged(currentAnnotation.getEntity());\r
- getAnnotationModel().removeAnnotation(annotationsCurrentLine.get(j));\r
- }\r
- }\r
- }\r
- \r
- // Deletes have already taken place\r
- \r
- ((LineAnnotationModel) getAnnotationModel()).printAnnotations();\r
- }\r
- \r
- private void addAnnotation(String text, IRegion region) {\r
- Position position = new Position(region.getOffset(), region.getLength());\r
- Annotation annotation = ((LineAnnotationModel) getAnnotationModel()).createAnnotation(text);\r
- getAnnotationModel().addAnnotation(annotation, position);\r
- \r
-// Position position2 = new Position(region.getOffset() + 1, region.getLength() - 2);\r
-// Annotation annotation2 = new Annotation("org.eclipse.ui.workbench.texteditor.error",true,"asdf");\r
-// getAnnotationModel().addAnnotation(annotation2, position2);\r
- }\r
-\r
- private IAnnotationModel getAnnotationModel() {\r
- return viewer.getAnnotationModel();\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see org.eclipse.jface.text.reconciler.IReconcilingStrategy#setDocument(org.eclipse.jface.text.IDocument)\r
- */\r
- public void setDocument(IDocument document) {\r
- this.document = document; \r
- }\r
-}\r
+++ /dev/null
-// $Id$\r
-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-package eu.etaxonomy.taxeditor.bulkeditor;\r
-\r
-import java.util.Iterator;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jface.text.DefaultInformationControl;\r
-import org.eclipse.jface.text.DefaultTextHover;\r
-import org.eclipse.jface.text.IInformationControl;\r
-import org.eclipse.jface.text.IInformationControlCreator;\r
-import org.eclipse.jface.text.IRegion;\r
-import org.eclipse.jface.text.ITextHover;\r
-import org.eclipse.jface.text.ITextHoverExtension;\r
-import org.eclipse.jface.text.ITextViewer;\r
-import org.eclipse.jface.text.Position;\r
-import org.eclipse.jface.text.reconciler.IReconciler;\r
-import org.eclipse.jface.text.reconciler.IReconcilingStrategy;\r
-import org.eclipse.jface.text.reconciler.MonoReconciler;\r
-import org.eclipse.jface.text.source.Annotation;\r
-import org.eclipse.jface.text.source.IAnnotationModel;\r
-import org.eclipse.jface.text.source.ISourceViewer;\r
-import org.eclipse.jface.text.source.SourceViewerConfiguration;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.ui.editors.text.EditorsUI;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 25.06.2009\r
- * @version 1.0\r
- */\r
-public class ListEditorSourceViewerConfiguration extends\r
- SourceViewerConfiguration {\r
- @SuppressWarnings("unused")\r
- private static final Logger logger = Logger.getLogger(ListEditorSourceViewerConfiguration.class);\r
- \r
- /* (non-Javadoc)\r
- * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getReconciler(org.eclipse.jface.text.source.ISourceViewer)\r
- */\r
- public IReconciler getReconciler(ISourceViewer sourceViewer) {\r
- \r
- IReconcilingStrategy strategy = new ListEditorReconcilingStrategy(sourceViewer);\r
- IReconciler reconciler = new MonoReconciler(strategy, true);\r
-\r
- return reconciler;\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getTextHover(org.eclipse.jface.text.source.ISourceViewer, java.lang.String, int)\r
- */\r
- @Override\r
- public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {\r
- /**\r
- * http://dev.eclipse.org/newslists/news.eclipse.platform/msg76821.html\r
- * \r
- * The Javadoc hover is shown in a Browser widget\r
- */\r
- return new TextHover(sourceViewer);\r
- }\r
- \r
- private final class TextHover extends DefaultTextHover implements ITextHoverExtension {\r
-\r
- private ISourceViewer sourceViewer;\r
-\r
- public TextHover(ISourceViewer sourceViewer) {\r
- super(sourceViewer);\r
- \r
- this.sourceViewer = sourceViewer;\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see org.eclipse.jface.text.DefaultTextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)\r
- */\r
- @Override\r
- public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {\r
- \r
- IAnnotationModel model= sourceViewer.getAnnotationModel();\r
- Iterator e= model.getAnnotationIterator();\r
- while (e.hasNext()) {\r
- Annotation annotation= (Annotation) e.next();\r
- if (isIncluded(annotation)) {\r
- Position p= model.getPosition(annotation);\r
- if (p != null && p.overlapsWith(hoverRegion.getOffset(), hoverRegion.getLength())) {\r
- return ((LineAnnotation) annotation).getHoverText();\r
- }\r
- }\r
- }\r
- return null;\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator()\r
- */\r
- public IInformationControlCreator getHoverControlCreator() {\r
- return new IInformationControlCreator() {\r
- public IInformationControl createInformationControl(Shell parent) {\r
- return new DefaultInformationControl(parent, EditorsUI.getTooltipAffordanceString());\r
- }\r
- };\r
- }\r
- }\r
-}
\ No newline at end of file
*/\r
package eu.etaxonomy.taxeditor.bulkeditor;\r
\r
-import org.apache.log4j.Logger;\r
import org.eclipse.ui.IEditorInput;\r
\r
/**\r
*/\r
public class ReferenceEditorInput extends BulkEditorInput implements\r
IEditorInput {\r
- @SuppressWarnings("unused")\r
- private static final Logger logger = Logger\r
- .getLogger(ReferenceEditorInput.class);\r
\r
+ /**\r
+ * @param sourceBean\r
+ */\r
+ public ReferenceEditorInput() {\r
+ super(new Object());\r
+ // TODO Auto-generated constructor stub\r
+ }\r
\r
/* (non-Javadoc)\r
* @see org.eclipse.ui.IEditorInput#getName()\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.bulkeditor.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.jface.text.BadLocationException;\r
+import org.eclipse.jface.text.Document;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.editors.text.TextEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.08.2009\r
+ * @version 1.0\r
+ */\r
+public class NewObjectHandler extends AbstractHandler {\r
+ private static final Logger logger = Logger\r
+ .getLogger(NewObjectHandler.class);\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+ */\r
+ public Object execute(ExecutionEvent event) throws ExecutionException {\r
+ \r
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+ IEditorInput input = editor.getEditorInput();\r
+ if (editor instanceof TextEditor) {\r
+ Document document = (Document) ((TextEditor) editor).getDocumentProvider().getDocument(input);\r
+ try {\r
+ document.replace(document.getLength(), 0, document.getDefaultLineDelimiter() + "new guy");\r
+// ((TextEditor) editor).gotoAnnotation(forward)\r
+ } catch (BadLocationException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+// ((TextEditor) editor).getDocumentProvider().getDocument(input).set("hi");\r
+ }\r
+ return null;\r
+ }\r
+}\r