changeset 4:2a34f8fa0f32

works as a service, takes uri and sid and scales now. no return value yet.
author casties
date Fri, 06 May 2011 17:34:50 +0200
parents 1baf94752fe8
children f723439bd23e
files .hgignore pom.xml src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java
diffstat 3 files changed, 167 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Fri May 06 10:30:07 2011 +0200
+++ b/.hgignore	Fri May 06 17:34:50 2011 +0200
@@ -4,4 +4,6 @@
 syntax: regexp
 ^\.classpath$
 syntax: regexp
-^\.project$
\ No newline at end of file
+^\.project$
+syntax: regexp
+^\.settings$
\ No newline at end of file
--- a/pom.xml	Fri May 06 10:30:07 2011 +0200
+++ b/pom.xml	Fri May 06 17:34:50 2011 +0200
@@ -46,6 +46,13 @@
       <artifactId>cxf-rt-transports-http</artifactId>
       <version>${cxf.version}</version>
     </dependency>
+    <dependency>
+    	<groupId>digilib</groupId>
+    	<artifactId>digilib-common</artifactId>
+    	<version>2.0-SNAPSHOT</version>
+    	<type>jar</type>
+    	<scope>compile</scope>
+    </dependency>
   </dependencies>
   <repositories>
         <repository>
--- a/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java	Fri May 06 10:30:07 2011 +0200
+++ b/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java	Fri May 06 17:34:50 2011 +0200
@@ -1,9 +1,35 @@
 package info.textgrid.middleware.digilib.services.scaler;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.activation.DataHandler;
 import javax.jws.WebService;
+import javax.xml.ws.BindingProvider;
 import javax.xml.ws.Holder;
+import javax.xml.ws.soap.SOAPBinding;
 
+import digilib.image.ImageJobDescription;
+import digilib.image.ImageLoaderDocuImage;
+import digilib.image.ImageOpException;
+import digilib.image.ImageWorker;
+import digilib.io.ImageCacheStream;
+import digilib.servlet.DigilibConfiguration;
+
+import info.textgrid.namespaces.metadata.core._2010.MetadataContainerType;
 import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService;
+import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.AuthFault;
+import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.IoFault;
+import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.MetadataParseFault;
+import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ObjectNotFoundFault;
+import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ProtocolNotImplementedFault;
+import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.TGCrudService;
+import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.TGCrudService_Service;
 
 @WebService(targetNamespace = "http://textgrid.info/namespaces/middleware/digilib/services/DigilibService", 
         serviceName="DigilibService", portName="DigilibServiceSOAP",
@@ -17,6 +43,137 @@
         
         System.out.println("getScaledImage! sid="+sessionId+" uri="+uri+" log="+logParameter);
 
+        // Get TG-crud service.
+        String serverUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl"; // p.getProperty("crud_serverUrl");
+        URL location = null;
+        try {
+            location = new URL(serverUrl);
+        } catch (MalformedURLException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        System.out.println("TG-crud WSDL location: " + location.getProtocol()
+                + "://" + location.getHost() + ":"
+                + (location.getPort() == -1 ? "80" : location.getPort())
+                + location.getPath());
+
+        // Create TG-crud service stub.
+        if (serverUrl != null) {
+            // Use MTOM stub.
+            TGCrudService_Service service = new TGCrudService_Service(location);
+            TGCrudService tgcrud = service.getTGCrudPort();
+            BindingProvider bindingProvider = (BindingProvider) tgcrud;
+            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>();
+
+            // Start #READ operation.
+            try {
+                String theSessionId = sessionId;
+                String theLogParameter = logParameter;
+                String theUri = uri;
+                String mode = "digilib";
+                long startTime = System.currentTimeMillis();
+                tgcrud.read(theSessionId, theLogParameter, theUri,
+                        metadataHolder, dataHolder);
+                System.out.println(Long.toString(System.currentTimeMillis()
+                        - startTime)
+                        + " ms");
+                System.out.println("READ: Title="
+                        + metadataHolder.value.getObject().getGeneric()
+                                .getProvided().getTitle().get(0));
+                InputStream istream = dataHolder.value.getInputStream();
+                String mt = metadataHolder.value.getObject().getGeneric().getProvided().getFormat();
+                System.out.println("Stream="+istream.toString()+" type="+mt);
+                if (mode.equalsIgnoreCase("digilib")) {
+                    // try scaling
+                    DigilibConfiguration dlConfig = new DigilibConfiguration();
+                    ImageJobDescription job = new ImageJobDescription(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;
+                    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);
+                    digilib.call();
+                    System.out.println(Long.toString(System.currentTimeMillis()
+                            - startTime)
+                            + " ms");
+                    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");
+                    OutputStream ostream = new FileOutputStream(f);
+                    byte[] data = new byte[1024];
+                    int l = istream.read(data);
+                    while (l > -1) {
+                        ostream.write(data, 0, l);
+                        l = istream.read(data);
+                    }
+                    ostream.close();
+                    System.out.println(Long.toString(System.currentTimeMillis()
+                            - startTime)
+                            + " ms");
+                    System.out.println("Done writing " + f);
+                }
+            } catch (ObjectNotFoundFault e) {
+                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+                // e.getClass().getSimpleName()));
+                e.printStackTrace();
+            } catch (MetadataParseFault e) {
+                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+                // e.getClass().getSimpleName()));
+                e.printStackTrace();
+            } catch (IoFault e) {
+                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+                // e.getClass().getSimpleName()));
+                e.printStackTrace();
+            } catch (ProtocolNotImplementedFault e) {
+                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+                // e.getClass().getSimpleName()));
+                e.printStackTrace();
+            } catch (AuthFault e) {
+                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+                // e.getClass().getSimpleName()));
+                e.printStackTrace();
+            } catch (IOException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            } catch (ImageOpException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+
+        } else {
+            System.out.println("No TG-crud server WSDL URL given!");
+            // assertTrue(false);
+        }
     }
 
 }