Revision 5320
Added by Matt Jones over 14 years ago
src/edu/ucsb/nceas/metacat/restservice/ResourceHandler.java | ||
---|---|---|
22 | 22 |
*/ |
23 | 23 |
package edu.ucsb.nceas.metacat.restservice; |
24 | 24 |
|
25 |
import java.io.BufferedReader; |
|
26 |
import java.io.File; |
|
27 |
import java.io.FileNotFoundException; |
|
28 |
import java.io.FileOutputStream; |
|
29 | 25 |
import java.io.IOException; |
30 | 26 |
import java.io.InputStream; |
31 | 27 |
import java.io.OutputStream; |
... | ... | |
54 | 50 |
import org.dataone.service.exceptions.ServiceFailure; |
55 | 51 |
import org.dataone.service.exceptions.UnsupportedType; |
56 | 52 |
import org.dataone.service.types.AuthToken; |
57 |
import org.dataone.service.types.IdentifierType;
|
|
53 |
import org.dataone.service.types.Identifier; |
|
58 | 54 |
import org.dataone.service.types.SystemMetadata; |
59 |
import org.exolab.castor.jdo.conf.DataSource; |
|
55 |
import org.jibx.runtime.BindingDirectory; |
|
56 |
import org.jibx.runtime.IBindingFactory; |
|
57 |
import org.jibx.runtime.IUnmarshallingContext; |
|
58 |
import org.jibx.runtime.JiBXException; |
|
60 | 59 |
|
61 | 60 |
import edu.ucsb.nceas.metacat.DBUtil; |
62 | 61 |
import edu.ucsb.nceas.metacat.IdentifierManager; |
... | ... | |
470 | 469 |
OutputStream out = null; |
471 | 470 |
try { |
472 | 471 |
out = response.getOutputStream(); |
473 |
InputStream data = cs.get(token, new IdentifierType(guid)); |
|
472 |
Identifier id = new Identifier(); |
|
473 |
id.setValue(guid); |
|
474 |
InputStream data = cs.get(token, id); |
|
474 | 475 |
IOUtils.copyLarge(data, response.getOutputStream()); |
475 | 476 |
} catch (BaseException e) { |
476 | 477 |
serializeException(e, out); |
... | ... | |
604 | 605 |
} |
605 | 606 |
} |
606 | 607 |
|
608 |
// TODO: access control! |
|
607 | 609 |
//if (username != null && !username.equals("public")) { |
608 | 610 |
if (username != null) { |
609 | 611 |
|
610 | 612 |
logMetacat.debug("Commence creation..."); |
611 | 613 |
AuthToken token = null; |
612 |
SystemMetadata m = new SystemMetadata(sysmeta); |
|
613 |
logMetacat.debug(m.serialize(SystemMetadata.FMT_XML)); |
|
614 |
//IOUtils.copy(object, System.out); |
|
615 |
// byte[] b = new byte[2048]; |
|
616 |
// int len = object.read(b); |
|
617 |
// logMetacat.debug("Read " + len + " bytes from object: " + new String(b)); |
|
614 |
IBindingFactory bfact = |
|
615 |
BindingDirectory.getFactory(SystemMetadata.class); |
|
616 |
IUnmarshallingContext uctx = bfact.createUnmarshallingContext(); |
|
617 |
SystemMetadata m = (SystemMetadata) uctx.unmarshalDocument(sysmeta, null); |
|
618 |
|
|
618 | 619 |
CrudService cs = new CrudService(servletContext, request, response); |
619 |
cs.create(token, new IdentifierType(guid), object, m); |
|
620 |
Identifier id = new Identifier(); |
|
621 |
id.setValue(guid); |
|
622 |
cs.create(token, id, object, m); |
|
620 | 623 |
|
621 | 624 |
} else { |
622 | 625 |
logMetacat.debug("Unauthorized to create."); |
... | ... | |
649 | 652 |
} catch (IOException e) { |
650 | 653 |
ServiceFailure sf = new ServiceFailure(1000, e.getMessage()); |
651 | 654 |
serializeException(sf, out); |
655 |
} catch (JiBXException e) { |
|
656 |
e.printStackTrace(System.out); |
|
657 |
InvalidSystemMetadata ism = new InvalidSystemMetadata(1080, e.getMessage()); |
|
658 |
serializeException(ism, out); |
|
652 | 659 |
} |
653 | 660 |
} |
654 | 661 |
|
src/edu/ucsb/nceas/metacat/dataone/CrudService.java | ||
---|---|---|
54 | 54 |
import org.dataone.service.types.AuthToken; |
55 | 55 |
import org.dataone.service.types.Checksum; |
56 | 56 |
import org.dataone.service.types.DescribeResponse; |
57 |
import org.dataone.service.types.IdentifierType;
|
|
57 |
import org.dataone.service.types.Identifier; |
|
58 | 58 |
import org.dataone.service.types.LogRecordSet; |
59 | 59 |
import org.dataone.service.types.SystemMetadata; |
60 | 60 |
|
... | ... | |
173 | 173 |
return sessionData; |
174 | 174 |
} |
175 | 175 |
|
176 |
public IdentifierType create(AuthToken token, IdentifierType guid,
|
|
176 |
public Identifier create(AuthToken token, Identifier guid,
|
|
177 | 177 |
InputStream object, SystemMetadata sysmeta) throws InvalidToken, |
178 | 178 |
ServiceFailure, NotAuthorized, IdentifierNotUnique, UnsupportedType, |
179 | 179 |
InsufficientResources, InvalidSystemMetadata, NotImplemented { |
... | ... | |
185 | 185 |
String[] groups = null; |
186 | 186 |
|
187 | 187 |
// verify that guid == SystemMetadata.getIdentifier() |
188 |
logMetacat.debug("Comparing guid|sysmeta_guid: " + guid.getIdentifier() + "|" + sysmeta.getIdentifier().getIdentifier());
|
|
188 |
logMetacat.debug("Comparing guid|sysmeta_guid: " + guid.getValue() + "|" + sysmeta.getIdentifier().getValue());
|
|
189 | 189 |
// if (!guid.getIdentifier().equals(sysmeta.getIdentifier().getIdentifier())) { |
190 | 190 |
// throw new InvalidSystemMetadata(1180, |
191 | 191 |
// "GUID in method call does not match GUID in system metadata."); |
... | ... | |
194 | 194 |
logMetacat.debug("Checking if identifier exists..."); |
195 | 195 |
// Check that the identifier does not already exist |
196 | 196 |
IdentifierManager im = IdentifierManager.getInstance(); |
197 |
if (im.identifierExists(guid.getIdentifier())) {
|
|
197 |
if (im.identifierExists(guid.getValue())) {
|
|
198 | 198 |
throw new IdentifierNotUnique(1120, |
199 | 199 |
"GUID is already in use by an existing object."); |
200 | 200 |
} |
201 | 201 |
|
202 | 202 |
// generate guid/localId pair for object |
203 | 203 |
logMetacat.debug("Generating a guid/localId mapping"); |
204 |
String localId = im.generateLocalId(guid.getIdentifier(), 1);
|
|
204 |
String localId = im.generateLocalId(guid.getValue(), 1);
|
|
205 | 205 |
|
206 | 206 |
// TODO: generate guid/localId pair for sysmeta |
207 | 207 |
// TODO: update system metadata fields |
... | ... | |
285 | 285 |
return guid; |
286 | 286 |
} |
287 | 287 |
|
288 |
public IdentifierType delete(AuthToken token, IdentifierType guid)
|
|
288 |
public Identifier delete(AuthToken token, Identifier guid)
|
|
289 | 289 |
throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, |
290 | 290 |
NotImplemented { |
291 | 291 |
throw new NotImplemented(1000, "This method not yet implemented."); |
292 | 292 |
} |
293 | 293 |
|
294 |
public DescribeResponse describe(AuthToken token, IdentifierType guid)
|
|
294 |
public DescribeResponse describe(AuthToken token, Identifier guid) |
|
295 | 295 |
throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, |
296 | 296 |
NotImplemented { |
297 | 297 |
throw new NotImplemented(1000, "This method not yet implemented."); |
298 | 298 |
} |
299 | 299 |
|
300 |
public InputStream get(AuthToken token, IdentifierType guid)
|
|
300 |
public InputStream get(AuthToken token, Identifier guid) |
|
301 | 301 |
throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, |
302 | 302 |
NotImplemented { |
303 | 303 |
|
... | ... | |
308 | 308 |
// Look up the localId for this global identifier |
309 | 309 |
IdentifierManager im = IdentifierManager.getInstance(); |
310 | 310 |
try { |
311 |
final String localId = im.getLocalId(guid.getIdentifier());
|
|
311 |
final String localId = im.getLocalId(guid.getValue());
|
|
312 | 312 |
|
313 | 313 |
final InputStreamFromOutputStream<String> objectStream = |
314 | 314 |
new InputStreamFromOutputStream<String>() { |
... | ... | |
392 | 392 |
*/ |
393 | 393 |
} |
394 | 394 |
|
395 |
public Checksum getChecksum(AuthToken token, IdentifierType guid)
|
|
395 |
public Checksum getChecksum(AuthToken token, Identifier guid) |
|
396 | 396 |
throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, |
397 | 397 |
InvalidRequest, NotImplemented { |
398 | 398 |
throw new NotImplemented(1000, "This method not yet implemented."); |
399 | 399 |
} |
400 | 400 |
|
401 |
public Checksum getChecksum(AuthToken token, IdentifierType guid,
|
|
401 |
public Checksum getChecksum(AuthToken token, Identifier guid, |
|
402 | 402 |
String checksumAlgorithm) throws InvalidToken, ServiceFailure, |
403 | 403 |
NotAuthorized, NotFound, InvalidRequest, NotImplemented { |
404 | 404 |
throw new NotImplemented(1000, "This method not yet implemented."); |
... | ... | |
410 | 410 |
throw new NotImplemented(1000, "This method not yet implemented."); |
411 | 411 |
} |
412 | 412 |
|
413 |
public SystemMetadata getSystemMetadata(AuthToken token, IdentifierType guid)
|
|
413 |
public SystemMetadata getSystemMetadata(AuthToken token, Identifier guid) |
|
414 | 414 |
throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, |
415 | 415 |
InvalidRequest, NotImplemented { |
416 | 416 |
|
... | ... | |
424 | 424 |
throw new NotImplemented(1000, "This method not yet implemented."); |
425 | 425 |
} |
426 | 426 |
|
427 |
public IdentifierType update(AuthToken token, IdentifierType guid,
|
|
428 |
InputStream object, IdentifierType obsoletedGuid, SystemMetadata sysmeta)
|
|
427 |
public Identifier update(AuthToken token, Identifier guid,
|
|
428 |
InputStream object, Identifier obsoletedGuid, SystemMetadata sysmeta) |
|
429 | 429 |
throws InvalidToken, ServiceFailure, NotAuthorized, IdentifierNotUnique, |
430 | 430 |
UnsupportedType, InsufficientResources, NotFound, InvalidSystemMetadata, |
431 | 431 |
NotImplemented { |
build.xml | ||
---|---|---|
1554 | 1554 |
sibling of the current build directory. Requires maven2 to |
1555 | 1555 |
be installed and on the path. --> |
1556 | 1556 |
<target name="dataone-service" if="d1.available"> |
1557 |
<property name="d1.jar" value="dataone-service-api-0.1.0.jar"/>
|
|
1557 |
<property name="d1.jar" value="dataone-service-api-0.3.0.jar"/>
|
|
1558 | 1558 |
|
1559 | 1559 |
<artifact:mvn pom="${d1.dir}/pom.xml" fork="true" |
1560 | 1560 |
mavenHome="${maven.home}"> |
Also available in: Unified diff
Refactored metacat to use dataone-service-api-0.3.0 jar file, with the new JIBX generated types and serialization. Included JIBX runtime jar in metacat to handle serialization and deserialization of SystemMetadata objects. Removed the old API jar file.