Search in sources :

Example 16 with EName

use of org.opencastproject.mediapackage.EName in project opencast by opencast.

the class TagByDublinCoreTermWOH method start.

/**
 * {@inheritDoc}
 *
 * @see org.opencastproject.workflow.api.WorkflowOperationHandler#start(org.opencastproject.workflow.api.WorkflowInstance,
 *      JobContext)
 */
@Override
public WorkflowOperationResult start(WorkflowInstance workflowInstance, JobContext context) throws WorkflowOperationException {
    MediaPackage mediaPackage = workflowInstance.getMediaPackage();
    WorkflowOperationInstance currentOperation = workflowInstance.getCurrentOperation();
    String configuredSourceFlavors = StringUtils.trimToEmpty(currentOperation.getConfiguration(SOURCE_FLAVORS_PROPERTY));
    String configuredSourceTags = StringUtils.trimToEmpty(currentOperation.getConfiguration(SOURCE_TAGS_PROPERTY));
    String configuredCatalog = StringUtils.trimToEmpty(currentOperation.getConfiguration(DCCATALOG_PROPERTY));
    String configuredDCTerm = StringUtils.trimToEmpty(currentOperation.getConfiguration(DCTERM_PROPERTY));
    String configuredDefaultValue = StringUtils.trimToNull(currentOperation.getConfiguration(DEFAULT_VALUE_PROPERTY));
    String configuredMatchValue = StringUtils.trimToEmpty(currentOperation.getConfiguration(MATCH_VALUE_PROPERTY));
    String configuredTargetFlavor = StringUtils.trimToNull(currentOperation.getConfiguration(TARGET_FLAVOR_PROPERTY));
    String configuredTargetTags = StringUtils.trimToEmpty(currentOperation.getConfiguration(TARGET_TAGS_PROPERTY));
    boolean copy = BooleanUtils.toBoolean(currentOperation.getConfiguration(COPY_PROPERTY));
    String[] sourceTags = StringUtils.split(configuredSourceTags, ",");
    String[] targetTags = StringUtils.split(configuredTargetTags, ",");
    String[] sourceFlavors = StringUtils.split(configuredSourceFlavors, ",");
    SimpleElementSelector elementSelector = new SimpleElementSelector();
    for (String flavor : sourceFlavors) {
        elementSelector.addFlavor(MediaPackageElementFlavor.parseFlavor(flavor));
    }
    for (String tag : sourceTags) {
        elementSelector.addTag(tag);
    }
    List<String> removeTags = new ArrayList<>();
    List<String> addTags = new ArrayList<>();
    List<String> overrideTags = new ArrayList<>();
    for (String tag : targetTags) {
        if (tag.startsWith(MINUS)) {
            removeTags.add(tag);
        } else if (tag.startsWith(PLUS)) {
            addTags.add(tag);
        } else {
            overrideTags.add(tag);
        }
    }
    // Find Catalog
    Catalog[] catalogs = mediaPackage.getCatalogs(new MediaPackageElementFlavor("dublincore", StringUtils.lowerCase(configuredCatalog)));
    if (catalogs != null && catalogs.length > 0) {
        Boolean foundValue = false;
        EName dcterm = new EName(TERMS_NS_URI, configuredDCTerm);
        // Find DCTerm
        for (Catalog catalog : catalogs) {
            DublinCoreCatalog dc = DublinCoreUtil.loadDublinCore(workspace, catalog);
            // Match Value
            List<DublinCoreValue> values = dc.get(dcterm);
            if (values.isEmpty()) {
                // Use default
                if (configuredDefaultValue != null) {
                    foundValue = configuredDefaultValue.equals(configuredMatchValue);
                }
            } else {
                foundValue = values.contains(DublinCoreValue.mk(configuredMatchValue));
            }
        }
        if (foundValue) {
            if (copy) {
                logger.info("Retagging mediapackage elements as a copy");
            } else {
                logger.info("Retagging mediapackage elements");
            }
            Collection<MediaPackageElement> elements = elementSelector.select(mediaPackage, false);
            for (MediaPackageElement e : elements) {
                MediaPackageElement element = e;
                if (copy) {
                    element = (MediaPackageElement) e.clone();
                    element.setIdentifier(null);
                    // use the same URI as the original
                    element.setURI(e.getURI());
                }
                if (configuredTargetFlavor != null) {
                    element.setFlavor(MediaPackageElementFlavor.parseFlavor(configuredTargetFlavor));
                }
                if (overrideTags.size() > 0) {
                    element.clearTags();
                    for (String tag : overrideTags) {
                        element.addTag(tag);
                    }
                } else {
                    for (String tag : removeTags) {
                        element.removeTag(tag.substring(MINUS.length()));
                    }
                    for (String tag : addTags) {
                        element.addTag(tag.substring(PLUS.length()));
                    }
                }
                if (copy) {
                    mediaPackage.addDerived(element, e);
                }
            }
        }
    // if foundValue
    }
    return createResult(mediaPackage, Action.CONTINUE);
}
Also used : EName(org.opencastproject.mediapackage.EName) DublinCoreValue(org.opencastproject.metadata.dublincore.DublinCoreValue) ArrayList(java.util.ArrayList) SimpleElementSelector(org.opencastproject.mediapackage.selector.SimpleElementSelector) MediaPackageElementFlavor(org.opencastproject.mediapackage.MediaPackageElementFlavor) Catalog(org.opencastproject.mediapackage.Catalog) DublinCoreCatalog(org.opencastproject.metadata.dublincore.DublinCoreCatalog) WorkflowOperationInstance(org.opencastproject.workflow.api.WorkflowOperationInstance) MediaPackageElement(org.opencastproject.mediapackage.MediaPackageElement) MediaPackage(org.opencastproject.mediapackage.MediaPackage) DublinCoreCatalog(org.opencastproject.metadata.dublincore.DublinCoreCatalog)

