Mercurial > hg > digilibservice
view src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java @ 6:913bc132ed96
returning data works now
author | casties |
---|---|
date | Wed, 08 Jun 2011 17:06:03 +0200 |
parents | f723439bd23e |
children |
line wrap: on
line source
package info.textgrid.middleware.digilib.services.scaler; import java.io.ByteArrayOutputStream; 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 digilib.servlet.DigilibRequest; 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", endpointInterface="info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService") public class Scaler implements DigilibService { @Override public void getScaledImage(String sessionId, String uri, String query, String logParameter, Holder<String> mimeType, Holder<byte[]> imageData, Holder<Integer> width, Holder<Integer> height) { 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); // 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(); 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); // 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"); // 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"; width.value = img.getWidth(); height.value = img.getHeight(); 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"); 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); } } }