24 |
24 |
|
25 |
25 |
package edu.ucsb.nceas.metacat.client;
|
26 |
26 |
|
|
27 |
import java.io.BufferedInputStream;
|
|
28 |
import java.io.BufferedOutputStream;
|
|
29 |
import java.io.FileOutputStream;
|
27 |
30 |
import java.io.InputStream;
|
28 |
31 |
import java.io.InputStreamReader;
|
29 |
|
import java.io.PushbackReader;
|
30 |
32 |
import java.io.StringReader;
|
31 |
33 |
import java.io.IOException;
|
32 |
34 |
import java.io.StringWriter;
|
... | ... | |
44 |
46 |
import edu.ucsb.nceas.utilities.XMLUtilities;
|
45 |
47 |
import java.io.File;
|
46 |
48 |
|
|
49 |
|
47 |
50 |
/**
|
48 |
51 |
* This interface provides methods for initializing and logging in to a
|
49 |
52 |
* Metacat server, and then querying, reading, transforming, inserting,
|
... | ... | |
56 |
59 |
/** The session identifier for the session */
|
57 |
60 |
private String sessionId;
|
58 |
61 |
|
|
62 |
public static void main(String[] args) {
|
|
63 |
try {
|
|
64 |
MetacatClient mc = (MetacatClient) MetacatFactory.createMetacatConnection("http://fred.msi.ucsb.edu:8080/knb/metacat");
|
|
65 |
//InputStream r = mc.read("zip.1.1");
|
|
66 |
InputStream r = mc.read("jlee.2808.2");
|
|
67 |
|
|
68 |
//FileOutputStream fos = new FileOutputStream("test.zip");
|
|
69 |
FileOutputStream fos = new FileOutputStream("jlee.xml");
|
|
70 |
BufferedOutputStream bfos = new BufferedOutputStream(fos);
|
|
71 |
|
|
72 |
int c = r.read();
|
|
73 |
while(c != -1)
|
|
74 |
{
|
|
75 |
bfos.write(c);
|
|
76 |
c = r.read();
|
|
77 |
}
|
|
78 |
bfos.flush();
|
|
79 |
bfos.close();
|
|
80 |
fos.flush();
|
|
81 |
fos.close();
|
|
82 |
} catch (Exception e) {
|
|
83 |
e.printStackTrace();
|
|
84 |
}
|
|
85 |
}
|
|
86 |
|
59 |
87 |
/**
|
60 |
88 |
* Constructor to create a new instance. Protected because instances
|
61 |
89 |
* should only be created by the factory MetacatFactory.
|
... | ... | |
193 |
221 |
return response;
|
194 |
222 |
}
|
195 |
223 |
|
196 |
|
/**
|
|
224 |
|
|
225 |
|
|
226 |
/**
|
197 |
227 |
* Read an XML document from the metacat server session, accessed by docid,
|
198 |
228 |
* and returned as a Reader.
|
199 |
229 |
*
|
... | ... | |
205 |
235 |
* reached or does not respond
|
206 |
236 |
* @throws MetacatException when the metacat server generates another error
|
207 |
237 |
*/
|
208 |
|
public Reader read(String docid) throws InsufficientKarmaException,
|
|
238 |
public InputStream read(String docid) throws InsufficientKarmaException,
|
209 |
239 |
MetacatInaccessibleException, MetacatException, DocumentNotFoundException {
|
210 |
|
PushbackReader pbr = null;
|
|
240 |
Reader r = null;
|
211 |
241 |
|
212 |
242 |
Properties prop = new Properties();
|
213 |
243 |
prop.put("action", "read");
|
... | ... | |
219 |
249 |
} catch (Exception e) {
|
220 |
250 |
throw new MetacatInaccessibleException(e.getMessage());
|
221 |
251 |
}
|
222 |
|
pbr = new PushbackReader(new InputStreamReader(response), 512);
|
|
252 |
BufferedInputStream bis = new BufferedInputStream(response);
|
|
253 |
r = new InputStreamReader(bis);
|
223 |
254 |
try {
|
|
255 |
bis.mark(512);
|
224 |
256 |
char[] characters = new char[512];
|
225 |
|
int len = pbr.read(characters, 0, 512);
|
|
257 |
int len = r.read(characters, 0, 512);
|
226 |
258 |
StringWriter sw = new StringWriter();
|
227 |
259 |
sw.write(characters, 0, len);
|
228 |
260 |
String message = sw.toString();
|
229 |
261 |
sw.close();
|
230 |
|
pbr.unread(characters, 0, len);
|
|
262 |
bis.reset();
|
231 |
263 |
if (message.indexOf("<error>") != -1) {
|
232 |
264 |
if (message.indexOf("does not have permission") != -1) {
|
233 |
265 |
throw new InsufficientKarmaException(message);
|
... | ... | |
242 |
274 |
"MetacatClient: Error converting Reader to String."
|
243 |
275 |
+ ioe.getMessage());
|
244 |
276 |
}
|
245 |
|
return pbr;
|
|
277 |
return bis;
|
246 |
278 |
}
|
247 |
279 |
|
248 |
280 |
|
... | ... | |
258 |
290 |
* reached or does not respond
|
259 |
291 |
* @throws MetacatException when the metacat server generates another error
|
260 |
292 |
*/
|
261 |
|
public Reader readInlineData(String inlinedataid)
|
|
293 |
public InputStream readInlineData(String inlinedataid)
|
262 |
294 |
throws InsufficientKarmaException,
|
263 |
295 |
MetacatInaccessibleException, MetacatException {
|
264 |
|
PushbackReader pbr = null;
|
|
296 |
Reader r = null;
|
265 |
297 |
|
266 |
298 |
Properties prop = new Properties();
|
267 |
299 |
prop.put("action", "readinlinedata");
|
... | ... | |
273 |
305 |
} catch (Exception e) {
|
274 |
306 |
throw new MetacatInaccessibleException(e.getMessage());
|
275 |
307 |
}
|
276 |
|
|
277 |
|
pbr = new PushbackReader(new InputStreamReader(response), 512);
|
|
308 |
BufferedInputStream bis = new BufferedInputStream(response);
|
|
309 |
r = new InputStreamReader(bis);
|
278 |
310 |
try {
|
|
311 |
bis.mark(512);
|
279 |
312 |
char[] characters = new char[512];
|
280 |
|
int len = pbr.read(characters, 0, 512);
|
|
313 |
int len = r.read(characters, 0, 512);
|
281 |
314 |
StringWriter sw = new StringWriter();
|
282 |
315 |
sw.write(characters, 0, len);
|
283 |
316 |
String message = sw.toString();
|
284 |
317 |
sw.close();
|
285 |
|
pbr.unread(characters, 0, len);
|
286 |
|
|
|
318 |
bis.reset();
|
287 |
319 |
if (message.indexOf("<error>") != -1) {
|
288 |
320 |
if (message.indexOf("does not have permission") != -1) {
|
289 |
321 |
throw new InsufficientKarmaException(message);
|
... | ... | |
297 |
329 |
+ ioe.getMessage());
|
298 |
330 |
}
|
299 |
331 |
|
300 |
|
return pbr;
|
|
332 |
return bis;
|
301 |
333 |
}
|
302 |
334 |
|
303 |
335 |
/**
|
return InputStream instead of Reader in the MetacatClient read() and readInlineData() methods. Can now handle binary data
http://bugzilla.ecoinformatics.org/show_bug.cgi?id=4432