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;
+	}
+
+	
+	
+}
+
+