public void updateMetadata()

in core/src/main/java/org/apache/sling/cms/core/internal/FileMetadataExtractorImpl.java [82:116]


    public void updateMetadata(File file, boolean persist) throws IOException {
        log.trace("Updating metadata for {}, persist {}", file, persist);
        try {
            Resource resource = file.getResource();
            Resource content = resource.getChild(JcrConstants.JCR_CONTENT);
            if (content == null) {
                log.warn("Content resource is null");
                return;
            }
            Map<String, Object> properties = null;
            Resource metadata = content.getChild(CMSConstants.NN_METADATA);
            if (metadata != null) {
                properties = metadata.adaptTo(ModifiableValueMap.class);
            } else {
                properties = new HashMap<>();
                properties.put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
            }
            if (properties != null) {
                properties.putAll(extractMetadata(file.getResource()));
                properties.put("SHA256", generateSha(resource));
                resource.getResourceResolver().refresh();
                if (metadata == null) {
                    resource.getResourceResolver().create(content, CMSConstants.NN_METADATA, properties);
                }
                if (persist) {
                    resource.getResourceResolver().commit();
                }
                log.info("Metadata extracted from {}", resource.getPath());
            } else {
                throw new IOException("Unable to update metadata for " + resource.getPath());
            }
        } catch (SAXException | TikaException | RepositoryException | LoginException e) {
            throw new IOException("Failed to parse metadata", e);
        }
    }