/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you under the Educational
* Community License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License
* at:
*
* http://opensource.org/licenses/ecl2.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*/
package org.opencastproject.metadata.mpeg7;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* TODO: Comment me!
*/
public class MultimediaContentImpl<T extends MultimediaContentType> implements MultimediaContent<T> {
/** List of content elements */
protected Map<String, T> content = null;
/** The content type */
protected MultimediaContent.Type type = null;
/**
* Creates a new multimedia content container.
*
* @param type
* the content type
*/
public MultimediaContentImpl(MultimediaContent.Type type) {
this.content = new HashMap<String, T>();
this.type = type;
}
/**
* Adds a content element to the collection.
*
* @param c
* the content to add
*/
public void add(T c) {
if (c == null)
throw new IllegalArgumentException("Multimedia content must not be null");
if (content.containsKey(c.getId()))
throw new IllegalStateException("Duplicate content id detected: " + c.getId());
content.put(c.getId(), c);
}
/**
* Removes the content element from the collection.
*
* @param c
* the content to remove
*/
public T remove(T c) {
return content.remove(c.getId());
}
/**
* Removes the content element with the given identifier from the collection.
*
* @param id
* the content identifier
*/
public T remove(String id) {
return content.remove(id);
}
/**
* @see org.opencastproject.metadata.mpeg7.MultimediaContent#elements()
*/
public Iterator<T> elements() {
return content.values().iterator();
}
/**
* @see org.opencastproject.metadata.mpeg7.MultimediaContent#getElementById(java.lang.String)
*/
public T getElementById(String id) {
return content.get(id);
}
/**
* @see org.opencastproject.metadata.mpeg7.MultimediaContent#getType()
*/
public MultimediaContent.Type getType() {
return type;
}
/**
* @see org.opencastproject.metadata.mpeg7.MultimediaContent#size()
*/
public int size() {
return content.size();
}
/**
* @see org.opencastproject.mediapackage.XmlElement#toXml(Document)
*/
public Node toXml(Document document) {
Element node = document.createElement("MultimediaContent");
node.setAttribute("xsi:type", type.toString());
for (T contentElement : content.values()) {
node.appendChild(contentElement.toXml(document));
}
return node;
}
}