-// $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 java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-import java.util.Iterator;\r
-\r
-import org.eclipse.jface.dialogs.MessageDialog;\r
-import org.eclipse.jface.dialogs.MessageDialogWithToggle;\r
-import org.eclipse.jface.preference.IPreferenceStore;\r
-import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.source.Annotation;\r
-import org.eclipse.jface.text.source.AnnotationModel;\r
-import org.eclipse.jface.text.source.IAnnotationModel;\r
-import org.eclipse.jface.text.source.ISourceViewer;\r
-import org.eclipse.jface.text.source.IVerticalRuler;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
-import org.eclipse.jface.window.Window;\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.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.texteditor.IDocumentProvider;\r
-\r
-import eu.etaxonomy.cdm.model.common.MarkerType;\r
-import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineDocumentProvider;\r
-import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor;\r
-import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation;\r
-import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotationModel;\r
-import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;\r
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;\r
-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.TermStore;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 07.07.2009\r
- * @version 1.0\r
- */\r
-public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeListener, IPartContentHasDetails, IDirtyMarkableSelectionProvider{\r
-\r
- public static final String ID = "bulkeditor.editor";\r
-\r
- private boolean isInitialFocus = true;\r
- \r
- private BulkEditorSearchComposite searchBar = null;\r
- \r
- private IPropertyChangeListener markerPreferenceListener;\r
-\r
- /**\r
- * \r
- */\r
- public BulkEditor() {\r
- super(CdmStore.createConversation());\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.editors.text.TextEditor#initializeEditor()\r
- */\r
- @Override\r
- protected void initializeEditor() {\r
- super.initializeEditor();\r
- \r
- /**\r
- * see AbstractTextEditor javadoc for explanation of context menu ids\r
- */\r
- setEditorContextMenuId("#BulkEditorContext");\r
-\r
- setEntityCreatorService(new BulkEditorEntityCreatorService());\r
- \r
- setLineDisplayStrategy(new BulkEditorLineDisplay(this));\r
- \r
- setSourceViewerConfiguration(new BulkEditorViewerConfiguration(lineDisplayStrategy));\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.bulkeditor.ListEditor#createSourceViewer(org.eclipse.swt.widgets.Composite, org.eclipse.jface.text.source.IVerticalRuler, int)\r
- */\r
- protected ISourceViewer createSourceViewer(Composite parent,\r
- IVerticalRuler ruler, int styles) {\r
- ISourceViewer viewer = super.createSourceViewer(parent, ruler, styles);\r
- if (((AbstractBulkEditorInput) getEditorInput()).isMergingEnabled()) {\r
- addToggleMergeCandidateListener(ruler.getControl());\r
- }\r
- return viewer;\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 AbstractBulkEditorInput)) {\r
- throw new PartInitException("Invalid Input: Must be BulkEditorInput");\r
- }\r
- \r
- super.init(site, input);\r
- \r
- ((AbstractBulkEditorInput) 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
- parent.setLayout(new GridLayout());\r
- \r
- Composite layoutComposite = new Composite(parent, SWT.TOP);\r
- layoutComposite.setLayout(new GridLayout());\r
- \r
- searchBar = new BulkEditorSearchComposite(this, layoutComposite, SWT.NONE);\r
- layoutComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));\r
-\r
- if (isEditableMarkerTypes()) {\r
- // TODO this will be obsolete\r
-// createMarkerEditing(layoutComposite);\r
- }\r
- \r
- searchBar.setEnabled(! getEditorInput().isSingleEntityMode());\r
- \r
- super.createPartControl(parent);\r
- \r
- // Set viewer composite to fill grid. Unfortunately it is private and we have to do a little hack here.\r
- for (Control control : parent.getChildren()) {\r
- if (control instanceof Composite && \r
- !(control.equals(layoutComposite))) {\r
- control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
- }\r
- }\r
- }\r
- \r
- /**\r
- * @param parent \r
- * \r
- */\r
- private void createMarkerEditing(Composite parent) {\r
- final BulkEditorMarkerPreferenceComposite markerPreferenceBar = \r
- new BulkEditorMarkerPreferenceComposite((AbstractBulkEditorInput) getEditorInput(), parent, SWT.NONE);\r
- markerPreferenceListener = new IPropertyChangeListener() {\r
- public void propertyChange(\r
- org.eclipse.jface.util.PropertyChangeEvent event) {\r
- if (event.getProperty().contains(PreferencesUtil.EDIT_MARKER_TYPE_PREFIX)) {\r
- refreshLineDisplay();\r
- }\r
- }\r
- };\r
- PreferencesUtil.getPreferenceStore().addPropertyChangeListener(markerPreferenceListener);\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.editors.text.TextEditor#dispose()\r
- */\r
- @Override\r
- public void dispose() {\r
- if (markerPreferenceListener != null ) {\r
- PreferencesUtil.getPreferenceStore().removePropertyChangeListener(markerPreferenceListener);\r
- }\r
- super.dispose();\r
- }\r
- \r
- /**\r
- * Can this input type edit any markers?\r
- * \r
- * @return\r
- */\r
- private boolean isEditableMarkerTypes() { \r
- for (MarkerType markerType : TermStore.getNonTechnicalMarkerTypes()) {\r
- if (((AbstractBulkEditorInput) getEditorInput()).isMarkerTypeEditingEnabled(markerType)) {\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
-\r
- /**\r
- * Refreshes text in all lines.\r
- */\r
- protected void refreshLineDisplay() {\r
- IDocumentProvider provider = getDocumentProvider();\r
- IEditorInput input = getEditorInput();\r
- IAnnotationModel model = provider.getAnnotationModel(input);\r
- Iterator iter = getDocumentProvider().getAnnotationModel(getEditorInput()).getAnnotationIterator();\r
- while (iter.hasNext()) {\r
- Object next = iter.next();\r
- if (next instanceof LineAnnotation) {\r
- LineAnnotation annotation = (LineAnnotation) next;\r
- ((AnnotatedLineDocumentProvider) getDocumentProvider()).\r
- updateLineFromAnnotation(annotation);\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
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#setFocus()\r
- */\r
- @Override\r
- public void setFocus() {\r
-// super.setFocus();\r
- \r
- // TODO Since setFocus() is called by RCP, can a global variable (searchBar) be avoided?\r
- setFocusOnToolBar();\r
-\r
- // TODO find a better place to put this - this dialog should be shown after initial contents of \r
- // Editor are displayed\r
- if (isInitialFocus) {\r
- displayWarningDialog();\r
- isInitialFocus = false;\r
- }\r
- }\r
-\r
- /**\r
- * Sets focus on the toolbar.\r
- */\r
- private void setFocusOnToolBar() {\r
- if (searchBar != null) {\r
- searchBar.setFocus();\r
- }\r
- }\r
- \r
- /**\r
- * \r
- */\r
- private void displayWarningDialog() {\r
- IPreferenceStore prefs = PreferencesUtil.getPreferenceStore();\r
- if (!prefs.getBoolean(PreferencesUtil.HIDE_BULKEDITOR_INFO)) {\r
- String msg = "The Bulk Editor allows you to edit objects used to reference other objects, such as names, references, and authors.\n\n" +\r
- "Any changes you make to an object in the Bulk Editor will be displayed wherever the object is used.\n\n" +\r
- "For instance, a reference may be displayed with both a name and a descriptive element. If the reference name is changed here, the display of both the name and the descriptive element will be affected.";\r
- MessageDialogWithToggle dialog = MessageDialogWithToggle.openOkCancelConfirm\r
- (getSite().getShell(), "Bulk Editor", msg, "Do not show this message again", \r
- false, null, PreferencesUtil.HIDE_BULKEDITOR_INFO);\r
- if (dialog.getReturnCode() == Window.OK) { \r
- prefs.setValue(PreferencesUtil.HIDE_BULKEDITOR_INFO, dialog.getToggleState());\r
- }\r
- }\r
- }\r
- \r
- /**\r
- * @param control\r
- */\r
- private void addToggleMergeCandidateListener(Control control) {\r
- control.addMouseListener(new MouseAdapter() {\r
- @Override\r
- public void mouseDoubleClick(MouseEvent e) {\r
- StyledText textWidget = getSourceViewer().getTextWidget();\r
- int line = textWidget.getLineIndex(e.y);\r
- toggleMergeCandidateAnnotation(line);\r
- }\r
- });\r
- }\r
-\r
- /**\r
- * @param line\r
- */\r
- public void toggleMergeCandidateAnnotation(int line) {\r
- \r
- IDocument document = getSourceViewer().getDocument();\r
- LineAnnotationModel model = \r
- (LineAnnotationModel) getSourceViewer().getAnnotationModel();\r
- \r
- Annotation annotation = model.getAnnotationAtLine(line, document);\r
- \r
- if (annotation != null) {\r
- if (annotation.getType().equals(IBulkEditorConstants.TYPE_MERGE_CANDIDATE)) {\r
- model.changeAnnotationType(\r
- annotation, LineAnnotation.TYPE_GENERIC);\r
- } else {\r
- model.changeAnnotationType(\r
- annotation, IBulkEditorConstants.TYPE_MERGE_CANDIDATE);\r
- }\r
- }\r
- }\r
- \r
- public void changed(Object object) {\r
-// this.dirty = dirty;\r
- AnnotatedLineDocumentProvider p = (AnnotatedLineDocumentProvider) getDocumentProvider();\r
- p.changed(object);\r
-// firePropertyChange(PROP_DIRTY);\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(AbstractBulkEditorInput.QUERY_CHANGED)) {\r
- \r
- // TODO check if dirty, prompt save\r
- if (isDirty()) {\r
- boolean proceed = MessageDialog.openQuestion(getEditorSite().getShell(), \r
- "Save changes", "You have made changes that must be saved before this query can be executed. Would you like to proceed?");\r
- if (proceed) {\r
- doSave(null);\r
- } else {\r
- return;\r
- }\r
- }\r
- if(getDocumentProvider().getAnnotationModel(getEditorInput()) != null){\r
- ((AnnotationModel) getDocumentProvider().getAnnotationModel(getEditorInput())).removeAllAnnotations();\r
- }\r
- setInput(getEditorInput());\r
- }\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor#getContributorId()\r
- */\r
- public String getContributorId() {\r
- return BulkEditor.ID;\r
- }\r
- \r
- @Override\r
- public AbstractBulkEditorInput getEditorInput() {\r
- // TODO Auto-generated method stub\r
- return (AbstractBulkEditorInput) super.getEditorInput();\r
- }\r
-}
\ No newline at end of file
+// $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.bulkeditor;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Iterator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.source.Annotation;
+import org.eclipse.jface.text.source.AnnotationModel;
+import org.eclipse.jface.text.source.IAnnotationModel;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.IVerticalRuler;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+
+import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineDocumentProvider;
+import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor;
+import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation;
+import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotationModel;
+import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
+
+/**
+ * <p>BulkEditor class.</p>
+ *
+ * @author p.ciardelli
+ * @created 07.07.2009
+ * @version 1.0
+ */
+public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeListener, IPartContentHasDetails, IDirtyMarkableSelectionProvider{
+
+ /** Constant <code>ID="bulkeditor.editor"</code> */
+ public static final String ID = "bulkeditor.editor";
+
+ private boolean isInitialFocus = true;
+
+ private BulkEditorSearchComposite searchBar = null;
+
+ private IPropertyChangeListener markerPreferenceListener;
+
+ /**
+ * <p>Constructor for BulkEditor.</p>
+ */
+ public BulkEditor() {
+ super(CdmStore.createConversation());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.editors.text.TextEditor#initializeEditor()
+ */
+ /** {@inheritDoc} */
+ @Override
+ protected void initializeEditor() {
+ super.initializeEditor();
+
+ /**
+ * see AbstractTextEditor javadoc for explanation of context menu ids
+ */
+ setEditorContextMenuId("#BulkEditorContext");
+
+ setEntityCreatorService(new BulkEditorEntityCreatorService());
+
+ setLineDisplayStrategy(new BulkEditorLineDisplay(this));
+
+ setSourceViewerConfiguration(new BulkEditorViewerConfiguration(lineDisplayStrategy));
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.bulkeditor.ListEditor#createSourceViewer(org.eclipse.swt.widgets.Composite, org.eclipse.jface.text.source.IVerticalRuler, int)
+ */
+ /** {@inheritDoc} */
+ protected ISourceViewer createSourceViewer(Composite parent,
+ IVerticalRuler ruler, int styles) {
+ ISourceViewer viewer = super.createSourceViewer(parent, ruler, styles);
+ if (((AbstractBulkEditorInput) getEditorInput()).isMergingEnabled()) {
+ addToggleMergeCandidateListener(ruler.getControl());
+ }
+ return viewer;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.bulkeditor.AnnotatedLineEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void init(IEditorSite site, IEditorInput input)
+ throws PartInitException {
+
+ if (!(input instanceof AbstractBulkEditorInput)) {
+ throw new PartInitException("Invalid Input: Must be BulkEditorInput");
+ }
+
+ super.init(site, input);
+
+ ((AbstractBulkEditorInput) input).addPropertyChangeListener(this);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void createPartControl(Composite parent) {
+
+ parent.setLayout(new GridLayout());
+
+ Composite layoutComposite = new Composite(parent, SWT.TOP);
+ layoutComposite.setLayout(new GridLayout());
+
+ searchBar = new BulkEditorSearchComposite(this, layoutComposite, SWT.NONE);
+ layoutComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+
+ if (isEditableMarkerTypes()) {
+ // TODO this will be obsolete
+// createMarkerEditing(layoutComposite);
+ }
+
+ searchBar.setEnabled(! getEditorInput().isSingleEntityMode());
+
+ super.createPartControl(parent);
+
+ // Set viewer composite to fill grid. Unfortunately it is private and we have to do a little hack here.
+ for (Control control : parent.getChildren()) {
+ if (control instanceof Composite &&
+ !(control.equals(layoutComposite))) {
+ control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ }
+ }
+ }
+
+ /**
+ * @param parent
+ *
+ */
+ private void createMarkerEditing(Composite parent) {
+ final BulkEditorMarkerPreferenceComposite markerPreferenceBar =
+ new BulkEditorMarkerPreferenceComposite((AbstractBulkEditorInput) getEditorInput(), parent, SWT.NONE);
+ markerPreferenceListener = new IPropertyChangeListener() {
+ public void propertyChange(
+ org.eclipse.jface.util.PropertyChangeEvent event) {
+ if (event.getProperty().contains(PreferencesUtil.EDIT_MARKER_TYPE_PREFIX)) {
+ refreshLineDisplay();
+ }
+ }
+ };
+ PreferencesUtil.getPreferenceStore().addPropertyChangeListener(markerPreferenceListener);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.editors.text.TextEditor#dispose()
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void dispose() {
+ if (markerPreferenceListener != null ) {
+ PreferencesUtil.getPreferenceStore().removePropertyChangeListener(markerPreferenceListener);
+ }
+ super.dispose();
+ }
+
+ /**
+ * Can this input type edit any markers?
+ *
+ * @return
+ */
+ private boolean isEditableMarkerTypes() {
+ for (MarkerType markerType : TermStore.getNonTechnicalMarkerTypes()) {
+ if (((AbstractBulkEditorInput) getEditorInput()).isMarkerTypeEditingEnabled(markerType)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Refreshes text in all lines.
+ */
+ protected void refreshLineDisplay() {
+ IDocumentProvider provider = getDocumentProvider();
+ IEditorInput input = getEditorInput();
+ IAnnotationModel model = provider.getAnnotationModel(input);
+ Iterator iter = getDocumentProvider().getAnnotationModel(getEditorInput()).getAnnotationIterator();
+ while (iter.hasNext()) {
+ Object next = iter.next();
+ if (next instanceof LineAnnotation) {
+ LineAnnotation annotation = (LineAnnotation) next;
+ ((AnnotatedLineDocumentProvider) getDocumentProvider()).
+ updateLineFromAnnotation(annotation);
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#isEditable()
+ */
+ /** {@inheritDoc} */
+ @Override
+ public boolean isEditable() {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#setFocus()
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void setFocus() {
+// super.setFocus();
+
+ // TODO Since setFocus() is called by RCP, can a global variable (searchBar) be avoided?
+ setFocusOnToolBar();
+
+ // TODO find a better place to put this - this dialog should be shown after initial contents of
+ // Editor are displayed
+ if (isInitialFocus) {
+ displayWarningDialog();
+ isInitialFocus = false;
+ }
+ }
+
+ /**
+ * Sets focus on the toolbar.
+ */
+ private void setFocusOnToolBar() {
+ if (searchBar != null) {
+ searchBar.setFocus();
+ }
+ }
+
+ /**
+ *
+ */
+ private void displayWarningDialog() {
+ IPreferenceStore prefs = PreferencesUtil.getPreferenceStore();
+ if (!prefs.getBoolean(PreferencesUtil.HIDE_BULKEDITOR_INFO)) {
+ String msg = "The Bulk Editor allows you to edit objects used to reference other objects, such as names, references, and authors.\n\n" +
+ "Any changes you make to an object in the Bulk Editor will be displayed wherever the object is used.\n\n" +
+ "For instance, a reference may be displayed with both a name and a descriptive element. If the reference name is changed here, the display of both the name and the descriptive element will be affected.";
+ MessageDialogWithToggle dialog = MessageDialogWithToggle.openOkCancelConfirm
+ (getSite().getShell(), "Bulk Editor", msg, "Do not show this message again",
+ false, null, PreferencesUtil.HIDE_BULKEDITOR_INFO);
+ if (dialog.getReturnCode() == Window.OK) {
+ prefs.setValue(PreferencesUtil.HIDE_BULKEDITOR_INFO, dialog.getToggleState());
+ }
+ }
+ }
+
+ /**
+ * @param control
+ */
+ private void addToggleMergeCandidateListener(Control control) {
+ control.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseDoubleClick(MouseEvent e) {
+ StyledText textWidget = getSourceViewer().getTextWidget();
+ int line = textWidget.getLineIndex(e.y);
+ toggleMergeCandidateAnnotation(line);
+ }
+ });
+ }
+
+ /**
+ * <p>toggleMergeCandidateAnnotation</p>
+ *
+ * @param line a int.
+ */
+ public void toggleMergeCandidateAnnotation(int line) {
+
+ IDocument document = getSourceViewer().getDocument();
+ LineAnnotationModel model =
+ (LineAnnotationModel) getSourceViewer().getAnnotationModel();
+
+ Annotation annotation = model.getAnnotationAtLine(line, document);
+
+ if (annotation != null) {
+ if (annotation.getType().equals(IBulkEditorConstants.TYPE_MERGE_CANDIDATE)) {
+ model.changeAnnotationType(
+ annotation, LineAnnotation.TYPE_GENERIC);
+ } else {
+ model.changeAnnotationType(
+ annotation, IBulkEditorConstants.TYPE_MERGE_CANDIDATE);
+ }
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void changed(Object object) {
+// this.dirty = dirty;
+ AnnotatedLineDocumentProvider p = (AnnotatedLineDocumentProvider) getDocumentProvider();
+ p.changed(object);
+// firePropertyChange(PROP_DIRTY);
+ }
+
+ /* (non-Javadoc)
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+ */
+ /** {@inheritDoc} */
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (evt.getPropertyName().equals(AbstractBulkEditorInput.QUERY_CHANGED)) {
+
+ // TODO check if dirty, prompt save
+ if (isDirty()) {
+ boolean proceed = MessageDialog.openQuestion(getEditorSite().getShell(),
+ "Save changes", "You have made changes that must be saved before this query can be executed. Would you like to proceed?");
+ if (proceed) {
+ doSave(null);
+ } else {
+ return;
+ }
+ }
+ if(getDocumentProvider().getAnnotationModel(getEditorInput()) != null){
+ ((AnnotationModel) getDocumentProvider().getAnnotationModel(getEditorInput())).removeAllAnnotations();
+ }
+ setInput(getEditorInput());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor#getContributorId()
+ */
+ /**
+ * <p>getContributorId</p>
+ *
+ * @return a {@link java.lang.String} object.
+ */
+ public String getContributorId() {
+ return BulkEditor.ID;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public AbstractBulkEditorInput getEditorInput() {
+ // TODO Auto-generated method stub
+ return (AbstractBulkEditorInput) super.getEditorInput();
+ }
+}