diff src/de/mpg/mpiwg/itgroup/digilib/digiImage/TextGridDigiImage.java @ 27:ee955cf6c9c5

first commit
author dwinter
date Fri, 17 Jun 2011 14:24:34 +0200
parents
children fbcf122a6a24
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/mpg/mpiwg/itgroup/digilib/digiImage/TextGridDigiImage.java	Fri Jun 17 14:24:34 2011 +0200
@@ -0,0 +1,179 @@
+package de.mpg.mpiwg.itgroup.digilib.digiImage;
+
+import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService;
+import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibServicePortType;
+
+import java.io.ByteArrayInputStream;
+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 javax.xml.ws.Holder;
+
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+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 de.mpg.mpiwg.itgroup.digilib.manipulator.extensions.ZoomAreaRectangleListener;
+import de.mpg.mpiwg.itgroup.digilib.plugin.editors.DigilibLinkEditorObservable;
+
+public class TextGridDigiImage implements IDigiImage {
+	//private URL url;
+	private Composite parent;
+	
+	private DigiImageParameter dp;
+
+	private String baseUrl;
+	
+	private Label label;
+	
+	private ZoomAreaRectangleListener rectangleListener=null;
+	
+	private List<ISelectionChangedListener> selectionChangeListener = new ArrayList<ISelectionChangedListener>();
+
+	private DigilibService service;
+
+	private DigilibServicePortType port;
+
+	/* 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);
+	
+	 String logParam = null;
+     // Holder for return data 
+     Holder<String> mimeType = new Holder<String>();
+     Holder<byte[]> imageData = new Holder<byte[]>();
+     Holder<Integer> width = new Holder<Integer>();
+     Holder<Integer> height = new Holder<Integer>();
+
+	private String sid;
+     
+	public TextGridDigiImage(Composite parent, int style,
+			DigiImageParameter dp, String sid)  {
+			label = new Label(parent, style);
+			this.parent = parent;
+			this.dp=dp;
+			try {
+				service = new DigilibService(new URL("http://localhost:8080/digilibservice-service/service?wsdl"));
+			} catch (MalformedURLException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+	        port = service.getDigilibServicePort();
+	        this.sid=sid;
+	        this.dp=dp;
+	        try {
+				createNewImage(createQueryFromParameter(dp));
+			} catch (MalformedURLException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		// TODO Auto-generated constructor stub
+	}
+
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangeListener.add(listener);
+
+	}
+
+	public ISelection getSelection() {
+		return new StructuredSelection(this);
+	}
+
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		selectionChangeListener.remove(listener);
+		
+	}
+	
+	public void setSelection(ISelection selection) {
+		for  (ISelectionChangedListener sl: selectionChangeListener){
+			SelectionChangedEvent event = new SelectionChangedEvent(this, selection);
+			sl.selectionChanged(event);
+		
+		}
+		}
+
+	public DigiImageParameter getParameter() {
+		
+		return dp;
+	}
+
+	public void setParameter(DigiImageParameter dp) {
+	this.dp=dp;
+		
+	}
+
+	public void redraw() {
+		try {
+			createNewImage(createQueryFromParameter(dp));
+			setSelection(new StructuredSelection(this));
+			DigilibLinkEditorObservable.INSTANCE.imageHasChanged(this);
+			
+		} catch (MalformedURLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}	
+	private void createNewImage(String query) {
+
+		port.getScaledImage(sid,dp.fn, query, logParam, mimeType, imageData, width, height);
+		
+		Image img = new Image(parent.getDisplay(),new ByteArrayInputStream(imageData.value))
+		;
+		//Label label = new Label(parent, SWT.None);
+		label.setImage(img);
+		
+		label.setVisible(true);
+		
+	}
+
+	private String createQueryFromParameter(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=queryString;
+	
+		return stringUrl;
+	}
+
+	public Label getLabel() {
+		return label;
+		
+	}
+
+	public void setLabel(Label label) {
+		this.label = label;
+
+	}
+
+	public ZoomAreaRectangleListener getRectangleListener() {
+		return rectangleListener;
+	}
+
+	public void setRectangleListener(ZoomAreaRectangleListener rectangleListener) {
+		this.rectangleListener = rectangleListener;
+	}
+
+	public Composite getParent() {
+		return parent;
+	}
+
+}