Revision 5887
Added by berkley almost 14 years ago
test/edu/ucsb/nceas/metacattest/IdentifierManagerTest.java | ||
---|---|---|
62 | 62 |
*/ |
63 | 63 |
public void testGetGUID() |
64 | 64 |
{ |
65 |
ph("testGetGUID"); |
|
65 | 66 |
try |
66 | 67 |
{ |
67 | 68 |
IdentifierManager im = IdentifierManager.getInstance(); |
... | ... | |
86 | 87 |
*/ |
87 | 88 |
public void testGetAllLocalIds() |
88 | 89 |
{ |
90 |
ph("testGetAllLocalIds"); |
|
89 | 91 |
try |
90 | 92 |
{ |
91 | 93 |
List l = IdentifierManager.getInstance().getAllLocalIds(); |
92 | 94 |
for(int i=0; i<l.size(); i++) |
93 | 95 |
{ |
94 |
//System.out.println(l.get(i));
|
|
96 |
System.out.println(l.get(i)); |
|
95 | 97 |
} |
96 | 98 |
assertTrue(l.size() > 0); |
97 | 99 |
} |
... | ... | |
103 | 105 |
|
104 | 106 |
/** Test that IM instances can be created. */ |
105 | 107 |
public void testGetInstance() { |
108 |
ph("testGetInstance"); |
|
106 | 109 |
IdentifierManager im = IdentifierManager.getInstance(); |
107 | 110 |
assertNotNull(im); |
108 | 111 |
} |
109 | 112 |
|
110 | 113 |
/** Test that known LocalId's can be looked up from GUIDs. */ |
111 | 114 |
public void testGetLocalId() { |
115 |
ph("testGetLocalId"); |
|
112 | 116 |
IdentifierManager im = IdentifierManager.getInstance(); |
113 | 117 |
String docid = insertTestDocument(); |
114 | 118 |
String goodGuid = "test:" + docid; |
... | ... | |
124 | 128 |
|
125 | 129 |
/** Test that unknown LocalId's return the proper exception. */ |
126 | 130 |
public void testGetLocalIdNotFound() { |
131 |
ph("testGetLocalIdNotFound"); |
|
127 | 132 |
IdentifierManager im = IdentifierManager.getInstance(); |
128 | 133 |
String idReturned; |
129 | 134 |
try { |
... | ... | |
140 | 145 |
* be, and that it is not present when it shouldn't be. |
141 | 146 |
*/ |
142 | 147 |
public void testIdentifierExists() { |
148 |
ph("testIdentifierExists"); |
|
143 | 149 |
IdentifierManager im = IdentifierManager.getInstance(); |
144 | 150 |
String docid = insertTestDocument(); |
145 | 151 |
im.createMapping("test:"+docid, docid); |
... | ... | |
154 | 160 |
* getLocalId() and getGUID() |
155 | 161 |
*/ |
156 | 162 |
public void testCreateMapping() { |
163 |
ph("testCreateMapping"); |
|
157 | 164 |
try |
158 | 165 |
{ |
159 | 166 |
IdentifierManager im = IdentifierManager.getInstance(); |
... | ... | |
177 | 184 |
*/ |
178 | 185 |
public void testCreateSystemMetadataMapping() |
179 | 186 |
{ |
187 |
ph("testCreateSystemMetadataMapping"); |
|
180 | 188 |
try |
181 | 189 |
{ |
182 | 190 |
IdentifierManager im = IdentifierManager.getInstance(); |
... | ... | |
211 | 219 |
null, "http://fake.example.com/somedata", null, |
212 | 220 |
accessBlock, null, null, |
213 | 221 |
null, null); |
222 |
System.out.println("inserting doc: " + emldoc); |
|
214 | 223 |
String docid = generateDocumentId() + ".1"; |
215 | 224 |
try { |
216 | 225 |
m.login(username, password); |
... | ... | |
222 | 231 |
} |
223 | 232 |
return docid; |
224 | 233 |
} |
234 |
|
|
235 |
private void ph(String s) |
|
236 |
{ |
|
237 |
System.out.println("*********************** " + s + " ****************************"); |
|
238 |
} |
|
225 | 239 |
} |
src/xmltables-oracle.sql | ||
---|---|---|
402 | 402 |
CREATE TABLE systemMetadata ( |
403 | 403 |
guid VARCHAR2(2000), -- the globally unique string identifier |
404 | 404 |
docid VARCHAR(250), -- the local document id # |
405 |
rev NUMBER(8) -- the revision part of the local identifier |
|
405 |
rev NUMBER(8), -- the revision part of the local identifier |
|
406 |
date_uploaded DATE, -- the date/time the document was first submitted |
|
407 |
rights_holder VARCHAR2(250), --the user who has rights to the document, usually the first persons to upload it |
|
408 |
checksum VARCHAR2(512), --the checksum of the doc using the given algorithm (see below) |
|
409 |
checksum_algorithm VARCHAR2(250), --the algorithm used to calculate the checksum |
|
410 |
origin_member_node VARCHAR2(250), --the member node where the document was first uploaded |
|
411 |
authoritive_member_node VARCHAR2(250), --the member node that currently controls the document |
|
412 |
date_modified DATE, -- the last date/time that the file was changed |
|
413 |
submitter VARCHAR2(256) -- the user who originally submitted the doc |
|
406 | 414 |
) |
407 | 415 |
|
408 | 416 |
/* |
src/upgrade-db-to-1.10.0-postgres.sql | ||
---|---|---|
4 | 4 |
guid text, -- the globally unique string identifier |
5 | 5 |
docid VARCHAR(250), -- the local document id # |
6 | 6 |
rev INT8, -- the revision part of the local identifier |
7 |
date_uploaded TIMESTAMP, -- the date/time the document was first submitted |
|
8 |
rights_holder VARCHAR(250), --the user who has rights to the document, usually the first persons to upload it |
|
9 |
checksum VARCHAR(512), --the checksum of the doc using the given algorithm (see below) |
|
10 |
checksum_algorithm VARCHAR(250), --the algorithm used to calculate the checksum |
|
11 |
origin_member_node VARCHAR(250), --the member node where the document was first uploaded |
|
12 |
authoritive_member_node VARCHAR(250), --the member node that currently controls the document |
|
13 |
date_modified TIMESTAMP, -- the last date/time that the file was changed |
|
14 |
submitter VARCHAR(256), -- the user who originally submitted the doc |
|
7 | 15 |
CONSTRAINT systemMetadata_pk PRIMARY KEY (guid) |
8 | 16 |
); |
9 | 17 |
|
src/xmltables-postgres.sql | ||
---|---|---|
289 | 289 |
* data first or the systemMetadata first. |
290 | 290 |
*/ |
291 | 291 |
CREATE TABLE systemMetadata ( |
292 |
guid text, -- the globally unique string identifier |
|
292 |
guid text, -- the globally unique string identifier of the object that the system metadata describes
|
|
293 | 293 |
docid VARCHAR(250), -- the local document id # |
294 | 294 |
rev INT8, -- the revision part of the local identifier |
295 |
date_uploaded TIMESTAMP, -- the date/time the document was first submitted |
|
296 |
rights_holder VARCHAR(250), --the user who has rights to the document, usually the first persons to upload it |
|
297 |
checksum VARCHAR(512), --the checksum of the doc using the given algorithm (see below) |
|
298 |
checksum_algorithm VARCHAR(250), --the algorithm used to calculate the checksum |
|
299 |
origin_member_node VARCHAR(250), --the member node where the document was first uploaded |
|
300 |
authoritive_member_node VARCHAR(250), --the member node that currently controls the document |
|
301 |
date_modified TIMESTAMP, -- the last date/time that the file was changed |
|
302 |
submitter VARCHAR(256), -- the user who originally submitted the doc |
|
295 | 303 |
CONSTRAINT systemMetadata_pk PRIMARY KEY (guid) |
296 | 304 |
); |
297 | 305 |
|
src/upgrade-db-to-1.10.0-oracle.sql | ||
---|---|---|
4 | 4 |
CREATE TABLE systemMetadata ( |
5 | 5 |
guid VARCHAR2(2000), -- the globally unique string identifier |
6 | 6 |
docid VARCHAR(250), -- the local document id # |
7 |
rev NUMBER(8) -- the revision part of the local identifier |
|
7 |
rev NUMBER(8), -- the revision part of the local identifier |
|
8 |
date_uploaded DATE, -- the date/time the document was first submitted |
|
9 |
rights_holder VARCHAR2(250), --the user who has rights to the document, usually the first persons to upload it |
|
10 |
checksum VARCHAR2(512), --the checksum of the doc using the given algorithm (see below) |
|
11 |
checksum_algorithm VARCHAR2(250), --the algorithm used to calculate the checksum |
|
12 |
origin_member_node VARCHAR2(250), --the member node where the document was first uploaded |
|
13 |
authoritive_member_node VARCHAR2(250), --the member node that currently controls the document |
|
14 |
date_modified DATE, -- the last date/time that the file was changed |
|
15 |
submitter VARCHAR2(256) -- the user who originally submitted the doc |
|
8 | 16 |
) |
9 | 17 |
|
10 | 18 |
CREATE TABLE identifier ( |
src/edu/ucsb/nceas/metacat/dataone/CrudService.java | ||
---|---|---|
1557 | 1557 |
//insert the system metadata doc id into the systemmetadata table to |
1558 | 1558 |
//link it to the data or metadata document |
1559 | 1559 |
IdentifierManager.getInstance().createSystemMetadataMapping( |
1560 |
sysmeta.getIdentifier().getValue(), sysMetaGuid.getValue());
|
|
1560 |
sysmeta, sysMetaGuid.getValue()); |
|
1561 | 1561 |
return localId; |
1562 | 1562 |
} |
1563 | 1563 |
|
src/edu/ucsb/nceas/metacat/IdentifierManager.java | ||
---|---|---|
31 | 31 |
import java.sql.SQLException; |
32 | 32 |
|
33 | 33 |
import org.apache.log4j.Logger; |
34 |
import org.dataone.service.types.SystemMetadata; |
|
34 | 35 |
|
35 | 36 |
import edu.ucsb.nceas.metacat.database.DBConnection; |
36 | 37 |
import edu.ucsb.nceas.metacat.database.DBConnectionPool; |
38 |
import edu.ucsb.nceas.metacat.properties.PropertyService; |
|
37 | 39 |
import edu.ucsb.nceas.metacat.util.DocumentUtil; |
38 | 40 |
|
39 | 41 |
/** |
... | ... | |
49 | 51 |
|
50 | 52 |
public static final String TYPE_SYSTEM_METADATA = "systemmetadata"; |
51 | 53 |
public static final String TYPE_IDENTIFIER = "identifier"; |
52 |
public static final String DATAONE_SM_DOCTYPE = "http://dataone.org/service/types/SystemMetadata/0.1";
|
|
54 |
public static String DATAONE_SM_DOCTYPE;
|
|
53 | 55 |
|
54 | 56 |
/** |
55 | 57 |
* The single instance of the manager that is always returned. |
... | ... | |
63 | 65 |
*/ |
64 | 66 |
private IdentifierManager() |
65 | 67 |
{ |
68 |
try |
|
69 |
{ |
|
70 |
DATAONE_SM_DOCTYPE = PropertyService.getProperty("crudService.listObjects.ReturnDoctype"); |
|
71 |
} |
|
72 |
catch(Exception e) |
|
73 |
{ |
|
74 |
throw new RuntimeException("Error getting System Metadata doctype from " + |
|
75 |
"the properties file. Please make sure crudService.listObjects.ReturnDoctype " + |
|
76 |
"exists in metacat.properties."); |
|
77 |
} |
|
66 | 78 |
} |
67 | 79 |
|
68 | 80 |
/** |
... | ... | |
491 | 503 |
} |
492 | 504 |
|
493 | 505 |
/** |
494 |
* insert a system metadata id for a local id |
|
506 |
* creates a mapping for a system metadata document, but DOES NOT add any |
|
507 |
* of the extra system metadata information to the table. You must call |
|
508 |
* insertAdditionalSystemMetadataFields to complete the entry |
|
495 | 509 |
* |
496 | 510 |
* @param guid the id to insert |
497 | 511 |
* @param localId the systemMetadata object to get the local id for |
... | ... | |
502 | 516 |
} |
503 | 517 |
|
504 | 518 |
/** |
519 |
* creates a system metadata mapping and adds additional fields from sysmeta |
|
520 |
* to the table for quick searching. |
|
521 |
* |
|
522 |
* @param guid the id to insert |
|
523 |
* @param localId the systemMetadata object to get the local id for |
|
524 |
*/ |
|
525 |
public void createSystemMetadataMapping(SystemMetadata sysmeta, String localId) |
|
526 |
{ |
|
527 |
createGenericMapping(sysmeta.getIdentifier().getValue(), localId, TYPE_SYSTEM_METADATA); |
|
528 |
insertAdditionalSystemMetadataFields(sysmeta); |
|
529 |
} |
|
530 |
|
|
531 |
/** |
|
505 | 532 |
* update a mapping |
506 | 533 |
* @param guid |
507 | 534 |
* @param localId |
... | ... | |
561 | 588 |
return this.getLocalId(guid, TYPE_SYSTEM_METADATA); |
562 | 589 |
} |
563 | 590 |
|
591 |
public void insertAdditionalSystemMetadataFields(long dateUploaded, String rightsHolder, |
|
592 |
String checksum, String checksumAlgorithm, String originMemberNode, |
|
593 |
String authoritativeMemberNode, long modifiedDate, String submitter, String guid) |
|
594 |
{ |
|
595 |
DBConnection dbConn = null; |
|
596 |
int serialNumber = -1; |
|
597 |
try { |
|
598 |
// Get a database connection from the pool |
|
599 |
dbConn = |
|
600 |
DBConnectionPool.getDBConnection("IdentifierManager.createMapping"); |
|
601 |
serialNumber = dbConn.getCheckOutSerialNumber(); |
|
602 |
|
|
603 |
// Execute the insert statement |
|
604 |
String query = "update " + TYPE_SYSTEM_METADATA + |
|
605 |
" set (date_uploaded, rights_holder, checksum, checksum_algorithm, " + |
|
606 |
"origin_member_node, authoritive_member_node, date_modified, submitter) " + |
|
607 |
"= (?, ?, ?, ?, ?, ?, ?, ?) where guid = ?"; |
|
608 |
PreparedStatement stmt = dbConn.prepareStatement(query); |
|
609 |
|
|
610 |
//data values |
|
611 |
stmt.setTimestamp(1, new java.sql.Timestamp(dateUploaded)); |
|
612 |
stmt.setString(2, rightsHolder); |
|
613 |
stmt.setString(3, checksum); |
|
614 |
stmt.setString(4, checksumAlgorithm); |
|
615 |
stmt.setString(5, originMemberNode); |
|
616 |
stmt.setString(6, authoritativeMemberNode); |
|
617 |
stmt.setTimestamp(7, new java.sql.Timestamp(modifiedDate)); |
|
618 |
stmt.setString(8, submitter); |
|
619 |
//where clause |
|
620 |
stmt.setString(9, guid); |
|
621 |
System.out.println("stmt: " + stmt.toString()); |
|
622 |
//execute |
|
623 |
int rows = stmt.executeUpdate(); |
|
624 |
|
|
625 |
stmt.close(); |
|
626 |
} catch (SQLException e) { |
|
627 |
e.printStackTrace(); |
|
628 |
logMetacat.error("SQL error while creating a mapping to the system metadata identifier: " |
|
629 |
+ e.getMessage()); |
|
630 |
} catch (NumberFormatException e) { |
|
631 |
e.printStackTrace(); |
|
632 |
logMetacat.error("NumberFormat error while creating a mapping to the system metadata identifier: " |
|
633 |
+ e.getMessage()); |
|
634 |
} finally { |
|
635 |
// Return database connection to the pool |
|
636 |
DBConnectionPool.returnDBConnection(dbConn, serialNumber); |
|
637 |
} |
|
638 |
} |
|
639 |
|
|
564 | 640 |
/** |
641 |
* Insert the system metadata fields into the db |
|
642 |
* @param sm |
|
643 |
*/ |
|
644 |
public void insertAdditionalSystemMetadataFields(SystemMetadata sm) |
|
645 |
{ |
|
646 |
insertAdditionalSystemMetadataFields( |
|
647 |
sm.getDateUploaded().getTime(), |
|
648 |
sm.getRightsHolder().getValue(), |
|
649 |
sm.getChecksum().getValue(), |
|
650 |
sm.getChecksum().getAlgorithm().name(), |
|
651 |
sm.getOriginMemberNode().getValue(), |
|
652 |
sm.getAuthoritativeMemberNode().getValue(), |
|
653 |
sm.getDateSysMetadataModified().getTime(), |
|
654 |
sm.getSubmitter().getValue(), |
|
655 |
sm.getIdentifier().getValue()); |
|
656 |
} |
|
657 |
|
|
658 |
/** |
|
565 | 659 |
* return a localId based on a guid. The type can either be 'identifier' |
566 | 660 |
* to get an id from the identifier table or 'systemmetadata' to get |
567 | 661 |
* the identifier from the systemidentifier table |
... | ... | |
653 | 747 |
stmt.setString(1, guid); |
654 | 748 |
stmt.setString(2, docid); |
655 | 749 |
stmt.setInt(3, rev); |
750 |
System.out.println("generic mapping query: " + stmt.toString()); |
|
656 | 751 |
int rows = stmt.executeUpdate(); |
657 | 752 |
|
658 | 753 |
stmt.close(); |
659 | 754 |
} catch (SQLException e) { |
660 | 755 |
e.printStackTrace(); |
661 |
logMetacat.error("SQL error while creating a mapping to the system metadata identifier: "
|
|
756 |
logMetacat.warn("SQL error while creating a mapping to the system metadata identifier: "
|
|
662 | 757 |
+ e.getMessage()); |
663 | 758 |
} catch (NumberFormatException e) { |
664 | 759 |
e.printStackTrace(); |
Also available in: Unified diff
adding fields for additional system metadata info