Example 17 with EName

use of org.opencastproject.mediapackage.EName in project opencast by opencast.

the class ConfigureByDublinCoreTermWOH method start.

/**
 * {@inheritDoc}
 *
 * @see org.opencastproject.workflow.api.WorkflowOperationHandler#start(org.opencastproject.workflow.api.WorkflowInstance,
 *      JobContext)
 */
@Override
public WorkflowOperationResult start(WorkflowInstance workflowInstance, JobContext context) throws WorkflowOperationException {
    MediaPackage mediaPackage = workflowInstance.getMediaPackage();
    WorkflowOperationInstance currentOperation = workflowInstance.getCurrentOperation();
    String configuredCatalog = StringUtils.trimToEmpty(currentOperation.getConfiguration(DCCATALOG_PROPERTY));
    String configuredDCTerm = StringUtils.trimToEmpty(currentOperation.getConfiguration(DCTERM_PROPERTY));
    String configuredDefaultValue = StringUtils.trimToNull(currentOperation.getConfiguration(DEFAULT_VALUE_PROPERTY));
    String configuredMatchValue = StringUtils.trimToEmpty(currentOperation.getConfiguration(MATCH_VALUE_PROPERTY));
    // Find Catalog
    Catalog[] catalogs = mediaPackage.getCatalogs(new MediaPackageElementFlavor("dublincore", StringUtils.lowerCase(configuredCatalog)));
    if (catalogs != null && catalogs.length > 0) {
        Boolean foundValue = false;
        EName dcterm = new EName(TERMS_NS_URI, configuredDCTerm);
        // Find DCTerm
        for (Catalog catalog : catalogs) {
            DublinCoreCatalog dc = DublinCoreUtil.loadDublinCore(workspace, catalog);
            // Match Value
            List<DublinCoreValue> values = dc.get(dcterm);
            if (values.isEmpty()) {
                // Use default
                if (configuredDefaultValue != null) {
                    foundValue = configuredDefaultValue.equals(configuredMatchValue);
                }
            } else {
                foundValue = values.contains(DublinCoreValue.mk(configuredMatchValue));
            }
        }
        if (foundValue) {
            Map<String, String> properties = new HashMap<>();
            for (String key : currentOperation.getConfigurationKeys()) {
                // Ignore this operations configuration
                if (DCCATALOG_PROPERTY.equals(key) || DCTERM_PROPERTY.equals(key) || DEFAULT_VALUE_PROPERTY.equals(key) || MATCH_VALUE_PROPERTY.equals(key)) {
                    continue;
                }
                String value = currentOperation.getConfiguration(key);
                properties.put(key, value);
                logger.info("Configuration key '{}' of workflow {} is set to value '{}'", key, workflowInstance.getId(), value);
            }
            return createResult(mediaPackage, properties, Action.CONTINUE, 0);
        }
    // if foundValue
    }
    return createResult(mediaPackage, Action.CONTINUE);
}
Also used : EName(org.opencastproject.mediapackage.EName) DublinCoreValue(org.opencastproject.metadata.dublincore.DublinCoreValue) HashMap(java.util.HashMap) MediaPackageElementFlavor(org.opencastproject.mediapackage.MediaPackageElementFlavor) Catalog(org.opencastproject.mediapackage.Catalog) DublinCoreCatalog(org.opencastproject.metadata.dublincore.DublinCoreCatalog) WorkflowOperationInstance(org.opencastproject.workflow.api.WorkflowOperationInstance) MediaPackage(org.opencastproject.mediapackage.MediaPackage) DublinCoreCatalog(org.opencastproject.metadata.dublincore.DublinCoreCatalog)

