-
Notifications
You must be signed in to change notification settings - Fork 49
Adapt parsing Bagit Profile due to specification. #128
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 5 commits
c2c829c
af27481
db411d0
e8e0a77
856ee4e
f2e4ab1
e6ce9a7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -19,9 +19,10 @@ | |
| import com.fasterxml.jackson.databind.deser.std.StdDeserializer; | ||
|
|
||
| /** | ||
| * Deserialize bagit profile json to a {@link BagitProfile} | ||
| * Deserialize bagit profile json to a {@link BagitProfile} | ||
| */ | ||
| public class BagitProfileDeserializer extends StdDeserializer<BagitProfile> { | ||
|
|
||
| private static final long serialVersionUID = 1L; | ||
| private static final Logger logger = LoggerFactory.getLogger(BagitProfileDeserializer.class); | ||
| private static final ResourceBundle messages = ResourceBundle.getBundle("MessageBundle"); | ||
|
|
@@ -36,149 +37,176 @@ public BagitProfileDeserializer(final Class<?> vc) { | |
|
|
||
| @Override | ||
| public BagitProfile deserialize(final JsonParser p, final DeserializationContext ctxt) | ||
| throws IOException, JsonProcessingException { | ||
| throws IOException, JsonProcessingException { | ||
| final BagitProfile profile = new BagitProfile(); | ||
| final JsonNode node = p.getCodec().readTree(p); | ||
|
|
||
| parseBagitProfileInfo(node, profile); | ||
|
|
||
| profile.setBagInfoRequirements(parseBagInfo(node)); | ||
|
|
||
| profile.getManifestTypesRequired().addAll(parseManifestTypesRequired(node)); | ||
|
|
||
| profile.setFetchFileAllowed(node.get("Allow-Fetch.txt").asBoolean()); | ||
| logger.debug(messages.getString("fetch_allowed"), profile.isFetchFileAllowed()); | ||
|
|
||
| profile.setSerialization(Serialization.valueOf(node.get("Serialization").asText())); | ||
| logger.debug(messages.getString("serialization_allowed"),profile.getSerialization()); | ||
| logger.debug(messages.getString("serialization_allowed"), profile.getSerialization()); | ||
|
|
||
| profile.getAcceptableMIMESerializationTypes().addAll(parseAcceptableSerializationFormats(node)); | ||
|
|
||
| profile.getTagManifestTypesRequired().addAll(parseRequiredTagmanifestTypes(node)); | ||
|
|
||
| profile.getTagFilesRequired().addAll(parseRequiredTagFiles(node)); | ||
|
|
||
| profile.getAcceptableBagitVersions().addAll(parseAcceptableVersions(node)); | ||
|
|
||
| return profile; | ||
| } | ||
| private static void parseBagitProfileInfo(final JsonNode node, final BagitProfile profile){ | ||
|
|
||
| private static void parseBagitProfileInfo(final JsonNode node, final BagitProfile profile) { | ||
| final JsonNode bagitProfileInfoNode = node.get("BagIt-Profile-Info"); | ||
| logger.debug(messages.getString("parsing_bagit_profile_info_section")); | ||
|
|
||
|
|
||
| // Read required tags first | ||
| // due to specification defined at https://github.com/bagit-profiles/bagit-profiles | ||
|
||
| final String profileIdentifier = bagitProfileInfoNode.get("BagIt-Profile-Identifier").asText(); | ||
| logger.debug(messages.getString("identifier"), profileIdentifier); | ||
| profile.setBagitProfileIdentifier(profileIdentifier); | ||
|
|
||
| final String sourceOrg = bagitProfileInfoNode.get("Source-Organization").asText(); | ||
| logger.debug(messages.getString("source_organization"), sourceOrg); | ||
| profile.setSourceOrganization(sourceOrg); | ||
|
|
||
| final String contactName = bagitProfileInfoNode.get("Contact-Name").asText(); | ||
| logger.debug(messages.getString("contact_name"), contactName); | ||
| profile.setContactName(contactName); | ||
|
|
||
| final String contactEmail = bagitProfileInfoNode.get("Contact-Email").asText(); | ||
| logger.debug(messages.getString("contact_email"), contactEmail); | ||
| profile.setContactEmail(contactEmail); | ||
|
|
||
|
|
||
| final String extDescript = bagitProfileInfoNode.get("External-Description").asText(); | ||
| logger.debug(messages.getString("external_description"), extDescript); | ||
| profile.setExternalDescription(extDescript); | ||
|
|
||
| final String version = bagitProfileInfoNode.get("Version").asText(); | ||
| logger.debug(messages.getString("version"), version); | ||
| profile.setVersion(version); | ||
|
|
||
| final JsonNode contactNameNode = bagitProfileInfoNode.get("Contact-Name"); | ||
| if (contactNameNode != null) { | ||
| final String contactName = contactNameNode.asText(); | ||
| logger.debug(messages.getString("contact_name"), contactName); | ||
| profile.setContactName(contactName); | ||
| } | ||
|
|
||
| final JsonNode contactEmailNode = bagitProfileInfoNode.get("Contact-Email"); | ||
| if (contactEmailNode != null) { | ||
| final String contactEmail = contactEmailNode.asText(); | ||
| logger.debug(messages.getString("contact_email"), contactEmail); | ||
| profile.setContactEmail(contactEmail); | ||
| } | ||
|
|
||
| final JsonNode contactPhoneNode = bagitProfileInfoNode.get("Contact-Phone"); | ||
| if (contactPhoneNode != null) { | ||
| final String contactPhone = contactPhoneNode.asText(); | ||
| logger.debug(messages.getString("contact_phone"), contactPhone); | ||
| profile.setContactPhone(contactPhone); | ||
| } | ||
| } | ||
|
|
||
| @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") | ||
| private static Map<String, BagInfoRequirement> parseBagInfo(final JsonNode rootNode){ | ||
| private static Map<String, BagInfoRequirement> parseBagInfo(final JsonNode rootNode) { | ||
| final JsonNode bagInfoNode = rootNode.get("Bag-Info"); | ||
| logger.debug(messages.getString("parsing_bag_info")); | ||
| final Map<String, BagInfoRequirement> bagInfo = new HashMap<>(); | ||
| final Map<String, BagInfoRequirement> bagInfo = new HashMap<>(); | ||
|
|
||
| final Iterator<Entry<String, JsonNode>> nodes = bagInfoNode.fields(); //stuck in java 6... | ||
| while(nodes.hasNext()){ | ||
|
|
||
| while (nodes.hasNext()) { | ||
| final Entry<String, JsonNode> node = nodes.next(); | ||
|
|
||
| final BagInfoRequirement entry = new BagInfoRequirement(); | ||
| entry.setRequired(node.getValue().get("required").asBoolean()); | ||
|
|
||
| // due to specification required is false by default. | ||
| final JsonNode requiredNode = node.getValue().get("required"); | ||
| if (requiredNode != null) { | ||
| entry.setRequired(requiredNode.asBoolean()); | ||
| } | ||
|
|
||
| final JsonNode valuesNode = node.getValue().get("values"); | ||
| if(valuesNode != null){ | ||
| for(final JsonNode value : valuesNode){ | ||
| if (valuesNode != null) { | ||
| for (final JsonNode value : valuesNode) { | ||
| entry.getAcceptableValues().add(value.asText()); | ||
| } | ||
| } | ||
|
|
||
|
|
||
| final JsonNode repeatableNode = node.getValue().get("repeatable"); | ||
| if (repeatableNode != null) { | ||
| entry.setRepeatable(repeatableNode.asBoolean()); | ||
| } | ||
|
|
||
| logger.debug("{}: {}", node.getKey(), entry); | ||
| bagInfo.put(node.getKey(), entry); | ||
| } | ||
|
|
||
| return bagInfo; | ||
| } | ||
| private static List<String> parseManifestTypesRequired(final JsonNode node){ | ||
|
|
||
| private static List<String> parseManifestTypesRequired(final JsonNode node) { | ||
| final JsonNode manifests = node.get("Manifests-Required"); | ||
|
|
||
| final List<String> manifestTypes = new ArrayList<>(); | ||
|
|
||
| for (final JsonNode manifestName : manifests) { | ||
| manifestTypes.add(manifestName.asText()); | ||
| } | ||
|
|
||
| logger.debug(messages.getString("required_manifest_types"), manifestTypes); | ||
|
|
||
| return manifestTypes; | ||
| } | ||
| private static List<String> parseAcceptableSerializationFormats(final JsonNode node){ | ||
|
|
||
| private static List<String> parseAcceptableSerializationFormats(final JsonNode node) { | ||
| final JsonNode serialiationFormats = node.get("Accept-Serialization"); | ||
| final List<String> serialTypes = new ArrayList<>(); | ||
|
|
||
| for (final JsonNode serialiationFormat : serialiationFormats) { | ||
| serialTypes.add(serialiationFormat.asText()); | ||
| } | ||
| logger.debug(messages.getString("acceptable_serialization_mime_types"), serialTypes); | ||
|
|
||
| return serialTypes; | ||
| } | ||
| private static List<String> parseRequiredTagmanifestTypes(final JsonNode node){ | ||
|
|
||
| private static List<String> parseRequiredTagmanifestTypes(final JsonNode node) { | ||
| final JsonNode tagManifestsRequiredNodes = node.get("Tag-Manifests-Required"); | ||
| final List<String> requiredTagmanifestTypes = new ArrayList<>(); | ||
|
|
||
| for(final JsonNode tagManifestsRequiredNode : tagManifestsRequiredNodes){ | ||
| requiredTagmanifestTypes.add(tagManifestsRequiredNode.asText()); | ||
| if (tagManifestsRequiredNodes != null) { | ||
| for (final JsonNode tagManifestsRequiredNode : tagManifestsRequiredNodes) { | ||
| requiredTagmanifestTypes.add(tagManifestsRequiredNode.asText()); | ||
| } | ||
| } | ||
| logger.debug(messages.getString("required_tagmanifest_types"), requiredTagmanifestTypes); | ||
|
|
||
| return requiredTagmanifestTypes; | ||
| } | ||
| private static List<String> parseRequiredTagFiles(final JsonNode node){ | ||
|
|
||
| private static List<String> parseRequiredTagFiles(final JsonNode node) { | ||
| final JsonNode tagFilesRequiredNodes = node.get("Tag-Files-Required"); | ||
| final List<String> requiredTagFiles = new ArrayList<>(); | ||
|
|
||
| for(final JsonNode tagFilesRequiredNode : tagFilesRequiredNodes){ | ||
| requiredTagFiles.add(tagFilesRequiredNode.asText()); | ||
|
|
||
| if (tagFilesRequiredNodes != null) { | ||
| for (final JsonNode tagFilesRequiredNode : tagFilesRequiredNodes) { | ||
| requiredTagFiles.add(tagFilesRequiredNode.asText()); | ||
| } | ||
| } | ||
| logger.debug(messages.getString("tag_files_required"), requiredTagFiles); | ||
|
|
||
| return requiredTagFiles; | ||
| } | ||
| private static List<String> parseAcceptableVersions(final JsonNode node){ | ||
|
|
||
| private static List<String> parseAcceptableVersions(final JsonNode node) { | ||
| final JsonNode acceptableVersionsNodes = node.get("Accept-BagIt-Version"); | ||
| final List<String> acceptableVersions = new ArrayList<>(); | ||
| for(final JsonNode acceptableVersionsNode : acceptableVersionsNodes){ | ||
|
|
||
| for (final JsonNode acceptableVersionsNode : acceptableVersionsNodes) { | ||
| acceptableVersions.add(acceptableVersionsNode.asText()); | ||
| } | ||
| logger.debug(messages.getString("acceptable_bagit_versions"), acceptableVersions); | ||
|
|
||
| return acceptableVersions; | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.