/*
* Copyright 2009 Jesse McLaughlin (nzjess@gmail.com)
*
* Licensed under the Apache 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://www.apache.org/licenses/LICENSE-2.0
*
* 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.travelfusion.xmlclient.ri.handler.misc;
import java.util.ArrayList;
import javax.xml.stream.XMLStreamConstants;
import org.travelfusion.xmlclient.handler.HandlesRequestsFor;
import org.travelfusion.xmlclient.impl.handler.AbstractXmlToolRequestStAXResponseHandler;
import org.travelfusion.xmlclient.ri.xobject.misc.XAirport;
import org.travelfusion.xmlclient.ri.xobject.misc.XGetAirportsPageInfoRequest;
import org.travelfusion.xmlclient.ri.xobject.misc.XGetAirportsPageInfoResponse;
/**
* @author Jesse McLaughlin (nzjess@gmail.com)
*/
@HandlesRequestsFor(XGetAirportsPageInfoRequest.class)
public class GetAirportsPageInfoHandler extends
AbstractXmlToolRequestStAXResponseHandler<XGetAirportsPageInfoRequest, XGetAirportsPageInfoResponse> {
@Override
protected void fillTemplate() throws Exception {
// nop
}
public XGetAirportsPageInfoResponse handleResponse() throws Exception {
XGetAirportsPageInfoResponse response = new XGetAirportsPageInfoResponse();
response.setAirports(new ArrayList<XAirport>());
XAirport airport = null;
String currentName = null;
StringBuilder builder = new StringBuilder(32);
for (int event; ((event = responseReader.next()) != XMLStreamConstants.END_DOCUMENT);) {
switch (event) {
case XMLStreamConstants.START_ELEMENT:
currentName = responseReader.getName().getLocalPart();
if (airport == null) {
if ("Airport".equals(currentName)) {
airport = new XAirport();
}
}
break;
case XMLStreamConstants.CHARACTERS:
if (airport != null) {
builder.append(responseReader.getTextCharacters(), responseReader.getTextStart(), responseReader.getTextLength());
}
break;
case XMLStreamConstants.END_ELEMENT:
if (airport != null) {
currentName = responseReader.getName().getLocalPart();
if ("Name".equals(currentName)) {
airport.setName(builder.toString().trim());
}
else if ("Code".equals(currentName)) {
airport.setCode(builder.toString().trim());
}
else if ("Airport".equals(currentName)) {
response.getAirports().add(airport);
airport = null;
}
builder.setLength(0);
}
currentName = null;
break;
}
}
return response;
}
}
|