view 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 source

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

}