view src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImage.java @ 1:83c58ea33792

first release (continued)
author dwinter
date Mon, 03 Jan 2011 09:11:25 +0100
parents
children e63a64652f4d
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.axiom.om.OMOutputFormat;
import org.apache.axis2.databinding.types.soapencoding.Array;
import org.apache.commons.lang.StringUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

import de.mpg.mpiwg.itgroup.digilib.manipulator.extensions.RectangleListener;




public class DigiImage implements IDigiImage {
	
	private static String[] omitIfNegativeArray = {"dw","dh","ddpi","ddpix","ddpiy"};
	private static List<String> omitIfNegative = Arrays.asList(omitIfNegativeArray);
		
	private Label label;
	public Label getLabel() {
		return label;
	}

	public void setLabel(Label label) {
		this.label = label;
	}

	private URL url;
	private Composite parent;
	private String baseUrl="http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler";
	private DigiImageParameter dp;
	
	
	public DigiImage(Composite parent, int style, DigiImageParameter dp) {
		//super(parent,style);
		label = new Label(parent, style);
		this.parent = parent;
		this.dp=dp;
		try {
			setNewURL(createUrlFromParameter(dp));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	private void setNewURL(URL url) {
		this.url = url;
		// TODO Auto-generated constructor stub
	
		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);
	}

	
	public Composite getParent() {
		return parent;
	}


	private URL createUrlFromParameter(DigiImageParameter dp) throws MalformedURLException{
		URL url;
		Map<String,String> qa= new HashMap<String,String>();
		
		setPm(qa,"fn",dp.getFn());
		setPm(qa,"pn",dp.getPn());
		
		setPm(qa,"dw",dp.getDw());
		setPm(qa,"dh",dp.getDh());
		
		setPm(qa,"wx",dp.getWx());
		setPm(qa,"wy",dp.getWy());
		setPm(qa,"ws",dp.getWs());
		setPm(qa,"ww",dp.getWw());
		setPm(qa,"wh",dp.getWh());
		
		
		setPm(qa,"mo",dp.getMo());
		
		setPm(qa,"cont",dp.getCont());
		setPm(qa,"brgt",dp.getBrgt());
		
		setPm(qa,"rot",dp.getRot());
		
		setPm(qa,"rgba",dp.getRgba());
		setPm(qa,"rgbm",dp.getRgbm());
		
		setPm(qa,"ddpi",dp.getDdpi());
		setPm(qa,"ddpix",dp.getDdpix());
		setPm(qa,"ddpiy",dp.getDdpiy());
		
		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);
	}
	
	private void setPm(Map<String, String> qa, String key, Object value){
		String v;
		if (String.class.isInstance(value)){
			v=(String)value;
			qa.put(key, v);
		} else if (Integer.class.isInstance(value)){
			if (!((Integer)value==-1 & omitIfNegative.indexOf(key)>-1)) { // nicht vernachlaessigen
				v=String.valueOf(value);
				qa.put(key, v);
			}
		} else {
			v=String.valueOf(value);
			qa.put(key, v);
		}
		
	}

	public DigiImageParameter getParameter() {
		
		return dp;
	}

	public void setParameter(DigiImageParameter dp) {
		this.dp=dp;
		
	}
	
	public void redraw(){
		try {
			setNewURL(createUrlFromParameter(dp));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private RectangleListener rectangleListener=null;
	
	public RectangleListener getRectangleListener() {
		// TODO Auto-generated method stub
		return rectangleListener;
	}

	public void setRectangleListener(RectangleListener rectangleListener) {
		this.rectangleListener = rectangleListener;
	}

}