+ xmlpp::Document doc;
+ xmlpp::Element* pkl;
+ if (_standard == INTEROP) {
+ pkl = doc.create_root_node("PackingList", pkl_interop_ns);
+ } else {
+ pkl = doc.create_root_node("PackingList", pkl_smpte_ns);
+ }
+
+ pkl->add_child("Id")->add_child_text ("urn:uuid:" + _id);
+ if (_annotation_text) {
+ pkl->add_child("AnnotationText")->add_child_text (*_annotation_text);
+ }
+ pkl->add_child("IssueDate")->add_child_text (_issue_date);
+ pkl->add_child("Issuer")->add_child_text (_issuer);
+ pkl->add_child("Creator")->add_child_text (_creator);
+
+ xmlpp::Element* asset_list = pkl->add_child("AssetList");
+ BOOST_FOREACH (shared_ptr<Asset> i, _asset_list) {
+ xmlpp::Element* asset = asset_list->add_child("Asset");
+ asset->add_child("Id")->add_child_text ("urn:uuid:" + i->id());
+ if (i->annotation_text) {
+ asset->add_child("AnnotationText")->add_child_text (*i->annotation_text);
+ }
+ asset->add_child("Hash")->add_child_text (i->hash);
+ asset->add_child("Size")->add_child_text (raw_convert<string> (i->size));
+ asset->add_child("Type")->add_child_text (i->type);
+ }
+
+ if (signer) {
+ signer->sign (pkl, _standard);
+ }
+
+ doc.write_to_file (file.string(), "UTF-8");
+}
+
+string
+PKL::hash (string id) const
+{
+ BOOST_FOREACH (shared_ptr<Asset> i, _asset_list) {
+ if (i->id() == id) {
+ return i->hash;