/*
* This file is part of Caliph & Emir.
*
* Caliph & Emir is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Caliph & Emir is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Caliph & Emir; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Copyright statement:
* --------------------
* (c) 2005 by Werner Klieber (werner@klieber.info)
* http://caliph-emir.sourceforge.net
*/
package at.wklieber.mpeg7;
import at.wklieber.gui.data.IComponentData;
import at.wklieber.tools.Console;
import at.wklieber.tools.Mpeg7DateFormat;
import at.wklieber.tools.XmlTools;
import org.jdom.Document;
import org.jdom.Element;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
public class DescriptionMetadataDs extends Mpeg7Template
implements DsInterface {
private static Console console = Console.getReference();
private static java.util.logging.Logger cat = java.util.logging.Logger.getLogger(DescriptionMetadataDs.class.getName());
private static String PATH_DESCRIPTION = "Comment/FreeTextAnnotation";
private static String PATH_CREATOR_GIVEN_NAME = "Creator/Agent/Name/GivenName";
private static String PATH_CREATOR_FAMILY_NAME = "Creator/Agent/Name/FamilyName";
private static String PATH_CREATION_TIME = "CreationTime";
private static String PATH_CREATION_PLACE = "CreationLocation";
private static String PATH_CREATION_TOOL = "Instrument/Tool/Name";
public DescriptionMetadataDs() {
super();
// offset in a complete mpeg7 document where this descriptor occusrs
// is used to extract data and write a valid mpeg7 file
// format no starting and leading separator, e.g. "Mpeg7/content"
OFFSET_PATH = ROOT_TAG;
// the name of the Desctipor
// this is the root tag name of this dom document
// format no starting and leading separator, e.g. "DescriptionMetadata"
DESCRIPTOR_TAG = "DescriptionMetadata";
}
/**
* return the path where the description data begins
*/
/* public Element getOffset() {
return simpleXpath(OFFSET_PATH + "/" + DESCRIPTOR_TAG, mpeg7Namespace, new Element("undefined"), false);
}*/
/**
* return the element that can be added to the root tag (Mpeg7)
*/
public Element getOffsetForRoot() {
String offset = ROOT_TAG + "/" + DESCRIPTOR_TAG;
return simpleXpath(offset, mpeg7Namespace, new Element("Undefined"), false);
}
public void setDefaultValues() {
//super.setDefaultValues();
}
// this methode creats a new document tree - tructure
public void createTemplateDocument() {
super.createTemplateDocument();
//console.line();
Date currentDate = new Date(System.currentTimeMillis());
Element defaultValue = null;
//console.line();
//logger.fine("BEFORE: " + this.toString());
//setDomAttribute(OFFSET_PATH, "type", "CreationDescriptionType", xsiNamespace);
//logger.fine("AFTER : " + this.toString());
//console.line();
//Element data = new Element("DescriptionMetadata", mpeg7Namespace);
//data.addNamespaceDeclaration(mpeg7Namespace);
//document.getRootElement().addContent(data);
//simpleXpath(DESCRIPTOR_TAG, null, true);
String offset = OFFSET_PATH + "/" + DESCRIPTOR_TAG + "/";
setDomValue(offset + "Version", mpeg7Namespace, "1.0", "Version of the mpeg 7 schema this file applies to");
setDomValue(offset + "LastUpdate", mpeg7Namespace, Mpeg7DateFormat.date2Timepoint(currentDate), "Date of the last change of this document");
//logger.fine("BEFORE2: " + this.toString());
} // end method
public void setData(String description, String creatorGivenName, String creatorFamilyName,
Date creationTime, String creationPlace, String toolName) {
String offset = OFFSET_PATH + "/" + DESCRIPTOR_TAG + "/";
setDomValue(offset + PATH_DESCRIPTION, mpeg7Namespace, description, "");
setDomAttribute(offset + "Creator/Role", mpeg7Namespace, "href", "creatorCS");
setDomValue(offset + "Creator/Role/Name", mpeg7Namespace, "Creator", "");
setDomAttribute(offset + "Creator/Agent", mpeg7Namespace, "type", "PersonType", xsiNamespace);
setDomValue(offset + PATH_CREATOR_GIVEN_NAME, mpeg7Namespace, creatorGivenName, "");
setDomValue(offset + PATH_CREATOR_FAMILY_NAME, mpeg7Namespace, creatorFamilyName, "");
setDomValue(offset + PATH_CREATION_PLACE, mpeg7Namespace, creationPlace, "");
setDomValue(offset + PATH_CREATION_TIME, mpeg7Namespace, Mpeg7DateFormat.date2Timepoint(creationTime), "");
setDomValue(offset + PATH_CREATION_TOOL, mpeg7Namespace, toolName, "");
//logger.fine("BEFORE3: " + this.toString());
}
public String getCreationDescription() {
return getDomValue(OFFSET_PATH + "/" + DESCRIPTOR_TAG + "/" + PATH_DESCRIPTION, "");
}
public String getCreatorGivenName() {
return getDomValue(OFFSET_PATH + "/" + DESCRIPTOR_TAG + "/" + PATH_CREATOR_GIVEN_NAME, "");
}
public String getCreatorFamilyName() {
return getDomValue(OFFSET_PATH + "/" + DESCRIPTOR_TAG + "/" + PATH_CREATOR_FAMILY_NAME, "");
}
public String getCreationTime() {
return getDomValue(OFFSET_PATH + "/" + DESCRIPTOR_TAG + "/" + PATH_CREATION_TIME, "");
}
public String getCreationPlace() {
return getDomValue(OFFSET_PATH + "/" + DESCRIPTOR_TAG + "/" + PATH_CREATION_PLACE, "");
}
public String getCreationTool() {
return getDomValue(OFFSET_PATH + "/" + DESCRIPTOR_TAG + "/" + PATH_CREATION_TOOL, "");
}
/**
* extract the Metadata description from a complete mpeg 7 document
*/
public List<IComponentData> extractFromMpeg7(Document mpeg7Document) {
List returnValue = new Vector();
this.document = mpeg7Document;
Element rootElement = document.getRootElement();
String path = "//" + DESCRIPTOR_TAG;
List elementList = XmlTools.xpathQuery(document, path);
String offset = DESCRIPTOR_TAG + "/";
for (Iterator it = elementList.iterator(); it.hasNext();) {
Element elem = (Element) it.next();
// extract all needed data for setData
String description = XmlTools.simpleXpath(elem, offset + PATH_DESCRIPTION, mpeg7Namespace, new Element("dummy"), false).getText();
String creatorGivenName = XmlTools.simpleXpath(elem, offset + PATH_CREATOR_GIVEN_NAME, mpeg7Namespace, new Element("dummy"), false).getText();
String creatorFamilyName = XmlTools.simpleXpath(elem, offset + PATH_CREATOR_FAMILY_NAME, mpeg7Namespace, new Element("dummy"), false).getText();
String creationTime = XmlTools.simpleXpath(elem, offset + PATH_CREATION_TIME, mpeg7Namespace, new Element("dummy"), false).getText();
String creationPlace = XmlTools.simpleXpath(elem, offset + PATH_CREATION_PLACE, mpeg7Namespace, new Element("dummy"), false).getText();
String toolName = XmlTools.simpleXpath(elem, offset + PATH_CREATION_TOOL, mpeg7Namespace, new Element("dummy"), false).getText();
// generate a new Desciptor
DescriptionMetadataDs descr = new DescriptionMetadataDs();
descr.createTemplateDocument();
descr.setData(description, creatorGivenName, creatorFamilyName,
Mpeg7DateFormat.format(creationTime, null), creationPlace, toolName);
returnValue.add(descr);
//logger.fine("DS read: " + descr.toString() + ", " + descr.getCreationDescription() + ", e: " + description);
}
return returnValue;
} // end method
} // end class