# HG changeset patch # User casties # Date 1304696090 -7200 # Node ID 2a34f8fa0f32c1bf2d03a5e33d693ad2063016d4 # Parent 1baf94752fe81b7d1fe72ce375b48d81bd094125 works as a service, takes uri and sid and scales now. no return value yet. diff -r 1baf94752fe8 -r 2a34f8fa0f32 .hgignore --- 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 diff -r 1baf94752fe8 -r 2a34f8fa0f32 pom.xml --- 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 @@ cxf-rt-transports-http ${cxf.version} + + digilib + digilib-common + 2.0-SNAPSHOT + jar + compile + diff -r 1baf94752fe8 -r 2a34f8fa0f32 src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java --- 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 metadataHolder = new Holder(); + Holder dataHolder = new Holder(); + + // 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); + } } }