/**
* 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.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
* Default implementation of a <code>TextualBase</code> mpeg-7 element.
*/
public class TextualImpl implements Textual {
/** The default phonetic alphabet */
public static final String DEFAULT_PHONETIC_ALPHABET = "sampa";
/** The text */
protected String text = null;
/** The text */
protected String language = null;
/** The phonetic transcription */
protected String transcription = null;
/** The phonetic alphabet */
protected String alphabet = DEFAULT_PHONETIC_ALPHABET;
/**
* Creates a new textual base element.
*/
public TextualImpl() {
}
/**
* Creates a new textual base element.
*
* @param text
* the text
* @throws IllegalArgumentException
* if the text is <code>null</code> or empty
*/
public TextualImpl(String text) {
this(text, null);
}
/**
* Creates a new Textual element from a number of words.
*
* @param words
* the words
*/
public TextualImpl(String[] words) {
this(words, null);
}
/**
* Creates a new textual base element.
*
* @param text
* the text
* @throws IllegalArgumentException
* if the text is <code>null</code> or empty
*/
public TextualImpl(String text, String language) {
if (StringUtils.trimToNull(text) == null)
throw new IllegalArgumentException("The text cannot be empty");
this.text = text;
this.language = language;
}
/**
* Creates a new textual base element.
*
* @param words
* the words
* @throws IllegalArgumentException
* if the words is <code>null</code> or empty
*/
public TextualImpl(String[] words, String language) {
this(StringUtils.join(words, ' '), null);
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.Textual#getLanguage()
*/
@Override
public String getLanguage() {
return language;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.Textual#getPhoneticAlphabet()
*/
@Override
public String getPhoneticAlphabet() {
return alphabet;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.Textual#getPhoneticTranscription()
*/
@Override
public String getPhoneticTranscription() {
return transcription;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.Textual#setText(java.lang.String)
*/
@Override
public void setText(String text) {
if (StringUtils.trimToNull(text) == null) {
throw new IllegalArgumentException("The text cannot be empty");
} else {
this.text = text;
}
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.Textual#getText()
*/
@Override
public String getText() {
return text;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.Textual#setLanguage(java.lang.String)
*/
@Override
public void setLanguage(String language) {
this.language = language;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.metadata.mpeg7.Textual#setPhoneticTranscription(java.lang.String, java.lang.String)
*/
@Override
public void setPhoneticTranscription(String transcription, String alphabet) {
if (transcription != null && alphabet == null)
alphabet = DEFAULT_PHONETIC_ALPHABET;
this.transcription = transcription;
this.alphabet = alphabet;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.mediapackage.XmlElement#toXml(org.w3c.dom.Document)
*/
@Override
public Node toXml(Document document) {
Element node = document.createElement("Text");
if (language != null)
node.setAttribute("xml:lang", language);
if (transcription != null) {
node.setAttribute("phoneticTranscription", transcription);
node.setAttribute("phoneticAlphabet", alphabet);
}
node.appendChild(document.createTextNode(text));
return node;
}
}