/*
* 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) 2002-2005 by Mathias Lux (mathias@juggle.at)
* http://www.juggle.at, http://caliph-emir.sourceforge.net
*/
package at.lux.fotoannotation.mpeg7;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import java.util.Iterator;
public class Mpeg7ImageDescription {
private Element descMetadata, mediaFormat, mediaQuality, mediaInstance, thumbNails;
private Element creationInformation, visualDescriptor, textAnnotation, semantics;
private Element mediaProfile;
private Document doc;
private Element root;
private Namespace mpeg7, xsi;
public Mpeg7ImageDescription(Element creationInformation, Element descMetadata, Element mediaFormat,
Element mediaInstance, Element mediaQuality, Element thumbNail, Element semantics, Element textAnnotation,
Element visualDescriptor) {
this.creationInformation = creationInformation;
this.descMetadata = descMetadata;
this.mediaFormat = mediaFormat;
this.mediaInstance = mediaInstance;
this.mediaProfile = null;
this.thumbNails = thumbNail;
this.mediaQuality = mediaQuality;
this.semantics = semantics;
this.textAnnotation = textAnnotation;
this.visualDescriptor = visualDescriptor;
}
public Mpeg7ImageDescription(Element creationInformation, Element descMetadata, Element mediaProfile,
Element semantics, Element textAnnotation, Element visualDescriptor) {
this.creationInformation = creationInformation;
this.descMetadata = descMetadata;
this.mediaFormat = null;
this.mediaInstance = null;
this.mediaProfile = mediaProfile;
this.mediaQuality = null;
this.thumbNails = null;
this.semantics = semantics;
this.textAnnotation = textAnnotation;
this.visualDescriptor = visualDescriptor;
}
public Mpeg7ImageDescription(Element descMetadata, Element mediaInstance,
Element mediaQuality, Element mediaFormat, Element textAnnotation) {
this.creationInformation = null;
this.descMetadata = descMetadata;
this.mediaFormat = mediaFormat;
this.mediaInstance = mediaInstance;
this.mediaProfile = null;
this.mediaQuality = mediaQuality;
this.semantics = null;
this.thumbNails = null;
this.textAnnotation = textAnnotation;
this.visualDescriptor = null;
}
private void init() {
mpeg7 = Namespace.getNamespace("", "urn:mpeg:mpeg7:schema:2001");
xsi = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
root = new Element("Mpeg7", mpeg7);
root.addNamespaceDeclaration(mpeg7);
root.addNamespaceDeclaration(xsi);
doc = new Document(root);
// DescriptionMetadata
if (descMetadata != null)
root.addContent(descMetadata);
// setting up structure to Description/MultimediaContent/Image
Element desc = new Element("Description", mpeg7);
root.addContent(desc);
desc.setAttribute("type", "ContentEntityType", xsi);
Element mumeContent = new Element("MultimediaContent", mpeg7);
mumeContent.setAttribute("type", "ImageType", xsi);
Element img = new Element("Image", mpeg7);
desc.addContent(mumeContent.addContent(img));
// Profile
if (mediaProfile != null) {
img.addContent(new Element("MediaInformation", mpeg7).addContent(mediaProfile));
} else {
Element profile = new Element("MediaProfile", mpeg7);
profile.setAttribute("master", "true");
img.addContent(new Element("MediaInformation", mpeg7).addContent(profile));
if (mediaFormat != null) profile.addContent(mediaFormat);
if (mediaQuality != null) profile.addContent(mediaQuality);
if (mediaInstance != null) profile.addContent(mediaInstance);
}
// Falls ein Thumbnail existiert kommt er als 2. Profil rein, das erste ist der master :)
if (thumbNails != null) {
img.getChild("MediaInformation", mpeg7).addContent(thumbNails);
}
// CreationInformatio
if (creationInformation != null) {
img.addContent(creationInformation);
}
// TextAnnotation
if (textAnnotation != null) {
img.addContent(textAnnotation);
}
// Semantic
if (semantics != null) {
img.addContent(semantics);
}
// Visuals
if (visualDescriptor != null) {
if (visualDescriptor.getName().equals("VisualDescriptor"))
img.addContent(visualDescriptor);
else {
java.util.List _list = visualDescriptor.getChildren();
for (Iterator i = _list.iterator(); i.hasNext();) {
Element _tmpElem = (Element) i.next();
img.addContent((Element) _tmpElem.clone());
}
}
}
}
/**
* returns the full MPEG-7 Description
*
* @return MPEG-7 Description
*/
public Document createDocument() {
init();
return doc;
}
}