Mercurial > hg > digilibservice
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 } |