28 |
28 |
|
29 |
29 |
import gov.loc.repository.bagit.Bag;
|
30 |
30 |
import gov.loc.repository.bagit.BagFactory;
|
|
31 |
import gov.loc.repository.bagit.BagFile;
|
|
32 |
import gov.loc.repository.bagit.Manifest;
|
31 |
33 |
|
32 |
34 |
import java.io.ByteArrayInputStream;
|
33 |
35 |
import java.io.ByteArrayOutputStream;
|
... | ... | |
40 |
42 |
import java.util.ArrayList;
|
41 |
43 |
import java.util.Calendar;
|
42 |
44 |
import java.util.Date;
|
|
45 |
import java.util.HashMap;
|
|
46 |
import java.util.Iterator;
|
43 |
47 |
import java.util.List;
|
|
48 |
import java.util.Map;
|
44 |
49 |
|
45 |
50 |
import junit.framework.Test;
|
46 |
51 |
import junit.framework.TestSuite;
|
47 |
52 |
|
48 |
53 |
import org.apache.commons.io.IOUtils;
|
|
54 |
import org.dataone.client.ObjectFormatCache;
|
49 |
55 |
import org.dataone.configuration.Settings;
|
|
56 |
import org.dataone.ore.ResourceMapFactory;
|
50 |
57 |
import org.dataone.service.util.TypeMarshaller;
|
51 |
58 |
import org.dataone.service.exceptions.IdentifierNotUnique;
|
52 |
59 |
import org.dataone.service.exceptions.InsufficientResources;
|
... | ... | |
77 |
84 |
import org.dataone.service.types.v1.Subject;
|
78 |
85 |
import org.dataone.service.types.v1.SubjectInfo;
|
79 |
86 |
import org.dataone.service.types.v1.SystemMetadata;
|
|
87 |
import org.dspace.foresite.ResourceMap;
|
80 |
88 |
import org.jibx.runtime.JiBXException;
|
81 |
89 |
import org.junit.After;
|
82 |
90 |
import org.junit.Before;
|
... | ... | |
149 |
157 |
suite.addTest(new MNodeServiceTest("testReplicate"));
|
150 |
158 |
// MN packaging tests
|
151 |
159 |
suite.addTest(new MNodeServiceTest("testGetPackage"));
|
|
160 |
suite.addTest(new MNodeServiceTest("testGetOREPackage"));
|
152 |
161 |
|
153 |
162 |
|
154 |
163 |
return suite;
|
... | ... | |
1112 |
1121 |
SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
|
1113 |
1122 |
Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
|
1114 |
1123 |
InputStream bagStream = MNodeService.getInstance(request).getPackage(session, pid);
|
1115 |
|
File bagFile = File.createTempFile("bagit", ".zip");
|
|
1124 |
File bagFile = File.createTempFile("bagit.", ".zip");
|
1116 |
1125 |
IOUtils.copy(bagStream, new FileOutputStream(bagFile));
|
1117 |
1126 |
BagFactory bagFactory = new BagFactory();
|
1118 |
1127 |
Bag bag = bagFactory.createBag(bagFile);
|
... | ... | |
1133 |
1142 |
fail("Unexpected error: " + e.getMessage());
|
1134 |
1143 |
}
|
1135 |
1144 |
}
|
|
1145 |
|
|
1146 |
|
|
1147 |
/**
|
|
1148 |
* Test getting a known object
|
|
1149 |
*/
|
|
1150 |
public void testGetOREPackage() {
|
|
1151 |
printTestHeader("testGetOREPackage");
|
|
1152 |
|
|
1153 |
try {
|
|
1154 |
|
|
1155 |
// construct the ORE package
|
|
1156 |
Identifier resourceMapId = new Identifier();
|
|
1157 |
//resourceMapId.setValue("doi://1234/AA/map.1.1");
|
|
1158 |
resourceMapId.setValue("testGetOREPackage." + System.currentTimeMillis());
|
|
1159 |
Identifier metadataId = new Identifier();
|
|
1160 |
metadataId.setValue("doi://1234/AA/meta.1." + + System.currentTimeMillis());
|
|
1161 |
List<Identifier> dataIds = new ArrayList<Identifier>();
|
|
1162 |
Identifier dataId = new Identifier();
|
|
1163 |
dataId.setValue("doi://1234/AA/data.1." + System.currentTimeMillis());
|
|
1164 |
Identifier dataId2 = new Identifier();
|
|
1165 |
dataId2.setValue("doi://1234/AA/data.2." + System.currentTimeMillis());
|
|
1166 |
dataIds.add(dataId);
|
|
1167 |
dataIds.add(dataId2);
|
|
1168 |
Map<Identifier, List<Identifier>> idMap = new HashMap<Identifier, List<Identifier>>();
|
|
1169 |
idMap.put(metadataId, dataIds);
|
|
1170 |
ResourceMapFactory rmf = ResourceMapFactory.getInstance();
|
|
1171 |
ResourceMap resourceMap = rmf.createResourceMap(resourceMapId, idMap);
|
|
1172 |
assertNotNull(resourceMap);
|
|
1173 |
String rdfXml = ResourceMapFactory.getInstance().serializeResourceMap(resourceMap);
|
|
1174 |
assertNotNull(rdfXml);
|
|
1175 |
|
|
1176 |
Session session = getTestSession();
|
|
1177 |
InputStream object = null;
|
|
1178 |
SystemMetadata sysmeta = null;
|
|
1179 |
|
|
1180 |
// save the data objects (data just contains their ID)
|
|
1181 |
InputStream dataObject1 = new ByteArrayInputStream(dataId.getValue().getBytes("UTF-8"));
|
|
1182 |
sysmeta = createSystemMetadata(dataId, session.getSubject(), dataObject1);
|
|
1183 |
MNodeService.getInstance(request).create(session, dataId, dataObject1, sysmeta);
|
|
1184 |
// second data file
|
|
1185 |
InputStream dataObject2 = new ByteArrayInputStream(dataId2.getValue().getBytes("UTF-8"));
|
|
1186 |
sysmeta = createSystemMetadata(dataId2, session.getSubject(), dataObject2);
|
|
1187 |
MNodeService.getInstance(request).create(session, dataId2, dataObject2, sysmeta);
|
|
1188 |
// metadata file
|
|
1189 |
InputStream metadataObject = new ByteArrayInputStream(metadataId.getValue().getBytes("UTF-8"));
|
|
1190 |
sysmeta = createSystemMetadata(metadataId, session.getSubject(), metadataObject);
|
|
1191 |
MNodeService.getInstance(request).create(session, metadataId, metadataObject, sysmeta);
|
|
1192 |
|
|
1193 |
// save the ORE object
|
|
1194 |
object = new ByteArrayInputStream(rdfXml.getBytes("UTF-8"));
|
|
1195 |
sysmeta = createSystemMetadata(resourceMapId, session.getSubject(), object);
|
|
1196 |
sysmeta.setFormatId(ObjectFormatCache.getInstance().getFormat("http://www.openarchives.org/ore/terms").getFormatId());
|
|
1197 |
Identifier pid = MNodeService.getInstance(request).create(session, resourceMapId, object, sysmeta);
|
|
1198 |
|
|
1199 |
// get the package we uploaded
|
|
1200 |
InputStream bagStream = MNodeService.getInstance(request).getPackage(session, pid);
|
|
1201 |
File bagFile = File.createTempFile("bagit.", ".zip");
|
|
1202 |
IOUtils.copy(bagStream, new FileOutputStream(bagFile));
|
|
1203 |
BagFactory bagFactory = new BagFactory();
|
|
1204 |
Bag bag = bagFactory.createBag(bagFile);
|
|
1205 |
Iterator<Manifest> manifestIter = bag.getTagManifests().iterator();
|
|
1206 |
while (manifestIter.hasNext()) {
|
|
1207 |
String filepath = manifestIter.next().getFilepath();
|
|
1208 |
BagFile entryFile = bag.getBagFile(filepath);
|
|
1209 |
InputStream result = entryFile.newInputStream();
|
|
1210 |
// check ORE
|
|
1211 |
if (filepath.contains(resourceMapId.getValue())) {
|
|
1212 |
object.reset();
|
|
1213 |
assertTrue(object.available() > 0);
|
|
1214 |
assertTrue(result.available() > 0);
|
|
1215 |
assertTrue(IOUtils.contentEquals(result, object));
|
|
1216 |
}
|
|
1217 |
// check metadata
|
|
1218 |
if (filepath.contains(metadataId.getValue())) {
|
|
1219 |
metadataObject.reset();
|
|
1220 |
assertTrue(metadataObject.available() > 0);
|
|
1221 |
assertTrue(result.available() > 0);
|
|
1222 |
assertTrue(IOUtils.contentEquals(result, metadataObject));
|
|
1223 |
}
|
|
1224 |
if (filepath.contains(dataId.getValue())) {
|
|
1225 |
dataObject1.reset();
|
|
1226 |
assertTrue(dataObject1.available() > 0);
|
|
1227 |
assertTrue(result.available() > 0);
|
|
1228 |
assertTrue(IOUtils.contentEquals(result, dataObject1));
|
|
1229 |
}
|
|
1230 |
if (filepath.contains(dataId2.getValue())) {
|
|
1231 |
dataObject2.reset();
|
|
1232 |
assertTrue(dataObject2.available() > 0);
|
|
1233 |
assertTrue(result.available() > 0);
|
|
1234 |
assertTrue(IOUtils.contentEquals(result, dataObject2));
|
|
1235 |
}
|
|
1236 |
|
|
1237 |
|
|
1238 |
}
|
|
1239 |
|
|
1240 |
// clean up
|
|
1241 |
bagFile.delete();
|
|
1242 |
|
|
1243 |
} catch (Exception e) {
|
|
1244 |
e.printStackTrace();
|
|
1245 |
fail("Unexpected error: " + e.getMessage());
|
|
1246 |
}
|
|
1247 |
}
|
|
1248 |
|
1136 |
1249 |
|
1137 |
|
|
1138 |
|
|
1139 |
1250 |
}
|
MN.getPackage() - test with ORE that includes 2 data files and a "metadata" file (still should be using EML for that test). https://projects.ecoinformatics.org/ecoinfo/issues/6026