Mercurial > hg > de.mpg.mpiwg.itgroup.digilib.plugin
diff src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImage.java @ 28:0205c3f41d1d default tip
repackaging (separate textgridlab and dgilib local parts more rigorously
author | dwinter |
---|---|
date | Fri, 24 Aug 2012 09:42:57 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImage.java Fri Aug 24 09:42:57 2012 +0200 @@ -0,0 +1,292 @@ +package de.mpg.mpiwg.itgroup.digilib.digiImage; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.internal.Workbench; +import org.eclipse.ui.views.properties.IPropertySource; + + +import de.mpg.mpiwg.itgroup.digilib.plugin.Activator; +import de.mpg.mpiwg.itgroup.digilib.digiImage.properties.DigiImageProperties; +import de.mpg.mpiwg.itgroup.digilib.listener.MoveClickListener; +import de.mpg.mpiwg.itgroup.digilib.listener.ZoomAreaRectangleListener; +import de.mpg.mpiwg.itgroup.digilib.plugin.editors.DigilibLinkEditorObservable; +import de.mpg.mpiwg.itgroup.digilib.plugin.preferences.PluginPreferencePage; + + + + +/** + * Refers to an Digilib-Scaler Object either an image or an folder. The object contains an swt-label object, so that it can be embedded e.g. in Eclipse. + * @author dwinter + * + */ +public class DigiImage implements IDigiImage, IAdaptable{ + + /** + * Implemens a connection to Digilib. + */ + + + + private List<ISelectionChangedListener> selectionChangeListener = new ArrayList<ISelectionChangedListener>(); + + /* some parameters should not occur in the URL constructed by {@link #createUrlFromParameter(DigiImageParameter)} if set to negative values. + * + */ + private static String[] omitIfNegativeArray = {"dw","dh","ddpi","ddpix","ddpiy"}; + private static List<String> omitIfNegative = Arrays.asList(omitIfNegativeArray); + + + //private String baseUrl="http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler"; + + /** + * Get the Url of the digilib scaler, set to http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler, if not changed. + * TODO should be part of a configuration/preference file + * @return + */ + public String getBaseUrl() { + return baseUrl; + } + + /** + * Setze die Basis url des Digilib-Scalers + * @param baseUrl + */ + public void setBaseUrl(String baseUrl) { + this.baseUrl = baseUrl; + } + + private Label label; + + /* (non-Javadoc) + * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#getLabel() + */ + public Label getLabel() { + return label; + } + + /* (non-Javadoc) + * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#setLabel(org.eclipse.swt.widgets.Label) + */ + public void setLabel(Label label) { + this.label = label; + } + + //private URL url; + private Composite parent; + + private DigiImageParameter dp; + + private String baseUrl; + + + /** + * + * @param parent Composite where the image should be become a child of. + * @param style SWT Style how to display the image as a composite. For more the the style parameter at @see import org.eclipse.swt.widgets.Label + * @param dp Set of Parameters which define how the image should be displayed. + */ + public DigiImage(Composite parent, int style, DigiImageParameter dp) { + //super(parent,style); + label = new Label(parent, style); + this.parent = parent; + this.dp=dp; + IPreferenceStore store = Activator.getDefault().getPreferenceStore(); + this.baseUrl = store.getString(PluginPreferencePage.baseUrl_id); + try { + setNewURL(createUrlFromParameter(dp)); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + /** + * Sets the complete URL of the manipulated image and changes the image object in the composite. + * @param url + */ + private void setNewURL(URL url) { + //this.url = url; + + + InputStream is; + try { + is = url.openStream(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return; + } + Image img = new Image(parent.getDisplay(),is); + //Label label = new Label(parent, SWT.None); + label.setImage(img); + + label.setVisible(true); + } + + + /* (non-Javadoc) + * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#getParent() + */ + public Composite getParent() { + return parent; + } + + + /** + * Creates the URL to digilib from the given parameter set. For the documentation @see {@link http://developer.berlios.de/docman/display_doc.php?docid=106&group_id=251}. + * @param dp + * @return + * @throws MalformedURLException + */ + private URL createUrlFromParameter(DigiImageParameter dp) throws MalformedURLException{ + + Map<String, String> qa = dp.createMapFromParameters(omitIfNegative); + + List<String> queryArray = new ArrayList<String>(); + for(String key:qa.keySet()){ + queryArray.add(key+"="+qa.get(key)); + } + String queryString = StringUtils.join(queryArray,"&"); + + String stringUrl=baseUrl+"?"+queryString; + + return new URL(stringUrl); + } + + + + /* (non-Javadoc) + * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#getParameter() + */ + public DigiImageParameter getParameter() { + + return dp; + } + + /* (non-Javadoc) + * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#setParameter(de.mpg.mpiwg.itgroup.digilib.digiImage.DigiImageParameter) + */ + public void setParameter(DigiImageParameter dp) { + this.dp=dp; + + } + + /* (non-Javadoc) + * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#redraw() + */ + public void redraw(){ + try { + setNewURL(createUrlFromParameter(dp)); + setSelection(new StructuredSelection(this)); + DigilibLinkEditorObservable.INSTANCE.imageHasChanged(this); + + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + + private ZoomAreaRectangleListener rectangleListener=null; + + /* (non-Javadoc) + * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#getRectangleListener() + */ + public ZoomAreaRectangleListener getRectangleListener() { + + return rectangleListener; + } + + /* (non-Javadoc) + * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#setRectangleListener(de.mpg.mpiwg.itgroup.digilib.manipulator.extensions.RectangleListener) + */ + public void setRectangleListener(ZoomAreaRectangleListener rectangleListener) { + this.rectangleListener = rectangleListener; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) + * + * Digiimage shows properties if asked to. + */ + @SuppressWarnings("rawtypes") + public DigiImageProperties getAdapter(Class adapter) { + if (adapter == IPropertySource.class) + return new DigiImageProperties(this); + + return null; + + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener) + * Digiimage registeres selelection changers + */ + public void addSelectionChangedListener(ISelectionChangedListener listener) { + selectionChangeListener.add(listener); + + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection() + * Selection is the object itself. + */ + public ISelection getSelection() { + + return new StructuredSelection(this); + } + + public void removeSelectionChangedListener( + ISelectionChangedListener listener) { + selectionChangeListener.remove(listener); + + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection) + * Informs all listeners that selection has changed. + */ + public void setSelection(ISelection selection) { + + for (ISelectionChangedListener sl: selectionChangeListener){ + SelectionChangedEvent event = new SelectionChangedEvent(this, selection); + sl.selectionChanged(event); + + + } + + } + + + @Override + public MoveClickListener getMoveClickListener() { + // TODO Auto-generated method stub + return null; + } + + + +} + +