Search in sources :

Example 6 with EName

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

the class DublinCoreMetadataUtil method updateDublincoreCatalog.

/**
 * Update a {@link DublinCoreCatalog} with the values contained within a {@link AbstractMetadataCollection}
 *
 * @param dc
 *          The {@link DublinCoreCatalog} to update the values within.
 * @param metadata
 *          The {@link AbstractMetadataCollection} data definitions and values to update the catalog with.
 */
public static void updateDublincoreCatalog(DublinCoreCatalog dc, MetadataCollection metadata) {
    for (MetadataField<?> field : metadata.getOutputFields().values()) {
        if (field.isUpdated() && field.getValue().isSome()) {
            final String namespace = field.getNamespace().getOr(DublinCore.TERMS_NS_URI);
            final EName ename = new EName(namespace, field.getInputID());
            if (field.getType() == MetadataField.Type.START_DATE) {
                setStartDate(dc, field, ename);
            } else if (field.getType() == MetadataField.Type.DURATION) {
                setDuration(dc, field, ename);
            } else if (field.getType() == Type.DATE) {
                // DC created should only be modified by changing the start date, see MH-12250
                if (!DublinCore.PROPERTY_CREATED.equals(ename))
                    setDate(dc, field, ename);
            } else if (field.getType() == MetadataField.Type.MIXED_TEXT || field.getType() == Type.ITERABLE_TEXT) {
                setIterableString(dc, field, ename);
            } else {
                if (field.isRequired() && StringUtils.isBlank(field.getValue().get().toString()))
                    throw new IllegalArgumentException(String.format("The event metadata field with id '%s' and the metadata type '%s' is required and can not be empty!.", field.getInputID(), field.getType()));
                dc.set(ename, field.getValue().get().toString());
            }
        } else if (field.getValue().isNone() && field.isRequired()) {
            throw new IllegalArgumentException(String.format("The event metadata field with id '%s' and the metadata type '%s' is required and can not be empty!.", field.getInputID(), field.getType()));
        }
    }
}
Also used : EName(org.opencastproject.mediapackage.EName)

Example 7 with EName

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

the class ConfigurableEventDCCatalogUIAdapter method storeFields.

@Override
public Catalog storeFields(MediaPackage mediaPackage, MetadataCollection abstractMetadata) {
    Catalog[] catalogs = mediaPackage.getCatalogs(getFlavor());
    final Catalog catalog;
    final DublinCoreCatalog dc;
    final String filename;
    if (catalogs.length == 0) {
        catalog = (Catalog) MediaPackageElementBuilderFactory.newInstance().newElementBuilder().newElement(org.opencastproject.mediapackage.MediaPackageElement.Type.Catalog, getFlavor());
        catalog.setIdentifier(UUID.randomUUID().toString());
        mediaPackage.add(catalog);
        dc = DublinCores.mkSimple();
        dc.addBindings(config.getXmlNamespaceContext());
        dc.setRootTag(new EName(config.getCatalogXmlRootNamespace(), config.getCatalogXmlRootElementName()));
        filename = "dublincore.xml";
    } else {
        catalog = catalogs[0];
        dc = DublinCoreUtil.loadDublinCore(getWorkspace(), catalog);
        dc.addBindings(config.getXmlNamespaceContext());
        filename = FilenameUtils.getName(catalog.getURI().toString());
    }
    DublinCoreMetadataUtil.updateDublincoreCatalog(dc, abstractMetadata);
    URI uri;
    InputStream inputStream = null;
    try {
        inputStream = IOUtils.toInputStream(dc.toXmlString(), "UTF-8");
        uri = getWorkspace().put(mediaPackage.getIdentifier().toString(), catalog.getIdentifier(), filename, inputStream);
        catalog.setURI(uri);
        // setting the URI to a new source so the checksum will most like be invalid
        catalog.setChecksum(null);
    } catch (IOException e) {
        logger.error("Unable to store catalog {} metadata to workspace: {}", catalog, ExceptionUtils.getStackTrace(e));
    } finally {
        IoSupport.closeQuietly(inputStream);
    }
    return catalog;
}
Also used : EName(org.opencastproject.mediapackage.EName) InputStream(java.io.InputStream) IOException(java.io.IOException) DublinCoreCatalog(org.opencastproject.metadata.dublincore.DublinCoreCatalog) URI(java.net.URI) Catalog(org.opencastproject.mediapackage.Catalog) DublinCoreCatalog(org.opencastproject.metadata.dublincore.DublinCoreCatalog)

Example 8 with EName

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

the class ConfigurableSeriesDCCatalogUIAdapter method getFieldValuesFromDublinCoreCatalog.

