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