Example 18 with EName

use of org.opencastproject.mediapackage.EName in project opencast by opencast.

the class DublinCoreCatalogUIAdapterTest method testStoreFields.

@Test
public void testStoreFields() throws Exception {
    String temporal = "temporal";
    String expectedTemporal = "start=2016-03-01T09:27:35Z; end=2016-03-01T11:43:12Z; scheme=W3C-DTF;";
    String expectedTitle = "New Value for Title";
    String expectedMissing = "New Value for Missing";
    ConfigurableEventDCCatalogUIAdapter configurationDublinCoreCatalogUIAdapter = new ConfigurableEventDCCatalogUIAdapter();
    configurationDublinCoreCatalogUIAdapter.setListProvidersService(listProvidersService);
    configurationDublinCoreCatalogUIAdapter.setWorkspace(workspace);
    configurationDublinCoreCatalogUIAdapter.updated(eventProperties);
    DublinCoreMetadataCollection dublinCoreMetadata = new DublinCoreMetadataCollection();
    MetadataField<String> titleField = MetadataField.createTextMetadataField(title, Opt.some(title), "New Label for Title", true, false, Opt.<Boolean>none(), Opt.<Map<String, String>>none(), Opt.<String>none(), Opt.<Integer>none(), Opt.<String>none());
    dublinCoreMetadata.addField(titleField, expectedTitle, listProvidersService);
    MetadataField<String> missingField = MetadataField.createTextMetadataField("missing", Opt.<String>none(), "The Missing's Label", false, false, Opt.<Boolean>none(), Opt.<Map<String, String>>none(), Opt.<String>none(), Opt.<Integer>none(), Opt.<String>none());
    dublinCoreMetadata.addField(missingField, expectedMissing, listProvidersService);
    MetadataField<String> durationField = MetadataField.createDurationMetadataField(temporal, Opt.some("duration"), label, true, true, Opt.<Integer>none(), Opt.<String>none());
    dublinCoreMetadata.addField(durationField, "02:15:37", listProvidersService);
    MetadataField<String> startDate = MetadataField.createTemporalStartDateMetadata(temporal, Opt.some("startDate"), label, true, true, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Opt.<Integer>none(), Opt.<String>none());
    dublinCoreMetadata.addField(startDate, "2016-03-01T09:27:35.000Z", listProvidersService);
    configurationDublinCoreCatalogUIAdapter.storeFields(mediapackage, dublinCoreMetadata);
    assertTrue(writtenCatalog.hasCaptured());
    DublinCoreCatalog updatedCatalog = DublinCores.read(writtenCatalog.getValue());
    assertEquals(expectedTitle, updatedCatalog.get(new EName(DublinCore.TERMS_NS_URI, "title")).get(0).getValue());
    assertEquals(expectedMissing, updatedCatalog.get(new EName(DublinCore.TERMS_NS_URI, "missing")).get(0).getValue());
    assertEquals(expectedTemporal, updatedCatalog.get(new EName(DublinCore.TERMS_NS_URI, temporal)).get(0).getValue());
}
Also used : EName(org.opencastproject.mediapackage.EName) ConfigurableEventDCCatalogUIAdapter(org.opencastproject.index.service.catalog.adapter.events.ConfigurableEventDCCatalogUIAdapter) DublinCoreCatalog(org.opencastproject.metadata.dublincore.DublinCoreCatalog) Test(org.junit.Test)

Example 19 with EName

use of org.opencastproject.mediapackage.EName in project opencast by opencast.

the class DublinCoreJsonFormat method read.

/**
 * Reads values from a JSON object into a new DublinCore catalog.
 */
