diff src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java @ 5:f723439bd23e

added query parameter to wsdl. uses parameters now. writing result doesn't work.
author casties
date Fri, 06 May 2011 18:22:28 +0200
parents 2a34f8fa0f32
children 913bc132ed96
line wrap: on
line diff
--- a/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java	Fri May 06 17:34:50 2011 +0200
+++ b/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java	Fri May 06 18:22:28 2011 +0200
@@ -1,5 +1,6 @@
 package info.textgrid.middleware.digilib.services.scaler;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -20,6 +21,7 @@
 import digilib.image.ImageWorker;
 import digilib.io.ImageCacheStream;
 import digilib.servlet.DigilibConfiguration;
+import digilib.servlet.DigilibRequest;
 
 import info.textgrid.namespaces.metadata.core._2010.MetadataContainerType;
 import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService;
@@ -37,10 +39,11 @@
 public class Scaler implements DigilibService {
 
     @Override
-    public void getScaledImage(String sessionId, String uri,
+    public void getScaledImage(String sessionId, String uri, String query,
             String logParameter, Holder<String> mimeType,
-            Holder<byte[]> imageData) {
-        
+            Holder<byte[]> imageData, Holder<Integer> width,
+            Holder<Integer> height) {
+
         System.out.println("getScaledImage! sid="+sessionId+" uri="+uri+" log="+logParameter);
 
         // Get TG-crud service.
@@ -67,15 +70,6 @@
             SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding();
             binding.setMTOMEnabled(true);
 
-            // Use non MTOM stub.
-            /*
-             * TGCrudService tgcrud_nonMtom = service.getTGCrudPort();
-             * //BindingProvider bindingProvider_nonMtom = (BindingProvider)
-             * tgcrud_nonMtom; //SOAPBinding binding_nonMtom = (SOAPBinding)
-             * bindingProvider_nonMtom .getBinding();
-             * binding_nonMtom.setMTOMEnabled(false);
-             */
-
             // Create holders.
             Holder<MetadataContainerType> metadataHolder = new Holder<MetadataContainerType>();
             Holder<DataHandler> dataHolder = new Holder<DataHandler>();
@@ -101,18 +95,19 @@
                 if (mode.equalsIgnoreCase("digilib")) {
                     // try scaling
                     DigilibConfiguration dlConfig = new DigilibConfiguration();
-                    ImageJobDescription job = new ImageJobDescription(dlConfig);
+                    DigilibRequest dlReq = new DigilibRequest();
+                    dlReq.setWithParamString(query, "&");
+                    ImageJobDescription job = ImageJobDescription.getInstance(dlReq, dlConfig);
                     ImageCacheStream imgStream = new ImageCacheStream(istream, mt);
                     System.out.println("iis="+imgStream.getImageInputStream());
                     ImageLoaderDocuImage img = new ImageLoaderDocuImage();
                     // reuse reader for stream input
                     img.reuseReader = true;
+                    // identify image size
                     System.out.println("Identifying...");
                     img.identify(imgStream);
                     job.setDocuImage(img);
                     job.setInput(imgStream);
-                    job.setValue("dw", 500);
-                    job.setValue("dh", 500);
                     // use image worker
                     ImageWorker digilib = new ImageWorker(dlConfig, job);
                     System.out.println("Scaling with "+digilib);
@@ -120,12 +115,23 @@
                     System.out.println(Long.toString(System.currentTimeMillis()
                             - startTime)
                             + " ms");
+                    // save image to buffer
+                    ByteArrayOutputStream ostream = new ByteArrayOutputStream();
+                    img.writeImage("image/jpeg", ostream);
+                    System.out.println("written in "+(System.currentTimeMillis()-startTime)+" ms");
+                    // set buffer in Holder
+                    imageData.value = ostream.toByteArray();
+                    mimeType.value = "image/jpeg";
+                    System.out.println("output set.");
+
+                    /* save to file
                     File f = new File("/tmp/tgimg.jpg");
                     OutputStream ostream = new FileOutputStream(f);
                     img.writeImage("image/jpeg", ostream);
                     System.out.println(Long.toString(System.currentTimeMillis()
                             - startTime)
                             + " ms");
+                            */
                 } else {
                     // try to copy to file
                     File f = new File("/tmp/tgimg.img");