/* See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * Esri Inc. licenses this file to You 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 com.esri.gpt.control.download; import com.esri.gpt.framework.context.ApplicationConfiguration; import com.esri.gpt.framework.context.ApplicationContext; import com.esri.gpt.framework.context.RequestContext; import com.esri.gpt.framework.jsf.BaseActionListener; import com.esri.gpt.framework.jsf.FacesContextBroker; import com.esri.gpt.framework.jsf.MessageBroker; import com.esri.gpt.framework.security.principal.User; import com.esri.gpt.framework.util.Val; import java.util.ArrayList; import java.util.Map; import javax.faces.model.SelectItem; import javax.servlet.http.HttpServletRequest; /** * Download controller. */ public class DownloadController extends BaseActionListener { /** email key */ private static final String KEY_EMAIL = "email"; /** map service url key */ private static final String KEY_MAPSERVICEURL = "mapServiceUrl"; /** extract data task url key */ private static final String KEY_EXTRACTDATATASKURL = "extractDataTaskUrl"; /** format key */ private static final String KEY_FORMAT = "format"; /** projection key */ private static final String KEY_PROJECTION = "projection"; /** raster key */ private static final String KEY_RASTER = "raster"; /** feature key */ private static final String KEY_FEATURE = "feature"; /** layers */ private static final String KEY_LAYERS = "layers"; /** User email if any. */ private String _userEmail = ""; /** Map service url */ private String _mapServiceUrl = ""; /** Geoprocessing task url */ private String _extractDataTaskUrl = ""; /** pre-selected layers */ private String _layers = ""; /** pre-selected format */ private String _selectedFormat = ""; /** pre-selected projection */ private String _selectedProjection = ""; /** pre-selected raster */ private String _selectedRaster = ""; /** pre-selected feature */ private String _selectedFeature = ""; /** * Prepares page to display list of harvest repositories. * @return empty string */ public String getDownloadView() { try { // start view preparation phase RequestContext context = onPrepareViewStarted(); HttpServletRequest request = new FacesContextBroker().extractHttpServletRequest(); // get donwload config DownloadConfiguration cfg = com.esri.gpt.framework.context.RequestContext.extract(request). getApplicationConfiguration().getDownloadDataConfiguration(); // get user email address setUserEmail(getParameterByKey(request, KEY_EMAIL)); if (getUserEmail().length() == 0) { User user = context.getUser(); setUserEmail(user != null ? user.getProfile().getEmailAddress() : ""); } // get map service url setMapServiceUrl(getParameterByKey(request, KEY_MAPSERVICEURL)); if (getMapServiceUrl().length() == 0) { setMapServiceUrl(cfg.getMapServiceUrl()); } // get extract data geoprocessing task url setExtractDataTaskUrl(getParameterByKey(request, KEY_EXTRACTDATATASKURL)); if (getExtractDataTaskUrl().length() == 0) { setExtractDataTaskUrl(cfg.getTaskUrl()); } /** extract format */ String sFormat = getParameterByKey(request, KEY_FORMAT); if (sFormat.length() > 0) { setSelectedOutputFormat(sFormat); } /** extract projection */ String sProjection = getParameterByKey(request, KEY_PROJECTION); if (sProjection.length() > 0) { setSelectedProjection(sProjection); } /** extract feature */ String sFeature = getParameterByKey(request, KEY_FEATURE); if (sFeature.length() > 0) { setSelectedFeature(sFeature); } /** extract raster */ String sRaster = getParameterByKey(request, KEY_RASTER); if (sRaster.length() > 0) { setSelectedRaster(sRaster); } /** extract preselected layers */ String sLayers = getParameterByKey(request, KEY_LAYERS); if (sLayers.length()>0) { setLayers(sLayers); } } catch (Throwable t) { handleException(t); } finally { onPrepareViewCompleted(); } return ""; } /** * Gets user email. * @return user email */ public String getUserEmail() { return _userEmail; } /** * Sets user email. * @param userEmail user email */ public void setUserEmail(String userEmail) { _userEmail = Val.chkStr(userEmail); } /** * Gets all output formats. * @return array of select items representing output formats */ public ArrayList<SelectItem> getAllOutputFormats() { return getAllSelectItems(getConfiguration().getOutputFormatInfo()); } /** * Gets selected output format. * @return select item representing output format */ public String getSelectedOutputFormat() { return _selectedFormat; } /** * Sets selected output format. * @param item select item representing output format */ public void setSelectedOutputFormat(String item) { ItemInfo ii = getItem(getConfiguration().getOutputFormatInfo(), item); _selectedFormat = ii!=null? ii.getKey(): ""; } /** * Gets all projections. * @return array of select items representing projections */ public ArrayList<SelectItem> getAllProjections() { return getAllSelectItems(getConfiguration().getProjectionInfo()); } /** * Gets selected projection. * @return select item representing projection */ public String getSelectedProjection() { return _selectedProjection; } /** * Sets selected projection. * @param item select item representing projection */ public void setSelectedProjection(String item) { ItemInfo ii = getItem(getConfiguration().getProjectionInfo(), item); _selectedProjection = ii!=null? ii.getKey(): ""; } /** * Gets all features. * @return features */ public ArrayList<SelectItem> getAllFeatures() { return getAllSelectItems(getConfiguration().getFeatureFormatInfo()); } /** * Gets selected feature. * @return selected feature */ public String getSelectedFeature() { return _selectedFeature; } /** * Sets selected feature. * @param item selected feature */ public void setSelectedFeature(String item) { ItemInfo ii = getItem(getConfiguration().getFeatureFormatInfo(), item); _selectedFeature = ii!=null? ii.getKey(): ""; } /** * Gets all rasters. * @return all rasters */ public ArrayList<SelectItem> getAllRasters() { return getAllSelectItems(getConfiguration().getRasterFormatInfo()); } /** * Gets selected raster. * @return selected raster */ public String getSelectedRaster() { return _selectedRaster; } /** * Sets selected raster. * @param item selected raster */ public void setSelectedRaster(String item) { ItemInfo ii = getItem(getConfiguration().getRasterFormatInfo(), item); _selectedRaster = ii!=null? ii.getKey(): ""; } /** * Gets map service URL. * @return map service URL */ public String getMapServiceUrl() { return _mapServiceUrl; } /** * Sets map service URL. * @param mapServiceUrl map service URL */ public void setMapServiceUrl(String mapServiceUrl) { _mapServiceUrl = Val.chkStr(mapServiceUrl); } /** * Gets geoprocessing task URL. * @return geoprocessing task URL */ public String getExtractDataTaskUrl() { return _extractDataTaskUrl; } /** * Sets geoprocessing task URL. * @param url geoprocessing task URL */ public void setExtractDataTaskUrl(String url) { _extractDataTaskUrl = Val.chkStr(url); } /** * Gets pre-layers. * @return layers indexes separated by coma (,) */ public String getLayers() { return _layers; } /** * Sets pre-selected layers. * @param layers layers indexes separated by coma (,) */ public void setLayers(String layers) { String [] indexes = layers.split(","); StringBuilder sb = new StringBuilder(); for (String idx : indexes) { try { int index = Integer.parseInt(Val.chkStr(idx)); if (sb.length()>0) { sb.append(","); } sb.append(Integer.toString(index)); } catch (NumberFormatException ex) { } } _layers = sb.toString(); } /** * Gets item by name. * @param itemInfos array of infos * @param itemName item name * @return rquested item or <ocde>null</code> if no item found */ private ItemInfo getItem(ArrayList<ItemInfo> itemInfos, String itemName) { itemName = Val.chkStr(itemName); for (ItemInfo ii : itemInfos) { if (ii.getKey().equalsIgnoreCase(itemName) || ii.getAlias().equalsIgnoreCase(itemName)) { return ii; } } return null; } /** * Gets all select items. * @param itemInfos array of item infos * @return array of select items */ private ArrayList<SelectItem> getAllSelectItems(ArrayList<ItemInfo> itemInfos) { MessageBroker mb = new FacesContextBroker().extractMessageBroker(); ArrayList<SelectItem> selectItems = new ArrayList<SelectItem>(); for (ItemInfo ii : itemInfos) { selectItems.add( new SelectItem(ii.getKey(), mb.retrieveMessage(ii.getResourceKey()))); } return selectItems; } /** * Gets download configuration. * @return download configuration */ private DownloadConfiguration getConfiguration() { ApplicationContext appCtx = ApplicationContext.getInstance(); ApplicationConfiguration appCfg = appCtx.getConfiguration(); return appCfg.getDownloadDataConfiguration(); } /** * Gets parameter value. * @param request HTTP request * @param parameterKey parameter key * @return parameter name */ private String getParameterByKey(HttpServletRequest request, String parameterKey) { Map<String, String[]> parMap = request.getParameterMap(); for (Map.Entry<String, String[]> e : parMap.entrySet()) { if (e.getKey().equalsIgnoreCase(parameterKey)) { if (e.getValue().length > 0) { return Val.chkStr(e.getValue()[0]); } else { return ""; } } } return ""; } }