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()));
}
}
}
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;
}
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));
}
}
}
}
}
}
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();
}
}
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());
}
Aggregations