* @return Returns a <code>Property</code> representing the data in the file.
* @throws XMLStreamException Thrown if there is an error reading the file.
*/
public static Property parsePropertyFile(XMLStreamReader reader) throws XMLStreamException {
Property property = null;
Review review = null;
int eventType = reader.getEventType();
while (reader.hasNext()) {
eventType = reader.next();
if (eventType == XMLStreamConstants.START_ELEMENT) {
QName elementQName = reader.getName();
String elementName = elementQName.toString();
if (PropertyConstraints.ELEMENT_PROPERTY.equals(elementName)) {
// create a new property object, this is the root element
property = new Property();
}
else if (PropertyConstraints.ELEMENT_REVIEW.equals(elementName)) {
// create a new review and add it to the property object
review = new Review();
property.getReview().add(review);
// get the attributes of review
String id = reader.getAttributeValue(null, PropertyConstraints.ATTRIBUTE_ID);
review.setId(id);
}
else if (PropertyConstraints.ELEMENT_DESCRIPTION.equals(elementName)) {
eventType = reader.next(); // we need the CHARACTERS event
if (eventType == XMLStreamConstants.CHARACTERS) {
String description = reader.getText();
review.setDescription(description);
}
}
else if (PropertyConstraints.ELEMENT_AUTHOR.equals(elementName)) {
eventType = reader.next(); // we need the CHARACTERS event
if (eventType == XMLStreamConstants.CHARACTERS) {
String author = reader.getText();
review.setAuthor(author == null ? "" : author);
}
}
else if (PropertyConstraints.ELEMENT_CREATION_DATE.equals(elementName)) {
CreationDate creationDate = new CreationDate();
String format = reader.getAttributeValue(null, PropertyConstraints.ATTRIBUTE_FORMAT);
creationDate.setFormat(format);
eventType = reader.next(); // we need the CHARACTERS event
if (eventType == XMLStreamConstants.CHARACTERS) {
String dateValue = reader.getText();
creationDate.setValue(dateValue);
}
review.setCreationDate(creationDate);
}
else if (PropertyConstraints.ELEMENT_DIRECTORY.equals(elementName)) {
eventType = reader.next(); // we need the CHARACTERS event
if (eventType == XMLStreamConstants.CHARACTERS) {
String directory = reader.getText();
review.setDirectory(directory);
}
}
else if (PropertyConstraints.ELEMENT_REVIEWERS.equals(elementName)) {
StaxPropertyXmlUtil.parseReviewers(reader, review);
}
else if (PropertyConstraints.ELEMENT_FILES.equals(elementName)) {
StaxPropertyXmlUtil.parseFiles(reader, review);
}
else if (PropertyConstraints.ELEMENT_FIELD_ITEMS.equals(elementName)) {
review.setFieldItems(new FieldItems());
}
else if (PropertyConstraints.ELEMENT_FIELD_ITEM.equals(elementName)) {
StaxPropertyXmlUtil.parseFieldItem(reader, review);
}
else if (PropertyConstraints.ELEMENT_FILTERS.equals(elementName)) {
review.setFilters(new Filters());
}
else if (PropertyConstraints.ELEMENT_PHASE.equals(elementName)) {
StaxPropertyXmlUtil.parsePhase(reader, review);
}
}