use of org.mycore.datamodel.metadata.MCRDerivate in project mycore by MyCoRe-Org.
the class MCRRestAPIObjectsHelper method showMCRObject.
public static Response showMCRObject(String pathParamId, String queryParamStyle, UriInfo info, HttpServletRequest request) throws MCRRestAPIException {
MCRObject mcrObj = retrieveMCRObject(pathParamId);
Document doc = mcrObj.createXML();
Element eStructure = doc.getRootElement().getChild("structure");
if (queryParamStyle != null && !MCRRestAPIObjects.STYLE_DERIVATEDETAILS.equals(queryParamStyle)) {
throw new MCRRestAPIException(Response.Status.BAD_REQUEST, new MCRRestAPIError(MCRRestAPIError.CODE_WRONG_PARAMETER, "The value of parameter {style} is not allowed.", "Allowed values for {style} parameter are: " + MCRRestAPIObjects.STYLE_DERIVATEDETAILS));
}
if (MCRRestAPIObjects.STYLE_DERIVATEDETAILS.equals(queryParamStyle) && eStructure != null) {
Element eDerObjects = eStructure.getChild("derobjects");
if (eDerObjects != null) {
for (Element eDer : eDerObjects.getChildren("derobject")) {
String derID = eDer.getAttributeValue("href", MCRConstants.XLINK_NAMESPACE);
try {
MCRDerivate der = MCRMetadataManager.retrieveMCRDerivate(MCRObjectID.getInstance(derID));
eDer.addContent(der.createXML().getRootElement().detach());
// <mycorederivate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:noNamespaceSchemaLocation="datamodel-derivate.xsd" ID="cpr_derivate_00003760" label="display_image" version="1.3">
// <derivate display="true">
eDer = eDer.getChild("mycorederivate").getChild("derivate");
Document docContents = listDerivateContentAsXML(MCRMetadataManager.retrieveMCRDerivate(MCRObjectID.getInstance(derID)), "/", -1, info);
if (docContents.hasRootElement()) {
eDer.addContent(docContents.getRootElement().detach());
}
} catch (MCRException e) {
eDer.addContent(new Comment("Error: Derivate not found."));
} catch (IOException e) {
eDer.addContent(new Comment("Error: Derivate content could not be listed: " + e.getMessage()));
}
}
}
}
StringWriter sw = new StringWriter();
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
try {
String filter_id = MCRConfiguration.instance().getString("MCR.RestAPI.v1.Filter.XML", "");
if (filter_id.length() > 0) {
MCRContentTransformer trans = MCRContentTransformerFactory.getTransformer(filter_id);
Document filtered_doc = trans.transform(new MCRJDOMContent(doc)).asXML();
outputter.output(filtered_doc, sw);
} else {
outputter.output(doc, sw);
}
} catch (SAXException | JDOMException e) {
throw new MCRRestAPIException(Response.Status.INTERNAL_SERVER_ERROR, new MCRRestAPIError(MCRRestAPIError.CODE_INTERNAL_ERROR, "Unable to transform MCRContent to XML document", e.getMessage()));
} catch (IOException e) {
throw new MCRRestAPIException(Response.Status.INTERNAL_SERVER_ERROR, new MCRRestAPIError(MCRRestAPIError.CODE_INTERNAL_ERROR, "Unable to retrieve/transform MyCoRe object", e.getMessage()));
}
String authHeader = MCRJSONWebTokenUtil.createJWTAuthorizationHeader(MCRJSONWebTokenUtil.retrieveAuthenticationToken(request));
return Response.ok(sw.toString()).type("application/xml").header(HEADER_NAME_AUTHORIZATION, authHeader).build();
}
use of org.mycore.datamodel.metadata.MCRDerivate in project mycore by MyCoRe-Org.
the class MCRURNGranularRESTRegistrationServiceTest method fullRegister.
@Test
public void fullRegister() throws Exception {
new MockContentTypes();
new MockFrontendUtil();
new MockFiles();
new MockAccessManager();
new MockObjectDerivate();
new MockDerivate();
MockMetadataManager mockMetadataManager = new MockMetadataManager();
MCRDerivate derivate = new MCRDerivate();
MCRObjectID mcrObjectID = MCRPIUtils.getNextFreeID();
derivate.setId(mcrObjectID);
mockMetadataManager.put(mcrObjectID, derivate);
Function<MCRDerivate, Stream<MCRPath>> foo = deriv -> IntStream.iterate(0, i -> i + 1).mapToObj(i -> "/foo/" + UUID.randomUUID() + "_" + String.format(Locale.getDefault(), "%02d", i)).map(f -> MCRPath.getPath(derivate.getId().toString(), f)).limit(numOfDerivFiles);
String serviceID = "TestService";
MCRURNGranularRESTRegistrationService testService = new MCRURNGranularRESTRegistrationService(serviceID, foo);
testService.register(derivate, "", true);
timerTask();
List<MCRPIRegistrationInfo> registeredURNs = MCREntityManagerProvider.getEntityManagerFactory().createEntityManager().createNamedQuery("Get.PI.Created", MCRPIRegistrationInfo.class).setParameter("mcrId", mcrObjectID.toString()).setParameter("type", MCRDNBURN.TYPE).setParameter("service", serviceID).getResultList();
Assert.assertEquals("Wrong number of registered URNs: ", numOfDerivFiles + 1, registeredURNs.size());
}
use of org.mycore.datamodel.metadata.MCRDerivate in project mycore by MyCoRe-Org.
the class MCRURNGranularOAIRegistrationService method register.
@Override
public MCRDNBURN register(MCRBase obj, String additional, boolean updateObject) throws MCRAccessException, MCRActiveLinkException, MCRPersistentIdentifierException {
this.validateRegistration(obj, additional);
MCRObjectDerivate derivate = ((MCRDerivate) obj).getDerivate();
MCRDNBURN newURN;
if (additional.equals("")) {
/* Multiple URN for entire Derivate... */
newURN = registerURNsDerivate(obj, additional, derivate);
} else {
/* Single URN to one File... */
newURN = registerSingleURN(obj, additional, derivate);
}
try {
MCRMetadataManager.update(obj);
} catch (Exception e) {
throw new MCRPersistentIdentifierException("Error while updating derivate " + obj.getId(), e);
}
return newURN;
}
Aggregations