/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* 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.onebusaway.api.actions.api;
import java.util.ArrayList;
import org.apache.struts2.rest.DefaultHttpHeaders;
import org.onebusaway.api.ResponseCodes;
import org.onebusaway.api.actions.OneBusAwayApiActionSupport;
import org.onebusaway.api.impl.MaxCountSupport;
import org.onebusaway.api.model.ResponseBean;
import org.onebusaway.api.model.transit.BeanFactoryV2;
import com.opensymphony.xwork2.ModelDriven;
public class ApiActionSupport extends OneBusAwayApiActionSupport implements
ModelDriven<ResponseBean> {
private static final long serialVersionUID = 1L;
private static final int NO_VERSION = -999;
private int _defaultVersion;
private ResponseBean _response;
private int _version = -999;
private String _key;
private boolean _includeReferences = true;
public ApiActionSupport(int defaultVersion) {
_defaultVersion = defaultVersion;
}
public void setVersion(int version) {
_version = version;
}
public void setKey(String key) {
_key = key;
}
public void setIncludeReferences(boolean includeReferences) {
_includeReferences = includeReferences;
}
public ResponseBean getModel() {
return _response;
}
/****
* Protected Methods
*
* @param version
* @return
*/
protected boolean isVersion(int version) {
if (_version == NO_VERSION)
return version == _defaultVersion;
else
return version == _version;
}
protected BeanFactoryV2 getBeanFactoryV2() {
BeanFactoryV2 factory = new BeanFactoryV2(_includeReferences);
factory.setApplicationKey(_key);
return factory;
}
protected BeanFactoryV2 getBeanFactoryV2(MaxCountSupport maxCount) {
BeanFactoryV2 factory = getBeanFactoryV2();
factory.setMaxCount(maxCount);
return factory;
}
/*****************************************************************************
* Response Bean Generation Methods
****************************************************************************/
protected DefaultHttpHeaders setOkResponse(Object data) {
_response = new ResponseBean(getReturnVersion(), ResponseCodes.RESPONSE_OK,
"OK", data);
return new DefaultHttpHeaders();
}
protected DefaultHttpHeaders setValidationErrorsResponse() {
ValidationErrorBean bean = new ValidationErrorBean(new ArrayList<String>(
getActionErrors()), getFieldErrors());
_response = new ResponseBean(getReturnVersion(),
ResponseCodes.RESPONSE_INVALID_ARGUMENT, "validation error", bean);
return new DefaultHttpHeaders().withStatus(_response.getCode());
}
protected DefaultHttpHeaders setResourceNotFoundResponse() {
_response = new ResponseBean(getReturnVersion(),
ResponseCodes.RESPONSE_RESOURCE_NOT_FOUND, "resource not found", null);
return new DefaultHttpHeaders().withStatus(_response.getCode());
}
protected DefaultHttpHeaders setExceptionResponse() {
_response = new ResponseBean(getReturnVersion(),
ResponseCodes.RESPONSE_SERVICE_EXCEPTION, "internal error", null);
return new DefaultHttpHeaders().withStatus(_response.getCode());
}
protected DefaultHttpHeaders setUnknownVersionResponse() {
_response = new ResponseBean(getReturnVersion(),
ResponseCodes.RESPONSE_SERVICE_EXCEPTION, "unknown version: "
+ _version, null);
return new DefaultHttpHeaders().withStatus(_response.getCode());
}
protected int getReturnVersion() {
if (_version == NO_VERSION)
return _defaultVersion;
return _version;
}
}