eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/AbstractGraphKeyEditor.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/AbstractIdentificationEditorInput.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/KeyEditor.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/KeyEditorDataChangeBehaviour.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/handler/ApplyLayoutHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/IPolytomousKeyEditorPage.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyContentProvider.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyContentProvider.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyLabelProvider.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewPart.java -text
+eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewPartDataChangeBehavior.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/DeleteHandler.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/EditHandler.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/DeleteOperation.java -text
private CdmFormFactory formFactory;
private Composite container;
- private GraphViewer graphViewer;
+ protected GraphViewer viewer;
private LayoutAlgorithm layoutAlgoritm;
private ZoomContributionViewItem zoomContributionViewItem;
public void doSave(IProgressMonitor monitor) {
getConversationHolder().commit(true);
setDirty(false);
- graphViewer.refresh();
+ viewer.refresh();
}
/*
container = formFactory.createComposite(parent);
container.setLayout(new FillLayout());
- graphViewer = new GraphViewer(container, SWT.NONE);
- getSite().setSelectionProvider(graphViewer);
+ viewer = new GraphViewer(container, SWT.NONE);
+ getSite().setSelectionProvider(viewer);
- graphViewer.setContentProvider(getContentProvider());
- graphViewer.setLabelProvider(getLabelProvider());
+ viewer.setContentProvider(getContentProvider());
+ viewer.setLabelProvider(getLabelProvider());
- graphViewer.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);
+ viewer.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);
- graphViewer.setLayoutAlgorithm(getLayoutAlgoritm(), false);
+ viewer.setLayoutAlgorithm(getLayoutAlgoritm(), false);
createMenu();
createToolbar();
- graphViewer.setInput(getKey());
+ viewer.setInput(getKey());
container.addControlListener(new ControlListener() {
ZoomContributionViewItem zoomItem = getZoomContributionViewItem();
menuMgr.add(zoomItem);
- getSite().registerContextMenu(menuMgr, graphViewer);
+ getSite().registerContextMenu(menuMgr, viewer);
- Control control = graphViewer.getGraphControl();
+ Control control = viewer.getGraphControl();
Menu menu = menuMgr.createContextMenu(control);
control.setMenu(menu);
@Override
public void setFocus() {
- graphViewer.getControl().setFocus();
+ viewer.getControl().setFocus();
}
public void refresh() {
- graphViewer.refresh();
+ viewer.refresh();
// graphViewer.applyLayout();
}
@Override
public AbstractZoomableViewer getZoomableViewer() {
- return graphViewer;
+ return viewer;
}
private LayoutAlgorithm getLayoutAlgoritm() {
refresh();
if (objectAffectedByOperation instanceof PolytomousKeyNode) {
- graphViewer.setSelection(new StructuredSelection(
+ viewer.setSelection(new StructuredSelection(
objectAffectedByOperation), true);
}
}
public void applyLayout() {
- graphViewer.applyLayout();
+ viewer.applyLayout();
}
@Override
@Override
public void changed(Object element) {
setDirty(true);
- graphViewer.update(element, null);
+ viewer.update(element, null);
}
}
import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyGraphEditor;
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor;
+import eu.etaxonomy.taxeditor.model.DataChangeBridge;
import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
private boolean dirty;
+ private KeyEditorDataChangeBehaviour dataChangeBehavior;
+
/*
* (non-Javadoc)
*
* (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
*/
@Override
- public void update(CdmDataChangeMap arg0) {
- // TODO Auto-generated method stub
+ public void update(CdmDataChangeMap map) {
+ if(dataChangeBehavior == null){
+ dataChangeBehavior = new KeyEditorDataChangeBehaviour(this);
+ }
+ DataChangeBridge.handleDataChange(map, dataChangeBehavior);
}
/*
public void changed(Object element) {
editorDirtyStateChanged();
IEditorPart activeEditor = getActiveEditor();
- if (activeEditor instanceof PolytomousKeyListEditor) {
- ((PolytomousKeyListEditor) activeEditor).changed(element);
+ if (activeEditor instanceof IDirtyMarkableSelectionProvider) {
+ ((IDirtyMarkableSelectionProvider) activeEditor).changed(element);
}
}
EditorUtil.error(getClass(), e);
}
- PolytomousKey key = (PolytomousKey) input.getKey();
+
- setPartName(key.getTitleCache());
+ setPartName();
+
+ }
+ /**
+ *
+ */
+ public void setPartName() {
+ AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
+ PolytomousKey key = (PolytomousKey) input.getKey();
+ setPartName(key.getTitleCache());
}
}
--- /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.editor.key;
+
+import java.util.Vector;
+
+import eu.etaxonomy.cdm.model.description.PolytomousKey;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
+import eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour;
+
+/**
+ * @author n.hoffmann
+ * @created May 5, 2011
+ * @version 1.0
+ */
+public class KeyEditorDataChangeBehaviour extends AbstractDataChangeBehaviour {
+
+ private final KeyEditor source;
+ private PolytomousKeyEditorInput input;
+
+ /**
+ * @param keyEditor
+ */
+ public KeyEditorDataChangeBehaviour(KeyEditor keyEditor) {
+ source = keyEditor;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour#reactOnDataChange(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
+ */
+ @Override
+ public void reactOnDataChange(CdmDataChangeMap changeEvents) {
+ input = (PolytomousKeyEditorInput) source.getEditorInput();
+
+ if(changeEvents.sizeByEventType(EventType.UPDATE) > 0){
+ reactOnUpdate(changeEvents.getEvents(EventType.UPDATE));
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void reactOnUpdate(Vector<CdmDataChangeEvent> events){
+
+ for(CdmDataChangeEvent event : events){
+
+ // update editor title
+ if(event.getEntity() instanceof PolytomousKey){
+ if(input.getKey().equals(event.getEntity())){
+ // set the name of the editor window
+ source.setPartName();
+ }
+ }
+ }
+ }
+}
public PolytomousKeyGraphEditor(KeyEditor editor) {
this.editor = editor;
}
-
+
@Override
public ConversationHolder getConversationHolder() {
return ((PolytomousKeyEditorInput) getEditorInput())
*/
@Override
public boolean isDirty() {
- // TODO Auto-generated method stub
return false;
}
*/
@Override
public void setFocus() {
- setPartName("Test");
+
}
/*
import eu.etaxonomy.cdm.model.description.PolytomousKey;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
+import eu.etaxonomy.taxeditor.model.DataChangeBridge;
import eu.etaxonomy.taxeditor.model.IContextListener;
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
private ListViewer viewer;
private ConversationHolder conversation;
private IContextListener contextListener;
- private CdmFormFactory formFactory;
+ private final CdmFormFactory formFactory;
private Text text_filter;
+ private PolytomousKeyViewPartDataChangeBehavior dataChangeBehavior;
+
public PolytomousKeyViewPart(){
formFactory = new CdmFormFactory(Display.getDefault());
}
private void setInput() {
conversation = CdmStore.createConversation();
+ conversation.registerForDataStoreChanges(this);
List<PolytomousKey> input = CdmStore.getService(IPolytomousKeyService.class).list(PolytomousKey.class, null, null, null, null);
viewer.setInput(input);
}
* @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
*/
@Override
- public void update(CdmDataChangeMap changeEvents) {}
+ public void update(CdmDataChangeMap changeEvents) {
+ if (dataChangeBehavior == null) {
+ dataChangeBehavior = new PolytomousKeyViewPartDataChangeBehavior(this);
+ }
+
+ DataChangeBridge.handleDataChange(changeEvents, dataChangeBehavior);
+ }
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
*/
@Override
public void dispose() {
+ conversation.unregisterForDataStoreChanges(this);
+ conversation.close();
CdmStore.getContextManager().removeContextListener(contextListener);
super.dispose();
}
return true;
}
+ /**
+ *
+ */
+ public void refresh() {
+ getConversationHolder().bind();
+ List<PolytomousKey> input = CdmStore.getService(IPolytomousKeyService.class).list(PolytomousKey.class, null, null, null, null);
+ viewer.setInput(input);
+ }
+
}
--- /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.navigation.key.polytomous;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.swt.widgets.Display;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.description.PolytomousKey;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour;
+
+/**
+ * @author n.hoffmann
+ * @created May 5, 2011
+ * @version 1.0
+ */
+public class PolytomousKeyViewPartDataChangeBehavior extends
+ AbstractDataChangeBehaviour {
+
+ private final PolytomousKeyViewPart source;
+
+ /**
+ * @param polytomousKeyViewPart
+ */
+ public PolytomousKeyViewPartDataChangeBehavior(
+ PolytomousKeyViewPart polytomousKeyViewPart) {
+ source = polytomousKeyViewPart;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour#reactOnDataChange(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
+ */
+ @Override
+ public void reactOnDataChange(CdmDataChangeMap changeEvents) {
+ if(isRelevant(changeEvents)){
+ final Display display = Display.getCurrent();
+ Job job = new Job("Updating Polytomous Key Viewer") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.beginTask("Updating Polytomous Key Viewer", 3);
+ monitor.worked(1);
+
+ // clear the session completely
+ monitor.subTask("Clearing Polytomous Key Viewer session");
+ display.asyncExec(new Runnable() {
+ public void run() {
+ source.getConversationHolder().clear();
+ }
+ });
+ // FIXME completely clearing the session is a brute force approach.
+ // It would be much more elegant to clear only those elements that have been changed.
+ // I could not get that to work but we should consider workin on this because we might
+ // run into serious performance issues, especially when it comes to large trees
+ //
+ // at least, we moved this to a job so it can run in a background thred
+ // seems to improve the situation but not sure if final solution
+ monitor.worked(1);
+
+ monitor.subTask("Refreshing viewer");
+
+ display.asyncExec(new Runnable() {
+ public void run() {
+ source.refresh();
+ }
+ });
+
+
+
+ monitor.worked(1);
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+ };
+
+ job.setPriority(Job.SHORT);
+ job.schedule();
+
+ }
+ }
+
+ /**
+ * @return
+ */
+ private boolean isRelevant(CdmDataChangeMap changeEvents) {
+ for(CdmDataChangeEvent event : changeEvents.getAllEvents()){
+ EventType eventType = event.getEventType();
+ CdmBase eventEntity = event.getEntity();
+
+ // all poyltomous key changes are relevant
+ if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
+ && eventEntity instanceof PolytomousKey){
+ return true;
+ }
+ }
+ return false;
+ }
+}
import eu.etaxonomy.cdm.model.description.PolytomousKey;
import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent;
import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
import eu.etaxonomy.taxeditor.ui.forms.ToggleableTextElement;
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
if (eventSource == text_title) {
getEntity().setTitleCache(text_title.getText());
}
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
}
}