comparison 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
comparison
equal deleted inserted replaced
4:2a34f8fa0f32 5:f723439bd23e
1 package info.textgrid.middleware.digilib.services.scaler; 1 package info.textgrid.middleware.digilib.services.scaler;
2 2
3 import java.io.ByteArrayOutputStream;
3 import java.io.File; 4 import java.io.File;
4 import java.io.FileOutputStream; 5 import java.io.FileOutputStream;
5 import java.io.IOException; 6 import java.io.IOException;
6 import java.io.InputStream; 7 import java.io.InputStream;
7 import java.io.OutputStream; 8 import java.io.OutputStream;
18 import digilib.image.ImageLoaderDocuImage; 19 import digilib.image.ImageLoaderDocuImage;
19 import digilib.image.ImageOpException; 20 import digilib.image.ImageOpException;
20 import digilib.image.ImageWorker; 21 import digilib.image.ImageWorker;
21 import digilib.io.ImageCacheStream; 22 import digilib.io.ImageCacheStream;
22 import digilib.servlet.DigilibConfiguration; 23 import digilib.servlet.DigilibConfiguration;
24 import digilib.servlet.DigilibRequest;
23 25
24 import info.textgrid.namespaces.metadata.core._2010.MetadataContainerType; 26 import info.textgrid.namespaces.metadata.core._2010.MetadataContainerType;
25 import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService; 27 import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService;
26 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.AuthFault; 28 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.AuthFault;
27 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.IoFault; 29 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.IoFault;
35 serviceName="DigilibService", portName="DigilibServiceSOAP", 37 serviceName="DigilibService", portName="DigilibServiceSOAP",
36 endpointInterface="info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService") 38 endpointInterface="info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService")
37 public class Scaler implements DigilibService { 39 public class Scaler implements DigilibService {
38 40
39 @Override 41 @Override
40 public void getScaledImage(String sessionId, String uri, 42 public void getScaledImage(String sessionId, String uri, String query,
41 String logParameter, Holder<String> mimeType, 43 String logParameter, Holder<String> mimeType,
42 Holder<byte[]> imageData) { 44 Holder<byte[]> imageData, Holder<Integer> width,
43 45 Holder<Integer> height) {
46
44 System.out.println("getScaledImage! sid="+sessionId+" uri="+uri+" log="+logParameter); 47 System.out.println("getScaledImage! sid="+sessionId+" uri="+uri+" log="+logParameter);
45 48
46 // Get TG-crud service. 49 // Get TG-crud service.
47 String serverUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl"; // p.getProperty("crud_serverUrl"); 50 String serverUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl"; // p.getProperty("crud_serverUrl");
48 URL location = null; 51 URL location = null;
65 TGCrudService tgcrud = service.getTGCrudPort(); 68 TGCrudService tgcrud = service.getTGCrudPort();
66 BindingProvider bindingProvider = (BindingProvider) tgcrud; 69 BindingProvider bindingProvider = (BindingProvider) tgcrud;
67 SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding(); 70 SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding();
68 binding.setMTOMEnabled(true); 71 binding.setMTOMEnabled(true);
69 72
70 // Use non MTOM stub.
71 /*
72 * TGCrudService tgcrud_nonMtom = service.getTGCrudPort();
73 * //BindingProvider bindingProvider_nonMtom = (BindingProvider)
74 * tgcrud_nonMtom; //SOAPBinding binding_nonMtom = (SOAPBinding)
75 * bindingProvider_nonMtom .getBinding();
76 * binding_nonMtom.setMTOMEnabled(false);
77 */
78
79 // Create holders. 73 // Create holders.
80 Holder<MetadataContainerType> metadataHolder = new Holder<MetadataContainerType>(); 74 Holder<MetadataContainerType> metadataHolder = new Holder<MetadataContainerType>();
81 Holder<DataHandler> dataHolder = new Holder<DataHandler>(); 75 Holder<DataHandler> dataHolder = new Holder<DataHandler>();
82 76
83 // Start #READ operation. 77 // Start #READ operation.
99 String mt = metadataHolder.value.getObject().getGeneric().getProvided().getFormat(); 93 String mt = metadataHolder.value.getObject().getGeneric().getProvided().getFormat();
100 System.out.println("Stream="+istream.toString()+" type="+mt); 94 System.out.println("Stream="+istream.toString()+" type="+mt);
101 if (mode.equalsIgnoreCase("digilib")) { 95 if (mode.equalsIgnoreCase("digilib")) {
102 // try scaling 96 // try scaling
103 DigilibConfiguration dlConfig = new DigilibConfiguration(); 97 DigilibConfiguration dlConfig = new DigilibConfiguration();
104 ImageJobDescription job = new ImageJobDescription(dlConfig); 98 DigilibRequest dlReq = new DigilibRequest();
99 dlReq.setWithParamString(query, "&");
100 ImageJobDescription job = ImageJobDescription.getInstance(dlReq, dlConfig);
105 ImageCacheStream imgStream = new ImageCacheStream(istream, mt); 101 ImageCacheStream imgStream = new ImageCacheStream(istream, mt);
106 System.out.println("iis="+imgStream.getImageInputStream()); 102 System.out.println("iis="+imgStream.getImageInputStream());
107 ImageLoaderDocuImage img = new ImageLoaderDocuImage(); 103 ImageLoaderDocuImage img = new ImageLoaderDocuImage();
108 // reuse reader for stream input 104 // reuse reader for stream input
109 img.reuseReader = true; 105 img.reuseReader = true;
106 // identify image size
110 System.out.println("Identifying..."); 107 System.out.println("Identifying...");
111 img.identify(imgStream); 108 img.identify(imgStream);
112 job.setDocuImage(img); 109 job.setDocuImage(img);
113 job.setInput(imgStream); 110 job.setInput(imgStream);
114 job.setValue("dw", 500);
115 job.setValue("dh", 500);
116 // use image worker 111 // use image worker
117 ImageWorker digilib = new ImageWorker(dlConfig, job); 112 ImageWorker digilib = new ImageWorker(dlConfig, job);
118 System.out.println("Scaling with "+digilib); 113 System.out.println("Scaling with "+digilib);
119 digilib.call(); 114 digilib.call();
120 System.out.println(Long.toString(System.currentTimeMillis() 115 System.out.println(Long.toString(System.currentTimeMillis()
121 - startTime) 116 - startTime)
122 + " ms"); 117 + " ms");
118 // save image to buffer
119 ByteArrayOutputStream ostream = new ByteArrayOutputStream();
120 img.writeImage("image/jpeg", ostream);
121 System.out.println("written in "+(System.currentTimeMillis()-startTime)+" ms");
122 // set buffer in Holder
123 imageData.value = ostream.toByteArray();
124 mimeType.value = "image/jpeg";
125 System.out.println("output set.");
126
127 /* save to file
123 File f = new File("/tmp/tgimg.jpg"); 128 File f = new File("/tmp/tgimg.jpg");
124 OutputStream ostream = new FileOutputStream(f); 129 OutputStream ostream = new FileOutputStream(f);
125 img.writeImage("image/jpeg", ostream); 130 img.writeImage("image/jpeg", ostream);
126 System.out.println(Long.toString(System.currentTimeMillis() 131 System.out.println(Long.toString(System.currentTimeMillis()
127 - startTime) 132 - startTime)
128 + " ms"); 133 + " ms");
134 */
129 } else { 135 } else {
130 // try to copy to file 136 // try to copy to file
131 File f = new File("/tmp/tgimg.img"); 137 File f = new File("/tmp/tgimg.img");
132 OutputStream ostream = new FileOutputStream(f); 138 OutputStream ostream = new FileOutputStream(f);
133 byte[] data = new byte[1024]; 139 byte[] data = new byte[1024];