taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractCdmEntityWizardPage.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractCdmFormElement.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractFormSection.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/BrowserElement.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/CdmFormFactory.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/CdmPropertyChangeEvent.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/CheckboxElement.java -text
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import java.net.URI;
+
+import org.apache.log4j.Logger;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+
+/**
+ * @author n.hoffmann
+ *
+ */
+public class BrowserElement extends AbstractCdmFormElement implements ControlListener{
+
+ private static final Logger logger = Logger.getLogger(BrowserElement.class);
+
+ private Browser browser;
+
+ private String imageUriString;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ protected BrowserElement(CdmFormFactory formFactory, ICdmFormElement parentElement, URI imageUri, int style) {
+ super(formFactory, parentElement);
+ formFactory.createLabel(getLayoutComposite(), "");
+
+ browser = new Browser(getLayoutComposite(), SWT.NONE);
+
+ getLayoutComposite().setLayoutData(CdmFormFactory.FILL());
+
+
+ layoutBrowser();
+
+ showBrowser();
+ browser.addControlListener(this);
+
+ this.setImageUri(imageUri);
+ }
+
+ /**
+ *
+ */
+ private void layoutBrowser() {
+ TableWrapData layoutData = CdmFormFactory.FILL();
+ layoutData.heightHint = 1000;
+
+ browser.setLayoutData(layoutData);
+ }
+
+ /**
+ *
+ */
+ private void showBrowser() {
+
+ String html = "";
+ html = "<HTML><HEAD><TITLE></TITLE></HEAD><BODY marginwidth=0 marginheight=0 leftmargin=0 topmargin=0>";
+ html += "<img width=\"" + calculateWidth() + "\" src=\"" + getImageUriString() + "\" />";
+ html += "</BODY></HTML>";
+
+ browser.setText(html);
+ }
+
+ /**
+ * @return
+ */
+ public int calculateWidth() {
+ Rectangle boundaries = browser.getBounds();
+ return boundaries.width;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ControlListener#controlMoved(org.eclipse.swt.events.ControlEvent)
+ */
+ public void controlMoved(ControlEvent e) {
+ showBrowser();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ControlListener#controlResized(org.eclipse.swt.events.ControlEvent)
+ */
+ public void controlResized(ControlEvent e) {
+ showBrowser();
+ }
+
+ /**
+ * @param imageUri the imageUri to set
+ */
+ public void setImageUri(URI imageUri) {
+ setImageUriString(imageUri != null ? imageUri.toString() : "");
+ }
+
+ public void setImageUriString(String imageUriString){
+ this.imageUriString = imageUriString;
+ showBrowser();
+ }
+
+ /**
+ * @return the imageUri
+ */
+ public String getImageUriString() {
+ return imageUriString;
+ }
+
+ public void setSelected(boolean selected) {
+
+ }
+
+}
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.forms.selection.AbstractSelectionElement;
import eu.etaxonomy.taxeditor.forms.selection.AgentSelectionElement;
import eu.etaxonomy.taxeditor.forms.selection.DerivedUnitBaseSelectionElement;
return layout;
}
+ public static final TableWrapData FILL(){
+ return FILL(1, 1);
+ }
+
/**
*
* @return
*/
- public static final TableWrapData FILL(){
+ public static final TableWrapData FILL(int horizontalSpan, int verticalSpan){
TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);
-// layoutData.grabHorizontal = true;
-// layoutData.grabVertical = true;
+ layoutData.colspan = horizontalSpan;
+ layoutData.rowspan = verticalSpan;
return layoutData;
}
* @param style
* @return
*/
- public ImageElement createImageElement(ICdmFormElement parentElement, URI imageUri, int style){
+ public BrowserElement createBrowserElement(ICdmFormElement parentElement, URI imageUri, int style){
+ BrowserElement element = new BrowserElement(this, parentElement, imageUri, style);
+ adapt(element);
+ parentElement.addElement(element);
+ return element;
+ }
+
+ public ImageElement createImageElement(ICdmFormElement parentElement, URI imageUri, int style) {
ImageElement element = new ImageElement(this, parentElement, imageUri, style);
adapt(element);
parentElement.addElement(element);
}
}
- Assert.isNotNull(element, "Could not generate composite for entity. Looks like the case is not handled already. Check implementation. Entity: " + entity);
+ if(element == null){
+ String message = "Could not generate element for entity. Looks like the case is not handled already. Check implementation. Entity: " + entity;
+ EditorUtil.errorDialog("No element for entity", message);
+ logger.error(message);
+ }
if(backgroundColor != null && !backgroundColor.isDisposed()){
element.setBackgroundColor(backgroundColor);
+// $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.forms;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.browser.Browser;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpException;
+import org.apache.http.HttpResponse;
+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.core.runtime.jobs.Job;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.forms.widgets.TableWrapData;
-import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.common.UriUtils;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
/**
* @author n.hoffmann
- *
+ * @created Sep 24, 2010
+ * @version 1.0
*/
-public class ImageElement extends AbstractCdmFormElement implements ControlListener{
+public class ImageElement extends AbstractCdmFormElement implements PaintListener, ControlListener{
- private Browser browser;
+ private static final Logger logger = Logger.getLogger(ImageElement.class);
- private String imageUriString;
+ private URI imageUri;
+ private Image image;
+ private Rectangle imageMaxBounds;
+ private Composite container;
+
/**
- * @param parent
- * @param style
+ * @param formFactory
+ * @param layoutComposite
*/
protected ImageElement(CdmFormFactory formFactory, ICdmFormElement parentElement, URI imageUri, int style) {
super(formFactory, parentElement);
-
- this.setImageUri(imageUri);
- formFactory.createLabel(getLayoutComposite(), "");
+ setImageUri(imageUri);
- browser = new Browser(getLayoutComposite(), SWT.NONE);
+ container = new Composite(getLayoutComposite(), style);
+ container.setLayoutData(CdmFormFactory.FILL(2, 1));
- TableWrapData layoutData = CdmFormFactory.FILL();
- layoutData.heightHint = 200;
-
- browser.setLayoutData(layoutData);
-
- showImage();
- browser.addControlListener(this);
- }
-
- /**
- *
- */
- private void showImage() {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- String html = "";
- html = "<HTML><HEAD><TITLE></TITLE></HEAD><BODY marginwidth=0 marginheight=0 leftmargin=0 topmargin=0>";
- html += "<img width=\"" + calculateWidth() + "\" src=\"" + getImageUriString() + "\" />";
- html += "</BODY></HTML>";
-
- browser.setText(html);
- }
- });
- }
-
- /**
- * @return
- */
- public int calculateWidth() {
- Rectangle boundaries = browser.getBounds();
- return boundaries.width;
+ container.addControlListener(this);
+ container.addPaintListener(this);
}
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.ControlListener#controlMoved(org.eclipse.swt.events.ControlEvent)
- */
- public void controlMoved(ControlEvent e) {
- showImage();
- }
/* (non-Javadoc)
- * @see org.eclipse.swt.events.ControlListener#controlResized(org.eclipse.swt.events.ControlEvent)
+ * @see eu.etaxonomy.taxeditor.forms.ISelectable#setSelected(boolean)
*/
- public void controlResized(ControlEvent e) {
- showImage();
+ @Override
+ public void setSelected(boolean selected) {
+ // TODO Auto-generated method stub
+
}
/**
* @param imageUri the imageUri to set
*/
- public void setImageUri(URI imageUri) {
- setImageUriString(imageUri != null ? imageUri.toString() : "");
- }
-
- public void setImageUriString(String imageUriString){
- this.imageUriString = imageUriString;
- showImage();
+ public void setImageUri(URI uri) {
+ this.imageUri = uri;
+
+ logger.warn("Setting image uri" + imageUri);
+
+ if(imageUri != null){
+
+ final Display display = Display.getCurrent();
+ Job job = new Job("Loading image: " + imageUri){
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ InputStream imageStream = UriUtils.getInputStream(imageUri);
+
+ image = new Image(Display.getCurrent(), imageStream);
+
+ display.asyncExec(new Runnable(){
+ @Override
+ public void run() {
+// EditorUtil.reflowDetailsViewer();
+ getLayoutComposite().layout();
+ }
+ });
+ return Status.OK_STATUS;
+ }catch (IOException e) {
+ logger.error("Error reading image", e);
+ } catch (HttpException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return Status.CANCEL_STATUS;
+ }
+ };
+
+ job.schedule();
+ }
}
+ private void calculateImageBounds(){
+ Rectangle imageBounds = image.getBounds();
+ Rectangle containerBounds = container.getBounds();
+
+ Integer imgWidth = imageBounds.width;
+ Integer imgHeight = imageBounds.height;
+
+ Float ratio = imgHeight.floatValue()/imgWidth.floatValue();
+ Integer width = containerBounds.width;
+ Float height = width * ratio;
+
+ imageMaxBounds = new Rectangle(containerBounds.x, containerBounds.y, width, height.intValue());
+ }
+
/**
* @return the imageUri
*/
- public String getImageUriString() {
- return imageUriString;
+ public URI getImageUri() {
+ return imageUri;
}
-
- public void addControlListener(ControlListener listener){
- browser.addControlListener(listener);
- }
-
- public void removeControlListener(ControlListener listener){
- browser.removeControlListener(listener);
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent)
+ */
+ @Override
+ public void paintControl(PaintEvent e) {
+ if(image != null){
+ calculateImageBounds();
+ Composite composite = (Composite) e.widget;
+ TableWrapData layoutData = CdmFormFactory.FILL(2, 1);
+ layoutData.heightHint = imageMaxBounds.height;
+ composite.setLayoutData(layoutData);
+ e.gc.drawImage(image, 0, 0, image.getBounds().width, image.getBounds().height, 0, 0, imageMaxBounds.width, imageMaxBounds.height);
+ }
}
- public void setSelected(boolean selected) {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ControlListener#controlMoved(org.eclipse.swt.events.ControlEvent)
+ */
+ @Override
+ public void controlMoved(ControlEvent e) {
+ // TODO Auto-generated method stub
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ControlListener#controlResized(org.eclipse.swt.events.ControlEvent)
+ */
+ @Override
+ public void controlResized(ControlEvent e) {
+// EditorUtil.reflowDetailsViewer();
+ }
}
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
-import eu.etaxonomy.taxeditor.forms.ImageElement;
+import eu.etaxonomy.taxeditor.forms.BrowserElement;
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
private static final Logger logger = Logger
.getLogger(FeatureDistributionDetailElement.class);
- private ImageElement image;
+ private BrowserElement image;
/**
* @param formFactory
protected void createControls(ICdmFormElement formElement, FeatureNodeContainer entity,
int style) {
- image = formFactory.createImageElement(formElement, null, style);
+ image = formFactory.createBrowserElement(formElement, null, style);
image.setImageUriString(getMapUriString(getEntity()));
formElement.getLayoutComposite().layout();
}
import eu.etaxonomy.taxeditor.forms.AbstractFormSection;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
+import eu.etaxonomy.taxeditor.forms.BrowserElement;
import eu.etaxonomy.taxeditor.forms.ImageElement;
import eu.etaxonomy.taxeditor.forms.NumberWithLabelElement;
import eu.etaxonomy.taxeditor.forms.KeyValueViewerElement;
.getLogger(ImageFileElement.class);
private NumberWithLabelElement text_height;
private NumberWithLabelElement text_width;
- private ImageElement element_image;
+ private BrowserElement element_browser;
private KeyValueViewerElement element_keyValue;
+ private ImageElement element_image;
public ImageFileElement(CdmFormFactory cdmFormFactory,
AbstractFormSection section, ImageFile element,
text_height.setEnabled(false);
text_width = formFactory.createIntegerTextWithLabelElement(formElement, "Width", null, style);
text_width.setEnabled(false);
+// element_browser = formFactory.createBrowserElement(formElement, null, style);
element_image = formFactory.createImageElement(formElement, null, style);
element_keyValue = formFactory.createKeyValueViewerElement(formElement, "Key", "Value", null);
getEntity().setWidth(imageInfo.getWidth());
element_keyValue.setInput(imageInfo.getMetaData());
+// element_browser.setImageUri(imageUri);
element_image.setImageUri(imageUri);
-
} catch (IOException e) {
logger.error("IOError reading image metadata", e);
throw new RuntimeException("IOError reading image metadata");
} catch (URISyntaxException e) {
logger.warn("Image Uri is not valid");
} catch (Exception e) {
- logger.warn("Image could not be shown: " + e.getMessage());
+ logger.warn("Image could not be shown: ", e);
// new RuntimeException(e);
}
}
import java.io.File;
import java.io.FileNotFoundException;
-import java.lang.reflect.InvocationTargetException;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IMemento;
public void postShutdown(IWorkbench workbench) {}
public boolean preShutdown(IWorkbench workbench, boolean forced) {
- if(contextAboutToStop()){
- contextStop();
+ if(contextAboutToStop(null)){
+ contextStop(null);
}
// return true in any case, otherwise the application will not stop
return true;
* (non-Javadoc)
* @see eu.etaxonomy.taxeditor.model.IContextListener#onContextEvent(eu.etaxonomy.taxeditor.model.IContextListener.EventType)
*/
- public boolean onContextEvent(EventType eventType) {
+ public boolean onContextEvent(EventType eventType, IProgressMonitor monitor) {
switch(eventType){
case START:
- return contextStart();
+ return contextStart(monitor);
case STOP:
- return contextStop();
+ return contextStop(monitor);
case ABOUT_TO_STOP:
- return contextAboutToStop();
+ return contextAboutToStop(monitor);
}
return false;
}
*
* @return true in any case
*/
- private boolean contextStart() {
+ private boolean contextStart(IProgressMonitor monitor) {
IMemento memento = null;
try {
memento = MementoHelper.readMementoFromFile(getStateFileForCurrentDatabase());
- restoreNavigator(memento);
+ restoreNavigator(memento, monitor);
- restoreEditors(memento);
+ restoreEditors(memento, monitor);
return true;
*
* @param memento
*/
- private void restoreEditors(final IMemento memento){
+ private void restoreEditors(final IMemento memento, IProgressMonitor monitor){
if(memento == null){
return;
}
- IRunnableWithProgress runnable = new IRunnableWithProgress() {
-
- public void run(IProgressMonitor monitor) throws InvocationTargetException,
- InterruptedException {
- IMemento editorMementos = memento.getChild(EDITORS);
- IMemento[] editorInputs = editorMementos.getChildren(EDITOR);
-
- monitor.beginTask("Restoring Editors", 1 + editorInputs.length * 2);
- monitor.worked(1);
-
- for(IMemento editorInput : editorInputs){
- TaxonEditorInput input = (TaxonEditorInput) inputFactory.createElement(editorInput);
- monitor.worked(1);
- if(!monitor.isCanceled() && input != null){
- try {
- EditorUtil.open(input);
- } catch (PartInitException e) {
- logger.error("Error opening an editor window", e);
- }
- }
- monitor.worked(1);
+ IProgressMonitor subProgressMonitor = NavigationUtil.getSubProgressMonitor(monitor, 1);
+
+ IMemento editorMementos = memento.getChild(EDITORS);
+ IMemento[] editorInputs = editorMementos.getChildren(EDITOR);
+
+ subProgressMonitor.beginTask("Restoring Editors", 1 + editorInputs.length * 2);
+ subProgressMonitor.subTask("");
+ subProgressMonitor.worked(1);
+
+ for(IMemento editorInput : editorInputs){
+ TaxonEditorInput input = (TaxonEditorInput) inputFactory.createElement(editorInput);
+ subProgressMonitor.worked(1);
+ if(!subProgressMonitor.isCanceled() && input != null){
+ try {
+ EditorUtil.open(input);
+ } catch (PartInitException e) {
+ logger.error("Error opening an editor window", e);
}
- monitor.done();
}
- };
-
- try {
- NavigationUtil.run(false, true, runnable);
- } catch (InvocationTargetException e) {
- logger.error("InvocationTargetException when trying to restore open editors", e);
- } catch (InterruptedException e) {
- logger.error("InterruptedException when trying to restore open editors", e);
+ subProgressMonitor.worked(1);
}
+ subProgressMonitor.done();
}
/**
*
* @param memento
*/
- private void restoreNavigator(IMemento memento){
+ private void restoreNavigator(IMemento memento, IProgressMonitor monitor){
TaxonNavigator navigator = NavigationUtil.getNavigator(true);
- navigator.restore(memento);
+ navigator.restore(memento, monitor);
}
/**
*
* @return
*/
- private boolean contextAboutToStop() {
+ private boolean contextAboutToStop(IProgressMonitor monitor) {
// we are creating the memento here; even if the context is not stopped
if (CdmStore.getDataSource() != null) {
*
* @return
*/
- private boolean contextStop() {
+ private boolean contextStop(IProgressMonitor monitor) {
saveNavigatorState(memento);
// save the memento when the context really stops
\r
package eu.etaxonomy.taxeditor.navigation.navigator;\r
\r
-import java.lang.reflect.InvocationTargetException;\r
import java.util.ArrayList;\r
import java.util.HashSet;\r
import java.util.List;\r
import org.eclipse.core.commands.common.NotDefinedException;\r
import org.eclipse.core.runtime.IAdaptable;\r
import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;\r
-import org.eclipse.jface.operation.IRunnableWithProgress;\r
import org.eclipse.jface.viewers.DoubleClickEvent;\r
import org.eclipse.jface.viewers.TreePath;\r
import org.eclipse.swt.widgets.Composite;\r
* \r
* @param memento\r
*/\r
- public void restore(final IMemento memento) {\r
- \r
- IRunnableWithProgress runnable = new IRunnableWithProgress() {\r
+ public void restore(IMemento memento, IProgressMonitor monitor) {\r
+ IProgressMonitor subProgressMonitor = NavigationUtil.getSubProgressMonitor(monitor, 1); \r
\r
- public void run(IProgressMonitor monitor) throws InvocationTargetException,\r
- InterruptedException {\r
- monitor.setTaskName("Restoring Taxon Navigator");\r
- int mementoWork = 0;\r
- Set<TreePath> treePaths = new HashSet<TreePath>();\r
- IMemento[] treePathMementos = null;\r
- if (memento != null) {\r
- \r
- \r
- IMemento treePathsMemento = memento.getChild(TREE_PATHS);\r
- \r
- if (treePathsMemento != null) {\r
- treePathMementos = treePathsMemento.getChildren(TREE_PATH);\r
- mementoWork = treePathMementos.length;\r
- }\r
- }\r
- // begin the monitor with steps for all tree paths and steps for creating \r
- // conversation s.o., refreshing the tree and setting the paths \r
- monitor.beginTask("Restoring Taxon Navigator", 1 + mementoWork + 5);\r
- monitor.worked(1);\r
- \r
- conversation = CdmStore.createConversation();\r
- monitor.worked(1);\r
- conversation.registerForDataStoreChanges(TaxonNavigator.this);\r
- monitor.worked(1);\r
- TaxonNavigator.this.getCommonViewer().setInput(new Root(conversation));\r
- monitor.worked(1);\r
- TaxonNavigator.this.getCommonViewer().refresh();\r
- monitor.worked(1);\r
- \r
- \r
- \r
- if (treePathMementos != null && treePathMementos.length > 0) {\r
- for (IMemento treePathMemento : treePathMementos) {\r
- TreePath treePath = createTreePathFromString(treePathMemento.getID());\r
- if (!monitor.isCanceled() && treePath != null) {\r
- treePaths.add(treePath);\r
- monitor.worked(1);\r
- }\r
- }\r
- }\r
- if (treePaths.size() > 0) {\r
- TaxonNavigator.this.getCommonViewer().setExpandedTreePaths(treePaths.toArray(new TreePath[0]));\r
- monitor.worked(1);\r
- }\r
- monitor.done();\r
+ int mementoWork = 0;\r
+ Set<TreePath> treePaths = new HashSet<TreePath>();\r
+ IMemento[] treePathMementos = null;\r
+ if (memento != null) {\r
+ \r
+ \r
+ IMemento treePathsMemento = memento.getChild(TREE_PATHS);\r
+ \r
+ if (treePathsMemento != null) {\r
+ treePathMementos = treePathsMemento.getChildren(TREE_PATH);\r
+ mementoWork = treePathMementos.length;\r
}\r
- };\r
+ }\r
+ // begin the monitor with steps for all tree paths and steps for creating \r
+ // conversation s.o., refreshing the tree and setting the paths \r
+ subProgressMonitor.beginTask("Restoring Taxon Navigator", 1 + mementoWork + 5);\r
+ subProgressMonitor.subTask("");\r
+ subProgressMonitor.worked(1);\r
+ \r
+ conversation = CdmStore.createConversation();\r
+ subProgressMonitor.worked(1);\r
+ conversation.registerForDataStoreChanges(TaxonNavigator.this);\r
+ subProgressMonitor.worked(1);\r
+ TaxonNavigator.this.getCommonViewer().setInput(new Root(conversation));\r
+ subProgressMonitor.worked(1);\r
+ TaxonNavigator.this.getCommonViewer().refresh();\r
+ subProgressMonitor.worked(1);\r
\r
- try {\r
- NavigationUtil.run(false, true, runnable);\r
- } catch (InvocationTargetException e) {\r
- logger.error("InvocationTargetException when trying to restore navigator", e);\r
- } catch (InterruptedException e) {\r
- logger.error("InterruptedException when trying to restore navigator", e);\r
+ \r
+ \r
+ if (treePathMementos != null && treePathMementos.length > 0) {\r
+ for (IMemento treePathMemento : treePathMementos) {\r
+ TreePath treePath = createTreePathFromString(treePathMemento.getID());\r
+ if (!subProgressMonitor.isCanceled() && treePath != null) {\r
+ treePaths.add(treePath);\r
+ subProgressMonitor.worked(1);\r
+ }\r
+ }\r
+ }\r
+ if (treePaths.size() > 0) {\r
+ TaxonNavigator.this.getCommonViewer().setExpandedTreePaths(treePaths.toArray(new TreePath[0]));\r
+ subProgressMonitor.worked(1);\r
}\r
+ subProgressMonitor.done();\r
}\r
\r
/**\r
}\r
\r
@Override\r
- public boolean onContextEvent(EventType eventType) {\r
+ public boolean onContextEvent(EventType eventType, IProgressMonitor monitor) {\r
if(eventType.equals(EventType.STOP)){\r
NavigationUtil.hideView(this);\r
}\r
*/\r
public static boolean changeDataSource(final ICdmDataSource dataSource) {\r
saveAsCurrentDatabaseToMemento(dataSource);\r
- CdmStore.close();\r
+ CdmStore.close(null);\r
\r
CdmStore.initialize(dataSource);\r
\r
if(confirmed){
- CdmStore.close();
+ CdmStore.close(null);
}
CdmDataSourceViewPart view = (CdmDataSourceViewPart) StoreUtil.getView(CdmDataSourceViewPart.ID, true);
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.core.runtime.jobs.Job;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
import eu.etaxonomy.cdm.database.ICdmDataSource;
import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
*/
public class CdmDataSourceViewPart extends ViewPart implements IContextListener{
+ private class DataSourceDecoratorJob extends Job{
+
+ private Display display;
+ private List<ICdmDataSource> dataSources;
+
+ /**
+ * @param name
+ */
+ public DataSourceDecoratorJob(Display display, List<ICdmDataSource> dataSources) {
+ super("Loading datasources");
+ this.display = display;
+ this.dataSources = dataSources;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try{
+ monitor.beginTask("Retrieving Metadata for known datasources", dataSources.size());
+
+ final List<CdmMetaDataAwareDataSourceContainer> processedDataSources = new ArrayList<CdmMetaDataAwareDataSourceContainer>();
+
+ for(ICdmDataSource dataSource : dataSources){
+ processedDataSources.add(new CdmMetaDataAwareDataSourceContainer(dataSource));
+ monitor.worked(1);
+ }
+
+ Collections.sort(processedDataSources, new Comparator<CdmMetaDataAwareDataSourceContainer>() {
+
+ @Override
+ public int compare(
+ CdmMetaDataAwareDataSourceContainer o1,
+ CdmMetaDataAwareDataSourceContainer o2) {
+ String name1 = o1.getDataSource().getName();
+ String name2 = o2.getDataSource().getName();
+ return name1.compareTo(name2);
+ }
+ });
+
+ display.asyncExec(new Runnable(){
+
+ @Override
+ public void run() {
+ viewer.setInput(processedDataSources);
+ }
+
+ });
+
+ }finally{
+ monitor.done();
+ }
+ return Status.OK_STATUS;
+ }
+
+ }
+
private static final Logger logger = Logger.getLogger(CdmDataSourceViewPart.class);
public static String ID = "eu.etaxonomy.taxeditor.store.datasource.datasourceView";
- private TableViewer tableViewer;
+ private TableViewer viewer;
+
+ private String partNameCache;
+
+ private IWorkbenchSiteProgressService service;
public CdmDataSourceViewPart(){
}
@Override
public void createPartControl(Composite parent) {
+ service = (IWorkbenchSiteProgressService) getSite().getAdapter(IWorkbenchSiteProgressService.class);
CdmStore.addContextListener(this);
// Create top composite
fillLayout.type = SWT.VERTICAL;
parent.setLayout(fillLayout);
- List<CdmMetaDataAwareDataSourceContainer> containers = getAllDataSourcesWithMetadata(CdmDataSourceRepository.getAll());
+// List<CdmMetaDataAwareDataSourceContainer> containers = getAllDataSourcesWithMetadata(CdmDataSourceRepository.getAll());
- tableViewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
+ viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.FULL_SELECTION);
- getSite().setSelectionProvider(tableViewer);
+ getSite().setSelectionProvider(viewer);
- createColumns(tableViewer);
+ createColumns(viewer);
- tableViewer.setContentProvider(new CdmDataSourceContentProvider());
- tableViewer.setLabelProvider(new CdmDataSourceLabelProvider());
- tableViewer.setComparator(new ViewerComparator());
+ viewer.setContentProvider(new CdmDataSourceContentProvider());
+ viewer.setLabelProvider(new CdmDataSourceLabelProvider());
+ viewer.setComparator(new ViewerComparator());
+
+// viewer.setInput(containers);
- tableViewer.setInput(containers);
-
// register context menu
MenuManager menuMgr = new MenuManager();
menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
- getSite().registerContextMenu(menuMgr, tableViewer);
+ getSite().registerContextMenu(menuMgr, viewer);
- Control control = tableViewer.getControl();
+ Control control = viewer.getControl();
Menu menu = menuMgr.createContextMenu(control);
control.setMenu(menu);
// connect on doubleclick
- tableViewer.addDoubleClickListener(new IDoubleClickListener() {
+ viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
if (event.getSelection() instanceof StructuredSelection) {
}
});
+ refresh();
}
}
public void refresh(){
- tableViewer.setInput(getAllDataSourcesWithMetadata(CdmDataSourceRepository.getAll()));
- tableViewer.refresh();
+ service.schedule(new DataSourceDecoratorJob(Display.getCurrent(), CdmDataSourceRepository.getAll()));
}
@Override
@Override
public void setFocus() {
- tableViewer.getControl().setFocus();
+ viewer.getControl().setFocus();
}
- public boolean onContextEvent(EventType eventType) {
- tableViewer.refresh();
+ public boolean onContextEvent(EventType eventType, IProgressMonitor monitor) {
+ viewer.refresh();
return true;
}
return processedDataSources;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)
+ */
+ @Override
+ public void showBusy(boolean busy) {
+ super.showBusy(busy);
+ viewer.getTable().setEnabled(!busy);
+ if(busy){
+ partNameCache = getPartName();
+ setPartName("Loading datasources");
+ }else{
+ if(partNameCache != null){
+ setPartName(partNameCache);
+ }
+ }
+ }
}
public boolean isRunning() {
return running;
}
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return dataSource.getName();
+ }
}
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
import org.eclipse.ui.progress.IProgressService;
+import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
import org.eclipse.ui.themes.ITheme;
import org.eclipse.ui.themes.IThemeManager;
}
public static IWorkbenchPart getActivePart(){
- return getActivePage().getActivePart();
+ return getActivePage() != null ? getActivePage().getActivePart() : null;
}
public static ApplicationWindow getWorkbenchWindow(){
/**
* Creates a {@link SubProgressMonitor} if the given {@link IProgressMonitor} is not <code>null</code> and not a {@link NullProgressMonitor}.
* @param progressMonitor The parent {@link IProgressMonitor} of the {@link SubProgressMonitor} to be created.
- * @param steps The number of steps this subtask is subdivided into. Must be a positive number and must not be {@link IProgressMonitor#UNKNOWN}.
+ * @param ticks The number of steps this subtask is subdivided into. Must be a positive number and must not be {@link IProgressMonitor#UNKNOWN}.
* @return The {@link IProgressMonitor}.
*/
- public static IProgressMonitor getSubProgressMonitor(IProgressMonitor progressMonitor, int steps) {
+ public static IProgressMonitor getSubProgressMonitor(IProgressMonitor progressMonitor, int ticks) {
if (progressMonitor == null) {
return new NullProgressMonitor();
}
return progressMonitor;
}
- return new SubProgressMonitor(progressMonitor, steps, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
+ return new SubProgressMonitor(progressMonitor, ticks, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
}
/**
IWorkbench workbench = PlatformUI.getWorkbench();
return workbench.getProgressService();
}
+
+ public static IWorkbenchSiteProgressService getProgressService2(){
+ return (IWorkbenchSiteProgressService) getService(IWorkbenchSiteProgressService.class);
+ }
}
package eu.etaxonomy.taxeditor.model;
+import org.eclipse.core.runtime.IProgressMonitor;
+
/**
* @author n.hoffmann
ABOUT_TO_STOP
}
- public boolean onContextEvent(EventType eventType);
+ public boolean onContextEvent(EventType eventType, IProgressMonitor monitor);
}
if(! monitor.isCanceled()){
instance = new CdmStore(datasource, dbSchemaValidation, applicationContextBean, new CdmProgressMonitorAdapter(monitor));
- notifyContextStart();
+ notifyContextStart(monitor);
logger.info("Application context initialized.");
}else{
// Show datasource view if not shown yet
}
message += "'" + datasource.getName() + "'";
- message = "Establishing connection to" + message + ". \nThis might take while.";
+ message = "Connecting to" + message + ".";
return message;
}
/**
* Closes the current application context
*/
- public static void close(){
- notifyContextAboutToStop();
+ public static void close(IProgressMonitor monitor){
+ notifyContextAboutToStop(monitor);
if(isActive() && StoreUtil.closeAll()){
- notifyContextStop();
+ notifyContextStop(monitor);
instance.getApplicationController().close();
instance.isConnected = false;
cdmDatasource = null;
contextListeners.remove(listener);
}
- public static void notifyContextStart() {
+ public static void notifyContextStart(IProgressMonitor monitor) {
logger.info("Notifying context listeners, that the context has started.");
instance.authenticate();
for(Object listener : contextListeners.getListeners()){
- ((IContextListener) listener).onContextEvent(EventType.START);
+ ((IContextListener) listener).onContextEvent(EventType.START, monitor);
}
}
- public static void notifyContextAboutToStop(){
+ public static void notifyContextAboutToStop(IProgressMonitor monitor){
for(Object listener : contextListeners.getListeners()){
- ((IContextListener) listener).onContextEvent(EventType.ABOUT_TO_STOP);
+ ((IContextListener) listener).onContextEvent(EventType.ABOUT_TO_STOP, monitor);
}
}
- public static void notifyContextStop() {
+ public static void notifyContextStop(IProgressMonitor monitor) {
logger.warn("Application event occured");
for(Object listener : contextListeners.getListeners()){
- ((IContextListener) listener).onContextEvent(EventType.STOP);
+ ((IContextListener) listener).onContextEvent(EventType.STOP, monitor);
}
}
import java.util.List;
import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ListViewer;
super.dispose();
}
- public boolean onContextEvent(EventType eventType) {
+ public boolean onContextEvent(EventType eventType, IProgressMonitor monitor) {
+
switch(eventType){
case START:
tableViewer.setInput(getAllUser());