private static void copyFlagToProperty(MCRBase obj, JsonObject json, String flagName, String propertyName) { obj.getService() .getFlags(flagName) .stream() .findFirst() .ifPresent(c -> { json.addProperty(propertyName, c); }); }
public String getServiceFlag(String type) { MCRObjectService os = object.getService(); return (os.isFlagTypeSet(type) ? os.getFlags(type).get(0) : null); }
public static void addDatesToEntry(Entry entry, MCRObject mcrObject) { MCRObjectService serviceElement = mcrObject.getService(); ArrayList<String> flags = serviceElement.getFlags(MCRObjectService.FLAG_TYPE_CREATEDBY); flags.addAll(serviceElement.getFlags(MCRObjectService.FLAG_TYPE_MODIFIEDBY)); Set<String> clearedFlags = new LinkedHashSet<>(flags); clearedFlags.forEach(entry::addAuthor); Date modifyDate = serviceElement.getDate(MCRObjectService.DATE_TYPE_MODIFYDATE); Date createDate = serviceElement.getDate(MCRObjectService.DATE_TYPE_CREATEDATE); entry.setEdited(modifyDate); entry.setPublished(createDate); }
public static boolean hasFlag(MCRBase obj, String additional, MCRPIRegistrationInfo mcrpi) { MCRObjectService service = obj.getService(); ArrayList<String> flags = service.getFlags(MCRPIService.PI_FLAG); Gson gson = getGson(); return flags.stream().anyMatch(_stringFlag -> { MCRPI flag = gson.fromJson(_stringFlag, MCRPI.class); return flag.getAdditional().equals(additional) && flag.getIdentifier().equals(mcrpi.getIdentifier()); }); }
private JsonObject getData(MCRObject obj) { JsonParser parser = new JsonParser(); JsonObject event = new JsonObject(); event.addProperty("id", obj.getId().toString()); event.addProperty("uri", uriResolver.apply(getPathURI("objects/" + obj.getId())).toString()); Optional.ofNullable(obj.getService().getState()) .ifPresent(s -> event.addProperty("state", s.getID())); copyFlagToProperty(obj, event, "createdby", "createdBy"); copyServiceDateToProperty(obj, event, "createdate", "created"); copyFlagToProperty(obj, event, "modifiedby", "modifiedBy"); copyServiceDateToProperty(obj, event, "modifydate", "modified"); JsonArray pi = new JsonArray(); obj.getService().getFlags("MyCoRe-PI").stream() .map(parser::parse) .forEach(pi::add); event.add("pi", pi); return event; }
/** * Removes a flag from a {@link MCRObject} * * @param obj the object * @param databaseEntry the database entry * @return the remove entry parsed from json or null */ public static MCRPI removeFlagFromObject(MCRBase obj, MCRPI databaseEntry) { MCRObjectService service = obj.getService(); ArrayList<String> flags = service.getFlags(MCRPIService.PI_FLAG); int flagCount = flags.size(); for (int flagIndex = 0; flagIndex < flagCount; flagIndex++) { String flag = flags.get(flagIndex); MCRPI pi = getGson().fromJson(flag, MCRPI.class); if (pi.getIdentifier().equals(databaseEntry.getIdentifier()) && pi.getAdditional().equals(databaseEntry.getAdditional()) && pi.getService().equals(databaseEntry.getService()) && pi.getType().equals(databaseEntry.getType())) { service.removeFlag(flagIndex); return databaseEntry; } } return null; }
public void updateFlag(MCRObjectID id, String additional, MCRPI mcrpi) { MCRBase obj = MCRMetadataManager.retrieve(id); MCRObjectService service = obj.getService(); ArrayList<String> flags = service.getFlags(MCRPIService.PI_FLAG); Gson gson = getGson(); String stringFlag = flags.stream().filter(_stringFlag -> { MCRPI flag = gson.fromJson(_stringFlag, MCRPI.class); return flag.getAdditional().equals(additional) && flag.getIdentifier().equals(mcrpi.getIdentifier()); }).findAny().orElseThrow(() -> new MCRException(new MCRPersistentIdentifierException( "Could find flag to update (" + id + "," + additional + "," + mcrpi.getIdentifier() + ")"))); int flagIndex = service.getFlagIndex(stringFlag); service.removeFlag(flagIndex); addFlagToObject(obj, mcrpi); try { MCRMetadataManager.update(obj); } catch (Exception e) { throw new MCRException("Could not update flags of object " + id, e); } } }
@Override protected void handleObjectRepaired(MCREvent evt, MCRObject obj) { /* Add PIs to DB if they are not there */ MCRPIManager.getInstance().getRegistered(obj) .forEach(pi -> MCRPIManager.getInstance().delete(pi.getMycoreID(), pi.getAdditional(), pi.getType(), pi.getService())); Gson gson = MCRPIService.getGson(); obj.getService().getFlags(MCRPIService.PI_FLAG).stream() .map(piFlag -> gson.fromJson(piFlag, MCRPI.class)) .filter(entry -> !MCRPIManager.getInstance().exist(entry)) .forEach(entry -> { //TODO: disabled for MCR-1393 // entry.setMcrRevision(MCRCoreVersion.getRevision()); entry.setMcrVersion(MCRCoreVersion.getVersion()); entry.setMycoreID(obj.getId().toString()); LOGGER.info("Add PI : {} with service {} to database!", entry.getIdentifier(), entry.getService()); MCRHIBConnection.instance().getSession().save(entry); }); handleObjectUpdated(evt, obj); }