%-- -Copyright (C) 2004-2006 Autodesk, Inc. -This library is free software; you can redistribute it and/or -modify it under the terms of version 2.1 of the GNU Lesser -General Public License as published by the Free Software Foundation. -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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA --%> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="org.osgeo.mapguide.*" %> <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <%@ page import="java.text.*" %> <%@ page import="javax.servlet.jsp.*" %> <%@ page import="javax.servlet.http.*" %> <%@ include file="common.jsp" %> <%! class SearchError extends Exception { public SearchError(String msg, String title) { super(msg); this.title = title; } public String title; } String userInput; int target; int popup; String layerName; String mapName; String sessionId; String filter; ArrayList resNames; ArrayList resProps; int matchLimit; String locale; String searchError; %> <% // Initialize variables for this request // userInput = ""; target = 0; popup = 0; layerName = ""; mapName = ""; sessionId = ""; filter = ""; resNames = new ArrayList(); resProps = new ArrayList(); matchLimit = 0; locale = ""; response.setContentType("text/html; charset=UTF-8"); request.setCharacterEncoding("UTF-8"); PrintWriter outStream = response.getWriter(); MgLocalizer.SetLocalizedFilesPath(getServletContext().getRealPath("/") + "localized/"); searchError = MgLocalizer.GetString("SEARCHERROR", locale); GetRequestParameters(request); try { InitializeWebTier(); MgUserInformation cred = new MgUserInformation(sessionId); //connect to the site and get a feature service and a resource service instances MgSiteConnection site = new MgSiteConnection(); site.Open(cred); MgFeatureService featureSrvc = (MgFeatureService)site.CreateService(MgServiceType.FeatureService); MgResourceService resourceSrvc = (MgResourceService)site.CreateService(MgServiceType.ResourceService); //Create a temporary map runtime object, locate the layer // MgMap map = new MgMap(); map.Open(resourceSrvc, mapName); MgLayerCollection layers = map.GetLayers(); int i, j; MgLayer layer = null; for(i = 0; i < layers.GetCount(); i++) { layer = layers.GetItem(i); if(layer.GetName().equals(layerName)) break; } if(layer == null) throw new SearchError(MessageFormat.format(MgLocalizer.GetString("SEARCHLAYERNOTFOUND", locale), new Object[] { layerName }), searchError); //substitute the input tag with the actual user input to make up the filter int varIndex = filter.indexOf("$USER_VARIABLE"); if(varIndex != -1) filter = filter.substring(0, varIndex) + userInput + filter.substring(varIndex + 14); //parse the match label string, which defines what columns to be displayed boolean displayAll = (resProps.size() == 0); //query the features MgFeatureQueryOptions opts = new MgFeatureQueryOptions(); opts.SetFilter(filter); String featureClassName = layer.GetFeatureClassName(); MgResourceIdentifier srcId = new MgResourceIdentifier(layer.GetFeatureSourceId()); MgFeatureReader features = featureSrvc.SelectFeatures(srcId, featureClassName, opts); boolean hasResult = features.ReadNext(); if(hasResult) { int colCount = displayAll ? features.GetPropertyCount(): resProps.size(); //output the beginning of the document (head section and beginning of body section) String templ = MgLocalizer.Localize(LoadTemplate("/viewerfiles/search.templ"), locale, GetClientOS(request)); String[] vals = { String.valueOf(colCount), String.valueOf(target), String.valueOf(popup) }; outStream.write(Substitute(templ, vals)); MgClassDefinition classDef = features.GetClassDefinition(); MgPropertyDefinitionCollection idProps = classDef.GetIdentityProperties(); boolean multiIds = idProps.GetCount() > 1; ArrayList idPropNames = new ArrayList(idProps.GetCount()); String idPropName = ""; String idPropTypes[]; for(j = 0; j < idProps.GetCount(); j++) { MgPropertyDefinition idProp = idProps.GetItem(j); if(multiIds) idPropNames.add(idProp.GetName()); else idPropName = idProp.GetName(); } //table headings outStream.write("