@SuppressWarnings("unchecked")
@Nonnull
public static DublinCoreCatalog read(JSONObject json) {
    // Use a standard catalog to get the required namespace bindings in order to be able
    // to parse standard DublinCore encoding schemes.
    // See http://dublincore.org/documents/dc-xml-guidelines/, section 5.2, recommendation 7 for details.
    // TODO the JSON representation should serialize the contained bindings like XML to be able to
    // reconstruct a catalog from the serialization alone without the need to rely on bindings, registered
    // before.
    final DublinCoreCatalog dc = DublinCores.mkStandard();
    final Set<Entry<String, JSONObject>> namespaceEntrySet = json.entrySet();
    for (Entry<String, JSONObject> namespaceEntry : namespaceEntrySet) {
        // e.g. http://purl.org/dc/terms/
        final String namespace = namespaceEntry.getKey();
        final JSONObject namespaceObj = namespaceEntry.getValue();
        final Set<Entry<String, JSONArray>> entrySet = namespaceObj.entrySet();
        for (final Entry<String, JSONArray> entry : entrySet) {
            // e.g. title
            final String key = entry.getKey();
            final JSONArray values = entry.getValue();
            for (final Object valueObject : values) {
                final JSONObject value = (JSONObject) valueObject;
                // the value
                final String valueString = (String) value.get("value");
                // the language
                final String lang;
                {
                    final String l = (String) value.get("lang");
                    lang = l != null ? l : LANGUAGE_UNDEFINED;
                }
                // the encoding scheme
                final EName encodingScheme;
                {
                    final String s = (String) value.get("type");
                    encodingScheme = s != null ? dc.toEName(s) : null;
                }
                // add the new value to this DC document
                dc.add(new EName(namespace, key), valueString, lang, encodingScheme);
            }
        }
    }
    return dc;
}
Also used : EName(org.opencastproject.mediapackage.EName) Entry(java.util.Map.Entry) JSONObject(org.json.simple.JSONObject) JSONArray(org.json.simple.JSONArray) JSONObject(org.json.simple.JSONObject) Nonnull(javax.annotation.Nonnull)

Example 20 with EName

use of org.opencastproject.mediapackage.EName in project opencast by opencast.

the class DublinCoreJsonFormat method writeJsonObject.

/**
 * Converts the catalog to JSON object.
 *
 * @return JSON object
 */
@SuppressWarnings("unchecked")
@Nonnull
public static JSONObject writeJsonObject(DublinCoreCatalog dc) {
    // The top-level json object
    final JSONObject json = new JSONObject();
    // First collect all namespaces
    final SortedSet<String> namespaces = new TreeSet<String>();
    final Set<Entry<EName, List<DublinCoreValue>>> values = dc.getValues().entrySet();
    for (final Entry<EName, List<DublinCoreValue>> entry : values) {
        namespaces.add(entry.getKey().getNamespaceURI());
    }
    // Add a json object for each namespace
    for (String namespace : namespaces) {
        json.put(namespace, new JSONObject());
    }
    // Add the data into the appropriate array
    for (final Entry<EName, List<DublinCoreValue>> entry : values) {
        final EName ename = entry.getKey();
        final String namespace = ename.getNamespaceURI();
        final String localName = ename.getLocalName();
        final JSONObject namespaceObject = (JSONObject) json.get(namespace);
        final JSONArray localNameArray;
        {
            final JSONArray ns = (JSONArray) namespaceObject.get(localName);
            if (ns != null) {
                localNameArray = ns;
            } else {
                localNameArray = new JSONArray();
                namespaceObject.put(localName, localNameArray);
            }
        }
        for (DublinCoreValue value : entry.getValue()) {
            final String lang = value.getLanguage();
            final Opt<EName> encScheme = value.getEncodingScheme();
            final JSONObject v = new JSONObject();
            v.put("value", value.getValue());
            if (ne(DublinCore.LANGUAGE_UNDEFINED, lang)) {
                v.put("lang", lang);
            }
            for (EName e : encScheme) {
                v.put("type", dc.toQName(e));
            }
            localNameArray.add(v);
        }
    }
    return json;
}
Also used : EName(org.opencastproject.mediapackage.EName) Entry(java.util.Map.Entry) JSONObject(org.json.simple.JSONObject) TreeSet(java.util.TreeSet) JSONArray(org.json.simple.JSONArray) List(java.util.List) Nonnull(javax.annotation.Nonnull)

Aggregations

EName (org.opencastproject.mediapackage.EName)28 DublinCoreCatalog (org.opencastproject.metadata.dublincore.DublinCoreCatalog)17 HashMap (java.util.HashMap)8 DublinCoreValue (org.opencastproject.metadata.dublincore.DublinCoreValue)8 IOException (java.io.IOException)7 ArrayList (java.util.ArrayList)7 Catalog (org.opencastproject.mediapackage.Catalog)7 InputStream (java.io.InputStream)6 MediaPackage (org.opencastproject.mediapackage.MediaPackage)6 MediaPackageElementFlavor (org.opencastproject.mediapackage.MediaPackageElementFlavor)6 Test (org.junit.Test)5 List (java.util.List)4 IngestException (org.opencastproject.ingest.api.IngestException)4 ByteArrayInputStream (java.io.ByteArrayInputStream)3 URI (java.net.URI)3 Date (java.util.Date)3 Entry (java.util.Map.Entry)3 AccessControlList (org.opencastproject.security.api.AccessControlList)3 UnauthorizedException (org.opencastproject.security.api.UnauthorizedException)3 SeriesException (org.opencastproject.series.api.SeriesException)3