addProperty(property);
} else if (name.equals("typeDefinition")) {
// Create a new type definition.
TypeDefinition typeDef = definitionsFactory.createTypeDefinition();
TypeList typeList = new TypeList();
pushObject(typeList);
pushObject(typeDef);
processThemePropertyChildren(element);
popObject();
popObject();
if (!typeList.getList().isEmpty()) {
typeDef.setType((Type) typeList.getList().get(0));
}
// Add the type definition into the map for looking up later.
addTypeDef(typeDef);
} else if (name.equals("name")) {
// Set the name of the containing named object.
Named named = (Named) findObject(Named.class);
named.setName(element.getText());
} else if (name.equals("description")) {
// Ignore description elements and their contents, they have no
// effect on code generation.
} else if (name.equals("initialValue")) {
processInitialValue(element);
} else if (name.equals("integerValue")) {
String valStr = element.getText();
try {
int intVal = Integer.parseInt(valStr);
IntegerValue value = definitionsFactory.createIntegerValue();
value.setInteger(intVal);
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
container.addValue(value);
} catch (NumberFormatException nfe) {
System.out.println("Invalid number: '" + valStr + "'");
}
} else if (name.equals("lengthValue")) {
String valStr = element.getText();
try {
int intVal = Integer.parseInt(valStr);
LengthValue value = definitionsFactory.createLengthValue();
value.setInteger(intVal);
value.setUnits(element.getAttributeValue("units"));
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
container.addValue(value);
} catch (NumberFormatException nfe) {
System.out.println("Invalid number: '" + valStr + "'");
}
} else if (name.equals("angleValue")) {
String valStr = element.getText();
try {
double doubleVal = Double.parseDouble(valStr);
String units = element.getAttributeValue("units");
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
AngleValue value = definitionsFactory.createAngleValue();
value.setAngle(doubleVal);
value.setUnits(units);
container.addValue(value);
} catch (NumberFormatException nfe) {
System.out.println("Invalid angle: '" + valStr + "'");
}
} else if (name.equals("stringValue")) {
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
StringValue value = definitionsFactory.createStringValue();
value.setString(element.getText());
container.addValue(value);
} else if (name.equals("colorValue")) {
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
ColorValue value = definitionsFactory.createColorValue();
value.setColorName(element.getText());
container.addValue(value);
} else if (name.equals("inheritValue")) {
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
InheritValue value = definitionsFactory.createInheritValue();
container.addValue(value);
} else if (name.equals("percentageValue")) {
String valStr = element.getText();
try {
double percentVal = Double.parseDouble(valStr);
PercentageValue value =
definitionsFactory.createPercentageValue();
value.setPercentage(percentVal);
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
container.addValue(value);
} catch (NumberFormatException nfe) {
System.out.println("Invalid percentage: '" + valStr + "'");
}
} else if (name.equals("timeValue")) {
String valStr = element.getText();
try {
double doubleVal = Double.parseDouble(valStr);
String units = element.getAttributeValue("units");
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
TimeValue value = definitionsFactory.createTimeValue();
value.setTime(doubleVal);
value.setUnits(units);
container.addValue(value);
} catch (NumberFormatException nfe) {
System.out.println("Invalid time: '" + valStr + "'");
}
} else if (name.equals("pairValue")) {
PairValueContainer pair = new PairValueContainer();
pushObject(pair);
processThemePropertyChildren(element);
popObject();
PairValue value = definitionsFactory.createPairValue();
value.setFirst(pair.getFirst());
value.setSecond(pair.getSecond());
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
container.addValue(value);
} else if (name.equals("listValue")) {
ListValueContainer pair = new ListValueContainer();
pushObject(pair);
processThemePropertyChildren(element);
popObject();
ListValue value = definitionsFactory.createListValue();
Value next = null;
while((next = pair.getNext())!=null){
value.setNext(next);
}
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
container.addValue(value);
} else if (name.equals("frequencyValue")) {
String valStr = element.getText();
try {
double doubleVal = Double.parseDouble(valStr);
String units = element.getAttributeValue("units");
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
FrequencyValue value = definitionsFactory.createFrequencyValue();
value.setNumber(doubleVal);
value.setUnits(units);
container.addValue(value);
} catch (NumberFormatException nfe) {
System.out.println("Invalid frequency: '" + valStr + "'");
}
} else if (name.equals("fractionValue")) {
PairValueContainer pair = new PairValueContainer();
pushObject(pair);
processThemePropertyChildren(element);
popObject();
FractionValue value = definitionsFactory.createFractionValue();
value.setNumerator(pair.getFirst());
value.setDenominator(pair.getSecond());
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
container.addValue(value);
} else if (name.equals("keywordRef")) {
// Resolve the keyword reference to the keyword (must come before)
// and then create a representation.
ValueContainer container =
(ValueContainer) findObject(ValueContainer.class);
String keywordName = element.getText();
// Get the keyword from the property's type.
Property property = (Property) findObject(Property.class);
Type type = property.getType();
if (type != null) {
KeywordSearchContainer keywordCont =
new KeywordSearchContainer();
keywordCont.setKeywordName(keywordName);
TypeVisitor keywordFinder = new AbstractTypeVisitor() {
public void visitKeywords(Keywords visitee, Object obj) {
KeywordSearchContainer ksc =
(KeywordSearchContainer) obj;
Keyword keyword =
visitee.getKeyword(ksc.getKeywordName());
if (keyword != null) {
ksc.setKeyword(keyword);
}
}
public void visitTypeRef(TypeRef visitee, Object obj) {
TypeDefinition td = getTypeDef(visitee.getReference());
if (td != null) {
Type t = td.getType();
if (t != null) {
t.accept(this, obj);
}
}
}