/*******************************************************************************
* Gisgraphy Project
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*
* Copyright 2008 Gisgraphy project
* David Masclet <davidmasclet@gisgraphy.com>
*
*
*******************************************************************************/
package com.gisgraphy.webapp.action;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gisgraphy.domain.geoloc.entity.OpenStreetMap;
import com.gisgraphy.domain.repository.IOpenStreetMapDao;
import com.gisgraphy.domain.valueobject.GisgraphyConfig;
import com.opensymphony.xwork2.ActionSupport;
/**
* DisplayStreet Action
*
* @author <a href="mailto:david.masclet@gisgraphy.com">David Masclet</a>
*/
public class DisplayStreetAction extends ActionSupport implements GoogleMapApiKeyAware{
/**
* The reference in the localized file for the fact that the street has no name
*/
public static final String GLOBAL_STREET_NONAME = "global.street.noname";
/**
* The reference in the localized file for the error for the fact gid
* is required
*/
public static final String ERROR_REF_REQUIRED_FEATURE_ID = "required.gid";
/**
* The reference in the localized file for the error for the fact that the
* specified gid is not a numeric value
*/
public static final String ERROR_REF_NON_NUMERIC_FEATUREID = "displayfeature.gid.numeric";
/**
* The reference in the localized file for the error for the fact that no
* features were found for the specified gid
*/
public static final String ERROR_REF_NORESULT = "result.street.noresult";
/**
* The reference in the localized file for general error
*/
static final String ERROR_REF_GENERAL_ERROR = "display.error";
/**
* Default Generated serial Id
*/
private static final long serialVersionUID = 2940477476216677L;
private static Logger logger = LoggerFactory
.getLogger(DisplayStreetAction.class);
private IOpenStreetMapDao openStreetMapDao;
private String gid;
private String shape = null;
private OpenStreetMap result = null;
private String lat;
private String lng;
public static final String ERROR = "error";
/**
* @return the fullyqualified name if exists, or the name
*/
public String getPreferedName() {
if (result == null) {
return "";
} else {
return !StringUtils.isEmpty(result.getName()) ? result.getName()
:getText(GLOBAL_STREET_NONAME);
}
}
private boolean isNumeric(String number) {
try {
Integer.parseInt(number);
return true;
} catch (NumberFormatException e) {
return false;
}
}
/**
* The error message reference in the localized properties file
*/
private String errorRef = "";
private String errorMessage = "";
/*
* (non-Javadoc)
*
* @see com.opensymphony.xwork2.ActionSupport#execute()
*/
@Override
public String execute() throws Exception {
try {
if (StringUtils.isEmpty(gid)) {
errorRef = ERROR_REF_REQUIRED_FEATURE_ID;
return ERROR;
}
if (!isNumeric(gid)) {
errorRef = ERROR_REF_NON_NUMERIC_FEATUREID;
return ERROR;
}
result = openStreetMapDao.getByGid(Long.valueOf(gid));
if (result == null) {
errorRef = ERROR_REF_NORESULT;
return ERROR;
} else {
this.shape= retrieveShape(result.getGid());
}
} catch (RuntimeException e) {
if (e.getCause() != null) {
logger.warn("An error occured during search : "
+ e.getCause().getMessage());
} else {
logger.warn("An error occured during search : "
+ e.getMessage());
}
this.errorRef = ERROR_REF_GENERAL_ERROR;
this.errorMessage = e.getMessage();
return ERROR;
}
return SUCCESS;
}
protected String retrieveShape(Long gid) {
if (gid!=null){
return openStreetMapDao.getShapeAsWKTByGId(gid);
}
return null;
}
/**
* @return the gid
*/
public String getGid() {
return gid;
}
/**
* @param gid the gid to set
*/
public void setGid(String gid) {
this.gid = gid;
}
/**
* @param openStreetMapDao the openStreetMapDao to set
*/
public void setOpenStreetMapDao(IOpenStreetMapDao openStreetMapDao) {
this.openStreetMapDao = openStreetMapDao;
}
/**
* @return the errorRef
*/
public String getErrorRef() {
return errorRef;
}
/**
* @return the result
*/
public OpenStreetMap getResult() {
return result;
}
/**
* @return the errorMessage
*/
public String getErrorMessage() {
return errorMessage;
}
/**
* @return the googleMapAPIKey
*/
public String getGoogleMapAPIKey() {
return GisgraphyConfig.googleMapAPIKey == null ? "" : GisgraphyConfig.googleMapAPIKey;
}
public String getShape() {
return shape;
}
public String getLat() {
return lat;
}
public void setLat(String lat) {
this.lat = lat;
}
public String getLng() {
return lng;
}
public void setLng(String lng) {
this.lng = lng;
}
}