Mercurial > hg > de.mpg.mpiwg.itgroup.digilib.core
view src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImage.java @ 22:7153018334a1
preference hinzugefuegt
author | dwinter |
---|---|
date | Wed, 05 Jan 2011 12:29:11 +0100 |
parents | 643fa1daa70c |
children | e5b16fea0387 |
line wrap: on
line source
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.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.IAdaptable; 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.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.views.properties.IPropertySource; import de.mpg.mpiwg.itgroup.digilib.digiImage.properties.DigiImageProperties; import de.mpg.mpiwg.itgroup.digilib.manipulator.extensions.ZoomAreaRectangleListener; import de.mpg.mpiwg.itgroup.digilib.plugin.Activator; import de.mpg.mpiwg.itgroup.digilib.plugin.editors.DigilibLinkEditorObservable; /** * 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, ISelectionProvider{ /** * 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; this.baseUrl = Activator.getDefault().getPreferenceStore().getString(Activator.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. */ public Object 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); } } }