Mercurial > hg > digilibservice
view src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java @ 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 | ebcc41509c2e |
children | f723439bd23e |
line wrap: on
line source
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", endpointInterface="info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService") public class Scaler implements DigilibService { @Override public void getScaledImage(String sessionId, String uri, String logParameter, Holder<String> mimeType, Holder<byte[]> imageData) { 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); } } }