private void getFieldValuesFromDublinCoreCatalog(DublinCoreMetadataCollection dublinCoreMetadata, Set<String> emptyFields, DublinCoreCatalog dc) {
    for (EName propertyKey : dc.getValues().keySet()) {
        for (String metdataFieldKey : dublinCoreProperties.keySet()) {
            MetadataField<?> metadataField = dublinCoreProperties.get(metdataFieldKey);
            String namespace = DublinCore.TERMS_NS_URI;
            if (metadataField.getNamespace().isSome()) {
                namespace = metadataField.getNamespace().get();
            }
            if (namespace.equalsIgnoreCase(propertyKey.getNamespaceURI()) && metadataField.getInputID().equalsIgnoreCase(propertyKey.getLocalName())) {
                for (DublinCoreValue dublinCoreValue : dc.get(propertyKey)) {
                    emptyFields.remove(metdataFieldKey);
                    try {
                        dublinCoreMetadata.addField(metadataField, dublinCoreValue.getValue(), listProvidersService);
                    } catch (IllegalArgumentException e) {
                        logger.error("Skipping metadata field '{}' because of error: {}", metadataField.getInputID(), ExceptionUtils.getStackTrace(e));
                    }
                }
            }
        }
    }
}
Also used : EName(org.opencastproject.mediapackage.EName) DublinCoreValue(org.opencastproject.metadata.dublincore.DublinCoreValue)

Example 9 with EName

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

the class ConfigurableSeriesDCCatalogUIAdapter method loadDublinCoreCatalog.

protected Opt<DublinCoreCatalog> loadDublinCoreCatalog(String seriesId) {
    try {
        Opt<byte[]> seriesElementData = getSeriesService().getSeriesElementData(requireNonNull(seriesId), flavor.getType());
        if (seriesElementData.isSome()) {
            final DublinCoreCatalog dc = DublinCoreByteFormat.read(seriesElementData.get());
            // Make sure that the catalog has its flavor set.
            // It may happen, when updating a system, that already saved catalogs
            // do not have a flavor.
            dc.setFlavor(flavor);
            dc.addBindings(config.getXmlNamespaceContext());
            return Opt.some(dc);
        } else {
            final DublinCoreCatalog dc = DublinCores.mkStandard();
            dc.addBindings(config.getXmlNamespaceContext());
            dc.setRootTag(new EName(config.getCatalogXmlRootNamespace(), config.getCatalogXmlRootElementName()));
            dc.setFlavor(flavor);
            return Opt.some(dc);
        }
    } catch (SeriesException e) {
        logger.error("Error while loading DublinCore catalog of series '{}': {}", seriesId, ExceptionUtils.getStackTrace(e));
        return Opt.none();
    }
}
Also used : EName(org.opencastproject.mediapackage.EName) SeriesException(org.opencastproject.series.api.SeriesException) DublinCoreCatalog(org.opencastproject.metadata.dublincore.DublinCoreCatalog)

Example 10 with EName

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

the class DublinCoreXmlFormatTest method readWithEmptyAndMergeTest.

@Test
public void readWithEmptyAndMergeTest() throws Exception {
    String emtpy = "";
    String delimiter = "|";
    String irishTitle = "Talamh agus Fásra: Príomh-imreoirí ar an Radharc Aeráide";
    String irishLang = "ga";
    String germanLang = "de";
    String fooId = "197011";
    EName eNamepropertyFooId = new EName("http://foo.org/metadata", "id");
    boolean marshalEmpty = true;
    DublinCoreCatalog catalogWithEmpty = DublinCoreXmlFormat.read(IoSupport.classPathResourceAsFile("/dublincore.xml").get(), marshalEmpty);
    DublinCoreCatalog catalogNoEmpty = DublinCoreXmlFormat.read(IoSupport.classPathResourceAsFile("/dublincore.xml").get(), !marshalEmpty);
    // Loading with empty and not empty
    assertEquals(emtpy, catalogWithEmpty.getFirst(DublinCore.PROPERTY_SPATIAL));
    assertNull(catalogNoEmpty.getFirst(DublinCore.PROPERTY_SPATIAL));
    DublinCoreCatalog mergedEmptyNoEmpty = DublinCoreXmlFormat.merge(catalogWithEmpty, catalogNoEmpty);
    // Extra empty values have no effect on merge, original is not affected
    assertEquals(catalogNoEmpty, mergedEmptyNoEmpty);
    assertEquals(irishTitle, catalogNoEmpty.getAsText(DublinCore.PROPERTY_TITLE, irishLang, delimiter));
    assertNull(catalogNoEmpty.getFirst(DublinCore.PROPERTY_SPATIAL));
    DublinCoreCatalog catalogToMerge = DublinCoreXmlFormat.read(IoSupport.classPathResourceAsFile("/dublincore-extended.xml").get(), marshalEmpty);
    assertEquals("lab2", catalogToMerge.getFirst(DublinCore.PROPERTY_SPATIAL));
    DublinCoreCatalog mergedToMergeNoEmpty = DublinCoreXmlFormat.merge(catalogToMerge, catalogNoEmpty);
    // Merging catalog with different values removes empty values and adds or updates non-empty values
    assertEquals("lab2", mergedToMergeNoEmpty.getFirst(DublinCore.PROPERTY_SPATIAL));
    assertNull(mergedToMergeNoEmpty.getAsText(DublinCore.PROPERTY_TITLE, irishLang, delimiter));
    assertNotNull(mergedToMergeNoEmpty.getAsText(DublinCore.PROPERTY_TITLE, germanLang, delimiter));
    assertTrue("Property foo:id should be in the list of known properties.", mergedToMergeNoEmpty.getProperties().contains(eNamepropertyFooId));
    assertEquals(fooId, mergedToMergeNoEmpty.getFirstVal(eNamepropertyFooId).getValue());
}
Also used : EName(org.opencastproject.mediapackage.EName) Test(org.junit.Test)

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