jm.util.XMLParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jmusic Show documentation
Show all versions of jmusic Show documentation
JMusic - Java Music Library
The newest version!
/*
* XMLParser.java 0.2 30th June 2002
*
* Copyright (C) 2002 Adam Kirby
*
*
*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package jm.util;
import jm.music.data.Note;
import jm.music.data.Part;
import jm.music.data.Phrase;
import jm.music.data.Score;
import java.util.Enumeration;
import java.util.Vector;
/**
* @author Adam Kirby
* @version 0.2, 30th June 2002
*/
class XMLParser {
private static final XMLStyle DEFAULT_XML_STYLE =
new StandardXMLStyle();
private XMLParser() {
}
public static String scoreToXMLString(final Score score) {
return DEFAULT_XML_STYLE.initialXMLDeclaration()
+ XMLParser.scoreToXMLString(score, DEFAULT_XML_STYLE);
}
private static String scoreToXMLString(
final Score score,
final XMLStyle xmlStyle) {
StringBuffer buffer = new StringBuffer();
buffer.append(
xmlStyle.getLeftAngleBracket() + xmlStyle.getScoreTagName());
if (!score.getTitle().equals(Score.DEFAULT_TITLE)) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getTitleAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
);
String title = score.getTitle();
for (int i = 0; i < title.length(); i++) {
char character = title.charAt(i);
if (character == ' ') {
buffer.append(xmlStyle.getSpace());
} else if (character == '/') {
buffer.append(xmlStyle.getSlash());
} else if (character == '&') {
buffer.append(xmlStyle.getAmpersandInString());
} else if (character == '<') {
buffer.append(xmlStyle.getLeftAngleBracketInString());
} else if (character == '>') {
buffer.append(xmlStyle.getRightAngleBracketInString());
} else if (character == '"') {
buffer.append(xmlStyle.getDoubleQuoteInString());
} else if (character == '#') {
buffer.append(xmlStyle.getHash());
} else if (character == '/') {
buffer.append(xmlStyle.getSlash());
} else if (character == '?') {
buffer.append(xmlStyle.getQuestionMark());
} else if (character == ';') {
buffer.append(xmlStyle.getSemicolon());
} else {
buffer.append(character);
}
}
buffer.append(xmlStyle.getDoubleQuote());
}
if (score.getTempo() != Score.DEFAULT_TEMPO) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getTempoAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(score.getTempo(), 2)
: Double.toString(score.getTempo()))
+ xmlStyle.getDoubleQuote()
);
}
if (score.getKeySignature() != Score.DEFAULT_KEY_SIGNATURE) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getKeySignatureAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(score.getKeySignature())
+ xmlStyle.getDoubleQuote()
);
}
if (score.getKeyQuality() != Score.DEFAULT_KEY_QUALITY) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getKeyQualityAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(score.getKeyQuality())
+ xmlStyle.getDoubleQuote()
);
}
if (score.getNumerator() != Score.DEFAULT_NUMERATOR) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getNumeratorAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(score.getNumerator())
+ xmlStyle.getDoubleQuote()
);
}
if (score.getDenominator() != Score.DEFAULT_DENOMINATOR) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getDenominatorAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(score.getDenominator())
+ xmlStyle.getDoubleQuote()
);
}
int size = score.size();
if (size == 0) {
buffer.append(
xmlStyle.getSlash() + xmlStyle.getRightAngleBracket());
} else {
buffer.append(xmlStyle.getRightAngleBracket());
for (int i = 0; i < score.size(); i++) {
buffer.append(partToXMLString(score.getPart(i), xmlStyle));
}
buffer.append(
xmlStyle.getLeftAngleBracket()
+ xmlStyle.getSlash()
+ xmlStyle.getScoreTagName()
+ xmlStyle.getRightAngleBracket()
);
}
return buffer.toString();
}
public static String partToXMLString(final Part part) {
return DEFAULT_XML_STYLE.initialXMLDeclaration()
+ XMLParser.partToXMLString(part, DEFAULT_XML_STYLE);
}
private static String partToXMLString(
final Part part,
final XMLStyle xmlStyle) {
StringBuffer buffer = new StringBuffer();
buffer.append(
xmlStyle.getLeftAngleBracket() + xmlStyle.getPartTagName());
if (!part.getTitle().equals(Part.DEFAULT_TITLE)) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getTitleAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
);
String title = part.getTitle();
for (int i = 0; i < title.length(); i++) {
char character = title.charAt(i);
if (character == ' ') {
buffer.append(xmlStyle.getSpace());
} else if (character == '/') {
buffer.append(xmlStyle.getSlash());
} else if (character == '&') {
buffer.append(xmlStyle.getAmpersandInString());
} else if (character == '<') {
buffer.append(xmlStyle.getLeftAngleBracketInString());
} else if (character == '>') {
buffer.append(xmlStyle.getRightAngleBracketInString());
} else if (character == '"') {
buffer.append(xmlStyle.getDoubleQuoteInString());
} else if (character == '#') {
buffer.append(xmlStyle.getHash());
} else if (character == '?') {
buffer.append(xmlStyle.getQuestionMark());
} else if (character == ';') {
buffer.append(xmlStyle.getSemicolon());
} else {
buffer.append(character);
}
}
buffer.append(xmlStyle.getDoubleQuote());
}
if (part.getChannel() != Part.DEFAULT_CHANNEL) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getChannelAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(part.getChannel())
+ xmlStyle.getDoubleQuote()
);
}
if (part.getInstrument() != Part.DEFAULT_INSTRUMENT) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getInstrumentAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(part.getInstrument())
+ xmlStyle.getDoubleQuote()
);
}
if (part.getTempo() != Part.DEFAULT_TEMPO) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getTempoAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(part.getTempo(), 2)
: Double.toString(part.getTempo()))
+ xmlStyle.getDoubleQuote()
);
}
if (part.getKeySignature() != Part.DEFAULT_KEY_SIGNATURE) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getKeySignatureAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(part.getKeySignature())
+ xmlStyle.getDoubleQuote()
);
}
if (part.getKeyQuality() != Part.DEFAULT_KEY_QUALITY) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getKeyQualityAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(part.getKeyQuality())
+ xmlStyle.getDoubleQuote()
);
}
if (part.getNumerator() != Part.DEFAULT_NUMERATOR) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getNumeratorAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(part.getNumerator())
+ xmlStyle.getDoubleQuote()
);
}
if (part.getDenominator() != Part.DEFAULT_DENOMINATOR) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getDenominatorAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(part.getDenominator())
+ xmlStyle.getDoubleQuote()
);
}
if (part.getPan() != Part.DEFAULT_PAN) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getPanAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(part.getPan(), 2)
: Double.toString(part.getPan()))
+ xmlStyle.getDoubleQuote()
);
}
int size = part.size();
if (size == 0) {
buffer.append(
xmlStyle.getSlash() + xmlStyle.getRightAngleBracket());
} else {
buffer.append(xmlStyle.getRightAngleBracket());
for (int i = 0; i < part.size(); i++) {
buffer.append(phraseToXMLString(part.getPhrase(i), xmlStyle));
}
buffer.append(
xmlStyle.getLeftAngleBracket() + xmlStyle.getSlash()
+ xmlStyle.getPartTagName()
+ xmlStyle.getRightAngleBracket()
);
}
return buffer.toString();
}
public static String phraseToXMLString(final Phrase phrase) {
return DEFAULT_XML_STYLE.initialXMLDeclaration()
+ XMLParser.phraseToXMLString(phrase, DEFAULT_XML_STYLE);
}
private static String phraseToXMLString(
final Phrase phrase,
final XMLStyle xmlStyle) {
StringBuffer buffer = new StringBuffer();
buffer.append(
xmlStyle.getLeftAngleBracket() + xmlStyle.getPhraseTagName());
if (!phrase.getTitle().equals(Phrase.DEFAULT_TITLE)) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getTitleAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
);
String title = phrase.getTitle();
for (int i = 0; i < title.length(); i++) {
char character = title.charAt(i);
if (character == ' ') {
buffer.append(xmlStyle.getSpace());
} else if (character == '/') {
buffer.append(xmlStyle.getSlash());
} else if (character == '&') {
buffer.append(xmlStyle.getAmpersandInString());
} else if (character == '<') {
buffer.append(xmlStyle.getLeftAngleBracketInString());
} else if (character == '>') {
buffer.append(xmlStyle.getRightAngleBracketInString());
} else if (character == '"') {
buffer.append(xmlStyle.getDoubleQuoteInString());
} else if (character == '#') {
buffer.append(xmlStyle.getHash());
} else if (character == '?') {
buffer.append(xmlStyle.getQuestionMark());
} else if (character == ';') {
buffer.append(xmlStyle.getSemicolon());
} else {
buffer.append(character);
}
}
buffer.append(xmlStyle.getDoubleQuote());
}
if (phrase.getStartTime() != Phrase.DEFAULT_START_TIME) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getStartTimeAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(phrase.getStartTime(), 2)
: Double.toString(phrase.getStartTime()))
+ xmlStyle.getDoubleQuote()
);
}
if (phrase.getInstrument() != Phrase.DEFAULT_INSTRUMENT) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getInstrumentAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(phrase.getInstrument())
+ xmlStyle.getDoubleQuote()
);
}
if (phrase.getPan() != Phrase.DEFAULT_TEMPO) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getTempoAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(phrase.getTempo(), 2)
: Double.toString(phrase.getTempo()))
+ xmlStyle.getDoubleQuote()
);
}
if (phrase.getAppend() != Phrase.DEFAULT_APPEND) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getAppendAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (phrase.getAppend()
? Boolean.TRUE.toString()
: Boolean.FALSE.toString())
+ xmlStyle.getDoubleQuote()
);
}
if (phrase.getPan() != Phrase.DEFAULT_PAN) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getPanAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(phrase.getPan(), 2)
: Double.toString(phrase.getPan()))
+ xmlStyle.getDoubleQuote()
);
}
int size = phrase.size();
if (size == 0) {
buffer.append(
xmlStyle.getSlash() + xmlStyle.getRightAngleBracket());
} else {
buffer.append(xmlStyle.getRightAngleBracket());
for (int i = 0; i < size; i++) {
buffer.append(noteToXMLString(phrase.getNote(i), xmlStyle));
}
buffer.append(
xmlStyle.getLeftAngleBracket()
+ xmlStyle.getSlash()
+ xmlStyle.getPhraseTagName()
+ xmlStyle.getRightAngleBracket()
);
}
return buffer.toString();
}
public static String noteToXMLString(final Note note) {
return DEFAULT_XML_STYLE.initialXMLDeclaration()
+ XMLParser.noteToXMLString(note, DEFAULT_XML_STYLE);
}
private static String noteToXMLString(
final Note note,
final XMLStyle xmlStyle) {
StringBuffer buffer = new StringBuffer();
buffer.append(
xmlStyle.getLeftAngleBracket() + xmlStyle.getNoteTagName());
if (note.getPitchType() == Note.MIDI_PITCH) {
if (note.getPitch() != Note.DEFAULT_PITCH) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getPitchAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(note.getPitch())
+ xmlStyle.getDoubleQuote()
);
}
} else {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getFrequencyAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Double.toString(note.getFrequency())
+ xmlStyle.getDoubleQuote()
);
}
if (note.getDynamic() != Note.DEFAULT_DYNAMIC) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getDynamicAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ Integer.toString(note.getDynamic())
+ xmlStyle.getDoubleQuote()
);
}
if (note.getRhythmValue() != Note.DEFAULT_RHYTHM_VALUE) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getRhythmValueAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(note.getRhythmValue(), 2)
: Double.toString(note.getRhythmValue()))
+ xmlStyle.getDoubleQuote()
);
}
if (note.getPan() != Note.DEFAULT_PAN) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getPanAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(note.getPan(), 2)
: Double.toString(note.getPan()))
+ xmlStyle.getDoubleQuote()
);
}
if (note.getDuration() != Note.DEFAULT_DURATION) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getDurationAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(note.getDuration(), 2)
: Double.toString(note.getDuration()))
+ xmlStyle.getDoubleQuote()
);
}
if (note.getOffset() != Note.DEFAULT_OFFSET) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getOffsetAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(note.getOffset(), 2)
: Double.toString(note.getOffset()))
+ xmlStyle.getDoubleQuote()
);
}
if (note.getSampleStartTime() != Note.DEFAULT_SAMPLE_START_TIME) {
buffer.append(
xmlStyle.getSpace()
+ xmlStyle.getSampleStartTimeAttributeName()
+ "="
+ xmlStyle.getDoubleQuote()
+ (xmlStyle.limitDecimalPlaces()
? XMLParser.limitDecimalPlaces(
note.getSampleStartTime(), 2)
: Double.toString(note.getSampleStartTime()))
+ xmlStyle.getDoubleQuote()
);
}
buffer.append(xmlStyle.getSlash() + xmlStyle.getRightAngleBracket());
return buffer.toString();
}
private static String limitDecimalPlaces(final double d,
final int places) {
String dString = Double.toString(d);
int lastIndex = dString.lastIndexOf(".") + places + 1;
if (lastIndex > dString.length()) {
lastIndex = dString.length();
}
return dString.substring(0, lastIndex);
}
public static Score xmlStringToScore(final String string)
throws ConversionException {
String xmlAsString = preprocessString(string);
Element[] elements = XMLParser.xmlStringToElements(xmlAsString);
if (elements.length != 1) {
throw new ConversionException(
"There can be only one root element. This string invalidly"
+ " has " + elements.length + " root elements."
);
}
Element element = elements[0];
if (XMLStyles.isValidScoreTag(elements[0].getName())) {
return elementToScore(elements[0]);
} else if (XMLStyles.isValidPartTag(elements[0].getName())) {
return new Score(elementToPart(elements[0]));
} else if (XMLStyles.isValidPhraseTag(elements[0].getName())) {
return new Score(new Part(elementToPhrase(elements[0])));
} else if (XMLStyles.isValidNoteTag(elements[0].getName())) {
return new Score(new Part(
new Phrase(elementToNote(elements[0]))));
}
throw new ConversionException("Unrecognised root element: "
+ elements[0].getName());
}
public static Part xmlStringToPart(final String string)
throws ConversionException {
String xmlAsString = preprocessString(string);
Element[] elements = XMLParser.xmlStringToElements(xmlAsString);
if (elements.length != 1) {
throw new ConversionException(
"There can be only one root element. This string invalidly"
+ " has " + elements.length + " root elements."
);
}
Element element = elements[0];
if (XMLStyles.isValidScoreTag(elements[0].getName())) {
throw new ConversionException(
"This XML string represents a Score, use the "
+ "xmlStringToScore(String) method instead."
);
} else if (XMLStyles.isValidPartTag(elements[0].getName())) {
return elementToPart(elements[0]);
} else if (XMLStyles.isValidPhraseTag(elements[0].getName())) {
return new Part(elementToPhrase(elements[0]));
} else if (XMLStyles.isValidNoteTag(elements[0].getName())) {
return new Part(new Phrase(elementToNote(elements[0])));
}
throw new ConversionException("Unrecognised root element: "
+ elements[0].getName());
}
public static Phrase xmlStringToPhrase(final String string)
throws ConversionException {
String xmlAsString = preprocessString(string);
Element[] elements = XMLParser.xmlStringToElements(xmlAsString);
if (elements.length != 1) {
throw new ConversionException(
"There can be only one root element. This string invalidly"
+ " has " + elements.length + " root elements."
);
}
Element element = elements[0];
if (XMLStyles.isValidScoreTag(elements[0].getName())) {
throw new ConversionException(
"This XML string represents a Score, use the "
+ "xmlStringToScore(String) method instead."
);
} else if (XMLStyles.isValidPartTag(elements[0].getName())) {
throw new ConversionException(
"This XML string represents a Part, use the "
+ "xmlStringToPart(String) method instead."
);
} else if (XMLStyles.isValidPhraseTag(elements[0].getName())) {
return elementToPhrase(elements[0]);
} else if (XMLStyles.isValidNoteTag(elements[0].getName())) {
return new Phrase(elementToNote(elements[0]));
}
throw new ConversionException("Unrecognised root element: "
+ elements[0].getName());
}
public static Note xmlStringToNote(final String string)
throws ConversionException {
String xmlAsString = preprocessString(string);
Element[] elements = XMLParser.xmlStringToElements(xmlAsString);
if (elements.length != 1) {
throw new ConversionException(
"There can be only one root element. This string invalidly"
+ " has " + elements.length + " root elements."
);
}
Element element = elements[0];
if (XMLStyles.isValidScoreTag(elements[0].getName())) {
throw new ConversionException(
"This XML string represents a Score, use the "
+ "xmlStringToScore(String) method instead."
);
} else if (XMLStyles.isValidPartTag(elements[0].getName())) {
throw new ConversionException(
"This XML string represents a Part, use the "
+ "xmlStringToPart(String) method instead."
);
} else if (XMLStyles.isValidPhraseTag(elements[0].getName())) {
throw new ConversionException(
"This XML string represents a Phrase, use the "
+ "xmlStringToPhrase(String) method instead."
);
} else if (XMLStyles.isValidNoteTag(elements[0].getName())) {
return elementToNote(elements[0]);
}
throw new ConversionException("Unrecognised root element: "
+ elements[0].getName());
}
private static String preprocessString(final String string)
throws ConversionException {
String xmlAsString = string;
for (int i = 0; i < XMLStyles.styles.length; i++) {
String decl = XMLStyles.styles[i].initialXMLDeclaration();
if (string.startsWith(decl)) {
xmlAsString = xmlAsString.substring(decl.length());
break;
}
}
char[] xmlAsCharArray = xmlAsString.toCharArray();
StringBuffer buffer = null;
XMLStyle xmlStyle = new StandardXMLStyle();
char[][] CHARS_ARRAY = xmlStyle.getEncodingsOfReferenceChars();
char[] REFERENCE_CHARS = xmlStyle.getReferenceChars();
for (int i = 0; i < CHARS_ARRAY.length; i++) {
buffer = new StringBuffer();
String pattern = new String(CHARS_ARRAY[i]);
int lastIndex = 0;
int currentIndex = xmlAsString.indexOf(pattern);
while (currentIndex != -1) {
while (lastIndex < currentIndex) {
buffer.append(xmlAsCharArray[lastIndex]);
lastIndex++;
}
buffer.append(REFERENCE_CHARS[i]);
lastIndex += 3;
currentIndex = xmlAsString.indexOf(pattern, lastIndex);
}
currentIndex = xmlAsString.length();
while (lastIndex < currentIndex) {
buffer.append(xmlAsCharArray[lastIndex]);
lastIndex++;
}
xmlAsString = buffer.toString();
xmlAsCharArray = xmlAsString.toCharArray();
}
return xmlAsString;
}
private static Score elementToScore(Element element)
throws
ConversionException {
XMLStyle xmlStyle = new StandardXMLStyle();
if (!XMLStyles.isValidScoreTag(element.getName())) {
throw new ConversionException(
"The root element must have the name '"
+ xmlStyle.getScoreTagName() + "'. The invalid name used "
+ "was '" + element.getName() + "'."
);
}
Score returnScore = new Score();
String attributeValue;
attributeValue = XMLStyles.getTitleAttributeValue(element);
if (!attributeValue.equals("")) {
returnScore.setTitle(attributeValue);
}
attributeValue = XMLStyles.getTempoAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnScore.setTempo(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getTempoAttributeName() + "' of element '"
+ xmlStyle.getScoreTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getKeySignatureAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnScore.setKeySignature(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getKeySignatureAttributeName() + "' of element '"
+ xmlStyle.getScoreTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getKeyQualityAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnScore.setKeyQuality(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getKeyQualityAttributeName() + "' of element '"
+ xmlStyle.getScoreTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getNumeratorAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnScore.setNumerator(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getNumeratorAttributeName() + "' of element '"
+ xmlStyle.getScoreTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getDenominatorAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnScore.setDenominator(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getDenominatorAttributeName() + "' of element '"
+ xmlStyle.getScoreTagName() + "' must represent a Java integer."
);
}
}
Element[] children = element.getChildren();
for (int i = 0; i < children.length; i++) {
if (XMLStyles.isValidPartTag(children[i].getName())) {
returnScore.addPart(elementToPart(children[i]));
}
}
return returnScore;
}
private static Part elementToPart(Element element)
throws
ConversionException {
XMLStyle xmlStyle = new StandardXMLStyle();
if (!XMLStyles.isValidPartTag(element.getName())) {
throw new ConversionException(
"Invalid element: " + element.getName() + ". The only "
+ "accepted tag name is '" + xmlStyle.getPartTagName() + "'."
);
}
Part returnPart = new Part();
String attributeValue;
attributeValue = XMLStyles.getTitleAttributeValue(element);
if (!attributeValue.equals("")) {
returnPart.setTitle(attributeValue);
}
attributeValue = XMLStyles.getChannelAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPart.setChannel(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getChannelAttributeName() + "' of element '"
+ xmlStyle.getPartTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getInstrumentAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPart.setInstrument(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getInstrumentAttributeName() + "' of element '"
+ xmlStyle.getPartTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getTempoAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPart.setTempo(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getTempoAttributeName() + "' of element '"
+ xmlStyle.getPartTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getKeySignatureAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPart.setKeySignature(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getKeySignatureAttributeName() + "' of element '"
+ xmlStyle.getPartTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getKeyQualityAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPart.setKeyQuality(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getKeyQualityAttributeName() + "' of element '"
+ xmlStyle.getScoreTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getNumeratorAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPart.setNumerator(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getNumeratorAttributeName() + "' of element '"
+ xmlStyle.getPartTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getDenominatorAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPart.setDenominator(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getDenominatorAttributeName() + "' of element '"
+ xmlStyle.getPartTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getPanAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPart.setPan(Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getPanAttributeName() + "' of element '"
+ xmlStyle.getPartTagName() + "' must represent a Java double."
);
}
}
Element[] elements = element.getChildren();
for (int i = 0; i < elements.length; i++) {
if (XMLStyles.isValidPhraseTag(elements[i].getName())) {
returnPart.addPhrase(elementToPhrase(elements[i]));
}
}
return returnPart;
}
private static Phrase elementToPhrase(Element element)
throws
ConversionException {
XMLStyle xmlStyle = new StandardXMLStyle();
if (!XMLStyles.isValidPhraseTag(element.getName())) {
throw new ConversionException(
"Invalid element: " + element.getName() + ". The only "
+ "accepted tag name is '" + xmlStyle.getPhraseTagName() + "'."
);
}
Phrase returnPhrase = new Phrase();
String attributeValue;
attributeValue = XMLStyles.getTitleAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPhrase.setTitle(attributeValue);
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getTitleAttributeName() + "' of element '"
+ xmlStyle.getPhraseTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getStartTimeAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPhrase.setStartTime(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getStartTimeAttributeName() + "' of element '"
+ xmlStyle.getPhraseTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getInstrumentAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPhrase.setInstrument(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getInstrumentAttributeName() + "' of element '"
+ xmlStyle.getPhraseTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getTempoAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPhrase.setTempo(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getTempoAttributeName() + "' of element '"
+ xmlStyle.getPhraseTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getAppendAttributeValue(element);
if (!attributeValue.equals("")) {
returnPhrase.setAppend(new Boolean(attributeValue).booleanValue());
}
attributeValue = XMLStyles.getPanAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnPhrase.setPan(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getPanAttributeName() + "' of element '"
+ xmlStyle.getPhraseTagName() + "' must represent a Java double."
);
}
}
Element[] elements = element.getChildren();
for (int i = 0; i < elements.length; i++) {
if (XMLStyles.isValidNoteTag(elements[i].getName())) {
returnPhrase.addNote(elementToNote(elements[i]));
}
}
return returnPhrase;
}
private static Note elementToNote(Element element)
throws
ConversionException {
XMLStyle xmlStyle = new StandardXMLStyle();
if (!XMLStyles.isValidNoteTag(element.getName())) {
throw new ConversionException(
"Invalid element: " + element.getName() + ". The only "
+ "accepted tag name is '" + xmlStyle.getNoteTagName() + "'."
);
}
Note returnNote = new Note();
String attributeValue;
attributeValue = XMLStyles.getPitchAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnNote.setPitch(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getPitchAttributeName() + "' of element '"
+ xmlStyle.getNoteTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getFrequencyAttributeValue(element);
if (!attributeValue.equals("")) {
try {
double tempVal = Double.valueOf(attributeValue).doubleValue();
returnNote.setFrequency(tempVal);
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getFrequencyAttributeName() + "' of element '"
+ xmlStyle.getNoteTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getDynamicAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnNote.setDynamic(Integer.parseInt(attributeValue));
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getDynamicAttributeName() + "' of element '"
+ xmlStyle.getNoteTagName() + "' must represent a Java integer."
);
}
}
attributeValue = XMLStyles.getRhythmValueAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnNote.setRhythmValue(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getRhythmValueAttributeName() + "' of element '"
+ xmlStyle.getNoteTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getPanAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnNote.setPan(Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getPanAttributeName() + "' of element '"
+ xmlStyle.getNoteTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getDurationAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnNote.setDuration(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getDurationAttributeName() + "' of element '"
+ xmlStyle.getNoteTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getOffsetAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnNote.setOffset(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getOffsetAttributeName() + "' of element '"
+ xmlStyle.getNoteTagName() + "' must represent a Java double."
);
}
}
attributeValue = XMLStyles.getSampleStartTimeAttributeValue(element);
if (!attributeValue.equals("")) {
try {
returnNote.setSampleStartTime(
Double.valueOf(attributeValue).doubleValue());
} catch (NumberFormatException e) {
throw new ConversionException(
"Invalid attribute value: " + attributeValue + ". The "
+ "attribute '" + xmlStyle.getSampleStartTimeAttributeName() + "' of "
+ "element '" + xmlStyle.getNoteTagName() + "' must represent a "
+ "Java double."
);
}
}
return returnNote;
}
private static Element[] xmlStringToElements(final String string)
throws
ConversionException {
Vector elementsToBeReturned = new Vector();
XMLStyle xmlStyle = new StandardXMLStyle();
char[][] ENCODINGS_ARRAY = xmlStyle.getEncodingsOfValueReferenceChars();
char[] REFERENCE_CHARS = xmlStyle.getValueReferenceChars();
try {
int count = 0;
if (string.charAt(count++) != '<') {
throw new ConversionException(
"XML String does not begin with '<'");
}
StringBuffer elementName = new StringBuffer();
char character = string.charAt(count++);
while (character != ' ' && character != '/' && character != '>') {
elementName.append(character);
character = string.charAt(count++);
}
Element element = new Element(elementName.toString());
while (character == ' ') {
StringBuffer attributeName = new StringBuffer();
character = string.charAt(count++);
while (character != '=') {
if (character == '/') {
throw new ConversionException(
"Illegal character '/' in attribute name of "
+ "the '" + element.getName() + "' element."
);
}
if (character == '>') {
throw new ConversionException(
"Illegal character '>' in attribute name of "
+ "the '" + element.getName() + "' element."
);
}
attributeName.append(character);
character = string.charAt(count++);
}
Attribute attribute = new Attribute(attributeName.toString());
character = string.charAt(count++);
if (character != '"') {
throw new ConversionException(
"The value of the '" + attribute.getName()
+ "' attribute in the '" + element.getName()
+ "' element does not begin with a double-quote "
+ "(\")."
);
}
StringBuffer valueBuffer = new StringBuffer();
character = string.charAt(count++);
while (character != '"') {
// if (character == '/') {
// throw new ConversionException(
// "Illegal character '/' in value of the '"
// + attribute.getName() + "' attribute name in "
// + "the '" + element.getName() + "' element.");
// }
// if (character == '>') {
// throw new ConversionException(
// "Illegal character '>' in value of the '"
// + attribute.getName() + "' attribute name in "
// + "the '" + element.getName() + "' element.");
// }
// if (character == '<') {
// throw new ConversionException(
// "Illegal character '<' in value of the '"
// + attribute.getName() + "' attribute name in "
// + "the '" + element.getName() + "' element.");
// }
loop:
for (int i = 0; i < ENCODINGS_ARRAY.length; i++) {
for (int j = 0; j < ENCODINGS_ARRAY[i].length; j++) {
try {
if (ENCODINGS_ARRAY[i][j] !=
string.charAt(count + j - 1)) {
// if this is last array
if (i == ENCODINGS_ARRAY.length - 1) {
valueBuffer.append(character);
}
continue loop;
}
// if this is last character
if (j == ENCODINGS_ARRAY[i].length - 1) {
count += ENCODINGS_ARRAY[i].length - 1;
valueBuffer.append(REFERENCE_CHARS[i]);
break loop;
}
} catch (final IndexOutOfBoundsException e) {
// if this is last array
if (i == ENCODINGS_ARRAY.length - 1) {
valueBuffer.append(character);
}
continue loop;
}
}
}
character = string.charAt(count++);
}
attribute.setValue(valueBuffer.toString());
element.addAttribute(attribute);
character = string.charAt(count++);
}
if (character == '>') {
int endIndex = string.indexOf("" + element.getName() + ">");
if (endIndex == -1) {
throw new ConversionException(
"No closing tag found: " + element.getName() + ">");
}
element.appendChildren(
xmlStringToElements(string.substring(count, endIndex)));
count = endIndex + element.getName().length() + 3;
} else if (character == '/') {
character = string.charAt(count++);
if (character != '>') {
throw new ConversionException(
"Character '>' is expected to terminate the '"
+ element.getName() + "' element but was not "
+ "found."
);
}
} else {
throw new ConversionException(
"Either '>' or '/>' is expected to terminate the '"
+ element.getName() + "' element but neither was "
+ "found."
);
}
elementsToBeReturned.addElement(element);
if (count < string.length()) {
Element[] furtherElements =
xmlStringToElements(string.substring(count));
for (int i = 0; i < furtherElements.length; i++) {
elementsToBeReturned.addElement(furtherElements[i]);
}
}
Element[] returnElements =
new Element[elementsToBeReturned.size()];
elementsToBeReturned.copyInto(returnElements);
return returnElements;
} catch (IndexOutOfBoundsException e) {
throw new ConversionException(
"Xml string ended prematurely. Further characters were "
+ "excepted."
);
}
}
}
class XMLStyles {
public static final XMLStyle[] styles = {new StandardXMLStyle()};
// { new ExcessiveURLEncodingXMLStyle(),
// new ConciseQueryStringXMLStyle() };
public static boolean isValidScoreTag(final String string) {
for (int i = 0; i < styles.length; i++) {
if (string.equals(styles[i].getScoreTagName())) {
return true;
}
}
return false;
}
public static boolean isValidPartTag(final String string) {
for (int i = 0; i < styles.length; i++) {
if (string.equals(styles[i].getPartTagName())) {
return true;
}
}
return false;
}
public static boolean isValidPhraseTag(final String string) {
for (int i = 0; i < styles.length; i++) {
if (string.equals(styles[i].getPhraseTagName())) {
return true;
}
}
return false;
}
public static boolean isValidNoteTag(final String string) {
for (int i = 0; i < styles.length; i++) {
if (string.equals(styles[i].getNoteTagName())) {
return true;
}
}
return false;
}
public static String getTitleAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(styles[i].getTitleAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getTempoAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(styles[i].getTempoAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getKeySignatureAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getKeySignatureAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getKeyQualityAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getKeyQualityAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getNumeratorAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(styles[i].getNumeratorAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getDenominatorAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(styles[i].getDenominatorAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getChannelAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(styles[i].getChannelAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getInstrumentAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getInstrumentAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getPanAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getPanAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getStartTimeAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getStartTimeAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getAppendAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getAppendAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getPitchAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getPitchAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getFrequencyAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getFrequencyAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getDynamicAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getDynamicAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getRhythmValueAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getRhythmValueAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getDurationAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getDurationAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getOffsetAttributeValue(final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getOffsetAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
public static String getSampleStartTimeAttributeValue(
final Element element) {
for (int i = 0; i < styles.length; i++) {
String string =
element.getAttribute(
styles[i].getSampleStartTimeAttributeName());
if (!string.equals("")) {
return string;
}
}
return "";
}
}
class Element {
private String name;
private Vector attributeVector = new Vector();
private Vector childrenVector = new Vector();
public Element(String name) {
this.name = name;
}
public void addAttribute(Attribute attribute) {
attributeVector.addElement(attribute);
}
public void appendChildren(Element[] children) {
for (int i = 0; i < children.length; i++) {
childrenVector.addElement(children[i]);
}
}
public String getAttribute(final String string) {
Enumeration enum1 = attributeVector.elements();
while (enum1.hasMoreElements()) {
Attribute attribute = (Attribute) enum1.nextElement();
if (attribute.getName().equals(string)) {
return attribute.getValue();
}
}
return "";
}
public Element[] getChildren() {
Element[] children = new Element[childrenVector.size()];
childrenVector.copyInto(children);
return children;
}
public String getName() {
return name;
}
}
class Attribute {
private String name;
private String value;
public Attribute(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
abstract class XMLStyle {
final char[] WHITESPACE_CHARS =
new char[]{'%', '2', '0'};
final char[] DOUBLE_QUOTE_CHARS =
new char[]{'%', '2', '2'};
final char[] HASH_CHARS =
new char[]{'%', '2', '3'};
final char[] AMPERSAND_CHARS =
new char[]{'%', '2', '6'};
final char[] SLASH_CHARS =
new char[]{'%', '2', 'F'};
final char[] SEMICOLON_CHARS =
new char[]{'%', '3', 'B'};
final char[] QUESTION_MARK_CHARS =
new char[]{'%', '3', 'F'};
final char[] LEFT_ANGLE_CHARS =
new char[]{'%', '3', 'C'};
final char[] RIGHT_ANGLE_CHARS =
new char[]{'%', '3', 'E'};
public String initialXMLDeclaration() {
return "";
}
public String getSpace() {
return " "; //"%20";
}
public String getDoubleQuote() {
return "\""; //"%22";
}
public String getDoubleQuoteInString() {
return """; //"%26quot%3B";
}
public String getHash() {
return "#"; //"%23";
}
public String getAmpersand() {
return "&"; //"%26amp%3B";
}
public String getAmpersandInString() {
return "&";
}
public String getSlash() {
return "/"; //"%2F";
}
public String getSemicolon() {
return ";"; //"%3B";
}
public String getQuestionMark() {
return "?"; //"%3F";
}
public abstract char[] getReferenceChars();
public abstract char[][] getEncodingsOfReferenceChars();
public abstract char[] getValueReferenceChars();
public abstract char[][] getEncodingsOfValueReferenceChars();
public String getLeftAngleBracket() {
return "<"; //"%3C";
}
public String getLeftAngleBracketInString() {
return "<"; //"%26lt%3B";
}
public String getRightAngleBracket() {
return ">"; //"%3E";
}
public String getRightAngleBracketInString() {
return ">"; //"%26gt%3B";
}
public String getScoreTagName() {
return "Score";
}
public String getPartTagName() {
return "Part";
}
public String getPhraseTagName() {
return "Phrase";
}
public String getNoteTagName() {
return "Note";
}
public String getTitleAttributeName() {
return "title";
}
public String getTempoAttributeName() {
return "tempo";
}
public String getKeySignatureAttributeName() {
return "keySignature";
}
public String getKeyQualityAttributeName() {
return "keyQuality";
}
public String getNumeratorAttributeName() {
return "numerator";
}
public String getDenominatorAttributeName() {
return "denominator";
}
public String getChannelAttributeName() {
return "channel";
}
public String getInstrumentAttributeName() {
return "instrument";
}
public String getPanAttributeName() {
return "pan";
}
public String getStartTimeAttributeName() {
return "startTime";
}
public String getAppendAttributeName() {
return "append";
}
public String getPitchAttributeName() {
return "pitch";
}
public String getFrequencyAttributeName() {
return "frequency";
}
public String getDynamicAttributeName() {
return "dynamic";
}
public String getRhythmValueAttributeName() {
return "rhythmValue";
}
public String getDurationAttributeName() {
return "duration";
}
public String getOffsetAttributeName() {
return "offset";
}
public String getSampleStartTimeAttributeName() {
return "sampleStartTime";
}
public boolean limitDecimalPlaces() {
return false;
}
}
class StandardXMLStyle extends XMLStyle {
public final char[] getReferenceChars() {
return new char[]{};
}
public final char[][] getEncodingsOfReferenceChars() {
return new char[][]{};
}
public final char[] getValueReferenceChars() {
return new char[]{'<', '>', '\"', '&'};
}
public final char[][] getEncodingsOfValueReferenceChars() {
return new char[][]{{'&', 'l', 't', ';'},
{'&', 'g', 't', ';'},
{'&', 'q', 'u', 'o', 't', ';'},
{'&', 'a', 'm', 'p', ';'}
};
}
}