Mercurial > hg > de.mpg.mpiwg.itgroup.digilib.core
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; + } + +}