comparison service/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java @ 7:39c4892724ae

new version with maven modules for service and client.
author casties
date Thu, 16 Jun 2011 17:33:06 +0200
parents src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java@913bc132ed96
children fe0a111cc8f5
comparison
equal deleted inserted replaced
6:913bc132ed96 7:39c4892724ae
1 package info.textgrid.middleware.digilib.services.scaler;
2
3 import info.textgrid.namespaces.metadata.core._2010.MetadataContainerType;
4 import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibServicePortType;
5 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.AuthFault;
6 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.IoFault;
7 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.MetadataParseFault;
8 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ObjectNotFoundFault;
9 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ProtocolNotImplementedFault;
10 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.TGCrudService;
11 import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.TGCrudService_Service;
12
13 import java.io.ByteArrayOutputStream;
14 import java.io.File;
15 import java.io.FileOutputStream;
16 import java.io.IOException;
17 import java.io.InputStream;
18 import java.io.OutputStream;
19 import java.net.MalformedURLException;
20 import java.net.URL;
21
22 import javax.activation.DataHandler;
23 import javax.jws.WebService;
24 import javax.xml.ws.BindingProvider;
25 import javax.xml.ws.Holder;
26 import javax.xml.ws.soap.SOAPBinding;
27
28 import digilib.image.ImageJobDescription;
29 import digilib.image.ImageLoaderDocuImage;
30 import digilib.image.ImageOpException;
31 import digilib.image.ImageWorker;
32 import digilib.io.ImageCacheStream;
33 import digilib.servlet.DigilibConfiguration;
34 import digilib.servlet.DigilibRequest;
35
36 @WebService(targetNamespace = "http://textgrid.info/namespaces/middleware/digilib/services/DigilibService",
37 serviceName="DigilibService", portName="DigilibServicePort",
38 endpointInterface="info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibServicePortType")
39 public class Scaler implements DigilibServicePortType {
40
41 @Override
42 public void getScaledImage(String sessionId, String uri, String query,
43 String logParameter, Holder<String> mimeType,
44 Holder<byte[]> imageData, Holder<Integer> width,
45 Holder<Integer> height) {
46
47 System.out.println("getScaledImage! sid="+sessionId+" uri="+uri+" log="+logParameter);
48
49 // Get TG-crud service.
50 String serverUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl"; // p.getProperty("crud_serverUrl");
51 URL location = null;
52 try {
53 location = new URL(serverUrl);
54 } catch (MalformedURLException e) {
55 // TODO Auto-generated catch block
56 e.printStackTrace();
57 }
58
59 System.out.println("TG-crud WSDL location: " + location.getProtocol()
60 + "://" + location.getHost() + ":"
61 + (location.getPort() == -1 ? "80" : location.getPort())
62 + location.getPath());
63
64 // Create TG-crud service stub.
65 if (serverUrl != null) {
66 // Use MTOM stub.
67 TGCrudService_Service service = new TGCrudService_Service(location);
68 TGCrudService tgcrud = service.getTGCrudPort();
69 BindingProvider bindingProvider = (BindingProvider) tgcrud;
70 SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding();
71 binding.setMTOMEnabled(true);
72
73 // Create holders.
74 Holder<MetadataContainerType> metadataHolder = new Holder<MetadataContainerType>();
75 Holder<DataHandler> dataHolder = new Holder<DataHandler>();
76
77 // Start #READ operation.
78 try {
79 String theSessionId = sessionId;
80 String theLogParameter = logParameter;
81 String theUri = uri;
82 String mode = "digilib";
83 long startTime = System.currentTimeMillis();
84 tgcrud.read(theSessionId, theLogParameter, theUri,
85 metadataHolder, dataHolder);
86 System.out.println(Long.toString(System.currentTimeMillis()
87 - startTime)
88 + " ms");
89 System.out.println("READ: Title="
90 + metadataHolder.value.getObject().getGeneric()
91 .getProvided().getTitle().get(0));
92 InputStream istream = dataHolder.value.getInputStream();
93 String mt = metadataHolder.value.getObject().getGeneric().getProvided().getFormat();
94 System.out.println("Stream="+istream.toString()+" type="+mt);
95 if (mode.equalsIgnoreCase("digilib")) {
96 // try scaling
97 DigilibConfiguration dlConfig = new DigilibConfiguration();
98 DigilibRequest dlReq = new DigilibRequest();
99 dlReq.setWithParamString(query, "&");
100 ImageJobDescription job = ImageJobDescription.getInstance(dlReq, dlConfig);
101 ImageCacheStream imgStream = new ImageCacheStream(istream, mt);
102 System.out.println("iis="+imgStream.getImageInputStream());
103 ImageLoaderDocuImage img = new ImageLoaderDocuImage();
104 // reuse reader for stream input
105 img.reuseReader = true;
106 // identify image size
107 System.out.println("Identifying...");
108 img.identify(imgStream);
109 job.setDocuImage(img);
110 job.setInput(imgStream);
111 // use image worker
112 ImageWorker digilib = new ImageWorker(dlConfig, job);
113 System.out.println("Scaling with "+digilib);
114 digilib.call();
115 System.out.println(Long.toString(System.currentTimeMillis()
116 - startTime)
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 width.value = img.getWidth();
126 height.value = img.getHeight();
127 System.out.println("output set.");
128
129 /* save to file
130 File f = new File("/tmp/tgimg.jpg");
131 OutputStream ostream = new FileOutputStream(f);
132 img.writeImage("image/jpeg", ostream);
133 System.out.println(Long.toString(System.currentTimeMillis()
134 - startTime)
135 + " ms");
136 */
137 } else {
138 // try to copy to file
139 File f = new File("/tmp/tgimg.img");
140 OutputStream ostream = new FileOutputStream(f);
141 byte[] data = new byte[1024];
142 int l = istream.read(data);
143 while (l > -1) {
144 ostream.write(data, 0, l);
145 l = istream.read(data);
146 }
147 ostream.close();
148 System.out.println(Long.toString(System.currentTimeMillis()
149 - startTime)
150 + " ms");
151 System.out.println("Done writing " + f);
152 }
153 } catch (ObjectNotFoundFault e) {
154 // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
155 // e.getClass().getSimpleName()));
156 e.printStackTrace();
157 } catch (MetadataParseFault e) {
158 // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
159 // e.getClass().getSimpleName()));
160 e.printStackTrace();
161 } catch (IoFault e) {
162 // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
163 // e.getClass().getSimpleName()));
164 e.printStackTrace();
165 } catch (ProtocolNotImplementedFault e) {
166 // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
167 // e.getClass().getSimpleName()));
168 e.printStackTrace();
169 } catch (AuthFault e) {
170 // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
171 // e.getClass().getSimpleName()));
172 e.printStackTrace();
173 } catch (IOException e) {
174 // TODO Auto-generated catch block
175 e.printStackTrace();
176 } catch (ImageOpException e) {
177 // TODO Auto-generated catch block
178 e.printStackTrace();
179 }
180
181 } else {
182 System.out.println("No TG-crud server WSDL URL given!");
183 // assertTrue(false);
184 }
185 }
186
187 }