org.opencastproject.metadata.mpeg7.SpatioTemporalDecompositionImpl Maven / Gradle / Ivy
/*
* 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.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
/**
* Default implementation of a spatio temporal decomposition.
*/
public class SpatioTemporalDecompositionImpl implements SpatioTemporalDecomposition {
/** Flag to indicate whether the elements in this decomposition may exhibit gaps */
protected boolean hasGap = true;
/** Flag to indicate whether the elements in this decomposition may overlap */
protected boolean hasOverlap = false;
/** The list of videotext elements */
protected List videoTexts = null;
/**
* Creates a new spatio temporal decomposition.
*
* @param gap
* true
if there are gaps in the decomposition
* @param overlap
* true
if there are overlapping elements
*/
public SpatioTemporalDecompositionImpl(boolean gap, boolean overlap) {
this.hasGap = gap;
this.hasOverlap = overlap;
this.videoTexts = new ArrayList();
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.SpatioTemporalDecomposition#hasGap()
*/
@Override
public boolean hasGap() {
return hasGap;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.SpatioTemporalDecomposition#isOverlapping()
*/
@Override
public boolean isOverlapping() {
return hasOverlap;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.SpatioTemporalDecomposition#setGap(boolean)
*/
@Override
public void setGap(boolean hasGap) {
this.hasGap = hasGap;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.SpatioTemporalDecomposition#setOverlapping(boolean)
*/
@Override
public void setOverlapping(boolean isOverlapping) {
this.hasOverlap = isOverlapping;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.SpatioTemporalDecomposition#addVideoText(org.opencastproject.metadata.mpeg7.Textual,
* java.awt.Rectangle, org.opencastproject.metadata.mpeg7.MediaTime)
*/
public VideoText addVideoText(Textual text, Rectangle boundary, MediaTime time) {
VideoText videoText = new VideoTextImpl("videotext-" + videoTexts.size(), text, boundary, time);
videoTexts.add(videoText);
return videoText;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.SpatioTemporalDecomposition#addVideoText(org.opencastproject.metadata.mpeg7.VideoText)
*/
@Override
public void addVideoText(VideoText videoText) {
videoTexts.add(videoText);
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.SpatioTemporalDecomposition#getVideoText()
*/
@Override
public VideoText[] getVideoText() {
return videoTexts.toArray(new VideoText[videoTexts.size()]);
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.SpatioTemporalDecomposition#getVideoText(java.lang.String)
*/
@Override
public VideoText getVideoText(String id) {
for (VideoText videoText : videoTexts) {
if (id.equals(videoText.getIdentifier()))
return videoText;
}
return null;
}
/**
* @see org.opencastproject.mediapackage.XmlElement#toXml(org.w3c.dom.Document)
*/
public Node toXml(Document document) {
Element node = document.createElement("SpatioTemporalDecomposition");
node.setAttribute("gap", (hasGap ? "true" : "false"));
node.setAttribute("overlap", (hasOverlap ? "true" : "false"));
for (VideoText videoText : videoTexts) {
node.appendChild(videoText.toXml(document));
}
return node;
}
}