use of org.opencastproject.mediapackage.EName in project opencast by opencast.
the class DublinCoreCatalog method clone.
@Override
public Object clone() {
DublinCoreCatalog clone = new DublinCoreCatalog();
clone.setIdentifier(getIdentifier());
clone.setFlavor(getFlavor());
clone.setSize(getSize());
clone.setChecksum(getChecksum());
// safe, since XmlNamespaceContext is immutable
clone.bindings = bindings;
clone.rootTag = rootTag;
for (Map.Entry<EName, List<CatalogEntry>> entry : data.entrySet()) {
EName elmName = entry.getKey();
EName elmNameCopy = new EName(elmName.getNamespaceURI(), elmName.getLocalName());
List<CatalogEntry> elmsCopy = new ArrayList<CatalogEntry>();
for (CatalogEntry catalogEntry : entry.getValue()) {
elmsCopy.add(new CatalogEntry(catalogEntry.getEName(), catalogEntry.getValue(), catalogEntry.getAttributes()));
}
clone.data.put(elmNameCopy, elmsCopy);
}
return clone;
}
use of org.opencastproject.mediapackage.EName in project opencast by opencast.
the class DublinCoreUtil method calculateChecksum.
/**
* Calculate an MD5 checksum for a DublinCore catalog.
*/
public static Checksum calculateChecksum(DublinCoreCatalog dc) {
// Use 0 as a word separator. This is safe since none of the UTF-8 code points
// except \u0000 contains a null byte when converting to a byte array.
final byte[] sep = new byte[] { 0 };
final MessageDigest md = // consider all DublinCore properties
$(getPropertiesSorted(dc)).bind(new Fn<CatalogEntry, Stream<String>>() {
@Override
public Stream<String> apply(CatalogEntry entry) {
// get attributes, sorted and serialized as [name, value, name, value, ...]
final Stream<String> attributesSorted = $(entry.getAttributes().entrySet()).sort(new Comparator<Entry<EName, String>>() {
@Override
public int compare(Entry<EName, String> o1, Entry<EName, String> o2) {
return o1.getKey().compareTo(o2.getKey());
}
}).bind(new Fn<Entry<EName, String>, Stream<String>>() {
@Override
public Stream<String> apply(Entry<EName, String> attribute) {
return $(attribute.getKey().toString(), attribute.getValue());
}
});
return $(entry.getEName().toString(), entry.getValue()).append(attributesSorted);
}
}).append(Opt.nul(dc.getRootTag()).map(toString)).foldl(mkMd5MessageDigest(), new Fn2<MessageDigest, String, MessageDigest>() {
@Override
public MessageDigest apply(MessageDigest digest, String s) {
digest.update(s.getBytes(StandardCharsets.UTF_8));
// add separator byte (see definition above)
digest.update(sep);
return digest;
}
});
try {
return Checksum.create("md5", Checksum.convertToHex(md.digest()));
} catch (NoSuchAlgorithmException e) {
return chuck(e);
}
}
use of org.opencastproject.mediapackage.EName in project opencast by opencast.
the class DublinCoreUtil method getPropertiesSorted.
/**
* Return a sorted list of all catalog entries.
*/
public static List<CatalogEntry> getPropertiesSorted(DublinCoreCatalog dc) {
final List<EName> properties = new ArrayList<>(dc.getProperties());
Collections.sort(properties);
final List<CatalogEntry> entries = new ArrayList<>();
for (final EName property : properties) {
Collections.addAll(entries, dc.getValues(property));
}
return new ImmutableListWrapper<>(entries);
}
use of org.opencastproject.mediapackage.EName in project opencast by opencast.
the class DublinCoreTest method testNewInstance.
/**
* Test method for saving the catalog.
*/
@Test
public void testNewInstance() {
try {
// Read the sample catalog
FileInputStream in = new FileInputStream(catalogFile);
DublinCoreCatalog dcSample = DublinCores.read(in);
IOUtils.closeQuietly(in);
// Create a new catalog and fill it with a few fields
DublinCoreCatalog dcNew = DublinCores.mkOpencastEpisode().getCatalog();
dcTempFile1 = testFolder.newFile();
// Add the required fields
dcNew.add(PROPERTY_IDENTIFIER, dcSample.getFirst(PROPERTY_IDENTIFIER));
dcNew.add(PROPERTY_TITLE, dcSample.getFirst(PROPERTY_TITLE, DublinCore.LANGUAGE_UNDEFINED), DublinCore.LANGUAGE_UNDEFINED);
// Add an additional field
dcNew.add(PROPERTY_PUBLISHER, dcSample.getFirst(PROPERTY_PUBLISHER));
// Add a null-value field
try {
dcNew.add(PROPERTY_CONTRIBUTOR, (String) null);
fail();
} catch (IllegalArgumentException ignore) {
}
// Add a field with an encoding scheme
dcNew.add(PROPERTY_LICENSE, DublinCoreValue.mk("http://www.opencastproject.org/license", DublinCore.LANGUAGE_UNDEFINED, ENC_SCHEME_URI));
// Don't forget to bind the namespace...
dcNew.addBindings(XmlNamespaceContext.mk("octest", "http://www.opencastproject.org/octest"));
dcNew.add(OC_PROPERTY_PROMOTED, DublinCoreValue.mk("true", DublinCore.LANGUAGE_UNDEFINED, new EName("http://www.opencastproject.org/octest", "Boolean")));
try {
dcNew.add(OC_PROPERTY_PROMOTED, DublinCoreValue.mk("true", DublinCore.LANGUAGE_UNDEFINED, EName.mk("http://www.opencastproject.org/enc-scheme", "Boolean")));
fail();
} catch (NamespaceBindingException e) {
// Ok. This exception is expected to occur
}
// Store the catalog
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.METHOD, "xml");
FileWriter sw = new FileWriter(dcTempFile1);
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(dcNew.toXml());
trans.transform(source, result);
// Re-read the saved catalog and test for its content
DublinCoreCatalog dcNewFromDisk = DublinCores.read(dcTempFile1.toURI().toURL().openStream());
assertEquals(dcSample.getFirst(PROPERTY_IDENTIFIER), dcNewFromDisk.getFirst(PROPERTY_IDENTIFIER));
assertEquals(dcSample.getFirst(PROPERTY_TITLE, "en"), dcNewFromDisk.getFirst(PROPERTY_TITLE, "en"));
assertEquals(dcSample.getFirst(PROPERTY_PUBLISHER), dcNewFromDisk.getFirst(PROPERTY_PUBLISHER));
} catch (IOException e) {
fail("Error creating the catalog: " + e.getMessage());
} catch (ParserConfigurationException e) {
fail("Error creating a parser for the catalog: " + e.getMessage());
} catch (TransformerException e) {
fail("Error saving the catalog: " + e.getMessage());
}
}
use of org.opencastproject.mediapackage.EName in project opencast by opencast.
the class EmailDataTest method buildCatalogHash.
private HashMap<String, String> buildCatalogHash(DublinCoreCatalog dc) {
HashMap<String, String> catalogHash = new HashMap<String, String>();
for (EName ename : dc.getProperties()) {
String name = ename.getLocalName();
catalogHash.put(name, dc.getAsText(ename, DublinCore.LANGUAGE_ANY, EmailTemplateServiceImpl.DEFAULT_DELIMITER_FOR_MULTIPLE));
}
return catalogHash;
}
Aggregations