diff --git a/geoportal_1/.classpath b/geoportal_1/.classpath index 3b02e59..5ba1b84 100644 --- a/geoportal_1/.classpath +++ b/geoportal_1/.classpath @@ -6,18 +6,24 @@ - - + + - + + - + + + + + + diff --git a/geoportal_1/.project b/geoportal_1/.project index 270bb76..3a3fc74 100644 --- a/geoportal_1/.project +++ b/geoportal_1/.project @@ -1,15 +1,35 @@ - geoportal + geoportalDev + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + com.aptana.ide.core.unifiedBuilder + + + org.eclipse.jdt.core.javabuilder + + org.eclipse.wst.validation.validationbuilder + + + org.eclipse.m2e.core.maven2Builder @@ -17,7 +37,12 @@ + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature org.eclipse.jdt.core.javanature + com.aptana.projects.webnature org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.jsdt.core.jsNature + org.eclipse.wst.common.project.facet.core.nature diff --git a/geoportal_1/.settings/.jsdtscope b/geoportal_1/.settings/.jsdtscope new file mode 100644 index 0000000..29f5d7d --- /dev/null +++ b/geoportal_1/.settings/.jsdtscope @@ -0,0 +1,5 @@ + + + + + diff --git a/geoportal_1/.settings/org.eclipse.core.resources.prefs b/geoportal_1/.settings/org.eclipse.core.resources.prefs index 8b421bd..839d647 100644 --- a/geoportal_1/.settings/org.eclipse.core.resources.prefs +++ b/geoportal_1/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,5 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 -encoding//src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsJsonClient.java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 encoding/=UTF-8 diff --git a/geoportal_1/.settings/org.eclipse.wst.jsdt.ui.superType.container b/geoportal_1/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/geoportal_1/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/geoportal_1/.settings/org.eclipse.wst.jsdt.ui.superType.name b/geoportal_1/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/geoportal_1/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/geoportal_1/java_library_licenses_summary.txt b/geoportal_1/java_library_licenses_summary.txt new file mode 100644 index 0000000..af59d38 --- /dev/null +++ b/geoportal_1/java_library_licenses_summary.txt @@ -0,0 +1,15 @@ + +Java: +Spring Framework version 2.0 of the Apache License. +Spring Security Apache 2.0 license +GeoTools LGPL ; example code is explicitly public domain http://docs.geotools.org/stable/userguide/welcome/license.html +Apache HttpComponents Apache 2.0 license +Commons Compress Apache 2.0 license +HttpClient Mime Apache 2.0 license +Jackson JSON library dual, Apache 2.0, LGPL 2.1 +JUnit IBM's Common Public License Version 0.5 +Solr Apache 2.0 license +cors filter Apache 2.0 license. http://software.dzhuvinov.com/cors-filter.html +log4j Apache 2.0 license +slf4j MIT license +Selenium Apache 2.0 License \ No newline at end of file diff --git a/geoportal_1/pom.xml b/geoportal_1/pom.xml index b44f614..cdd8f2c 100644 --- a/geoportal_1/pom.xml +++ b/geoportal_1/pom.xml @@ -1,31 +1,46 @@ - 4.0.0 - org.OpenGeoPortal - geoportal - war - 1.2.RC1 - opengeoportal webapp - http://opengeoportal.org - + on a headless server use -Dheadless=true. additional information is at http://code.google.com/p/opengeoportal/wiki/AutomatedTesting --> - 3.1.2.RELEASE - 2.0.5 - UTF-8 - UTF-8 + 4.0.3.RELEASE + 3.2.3.RELEASE + 10-SNAPSHOT + 2.3.2 + UTF-8 + UTF-8 + 1.7.2 + opengeoportal @@ -131,28 +146,24 @@ test - - + org.apache.httpcomponents httpcore - 4.2.1 + 4.3 org.apache.httpcomponents httpclient - 4.2.1 + 4.3.1 junit junit - 4.8.1 - test + 4.11 @@ -162,98 +173,197 @@ runtime - - org.slf4j jcl-over-slf4j - 1.6.6 + 1.7.5 org.slf4j slf4j-api - 1.6.6 + 1.7.5 org.slf4j slf4j-log4j12 - 1.6.6 + 1.7.5 log4j log4j - 1.2.14 + 1.2.17 org.apache.solr solr-solrj - 4.0.0 + 4.5.1 org.springframework.security spring-security-core - 3.1.2.RELEASE + ${org.springframework.security.version} org.springframework.security spring-security-config - 3.1.2.RELEASE + ${org.springframework.security.version} org.springframework.security spring-security-web - 3.1.2.RELEASE + ${org.springframework.security.version} org.springframework.security spring-security-ldap - 3.1.2.RELEASE - - - org.codehaus.jackson - jackson-core-lgpl - 1.9.9 - - - org.codehaus.jackson - jackson-mapper-lgpl - 1.9.9 - - - org.apache.commons - commons-compress - 1.4.1 - - - org.apache.httpcomponents - httpmime - 4.2.1 - - - javax.servlet - javax.servlet-api - 3.1-b02 - provided - + ${org.springframework.security.version} + + + org.springframework.security + spring-security-cas + ${org.springframework.security.version} + + + org.apache.commons + commons-compress + 1.6 + + + org.apache.httpcomponents + httpmime + 4.3.1 + + + com.thetransactioncompany + cors-filter + 1.9.2 + + + + org.geotools + gt-main + ${geotools.version} + + + org.geotools + gt-shapefile + ${geotools.version} + + + org.geotools + gt-metadata + ${geotools.version} + + + org.geotools + gt-referencing + ${geotools.version} + + + org.geotools + gt-epsg-hsql + ${geotools.version} + + + org.geotools + gt-epsg-extension + ${geotools.version} + + + org.geotools + gt-wfs + ${geotools.version} + + + org.apache.httpcomponents + httpclient-cache + 4.3.1 + + + + javax.servlet + servlet-api + 2.5 + provided + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + javax.servlet + jstl + 1.2 + + + + org.apache.commons + commons-lang3 + 3.1 + + + org.eclipse.persistence + eclipselink + 2.5.2-M1 + - opengeoportal + ${warFile.name} - - org.apache.maven.plugins - maven-failsafe-plugin - 2.12 - - - - integration-test - verify - - - - + + org.apache.maven.plugins + maven-compiler-plugin + 3.0 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.12 + + + + integration-test + verify + + + + + + ro.isdc.wro4j + wro4j-maven-plugin + ${wro4j.version} + + + compile + + run + + + + + ogp,ogpLib + true + ${basedir}/target/${warFile.name}/resources/css/ + ${basedir}/target/${warFile.name}/resources/javascript/ + ro.isdc.wro.extensions.manager.standalone.GoogleStandaloneManagerFactory + + diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/AbstractLayerDownloader.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/AbstractLayerDownloader.java deleted file mode 100644 index 3953644..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/AbstractLayerDownloader.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.OpenGeoPortal.Download; - -import java.io.File; - -import org.OpenGeoPortal.Download.Types.LayerRequest; - -/** - * Abstract class for downloading layers - * @author chris - * - */ -//the layer downloader should handle all the errors thrown by the download method, -//and take care of layer status -abstract class AbstractLayerDownloader implements LayerDownloader { - private String responseFileType; - private String responseFileName; - - public String getResponseFileType() { - return this.responseFileType; - } - - public String getResponseFileName() { - return this.responseFileName; - } - - public void setResponseFileName(String responseFileName) { - this.responseFileName = responseFileName; - } - - abstract public void downloadLayers(MethodLevelDownloadRequest request) throws Exception; - - /** - * method for changing a layer's Name to a string that can be used as a file name. - * could be more robust - * - * @param layerName - * @return filtered layer name - */ - String filterFileName(String layerName){ - //remove the workspace name prefix if it exists - layerName = layerName.substring(layerName.indexOf(":") + 1); - //replace periods with underscores - layerName = layerName.replace(".", "_"); - return layerName; - } - - /** - * method creates a new file, adds the appropriate extension to the filename based on MIME-TYPE - * @param layerObject - * @return a handle to the new file - */ - File createNewFileObject(LayerRequest layerObject){ - //TODO probably should put this in a separate class or find an existing class that does MIME-TYPE to file extenstion mapping - String fileName = this.filterFileName(layerObject.getLayerInfo().getName()); - String responseContentType = layerObject.responseMIMEType; - System.out.println("response MIME-Type: " + responseContentType); - //get info from RequestedLayer object - if (responseContentType.indexOf(";") > -1){ - responseContentType = responseContentType.substring(0, responseContentType.indexOf(";")); - } - String fileExtension; - if ((responseContentType.contains("text/xml")||responseContentType.contains("application/xml"))){ - fileExtension = ".xml"; - } else if ((responseContentType.contains("text/html")||responseContentType.contains("application/html"))){ - fileExtension = ".html"; - } else if (responseContentType.contains("application/zip")){ - fileExtension = ".zip"; - } else if ((responseContentType.equals("image/tiff;subtype=\"geotiff\""))||responseContentType.contains("image/tiff")){ - fileExtension = ".tif"; - } else if (responseContentType.contains("image/jpeg")){ - fileExtension = ".jpg"; - } else if (responseContentType.contains("application/vnd.google-earth.kmz")){ - fileExtension = ".kmz"; - } else if (responseContentType.contains("application/vnd.ogc.se_xml")){ - fileExtension = "_error.xml"; - } else { - fileExtension = ".unk"; - } - - File newFile = new File(layerObject.getTargetDirectory(), fileName + fileExtension); - int i = 1; - while (newFile.exists()){ - newFile = new File(layerObject.getTargetDirectory(), fileName + i + fileExtension); - i++; - } - return newFile; - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/DownloadConfigRetriever.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/DownloadConfigRetriever.java deleted file mode 100644 index 0877894..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/DownloadConfigRetriever.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.OpenGeoPortal.Download.Config; - -import org.OpenGeoPortal.Download.Types.LayerRequest; - -public interface DownloadConfigRetriever { - String getClassKey(LayerRequest layer) throws Exception; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/OgpDownloadConfigRetriever.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/OgpDownloadConfigRetriever.java deleted file mode 100644 index ce495eb..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/OgpDownloadConfigRetriever.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.OpenGeoPortal.Download.Config; - -import java.util.Iterator; - -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.node.ArrayNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class OgpDownloadConfigRetriever extends ConfigRetriever implements DownloadConfigRetriever{ - - /* - * - * if (!currentLayer.accessLevel.equalsIgnoreCase("public")){ - try { - if (currentLayer.institution.equalsIgnoreCase(this.searchConfigRetriever.getHome())){ - if (!this.getLocallyAuthenticated()){ - //if the user is not logged in, deny the request - currentLayer.setStatus(LayerStatus.PERMISSION_DENIED); - continue; - } - } else { - //currently no way to log in to remote institutions, so just deny all requests - currentLayer.setStatus(LayerStatus.PERMISSION_DENIED); - continue; - } - } catch (Exception e){ - currentLayer.setStatus(LayerStatus.PERMISSION_DENIED); - System.out.println("CONFIGURATION ERROR: Please set your home institution in ogpConfig.json."); - } - } - * - * - * (non-Javadoc) - * @see org.OpenGeoPortal.Download.DownloadConfigRetriever#getClassKey(org.OpenGeoPortal.Download.RequestedLayer) - */ - final Logger logger = LoggerFactory.getLogger(this.getClass()); - - public String getClassKey(LayerRequest layer) throws Exception { - this.readConfigFile(); - SolrRecord record = layer.getLayerInfo(); - JsonNode institutions = this.configContents.path("institutions"); - ArrayNode jsonArray = (ArrayNode) institutions.path(record.getInstitution()); - Iterator institutionIterator = jsonArray.getElements(); - String classKey = null; - while (institutionIterator.hasNext()){ - JsonNode currentNode = institutionIterator.next(); - ArrayNode accessArrayNode = (ArrayNode) currentNode.path("accessLevel"); - Boolean accessMatch = false; - Iterator accessIterator = accessArrayNode.iterator(); - while (accessIterator.hasNext()){ - if (accessIterator.next().getTextValue().equalsIgnoreCase(record.getAccess().toLowerCase())){ - accessMatch = true; - } - } - if (!accessMatch){ - continue; - } - logger.debug("access match"); - Boolean dataTypeMatch = false; - ArrayNode dataTypeArrayNode = (ArrayNode) currentNode.path("dataType"); - String generalizedDataType = record.getDataType().toLowerCase(); - - if (generalizedDataType.equals("point")||generalizedDataType.equals("line")||generalizedDataType.equals("polygon")){ - generalizedDataType = "vector"; - } - Iterator dataTypeIterator = dataTypeArrayNode.iterator(); - while (dataTypeIterator.hasNext()){ - if (dataTypeIterator.next().getTextValue().equalsIgnoreCase(generalizedDataType)){ - dataTypeMatch = true; - } - } - if (!dataTypeMatch){ - continue; - } - logger.debug("data type match"); - Boolean outputFormatMatch = false; - ArrayNode outputFormatArrayNode = (ArrayNode) currentNode.path("outputFormats"); - Iterator outputFormatIterator = outputFormatArrayNode.iterator(); - while (outputFormatIterator.hasNext()){ - if (outputFormatIterator.next().getTextValue().equalsIgnoreCase(layer.getRequestedFormat().toLowerCase())){ - outputFormatMatch = true; - } - } - if (!outputFormatMatch){ - continue; - } - logger.debug("requested format match"); - classKey = currentNode.path("classKey").getTextValue(); - if (accessMatch && dataTypeMatch && outputFormatMatch){ - break; - } - } - if (classKey == null){ - logger.error("Class Key not defined for this layer."); - throw new Exception("Class Key not defined for this layer."); - } - logger.debug(layer.getId() + ": " + classKey); - return classKey; - } - - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRetrievalController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRetrievalController.java deleted file mode 100644 index ee2f7e7..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRetrievalController.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.OpenGeoPortal.Download.Controllers; - -import java.io.File; -import java.io.IOException; -import java.util.UUID; - -import javax.servlet.http.HttpServletResponse; - -import org.OpenGeoPortal.Download.DownloadRequest; -import org.OpenGeoPortal.Download.RequestStatusManager; -import org.apache.commons.io.FileUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; - -@Controller -@RequestMapping("/getDownload") -public class DownloadRetrievalController { - @Autowired - private RequestStatusManager requestStatusManager; - final Logger logger = LoggerFactory.getLogger(this.getClass()); - final static long TIMEOUT = 5000;//milliseconds - final static long INTERVAL = 500;//milliseconds - - @RequestMapping(method=RequestMethod.GET) - public void getDownload(@RequestParam("requestId") String requestId, HttpServletResponse response) throws IOException, InterruptedException { - - DownloadRequest layerDownloadRequest = requestStatusManager.getDownloadRequest(UUID.fromString(requestId)); - File downloadPackage = layerDownloadRequest.getDownloadPackage(); - long counter = 0; - //a final check. should never get here via the client - while (!downloadPackage.exists()){ - Thread.sleep(INTERVAL); - counter += INTERVAL; - if (counter >= TIMEOUT){ - logger.error("Download timed out. File could not be found."); - throw new IOException("File does not exist."); - } - } - logger.info("Milliseconds slept: " + Long.toString(counter)); - response.setContentLength((int) downloadPackage.length()); - response.setContentType("application/zip"); - response.addHeader("Content-Disposition", "attachment;filename=" + downloadPackage.getName()); - FileUtils.copyFile(downloadPackage, response.getOutputStream()); - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/MetadataDownloadController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/MetadataDownloadController.java deleted file mode 100644 index 2a10146..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/MetadataDownloadController.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.OpenGeoPortal.Download.Controllers; - -import java.io.IOException; - -import javax.servlet.http.HttpServletResponse; - -import org.OpenGeoPortal.Download.MetadataRetriever; -import org.OpenGeoPortal.Metadata.LayerInfoRetriever; -import org.OpenGeoPortal.Utilities.OgpFileUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -@RequestMapping("/getMetadata") -public class MetadataDownloadController { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private MetadataRetriever metadataRetriever; - @Autowired - private LayerInfoRetriever layerInfoRetriever; - - @RequestMapping(value="/{download}", method=RequestMethod.GET) - public @ResponseBody void processMetadataDownload(@PathVariable String download, @RequestParam("id") String id, HttpServletResponse response) throws Exception { - Boolean downloadBool = false; - if (download.equals("download")){ - downloadBool = true; - } - handleMetadataRequest(id, downloadBool, response); - } - - - @RequestMapping(method=RequestMethod.GET) - public @ResponseBody void processMetadataDownload(@RequestParam("id") String id, HttpServletResponse response) throws Exception { - /** - * This controller should receive a GET request with the layerId and a boolean "inline" that tells whether the data should - * appear inline or as an attachment - * - * @author Chris Barnett - */ - handleMetadataRequest(id, false, response); - } - - private void handleMetadataRequest(String id, Boolean download, HttpServletResponse response) throws IOException{ - String disposition; - String contentType; - if (download){ - disposition = "attachment"; - contentType = "application/octet-stream"; - } else { - disposition = "inline"; - contentType = "application/xml"; - } - - String metadataString = null; - try { - metadataString = this.metadataRetriever.getXMLStringFromId(id, "fgdc"); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - response.setContentLength(metadataString.getBytes("UTF-8").length); - String fileName = null; - try { - fileName = layerInfoRetriever.getAllLayerInfo(id).getName(); - } catch (Exception e) { - e.printStackTrace(); - fileName = id; - } - response.setHeader("Content-Disposition", disposition + "; filename=\"" - + OgpFileUtils.filterName(fileName) + ".xml" + "\""); - response.setContentType(contentType); - // return a link to the zip file, or info to create link - response.getWriter().write(metadataString); - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandler.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandler.java deleted file mode 100644 index 47a0dd4..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandler.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.OpenGeoPortal.Download; - -import java.util.Map; -import java.util.UUID; - -public interface DownloadHandler { - public UUID requestLayers(String sessionId, Map layerMap, String[] requestedBounds, String emailAddress, Boolean locallyAuthenticated) throws Exception; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandlerImpl.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandlerImpl.java deleted file mode 100644 index e07a501..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandlerImpl.java +++ /dev/null @@ -1,186 +0,0 @@ -package org.OpenGeoPortal.Download; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.OpenGeoPortal.Download.LayerDownloader; -import org.OpenGeoPortal.Download.Config.DownloadConfigRetriever; -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Download.Types.LayerRequest.Status; -import org.OpenGeoPortal.Metadata.LayerInfoRetriever; -import org.OpenGeoPortal.Solr.SearchConfigRetriever; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.OpenGeoPortal.Utilities.DirectoryRetriever; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.BeanFactoryAware; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; - -/** - * This is an abstract class that provides the logic to determine which concrete class - * should be selected to download a layer. - * - * - * @author Chris Barnett - * - */ -public class DownloadHandlerImpl implements DownloadHandler, BeanFactoryAware { - private List layerInfo; - private Boolean locallyAuthenticated = false; - @Autowired - protected LayerInfoRetriever layerInfoRetriever; - @Autowired - protected DownloadConfigRetriever downloadConfigRetriever; - @Autowired - protected SearchConfigRetriever searchConfigRetriever; - private String emailAddress = ""; - @Autowired - private DirectoryRetriever directoryRetriever; - final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - protected RequestStatusManager requestStatusManager; - - protected BeanFactory beanFactory; - - /** - * a method to set the locallyAuthenticated property. - * - * This is a way to pass information about the user's session into the java class. If the user has - * authenticated locally, a session variable is set. The calling code should set this value. - * - * @param authenticated true if the user has authenticated locally, otherwise false - */ - public void setLocallyAuthenticated(Boolean authenticated){ - this.locallyAuthenticated = authenticated; - } - - /** - * a method to get the locallyAuthenticated property. - * - * @return true if the user has authenticated locally, otherwise false - */ - public Boolean getLocallyAuthenticated(){ - return this.locallyAuthenticated; - } - - - /** - * a method that sets an email address. Only used for certain download types - * - * @param a string containing the user's email address passed from the client - */ - public void setReplyEmail(String emailAddress){ - this.emailAddress = emailAddress; - } - - - - /** - * the main method of the class. Initializes layers and bounds, calls download actions in appropriate - * order - * - * @param layerMap a hashmap that maps Solr layer IDs to requested download format - * @param bounds an array of geodetic bounding coordinates (eastmost, southmost, westmost, northmost) - * @return boolean that indicates the success of the function - * @throws Exception - */ - public UUID requestLayers(String sessionId, Map layerMap, String[] bounds, String emailAddress, Boolean locallyAuthenticated) throws Exception{ - this.setReplyEmail(emailAddress); - this.setLocallyAuthenticated(locallyAuthenticated); - Map > downloadRequestMap = null; - UUID requestId = UUID.randomUUID(); - downloadRequestMap = this.createDownloadRequestMap(layerMap, bounds); - this.submitDownloadRequest(sessionId, requestId, downloadRequestMap); - return requestId; - } - - private Map > createDownloadRequestMap (Map layerMap, String[] bounds) throws Exception { - this.layerInfo = this.layerInfoRetriever.fetchAllLayerInfo(layerMap.keySet()); - Map > downloadMap = new HashMap>(); - for (SolrRecord record: this.layerInfo){ - logger.debug("Requested format: " + layerMap.get(record.getLayerId())); - LayerRequest layerRequest = this.createLayerRequest(record, layerMap.get(record.getLayerId()), bounds); - String currentClassKey = null; - try { - currentClassKey = this.downloadConfigRetriever.getClassKey(layerRequest); - logger.info("DownloadKey: " + currentClassKey); - } catch(Exception e) { - layerRequest.setStatus(Status.FAILED); - logger.info("No download method found for: '" + record.getLayerId() +"'"); - continue; - } - if (downloadMap.containsKey(currentClassKey)){ - List currentLayerList = downloadMap.get(currentClassKey); - currentLayerList.add(layerRequest); - } else { - List newLayerList = new ArrayList(); - newLayerList.add(layerRequest); - downloadMap.put(currentClassKey, newLayerList); - } - } - return downloadMap; - - } - - private LayerRequest createLayerRequest(SolrRecord solrRecord, String requestedFormat, String[] bounds){ - LayerRequest layer = new LayerRequest(solrRecord, requestedFormat); - layer.setRequestedBounds(new BoundingBox(bounds[0], bounds[1], bounds[2], bounds[3])); - layer.setEmailAddress(this.emailAddress); - layer.setTargetDirectory(this.directoryRetriever.getDownloadDirectory()); - return layer; - } - - - public void setBeanFactory(BeanFactory beanFactory) throws BeansException { - this.beanFactory = beanFactory; - } - - /** - * a method to get a concrete class of type LayerDownloader given a string key defined in WEB-INF/download.xml - * - * - * @param downloaderKey a string key that identifies a concrete class of LayerDownloader - * @return the concrete LayerDownloader object - */ - public LayerDownloader getLayerDownloader(String downloaderKey){ - LayerDownloader layerDownloader = (LayerDownloader) beanFactory.getBean(downloaderKey); - return layerDownloader; - } - - /** - * a method that finds the appropriate concrete LayerDownloader and makes the actual request to download layers. - * - * @param downloadMap a map that relates a string key (that identifies the concrete LayerDownloader Class) to a List of - * LayerRequest objects that can be downloaded using that concrete class. - */ - @Async - public void submitDownloadRequest(String sessionId, UUID requestId, Map > downloadMap) { - List requestList = new ArrayList(); - for (String currentDownloader: downloadMap.keySet()){ - //get concrete class key from config - List layerRequests = downloadMap.get(currentDownloader); - MethodLevelDownloadRequest request = new MethodLevelDownloadRequest(layerRequests); - - try{ - LayerDownloader layerDownloader = this.getLayerDownloader(currentDownloader); - layerDownloader.downloadLayers(requestId, request); - requestList.add(request); - - } catch (Exception e) { - e.printStackTrace(); - logger.error("runDownloadRequest: " + e.getMessage()); - //should put error info in the status manager for these layers - } - } - requestStatusManager.addDownloadRequest(requestId, sessionId, requestList); - } - - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadPackager.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadPackager.java deleted file mode 100644 index d39d96b..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadPackager.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.OpenGeoPortal.Download; - -import java.util.UUID; - -public interface DownloadPackager { - void packageFiles(UUID requestId) throws Exception; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadRequest.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadRequest.java deleted file mode 100644 index c47c225..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadRequest.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.OpenGeoPortal.Download; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import org.OpenGeoPortal.Download.Controllers.RequestStatusController.StatusSummary; -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Download.Types.LayerRequest.Status; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class DownloadRequest { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - private UUID requestId; - private String sessionId; - private File downloadPackage; - private List requestList = new ArrayList(); - private Boolean downloadPackageSet = false;; - - public UUID getRequestId() { - return requestId; - } - public void setRequestId(UUID requestId) { - this.requestId = requestId; - } - public String getSessionId() { - return sessionId; - } - public void setSessionId(String sessionId) { - this.sessionId = sessionId; - } - - public File getDownloadPackage() { - return downloadPackage; - } - public void setDownloadPackage(File downloadPackage) { - this.downloadPackage = downloadPackage; - logger.info("Download package: " + downloadPackage.getAbsolutePath()); - this.downloadPackageSet = true; - } - - public List getRequestList() { - return requestList; - } - - public void setRequestList(List layerRequests){ - requestList = layerRequests; - } - - private Boolean isPostProcessingComplete(){ - if (downloadPackageSet){ - if (this.downloadPackage.exists()){ - return true; - } else { - return false; - } - } else { - return false; - } - } - - public Boolean isReadyForPackaging(){ - StatusSummary completionStatus = getRawStatusSummary(); - if (completionStatus.equals(StatusSummary.COMPLETE_SUCCEEDED) || completionStatus.equals(StatusSummary.COMPLETE_PARTIAL)){ - if (!isPostProcessingComplete()){ - return true; - } - } - return false; - } - - private StatusSummary getRawStatusSummary(){ - //Processing or Complete for the request - StatusSummary completionStatus = null; - int successCount = 0; - int failureCount = 0; - List layerList = new ArrayList(); - for (MethodLevelDownloadRequest request: requestList){ - layerList.addAll(request.getRequestList()); - } - for (LayerRequest request: layerList){ - if (request.getStatus().equals(Status.PROCESSING)){ - return StatusSummary.PROCESSING; - } else if (request.getStatus().equals(Status.SUCCESS)) { - successCount++; - } else if (request.getStatus().equals(Status.FAILED)){ - failureCount++; - } - } - if (failureCount == 0){ - completionStatus = StatusSummary.COMPLETE_SUCCEEDED; - } else if (successCount == 0){ - completionStatus = StatusSummary.COMPLETE_FAILED; - } else { - completionStatus = StatusSummary.COMPLETE_PARTIAL; - } - return completionStatus; - } - - public StatusSummary getStatusSummary() { - StatusSummary completionStatus = getRawStatusSummary(); - - if (completionStatus.equals(StatusSummary.COMPLETE_SUCCEEDED) || completionStatus.equals(StatusSummary.COMPLETE_PARTIAL)){ - if (!isPostProcessingComplete()){ - return StatusSummary.PROCESSING; - } - } - return completionStatus; - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MethodLevelDownloadRequest.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MethodLevelDownloadRequest.java deleted file mode 100644 index 38af26d..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MethodLevelDownloadRequest.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.OpenGeoPortal.Download; - -import java.util.ArrayList; -import java.util.List; - -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class MethodLevelDownloadRequest { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - - private List requestList = new ArrayList(); - - MethodLevelDownloadRequest(List request){ - setRequestList(request); - } - - public List getRequestList() { - return requestList; - } - - public void setRequestList(List layerRequests){ - requestList = layerRequests; - } - public void addLayerRequest(LayerRequest layerRequest) { - this.requestList.add(layerRequest); - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/AbstractDownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/AbstractDownloadMethod.java deleted file mode 100644 index c897bea..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/AbstractDownloadMethod.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Set; -import java.util.concurrent.Future; - -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.OpenGeoPortal.Utilities.DirectoryRetriever; -import org.OpenGeoPortal.Utilities.OgpFileUtils; -import org.OpenGeoPortal.Utilities.Http.HttpRequester; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.scheduling.annotation.AsyncResult; - -public abstract class AbstractDownloadMethod { - protected LayerRequest currentLayer; - protected HttpRequester httpRequester; - @Autowired - protected DirectoryRetriever directoryRetriever; - final Logger logger = LoggerFactory.getLogger(this.getClass()); - - - public HttpRequester getHttpRequester() { - return httpRequester; - } - - public void setHttpRequester(HttpRequester httpRequester) { - this.httpRequester = httpRequester; - } - - public abstract Set getExpectedContentType(); - - public Boolean expectedContentTypeMatched(String foundContentType){ - if (getExpectedContentType().contains(foundContentType)){ - return true; - } else { - return false; - } - } - - @Async - public Future download(LayerRequest currentLayer) throws Exception { - this.currentLayer = currentLayer; - currentLayer.setMetadata(this.includesMetadata()); - InputStream inputStream = this.httpRequester.sendRequest(this.getUrl(), createDownloadRequest(), getMethod()); - File directory = getDirectory(); - String contentType = httpRequester.getContentType().toLowerCase(); - Boolean contentMatch = expectedContentTypeMatched(contentType); - if (!contentMatch){ - logger.error("Unexpected content type: " + contentType); - //If their is a mismatch with the expected content, but the response is text, we want to at least log the response - if (contentType.toLowerCase().contains("text")||contentType.toLowerCase().contains("html")||contentType.toLowerCase().contains("xml")){ - logger.error("Returned text: " + IOUtils.toString(inputStream)); - } - - throw new Exception("Unexpected content type"); - - } - File outputFile = OgpFileUtils.createNewFileFromDownload(currentLayer.getLayerInfo().getName(), contentType, directory); - //OutputStream outputStream = new FileOutputStream(outputFile); - //FileUtils with a BufferedInputStream seems to be the fastest method with a small sample size. requires more testing - InputStream bufferedIn = new BufferedInputStream(inputStream); - FileUtils.copyInputStreamToFile(bufferedIn, outputFile); - /*try { - int currentBytes; - while ((currentBytes = bufferedIn.read()) != -1) { - outputStream.write(currentBytes); - } - } finally { - try { - bufferedIn.close(); - } finally { - outputStream.close(); - } - }*/ - - return new AsyncResult(outputFile); - } - - protected abstract Boolean includesMetadata(); - - private File getDirectory() throws IOException{ - File downloadDirectory = this.directoryRetriever.getDownloadDirectory(); - File newDir = File.createTempFile("OGP", "", downloadDirectory); - newDir.delete(); - //Boolean success= - newDir.mkdir(); - newDir.setReadable(true); - newDir.setWritable(true); - return newDir; - } - - public abstract String createDownloadRequest() throws Exception; - - public abstract String getUrl(); - - public abstract String getMethod(); - - public BoundingBox getClipBounds(){ - SolrRecord layerInfo = this.currentLayer.getLayerInfo(); - BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); - BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); - return bounds; - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/EmailDownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/EmailDownloadMethod.java deleted file mode 100644 index 25e732a..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/EmailDownloadMethod.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -import java.util.concurrent.Future; - -import org.OpenGeoPortal.Download.Types.LayerRequest; - -public interface EmailDownloadMethod { - - Boolean includesMetadata(); - - String createDownloadRequest(); - - Future sendEmail(LayerRequest currentLayer) - throws Exception; - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/MultiLayerDownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/MultiLayerDownloadMethod.java deleted file mode 100644 index b69ffc5..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/MultiLayerDownloadMethod.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -import java.io.File; -import java.util.concurrent.Future; - -import org.OpenGeoPortal.Download.Types.LayerRequest; - -public interface MultiLayerDownloadMethod { - - Boolean includesMetadata(); - - String createDownloadRequest(); - - Future download(LayerRequest currentLayer) - throws Exception; - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/PerLayerDownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/PerLayerDownloadMethod.java deleted file mode 100644 index e892aa6..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/PerLayerDownloadMethod.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -import java.io.File; -import java.util.concurrent.Future; - -import org.OpenGeoPortal.Download.Types.LayerRequest; - -public interface PerLayerDownloadMethod { - - Future download(LayerRequest currentLayer) throws Exception; - Boolean includesMetadata(); - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/ProxiedWcsDownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/ProxiedWcsDownloadMethod.java deleted file mode 100644 index 0608f30..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/ProxiedWcsDownloadMethod.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -public class ProxiedWcsDownloadMethod extends WcsDownloadMethod - implements PerLayerDownloadMethod { - private String proxyTo; - @Override - public String getUrl(){ - return this.proxyTo; - } - public String getProxyTo() { - return proxyTo; - } - public void setProxyTo(String proxyTo) { - this.proxyTo = proxyTo; - }; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/ProxiedWfsDownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/ProxiedWfsDownloadMethod.java deleted file mode 100644 index 265d101..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/ProxiedWfsDownloadMethod.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - - -public class ProxiedWfsDownloadMethod extends - WfsDownloadMethod implements PerLayerDownloadMethod { - private String proxyTo; - @Override - public String getUrl(){ - return this.proxyTo; - } - public String getProxyTo() { - return proxyTo; - } - public void setProxyTo(String proxyTo) { - this.proxyTo = proxyTo; - }; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/Wcs1_1_1DownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/Wcs1_1_1DownloadMethod.java deleted file mode 100644 index 7577d75..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/Wcs1_1_1DownloadMethod.java +++ /dev/null @@ -1,241 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -import java.io.InputStream; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -public class Wcs1_1_1DownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { - private static final Boolean INCLUDES_METADATA = false; - private static final String METHOD = "POST"; - - @Override - public String getMethod(){ - return METHOD; - } - - @Override - public Set getExpectedContentType(){ - Set expectedContentType = new HashSet(); - expectedContentType.add("application/zip"); - return expectedContentType; - } - - public String createDownloadRequest() throws Exception { - //--generate POST message - //info needed: geometry column, bbox coords, epsg code, workspace & layername - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user (will also need to transform the bbox) - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user - - SolrRecord layerInfo = this.currentLayer.getLayerInfo(); - BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); - BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); - String layerName = this.currentLayer.getLayerNameNS(); - - Map describeLayerInfo = getWcsDescribeLayerInfo(); - String epsgCode = describeLayerInfo.get("SRS"); - String domainSubset = ""; - - //wcs requires this info, even for full extent - String gmlLow = describeLayerInfo.get("gridEnvelopeLow"); - String gmlHigh = describeLayerInfo.get("gridEnvelopeHigh"); - String axes = ""; - if (describeLayerInfo.containsKey("axis1")){ - axes += ""; - axes += describeLayerInfo.get("axis1"); - axes += ""; - if (describeLayerInfo.containsKey("axis2")){ - axes += ""; - axes += describeLayerInfo.get("axis2"); - axes += ""; - } - } - domainSubset = "" - + "" - + bounds.generateGMLEnvelope(4326) - + "" - + "" - + "" - + "" + gmlLow + "" - + "" + gmlHigh + "" - + "" - + "" - + axes - + "" - + "" - + ""; - - String format = "GeoTIFF"; - - String getCoverageRequest = "" - + "" + layerName + "" - + domainSubset - + "" - + "" + epsgCode + "" - + "" + format + "" - + "" - + ""; - - - - //--generate POST message - //info needed: geometry column, bbox coords, epsg code, workspace & layername - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user (will also need to transform the bbox) - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user - - /* get coverage 1.1.1 request example - * */ - /*String getCoverageRequest = "" + - "sde:GISPORTAL.GISOWNER01.LANDINFO_K01C" + - "" + - "" + - "8.0 -11.0" + - "12.0 -5.0" + - "" + - "" + - "" + - "" + - "urn:ogc:def:crs:EPSG::4326" + - "urn:ogc:def:method:WCS:1.1:2dSimpleGrid" + - "4.495392222971454E-4 -4.495392222971454E-4" + - "urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS" + - "" + - "" + - ""; - */ - - - return getCoverageRequest; - } - - @Override - public String getUrl(){ - return this.currentLayer.getWcsUrl(); - }; - - private Map getWcsDescribeLayerInfo() - throws Exception - { - //should be xml - //do this later.... - /*DocumentFragment requestXML = createDocumentFragment(); - // Insert the root element node - Element rootElement = requestXML.createElement("DescribeFeatureType"); - requestXML.appendChild(rootElement);*/ - /*returned xml for 1.1.1 request - * - - GISPORTAL.GISOWNER01.LANDINFO_K01CGenerated from ArcSDE Raster - WCSArcSDE RasterGISPORTAL.GISOWNER01.LANDINFO_K01C - sde:GISPORTAL.GISOWNER01.LANDINFO_K01C - - -11.0 8.0-5.0 12.0 - - 8.0 -11.012.0 -5.0 - urn:ogc:def:crs:EPSG::4326 - urn:ogc:def:method:WCS:1.1:2dGridIn2dCrs-10.999550448428494 11.999550456848008 - 4.4953472869180695E-4 0.0 0.0 -4.4951788966269695E-4urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS - contents - 0.0254.0 - nearestlinear - cubicnearest neighbor - Band_1 - urn:ogc:def:crs:EPSG::4326EPSG:4326 - application/gtopo30application/arcgrid - image/gifimage/pngimage/jpeg - image/tiffimage/tiff;subtype="geotiff" - - */ - String layerName = this.currentLayer.getLayerNameNS(); - String describeCoverageRequest = "SERVICE=WCS&VERSION=1.1.1&REQUEST=DescribeCoverage&IDENTIFIERS=" + layerName; - - InputStream inputStream = this.httpRequester.sendRequest(this.currentLayer.getWcsUrl(), describeCoverageRequest, "GET"); - //parse the returned XML and return needed info as a map - // Create a factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - // Use document builder factory - DocumentBuilder builder = factory.newDocumentBuilder(); - //Parse the document - Document document = builder.parse(inputStream); - //initialize return variable - Map describeLayerInfo = new HashMap(); - - //get the needed nodes - Node schemaNode = document.getFirstChild(); - if (schemaNode.getNodeName().equals("ServiceExceptionReport")){ - String errorMessage = ""; - for (int i = 0; i < schemaNode.getChildNodes().getLength(); i++){ - String nodeName = schemaNode.getChildNodes().item(i).getNodeName(); - if (nodeName.equals("ServiceException")){ - errorMessage += schemaNode.getChildNodes().item(i).getTextContent().trim(); - } - } - throw new Exception("ServiceException: " + errorMessage); - } - - try{ - NodeList supportedCRSs = document.getElementsByTagName("wcs:supportedCRS"); - //NodeList supportedCRSs = document.getElementsByTagName("wcs:requestResponseCRSs"); - describeLayerInfo.put("SRS", supportedCRSs.item(0).getTextContent().trim()); - NodeList gridEnvelopeLow = document.getElementsByTagName("gml:low"); - describeLayerInfo.put("gridEnvelopeLow", gridEnvelopeLow.item(0).getTextContent().trim()); - NodeList gridEnvelopeHigh = document.getElementsByTagName("gml:high"); - describeLayerInfo.put("gridEnvelopeHigh", gridEnvelopeHigh.item(0).getTextContent().trim()); - NodeList axes = document.getElementsByTagName("gml:axisName"); - axes.getLength(); - for (int i = 0; i < axes.getLength(); i++){ - describeLayerInfo.put("axis" + i, axes.item(i).getTextContent().trim()); - } - //NodeList supportedFormats = document.getElementsByTagName("wcs:supportedFormats"); - //NodeList supportedFormats = document.getElementsByTagName("wcs:supportedCRS"); - //describeLayerInfo.put("nativeFormat", supportedFormats.item(0).getTextContent().trim()); - } catch (Exception e){ - throw new Exception("error getting layer info: "+ e.getMessage()); - } - return describeLayerInfo; - - } - - void handleServiceException(Node schemaNode) throws Exception{ - String errorMessage = ""; - for (int i = 0; i < schemaNode.getChildNodes().getLength(); i++){ - String nodeName = schemaNode.getChildNodes().item(i).getNodeName(); - if (nodeName.equals("ServiceException")){ - errorMessage += schemaNode.getChildNodes().item(i).getTextContent().trim(); - } - } - throw new Exception(errorMessage); - } - - @Override - public Boolean includesMetadata() { - return INCLUDES_METADATA; - } - - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WcsDownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WcsDownloadMethod.java deleted file mode 100644 index b5a0717..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WcsDownloadMethod.java +++ /dev/null @@ -1,186 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -import java.io.InputStream; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -public class WcsDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { - private static final Boolean INCLUDES_METADATA = false; - private static final String METHOD = "POST"; - - @Override - public String getMethod(){ - return METHOD; - } - - @Override - public Set getExpectedContentType(){ - Set expectedContentType = new HashSet(); - expectedContentType.add("application/zip"); - return expectedContentType; - } - - public String createDownloadRequest() throws Exception { - //--generate POST message - //info needed: geometry column, bbox coords, epsg code, workspace & layername - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user (will also need to transform the bbox) - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user - - SolrRecord layerInfo = this.currentLayer.getLayerInfo(); - BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); - BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); - String layerName = this.currentLayer.getLayerNameNS(); - - Map describeLayerInfo = getWcsDescribeLayerInfo(); - String epsgCode = describeLayerInfo.get("SRS"); - String domainSubset = ""; - - //wcs requires this info, even for full extent - String gmlLow = describeLayerInfo.get("gridEnvelopeLow"); - String gmlHigh = describeLayerInfo.get("gridEnvelopeHigh"); - String axes = ""; - if (describeLayerInfo.containsKey("axis1")){ - axes += ""; - axes += describeLayerInfo.get("axis1"); - axes += ""; - if (describeLayerInfo.containsKey("axis2")){ - axes += ""; - axes += describeLayerInfo.get("axis2"); - axes += ""; - } - } - domainSubset = "" - + "" - + bounds.generateGMLEnvelope(4326) - + "" - + "" - + "" - + "" + gmlLow + "" - + "" + gmlHigh + "" - + "" - + "" - + axes - + "" - + "" - + ""; - - String format = "GeoTIFF"; - - String getCoverageRequest = "" - + "" + layerName + "" - + domainSubset - + "" - + "" + epsgCode + "" - + "" + format + "" - + "" - + ""; - - return getCoverageRequest; - } - - @Override - public String getUrl(){ - return this.currentLayer.getWcsUrl(); - }; - - Map getWcsDescribeLayerInfo() - throws Exception - { - //should be xml - //do this later.... - /*DocumentFragment requestXML = createDocumentFragment(); - // Insert the root element node - Element rootElement = requestXML.createElement("DescribeFeatureType"); - requestXML.appendChild(rootElement);*/ - String layerName = this.currentLayer.getLayerNameNS(); - String describeCoverageRequest = "" - + "" + layerName + "" - + ""; - - InputStream inputStream = this.httpRequester.sendRequest(this.getUrl(), describeCoverageRequest, "POST"); - //parse the returned XML and return needed info as a map - // Create a factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - // Use document builder factory - DocumentBuilder builder = factory.newDocumentBuilder(); - //Parse the document - Document document = builder.parse(inputStream); - //initialize return variable - Map describeLayerInfo = new HashMap(); - - //get the needed nodes - Node schemaNode = document.getFirstChild(); - if (schemaNode.getNodeName().equals("ServiceExceptionReport")){ - String errorMessage = ""; - for (int i = 0; i < schemaNode.getChildNodes().getLength(); i++){ - String nodeName = schemaNode.getChildNodes().item(i).getNodeName(); - if (nodeName.equals("ServiceException")){ - errorMessage += schemaNode.getChildNodes().item(i).getTextContent().trim(); - } - } - throw new Exception("ServiceException: " + errorMessage); - } - - try{ - //NodeList supportedCRSs = document.getElementsByTagName("wcs:supportedCRS"); - NodeList supportedCRSs = document.getElementsByTagName("wcs:requestResponseCRSs"); - describeLayerInfo.put("SRS", supportedCRSs.item(0).getTextContent().trim()); - NodeList gridEnvelopeLow = document.getElementsByTagName("gml:low"); - describeLayerInfo.put("gridEnvelopeLow", gridEnvelopeLow.item(0).getTextContent().trim()); - NodeList gridEnvelopeHigh = document.getElementsByTagName("gml:high"); - describeLayerInfo.put("gridEnvelopeHigh", gridEnvelopeHigh.item(0).getTextContent().trim()); - NodeList axes = document.getElementsByTagName("gml:axisName"); - axes.getLength(); - for (int i = 0; i < axes.getLength(); i++){ - describeLayerInfo.put("axis" + i, axes.item(i).getTextContent().trim()); - } - //NodeList supportedFormats = document.getElementsByTagName("wcs:supportedFormats"); - //NodeList supportedFormats = document.getElementsByTagName("wcs:supportedCRS"); - //describeLayerInfo.put("nativeFormat", supportedFormats.item(0).getTextContent().trim()); - } catch (Exception e){ - throw new Exception("error getting layer info: "+ e.getMessage()); - } - return describeLayerInfo; - } - - void handleServiceException(Node schemaNode) throws Exception{ - String errorMessage = ""; - for (int i = 0; i < schemaNode.getChildNodes().getLength(); i++){ - String nodeName = schemaNode.getChildNodes().item(i).getNodeName(); - if (nodeName.equals("ServiceException")){ - errorMessage += schemaNode.getChildNodes().item(i).getTextContent().trim(); - } - } - throw new Exception(errorMessage); - } - - @Override - public Boolean includesMetadata() { - return INCLUDES_METADATA; - } - - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/Wfs1_1DownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/Wfs1_1DownloadMethod.java deleted file mode 100644 index 07da542..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/Wfs1_1DownloadMethod.java +++ /dev/null @@ -1,165 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -import java.io.InputStream; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -public class Wfs1_1DownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { - private static final Boolean INCLUDES_METADATA = false; - private static final String METHOD = "POST"; - - @Override - public String getMethod(){ - return METHOD; - } - - @Override - public Set getExpectedContentType(){ - Set expectedContentType = new HashSet(); - expectedContentType.add("application/zip"); - return expectedContentType; - } - - public String createDownloadRequest() throws Exception { - //--generate POST message - //info needed: geometry column, bbox coords, epsg code, workspace & layername - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user (will also need to transform the bbox) - String layerName = this.currentLayer.getLayerNameNS(); - SolrRecord layerInfo = this.currentLayer.getLayerInfo(); - BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); - BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); - - String workSpace = layerInfo.getWorkspaceName(); - Map describeLayerInfo = getWfsDescribeLayerInfo(); - int epsgCode = 4326;//we are filtering the bounds based on WGS84 - String geometryColumn = describeLayerInfo.get("geometryColumn"); - String nameSpace = describeLayerInfo.get("nameSpace"); - String bboxFilter = ""; - if (!nativeBounds.isEquivalent(bounds)){ - bboxFilter += "" - + "" - + "" + geometryColumn + "" - + bounds.generateGMLEnvelope(epsgCode) - + "" - + ""; - } - // TODO should be xml - String getFeatureRequest = "" - + "" - + bboxFilter - + "" - + ""; - - return getFeatureRequest; - } - - @Override - public String getUrl(){ - return this.currentLayer.getWfsUrl(); - }; - - Map getWfsDescribeLayerInfo() - throws Exception - { - // TODO should be xml - /*DocumentFragment requestXML = createDocumentFragment(); - // Insert the root element node - Element rootElement = requestXML.createElement("DescribeFeatureType"); - requestXML.appendChild(rootElement);*/ - String layerName = this.currentLayer.getLayerNameNS(); - String describeFeatureRequest = "" - + "" + layerName + "" - + ""; - - InputStream inputStream = this.httpRequester.sendRequest(this.getUrl(), describeFeatureRequest, "POST"); - System.out.println(this.httpRequester.getContentType());//check content type before doing any parsing of xml? - - //parse the returned XML and return needed info as a map - // Create a factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - // Use document builder factory - DocumentBuilder builder = factory.newDocumentBuilder(); - //Parse the document - Document document = builder.parse(inputStream); - //initialize return variable - Map describeLayerInfo = new HashMap(); - - //get the namespace info - Node schemaNode = document.getFirstChild(); - if (schemaNode.getNodeName().equals("ServiceExceptionReport")){ - this.handleServiceException(schemaNode); - } - try { - NamedNodeMap schemaAttributes = schemaNode.getAttributes(); - describeLayerInfo.put("nameSpace", schemaAttributes.getNamedItem("targetNamespace").getNodeValue()); - - //we can get the geometry column name from here - NodeList elementNodes = document.getElementsByTagName("xsd:element"); - for (int i = 0; i < elementNodes.getLength(); i++){ - Node currentNode = elementNodes.item(i); - NamedNodeMap currentAttributeMap = currentNode.getAttributes(); - String attributeValue = null; - for (int j = 0; j < currentAttributeMap.getLength(); j++){ - Node currentAttribute = currentAttributeMap.item(j); - String currentAttributeName = currentAttribute.getNodeName(); - if (currentAttributeName.equals("name")){ - attributeValue = currentAttribute.getNodeValue(); - } else if (currentAttributeName.equals("type")){ - if (currentAttribute.getNodeValue().startsWith("gml:")){ - describeLayerInfo.put("geometryColumn", attributeValue); - break; - } - } - } - } - - } catch (Exception e){ - throw new Exception("error getting layer info: "+ e.getMessage()); - } - - return describeLayerInfo; - } - - void handleServiceException(Node schemaNode) throws Exception{ - String errorMessage = ""; - for (int i = 0; i < schemaNode.getChildNodes().getLength(); i++){ - String nodeName = schemaNode.getChildNodes().item(i).getNodeName(); - if (nodeName.equals("ServiceException")){ - errorMessage += schemaNode.getChildNodes().item(i).getTextContent().trim(); - } - } - throw new Exception(errorMessage); - } - - @Override - public Boolean includesMetadata() { - return INCLUDES_METADATA; - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WfsDownloadMethod.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WfsDownloadMethod.java deleted file mode 100644 index b21de9b..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WfsDownloadMethod.java +++ /dev/null @@ -1,166 +0,0 @@ -package org.OpenGeoPortal.Download.Methods; - -import java.io.InputStream; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -public class WfsDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { - private static final Boolean INCLUDES_METADATA = false; - private static final String METHOD = "POST"; - final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Override - public String getMethod(){ - return METHOD; - } - - @Override - public Set getExpectedContentType(){ - Set expectedContentType = new HashSet(); - expectedContentType.add("application/zip"); - return expectedContentType; - } - - public String createDownloadRequest() throws Exception { - //--generate POST message - //info needed: geometry column, bbox coords, epsg code, workspace & layername - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user (will also need to transform the bbox) - String layerName = this.currentLayer.getLayerNameNS(); - SolrRecord layerInfo = this.currentLayer.getLayerInfo(); - BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); - BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); - - String workSpace = layerInfo.getWorkspaceName(); - Map describeLayerInfo = getWfsDescribeLayerInfo(); - String geometryColumn = describeLayerInfo.get("geometryColumn"); - String nameSpace = describeLayerInfo.get("nameSpace"); - int epsgCode = 4326;//we are filtering the bounds based on WGS84 - String bboxFilter = ""; - if (!nativeBounds.isEquivalent(bounds)){ - - bboxFilter += "" - + "" - + "" + geometryColumn + "" - + bounds.generateGMLBox(epsgCode) - + "" - + ""; - } - - String getFeatureRequest = "" - + "" - + bboxFilter - + "" - + ""; - - return getFeatureRequest; - } - - @Override - public String getUrl(){ - return this.currentLayer.getWfsUrl(); - }; - - Map getWfsDescribeLayerInfo() throws Exception { - // TODO should be xml doc fragment? - String layerName = this.currentLayer.getLayerNameNS(); - String describeFeatureRequest = "" - + "" + layerName + "" - + ""; - - InputStream inputStream = this.httpRequester.sendRequest(this.getUrl(), describeFeatureRequest, "POST"); - String contentType = this.httpRequester.getContentType(); - - if (!contentType.contains("xml")){ - throw new Exception("Expecting an XML response; instead, got content type '" + contentType + "'"); - } - //parse the returned XML and return needed info as a map - // Create a factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - // Use document builder factory - DocumentBuilder builder = factory.newDocumentBuilder(); - //Parse the document - Document document = builder.parse(inputStream); - //initialize return variable - Map describeLayerInfo = new HashMap(); - - //get the namespace info - Node schemaNode = document.getFirstChild(); - if (schemaNode.getNodeName().equals("ServiceExceptionReport")){ - this.handleServiceException(schemaNode); - } - try { - NamedNodeMap schemaAttributes = schemaNode.getAttributes(); - describeLayerInfo.put("nameSpace", schemaAttributes.getNamedItem("targetNamespace").getNodeValue()); - - //we can get the geometry column name from here - NodeList elementNodes = document.getElementsByTagName("xsd:element"); - for (int i = 0; i < elementNodes.getLength(); i++){ - Node currentNode = elementNodes.item(i); - NamedNodeMap currentAttributeMap = currentNode.getAttributes(); - String attributeValue = null; - for (int j = 0; j < currentAttributeMap.getLength(); j++){ - Node currentAttribute = currentAttributeMap.item(j); - String currentAttributeName = currentAttribute.getNodeName(); - if (currentAttributeName.equals("name")){ - attributeValue = currentAttribute.getNodeValue(); - } else if (currentAttributeName.equals("type")){ - if (currentAttribute.getNodeValue().startsWith("gml:")){ - describeLayerInfo.put("geometryColumn", attributeValue); - break; - } - } - } - } - - } catch (Exception e){ - throw new Exception("Error getting layer info from DescribeFeatureType: "+ e.getMessage()); - } - - return describeLayerInfo; - } - - void handleServiceException(Node schemaNode) throws Exception{ - String errorMessage = ""; - for (int i = 0; i < schemaNode.getChildNodes().getLength(); i++){ - String nodeName = schemaNode.getChildNodes().item(i).getNodeName(); - if (nodeName.equals("ServiceException")){ - errorMessage += schemaNode.getChildNodes().item(i).getTextContent().trim(); - } - } - throw new Exception(errorMessage); - } - - @Override - public Boolean includesMetadata() { - return INCLUDES_METADATA; - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/BoundingBox.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/BoundingBox.java deleted file mode 100644 index 16acb93..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/BoundingBox.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.OpenGeoPortal.Download.Types; - -/** - * A simple class that represents a bounding box in geodetic coordinates, with some convenience methods - * @author chris - * - */ -public class BoundingBox { - private Double minX; - private Double minY; - private Double maxX; - private Double maxY; - - /** - * BoundingBox constructor from Doubles - * @param minX - * @param minY - * @param maxX - * @param maxY - */ - public BoundingBox(Double minX, Double minY, Double maxX, Double maxY){ - this.init(minX, minY, maxX, maxY); - } - - /** - * BoundingBox constructor from Strings - * @param minX - * @param minY - * @param maxX - * @param maxY - */ - public BoundingBox(String minX, String minY, String maxX, String maxY){ - this.init(Double.parseDouble(minX), Double.parseDouble(minY), Double.parseDouble(maxX), Double.parseDouble(maxY)); - } - - private void init(Double minX, Double minY, Double maxX, Double maxY){ - this.minX = minX; - this.minY = minY; - this.maxX = maxX; - this.maxY = maxY; - } - - public Double getMinX(){ - return this.minX; - } - - public Double getMaxX(){ - return this.maxX; - } - - public Double getMinY(){ - return this.minY; - } - - public Double getMaxY(){ - return this.maxY; - } - - @Override - public String toString(){ - return Double.toString(this.minX) + "," + Double.toString(this.minY) + "," +Double.toString(this.maxX) + "," + Double.toString(this.maxY); - } - - public Double getAspectRatio(){ - Double aspectRatio = (this.getMinX() - this.getMaxX())/(this.getMinY() - this.getMaxY()); - aspectRatio = Math.abs(aspectRatio); - return aspectRatio; - } - - public String generateGMLEnvelope(int epsgCode){ - String envelope = "" - + "" + Double.toString(this.getMinX()) + " " + Double.toString(this.getMinY()) + "" - + "" + Double.toString(this.getMaxX()) + " " + Double.toString(this.getMaxY()) + "" - + ""; - return envelope; - } - /* - * - -75.102613,40.212597 -72.361859,41.512517 - - */ - public String generateGMLBox(int epsgCode){ - String envelope = "" - + "" + Double.toString(this.getMinX()) + "," + Double.toString(this.getMinY()) - + " " + Double.toString(this.getMaxX()) + "," + Double.toString(this.getMaxY()) + "" - + ""; - return envelope; - } - - public BoundingBox getIntersection(BoundingBox anotherBoundingBox){ - Double intersectionMinX = Math.max(this.getMinX(), anotherBoundingBox.getMinX()); - Double intersectionMaxX = Math.min(this.getMaxX(), anotherBoundingBox.getMaxX()); - Double intersectionMinY = Math.max(this.getMinY(), anotherBoundingBox.getMinY()); - Double intersectionMaxY = Math.min(this.getMaxY(), anotherBoundingBox.getMaxY()); - BoundingBox intersection = new BoundingBox(intersectionMinX, intersectionMinY, intersectionMaxX, intersectionMaxY); - return intersection; - } - - public Boolean isEquivalent(BoundingBox anotherBoundingBox){ - double acceptableDelta = .001; - if ((Math.abs(this.minX - anotherBoundingBox.minX) < acceptableDelta)&& - (Math.abs(this.minX - anotherBoundingBox.minX) < acceptableDelta)&& - (Math.abs(this.minX - anotherBoundingBox.minX) < acceptableDelta)&& - (Math.abs(this.minX - anotherBoundingBox.minX) < acceptableDelta)){ - return true; - } else { - return false; - } - } - - public String toString1_3() { - //wms 1.3 reverses the axes - return Double.toString(this.minY) + "," + Double.toString(this.minX) + "," + Double.toString(this.maxY) + "," + Double.toString(this.maxX); - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/ExportRequestController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/ExportRequestController.java deleted file mode 100644 index d5d2bc4..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/ExportRequestController.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.OpenGeoPortal.Export.GeoCommons; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; - -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.node.ObjectNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.context.request.RequestContextHolder; - -@Controller -@RequestMapping("/geocommons/requestExport") -public class ExportRequestController { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private GeoCommonsExportHandler geoCommonsExportHandler; - - - @RequestMapping(method=RequestMethod.POST, produces="application/json") - public @ResponseBody Map handleExportRequest(HttpServletRequest request) - throws ServletException, IOException { - //given a list of ogpids, export them to geocommons - //read the POST'ed JSON object - ObjectMapper mapper = new ObjectMapper(); - JsonNode rootNode = mapper.readTree(request.getInputStream()); - String basemap = rootNode.path("basemap").getTextValue(); - String bbox = rootNode.path("extent").getTextValue(); - String username = rootNode.path("username").getTextValue(); - String password = rootNode.path("password").getTextValue(); - - ObjectNode responseJson = mapper.createObjectNode(); - //response json format - //{"status": "", "message": "", mapUrl: "", "layers": []} - //status where in the process - //statusMessage text - //mapUrl: - //layers - //layerId: - //progress: dataset, map - //format: shp, wms, etc. - //url: - - /*if ((username.isEmpty())||(password.isEmpty())){ - response.sendError(500, "This request requires a valid GeoCommons username and password."); - return; - }*/ - String title = rootNode.path("title").getTextValue(); - String description = rootNode.path("description").getTextValue(); - JsonNode idArray = rootNode.path("OGPIDS"); - ArrayList layers = new ArrayList(); - for (JsonNode idNode : idArray){ - layers.add(idNode.getTextValue()); - } - /*if (layers.isEmpty()) { - //response.sendError(400, "No layers specified in request."); - ArrayNode arrayNode = mapper.createArrayNode(); - responseJson.put("status", ""); - responseJson.put("statusMessage", "No layers specified in request"); - response.getOutputStream().print(responseJson.asText()); - return; - }*/ - - String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId(); - GeoCommonsExportRequest exportRequest = new GeoCommonsExportRequest(); - exportRequest.setSessionId(sessionId); - exportRequest.setUsername(username); - exportRequest.setPassword(password); - exportRequest.setBasemap(basemap); - exportRequest.setTitle(title); - exportRequest.setDescription(description); - exportRequest.setBbox(bbox); - exportRequest.setLayerIds(layers); - - UUID requestId = geoCommonsExportHandler.requestExport(exportRequest); - Map map = new HashMap(); - map.put("requestId", requestId.toString()); - return map; - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Metadata/LayerInfoRetriever.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Metadata/LayerInfoRetriever.java deleted file mode 100644 index 2c0927b..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Metadata/LayerInfoRetriever.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.OpenGeoPortal.Metadata; - -import java.util.List; -import java.util.Set; - -import org.OpenGeoPortal.Solr.SolrRecord; - -public interface LayerInfoRetriever { - public List fetchAllLayerInfo(Set layerIds) throws Exception; - public String getWMSUrl(SolrRecord solrRecord); - SolrRecord getAllLayerInfo(String layerId) throws Exception; - boolean hasProxy(SolrRecord solrRecord); - public String getWFSUrl(SolrRecord solrRecord); - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Metadata/SolrLayerInfoRetriever.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Metadata/SolrLayerInfoRetriever.java deleted file mode 100644 index bcd6659..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Metadata/SolrLayerInfoRetriever.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.OpenGeoPortal.Metadata; - -import java.util.List; -import java.util.Set; - -import org.OpenGeoPortal.Solr.SearchConfigRetriever; -import org.OpenGeoPortal.Solr.SolrClient; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.OpenGeoPortal.Utilities.ParseJSONSolrLocationField; -import org.apache.solr.client.solrj.SolrQuery; -import org.apache.solr.client.solrj.SolrServer; -import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.response.QueryResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SolrLayerInfoRetriever implements LayerInfoRetriever{ - private SearchConfigRetriever searchConfigRetriever; - private SolrClient solrClient; - final Logger logger = LoggerFactory.getLogger(this.getClass()); - - public void setSolrClient(SolrClient solrClient) { - this.solrClient = solrClient; - } - - public void setSearchConfigRetriever(SearchConfigRetriever searchConfigRetriever) throws Exception{ - this.searchConfigRetriever = searchConfigRetriever; - } - - public List fetchAllLayerInfo(Set layerIds) throws SolrServerException { - SolrServer server = solrClient.getSolrServer(); - String query = ""; - for (String layerId : layerIds){ - query += "LayerId:" + layerId.trim(); - query += " OR "; - } - if (query.length() > 0){ - query = query.substring(0, query.lastIndexOf(" OR ")); - } - /*ModifiableSolrParams params = new ModifiableSolrParams(); - params.set("q", query); - - QueryResponse response = server.query(params);*/ - logger.debug("Solr query terms: " + query); - SolrQuery queryObj = new SolrQuery(); - queryObj.setQuery(query); - QueryResponse response = null; - try { - response = server.query(queryObj); - } catch (Exception e){ - logger.error(e.getMessage()); - } - //logger.info(response.getResults().get(0).getFieldValue("Name").toString()); - List results = response.getBeans(SolrRecord.class); - - return results; - } - - @Override - public String getWMSUrl(SolrRecord solrRecord) { - if (hasProxy(solrRecord)){ - String institution = solrRecord.getInstitution();//layerInfo.get("Institution"); - String accessLevel = solrRecord.getAccess();//layerInfo.get("Access") - try { - String proxyUrl = this.searchConfigRetriever.getWmsProxy(institution, accessLevel); - logger.info("Has proxy url: " + proxyUrl); - return proxyUrl; - } catch (Exception e) { - // TODO Auto-generated catch block - logger.error("Error getting proxy"); - e.printStackTrace(); - return null; - } - } else { - return ParseJSONSolrLocationField.getWmsUrl(solrRecord.getLocation()); - } - } - - @Override - public boolean hasProxy(SolrRecord layerInfo) { - String institution = layerInfo.getInstitution(); - String accessLevel = layerInfo.getAccess(); - String wmsProxyUrl = null; - try { - wmsProxyUrl = this.searchConfigRetriever.getWmsProxy(institution, accessLevel); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - if (wmsProxyUrl != null){ - return true; - } else { - return false; - } - } - - @Override - public SolrRecord getAllLayerInfo(String layerId) throws SolrServerException{ - String query = "LayerId:" + layerId.trim(); - SolrQuery queryObj = new SolrQuery(); - queryObj.setQuery( query ); - List results = solrClient.getSolrServer().query(queryObj).getBeans(SolrRecord.class); - return results.get(0); - } - - @Override - public String getWFSUrl(SolrRecord solrRecord) { - logger.info("Has proxy url: " + Boolean.toString(hasProxy(solrRecord))); - if (hasProxy(solrRecord)){ - String institution = solrRecord.getInstitution();//layerInfo.get("Institution"); - String accessLevel = solrRecord.getAccess();//layerInfo.get("Access") - try { - return this.searchConfigRetriever.getWfsProxy(institution, accessLevel); - } catch (Exception e) { - // TODO Auto-generated catch block - logger.error("Error getting proxy"); - e.printStackTrace(); - return null; - } - } else { - return ParseJSONSolrLocationField.getWfsUrl(solrRecord.getLocation()); - } - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/AuthenticatingGenericProxy.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/AuthenticatingGenericProxy.java deleted file mode 100644 index 09aee35..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/AuthenticatingGenericProxy.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.OpenGeoPortal.Proxy; - -import java.io.IOException; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpHost; -import org.apache.http.HttpResponse; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.AuthCache; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.protocol.ClientContext; -import org.apache.http.impl.auth.BasicScheme; -import org.apache.http.impl.client.AbstractHttpClient; -import org.apache.http.impl.client.BasicAuthCache; -import org.apache.http.protocol.BasicHttpContext; - -public class AuthenticatingGenericProxy extends GenericProxyImpl implements GenericProxy { - private HttpEntity responseEntity; - private UsernamePasswordCredentials credentials; - private Boolean useAuthentication; - private String username; - private String password; - - //break this down into pieces so I can reuse better - //now that these are pieces, I can separate them into other classes and inject for a modular proxy - //do I need the request object? - - public void setUsername(String username) { - this.setUseAuthentication(); - this.username = username; - } - - public void setPassword(String password) { - this.setUseAuthentication(); - this.password = password; - } - - public void setUseAuthentication(){ - this.useAuthentication = false; - if ((this.username != null)&&(!this.username.isEmpty())){ - if ((this.password != null)&&(!this.password.isEmpty())){ - //use authentication if a username and password are provided - this.useAuthentication = true; - } - } - } - - public void abstractRequest(HttpServletRequest request, HttpServletResponse response, String remoteAddress, String action){ - HttpHost targetHost = new HttpHost(remoteAddress); - HttpClient httpclient = this.ogpHttpClient.getHttpClient(); - - if (useAuthentication){ - int port = targetHost.getPort(); - String hostName = targetHost.getHostName(); - - this.credentials = new UsernamePasswordCredentials(this.username, this.password); -//this may not work. may need a new client. - ((AbstractHttpClient) httpclient).getCredentialsProvider().setCredentials( - new AuthScope(hostName, port), - this.credentials); - - // Create AuthCache instance - AuthCache authCache = new BasicAuthCache(); - // Generate BASIC scheme object and add it to the local auth cache - BasicScheme basicAuth = new BasicScheme(); - - authCache.put(targetHost, basicAuth); - - // Add AuthCache to the execution context - BasicHttpContext localcontext = new BasicHttpContext(); - localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache); - } - - try { - - HttpGet internalRequest = new HttpGet(remoteAddress); - HttpResponse internalResponse = httpclient.execute(internalRequest); - //internalResponse.getEntity().getContent() - // copy headers - //this.copyHeaders(internalResponse, response); - - this.checkStatus(internalResponse, response); - - if (action.equalsIgnoreCase("copy")){ - this.copyResponse(internalResponse, response); - } else if (action.equalsIgnoreCase("stream")){ - responseEntity = internalResponse.getEntity(); - } - - - } catch (Exception e){ - System.out.println("generic proxy failed"); - System.out.println(e.getMessage()); - try { - response.getOutputStream().print(e.getMessage()); - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - e.getStackTrace(); - } finally { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - } - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/GetFeatureInfoController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/GetFeatureInfoController.java deleted file mode 100644 index aecaf08..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/GetFeatureInfoController.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.OpenGeoPortal.Proxy.Controllers; - -import java.io.InputStream; -import java.util.HashSet; -import java.util.Set; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.OpenGeoPortal.Metadata.LayerInfoRetriever; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.OpenGeoPortal.Utilities.Http.HttpRequester; -import org.apache.commons.compress.utils.IOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; - -@Controller -@RequestMapping("/featureInfo") -public class GetFeatureInfoController { - private static final int NUMBER_OF_FEATURES = 1; - final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired @Qualifier("httpRequester.generic") - private HttpRequester httpRequester; - @Autowired - private LayerInfoRetriever layerInfoRetriever; - - @RequestMapping(method=RequestMethod.GET) - public void getFeatureInfo(@RequestParam("OGPID") String layerId, @RequestParam("bbox") String bbox, - @RequestParam("x") String xCoord,@RequestParam("y") String yCoord, - @RequestParam("width") String width,@RequestParam("height") String height, - HttpServletRequest request, HttpServletResponse response) throws Exception { - - String format = "application/vnd.ogc.gml"; - - Set layerIds = new HashSet(); - layerIds.add(layerId); - SolrRecord layerInfo = null; - try { - layerInfo = this.layerInfoRetriever.fetchAllLayerInfo(layerIds).get(0); - } catch (Exception e) { - e.printStackTrace(); - //response.sendError(500); - } - String previewUrl = null; - try { - //is there a proxy? - previewUrl = this.layerInfoRetriever.getWMSUrl(layerInfo); - } catch (Exception e) { - e.printStackTrace(); - //response.sendError(500); - } - - /* - * http://www.example.com/wfs? - service=wfs& - version=1.1.0& - request=GetFeature& - typeName=layerName& - maxFeatures=NUMBER_OF_FEATURES&srsName=EPSG:900913 - bbox=a1,b1,a2,b2 - bbox should be determined by the client. the size of a pixel? - */ - String layerName = layerInfo.getWorkspaceName() + ":" + layerInfo.getName(); - String query = "service=wms&version=1.1.1&request=GetFeatureInfo&info_format=" + format - + "&SRS=EPSG:900913&feature_count=" + NUMBER_OF_FEATURES + "&styles=&height=" + height + "&width=" + width +"&bbox=" + bbox - + "&x=" + xCoord + "&y=" + yCoord +"&query_layers=" + layerName + "&layers=" + layerName; - - /*String query = "service=wfs&version=1.1.0&request=GetFeature&typeName=" + layerName + "&maxFeatures=" + NUMBER_OF_FEATURES - + "&srsName=EPSG:900913&bbox=" + bbox;*/ - logger.info("executing WMS getFeatureRequest: " + previewUrl + "?" + query); - if (!previewUrl.contains("http")){ - - request.getRequestDispatcher(previewUrl + "?" + query).forward(request, response); - - } else { - InputStream input = httpRequester.sendRequest(previewUrl, query, "GET"); - logger.debug(httpRequester.getContentType()); - response.setContentType(httpRequester.getContentType()); - IOUtils.copy(input, response.getOutputStream()); - } - } - - public LayerInfoRetriever getLayerInfoRetriever() { - return layerInfoRetriever; - } - - public void setLayerInfoRetriever(LayerInfoRetriever layerInfoRetriever) { - this.layerInfoRetriever = layerInfoRetriever; - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageController.java deleted file mode 100644 index dacfb00..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageController.java +++ /dev/null @@ -1,175 +0,0 @@ -package org.OpenGeoPortal.Proxy.Controllers; - -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.OpenGeoPortal.Metadata.LayerInfoRetriever; -import org.OpenGeoPortal.Proxy.ImageHandler; -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest.LayerImage; -import org.OpenGeoPortal.Security.OgpUserContext; -import org.OpenGeoPortal.Solr.SearchConfigRetriever; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.codehaus.jackson.map.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.context.request.RequestContextHolder; - -@Controller -@RequestMapping("/requestImage") -public class ImageController { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private LayerInfoRetriever layerInfoRetriever; - @Autowired - private SearchConfigRetriever searchConfigRetriever; - @Autowired - private ImageHandler imageHandler; - private @Value("${ogp.proxyToWMS}") String proxyTo; - private boolean isLocallyAuthenticated;// = true; - @Autowired - private OgpUserContext ogpUserContext; - private String home;// = "Tufts"; - private ImageRequest imageRequest; - - @RequestMapping(method=RequestMethod.POST, headers = "content-type=application/x-www-form-urlencoded", consumes="application/json", produces="application/json") - public @ResponseBody Map processImageRequest(@RequestBody String imageRequest) throws Exception { - /** - * This controller given the above parameters + z order, grabs images - * from various servers and composites them. Is passed a custom json object to maintain structure. - * - * We should offer formats available via geoserver. - * - * determine if a layer is within the provided bounds and exclude it if not - * - * @author Chris Barnett - */ - home = this.searchConfigRetriever.getHome(); - // - ObjectMapper mapper = new ObjectMapper(); - try { - this.imageRequest = mapper.readValue(URLDecoder.decode(imageRequest, "UTF-8"), ImageRequest.class); - } catch (Exception e){ - e.printStackTrace(); - } - this.isLocallyAuthenticated = ogpUserContext.isAuthenticatedLocally(); - - Map map = new HashMap(); - populateImageRequest(); - UUID requestId = imageHandler.requestImage(RequestContextHolder.currentRequestAttributes().getSessionId(), this.imageRequest); - logger.debug("Image requested."); - map.put("requestId", requestId.toString()); - return map; - } - - - private Boolean hasPermission(SolrRecord currentLayer){ - if (!currentLayer.getAccess().equalsIgnoreCase("public")){ - try { - if (currentLayer.getInstitution().equalsIgnoreCase(this.home)){ - if (!this.isLocallyAuthenticated){ - return false; - } else { - return true; - } - } else { - return false; - } - } catch (Exception e) { - e.printStackTrace(); - return false; - } - - } else { - return true; - } - } - - - private void populateImageRequest() throws Exception{ - String baseQuery = generateBaseQuery(imageRequest); - //I'm making the assumption that the overhead of having separate http requests - //to Solr is far greater than iterating over these lists - - List layerInfo = this.layerInfoRetriever.fetchAllLayerInfo(imageRequest.getLayerIds()); - - for (LayerImage layerImage: imageRequest.getLayers()){ - String currentId = layerImage.getLayerId(); - for (SolrRecord solrRecord : layerInfo){ - if (!hasPermission(solrRecord)){ - //skip layers the user doesn't have permission to retrieve - //the client should never send these layers, since the user shouldn't be able to preview them - continue; - } - if (solrRecord.getLayerId().equalsIgnoreCase(currentId)){ - layerImage.setSolrRecord(solrRecord); - String layerQueryString = "&layers=" + solrRecord.getWorkspaceName() + ":" + solrRecord.getName(); - String currentSLD = layerImage.getSld(); - if ((currentSLD != null)&&(!currentSLD.equals("null")&&(!currentSLD.isEmpty()))){ - layerQueryString += "&sld_body=" + URLEncoder.encode(currentSLD, "UTF-8"); - } - - layerImage.setQueryString(baseQuery + layerQueryString); - logger.debug(layerImage.getQueryString()); - if (this.layerInfoRetriever.hasProxy(solrRecord)){ - layerImage.setBaseUrl(this.proxyTo); - } else { - try { - layerImage.setBaseUrl(this.layerInfoRetriever.getWMSUrl(solrRecord)); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - } - } - } - - } - - private String generateBaseQuery(ImageRequest imageRequest){ - //switch based on format to add dpi settings, change/add header info - /*try { - logger.info("format: " + imageRequest.getFormat()); - } catch (NullPointerException e){ - logger.info("format is null"); - } - try { - logger.info("srs: " + imageRequest.getSrs()); - } catch (NullPointerException e){ - logger.info("srs is null"); - } - try { - logger.info("bbox: " + imageRequest.getBbox()); - } catch (NullPointerException e){ - logger.info("bbox is null"); - }*/ - - String genericQueryString; - genericQueryString = "service=wms&version=1.1.1&request=GetMap&format=" + imageRequest.getFormat() + "&SRS=" + imageRequest.getSrs(); - genericQueryString += "&styles=&bbox=" + imageRequest.getBbox(); - - if (imageRequest.getFormat().equals("image/png")){ - - /*int requestedDpi = 90;//dpi & size options? - url$ += "&format_options=dpi:" + Integer.toString(requestedDpi) + ";"; - width = Integer.toString(Math.round(Integer.parseInt(width) * requestedDpi / 90)); - height = Integer.toString(Math.round(Integer.parseInt(height) * requestedDpi / 90)); - */ - genericQueryString += "&tiled=false&transparent=true"; - } - genericQueryString += "&height=" + imageRequest.getHeight() + "&width=" + imageRequest.getWidth(); - logger.debug(genericQueryString); - return genericQueryString; - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/RestrictedWMSController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/RestrictedWMSController.java deleted file mode 100644 index f90895c..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/RestrictedWMSController.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.OpenGeoPortal.Proxy.Controllers; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.OpenGeoPortal.Proxy.GenericProxy; -import org.OpenGeoPortal.Security.OgpUserContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; - -@Controller -@RequestMapping("/restricted/*") -public class RestrictedWMSController { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - - private @Value("${ogp.proxyToWMS}") String proxyTo; - - - @Autowired - private OgpUserContext ogpUserContext; - @Autowired @Qualifier("proxy.simple") - private GenericProxy genericProxy; - - @RequestMapping(value="/wms", method=RequestMethod.GET) - public void forwardWMSRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { - // check authentication - if (ogpUserContext.isAuthenticatedLocally()){ - // forward the request to the protected GeoServer instance - - String remoteUrl = this.getProxyTo() + "?" - + request.getQueryString(); - logger.info("executing WMS request to protected GeoServer: " - + remoteUrl); - this.genericProxy.proxyRequest(request, response, remoteUrl); - } else { - response.sendError(403); - } - } - - public String getProxyTo() { - return proxyTo; - } - - public void setProxyTo(String proxyTo) { - this.proxyTo = proxyTo; - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GenericProxyImpl.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GenericProxyImpl.java deleted file mode 100644 index 0b9fd86..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GenericProxyImpl.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.OpenGeoPortal.Proxy; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.OpenGeoPortal.Utilities.Http.OgpHttpClient; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; - -public class GenericProxyImpl implements GenericProxy { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - private HttpEntity responseEntity; - @Autowired @Qualifier("httpClient.pooling") - protected OgpHttpClient ogpHttpClient; - - public void proxyRequest(HttpServletRequest request, - HttpServletResponse response, String remoteUrl){ - this.abstractRequest(request, response, remoteUrl, "copy"); - } - - public void abstractRequest(HttpServletRequest request, HttpServletResponse response, String remoteUrl, String action){ - HttpClient httpclient = ogpHttpClient.getHttpClient(); - try { - - HttpGet internalRequest = new HttpGet(remoteUrl); - HttpResponse internalResponse = httpclient.execute(internalRequest); - - this.checkStatus(internalResponse, response); - - if (action.equalsIgnoreCase("copy")){ - this.copyResponse(internalResponse, response); - } else if (action.equalsIgnoreCase("stream")){ - responseEntity = internalResponse.getEntity(); - } - - - } catch (Exception e){ - logger.error("generic proxy failed"); - logger.error(e.getMessage()); - try { - response.getOutputStream().print(e.getMessage()); - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - e.getStackTrace(); - } finally { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - //httpclient.getConnectionManager().shutdown(); - } - } - - public InputStream getContentStream(HttpServletRequest request, HttpServletResponse response, String remoteUrl){ - this.abstractRequest(request, response, remoteUrl, "stream"); - try { - return this.responseEntity.getContent(); - } catch (IllegalStateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return null; - } - - public void checkStatus (HttpResponse internalResponse, HttpServletResponse externalResponse) throws IOException{ - if (internalResponse.getStatusLine().getStatusCode() != 200){ - externalResponse.sendError(internalResponse.getStatusLine().getStatusCode()); - logger.error("Status returned: " + internalResponse.getStatusLine()); - } - } - - public void copyHeaders (HttpResponse internalResponse, HttpServletResponse externalResponse){ - Header[] headers = internalResponse.getAllHeaders(); - for (int i = 0; i < headers.length; i++) { - //System.out.println(headers[i]); - if (!headers[i].getName().equals("Content-Disposition")){ - externalResponse.setHeader(headers[i].getName(), headers[i].getValue()); - } - } - } - - public void copyResponse(HttpResponse internalResponse, HttpServletResponse externalResponse) throws IOException{ - HttpEntity entity = internalResponse.getEntity(); - //System.out.println(entity.getContentType()); - - OutputStream outputStream = externalResponse.getOutputStream(); - BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); - BufferedInputStream bufferedInputStream = new BufferedInputStream(entity.getContent()); - - try { - int currentBytes; - while ((currentBytes = bufferedInputStream.read()) != -1) { - //System.out.println("Receiving " + currentBytes + " bytes"); - bufferedOutputStream.write(currentBytes); - } - } catch (Exception e){ - e.getStackTrace(); - } - finally { - try { - bufferedInputStream.close(); - } finally { - bufferedOutputStream.close(); - } - } - - EntityUtils.consume(entity); - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageCompositorImpl.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageCompositorImpl.java deleted file mode 100644 index 498ea71..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageCompositorImpl.java +++ /dev/null @@ -1,149 +0,0 @@ -package org.OpenGeoPortal.Proxy; - -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.awt.image.RescaleOp; -import java.io.File; -import java.io.IOException; -import java.util.Collections; -import java.util.List; - -import javax.imageio.ImageIO; - -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest; -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest.ImageStatus; -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest.LayerImage; -import org.OpenGeoPortal.Utilities.DirectoryRetriever; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; - -public class ImageCompositorImpl implements ImageCompositor { - private static final String FORMAT_SUFFIX = "png"; - - final Logger logger = LoggerFactory.getLogger(this.getClass()); - private Graphics2D compositeImageGraphicsObj; - @Autowired - private DirectoryRetriever directoryRetriever; - @Autowired - private ImageDownloader imageDownloader; - - - @Async - @Override - public void createComposite(ImageRequest imageRequest) { - downloadLayerImages(imageRequest); - logger.debug("Creating image composite..."); - BufferedImage compositeImage = new BufferedImage(imageRequest.getWidth(), imageRequest.getHeight(), BufferedImage.TYPE_INT_ARGB); - - try { - compositeImageGraphicsObj = compositeImage.createGraphics(); - - //at this point, we need to iterate over the zIndexes, construct appropriate urls, layer on top of image, then write to a file - //should sort based on zOrder - List layerImageList = imageRequest.getLayers(); - Collections.sort(layerImageList); - for (LayerImage layerImage: layerImageList){ - //now we have everything we need to create a request - //this needs to be done for each image received - try { - processLayer(layerImage); - layerImage.setImageStatus(ImageStatus.SUCCESS); - } catch (Exception e) { - //just skip it - logger.error("There was an error processing this layer image. Skipping..."); - layerImage.setImageStatus(ImageStatus.FAILED); - e.printStackTrace(); - } - } - try { - imageRequest.setDownloadFile(writeImage(compositeImage)); - - } catch (IOException e) { - e.printStackTrace(); - }//write this location + status to the manager object - } catch (Exception e){ - e.printStackTrace(); - } finally { - compositeImageGraphicsObj.dispose(); - } - } - - private void downloadLayerImages(ImageRequest imageRequest) { - List layerImageList = imageRequest.getLayers(); - for (LayerImage layerImage: layerImageList){ - //now we have everything we need to create a request - //this needs to be done for each image received - try { - layerImage.setImageFileFuture(imageDownloader.getImage(layerImage.getBaseUrl(), layerImage.getQueryString())); - } catch (Exception e) { - //just skip it - layerImage.setImageStatus(ImageStatus.FAILED); - logger.error("There was a problem getting this image. Skipping."); - e.printStackTrace(); - } - } - } - - private File getDirectory() throws IOException{ - File downloadDirectory = this.directoryRetriever.getDownloadDirectory(); - File newDir = File.createTempFile("OGP", "", downloadDirectory); - newDir.delete(); - //Boolean success= - newDir.mkdir(); - newDir.setReadable(true); - newDir.setWritable(true); - return newDir; - } - - private File writeImage(BufferedImage compositeImage) throws IOException{ - File imageDirectory = getDirectory(); - File outputFile = getOutputFile(imageDirectory); - try { - //write image to file - ImageIO.write(compositeImage, FORMAT_SUFFIX, outputFile); - } catch (IOException e) { - //... - } - - logger.info("Image written"); - return outputFile; - } - - private File getOutputFile(File imageDirectory){ - File outputFile; - do { - String outputFileName = "OGPImage." + FORMAT_SUFFIX; - outputFile = new File(imageDirectory, outputFileName); - } while (outputFile.exists()); - return outputFile; - } - - private void processLayer(LayerImage layerImage) { - //now we have everything we need to create a request - logger.debug("processing layer"); - BufferedImage currentImg = null; - File imgFile = null; - try { - imgFile = layerImage.getImageFileFuture().get(); - currentImg = ImageIO.read(imgFile); - } catch (Exception e) { - e.printStackTrace(); - } - - logger.debug("image retrieved"); - //this needs to be done for each image received - - //this defines opacity - float[] scales = { 1f, 1f, 1f, 1f}; - scales[3] = layerImage.getOpacity() / 100f; - //System.out.println(scales[3]); - float[] offsets = new float[4]; - RescaleOp rop = new RescaleOp(scales, offsets, null); - logger.info("drawing layer..."); - compositeImageGraphicsObj.drawImage(currentImg, rop, 0, 0); - //cleaning up temp file - imgFile.delete(); - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageDownloader.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageDownloader.java deleted file mode 100644 index a3f533d..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageDownloader.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.OpenGeoPortal.Proxy; - -import java.io.File; -import java.io.IOException; -import java.util.concurrent.Future; - -public interface ImageDownloader { - Future getImage(String baseUrl, String queryString) throws IOException; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageDownloaderImpl.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageDownloaderImpl.java deleted file mode 100644 index 0c3a2fc..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageDownloaderImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.OpenGeoPortal.Proxy; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.Future; - -import org.OpenGeoPortal.Utilities.Http.HttpRequester; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.scheduling.annotation.Async; -import org.springframework.scheduling.annotation.AsyncResult; - -public class ImageDownloaderImpl implements ImageDownloader { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired @Qualifier("httpRequester.generic") - private HttpRequester httpRequester; - - @Override - @Async - public Future getImage(String baseUrl, String queryString) throws IOException { - File tempFile = File.createTempFile("img", ".png"); - logger.info(baseUrl); - InputStream is = this.httpRequester.sendRequest(baseUrl, queryString, "GET"); - String contentType = this.httpRequester.getContentType(); - if (contentType.toLowerCase().contains("png")){ - FileUtils.copyInputStreamToFile(is, tempFile); - } else { - if ((contentType.toLowerCase().contains("xml"))||(contentType.toLowerCase().contains("html"))|| - (contentType.toLowerCase().contains("text"))){ - logger.error("Response content: " + IOUtils.toString(is)); - } - throw new IOException("Unexpected content-type: " + contentType); - } - return new AsyncResult(tempFile); - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageHandler.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageHandler.java deleted file mode 100644 index 08c08fb..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.OpenGeoPortal.Proxy; - -import java.util.UUID; - -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest; - -public interface ImageHandler { - - UUID requestImage(String sessionId, ImageRequest imageRequest); - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageHandlerImpl.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageHandlerImpl.java deleted file mode 100644 index c3c4cf9..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageHandlerImpl.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.OpenGeoPortal.Proxy; - -import java.util.UUID; - -import org.OpenGeoPortal.Download.RequestStatusManager; -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -public class ImageHandlerImpl implements ImageHandler { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private RequestStatusManager requestStatusManager; - @Autowired - private ImageCompositor imageCompositor; - - @Override - public UUID requestImage(String sessionId, ImageRequest imageRequest){ - UUID requestId = registerRequest(sessionId, imageRequest); - logger.debug("Image Request registered: " + requestId.toString()); - imageCompositor.createComposite(imageRequest); - return requestId; - } - - private UUID registerRequest(String sessionId, ImageRequest imageRequest) { - UUID requestId = UUID.randomUUID(); - requestStatusManager.addImageRequest(requestId, sessionId, imageRequest); - return requestId; - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/RestrictedWMSProxy.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/RestrictedWMSProxy.java deleted file mode 100644 index 553ef0d..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/RestrictedWMSProxy.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.OpenGeoPortal.Proxy; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.OpenGeoPortal.Security.OgpUserContext; -import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.HttpRequestHandler; - -@Deprecated -public class RestrictedWMSProxy implements HttpRequestHandler { - private GenericProxy genericProxy; - private String proxyTo; - @Autowired - private OgpUserContext ogpUserContext; - - //this needs to handle authentication if supplied a username and password - - public String getProxyTo() { - return proxyTo; - } - - public void setProxyTo(String proxyTo) { - this.proxyTo = proxyTo; - } - - public void setGenericProxy(GenericProxy genericProxy) { - this.genericProxy = genericProxy; - } - - public GenericProxy getGenericProxy() { - return this.genericProxy; - } - - /*private Boolean isLocallyAuthenticated(){ - try { - return SecurityContextHolder.getContext().getAuthentication().isAuthenticated(); - } catch (NullPointerException e){ - return false; - } - }*/ - - @Override - public void handleRequest(HttpServletRequest request, - HttpServletResponse response) throws ServletException, IOException { - // check authentication - if (ogpUserContext.isAuthenticatedLocally()){ - // forward the request to the protected GeoServer instance - System.out.println("executing WMS request to protected GeoServer: " - + request.getQueryString()); - String remoteUrl = this.proxyTo + "?" - + request.getQueryString(); - - this.genericProxy.proxyRequest(request, response, remoteUrl); - } else { - response.sendError(401); - } - - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/OgpUserContext.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Security/OgpUserContext.java deleted file mode 100644 index 91c2974..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/OgpUserContext.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.OpenGeoPortal.Security; - -public interface OgpUserContext { - //boolean authenticate(String username, String password); - boolean isAuthenticatedLocally(); -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/OgpUserContextImpl.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Security/OgpUserContextImpl.java deleted file mode 100644 index 292a513..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/OgpUserContextImpl.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.OpenGeoPortal.Security; - -import org.springframework.security.core.context.SecurityContextHolder; - -public class OgpUserContextImpl implements OgpUserContext { - - @Override - public boolean isAuthenticatedLocally() { - boolean authenticated = false; - try { - authenticated = SecurityContextHolder.getContext().getAuthentication().isAuthenticated(); - } catch (NullPointerException e){ - authenticated = false; - } - return authenticated; - } - - /*@Override - public boolean authenticate(String username, String password) { - // TODO Auto-generated method stub - return authenticationMethod.authenticate(username, password); - }*/ - - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/OgpConfigRetriever.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/OgpConfigRetriever.java deleted file mode 100644 index 3ec0aaf..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/OgpConfigRetriever.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.OpenGeoPortal.Solr; - -import java.io.IOException; -import java.util.Iterator; - -import org.OpenGeoPortal.Download.Config.ConfigRetriever; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.node.ArrayNode; - -public class OgpConfigRetriever extends ConfigRetriever implements - SearchConfigRetriever { - - public String getSearchUrl() throws IOException { - this.readConfigFile(); - JsonNode jsonObject = this.configContents.path("search"); - return jsonObject.path("serviceAddress").getTextValue(); - } - - public String getSearchPort() throws IOException { - this.readConfigFile(); - JsonNode jsonObject = this.configContents.path("search"); - int searchPort = jsonObject.path("servicePort").asInt(); - return Integer.toString(searchPort); - } - - public String getSearchType() throws IOException { - this.readConfigFile(); - JsonNode jsonObject = this.configContents.path("search"); - return jsonObject.path("serviceType").getTextValue(); - } - - public String getHome() throws IOException { - this.readConfigFile(); - return this.configContents.path("homeInstitution").getTextValue(); - } - - public Boolean isOgp() { - return true; - } - - public String getArbitrary(String configKey) throws Exception { - /* - * this only works for strings in the top level. should eventually be - * more generic - */ - this.readConfigFile(); - return this.configContents.path(configKey).getTextValue(); - } - - private String getProxy(String institution, String accessLevel, String serviceKey) - throws IOException { - this.readConfigFile(); - institution = institution.trim(); - accessLevel = accessLevel.trim(); - JsonNode allInstitutionsObject = this.configContents.path("institutions"); - JsonNode institutionObject = allInstitutionsObject.path(institution); - if (institutionObject.has("proxy")) { - JsonNode proxyObject = institutionObject.path("proxy"); - ArrayNode accessNode = (ArrayNode) proxyObject.path("accessLevel"); - Iterator accessIterator = accessNode.getElements(); - while (accessIterator.hasNext()){ - String currentValue = accessIterator.next().getTextValue(); - if (currentValue.equalsIgnoreCase(accessLevel)){ - return proxyObject.path(serviceKey).getTextValue(); - } - } - return null; - - } else { - return null; - } - } - - @Override - public String getWmsProxy(String institution, String accessLevel) - throws IOException { - return getProxy(institution, accessLevel, "wms"); - } - - @Override - public String getWfsProxy(String institution, String accessLevel) - throws IOException { - return getProxy(institution, accessLevel, "wfs"); - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SearchConfigRetriever.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SearchConfigRetriever.java deleted file mode 100644 index a707746..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SearchConfigRetriever.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.OpenGeoPortal.Solr; - -import java.io.IOException; - -public interface SearchConfigRetriever { - - String getSearchUrl() throws Exception; - - String getSearchPort() throws Exception; - - String getHome() throws Exception; - - String getArbitrary(String configKey) throws Exception; - - String getWmsProxy(String institution, String accessLevel) throws Exception; - - String getWfsProxy(String institution, String accessLevel) throws IOException; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/Searcher.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/Searcher.java deleted file mode 100644 index 10b6a2e..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/Searcher.java +++ /dev/null @@ -1,648 +0,0 @@ -package org.OpenGeoPortal.Solr; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.Calendar; -import java.util.Date; -import java.util.Vector; - -import javax.servlet.http.HttpServletRequest; - - -/** - * code to generate the elements in the Solr search query - * currently this class deals with spatial filtering: - * is a layer within a map - * is a layer within an expanded map - * does a layer cover a map - * does the map and layer intersect - * how close is the scale of the layer to the scale of the map - * - * this class also contains some static functions to deal with - * the next and previous buttons (setting startIndex and rows) - * sort order (sortColumn and sortOrder) and similar functions. - * These static functions sometimes take an HttpServletRequest - * object and therefore know the name of the parameter on the - * client side. - * - * this class is used by both the basic and advanced search - * - * @author smcdon08 - * - */ -@SuppressWarnings("unused") -public class Searcher -{ - - // values used to control boost - // adjusting them is a black art - String layerWithinMapBoost = "10.0"; - String layerMatchesScaleBoost = "15.0"; - String layerMatchesCenterBoost = "3.0"; - - String layerCoversMapBoost = "0.1"; - String layerWithinExpandedMapBoost = "4.0"; - String layerIntersectionScaleBoost = "2.0"; - - // Solr seems picky about encoding so we build the search strings with the following elements - public final static String asterik = "%2a"; - public final static String openParen = "%28"; - public final static String closeParen = "%29"; - public final static String openBracket = "%5B"; - public final static String closeBracket = "%5D"; - public final static String colon = "%3a"; - public final static String tilde = "%7e"; - public final static String comma = "%2c"; - public final static String space = "%20"; - public final static String equals = "%3D"; - - double mapMinX; - double mapMaxX; - double mapMinY; - double mapMaxY; - - /** - * pass in the bounding box for the displayed map - * @param minX - * @param maxX - * @param minY - * @param maxY - */ - public Searcher(double minX, double maxX, double minY, double maxY) - { - this.mapMinX = minX; - this.mapMaxX = maxX; - this.mapMinY = minY; - this.mapMaxY = maxY; - } - - /** - * return a Solr spatial search containing all elements - * @return - */ - public String geoSearch() - { - String geoFilter = layerWithinMapScore() + layerMatchesArea() + layerNearCenterLongitude() + layerNearCenterLatitude(); - return geoFilter; - } - - - /** - * compute a score for layers within the current map - * the layer's MinX and MaxX must be within the map extent in X - * and the layer's MinY and MaxY must be within the map extent in Y - * I had trouble using a range based test (e.g., MinX:[mapMinX+TO+mapMapX]) - * along with other scoring functions based on _val_. So, this function - * is like the other scoring functions and uses _val_. - * The Solr "sum" function returns 4 if the layer is contained within the map. - * The outer "map" converts 4 to 1 and anything else to 0. - * @return - */ - public String layerWithinMapScore() - { - String layerWithinMap = ""; - layerWithinMap += "product(" + layerWithinMapBoost + ",map(sum("; - layerWithinMap += "map(MinX," + mapMinX + "," + mapMaxX + ",1,0),"; - layerWithinMap += "map(MaxX," + mapMinX + "," + mapMaxX + ",1,0),"; - layerWithinMap += "map(MinY," + mapMinY + "," + mapMaxY + ",1,0),"; - layerWithinMap += "map(MaxY," + mapMinY + "," + mapMaxY + ",1,0))"; - layerWithinMap += ",4,4,1,0)))"; - layerWithinMap = "_val_:\"" + layerWithinMap + "\""; - return layerWithinMap; - - } - /** - * return a search element to identify layers completely within the displayed map - * @return Solr search clause - * @see layerIntersectsMapFilter() or layerIntersectsMapScore() or layerWithinMapScore() - * @deprecated either filter results with bounding box intersection or increase score with layerWithinMapScore() - */ - @Deprecated - //@see layerIntersectsMapFilter() or layerIntersectsMapScore - public String layerWithinMap() - { - String layerWithinMap = ""; - layerWithinMap = openParen; - layerWithinMap += "MinX" + colon + openBracket + mapMinX + "+TO+" + mapMaxX + closeBracket; - layerWithinMap += "+AND+MaxX" + colon + openBracket + mapMinX + "+TO+" + mapMaxX + closeBracket; - layerWithinMap += "+AND+MinY" + colon + openBracket + mapMinY + "+TO+" + mapMaxY + closeBracket; - layerWithinMap += "+AND+MaxY" + colon + openBracket + mapMinY + "+TO+" + mapMaxY + closeBracket; - layerWithinMap += closeParen; - layerWithinMap += "^" + layerWithinMapBoost; - return layerWithinMap; - } - - /** - * return a search element to identify layers that completely cover the displayed map - * @return Solr search clause - * @see layerIntersectsMapFilter() or layerIntersectsMapScore() - * @deprecated filter results with bounding box intersection, we don't need to boost layers that cover the map - */ - public String layerCoversMap() - { - String layerCoversMap = openParen; - layerCoversMap += "MinX" + colon + openBracket + "-181.+TO+" + mapMinX + closeBracket; - layerCoversMap += "+AND+MaxX" + colon + openBracket + mapMaxX + "+TO+181." + closeBracket; - layerCoversMap += "+AND+MinY"+ colon + openBracket + "-91.+TO+" + mapMinY + closeBracket; - layerCoversMap += "+AND+MaxY" + colon + openBracket + mapMaxY + "+TO+91." + closeBracket; - layerCoversMap += closeParen + "^" + layerCoversMapBoost; - return layerCoversMap; - } - - /** - * is the layer contained within a larger map with the same center - * currently we make the map 50% larger in both width and height - * @return Solr search clause - * @deprecated with bounding box intersection, we don't use this - */ - public String layerWithinExpandedMap() - { - double deltaX = Math.abs(mapMaxX - mapMinX); - double expandedMapMinX = mapMinX - (deltaX/2.); - double expandedMapMaxX = mapMaxX + (deltaX/2.); - double deltaY = Math.abs(mapMaxY - mapMinY); - double expandedMapMinY = mapMinY - (deltaY/2.); - double expandedMapMaxY = mapMaxY + (deltaY/2.); - String layerWithinMap = openParen + "MinX" + colon + openBracket + expandedMapMinX + "+TO+" + expandedMapMaxX + closeBracket; - layerWithinMap += "+AND+MaxX" + colon + openBracket + expandedMapMinX + "+TO+" + expandedMapMaxX + closeBracket; - layerWithinMap += "+AND+MinY" + colon + openBracket + expandedMapMinY + "+TO+" + expandedMapMaxY + closeBracket; - layerWithinMap += "+AND+MaxY" + colon + openBracket + expandedMapMinY + "+TO+" + expandedMapMaxY + closeBracket + closeParen - + "^" + layerWithinExpandedMapBoost; - return layerWithinMap; - } - - /** - * return a search element to boost the scores of layers whose scale matches the displayed map scale - * specifically, it compares their size in longitude - * @return - * @deprecated - * @see layerMatchesArea() - */ - public String layerMatchesScaleLongitude() - { - double deltaX = Math.abs(mapMaxX - mapMinX); - String layerMatchesScale = "_val_:\"product(" + layerMatchesScaleBoost - + ",recip(sum(abs(sum(sum(MaxX,product(-1,MinX)),-" + deltaX + ")),.01),1,1,1))\""; - return layerMatchesScale; - } - - /** - * - * @return - * @deprecated - * @see layerMatchesArea() - */ - public String layerMatchesScaleLatitude() - { - double deltaY = Math.abs(mapMaxY - mapMinY); - String layerMatchesScale = "_val_:\"product(" + layerMatchesScaleBoost - + ",recip(sum(abs(sum(sum(MaxY,product(-1,MinY)),-" + deltaY + ")),.01),1,1,1))\""; - return layerMatchesScale; - } - - /** - * score layer based on how close map center longitude is to the layer's center longitude - * @return - */ - public String layerNearCenterLongitude() - { - double centerX = (mapMaxX + mapMinX)/2.; - String layerMatchesCenter = "_val_:\"product(" + layerMatchesCenterBoost - + ",recip(abs(sub(product(sum(MaxX,MinX),.5)," + centerX + ")),1,1000,1000))\""; - return layerMatchesCenter; - } - - /** - * score layer based on how close map center latitude is to the layer's center latitude - * @return - */ - public String layerNearCenterLatitude() - { - double centerY = (mapMaxY + mapMinY)/2.; - String layerMatchesCenter = "_val_:\"product(" + layerMatchesCenterBoost - + ",recip(abs(sub(product(sum(MaxY,MinY),.5)," + centerY + ")),1,1000,1000))\""; - return layerMatchesCenter; - } - - - /** - * return a search element to boost the scores of layers whose scale matches the displayed map scale - * specifically, it compares their area - * @return - */ - public String layerMatchesArea() - { - double mapDeltaX = Math.abs(mapMaxX - mapMinX); - double mapDeltaY = Math.abs(mapMaxY - mapMinY); - double mapArea = (mapDeltaX * mapDeltaY); - System.out.println("map area = " + mapArea); - String layerMatchesArea = "_val_:\"product(" + layerMatchesScaleBoost - + ",recip(sum(abs(sub(Area," + mapArea + ")),.01),1,1000,1000))\""; - return layerMatchesArea; - } - - /** - * return a search element to detect intersecting layers - * computes intersection of axis aligned bounding boxes (AABB) using separating axis - * note that if the map covers the layer or if the map is contained within the layer, there is no separating axis - * so this function works for them as well. - * implementing separating axis on AABB in Solr's functional language (which lacks an if statement) - * is a little tricky so this function generates a complicated string - * - * - * some info on separating access on AABB see: - * http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php?page=3 - * - * this function returns something that looks like: - * product(2.0, - * map(sum(map(sub(abs(sub(-71.172866821289,CenterX)),sum(0.7539367675480051,HalfWidth)),0,400000,1,0), - * map(sub(abs(sub(42.3588141761575,CenterY)),sum(0.6900056205085008,HalfHeight)),0,400000,1,0)),0,0,1,0)) - * - * @return - */ - public String layerIntersectsMapAux() - { - double mapCenterX = (mapMaxX + mapMinX) / 2.; - double mapHalfWidth = (mapMaxX - mapMinX) / 2.; - double mapCenterY = (mapMaxY + mapMinY) / 2.; - double mapHalfHeight = (mapMaxY - mapMinY) / 2.; - - String centerDistanceX = "abs(sub(" + mapCenterX + ",CenterX))"; - String centerDistanceY = "abs(sub(" + mapCenterY + ",CenterY))"; - // the separatingAxis is positive if it is actually a separating axis (no intersection) - String separatingAxisX = "sub(" + centerDistanceX + ",sum(" + mapHalfWidth + ",HalfWidth))"; - String separatingAxisY = "sub(" + centerDistanceY + ",sum(" + mapHalfHeight + ",HalfHeight))"; - // separatingAxisFlag is either 0 or 1, 1 when a separating axis exists - String separatingAxisFlagX = "map(" + separatingAxisX + ",0,400000,1,0)"; - String separatingAxisFlagY = "map(" + separatingAxisY + ",0,400000,1,0)"; - // separatingAxisExists: 0 for no, 1 or 2 for yes - String separatingAxisExists = "sum(" + separatingAxisFlagX + "," + separatingAxisFlagY + ")"; - // separatingAxisExistsFlag: 0 if no separating axis (the boxes intersect so add to score) - // or 1 if axis exists (that is, the boxes don't intersect so don't add to score) - String separatingAxisExistsFlag = "map(" + separatingAxisExists + ",0,0,1,0)"; - String intersectionScore = "product(" + layerIntersectionScaleBoost + "," + separatingAxisExistsFlag + ")"; - return intersectionScore; - } - - /** - * return a Solr filter to find layers - * return a Solr frange expression that can be used with a "fq" clause - * frange takes the result of a Solr function and filters/clips layers based on a range - * @return - */ - public String layerIntersectsMapFilter() - { - String intersectionScore = layerIntersectsMapAux(); - String solrFunction = "{!frange+l" + equals + "1+u" + equals + "10}" + intersectionScore; - return solrFunction; - } - - /** - * return a Solr scoring clause to find layers - * @return a Solr _val_ expression that can be used with a "q" clause - */ - public String layerIntersectsMapScore() - { - String intersectionScore = layerIntersectsMapAux(); - String solrFunction = "_val_:\"" + intersectionScore + "\""; - return solrFunction; - } - - /** - * create a string with the Solr start and row parameters - * these attributes are used to specify which subset of the result set should be returned - * the request parameters must have the name startIndex and rows. - * @param request - * @return - */ - public static String resultSubset(HttpServletRequest request) - { - // specify which subset of search results to return, supports next/previous buttons - String startIndex$ = request.getParameter("startIndex"); - if (startIndex$ == null) startIndex$ = "0"; - startIndex$ = startIndex$.trim(); - String rows$ = request.getParameter("rows"); - if (rows$ == null) rows$ = "20"; - rows$ = rows$.trim(); - String returnValue = "start=" + startIndex$ + "&rows=" + rows$; - return returnValue; - } - - - - /** - * create a string with the Solr sort parameter - * @param request - * @return sort=LayerDisplayName+asc - */ - public static String sortOrder(HttpServletRequest request) - { - String sortColumn = request.getParameter("sortColumn"); - if (sortColumn == null) - sortColumn = "score"; - else if (sortColumn.equals("LayerDisplayName")) - sortColumn = "LayerDisplayNameSort"; - else if (sortColumn.equals("DataType")) - sortColumn = "DataTypeSort"; - else if (sortColumn.equals("Originator")) - sortColumn = "OriginatorSort"; - else if (sortColumn.equals("Publisher")) - sortColumn = "PublisherSort"; - else if (sortColumn.equals("Institution")) - sortColumn = "InstitutionSort"; - String sortOrder = request.getParameter("sortOrder"); - if (sortOrder == null) - sortOrder = "desc"; - String returnValue = "sort=" + sortColumn + "+" + sortOrder; - return returnValue; - } - - /** - * create the solr date search string from the request date parameters - * if not dates are specified, return empty string - * if only one date is specified, default values are generated for the other date - * default fromDate is 0001, default toDate is this year plus one - * dates sent to solr must be of the form 1995-12-31T23:59:59Z - * @param request - * @return - */ - public static String dateClause(HttpServletRequest request) - { - String dateSuffix = "-01-01T01:01:01Z"; - String fromDate = getRequestParameter(request, "dateFrom"); - String toDate = getRequestParameter(request, "dateTo"); - System.out.println("fromDate = " + fromDate +", toDate = " + toDate); - if ((fromDate == null) && (toDate == null)) - return ""; - if (fromDate == null) - fromDate = "0001"; - if (toDate == null) - { - // instead, should I just use the year 9999? what about Y10K? - Calendar now = Calendar.getInstance(); - int year = now.get(Calendar.YEAR); - toDate = Integer.toString(year) + 1; - } - String searchClause = "ContentDate" + colon - + openBracket + fromDate + dateSuffix + "+TO+" + toDate + dateSuffix + closeBracket; - return searchClause; - } - - /** - * returns the parameter from the request - * converts the value "undefined" to null - * @param request - * @param parameterName - * @return null or the string value - */ - public static String getRequestParameter(HttpServletRequest request, String parameterName) - { - String returnValue = request.getParameter(parameterName); - if (returnValue == null) - return returnValue; - if (returnValue.equals("undefined")) - return null; - returnValue = returnValue.trim(); - if (returnValue.length() == 0) - return null; - return returnValue; - } - - - - /** - * create a Solr filter string based on user's data type selections - * e.g., Raster, Paper Map, etc. - */ - public static String createDataTypeFilter(HttpServletRequest request) - { - // first, see what check boxes are on and store in vector - Vector dataTypes = new Vector(); - - String includeRaster = request.getParameter("typeRaster"); - if (includeRaster == null) includeRaster = ""; - if (includeRaster.equals("on")) - { - dataTypes.add("Raster"); - } - - String includeVector = request.getParameter("typeVector"); - if (includeVector == null) includeVector = ""; - if (includeVector.equals("on")) - { - dataTypes.add("Point"); - dataTypes.add("Line"); - dataTypes.add("Polygon"); - } - String includeScannedMap = request.getParameter("typeMap"); - if (includeScannedMap == null) includeScannedMap = ""; - if (includeScannedMap.equals("on")) - { - dataTypes.add("Paper+Map"); - } - - // now, convert data types to Solr filter - String dataTypeFilter = ""; - for (int i = 0 ; i < dataTypes.size() ; i++) - { - String currentType = dataTypes.get(i); - if (i > 0) - dataTypeFilter += "+OR+"; - dataTypeFilter += "DataType" + colon + currentType; - } - return dataTypeFilter; - } - - /** - * create a Solr filter string based on user's data source selections - * e.g., MIT, Harvard, etc. - */ - public static String createDataSourceFilter(HttpServletRequest request) - { - // first, see what check boxes are on and store in vector - Vector dataSources = new Vector(); - - String sourceHarvard = request.getParameter("sourceHarvard"); - if (sourceHarvard == null) sourceHarvard = ""; - if (sourceHarvard.equals("on")) - dataSources.add("Harvard"); - String sourceMit = request.getParameter("sourceMit"); - if (sourceMit == null) sourceMit = ""; - if (sourceMit.equals("on")) - dataSources.add("MIT"); - String sourceMassGis = request.getParameter("sourceMassGis"); - if (sourceMassGis == null) sourceMassGis = ""; - if (sourceMassGis.equals("on")) - dataSources.add("MassGis"); - String sourcePrinceton = request.getParameter("sourcePrinceton"); - if (sourcePrinceton == null) sourcePrinceton = ""; - if (sourcePrinceton.equals("on")) - dataSources.add("Princeton"); - String sourceTufts = request.getParameter("sourceTufts"); - if (sourceTufts == null) sourceTufts = ""; - if (sourceTufts.equals("on")) - dataSources.add("Tufts"); - - // now, convert data types to Solr filter - String dataSourceFilter = ""; - for (int i = 0 ; i < dataSources.size() ; i++) - { - String currentSource = dataSources.get(i); - if (i > 0) - dataSourceFilter += "+OR+"; - dataSourceFilter += "Institution" + colon + currentSource; - } - return dataSourceFilter; - } - - - public static String createPublisherFilter(HttpServletRequest request) - { - String temp = request.getParameter("publisher"); - String[] publishers = temp.split(" "); - String publishersFilter = ""; - for (int i = 0 ; i < publishers.length ; i++) - { - String currentSource = publishers[i]; - if (i > 0) - publishersFilter += "+OR+"; - publishersFilter += "Publisher" + colon + currentSource; - } - return publishersFilter; - } - - public static String createBasicKeywordFilter(HttpServletRequest request) - { - String searchTerm = request.getParameter("searchTerm"); - if (searchTerm == null) - return ""; - searchTerm = searchTerm.trim(); - if (searchTerm.length() == 0) - return ""; - String[] searchTerms = searchTerm.split(" "); - String keywordFilter = ""; - for (int i = 0 ; i < searchTerms.length ; i++) - { - String currentSearchTerm = searchTerms[i]; - if (i > 0) - keywordFilter += "+OR+"; - keywordFilter += "LayerDisplayName" + Searcher.colon + currentSearchTerm; - //solrQuery += "+OR+Institution" + Searcher.colon + currentSearchTerm + "^2"; - keywordFilter += "+OR+Publisher" + Searcher.colon + currentSearchTerm; - keywordFilter += "+OR+Originator" + Searcher.colon + currentSearchTerm; - //solrQuery += "+OR+DataType" + Searcher.colon + currentSearchTerm; - keywordFilter += "+OR+ThemeKeywords" + Searcher.colon + currentSearchTerm; - keywordFilter += "+OR+PlaceKeywords" + Searcher.colon + currentSearchTerm; - //geoFilter += "+OR+Abstract" + Searcher.colon + "'" + currentKeyword + "'" + "^0.5"; - } - return keywordFilter; - } - - public static String createBasicKeywordScore(HttpServletRequest request) - { - String searchTerm = request.getParameter("searchTerm"); - if (searchTerm == null) - return ""; - searchTerm = searchTerm.trim(); - if (searchTerm.length() == 0) - return ""; - String[] searchTerms = searchTerm.split(" "); - String keywordScore = ""; - for (int i = 0 ; i < searchTerms.length ; i++) - { - String currentSearchTerm = searchTerms[i]; - if (i > 0) - keywordScore += "+OR+"; - keywordScore += "LayerDisplayName" + Searcher.colon + currentSearchTerm + "^3"; - ////solrQuery += "+OR+Institution" + Searcher.colon + currentSearchTerm + "^2"; - //keywordScore += "+OR+Publisher" + Searcher.colon + currentSearchTerm; - //keywordScore += "+OR+Originator" + Searcher.colon + currentSearchTerm; - ////solrQuery += "+OR+DataType" + Searcher.colon + currentSearchTerm; - keywordScore += "+OR+ThemeKeywords" + Searcher.colon + currentSearchTerm + "^2"; - keywordScore += "+OR+PlaceKeywords" + Searcher.colon + currentSearchTerm + "^2"; - ////geoFilter += "+OR+Abstract" + Searcher.colon + "'" + currentKeyword + "'" + "^0.5"; - } - return keywordScore; - } - - /** - * return a Solr expression specifying which columns should be returned for a typical search - * @return - */ - public static String getColumnsForSearch() - { - String returnValue = "&fl=Name" + comma + "CollectionId" + comma + "Institution" - + comma + "Access" + comma + "DataType" + comma + "Availability" - + comma + "LayerDisplayName" + comma + "Publisher" + comma + "Originator" - + comma + "ThemeKeywords" + comma + "PlaceKeywords" + comma + "Location" - + comma + "MinX" + comma + "MaxX" + comma + "MinY" + comma + "MaxY" - + comma + "ContentDate" + comma + "LayerId"; - return returnValue; - } - - /** - * return a Solr expression specifying which columns should be returned on query for FGDC text - * @return - */ - public static String getColumnsForFgdcText() - { - String returnValue = "&fl=LayerId" + comma + "FgdcText"; - return returnValue; - } - - /** - * send query to Solr and return results - * @param serverName - * @param solrQuery - * @return - */ - public static String executeSolrSearch(String serverName, String solrQuery) - { - int port = 8480; - String url$ = "http://" + serverName + ":" + port + "/solr/select/?" + solrQuery - + "&debugQuery=off&version=2.2&rows=20&indent=on&wt=json&"; - try - { - URL url = new URL(url$); - InputStream inputStream = url.openStream(); - System.out.println("inputStream = " + inputStream); - InputStreamReader inputStreamReader = new InputStreamReader(inputStream); - BufferedReader bufferedReader = new BufferedReader(inputStreamReader); - String currentLine = bufferedReader.readLine(); - String json = ""; - while (currentLine != null) - { - currentLine = currentLine.replaceAll("\\n|\\r", " "); - json = json + currentLine; - if (currentLine.contains("LayerId")) - System.out.println(currentLine); - currentLine = bufferedReader.readLine(); - } - return json; - } - catch (IOException e) - { - System.out.println("error in exectuteSolrSearch with url = " + url$); - return ""; - } - - } - - - /** - * used for testing - * this is used in conjunction with a set of 14 test layers - * it validates the intersection code - * @param args - */ - public static void main(String[] args) - { - Searcher searcher = new Searcher(12, 25, 12, 15); - String intersection = searcher.layerIntersectsMapFilter(); - System.out.println("intersection = " + intersection); - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrClient.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrClient.java deleted file mode 100644 index 2f4d220..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrClient.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.OpenGeoPortal.Solr; - -import org.apache.solr.client.solrj.SolrServer; - -public interface SolrClient { - public SolrServer getSolrServer(); - public Boolean commit(); - public String delete(String[] layerIds) throws Exception; - public Boolean verifyIngest(String layerId) throws Exception; - public int add(SolrRecord solrRecord); - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrJClient.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrJClient.java deleted file mode 100644 index 21066e7..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrJClient.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.OpenGeoPortal.Solr; - -import java.io.IOException; -import java.net.MalformedURLException; - -import org.apache.solr.client.solrj.SolrQuery; -import org.apache.solr.client.solrj.SolrServer; -import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.impl.HttpSolrServer; -import org.apache.solr.client.solrj.response.QueryResponse; -import org.apache.solr.client.solrj.response.UpdateResponse; -import org.apache.solr.common.SolrException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SolrJClient implements SolrClient{ - private SearchConfigRetriever searchConfigRetriever; - private SolrServer solrServer; - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - //String solrUrl; - - - public SolrJClient(SearchConfigRetriever searchConfigRetriever) { - this.searchConfigRetriever = searchConfigRetriever; - init(); - } - - public void init() { - try { - String url = searchConfigRetriever.getSearchUrl(); - url = url.substring(0, url.indexOf("/select")); - //logger.info(url); - SolrServer server = new HttpSolrServer(url); - // Note that the following property could be set through JVM level arguments too - /*System.setProperty("solr.solr.home", "/home/shalinsmangar/work/oss/branch-1.3/example/solr"); - CoreContainer.Initializer initializer = new CoreContainer.Initializer(); - CoreContainer coreContainer = initializer.initialize(); - EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");*/ - this.solrServer = server; - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - logger.error("problem creating solr server"); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - logger.error("problem creating solr server"); - } - } - - public SolrServer getSolrServer(){ - return solrServer; - } - - public Boolean commit() { - try { - UpdateResponse updateResponse = solrServer.commit(); - return successResponse(updateResponse); - } catch (SolrServerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return false; - - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return false; - - } - - } - - private Boolean successResponse(UpdateResponse updateResponse){ - if (updateResponse.getStatus() == 200){ - return true; - } else { - return false; - } - } - - public String delete(String[] layerIds) throws Exception { - //List ids = Arrays.asList(layerIds); - String query = ""; - for (String layerId : layerIds){ - query += "LayerId:" + layerId.trim(); - query += " OR "; - } - if (query.length() > 0){ - query = query.substring(0, query.lastIndexOf(" OR ")); - } - //logger.info(query); - UpdateResponse updateResponse = solrServer.deleteByQuery(query); - //UpdateResponse updateResponse = solrServer.deleteById(ids); - if (successResponse(updateResponse)){ - return updateResponse.toString(); - } - return ""; - } - - public Boolean verifyIngest(String layerId) throws Exception { - SolrQuery query = new SolrQuery(); - query.setQuery("LayerId:" + layerId); - QueryResponse queryResponse = solrServer.query(query); - int numFound = Integer.getInteger(queryResponse.getResponseHeader().get("numFound").toString()); - if (numFound == 1){ - return true; - } else { - if (numFound > 1){ - throw new Exception("There is more than 1 layer with LayerId:" + layerId); - } else { - return false; - } - } - } - - public int add(SolrRecord solrRecord) { - int status = 0; - UpdateResponse updateResponse = null; - try { - logger.debug("begin adding solr record"); - updateResponse = solrServer.addBean(solrRecord); - status = updateResponse.getStatus(); - logger.debug("Status code: " + Integer.toString(status)); - - } catch (IOException e) { - logger.error("IO Exception trying to add Bean"); - e.printStackTrace(); - } catch (SolrServerException e) { - logger.error("SolrServer Exception trying to add Bean"); - e.printStackTrace(); - } catch (SolrException e){ - logger.error("SolrException: SolrRecord values =" + solrRecord.toString()); - } catch (Exception e){ - logger.error("Unknown Exception trying to add Bean"); - e.printStackTrace(); - } - logger.info("committing add to Solr"); - commit(); - return status; - }; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/GetDirectory.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/GetDirectory.java deleted file mode 100644 index 62d92aa..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/GetDirectory.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.OpenGeoPortal.Utilities; - -import java.io.File; -import java.io.IOException; - -import org.springframework.core.io.Resource; - -public class GetDirectory implements DirectoryRetriever { - private static final String DOWNLOAD_DIRECTORY = "download"; - Resource resource; - - - public void setResource(Resource resource){ - this.resource = resource; - } - - /** - * a method to create a directory to put downloaded files into, if it doesn't already exist - * @throws IOException - * - */ - public File getDirectory(String directoryName) throws IOException{ - //check permissions - - String directoryString = this.resource.getFile().getParentFile().getParentFile().getAbsolutePath(); - directoryString += "/" + directoryName; - //System.out.println(directoryString); - File theDirectory = new File(directoryString); - - if (!theDirectory.exists()){ - theDirectory.mkdir(); - } - - if (!theDirectory.canRead() || !theDirectory.canWrite()){ - throw new IOException("Download directory is inaccessible."); - } else { - return theDirectory; - } - } - - public File getDownloadDirectory() { - try { - File theDirectory = this.getDirectory(DOWNLOAD_DIRECTORY); - return theDirectory; - } catch (IOException e) { - // TODO Auto-generated catch block - System.out.println("The directory \"" + DOWNLOAD_DIRECTORY + "\" could not be retrieved."); - return null; - } - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/OgpHttpClient.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/OgpHttpClient.java deleted file mode 100644 index 97eb48b..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/OgpHttpClient.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.OpenGeoPortal.Utilities.Http; - -import org.apache.http.client.HttpClient; - -public interface OgpHttpClient { - HttpClient getHttpClient(); -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/PoolingHttpClient.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/PoolingHttpClient.java deleted file mode 100644 index d359a25..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/PoolingHttpClient.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.OpenGeoPortal.Utilities.Http; - -import org.apache.http.client.HttpClient; -import org.apache.http.conn.scheme.PlainSocketFactory; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.scheme.SchemeRegistry; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.PoolingClientConnectionManager; -import org.apache.http.params.CoreConnectionPNames; -import org.apache.http.params.CoreProtocolPNames; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PoolingHttpClient implements OgpHttpClient { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - private PoolingClientConnectionManager connectionManager; - private HttpClient client; - - PoolingHttpClient(){ - SchemeRegistry schemeRegistry = new SchemeRegistry(); - schemeRegistry.register( - new Scheme("http", 80, PlainSocketFactory.getSocketFactory())); - schemeRegistry.register( - new Scheme("https", 443, SSLSocketFactory.getSocketFactory())); - connectionManager = new PoolingClientConnectionManager(schemeRegistry); - /* - * - * - -CoreConnectionPNames.TCP_NODELAY='http.tcp.nodelay': determines whether Nagle's algorithm is to be used. Nagle's algorithm tries to conserve bandwidth by minimizing the number of segments that are sent. When applications wish to decrease network latency and increase performance, they can disable Nagle's algorithm (that is enable TCP_NODELAY. Data will be sent earlier, at the cost of an increase in bandwidth consumption. This parameter expects a value of type java.lang.Boolean. If this parameter is not set, TCP_NODELAY will be enabled (no delay). - -CoreConnectionPNames.SOCKET_BUFFER_SIZE='http.socket.buffer-size': determines the size of the internal socket buffer used to buffer data while receiving / transmitting HTTP messages. This parameter expects a value of type java.lang.Integer. If this parameter is not set, HttpClient will allocate 8192 byte socket buffers. - - * - * - */ - // Increase max total connection to 200 - //cm.setMaxTotal(200); - // Increase default max connection per route to 20 - //cm.setDefaultMaxPerRoute(20); - // Increase max connections for localhost:80 to 50 - //HttpHost localhost = new HttpHost("locahost", 80); - //cm.setMaxPerRoute(new HttpRoute(localhost), 50); - client = new DefaultHttpClient(connectionManager); - client.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8"); - client.getParams().setParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 16384); - } - - @Override - public HttpClient getHttpClient() { - return client; - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/LinkShortenReturnGoogle.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/LinkShortenReturnGoogle.java deleted file mode 100644 index bc406de..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/LinkShortenReturnGoogle.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.OpenGeoPortal.Utilities; - -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; - -@JsonIgnoreProperties(ignoreUnknown=true) -public class LinkShortenReturnGoogle { - /*{ - "kind": "urlshortener#url", - "id": "http://goo.gl/fbsS", - "longUrl": "http://www.google.com/" -} -*/ @JsonProperty - private String kind; - @JsonProperty - private String id; - @JsonProperty - private String longUrl; - /* - * - * { - "error": { - "errors": [ - { - "domain": "global", - "reason": "required", - "message": "Required", - "locationType": "parameter", - "location": "resource.longUrl" - } - ], - "code": 400, - "message": "Required" - } - } - * - * - * - */ - /* public static class Error { - private String code; - private String message; - - public void setCode(String code){ - this.code = code; - } - public String getCode(){ - return this.code; - } - - public void setMessage(String message){ - this.message = message; - } - public String getMessage() { - return this.message; - } - }*/ - public void setKind (String kind){ - this.kind = kind; - } - public String getKind(){ - return this.kind; - } - public void setId (String id){ - this.id = id; - } - public String getId (){ - return this.id; - } - public void setLongUrl (String longUrl){ - this.longUrl = longUrl; - } - public String getLongUrl (){ - return this.longUrl; - } - -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/ParseJSONSolrLocationField.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/ParseJSONSolrLocationField.java deleted file mode 100644 index 7a65b08..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/ParseJSONSolrLocationField.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.OpenGeoPortal.Utilities; - -import java.io.IOException; - -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonProcessingException; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.node.ArrayNode; - -public final class ParseJSONSolrLocationField { - - public static String getWmsUrl(String locationField){ - JsonNode rootNode = parseLocationField(locationField); - ArrayNode urls = (ArrayNode) rootNode.path("wms"); - return urls.get(0).asText(); - } - - public static String getTilecacheUrl(String locationField){ - JsonNode rootNode = parseLocationField(locationField); - ArrayNode urls = (ArrayNode) rootNode.path("tilecache"); - return urls.get(0).asText(); - } - - public static String getWfsUrl(String locationField){ - JsonNode rootNode = parseLocationField(locationField); - String wfsURL = rootNode.path("wfs").getTextValue(); - return wfsURL; - } - - public static String getWcsUrl(String locationField){ - JsonNode rootNode = parseLocationField(locationField); - String wfsURL = rootNode.path("wcs").getTextValue(); - return wfsURL; - } - - public static String getServiceStartUrl(String locationField){ - JsonNode rootNode = parseLocationField(locationField); - String wfsURL = rootNode.path("serviceStart").getTextValue(); - return wfsURL; - } - - public static String getDownloadUrl(String locationField){ - JsonNode rootNode = parseLocationField(locationField); - String wfsURL = rootNode.path("download").getTextValue(); - return wfsURL; - } - - private static JsonNode parseLocationField(String locationField){ - ObjectMapper mapper = new ObjectMapper(); - JsonNode rootNode = null; - try { - rootNode = mapper.readTree(locationField); - } catch (JsonProcessingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return rootNode; - - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/QuickDownload.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/QuickDownload.java deleted file mode 100644 index d5ef0b1..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/QuickDownload.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.OpenGeoPortal.Utilities; - -import java.io.File; - -import org.OpenGeoPortal.Layer.BoundingBox; - -public interface QuickDownload { - public File downloadZipFile(String layerId, BoundingBox bounds) throws Exception; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/UrlShortener.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/UrlShortener.java deleted file mode 100644 index 9a82b2f..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/UrlShortener.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.OpenGeoPortal.Utilities; - -public interface UrlShortener { - public String retrieveShortLink(String longUrl) throws Exception; -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/UrlShortenerGoogle.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/UrlShortenerGoogle.java deleted file mode 100644 index d863027..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/UrlShortenerGoogle.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.OpenGeoPortal.Utilities; - -import java.util.ArrayList; -import java.util.List; - -import org.OpenGeoPortal.Solr.SearchConfigRetriever; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; -import org.springframework.web.client.RestTemplate; - -public class UrlShortenerGoogle implements UrlShortener { - private String url = "https://www.googleapis.com/urlshortener/v1/url?key="; - private SearchConfigRetriever searchConfigRetriever; - - public void setSearchConfigRetriever(SearchConfigRetriever searchConfigRetriever){ - this.searchConfigRetriever = searchConfigRetriever; - } - - public SearchConfigRetriever getSearchConfigRetriever(){ - return this.searchConfigRetriever; - } - - public String retrieveShortLink(String longUrl) throws Exception{ - /* - * /*POST https://www.googleapis.com/urlshortener/v1/url - Content-Type: application/json - - {"longUrl": "http://www.google.com/"} - */ - RestTemplate template = new RestTemplate(); - List> messageConverters = new ArrayList>(); - messageConverters.add(new MappingJacksonHttpMessageConverter()); - template.setMessageConverters(messageConverters); - //now we need to add the parameters - String apiKey = this.searchConfigRetriever.getArbitrary("googleAPIKey"); - - LinkShortenRequestGoogle postObject = new LinkShortenRequestGoogle(longUrl); - LinkShortenReturnGoogle result = template.postForObject(url + apiKey, postObject, LinkShortenReturnGoogle.class); - - return result.getId(); - } -} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/ZipFilePackager.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/ZipFilePackager.java deleted file mode 100644 index 97fc112..0000000 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/ZipFilePackager.java +++ /dev/null @@ -1,227 +0,0 @@ -package org.OpenGeoPortal.Utilities; - -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Set; - -import org.apache.commons.compress.archivers.ArchiveEntry; -import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; -import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; -import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; -import org.apache.commons.compress.archivers.zip.ZipFile; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ZipFilePackager{ - /** - * Adds a set of files to a zip archive. - * @param Set filesToPackage - * @param File zipArchive - * - * @throws FileNotFoundException - */ - final static Logger logger = LoggerFactory.getLogger(ZipFilePackager.class.getName()); - - public static File zipUpFile(File fileToZip) throws IOException{ - String zipFileName = fileToZip.getName() + ".zip"; - File zipFile = new File(fileToZip.getParent(), zipFileName); - ZipArchiveOutputStream newZipStream = new ZipArchiveOutputStream(zipFile); - //add this uncompressed file to the archive - int bytesRead; - byte[] buffer = new byte[1024 * 1024]; - - ZipArchiveEntry zipEntry = new ZipArchiveEntry(fileToZip.getName()); - newZipStream.putArchiveEntry(zipEntry); - FileInputStream currentFileStream = new FileInputStream(fileToZip); - while ((bytesRead = currentFileStream.read(buffer))!= -1) { - newZipStream.write(buffer, 0, bytesRead); - } - newZipStream.closeArchiveEntry(); - newZipStream.close(); - currentFileStream.close(); - logger.info("Deleting: " + fileToZip.getName()); - fileToZip.delete(); - return zipFile; - } - - public static void addFilesToArchive(Set filesToPackage, File zipArchive) throws IOException { - if (filesToPackage.isEmpty()){ - //if there are no files, don't do anything. - logger.error("No files to package."); - return; - } - if (filesToPackage.size() == 1){ - File returnFile = filesToPackage.iterator().next(); - if (returnFile.getName().toLowerCase().endsWith(".zip")){ - logger.debug("Only 1 zip file...no need to process"); - returnFile.renameTo(zipArchive); - return; - } - } - byte[] buffer = new byte[1024 * 1024]; - - ZipArchiveOutputStream newZipStream = new ZipArchiveOutputStream(zipArchive); - int zipFileCounter = 0; - for (File currentFile : filesToPackage){ - try{ - FileInputStream currentFileStream = new FileInputStream(currentFile); - zipFileCounter++; - if (!currentFile.getName().toLowerCase().endsWith(".zip")){ - logger.debug("Adding uncompressed file..."); - //add this uncompressed file to the archive - int bytesRead; - String entryName = currentFile.getName(); - logger.debug("Zipping: " + entryName); - ZipArchiveEntry zipEntry = new ZipArchiveEntry(entryName); - newZipStream.putArchiveEntry(zipEntry); - while ((bytesRead = currentFileStream.read(buffer))!= -1) { - newZipStream.write(buffer, 0, bytesRead); - } - newZipStream.closeArchiveEntry(); - } else { - logger.debug("Adding entries from compressed file..."); - //read the entries from the zip file and copy them to the new zip archive - //so that we don't have to recompress them. - ZipArchiveInputStream currentZipStream = new ZipArchiveInputStream(currentFileStream); - ArchiveEntry currentEntry; - while ((currentEntry = currentZipStream.getNextEntry()) != null) { - String entryName = currentEntry.getName(); - logger.debug("Zipping: " + entryName); - ZipArchiveEntry zipEntry = new ZipArchiveEntry(entryName); - try { - newZipStream.putArchiveEntry(zipEntry); - } catch (Exception e){ - //duplicate names should never happen. - entryName = Math.round(Math.random() * 10000) + "_" + entryName; - ZipArchiveEntry zipEntry2 = new ZipArchiveEntry(entryName); - newZipStream.putArchiveEntry(zipEntry2); - } - int bytesRead; - while ((bytesRead = currentZipStream.read(buffer))!= -1) { - newZipStream.write(buffer, 0, bytesRead); - } - newZipStream.closeArchiveEntry(); - } - currentZipStream.close(); - } - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } finally { - //always delete the file - logger.debug("Deleting: " + currentFile.getName()); - currentFile.delete(); - - } - } - - if (zipFileCounter > 0){ - try { - newZipStream.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - //long endTime = System.currentTimeMillis(); - //logger2.info(zipFileCounter + " file(s) zipped in " + (endTime - startTime) + " milliseconds."); - } - - /*public static Set unarchiveFiles(File zippedFile) throws Exception { - ZipFile zipFile = new ZipFile(zippedFile); - zipFile. - ZipArchiveEntry entry = zipFile.getEntry(name); - InputStream content = zipFile.getInputStream(entry); - try { - READ UNTIL content IS EXHAUSTED - } finally { - content.close(); - } - }*/ - public static Set unarchiveFiles(File zipArchive) throws Exception { - Set unarchivedFiles = new HashSet(); - try{ - if (!zipArchive.canRead()){ - if (!zipArchive.setReadable(true)){ - throw new IOException("File is not readable"); - } - } - String fileName = zipArchive.getName(); - File containerDir; - if (fileName.endsWith(".zip")){ - fileName = fileName.substring(0, fileName.lastIndexOf(".zip")); - containerDir = new File(zipArchive.getParentFile(), fileName); - containerDir.mkdir(); - } else { - throw new IOException("Not a zipfile!"); - } - ZipFile zipFile = new ZipFile(zipArchive); - Enumeration entries = zipFile.getEntriesInPhysicalOrder(); - - while (entries.hasMoreElements()) { - ZipArchiveEntry currentEntry = entries.nextElement(); - String entryName = currentEntry.getName(); - logger.debug("Current entry: " + entryName); - try { - logger.debug(zipArchive.getParent() + "/" + currentEntry.getName()); - File destFile = new File(containerDir, currentEntry.getName()); - if (currentEntry.isDirectory()){ - destFile.mkdir(); - logger.debug("created directory: " + destFile.getAbsolutePath()); - // create the parent directory structure if needed - } else { - File parentDir = destFile.getParentFile(); - if (!parentDir.exists()){ - parentDir.mkdir(); - } - destFile.createNewFile(); - logger.debug("created file: " + destFile.getAbsolutePath()); - copyInputStream(zipFile.getInputStream(currentEntry), - new BufferedOutputStream(new FileOutputStream(destFile))); - unarchivedFiles.add(destFile); - logger.info("Unzipped file : " + destFile.getName()); - } - } catch (Exception e){ - e.printStackTrace(); - logger.error("zip exception:" + e.getMessage()); - break; - } - } - - zipFile.close(); - - } catch (FileNotFoundException e) { - logger.error("file not found exception"); - //e.printStackTrace(); - } catch (IOException e) { - logger.error("IO exception"); - //e.printStackTrace(); - } - return unarchivedFiles; - } - - - - public static final void copyInputStream(InputStream in, OutputStream out) - throws IOException - { - byte[] buffer = new byte[2048]; - int len; - while((len = in.read(buffer)) >= 0) - out.write(buffer, 0, len); - in.close(); - out.close(); - } -} diff --git a/geoportal_1/src/main/java/org/opengeoportal/HomeController.java b/geoportal_1/src/main/java/org/opengeoportal/HomeController.java new file mode 100644 index 0000000..fcd6890 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/HomeController.java @@ -0,0 +1,97 @@ +package org.opengeoportal; + +import java.util.HashSet; +import java.util.Set; + +import org.opengeoportal.config.ogp.OgpConfig; +import org.opengeoportal.config.ogp.OgpConfigRetriever; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class HomeController { + @Autowired + private OgpConfigRetriever ogpConfigRetriever; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @RequestMapping(value={"/index", "/"}, method=RequestMethod.GET) + public ModelAndView getHomePage(@RequestParam(value="ogpids", defaultValue = "") Set layerIds, + @RequestParam(value="bbox", defaultValue = "-180,-90,180,90") String bbox, + @RequestParam(value="layer[]", defaultValue = "") Set layers, + @RequestParam(value="minX", defaultValue = "-180") String minx, + @RequestParam(value="maxX", defaultValue = "180") String maxx, + @RequestParam(value="minY", defaultValue = "-90") String miny, + @RequestParam(value="maxY", defaultValue = "90") String maxy, + @RequestParam(value="dev", defaultValue = "false") Boolean isDev) throws Exception { + //@RequestParam("ogpids") Set layerIds, ..should be optional. also a param to set dev vs. prod + //create the model to return + ModelAndView mav = new ModelAndView("ogp_home"); + + mav.addObject("dev", isDev); + + //if ogpids exists, add them to the Model + + if (!layerIds.isEmpty()){ + + mav.addObject("shareIds", getQuotedSet(layerIds)); + mav.addObject("shareBbox", bbox); + } else if (!layers.isEmpty()){ + //support old style share just in case + mav.addObject("shareIds", getQuotedSet(layers)); + mav.addObject("shareBbox", minx + "," + miny + "," + maxx + "," + maxy); + } else { + //default values + mav.addObject("shareIds", layerIds); + mav.addObject("shareBbox", bbox); + } + + + + addConfig(mav); + + //Debugging + /*Iterator> iter = mav.getModelMap().entrySet().iterator(); + while (iter.hasNext()){ + Entry stuff = iter.next(); + logger.info(stuff.getKey()); + logger.info((String) stuff.getValue()); + }*/ + return mav; + + } + + private Set getQuotedSet(Set uqSet){ + Set quotedSet = new HashSet(); + for (String item: uqSet){ + quotedSet.add("\"" + item + "\""); + } + + return quotedSet; + } + + private void addConfig(ModelAndView mav){ + OgpConfig conf = ogpConfigRetriever.getConfig(); + + mav.addObject("titlePrimary", conf.getPageTitlePrimary()); + mav.addObject("titleOffset", conf.getPageTitleOffset()); + + mav.addObject("extraJs", conf.getJsLocalized()); // + mav.addObject("extraCss", conf.getCssLocalized()); // + + mav.addObject("searchUrl", conf.getSearchUrl().toString()); + mav.addObject("analyticsId", conf.getAnalyticsId()); + + mav.addObject("loginRepository", conf.getLoginConfig().getRepositoryId()); + mav.addObject("loginType", conf.getLoginConfig().getType()); + mav.addObject("loginUrl", conf.getLoginConfig().getUrl()); + mav.addObject("secureDomain", conf.getLoginConfig().getSecureDomain()); + + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/admin/AdminController.java b/geoportal_1/src/main/java/org/opengeoportal/admin/AdminController.java new file mode 100644 index 0000000..8edf04a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/admin/AdminController.java @@ -0,0 +1,40 @@ +package org.opengeoportal.admin; + +import java.util.LinkedHashMap; +import java.util.Map; + + +import org.opengeoportal.config.search.SearchConfigRetriever; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping("/admin") +public class AdminController { + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + SearchConfigRetriever searchConfigRetriever; + + @RequestMapping(value="setSearch", method=RequestMethod.GET, produces="application/json") + public @ResponseBody Map setSearchUrl(@RequestParam("url") String url) throws Exception { + Boolean success = false; + try { + //searchConfigRetriever.setSearchUrl(url); + success = true; + } catch (Exception e){ + logger.error("Problem setting solr url: " + url); + } + Map responseMap = new LinkedHashMap(); + responseMap.put("success", success); + return responseMap; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/ConfigController.java b/geoportal_1/src/main/java/org/opengeoportal/config/ConfigController.java new file mode 100644 index 0000000..1319180 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/ConfigController.java @@ -0,0 +1,54 @@ +package org.opengeoportal.config; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.opengeoportal.config.ogp.OgpConfig; +import org.opengeoportal.config.ogp.OgpConfigRetriever; +import org.opengeoportal.config.proxy.ProxyConfig; +import org.opengeoportal.config.proxy.ProxyConfigRetriever; +import org.opengeoportal.config.repositories.RepositoryConfig; +import org.opengeoportal.config.repositories.RepositoryConfigRetriever; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping("/config") +public class ConfigController { + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + RepositoryConfigRetriever repositoryConfigRetriever; + + @Autowired + OgpConfigRetriever ogpConfigRetriever; + + @Autowired + ProxyConfigRetriever proxyConfigRetriever; + + @RequestMapping(value="repositories", method=RequestMethod.GET, produces="application/json") + public @ResponseBody List getRepositoryConfig() throws Exception { + + return repositoryConfigRetriever.getConfig(); + } + + @RequestMapping(value="general", method=RequestMethod.GET, produces="application/json") + public @ResponseBody OgpConfig getSearchConfig() throws Exception { + + return ogpConfigRetriever.getConfig(); + } + + @RequestMapping(value="proxy", method=RequestMethod.GET, produces="application/json") + public @ResponseBody List getProxyConfig() throws Exception { + //must only serve a reduced version...we don't want to hand out internal addresses/credentials to the client + return proxyConfigRetriever.getPublicConfig(); + + } +} \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/PropertiesFile.java b/geoportal_1/src/main/java/org/opengeoportal/config/PropertiesFile.java new file mode 100644 index 0000000..624e561 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/PropertiesFile.java @@ -0,0 +1,57 @@ +package org.opengeoportal.config; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.Resource; + +public class PropertiesFile { + Properties properties; + Resource resource;// ogp.properties + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public void setResource(Resource resource){ + this.resource = resource; + } + + public void refreshProperties() throws IOException { + readProperties(); + } + + private void readProperties() throws IOException{ + InputStream is = null; + try{ + properties = new Properties(); + is = resource.getInputStream(); + properties.load(is); + } finally { + IOUtils.closeQuietly(is); + } + } + + public String getProperty(String propertyName) throws IOException{ + if (properties == null){ + readProperties(); + } + return properties.getProperty(propertyName); + } + + public Properties getProperties() throws IOException { + if (properties == null){ + readProperties(); + } + return properties; + } + + public String[] getPropertyArray(String propertyName) throws IOException { + return this.getProperty(propertyName).split(","); + } + + public String getProperty(String propertyKey, String defaultValue) { + return properties.getProperty(propertyKey, defaultValue); + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfig.java b/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfig.java new file mode 100644 index 0000000..394ce26 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfig.java @@ -0,0 +1,108 @@ +package org.opengeoportal.config.ogp; + +import java.net.URL; + +public class OgpConfig { +/* + * really a catch-all for the other stuff the web app needs. + * + * + */ + + String pageTitlePrimary; + String pageTitleOffset; + String jsLocalized; + String cssLocalized; + URL searchUrl; + String analyticsId; + LoginConfig loginConfig = new LoginConfig(); + + public String getPageTitlePrimary() { + return pageTitlePrimary; + } + + public void setPageTitlePrimary(String pageTitle) { + this.pageTitlePrimary = pageTitle; + } + + public String getPageTitleOffset() { + return pageTitleOffset; + } + + public void setPageTitleOffset(String pageTitleOffset) { + this.pageTitleOffset = pageTitleOffset; + } + + public String getJsLocalized() { + return jsLocalized; + } + + public void setJsLocalized(String jsLocalized) { + this.jsLocalized = jsLocalized; + } + + public String getCssLocalized() { + return cssLocalized; + } + + public void setCssLocalized(String cssLocalized) { + this.cssLocalized = cssLocalized; + } + + public URL getSearchUrl() { + return searchUrl; + } + + public void setSearchUrl(URL searchUrl) { + this.searchUrl = searchUrl; + } + + public String getAnalyticsId() { + return analyticsId; + } + + public void setAnalyticsId(String analyticsId) { + this.analyticsId = analyticsId; + } + + public LoginConfig getLoginConfig() { + return loginConfig; + } + + public void setLoginConfig(LoginConfig loginConfig) { + this.loginConfig = loginConfig; + } + + public class LoginConfig { + String repositoryId; + String type; + String url; + String secureDomain; + + public String getRepositoryId() { + return repositoryId; + } + public void setRepositoryId(String repositoryId) { + this.repositoryId = repositoryId; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getUrl() { + return url; + } + public void setUrl(String url) { + this.url = url; + } + public String getSecureDomain() { + return secureDomain; + } + public void setSecureDomain(String secureDomain) { + this.secureDomain = secureDomain; + } + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfigRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfigRetriever.java new file mode 100644 index 0000000..0a16b0c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfigRetriever.java @@ -0,0 +1,13 @@ +package org.opengeoportal.config.ogp; + + +public interface OgpConfigRetriever { + + OgpConfig getConfig(); + + OgpConfig load() throws Exception; + + String getPropertyWithDefault(String propertyName, + String defaultPropertyValue); + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfigRetrieverFromProperties.java b/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfigRetrieverFromProperties.java new file mode 100644 index 0000000..fd66f03 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/ogp/OgpConfigRetrieverFromProperties.java @@ -0,0 +1,141 @@ +package org.opengeoportal.config.ogp; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Properties; + +import org.apache.commons.lang3.StringUtils; +import org.opengeoportal.config.PropertiesFile; +import org.opengeoportal.config.ogp.OgpConfig.LoginConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class OgpConfigRetrieverFromProperties implements OgpConfigRetriever { + + //property keys + private static final String ANALYTICS_KEY = "apikey.analytics"; + private static final String TITLE_PRIMARY = "ogp.pageTitle.primary"; + private static final String TITLE_OFFSET = "ogp.pageTitle.offset"; + private static final String EXTRA_JS = "ogp.jsLocalized"; + private static final String EXTRA_CSS = "ogp.cssLocalized"; + private static final String EXTERNAL_SEARCH_URL = "solr.url.external"; + private static final String LOGIN_REPOSITORY = "login.repository"; + private static final String LOGIN_TYPE = "login.type"; + private static final String LOGIN_URL = "login.url"; + private static final String SECURE_DOMAIN = "login.secureDomain"; + + //default values + private static final String TITLE_PRIMARY_DEFAULT = "Open"; + private static final String TITLE_OFFSET_DEFAULT = "Geoportal"; + + private static final String LOGIN_TYPE_DEFAULT = "form"; + private static final String LOGIN_URL_DEFAULT = "login"; + + + + PropertiesFile propertiesFile; + Properties props; + OgpConfig ogpConfig; + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public PropertiesFile getPropertiesFile() { + return propertiesFile; + } + + public void setPropertiesFile(PropertiesFile propertiesFile) { + this.propertiesFile = propertiesFile; + } + + + @Override + public OgpConfig getConfig() { + return ogpConfig; + } + + public void setOgpConfig(OgpConfig ogpConfig) { + this.ogpConfig = ogpConfig; + } + + @Override + public OgpConfig load() throws Exception { + props = propertiesFile.getProperties(); + + ogpConfig = new OgpConfig(); + + URL extUrl = null; + if (props.containsKey(EXTERNAL_SEARCH_URL)){ + String extSearch = props.getProperty(EXTERNAL_SEARCH_URL); + //add /select, remove trailing slash + if (extSearch.endsWith("/")){ + extSearch = extSearch.substring(0, extSearch.lastIndexOf("/")); + } + if (!extSearch.endsWith("select")){ + extSearch += "/select"; + } + + try{ + extUrl = new URL(extSearch); + ogpConfig.setSearchUrl(extUrl); + } catch (MalformedURLException e){ + throw new Exception("External Search URL ['property " + EXTERNAL_SEARCH_URL + "'] is malformed!"); + } + } else { + throw new Exception("Must set a search URL!"); + } + + + String analyticsKey = getPropertyWithDefault(ANALYTICS_KEY, ""); + ogpConfig.setAnalyticsId(analyticsKey); + + String pageTitlePrimary = getPropertyWithDefault(TITLE_PRIMARY, TITLE_PRIMARY_DEFAULT); + ogpConfig.setPageTitlePrimary(pageTitlePrimary); + + String pageTitleOffset = getPropertyWithDefault(TITLE_OFFSET, TITLE_OFFSET_DEFAULT); + ogpConfig.setPageTitleOffset(pageTitleOffset); + + String extraJs = getPropertyWithDefault(EXTRA_JS, ""); + ogpConfig.setJsLocalized(extraJs); + + String extraCss = getPropertyWithDefault(EXTRA_CSS, ""); + ogpConfig.setCssLocalized(extraCss); + + + LoginConfig logConf = ogpConfig.getLoginConfig(); + + //This should throw an error if LOGIN_REPOSITORY is not set properly + String val = getPropertyWithDefault(LOGIN_REPOSITORY, ""); + if (StringUtils.isNotEmpty(val)){ + logConf.setRepositoryId(val); + } else { + throw new Exception("Must set a value for Login Repository! ['" + LOGIN_REPOSITORY + "']"); + } + + String typeVal = getPropertyWithDefault(LOGIN_TYPE, LOGIN_TYPE_DEFAULT); + logConf.setType(typeVal); + + String urlVal = getPropertyWithDefault(LOGIN_URL, LOGIN_URL_DEFAULT); + logConf.setUrl(urlVal); + + String sdVal = getPropertyWithDefault(SECURE_DOMAIN, ""); ; //should default to current domain with https:; for now let the client do this + logConf.setSecureDomain(sdVal); + + + return ogpConfig; + } + + @Override + public String getPropertyWithDefault(String propertyName, String defaultPropertyValue){ + String val = null; + if (props.containsKey(propertyName) && StringUtils.isNotEmpty(props.getProperty(propertyName))){ + val = props.getProperty(propertyName); //default to type form + } else { + + logger.warn(propertyName + " not set. Using default value '" + defaultPropertyValue + "'."); + val = defaultPropertyValue; + } + + return val; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/proxy/InternalServerMapping.java b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/InternalServerMapping.java new file mode 100644 index 0000000..191d733 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/InternalServerMapping.java @@ -0,0 +1,40 @@ +package org.opengeoportal.config.proxy; + +public class InternalServerMapping implements ServerMapping { + String type;//wfs,wms,wcs...could be others + String internalUrl; + String externalUrl; + String username; + String password; + + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getInternalUrl() { + return internalUrl; + } + public void setInternalUrl(String internalUrl) { + this.internalUrl = internalUrl; + } + public String getExternalUrl() { + return externalUrl; + } + public void setExternalUrl(String externalUrl) { + this.externalUrl = externalUrl; + } + public String getUsername() { + return username; + } + public void setUsername(String username) { + this.username = username; + } + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfig.java b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfig.java new file mode 100644 index 0000000..b184272 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfig.java @@ -0,0 +1,43 @@ +package org.opengeoportal.config.proxy; + +import java.util.ArrayList; +import java.util.List; + +public class ProxyConfig { +/*# if you are using ogp to proxy download and preview of layers, set it +# up here. (form is: proxy.${repository id}.*) +proxy.tufts.accessLevel=restricted + +proxy.tufts.geoserver.internal=http://127.0.0.1:8580 +proxy.tufts.geoserver.external=restricted +proxy.tufts.geoserver.username= +proxy.tufts.geoserver.password= +*/ + String repositoryId; + List accessLevels; + List serverMapping = new ArrayList(); + + public String getRepositoryId() { + return repositoryId; + } + + public void setRepositoryId(String repositoryId) { + this.repositoryId = repositoryId; + } + + public List getAccessLevels() { + return accessLevels; + } + + public void setAccessLevels(List accessLevels) { + this.accessLevels = accessLevels; + } + + public List getServerMapping() { + return serverMapping; + } + + public void setServerMapping(List serverMapping) { + this.serverMapping = serverMapping; + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfigRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfigRetriever.java new file mode 100644 index 0000000..c28c38f --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfigRetriever.java @@ -0,0 +1,28 @@ +package org.opengeoportal.config.proxy; + +import java.io.IOException; +import java.util.List; + +public interface ProxyConfigRetriever { + + String getExternalProxyUrl(String type, String repository, String accessLevel) throws Exception; + + String getInternalProxyUrl(String type, String repository, String accessLevel) throws Exception; + + boolean hasProxy(String type, String repository, String accessLevel); + + boolean hasCredentials(String type, String repository, String accessLevel); + + List load() throws IOException; + + List getConfig(); + + List getPublicConfig(); + + String getInternalUrl(String type, String repository, String accessLevel, + String locationField) throws Exception; + + String getExternalUrl(String type, String repository, String accessLevel, + String locationField) throws Exception; + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfigRetrieverFromProperties.java b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfigRetrieverFromProperties.java new file mode 100644 index 0000000..5a07e2c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ProxyConfigRetrieverFromProperties.java @@ -0,0 +1,274 @@ +package org.opengeoportal.config.proxy; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.opengeoportal.config.PropertiesFile; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.OgpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProxyConfigRetrieverFromProperties implements ProxyConfigRetriever { + + PropertiesFile propertiesFile; + List proxyConfig; + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public PropertiesFile getPropertiesFile() { + return propertiesFile; + } + + public void setPropertiesFile(PropertiesFile propertiesFile) { + this.propertiesFile = propertiesFile; + } + + @Override + public List getConfig(){ + return proxyConfig; + } + + @Override + public List load() throws IOException { + Properties props = propertiesFile.getProperties(); + proxyConfig = new ArrayList(); + + //populate a List of ProxyConfig objects + + Set keys = props.keySet(); + for (Object key: keys){ + String key$ = (String)key; + if (key$.startsWith("proxy.")){ + //do something + List keyList = Arrays.asList(StringUtils.split(key$, ".")); + String repositoryId = null; + if (keyList.size() >= 2){ + repositoryId = keyList.get(1); + } else { + logger.error("Something is wrong with the property key. ['" + key$ + "']"); + continue; + } + + + ProxyConfig pc = getProxyConfig(repositoryId); + + if (keyList.contains("accessLevel")){ + + List accessLevels = Arrays.asList(props.getProperty(key$).split(",")); + pc.setAccessLevels(accessLevels); + } else { + + List typeList = new ArrayList(); + Boolean appendServiceEndpoint = false; + + if (keyList.contains("geoserver")){ + + typeList.add("wms"); + typeList.add("wfs"); + typeList.add("wcs"); + appendServiceEndpoint = true; + + } else { + if (keyList.size() >= 3){ + typeList.add(keyList.get(2)); + } else { + logger.error("Something is wrong with the property key. ['" + key$ + "']"); + continue; + } + } + + for (String type: typeList){ + + InternalServerMapping sm = getServerMapping(pc, type); + + String val = props.getProperty(key$); + if (keyList.contains("internal")){ + + if (appendServiceEndpoint){ + val = val + "/" + type; + } + + sm.setInternalUrl(val); + } else if (keyList.contains("external")){ + + if (appendServiceEndpoint){ + val = val + "/" + repositoryId + "/" + type; + } + + sm.setExternalUrl(val); + } else if (keyList.contains("username")){ + + sm.setUsername(val); + } else if (keyList.contains("password")){ + + sm.setPassword(val); + } + } + } + } + // else skip it + + } + + return proxyConfig; + } + + private ProxyConfig getProxyConfig(String repositoryId) { + + for (ProxyConfig pc: proxyConfig){ + + if (pc.getRepositoryId().equalsIgnoreCase(repositoryId)){ + return pc; + } + } + + ProxyConfig npc = new ProxyConfig(); + npc.setRepositoryId(repositoryId); + + proxyConfig.add(npc); + + return npc; + + } + + private InternalServerMapping getServerMapping(ProxyConfig pc, String type) { + List smList = pc.getServerMapping(); + for (ServerMapping sm: smList){ + if (sm.getType().equalsIgnoreCase(type)){ + return (InternalServerMapping) sm; + } + } + + InternalServerMapping nsm = new InternalServerMapping(); + nsm.setType(type); + smList.add(nsm); + return nsm; + + } + + @Override + public String getInternalUrl(String type, String repository, String accessLevel, String locationField) throws Exception { + String url = null; + if (hasProxy(type, repository, accessLevel)){ + url = getInternalProxyUrl(type, repository, accessLevel); + } else { + url = LocationFieldUtils.getUrl(type, locationField); + } + + return url; + } + + @Override + public String getExternalUrl(String type, String repository, String accessLevel, String locationField) throws Exception{ + String url = null; + Boolean hasProxy = hasProxy(type, repository, accessLevel); + if (hasProxy){ + url = getExternalProxyUrl(type, repository, accessLevel); + } else { + url = LocationFieldUtils.getUrl(type, locationField); + + } + return url; + } + @Override + public String getExternalProxyUrl(String type, String repository, String accessLevel) + throws Exception { + ServerMapping sm = getMatchingServerMapping(type, repository, accessLevel); + return sm.getExternalUrl(); + } + + + + @Override + public boolean hasProxy(String type, String repository, String accessLevel){ + for (ProxyConfig pc: proxyConfig){ + if (pc.getRepositoryId().equalsIgnoreCase(repository)){ + if (OgpUtils.containsIgnoreCase(pc.getAccessLevels(), accessLevel)){ + for (ServerMapping sm: pc.getServerMapping()){ + if (sm.getType().equalsIgnoreCase(type)){ + return true; + } + } + } + } + } + + return false; + } + + private ServerMapping getMatchingServerMapping(String type, String repository, String accessLevel) throws Exception{ + for (ProxyConfig pc: proxyConfig){ + if (pc.getRepositoryId().equalsIgnoreCase(repository)){ + if (OgpUtils.containsIgnoreCase(pc.getAccessLevels(), accessLevel)){ + for (ServerMapping sm: pc.getServerMapping()){ + if (sm.getType().equalsIgnoreCase(type)){ + return sm; + } + } + } + } + } + + throw new Exception("Server Mapping not found."); + } + + + @Override + public String getInternalProxyUrl(String type, String repository, String accessLevel) throws Exception { + InternalServerMapping sm = (InternalServerMapping) getMatchingServerMapping(type, repository, accessLevel); + return sm.getInternalUrl(); + } + + @Override + public boolean hasCredentials(String type, String repository, String accessLevel) { + InternalServerMapping sm = null; + try { + sm = (InternalServerMapping) getMatchingServerMapping(type, repository, accessLevel); + } catch (Exception e){ + return false; + } + + if ( StringUtils.isNotEmpty(sm.getUsername()) && StringUtils.isNotEmpty(sm.getPassword()) ){ + return true; + } else { + return false; + } + } + + @Override + public List getPublicConfig() { + //must only serve a reduced version...we don't want to hand out internal addresses, credentials to the client + + //copy the object + List pcList = getConfig(); + List publicPcList = new ArrayList(); + + for (ProxyConfig pc: pcList){ + ProxyConfig publicPc = new ProxyConfig(); + publicPcList.add(publicPc); + + publicPc.setAccessLevels(pc.getAccessLevels()); + publicPc.setRepositoryId(pc.repositoryId); + + List smList = pc.getServerMapping(); + List psmList = new ArrayList(); + for (ServerMapping sm: smList){ + PublicServerMapping psm = new PublicServerMapping(); + psm.setType(sm.getType()); + psm.setExternalUrl(sm.getExternalUrl()); + psmList.add(psm); + } + + publicPc.setServerMapping(psmList); + } + + return publicPcList; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/proxy/PublicServerMapping.java b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/PublicServerMapping.java new file mode 100644 index 0000000..1a87cdb --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/PublicServerMapping.java @@ -0,0 +1,22 @@ +package org.opengeoportal.config.proxy; + +public class PublicServerMapping implements ServerMapping { + String type;//wfs,wms,wcs...could be others + String externalUrl; + + + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + + public String getExternalUrl() { + return externalUrl; + } + public void setExternalUrl(String externalUrl) { + this.externalUrl = externalUrl; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ServerMapping.java b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ServerMapping.java new file mode 100644 index 0000000..3280590 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/proxy/ServerMapping.java @@ -0,0 +1,9 @@ +package org.opengeoportal.config.proxy; + +public interface ServerMapping { + public String getType(); + public void setType(String type); + + public String getExternalUrl(); + public void setExternalUrl(String externalUrl); +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfig.java b/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfig.java new file mode 100644 index 0000000..9f89185 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfig.java @@ -0,0 +1,47 @@ +package org.opengeoportal.config.repositories; + +public class RepositoryConfig { + /*{"id": "harvard", + "shortName": "Harvard", + "fullName": "Harvard Geospatial Library", + "sourceIconClass": "harvardIcon", + "selected": true + },*/ + String id; + String shortName; + String fullName; + String iconClass; + Boolean selected; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getShortName() { + return shortName; + } + public void setShortName(String shortName) { + this.shortName = shortName; + } + public String getFullName() { + return fullName; + } + public void setFullName(String fullName) { + this.fullName = fullName; + } + public String getIconClass() { + return iconClass; + } + public void setIconClass(String iconClass) { + this.iconClass = iconClass; + } + public Boolean getSelected() { + return selected; + } + public void setSelected(Boolean selected) { + this.selected = selected; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfigRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfigRetriever.java new file mode 100644 index 0000000..7e38fa0 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfigRetriever.java @@ -0,0 +1,12 @@ +package org.opengeoportal.config.repositories; + +import java.io.IOException; +import java.util.List; + +import org.opengeoportal.config.repositories.RepositoryConfig; + +public interface RepositoryConfigRetriever { + List load() throws IOException; + + List getConfig(); +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfigRetrieverFromProperties.java b/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfigRetrieverFromProperties.java new file mode 100644 index 0000000..adcfaf6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/repositories/RepositoryConfigRetrieverFromProperties.java @@ -0,0 +1,97 @@ +package org.opengeoportal.config.repositories; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import org.opengeoportal.config.PropertiesFile; +import org.opengeoportal.config.search.SearchConfigRetriever; +import org.opengeoportal.config.search.SearchRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +public class RepositoryConfigRetrieverFromProperties implements RepositoryConfigRetriever { + public final String SHORT_NAME_KEY = "shortName"; + public final String FULL_NAME_KEY = "fullName"; + public final String ICON_CLASS_KEY = "sourceIconClass"; + + @Autowired + SearchConfigRetriever searchConfigRetriever; + + List repositoryConfig; + + PropertiesFile propertiesFile; + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public PropertiesFile getPropertiesFile() { + return propertiesFile; + } + + public void setPropertiesFile(PropertiesFile propertiesFile) { + this.propertiesFile = propertiesFile; + } + + @Override + public List getConfig(){ + return repositoryConfig; + } + + @Override + public List load() throws IOException { + Properties props = propertiesFile.getProperties(); + + //we have a list of repositories to display/search from ogp.config + //and a list of which should be selected by default + + List repositories = searchConfigRetriever.getSearchRepositories(); + + List configElements = new ArrayList(); + configElements.add(SHORT_NAME_KEY); + configElements.add(FULL_NAME_KEY); + configElements.add(ICON_CLASS_KEY); + + repositoryConfig = new ArrayList(); + + for (SearchRepository rep: repositories){ + + RepositoryConfig repConf = new RepositoryConfig(); + repConf.setId(rep.getId()); + repConf.setSelected(rep.getSelected()); + + for (String elem: configElements){ + String key = rep.getId() + "." + elem; + if (props.containsKey(key)){ + String val = props.getProperty(key); + //add val to RepositoryConfig object + setValue(repConf, key, val); + } + //else ignore the key + } + + repositoryConfig.add(repConf); + } + /* + * tufts.shortName=Tufts + * tufts.fullName="Tufts University" + * tufts.sourceIconClass=tuftsIcon + * + */ + return repositoryConfig; + } + + void setValue(RepositoryConfig repConf, String key, String value){ + if (key.contains(SHORT_NAME_KEY)){ + repConf.setShortName(value); + } else if (key.contains(FULL_NAME_KEY)){ + repConf.setFullName(value); + } else if (key.contains(ICON_CLASS_KEY)){ + repConf.setIconClass(value); + } else { + logger.warn("Key ['" + key + "'] is unknown."); + } + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfig.java b/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfig.java new file mode 100644 index 0000000..25ba733 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfig.java @@ -0,0 +1,51 @@ +package org.opengeoportal.config.search; + +import java.net.URL; +import java.util.List; + +public class SearchConfig { +/* + * + * # comma separated list of repository ids (see repositories.properties) +# that will appear in the repositories drop down +# and will be queried by solr +ogp.repositories=tufts,harvard,berkeley,mit,massgis +ogp.repositories.defaultSelected=tufts,harvard,berkeley,mit,massgis + +solr.url.internal=http://localhost:8080/solr +# the url given to the web browser so that it can query solr directly +# if .internal is blank the external value will be used internally as well +# By default, this value will point to the Tufts production solr instance +solr.url.external=http://geodata.tufts.edu/solr + * + * + */ + URL searchUrl; + URL internalSearchUrl; + List searchRepositories; + + public URL getSearchUrl() { + return searchUrl; + } + + public void setSearchUrl(URL searchUrl) { + this.searchUrl = searchUrl; + } + + public URL getInternalSearchUrl() { + return internalSearchUrl; + } + + public void setInternalSearchUrl(URL internalSearchUrl) { + this.internalSearchUrl = internalSearchUrl; + } + + public List getSearchRepositories() { + return searchRepositories; + } + + public void setSearchRepositories(List searchRepositories) { + this.searchRepositories = searchRepositories; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfigRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfigRetriever.java new file mode 100644 index 0000000..0cd656d --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfigRetriever.java @@ -0,0 +1,13 @@ +package org.opengeoportal.config.search; + +import java.net.URL; +import java.util.List; + +public interface SearchConfigRetriever { + + SearchConfig load() throws Exception; + List getSearchRepositories(); + URL getSearchUrl(); + URL getInternalSearchUrl(); + SearchConfig getConfig(); +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfigRetrieverFromProperties.java b/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfigRetrieverFromProperties.java new file mode 100644 index 0000000..a856cd6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchConfigRetrieverFromProperties.java @@ -0,0 +1,127 @@ +package org.opengeoportal.config.search; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import org.apache.commons.lang.StringUtils; +import org.opengeoportal.config.PropertiesFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SearchConfigRetrieverFromProperties implements SearchConfigRetriever { + private static final String INTERNAL_SEARCH_URL = "solr.url.internal"; + private static final String EXTERNAL_SEARCH_URL = "solr.url.external"; + private static final String SEARCH_REPOSITORIES = "ogp.repositories"; + private static final String DEFAULT_REPOSITORIES = "ogp.repositories.defaultSelected"; + PropertiesFile propertiesFile; + SearchConfig searchConfig; + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public PropertiesFile getPropertiesFile() { + return propertiesFile; + } + + public void setPropertiesFile(PropertiesFile propertiesFile) { + this.propertiesFile = propertiesFile; + } + + @Override + public SearchConfig getConfig() { + return searchConfig; + } + + public void setSearchConfig(SearchConfig searchConfig) { + this.searchConfig = searchConfig; + } + + @Override + public SearchConfig load() throws Exception { + Properties props = propertiesFile.getProperties(); + /*URL searchUrl; + URL internalSearchUrl; + List searchRepositories;*/ + + searchConfig = new SearchConfig(); + + URL extUrl = null; + if (props.containsKey(EXTERNAL_SEARCH_URL)){ + String extSearch = props.getProperty(EXTERNAL_SEARCH_URL); + try{ + extUrl = new URL(extSearch); + searchConfig.setSearchUrl(extUrl); + } catch (MalformedURLException e){ + throw new Exception("External Search URL ['property " + EXTERNAL_SEARCH_URL + "'] is malformed!"); + } + } else { + throw new Exception("Must set a search URL!"); + } + + + URL intUrl = null; + if (props.containsKey(INTERNAL_SEARCH_URL) && StringUtils.isNotEmpty(props.getProperty(INTERNAL_SEARCH_URL))){ + String intSearch = props.getProperty(INTERNAL_SEARCH_URL); + try{ + intUrl = new URL(intSearch); + } catch (MalformedURLException e){ + logger.warn("Internal Search URL ['property " + INTERNAL_SEARCH_URL + "'] is malformed!"); + intUrl = extUrl; + } + } else { + //use the external facing solr url internally if no internal url is set + intUrl = extUrl; + logger.debug("the internal url is set to the same value as the external url"); + } + + searchConfig.setInternalSearchUrl(intUrl); + + + List searchRep = new ArrayList(); + searchConfig.setSearchRepositories(searchRep); + + if (props.containsKey(SEARCH_REPOSITORIES)){ + String reps = props.getProperty(SEARCH_REPOSITORIES); + for (String rep: StringUtils.split(reps, ",")){ + SearchRepository sr = new SearchRepository(); + sr.id = rep; + sr.selected = isSelectedByDefault(props, rep); + searchRep.add(sr); + } + } + + + return searchConfig; + } + + Boolean isSelectedByDefault(Properties props, String repositoryId){ + if (props.containsKey(DEFAULT_REPOSITORIES)){ + String reps = props.getProperty(DEFAULT_REPOSITORIES); + for (String rep: StringUtils.split(reps, ",")){ + if (rep.equalsIgnoreCase("all") || rep.equalsIgnoreCase(repositoryId)){ + return true; + } + } + } + + return false; + } + + @Override + public List getSearchRepositories() { + return getConfig().getSearchRepositories(); + } + + @Override + public URL getSearchUrl() { + return getConfig().getSearchUrl(); + } + + @Override + public URL getInternalSearchUrl() { + return getConfig().getInternalSearchUrl(); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchRepository.java b/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchRepository.java new file mode 100644 index 0000000..0334446 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/config/search/SearchRepository.java @@ -0,0 +1,21 @@ +package org.opengeoportal.config.search; + +public class SearchRepository { + String id; + Boolean selected; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public Boolean getSelected() { + return selected; + } + public void setSelected(Boolean selected) { + this.selected = selected; + } + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandler.java b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandler.java new file mode 100644 index 0000000..60669ae --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandler.java @@ -0,0 +1,7 @@ +package org.opengeoportal.download; + +import java.util.UUID; + +public interface DownloadHandler { + public UUID requestLayers(DownloadRequest dlRequest) throws Exception; +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandlerFactory.java b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandlerFactory.java new file mode 100644 index 0000000..dac8bbb --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandlerFactory.java @@ -0,0 +1,33 @@ +package org.opengeoportal.download; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class DownloadHandlerFactory implements ApplicationContextAware { + private ApplicationContext applicationContext; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public DownloadHandler getObject() throws Exception { + logger.info("Creating DownloadHandler bean"); + return applicationContext.getBean(DownloadHandler.class); + } + + public Class getObjectType() { + return DownloadHandler.class; + } + + public boolean isSingleton() { + return false; + } + + @Override + public void setApplicationContext(ApplicationContext appContext) + throws BeansException { + applicationContext = appContext; + + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandlerImpl.java b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandlerImpl.java new file mode 100644 index 0000000..72e134b --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadHandlerImpl.java @@ -0,0 +1,193 @@ +package org.opengeoportal.download; + +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.opengeoportal.download.LayerDownloader; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.download.types.LayerRequest.Status; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.ogc.AugmentedSolrRecord; +import org.opengeoportal.ogc.AugmentedSolrRecordRetriever; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.DirectoryRetriever; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.OgpUtils; +import org.opengeoportal.utilities.http.HttpRequester; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.annotation.Async; + +/** + * class that provides the logic to determine which concrete class + * should be selected to download a layer. + * + * + * @author Chris Barnett + * + */ + +public class DownloadHandlerImpl implements DownloadHandler { + + @Autowired + protected RequestStatusManager requestStatusManager; + + + @Autowired + protected LayerInfoRetriever layerInfoRetriever; + + @Autowired + private DirectoryRetriever directoryRetriever; + + @Autowired + AugmentedSolrRecordRetriever asrRetriever; + + @Autowired + private LayerDownloaderProvider layerDownloaderProvider; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + DownloadRequest downloadRequest; + + + + /** + * the main method of the class. Initializes layers and bounds, calls download actions in appropriate + * order + * + */ + public UUID requestLayers(DownloadRequest dlRequest) throws Exception{ + + UUID requestId = UUID.randomUUID(); + dlRequest.setRequestId(requestId); + this.downloadRequest = dlRequest; + + requestStatusManager.addDownloadRequest(dlRequest); + + this.populateDownloadRequest(dlRequest); + + this.submitDownloadRequest(); + return requestId; + } + + /** + * a method that finds the appropriate concrete LayerDownloader and makes the actual request to download layers. + * + * @param downloadMap a map that relates a string key (that identifies the concrete LayerDownloader Class) to a List of + * LayerRequest objects that can be downloaded using that concrete class. + */ + @Async + public void submitDownloadRequest() { + List requestList = downloadRequest.getRequestList(); + for (MethodLevelDownloadRequest request: requestList){ + try { + request.getLayerDownloader().downloadLayers(downloadRequest.getRequestId(), request); + } catch (Exception e) { + logger.error("downloadLayers: " + e.getMessage()); + //should put error info in the status manager for these layers + for (LayerRequest layer: request.getRequestList()){ + layer.setStatus(Status.FAILED); + } + //e.printStackTrace(); + } + } + + + } + + + private void populateDownloadRequest (DownloadRequest dlRequest) throws Exception { + Set layerIdSet = dlRequest.getRequestedLayerIds(); + List layerInfo = layerInfoRetriever.fetchAllowedRecords(layerIdSet); + + for (String layerId: layerIdSet){ + + SolrRecord record = null; + try{ + //layerIdSet can contain layerIds for layers the user is not allowed to access + record = OgpUtils.findRecordById(layerId, layerInfo); + } catch (Exception e){ + //if the user is not allowed to download the layer, here's our opportunity to record that in a way that we can relay back to the user + //create a dummy LayerRequest so we can set status failed? + //layerRequest.setStatus(Status.FAILED); + //subclass LayerRequest as "AbortedLayerRequest" and add? + logger.info("User is not authorized to download: '" + layerId +"'"); + continue; + } + String requestedFormat = dlRequest.getRequestedFormatForLayerId(record.getLayerId()); + LayerRequest layerRequest = this.createLayerRequest(record, requestedFormat, dlRequest.getBounds(), dlRequest.getEmail()); + + String currentClassKey = null; + + try { + currentClassKey = this.layerDownloaderProvider.getClassKey(layerRequest); + logger.info("DownloadKey: " + currentClassKey); + } catch(Exception e) { + layerRequest.setStatus(Status.FAILED); + logger.info("No download method found for: '" + record.getLayerId() +"'"); + continue; + } + + collateRequests(dlRequest.getRequestList(), layerRequest, currentClassKey); + + } + + + } + + + private LayerRequest createLayerRequest(SolrRecord solrRecord, String requestedFormat, BoundingBox bounds, String emailAddress){ + LayerRequest layer = new LayerRequest(solrRecord, requestedFormat); + layer.setRequestedBounds(bounds); + layer.setEmailAddress(emailAddress); + layer.setTargetDirectory(this.directoryRetriever.getDownloadDirectory()); + if (LocationFieldUtils.hasWmsUrl(solrRecord.getLocation())){ + addOwsInfo(layer); + } + return layer; + } + + private void addOwsInfo(LayerRequest layer){ + + try { + AugmentedSolrRecord asr = asrRetriever.getOgcAugmentedSolrRecord(layer.getLayerInfo()); + List info = asr.getOwsInfo(); + if (!info.isEmpty()){ + layer.setOwsInfo(info); + } + } catch (Exception e) { + logger.error("Problem setting info from OWS service for layer: ['" + layer.getId() + "']"); + } + } + + + void collateRequests(List mlRequestList, LayerRequest layerRequest, String classKey){ + + //here, we're collecting layers that use the same download method + Boolean match = false; + for (MethodLevelDownloadRequest mlRequest: mlRequestList){ + if (mlRequest.getDownloadKey().equals(classKey)){ + mlRequest.addLayerRequest(layerRequest); + match = true; + } + } + + if (!match){ + LayerDownloader layerDownloader = this.layerDownloaderProvider.getLayerDownloader(classKey); + MethodLevelDownloadRequest mlRequest = new MethodLevelDownloadRequest(classKey, layerDownloader); + mlRequest.addLayerRequest(layerRequest); + mlRequestList.add(mlRequest); + } + } + + + + + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/DownloadPackager.java b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadPackager.java new file mode 100644 index 0000000..af8bcdf --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadPackager.java @@ -0,0 +1,8 @@ +package org.opengeoportal.download; + +import java.util.UUID; +import java.util.concurrent.Future; + +public interface DownloadPackager { + Future packageFiles(UUID requestId) throws Exception; +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadPackagerImpl.java b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadPackagerImpl.java similarity index 81% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadPackagerImpl.java rename to geoportal_1/src/main/java/org/opengeoportal/download/DownloadPackagerImpl.java index 4d33569..503a2df 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadPackagerImpl.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadPackagerImpl.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import java.io.File; import java.util.ArrayList; @@ -6,16 +6,20 @@ import java.util.List; import java.util.Set; import java.util.UUID; +import java.util.concurrent.Future; -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Download.Types.LayerRequest.Status; -import org.OpenGeoPortal.Layer.GeometryType; -import org.OpenGeoPortal.Utilities.OgpFileUtils; -import org.OpenGeoPortal.Utilities.ZipFilePackager; +import org.opengeoportal.download.DownloadRequest; +import org.opengeoportal.download.MethodLevelDownloadRequest; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.download.types.LayerRequest.Status; +import org.opengeoportal.layer.GeometryType; +import org.opengeoportal.utilities.OgpFileUtils; +import org.opengeoportal.utilities.ZipFilePackager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; /** @@ -38,29 +42,26 @@ public class DownloadPackagerImpl implements DownloadPackager { * */ @Async - public void packageFiles(UUID requestId) throws Exception{ + public Future packageFiles(UUID requestId) throws Exception{ //first determine if all requests are complete DownloadRequest downloadRequest = requestStatusManager.getDownloadRequest(requestId); if (!downloadRequest.isReadyForPackaging()){ logger.info("Request is not yet complete; not ready to package."); - return; + return new AsyncResult(false); } List layerList = new ArrayList(); List requests = downloadRequest.getRequestList(); for (MethodLevelDownloadRequest request: requests){ layerList.addAll(request.getRequestList()); } - logger.info("Packaging files"); - Set filesToPackage = null; - try { - filesToPackage = getFilesToPackage(layerList); - } catch (Exception e){ - e.printStackTrace(); - } + Set filesToPackage = getFilesToPackage(layerList); + logger.debug(directory.getAbsolutePath()); + logger.info("Packaging files"); File zipArchive = new File(directory, "OGPDownload.zip"); ZipFilePackager.addFilesToArchive(filesToPackage, zipArchive); downloadRequest.setDownloadPackage(zipArchive); + return new AsyncResult(true); } private Set getFilesToPackage(List layers) throws Exception{ @@ -70,6 +71,10 @@ private Set getFilesToPackage(List layers) throws Exception{ directory = null; logger.debug(Integer.toString(layers.size()) + " layer(s) found"); for (LayerRequest layer : layers) { + if (!layer.getShouldHaveFiles()){ + //skip + continue; + } logger.debug(layer.getStatus().toString()); if (layer.getStatus() == Status.SUCCESS){ Set downloadedFiles = layer.getDownloadedFiles(); @@ -106,7 +111,9 @@ private void addMetadata(File directory, LayerRequest layer){ //get metadata for this layer, add the resulting xml file to the file list logger.info("Retrieving metadata..."); File xmlFile; - + for (File temp: layer.downloadedFiles){ + logger.debug(temp.getName()); + } if (GeometryType.isVector(GeometryType.parseGeometryType(layer.getLayerInfo().getDataType()))&&(!layer.getRequestedFormat().equals("kmz"))){ xmlFile = new File(directory, OgpFileUtils.filterName(layer.getLayerInfo().getName()) + ".shp.xml"); } else { diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/DownloadRequest.java b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadRequest.java new file mode 100644 index 0000000..ea1a523 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/DownloadRequest.java @@ -0,0 +1,248 @@ +package org.opengeoportal.download; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.opengeoportal.download.MethodLevelDownloadRequest; +import org.opengeoportal.download.controllers.RequestStatusController.StatusSummary; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.download.types.LayerRequest.Status; +import org.opengeoportal.layer.BoundingBox; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown=true) +public class DownloadRequest { + @JsonIgnore + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @JsonProperty("bbox") + private BoundingBox bounds; + @JsonProperty("email") + private String email; + @JsonProperty("layers") + private List requestedLayerFormat; + + public BoundingBox getBounds() { + return bounds; + } + + public void setBounds(String bounds) { + String[] arrBounds = bounds.split(","); + this.bounds = new BoundingBox(arrBounds[0], arrBounds[1], arrBounds[2], arrBounds[3]); + } + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + public List getRequestedLayerFormat() { + return requestedLayerFormat; + } + public void setRequestedLayerFormat( + List requestedLayerFormat) { + this.requestedLayerFormat = requestedLayerFormat; + } + public static class RequestedLayerFormat { + @JsonProperty("format") + private String format; + @JsonProperty("layerId") + private String layerId; + + public String getFormat() { + return format; + } + public void setFormat(String format) { + this.format = format; + } + public String getLayerId() { + return layerId; + } + public void setLayerId(String layerId) { + this.layerId = layerId; + } + + } + + public Set getRequestedLayerIds(){ + Set layerIds = new HashSet(); + for (RequestedLayerFormat layer: requestedLayerFormat){ + layerIds.add(layer.getLayerId()); + } + return layerIds; + } + + public String getRequestedFormatForLayerId(String layerId) throws Exception{ + for (RequestedLayerFormat layer: requestedLayerFormat){ + if (layer.getLayerId().equalsIgnoreCase(layerId)){ + return layer.getFormat(); + } + } + throw new Exception("No format found for the specified layer."); + } + + + @JsonIgnore + private UUID requestId; + @JsonIgnore + private String sessionId; + @JsonIgnore + private File downloadPackage; + @JsonIgnore + private List requestList = new ArrayList(); + @JsonIgnore + private Boolean downloadPackageSet = false; + @JsonIgnore + private Boolean emailSent = false; + @JsonIgnore + private Integer dlpackageSetCounter = 0; + + + public UUID getRequestId() { + return requestId; + } + public void setRequestId(UUID requestId) { + this.requestId = requestId; + } + public String getSessionId() { + return sessionId; + } + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + + public File getDownloadPackage() { + return downloadPackage; + } + + public void setDownloadPackage(File downloadPackage) { + this.downloadPackage = downloadPackage; + logger.info("Download package: " + downloadPackage.getAbsolutePath()); + dlpackageSetCounter++; + this.downloadPackageSet = true; + if (dlpackageSetCounter > 1){ + logger.error("something squirrely: the download package has been set more than once for this request."); + } + } + + public List getRequestList() { + return requestList; + } + + public void setRequestList(List layerRequests){ + requestList = layerRequests; + } + + private Boolean isPostProcessingComplete(){ + for (MethodLevelDownloadRequest mldlRequest: requestList){ + for (LayerRequest layerRequest: mldlRequest.getRequestList()){ + if(layerRequest.getShouldHaveFiles()){ + if (downloadPackageSet){ + if (!this.downloadPackage.exists()){ + return false; + } + } else { + return false; + } + } + } + } + + return true; + } + + public Boolean isReadyForPackaging(){ + List layerList = new ArrayList(); + for (MethodLevelDownloadRequest request: requestList){ + for (LayerRequest layer: request.getRequestList()){ + if (layer.getShouldHaveFiles()){ + layerList.add(layer); + } + } + } + + StatusSummary completionStatus = getStatusSummaryForList(layerList); + + if (completionStatus.equals(StatusSummary.COMPLETE_SUCCEEDED) || completionStatus.equals(StatusSummary.COMPLETE_PARTIAL)){ + return true; + } else { + return false; + } + } + + private StatusSummary getStatusSummaryForList(List layerList){ + //Processing or Complete for the request + logger.debug("Getting raw status summary"); + StatusSummary completionStatus = null; + int successCount = 0; + int failureCount = 0; + + for (LayerRequest request: layerList){ + logger.debug("status: " + request.getStatus().toString()); + if (request.getStatus().equals(Status.PROCESSING)){ + return StatusSummary.PROCESSING; + } else if (request.getStatus().equals(Status.SUCCESS)) { + successCount++; + } else if (request.getStatus().equals(Status.FAILED)){ + failureCount++; + } + } + if (layerList.size() == 0){ + completionStatus = StatusSummary.COMPLETE_FAILED; + } else if (failureCount == 0){ + completionStatus = StatusSummary.COMPLETE_SUCCEEDED; + } else if (successCount == 0){ + completionStatus = StatusSummary.COMPLETE_FAILED; + } else { + completionStatus = StatusSummary.COMPLETE_PARTIAL; + } + return completionStatus; + } + + private StatusSummary getRawStatusSummary(){ + //Processing or Complete for the request + logger.debug("Getting raw status summary"); + + List layerList = new ArrayList(); + for (MethodLevelDownloadRequest request: requestList){ + layerList.addAll(request.getRequestList()); + } + + return getStatusSummaryForList(layerList); + + } + + public StatusSummary getStatusSummary() { + logger.debug("getting status summary"); + StatusSummary completionStatus = StatusSummary.COMPLETE_FAILED; + try { + completionStatus = getRawStatusSummary(); + } catch (Exception e){ + e.printStackTrace(); + } + + if (completionStatus.equals(StatusSummary.COMPLETE_SUCCEEDED) || completionStatus.equals(StatusSummary.COMPLETE_PARTIAL)){ + if (!isPostProcessingComplete()){ + return StatusSummary.PROCESSING; + } + } + return completionStatus; + } + + + public Boolean getEmailSent() { + return emailSent; + } + public void setEmailSent(Boolean emailSent) { + this.emailSent = emailSent; + } +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/EmailLayerDownloader.java b/geoportal_1/src/main/java/org/opengeoportal/download/EmailLayerDownloader.java similarity index 53% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/EmailLayerDownloader.java rename to geoportal_1/src/main/java/org/opengeoportal/download/EmailLayerDownloader.java index 07eb97e..0cef669 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/EmailLayerDownloader.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/EmailLayerDownloader.java @@ -1,14 +1,15 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import java.util.List; import java.util.UUID; import java.util.concurrent.Future; -import org.OpenGeoPortal.Download.Methods.EmailDownloadMethod; -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Download.Types.LayerRequest.Status; +import org.opengeoportal.download.methods.EmailDownloadMethod; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.download.types.LayerRequest.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; /** @@ -22,6 +23,7 @@ //and take care of layer status as much as possible public class EmailLayerDownloader implements LayerDownloader { private EmailDownloadMethod emailDownloadMethod; + @Autowired private RequestStatusManager requestStatusManager; final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -39,36 +41,36 @@ public void setEmailDownloadMethod(EmailDownloadMethod emailDownloadMethod) { @Override public void downloadLayers(UUID requestId, MethodLevelDownloadRequest request) throws Exception { List layerList = request.getRequestList(); + for (LayerRequest layer: layerList){ + layer.setShouldHaveFiles(false); + } + //check to see if the filename exists + //this should fire off a callable that asynchronously calls the download method + + logger.debug("Trying to send email..."); + Future emailFuture = this.emailDownloadMethod.sendEmail(layerList); + + Boolean emailSent = (Boolean) emailFuture.get(); for (LayerRequest currentLayer: layerList){ - //this.downloadMethod.validate(currentLayer); - //check to see if the filename exists - //this should fire off a callable that asynchronously calls the download method - try { - logger.info("Trying to send email..."); - currentLayer.setFutureValue(this.emailDownloadMethod.sendEmail(currentLayer)); - } catch (Exception e){ - //e.printStackTrace(); - logger.error("an error downloading this layer: " + currentLayer.getLayerInfo().getName()); - currentLayer.setStatus(Status.FAILED); - continue; - } - } - for (LayerRequest currentLayer: layerList){ - Future currentFuture = currentLayer.getFutureValue(); - if ((Boolean) currentFuture.get()){ + if (emailSent){ currentLayer.setStatus(Status.SUCCESS); } else { currentLayer.setStatus(Status.FAILED); } } + if(emailSent){ + DownloadRequest downloadRequest = requestStatusManager.getDownloadRequest(requestId); + downloadRequest.setEmailSent(emailSent); + logger.info("Email requested."); + } else { + logger.error("Error requesting Email"); + } } - public RequestStatusManager getRequestStatusManager() { - return requestStatusManager; + @Override + public Boolean hasRequiredInfo(LayerRequest layer) { + return this.emailDownloadMethod.hasRequiredInfo(layer); } - public void setRequestStatusManager(RequestStatusManager requestStatusManager) { - this.requestStatusManager = requestStatusManager; - } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/LayerDownloader.java b/geoportal_1/src/main/java/org/opengeoportal/download/LayerDownloader.java similarity index 52% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/LayerDownloader.java rename to geoportal_1/src/main/java/org/opengeoportal/download/LayerDownloader.java index 44e9000..9d1352c 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/LayerDownloader.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/LayerDownloader.java @@ -1,7 +1,11 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import java.util.UUID; +import org.opengeoportal.download.types.LayerRequest; + public interface LayerDownloader { public void downloadLayers(UUID requestId, MethodLevelDownloadRequest request) throws Exception; + + public Boolean hasRequiredInfo(LayerRequest layer); } diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/LayerDownloaderProvider.java b/geoportal_1/src/main/java/org/opengeoportal/download/LayerDownloaderProvider.java new file mode 100644 index 0000000..542b1a6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/LayerDownloaderProvider.java @@ -0,0 +1,224 @@ +package org.opengeoportal.download; + +import java.util.Iterator; +import java.util.SortedMap; +import java.util.TreeMap; + + +import org.opengeoportal.download.config.DownloadConfigRetriever; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.solr.SolrRecord; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.annotation.Autowired; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; + +public class LayerDownloaderProvider implements BeanFactoryAware { + private BeanFactory beanFactory; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + final static Logger slogger = LoggerFactory.getLogger(LayerDownloaderProvider.class.getName()); + + @Autowired + private DownloadConfigRetriever downloadConfigRetriever; + + + public LayerDownloader build(LayerRequest layer) throws Exception{ + String classKey = getClassKey(layer); + return getLayerDownloader(classKey); + } + + public LayerDownloader build(String classKey) throws Exception{ + return getLayerDownloader(classKey); + } + + public Boolean isDownloadable(LayerRequest layer) { + Boolean downloadable = false; + + try { + this.getClassKey(layer); + downloadable = true; + } catch (Exception e){ + logger.warn(e.getMessage()); + } + return downloadable; + } + + public String getClassKey(LayerRequest layer) throws Exception { + JsonNode institutions = downloadConfigRetriever.getDownloadConfig().path("institutions"); + + SolrRecord record = layer.getLayerInfo(); + JsonNode methods = institutions.path(record.getInstitution().trim().toLowerCase()); + if (!methods.isArray()){ + try{ + return this.getDefaultDownloadKey(institutions, layer); + } catch (Exception e){ + logger.error("Class Key not defined for this layer."); + throw new Exception("Class Key not defined for this layer."); + } + } + + ArrayNode methodArray = (ArrayNode) methods; + Iterator institutionIterator = methodArray.elements(); + String classKey = null; + while (institutionIterator.hasNext()){ + JsonNode currentNode = institutionIterator.next(); + Boolean match = matchAllCriteria(currentNode, layer); + + //If the match is complete, don't look any further + if (match){ + classKey = currentNode.path("classKey").textValue(); + logger.debug("match"); + break; + } + } + + if (classKey == null){ + logger.debug("class key is null. should mean no match"); + //no match was found in download config, so we're trying defaults + try{ + return this.getDefaultDownloadKey(institutions, layer); + } catch (Exception e){ + logger.error("Class Key not defined for this layer."); + throw new Exception("Class Key not defined for this layer."); + } + } else { + logger.debug("should get here on match"); + //make sure the layer has the requirements for the match + if (hasRequirements(classKey, layer)){ + return classKey; + } else { + try{ + return this.getDefaultDownloadKey(institutions, layer); + } catch (Exception e){ + logger.error("Class Key not defined for this layer."); + throw new Exception("Class Key not defined for this layer."); + } + } + } + + } + + private Boolean matchAllCriteria(JsonNode currentNode, LayerRequest layer){ + SolrRecord record = layer.getLayerInfo(); + logger.debug(record.getAccess().toLowerCase()); + logger.debug(record.getDataType().toLowerCase()); + logger.debug(layer.getRequestedFormat().toLowerCase()); + + logger.debug("trying access matches..."); + Boolean accessMatch = matchNode(currentNode, "accessLevel", record.getAccess().toLowerCase()); + if (!accessMatch){ + return false; + } + logger.debug("access match"); + + + Boolean dataTypeMatch = matchNode(currentNode, "dataType", getGeneralizedDataType(record.getDataType().toLowerCase())); + if (!dataTypeMatch){ + return false; + } + logger.debug("data type match"); + + Boolean outputFormatMatch = matchNode(currentNode, "outputFormats", layer.getRequestedFormat().toLowerCase()); + if (!outputFormatMatch){ + return false; + } + logger.debug("requested format match"); + + return true; + } + + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + this.beanFactory = beanFactory; + } + + /** + * a method to get a concrete class of type LayerDownloader given a string key defined in WEB-INF/download.xml + * + * + * @param downloaderKey a string key that identifies a concrete class of LayerDownloader + * @return the concrete LayerDownloader object + */ + public LayerDownloader getLayerDownloader(String downloaderKey){ + LayerDownloader layerDownloader = (LayerDownloader) beanFactory.getBean(downloaderKey); + if (layerDownloader == null){ + throw new NullPointerException("LayerDownloader could not be retrieved"); + } + return layerDownloader; + } + + private static String getGeneralizedDataType(String dataType){ + if (dataType.equals("point")||dataType.equals("line")||dataType.equals("polygon")){ + dataType = "vector"; + } + return dataType; + } + + private static Boolean matchNode(JsonNode parentNode, String path, String value){ + Boolean match = false; + JsonNode matchNode = parentNode.path(path); + if (matchNode.isArray()){ + ArrayNode arrayNode = (ArrayNode) matchNode; + Iterator iterator = arrayNode.iterator(); + while (iterator.hasNext()){ + JsonNode currentNode = iterator.next(); + slogger.debug("node value:" + currentNode.textValue()); + if (currentNode.textValue().equalsIgnoreCase(value.trim())){ + match = true; + } + } + } else if (matchNode.isTextual()){ + slogger.debug("text node"); + } else if(matchNode.isMissingNode()){ + slogger.debug("Node at path ['" + path + "'] does not exist."); + } + slogger.debug("path: " + path + ", value: " + value + " match: " + match.toString()); + return match; + } + + private Boolean hasRequirements(String classKey, LayerRequest layer){ + //query the download method to see if it has the info it needs + LayerDownloader testDownloader = getLayerDownloader(classKey); + Boolean hasInfo = testDownloader.hasRequiredInfo(layer); + return hasInfo; + } + + private String getDefaultDownloadKey(JsonNode institutions, LayerRequest layer) throws Exception{ + logger.info("Looking for default method..."); + JsonNode defaultNode = institutions.path("default"); + if (!defaultNode.isArray()){ + throw new Exception("No default defined!"); + } + ArrayNode jsonArray = (ArrayNode) defaultNode; + Iterator iterator = jsonArray.elements(); + SortedMap classKeys = new TreeMap(); + while (iterator.hasNext()){ + JsonNode currentNode = iterator.next(); + Boolean outputFormatMatch = matchNode(currentNode, "outputFormats", layer.getRequestedFormat().toLowerCase()); + if (outputFormatMatch){ + String classKey = currentNode.path("classKey").textValue(); + Integer preference = currentNode.path("preference").intValue(); + logger.debug("Matched classKey: " + classKey); + if (hasRequirements(classKey, layer)){ + logger.debug("requirements met: " + classKey); + classKeys.put(preference, classKey); + } else { + logger.debug("requirements not met for: " + classKey); + } + } + } + if (!classKeys.isEmpty()){ + String bestMatch = classKeys.get(classKeys.firstKey()); + logger.debug("Trying preferred match..." + bestMatch); + return bestMatch; + } else { + String errMsg = "No applicable default download method found."; + logger.error(errMsg); + throw new Exception(errMsg); + } + } +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MetadataFromSolr.java b/geoportal_1/src/main/java/org/opengeoportal/download/MetadataFromSolr.java similarity index 62% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/MetadataFromSolr.java rename to geoportal_1/src/main/java/org/opengeoportal/download/MetadataFromSolr.java index 76e2796..992fca1 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MetadataFromSolr.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/MetadataFromSolr.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import java.util.*; import java.io.*; @@ -9,10 +9,12 @@ import javax.xml.transform.stream.*; import org.xml.sax.*; -import org.OpenGeoPortal.Solr.SolrClient; +import org.apache.commons.io.IOUtils; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.common.SolrDocumentList; +import org.opengeoportal.metadata.LayerInfoRetriever; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; import org.w3c.dom.*; /** @@ -20,16 +22,31 @@ * @author chris * */ + public class MetadataFromSolr implements MetadataRetriever { @Autowired - private SolrClient solrClient; + private LayerInfoRetriever layerInfoRetriever; private String layerId; private Document xmlDocument; private DocumentBuilder builder; + private Resource fgdcStyleSheet; + private Resource iso19139StyleSheet; + + public enum MetadataType { + ISO_19139, FGDC; + + } MetadataFromSolr() { // Create a factory DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setValidating(false); // dtd isn't always available; would be nice to attempt to validate + try { + factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + } catch (ParserConfigurationException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } // Use document builder factory try { builder = factory.newDocumentBuilder(); @@ -91,14 +108,20 @@ Document buildXMLDocFromString(String layerId, String rawXMLString) throws Parse if ((layerId.equalsIgnoreCase(this.layerId))&&(this.xmlDocument != null)){ return this.xmlDocument; } else { - //parse the returned XML to make sure it is well-formed & to format - //filter extra spaces from xmlString - rawXMLString = rawXMLString.replaceAll(">[ \t\n\r\f]+<", "><").replaceAll("[\t\n\r\f]+", ""); - InputStream xmlInputStream = new ByteArrayInputStream(rawXMLString.getBytes("UTF-8")); + InputStream xmlInputStream = null; + + try{ + //parse the returned XML to make sure it is well-formed & to format + //filter extra spaces from xmlString + rawXMLString = rawXMLString.replaceAll(">[ \t\n\r\f]+<", "><").replaceAll("[\t\n\r\f]+", ""); + xmlInputStream = new ByteArrayInputStream(rawXMLString.getBytes("UTF-8")); - //Parse the document - Document document = builder.parse(xmlInputStream); - return document; + //Parse the document + Document document = builder.parse(xmlInputStream); + return document; + } finally { + IOUtils.closeQuietly(xmlInputStream); + } } } @@ -132,7 +155,7 @@ private String getXMLStringFromSolr(String identifier, String descriptor) throws query.addField("FgdcText"); query.setRows(1); - SolrDocumentList docs = this.solrClient.getSolrServer().query(query).getResults(); + SolrDocumentList docs = this.layerInfoRetriever.getSolrServer().query(query).getResults(); return (String) docs.get(0).getFieldValue("FgdcText"); } @@ -145,13 +168,19 @@ private String getXMLStringFromSolr(String identifier, String descriptor) throws * @throws Exception */ public File getXMLFile(String metadataLayerName, File xmlFile) throws Exception{ - String xmlString = this.getXMLStringFromSolr(metadataLayerName, "Name"); - xmlString = this.filterXMLString("", xmlString); - //write this string to a file - OutputStream xmlFileOutputStream = new FileOutputStream (xmlFile); - new PrintStream(xmlFileOutputStream).print(xmlString); - xmlFileOutputStream.close(); - return xmlFile; + OutputStream xmlFileOutputStream = null; + try{ + String xmlString = this.getXMLStringFromSolr(metadataLayerName, "Name"); + xmlString = this.filterXMLString("", xmlString); + //write this string to a file + xmlFileOutputStream = new FileOutputStream (xmlFile); + new PrintStream(xmlFileOutputStream).print(xmlString); + + return xmlFile; + + } finally { + IOUtils.closeQuietly(xmlFileOutputStream); + } } @Override @@ -161,6 +190,88 @@ public String getXMLStringFromId(String layerID, String xmlFormat) throws Except return xmlString; } + + @Override + public String getMetadataAsHtml(String layerID) throws Exception { + String xmlString = this.getXMLStringFromSolr(layerID, "LayerId"); + + Document document = null; + try { + document = buildXMLDocFromString(layerId, xmlString); + } catch (ParserConfigurationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SAXException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + //get the metadata type and correct xslt document + + Source xmlSource = new DOMSource(document); + + StringWriter stringWriter = new StringWriter(); + StreamResult streamResult = new StreamResult(stringWriter); + + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + + Source xslt = new StreamSource(getStyleSheet(document)); + + Transformer transformer = transformerFactory.newTransformer(xslt); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + + transformer.transform(xmlSource, streamResult); + String outputString = stringWriter.toString(); + + return outputString; + + } + + File getStyleSheet(Document document) throws Exception{ + MetadataType metadataType = getMetadataType(document); + //getMetadataType throws an exception if not fgdc or iso19139 + if (metadataType.equals(MetadataType.FGDC)){ + return this.getFgdcStyleSheet().getFile(); + } else { + return this.getIso19139StyleSheet().getFile(); + } + } + + public static MetadataType getMetadataType(Document document) throws Exception { + MetadataType metadataType = null; + try { + //FGDC Content Standards for Digital Geospatial Metadata + //FGDC-STD-001-1998 + NodeList rootNodes = document.getElementsByTagName("metadata"); + if (rootNodes.getLength() > 0){ + if (document.getElementsByTagName("metstdn").item(0).getTextContent().toLowerCase().contains("fgdc")){ + metadataType = MetadataType.FGDC; + } + } + } catch (Exception e){/*ignore*/ + //document.getElementsByTagName("metstdn").item(0).getTextContent().toLowerCase(); + } + + try { + + NodeList rootNodes = document.getElementsByTagNameNS("*", "MD_Metadata"); + NodeList altRootNodes = document.getElementsByTagNameNS("*", "MI_Metadata"); + int totalNodes = rootNodes.getLength() + altRootNodes.getLength(); + if (totalNodes > 0){ + metadataType = MetadataType.ISO_19139; + + } + } catch (Exception e){/*ignore*/} + + if (metadataType == null){ + //throw an exception...metadata type is not supported + throw new Exception("Metadata Type is not supported."); + } + return metadataType; + } /* * @@ -279,4 +390,20 @@ public String getContactAddress(String layerID){ } return fullAddress; } + + public Resource getFgdcStyleSheet() { + return fgdcStyleSheet; + } + + public void setFgdcStyleSheet(Resource fgdcStyleSheet) { + this.fgdcStyleSheet = fgdcStyleSheet; + } + + public Resource getIso19139StyleSheet() { + return iso19139StyleSheet; + } + + public void setIso19139StyleSheet(Resource iso19139StyleSheet) { + this.iso19139StyleSheet = iso19139StyleSheet; + } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MetadataRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/download/MetadataRetriever.java similarity index 78% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/MetadataRetriever.java rename to geoportal_1/src/main/java/org/opengeoportal/download/MetadataRetriever.java index e47e368..3f776ae 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MetadataRetriever.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/MetadataRetriever.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import java.io.File; @@ -9,4 +9,5 @@ public interface MetadataRetriever { String getContactName(String layerID); String getContactPhoneNumber(String layerId); String getContactAddress(String layerID); + String getMetadataAsHtml(String layerID) throws Exception; } diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/MethodLevelDownloadRequest.java b/geoportal_1/src/main/java/org/opengeoportal/download/MethodLevelDownloadRequest.java new file mode 100644 index 0000000..5eaeda8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/MethodLevelDownloadRequest.java @@ -0,0 +1,49 @@ +package org.opengeoportal.download; + +import java.util.ArrayList; +import java.util.List; + +import org.opengeoportal.download.types.LayerRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MethodLevelDownloadRequest { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + private String downloadKey; + private LayerDownloader layerDownloader; + private List requestList = new ArrayList(); + + MethodLevelDownloadRequest(String downloadKey, LayerDownloader layerDownloader){ + this.downloadKey = downloadKey; + this.layerDownloader = layerDownloader; + setRequestList(new ArrayList()); + } + + public List getRequestList() { + return requestList; + } + + public void setRequestList(List layerRequests){ + requestList = layerRequests; + } + public void addLayerRequest(LayerRequest layerRequest) { + this.requestList.add(layerRequest); + } + + public LayerDownloader getLayerDownloader() { + return layerDownloader; + } + + public void setLayerDownloader(LayerDownloader layerDownloader) { + this.layerDownloader = layerDownloader; + } + + public String getDownloadKey() { + return downloadKey; + } + + public void setDownloadKey(String downloadKey) { + this.downloadKey = downloadKey; + } + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MultiLayerDownloader.java b/geoportal_1/src/main/java/org/opengeoportal/download/MultiLayerDownloader.java similarity index 69% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/MultiLayerDownloader.java rename to geoportal_1/src/main/java/org/opengeoportal/download/MultiLayerDownloader.java index 477cac6..098195f 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/MultiLayerDownloader.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/MultiLayerDownloader.java @@ -1,14 +1,15 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.UUID; import java.util.concurrent.Future; -import org.OpenGeoPortal.Download.Methods.MultiLayerDownloadMethod; -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Download.Types.LayerRequest.Status; +import org.opengeoportal.download.methods.MultiLayerDownloadMethod; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.download.types.LayerRequest.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; @@ -24,9 +25,8 @@ //and take care of layer status as much as possible public class MultiLayerDownloader implements LayerDownloader { private MultiLayerDownloadMethod multiLayerDownloadMethod; - private RequestStatusManager requestStatusManager; final Logger logger = LoggerFactory.getLogger(this.getClass()); - private List> downloadFutures = new ArrayList>(); + private List>> downloadFutures = new ArrayList>>(); @Async @Override @@ -37,7 +37,7 @@ public void downloadLayers(UUID requestId, MethodLevelDownloadRequest request) t //check to see if the filename exists //this should fire off a callable that asynchronously calls the download method try { - Future currentFile = this.multiLayerDownloadMethod.download(currentLayer); + Future> currentFile = this.multiLayerDownloadMethod.download(currentLayer); downloadFutures.add(currentFile); } catch (Exception e){ //e.printStackTrace(); @@ -47,23 +47,11 @@ public void downloadLayers(UUID requestId, MethodLevelDownloadRequest request) t } } List downloadedLayers = new ArrayList(); - for (Future currentFuture: downloadFutures){ - downloadedLayers.add(currentFuture.get()); + for (Future> currentFuture: downloadFutures){ + downloadedLayers.addAll(currentFuture.get()); } } - - - public RequestStatusManager getRequestStatusManager() { - return requestStatusManager; - } - - public void setRequestStatusManager(RequestStatusManager requestStatusManager) { - this.requestStatusManager = requestStatusManager; - } - - - public MultiLayerDownloadMethod getMultiLayerDownloadMethod() { return multiLayerDownloadMethod; } @@ -74,4 +62,9 @@ public void setMultiLayerDownloadMethod( MultiLayerDownloadMethod multiLayerDownloadMethod) { this.multiLayerDownloadMethod = multiLayerDownloadMethod; } + + @Override + public Boolean hasRequiredInfo(LayerRequest layer) { + return multiLayerDownloadMethod.hasRequiredInfo(layer); + } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/PerLayerDownloader.java b/geoportal_1/src/main/java/org/opengeoportal/download/PerLayerDownloader.java similarity index 75% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/PerLayerDownloader.java rename to geoportal_1/src/main/java/org/opengeoportal/download/PerLayerDownloader.java index 2b525b5..86e847e 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/PerLayerDownloader.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/PerLayerDownloader.java @@ -1,12 +1,14 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import java.io.File; import java.util.List; +import java.util.Set; import java.util.UUID; +import java.util.concurrent.Future; -import org.OpenGeoPortal.Download.Methods.PerLayerDownloadMethod; -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Download.Types.LayerRequest.Status; +import org.opengeoportal.download.methods.PerLayerDownloadMethod; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.download.types.LayerRequest.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +29,7 @@ public class PerLayerDownloader implements LayerDownloader { private DownloadPackager downloadPackager; final Logger logger = LoggerFactory.getLogger(this.getClass()); + @SuppressWarnings("unchecked") @Async @Override public void downloadLayers(UUID requestId, MethodLevelDownloadRequest downloadRequest) throws Exception { @@ -48,7 +51,7 @@ public void downloadLayers(UUID requestId, MethodLevelDownloadRequest downloadRe int successCount = 0; for (LayerRequest currentLayer: layerList){ try{ - currentLayer.getDownloadedFiles().add((File) currentLayer.getFutureValue().get()); + currentLayer.getDownloadedFiles().addAll((Set) currentLayer.getFutureValue().get()); currentLayer.setStatus(Status.SUCCESS); successCount++; logger.info("finished download for: " + currentLayer.getLayerNameNS()); @@ -60,7 +63,9 @@ public void downloadLayers(UUID requestId, MethodLevelDownloadRequest downloadRe } if (successCount > 0){ - downloadPackager.packageFiles(requestId); + Future ready = downloadPackager.packageFiles(requestId); //this is going to try to package files each time a download method is complete. + Boolean response = ready.get(); + logger.info("Packager response: " + Boolean.toString(response)); } else { logger.error("No Files to package. Download failed."); } @@ -75,5 +80,10 @@ public void setPerLayerDownloadMethod(PerLayerDownloadMethod perLayerDownloadMet this.perLayerDownloadMethod = perLayerDownloadMethod; } + @Override + public Boolean hasRequiredInfo(LayerRequest layer) { + return perLayerDownloadMethod.hasRequiredInfo(layer); + } + } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusManager.java b/geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusManager.java similarity index 62% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusManager.java rename to geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusManager.java index 89d0fa1..6006275 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusManager.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusManager.java @@ -1,15 +1,13 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; -import java.util.List; import java.util.UUID; -import org.OpenGeoPortal.Export.GeoCommons.GeoCommonsExportRequest; -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest; +import org.opengeoportal.export.geocommons.GeoCommonsExportRequest; +import org.opengeoportal.proxy.controllers.ImageRequest; public interface RequestStatusManager { - void addDownloadRequest(UUID requestId, String sessionId, - List layerRequests); + void addDownloadRequest(DownloadRequest downloadRequest); void removeRequestsBySessionId(String sessionId); diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusManagerImpl.java b/geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusManagerImpl.java similarity index 89% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusManagerImpl.java rename to geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusManagerImpl.java index b3d78a1..b5b0113 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusManagerImpl.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusManagerImpl.java @@ -1,11 +1,11 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import org.OpenGeoPortal.Export.GeoCommons.GeoCommonsExportRequest; -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest; +import org.opengeoportal.export.geocommons.GeoCommonsExportRequest; +import org.opengeoportal.proxy.controllers.ImageRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -95,13 +95,9 @@ private synchronized void removeDownloadRequestsBySessionId(String sessionId){ } @Override - public synchronized void addDownloadRequest(UUID requestId, String sessionId, List layerRequests){ + public synchronized void addDownloadRequest(DownloadRequest downloadRequest){ logger.info("Adding download request status object..."); - DownloadRequest requestStatus = new DownloadRequest(); - requestStatus.setRequestId(requestId); - requestStatus.setSessionId(sessionId); - requestStatus.setRequestList(layerRequests); - globalDownloadRequestRegistry.add(requestStatus); + globalDownloadRequestRegistry.add(downloadRequest); } @Override diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusSessionListener.java b/geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusSessionListener.java similarity index 97% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusSessionListener.java rename to geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusSessionListener.java index 9d81a42..2e447a4 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/RequestStatusSessionListener.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/RequestStatusSessionListener.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Download; +package org.opengeoportal.download; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/ConfigRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/download/config/ConfigRetriever.java similarity index 89% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/ConfigRetriever.java rename to geoportal_1/src/main/java/org/opengeoportal/download/config/ConfigRetriever.java index 6541270..9609c67 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Config/ConfigRetriever.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/config/ConfigRetriever.java @@ -1,14 +1,15 @@ -package org.OpenGeoPortal.Download.Config; +package org.opengeoportal.download.config; import java.io.File; import java.io.IOException; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.Resource; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + /** * an abstract class for reading a JSON config file * @author chris diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/config/DownloadConfigRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/download/config/DownloadConfigRetriever.java new file mode 100644 index 0000000..5c82d9c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/config/DownloadConfigRetriever.java @@ -0,0 +1,10 @@ +package org.opengeoportal.download.config; + +import java.io.IOException; + +import com.fasterxml.jackson.databind.JsonNode; + +public interface DownloadConfigRetriever { + + JsonNode getDownloadConfig() throws IOException; +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/config/OgpDownloadConfigRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/download/config/OgpDownloadConfigRetriever.java new file mode 100644 index 0000000..9b595b8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/config/OgpDownloadConfigRetriever.java @@ -0,0 +1,20 @@ +package org.opengeoportal.download.config; + +import java.io.IOException; + +import org.opengeoportal.download.config.ConfigRetriever; +import org.opengeoportal.download.config.DownloadConfigRetriever; + +import com.fasterxml.jackson.databind.JsonNode; + +public class OgpDownloadConfigRetriever extends ConfigRetriever implements DownloadConfigRetriever { + + @Override + public synchronized JsonNode getDownloadConfig() throws IOException { + + readConfigFile(); + + return this.configContents; + } + +} \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRequestController.java b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/DownloadRequestController.java similarity index 53% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRequestController.java rename to geoportal_1/src/main/java/org/opengeoportal/download/controllers/DownloadRequestController.java index e9f4b3c..3498702 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRequestController.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/DownloadRequestController.java @@ -1,50 +1,55 @@ -package org.OpenGeoPortal.Download.Controllers; +package org.opengeoportal.download.controllers; +import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import org.OpenGeoPortal.Download.DownloadHandler; +import org.opengeoportal.download.DownloadHandler; +import org.opengeoportal.download.DownloadHandlerFactory; +import org.opengeoportal.download.DownloadRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestContextHolder; +import com.fasterxml.jackson.databind.ObjectMapper; + @Controller @RequestMapping("/requestDownload") public class DownloadRequestController { final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired - private DownloadHandler downloadHandler; + private DownloadHandlerFactory downloadHandlerFactory; + + + @RequestMapping(method=RequestMethod.POST, headers = "content-type=application/x-www-form-urlencoded", produces="application/json") + public @ResponseBody Map processDownload(@RequestBody String downloadRequest) throws Exception { - @RequestMapping(method=RequestMethod.POST, produces="application/json") - public @ResponseBody Map processDownload(@RequestParam("layers[]") String[] layers, @RequestParam("email") String email, - @RequestParam("bbox") String bbox) throws Exception { - /** + /** * This servlet should receive a POST request with an object containing * all the info needed for each layer to be downloaded. The servlet calls a class - * that handles all of the download logic. Additionally, it checks the session - * variable "username" to see if the user has authenticated. A boolean is passed - * to the download code. If one has been provided, an email address is passed to the + * that handles all of the download logic. If one has been provided, an email address is passed to the * download code to accomodate systems that email a link to the user for their layers * * @author Chris Barnett */ - logger.debug(layers[0]); - //do data validation here - String[] arrBbox = bbox.split(","); - Map layerMap = new HashMap(); - for (int i = 0; i < layers.length; i++){ - String[] layerInfo = layers[i].split("="); - layerMap.put(layerInfo[0], layerInfo[1]); - } + + ObjectMapper mapper = new ObjectMapper(); + + DownloadRequest submittedRequest = mapper.readValue(URLDecoder.decode(downloadRequest, "UTF-8"), DownloadRequest.class); + String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId(); - UUID requestId = downloadHandler.requestLayers(sessionId, layerMap, arrBbox, email, true); + submittedRequest.setSessionId(sessionId); + + DownloadHandler downloadHandler = downloadHandlerFactory.getObject(); + UUID requestId = downloadHandler.requestLayers(submittedRequest); + Map map = new HashMap(); map.put("requestId", requestId.toString()); return map; diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/controllers/DownloadRetrievalController.java b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/DownloadRetrievalController.java new file mode 100644 index 0000000..39f9945 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/DownloadRetrievalController.java @@ -0,0 +1,68 @@ +package org.opengeoportal.download.controllers; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.FileUtils; +import org.opengeoportal.download.DownloadRequest; +import org.opengeoportal.download.MethodLevelDownloadRequest; +import org.opengeoportal.download.RequestStatusManager; +import org.opengeoportal.download.types.LayerRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequestMapping("/getDownload") +public class DownloadRetrievalController { + @Autowired + private RequestStatusManager requestStatusManager; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + final static long TIMEOUT = 5000;//milliseconds + final static long INTERVAL = 500;//milliseconds + + @RequestMapping(method=RequestMethod.GET) + public void getDownload(@RequestParam("requestId") String requestId, HttpServletResponse response) throws IOException, InterruptedException { + + DownloadRequest layerDownloadRequest = requestStatusManager.getDownloadRequest(UUID.fromString(requestId)); + File downloadPackage = layerDownloadRequest.getDownloadPackage(); + long counter = 0; + //a final check. + Boolean shouldHaveFiles = false; + for (MethodLevelDownloadRequest mldlRequest:layerDownloadRequest.getRequestList()){ + for (LayerRequest layerRequest: mldlRequest.getRequestList()){ + if (layerRequest.getShouldHaveFiles()){ + shouldHaveFiles = true; + break; + } + } + } + if (shouldHaveFiles){ + while ((downloadPackage == null)||!downloadPackage.exists()){ + Thread.sleep(INTERVAL); + counter += INTERVAL; + if (counter >= TIMEOUT){ + logger.error("Download timed out. File could not be found."); + throw new IOException("File does not exist."); + } + } + if (counter > 0){ + logger.info("Milliseconds slept: " + Long.toString(counter)); + } + + response.setContentLength((int) downloadPackage.length()); + response.setContentType("application/zip"); + response.addHeader("Content-Disposition", "attachment;filename=" + downloadPackage.getName()); + FileUtils.copyFile(downloadPackage, response.getOutputStream()); + } else { + throw new IOException("No files to download."); + } + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/controllers/MetadataDownloadController.java b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/MetadataDownloadController.java new file mode 100644 index 0000000..82bf68c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/MetadataDownloadController.java @@ -0,0 +1,109 @@ +package org.opengeoportal.download.controllers; + +import javax.servlet.http.HttpServletResponse; + +import org.opengeoportal.download.MetadataRetriever; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.utilities.OgpFileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping("/getMetadata") +public class MetadataDownloadController { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private MetadataRetriever metadataRetriever; + @Autowired + private LayerInfoRetriever layerInfoRetriever; + + /** + * This controller should receive a GET request with the layerId and a boolean "inline" that tells whether the data should + * appear inline or as an attachment + * + * @author Chris Barnett + */ + @RequestMapping(value="/{format}", method=RequestMethod.GET) + public @ResponseBody void processMetadataDownload(@PathVariable String format, @RequestParam("download") Boolean download, @RequestParam("id") String id, HttpServletResponse response) throws Exception { + + handleMetadataRequest(id, download, format, response); + } + + + @RequestMapping(method=RequestMethod.GET) + public @ResponseBody void processMetadataDownload(@RequestParam("id") String id, HttpServletResponse response) throws Exception { + + handleMetadataRequest(id, false, "html", response); + } + + private void handleMetadataRequest(String id, Boolean download, String format, HttpServletResponse response) throws Exception{ + + String metadataString = getMetadataString(id, format); + + response.setContentLength(metadataString.getBytes("UTF-8").length); + + response.setHeader("Content-Disposition", getContentDisposition(download) + "; filename=\"" + + getFileName(id) + "." + format.toLowerCase().trim() + "\""); + response.setContentType(getContentType(format)); + // return a link to the zip file, or info to create link + response.getWriter().write(metadataString); + } + + private String getMetadataString(String layerId, String format) throws Exception{ + String metadataString = ""; + if (format.equalsIgnoreCase("xml")){ + metadataString = this.metadataRetriever.getXMLStringFromId(layerId, "fgdc"); + + } else if (format.equalsIgnoreCase("html")){ + metadataString = this.metadataRetriever.getMetadataAsHtml(layerId); + } else { + throw new Exception("Unrecognized format: " + format); + } + + return metadataString; + } + + private String getContentDisposition(Boolean attachment){ + String disposition; + + if (attachment){ + disposition = "attachment"; + } else { + disposition = "inline"; + } + + return disposition; + } + + private String getFileName(String id){ + String fileName = null; + try { + fileName = layerInfoRetriever.getAllLayerInfo(id).getName(); + } catch (Exception e) { + e.printStackTrace(); + fileName = id; + } + + return OgpFileUtils.filterName(fileName); + } + + private String getContentType(String format) throws Exception{ + String mimeType; + if (format.equalsIgnoreCase("html")){ + mimeType = "application/html;charset=UTF-8"; + } else if (format.equalsIgnoreCase("xml")){ + mimeType = "application/xml;charset=UTF-8"; + + } else { + throw new Exception("Unrecognized mime-type."); + } + return mimeType; + } +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/RequestStatus.java b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestStatus.java similarity index 54% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/RequestStatus.java rename to geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestStatus.java index f40dd02..d3bb746 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/RequestStatus.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestStatus.java @@ -1,10 +1,10 @@ -package org.OpenGeoPortal.Download.Controllers; +package org.opengeoportal.download.controllers; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import org.OpenGeoPortal.Download.Controllers.RequestStatusController.StatusSummary; +import org.opengeoportal.download.controllers.RequestStatusController.StatusSummary; public class RequestStatus { private List requestStatus = new ArrayList(); @@ -16,27 +16,21 @@ public void addRequestStatusElement(UUID requestId, String type, StatusSummary s requestStatus.add(new RequestStatusElement(requestId, type, status)); } - /*public enum ElementType { - Layer, Image + public void addRequestStatusElement(UUID requestId, String type, StatusSummary status, List requestedLayerStatuses){ + requestStatus.add(new ExtendedRequestStatusElement(requestId, type, status, requestedLayerStatuses)); } - public enum DeliveryMethod { - Direct, Email - }*/ - public class RequestStatusElement { private UUID requestId; - //private ElementType type;//layer, image, etc. - //private DeliveryMethod delivery;//direct, email, etc. private String type; private StatusSummary status; + RequestStatusElement(UUID requestId, String type, StatusSummary status){ this.requestId = requestId; this.setType(type); this.status = status; } - public UUID getRequestId() { return requestId; } @@ -60,18 +54,25 @@ public String getType() { public void setType(String type) { this.type = type; } + + } + + public class ExtendedRequestStatusElement extends RequestStatusElement { + private List requestedLayerStatuses; - /*public DeliveryMethod getDelivery() { - return delivery; + ExtendedRequestStatusElement(UUID requestId, String type, StatusSummary status, List requestedLayerStatuses){ + super(requestId, type, status); + this.setRequestedLayerStatuses(requestedLayerStatuses); } - - - public void setDelivery(DeliveryMethod delivery) { - this.delivery = delivery; - }*/ - + public List getRequestedLayerStatuses() { + return requestedLayerStatuses; + } + + public void setRequestedLayerStatuses(List requestedLayerStatuses) { + this.requestedLayerStatuses = requestedLayerStatuses; + } } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/RequestStatusController.java b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestStatusController.java similarity index 72% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/RequestStatusController.java rename to geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestStatusController.java index 9dce61f..5765846 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/RequestStatusController.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestStatusController.java @@ -1,14 +1,16 @@ -package org.OpenGeoPortal.Download.Controllers; +package org.opengeoportal.download.controllers; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import org.OpenGeoPortal.Download.DownloadRequest; -import org.OpenGeoPortal.Download.RequestStatusManager; -import org.OpenGeoPortal.Export.GeoCommons.GeoCommonsExportRequest; -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest; +import org.opengeoportal.download.DownloadRequest; +import org.opengeoportal.download.MethodLevelDownloadRequest; +import org.opengeoportal.download.RequestStatusManager; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.export.geocommons.GeoCommonsExportRequest; +import org.opengeoportal.proxy.controllers.ImageRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -55,7 +57,7 @@ public enum StatusSummary { this.downloadRequests.add(dlRequest); } } catch (Exception e){ - e.printStackTrace(); + //e.printStackTrace(); } try { ImageRequest imRequest = requestStatusManager.getImageRequest(UUID.fromString(requestId)); @@ -63,7 +65,7 @@ public enum StatusSummary { this.imageRequests.add(imRequest); } } catch (Exception e){ - e.printStackTrace(); + //e.printStackTrace(); } try { GeoCommonsExportRequest exRequest = requestStatusManager.getExportRequest(UUID.fromString(requestId)); @@ -71,13 +73,14 @@ public enum StatusSummary { this.exportRequests.add(exRequest); } } catch (Exception e){ - e.printStackTrace(); + //e.printStackTrace(); } } if ((this.downloadRequests.size() + this.imageRequests.size() + this.exportRequests.size()) > 0){ return getRequestStatus(); } else { logger.error("no requests found"); + //should this throw an exception or just return an empty response? throw new IOException("No requests found."); } } @@ -88,11 +91,33 @@ private RequestStatus getRequestStatus(){ //logger.info("download requests size: " + Integer.toString(downloadRequests.size())); for (DownloadRequest downloadRequest: downloadRequests){ UUID requestId = downloadRequest.getRequestId(); + List requests = downloadRequest.getRequestList(); + List layerStatuses = new ArrayList(); + for (MethodLevelDownloadRequest mldRequest: requests){ + for (LayerRequest layerRequest : mldRequest.getRequestList()){ + RequestedLayerStatus layerStatus = new RequestedLayerStatus(); + if (layerRequest.getShouldHaveFiles()){ + layerStatus.setResponseType("download"); + } else { + layerStatus.setResponseType("email"); + } + layerStatus.setStatus(layerRequest.getStatus()); + layerStatus.setId(layerRequest.getId()); + layerStatus.setBounds(layerRequest.getRequestedBounds().toStringLatLon()); + try { + layerStatus.setName(layerRequest.getLayerNameNS()); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + layerStatuses.add(layerStatus); + } + } logger.debug("RequestId: " + requestId.toString()); String type = "layer"; StatusSummary status = downloadRequest.getStatusSummary(); logger.debug("Download status summary: " + status.toString()); - requestStatus.addRequestStatusElement(requestId, type, status); + requestStatus.addRequestStatusElement(requestId, type, status, layerStatuses); } for (ImageRequest imageRequest: imageRequests){ diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestedLayerStatus.java b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestedLayerStatus.java new file mode 100644 index 0000000..131ec0a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/RequestedLayerStatus.java @@ -0,0 +1,49 @@ +package org.opengeoportal.download.controllers; + +import org.opengeoportal.download.types.LayerRequest.Status; +import org.opengeoportal.layer.BoundingBox; + +public class RequestedLayerStatus { + private Status status; + private String id; + private String bounds; + private String name; + private String responseType; + + public Status getStatus() { + return status; + } + public void setStatus(Status status) { + this.status = status; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getBounds() { + return bounds; + } + public void setBounds(BoundingBox bounds) { + this.bounds = bounds.toStringLatLon(); + } + public void setBounds(String bounds) { + this.bounds = bounds; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getResponseType() { + return responseType; + } + public void setResponseType(String responseType) { + this.responseType = responseType; + } + + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/controllers/SubmittedDownloadRequest.java b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/SubmittedDownloadRequest.java new file mode 100644 index 0000000..35aebc8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/controllers/SubmittedDownloadRequest.java @@ -0,0 +1,253 @@ +package org.opengeoportal.download.controllers; + +import java.io.File; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.Future; + +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.solr.SolrRecord; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class SubmittedDownloadRequest { + @JsonIgnore + final Logger logger = LoggerFactory.getLogger(this.getClass()); + @JsonIgnore + private UUID requestId; + @JsonIgnore + private String sessionId; + @JsonProperty("srs") + String srs; + @JsonProperty("bbox") + String bbox; + @JsonIgnore + BoundingBox bounds; + @JsonProperty("format") + String format; + @JsonProperty("height") + int height; + @JsonProperty("width") + int width; + @JsonProperty("layers") + List layerImage; + @JsonIgnore + File downloadFile; + @JsonIgnore + Boolean downloadFileSet = false; + + public enum ImageStatus { + PROCESSING, + FAILED, + SUCCESS + } + + public File getDownloadFile() { + return downloadFile; + } + + public void setDownloadFile(File downloadFile) { + this.downloadFile = downloadFile; + this.downloadFileSet = true; + } + + public String getBbox() { + return bbox; + } + + public void setBbox(String bbox) { + this.bbox = bbox; + } + + public String getSrs() { + return srs; + } + + public void setSrs(String srs) { + this.srs = srs; + } + + public BoundingBox getBounds() { + return bounds; + } + + public void setBounds(BoundingBox bounds) { + this.bounds = bounds; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public void setLayers(List layers){ + this.layerImage = layers; + } + + + public List getLayers(){ + return this.layerImage; + } + + public Set getLayerIds(){ + Set layerIds = new HashSet(); + for (LayerImage layerImage: this.layerImage){ + layerIds.add(layerImage.getLayerId()); + } + return layerIds; + } + + public UUID getRequestId() { + return requestId; + } + + public void setRequestId(UUID requestId) { + this.requestId = requestId; + } + + public String getSessionId() { + return sessionId; + } + + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + + public static class LayerImage implements Comparable { + @JsonIgnore + String name; + @JsonProperty("opacity") + int opacity; + @JsonProperty("zIndex") + int zIndex; + @JsonProperty("layerId") + String layerId; + String sld; + @JsonIgnore + String baseUrl; + @JsonIgnore + String queryString; + @JsonIgnore + SolrRecord solrRecord; + @JsonIgnore + File imageFile; + @JsonIgnore + Future imageFileFuture; + @JsonIgnore + ImageStatus imageStatus = ImageStatus.PROCESSING; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public String getLayerId() { + return layerId; + } + public void setLayerId(String layerId) { + this.layerId = layerId; + } + public String getSld() { + return sld; + } + public void setSld(String sld) { + this.sld = sld; + } + public int getOpacity() { + return opacity; + } + public void setOpacity(int opacity) { + this.opacity = opacity; + } + public int getzIndex() { + return zIndex; + } + public void setzIndex(int zIndex) { + this.zIndex = zIndex; + } + + public String getBaseUrl() { + return baseUrl; + } + public void setBaseUrl(String baseUrl) { + this.baseUrl = baseUrl; + } + public String getQueryString() { + return queryString; + } + public void setQueryString(String queryString) { + this.queryString = queryString; + } + public SolrRecord getSolrRecord() { + return solrRecord; + } + public void setSolrRecord(SolrRecord solrRecord) { + this.solrRecord = solrRecord; + } + + public File getImageFile() { + return imageFile; + } + + public void setImageFile(File imageFile) { + this.imageFile = imageFile; + } + + public Future getImageFileFuture() { + return imageFileFuture; + } + + public void setImageFileFuture(Future imageFileFuture) { + this.imageFileFuture = imageFileFuture; + } + + public ImageStatus getImageStatus() { + return imageStatus; + } + + public void setImageStatus(ImageStatus imageStatus) { + this.imageStatus = imageStatus; + } + + @Override + @JsonIgnore + public int compareTo(LayerImage n) { + return (zIndex < n.zIndex ? -1 : + (zIndex == n.zIndex ? 0 : 1)); + } + + @JsonIgnore + public boolean equals(Object o) { + if (!(o instanceof LayerImage)) + return false; + LayerImage n = (LayerImage) o; + return n.layerId.equals(layerId); + } + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/AbstractDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/AbstractDownloadMethod.java new file mode 100644 index 0000000..55ef4c2 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/AbstractDownloadMethod.java @@ -0,0 +1,195 @@ +package org.opengeoportal.download.methods; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.Future; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.DirectoryRetriever; +import org.opengeoportal.utilities.OgpFileUtils; +import org.opengeoportal.utilities.http.HttpRequester; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; + +public abstract class AbstractDownloadMethod { + protected LayerRequest currentLayer; + protected HttpRequester httpRequester; + @Autowired + protected DirectoryRetriever directoryRetriever; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + public HttpRequester getHttpRequester() { + return httpRequester; + } + + public void setHttpRequester(HttpRequester httpRequester) { + this.httpRequester = httpRequester; + } + + public abstract Set getExpectedContentType(); + + public Boolean expectedContentTypeMatched(String foundContentType){ + if (getExpectedContentType().contains(foundContentType)){ + return true; + } else { + return false; + } + } + + public Boolean hasMultiple(){ + //default is false; if a download method might return more than one file, return true (mulitple urls for zip file download, for example) + return false; + } + + @Async + public Future> download(LayerRequest currentLayer) throws Exception { + this.currentLayer = currentLayer; + currentLayer.setMetadata(this.includesMetadata()); + String requestString = ""; + try { + requestString = createDownloadRequest(); + } catch (Exception e){ + e.printStackTrace(); + logger.error("problem creating download request"); + throw new Exception("Problem creating download request"); + } + + File directory = getDirectory(); + Set fileSet = new HashSet(); + List urls = this.getUrls(currentLayer); + for (String url: urls){ + InputStream inputStream = null; + + try{ + inputStream = this.httpRequester.sendRequest(url, requestString, getMethod()); + int status = httpRequester.getStatus(); + if (status != 200){ + throw new Exception("Request Failed! Server responded with: " + Integer.toString(status)); + } + String contentType = httpRequester.getContentType().toLowerCase(); + Boolean contentMatch = expectedContentTypeMatched(contentType); + if (!contentMatch){ + logger.error("Unexpected content type: " + contentType); + //If their is a mismatch with the expected content, but the response is text, we want to at least log the response + if (contentType.toLowerCase().contains("text")||contentType.toLowerCase().contains("html")||contentType.toLowerCase().contains("xml")){ + logger.error("Returned text: " + IOUtils.toString(inputStream)); + } + + throw new Exception("Unexpected content type"); + + } + //Content-Disposition attachment;filename="middle_east_dams.xls" + String fileName = null; + + String contentDisp = ""; + try{ + contentDisp = httpRequester.getHeaderValue("Content-Disposition"); + } catch (Exception e){ + //ignore + } + if (contentDisp.toLowerCase().contains("filename")){ + contentDisp = contentDisp.substring(contentDisp.toLowerCase().indexOf("filename=")); + contentDisp = contentDisp.substring(contentDisp.toLowerCase().indexOf("=") + 1); + fileName = contentDisp.replaceAll("\"", ""); + } else { + fileName = currentLayer.getLayerInfo().getName(); + } + + + File outputFile = OgpFileUtils.createNewFileFromDownload(fileName, contentType, directory); + //FileUtils with a BufferedInputStream seems to be the fastest method with a small sample size. requires more testing + BufferedInputStream bufferedIn = null; + try { + bufferedIn = new BufferedInputStream(inputStream); + FileUtils.copyInputStreamToFile(bufferedIn, outputFile); + fileSet.add(outputFile); + } finally { + IOUtils.closeQuietly(bufferedIn); + } + } finally { + IOUtils.closeQuietly(inputStream); + + } + } + return new AsyncResult>(fileSet); + } + + protected abstract Boolean includesMetadata(); + + protected List urlToUrls(String url){ + List urls = new ArrayList(); + urls.add(url); + return urls; + } + + protected String getUrl(LayerRequest layer) throws Exception{ + return this.getUrls(layer).get(0); + } + + + private File getDirectory() throws IOException{ + File downloadDirectory = this.directoryRetriever.getDownloadDirectory(); + File newDir = File.createTempFile("OGP", "", downloadDirectory); + newDir.delete(); + //Boolean success= + newDir.mkdir(); + newDir.setReadable(true); + newDir.setWritable(true); + return newDir; + } + + public abstract String createDownloadRequest() throws Exception; + + + public String checkUrl(String url) throws MalformedURLException{ + try{ + new URL(url); + } catch (MalformedURLException e){ + logger.error("URL is malformed: '" + url + "'"); + throw new MalformedURLException(); + } + + return url; + } + + public abstract String getMethod(); + + public BoundingBox getClipBounds() throws Exception{ + SolrRecord layerInfo = this.currentLayer.getLayerInfo(); + BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); + BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); + return bounds; + } + + + public Boolean hasRequiredInfo(LayerRequest layerRequest){ + try { + if (getUrls(layerRequest) != null && !getUrls(layerRequest).isEmpty()){ + return true; + } + + } catch (Exception e){ + logger.debug(e.getMessage()); + } + logger.debug("Layer does not have required info for DownloadMethod"); + return false; + } + + public abstract List getUrls(LayerRequest layer) throws Exception; +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/CustomMarshaller.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/CustomMarshaller.java new file mode 100644 index 0000000..4ad05cf --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/CustomMarshaller.java @@ -0,0 +1,56 @@ +package org.opengeoportal.download.methods; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.transform.Source; +import javax.xml.transform.sax.SAXSource; + +import org.springframework.oxm.jaxb.Jaxb2Marshaller; +import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; +import org.xml.sax.XMLReader; + +public class CustomMarshaller extends Jaxb2Marshaller { + + + /*XMLReader reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); + + //System.setProperty( "javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl" ); + + reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + reader.setFeature("http://xml.org/sax/features/validation", false); + + SAXSource source = new SAXSource(reader, new InputSource(is)); + JAXBElement element = u.unmarshal(source, MyElement.class);*/ + + @Override + public Object unmarshal(Source source){ + XMLReader reader = null; + try { + reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); + } catch (SAXException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (ParserConfigurationException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + // saxSource.getXMLReader(); + + try { + reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + reader.setFeature("http://xml.org/sax/features/validation", false); + } catch (SAXNotRecognizedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SAXNotSupportedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + logger.info("trying to parse with custom parser"); + + SAXSource ssource = new SAXSource(reader, SAXSource.sourceToInputSource(source)); + return super.unmarshal(ssource); + } +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/DownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/DownloadMethod.java similarity index 64% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/DownloadMethod.java rename to geoportal_1/src/main/java/org/opengeoportal/download/methods/DownloadMethod.java index 68b36ec..5e8914c 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/DownloadMethod.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/DownloadMethod.java @@ -1,6 +1,6 @@ -package org.OpenGeoPortal.Download.Methods; +package org.opengeoportal.download.methods; -import org.OpenGeoPortal.Download.Types.LayerRequest; +import org.opengeoportal.download.types.LayerRequest; public interface DownloadMethod { diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/EmailDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/EmailDownloadMethod.java new file mode 100644 index 0000000..a7a0c43 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/EmailDownloadMethod.java @@ -0,0 +1,18 @@ +package org.opengeoportal.download.methods; + +import java.util.List; +import java.util.concurrent.Future; + +import org.opengeoportal.download.types.LayerRequest; + +public interface EmailDownloadMethod { + + Boolean includesMetadata(); + + String createDownloadRequest(); + + Future sendEmail(List layerList); + + Boolean hasRequiredInfo(LayerRequest layer); + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceRetriever.java new file mode 100644 index 0000000..3a85f13 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceRetriever.java @@ -0,0 +1,10 @@ +package org.opengeoportal.download.methods; + +import org.geotools.data.simple.SimpleFeatureSource; +import org.opengeoportal.download.types.LayerRequest; + +public interface FeatureSourceRetriever { + SimpleFeatureSource getFeatureSource() throws Exception; + + void createFeatureSourceFromLayerRequest(LayerRequest layerRequest) throws Exception; +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceToShape.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceToShape.java new file mode 100644 index 0000000..35caef3 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceToShape.java @@ -0,0 +1,16 @@ +package org.opengeoportal.download.methods; + +import java.io.File; +import java.util.Set; + +import com.vividsolutions.jts.geom.Envelope; + +public interface FeatureSourceToShape { + + void setFeatureCollectionBBox(Envelope bbox) throws Exception; + + FeatureSourceRetriever getFeatureSourceRetriever(); + + Set exportToShapefiles() throws Exception; + +} \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceToShapeImpl.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceToShapeImpl.java new file mode 100644 index 0000000..3d5ca11 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/FeatureSourceToShapeImpl.java @@ -0,0 +1,203 @@ +package org.opengeoportal.download.methods; + +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.HashSet; + +import org.geotools.data.DefaultTransaction; +import org.geotools.data.FeatureSource; +import org.geotools.data.Query; +import org.geotools.data.Transaction; +import org.geotools.data.shapefile.ShapefileDataStore; +import org.geotools.data.shapefile.ShapefileDataStoreFactory; +import org.geotools.data.simple.SimpleFeatureCollection; +import org.geotools.data.simple.SimpleFeatureSource; +import org.geotools.data.simple.SimpleFeatureStore; +import org.geotools.factory.CommonFactoryFinder; +import org.geotools.factory.GeoTools; +import org.geotools.feature.FeatureCollection; +import org.geotools.referencing.crs.DefaultGeographicCRS; +import org.opengeoportal.utilities.DirectoryRetriever; +import org.opengeoportal.utilities.OgpFileUtils; +import org.opengis.feature.simple.SimpleFeature; +import org.opengis.feature.simple.SimpleFeatureType; +import org.opengis.filter.FilterFactory; +import org.opengis.filter.spatial.BBOX; +import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +import com.vividsolutions.jts.geom.Envelope; + +public class FeatureSourceToShapeImpl implements FeatureSourceToShape { + private FeatureSourceRetriever featureSourceRetriever; + + @Autowired + protected DirectoryRetriever directoryRetriever; + + FeatureCollection featureCollection = null; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public FeatureSourceRetriever getFeatureSourceRetriever() { + return featureSourceRetriever; + } + + public void setFeatureSourceRetriever( + FeatureSourceRetriever featureSourceRetriever) { + this.featureSourceRetriever = featureSourceRetriever; + + } + + /** + * set a FeatureCollection from a FeatureSource with a bbox query + * + * @param typeName + * @param bbox + * @throws Exception + */ + @Override + public void setFeatureCollectionBBox(Envelope bbox) throws Exception{ + FeatureSource featureSource = featureSourceRetriever.getFeatureSource(); + String geomName = ""; + try{ + geomName = featureSource.getSchema().getGeometryDescriptor().getLocalName(); + logger.info(geomName); + } catch (Exception e){ + + } + FilterFactory ff = CommonFactoryFinder.getFilterFactory( GeoTools.getDefaultHints() ); + //bbox(String propertyName, double minx, double miny, double maxx, double maxy, String srs) + CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84; + + BBOX filter = ff.bbox(geomName, bbox.getMinX(), bbox.getMinY(), bbox.getMaxX(), bbox.getMaxY(), crs.toWKT()); + // = ff.intersects( ff.property( geomName ), ff.literal( polygon ) ); + logger.info(Boolean.toString(filter == null)); + + String typeName = featureSource.getSchema().getTypeName(); + logger.info(typeName); + + Query query = new Query( typeName, filter, new String[]{ geomName } ); + + logger.info(Boolean.toString(query == null)); + if (query == null){ + featureCollection = featureSource.getFeatures(); + } else { + featureCollection = featureSource.getFeatures(query); + } + } + + /** + * Copy Features from a FeatureCollection to a feature store. + * + * @param targetFeatureStore + * @throws IOException + */ + protected void copyFeatures(SimpleFeatureSource featureSource, SimpleFeatureSource targetSource) throws IOException { + + /* + * Write the features to the shapefile + */ + Transaction transaction = new DefaultTransaction("create"); + + if (targetSource instanceof SimpleFeatureStore) { + + /* + * SimpleFeatureStore has a method to add features from a + * SimpleFeatureCollection object, so we use the ListFeatureCollection + * class to wrap our list of features. + */ + SimpleFeatureStore targetStore = (SimpleFeatureStore) targetSource; + targetStore.setTransaction(transaction); + + try { + SimpleFeatureCollection collection = featureSource.getFeatures(); + //SimpleFeatureIterator collIter = collection.features(); + + logger.info(collection.getSchema().toString()); + logger.info(targetStore.getSchema().toString()); + /* + * 2013-11-04 17:11:12 FeatureSourceToShapeImpl [INFO] SimpleFeatureTypeImpl http://massgis.state.ma.us/featuretype:massgis:GISDATA.MBTA_ARC identified extends Feature(LINE:LINE,ROUTE:ROUTE,GRADE:GRADE,SHAPE:SHAPE) +2013-11-04 17:11:12 FeatureSourceToShapeImpl [INFO] SimpleFeatureTypeImpl GISDATA_MBTA_ARC identified extends lineFeature(the_geom:MultiLineString,LINE:LINE,ROUTE:ROUTE,GRADE:GRADE) + */ + targetStore.addFeatures(collection); + transaction.commit(); + + } catch (Exception problem) { + problem.printStackTrace(); + transaction.rollback(); + + } finally { + transaction.close(); + } + } else { + logger.error("Does not support read/write access"); + //System.exit(1); //no, let's not do that! throw an exception? + } + } + + /** + * export a shapefile from a FeatureCollection + * + * @return + * @throws Exception + */ + @Override + public Set exportToShapefiles() throws Exception { + + File directory = directoryRetriever.getDownloadDirectory(); + + SimpleFeatureSource featureSource = featureSourceRetriever.getFeatureSource(); + SimpleFeatureType ft = featureSource.getSchema(); + + String typeName = ft.getTypeName(); + String fileName = OgpFileUtils.filterName(typeName); + + File fileSHP = new File(directory, fileName + ".shp"); + fileSHP.createNewFile(); + + /* + * Get an output file name and create the new shapefile + */ + + ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory(); + + Map params = new HashMap(); + params.put("url", fileSHP.toURI().toURL()); + params.put("create spatial index", Boolean.TRUE); + + ShapefileDataStore shpDataStore = (ShapefileDataStore) dataStoreFactory.createNewDataStore(params); + //logger.info(ft.toString()); + shpDataStore.createSchema(ft); + /* + * You can comment out this line if you are using the createFeatureType method (at end of + * class file) rather than DataUtilities.createType + */ + // newDataStore.forceSchemaCRS(DefaultGeographicCRS.WGS84); + String[] typeNames = shpDataStore.getTypeNames(); + SimpleFeatureSource shpFeatureSource =shpDataStore.getFeatureSource(typeNames[0]); + + logger.info("created schema"); + logger.info("created feature store"); + copyFeatures(featureSource, shpFeatureSource); + logger.info("copied features"); + + Set shapeFileSet = new HashSet(); + File fileDBF = new File(directory, fileName + ".dbf"); + File fileSHX = new File(directory, fileName + ".shx"); + File filePRJ = new File(directory, fileName + ".prj"); + + shapeFileSet.add(fileSHP); + shapeFileSet.add(fileSHX); + shapeFileSet.add(filePRJ); + shapeFileSet.add(fileDBF); + + return shapeFileSet; + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/FileDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/FileDownloadMethod.java new file mode 100644 index 0000000..85182fa --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/FileDownloadMethod.java @@ -0,0 +1,57 @@ +package org.opengeoportal.download.methods; + +import java.net.MalformedURLException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.opengeoportal.download.types.LayerRequest; + +import com.fasterxml.jackson.core.JsonParseException; + +public class FileDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { + private static final Boolean INCLUDES_METADATA = false; + private static final String METHOD = "GET"; + + @Override + public Boolean includesMetadata() { + return INCLUDES_METADATA; + } + + @Override + public String getMethod(){ + return METHOD; + } + + @Override + public Set getExpectedContentType(){ + Set expectedContentType = new HashSet(); + expectedContentType.add("application/zip"); + return expectedContentType; + } + + @Override + public Boolean expectedContentTypeMatched(String foundContentType){ + //a file download could be anything + return true; + } + + @Override + public String createDownloadRequest() throws Exception { + return ""; + } + + @Override + public List getUrls(LayerRequest layer) throws MalformedURLException, JsonParseException{ + List urls = layer.getDownloadUrl(); + for (String currentUrl: urls){ + logger.info("download url:" + currentUrl); + try { + this.checkUrl(currentUrl); + } catch (MalformedURLException e){ + + } + } + return urls; + }; +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/GeoToolsDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/GeoToolsDownloadMethod.java new file mode 100644 index 0000000..e1e96e9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/GeoToolsDownloadMethod.java @@ -0,0 +1,114 @@ +package org.opengeoportal.download.methods; + +import java.io.File; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.Future; + +import org.geotools.geometry.jts.ReferencedEnvelope; +import org.geotools.referencing.crs.DefaultGeographicCRS; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.AsyncResult; + +import com.vividsolutions.jts.geom.Envelope; + +public class GeoToolsDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { + private static final Boolean INCLUDES_METADATA = false; + private static final String METHOD = "GET"; + + private FeatureSourceToShape featureSourceToShape; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public FeatureSourceToShape getFeatureSourceToShape() { + return featureSourceToShape; + } + + public void setFeatureSourceToShape(FeatureSourceToShape featureSourceToShape) { + this.featureSourceToShape = featureSourceToShape; + } + + @Override + public String getMethod(){ + return METHOD; + } + + @Override + public Set getExpectedContentType(){ + Set expectedContentType = new HashSet(); + expectedContentType.add("application/zip"); + return expectedContentType; + } + + @Override + public List getUrls(LayerRequest layer) throws Exception{ + //if(LocationFieldUtils.hasArcGISRestUrl(layer.getLayerInfo().getLocation())) + //{ + String url = layer.getWfsUrl(); + this.checkUrl(url); + return urlToUrls(url); + //} + + //return null; + + } + + @Override + public String createDownloadRequest() throws Exception { + return new String("This is a dummy implementation."); + } + + @Override + public Future> download(LayerRequest currentLayer) + throws Exception { + currentLayer.setMetadata(this.includesMetadata()); + + BoundingBox bbox = currentLayer.getRequestedBounds(); + Envelope currentBounds = new Envelope(bbox.getMinX(), bbox.getMinY(), bbox.getMaxX(), bbox.getMaxY()); + FeatureSourceRetriever fsr = featureSourceToShape.getFeatureSourceRetriever(); + fsr.createFeatureSourceFromLayerRequest(currentLayer); + //might as well get the native bounds from the source...the metadata might be wrong + ReferencedEnvelope nativeBounds = fsr.getFeatureSource().getBounds(); + CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84; + ReferencedEnvelope currentEnv = ReferencedEnvelope.create(currentBounds, crs); + + logger.info(currentEnv.toString()); + logger.info(currentEnv.getCoordinateReferenceSystem().toString()); + logger.info(nativeBounds.toString()); + logger.info(nativeBounds.getCoordinateReferenceSystem().toString()); + /*if (!nativeBounds.intersects(currentBounds)){ + //throw Exception? bounds don't intersect + throw new Exception("Bounds don't intersect!"); + }*/ + + featureSourceToShape.setFeatureCollectionBBox(currentBounds); + + Set fileSet = new HashSet(); + fileSet.addAll(featureSourceToShape.exportToShapefiles()); + return new AsyncResult>(fileSet); + } + + @Override + public Boolean includesMetadata() { + return INCLUDES_METADATA; + } + +/* Alle Lin: Should use the superclass function if derived from AbstractDownloadMethod + @Override + public Boolean hasRequiredInfo(LayerRequest layer) { + // TODO determine how to do this generically + if(LocationFieldUtils.hasArcGISRestUrl(layer.getLayerInfo().getLocation())) + return true; + return false; + } +*/ +} + + diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/HGLEmailDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/HGLEmailDownloadMethod.java similarity index 62% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/HGLEmailDownloadMethod.java rename to geoportal_1/src/main/java/org/opengeoportal/download/methods/HGLEmailDownloadMethod.java index 685e8fe..e7eafd1 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/HGLEmailDownloadMethod.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/HGLEmailDownloadMethod.java @@ -1,17 +1,22 @@ -package org.OpenGeoPortal.Download.Methods; +package org.opengeoportal.download.methods; +import java.io.InputStream; import java.util.List; import java.util.concurrent.Future; -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Download.Types.LayerRequest; -import org.OpenGeoPortal.Download.Types.LayerRequest.Status; -import org.OpenGeoPortal.Utilities.Http.HttpRequester; +import org.apache.commons.io.IOUtils; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.download.types.LayerRequest.Status; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.utilities.OgpUtils; +import org.opengeoportal.utilities.http.HttpRequester; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.AsyncResult; +import com.fasterxml.jackson.core.JsonParseException; + /** * a class that implements PackagedDownloadMethod to request raster layers from HGL. They are not downloaded locally. * Rather, an email is sent to the user containing a link to the requested layers. @@ -23,7 +28,6 @@ public class HGLEmailDownloadMethod implements EmailDownloadMethod { private static final Boolean INCLUDES_METADATA = true; private HttpRequester httpRequester; private List layerList; - private LayerRequest currentLayer; final Logger logger = LoggerFactory.getLogger(this.getClass()); public void setLayerList(List layerList){ @@ -56,16 +60,11 @@ public void setAllLayerStatus(Status status){ } } + @Override public String createDownloadRequest() { LayerRequest representativeLayer = this.layerList.get(0); - try { - this.validate(representativeLayer); - } catch (Exception e){ - //die gracefully - this.setAllLayerStatus(Status.FAILED); - return null; - } + BoundingBox bounds = representativeLayer.getRequestedBounds(); String userEmail = representativeLayer.getEmailAddress(); @@ -82,21 +81,41 @@ public String createDownloadRequest() { @Override @Async - public Future sendEmail(LayerRequest currentLayer) throws Exception { - this.currentLayer = currentLayer; + public Future sendEmail(List layerList) { + this.layerList = layerList; + InputStream inputStream = null; try { - this.httpRequester.sendRequest(this.getUrl(), createDownloadRequest(), "GET"); - logger.info("Email request sent."); + this.validate(layerList.get(0)); + inputStream = this.httpRequester.sendRequest(this.getUrl(layerList.get(0)), createDownloadRequest(), "GET"); return new AsyncResult(true); } catch (Exception e){ - logger.error("Attempt to send email failed."); + logger.error(e.getMessage()); return new AsyncResult(false); + } finally { + IOUtils.closeQuietly(inputStream); } } - private String getUrl() { - logger.info("Download URL: " + currentLayer.getDownloadUrl()); - return currentLayer.getDownloadUrl(); + @Override + public Boolean hasRequiredInfo(LayerRequest layerRequest){ + if (!OgpUtils.isWellFormedEmailAddress(layerRequest.getEmailAddress())){ + return false; + } + try { + if (getUrl(layerRequest) != null){ + return true; + } + } catch (JsonParseException e) { + logger.error(e.getMessage()); + } + logger.info("Layer does not have required info for HGLEmailDownload"); + return false; + }; + + private String getUrl(LayerRequest layer) throws JsonParseException { + + logger.info("Download URL: " + layer.getDownloadUrl()); + return layer.getDownloadUrl().get(0); } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/KmlDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/KmlDownloadMethod.java similarity index 73% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/KmlDownloadMethod.java rename to geoportal_1/src/main/java/org/opengeoportal/download/methods/KmlDownloadMethod.java index e468d8f..01e1e60 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/KmlDownloadMethod.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/KmlDownloadMethod.java @@ -1,10 +1,16 @@ -package org.OpenGeoPortal.Download.Methods; +package org.opengeoportal.download.methods; +import java.net.MalformedURLException; import java.util.HashSet; +import java.util.List; import java.util.Set; -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Layer.GeometryType; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.layer.GeometryType; +import org.opengeoportal.utilities.OgpUtils; + +import com.fasterxml.jackson.core.JsonParseException; public class KmlDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { private static final Boolean INCLUDES_METADATA = false; @@ -30,10 +36,7 @@ public Set getExpectedContentType(){ @Override public String createDownloadRequest() throws Exception { - //--generate POST message - //info needed: geometry column, bbox coords, epsg code, workspace & layername - //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer - //in order to return the file in original projection to the user (will also need to transform the bbox) + BoundingBox bounds = this.getClipBounds(); String layerName = this.currentLayer.getLayerNameNS(); /* we're going to use the kml reflector @@ -54,7 +57,10 @@ public String createDownloadRequest() throws Exception { } @Override - public String getUrl() { - return this.currentLayer.getWmsUrl(); + public List getUrls(LayerRequest layer) throws MalformedURLException, JsonParseException{ + String url = layer.getWmsUrl(); + url = OgpUtils.filterQueryString(url); + this.checkUrl(url); + return urlToUrls(url); } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/MITDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/MITDownloadMethod.java similarity index 75% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/MITDownloadMethod.java rename to geoportal_1/src/main/java/org/opengeoportal/download/methods/MITDownloadMethod.java index 6f4eaf2..74139a2 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/MITDownloadMethod.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/MITDownloadMethod.java @@ -1,10 +1,16 @@ -package org.OpenGeoPortal.Download.Methods; +package org.opengeoportal.download.methods; +import java.net.MalformedURLException; import java.util.HashSet; +import java.util.List; import java.util.Set; -import org.OpenGeoPortal.Download.Types.BoundingBox; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import com.fasterxml.jackson.core.JsonParseException; + +@Deprecated public class MITDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { private static final Boolean INCLUDES_METADATA = true; private static final String METHOD = "GET"; @@ -56,7 +62,9 @@ public String createDownloadRequest() throws Exception { } @Override - public String getUrl() { - return this.currentLayer.getDownloadUrl(); - } + public List getUrls(LayerRequest layer) throws MalformedURLException, JsonParseException{ + String url = layer.getDownloadUrl().get(0); + this.checkUrl(url); + return urlToUrls(url); + }; } diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/MultiLayerDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/MultiLayerDownloadMethod.java new file mode 100644 index 0000000..2ac2f5b --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/MultiLayerDownloadMethod.java @@ -0,0 +1,20 @@ +package org.opengeoportal.download.methods; + +import java.io.File; +import java.util.Set; +import java.util.concurrent.Future; + +import org.opengeoportal.download.types.LayerRequest; + +public interface MultiLayerDownloadMethod { + + Boolean includesMetadata(); + + String createDownloadRequest(); + + Future> download(LayerRequest currentLayer) + throws Exception; + + Boolean hasRequiredInfo(LayerRequest layer); + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/PerLayerDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/PerLayerDownloadMethod.java new file mode 100644 index 0000000..649a92c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/PerLayerDownloadMethod.java @@ -0,0 +1,15 @@ +package org.opengeoportal.download.methods; + +import java.io.File; +import java.util.Set; +import java.util.concurrent.Future; + +import org.opengeoportal.download.types.LayerRequest; + +public interface PerLayerDownloadMethod { + + Future> download(LayerRequest currentLayer) throws Exception; + Boolean includesMetadata(); + Boolean hasRequiredInfo(LayerRequest layer); + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/ProxiedWcsDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/ProxiedWcsDownloadMethod.java new file mode 100644 index 0000000..c239e10 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/ProxiedWcsDownloadMethod.java @@ -0,0 +1,40 @@ +package org.opengeoportal.download.methods; + +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.List; + +import org.opengeoportal.config.proxy.ProxyConfigRetriever; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.solr.SolrRecord; +import org.springframework.beans.factory.annotation.Autowired; + +import com.fasterxml.jackson.core.JsonParseException; + +public class ProxiedWcsDownloadMethod extends Wcs1_1_1DownloadMethod + implements PerLayerDownloadMethod { + @Autowired + private ProxyConfigRetriever proxyConfigRetriever; + + + @Override + public List getUrls(LayerRequest layer) throws MalformedURLException, JsonParseException{ + String url; + List urls = new ArrayList(); + + try { + url = getProxyTo(layer); + urls.add(url); + + } catch (Exception e) { + e.printStackTrace(); + throw new MalformedURLException("Proxy url not found."); + } + return urls; + } + + public String getProxyTo(LayerRequest layer) throws Exception { + SolrRecord sr = layer.getLayerInfo(); + return proxyConfigRetriever.getInternalProxyUrl("wcs", sr.getInstitution(), sr.getAccess()); + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/ProxiedWfsDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/ProxiedWfsDownloadMethod.java new file mode 100644 index 0000000..5c456ee --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/ProxiedWfsDownloadMethod.java @@ -0,0 +1,40 @@ +package org.opengeoportal.download.methods; + +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.List; + +import org.opengeoportal.config.proxy.ProxyConfigRetriever; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.solr.SolrRecord; +import org.springframework.beans.factory.annotation.Autowired; + +import com.fasterxml.jackson.core.JsonParseException; + + +public class ProxiedWfsDownloadMethod extends + WfsDownloadMethod implements PerLayerDownloadMethod { + @Autowired + private ProxyConfigRetriever proxyConfigRetriever; + + @Override + public List getUrls(LayerRequest layer) throws MalformedURLException, JsonParseException{ + String url; + List urls = new ArrayList(); + + try { + url = getProxyTo(layer); + urls.add(url); + + } catch (Exception e) { + e.printStackTrace(); + throw new MalformedURLException("Proxy url not found."); + } + return urls; + } + + public String getProxyTo(LayerRequest layer) throws Exception { + SolrRecord sr = layer.getLayerInfo(); + return proxyConfigRetriever.getInternalProxyUrl("wfs", sr.getInstitution(), sr.getAccess()); + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/Wcs1_1_1DownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/Wcs1_1_1DownloadMethod.java new file mode 100644 index 0000000..beec733 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/Wcs1_1_1DownloadMethod.java @@ -0,0 +1,107 @@ +package org.opengeoportal.download.methods; + +import java.io.InputStream; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.ogc.wcs.WcsGetCoverage1_1_1; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.OgpUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +public class Wcs1_1_1DownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { + private static final Boolean INCLUDES_METADATA = false; + private static final String METHOD = "POST"; + + @Autowired + @Qualifier("ogcInfoRequest.wcs_1_1_1") + private OgcInfoRequest ogcInfoRequest; + + @Override + public String getMethod(){ + return METHOD; + } + + @Override + public Set getExpectedContentType(){ + Set expectedContentType = new HashSet(); + expectedContentType.add("application/zip"); + return expectedContentType; + } + + public String createDownloadRequest() throws Exception { + //--generate POST message + //info needed: geometry column, bbox coords, epsg code, workspace & layername + //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer + //in order to return the file in original projection to the user (will also need to transform the bbox) + //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer + //in order to return the file in original projection to the user + + SolrRecord layerInfo = this.currentLayer.getLayerInfo(); + BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); + BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); + String layerName = this.currentLayer.getLayerNameNS(); + + Map describeCoverageInfo = null; + try { + describeCoverageInfo = OwsInfo.findWcsInfo(this.currentLayer.getOwsInfo()).getInfoMap(); + } catch (Exception e){ + this.currentLayer.getOwsInfo().add(getWcsDescribeCoverageInfo()); + describeCoverageInfo = OwsInfo.findWcsInfo(this.currentLayer.getOwsInfo()).getInfoMap(); + } + + int epsgCode = 4326; + + /* + GeoTiff - (format=geotiff) + GTopo30 - (format=gtopo30) + ArcGrid - (format=ArcGrid) + GZipped ArcGrid - (format=ArcGrid-GZIP) + */ + + String outputFormat = "image/tiff;subtype="geotiff""; + String getCoverageRequest = WcsGetCoverage1_1_1.createWcsGetCoverageRequest(layerName, describeCoverageInfo, bounds, epsgCode, outputFormat); + logger.info(getCoverageRequest); + + return getCoverageRequest; + } + + @Override + public List getUrls(LayerRequest layer) throws Exception{ + String url = layer.getWcsUrl(); + this.checkUrl(url); + return urlToUrls(url); + } + + private OwsInfo getWcsDescribeCoverageInfo() throws Exception { + InputStream inputStream = null; + try{ + String layerName = this.currentLayer.getLayerNameNS(); + String describeCoverageRequest = ogcInfoRequest.createRequest(layerName); + + inputStream = this.httpRequester.sendRequest(OgpUtils.filterQueryString(this.getUrl(this.currentLayer)), describeCoverageRequest, ogcInfoRequest.getMethod()); + //parse the returned XML and return needed info as a map + + OwsInfo info = ogcInfoRequest.parseResponse(inputStream); + return info; + + } finally { + IOUtils.closeQuietly(inputStream); + } + } + + @Override + public Boolean includesMetadata() { + return INCLUDES_METADATA; + } + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/WcsDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WcsDownloadMethod.java new file mode 100644 index 0000000..cec34e0 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WcsDownloadMethod.java @@ -0,0 +1,165 @@ +package org.opengeoportal.download.methods; + +import java.io.InputStream; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.layer.Envelope; +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.ogc.wcs.wcs1_0_0.CoverageOffering1_0_0; +import org.opengeoportal.ogc.wcs.wcs1_0_0.WcsGetCoverage1_0_0; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.OgpUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +public class WcsDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { + private static final Boolean INCLUDES_METADATA = false; + + @Autowired + @Qualifier("ogcInfoRequest.wcs_1_0_0") + private OgcInfoRequest ogcInfoRequest; + @Override + public String getMethod(){ + return WcsGetCoverage1_0_0.getMethod(); + } + + @Override + public Set getExpectedContentType(){ + Set expectedContentType = new HashSet(); + expectedContentType.add("application/zip"); + expectedContentType.add("image/tiff"); + expectedContentType.add("image/tiff;subtype=\"geotiff\""); + expectedContentType.add("image/tiff; subtype=\"geotiff\""); + return expectedContentType; + } + + public String createDownloadRequest() throws Exception { + //--generate POST message + //info needed: geometry column, bbox coords, epsg code, workspace & layername + //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer + //in order to return the file in original projection to the user (will also need to transform the bbox) + //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer + //in order to return the file in original projection to the user + + CoverageOffering1_0_0 describeLayerInfo = null; + try { + describeLayerInfo = (CoverageOffering1_0_0) OwsInfo.findWcsInfo(this.currentLayer.getOwsInfo()).getOwsDescribeInfo(); + } catch (Exception e){ + this.currentLayer.getOwsInfo().add(getWcsDescribeCoverageInfo()); + describeLayerInfo = (CoverageOffering1_0_0) OwsInfo.findWcsInfo(this.currentLayer.getOwsInfo()).getOwsDescribeInfo(); + } + + SolrRecord layerInfo = this.currentLayer.getLayerInfo(); + + Envelope env = describeLayerInfo.getLonLatEnvelope(); + BoundingBox nativeBounds = new BoundingBox(env.getMinX(), env.getMinY(), env.getMaxX(), env.getMaxY()); + logger.info("reqLatLon" + this.currentLayer.getRequestedBounds().toStringLatLon()); + logger.info("natLatLon" + nativeBounds.toStringLatLon()); + + BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); + logger.info("intLatLon" + bounds.toStringLatLon()); + + String layerName = this.currentLayer.getLayerNameNS(); + + + + /* + String epsgCode = describeLayerInfo.get("SRS"); + String domainSubset = ""; + + //wcs requires this info, even for full extent + String gmlLow = describeLayerInfo.get("gridEnvelopeLow"); + String gmlHigh = describeLayerInfo.get("gridEnvelopeHigh"); + String axes = ""; + if (describeLayerInfo.containsKey("axis1")){ + axes += ""; + axes += describeLayerInfo.get("axis1"); + axes += ""; + if (describeLayerInfo.containsKey("axis2")){ + axes += ""; + axes += describeLayerInfo.get("axis2"); + axes += ""; + } + } + domainSubset = "" + + "" + + bounds.generateGMLEnvelope() + + "" + + "" + + "" + + "" + gmlLow + "" + + "" + gmlHigh + "" + + "" + + "" + + axes + + "" + + "" + + ""; + + String format = "GeoTIFF"; + */ + + /* GeoTiff - (format=geotiff) + GTopo30 - (format=gtopo30) + ArcGrid - (format=ArcGrid) + GZipped ArcGrid - (format=ArcGrid-GZIP) +*/ + + //http://data.fao.org/maps/wcs?service=WCS&version=1.0.0&request=GetCoverage&coverage=lus_mna_31661&bbox=-13.166733,39.766613,12.099957,63.333236&crs=EPSG:4326&format=geotiff&width=917&height=331 + /* + String getCoverageRequest = "" + + "" + layerName + "" + + domainSubset + + "" + + "" + epsgCode + "" + + "" + format + "" + + "" + + ""; + */ + int epsgCode = 4326; + String format = "geotiff"; + return WcsGetCoverage1_0_0.createWcsGetCoverageRequest(layerName, describeLayerInfo, bounds, epsgCode, format); + //return getCoverageRequest; + } + + @Override + public List getUrls(LayerRequest layer) throws Exception{ + String url = layer.getWcsUrl(); + this.checkUrl(url); + return urlToUrls(url); + } + + OwsInfo getWcsDescribeCoverageInfo() + throws Exception { + InputStream inputStream = null; + + try{ + String layerName = this.currentLayer.getLayerNameNS(); + + inputStream = this.httpRequester.sendRequest(OgpUtils.filterQueryString(this.getUrl(this.currentLayer)), ogcInfoRequest.createRequest(layerName), ogcInfoRequest.getMethod()); + //parse the returned XML and return needed info as a map + return ogcInfoRequest.parseResponse(inputStream); + } finally { + IOUtils.closeQuietly(inputStream); + } + } + + + @Override + public Boolean includesMetadata() { + return INCLUDES_METADATA; + } + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/Wfs1_1DownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/Wfs1_1DownloadMethod.java new file mode 100644 index 0000000..6e410c9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/Wfs1_1DownloadMethod.java @@ -0,0 +1,116 @@ +package org.opengeoportal.download.methods; + +import java.io.InputStream; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.solr.SolrRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +public class Wfs1_1DownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { + private static final Boolean INCLUDES_METADATA = false; + private static final String METHOD = "GET"; + + @Autowired + @Qualifier("ogcInfoRequest.wfs") + private OgcInfoRequest ogcInfoRequest; + + @Override + public String getMethod(){ + return METHOD; + } + + @Override + public Set getExpectedContentType(){ + Set expectedContentType = new HashSet(); + expectedContentType.add("application/zip"); + return expectedContentType; + } + + public String createDownloadRequest() throws Exception { + //--generate POST message + //info needed: geometry column, bbox coords, epsg code, workspace & layername + //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer + //in order to return the file in original projection to the user (will also need to transform the bbox) + String layerName = this.currentLayer.getLayerNameNS(); + SolrRecord layerInfo = this.currentLayer.getLayerInfo(); + BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); + BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); + + /*String workSpace = layerInfo.getWorkspaceName(); + Map describeLayerInfo = null; + try { + describeLayerInfo = OwsInfo.findWfsInfo(this.currentLayer.getOwsInfo()).getInfoMap(); + } catch (Exception e){ + this.currentLayer.getOwsInfo().add(getWfsDescribeLayerInfo()); + describeLayerInfo = OwsInfo.findWfsInfo(this.currentLayer.getOwsInfo()).getInfoMap(); + } + String geometryColumn = describeLayerInfo.get("geometryColumn"); + String nameSpace = describeLayerInfo.get("nameSpace"); + String bboxFilter = ""; + if (!nativeBounds.isEquivalent(bounds)){ + bboxFilter += "" + + "" + + "" + geometryColumn + "" + + bounds.generateGMLEnvelope(epsgCode) + + "" + + ""; + }*/ + int epsgCode = 4326;//we are filtering the bounds based on WGS84 + String format = "shape-zip"; + String getFeatureRequest = "request=GetFeature&version=1.1.0&typeName=" + layerName + "&outputFormat=" + format + "&BBOX=" + bounds.toString() + ",EPSG:" + Integer.toString(epsgCode); + + // TODO should be xml + /*String getFeatureRequest = "" + + "" + + bboxFilter + + "" + + ""; + */ + return getFeatureRequest; + } + + @Override + public List getUrls(LayerRequest layer) throws Exception{ + String url = layer.getWfsUrl(); + this.checkUrl(url); + return urlToUrls(url); + } + + OwsInfo getWfsDescribeLayerInfo() + throws Exception { + InputStream inputStream = null; + try{ + String layerName = this.currentLayer.getLayerNameNS(); + + inputStream = this.httpRequester.sendRequest(this.getUrl(this.currentLayer), ogcInfoRequest.createRequest(layerName), ogcInfoRequest.getMethod()); + logger.info(this.httpRequester.getContentType());//check content type before doing any parsing of xml? + + return ogcInfoRequest.parseResponse(inputStream); + } finally { + IOUtils.closeQuietly(inputStream); + } + } + + + @Override + public Boolean includesMetadata() { + return INCLUDES_METADATA; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/WfsDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WfsDownloadMethod.java new file mode 100644 index 0000000..2ef581d --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WfsDownloadMethod.java @@ -0,0 +1,120 @@ +package org.opengeoportal.download.methods; + +import java.io.InputStream; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.ogc.wfs.WfsGetFeature; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +public class WfsDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { + private static final Boolean INCLUDES_METADATA = false; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + @Qualifier("ogcInfoRequest.wfs") + private OgcInfoRequest ogcInfoRequest; + + @Override + public String getMethod(){ + return WfsGetFeature.getMethod(); + } + + @Override + public Set getExpectedContentType(){ + Set expectedContentType = new HashSet(); + expectedContentType.add("application/zip"); + return expectedContentType; + } + + public String createDownloadRequest() throws Exception { + //--generate POST message + //info needed: geometry column, bbox coords, epsg code, workspace & layername + //all client bboxes should be passed as lat-lon coords. we will need to get the appropriate epsg code for the layer + //in order to return the file in original projection to the user (will also need to transform the bbox) + String layerName = this.currentLayer.getLayerNameNS(); + SolrRecord layerInfo = this.currentLayer.getLayerInfo(); + BoundingBox nativeBounds = new BoundingBox(layerInfo.getMinX(), layerInfo.getMinY(), layerInfo.getMaxX(), layerInfo.getMaxY()); + BoundingBox bounds = nativeBounds.getIntersection(this.currentLayer.getRequestedBounds()); + + String workSpace = layerInfo.getWorkspaceName(); + + Map describeLayerInfo = null; + try { + describeLayerInfo = OwsInfo.findWfsInfo(this.currentLayer.getOwsInfo()).getInfoMap(); + } catch (Exception e){ + this.currentLayer.getOwsInfo().add(getWfsDescribeLayerInfo()); + describeLayerInfo = OwsInfo.findWfsInfo(this.currentLayer.getOwsInfo()).getInfoMap(); + } + + String geometryColumn = describeLayerInfo.get("geometryColumn"); + String nameSpace = describeLayerInfo.get("nameSpace"); + int epsgCode = 4326;//we are filtering the bounds based on WGS84 + + String bboxFilter = ""; + if (!nativeBounds.isEquivalent(bounds)){ + + bboxFilter += WfsGetFeature.getBboxFilter(bounds, geometryColumn, epsgCode); + } + + //really, we should check the get caps doc to see if this is a viable option...probably this should be done before/at the download prompt + String outputFormat = "shape-zip"; + + String request = WfsGetFeature.createWfsGetFeatureRequest(layerName, workSpace, nameSpace, outputFormat, bboxFilter); + return request; + } + + @Override + public List getUrls(LayerRequest layer) throws Exception{ + + //WFS services from ArcGIS Rest endpoints don't return shape-zip, so we have to use a different method + //in the future, we should look to merge the 2 WFS download methods. If the geotools version is fast enough, + //it could be used for both types + if(LocationFieldUtils.hasArcGISRestUrl(layer.getLayerInfo().getLocation())){ + return null; + } + + String url = layer.getWfsUrl(); + this.checkUrl(url); + return urlToUrls(url); + } + + OwsInfo getWfsDescribeLayerInfo() throws Exception { + InputStream inputStream = null; + + try{ + String layerName = this.currentLayer.getLayerNameNS(); + String describeFeatureRequest = ogcInfoRequest.createRequest(layerName); + String method = ogcInfoRequest.getMethod(); + String url = this.getUrl(this.currentLayer); + inputStream = this.httpRequester.sendRequest(url, describeFeatureRequest, method); + String contentType = this.httpRequester.getContentType(); + + if (!contentType.contains("xml")){ + throw new Exception("Expecting an XML response; instead, got content type '" + contentType + "'"); + } + + return ogcInfoRequest.parseResponse(inputStream); + } finally { + IOUtils.closeQuietly(inputStream); + } + } + + + @Override + public Boolean includesMetadata() { + return INCLUDES_METADATA; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/WfsFeatureSourceRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WfsFeatureSourceRetriever.java new file mode 100644 index 0000000..f26074e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WfsFeatureSourceRetriever.java @@ -0,0 +1,88 @@ +package org.opengeoportal.download.methods; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.geotools.data.DataStore; +import org.geotools.data.DataStoreFinder; +import org.geotools.data.FeatureSource; +import org.geotools.data.simple.SimpleFeatureSource; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.OgpUtils; +import org.opengis.feature.simple.SimpleFeature; +import org.opengis.feature.simple.SimpleFeatureType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WfsFeatureSourceRetriever implements FeatureSourceRetriever { + SimpleFeatureSource featureSource = null; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public void createFeatureSourceFromLayerRequest(LayerRequest layerRequest) throws Exception{ + setFeatureSource(layerRequest.getWfsUrl(), layerRequest.getLayerNameNS(), LocationFieldUtils.hasArcGISRestUrl(layerRequest.getLayerInfo().getLocation())); + } + + void setFeatureSource(String wfsEndPoint, String layerName, Boolean isFromArcGISServer) throws Exception{ + String getCapabilities = OgpUtils.combinePathWithQuery(wfsEndPoint, "REQUEST=GetCapabilities&VERSION=1.1.0"); + + // Both ArcGIS Server 9.3 and 10 are compliant with WFS 1.1.0, so hard-coding VERSION=1.1.0 should be fine. + + Map connectionParameters = new HashMap(); + connectionParameters.put("WFSDataStoreFactory:GET_CAPABILITIES_URL", getCapabilities ); + + if (isFromArcGISServer){ + connectionParameters.put("WFSDataStoreFactory:WFS_STRATEGY", "arcgis"); + } +/* + * “WFSDataStoreFactory:GET_CAPABILITIES_URL” Link to capabilities document. The implementation supports both WFS 1.0 (read/write) and WFS 1.1 (read-only). +“WFSDataStoreFactory:PROTOCOL” Optional: True for Post, False for GET, null for auto +“WFSDataStoreFactory:USERNAME” Optional +“WFSDataStoreFactory:PASSWORD” Optional +“WFSDataStoreFactory:ENCODING” Optional with a default of UTF-8 +“WFSDataStoreFactory:TIMEOUT” Optional with a 3000ms default +“WFSDataStoreFactory:BUFFER_SIZE” Optional number of features to read in one gulp, defaults of 10 +“WFSDataStoreFactory:TRY_GZIP” Optional with a default of true, try compression if available +“WFSDataStoreFactory:LENIENT” + +Optional default of true. WFS implementations are terrible for actually obeying their DescribeFeatureType schema, setting this to true will try a few tricks to support implementations that are mostly correct: + + Accepting the data in any order + Not getting too upset if the case of the attributes is wrong + + * + * + */ + // Step 2 - connection + DataStore data = DataStoreFinder.getDataStore( connectionParameters ); + + // Step 3 - discovery + String typeNames[] = data.getTypeNames(); + //find the typeName we're looking for + String typeName = ""; + for (int i = 0; i < typeNames.length; i++){ + if (typeNames[i].contains(layerName)){ + typeName = typeNames[i]; + break; + } + } + + if (typeName.isEmpty()){ + throw new IOException("TypeName ['" + layerName + "'] was not found at: " + getCapabilities); + } + + // Step 4 - target + logger.info(typeName); + featureSource = data.getFeatureSource( typeName ); + } + + @Override + public SimpleFeatureSource getFeatureSource() + throws Exception { + return featureSource; + } + +} \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDescribeLayer.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDescribeLayer.java new file mode 100644 index 0000000..4c664b6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDescribeLayer.java @@ -0,0 +1,37 @@ +package org.opengeoportal.download.methods; + +import org.opengeoportal.download.types.generated.ogc.wms_describelayer.WMSDescribeLayerResponse; + +/* + * + * DescribeLayer + +The DescribeLayer operation is used primarily by clients that understand SLD-based WMS. In order to make an SLD one needs to know the structure of the data. WMS and WFS both have operations to do this, so the DescribeLayer operation just routes the client to the appropriate service. + +The standard parameters for the DescribeLayer operation are: +Parameter Required? Description +service Yes Service name. Value is WMS. +version Yes Service version. Value is 1.1.1. +request Yes Operation name. Value is DescribeLayer. +layers Yes See GetMap +exceptions No Format in which to report exceptions. The default value is application/vnd.ogc.se_xml. + +Geoserver supports a number of output formats for the DescribeLayer response. Server-styled HTML is the most commonly-used format. The supported formats are: +Format Syntax Notes +TEXT output_format=text/xml Same as default. +GML 2 output_format=application/vnd.ogc.wms_xml The default format. +JSON output_format=application/json Simple Json representation. +JSONP output_format=text/javascript Return a JsonP in the form: paddingOutput(...jsonp...). See WMS vendor parameters to change the callback name. Note that this format is disabled by default (See Global variables affecting WMS). + +An example request in XML (default) format on a layer is: + +http://localhost:8080/geoserver/topp/wms?service=WMS +&version=1.1.1 +&request=DescribeLayer +&layers=topp:coverage + * + * + */ +public interface WmsDescribeLayer { + WMSDescribeLayerResponse describeLayer(String baseUrl, String qualifiedLayerName); +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDescribeLayerImpl.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDescribeLayerImpl.java new file mode 100644 index 0000000..69f4884 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDescribeLayerImpl.java @@ -0,0 +1,47 @@ +package org.opengeoportal.download.methods; + +import org.opengeoportal.download.types.generated.ogc.wms_describelayer.WMSDescribeLayerResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.web.client.RestTemplate; + +import java.util.Map; +import java.util.Collections; + +public class WmsDescribeLayerImpl implements WmsDescribeLayer{ + String VERSION = "1.1.1"; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + @Qualifier("ogcRestTemplate") + private RestTemplate restTemplate; + + public RestTemplate getRestTemplate() { + return restTemplate; + } + public void setRestTemplate(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + +/* + * + * http://localhost:8080/geoserver/topp/wms?service=WMS +&version=1.1.1 +&request=DescribeLayer +&layers=topp:coverage + * + */ + @Override + public WMSDescribeLayerResponse describeLayer(String baseUrl, String qualifiedLayerName) { + + Map vars = Collections.singletonMap("qualifiedLayerName", qualifiedLayerName); + WMSDescribeLayerResponse result = restTemplate.getForObject(baseUrl + "?service=WMS&version=" + VERSION + + "&request=DescribeLayer&layers={qualifiedLayerName}", WMSDescribeLayerResponse.class, vars); + + return result; + } + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WmsDownloadMethod.java b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDownloadMethod.java similarity index 51% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WmsDownloadMethod.java rename to geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDownloadMethod.java index 38b62d5..4b315b5 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Methods/WmsDownloadMethod.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/methods/WmsDownloadMethod.java @@ -1,29 +1,37 @@ -package org.OpenGeoPortal.Download.Methods; +package org.opengeoportal.download.methods; -import java.io.InputStream; +import java.net.MalformedURLException; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; +import org.opengeoportal.download.types.LayerRequest; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.layer.GeometryType; +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.OgpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Layer.GeometryType; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; +import com.fasterxml.jackson.core.JsonParseException; public class WmsDownloadMethod extends AbstractDownloadMethod implements PerLayerDownloadMethod { private static final Double MAX_AREA = 1800.0 * 1800.0; //should be within recommended geoserver memory settings. private static final Boolean INCLUDES_METADATA = false; + final Logger logger = LoggerFactory.getLogger(this.getClass()); private static final String METHOD = "GET"; - @Override + @Autowired + @Qualifier("ogcInfoRequest.wfs") + private OgcInfoRequest ogcInfoRequest; + + @Override public String getMethod(){ return METHOD; } @@ -35,6 +43,9 @@ public Set getExpectedContentType(){ expectedContentType.add("application/vnd.google-earth.kml+xml"); expectedContentType.add("application/vnd.google-earth.kmz"); expectedContentType.add("image/geotiff"); + expectedContentType.add("image/tiff"); + expectedContentType.add("image/tiff; subtype=\"geotiff\""); + return expectedContentType; } @@ -72,7 +83,7 @@ public String createDownloadRequest() throws Exception { if (format.toLowerCase().equals("geotiff")){ format = "image/geotiff"; } - String getFeatureRequest = "VERSION=1.1.1&REQUEST=GetMap&SRS=epsg:" + + String getFeatureRequest = "SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=epsg:" + epsgCode + "&BBOX=" + bounds.toString() + "&LAYERS=" + layerName + "&HEIGHT=" + requestDimensions.get("height") + "&WIDTH=" + requestDimensions.get("width") + "&FORMAT=" + format; @@ -89,88 +100,13 @@ public String createDownloadRequest() throws Exception { } @Override - public String getUrl(){ - return this.currentLayer.getWmsUrl(); - }; + public List getUrls(LayerRequest layer) throws MalformedURLException, JsonParseException{ + String url = layer.getWmsUrl(); + url = OgpUtils.filterQueryString(url); + this.checkUrl(url); + return urlToUrls(url); + } - Map getWfsDescribeLayerInfo() - throws Exception - { - // TODO should be xml - /*DocumentFragment requestXML = createDocumentFragment(); - // Insert the root element node - Element rootElement = requestXML.createElement("DescribeFeatureType"); - requestXML.appendChild(rootElement);*/ - String layerName = this.currentLayer.getLayerNameNS(); - String describeFeatureRequest = "" - + "" + layerName + "" - + ""; - - InputStream inputStream = this.httpRequester.sendRequest(this.currentLayer.getWfsUrl(), describeFeatureRequest, "POST"); - //System.out.println(this.httpRequester.getContentType());//check content type before doing any parsing of xml? - - //parse the returned XML and return needed info as a map - // Create a factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - // Use document builder factory - DocumentBuilder builder = factory.newDocumentBuilder(); - //Parse the document - Document document = builder.parse(inputStream); - //initialize return variable - Map describeLayerInfo = new HashMap(); - - //get the namespace info - Node schemaNode = document.getFirstChild(); - if (schemaNode.getNodeName().equals("ServiceExceptionReport")){ - this.handleServiceException(schemaNode); - } - try { - NamedNodeMap schemaAttributes = schemaNode.getAttributes(); - describeLayerInfo.put("nameSpace", schemaAttributes.getNamedItem("targetNamespace").getNodeValue()); - - //we can get the geometry column name from here - NodeList elementNodes = document.getElementsByTagName("xsd:element"); - for (int i = 0; i < elementNodes.getLength(); i++){ - Node currentNode = elementNodes.item(i); - NamedNodeMap currentAttributeMap = currentNode.getAttributes(); - String attributeValue = null; - for (int j = 0; j < currentAttributeMap.getLength(); j++){ - Node currentAttribute = currentAttributeMap.item(j); - String currentAttributeName = currentAttribute.getNodeName(); - if (currentAttributeName.equals("name")){ - attributeValue = currentAttribute.getNodeValue(); - } else if (currentAttributeName.equals("type")){ - if (currentAttribute.getNodeValue().startsWith("gml:")){ - describeLayerInfo.put("geometryColumn", attributeValue); - break; - } - } - } - } - - } catch (Exception e){ - throw new Exception("error getting layer info: "+ e.getMessage()); - } - - return describeLayerInfo; - } - - void handleServiceException(Node schemaNode) throws Exception{ - String errorMessage = ""; - for (int i = 0; i < schemaNode.getChildNodes().getLength(); i++){ - String nodeName = schemaNode.getChildNodes().item(i).getNodeName(); - if (nodeName.equals("ServiceException")){ - errorMessage += schemaNode.getChildNodes().item(i).getTextContent().trim(); - } - } - throw new Exception(errorMessage); - } - private Map calculateDimensions(Double aspectRatio){ String requestWidth; String requestHeight; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/LayerRequest.java b/geoportal_1/src/main/java/org/opengeoportal/download/types/LayerRequest.java similarity index 61% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/LayerRequest.java rename to geoportal_1/src/main/java/org/opengeoportal/download/types/LayerRequest.java index 2fc0f15..c260b94 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/LayerRequest.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/types/LayerRequest.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Download.Types; +package org.opengeoportal.download.types; import java.io.File; import java.util.Date; @@ -9,12 +9,18 @@ import java.util.UUID; import java.util.concurrent.Future; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.OpenGeoPortal.Utilities.ParseJSONSolrLocationField; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.OgpUtils; + +import com.fasterxml.jackson.core.JsonParseException; public class LayerRequest { final String id; final SolrRecord layerInfo; + List owsInfo; private String requestedFormat; private UUID jobId; private String emailAddress = ""; @@ -22,6 +28,7 @@ public class LayerRequest { private File targetDirectory; private BoundingBox requestedBounds; private String epsgCode; + private Boolean shouldHaveFiles = true; //defaults to true. right now, only emailed layers shouldn't have Files public Set downloadedFiles = new HashSet(); public String responseMIMEType; public Map> responseHeaders; @@ -69,6 +76,14 @@ public SolrRecord getLayerInfo(){ return this.layerInfo; } + public List getOwsInfo() { + return owsInfo; + } + + public void setOwsInfo(List owsInfo) { + this.owsInfo = owsInfo; + } + public File getTargetDirectory() { return targetDirectory; } @@ -145,24 +160,50 @@ public Status getStatus(){ return this.status; } - public String getLayerNameNS(){ - return this.layerInfo.getWorkspaceName() + ":" + this.layerInfo.getName(); + public String getLayerNameNS() throws Exception{ + return OgpUtils.getLayerNameNS(this.layerInfo.getWorkspaceName(), this.layerInfo.getName()); } - public String getWmsUrl(){ - return ParseJSONSolrLocationField.getWmsUrl(this.layerInfo.getLocation()); + public String getWmsUrl() throws JsonParseException{ + return LocationFieldUtils.getWmsUrl(this.layerInfo.getLocation()); } - public String getWfsUrl(){ - return ParseJSONSolrLocationField.getWfsUrl(this.layerInfo.getLocation()); + public String getWfsUrl() throws Exception{ + String url = ""; + + try { + url = LocationFieldUtils.getWfsUrl(this.layerInfo.getLocation()); + } catch (JsonParseException e){ + Map infoMap = OwsInfo.findWmsInfo(this.getOwsInfo()).getInfoMap(); + if (infoMap.get("owsType").equalsIgnoreCase("wfs")){ + url = infoMap.get("owsUrl"); + } + } + if (url.isEmpty()){ + throw new Exception("No WFS url found!"); + } + return url; } - public String getWcsUrl(){ - return ParseJSONSolrLocationField.getWcsUrl(this.layerInfo.getLocation()); + public String getWcsUrl() throws Exception{ + String url = ""; + + try { + url = LocationFieldUtils.getWcsUrl(this.layerInfo.getLocation()); + } catch (JsonParseException e){ + Map infoMap = OwsInfo.findWmsInfo(this.getOwsInfo()).getInfoMap(); + if (infoMap.get("owsType").equalsIgnoreCase("wcs")){ + url = infoMap.get("owsUrl"); + } + } + if (url.isEmpty()){ + throw new Exception("No WCS url found!"); + } + return url; } - public String getDownloadUrl(){ - return ParseJSONSolrLocationField.getDownloadUrl(this.layerInfo.getLocation()); + public List getDownloadUrl() throws JsonParseException{ + return LocationFieldUtils.getDownloadUrl(this.layerInfo.getLocation()); } public boolean hasMetadata() { @@ -176,4 +217,13 @@ public Future getFutureValue() { public void setFutureValue(Future futureValue) { this.futureValue = futureValue; } + + public Boolean getShouldHaveFiles() { + return shouldHaveFiles; + } + + public void setShouldHaveFiles(Boolean shouldHaveFiles) { + this.shouldHaveFiles = shouldHaveFiles; + } + } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/LayerStatus.java b/geoportal_1/src/main/java/org/opengeoportal/download/types/LayerStatus.java similarity index 98% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/LayerStatus.java rename to geoportal_1/src/main/java/org/opengeoportal/download/types/LayerStatus.java index 9e69235..a10dddb 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Types/LayerStatus.java +++ b/geoportal_1/src/main/java/org/opengeoportal/download/types/LayerStatus.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Download.Types; +package org.opengeoportal.download.types; import java.util.ArrayList; import java.util.Collections; diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/LayerDescription.java b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/LayerDescription.java new file mode 100644 index 0000000..a370651 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/LayerDescription.java @@ -0,0 +1,173 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2013.04.12 at 12:03:03 PM EDT +// + + +package org.opengeoportal.download.types.generated.ogc.wms_describelayer; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "query" +}) +@XmlRootElement(name = "LayerDescription") +public class LayerDescription { + + @XmlAttribute(required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String name; + @XmlAttribute + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String wfs; + @XmlAttribute + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String owsType; + @XmlAttribute + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String owsURL; + @XmlElement(name = "Query") + protected List query; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the wfs property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getWfs() { + return wfs; + } + + /** + * Sets the value of the wfs property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWfs(String value) { + this.wfs = value; + } + + /** + * Gets the value of the owsType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getOwsType() { + return owsType; + } + + /** + * Sets the value of the owsType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setOwsType(String value) { + this.owsType = value; + } + + /** + * Gets the value of the owsURL property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getOwsURL() { + return owsURL; + } + + /** + * Sets the value of the owsURL property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setOwsURL(String value) { + this.owsURL = value; + } + + /** + * Gets the value of the query property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the query property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getQuery().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Query } + * + * + */ + public List getQuery() { + if (query == null) { + query = new ArrayList(); + } + return this.query; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/ObjectFactory.java b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/ObjectFactory.java new file mode 100644 index 0000000..c7bb4a4 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/ObjectFactory.java @@ -0,0 +1,63 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2013.04.12 at 12:03:03 PM EDT +// + + +package org.opengeoportal.download.types.generated.ogc.wms_describelayer; + +import javax.xml.bind.annotation.XmlRegistry; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the org.ogp package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.ogp + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link WMSDescribeLayerResponse } + * + */ + public WMSDescribeLayerResponse createWMSDescribeLayerResponse() { + return new WMSDescribeLayerResponse(); + } + + /** + * Create an instance of {@link Query } + * + */ + public Query createQuery() { + return new Query(); + } + + /** + * Create an instance of {@link LayerDescription } + * + */ + public LayerDescription createLayerDescription() { + return new LayerDescription(); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/Query.java b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/Query.java new file mode 100644 index 0000000..921d3a3 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/Query.java @@ -0,0 +1,56 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2013.04.12 at 12:03:03 PM EDT +// + + +package org.opengeoportal.download.types.generated.ogc.wms_describelayer; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "Query") +public class Query { + + @XmlAttribute(required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String typeName; + + /** + * Gets the value of the typeName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTypeName() { + return typeName; + } + + /** + * Sets the value of the typeName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTypeName(String value) { + this.typeName = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/WMSDescribeLayerResponse.java b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/WMSDescribeLayerResponse.java new file mode 100644 index 0000000..559cab2 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/WMSDescribeLayerResponse.java @@ -0,0 +1,91 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2013.04.12 at 12:03:03 PM EDT +// + + +package org.opengeoportal.download.types.generated.ogc.wms_describelayer; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +/** + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "layerDescription" +}) +@XmlRootElement(name = "WMS_DescribeLayerResponse") +public class WMSDescribeLayerResponse { + + @XmlAttribute(required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String version; + @XmlElement(name = "LayerDescription") + protected List layerDescription; + + /** + * Gets the value of the version property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVersion(String value) { + this.version = value; + } + + /** + * Gets the value of the layerDescription property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the layerDescription property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getLayerDescription().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link LayerDescription } + * + * + */ + public List getLayerDescription() { + if (layerDescription == null) { + layerDescription = new ArrayList(); + } + return this.layerDescription; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/WMS_DescribeLayerResponse.dtd b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/WMS_DescribeLayerResponse.dtd new file mode 100644 index 0000000..e601ec7 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/download/types/generated/ogc/wms_describelayer/WMS_DescribeLayerResponse.dtd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/AddLayerToMapRequestJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/AddLayerToMapRequestJson.java similarity index 94% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/AddLayerToMapRequestJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/AddLayerToMapRequestJson.java index a9e893b..df2a45f 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/AddLayerToMapRequestJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/AddLayerToMapRequestJson.java @@ -1,7 +1,9 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; /* * Required Parameters: diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/AddWMSLayerToMapRequestJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/AddWMSLayerToMapRequestJson.java similarity index 78% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/AddWMSLayerToMapRequestJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/AddWMSLayerToMapRequestJson.java index 5736b55..4bac059 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/AddWMSLayerToMapRequestJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/AddWMSLayerToMapRequestJson.java @@ -1,6 +1,7 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; + +import com.fasterxml.jackson.annotation.JsonProperty; -import org.codehaus.jackson.annotate.JsonProperty; public class AddWMSLayerToMapRequestJson extends AddLayerToMapRequestJson{ //"visibleLayers": ["sde:GISPORTAL.GISOWNER01.CACENSUSTRACTS10"] diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateDataSetRequestJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateDataSetRequestJson.java similarity index 97% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateDataSetRequestJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateDataSetRequestJson.java index 7c933ae..da0af5c 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateDataSetRequestJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateDataSetRequestJson.java @@ -1,7 +1,8 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; + +import com.fasterxml.jackson.annotation.JsonProperty; //import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; public class CreateDataSetRequestJson { /* diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateDataSetResponseJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateDataSetResponseJson.java similarity index 93% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateDataSetResponseJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateDataSetResponseJson.java index 1505cfb..88d1dc8 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateDataSetResponseJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateDataSetResponseJson.java @@ -1,6 +1,7 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; + +import com.fasterxml.jackson.annotation.JsonProperty; -import org.codehaus.jackson.annotate.JsonProperty; public class CreateDataSetResponseJson { /* diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateFileDataSetRequestJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateFileDataSetRequestJson.java similarity index 97% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateFileDataSetRequestJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateFileDataSetRequestJson.java index c9b10f5..61c7444 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateFileDataSetRequestJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateFileDataSetRequestJson.java @@ -1,6 +1,7 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; + +import com.fasterxml.jackson.annotation.JsonProperty; -import org.codehaus.jackson.annotate.JsonProperty; public class CreateFileDataSetRequestJson { /* diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateMapRequestJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateMapRequestJson.java similarity index 93% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateMapRequestJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateMapRequestJson.java index ac74514..00b8f11 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateMapRequestJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateMapRequestJson.java @@ -1,6 +1,7 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; + +import com.fasterxml.jackson.annotation.JsonProperty; -import org.codehaus.jackson.annotate.JsonProperty; public class CreateMapRequestJson { /* diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateMapResponseJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateMapResponseJson.java similarity index 64% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateMapResponseJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateMapResponseJson.java index 7a6cf86..fb7854d 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateMapResponseJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateMapResponseJson.java @@ -1,7 +1,7 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; @JsonIgnoreProperties(ignoreUnknown=true) public class CreateMapResponseJson { diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateStreamDataSetRequestJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateStreamDataSetRequestJson.java similarity index 95% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateStreamDataSetRequestJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateStreamDataSetRequestJson.java index 53b3856..458813f 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateStreamDataSetRequestJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateStreamDataSetRequestJson.java @@ -1,7 +1,6 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; -//import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; public class CreateStreamDataSetRequestJson { /* diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateUserRequestJson.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateUserRequestJson.java similarity index 92% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateUserRequestJson.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateUserRequestJson.java index cd2ffb3..cdbf2f9 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/CreateUserRequestJson.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/CreateUserRequestJson.java @@ -1,6 +1,6 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; public class CreateUserRequestJson { /* diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/DataSetStatus.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/DataSetStatus.java similarity index 96% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/DataSetStatus.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/DataSetStatus.java index 729852e..a28ac4d 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/DataSetStatus.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/DataSetStatus.java @@ -1,6 +1,7 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown=true) public class DataSetStatus { diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/DataSetStatusOld.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/DataSetStatusOld.java similarity index 92% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/DataSetStatusOld.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/DataSetStatusOld.java index ae75a62..99154b4 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/DataSetStatusOld.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/DataSetStatusOld.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; public class DataSetStatusOld { String id; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/ExportKmlToGeoCommons.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/ExportKmlToGeoCommons.java similarity index 92% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/ExportKmlToGeoCommons.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/ExportKmlToGeoCommons.java index a5e36f3..c5a9e95 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/ExportKmlToGeoCommons.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/ExportKmlToGeoCommons.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; import java.net.URI; import java.util.ArrayList; diff --git a/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/ExportRequestController.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/ExportRequestController.java new file mode 100644 index 0000000..381f518 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/ExportRequestController.java @@ -0,0 +1,106 @@ +package org.opengeoportal.export.geocommons; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.export.geocommons.GeoCommonsExportRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.RequestContextHolder; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +@Controller +@RequestMapping("/geocommons/requestExport") +public class ExportRequestController { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private GeoCommonsExportHandlerFactory geoCommonsExportHandlerFactory; + + + @RequestMapping(method=RequestMethod.POST, produces="application/json") + public @ResponseBody Map handleExportRequest(HttpServletRequest request) + throws Exception { + //given a list of ogpids, export them to geocommons + //read the POST'ed JSON object + ServletInputStream inputStream = null; + + try{ + inputStream = request.getInputStream(); + + ObjectMapper mapper = new ObjectMapper(); + + JsonNode rootNode = mapper.readTree(inputStream); + String basemap = rootNode.path("basemap").textValue(); + String bbox = rootNode.path("extent").textValue(); + String username = rootNode.path("username").textValue(); + String password = rootNode.path("password").textValue(); + + ObjectNode responseJson = mapper.createObjectNode(); + //response json format + //{"status": "", "message": "", mapUrl: "", "layers": []} + //status where in the process + //statusMessage text + //mapUrl: + //layers + //layerId: + //progress: dataset, map + //format: shp, wms, etc. + //url: + + /*if ((username.isEmpty())||(password.isEmpty())){ + response.sendError(500, "This request requires a valid GeoCommons username and password."); + return; + }*/ + String title = rootNode.path("title").textValue(); + String description = rootNode.path("description").textValue(); + JsonNode idArray = rootNode.path("OGPIDS"); + ArrayList layers = new ArrayList(); + for (JsonNode idNode : idArray){ + layers.add(idNode.textValue()); + } + + /*if (layers.isEmpty()) { + //response.sendError(400, "No layers specified in request."); + ArrayNode arrayNode = mapper.createArrayNode(); + responseJson.put("status", ""); + responseJson.put("statusMessage", "No layers specified in request"); + response.getOutputStream().print(responseJson.asText()); + return; + }*/ + + String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId(); + GeoCommonsExportRequest exportRequest = new GeoCommonsExportRequest(); + exportRequest.setSessionId(sessionId); + exportRequest.setUsername(username); + exportRequest.setPassword(password); + exportRequest.setBasemap(basemap); + exportRequest.setTitle(title); + exportRequest.setDescription(description); + exportRequest.setBbox(bbox); + exportRequest.setLayerIds(layers); + + GeoCommonsExportHandler gcHandler = geoCommonsExportHandlerFactory.getObject(); + UUID requestId = gcHandler.requestExport(exportRequest); + Map map = new HashMap(); + map.put("requestId", requestId.toString()); + return map; + + } finally { + IOUtils.closeQuietly(inputStream); + } + } +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsClient.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsClient.java similarity index 87% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsClient.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsClient.java index d2986a8..cf891ea 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsClient.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsClient.java @@ -1,6 +1,6 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; -import org.OpenGeoPortal.Layer.BoundingBox; +import org.opengeoportal.layer.BoundingBox; public interface GeoCommonsClient { void initializeClient(String username, String password); diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportHandler.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandler.java similarity index 74% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportHandler.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandler.java index baea1e6..e27c394 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportHandler.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandler.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; import java.util.UUID; diff --git a/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandlerFactory.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandlerFactory.java new file mode 100644 index 0000000..38c38bc --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandlerFactory.java @@ -0,0 +1,33 @@ +package org.opengeoportal.export.geocommons; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class GeoCommonsExportHandlerFactory implements ApplicationContextAware { + private ApplicationContext applicationContext; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public GeoCommonsExportHandler getObject() throws Exception { + logger.info("Creating GeoCommonsExportHandler bean"); + return applicationContext.getBean(GeoCommonsExportHandler.class); + } + + public Class getObjectType() { + return GeoCommonsExportHandler.class; + } + + public boolean isSingleton() { + return false; + } + + @Override + public void setApplicationContext(ApplicationContext appContext) + throws BeansException { + applicationContext = appContext; + + } + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportHandlerImpl.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandlerImpl.java similarity index 89% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportHandlerImpl.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandlerImpl.java index fce9869..736a30b 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportHandlerImpl.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportHandlerImpl.java @@ -1,9 +1,9 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; import java.util.UUID; -import org.OpenGeoPortal.Download.RequestStatusManager; +import org.opengeoportal.download.RequestStatusManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportRequest.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportRequest.java similarity index 95% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportRequest.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportRequest.java index 8848d62..cf1026d 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExportRequest.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExportRequest.java @@ -1,9 +1,9 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; import java.util.List; import java.util.UUID; -import org.OpenGeoPortal.Download.Controllers.RequestStatusController.StatusSummary; +import org.opengeoportal.download.controllers.RequestStatusController.StatusSummary; public class GeoCommonsExportRequest { String sessionId; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExporter.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExporter.java similarity index 72% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExporter.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExporter.java index 21500d4..8a5d6bd 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExporter.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExporter.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; public interface GeoCommonsExporter { void submitExportRequest(GeoCommonsExportRequest geoCommonsExportRequest); diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExporterImpl.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExporterImpl.java similarity index 96% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExporterImpl.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExporterImpl.java index c581ac2..763cde8 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsExporterImpl.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsExporterImpl.java @@ -1,12 +1,12 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Export.GeoCommons.GeoCommonsExportRequest.ExportStatus; +import org.opengeoportal.export.geocommons.GeoCommonsExportRequest.ExportStatus; +import org.opengeoportal.layer.BoundingBox; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsJsonClient.java b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsJsonClient.java similarity index 89% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsJsonClient.java rename to geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsJsonClient.java index 66fa07d..2c894ad 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Export/GeoCommons/GeoCommonsJsonClient.java +++ b/geoportal_1/src/main/java/org/opengeoportal/export/geocommons/GeoCommonsJsonClient.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Export.GeoCommons; +package org.opengeoportal.export.geocommons; import java.io.File; import java.io.UnsupportedEncodingException; @@ -10,26 +10,27 @@ import java.util.List; import java.util.Set; -import org.OpenGeoPortal.Download.MetadataRetriever; -import org.OpenGeoPortal.Layer.BoundingBox; -import org.OpenGeoPortal.Layer.Metadata; -import org.OpenGeoPortal.Layer.AccessLevel; -import org.OpenGeoPortal.Metadata.LayerInfoRetriever; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.OpenGeoPortal.Utilities.ParseJSONSolrLocationField; -import org.OpenGeoPortal.Utilities.QuickDownload; -import org.OpenGeoPortal.Utilities.ZipFilePackager; - import org.apache.http.HttpHost; +import org.apache.http.auth.AuthSchemeProvider; import org.apache.http.auth.AuthScope; import org.apache.http.auth.Credentials; import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.AuthCache; -import org.apache.http.client.protocol.ClientContext; -import org.apache.http.impl.auth.BasicScheme; -import org.apache.http.impl.client.BasicAuthCache; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.protocol.BasicHttpContext; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.impl.auth.BasicSchemeFactory; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; + +import org.opengeoportal.download.MetadataRetriever; +import org.opengeoportal.layer.AccessLevel; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.layer.Metadata; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -91,28 +92,25 @@ public void setMetadataRetriever(MetadataRetriever metadataRetriever) { } public void initializeClient(String username, String password) { - //this.layerName = null; - DefaultHttpClient httpclient = new DefaultHttpClient(); + CloseableHttpClient httpclient = null; + HttpHost targetHost = new HttpHost(this.serverName, 80, "http"); if (!(username.isEmpty() && password.isEmpty())){ - this.credentials = new UsernamePasswordCredentials(username, password); + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(new AuthScope(AuthScope.ANY), new UsernamePasswordCredentials(username, password)); + + HttpClientBuilder builder = HttpClients.custom(); + builder.setDefaultCredentialsProvider(credsProvider); + final Registry authSchemeRegistry = RegistryBuilder.create() + .register("basic", new BasicSchemeFactory()) + .build(); + builder.setDefaultAuthSchemeRegistry(authSchemeRegistry); + httpclient = builder.build(); - httpclient.getCredentialsProvider().setCredentials( - new AuthScope(AuthScope.ANY), - this.credentials); - - // Create AuthCache instance - AuthCache authCache = new BasicAuthCache(); - // Generate BASIC scheme object and add it to the local auth cache - BasicScheme basicAuth = new BasicScheme(); - authCache.put(targetHost, basicAuth); - - // Add AuthCache to the execution context - BasicHttpContext localcontext = new BasicHttpContext(); - localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache); } else { this.anonymous = true; + httpclient = HttpClients.createDefault(); } HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpclient); @@ -164,7 +162,7 @@ public String uploadWmsDataSet(String layerId) throws Exception{ return resultString; } - + @Override public String createMap(String basemap, String extent, String title, String description) throws Exception{ //requires auth @@ -174,16 +172,16 @@ public String createMap(String basemap, String extent, String title, String desc String url = this.serverName + "/maps.json"; CreateMapRequestJson createMapRequestJson = this.createMapRequestObject(basemap, extent, title, description); try { - CreateMapResponseJson result = restTemplate.postForObject(url, createMapRequestJson, CreateMapResponseJson.class); - - return result.getId(); + CreateMapResponseJson result = restTemplate.postForObject(url, createMapRequestJson, CreateMapResponseJson.class); + + return result.getId(); } catch (HttpClientErrorException e){ //{"error": "an unknown error occurred"} throw new Exception (e.getResponseBodyAsString()); } } - + public SearchResponseJson searchForLayer(String layerName){ String url = this.serverName + "/search.json?query=" + layerName; SearchResponseJson result = restTemplate.getForObject(url, SearchResponseJson.class); @@ -234,20 +232,20 @@ public void addLayerToMap(String mapId, DataSetStatus dataSetStatus) throws Exce } } - private CreateMapRequestJson createMapRequestObject(String basemap, String extent, String title, String description) { - CreateMapRequestJson createMapRequestJson = new CreateMapRequestJson(); - - createMapRequestJson.setBasemap(cleanString(basemap)); - String[] extentArray = extent.split(","); - createMapRequestJson.setExtent(extentArray); - //extent should be calculated based on layers in map - createMapRequestJson.setTags(cleanString(this.getTagString(), 500));//tags should be collated from layers in map - //System.out.println(this.getTagString()); - createMapRequestJson.setTitle(cleanString(title)); - createMapRequestJson.setDescription(cleanString(description));//aggregate layer titles - - return createMapRequestJson; - } + private CreateMapRequestJson createMapRequestObject(String basemap, String extent, String title, String description) { + CreateMapRequestJson createMapRequestJson = new CreateMapRequestJson(); + + createMapRequestJson.setBasemap(cleanString(basemap)); + String[] extentArray = extent.split(","); + createMapRequestJson.setExtent(extentArray); + //extent should be calculated based on layers in map + createMapRequestJson.setTags(cleanString(this.getTagString(), 500));//tags should be collated from layers in map + //System.out.println(this.getTagString()); + createMapRequestJson.setTitle(cleanString(title)); + createMapRequestJson.setDescription(cleanString(description));//aggregate layer titles + + return createMapRequestJson; + } private String getTagString() { String tagString = ""; @@ -281,9 +279,9 @@ private String cleanString(String inputString){ private Metadata createLayerInfoObject(String layerId) throws Exception{ Metadata layerInfo = new Metadata(layerId); - + SolrRecord layerInfoMap = layerInfoRetriever.getAllLayerInfo(layerId); - + layerInfo.setGeometryType(layerInfoMap.getDataType()); layerInfo.setAccessLevel(layerInfoMap.getAccess()); layerInfo.setTitle(layerInfoMap.getLayerDisplayName().trim()); @@ -300,28 +298,31 @@ private Metadata createLayerInfoObject(String layerId) throws Exception{ } public static String[] concat(String[] first, String[] second) { - String[] result = Arrays.copyOf(first, first.length + second.length); - System.arraycopy(second, 0, result, first.length, second.length); - return result; - } + String[] result = Arrays.copyOf(first, first.length + second.length); + System.arraycopy(second, 0, result, first.length, second.length); + return result; + } - static String combine(String[] s, String glue) - { - int k=s.length; - if (k==0) - return null; - StringBuilder out=new StringBuilder(); - out.append(s[0]); - for (int x=1;x" + + "" + Double.toString(this.getMinY()) + " " + Double.toString(this.getMinX()) + "" + + "" + Double.toString(this.getMaxY()) + " " + Double.toString(this.getMaxX()) + "" + + ""; + return bounds; + } + + public String generateGMLEnvelope(){ String envelope = "" + "" + Double.toString(this.getMinX()) + " " + Double.toString(this.getMinY()) + "" + "" + Double.toString(this.getMaxX()) + " " + Double.toString(this.getMaxY()) + "" @@ -79,7 +92,7 @@ public String generateGMLEnvelope(int epsgCode){ -75.102613,40.212597 -72.361859,41.512517 */ - public String generateGMLBox(int epsgCode){ + public String generateGMLBox(){ String envelope = "" + "" + Double.toString(this.getMinX()) + "," + Double.toString(this.getMinY()) + " " + Double.toString(this.getMaxX()) + "," + Double.toString(this.getMaxY()) + "" @@ -87,45 +100,39 @@ public String generateGMLBox(int epsgCode){ return envelope; } - public BoundingBox getIntersection(BoundingBox anotherBoundingBox){ - Double intersectionMinX = Math.max(this.getMinX(), anotherBoundingBox.getMinX()); - Double intersectionMaxX = Math.min(this.getMaxX(), anotherBoundingBox.getMaxX()); - Double intersectionMinY = Math.max(this.getMinY(), anotherBoundingBox.getMinY()); - Double intersectionMaxY = Math.min(this.getMaxY(), anotherBoundingBox.getMaxY()); - BoundingBox intersection = new BoundingBox(intersectionMinX, intersectionMinY, intersectionMaxX, intersectionMaxY); - return intersection; + public Envelope getIntersection(Envelope anotherBox) throws Exception{ + if (this.epsgCode == anotherBox.epsgCode){ + Double intersectionMinX = Math.max(this.getMinX(), anotherBox.getMinX()); + Double intersectionMaxX = Math.min(this.getMaxX(), anotherBox.getMaxX()); + Double intersectionMinY = Math.max(this.getMinY(), anotherBox.getMinY()); + Double intersectionMaxY = Math.min(this.getMaxY(), anotherBox.getMaxY()); + Envelope intersection = new Envelope(intersectionMinX, intersectionMinY, intersectionMaxX, intersectionMaxY, epsgCode); + return intersection; + } else { + throw new Exception("Envelopes have different CRSs"); + } } - public Boolean isEquivalent(BoundingBox anotherBoundingBox){ + public Boolean isEquivalent(Envelope anotherBox) throws Exception{ + if (this.epsgCode != anotherBox.epsgCode){ + throw new Exception("Envelopes have different CRSs"); + } double acceptableDelta = .001; - if ((Math.abs(this.minX - anotherBoundingBox.minX) < acceptableDelta)&& - (Math.abs(this.minX - anotherBoundingBox.minX) < acceptableDelta)&& - (Math.abs(this.minX - anotherBoundingBox.minX) < acceptableDelta)&& - (Math.abs(this.minX - anotherBoundingBox.minX) < acceptableDelta)){ + if ((Math.abs(this.minX - anotherBox.minX) < acceptableDelta)&& + (Math.abs(this.minX - anotherBox.minX) < acceptableDelta)&& + (Math.abs(this.minX - anotherBox.minX) < acceptableDelta)&& + (Math.abs(this.minX - anotherBox.minX) < acceptableDelta)){ return true; } else { return false; } } - private static Boolean isInRange(Double var, Double low, Double high){ + static Boolean isInRange(Double var, Double low, Double high){ if (var >= low && var <= high){ return true; } else return false; } - public Boolean isValid(){ - if (isInRange(getMinX(), -180.0, 180.0) && isInRange(getMaxX(), -180.0, 180.0) && - isInRange(getMinY(), -90.0, 90.0) && isInRange(getMaxY(), -90.0, 90.0)){ - return true; - } else { - return false; - } - } - - public String toString1_3() { - //wms 1.3 reverses the axes - return Double.toString(this.minY) + "," + Double.toString(this.minX) + "," + Double.toString(this.maxY) + "," + Double.toString(this.maxX); - } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Layer/GeometryType.java b/geoportal_1/src/main/java/org/opengeoportal/layer/GeometryType.java similarity index 97% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Layer/GeometryType.java rename to geoportal_1/src/main/java/org/opengeoportal/layer/GeometryType.java index 963513f..07afa16 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Layer/GeometryType.java +++ b/geoportal_1/src/main/java/org/opengeoportal/layer/GeometryType.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Layer; +package org.opengeoportal.layer; public enum GeometryType { Point (DataType.Vector), diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Layer/Metadata.java b/geoportal_1/src/main/java/org/opengeoportal/layer/Metadata.java similarity index 99% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Layer/Metadata.java rename to geoportal_1/src/main/java/org/opengeoportal/layer/Metadata.java index 8596ace..87d4707 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Layer/Metadata.java +++ b/geoportal_1/src/main/java/org/opengeoportal/layer/Metadata.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Layer; +package org.opengeoportal.layer; public class Metadata { diff --git a/geoportal_1/src/main/java/org/opengeoportal/metadata/LayerInfoRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/metadata/LayerInfoRetriever.java new file mode 100644 index 0000000..54a8149 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/metadata/LayerInfoRetriever.java @@ -0,0 +1,15 @@ +package org.opengeoportal.metadata; + +import java.util.List; +import java.util.Set; + +import org.apache.solr.client.solrj.SolrServer; +import org.opengeoportal.solr.SolrRecord; + +public interface LayerInfoRetriever { + public List fetchAllLayerInfo(Set layerIds) throws Exception; + SolrRecord getAllLayerInfo(String layerId) throws Exception; + SolrServer getSolrServer(); + List fetchAllowedRecords(Set layerIdSet) throws Exception; + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/metadata/SolrLayerInfoRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/metadata/SolrLayerInfoRetriever.java new file mode 100644 index 0000000..f63755c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/metadata/SolrLayerInfoRetriever.java @@ -0,0 +1,117 @@ +package org.opengeoportal.metadata; + +import java.net.URL; +import java.util.List; +import java.util.Set; + +import org.apache.http.client.HttpClient; +import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.SolrServer; +import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.impl.HttpSolrServer; +import org.apache.solr.client.solrj.impl.XMLResponseParser; +import org.apache.solr.client.solrj.response.QueryResponse; +import org.apache.solr.client.solrj.util.ClientUtils; +import org.opengeoportal.config.search.SearchConfigRetriever; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.http.OgpHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.security.access.prepost.PostFilter; + +public class SolrLayerInfoRetriever implements LayerInfoRetriever{ + private SolrServer solrServer = null; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private SearchConfigRetriever searchConfigRetriever; + + @Autowired + @Qualifier("httpClient.pooling") + OgpHttpClient ogpHttpClient; + + private void init() throws Exception { + HttpClient httpClient = ogpHttpClient.getCloseableHttpClient(); + URL url = searchConfigRetriever.getInternalSearchUrl(); + String url$ = url.toString(); + + if (url$.contains("select")){ + url$ = url$.substring(0, url$.indexOf("/select")); + } + logger.debug("creating Solr Server at " + url$); + HttpSolrServer httpServer = new HttpSolrServer(url$, httpClient); + httpServer.setParser(new XMLResponseParser()); + + this.solrServer = (SolrServer) httpServer; + } + + @Override + public SolrServer getSolrServer(){ + if (solrServer == null){ + try { + init(); + } catch (Exception e) { + logger.error("problem creating solr server"); + } + } + + + return solrServer; + } + + //use Spring Security hasPermission expression + //use a filter to get a collection containing only layers the + //user is authorized to download. + @Override + @PostFilter("hasPermission(filterObject, 'download')") + public List fetchAllowedRecords(Set layerIdSet) throws Exception{ + List allRecords = fetchAllLayerInfo(layerIdSet); + return allRecords; + } + + public List fetchAllLayerInfo(Set layerIds) throws SolrServerException { + SolrServer server = getSolrServer(); + String query = ""; + for (String layerId : layerIds){ + logger.debug(layerId); + query += "LayerId:" + ClientUtils.escapeQueryChars(layerId.trim()); + query += " OR "; + } + if (query.length() > 0){ + query = query.substring(0, query.lastIndexOf(" OR ")); + } + /*ModifiableSolrParams params = new ModifiableSolrParams(); + params.set("q", query); + + QueryResponse response = server.query(params);*/ + logger.debug("Solr query terms: " + query); + SolrQuery queryObj = new SolrQuery(); + queryObj.setQuery(query); + QueryResponse response = null; + try { + response = server.query(queryObj); + } catch (Exception e){ + logger.error(e.getMessage()); + } + //logger.info(response.getResults().get(0).getFieldValue("Name").toString()); + List results = response.getBeans(SolrRecord.class); + + return results; + } + + @Override + public SolrRecord getAllLayerInfo(String layerId) throws SolrServerException { + String query = "LayerId:" + layerId.trim(); + SolrQuery queryObj = new SolrQuery(); + queryObj.setQuery( query ); + List results = getSolrServer().query(queryObj).getBeans(SolrRecord.class); + if(results.isEmpty()){ + throw new SolrServerException("Layer with id ['" + layerId.trim() + "'] not found in the Solr index."); + } else { + return results.get(0); + } + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecord.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecord.java new file mode 100644 index 0000000..35368a4 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecord.java @@ -0,0 +1,25 @@ +package org.opengeoportal.ogc; + +import java.util.ArrayList; +import java.util.List; + +import org.opengeoportal.solr.SolrRecord; + +public class AugmentedSolrRecord { + List owsInfo = new ArrayList(); + SolrRecord solrRecord; + + public List getOwsInfo() { + return owsInfo; + } + public void setOwsInfo(List owsInfo) { + this.owsInfo = owsInfo; + } + public SolrRecord getSolrRecord() { + return solrRecord; + } + public void setSolrRecord(SolrRecord solrRecord) { + this.solrRecord = solrRecord; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecordRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecordRetriever.java new file mode 100644 index 0000000..d3f6445 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecordRetriever.java @@ -0,0 +1,21 @@ +package org.opengeoportal.ogc; + +import org.opengeoportal.solr.SolrRecord; + +public interface AugmentedSolrRecordRetriever { + + OwsInfo getWmsInfo(String layerId) throws Exception; + + AugmentedSolrRecord getWmsPlusSolrInfo(String layerId) throws Exception; + + OwsInfo getOgcDataInfo(String layerId) throws Exception; + + AugmentedSolrRecord getOgcAugmentedSolrRecord(String layerId) + throws Exception; + + AugmentedSolrRecord getOgcAugmentedSolrRecord(SolrRecord solrRecord) + throws Exception; + + void sendServiceStart(SolrRecord solrRecord); + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecordRetrieverImpl.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecordRetrieverImpl.java new file mode 100644 index 0000000..d348b9a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/AugmentedSolrRecordRetrieverImpl.java @@ -0,0 +1,224 @@ +package org.opengeoportal.ogc; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.ogc.OwsInfo.OwsType; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.http.HttpRequester; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +import com.fasterxml.jackson.core.JsonParseException; + +public class AugmentedSolrRecordRetrieverImpl implements AugmentedSolrRecordRetriever { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final int WMS_ATTEMPTS = 3; + private final int DATA_ATTEMPTS = 3; + private final int PAUSE = 200;//milliseconds + + @Autowired + @Qualifier("ogcInfoRequester.wms") + private OgcInfoRequester wmsRequester; + @Autowired + @Qualifier("ogcInfoRequester.wfs") + private OgcInfoRequester wfsRequester; + @Autowired + @Qualifier("ogcInfoRequester.wcs_1_0_0") + private OgcInfoRequester wcsRequester; + + @Autowired + @Qualifier("httpRequester.generic") + private HttpRequester httpRequester; + @Autowired + private LayerInfoRetriever layerInfoRetriever; + + @Override + public OwsInfo getWmsInfo(String layerId) throws Exception{ + List info = this.getWmsPlusSolrInfo(layerId).getOwsInfo(); + return OwsInfo.findWmsInfo(info); + } + + @Override + public AugmentedSolrRecord getWmsPlusSolrInfo(String layerId) throws Exception{ + AugmentedSolrRecord asr = getInfoAttempt(wmsRequester, WMS_ATTEMPTS, layerId); + return asr; + } + + @Override + public OwsInfo getOgcDataInfo(String layerId) throws Exception { + List info = this.getOgcAugmentedSolrRecord(layerId).getOwsInfo(); + for (OwsInfo infoBit: info){ + if (infoBit.getOwsProtocol().type.equals(OwsType.DATA)){ + //returns only the first match...for now at least, there should only be one + return infoBit; + } + } + throw new Exception("No OWS Data Info found!"); + + } + + @Override + public AugmentedSolrRecord getOgcAugmentedSolrRecord(String layerId) throws Exception { + + AugmentedSolrRecord asr = getWmsPlusSolrInfo(layerId); + OwsInfo wmsInfo = OwsInfo.findWmsInfo(asr.getOwsInfo()); + String type = wmsInfo.getInfoMap().get("owsType"); + //String qualName = wmsInfo.getWmsResponseMap().get("qualifiedName"); + String owsUrl = wmsInfo.getInfoMap().get("owsUrl"); + Thread.sleep(PAUSE); + + return addNativeTypeInfo(asr, type, owsUrl); + } + + private AugmentedSolrRecord addNativeTypeInfo(AugmentedSolrRecord asr, String type, String owsUrl) throws JsonParseException, MalformedURLException{ + AugmentedSolrRecord dataInfo = null; + URL owsUrlObj = new URL(owsUrl); + + if (type.equalsIgnoreCase("wfs")){ + String storedUrl = LocationFieldUtils.getWfsUrl(asr.getSolrRecord().getLocation()); + URL storedUrlObj = new URL(storedUrl); + try{ + dataInfo = getInfoAttempt(wfsRequester, DATA_ATTEMPTS, asr.getSolrRecord()); + asr.getOwsInfo().add(OwsInfo.findWfsInfo(dataInfo.getOwsInfo())); + + } catch (Exception e){ + //if the urls are substantively different, try the one retrieved from wms describeLayer + if (!storedUrlObj.getHost().equalsIgnoreCase(owsUrlObj.getHost()) || !storedUrlObj.getPath().equalsIgnoreCase(owsUrlObj.getPath())){ + logger.info("trying retrieved URL: " + owsUrl); + try { + dataInfo = getInfoAttempt(wfsRequester, DATA_ATTEMPTS, asr.getSolrRecord(), owsUrl); + asr.getOwsInfo().add(OwsInfo.findWfsInfo(dataInfo.getOwsInfo())); + } catch (Exception e1){ + + } + } + } + } else if (type.equalsIgnoreCase("wcs")){ + String storedUrl = LocationFieldUtils.getWcsUrl(asr.getSolrRecord().getLocation()); + URL storedUrlObj = new URL(storedUrl); + try{ + dataInfo = getInfoAttempt(wcsRequester, DATA_ATTEMPTS, asr.getSolrRecord()); + asr.getOwsInfo().add(OwsInfo.findWcsInfo(dataInfo.getOwsInfo())); + } catch (Exception e){ + //if the urls are substantively different, try the one retrieved from wms describeLayer + if (!storedUrlObj.getHost().equalsIgnoreCase(owsUrlObj.getHost()) || !storedUrlObj.getPath().equalsIgnoreCase(owsUrlObj.getPath())){ + try { + logger.info("trying retrieved URL: " + owsUrl); + dataInfo = getInfoAttempt(wcsRequester, DATA_ATTEMPTS, asr.getSolrRecord(), owsUrl); + asr.getOwsInfo().add(OwsInfo.findWcsInfo(dataInfo.getOwsInfo())); + } catch (Exception e1){ + } + } + + } + } + + return asr; + } + + @Override + public AugmentedSolrRecord getOgcAugmentedSolrRecord(SolrRecord solrRecord) throws Exception { + + AugmentedSolrRecord asr = getInfoAttempt(wmsRequester, DATA_ATTEMPTS, solrRecord); + OwsInfo wmsInfo = OwsInfo.findWmsInfo(asr.getOwsInfo()); + String type = wmsInfo.getInfoMap().get("owsType"); + //String qualName = wmsInfo.getWmsResponseMap().get("qualifiedName"); + String owsUrl = wmsInfo.getInfoMap().get("owsUrl"); + Thread.sleep(PAUSE); + + return addNativeTypeInfo(asr, type, owsUrl); + + } + + + private AugmentedSolrRecord getInfoAttempt(OgcInfoRequester requester, int numAttempts, String layerId) throws Exception{ + SolrRecord solrRecord = layerInfoRetriever.getAllLayerInfo(layerId); + return getInfoAttempt(requester, numAttempts, solrRecord); + + } + + + private AugmentedSolrRecord getInfoAttempt(OgcInfoRequester requester, int numAttempts, SolrRecord solrRecord) throws Exception{ + AugmentedSolrRecord asr = null; + sendServiceStart(solrRecord); + for (int i = 0; i < numAttempts; i++ ){ + logger.info("Attempt " + (i + 1)); + try{ + asr = requester.getOgcAugment(solrRecord); + if (asr == null){ + continue; + } else { + return asr; + } + } catch (Exception e){ + logger.warn("Error requesting ogc info: " + e.getMessage()); + } + Thread.sleep(PAUSE * (i + 1)); + + } + if (asr == null){ + throw new Exception("Error reaching the OGC server."); + } else { + return asr; + } + } + + private AugmentedSolrRecord getInfoAttempt(OgcInfoRequester requester, int numAttempts, SolrRecord solrRecord, String url) throws Exception{ + AugmentedSolrRecord asr = null; + sendServiceStart(solrRecord); + for (int i = 0; i < numAttempts; i++ ){ + logger.info("Attempt " + (i + 1)); + + try{ + asr = requester.getOgcAugment(solrRecord, url); + if (asr == null){ + continue; + } else { + return asr; + } + } catch (Exception e){ + logger.warn("Error requesting ogc info: " + e.getMessage()); + } + Thread.sleep(PAUSE * (i + 1)); + + } + if (asr == null){ + throw new Exception("Error reaching the OGC server."); + } else { + return asr; + } + } + + @Override + public void sendServiceStart(SolrRecord solrRecord) { + String location = solrRecord.getLocation(); + + if (LocationFieldUtils.hasServiceStart(location)){ + String serviceStart = ""; + InputStream is = null; + try { + serviceStart = LocationFieldUtils.getServiceStartUrl(location); + String name = solrRecord.getName(); + //the HGL remote service starter does not use fully qualified names + name = name.substring(name.indexOf(".") + 1); + logger.info("Attempting to Start Service for ['" + solrRecord.getLayerId() + "']"); + is = httpRequester.sendRequest(serviceStart, "AddLayer=" + name + "&ValidationKey=OPENGEOPORTALROCKS", "GET"); + } catch (JsonParseException e) { + logger.error("Problem parsing ServiceStart parameter from ['" + location + "']"); + } catch (IOException e) { + logger.error("Problem sending ServiceStart request to : ['" + serviceStart + "']"); + } finally { + IOUtils.closeQuietly(is); + } + } + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequest.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequest.java new file mode 100644 index 0000000..46d0d09 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequest.java @@ -0,0 +1,17 @@ +package org.opengeoportal.ogc; + +import java.io.InputStream; + +public interface OgcInfoRequest { + + String createRequest(String layerName); + + OwsInfo parseResponse(InputStream inputStream) throws Exception; + + String getMethod(); + + String getOgcProtocol(); + + String getVersion(); + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequester.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequester.java new file mode 100644 index 0000000..c1ac42e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequester.java @@ -0,0 +1,12 @@ +package org.opengeoportal.ogc; + +import org.opengeoportal.solr.SolrRecord; + +public interface OgcInfoRequester { + + AugmentedSolrRecord getOgcAugment(SolrRecord solrRecord) throws Exception; + + AugmentedSolrRecord getOgcAugment(SolrRecord solrRecord, String owsUrl) + throws Exception; + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequesterImpl.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequesterImpl.java new file mode 100644 index 0000000..6c2a4e2 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/OgcInfoRequesterImpl.java @@ -0,0 +1,136 @@ +package org.opengeoportal.ogc; + +import java.io.InputStream; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.config.proxy.ProxyConfigRetriever; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.OgpUtils; +import org.opengeoportal.utilities.http.HttpRequester; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class OgcInfoRequesterImpl implements OgcInfoRequester { + private HttpRequester httpRequester; + private OgcInfoRequest ogcInfoRequest; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + private ProxyConfigRetriever proxyConfigRetriever; + + public HttpRequester getHttpRequester() { + return httpRequester; + } + + public void setHttpRequester(HttpRequester httpRequester) { + this.httpRequester = httpRequester; + } + + public OgcInfoRequest getOgcInfoRequest() { + return ogcInfoRequest; + } + + public void setOgcInfoRequest(OgcInfoRequest ogcInfoRequest) { + this.ogcInfoRequest = ogcInfoRequest; + } + + public ProxyConfigRetriever getProxyConfigRetriever() { + return proxyConfigRetriever; + } + + public void setProxyConfigRetriever(ProxyConfigRetriever proxyConfigRetriever) { + this.proxyConfigRetriever = proxyConfigRetriever; + } + + private OwsInfo handleResponse(String contentType, InputStream inputStream) throws Exception{ + logger.info(contentType); + Boolean contentMatch = contentType.toLowerCase().contains("xml"); + if (!contentMatch){ + logger.error("Unexpected content type: " + contentType); + //If there is a mismatch with the expected content, but the response is text, we want to at least log the response + if (contentType.toLowerCase().contains("text")||contentType.toLowerCase().contains("html")||contentType.toLowerCase().contains("xml")){ + logger.error("Returned text: " + IOUtils.toString(inputStream)); + } + + throw new Exception("Unexpected content type"); + + } else { + try{ + return ogcInfoRequest.parseResponse(inputStream); + } catch (Exception e){ + e.printStackTrace(); + throw new Exception("Could not parse response"); + } + } + } + + public OwsInfo getOwsInfo(SolrRecord solrRecord, String owsUrl) throws Exception { + InputStream is = null; + try{ + String layerName = OgpUtils.getLayerNameNS(solrRecord.getWorkspaceName(), solrRecord.getName()); + + String request = ogcInfoRequest.createRequest(layerName); + String method = ogcInfoRequest.getMethod(); + + is = httpRequester.sendRequest(owsUrl, request, method); + + int status = httpRequester.getStatus(); + if (status == 200){ + String contentType = httpRequester.getContentType().toLowerCase(); + return handleResponse(contentType, is); + } else { + throw new Exception("Error communicating with server! response: " + Integer.toString(status)); + } + } finally { + IOUtils.closeQuietly(is); + } + } + + + public OwsInfo getOwsInfo(SolrRecord solrRecord) throws Exception { + InputStream is = null; + try{ + String layerName = OgpUtils.getLayerNameNS(solrRecord.getWorkspaceName(), solrRecord.getName()); + + String request = ogcInfoRequest.createRequest(layerName); + String method = ogcInfoRequest.getMethod(); + String protocol = ogcInfoRequest.getOgcProtocol().toLowerCase(); + String url = proxyConfigRetriever.getInternalUrl(protocol, solrRecord.getInstitution(), solrRecord.getAccess(), solrRecord.getLocation()); + + is = httpRequester.sendRequest(url, request, method); + + int status = httpRequester.getStatus(); + if (status == 200){ + String contentType = httpRequester.getContentType().toLowerCase(); + return handleResponse(contentType, is); + } else { + throw new Exception("Error communicating with server! response: " + Integer.toString(status)); + } + } finally { + IOUtils.closeQuietly(is); + } + } + + @Override + public AugmentedSolrRecord getOgcAugment(SolrRecord solrRecord, String owsUrl) + throws Exception { + AugmentedSolrRecord asr = new AugmentedSolrRecord(); + asr.setSolrRecord(solrRecord); + OwsInfo info = getOwsInfo(solrRecord, owsUrl); + asr.getOwsInfo().add(info); + + return asr; + } + + @Override + public AugmentedSolrRecord getOgcAugment(SolrRecord solrRecord) + throws Exception { + + AugmentedSolrRecord asr = new AugmentedSolrRecord(); + asr.setSolrRecord(solrRecord); + OwsInfo info = getOwsInfo(solrRecord); + asr.getOwsInfo().add(info); + return asr; + } + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/OwsDescribeInfo.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/OwsDescribeInfo.java new file mode 100644 index 0000000..6a59c37 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/OwsDescribeInfo.java @@ -0,0 +1,5 @@ +package org.opengeoportal.ogc; + +public interface OwsDescribeInfo { + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/OwsInfo.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/OwsInfo.java new file mode 100644 index 0000000..6aad7cd --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/OwsInfo.java @@ -0,0 +1,94 @@ +package org.opengeoportal.ogc; + +import java.util.List; +import java.util.Map; + + +public class OwsInfo { + public enum OwsType { + DATA, + DISPLAY; + + public static OwsType parseOwsType(String type){ + if (type.trim().equalsIgnoreCase("data")){ + return DATA; + } else { + return DISPLAY; + } + } + } + + public enum OwsProtocol { + WMS(OwsType.DISPLAY), + WFS(OwsType.DATA), + WCS(OwsType.DATA); + + final OwsType type; + OwsProtocol(OwsType type){ + this.type = type; + } + public static OwsProtocol parseOwsProtocol(String protocol) throws Exception{ + if (protocol.trim().equalsIgnoreCase("wms")){ + return WMS; + } else if (protocol.trim().equalsIgnoreCase("wfs")){ + return WFS; + } else if (protocol.trim().equalsIgnoreCase("wcs")){ + return WCS; + } else { + throw new Exception("Unrecognized Protocol: " + protocol); + } + } + } + + OwsProtocol owsProtocol; + Map infoMap; + OwsDescribeInfo owsDescribeInfo; + + public OwsProtocol getOwsProtocol() { + return owsProtocol; + } + public void setOwsProtocol(OwsProtocol owsProtocol) { + this.owsProtocol = owsProtocol; + } + + public Map getInfoMap() { + return infoMap; + } + public void setInfoMap(Map infoMap) { + this.infoMap = infoMap; + } + + public static OwsInfo findWmsInfo(List info) throws Exception{ + for (OwsInfo infoBit: info){ + if (infoBit.getOwsProtocol().equals(OwsProtocol.WMS)){ + return infoBit; + } + } + throw new Exception("No WMS Info found!"); + } + + public static OwsInfo findWfsInfo(List info) throws Exception{ + for (OwsInfo infoBit: info){ + if (infoBit.getOwsProtocol().equals(OwsProtocol.WFS)){ + return infoBit; + } + } + throw new Exception("No WFS Info found!"); + } + + public static OwsInfo findWcsInfo(List info) throws Exception{ + for (OwsInfo infoBit: info){ + if (infoBit.getOwsProtocol().equals(OwsProtocol.WCS)){ + return infoBit; + } + } + throw new Exception("No WCS Info found!"); + } + public OwsDescribeInfo getOwsDescribeInfo() { + return owsDescribeInfo; + } + public void setOwsDescribeInfo(OwsDescribeInfo owsDescribeInfo) { + this.owsDescribeInfo = owsDescribeInfo; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/WmcCreator.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/WmcCreator.java new file mode 100644 index 0000000..b9d87e5 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/WmcCreator.java @@ -0,0 +1,16 @@ +package org.opengeoportal.ogc; + +import java.io.OutputStream; +import java.util.Map; + +import javax.xml.transform.Result; + +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.ogc.OwsInfo.OwsType; + +public interface WmcCreator { + + Result getWmcResponse(Map idsAndFormats, + BoundingBox bounds, OutputStream os) throws Exception; + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/WmcCreatorImpl.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/WmcCreatorImpl.java new file mode 100644 index 0000000..e52adf3 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/WmcCreatorImpl.java @@ -0,0 +1,384 @@ +package org.opengeoportal.ogc; + +import java.io.OutputStream; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.xml.transform.Result; +import javax.xml.transform.stream.StreamResult; + +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.ogc.OwsInfo.OwsType; +import org.opengeoportal.ogc.wmc.jaxb.BoundingBoxType; +import org.opengeoportal.ogc.wmc.jaxb.GeneralType; +import org.opengeoportal.ogc.wmc.jaxb.LayerListType; +import org.opengeoportal.ogc.wmc.jaxb.LayerType; +import org.opengeoportal.ogc.wmc.jaxb.OnlineResourceType; +import org.opengeoportal.ogc.wmc.jaxb.ServerType; +import org.opengeoportal.ogc.wmc.jaxb.ServiceType; +import org.opengeoportal.ogc.wmc.jaxb.TypeType; +import org.opengeoportal.ogc.wmc.jaxb.ViewContextType; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.OgpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.oxm.Marshaller; +import org.springframework.oxm.XmlMappingException; + +/* + * Given a list of OGP ids, this returns a WMC XML document that can be used by Desktop or web-mapping tools + * + */ +/* + * + * + + + + + EOS Data Gateways + + EOS + EOSDIS + NASA + CCRS + CEOS + OGC + + Map View of EOSDIS partners locations + + + + + + + + + Tom Kralidis + Environment Canada + + Systems Scientist + + postal +

867 Lakeshore Road
+ Burlington + Ontario + L7R 4A6 + Canada + + +01-905-336-4409 + +01-905-336-4499 + tom.kralidis@ec.gc.ca + + + + + + + + + + + * + */ +public class WmcCreatorImpl implements WmcCreator { + @Autowired + private LayerInfoRetriever layerInfoRetriever; + + @Autowired + private Marshaller marshaller; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public LayerListType getLayerList(Map idsAndFormats) throws Exception { + + List records = layerInfoRetriever.fetchAllLayerInfo(idsAndFormats.keySet()); + LayerListType layerList = new LayerListType(); + for (SolrRecord record: records){ + try { + layerList.getLayer().add(populateLayer(record, idsAndFormats.get(record.getLayerId()))); + } catch (Exception e){ + logger.error(e.getMessage()); + } + } + return layerList; + } + + public LayerType populateLayer(SolrRecord record, OwsType format) throws Exception { + /* + * + + + + + + + + + + + + + + + + + + + */ + LayerType layer = new LayerType(); + layer.setHidden(false); + layer.setQueryable(true); + + + + /* + * + + + */ + ServerType server = new ServerType(); + OnlineResourceType olresource = new OnlineResourceType(); + + String location = record.getLocation(); + + ServiceType serviceType; + String serviceVersion; + TypeType resourceType; + String resourceHref; + + if (format == OwsType.DISPLAY){ + if (LocationFieldUtils.hasWmsUrl(location)){ + serviceType = ServiceType.OGC_WMS; + serviceVersion = "1.1.1"; + resourceType = TypeType.SIMPLE; + resourceHref = LocationFieldUtils.getWmsUrl(location); + } else { + throw new Exception("No OGC Web Map Services associated with this layer."); + } + } else { + //OwsType.DATA + if (LocationFieldUtils.hasWfsUrl(location)){ + serviceType = ServiceType.OGC_WFS; + serviceVersion = "1.1.0"; + resourceType = TypeType.SIMPLE; + resourceHref = LocationFieldUtils.getWfsUrl(location); + } else if (LocationFieldUtils.hasWmsUrl(location)){ + //fall back to WMS + serviceType = ServiceType.OGC_WMS; + serviceVersion = "1.1.1"; + resourceType = TypeType.SIMPLE; + resourceHref = LocationFieldUtils.getWmsUrl(location); + }else { + throw new Exception("No OGC Web Map Services associated with this layer."); + } + + } + + + server.setService(serviceType); + server.setVersion(serviceVersion); + olresource.setType(resourceType); + olresource.setHref(resourceHref); + server.setOnlineResource(olresource); + + layer.setServer(server); + + server.setTitle(record.getLayerDisplayName()); + String name = OgpUtils.getLayerNameNS(record.getWorkspaceName(), record.getName()); + layer.setName(name); + layer.setTitle(record.getLayerDisplayName()); + layer.setAbstract(record.getDescription()); + + return layer; + } + + public GeneralType getGeneralInfo(BoundingBoxType bounds){ + /* + * + + + + + + + + + + + + + */ + GeneralType generalInfo = new GeneralType(); + generalInfo.setTitle("OpenGeoportal Web Map Context"); + //generalInfo.setContactInformation(value); + /* + * + + */ + + generalInfo.setBoundingBox(bounds); + + return generalInfo; + } + + public ViewContextType createViewContext(Map idsAndFormats, BoundingBox bounds) throws Exception{ + ViewContextType wmcResponse = new ViewContextType(); + + wmcResponse.setGeneral(getGeneralInfo(convertOGPBoundsToWMCBounds(bounds))); + wmcResponse.setLayerList(getLayerList(idsAndFormats)); + wmcResponse.setId(UUID.randomUUID().toString()); + wmcResponse.setVersion("1.1.0"); + return wmcResponse; + } + + BoundingBoxType convertOGPBoundsToWMCBounds(BoundingBox bounds){ + + BoundingBoxType bboxType = new BoundingBoxType(); + + Double minx; + Double miny; + Double maxx; + Double maxy; + + if (bounds != null){ + minx = bounds.getMinX(); + miny = bounds.getMinY(); + maxx = bounds.getMaxX(); + maxy = bounds.getMaxY(); + } else { + minx = -180.000000; + miny = -90.000000; + maxx = 180.000000; + maxy = 90.000000; + } + + String srs = "EPSG:4326"; + + bboxType.setMinx(new BigDecimal(minx)); + bboxType.setMiny(new BigDecimal(miny)); + bboxType.setMaxx(new BigDecimal(maxx)); + bboxType.setMaxy(new BigDecimal(maxy)); + bboxType.setSRS(srs); + + return bboxType; + } + + @Override + public Result getWmcResponse(Map idsAndFormats, BoundingBox bounds, OutputStream os) throws Exception{ + + ViewContextType viewContext = createViewContext(idsAndFormats, bounds); + + Result result = new StreamResult(os); + try { + marshaller.marshal(viewContext, result); + } catch (XmlMappingException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + + return result; + + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/WcsDescribeCoverage1_1_1.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/WcsDescribeCoverage1_1_1.java new file mode 100644 index 0000000..9e43cc6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/WcsDescribeCoverage1_1_1.java @@ -0,0 +1,139 @@ +package org.opengeoportal.ogc.wcs; + +import java.io.InputStream; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.ogc.OwsInfo.OwsProtocol; +import org.opengeoportal.utilities.OgpXmlUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class WcsDescribeCoverage1_1_1 implements OgcInfoRequest { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + public final String VERSION = "1.1.1"; + + @Override + public String createRequest(String layerName) { + String describeCoverageRequest = "service=WCS&version=" + VERSION + "&REQUEST=DescribeCoverage&Identifiers=" + layerName; + return describeCoverageRequest; + } + + + + @Override + public OwsInfo parseResponse(InputStream inputStream) throws Exception { + + //Parse the document + Document document = OgpXmlUtils.getDocument(inputStream); + //initialize return variable + Map describeLayerInfo = new HashMap(); + + //get the needed nodes + Node schemaNode = document.getFirstChild(); + OgpXmlUtils.handleServiceException(schemaNode); + + + /* + * + * + * + * Croplands with high rates of human-induced erosion + * Generated from GeoTIFF + * WCSGeoTIFFj_aghwer_31153 + * GEONETWORK:j_aghwer_31153 + * < + * ows:BoundingBox crs="urn:ogc:def:crs:OGC:1.3:CRS84" dimensions="2">-180.0 -89.9999999999999179.99999855999994 89.99999928000007 + * -89.9999999999999 -180.089.99999928000007 179.99999855999994 + * urn:ogc:def:crs:EPSG::4326urn:ogc:def:method:WCS:1.1:2dGridIn2dCrs-179.9583333335 89.958332613500060.08333333299999998 0.0 0.0 -0.08333333299999998urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS + * + * contents + * 255.0255.0 + * 255.0 + * nearestlinearcubicnearest neighbor + * GRAY_INDEX + * urn:ogc:def:crs:EPSG::4326EPSG:4326 + * application/arcgridimage/tiff;subtype="geotiff" + * application/gtopo30image/gifimage/png + * image/jpegimage/tiff + * + * + * + + sde:GISPORTAL.GISOWNER01.LANDINFO_K01C + + + 6.878935172242831 -11.12096492367308 + 13.120805077124169 -4.879095018791742 + + + + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:method:WCS:1.1:2dSimpleGrid + 4.495405044927143E-4 -4.495405044927143E-4 + urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS + + + + * + * + */ + try{ + NodeList supportedCRSs = document.getElementsByTagName("wcs:SupportedCRS"); + //put all in a comma separated list + describeLayerInfo.put("SRS", supportedCRSs.item(0).getTextContent().trim()); + } catch (Exception e){ + //throw new Exception("error getting SRS info: "+ e.getMessage()); + logger.error("error getting SRS info: "+ e.getMessage()); + + } + try { + Set desiredGridTags = new HashSet(); + desiredGridTags.add("GridBaseCRS"); + desiredGridTags.add("GridType"); + desiredGridTags.add("GridOrigin"); + desiredGridTags.add("GridOffsets"); + desiredGridTags.add("GridCS"); + + + Node gridCrs = document.getElementsByTagName("wcs:GridCRS").item(0); + describeLayerInfo.putAll(OgpXmlUtils.getDesiredChildrenValues(gridCrs, desiredGridTags)); + + } catch (Exception e){ + //throw new Exception("error getting Grid Envelope info: "+ e.getMessage()); + logger.error("error getting Grid Envelope info: "+ e.getMessage()); + } + OwsInfo owsResponse = new OwsInfo(); + owsResponse.setOwsProtocol(OwsProtocol.parseOwsProtocol(this.getOgcProtocol())); + owsResponse.setInfoMap(describeLayerInfo); + + return owsResponse; + } + + + @Override + public String getMethod() { + return "GET"; + } + + @Override + public String getOgcProtocol() { + return "wcs"; + } + + + + @Override + public String getVersion() { + return VERSION; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/WcsGetCoverage1_1_1.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/WcsGetCoverage1_1_1.java new file mode 100644 index 0000000..1967fdb --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/WcsGetCoverage1_1_1.java @@ -0,0 +1,65 @@ +package org.opengeoportal.ogc.wcs; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.opengeoportal.layer.BoundingBox; + +public class WcsGetCoverage1_1_1 { + + public static String getMethod(){ + return "POST"; + } + + public static String createWcsGetCoverageRequest(String layerName, Map describeCoverageMap, BoundingBox bounds, int epsgCode, String outputFormat) throws Exception { + + //--generate POST message + String getCoverageRequest = "" + + "" + layerName + "" + + "" + + bounds.generateOWSBoundingBox() + + "" + + "" + + generateGridCRS(describeCoverageMap) + + "" + + ""; + + + return getCoverageRequest; + } + + + + private static String generateGridCRS(Map describeCoverageMap){ + //should check which are required elements + List gridtagList = new ArrayList(); + gridtagList.add("GridBaseCRS"); + gridtagList.add("GridType"); + gridtagList.add("GridOffsets"); + gridtagList.add("GridCS"); + + String gridCRS = ""; + for (String gridtag: gridtagList){ + for (String key :describeCoverageMap.keySet()){ + if (key.toLowerCase().contains(gridtag.toLowerCase())){ + gridCRS += ""; + gridCRS += describeCoverageMap.get(key).trim(); + gridCRS += ""; + } + } + } + + gridCRS += ""; + + return gridCRS; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/CoverageOffering1_0_0.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/CoverageOffering1_0_0.java new file mode 100644 index 0000000..95519f0 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/CoverageOffering1_0_0.java @@ -0,0 +1,150 @@ +package org.opengeoportal.ogc.wcs.wcs1_0_0; + +import java.util.List; + +import org.opengeoportal.layer.Envelope; +import org.opengeoportal.ogc.OwsDescribeInfo; + + +public class CoverageOffering1_0_0 implements OwsDescribeInfo{ + //needed to form WCS getCoverage request + // wcs:domainSet/wcs:spatialDomain/gml:RectifiedGrid/gml:limits/gml:GridEnvelope/gml:low & gml:high + // wcs:domainSet/wcs:spatialDomain/gml:RectifiedGrid/gml:axisName (multiple) + // wcs:supportedCRSs/wcs:requestResponseCRSs + /* + * + * + * Generated from GeoTIFF + * GEONETWORK:etref_may_5017 + * Global map of montly reference evapotranspiration - 30 arc-min + * -180.0 -90.0180.0 90.0 + * WCSGeoTIFFetref_may_5017 + * ***location and time info + * + * -180.0 -90.0180.0 90.0 + * 0 0719 359xy + * -179.75 89.75 + * 0.5 0.00.0 -0.5 + * + * + * + * "band" info + * etref_may_5017Global map of montly reference evapotranspiration - 30 arc-min + * BandBand1 + * + * + * supported crss + * EPSG:4326 + * + * supported formats + * + * ArcGrid + * GeoTIFF + * GIF + * Gtopo30 + * ImageMosaic + * JPEG + * PNG + * TIFF + * + * + * interpolations + * nearest neighborbilinearbicubic + * + * + * + */ + + + /* 0 0719 359xy + * -179.75 89.75 + * 0.5 0.00.0 -0.5 + * + */ + + + String name; + String description; + String label; + + Envelope lonLatEnvelope; + + List keywords; + + RectifiedGrid rectifiedGrid; + + List supportedCRSs; + + String nativeFormat; + List supportedFormats; + + String defaultInterpolation; + List supportedInterpolations; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public String getLabel() { + return label; + } + public void setLabel(String label) { + this.label = label; + } + public Envelope getLonLatEnvelope() { + return lonLatEnvelope; + } + public void setLonLatEnvelope(Envelope lonLatEnvelope) { + this.lonLatEnvelope = lonLatEnvelope; + } + public List getKeywords() { + return keywords; + } + public void setKeywords(List keywords) { + this.keywords = keywords; + } + public RectifiedGrid getRectifiedGrid() { + return rectifiedGrid; + } + public void setRectifiedGrid(RectifiedGrid rectifiedGrid) { + this.rectifiedGrid = rectifiedGrid; + } + public List getSupportedCRSs() { + return supportedCRSs; + } + public void setSupportedCRSs(List supportedCRSs) { + this.supportedCRSs = supportedCRSs; + } + public String getNativeFormat() { + return nativeFormat; + } + public void setNativeFormat(String nativeFormat) { + this.nativeFormat = nativeFormat; + } + public List getSupportedFormats() { + return supportedFormats; + } + public void setSupportedFormats(List supportedFormats) { + this.supportedFormats = supportedFormats; + } + public String getDefaultInterpolation() { + return defaultInterpolation; + } + public void setDefaultInterpolation(String defaultInterpolation) { + this.defaultInterpolation = defaultInterpolation; + } + public List getSupportedInterpolations() { + return supportedInterpolations; + } + public void setSupportedInterpolations(List supportedInterpolations) { + this.supportedInterpolations = supportedInterpolations; + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/RectifiedGrid.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/RectifiedGrid.java new file mode 100644 index 0000000..fb09f74 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/RectifiedGrid.java @@ -0,0 +1,57 @@ +package org.opengeoportal.ogc.wcs.wcs1_0_0; + +import java.util.List; + +public class RectifiedGrid { + // 0 02159 1079xy + int dimension; + String srsName; + List axisName; + int width; + int height; + Double resx; + Double resy; + + public int getDimension() { + return dimension; + } + public void setDimension(int dimension) { + this.dimension = dimension; + } + public String getSrsName() { + return srsName; + } + public void setSrsName(String srsName) { + this.srsName = srsName; + } + public List getAxisName() { + return axisName; + } + public void setAxisName(List axisName) { + this.axisName = axisName; + } + public int getWidth() { + return width; + } + public void setWidth(int width) { + this.width = width; + } + public int getHeight() { + return height; + } + public void setHeight(int height) { + this.height = height; + } + public Double getResx() { + return resx; + } + public void setResx(Double resx) { + this.resx = resx; + } + public Double getResy() { + return resy; + } + public void setResy(Double resy) { + this.resy = resy; + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/WcsDescribeCoverage1_0_0.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/WcsDescribeCoverage1_0_0.java new file mode 100644 index 0000000..6b27622 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/WcsDescribeCoverage1_0_0.java @@ -0,0 +1,322 @@ +package org.opengeoportal.ogc.wcs.wcs1_0_0; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.opengeoportal.layer.Envelope; +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.ogc.OwsInfo.OwsProtocol; +import org.opengeoportal.utilities.OgpXmlUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class WcsDescribeCoverage1_0_0 implements OgcInfoRequest { + final static Logger logger = LoggerFactory.getLogger(WcsDescribeCoverage1_0_0.class.getName()); + + String layerName; + public final String VERSION = "1.0.0"; + + @Override + public String createRequest(String layerName) { + String describeCoverageRequest = "service=WCS&version=" + VERSION + "&REQUEST=DescribeCoverage&Coverage=" + layerName; + this.layerName = layerName; + return describeCoverageRequest; + } + + + public static Envelope parseLonLatEnvelope(Node lonLatEnvelopeNode){ + /* + * -180.00000000000003 -89.99999999999996180.00072000000003 90.00036000000007 + */ + Node srsAttribute = lonLatEnvelopeNode.getAttributes().getNamedItem("srsName"); + String srsName = srsAttribute.getNodeValue(); + logger.info("srs: " + srsName); + NodeList gmlNodes = lonLatEnvelopeNode.getChildNodes(); + List x = new ArrayList(); + List y = new ArrayList(); + + for (int i = 0 ; i < gmlNodes.getLength(); i++){ + Node currentNode = gmlNodes.item(i); + if (currentNode.getLocalName().equalsIgnoreCase("pos")){ + String points = currentNode.getTextContent().trim(); + logger.info("points: " + points); + String[] pointArr = points.split(" "); + logger.info("x" + pointArr[0]); + logger.info("y" + pointArr[1]); + + x.add(pointArr[0]); + y.add(pointArr[1]); + } + } + Double minX = Math.min(Double.parseDouble(x.get(0)), Double.parseDouble(x.get(1))); + Double minY = Math.min(Double.parseDouble(y.get(0)), Double.parseDouble(y.get(1))); + + Double maxX = Math.max(Double.parseDouble(x.get(0)), Double.parseDouble(x.get(1))); + Double maxY = Math.max(Double.parseDouble(y.get(0)), Double.parseDouble(y.get(1))); + + return new Envelope(minX, minY, maxX, maxY, srsName); + + } + + public static List parseKeywords(Node keywordsNode){ + + NodeList keywordNodes = keywordsNode.getChildNodes(); + List keywords = new ArrayList(); + + for (int i = 0 ; i < keywordNodes.getLength(); i++){ + Node currentNode = keywordNodes.item(i); + if (currentNode.getLocalName().equalsIgnoreCase("keyword")){ + keywords.add(currentNode.getTextContent().trim()); + } + } + + return keywords; + } + + public static RectifiedGrid parseRectifiedGrid(Node rgNode){ + /* -179.75 89.75 + * 0.5 0.00.0 -0.5 + */ + RectifiedGrid rectGrid = new RectifiedGrid(); + + NamedNodeMap attributes = rgNode.getAttributes(); + rectGrid.setDimension(Integer.parseInt(attributes.getNamedItem("dimension").getNodeValue())); + rectGrid.setSrsName(attributes.getNamedItem("srsName").getNodeValue()); + + + NodeList rgNodes = rgNode.getChildNodes(); + List axes = new ArrayList(); + List offsetVectors = new ArrayList(); + + for (int i = 0 ; i < rgNodes.getLength(); i++){ + Node currentNode = rgNodes.item(i); + String currentTag = currentNode.getLocalName(); + if (currentTag.equalsIgnoreCase("axisName")){ + axes.add(currentNode.getTextContent().trim()); + } else if (currentTag.equalsIgnoreCase("limits")){ + Set envTags = new HashSet(); + envTags.add("low"); + envTags.add("high"); + Map limits = OgpXmlUtils.getDesiredChildrenValues(currentNode.getFirstChild(), envTags); + String[] lowArr = limits.get("low").split(" "); + String[] highArr = limits.get("high").split(" "); + int width = Math.abs(Integer.parseInt(lowArr[0]) - Integer.parseInt(highArr[0])); + int height = Math.abs(Integer.parseInt(lowArr[1]) - Integer.parseInt(highArr[1])); + logger.info(Integer.toString(height) + " " + Integer.toString(width)); + rectGrid.setHeight(height); + rectGrid.setWidth(width); + } else if (currentTag.equalsIgnoreCase("offsetVector")){ + offsetVectors.add(currentNode.getTextContent().trim()); + } else if (currentTag.equals("origin")){ + //nothing for now + } + } + String osVector1 =offsetVectors.get(0); + String[] values1 = osVector1.split(" "); + + String osVector2 =offsetVectors.get(1); + String[] values2 = osVector2.split(" "); + + Double resx = Math.abs(Double.parseDouble(values1[0]) - Double.parseDouble(values2[0])); + Double resy = Math.abs(Double.parseDouble(values1[1]) - Double.parseDouble(values2[1])); + rectGrid.setResx(resx); + rectGrid.setResy(resy); + + rectGrid.setAxisName(axes); + return rectGrid; + } + + public static List parseSupportedCrs(Node crsNode){ + return OgpXmlUtils.getChildValuesList(crsNode, "requestResponseCRSs"); + } + + public static List parseSupportedFormats(Node formatNode){ + return OgpXmlUtils.getChildValuesList(formatNode, "formats"); + } + + public static List parseSupportedInterpolations(Node interpNode){ + return OgpXmlUtils.getChildValuesList(interpNode, "interpolationMethod"); + } + + @Override + public OwsInfo parseResponse(InputStream inputStream) throws Exception { + + //Parse the document + Document document = OgpXmlUtils.getDocument(inputStream); + //initialize return variable + //Map describeLayerInfo = new HashMap(); + //get the needed nodes + Node schemaNode = document.getFirstChild(); + OgpXmlUtils.handleServiceException(schemaNode); + + + /* + * + * Generated from GeoTIFF + * AQUASTAT:aridity_37040 + * Global map of aridity - 10 arc minutes + * + * -180.00000000000003 -89.99999999999996180.00072000000003 90.00036000000007 + * WCSGeoTIFFaridity_37040 + * -180.00000000000003 -89.99999999999996180.00072000000003 90.00036000000007 + * 0 02159 1079xy + * -179.91666650000002 89.917026500000080.16666700000000004 0.00.0 -0.16666700000000004 + * + * aridity_37040Global map of aridity - 10 arc minutes + * BandBand1 + * EPSG:4326 + * GeoTIFFGIFJPEGPNGTIFF + * bilinearbicubic + * + * + * + * + */ + NodeList coverageOfferings = document.getElementsByTagName("wcs:CoverageOffering"); + Node desiredNode = null; + if (coverageOfferings.getLength() > 1){ + for (int i = 0 ; i < coverageOfferings.getLength(); i++){ + Node currentCoverage = coverageOfferings.item(i); + NodeList currentChildren = currentCoverage.getChildNodes(); + for (int j = 0; j < currentChildren.getLength(); j++){ + Node currentChild = currentChildren.item(j); + if (currentChild.getNodeName().equalsIgnoreCase("wcs:name")){ + if (currentChild.getTextContent().contains(layerName)){ + desiredNode = currentCoverage; + break; + } + } + } + if (desiredNode != null){ + break; + } + } + } else { + desiredNode = coverageOfferings.item(0); + } + + NodeList layerDetails = desiredNode.getChildNodes(); + + CoverageOffering1_0_0 coverageOffering = new CoverageOffering1_0_0(); + for (int k = 0; k < layerDetails.getLength(); k++){ + Node currentDetail = layerDetails.item(k); + String nodeName = currentDetail.getLocalName(); + logger.info("localName: " + nodeName); + if (nodeName.equalsIgnoreCase("name")){ + String name = currentDetail.getTextContent().trim(); + logger.info(name); + coverageOffering.setName(name); + } else if (nodeName.equalsIgnoreCase("description")){ + String description = currentDetail.getTextContent().trim(); + logger.info(description); + coverageOffering.setDescription(description); + } else if (nodeName.equalsIgnoreCase("label")){ + String label = currentDetail.getTextContent().trim(); + logger.info(label); + coverageOffering.setLabel(label); + } else if (nodeName.equalsIgnoreCase("lonLatEnvelope")){ + coverageOffering.setLonLatEnvelope(parseLonLatEnvelope(currentDetail)); + } else if (nodeName.equalsIgnoreCase("keywords")){ + coverageOffering.setKeywords(parseKeywords(currentDetail)); + } else if (nodeName.equalsIgnoreCase("domainSet")){ + Node sdNode = OgpXmlUtils.getChildNode(currentDetail, "spatialDomain"); + Node rgNode = OgpXmlUtils.getChildNode(sdNode, "RectifiedGrid"); + coverageOffering.setRectifiedGrid(parseRectifiedGrid(rgNode)); + } else if (nodeName.equalsIgnoreCase("rangeSet")){ + // + } else if (nodeName.equalsIgnoreCase("supportedCRSs")){ + coverageOffering.setSupportedCRSs(parseSupportedCrs(currentDetail)); + } else if (nodeName.equalsIgnoreCase("supportedFormats")){ + coverageOffering.setNativeFormat(OgpXmlUtils.getAttribute(currentDetail, "nativeFormat")); + coverageOffering.setSupportedFormats(parseSupportedFormats(currentDetail)); + } else if (nodeName.equalsIgnoreCase("supportedInterpolations")){ + coverageOffering.setDefaultInterpolation(OgpXmlUtils.getAttribute(currentDetail, "default")); + coverageOffering.setSupportedInterpolations(parseSupportedInterpolations(currentDetail)); + } + + } + //needed to form WCS getCoverage request + // wcs:domainSet/wcs:spatialDomain/gml:RectifiedGrid/gml:limits/gml:GridEnvelope/gml:low & gml:high + // wcs:domainSet/wcs:spatialDomain/gml:RectifiedGrid/gml:axisName (multiple) + // wcs:supportedCRSs/wcs:requestResponseCRSs + /* + * + * + * Generated from GeoTIFF + * GEONETWORK:etref_may_5017 + * Global map of montly reference evapotranspiration - 30 arc-min + * -180.0 -90.0180.0 90.0 + * WCSGeoTIFFetref_may_5017 + * ***location and time info + * + * -180.0 -90.0180.0 90.0 + * 0 0719 359xy + * -179.75 89.75 + * 0.5 0.00.0 -0.5 + * + * + * + * "band" info + * etref_may_5017Global map of montly reference evapotranspiration - 30 arc-min + * BandBand1 + * + * + * supported crss + * EPSG:4326 + * + * supported formats + * + * ArcGrid + * GeoTIFF + * GIF + * Gtopo30 + * ImageMosaic + * JPEG + * PNG + * TIFF + * + * + * interpolations + * nearest neighborbilinearbicubic + * + * + * + * + * + * + */ + + OwsInfo owsResponse = new OwsInfo(); + owsResponse.setOwsProtocol(OwsProtocol.parseOwsProtocol(this.getOgcProtocol())); + owsResponse.setOwsDescribeInfo(coverageOffering); + + return owsResponse; + } + + @Override + public String getMethod() { + return "GET"; + } + + @Override + public String getOgcProtocol() { + return "wcs"; + } + + + + @Override + public String getVersion() { + return VERSION; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/WcsGetCoverage1_0_0.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/WcsGetCoverage1_0_0.java new file mode 100644 index 0000000..4bbaf2c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wcs/wcs1_0_0/WcsGetCoverage1_0_0.java @@ -0,0 +1,98 @@ +package org.opengeoportal.ogc.wcs.wcs1_0_0; + +import java.util.List; + +import org.geotools.factory.Hints; +import org.geotools.geometry.jts.ReferencedEnvelope; +import org.geotools.referencing.ReferencingFactoryFinder; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.utilities.OgpUtils; +import org.opengis.referencing.crs.CRSAuthorityFactory; +import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WcsGetCoverage1_0_0 { + final static Logger logger = LoggerFactory.getLogger(WcsGetCoverage1_0_0.class.getName()); + + private static final String VERSION = "1.0.0"; + + public static String getMethod(){ + return "GET"; + } + + public static Boolean supports(List supportedList, String testValue){ + for (String current: supportedList){ + logger.info(current); + if (current.toLowerCase().contains(testValue)){ + return true; + } + } + return false; + } + + public static String createWcsGetCoverageRequest(String layerName, CoverageOffering1_0_0 coverageOffering, BoundingBox bounds, int epsgCode, String outputFormat) throws Exception { + //http://data.fao.org/maps/wcs?service=WCS&version=1.0.0&request=GetCoverage&coverage=lus_mna_31661&bbox=-13.166733,39.766613,12.099957,63.333236&crs=EPSG:4326&format=geotiff&width=917&height=331 + + List supportedFormats = coverageOffering.getSupportedFormats(); + if (!supports(supportedFormats, outputFormat)){ + throw new Exception("The remote server does not support the output format ['" + outputFormat + "']"); + } + /*if (!supports(coverageOffering.getSupportedCRSs(), Integer.toString(epsgCode))){ + throw new Exception("The remote server does not support the SRS ['" + Integer.toString(epsgCode) + "']"); + }*/ + + //reproject the requested bounds to raster's native projection/crs + Hints hints = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE); + CRSAuthorityFactory factory = ReferencingFactoryFinder.getCRSAuthorityFactory("EPSG", hints); + CoordinateReferenceSystem sourceCRS = factory.createCoordinateReferenceSystem("EPSG:4326"); + + ReferencedEnvelope envelope = new ReferencedEnvelope(bounds.getMinX(), bounds.getMaxX(), bounds.getMinY(), bounds.getMaxY(), sourceCRS); + logger.info("requested Bounds: " + OgpUtils.referencedEnvelopeToString(envelope)); + // Transform using 10 sample points around the envelope + + CoordinateReferenceSystem targetCRS = factory.createCoordinateReferenceSystem(coverageOffering.getSupportedCRSs().get(0)); + + ReferencedEnvelope result = envelope.transform(targetCRS, true, 10); + + String getCoverageRequest = "service=WCS&version=" + VERSION + + "&request=GetCoverage&coverage=" + layerName + + "&bbox=" + OgpUtils.referencedEnvelopeToString(result) + + "&crs=" + coverageOffering.getSupportedCRSs().get(0) + + "&format=" + outputFormat; + + getCoverageRequest += generateSize(coverageOffering.getRectifiedGrid()); + + return getCoverageRequest; + } + + private static String generateSize(RectifiedGrid rgrid) throws Exception{ + Double resx = rgrid.getResx(); + Double resy = rgrid.getResy(); + + String size = "&"; + + if (resx.isNaN() || resy.isNaN()){ + Integer width = rgrid.getWidth(); + Integer height = rgrid.getHeight(); + if (!width.equals(null) && !height.equals(null)){ + size += "width="; + size += Integer.toString(width); + size += "&height="; + size += Integer.toString(height); + } else { + throw new Exception("invalid describe coverage response....could not form getCoverage request."); + } + + } else { + size += "resx="; + size += Double.toString(resx); + size += "&resy="; + size += Double.toString(resy); + } + + + return size; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wfs/WfsDescribeFeature.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wfs/WfsDescribeFeature.java new file mode 100644 index 0000000..b36f981 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wfs/WfsDescribeFeature.java @@ -0,0 +1,129 @@ +package org.opengeoportal.ogc.wfs; + +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.ogc.OwsInfo.OwsProtocol; +import org.opengeoportal.utilities.OgpXmlUtils; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class WfsDescribeFeature implements OgcInfoRequest{ + public final String VERSION = "1.0.0"; + @Override + public String createRequest(String qualifiedLayerName){ + /*String describeFeatureRequest = "" + + "" + qualifiedLayerName + "" + + "";*/ + String describeFeatureQuery = "SERVICE=WFS&VERSION=" + VERSION + "&REQUEST=DescribeFeatureType&TYPENAME=" + qualifiedLayerName; + + return describeFeatureQuery; + } + + + @Override + public OwsInfo parseResponse(InputStream inputStream) throws Exception { + + /* + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + //Parse the document + Document document = OgpXmlUtils.getDocument(inputStream); + //initialize return variablec + Map describeLayerInfo = new HashMap(); + + //get the namespace info + Node schemaNode = document.getFirstChild(); + OgpXmlUtils.handleServiceException(schemaNode); + + try { + NamedNodeMap schemaAttributes = schemaNode.getAttributes(); + describeLayerInfo.put("nameSpace", schemaAttributes.getNamedItem("targetNamespace").getNodeValue()); + + //we can get the geometry column name from here + NodeList elementNodes; + + if(document.getElementsByTagName("xsd:element").getLength()!=0){ + elementNodes = document.getElementsByTagName("xsd:element"); + } else { + //ArcGIS uses prefix "xs" but xs and xsd are essentially same if they refer to the same schema. + //See reference http://stackoverflow.com/questions/1193563/difference-between-xs-and-xsd-in-xml-schema-file + elementNodes = document.getElementsByTagName("xs:element"); + } + + for (int i = 0; i < elementNodes.getLength(); i++){ + Node currentNode = elementNodes.item(i); + NamedNodeMap currentAttributeMap = currentNode.getAttributes(); + String attributeValue = null; + for (int j = 0; j < currentAttributeMap.getLength(); j++){ + Node currentAttribute = currentAttributeMap.item(j); + String currentAttributeName = currentAttribute.getNodeName(); + if (currentAttributeName.equals("name")){ + attributeValue = currentAttribute.getNodeValue(); + } else if (currentAttributeName.equals("type")){ + describeLayerInfo.put("attr" + (i+1), attributeValue + "," + currentAttribute.getNodeValue()); + if (currentAttribute.getNodeValue().startsWith("gml:")){ + describeLayerInfo.put("geometryColumn", attributeValue); + } + } + } + } + + } catch (Exception e){ + throw new Exception("Error getting layer info from DescribeFeatureType: "+ e.getMessage()); + } + OwsInfo owsResponse = new OwsInfo(); + owsResponse.setOwsProtocol(OwsProtocol.parseOwsProtocol(this.getOgcProtocol())); + owsResponse.setInfoMap(describeLayerInfo); + + return owsResponse; + } + + + + + @Override + public String getMethod() { + return "GET"; + } + + @Override + public String getOgcProtocol() { + return "wfs"; + } + + @Override + public String getVersion() { + return VERSION; + } + +} + + + + diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wfs/WfsGetFeature.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wfs/WfsGetFeature.java new file mode 100644 index 0000000..45f1f17 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wfs/WfsGetFeature.java @@ -0,0 +1,83 @@ +package org.opengeoportal.ogc.wfs; + +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.utilities.OgpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WfsGetFeature { + final static Logger logger = LoggerFactory.getLogger(WfsGetFeature.class.getName()); + + public static String createWfsGetFeatureRequest(String layerName, String workSpace, String nameSpace, String outputFormat, String filter) throws Exception { + return createWfsGetFeatureRequest(layerName, workSpace, nameSpace, -1, "", outputFormat, filter); + + } + + private static String getAttributeString(String attrName, int value){ + String attrString = ""; + if(value > 0){ + attrString = " " + attrName + "=\"" + Integer.toString(value) + "\""; + } + return attrString; + } + + private static String getAttributeString(String attrName, String value){ + String attrString = ""; + if(!value.trim().isEmpty()){ + attrString = " " + attrName + "=\"" + value.trim() + "\""; + } + return attrString; + } + + public static String createWfsGetFeatureRequest(String layerName, String workSpace, String nameSpace, int maxFeatures, String epsgCode, String outputFormat, String filter) throws Exception { + + //--generate POST message + //info needed: geometry column, bbox coords, epsg code, workspace & layername + layerName = OgpUtils.getLayerNameNS(workSpace, layerName); + + String getFeatureRequest = "" + + "" + + filter + + "" + + ""; + logger.info(getFeatureRequest); + return getFeatureRequest; + } + + public static String getMethod(){ + return "POST"; + } + + private static String getNameSpaceString(String workSpace, String nameSpace){ + //if either is missing, skip the whole thing + String nsString = ""; + if (!workSpace.trim().isEmpty() && !nameSpace.trim().isEmpty()){ + nsString = " xmlns:" + workSpace + "=\"" + nameSpace + "\""; + } + return nsString; + } + + public static String getBboxFilter(BoundingBox bounds, String geometryColumn, int epsgCode){ + + String bboxFilter = "" + + "" + + "" + geometryColumn + "" + + bounds.generateGMLBox() + + "" + + ""; + + return bboxFilter; + } + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AVERAGE.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AVERAGE.java new file mode 100644 index 0000000..81806a8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AVERAGE.java @@ -0,0 +1,39 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "AVERAGE") +public class AVERAGE { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureCollectionBaseType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureCollectionBaseType.java new file mode 100644 index 0000000..45eb18c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureCollectionBaseType.java @@ -0,0 +1,54 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * This abstract base type just makes the boundedBy element mandatory + * for a feature collection. + * + * + *

Java class for AbstractFeatureCollectionBaseType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="AbstractFeatureCollectionBaseType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}AbstractFeatureType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/gml}description" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/gml}name" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/gml}boundedBy"/>
+ *       </sequence>
+ *       <attribute name="fid" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "AbstractFeatureCollectionBaseType", namespace = "http://www.opengis.net/gml") +@XmlSeeAlso({ + AbstractFeatureCollectionType.class +}) +public abstract class AbstractFeatureCollectionBaseType + extends AbstractFeatureType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureCollectionType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureCollectionType.java new file mode 100644 index 0000000..2932b1b --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureCollectionType.java @@ -0,0 +1,80 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A feature collection contains zero or more featureMember elements. + * + * + *

Java class for AbstractFeatureCollectionType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="AbstractFeatureCollectionType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/gml}AbstractFeatureCollectionBaseType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/gml}featureMember" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "AbstractFeatureCollectionType", namespace = "http://www.opengis.net/gml", propOrder = { + "featureMember" +}) +public abstract class AbstractFeatureCollectionType + extends AbstractFeatureCollectionBaseType +{ + + protected List featureMember; + + /** + * Gets the value of the featureMember property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the featureMember property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getFeatureMember().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link FeatureAssociationType } + * + * + */ + public List getFeatureMember() { + if (featureMember == null) { + featureMember = new ArrayList(); + } + return this.featureMember; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureType.java new file mode 100644 index 0000000..782792d --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractFeatureType.java @@ -0,0 +1,167 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlID; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + * + * An abstract feature provides a set of common properties. A concrete + * feature type must derive from this type and specify additional + * properties in an application schema. A feature may optionally + * possess an identifying attribute ('fid'). + * + * + *

Java class for AbstractFeatureType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="AbstractFeatureType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/gml}description" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/gml}name" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/gml}boundedBy" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="fid" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "AbstractFeatureType", namespace = "http://www.opengis.net/gml", propOrder = { + "description", + "name", + "boundedBy" +}) +@XmlSeeAlso({ + AbstractFeatureCollectionBaseType.class +}) +public abstract class AbstractFeatureType { + + protected String description; + protected String name; + protected BoundingShapeType boundedBy; + @XmlAttribute + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlID + @XmlSchemaType(name = "ID") + protected String fid; + + /** + * Gets the value of the description property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDescription() { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDescription(String value) { + this.description = value; + } + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the boundedBy property. + * + * @return + * possible object is + * {@link BoundingShapeType } + * + */ + public BoundingShapeType getBoundedBy() { + return boundedBy; + } + + /** + * Sets the value of the boundedBy property. + * + * @param value + * allowed object is + * {@link BoundingShapeType } + * + */ + public void setBoundedBy(BoundingShapeType value) { + this.boundedBy = value; + } + + /** + * Gets the value of the fid property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFid() { + return fid; + } + + /** + * Sets the value of the fid property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFid(String value) { + this.fid = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractGeometryCollectionBaseType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractGeometryCollectionBaseType.java new file mode 100644 index 0000000..7ac7d8c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractGeometryCollectionBaseType.java @@ -0,0 +1,50 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * This abstract base type for geometry collections just makes the + * srsName attribute mandatory. + * + * + *

Java class for AbstractGeometryCollectionBaseType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="AbstractGeometryCollectionBaseType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}AbstractGeometryType">
+ *       <attribute name="gid" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *       <attribute name="srsName" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "AbstractGeometryCollectionBaseType", namespace = "http://www.opengis.net/gml") +@XmlSeeAlso({ + GeometryCollectionType.class +}) +public abstract class AbstractGeometryCollectionBaseType + extends AbstractGeometryType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractGeometryType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractGeometryType.java new file mode 100644 index 0000000..4f6fa70 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AbstractGeometryType.java @@ -0,0 +1,115 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlID; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + * + * All geometry elements are derived from this abstract supertype; + * a geometry element may have an identifying attribute (gid). + * It may be associated with a spatial reference system. + * + * + *

Java class for AbstractGeometryType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="AbstractGeometryType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="gid" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *       <attribute name="srsName" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "AbstractGeometryType", namespace = "http://www.opengis.net/gml") +@XmlSeeAlso({ + LinearRingType.class, + PointType.class, + LineStringType.class, + BoxType.class, + PolygonType.class, + AbstractGeometryCollectionBaseType.class +}) +public abstract class AbstractGeometryType { + + @XmlAttribute + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlID + @XmlSchemaType(name = "ID") + protected String gid; + @XmlAttribute + @XmlSchemaType(name = "anyURI") + protected String srsName; + + /** + * Gets the value of the gid property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getGid() { + return gid; + } + + /** + * Sets the value of the gid property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setGid(String value) { + this.gid = value; + } + + /** + * Gets the value of the srsName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSrsName() { + return srsName; + } + + /** + * Sets the value of the srsName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSrsName(String value) { + this.srsName = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ActuateType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ActuateType.java new file mode 100644 index 0000000..c847d31 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ActuateType.java @@ -0,0 +1,64 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlEnumValue; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for actuateType. + * + *

The following schema fragment specifies the expected content contained within this class. + *

+ *

+ * <simpleType name="actuateType">
+ *   <restriction base="{http://www.w3.org/2001/XMLSchema}token">
+ *     <enumeration value="onLoad"/>
+ *     <enumeration value="onRequest"/>
+ *     <enumeration value="other"/>
+ *     <enumeration value="none"/>
+ *   </restriction>
+ * </simpleType>
+ * 
+ * + */ +@XmlType(name = "actuateType", namespace = "http://www.w3.org/1999/xlink") +@XmlEnum +public enum ActuateType { + + @XmlEnumValue("onLoad") + ON_LOAD("onLoad"), + @XmlEnumValue("onRequest") + ON_REQUEST("onRequest"), + @XmlEnumValue("other") + OTHER("other"), + @XmlEnumValue("none") + NONE("none"); + private final String value; + + ActuateType(String v) { + value = v; + } + + public String value() { + return value; + } + + public static ActuateType fromValue(String v) { + for (ActuateType c: ActuateType.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AddressType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AddressType.java new file mode 100644 index 0000000..af3a15d --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AddressType.java @@ -0,0 +1,209 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for AddressType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="AddressType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="AddressType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="Address" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="City" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="StateOrProvince" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="PostCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="Country" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "AddressType", namespace = "http://www.opengis.net/context", propOrder = { + "addressType", + "address", + "city", + "stateOrProvince", + "postCode", + "country" +}) +public class AddressType { + + @XmlElement(name = "AddressType") + protected String addressType; + @XmlElement(name = "Address") + protected String address; + @XmlElement(name = "City") + protected String city; + @XmlElement(name = "StateOrProvince") + protected String stateOrProvince; + @XmlElement(name = "PostCode") + protected String postCode; + @XmlElement(name = "Country") + protected String country; + + /** + * Gets the value of the addressType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAddressType() { + return addressType; + } + + /** + * Sets the value of the addressType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAddressType(String value) { + this.addressType = value; + } + + /** + * Gets the value of the address property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAddress() { + return address; + } + + /** + * Sets the value of the address property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAddress(String value) { + this.address = value; + } + + /** + * Gets the value of the city property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCity() { + return city; + } + + /** + * Sets the value of the city property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCity(String value) { + this.city = value; + } + + /** + * Gets the value of the stateOrProvince property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStateOrProvince() { + return stateOrProvince; + } + + /** + * Sets the value of the stateOrProvince property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStateOrProvince(String value) { + this.stateOrProvince = value; + } + + /** + * Gets the value of the postCode property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPostCode() { + return postCode; + } + + /** + * Sets the value of the postCode property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPostCode(String value) { + this.postCode = value; + } + + /** + * Gets the value of the country property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCountry() { + return country; + } + + /** + * Sets the value of the country property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCountry(String value) { + this.country = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AnchorPoint.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AnchorPoint.java new file mode 100644 index 0000000..b4ae444 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/AnchorPoint.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}AnchorPointX"/>
+ *         <element ref="{http://www.opengis.net/sld}AnchorPointY"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "anchorPointX", + "anchorPointY" +}) +@XmlRootElement(name = "AnchorPoint") +public class AnchorPoint { + + @XmlElement(name = "AnchorPointX", required = true) + protected ParameterValueType anchorPointX; + @XmlElement(name = "AnchorPointY", required = true) + protected ParameterValueType anchorPointY; + + /** + * Gets the value of the anchorPointX property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getAnchorPointX() { + return anchorPointX; + } + + /** + * Sets the value of the anchorPointX property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setAnchorPointX(ParameterValueType value) { + this.anchorPointX = value; + } + + /** + * Gets the value of the anchorPointY property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getAnchorPointY() { + return anchorPointY; + } + + /** + * Sets the value of the anchorPointY property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setAnchorPointY(ParameterValueType value) { + this.anchorPointY = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ArcType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ArcType.java new file mode 100644 index 0000000..3ad88c4 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ArcType.java @@ -0,0 +1,266 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

Java class for arcType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="arcType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <group ref="{http://www.w3.org/1999/xlink}arcModel"/>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}arcAttrs"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "arcType", namespace = "http://www.w3.org/1999/xlink", propOrder = { + "title" +}) +public class ArcType { + + protected List title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink", required = true) + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String arcrole; + @XmlAttribute(name = "title", namespace = "http://www.w3.org/1999/xlink") + protected String title2; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ShowType show; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ActuateType actuate; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String from; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String to; + + /** + * Gets the value of the title property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the title property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getTitle().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link TitleEltType } + * + * + */ + public List getTitle() { + if (title == null) { + title = new ArrayList(); + } + return this.title; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.ARC; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the arcrole property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getArcrole() { + return arcrole; + } + + /** + * Sets the value of the arcrole property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArcrole(String value) { + this.arcrole = value; + } + + /** + * Gets the value of the title2 property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle2() { + return title2; + } + + /** + * Sets the value of the title2 property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle2(String value) { + this.title2 = value; + } + + /** + * Gets the value of the show property. + * + * @return + * possible object is + * {@link ShowType } + * + */ + public ShowType getShow() { + return show; + } + + /** + * Sets the value of the show property. + * + * @param value + * allowed object is + * {@link ShowType } + * + */ + public void setShow(ShowType value) { + this.show = value; + } + + /** + * Gets the value of the actuate property. + * + * @return + * possible object is + * {@link ActuateType } + * + */ + public ActuateType getActuate() { + return actuate; + } + + /** + * Sets the value of the actuate property. + * + * @param value + * allowed object is + * {@link ActuateType } + * + */ + public void setActuate(ActuateType value) { + this.actuate = value; + } + + /** + * Gets the value of the from property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFrom() { + return from; + } + + /** + * Sets the value of the from property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFrom(String value) { + this.from = value; + } + + /** + * + * from and to have default behavior when values are missing + * + * + * @return + * possible object is + * {@link String } + * + */ + public String getTo() { + return to; + } + + /** + * Sets the value of the to property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTo(String value) { + this.to = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BBOXType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BBOXType.java new file mode 100644 index 0000000..891bfb1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BBOXType.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for BBOXType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="BBOXType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}SpatialOpsType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}PropertyName"/>
+ *         <element ref="{http://www.opengis.net/gml}Box"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "BBOXType", namespace = "http://www.opengis.net/ogc", propOrder = { + "propertyName", + "box" +}) +public class BBOXType + extends SpatialOpsType +{ + + @XmlElement(name = "PropertyName", required = true) + protected PropertyNameType propertyName; + @XmlElement(name = "Box", namespace = "http://www.opengis.net/gml", required = true) + protected BoxType box; + + /** + * Gets the value of the propertyName property. + * + * @return + * possible object is + * {@link PropertyNameType } + * + */ + public PropertyNameType getPropertyName() { + return propertyName; + } + + /** + * Sets the value of the propertyName property. + * + * @param value + * allowed object is + * {@link PropertyNameType } + * + */ + public void setPropertyName(PropertyNameType value) { + this.propertyName = value; + } + + /** + * Gets the value of the box property. + * + * @return + * possible object is + * {@link BoxType } + * + */ + public BoxType getBox() { + return box; + } + + /** + * Sets the value of the box property. + * + * @param value + * allowed object is + * {@link BoxType } + * + */ + public void setBox(BoxType value) { + this.box = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryComparisonOpType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryComparisonOpType.java new file mode 100644 index 0000000..446ec92 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryComparisonOpType.java @@ -0,0 +1,86 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for BinaryComparisonOpType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="BinaryComparisonOpType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}ComparisonOpsType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}expression" maxOccurs="2" minOccurs="2"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "BinaryComparisonOpType", namespace = "http://www.opengis.net/ogc", propOrder = { + "expression" +}) +public class BinaryComparisonOpType + extends ComparisonOpsType +{ + + @XmlElementRef(name = "expression", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected List> expression; + + /** + * Gets the value of the expression property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the expression property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getExpression().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + * + */ + public List> getExpression() { + if (expression == null) { + expression = new ArrayList>(); + } + return this.expression; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryLogicOpType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryLogicOpType.java new file mode 100644 index 0000000..84aad22 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryLogicOpType.java @@ -0,0 +1,111 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlElementRefs; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for BinaryLogicOpType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="BinaryLogicOpType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}LogicOpsType">
+ *       <choice maxOccurs="unbounded" minOccurs="2">
+ *         <element ref="{http://www.opengis.net/ogc}comparisonOps"/>
+ *         <element ref="{http://www.opengis.net/ogc}spatialOps"/>
+ *         <element ref="{http://www.opengis.net/ogc}logicOps"/>
+ *       </choice>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "BinaryLogicOpType", namespace = "http://www.opengis.net/ogc", propOrder = { + "comparisonOpsOrSpatialOpsOrLogicOps" +}) +public class BinaryLogicOpType + extends LogicOpsType +{ + + @XmlElementRefs({ + @XmlElementRef(name = "logicOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class), + @XmlElementRef(name = "comparisonOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class), + @XmlElementRef(name = "spatialOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + }) + protected List> comparisonOpsOrSpatialOpsOrLogicOps; + + /** + * Gets the value of the comparisonOpsOrSpatialOpsOrLogicOps property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the comparisonOpsOrSpatialOpsOrLogicOps property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getComparisonOpsOrSpatialOpsOrLogicOps().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link LogicOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link ComparisonOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link UnaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsLikeType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsBetweenType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsNullType }{@code >} + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BBOXType }{@code >} + * {@link JAXBElement }{@code <}{@link SpatialOpsType }{@code >} + * + * + */ + public List> getComparisonOpsOrSpatialOpsOrLogicOps() { + if (comparisonOpsOrSpatialOpsOrLogicOps == null) { + comparisonOpsOrSpatialOpsOrLogicOps = new ArrayList>(); + } + return this.comparisonOpsOrSpatialOpsOrLogicOps; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryOperatorType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryOperatorType.java new file mode 100644 index 0000000..121e3a8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinaryOperatorType.java @@ -0,0 +1,86 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for BinaryOperatorType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="BinaryOperatorType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}ExpressionType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}expression" maxOccurs="2" minOccurs="2"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "BinaryOperatorType", namespace = "http://www.opengis.net/ogc", propOrder = { + "expression" +}) +public class BinaryOperatorType + extends ExpressionType +{ + + @XmlElementRef(name = "expression", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected List> expression; + + /** + * Gets the value of the expression property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the expression property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getExpression().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + * + */ + public List> getExpression() { + if (expression == null) { + expression = new ArrayList>(); + } + return this.expression; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinarySpatialOpType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinarySpatialOpType.java new file mode 100644 index 0000000..ac643c3 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BinarySpatialOpType.java @@ -0,0 +1,149 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for BinarySpatialOpType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="BinarySpatialOpType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}SpatialOpsType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}PropertyName"/>
+ *         <choice>
+ *           <element ref="{http://www.opengis.net/gml}_Geometry"/>
+ *           <element ref="{http://www.opengis.net/gml}Box"/>
+ *         </choice>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "BinarySpatialOpType", namespace = "http://www.opengis.net/ogc", propOrder = { + "propertyName", + "geometry", + "box" +}) +public class BinarySpatialOpType + extends SpatialOpsType +{ + + @XmlElement(name = "PropertyName", required = true) + protected PropertyNameType propertyName; + @XmlElementRef(name = "_Geometry", namespace = "http://www.opengis.net/gml", type = JAXBElement.class) + protected JAXBElement geometry; + @XmlElement(name = "Box", namespace = "http://www.opengis.net/gml") + protected BoxType box; + + /** + * Gets the value of the propertyName property. + * + * @return + * possible object is + * {@link PropertyNameType } + * + */ + public PropertyNameType getPropertyName() { + return propertyName; + } + + /** + * Sets the value of the propertyName property. + * + * @param value + * allowed object is + * {@link PropertyNameType } + * + */ + public void setPropertyName(PropertyNameType value) { + this.propertyName = value; + } + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link PolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link PointType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link LinearRingType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPointType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * + */ + public JAXBElement getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link PolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link PointType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link LinearRingType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPointType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * + */ + public void setGeometry(JAXBElement value) { + this.geometry = ((JAXBElement ) value); + } + + /** + * Gets the value of the box property. + * + * @return + * possible object is + * {@link BoxType } + * + */ + public BoxType getBox() { + return box; + } + + /** + * Sets the value of the box property. + * + * @param value + * allowed object is + * {@link BoxType } + * + */ + public void setBox(BoxType value) { + this.box = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoundingBoxType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoundingBoxType.java new file mode 100644 index 0000000..606d16b --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoundingBoxType.java @@ -0,0 +1,174 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.math.BigDecimal; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for BoundingBoxType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="BoundingBoxType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="SRS" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="minx" use="required" type="{http://www.w3.org/2001/XMLSchema}decimal" />
+ *       <attribute name="miny" use="required" type="{http://www.w3.org/2001/XMLSchema}decimal" />
+ *       <attribute name="maxx" use="required" type="{http://www.w3.org/2001/XMLSchema}decimal" />
+ *       <attribute name="maxy" use="required" type="{http://www.w3.org/2001/XMLSchema}decimal" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "BoundingBoxType", namespace = "http://www.opengis.net/context") +public class BoundingBoxType { + + @XmlAttribute(name = "SRS", required = true) + protected String srs; + @XmlAttribute(required = true) + protected BigDecimal minx; + @XmlAttribute(required = true) + protected BigDecimal miny; + @XmlAttribute(required = true) + protected BigDecimal maxx; + @XmlAttribute(required = true) + protected BigDecimal maxy; + + /** + * Gets the value of the srs property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSRS() { + return srs; + } + + /** + * Sets the value of the srs property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSRS(String value) { + this.srs = value; + } + + /** + * Gets the value of the minx property. + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getMinx() { + return minx; + } + + /** + * Sets the value of the minx property. + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setMinx(BigDecimal value) { + this.minx = value; + } + + /** + * Gets the value of the miny property. + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getMiny() { + return miny; + } + + /** + * Sets the value of the miny property. + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setMiny(BigDecimal value) { + this.miny = value; + } + + /** + * Gets the value of the maxx property. + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getMaxx() { + return maxx; + } + + /** + * Sets the value of the maxx property. + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setMaxx(BigDecimal value) { + this.maxx = value; + } + + /** + * Gets the value of the maxy property. + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getMaxy() { + return maxy; + } + + /** + * Sets the value of the maxy property. + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setMaxy(BigDecimal value) { + this.maxy = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoundingShapeType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoundingShapeType.java new file mode 100644 index 0000000..b3d5a9f --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoundingShapeType.java @@ -0,0 +1,103 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Bounding shapes--a Box or a null element are currently allowed. + * + * + *

Java class for BoundingShapeType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="BoundingShapeType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <choice>
+ *           <element ref="{http://www.opengis.net/gml}Box"/>
+ *           <element name="null" type="{http://www.opengis.net/gml}NullType"/>
+ *         </choice>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "BoundingShapeType", namespace = "http://www.opengis.net/gml", propOrder = { + "box", + "_null" +}) +public class BoundingShapeType { + + @XmlElement(name = "Box") + protected BoxType box; + @XmlElement(name = "null") + protected NullType _null; + + /** + * Gets the value of the box property. + * + * @return + * possible object is + * {@link BoxType } + * + */ + public BoxType getBox() { + return box; + } + + /** + * Sets the value of the box property. + * + * @param value + * allowed object is + * {@link BoxType } + * + */ + public void setBox(BoxType value) { + this.box = value; + } + + /** + * Gets the value of the null property. + * + * @return + * possible object is + * {@link NullType } + * + */ + public NullType getNull() { + return _null; + } + + /** + * Sets the value of the null property. + * + * @param value + * allowed object is + * {@link NullType } + * + */ + public void setNull(NullType value) { + this._null = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoxType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoxType.java new file mode 100644 index 0000000..bd45f33 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/BoxType.java @@ -0,0 +1,109 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * The Box structure defines an extent using a pair of coordinate tuples. + * + * + *

Java class for BoxType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="BoxType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/gml}AbstractGeometryType">
+ *       <sequence>
+ *         <choice>
+ *           <element ref="{http://www.opengis.net/gml}coord" maxOccurs="2" minOccurs="2"/>
+ *           <element ref="{http://www.opengis.net/gml}coordinates"/>
+ *         </choice>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "BoxType", namespace = "http://www.opengis.net/gml", propOrder = { + "coord", + "coordinates" +}) +public class BoxType + extends AbstractGeometryType +{ + + protected List coord; + protected CoordinatesType coordinates; + + /** + * Gets the value of the coord property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the coord property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getCoord().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link CoordType } + * + * + */ + public List getCoord() { + if (coord == null) { + coord = new ArrayList(); + } + return this.coord; + } + + /** + * Gets the value of the coordinates property. + * + * @return + * possible object is + * {@link CoordinatesType } + * + */ + public CoordinatesType getCoordinates() { + return coordinates; + } + + /** + * Sets the value of the coordinates property. + * + * @param value + * allowed object is + * {@link CoordinatesType } + * + */ + public void setCoordinates(CoordinatesType value) { + this.coordinates = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ChannelSelection.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ChannelSelection.java new file mode 100644 index 0000000..96313b9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ChannelSelection.java @@ -0,0 +1,157 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice>
+ *         <sequence>
+ *           <element ref="{http://www.opengis.net/sld}RedChannel"/>
+ *           <element ref="{http://www.opengis.net/sld}GreenChannel"/>
+ *           <element ref="{http://www.opengis.net/sld}BlueChannel"/>
+ *         </sequence>
+ *         <element ref="{http://www.opengis.net/sld}GrayChannel"/>
+ *       </choice>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "redChannel", + "greenChannel", + "blueChannel", + "grayChannel" +}) +@XmlRootElement(name = "ChannelSelection") +public class ChannelSelection { + + @XmlElement(name = "RedChannel") + protected SelectedChannelType redChannel; + @XmlElement(name = "GreenChannel") + protected SelectedChannelType greenChannel; + @XmlElement(name = "BlueChannel") + protected SelectedChannelType blueChannel; + @XmlElement(name = "GrayChannel") + protected SelectedChannelType grayChannel; + + /** + * Gets the value of the redChannel property. + * + * @return + * possible object is + * {@link SelectedChannelType } + * + */ + public SelectedChannelType getRedChannel() { + return redChannel; + } + + /** + * Sets the value of the redChannel property. + * + * @param value + * allowed object is + * {@link SelectedChannelType } + * + */ + public void setRedChannel(SelectedChannelType value) { + this.redChannel = value; + } + + /** + * Gets the value of the greenChannel property. + * + * @return + * possible object is + * {@link SelectedChannelType } + * + */ + public SelectedChannelType getGreenChannel() { + return greenChannel; + } + + /** + * Sets the value of the greenChannel property. + * + * @param value + * allowed object is + * {@link SelectedChannelType } + * + */ + public void setGreenChannel(SelectedChannelType value) { + this.greenChannel = value; + } + + /** + * Gets the value of the blueChannel property. + * + * @return + * possible object is + * {@link SelectedChannelType } + * + */ + public SelectedChannelType getBlueChannel() { + return blueChannel; + } + + /** + * Sets the value of the blueChannel property. + * + * @param value + * allowed object is + * {@link SelectedChannelType } + * + */ + public void setBlueChannel(SelectedChannelType value) { + this.blueChannel = value; + } + + /** + * Gets the value of the grayChannel property. + * + * @return + * possible object is + * {@link SelectedChannelType } + * + */ + public SelectedChannelType getGrayChannel() { + return grayChannel; + } + + /** + * Sets the value of the grayChannel property. + * + * @param value + * allowed object is + * {@link SelectedChannelType } + * + */ + public void setGrayChannel(SelectedChannelType value) { + this.grayChannel = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ColorMap.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ColorMap.java new file mode 100644 index 0000000..dc3baee --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ColorMap.java @@ -0,0 +1,78 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice maxOccurs="unbounded" minOccurs="0">
+ *         <element ref="{http://www.opengis.net/sld}ColorMapEntry"/>
+ *       </choice>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "colorMapEntry" +}) +@XmlRootElement(name = "ColorMap") +public class ColorMap { + + @XmlElement(name = "ColorMapEntry") + protected List colorMapEntry; + + /** + * Gets the value of the colorMapEntry property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the colorMapEntry property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getColorMapEntry().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ColorMapEntry } + * + * + */ + public List getColorMapEntry() { + if (colorMapEntry == null) { + colorMapEntry = new ArrayList(); + } + return this.colorMapEntry; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ColorMapEntry.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ColorMapEntry.java new file mode 100644 index 0000000..8cb3fad --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ColorMapEntry.java @@ -0,0 +1,148 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="color" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="opacity" type="{http://www.w3.org/2001/XMLSchema}double" />
+ *       <attribute name="quantity" type="{http://www.w3.org/2001/XMLSchema}double" />
+ *       <attribute name="label" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "ColorMapEntry") +public class ColorMapEntry { + + @XmlAttribute(required = true) + protected String color; + @XmlAttribute + protected Double opacity; + @XmlAttribute + protected Double quantity; + @XmlAttribute + protected String label; + + /** + * Gets the value of the color property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getColor() { + return color; + } + + /** + * Sets the value of the color property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setColor(String value) { + this.color = value; + } + + /** + * Gets the value of the opacity property. + * + * @return + * possible object is + * {@link Double } + * + */ + public Double getOpacity() { + return opacity; + } + + /** + * Sets the value of the opacity property. + * + * @param value + * allowed object is + * {@link Double } + * + */ + public void setOpacity(Double value) { + this.opacity = value; + } + + /** + * Gets the value of the quantity property. + * + * @return + * possible object is + * {@link Double } + * + */ + public Double getQuantity() { + return quantity; + } + + /** + * Sets the value of the quantity property. + * + * @param value + * allowed object is + * {@link Double } + * + */ + public void setQuantity(Double value) { + this.quantity = value; + } + + /** + * Gets the value of the label property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getLabel() { + return label; + } + + /** + * Sets the value of the label property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLabel(String value) { + this.label = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ComparisonOpsType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ComparisonOpsType.java new file mode 100644 index 0000000..b5b21c9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ComparisonOpsType.java @@ -0,0 +1,44 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ComparisonOpsType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ComparisonOpsType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ComparisonOpsType", namespace = "http://www.opengis.net/ogc") +@XmlSeeAlso({ + BinaryComparisonOpType.class, + PropertyIsLikeType.class, + PropertyIsBetweenType.class, + PropertyIsNullType.class +}) +public abstract class ComparisonOpsType { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContactInformationType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContactInformationType.java new file mode 100644 index 0000000..9685efa --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContactInformationType.java @@ -0,0 +1,209 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ContactInformationType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ContactInformationType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="ContactPersonPrimary" type="{http://www.opengis.net/context}ContactPersonPrimaryType" minOccurs="0"/>
+ *         <element name="ContactPosition" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="ContactAddress" type="{http://www.opengis.net/context}AddressType" minOccurs="0"/>
+ *         <element name="ContactVoiceTelephone" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="ContactFacsimileTelephone" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="ContactElectronicMailAddress" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ContactInformationType", namespace = "http://www.opengis.net/context", propOrder = { + "contactPersonPrimary", + "contactPosition", + "contactAddress", + "contactVoiceTelephone", + "contactFacsimileTelephone", + "contactElectronicMailAddress" +}) +public class ContactInformationType { + + @XmlElement(name = "ContactPersonPrimary") + protected ContactPersonPrimaryType contactPersonPrimary; + @XmlElement(name = "ContactPosition") + protected String contactPosition; + @XmlElement(name = "ContactAddress") + protected AddressType contactAddress; + @XmlElement(name = "ContactVoiceTelephone") + protected String contactVoiceTelephone; + @XmlElement(name = "ContactFacsimileTelephone") + protected String contactFacsimileTelephone; + @XmlElement(name = "ContactElectronicMailAddress") + protected String contactElectronicMailAddress; + + /** + * Gets the value of the contactPersonPrimary property. + * + * @return + * possible object is + * {@link ContactPersonPrimaryType } + * + */ + public ContactPersonPrimaryType getContactPersonPrimary() { + return contactPersonPrimary; + } + + /** + * Sets the value of the contactPersonPrimary property. + * + * @param value + * allowed object is + * {@link ContactPersonPrimaryType } + * + */ + public void setContactPersonPrimary(ContactPersonPrimaryType value) { + this.contactPersonPrimary = value; + } + + /** + * Gets the value of the contactPosition property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getContactPosition() { + return contactPosition; + } + + /** + * Sets the value of the contactPosition property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setContactPosition(String value) { + this.contactPosition = value; + } + + /** + * Gets the value of the contactAddress property. + * + * @return + * possible object is + * {@link AddressType } + * + */ + public AddressType getContactAddress() { + return contactAddress; + } + + /** + * Sets the value of the contactAddress property. + * + * @param value + * allowed object is + * {@link AddressType } + * + */ + public void setContactAddress(AddressType value) { + this.contactAddress = value; + } + + /** + * Gets the value of the contactVoiceTelephone property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getContactVoiceTelephone() { + return contactVoiceTelephone; + } + + /** + * Sets the value of the contactVoiceTelephone property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setContactVoiceTelephone(String value) { + this.contactVoiceTelephone = value; + } + + /** + * Gets the value of the contactFacsimileTelephone property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getContactFacsimileTelephone() { + return contactFacsimileTelephone; + } + + /** + * Sets the value of the contactFacsimileTelephone property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setContactFacsimileTelephone(String value) { + this.contactFacsimileTelephone = value; + } + + /** + * Gets the value of the contactElectronicMailAddress property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getContactElectronicMailAddress() { + return contactElectronicMailAddress; + } + + /** + * Sets the value of the contactElectronicMailAddress property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setContactElectronicMailAddress(String value) { + this.contactElectronicMailAddress = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContactPersonPrimaryType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContactPersonPrimaryType.java new file mode 100644 index 0000000..7e6c371 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContactPersonPrimaryType.java @@ -0,0 +1,97 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ContactPersonPrimaryType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ContactPersonPrimaryType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="ContactPerson" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="ContactOrganization" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ContactPersonPrimaryType", namespace = "http://www.opengis.net/context", propOrder = { + "contactPerson", + "contactOrganization" +}) +public class ContactPersonPrimaryType { + + @XmlElement(name = "ContactPerson") + protected String contactPerson; + @XmlElement(name = "ContactOrganization") + protected String contactOrganization; + + /** + * Gets the value of the contactPerson property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getContactPerson() { + return contactPerson; + } + + /** + * Sets the value of the contactPerson property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setContactPerson(String value) { + this.contactPerson = value; + } + + /** + * Gets the value of the contactOrganization property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getContactOrganization() { + return contactOrganization; + } + + /** + * Sets the value of the contactOrganization property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setContactOrganization(String value) { + this.contactOrganization = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContextURLType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContextURLType.java new file mode 100644 index 0000000..874dee9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContextURLType.java @@ -0,0 +1,69 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ContextURLType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ContextURLType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="OnlineResource" type="{http://www.opengis.net/context}OnlineResourceType"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ContextURLType", namespace = "http://www.opengis.net/context", propOrder = { + "onlineResource" +}) +public class ContextURLType { + + @XmlElement(name = "OnlineResource", required = true) + protected OnlineResourceType onlineResource; + + /** + * Gets the value of the onlineResource property. + * + * @return + * possible object is + * {@link OnlineResourceType } + * + */ + public OnlineResourceType getOnlineResource() { + return onlineResource; + } + + /** + * Sets the value of the onlineResource property. + * + * @param value + * allowed object is + * {@link OnlineResourceType } + * + */ + public void setOnlineResource(OnlineResourceType value) { + this.onlineResource = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContrastEnhancement.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContrastEnhancement.java new file mode 100644 index 0000000..1a13a54 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ContrastEnhancement.java @@ -0,0 +1,129 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <choice minOccurs="0">
+ *           <element ref="{http://www.opengis.net/sld}Normalize"/>
+ *           <element ref="{http://www.opengis.net/sld}Histogram"/>
+ *         </choice>
+ *         <element ref="{http://www.opengis.net/sld}GammaValue" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "normalize", + "histogram", + "gammaValue" +}) +@XmlRootElement(name = "ContrastEnhancement") +public class ContrastEnhancement { + + @XmlElement(name = "Normalize") + protected Normalize normalize; + @XmlElement(name = "Histogram") + protected Histogram histogram; + @XmlElement(name = "GammaValue") + protected Double gammaValue; + + /** + * Gets the value of the normalize property. + * + * @return + * possible object is + * {@link Normalize } + * + */ + public Normalize getNormalize() { + return normalize; + } + + /** + * Sets the value of the normalize property. + * + * @param value + * allowed object is + * {@link Normalize } + * + */ + public void setNormalize(Normalize value) { + this.normalize = value; + } + + /** + * Gets the value of the histogram property. + * + * @return + * possible object is + * {@link Histogram } + * + */ + public Histogram getHistogram() { + return histogram; + } + + /** + * Sets the value of the histogram property. + * + * @param value + * allowed object is + * {@link Histogram } + * + */ + public void setHistogram(Histogram value) { + this.histogram = value; + } + + /** + * Gets the value of the gammaValue property. + * + * @return + * possible object is + * {@link Double } + * + */ + public Double getGammaValue() { + return gammaValue; + } + + /** + * Sets the value of the gammaValue property. + * + * @param value + * allowed object is + * {@link Double } + * + */ + public void setGammaValue(Double value) { + this.gammaValue = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CoordType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CoordType.java new file mode 100644 index 0000000..f529210 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CoordType.java @@ -0,0 +1,130 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.math.BigDecimal; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Represents a coordinate tuple in one, two, or three dimensions. + * + * + *

Java class for CoordType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="CoordType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="X" type="{http://www.w3.org/2001/XMLSchema}decimal"/>
+ *         <element name="Y" type="{http://www.w3.org/2001/XMLSchema}decimal" minOccurs="0"/>
+ *         <element name="Z" type="{http://www.w3.org/2001/XMLSchema}decimal" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "CoordType", namespace = "http://www.opengis.net/gml", propOrder = { + "x", + "y", + "z" +}) +public class CoordType { + + @XmlElement(name = "X", required = true) + protected BigDecimal x; + @XmlElement(name = "Y") + protected BigDecimal y; + @XmlElement(name = "Z") + protected BigDecimal z; + + /** + * Gets the value of the x property. + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getX() { + return x; + } + + /** + * Sets the value of the x property. + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setX(BigDecimal value) { + this.x = value; + } + + /** + * Gets the value of the y property. + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getY() { + return y; + } + + /** + * Sets the value of the y property. + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setY(BigDecimal value) { + this.y = value; + } + + /** + * Gets the value of the z property. + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getZ() { + return z; + } + + /** + * Sets the value of the z property. + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setZ(BigDecimal value) { + this.z = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CoordinatesType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CoordinatesType.java new file mode 100644 index 0000000..f24495e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CoordinatesType.java @@ -0,0 +1,168 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.XmlValue; + + +/** + * + * Coordinates can be included in a single string, but there is no + * facility for validating string content. The value of the 'cs' attribute + * is the separator for coordinate values, and the value of the 'ts' + * attribute gives the tuple separator (a single space by default); the + * default values may be changed to reflect local usage. + * + * + *

Java class for CoordinatesType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="CoordinatesType">
+ *   <simpleContent>
+ *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+ *       <attribute name="decimal" type="{http://www.w3.org/2001/XMLSchema}string" default="." />
+ *       <attribute name="cs" type="{http://www.w3.org/2001/XMLSchema}string" default="," />
+ *       <attribute name="ts" type="{http://www.w3.org/2001/XMLSchema}string" default=" " />
+ *     </extension>
+ *   </simpleContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "CoordinatesType", namespace = "http://www.opengis.net/gml", propOrder = { + "value" +}) +public class CoordinatesType { + + @XmlValue + protected String value; + @XmlAttribute + protected String decimal; + @XmlAttribute + protected String cs; + @XmlAttribute + protected String ts; + + /** + * Gets the value of the value property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getValue() { + return value; + } + + /** + * Sets the value of the value property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setValue(String value) { + this.value = value; + } + + /** + * Gets the value of the decimal property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDecimal() { + if (decimal == null) { + return "."; + } else { + return decimal; + } + } + + /** + * Sets the value of the decimal property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDecimal(String value) { + this.decimal = value; + } + + /** + * Gets the value of the cs property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCs() { + if (cs == null) { + return ","; + } else { + return cs; + } + } + + /** + * Sets the value of the cs property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCs(String value) { + this.cs = value; + } + + /** + * Gets the value of the ts property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTs() { + if (ts == null) { + return " "; + } else { + return ts; + } + } + + /** + * Sets the value of the ts property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTs(String value) { + this.ts = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CssParameter.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CssParameter.java new file mode 100644 index 0000000..365e847 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/CssParameter.java @@ -0,0 +1,69 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/sld}ParameterValueType">
+ *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "CssParameter") +public class CssParameter + extends ParameterValueType +{ + + @XmlAttribute(required = true) + protected String name; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DimensionListType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DimensionListType.java new file mode 100644 index 0000000..85d6f9e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DimensionListType.java @@ -0,0 +1,76 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for DimensionListType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="DimensionListType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Dimension" type="{http://www.opengis.net/context}DimensionType" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "DimensionListType", namespace = "http://www.opengis.net/context", propOrder = { + "dimension" +}) +public class DimensionListType { + + @XmlElement(name = "Dimension", required = true) + protected List dimension; + + /** + * Gets the value of the dimension property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the dimension property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getDimension().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link DimensionType } + * + * + */ + public List getDimension() { + if (dimension == null) { + dimension = new ArrayList(); + } + return this.dimension; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DimensionType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DimensionType.java new file mode 100644 index 0000000..002c5d9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DimensionType.java @@ -0,0 +1,283 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.XmlValue; + + +/** + *

Java class for DimensionType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="DimensionType">
+ *   <simpleContent>
+ *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+ *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="units" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="unitSymbol" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="userValue" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="default" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="multipleValues" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *       <attribute name="nearestValue" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *       <attribute name="current" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *     </extension>
+ *   </simpleContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "DimensionType", namespace = "http://www.opengis.net/context", propOrder = { + "value" +}) +public class DimensionType { + + @XmlValue + protected String value; + @XmlAttribute(required = true) + protected String name; + @XmlAttribute(required = true) + protected String units; + @XmlAttribute(required = true) + protected String unitSymbol; + @XmlAttribute(required = true) + protected String userValue; + @XmlAttribute(name = "default") + protected String _default; + @XmlAttribute + protected Boolean multipleValues; + @XmlAttribute + protected Boolean nearestValue; + @XmlAttribute + protected Boolean current; + + /** + * Gets the value of the value property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getValue() { + return value; + } + + /** + * Sets the value of the value property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setValue(String value) { + this.value = value; + } + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the units property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getUnits() { + return units; + } + + /** + * Sets the value of the units property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setUnits(String value) { + this.units = value; + } + + /** + * Gets the value of the unitSymbol property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getUnitSymbol() { + return unitSymbol; + } + + /** + * Sets the value of the unitSymbol property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setUnitSymbol(String value) { + this.unitSymbol = value; + } + + /** + * Gets the value of the userValue property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getUserValue() { + return userValue; + } + + /** + * Sets the value of the userValue property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setUserValue(String value) { + this.userValue = value; + } + + /** + * Gets the value of the default property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDefault() { + return _default; + } + + /** + * Sets the value of the default property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDefault(String value) { + this._default = value; + } + + /** + * Gets the value of the multipleValues property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isMultipleValues() { + return multipleValues; + } + + /** + * Sets the value of the multipleValues property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setMultipleValues(Boolean value) { + this.multipleValues = value; + } + + /** + * Gets the value of the nearestValue property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isNearestValue() { + return nearestValue; + } + + /** + * Sets the value of the nearestValue property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setNearestValue(Boolean value) { + this.nearestValue = value; + } + + /** + * Gets the value of the current property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isCurrent() { + return current; + } + + /** + * Sets the value of the current property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setCurrent(Boolean value) { + this.current = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Displacement.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Displacement.java new file mode 100644 index 0000000..dd920c1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Displacement.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}DisplacementX"/>
+ *         <element ref="{http://www.opengis.net/sld}DisplacementY"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "displacementX", + "displacementY" +}) +@XmlRootElement(name = "Displacement") +public class Displacement { + + @XmlElement(name = "DisplacementX", required = true) + protected ParameterValueType displacementX; + @XmlElement(name = "DisplacementY", required = true) + protected ParameterValueType displacementY; + + /** + * Gets the value of the displacementX property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getDisplacementX() { + return displacementX; + } + + /** + * Sets the value of the displacementX property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setDisplacementX(ParameterValueType value) { + this.displacementX = value; + } + + /** + * Gets the value of the displacementY property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getDisplacementY() { + return displacementY; + } + + /** + * Sets the value of the displacementY property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setDisplacementY(ParameterValueType value) { + this.displacementY = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DistanceBufferType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DistanceBufferType.java new file mode 100644 index 0000000..43d7c17 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DistanceBufferType.java @@ -0,0 +1,147 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for DistanceBufferType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="DistanceBufferType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}SpatialOpsType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}PropertyName"/>
+ *         <element ref="{http://www.opengis.net/gml}_Geometry"/>
+ *         <element name="Distance" type="{http://www.opengis.net/ogc}DistanceType"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "DistanceBufferType", namespace = "http://www.opengis.net/ogc", propOrder = { + "propertyName", + "geometry", + "distance" +}) +public class DistanceBufferType + extends SpatialOpsType +{ + + @XmlElement(name = "PropertyName", required = true) + protected PropertyNameType propertyName; + @XmlElementRef(name = "_Geometry", namespace = "http://www.opengis.net/gml", type = JAXBElement.class) + protected JAXBElement geometry; + @XmlElement(name = "Distance", required = true) + protected DistanceType distance; + + /** + * Gets the value of the propertyName property. + * + * @return + * possible object is + * {@link PropertyNameType } + * + */ + public PropertyNameType getPropertyName() { + return propertyName; + } + + /** + * Sets the value of the propertyName property. + * + * @param value + * allowed object is + * {@link PropertyNameType } + * + */ + public void setPropertyName(PropertyNameType value) { + this.propertyName = value; + } + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link PolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link PointType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link LinearRingType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPointType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * + */ + public JAXBElement getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link PolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link PointType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link LinearRingType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPointType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * + */ + public void setGeometry(JAXBElement value) { + this.geometry = ((JAXBElement ) value); + } + + /** + * Gets the value of the distance property. + * + * @return + * possible object is + * {@link DistanceType } + * + */ + public DistanceType getDistance() { + return distance; + } + + /** + * Sets the value of the distance property. + * + * @param value + * allowed object is + * {@link DistanceType } + * + */ + public void setDistance(DistanceType value) { + this.distance = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DistanceType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DistanceType.java new file mode 100644 index 0000000..69b4beb --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/DistanceType.java @@ -0,0 +1,94 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.XmlValue; + + +/** + *

Java class for DistanceType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="DistanceType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="units" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "DistanceType", namespace = "http://www.opengis.net/ogc", propOrder = { + "content" +}) +public class DistanceType { + + @XmlValue + protected String content; + @XmlAttribute(required = true) + protected String units; + + /** + * Gets the value of the content property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getContent() { + return content; + } + + /** + * Sets the value of the content property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setContent(String value) { + this.content = value; + } + + /** + * Gets the value of the units property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getUnits() { + return units; + } + + /** + * Sets the value of the units property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setUnits(String value) { + this.units = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/EARLIESTONTOP.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/EARLIESTONTOP.java new file mode 100644 index 0000000..5baee69 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/EARLIESTONTOP.java @@ -0,0 +1,39 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "EARLIEST_ON_TOP") +public class EARLIESTONTOP { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ElseFilter.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ElseFilter.java new file mode 100644 index 0000000..210036d --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ElseFilter.java @@ -0,0 +1,39 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "ElseFilter") +public class ElseFilter { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExpressionType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExpressionType.java new file mode 100644 index 0000000..ede401a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExpressionType.java @@ -0,0 +1,43 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ExpressionType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ExpressionType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ExpressionType", namespace = "http://www.opengis.net/ogc") +@XmlSeeAlso({ + PropertyNameType.class, + BinaryOperatorType.class, + FunctionType.class +}) +public abstract class ExpressionType { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Extended.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Extended.java new file mode 100644 index 0000000..4e618c0 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Extended.java @@ -0,0 +1,175 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElements; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Intended for use as the type of user-declared elements to make them + * extended links. + * Note that the elements referenced in the content model are all abstract. + * The intention is that by simply declaring elements with these as their + * substitutionGroup, all the right things will happen. + * + * + *

Java class for extended complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="extended">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <group ref="{http://www.w3.org/1999/xlink}extendedModel" maxOccurs="unbounded" minOccurs="0"/>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}extendedAttrs"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "extended", namespace = "http://www.w3.org/1999/xlink", propOrder = { + "extendedModel" +}) +public class Extended { + + @XmlElements({ + @XmlElement(name = "resource", type = ResourceType.class), + @XmlElement(name = "arc", type = ArcType.class), + @XmlElement(name = "title", type = TitleEltType.class), + @XmlElement(name = "locator", type = LocatorType.class) + }) + protected List extendedModel; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink", required = true) + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String title; + + /** + * Gets the value of the extendedModel property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the extendedModel property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getExtendedModel().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ResourceType } + * {@link ArcType } + * {@link TitleEltType } + * {@link LocatorType } + * + * + */ + public List getExtendedModel() { + if (extendedModel == null) { + extendedModel = new ArrayList(); + } + return this.extendedModel; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.EXTENDED; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExtensionType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExtensionType.java new file mode 100644 index 0000000..a4b5ebd --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExtensionType.java @@ -0,0 +1,72 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * This allows additional elements to be added to + * support non WMS Layer services. + * + *

Java class for ExtensionType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ExtensionType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <any/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ExtensionType", namespace = "http://www.opengis.net/context", propOrder = { + "any" +}) +public class ExtensionType { + + @XmlAnyElement(lax = true) + protected Object any; + + /** + * Gets the value of the any property. + * + * @return + * possible object is + * {@link Object } + * + */ + public Object getAny() { + return any; + } + + /** + * Sets the value of the any property. + * + * @param value + * allowed object is + * {@link Object } + * + */ + public void setAny(Object value) { + this.any = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Extent.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Extent.java new file mode 100644 index 0000000..4c756e9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Extent.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Name"/>
+ *         <element ref="{http://www.opengis.net/sld}Value"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "name", + "value" +}) +@XmlRootElement(name = "Extent") +public class Extent { + + @XmlElement(name = "Name", required = true) + protected String name; + @XmlElement(name = "Value", required = true) + protected String value; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the value property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getValue() { + return value; + } + + /** + * Sets the value of the value property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setValue(String value) { + this.value = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExternalGraphic.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExternalGraphic.java new file mode 100644 index 0000000..5c00e35 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ExternalGraphic.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}OnlineResource"/>
+ *         <element ref="{http://www.opengis.net/sld}Format"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "onlineResource", + "format" +}) +@XmlRootElement(name = "ExternalGraphic") +public class ExternalGraphic { + + @XmlElement(name = "OnlineResource", required = true) + protected OnlineResource onlineResource; + @XmlElement(name = "Format", required = true) + protected String format; + + /** + * Gets the value of the onlineResource property. + * + * @return + * possible object is + * {@link OnlineResource } + * + */ + public OnlineResource getOnlineResource() { + return onlineResource; + } + + /** + * Sets the value of the onlineResource property. + * + * @param value + * allowed object is + * {@link OnlineResource } + * + */ + public void setOnlineResource(OnlineResource value) { + this.onlineResource = value; + } + + /** + * Gets the value of the format property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFormat() { + return format; + } + + /** + * Sets the value of the format property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFormat(String value) { + this.format = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureAssociationType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureAssociationType.java new file mode 100644 index 0000000..653ab2f --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureAssociationType.java @@ -0,0 +1,300 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * An instance of this type (e.g. a featureMember) can either + * enclose or point to a feature (or feature collection); this + * type can be restricted in an application schema to allow only + * specified features as valid participants in the association. + * When serving as a simple link that references a remote feature + * instance, the value of the gml:remoteSchema attribute can be + * used to locate a schema fragment that constrains the target + * instance. + * + * + *

Java class for FeatureAssociationType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="FeatureAssociationType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}_Feature"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "FeatureAssociationType", namespace = "http://www.opengis.net/gml", propOrder = { + "feature" +}) +public class FeatureAssociationType { + + @XmlElementRef(name = "_Feature", namespace = "http://www.opengis.net/gml", type = JAXBElement.class) + protected JAXBElement feature; + @XmlAttribute(namespace = "http://www.opengis.net/gml") + @XmlSchemaType(name = "anyURI") + protected String remoteSchema; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String href; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String arcrole; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ShowType show; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ActuateType actuate; + + /** + * Gets the value of the feature property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link AbstractFeatureCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractFeatureType }{@code >} + * + */ + public JAXBElement getFeature() { + return feature; + } + + /** + * Sets the value of the feature property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link AbstractFeatureCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractFeatureType }{@code >} + * + */ + public void setFeature(JAXBElement value) { + this.feature = ((JAXBElement ) value); + } + + /** + * Gets the value of the remoteSchema property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRemoteSchema() { + return remoteSchema; + } + + /** + * Sets the value of the remoteSchema property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRemoteSchema(String value) { + this.remoteSchema = value; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.SIMPLE; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the href property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getHref() { + return href; + } + + /** + * Sets the value of the href property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setHref(String value) { + this.href = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the arcrole property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getArcrole() { + return arcrole; + } + + /** + * Sets the value of the arcrole property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArcrole(String value) { + this.arcrole = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the show property. + * + * @return + * possible object is + * {@link ShowType } + * + */ + public ShowType getShow() { + return show; + } + + /** + * Sets the value of the show property. + * + * @param value + * allowed object is + * {@link ShowType } + * + */ + public void setShow(ShowType value) { + this.show = value; + } + + /** + * Gets the value of the actuate property. + * + * @return + * possible object is + * {@link ActuateType } + * + */ + public ActuateType getActuate() { + return actuate; + } + + /** + * Sets the value of the actuate property. + * + * @param value + * allowed object is + * {@link ActuateType } + * + */ + public void setActuate(ActuateType value) { + this.actuate = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureIdType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureIdType.java new file mode 100644 index 0000000..fa9c0d2 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureIdType.java @@ -0,0 +1,67 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for FeatureIdType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="FeatureIdType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="fid" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "FeatureIdType", namespace = "http://www.opengis.net/ogc") +public class FeatureIdType { + + @XmlAttribute(required = true) + @XmlSchemaType(name = "anyURI") + protected String fid; + + /** + * Gets the value of the fid property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFid() { + return fid; + } + + /** + * Sets the value of the fid property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFid(String value) { + this.fid = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureTypeConstraint.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureTypeConstraint.java new file mode 100644 index 0000000..779b154 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureTypeConstraint.java @@ -0,0 +1,134 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}FeatureTypeName" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/ogc}Filter" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Extent" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "featureTypeName", + "filter", + "extent" +}) +@XmlRootElement(name = "FeatureTypeConstraint") +public class FeatureTypeConstraint { + + @XmlElement(name = "FeatureTypeName") + protected String featureTypeName; + @XmlElement(name = "Filter", namespace = "http://www.opengis.net/ogc") + protected FilterType filter; + @XmlElement(name = "Extent") + protected List extent; + + /** + * Gets the value of the featureTypeName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFeatureTypeName() { + return featureTypeName; + } + + /** + * Sets the value of the featureTypeName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFeatureTypeName(String value) { + this.featureTypeName = value; + } + + /** + * Gets the value of the filter property. + * + * @return + * possible object is + * {@link FilterType } + * + */ + public FilterType getFilter() { + return filter; + } + + /** + * Sets the value of the filter property. + * + * @param value + * allowed object is + * {@link FilterType } + * + */ + public void setFilter(FilterType value) { + this.filter = value; + } + + /** + * Gets the value of the extent property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the extent property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getExtent().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Extent } + * + * + */ + public List getExtent() { + if (extent == null) { + extent = new ArrayList(); + } + return this.extent; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureTypeStyle.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureTypeStyle.java new file mode 100644 index 0000000..63ca7d6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FeatureTypeStyle.java @@ -0,0 +1,223 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Name" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Title" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Abstract" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}FeatureTypeName" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}SemanticTypeIdentifier" maxOccurs="unbounded" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Rule" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "name", + "title", + "_abstract", + "featureTypeName", + "semanticTypeIdentifier", + "rule" +}) +@XmlRootElement(name = "FeatureTypeStyle") +public class FeatureTypeStyle { + + @XmlElement(name = "Name") + protected String name; + @XmlElement(name = "Title") + protected String title; + @XmlElement(name = "Abstract") + protected String _abstract; + @XmlElement(name = "FeatureTypeName") + protected String featureTypeName; + @XmlElement(name = "SemanticTypeIdentifier") + protected List semanticTypeIdentifier; + @XmlElement(name = "Rule", required = true) + protected List rule; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the abstract property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAbstract() { + return _abstract; + } + + /** + * Sets the value of the abstract property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAbstract(String value) { + this._abstract = value; + } + + /** + * Gets the value of the featureTypeName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFeatureTypeName() { + return featureTypeName; + } + + /** + * Sets the value of the featureTypeName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFeatureTypeName(String value) { + this.featureTypeName = value; + } + + /** + * Gets the value of the semanticTypeIdentifier property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the semanticTypeIdentifier property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getSemanticTypeIdentifier().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getSemanticTypeIdentifier() { + if (semanticTypeIdentifier == null) { + semanticTypeIdentifier = new ArrayList(); + } + return this.semanticTypeIdentifier; + } + + /** + * Gets the value of the rule property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the rule property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getRule().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Rule } + * + * + */ + public List getRule() { + if (rule == null) { + rule = new ArrayList(); + } + return this.rule; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Fill.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Fill.java new file mode 100644 index 0000000..b4c5f88 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Fill.java @@ -0,0 +1,106 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}GraphicFill" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}CssParameter" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "graphicFill", + "cssParameter" +}) +@XmlRootElement(name = "Fill") +public class Fill { + + @XmlElement(name = "GraphicFill") + protected GraphicFill graphicFill; + @XmlElement(name = "CssParameter") + protected List cssParameter; + + /** + * Gets the value of the graphicFill property. + * + * @return + * possible object is + * {@link GraphicFill } + * + */ + public GraphicFill getGraphicFill() { + return graphicFill; + } + + /** + * Sets the value of the graphicFill property. + * + * @param value + * allowed object is + * {@link GraphicFill } + * + */ + public void setGraphicFill(GraphicFill value) { + this.graphicFill = value; + } + + /** + * Gets the value of the cssParameter property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the cssParameter property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getCssParameter().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link CssParameter } + * + * + */ + public List getCssParameter() { + if (cssParameter == null) { + cssParameter = new ArrayList(); + } + return this.cssParameter; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FilterType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FilterType.java new file mode 100644 index 0000000..ae956fe --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FilterType.java @@ -0,0 +1,208 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for FilterType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="FilterType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice>
+ *         <element ref="{http://www.opengis.net/ogc}spatialOps"/>
+ *         <element ref="{http://www.opengis.net/ogc}comparisonOps"/>
+ *         <element ref="{http://www.opengis.net/ogc}logicOps"/>
+ *         <element ref="{http://www.opengis.net/ogc}FeatureId" maxOccurs="unbounded"/>
+ *       </choice>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "FilterType", namespace = "http://www.opengis.net/ogc", propOrder = { + "spatialOps", + "comparisonOps", + "logicOps", + "featureId" +}) +public class FilterType { + + @XmlElementRef(name = "spatialOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement spatialOps; + @XmlElementRef(name = "comparisonOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement comparisonOps; + @XmlElementRef(name = "logicOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement logicOps; + @XmlElement(name = "FeatureId") + protected List featureId; + + /** + * Gets the value of the spatialOps property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BBOXType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link SpatialOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * + */ + public JAXBElement getSpatialOps() { + return spatialOps; + } + + /** + * Sets the value of the spatialOps property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BBOXType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link SpatialOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * + */ + public void setSpatialOps(JAXBElement value) { + this.spatialOps = ((JAXBElement ) value); + } + + /** + * Gets the value of the comparisonOps property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsLikeType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsBetweenType }{@code >} + * {@link JAXBElement }{@code <}{@link ComparisonOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsNullType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * + */ + public JAXBElement getComparisonOps() { + return comparisonOps; + } + + /** + * Sets the value of the comparisonOps property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsLikeType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsBetweenType }{@code >} + * {@link JAXBElement }{@code <}{@link ComparisonOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsNullType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * + */ + public void setComparisonOps(JAXBElement value) { + this.comparisonOps = ((JAXBElement ) value); + } + + /** + * Gets the value of the logicOps property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link LogicOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link UnaryLogicOpType }{@code >} + * + */ + public JAXBElement getLogicOps() { + return logicOps; + } + + /** + * Sets the value of the logicOps property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link LogicOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link UnaryLogicOpType }{@code >} + * + */ + public void setLogicOps(JAXBElement value) { + this.logicOps = ((JAXBElement ) value); + } + + /** + * Gets the value of the featureId property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the featureId property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getFeatureId().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link FeatureIdType } + * + * + */ + public List getFeatureId() { + if (featureId == null) { + featureId = new ArrayList(); + } + return this.featureId; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Font.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Font.java new file mode 100644 index 0000000..b23860a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Font.java @@ -0,0 +1,78 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}CssParameter" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "cssParameter" +}) +@XmlRootElement(name = "Font") +public class Font { + + @XmlElement(name = "CssParameter") + protected List cssParameter; + + /** + * Gets the value of the cssParameter property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the cssParameter property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getCssParameter().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link CssParameter } + * + * + */ + public List getCssParameter() { + if (cssParameter == null) { + cssParameter = new ArrayList(); + } + return this.cssParameter; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FormatListType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FormatListType.java new file mode 100644 index 0000000..d9414be --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FormatListType.java @@ -0,0 +1,76 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for FormatListType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="FormatListType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Format" type="{http://www.opengis.net/context}FormatType" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "FormatListType", namespace = "http://www.opengis.net/context", propOrder = { + "format" +}) +public class FormatListType { + + @XmlElement(name = "Format", required = true) + protected List format; + + /** + * Gets the value of the format property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the format property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getFormat().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link FormatType } + * + * + */ + public List getFormat() { + if (format == null) { + format = new ArrayList(); + } + return this.format; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FormatType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FormatType.java new file mode 100644 index 0000000..668d8c6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FormatType.java @@ -0,0 +1,94 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.XmlValue; + + +/** + *

Java class for FormatType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="FormatType">
+ *   <simpleContent>
+ *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+ *       <attribute name="current" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *     </extension>
+ *   </simpleContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "FormatType", namespace = "http://www.opengis.net/context", propOrder = { + "value" +}) +public class FormatType { + + @XmlValue + protected String value; + @XmlAttribute + protected Boolean current; + + /** + * Gets the value of the value property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getValue() { + return value; + } + + /** + * Sets the value of the value property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setValue(String value) { + this.value = value; + } + + /** + * Gets the value of the current property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isCurrent() { + return current; + } + + /** + * Sets the value of the current property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setCurrent(Boolean value) { + this.current = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FunctionType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FunctionType.java new file mode 100644 index 0000000..35a6cd1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/FunctionType.java @@ -0,0 +1,114 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for FunctionType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="FunctionType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}ExpressionType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}expression" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "FunctionType", namespace = "http://www.opengis.net/ogc", propOrder = { + "expression" +}) +public class FunctionType + extends ExpressionType +{ + + @XmlElementRef(name = "expression", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected List> expression; + @XmlAttribute(required = true) + protected String name; + + /** + * Gets the value of the expression property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the expression property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getExpression().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + * + */ + public List> getExpression() { + if (expression == null) { + expression = new ArrayList>(); + } + return this.expression; + } + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeneralType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeneralType.java new file mode 100644 index 0000000..0c5bbfb --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeneralType.java @@ -0,0 +1,293 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for GeneralType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="GeneralType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Window" type="{http://www.opengis.net/context}WindowType" minOccurs="0"/>
+ *         <element name="BoundingBox" type="{http://www.opengis.net/context}BoundingBoxType"/>
+ *         <element name="Title" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         <element name="KeywordList" type="{http://www.opengis.net/context}KeywordListType" minOccurs="0"/>
+ *         <element name="Abstract" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="LogoURL" type="{http://www.opengis.net/context}URLType" minOccurs="0"/>
+ *         <element name="DescriptionURL" type="{http://www.opengis.net/context}URLType" minOccurs="0"/>
+ *         <element name="ContactInformation" type="{http://www.opengis.net/context}ContactInformationType" minOccurs="0"/>
+ *         <element name="Extension" type="{http://www.opengis.net/context}ExtensionType" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "GeneralType", namespace = "http://www.opengis.net/context", propOrder = { + "window", + "boundingBox", + "title", + "keywordList", + "_abstract", + "logoURL", + "descriptionURL", + "contactInformation", + "extension" +}) +public class GeneralType { + + @XmlElement(name = "Window") + protected WindowType window; + @XmlElement(name = "BoundingBox", required = true) + protected BoundingBoxType boundingBox; + @XmlElement(name = "Title", required = true) + protected String title; + @XmlElement(name = "KeywordList") + protected KeywordListType keywordList; + @XmlElement(name = "Abstract") + protected String _abstract; + @XmlElement(name = "LogoURL") + protected URLType logoURL; + @XmlElement(name = "DescriptionURL") + protected URLType descriptionURL; + @XmlElement(name = "ContactInformation") + protected ContactInformationType contactInformation; + @XmlElement(name = "Extension") + protected ExtensionType extension; + + /** + * Gets the value of the window property. + * + * @return + * possible object is + * {@link WindowType } + * + */ + public WindowType getWindow() { + return window; + } + + /** + * Sets the value of the window property. + * + * @param value + * allowed object is + * {@link WindowType } + * + */ + public void setWindow(WindowType value) { + this.window = value; + } + + /** + * Gets the value of the boundingBox property. + * + * @return + * possible object is + * {@link BoundingBoxType } + * + */ + public BoundingBoxType getBoundingBox() { + return boundingBox; + } + + /** + * Sets the value of the boundingBox property. + * + * @param value + * allowed object is + * {@link BoundingBoxType } + * + */ + public void setBoundingBox(BoundingBoxType value) { + this.boundingBox = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the keywordList property. + * + * @return + * possible object is + * {@link KeywordListType } + * + */ + public KeywordListType getKeywordList() { + return keywordList; + } + + /** + * Sets the value of the keywordList property. + * + * @param value + * allowed object is + * {@link KeywordListType } + * + */ + public void setKeywordList(KeywordListType value) { + this.keywordList = value; + } + + /** + * Gets the value of the abstract property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAbstract() { + return _abstract; + } + + /** + * Sets the value of the abstract property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAbstract(String value) { + this._abstract = value; + } + + /** + * Gets the value of the logoURL property. + * + * @return + * possible object is + * {@link URLType } + * + */ + public URLType getLogoURL() { + return logoURL; + } + + /** + * Sets the value of the logoURL property. + * + * @param value + * allowed object is + * {@link URLType } + * + */ + public void setLogoURL(URLType value) { + this.logoURL = value; + } + + /** + * Gets the value of the descriptionURL property. + * + * @return + * possible object is + * {@link URLType } + * + */ + public URLType getDescriptionURL() { + return descriptionURL; + } + + /** + * Sets the value of the descriptionURL property. + * + * @param value + * allowed object is + * {@link URLType } + * + */ + public void setDescriptionURL(URLType value) { + this.descriptionURL = value; + } + + /** + * Gets the value of the contactInformation property. + * + * @return + * possible object is + * {@link ContactInformationType } + * + */ + public ContactInformationType getContactInformation() { + return contactInformation; + } + + /** + * Sets the value of the contactInformation property. + * + * @param value + * allowed object is + * {@link ContactInformationType } + * + */ + public void setContactInformation(ContactInformationType value) { + this.contactInformation = value; + } + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link ExtensionType } + * + */ + public ExtensionType getExtension() { + return extension; + } + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link ExtensionType } + * + */ + public void setExtension(ExtensionType value) { + this.extension = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Geometry.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Geometry.java new file mode 100644 index 0000000..5ffefde --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Geometry.java @@ -0,0 +1,71 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}PropertyName"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "propertyName" +}) +@XmlRootElement(name = "Geometry") +public class Geometry { + + @XmlElement(name = "PropertyName", namespace = "http://www.opengis.net/ogc", required = true) + protected PropertyNameType propertyName; + + /** + * Gets the value of the propertyName property. + * + * @return + * possible object is + * {@link PropertyNameType } + * + */ + public PropertyNameType getPropertyName() { + return propertyName; + } + + /** + * Sets the value of the propertyName property. + * + * @param value + * allowed object is + * {@link PropertyNameType } + * + */ + public void setPropertyName(PropertyNameType value) { + this.propertyName = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryAssociationType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryAssociationType.java new file mode 100644 index 0000000..f4f9b9e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryAssociationType.java @@ -0,0 +1,327 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * An instance of this type (e.g. a geometryMember) can either + * enclose or point to a primitive geometry element. When serving + * as a simple link that references a remote geometry instance, + * the value of the gml:remoteSchema attribute can be used to + * locate a schema fragment that constrains the target instance. + * + * + *

Java class for GeometryAssociationType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="GeometryAssociationType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}_Geometry"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "GeometryAssociationType", namespace = "http://www.opengis.net/gml", propOrder = { + "geometry" +}) +@XmlSeeAlso({ + PointPropertyType.class, + MultiPolygonPropertyType.class, + LineStringPropertyType.class, + LineStringMemberType.class, + MultiPointPropertyType.class, + PointMemberType.class, + LinearRingMemberType.class, + PolygonPropertyType.class, + PolygonMemberType.class, + MultiLineStringPropertyType.class, + MultiGeometryPropertyType.class +}) +public class GeometryAssociationType { + + @XmlElementRef(name = "_Geometry", namespace = "http://www.opengis.net/gml", type = JAXBElement.class) + protected JAXBElement geometry; + @XmlAttribute(namespace = "http://www.opengis.net/gml") + @XmlSchemaType(name = "anyURI") + protected String remoteSchema; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String href; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String arcrole; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ShowType show; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ActuateType actuate; + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link PolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link PointType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link LinearRingType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPointType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * + */ + public JAXBElement getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link PolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link PointType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link LinearRingType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPointType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * + */ + public void setGeometry(JAXBElement value) { + this.geometry = ((JAXBElement ) value); + } + + /** + * Gets the value of the remoteSchema property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRemoteSchema() { + return remoteSchema; + } + + /** + * Sets the value of the remoteSchema property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRemoteSchema(String value) { + this.remoteSchema = value; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.SIMPLE; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the href property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getHref() { + return href; + } + + /** + * Sets the value of the href property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setHref(String value) { + this.href = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the arcrole property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getArcrole() { + return arcrole; + } + + /** + * Sets the value of the arcrole property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArcrole(String value) { + this.arcrole = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the show property. + * + * @return + * possible object is + * {@link ShowType } + * + */ + public ShowType getShow() { + return show; + } + + /** + * Sets the value of the show property. + * + * @param value + * allowed object is + * {@link ShowType } + * + */ + public void setShow(ShowType value) { + this.show = value; + } + + /** + * Gets the value of the actuate property. + * + * @return + * possible object is + * {@link ActuateType } + * + */ + public ActuateType getActuate() { + return actuate; + } + + /** + * Sets the value of the actuate property. + * + * @param value + * allowed object is + * {@link ActuateType } + * + */ + public void setActuate(ActuateType value) { + this.actuate = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryCollectionType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryCollectionType.java new file mode 100644 index 0000000..67ec454 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryCollectionType.java @@ -0,0 +1,95 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A geometry collection must include one or more geometries, referenced + * through geometryMember elements. User-defined geometry collections + * that accept GML geometry classes as members must instantiate--or + * derive from--this type. + * + * + *

Java class for GeometryCollectionType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="GeometryCollectionType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/gml}AbstractGeometryCollectionBaseType">
+ *       <sequence maxOccurs="unbounded">
+ *         <element ref="{http://www.opengis.net/gml}geometryMember"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "GeometryCollectionType", namespace = "http://www.opengis.net/gml", propOrder = { + "geometryMember" +}) +@XmlSeeAlso({ + MultiPolygonType.class, + MultiPointType.class, + MultiLineStringType.class +}) +public class GeometryCollectionType + extends AbstractGeometryCollectionBaseType +{ + + @XmlElementRef(name = "geometryMember", namespace = "http://www.opengis.net/gml", type = JAXBElement.class) + protected List> geometryMember; + + /** + * Gets the value of the geometryMember property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the geometryMember property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getGeometryMember().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link PolygonMemberType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringMemberType }{@code >} + * {@link JAXBElement }{@code <}{@link PointMemberType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryAssociationType }{@code >} + * + * + */ + public List> getGeometryMember() { + if (geometryMember == null) { + geometryMember = new ArrayList>(); + } + return this.geometryMember; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryPropertyType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryPropertyType.java new file mode 100644 index 0000000..b8bb645 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GeometryPropertyType.java @@ -0,0 +1,311 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A simple geometry property encapsulates a geometry element. + * Alternatively, it can function as a pointer (simple-type link) + * that refers to a remote geometry element. + * + * + *

Java class for GeometryPropertyType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="GeometryPropertyType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}_Geometry"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "GeometryPropertyType", namespace = "http://www.opengis.net/gml", propOrder = { + "geometry" +}) +public class GeometryPropertyType { + + @XmlElementRef(name = "_Geometry", namespace = "http://www.opengis.net/gml", type = JAXBElement.class) + protected JAXBElement geometry; + @XmlAttribute(namespace = "http://www.opengis.net/gml") + @XmlSchemaType(name = "anyURI") + protected String remoteSchema; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String href; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String arcrole; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ShowType show; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ActuateType actuate; + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link PolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link PointType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link LinearRingType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPointType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * + */ + public JAXBElement getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link PolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link PointType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * {@link JAXBElement }{@code <}{@link LinearRingType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >} + * {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >} + * {@link JAXBElement }{@code <}{@link MultiPointType }{@code >} + * {@link JAXBElement }{@code <}{@link LineStringType }{@code >} + * {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >} + * + */ + public void setGeometry(JAXBElement value) { + this.geometry = ((JAXBElement ) value); + } + + /** + * Gets the value of the remoteSchema property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRemoteSchema() { + return remoteSchema; + } + + /** + * Sets the value of the remoteSchema property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRemoteSchema(String value) { + this.remoteSchema = value; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.SIMPLE; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the href property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getHref() { + return href; + } + + /** + * Sets the value of the href property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setHref(String value) { + this.href = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the arcrole property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getArcrole() { + return arcrole; + } + + /** + * Sets the value of the arcrole property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArcrole(String value) { + this.arcrole = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the show property. + * + * @return + * possible object is + * {@link ShowType } + * + */ + public ShowType getShow() { + return show; + } + + /** + * Sets the value of the show property. + * + * @param value + * allowed object is + * {@link ShowType } + * + */ + public void setShow(ShowType value) { + this.show = value; + } + + /** + * Gets the value of the actuate property. + * + * @return + * possible object is + * {@link ActuateType } + * + */ + public ActuateType getActuate() { + return actuate; + } + + /** + * Sets the value of the actuate property. + * + * @param value + * allowed object is + * {@link ActuateType } + * + */ + public void setActuate(ActuateType value) { + this.actuate = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Graphic.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Graphic.java new file mode 100644 index 0000000..8b60978 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Graphic.java @@ -0,0 +1,172 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElements; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <choice maxOccurs="unbounded" minOccurs="0">
+ *           <element ref="{http://www.opengis.net/sld}ExternalGraphic"/>
+ *           <element ref="{http://www.opengis.net/sld}Mark"/>
+ *         </choice>
+ *         <sequence>
+ *           <element ref="{http://www.opengis.net/sld}Opacity" minOccurs="0"/>
+ *           <element ref="{http://www.opengis.net/sld}Size" minOccurs="0"/>
+ *           <element ref="{http://www.opengis.net/sld}Rotation" minOccurs="0"/>
+ *         </sequence>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "externalGraphicOrMark", + "opacity", + "size", + "rotation" +}) +@XmlRootElement(name = "Graphic") +public class Graphic { + + @XmlElements({ + @XmlElement(name = "ExternalGraphic", type = ExternalGraphic.class), + @XmlElement(name = "Mark", type = Mark.class) + }) + protected List externalGraphicOrMark; + @XmlElement(name = "Opacity") + protected ParameterValueType opacity; + @XmlElement(name = "Size") + protected ParameterValueType size; + @XmlElement(name = "Rotation") + protected ParameterValueType rotation; + + /** + * Gets the value of the externalGraphicOrMark property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the externalGraphicOrMark property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getExternalGraphicOrMark().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ExternalGraphic } + * {@link Mark } + * + * + */ + public List getExternalGraphicOrMark() { + if (externalGraphicOrMark == null) { + externalGraphicOrMark = new ArrayList(); + } + return this.externalGraphicOrMark; + } + + /** + * Gets the value of the opacity property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getOpacity() { + return opacity; + } + + /** + * Sets the value of the opacity property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setOpacity(ParameterValueType value) { + this.opacity = value; + } + + /** + * Gets the value of the size property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getSize() { + return size; + } + + /** + * Sets the value of the size property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setSize(ParameterValueType value) { + this.size = value; + } + + /** + * Gets the value of the rotation property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getRotation() { + return rotation; + } + + /** + * Sets the value of the rotation property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setRotation(ParameterValueType value) { + this.rotation = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GraphicFill.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GraphicFill.java new file mode 100644 index 0000000..710aae3 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GraphicFill.java @@ -0,0 +1,71 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Graphic"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "graphic" +}) +@XmlRootElement(name = "GraphicFill") +public class GraphicFill { + + @XmlElement(name = "Graphic", required = true) + protected Graphic graphic; + + /** + * Gets the value of the graphic property. + * + * @return + * possible object is + * {@link Graphic } + * + */ + public Graphic getGraphic() { + return graphic; + } + + /** + * Sets the value of the graphic property. + * + * @param value + * allowed object is + * {@link Graphic } + * + */ + public void setGraphic(Graphic value) { + this.graphic = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GraphicStroke.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GraphicStroke.java new file mode 100644 index 0000000..a371f6e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/GraphicStroke.java @@ -0,0 +1,71 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Graphic"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "graphic" +}) +@XmlRootElement(name = "GraphicStroke") +public class GraphicStroke { + + @XmlElement(name = "Graphic", required = true) + protected Graphic graphic; + + /** + * Gets the value of the graphic property. + * + * @return + * possible object is + * {@link Graphic } + * + */ + public Graphic getGraphic() { + return graphic; + } + + /** + * Sets the value of the graphic property. + * + * @param value + * allowed object is + * {@link Graphic } + * + */ + public void setGraphic(Graphic value) { + this.graphic = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Halo.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Halo.java new file mode 100644 index 0000000..38ab53e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Halo.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Radius" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Fill" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "radius", + "fill" +}) +@XmlRootElement(name = "Halo") +public class Halo { + + @XmlElement(name = "Radius") + protected ParameterValueType radius; + @XmlElement(name = "Fill") + protected Fill fill; + + /** + * Gets the value of the radius property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getRadius() { + return radius; + } + + /** + * Sets the value of the radius property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setRadius(ParameterValueType value) { + this.radius = value; + } + + /** + * Gets the value of the fill property. + * + * @return + * possible object is + * {@link Fill } + * + */ + public Fill getFill() { + return fill; + } + + /** + * Sets the value of the fill property. + * + * @param value + * allowed object is + * {@link Fill } + * + */ + public void setFill(Fill value) { + this.fill = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Histogram.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Histogram.java new file mode 100644 index 0000000..b7fba1e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Histogram.java @@ -0,0 +1,39 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "Histogram") +public class Histogram { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ImageOutline.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ImageOutline.java new file mode 100644 index 0000000..cfbff5f --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ImageOutline.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice>
+ *         <element ref="{http://www.opengis.net/sld}LineSymbolizer"/>
+ *         <element ref="{http://www.opengis.net/sld}PolygonSymbolizer"/>
+ *       </choice>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "lineSymbolizer", + "polygonSymbolizer" +}) +@XmlRootElement(name = "ImageOutline") +public class ImageOutline { + + @XmlElement(name = "LineSymbolizer") + protected LineSymbolizer lineSymbolizer; + @XmlElement(name = "PolygonSymbolizer") + protected PolygonSymbolizer polygonSymbolizer; + + /** + * Gets the value of the lineSymbolizer property. + * + * @return + * possible object is + * {@link LineSymbolizer } + * + */ + public LineSymbolizer getLineSymbolizer() { + return lineSymbolizer; + } + + /** + * Sets the value of the lineSymbolizer property. + * + * @param value + * allowed object is + * {@link LineSymbolizer } + * + */ + public void setLineSymbolizer(LineSymbolizer value) { + this.lineSymbolizer = value; + } + + /** + * Gets the value of the polygonSymbolizer property. + * + * @return + * possible object is + * {@link PolygonSymbolizer } + * + */ + public PolygonSymbolizer getPolygonSymbolizer() { + return polygonSymbolizer; + } + + /** + * Sets the value of the polygonSymbolizer property. + * + * @param value + * allowed object is + * {@link PolygonSymbolizer } + * + */ + public void setPolygonSymbolizer(PolygonSymbolizer value) { + this.polygonSymbolizer = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/KeywordListType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/KeywordListType.java new file mode 100644 index 0000000..ad80695 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/KeywordListType.java @@ -0,0 +1,76 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for KeywordListType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="KeywordListType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Keyword" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "KeywordListType", namespace = "http://www.opengis.net/context", propOrder = { + "keyword" +}) +public class KeywordListType { + + @XmlElement(name = "Keyword", required = true) + protected List keyword; + + /** + * Gets the value of the keyword property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the keyword property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getKeyword().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getKeyword() { + if (keyword == null) { + keyword = new ArrayList(); + } + return this.keyword; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LATESTONTOP.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LATESTONTOP.java new file mode 100644 index 0000000..a857607 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LATESTONTOP.java @@ -0,0 +1,39 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "LATEST_ON_TOP") +public class LATESTONTOP { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LabelPlacement.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LabelPlacement.java new file mode 100644 index 0000000..81b9109 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LabelPlacement.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice>
+ *         <element ref="{http://www.opengis.net/sld}PointPlacement"/>
+ *         <element ref="{http://www.opengis.net/sld}LinePlacement"/>
+ *       </choice>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "pointPlacement", + "linePlacement" +}) +@XmlRootElement(name = "LabelPlacement") +public class LabelPlacement { + + @XmlElement(name = "PointPlacement") + protected PointPlacement pointPlacement; + @XmlElement(name = "LinePlacement") + protected LinePlacement linePlacement; + + /** + * Gets the value of the pointPlacement property. + * + * @return + * possible object is + * {@link PointPlacement } + * + */ + public PointPlacement getPointPlacement() { + return pointPlacement; + } + + /** + * Sets the value of the pointPlacement property. + * + * @param value + * allowed object is + * {@link PointPlacement } + * + */ + public void setPointPlacement(PointPlacement value) { + this.pointPlacement = value; + } + + /** + * Gets the value of the linePlacement property. + * + * @return + * possible object is + * {@link LinePlacement } + * + */ + public LinePlacement getLinePlacement() { + return linePlacement; + } + + /** + * Sets the value of the linePlacement property. + * + * @param value + * allowed object is + * {@link LinePlacement } + * + */ + public void setLinePlacement(LinePlacement value) { + this.linePlacement = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerFeatureConstraints.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerFeatureConstraints.java new file mode 100644 index 0000000..938e580 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerFeatureConstraints.java @@ -0,0 +1,78 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}FeatureTypeConstraint" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "featureTypeConstraint" +}) +@XmlRootElement(name = "LayerFeatureConstraints") +public class LayerFeatureConstraints { + + @XmlElement(name = "FeatureTypeConstraint", required = true) + protected List featureTypeConstraint; + + /** + * Gets the value of the featureTypeConstraint property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the featureTypeConstraint property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getFeatureTypeConstraint().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link FeatureTypeConstraint } + * + * + */ + public List getFeatureTypeConstraint() { + if (featureTypeConstraint == null) { + featureTypeConstraint = new ArrayList(); + } + return this.featureTypeConstraint; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerListType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerListType.java new file mode 100644 index 0000000..17bc5e8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerListType.java @@ -0,0 +1,76 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for LayerListType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LayerListType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Layer" type="{http://www.opengis.net/context}LayerType" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LayerListType", namespace = "http://www.opengis.net/context", propOrder = { + "layer" +}) +public class LayerListType { + + @XmlElement(name = "Layer", required = true) + protected List layer; + + /** + * Gets the value of the layer property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the layer property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getLayer().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link LayerType } + * + * + */ + public List getLayer() { + if (layer == null) { + layer = new ArrayList(); + } + return this.layer; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerType.java new file mode 100644 index 0000000..0349b78 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LayerType.java @@ -0,0 +1,451 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for LayerType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LayerType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Server" type="{http://www.opengis.net/context}ServerType"/>
+ *         <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         <element name="Title" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         <element name="Abstract" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="DataURL" type="{http://www.opengis.net/context}URLType" minOccurs="0"/>
+ *         <element name="MetadataURL" type="{http://www.opengis.net/context}URLType" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}MinScaleDenominator" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}MaxScaleDenominator" minOccurs="0"/>
+ *         <element name="SRS" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
+ *         <element name="FormatList" type="{http://www.opengis.net/context}FormatListType" minOccurs="0"/>
+ *         <element name="StyleList" type="{http://www.opengis.net/context}StyleListType" minOccurs="0"/>
+ *         <element name="DimensionList" type="{http://www.opengis.net/context}DimensionListType" minOccurs="0"/>
+ *         <element name="Extension" type="{http://www.opengis.net/context}ExtensionType" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="queryable" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *       <attribute name="hidden" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LayerType", namespace = "http://www.opengis.net/context", propOrder = { + "server", + "name", + "title", + "_abstract", + "dataURL", + "metadataURL", + "minScaleDenominator", + "maxScaleDenominator", + "srs", + "formatList", + "styleList", + "dimensionList", + "extension" +}) +public class LayerType { + + @XmlElement(name = "Server", required = true) + protected ServerType server; + @XmlElement(name = "Name", required = true) + protected String name; + @XmlElement(name = "Title", required = true) + protected String title; + @XmlElement(name = "Abstract") + protected String _abstract; + @XmlElement(name = "DataURL") + protected URLType dataURL; + @XmlElement(name = "MetadataURL") + protected URLType metadataURL; + @XmlElement(name = "MinScaleDenominator", namespace = "http://www.opengis.net/sld") + protected Double minScaleDenominator; + @XmlElement(name = "MaxScaleDenominator", namespace = "http://www.opengis.net/sld") + protected Double maxScaleDenominator; + @XmlElement(name = "SRS") + protected List srs; + @XmlElement(name = "FormatList") + protected FormatListType formatList; + @XmlElement(name = "StyleList") + protected StyleListType styleList; + @XmlElement(name = "DimensionList") + protected DimensionListType dimensionList; + @XmlElement(name = "Extension") + protected ExtensionType extension; + @XmlAttribute(required = true) + protected boolean queryable; + @XmlAttribute(required = true) + protected boolean hidden; + + /** + * Gets the value of the server property. + * + * @return + * possible object is + * {@link ServerType } + * + */ + public ServerType getServer() { + return server; + } + + /** + * Sets the value of the server property. + * + * @param value + * allowed object is + * {@link ServerType } + * + */ + public void setServer(ServerType value) { + this.server = value; + } + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the abstract property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAbstract() { + return _abstract; + } + + /** + * Sets the value of the abstract property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAbstract(String value) { + this._abstract = value; + } + + /** + * Gets the value of the dataURL property. + * + * @return + * possible object is + * {@link URLType } + * + */ + public URLType getDataURL() { + return dataURL; + } + + /** + * Sets the value of the dataURL property. + * + * @param value + * allowed object is + * {@link URLType } + * + */ + public void setDataURL(URLType value) { + this.dataURL = value; + } + + /** + * Gets the value of the metadataURL property. + * + * @return + * possible object is + * {@link URLType } + * + */ + public URLType getMetadataURL() { + return metadataURL; + } + + /** + * Sets the value of the metadataURL property. + * + * @param value + * allowed object is + * {@link URLType } + * + */ + public void setMetadataURL(URLType value) { + this.metadataURL = value; + } + + /** + * Gets the value of the minScaleDenominator property. + * + * @return + * possible object is + * {@link Double } + * + */ + public Double getMinScaleDenominator() { + return minScaleDenominator; + } + + /** + * Sets the value of the minScaleDenominator property. + * + * @param value + * allowed object is + * {@link Double } + * + */ + public void setMinScaleDenominator(Double value) { + this.minScaleDenominator = value; + } + + /** + * Gets the value of the maxScaleDenominator property. + * + * @return + * possible object is + * {@link Double } + * + */ + public Double getMaxScaleDenominator() { + return maxScaleDenominator; + } + + /** + * Sets the value of the maxScaleDenominator property. + * + * @param value + * allowed object is + * {@link Double } + * + */ + public void setMaxScaleDenominator(Double value) { + this.maxScaleDenominator = value; + } + + /** + * Gets the value of the srs property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the srs property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getSRS().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getSRS() { + if (srs == null) { + srs = new ArrayList(); + } + return this.srs; + } + + /** + * Gets the value of the formatList property. + * + * @return + * possible object is + * {@link FormatListType } + * + */ + public FormatListType getFormatList() { + return formatList; + } + + /** + * Sets the value of the formatList property. + * + * @param value + * allowed object is + * {@link FormatListType } + * + */ + public void setFormatList(FormatListType value) { + this.formatList = value; + } + + /** + * Gets the value of the styleList property. + * + * @return + * possible object is + * {@link StyleListType } + * + */ + public StyleListType getStyleList() { + return styleList; + } + + /** + * Sets the value of the styleList property. + * + * @param value + * allowed object is + * {@link StyleListType } + * + */ + public void setStyleList(StyleListType value) { + this.styleList = value; + } + + /** + * Gets the value of the dimensionList property. + * + * @return + * possible object is + * {@link DimensionListType } + * + */ + public DimensionListType getDimensionList() { + return dimensionList; + } + + /** + * Sets the value of the dimensionList property. + * + * @param value + * allowed object is + * {@link DimensionListType } + * + */ + public void setDimensionList(DimensionListType value) { + this.dimensionList = value; + } + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link ExtensionType } + * + */ + public ExtensionType getExtension() { + return extension; + } + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link ExtensionType } + * + */ + public void setExtension(ExtensionType value) { + this.extension = value; + } + + /** + * Gets the value of the queryable property. + * + */ + public boolean isQueryable() { + return queryable; + } + + /** + * Sets the value of the queryable property. + * + */ + public void setQueryable(boolean value) { + this.queryable = value; + } + + /** + * Gets the value of the hidden property. + * + */ + public boolean isHidden() { + return hidden; + } + + /** + * Sets the value of the hidden property. + * + */ + public void setHidden(boolean value) { + this.hidden = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LegendGraphic.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LegendGraphic.java new file mode 100644 index 0000000..cbbf2e8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LegendGraphic.java @@ -0,0 +1,71 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Graphic"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "graphic" +}) +@XmlRootElement(name = "LegendGraphic") +public class LegendGraphic { + + @XmlElement(name = "Graphic", required = true) + protected Graphic graphic; + + /** + * Gets the value of the graphic property. + * + * @return + * possible object is + * {@link Graphic } + * + */ + public Graphic getGraphic() { + return graphic; + } + + /** + * Sets the value of the graphic property. + * + * @param value + * allowed object is + * {@link Graphic } + * + */ + public void setGraphic(Graphic value) { + this.graphic = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinePlacement.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinePlacement.java new file mode 100644 index 0000000..5cccf8a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinePlacement.java @@ -0,0 +1,71 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}PerpendicularOffset" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "perpendicularOffset" +}) +@XmlRootElement(name = "LinePlacement") +public class LinePlacement { + + @XmlElement(name = "PerpendicularOffset") + protected ParameterValueType perpendicularOffset; + + /** + * Gets the value of the perpendicularOffset property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getPerpendicularOffset() { + return perpendicularOffset; + } + + /** + * Sets the value of the perpendicularOffset property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setPerpendicularOffset(ParameterValueType value) { + this.perpendicularOffset = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringMemberType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringMemberType.java new file mode 100644 index 0000000..a60044a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringMemberType.java @@ -0,0 +1,45 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * Restricts the geometry member to being a LineString instance. + * + *

Java class for LineStringMemberType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LineStringMemberType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}LineString"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.opengis.net/gml}AssociationAttributeGroup"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LineStringMemberType", namespace = "http://www.opengis.net/gml") +public class LineStringMemberType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringPropertyType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringPropertyType.java new file mode 100644 index 0000000..cdcb0ff --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringPropertyType.java @@ -0,0 +1,49 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Encapsulates a single LineString to represent centerLineOf or + * edgeOf properties. + * + * + *

Java class for LineStringPropertyType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LineStringPropertyType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}LineString"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LineStringPropertyType", namespace = "http://www.opengis.net/gml") +public class LineStringPropertyType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringType.java new file mode 100644 index 0000000..b080681 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineStringType.java @@ -0,0 +1,110 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A LineString is defined by two or more coordinate tuples, with + * linear interpolation between them. + * + * + *

Java class for LineStringType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LineStringType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/gml}AbstractGeometryType">
+ *       <sequence>
+ *         <choice>
+ *           <element ref="{http://www.opengis.net/gml}coord" maxOccurs="unbounded" minOccurs="2"/>
+ *           <element ref="{http://www.opengis.net/gml}coordinates"/>
+ *         </choice>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LineStringType", namespace = "http://www.opengis.net/gml", propOrder = { + "coord", + "coordinates" +}) +public class LineStringType + extends AbstractGeometryType +{ + + protected List coord; + protected CoordinatesType coordinates; + + /** + * Gets the value of the coord property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the coord property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getCoord().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link CoordType } + * + * + */ + public List getCoord() { + if (coord == null) { + coord = new ArrayList(); + } + return this.coord; + } + + /** + * Gets the value of the coordinates property. + * + * @return + * possible object is + * {@link CoordinatesType } + * + */ + public CoordinatesType getCoordinates() { + return coordinates; + } + + /** + * Sets the value of the coordinates property. + * + * @param value + * allowed object is + * {@link CoordinatesType } + * + */ + public void setCoordinates(CoordinatesType value) { + this.coordinates = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineSymbolizer.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineSymbolizer.java new file mode 100644 index 0000000..ecde86c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LineSymbolizer.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/sld}SymbolizerType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Geometry" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Stroke" minOccurs="0"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "geometry", + "stroke" +}) +public class LineSymbolizer + extends SymbolizerType +{ + + @XmlElement(name = "Geometry") + protected Geometry geometry; + @XmlElement(name = "Stroke") + protected Stroke stroke; + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link Geometry } + * + */ + public Geometry getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link Geometry } + * + */ + public void setGeometry(Geometry value) { + this.geometry = value; + } + + /** + * Gets the value of the stroke property. + * + * @return + * possible object is + * {@link Stroke } + * + */ + public Stroke getStroke() { + return stroke; + } + + /** + * Sets the value of the stroke property. + * + * @param value + * allowed object is + * {@link Stroke } + * + */ + public void setStroke(Stroke value) { + this.stroke = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinearRingMemberType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinearRingMemberType.java new file mode 100644 index 0000000..51a5085 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinearRingMemberType.java @@ -0,0 +1,46 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * Restricts the outer or inner boundary of a polygon instance + * to being a LinearRing. + * + *

Java class for LinearRingMemberType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LinearRingMemberType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}LinearRing"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.opengis.net/gml}AssociationAttributeGroup"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LinearRingMemberType", namespace = "http://www.opengis.net/gml") +public class LinearRingMemberType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinearRingType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinearRingType.java new file mode 100644 index 0000000..07791cf --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LinearRingType.java @@ -0,0 +1,111 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A LinearRing is defined by four or more coordinate tuples, with + * linear interpolation between them; the first and last coordinates + * must be coincident. + * + * + *

Java class for LinearRingType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LinearRingType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/gml}AbstractGeometryType">
+ *       <sequence>
+ *         <choice>
+ *           <element ref="{http://www.opengis.net/gml}coord" maxOccurs="unbounded" minOccurs="4"/>
+ *           <element ref="{http://www.opengis.net/gml}coordinates"/>
+ *         </choice>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LinearRingType", namespace = "http://www.opengis.net/gml", propOrder = { + "coord", + "coordinates" +}) +public class LinearRingType + extends AbstractGeometryType +{ + + protected List coord; + protected CoordinatesType coordinates; + + /** + * Gets the value of the coord property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the coord property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getCoord().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link CoordType } + * + * + */ + public List getCoord() { + if (coord == null) { + coord = new ArrayList(); + } + return this.coord; + } + + /** + * Gets the value of the coordinates property. + * + * @return + * possible object is + * {@link CoordinatesType } + * + */ + public CoordinatesType getCoordinates() { + return coordinates; + } + + /** + * Sets the value of the coordinates property. + * + * @param value + * allowed object is + * {@link CoordinatesType } + * + */ + public void setCoordinates(CoordinatesType value) { + this.coordinates = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LiteralType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LiteralType.java new file mode 100644 index 0000000..5f43d7f --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LiteralType.java @@ -0,0 +1,79 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for LiteralType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LiteralType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}ExpressionType">
+ *       <sequence>
+ *         <any minOccurs="0"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LiteralType", namespace = "http://www.opengis.net/ogc", propOrder = { + "content" +}) +public class LiteralType { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getContent().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LocatorType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LocatorType.java new file mode 100644 index 0000000..1a4f821 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LocatorType.java @@ -0,0 +1,214 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

Java class for locatorType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="locatorType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <group ref="{http://www.w3.org/1999/xlink}locatorModel"/>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}locatorAttrs"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "locatorType", namespace = "http://www.w3.org/1999/xlink", propOrder = { + "title" +}) +public class LocatorType { + + protected List title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink", required = true) + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink", required = true) + protected String href; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(name = "title", namespace = "http://www.w3.org/1999/xlink") + protected String title1; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String label; + + /** + * Gets the value of the title property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the title property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getTitle().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link TitleEltType } + * + * + */ + public List getTitle() { + if (title == null) { + title = new ArrayList(); + } + return this.title; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.LOCATOR; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the href property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getHref() { + return href; + } + + /** + * Sets the value of the href property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setHref(String value) { + this.href = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the title1 property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle1() { + return title1; + } + + /** + * Sets the value of the title1 property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle1(String value) { + this.title1 = value; + } + + /** + * + * label is not required, but locators have no particular + * XLink function if they are not labeled. + * + * + * @return + * possible object is + * {@link String } + * + */ + public String getLabel() { + return label; + } + + /** + * Sets the value of the label property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLabel(String value) { + this.label = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LogicOpsType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LogicOpsType.java new file mode 100644 index 0000000..112fad7 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LogicOpsType.java @@ -0,0 +1,42 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for LogicOpsType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LogicOpsType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LogicOpsType", namespace = "http://www.opengis.net/ogc") +@XmlSeeAlso({ + UnaryLogicOpType.class, + BinaryLogicOpType.class +}) +public abstract class LogicOpsType { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LowerBoundaryType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LowerBoundaryType.java new file mode 100644 index 0000000..54a2f93 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/LowerBoundaryType.java @@ -0,0 +1,84 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for LowerBoundaryType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="LowerBoundaryType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice>
+ *         <element ref="{http://www.opengis.net/ogc}expression"/>
+ *       </choice>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "LowerBoundaryType", namespace = "http://www.opengis.net/ogc", propOrder = { + "expression" +}) +public class LowerBoundaryType { + + @XmlElementRef(name = "expression", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement expression; + + /** + * Gets the value of the expression property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + */ + public JAXBElement getExpression() { + return expression; + } + + /** + * Sets the value of the expression property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + */ + public void setExpression(JAXBElement value) { + this.expression = ((JAXBElement ) value); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Mark.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Mark.java new file mode 100644 index 0000000..bed161b --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Mark.java @@ -0,0 +1,127 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}WellKnownName" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Fill" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Stroke" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "wellKnownName", + "fill", + "stroke" +}) +@XmlRootElement(name = "Mark") +public class Mark { + + @XmlElement(name = "WellKnownName") + protected String wellKnownName; + @XmlElement(name = "Fill") + protected Fill fill; + @XmlElement(name = "Stroke") + protected Stroke stroke; + + /** + * Gets the value of the wellKnownName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getWellKnownName() { + return wellKnownName; + } + + /** + * Sets the value of the wellKnownName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWellKnownName(String value) { + this.wellKnownName = value; + } + + /** + * Gets the value of the fill property. + * + * @return + * possible object is + * {@link Fill } + * + */ + public Fill getFill() { + return fill; + } + + /** + * Sets the value of the fill property. + * + * @param value + * allowed object is + * {@link Fill } + * + */ + public void setFill(Fill value) { + this.fill = value; + } + + /** + * Gets the value of the stroke property. + * + * @return + * possible object is + * {@link Stroke } + * + */ + public Stroke getStroke() { + return stroke; + } + + /** + * Sets the value of the stroke property. + * + * @param value + * allowed object is + * {@link Stroke } + * + */ + public void setStroke(Stroke value) { + this.stroke = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiGeometryPropertyType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiGeometryPropertyType.java new file mode 100644 index 0000000..b044caa --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiGeometryPropertyType.java @@ -0,0 +1,46 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * Encapsulates a MultiGeometry element. + * + *

Java class for MultiGeometryPropertyType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="MultiGeometryPropertyType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}MultiGeometry"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MultiGeometryPropertyType", namespace = "http://www.opengis.net/gml") +public class MultiGeometryPropertyType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiLineStringPropertyType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiLineStringPropertyType.java new file mode 100644 index 0000000..af6b16a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiLineStringPropertyType.java @@ -0,0 +1,49 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Encapsulates a MultiLineString element to represent the following + * discontiguous geometric properties: multiEdgeOf, multiCenterLineOf. + * + * + *

Java class for MultiLineStringPropertyType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="MultiLineStringPropertyType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}MultiLineString"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MultiLineStringPropertyType", namespace = "http://www.opengis.net/gml") +public class MultiLineStringPropertyType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiLineStringType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiLineStringType.java new file mode 100644 index 0000000..2927b26 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiLineStringType.java @@ -0,0 +1,49 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A MultiLineString is defined by one or more LineStrings, referenced + * through lineStringMember elements. + * + * + *

Java class for MultiLineStringType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="MultiLineStringType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryCollectionType">
+ *       <sequence maxOccurs="unbounded">
+ *         <element ref="{http://www.opengis.net/gml}lineStringMember"/>
+ *       </sequence>
+ *       <attribute name="gid" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *       <attribute name="srsName" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MultiLineStringType", namespace = "http://www.opengis.net/gml") +public class MultiLineStringType + extends GeometryCollectionType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPointPropertyType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPointPropertyType.java new file mode 100644 index 0000000..3f26cf1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPointPropertyType.java @@ -0,0 +1,50 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Encapsulates a MultiPoint element to represent the following + * discontiguous geometric properties: multiLocation, multiPosition, + * multiCenterOf. + * + * + *

Java class for MultiPointPropertyType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="MultiPointPropertyType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}MultiPoint"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MultiPointPropertyType", namespace = "http://www.opengis.net/gml") +public class MultiPointPropertyType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPointType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPointType.java new file mode 100644 index 0000000..2300d02 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPointType.java @@ -0,0 +1,49 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A MultiPoint is defined by one or more Points, referenced through + * pointMember elements. + * + * + *

Java class for MultiPointType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="MultiPointType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryCollectionType">
+ *       <sequence maxOccurs="unbounded">
+ *         <element ref="{http://www.opengis.net/gml}pointMember"/>
+ *       </sequence>
+ *       <attribute name="gid" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *       <attribute name="srsName" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MultiPointType", namespace = "http://www.opengis.net/gml") +public class MultiPointType + extends GeometryCollectionType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPolygonPropertyType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPolygonPropertyType.java new file mode 100644 index 0000000..9179318 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPolygonPropertyType.java @@ -0,0 +1,49 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Encapsulates a MultiPolygon to represent the following discontiguous + * geometric properties: multiCoverage, multiExtentOf. + * + * + *

Java class for MultiPolygonPropertyType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="MultiPolygonPropertyType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}MultiPolygon"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MultiPolygonPropertyType", namespace = "http://www.opengis.net/gml") +public class MultiPolygonPropertyType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPolygonType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPolygonType.java new file mode 100644 index 0000000..6b663e7 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/MultiPolygonType.java @@ -0,0 +1,49 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A MultiPolygon is defined by one or more Polygons, referenced through + * polygonMember elements. + * + * + *

Java class for MultiPolygonType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="MultiPolygonType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryCollectionType">
+ *       <sequence maxOccurs="unbounded">
+ *         <element ref="{http://www.opengis.net/gml}polygonMember"/>
+ *       </sequence>
+ *       <attribute name="gid" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *       <attribute name="srsName" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MultiPolygonType", namespace = "http://www.opengis.net/gml") +public class MultiPolygonType + extends GeometryCollectionType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NamedLayer.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NamedLayer.java new file mode 100644 index 0000000..65da6ce --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NamedLayer.java @@ -0,0 +1,142 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElements; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Name"/>
+ *         <element ref="{http://www.opengis.net/sld}LayerFeatureConstraints" minOccurs="0"/>
+ *         <choice maxOccurs="unbounded" minOccurs="0">
+ *           <element ref="{http://www.opengis.net/sld}NamedStyle"/>
+ *           <element ref="{http://www.opengis.net/sld}UserStyle"/>
+ *         </choice>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "name", + "layerFeatureConstraints", + "namedStyleOrUserStyle" +}) +@XmlRootElement(name = "NamedLayer") +public class NamedLayer { + + @XmlElement(name = "Name", required = true) + protected String name; + @XmlElement(name = "LayerFeatureConstraints") + protected LayerFeatureConstraints layerFeatureConstraints; + @XmlElements({ + @XmlElement(name = "UserStyle", type = UserStyle.class), + @XmlElement(name = "NamedStyle", type = NamedStyle.class) + }) + protected List namedStyleOrUserStyle; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the layerFeatureConstraints property. + * + * @return + * possible object is + * {@link LayerFeatureConstraints } + * + */ + public LayerFeatureConstraints getLayerFeatureConstraints() { + return layerFeatureConstraints; + } + + /** + * Sets the value of the layerFeatureConstraints property. + * + * @param value + * allowed object is + * {@link LayerFeatureConstraints } + * + */ + public void setLayerFeatureConstraints(LayerFeatureConstraints value) { + this.layerFeatureConstraints = value; + } + + /** + * Gets the value of the namedStyleOrUserStyle property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the namedStyleOrUserStyle property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getNamedStyleOrUserStyle().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link UserStyle } + * {@link NamedStyle } + * + * + */ + public List getNamedStyleOrUserStyle() { + if (namedStyleOrUserStyle == null) { + namedStyleOrUserStyle = new ArrayList(); + } + return this.namedStyleOrUserStyle; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NamedStyle.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NamedStyle.java new file mode 100644 index 0000000..c874f48 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NamedStyle.java @@ -0,0 +1,71 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Name"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "name" +}) +@XmlRootElement(name = "NamedStyle") +public class NamedStyle { + + @XmlElement(name = "Name", required = true) + protected String name; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Normalize.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Normalize.java new file mode 100644 index 0000000..e02fc02 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Normalize.java @@ -0,0 +1,39 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "Normalize") +public class Normalize { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NullType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NullType.java new file mode 100644 index 0000000..aa7af91 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/NullType.java @@ -0,0 +1,64 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlEnumValue; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for NullType. + * + *

The following schema fragment specifies the expected content contained within this class. + *

+ *

+ * <simpleType name="NullType">
+ *   <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *     <enumeration value="inapplicable"/>
+ *     <enumeration value="unknown"/>
+ *     <enumeration value="unavailable"/>
+ *     <enumeration value="missing"/>
+ *   </restriction>
+ * </simpleType>
+ * 
+ * + */ +@XmlType(name = "NullType", namespace = "http://www.opengis.net/gml") +@XmlEnum +public enum NullType { + + @XmlEnumValue("inapplicable") + INAPPLICABLE("inapplicable"), + @XmlEnumValue("unknown") + UNKNOWN("unknown"), + @XmlEnumValue("unavailable") + UNAVAILABLE("unavailable"), + @XmlEnumValue("missing") + MISSING("missing"); + private final String value; + + NullType(String v) { + value = v; + } + + public String value() { + return value; + } + + public static NullType fromValue(String v) { + for (NullType c: NullType.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ObjectFactory.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ObjectFactory.java new file mode 100644 index 0000000..e694c16 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ObjectFactory.java @@ -0,0 +1,2294 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the org.opengeoportal.ogc.wmc.jaxb package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _OuterBoundaryIs_QNAME = new QName("http://www.opengis.net/gml", "outerBoundaryIs"); + private final static QName _MultiLineString_QNAME = new QName("http://www.opengis.net/gml", "MultiLineString"); + private final static QName _Resource_QNAME = new QName("http://www.w3.org/1999/xlink", "resource"); + private final static QName _MultiExtentOf_QNAME = new QName("http://www.opengis.net/gml", "multiExtentOf"); + private final static QName _MultiGeometryProperty_QNAME = new QName("http://www.opengis.net/gml", "multiGeometryProperty"); + private final static QName _ComparisonOps_QNAME = new QName("http://www.opengis.net/ogc", "comparisonOps"); + private final static QName _MultiCenterOf_QNAME = new QName("http://www.opengis.net/gml", "multiCenterOf"); + private final static QName _MaxScaleDenominator_QNAME = new QName("http://www.opengis.net/sld", "MaxScaleDenominator"); + private final static QName _FeatureCollection_QNAME = new QName("http://www.opengis.net/gml", "_FeatureCollection"); + private final static QName _BoundedBy_QNAME = new QName("http://www.opengis.net/gml", "boundedBy"); + private final static QName _LinearRing_QNAME = new QName("http://www.opengis.net/gml", "LinearRing"); + private final static QName _InnerBoundaryIs_QNAME = new QName("http://www.opengis.net/gml", "innerBoundaryIs"); + private final static QName _ViewContext_QNAME = new QName("http://www.opengis.net/context", "ViewContext"); + private final static QName _sldNameElementFactory_QNAME = new QName("http://www.opengis.net/sld", "Name"); + private final static QName _Equals_QNAME = new QName("http://www.opengis.net/ogc", "Equals"); + private final static QName _Location_QNAME = new QName("http://www.opengis.net/gml", "location"); + private final static QName _ViewContextCollection_QNAME = new QName("http://www.opengis.net/context", "ViewContextCollection"); + private final static QName _Function_QNAME = new QName("http://www.opengis.net/ogc", "Function"); + private final static QName _RasterSymbolizer_QNAME = new QName("http://www.opengis.net/sld", "RasterSymbolizer"); + private final static QName _Description_QNAME = new QName("http://www.opengis.net/gml", "description"); + private final static QName _Disjoint_QNAME = new QName("http://www.opengis.net/ogc", "Disjoint"); + private final static QName _Box_QNAME = new QName("http://www.opengis.net/gml", "Box"); + private final static QName _Mul_QNAME = new QName("http://www.opengis.net/ogc", "Mul"); + private final static QName _Symbolizer_QNAME = new QName("http://www.opengis.net/sld", "Symbolizer"); + private final static QName _Size_QNAME = new QName("http://www.opengis.net/sld", "Size"); + private final static QName _SemanticTypeIdentifier_QNAME = new QName("http://www.opengis.net/sld", "SemanticTypeIdentifier"); + private final static QName _FeatureTypeName_QNAME = new QName("http://www.opengis.net/sld", "FeatureTypeName"); + private final static QName _Overlaps_QNAME = new QName("http://www.opengis.net/ogc", "Overlaps"); + private final static QName _PolygonSymbolizer_QNAME = new QName("http://www.opengis.net/sld", "PolygonSymbolizer"); + private final static QName _Feature_QNAME = new QName("http://www.opengis.net/gml", "_Feature"); + private final static QName _Locator_QNAME = new QName("http://www.w3.org/1999/xlink", "locator"); + private final static QName _Crosses_QNAME = new QName("http://www.opengis.net/ogc", "Crosses"); + private final static QName _PropertyIsLessThan_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsLessThan"); + private final static QName _FeatureId_QNAME = new QName("http://www.opengis.net/ogc", "FeatureId"); + private final static QName _PropertyIsGreaterThanOrEqualTo_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsGreaterThanOrEqualTo"); + private final static QName _CenterOf_QNAME = new QName("http://www.opengis.net/gml", "centerOf"); + private final static QName _Coverage_QNAME = new QName("http://www.opengis.net/gml", "coverage"); + private final static QName _Intersects_QNAME = new QName("http://www.opengis.net/ogc", "Intersects"); + private final static QName _TextSymbolizer_QNAME = new QName("http://www.opengis.net/sld", "TextSymbolizer"); + private final static QName _Filter_QNAME = new QName("http://www.opengis.net/ogc", "Filter"); + private final static QName _MultiPosition_QNAME = new QName("http://www.opengis.net/gml", "multiPosition"); + private final static QName _Geometry_QNAME = new QName("http://www.opengis.net/gml", "_Geometry"); + private final static QName _MultiPolygon_QNAME = new QName("http://www.opengis.net/gml", "MultiPolygon"); + private final static QName _MultiPolygonProperty_QNAME = new QName("http://www.opengis.net/gml", "multiPolygonProperty"); + private final static QName _RedChannel_QNAME = new QName("http://www.opengis.net/sld", "RedChannel"); + private final static QName _PolygonMember_QNAME = new QName("http://www.opengis.net/gml", "polygonMember"); + private final static QName _MultiGeometry_QNAME = new QName("http://www.opengis.net/gml", "MultiGeometry"); + private final static QName _Coordinates_QNAME = new QName("http://www.opengis.net/gml", "coordinates"); + private final static QName _GrayChannel_QNAME = new QName("http://www.opengis.net/sld", "GrayChannel"); + private final static QName _MultiPoint_QNAME = new QName("http://www.opengis.net/gml", "MultiPoint"); + private final static QName _Value_QNAME = new QName("http://www.opengis.net/sld", "Value"); + private final static QName _Name_QNAME = new QName("http://www.opengis.net/gml", "name"); + private final static QName _EdgeOf_QNAME = new QName("http://www.opengis.net/gml", "edgeOf"); + private final static QName _MultiCenterLineOf_QNAME = new QName("http://www.opengis.net/gml", "multiCenterLineOf"); + private final static QName _PerpendicularOffset_QNAME = new QName("http://www.opengis.net/sld", "PerpendicularOffset"); + private final static QName _Sub_QNAME = new QName("http://www.opengis.net/ogc", "Sub"); + private final static QName _PropertyIsGreaterThan_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsGreaterThan"); + private final static QName _PropertyIsNotEqualTo_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsNotEqualTo"); + private final static QName _PointProperty_QNAME = new QName("http://www.opengis.net/gml", "pointProperty"); + private final static QName _GeometryMember_QNAME = new QName("http://www.opengis.net/gml", "geometryMember"); + private final static QName _PropertyIsLessThanOrEqualTo_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsLessThanOrEqualTo"); + private final static QName _SpatialOps_QNAME = new QName("http://www.opengis.net/ogc", "spatialOps"); + private final static QName _MultiPointProperty_QNAME = new QName("http://www.opengis.net/gml", "multiPointProperty"); + private final static QName _ReliefFactor_QNAME = new QName("http://www.opengis.net/sld", "ReliefFactor"); + private final static QName _LogicOps_QNAME = new QName("http://www.opengis.net/ogc", "logicOps"); + private final static QName _PropertyIsLike_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsLike"); + private final static QName _MultiEdgeOf_QNAME = new QName("http://www.opengis.net/gml", "multiEdgeOf"); + private final static QName _Contains_QNAME = new QName("http://www.opengis.net/ogc", "Contains"); + private final static QName _PropertyIsEqualTo_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsEqualTo"); + private final static QName _LineStringMember_QNAME = new QName("http://www.opengis.net/gml", "lineStringMember"); + private final static QName _Label_QNAME = new QName("http://www.opengis.net/sld", "Label"); + private final static QName _Abstract_QNAME = new QName("http://www.opengis.net/sld", "Abstract"); + private final static QName _MultiLocation_QNAME = new QName("http://www.opengis.net/gml", "multiLocation"); + private final static QName _LineStringProperty_QNAME = new QName("http://www.opengis.net/gml", "lineStringProperty"); + private final static QName _Radius_QNAME = new QName("http://www.opengis.net/sld", "Radius"); + private final static QName _GreenChannel_QNAME = new QName("http://www.opengis.net/sld", "GreenChannel"); + private final static QName _MinScaleDenominator_QNAME = new QName("http://www.opengis.net/sld", "MinScaleDenominator"); + private final static QName _MultiLineStringProperty_QNAME = new QName("http://www.opengis.net/gml", "multiLineStringProperty"); + private final static QName _BBOX_QNAME = new QName("http://www.opengis.net/ogc", "BBOX"); + private final static QName _Point_QNAME = new QName("http://www.opengis.net/gml", "Point"); + private final static QName _sldTitleElementFactory_QNAME = new QName("http://www.opengis.net/sld", "Title"); + private final static QName _Coord_QNAME = new QName("http://www.opengis.net/gml", "coord"); + private final static QName _Not_QNAME = new QName("http://www.opengis.net/ogc", "Not"); + private final static QName _Title_QNAME = new QName("http://www.w3.org/1999/xlink", "title"); + private final static QName _BrightnessOnly_QNAME = new QName("http://www.opengis.net/sld", "BrightnessOnly"); + private final static QName _gmlAbstractGeometryPropertyElementFactory_QNAME = new QName("http://www.opengis.net/gml", "_geometryProperty"); + private final static QName _MultiCoverage_QNAME = new QName("http://www.opengis.net/gml", "multiCoverage"); + private final static QName _PolygonProperty_QNAME = new QName("http://www.opengis.net/gml", "polygonProperty"); + private final static QName _FeatureMember_QNAME = new QName("http://www.opengis.net/gml", "featureMember"); + private final static QName _LineString_QNAME = new QName("http://www.opengis.net/gml", "LineString"); + private final static QName _SourceChannelName_QNAME = new QName("http://www.opengis.net/sld", "SourceChannelName"); + private final static QName _PointSymbolizer_QNAME = new QName("http://www.opengis.net/sld", "PointSymbolizer"); + private final static QName _DisplacementY_QNAME = new QName("http://www.opengis.net/sld", "DisplacementY"); + private final static QName _DisplacementX_QNAME = new QName("http://www.opengis.net/sld", "DisplacementX"); + private final static QName _Add_QNAME = new QName("http://www.opengis.net/ogc", "Add"); + private final static QName _Beyond_QNAME = new QName("http://www.opengis.net/ogc", "Beyond"); + private final static QName _GammaValue_QNAME = new QName("http://www.opengis.net/sld", "GammaValue"); + private final static QName _DWithin_QNAME = new QName("http://www.opengis.net/ogc", "DWithin"); + private final static QName _GeometryCollection_QNAME = new QName("http://www.opengis.net/gml", "_GeometryCollection"); + private final static QName _WellKnownName_QNAME = new QName("http://www.opengis.net/sld", "WellKnownName"); + private final static QName _Expression_QNAME = new QName("http://www.opengis.net/ogc", "expression"); + private final static QName _BlueChannel_QNAME = new QName("http://www.opengis.net/sld", "BlueChannel"); + private final static QName _LineSymbolizer_QNAME = new QName("http://www.opengis.net/sld", "LineSymbolizer"); + private final static QName _Polygon_QNAME = new QName("http://www.opengis.net/gml", "Polygon"); + private final static QName _Format_QNAME = new QName("http://www.opengis.net/sld", "Format"); + private final static QName _Service_QNAME = new QName("http://www.opengis.net/sld", "Service"); + private final static QName _Within_QNAME = new QName("http://www.opengis.net/ogc", "Within"); + private final static QName _GeometryProperty_QNAME = new QName("http://www.opengis.net/gml", "geometryProperty"); + private final static QName _IsDefault_QNAME = new QName("http://www.opengis.net/sld", "IsDefault"); + private final static QName _PointMember_QNAME = new QName("http://www.opengis.net/gml", "pointMember"); + private final static QName _AnchorPointY_QNAME = new QName("http://www.opengis.net/sld", "AnchorPointY"); + private final static QName _Or_QNAME = new QName("http://www.opengis.net/ogc", "Or"); + private final static QName _Rotation_QNAME = new QName("http://www.opengis.net/sld", "Rotation"); + private final static QName _AnchorPointX_QNAME = new QName("http://www.opengis.net/sld", "AnchorPointX"); + private final static QName _PropertyIsBetween_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsBetween"); + private final static QName _Position_QNAME = new QName("http://www.opengis.net/gml", "position"); + private final static QName _Div_QNAME = new QName("http://www.opengis.net/ogc", "Div"); + private final static QName _CenterLineOf_QNAME = new QName("http://www.opengis.net/gml", "centerLineOf"); + private final static QName _And_QNAME = new QName("http://www.opengis.net/ogc", "And"); + private final static QName _PropertyIsNull_QNAME = new QName("http://www.opengis.net/ogc", "PropertyIsNull"); + private final static QName _Opacity_QNAME = new QName("http://www.opengis.net/sld", "Opacity"); + private final static QName _Touches_QNAME = new QName("http://www.opengis.net/ogc", "Touches"); + private final static QName _Literal_QNAME = new QName("http://www.opengis.net/ogc", "Literal"); + private final static QName _ExtentOf_QNAME = new QName("http://www.opengis.net/gml", "extentOf"); + private final static QName _Arc_QNAME = new QName("http://www.w3.org/1999/xlink", "arc"); + private final static QName _PropertyName_QNAME = new QName("http://www.opengis.net/ogc", "PropertyName"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.opengeoportal.ogc.wmc.jaxb + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link Extent } + * + */ + public Extent createExtent() { + return new Extent(); + } + + /** + * Create an instance of {@link BinaryLogicOpType } + * + */ + public BinaryLogicOpType createBinaryLogicOpType() { + return new BinaryLogicOpType(); + } + + /** + * Create an instance of {@link LayerFeatureConstraints } + * + */ + public LayerFeatureConstraints createLayerFeatureConstraints() { + return new LayerFeatureConstraints(); + } + + /** + * Create an instance of {@link NamedLayer } + * + */ + public NamedLayer createNamedLayer() { + return new NamedLayer(); + } + + /** + * Create an instance of {@link MultiPointType } + * + */ + public MultiPointType createMultiPointType() { + return new MultiPointType(); + } + + /** + * Create an instance of {@link Displacement } + * + */ + public Displacement createDisplacement() { + return new Displacement(); + } + + /** + * Create an instance of {@link PropertyIsNullType } + * + */ + public PropertyIsNullType createPropertyIsNullType() { + return new PropertyIsNullType(); + } + + /** + * Create an instance of {@link DistanceBufferType } + * + */ + public DistanceBufferType createDistanceBufferType() { + return new DistanceBufferType(); + } + + /** + * Create an instance of {@link FeatureTypeConstraint } + * + */ + public FeatureTypeConstraint createFeatureTypeConstraint() { + return new FeatureTypeConstraint(); + } + + /** + * Create an instance of {@link BinarySpatialOpType } + * + */ + public BinarySpatialOpType createBinarySpatialOpType() { + return new BinarySpatialOpType(); + } + + /** + * Create an instance of {@link AddressType } + * + */ + public AddressType createAddressType() { + return new AddressType(); + } + + /** + * Create an instance of {@link LinearRingMemberType } + * + */ + public LinearRingMemberType createLinearRingMemberType() { + return new LinearRingMemberType(); + } + + /** + * Create an instance of {@link GraphicFill } + * + */ + public GraphicFill createGraphicFill() { + return new GraphicFill(); + } + + /** + * Create an instance of {@link RemoteOWS } + * + */ + public RemoteOWS createRemoteOWS() { + return new RemoteOWS(); + } + + /** + * Create an instance of {@link ServerType } + * + */ + public ServerType createServerType() { + return new ServerType(); + } + + /** + * Create an instance of {@link CoordType } + * + */ + public CoordType createCoordType() { + return new CoordType(); + } + + /** + * Create an instance of {@link UpperBoundaryType } + * + */ + public UpperBoundaryType createUpperBoundaryType() { + return new UpperBoundaryType(); + } + + /** + * Create an instance of {@link ContactInformationType } + * + */ + public ContactInformationType createContactInformationType() { + return new ContactInformationType(); + } + + /** + * Create an instance of {@link ContrastEnhancement } + * + */ + public ContrastEnhancement createContrastEnhancement() { + return new ContrastEnhancement(); + } + + /** + * Create an instance of {@link ColorMap } + * + */ + public ColorMap createColorMap() { + return new ColorMap(); + } + + /** + * Create an instance of {@link BoxType } + * + */ + public BoxType createBoxType() { + return new BoxType(); + } + + /** + * Create an instance of {@link WindowType } + * + */ + public WindowType createWindowType() { + return new WindowType(); + } + + /** + * Create an instance of {@link NamedStyle } + * + */ + public NamedStyle createNamedStyle() { + return new NamedStyle(); + } + + /** + * Create an instance of {@link PointType } + * + */ + public PointType createPointType() { + return new PointType(); + } + + /** + * Create an instance of {@link PolygonPropertyType } + * + */ + public PolygonPropertyType createPolygonPropertyType() { + return new PolygonPropertyType(); + } + + /** + * Create an instance of {@link RasterSymbolizer } + * + */ + public RasterSymbolizer createRasterSymbolizer() { + return new RasterSymbolizer(); + } + + /** + * Create an instance of {@link ViewContextCollectionType } + * + */ + public ViewContextCollectionType createViewContextCollectionType() { + return new ViewContextCollectionType(); + } + + /** + * Create an instance of {@link FilterType } + * + */ + public FilterType createFilterType() { + return new FilterType(); + } + + /** + * Create an instance of {@link PropertyIsLikeType } + * + */ + public PropertyIsLikeType createPropertyIsLikeType() { + return new PropertyIsLikeType(); + } + + /** + * Create an instance of {@link KeywordListType } + * + */ + public KeywordListType createKeywordListType() { + return new KeywordListType(); + } + + /** + * Create an instance of {@link LATESTONTOP } + * + */ + public LATESTONTOP createLATESTONTOP() { + return new LATESTONTOP(); + } + + /** + * Create an instance of {@link AVERAGE } + * + */ + public AVERAGE createAVERAGE() { + return new AVERAGE(); + } + + /** + * Create an instance of {@link PointSymbolizer } + * + */ + public PointSymbolizer createPointSymbolizer() { + return new PointSymbolizer(); + } + + /** + * Create an instance of {@link FunctionType } + * + */ + public FunctionType createFunctionType() { + return new FunctionType(); + } + + /** + * Create an instance of {@link Simple } + * + */ + public Simple createSimple() { + return new Simple(); + } + + /** + * Create an instance of {@link GeometryPropertyType } + * + */ + public GeometryPropertyType createGeometryPropertyType() { + return new GeometryPropertyType(); + } + + /** + * Create an instance of {@link LineStringMemberType } + * + */ + public LineStringMemberType createLineStringMemberType() { + return new LineStringMemberType(); + } + + /** + * Create an instance of {@link LineSymbolizer } + * + */ + public LineSymbolizer createLineSymbolizer() { + return new LineSymbolizer(); + } + + /** + * Create an instance of {@link FeatureIdType } + * + */ + public FeatureIdType createFeatureIdType() { + return new FeatureIdType(); + } + + /** + * Create an instance of {@link MultiPolygonPropertyType } + * + */ + public MultiPolygonPropertyType createMultiPolygonPropertyType() { + return new MultiPolygonPropertyType(); + } + + /** + * Create an instance of {@link LayerType } + * + */ + public LayerType createLayerType() { + return new LayerType(); + } + + /** + * Create an instance of {@link AnchorPoint } + * + */ + public AnchorPoint createAnchorPoint() { + return new AnchorPoint(); + } + + /** + * Create an instance of {@link MultiPolygonType } + * + */ + public MultiPolygonType createMultiPolygonType() { + return new MultiPolygonType(); + } + + /** + * Create an instance of {@link BoundingShapeType } + * + */ + public BoundingShapeType createBoundingShapeType() { + return new BoundingShapeType(); + } + + /** + * Create an instance of {@link ContextURLType } + * + */ + public ContextURLType createContextURLType() { + return new ContextURLType(); + } + + /** + * Create an instance of {@link MultiLineStringType } + * + */ + public MultiLineStringType createMultiLineStringType() { + return new MultiLineStringType(); + } + + /** + * Create an instance of {@link PropertyNameType } + * + */ + public PropertyNameType createPropertyNameType() { + return new PropertyNameType(); + } + + /** + * Create an instance of {@link BBOXType } + * + */ + public BBOXType createBBOXType() { + return new BBOXType(); + } + + /** + * Create an instance of {@link GeometryCollectionType } + * + */ + public GeometryCollectionType createGeometryCollectionType() { + return new GeometryCollectionType(); + } + + /** + * Create an instance of {@link Extended } + * + */ + public Extended createExtended() { + return new Extended(); + } + + /** + * Create an instance of {@link StyleListType } + * + */ + public StyleListType createStyleListType() { + return new StyleListType(); + } + + /** + * Create an instance of {@link Rule } + * + */ + public Rule createRule() { + return new Rule(); + } + + /** + * Create an instance of {@link DistanceType } + * + */ + public DistanceType createDistanceType() { + return new DistanceType(); + } + + /** + * Create an instance of {@link ShadedRelief } + * + */ + public ShadedRelief createShadedRelief() { + return new ShadedRelief(); + } + + /** + * Create an instance of {@link UserStyle } + * + */ + public UserStyle createUserStyle() { + return new UserStyle(); + } + + /** + * Create an instance of {@link ViewContextType } + * + */ + public ViewContextType createViewContextType() { + return new ViewContextType(); + } + + /** + * Create an instance of {@link GraphicStroke } + * + */ + public GraphicStroke createGraphicStroke() { + return new GraphicStroke(); + } + + /** + * Create an instance of {@link ColorMapEntry } + * + */ + public ColorMapEntry createColorMapEntry() { + return new ColorMapEntry(); + } + + /** + * Create an instance of {@link StyleType } + * + */ + public StyleType createStyleType() { + return new StyleType(); + } + + /** + * Create an instance of {@link PointPlacement } + * + */ + public PointPlacement createPointPlacement() { + return new PointPlacement(); + } + + /** + * Create an instance of {@link OverlapBehavior } + * + */ + public OverlapBehavior createOverlapBehavior() { + return new OverlapBehavior(); + } + + /** + * Create an instance of {@link Font } + * + */ + public Font createFont() { + return new Font(); + } + + /** + * Create an instance of {@link LocatorType } + * + */ + public LocatorType createLocatorType() { + return new LocatorType(); + } + + /** + * Create an instance of {@link PropertyIsBetweenType } + * + */ + public PropertyIsBetweenType createPropertyIsBetweenType() { + return new PropertyIsBetweenType(); + } + + /** + * Create an instance of {@link PolygonType } + * + */ + public PolygonType createPolygonType() { + return new PolygonType(); + } + + /** + * Create an instance of {@link ViewContextReferenceType } + * + */ + public ViewContextReferenceType createViewContextReferenceType() { + return new ViewContextReferenceType(); + } + + /** + * Create an instance of {@link BinaryComparisonOpType } + * + */ + public BinaryComparisonOpType createBinaryComparisonOpType() { + return new BinaryComparisonOpType(); + } + + /** + * Create an instance of {@link BoundingBoxType } + * + */ + public BoundingBoxType createBoundingBoxType() { + return new BoundingBoxType(); + } + + /** + * Create an instance of {@link LegendGraphic } + * + */ + public LegendGraphic createLegendGraphic() { + return new LegendGraphic(); + } + + /** + * Create an instance of {@link TextSymbolizer } + * + */ + public TextSymbolizer createTextSymbolizer() { + return new TextSymbolizer(); + } + + /** + * Create an instance of {@link MultiPointPropertyType } + * + */ + public MultiPointPropertyType createMultiPointPropertyType() { + return new MultiPointPropertyType(); + } + + /** + * Create an instance of {@link ExternalGraphic } + * + */ + public ExternalGraphic createExternalGraphic() { + return new ExternalGraphic(); + } + + /** + * Create an instance of {@link DimensionListType } + * + */ + public DimensionListType createDimensionListType() { + return new DimensionListType(); + } + + /** + * Create an instance of {@link Mark } + * + */ + public Mark createMark() { + return new Mark(); + } + + /** + * Create an instance of {@link LabelPlacement } + * + */ + public LabelPlacement createLabelPlacement() { + return new LabelPlacement(); + } + + /** + * Create an instance of {@link Fill } + * + */ + public Fill createFill() { + return new Fill(); + } + + /** + * Create an instance of {@link LineStringPropertyType } + * + */ + public LineStringPropertyType createLineStringPropertyType() { + return new LineStringPropertyType(); + } + + /** + * Create an instance of {@link UnaryLogicOpType } + * + */ + public UnaryLogicOpType createUnaryLogicOpType() { + return new UnaryLogicOpType(); + } + + /** + * Create an instance of {@link URLType } + * + */ + public URLType createURLType() { + return new URLType(); + } + + /** + * Create an instance of {@link ImageOutline } + * + */ + public ImageOutline createImageOutline() { + return new ImageOutline(); + } + + /** + * Create an instance of {@link FeatureAssociationType } + * + */ + public FeatureAssociationType createFeatureAssociationType() { + return new FeatureAssociationType(); + } + + /** + * Create an instance of {@link SelectedChannelType } + * + */ + public SelectedChannelType createSelectedChannelType() { + return new SelectedChannelType(); + } + + /** + * Create an instance of {@link BinaryOperatorType } + * + */ + public BinaryOperatorType createBinaryOperatorType() { + return new BinaryOperatorType(); + } + + /** + * Create an instance of {@link LineStringType } + * + */ + public LineStringType createLineStringType() { + return new LineStringType(); + } + + /** + * Create an instance of {@link Stroke } + * + */ + public Stroke createStroke() { + return new Stroke(); + } + + /** + * Create an instance of {@link FormatListType } + * + */ + public FormatListType createFormatListType() { + return new FormatListType(); + } + + /** + * Create an instance of {@link ElseFilter } + * + */ + public ElseFilter createElseFilter() { + return new ElseFilter(); + } + + /** + * Create an instance of {@link MultiGeometryPropertyType } + * + */ + public MultiGeometryPropertyType createMultiGeometryPropertyType() { + return new MultiGeometryPropertyType(); + } + + /** + * Create an instance of {@link Normalize } + * + */ + public Normalize createNormalize() { + return new Normalize(); + } + + /** + * Create an instance of {@link GeneralType } + * + */ + public GeneralType createGeneralType() { + return new GeneralType(); + } + + /** + * Create an instance of {@link FeatureTypeStyle } + * + */ + public FeatureTypeStyle createFeatureTypeStyle() { + return new FeatureTypeStyle(); + } + + /** + * Create an instance of {@link ParameterValueType } + * + */ + public ParameterValueType createParameterValueType() { + return new ParameterValueType(); + } + + /** + * Create an instance of {@link SLDType } + * + */ + public SLDType createSLDType() { + return new SLDType(); + } + + /** + * Create an instance of {@link GeometryAssociationType } + * + */ + public GeometryAssociationType createGeometryAssociationType() { + return new GeometryAssociationType(); + } + + /** + * Create an instance of {@link Histogram } + * + */ + public Histogram createHistogram() { + return new Histogram(); + } + + /** + * Create an instance of {@link OnlineResourceType } + * + */ + public OnlineResourceType createOnlineResourceType() { + return new OnlineResourceType(); + } + + /** + * Create an instance of {@link LayerListType } + * + */ + public LayerListType createLayerListType() { + return new LayerListType(); + } + + /** + * Create an instance of {@link Graphic } + * + */ + public Graphic createGraphic() { + return new Graphic(); + } + + /** + * Create an instance of {@link LinePlacement } + * + */ + public LinePlacement createLinePlacement() { + return new LinePlacement(); + } + + /** + * Create an instance of {@link FormatType } + * + */ + public FormatType createFormatType() { + return new FormatType(); + } + + /** + * Create an instance of {@link ChannelSelection } + * + */ + public ChannelSelection createChannelSelection() { + return new ChannelSelection(); + } + + /** + * Create an instance of {@link ResourceType } + * + */ + public ResourceType createResourceType() { + return new ResourceType(); + } + + /** + * Create an instance of {@link LiteralType } + * + */ + public LiteralType createLiteralType() { + return new LiteralType(); + } + + /** + * Create an instance of {@link TitleEltType } + * + */ + public TitleEltType createTitleEltType() { + return new TitleEltType(); + } + + /** + * Create an instance of {@link ArcType } + * + */ + public ArcType createArcType() { + return new ArcType(); + } + + /** + * Create an instance of {@link PolygonSymbolizer } + * + */ + public PolygonSymbolizer createPolygonSymbolizer() { + return new PolygonSymbolizer(); + } + + /** + * Create an instance of {@link LinearRingType } + * + */ + public LinearRingType createLinearRingType() { + return new LinearRingType(); + } + + /** + * Create an instance of {@link RANDOM } + * + */ + public RANDOM createRANDOM() { + return new RANDOM(); + } + + /** + * Create an instance of {@link LowerBoundaryType } + * + */ + public LowerBoundaryType createLowerBoundaryType() { + return new LowerBoundaryType(); + } + + /** + * Create an instance of {@link Geometry } + * + */ + public Geometry createGeometry() { + return new Geometry(); + } + + /** + * Create an instance of {@link CssParameter } + * + */ + public CssParameter createCssParameter() { + return new CssParameter(); + } + + /** + * Create an instance of {@link MultiLineStringPropertyType } + * + */ + public MultiLineStringPropertyType createMultiLineStringPropertyType() { + return new MultiLineStringPropertyType(); + } + + /** + * Create an instance of {@link PolygonMemberType } + * + */ + public PolygonMemberType createPolygonMemberType() { + return new PolygonMemberType(); + } + + /** + * Create an instance of {@link CoordinatesType } + * + */ + public CoordinatesType createCoordinatesType() { + return new CoordinatesType(); + } + + /** + * Create an instance of {@link ContactPersonPrimaryType } + * + */ + public ContactPersonPrimaryType createContactPersonPrimaryType() { + return new ContactPersonPrimaryType(); + } + + /** + * Create an instance of {@link StyledLayerDescriptor } + * + */ + public StyledLayerDescriptor createStyledLayerDescriptor() { + return new StyledLayerDescriptor(); + } + + /** + * Create an instance of {@link ExtensionType } + * + */ + public ExtensionType createExtensionType() { + return new ExtensionType(); + } + + /** + * Create an instance of {@link EARLIESTONTOP } + * + */ + public EARLIESTONTOP createEARLIESTONTOP() { + return new EARLIESTONTOP(); + } + + /** + * Create an instance of {@link Halo } + * + */ + public Halo createHalo() { + return new Halo(); + } + + /** + * Create an instance of {@link DimensionType } + * + */ + public DimensionType createDimensionType() { + return new DimensionType(); + } + + /** + * Create an instance of {@link UserLayer } + * + */ + public UserLayer createUserLayer() { + return new UserLayer(); + } + + /** + * Create an instance of {@link OnlineResource } + * + */ + public OnlineResource createOnlineResource() { + return new OnlineResource(); + } + + /** + * Create an instance of {@link PointPropertyType } + * + */ + public PointPropertyType createPointPropertyType() { + return new PointPropertyType(); + } + + /** + * Create an instance of {@link PointMemberType } + * + */ + public PointMemberType createPointMemberType() { + return new PointMemberType(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LinearRingMemberType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "outerBoundaryIs") + public JAXBElement createOuterBoundaryIs(LinearRingMemberType value) { + return new JAXBElement(_OuterBoundaryIs_QNAME, LinearRingMemberType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiLineStringType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiLineString", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createMultiLineString(MultiLineStringType value) { + return new JAXBElement(_MultiLineString_QNAME, MultiLineStringType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ResourceType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.w3.org/1999/xlink", name = "resource") + public JAXBElement createResource(ResourceType value) { + return new JAXBElement(_Resource_QNAME, ResourceType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPolygonPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiExtentOf", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "multiPolygonProperty") + public JAXBElement createMultiExtentOf(MultiPolygonPropertyType value) { + return new JAXBElement(_MultiExtentOf_QNAME, MultiPolygonPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiGeometryPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiGeometryProperty", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_geometryProperty") + public JAXBElement createMultiGeometryProperty(MultiGeometryPropertyType value) { + return new JAXBElement(_MultiGeometryProperty_QNAME, MultiGeometryPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ComparisonOpsType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "comparisonOps") + public JAXBElement createComparisonOps(ComparisonOpsType value) { + return new JAXBElement(_ComparisonOps_QNAME, ComparisonOpsType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPointPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiCenterOf", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "multiPointProperty") + public JAXBElement createMultiCenterOf(MultiPointPropertyType value) { + return new JAXBElement(_MultiCenterOf_QNAME, MultiPointPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Double }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "MaxScaleDenominator") + public JAXBElement createMaxScaleDenominator(Double value) { + return new JAXBElement(_MaxScaleDenominator_QNAME, Double.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link AbstractFeatureCollectionType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "_FeatureCollection", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Feature") + public JAXBElement createFeatureCollection(AbstractFeatureCollectionType value) { + return new JAXBElement(_FeatureCollection_QNAME, AbstractFeatureCollectionType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BoundingShapeType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "boundedBy") + public JAXBElement createBoundedBy(BoundingShapeType value) { + return new JAXBElement(_BoundedBy_QNAME, BoundingShapeType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LinearRingType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "LinearRing", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createLinearRing(LinearRingType value) { + return new JAXBElement(_LinearRing_QNAME, LinearRingType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LinearRingMemberType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "innerBoundaryIs") + public JAXBElement createInnerBoundaryIs(LinearRingMemberType value) { + return new JAXBElement(_InnerBoundaryIs_QNAME, LinearRingMemberType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ViewContextType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/context", name = "ViewContext") + public JAXBElement createViewContext(ViewContextType value) { + return new JAXBElement(_ViewContext_QNAME, ViewContextType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Name") + public JAXBElement createsldNameElementFactory(String value) { + return new JAXBElement(_sldNameElementFactory_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Equals", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createEquals(BinarySpatialOpType value) { + return new JAXBElement(_Equals_QNAME, BinarySpatialOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PointPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "location", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "pointProperty") + public JAXBElement createLocation(PointPropertyType value) { + return new JAXBElement(_Location_QNAME, PointPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ViewContextCollectionType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/context", name = "ViewContextCollection") + public JAXBElement createViewContextCollection(ViewContextCollectionType value) { + return new JAXBElement(_ViewContextCollection_QNAME, ViewContextCollectionType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link FunctionType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Function", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "expression") + public JAXBElement createFunction(FunctionType value) { + return new JAXBElement(_Function_QNAME, FunctionType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link RasterSymbolizer }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "RasterSymbolizer", substitutionHeadNamespace = "http://www.opengis.net/sld", substitutionHeadName = "Symbolizer") + public JAXBElement createRasterSymbolizer(RasterSymbolizer value) { + return new JAXBElement(_RasterSymbolizer_QNAME, RasterSymbolizer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "description") + public JAXBElement createDescription(String value) { + return new JAXBElement(_Description_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Disjoint", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createDisjoint(BinarySpatialOpType value) { + return new JAXBElement(_Disjoint_QNAME, BinarySpatialOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BoxType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "Box") + public JAXBElement createBox(BoxType value) { + return new JAXBElement(_Box_QNAME, BoxType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Mul", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "expression") + public JAXBElement createMul(BinaryOperatorType value) { + return new JAXBElement(_Mul_QNAME, BinaryOperatorType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SymbolizerType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Symbolizer") + public JAXBElement createSymbolizer(SymbolizerType value) { + return new JAXBElement(_Symbolizer_QNAME, SymbolizerType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Size") + public JAXBElement createSize(ParameterValueType value) { + return new JAXBElement(_Size_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "SemanticTypeIdentifier") + public JAXBElement createSemanticTypeIdentifier(String value) { + return new JAXBElement(_SemanticTypeIdentifier_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "FeatureTypeName") + public JAXBElement createFeatureTypeName(String value) { + return new JAXBElement(_FeatureTypeName_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Overlaps", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createOverlaps(BinarySpatialOpType value) { + return new JAXBElement(_Overlaps_QNAME, BinarySpatialOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PolygonSymbolizer }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "PolygonSymbolizer", substitutionHeadNamespace = "http://www.opengis.net/sld", substitutionHeadName = "Symbolizer") + public JAXBElement createPolygonSymbolizer(PolygonSymbolizer value) { + return new JAXBElement(_PolygonSymbolizer_QNAME, PolygonSymbolizer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link AbstractFeatureType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "_Feature") + public JAXBElement createFeature(AbstractFeatureType value) { + return new JAXBElement(_Feature_QNAME, AbstractFeatureType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LocatorType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.w3.org/1999/xlink", name = "locator") + public JAXBElement createLocator(LocatorType value) { + return new JAXBElement(_Locator_QNAME, LocatorType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Crosses", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createCrosses(BinarySpatialOpType value) { + return new JAXBElement(_Crosses_QNAME, BinarySpatialOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsLessThan", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsLessThan(BinaryComparisonOpType value) { + return new JAXBElement(_PropertyIsLessThan_QNAME, BinaryComparisonOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link FeatureIdType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "FeatureId") + public JAXBElement createFeatureId(FeatureIdType value) { + return new JAXBElement(_FeatureId_QNAME, FeatureIdType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsGreaterThanOrEqualTo", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsGreaterThanOrEqualTo(BinaryComparisonOpType value) { + return new JAXBElement(_PropertyIsGreaterThanOrEqualTo_QNAME, BinaryComparisonOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PointPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "centerOf", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "pointProperty") + public JAXBElement createCenterOf(PointPropertyType value) { + return new JAXBElement(_CenterOf_QNAME, PointPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PolygonPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "coverage", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "polygonProperty") + public JAXBElement createCoverage(PolygonPropertyType value) { + return new JAXBElement(_Coverage_QNAME, PolygonPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Intersects", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createIntersects(BinarySpatialOpType value) { + return new JAXBElement(_Intersects_QNAME, BinarySpatialOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TextSymbolizer }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "TextSymbolizer", substitutionHeadNamespace = "http://www.opengis.net/sld", substitutionHeadName = "Symbolizer") + public JAXBElement createTextSymbolizer(TextSymbolizer value) { + return new JAXBElement(_TextSymbolizer_QNAME, TextSymbolizer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link FilterType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Filter") + public JAXBElement createFilter(FilterType value) { + return new JAXBElement(_Filter_QNAME, FilterType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPointPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiPosition", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "multiPointProperty") + public JAXBElement createMultiPosition(MultiPointPropertyType value) { + return new JAXBElement(_MultiPosition_QNAME, MultiPointPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link AbstractGeometryType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "_Geometry") + public JAXBElement createGeometry(AbstractGeometryType value) { + return new JAXBElement(_Geometry_QNAME, AbstractGeometryType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPolygonType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiPolygon", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createMultiPolygon(MultiPolygonType value) { + return new JAXBElement(_MultiPolygon_QNAME, MultiPolygonType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPolygonPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiPolygonProperty", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_geometryProperty") + public JAXBElement createMultiPolygonProperty(MultiPolygonPropertyType value) { + return new JAXBElement(_MultiPolygonProperty_QNAME, MultiPolygonPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SelectedChannelType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "RedChannel") + public JAXBElement createRedChannel(SelectedChannelType value) { + return new JAXBElement(_RedChannel_QNAME, SelectedChannelType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PolygonMemberType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "polygonMember", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "geometryMember") + public JAXBElement createPolygonMember(PolygonMemberType value) { + return new JAXBElement(_PolygonMember_QNAME, PolygonMemberType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiGeometry", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createMultiGeometry(GeometryCollectionType value) { + return new JAXBElement(_MultiGeometry_QNAME, GeometryCollectionType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CoordinatesType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "coordinates") + public JAXBElement createCoordinates(CoordinatesType value) { + return new JAXBElement(_Coordinates_QNAME, CoordinatesType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SelectedChannelType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "GrayChannel") + public JAXBElement createGrayChannel(SelectedChannelType value) { + return new JAXBElement(_GrayChannel_QNAME, SelectedChannelType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPointType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiPoint", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createMultiPoint(MultiPointType value) { + return new JAXBElement(_MultiPoint_QNAME, MultiPointType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Value") + public JAXBElement createValue(String value) { + return new JAXBElement(_Value_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "name") + public JAXBElement createName(String value) { + return new JAXBElement(_Name_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LineStringPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "edgeOf", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "lineStringProperty") + public JAXBElement createEdgeOf(LineStringPropertyType value) { + return new JAXBElement(_EdgeOf_QNAME, LineStringPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiLineStringPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiCenterLineOf", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "multiLineStringProperty") + public JAXBElement createMultiCenterLineOf(MultiLineStringPropertyType value) { + return new JAXBElement(_MultiCenterLineOf_QNAME, MultiLineStringPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "PerpendicularOffset") + public JAXBElement createPerpendicularOffset(ParameterValueType value) { + return new JAXBElement(_PerpendicularOffset_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Sub", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "expression") + public JAXBElement createSub(BinaryOperatorType value) { + return new JAXBElement(_Sub_QNAME, BinaryOperatorType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsGreaterThan", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsGreaterThan(BinaryComparisonOpType value) { + return new JAXBElement(_PropertyIsGreaterThan_QNAME, BinaryComparisonOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsNotEqualTo", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsNotEqualTo(BinaryComparisonOpType value) { + return new JAXBElement(_PropertyIsNotEqualTo_QNAME, BinaryComparisonOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PointPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "pointProperty", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_geometryProperty") + public JAXBElement createPointProperty(PointPropertyType value) { + return new JAXBElement(_PointProperty_QNAME, PointPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link GeometryAssociationType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "geometryMember") + public JAXBElement createGeometryMember(GeometryAssociationType value) { + return new JAXBElement(_GeometryMember_QNAME, GeometryAssociationType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsLessThanOrEqualTo", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsLessThanOrEqualTo(BinaryComparisonOpType value) { + return new JAXBElement(_PropertyIsLessThanOrEqualTo_QNAME, BinaryComparisonOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SpatialOpsType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "spatialOps") + public JAXBElement createSpatialOps(SpatialOpsType value) { + return new JAXBElement(_SpatialOps_QNAME, SpatialOpsType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPointPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiPointProperty", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_geometryProperty") + public JAXBElement createMultiPointProperty(MultiPointPropertyType value) { + return new JAXBElement(_MultiPointProperty_QNAME, MultiPointPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Double }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "ReliefFactor") + public JAXBElement createReliefFactor(Double value) { + return new JAXBElement(_ReliefFactor_QNAME, Double.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LogicOpsType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "logicOps") + public JAXBElement createLogicOps(LogicOpsType value) { + return new JAXBElement(_LogicOps_QNAME, LogicOpsType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PropertyIsLikeType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsLike", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsLike(PropertyIsLikeType value) { + return new JAXBElement(_PropertyIsLike_QNAME, PropertyIsLikeType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiLineStringPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiEdgeOf", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "multiLineStringProperty") + public JAXBElement createMultiEdgeOf(MultiLineStringPropertyType value) { + return new JAXBElement(_MultiEdgeOf_QNAME, MultiLineStringPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Contains", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createContains(BinarySpatialOpType value) { + return new JAXBElement(_Contains_QNAME, BinarySpatialOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsEqualTo", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsEqualTo(BinaryComparisonOpType value) { + return new JAXBElement(_PropertyIsEqualTo_QNAME, BinaryComparisonOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LineStringMemberType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "lineStringMember", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "geometryMember") + public JAXBElement createLineStringMember(LineStringMemberType value) { + return new JAXBElement(_LineStringMember_QNAME, LineStringMemberType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Label") + public JAXBElement createLabel(ParameterValueType value) { + return new JAXBElement(_Label_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Abstract") + public JAXBElement createAbstract(String value) { + return new JAXBElement(_Abstract_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPointPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiLocation", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "multiPointProperty") + public JAXBElement createMultiLocation(MultiPointPropertyType value) { + return new JAXBElement(_MultiLocation_QNAME, MultiPointPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LineStringPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "lineStringProperty", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_geometryProperty") + public JAXBElement createLineStringProperty(LineStringPropertyType value) { + return new JAXBElement(_LineStringProperty_QNAME, LineStringPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Radius") + public JAXBElement createRadius(ParameterValueType value) { + return new JAXBElement(_Radius_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SelectedChannelType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "GreenChannel") + public JAXBElement createGreenChannel(SelectedChannelType value) { + return new JAXBElement(_GreenChannel_QNAME, SelectedChannelType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Double }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "MinScaleDenominator") + public JAXBElement createMinScaleDenominator(Double value) { + return new JAXBElement(_MinScaleDenominator_QNAME, Double.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiLineStringPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiLineStringProperty", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_geometryProperty") + public JAXBElement createMultiLineStringProperty(MultiLineStringPropertyType value) { + return new JAXBElement(_MultiLineStringProperty_QNAME, MultiLineStringPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BBOXType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "BBOX", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createBBOX(BBOXType value) { + return new JAXBElement(_BBOX_QNAME, BBOXType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PointType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "Point", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createPoint(PointType value) { + return new JAXBElement(_Point_QNAME, PointType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Title") + public JAXBElement createsldTitleElementFactory(String value) { + return new JAXBElement(_sldTitleElementFactory_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CoordType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "coord") + public JAXBElement createCoord(CoordType value) { + return new JAXBElement(_Coord_QNAME, CoordType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link UnaryLogicOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Not", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "logicOps") + public JAXBElement createNot(UnaryLogicOpType value) { + return new JAXBElement(_Not_QNAME, UnaryLogicOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TitleEltType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.w3.org/1999/xlink", name = "title") + public JAXBElement createTitle(TitleEltType value) { + return new JAXBElement(_Title_QNAME, TitleEltType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Boolean }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "BrightnessOnly") + public JAXBElement createBrightnessOnly(Boolean value) { + return new JAXBElement(_BrightnessOnly_QNAME, Boolean.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link GeometryAssociationType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "_geometryProperty") + public JAXBElement creategmlAbstractGeometryPropertyElementFactory(GeometryAssociationType value) { + return new JAXBElement(_gmlAbstractGeometryPropertyElementFactory_QNAME, GeometryAssociationType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link MultiPolygonPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "multiCoverage", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "multiPolygonProperty") + public JAXBElement createMultiCoverage(MultiPolygonPropertyType value) { + return new JAXBElement(_MultiCoverage_QNAME, MultiPolygonPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PolygonPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "polygonProperty", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_geometryProperty") + public JAXBElement createPolygonProperty(PolygonPropertyType value) { + return new JAXBElement(_PolygonProperty_QNAME, PolygonPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link FeatureAssociationType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "featureMember") + public JAXBElement createFeatureMember(FeatureAssociationType value) { + return new JAXBElement(_FeatureMember_QNAME, FeatureAssociationType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LineStringType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "LineString", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createLineString(LineStringType value) { + return new JAXBElement(_LineString_QNAME, LineStringType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "SourceChannelName") + public JAXBElement createSourceChannelName(String value) { + return new JAXBElement(_SourceChannelName_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PointSymbolizer }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "PointSymbolizer", substitutionHeadNamespace = "http://www.opengis.net/sld", substitutionHeadName = "Symbolizer") + public JAXBElement createPointSymbolizer(PointSymbolizer value) { + return new JAXBElement(_PointSymbolizer_QNAME, PointSymbolizer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "DisplacementY") + public JAXBElement createDisplacementY(ParameterValueType value) { + return new JAXBElement(_DisplacementY_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "DisplacementX") + public JAXBElement createDisplacementX(ParameterValueType value) { + return new JAXBElement(_DisplacementX_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Add", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "expression") + public JAXBElement createAdd(BinaryOperatorType value) { + return new JAXBElement(_Add_QNAME, BinaryOperatorType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Beyond", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createBeyond(DistanceBufferType value) { + return new JAXBElement(_Beyond_QNAME, DistanceBufferType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Double }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "GammaValue") + public JAXBElement createGammaValue(Double value) { + return new JAXBElement(_GammaValue_QNAME, Double.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "DWithin", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createDWithin(DistanceBufferType value) { + return new JAXBElement(_DWithin_QNAME, DistanceBufferType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link GeometryCollectionType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "_GeometryCollection", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createGeometryCollection(GeometryCollectionType value) { + return new JAXBElement(_GeometryCollection_QNAME, GeometryCollectionType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "WellKnownName") + public JAXBElement createWellKnownName(String value) { + return new JAXBElement(_WellKnownName_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ExpressionType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "expression") + public JAXBElement createExpression(ExpressionType value) { + return new JAXBElement(_Expression_QNAME, ExpressionType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SelectedChannelType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "BlueChannel") + public JAXBElement createBlueChannel(SelectedChannelType value) { + return new JAXBElement(_BlueChannel_QNAME, SelectedChannelType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LineSymbolizer }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "LineSymbolizer", substitutionHeadNamespace = "http://www.opengis.net/sld", substitutionHeadName = "Symbolizer") + public JAXBElement createLineSymbolizer(LineSymbolizer value) { + return new JAXBElement(_LineSymbolizer_QNAME, LineSymbolizer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PolygonType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "Polygon", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Geometry") + public JAXBElement createPolygon(PolygonType value) { + return new JAXBElement(_Polygon_QNAME, PolygonType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Format") + public JAXBElement createFormat(String value) { + return new JAXBElement(_Format_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Service") + public JAXBElement createService(String value) { + return new JAXBElement(_Service_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Within", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createWithin(BinarySpatialOpType value) { + return new JAXBElement(_Within_QNAME, BinarySpatialOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link GeometryAssociationType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "geometryProperty") + public JAXBElement createGeometryProperty(GeometryAssociationType value) { + return new JAXBElement(_GeometryProperty_QNAME, GeometryAssociationType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Boolean }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "IsDefault") + public JAXBElement createIsDefault(Boolean value) { + return new JAXBElement(_IsDefault_QNAME, Boolean.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PointMemberType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "pointMember", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "geometryMember") + public JAXBElement createPointMember(PointMemberType value) { + return new JAXBElement(_PointMember_QNAME, PointMemberType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "AnchorPointY") + public JAXBElement createAnchorPointY(ParameterValueType value) { + return new JAXBElement(_AnchorPointY_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Or", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "logicOps") + public JAXBElement createOr(BinaryLogicOpType value) { + return new JAXBElement(_Or_QNAME, BinaryLogicOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Rotation") + public JAXBElement createRotation(ParameterValueType value) { + return new JAXBElement(_Rotation_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "AnchorPointX") + public JAXBElement createAnchorPointX(ParameterValueType value) { + return new JAXBElement(_AnchorPointX_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PropertyIsBetweenType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsBetween", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsBetween(PropertyIsBetweenType value) { + return new JAXBElement(_PropertyIsBetween_QNAME, PropertyIsBetweenType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PointPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "position", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "pointProperty") + public JAXBElement createPosition(PointPropertyType value) { + return new JAXBElement(_Position_QNAME, PointPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Div", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "expression") + public JAXBElement createDiv(BinaryOperatorType value) { + return new JAXBElement(_Div_QNAME, BinaryOperatorType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LineStringPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "centerLineOf", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "lineStringProperty") + public JAXBElement createCenterLineOf(LineStringPropertyType value) { + return new JAXBElement(_CenterLineOf_QNAME, LineStringPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "And", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "logicOps") + public JAXBElement createAnd(BinaryLogicOpType value) { + return new JAXBElement(_And_QNAME, BinaryLogicOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PropertyIsNullType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyIsNull", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "comparisonOps") + public JAXBElement createPropertyIsNull(PropertyIsNullType value) { + return new JAXBElement(_PropertyIsNull_QNAME, PropertyIsNullType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ParameterValueType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/sld", name = "Opacity") + public JAXBElement createOpacity(ParameterValueType value) { + return new JAXBElement(_Opacity_QNAME, ParameterValueType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Touches", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "spatialOps") + public JAXBElement createTouches(BinarySpatialOpType value) { + return new JAXBElement(_Touches_QNAME, BinarySpatialOpType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link LiteralType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "Literal", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "expression") + public JAXBElement createLiteral(LiteralType value) { + return new JAXBElement(_Literal_QNAME, LiteralType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PolygonPropertyType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "extentOf", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "polygonProperty") + public JAXBElement createExtentOf(PolygonPropertyType value) { + return new JAXBElement(_ExtentOf_QNAME, PolygonPropertyType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link ArcType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.w3.org/1999/xlink", name = "arc") + public JAXBElement createArc(ArcType value) { + return new JAXBElement(_Arc_QNAME, ArcType.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.opengis.net/ogc", name = "PropertyName", substitutionHeadNamespace = "http://www.opengis.net/ogc", substitutionHeadName = "expression") + public JAXBElement createPropertyName(PropertyNameType value) { + return new JAXBElement(_PropertyName_QNAME, PropertyNameType.class, null, value); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OnlineResource.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OnlineResource.java new file mode 100644 index 0000000..84731ac --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OnlineResource.java @@ -0,0 +1,227 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "OnlineResource") +public class OnlineResource { + + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String href; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String arcrole; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ShowType show; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ActuateType actuate; + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.SIMPLE; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the href property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getHref() { + return href; + } + + /** + * Sets the value of the href property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setHref(String value) { + this.href = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the arcrole property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getArcrole() { + return arcrole; + } + + /** + * Sets the value of the arcrole property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArcrole(String value) { + this.arcrole = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the show property. + * + * @return + * possible object is + * {@link ShowType } + * + */ + public ShowType getShow() { + return show; + } + + /** + * Sets the value of the show property. + * + * @param value + * allowed object is + * {@link ShowType } + * + */ + public void setShow(ShowType value) { + this.show = value; + } + + /** + * Gets the value of the actuate property. + * + * @return + * possible object is + * {@link ActuateType } + * + */ + public ActuateType getActuate() { + return actuate; + } + + /** + * Sets the value of the actuate property. + * + * @param value + * allowed object is + * {@link ActuateType } + * + */ + public void setActuate(ActuateType value) { + this.actuate = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OnlineResourceType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OnlineResourceType.java new file mode 100644 index 0000000..e0a895a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OnlineResourceType.java @@ -0,0 +1,225 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for OnlineResourceType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="OnlineResourceType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "OnlineResourceType", namespace = "http://www.opengis.net/context") +public class OnlineResourceType { + + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String href; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String arcrole; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ShowType show; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ActuateType actuate; + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.SIMPLE; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the href property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getHref() { + return href; + } + + /** + * Sets the value of the href property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setHref(String value) { + this.href = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the arcrole property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getArcrole() { + return arcrole; + } + + /** + * Sets the value of the arcrole property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArcrole(String value) { + this.arcrole = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the show property. + * + * @return + * possible object is + * {@link ShowType } + * + */ + public ShowType getShow() { + return show; + } + + /** + * Sets the value of the show property. + * + * @param value + * allowed object is + * {@link ShowType } + * + */ + public void setShow(ShowType value) { + this.show = value; + } + + /** + * Gets the value of the actuate property. + * + * @return + * possible object is + * {@link ActuateType } + * + */ + public ActuateType getActuate() { + return actuate; + } + + /** + * Sets the value of the actuate property. + * + * @param value + * allowed object is + * {@link ActuateType } + * + */ + public void setActuate(ActuateType value) { + this.actuate = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OverlapBehavior.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OverlapBehavior.java new file mode 100644 index 0000000..4e11ef8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/OverlapBehavior.java @@ -0,0 +1,155 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice>
+ *         <element ref="{http://www.opengis.net/sld}LATEST_ON_TOP"/>
+ *         <element ref="{http://www.opengis.net/sld}EARLIEST_ON_TOP"/>
+ *         <element ref="{http://www.opengis.net/sld}AVERAGE"/>
+ *         <element ref="{http://www.opengis.net/sld}RANDOM"/>
+ *       </choice>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "latestontop", + "earliestontop", + "average", + "random" +}) +@XmlRootElement(name = "OverlapBehavior") +public class OverlapBehavior { + + @XmlElement(name = "LATEST_ON_TOP") + protected LATESTONTOP latestontop; + @XmlElement(name = "EARLIEST_ON_TOP") + protected EARLIESTONTOP earliestontop; + @XmlElement(name = "AVERAGE") + protected AVERAGE average; + @XmlElement(name = "RANDOM") + protected RANDOM random; + + /** + * Gets the value of the latestontop property. + * + * @return + * possible object is + * {@link LATESTONTOP } + * + */ + public LATESTONTOP getLATESTONTOP() { + return latestontop; + } + + /** + * Sets the value of the latestontop property. + * + * @param value + * allowed object is + * {@link LATESTONTOP } + * + */ + public void setLATESTONTOP(LATESTONTOP value) { + this.latestontop = value; + } + + /** + * Gets the value of the earliestontop property. + * + * @return + * possible object is + * {@link EARLIESTONTOP } + * + */ + public EARLIESTONTOP getEARLIESTONTOP() { + return earliestontop; + } + + /** + * Sets the value of the earliestontop property. + * + * @param value + * allowed object is + * {@link EARLIESTONTOP } + * + */ + public void setEARLIESTONTOP(EARLIESTONTOP value) { + this.earliestontop = value; + } + + /** + * Gets the value of the average property. + * + * @return + * possible object is + * {@link AVERAGE } + * + */ + public AVERAGE getAVERAGE() { + return average; + } + + /** + * Sets the value of the average property. + * + * @param value + * allowed object is + * {@link AVERAGE } + * + */ + public void setAVERAGE(AVERAGE value) { + this.average = value; + } + + /** + * Gets the value of the random property. + * + * @return + * possible object is + * {@link RANDOM } + * + */ + public RANDOM getRANDOM() { + return random; + } + + /** + * Sets the value of the random property. + * + * @param value + * allowed object is + * {@link RANDOM } + * + */ + public void setRANDOM(RANDOM value) { + this.random = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ParameterValueType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ParameterValueType.java new file mode 100644 index 0000000..1a00c10 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ParameterValueType.java @@ -0,0 +1,102 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * The "ParameterValueType" uses WFS-Filter expressions to give + * values for SLD graphic parameters. A "mixed" element-content + * model is used with textual substitution for values. + * + * + *

Java class for ParameterValueType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ParameterValueType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence maxOccurs="unbounded" minOccurs="0">
+ *         <element ref="{http://www.opengis.net/ogc}expression"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ParameterValueType", propOrder = { + "content" +}) +@XmlSeeAlso({ + CssParameter.class +}) +public class ParameterValueType { + + @XmlElementRef(name = "expression", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + @XmlMixed + protected List content; + + /** + * + * The "ParameterValueType" uses WFS-Filter expressions to give + * values for SLD graphic parameters. A "mixed" element-content + * model is used with textual substitution for values. + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getContent().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointMemberType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointMemberType.java new file mode 100644 index 0000000..d474f5c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointMemberType.java @@ -0,0 +1,45 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * Restricts the geometry member to being a Point instance. + * + *

Java class for PointMemberType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PointMemberType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}Point"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.opengis.net/gml}AssociationAttributeGroup"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PointMemberType", namespace = "http://www.opengis.net/gml") +public class PointMemberType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointPlacement.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointPlacement.java new file mode 100644 index 0000000..5955f91 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointPlacement.java @@ -0,0 +1,127 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}AnchorPoint" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Displacement" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Rotation" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "anchorPoint", + "displacement", + "rotation" +}) +@XmlRootElement(name = "PointPlacement") +public class PointPlacement { + + @XmlElement(name = "AnchorPoint") + protected AnchorPoint anchorPoint; + @XmlElement(name = "Displacement") + protected Displacement displacement; + @XmlElement(name = "Rotation") + protected ParameterValueType rotation; + + /** + * Gets the value of the anchorPoint property. + * + * @return + * possible object is + * {@link AnchorPoint } + * + */ + public AnchorPoint getAnchorPoint() { + return anchorPoint; + } + + /** + * Sets the value of the anchorPoint property. + * + * @param value + * allowed object is + * {@link AnchorPoint } + * + */ + public void setAnchorPoint(AnchorPoint value) { + this.anchorPoint = value; + } + + /** + * Gets the value of the displacement property. + * + * @return + * possible object is + * {@link Displacement } + * + */ + public Displacement getDisplacement() { + return displacement; + } + + /** + * Sets the value of the displacement property. + * + * @param value + * allowed object is + * {@link Displacement } + * + */ + public void setDisplacement(Displacement value) { + this.displacement = value; + } + + /** + * Gets the value of the rotation property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getRotation() { + return rotation; + } + + /** + * Sets the value of the rotation property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setRotation(ParameterValueType value) { + this.rotation = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointPropertyType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointPropertyType.java new file mode 100644 index 0000000..770fc07 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointPropertyType.java @@ -0,0 +1,49 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Encapsulates a single point to represent position, location, or + * centerOf properties. + * + * + *

Java class for PointPropertyType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PointPropertyType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}Point"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PointPropertyType", namespace = "http://www.opengis.net/gml") +public class PointPropertyType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointSymbolizer.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointSymbolizer.java new file mode 100644 index 0000000..b2504a9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointSymbolizer.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/sld}SymbolizerType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Geometry" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Graphic" minOccurs="0"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "geometry", + "graphic" +}) +public class PointSymbolizer + extends SymbolizerType +{ + + @XmlElement(name = "Geometry") + protected Geometry geometry; + @XmlElement(name = "Graphic") + protected Graphic graphic; + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link Geometry } + * + */ + public Geometry getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link Geometry } + * + */ + public void setGeometry(Geometry value) { + this.geometry = value; + } + + /** + * Gets the value of the graphic property. + * + * @return + * possible object is + * {@link Graphic } + * + */ + public Graphic getGraphic() { + return graphic; + } + + /** + * Sets the value of the graphic property. + * + * @param value + * allowed object is + * {@link Graphic } + * + */ + public void setGraphic(Graphic value) { + this.graphic = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointType.java new file mode 100644 index 0000000..6de26fc --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PointType.java @@ -0,0 +1,102 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A Point is defined by a single coordinate tuple. + * + * + *

Java class for PointType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PointType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/gml}AbstractGeometryType">
+ *       <sequence>
+ *         <choice>
+ *           <element ref="{http://www.opengis.net/gml}coord"/>
+ *           <element ref="{http://www.opengis.net/gml}coordinates"/>
+ *         </choice>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PointType", namespace = "http://www.opengis.net/gml", propOrder = { + "coord", + "coordinates" +}) +public class PointType + extends AbstractGeometryType +{ + + protected CoordType coord; + protected CoordinatesType coordinates; + + /** + * Gets the value of the coord property. + * + * @return + * possible object is + * {@link CoordType } + * + */ + public CoordType getCoord() { + return coord; + } + + /** + * Sets the value of the coord property. + * + * @param value + * allowed object is + * {@link CoordType } + * + */ + public void setCoord(CoordType value) { + this.coord = value; + } + + /** + * Gets the value of the coordinates property. + * + * @return + * possible object is + * {@link CoordinatesType } + * + */ + public CoordinatesType getCoordinates() { + return coordinates; + } + + /** + * Sets the value of the coordinates property. + * + * @param value + * allowed object is + * {@link CoordinatesType } + * + */ + public void setCoordinates(CoordinatesType value) { + this.coordinates = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonMemberType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonMemberType.java new file mode 100644 index 0000000..6776a9e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonMemberType.java @@ -0,0 +1,45 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * Restricts the geometry member to being a Polygon instance. + * + *

Java class for PolygonMemberType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PolygonMemberType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}Polygon"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.opengis.net/gml}AssociationAttributeGroup"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PolygonMemberType", namespace = "http://www.opengis.net/gml") +public class PolygonMemberType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonPropertyType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonPropertyType.java new file mode 100644 index 0000000..b947fe1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonPropertyType.java @@ -0,0 +1,49 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Encapsulates a single polygon to represent coverage or extentOf + * properties. + * + * + *

Java class for PolygonPropertyType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PolygonPropertyType">
+ *   <complexContent>
+ *     <restriction base="{http://www.opengis.net/gml}GeometryAssociationType">
+ *       <sequence minOccurs="0">
+ *         <element ref="{http://www.opengis.net/gml}Polygon"/>
+ *       </sequence>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *       <attribute ref="{http://www.opengis.net/gml}remoteSchema"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PolygonPropertyType", namespace = "http://www.opengis.net/gml") +public class PolygonPropertyType + extends GeometryAssociationType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonSymbolizer.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonSymbolizer.java new file mode 100644 index 0000000..d45d33e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonSymbolizer.java @@ -0,0 +1,127 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/sld}SymbolizerType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Geometry" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Fill" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Stroke" minOccurs="0"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "geometry", + "fill", + "stroke" +}) +public class PolygonSymbolizer + extends SymbolizerType +{ + + @XmlElement(name = "Geometry") + protected Geometry geometry; + @XmlElement(name = "Fill") + protected Fill fill; + @XmlElement(name = "Stroke") + protected Stroke stroke; + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link Geometry } + * + */ + public Geometry getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link Geometry } + * + */ + public void setGeometry(Geometry value) { + this.geometry = value; + } + + /** + * Gets the value of the fill property. + * + * @return + * possible object is + * {@link Fill } + * + */ + public Fill getFill() { + return fill; + } + + /** + * Sets the value of the fill property. + * + * @param value + * allowed object is + * {@link Fill } + * + */ + public void setFill(Fill value) { + this.fill = value; + } + + /** + * Gets the value of the stroke property. + * + * @return + * possible object is + * {@link Stroke } + * + */ + public Stroke getStroke() { + return stroke; + } + + /** + * Sets the value of the stroke property. + * + * @param value + * allowed object is + * {@link Stroke } + * + */ + public void setStroke(Stroke value) { + this.stroke = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonType.java new file mode 100644 index 0000000..750b0a6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PolygonType.java @@ -0,0 +1,110 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A Polygon is defined by an outer boundary and zero or more inner + * boundaries which are in turn defined by LinearRings. + * + * + *

Java class for PolygonType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PolygonType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/gml}AbstractGeometryType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/gml}outerBoundaryIs"/>
+ *         <element ref="{http://www.opengis.net/gml}innerBoundaryIs" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PolygonType", namespace = "http://www.opengis.net/gml", propOrder = { + "outerBoundaryIs", + "innerBoundaryIs" +}) +public class PolygonType + extends AbstractGeometryType +{ + + @XmlElement(required = true) + protected LinearRingMemberType outerBoundaryIs; + protected List innerBoundaryIs; + + /** + * Gets the value of the outerBoundaryIs property. + * + * @return + * possible object is + * {@link LinearRingMemberType } + * + */ + public LinearRingMemberType getOuterBoundaryIs() { + return outerBoundaryIs; + } + + /** + * Sets the value of the outerBoundaryIs property. + * + * @param value + * allowed object is + * {@link LinearRingMemberType } + * + */ + public void setOuterBoundaryIs(LinearRingMemberType value) { + this.outerBoundaryIs = value; + } + + /** + * Gets the value of the innerBoundaryIs property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the innerBoundaryIs property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getInnerBoundaryIs().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link LinearRingMemberType } + * + * + */ + public List getInnerBoundaryIs() { + if (innerBoundaryIs == null) { + innerBoundaryIs = new ArrayList(); + } + return this.innerBoundaryIs; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsBetweenType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsBetweenType.java new file mode 100644 index 0000000..b96dfab --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsBetweenType.java @@ -0,0 +1,143 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for PropertyIsBetweenType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PropertyIsBetweenType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}ComparisonOpsType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}expression"/>
+ *         <element name="LowerBoundary" type="{http://www.opengis.net/ogc}LowerBoundaryType"/>
+ *         <element name="UpperBoundary" type="{http://www.opengis.net/ogc}UpperBoundaryType"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PropertyIsBetweenType", namespace = "http://www.opengis.net/ogc", propOrder = { + "expression", + "lowerBoundary", + "upperBoundary" +}) +public class PropertyIsBetweenType + extends ComparisonOpsType +{ + + @XmlElementRef(name = "expression", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement expression; + @XmlElement(name = "LowerBoundary", required = true) + protected LowerBoundaryType lowerBoundary; + @XmlElement(name = "UpperBoundary", required = true) + protected UpperBoundaryType upperBoundary; + + /** + * Gets the value of the expression property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + */ + public JAXBElement getExpression() { + return expression; + } + + /** + * Sets the value of the expression property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + */ + public void setExpression(JAXBElement value) { + this.expression = ((JAXBElement ) value); + } + + /** + * Gets the value of the lowerBoundary property. + * + * @return + * possible object is + * {@link LowerBoundaryType } + * + */ + public LowerBoundaryType getLowerBoundary() { + return lowerBoundary; + } + + /** + * Sets the value of the lowerBoundary property. + * + * @param value + * allowed object is + * {@link LowerBoundaryType } + * + */ + public void setLowerBoundary(LowerBoundaryType value) { + this.lowerBoundary = value; + } + + /** + * Gets the value of the upperBoundary property. + * + * @return + * possible object is + * {@link UpperBoundaryType } + * + */ + public UpperBoundaryType getUpperBoundary() { + return upperBoundary; + } + + /** + * Sets the value of the upperBoundary property. + * + * @param value + * allowed object is + * {@link UpperBoundaryType } + * + */ + public void setUpperBoundary(UpperBoundaryType value) { + this.upperBoundary = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsLikeType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsLikeType.java new file mode 100644 index 0000000..5f8d321 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsLikeType.java @@ -0,0 +1,181 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for PropertyIsLikeType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PropertyIsLikeType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}ComparisonOpsType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}PropertyName"/>
+ *         <element ref="{http://www.opengis.net/ogc}Literal"/>
+ *       </sequence>
+ *       <attribute name="wildCard" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="singleChar" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="escape" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PropertyIsLikeType", namespace = "http://www.opengis.net/ogc", propOrder = { + "propertyName", + "literal" +}) +public class PropertyIsLikeType + extends ComparisonOpsType +{ + + @XmlElement(name = "PropertyName", required = true) + protected PropertyNameType propertyName; + @XmlElement(name = "Literal", required = true) + protected LiteralType literal; + @XmlAttribute(required = true) + protected String wildCard; + @XmlAttribute(required = true) + protected String singleChar; + @XmlAttribute(required = true) + protected String escape; + + /** + * Gets the value of the propertyName property. + * + * @return + * possible object is + * {@link PropertyNameType } + * + */ + public PropertyNameType getPropertyName() { + return propertyName; + } + + /** + * Sets the value of the propertyName property. + * + * @param value + * allowed object is + * {@link PropertyNameType } + * + */ + public void setPropertyName(PropertyNameType value) { + this.propertyName = value; + } + + /** + * Gets the value of the literal property. + * + * @return + * possible object is + * {@link LiteralType } + * + */ + public LiteralType getLiteral() { + return literal; + } + + /** + * Sets the value of the literal property. + * + * @param value + * allowed object is + * {@link LiteralType } + * + */ + public void setLiteral(LiteralType value) { + this.literal = value; + } + + /** + * Gets the value of the wildCard property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getWildCard() { + return wildCard; + } + + /** + * Sets the value of the wildCard property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWildCard(String value) { + this.wildCard = value; + } + + /** + * Gets the value of the singleChar property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSingleChar() { + return singleChar; + } + + /** + * Sets the value of the singleChar property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSingleChar(String value) { + this.singleChar = value; + } + + /** + * Gets the value of the escape property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getEscape() { + return escape; + } + + /** + * Sets the value of the escape property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setEscape(String value) { + this.escape = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsNullType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsNullType.java new file mode 100644 index 0000000..69489b1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyIsNullType.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for PropertyIsNullType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PropertyIsNullType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}ComparisonOpsType">
+ *       <choice>
+ *         <element ref="{http://www.opengis.net/ogc}PropertyName"/>
+ *         <element ref="{http://www.opengis.net/ogc}Literal"/>
+ *       </choice>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PropertyIsNullType", namespace = "http://www.opengis.net/ogc", propOrder = { + "propertyName", + "literal" +}) +public class PropertyIsNullType + extends ComparisonOpsType +{ + + @XmlElement(name = "PropertyName") + protected PropertyNameType propertyName; + @XmlElement(name = "Literal") + protected LiteralType literal; + + /** + * Gets the value of the propertyName property. + * + * @return + * possible object is + * {@link PropertyNameType } + * + */ + public PropertyNameType getPropertyName() { + return propertyName; + } + + /** + * Sets the value of the propertyName property. + * + * @param value + * allowed object is + * {@link PropertyNameType } + * + */ + public void setPropertyName(PropertyNameType value) { + this.propertyName = value; + } + + /** + * Gets the value of the literal property. + * + * @return + * possible object is + * {@link LiteralType } + * + */ + public LiteralType getLiteral() { + return literal; + } + + /** + * Sets the value of the literal property. + * + * @param value + * allowed object is + * {@link LiteralType } + * + */ + public void setLiteral(LiteralType value) { + this.literal = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyNameType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyNameType.java new file mode 100644 index 0000000..9a597f0 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/PropertyNameType.java @@ -0,0 +1,39 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for PropertyNameType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="PropertyNameType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}ExpressionType">
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PropertyNameType", namespace = "http://www.opengis.net/ogc") +public class PropertyNameType + extends ExpressionType +{ + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RANDOM.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RANDOM.java new file mode 100644 index 0000000..fb7818a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RANDOM.java @@ -0,0 +1,39 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "RANDOM") +public class RANDOM { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RasterSymbolizer.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RasterSymbolizer.java new file mode 100644 index 0000000..1ebc654 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RasterSymbolizer.java @@ -0,0 +1,267 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/sld}SymbolizerType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Geometry" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Opacity" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}ChannelSelection" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}OverlapBehavior" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}ColorMap" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}ContrastEnhancement" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}ShadedRelief" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}ImageOutline" minOccurs="0"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "geometry", + "opacity", + "channelSelection", + "overlapBehavior", + "colorMap", + "contrastEnhancement", + "shadedRelief", + "imageOutline" +}) +public class RasterSymbolizer + extends SymbolizerType +{ + + @XmlElement(name = "Geometry") + protected Geometry geometry; + @XmlElement(name = "Opacity") + protected ParameterValueType opacity; + @XmlElement(name = "ChannelSelection") + protected ChannelSelection channelSelection; + @XmlElement(name = "OverlapBehavior") + protected OverlapBehavior overlapBehavior; + @XmlElement(name = "ColorMap") + protected ColorMap colorMap; + @XmlElement(name = "ContrastEnhancement") + protected ContrastEnhancement contrastEnhancement; + @XmlElement(name = "ShadedRelief") + protected ShadedRelief shadedRelief; + @XmlElement(name = "ImageOutline") + protected ImageOutline imageOutline; + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link Geometry } + * + */ + public Geometry getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link Geometry } + * + */ + public void setGeometry(Geometry value) { + this.geometry = value; + } + + /** + * Gets the value of the opacity property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getOpacity() { + return opacity; + } + + /** + * Sets the value of the opacity property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setOpacity(ParameterValueType value) { + this.opacity = value; + } + + /** + * Gets the value of the channelSelection property. + * + * @return + * possible object is + * {@link ChannelSelection } + * + */ + public ChannelSelection getChannelSelection() { + return channelSelection; + } + + /** + * Sets the value of the channelSelection property. + * + * @param value + * allowed object is + * {@link ChannelSelection } + * + */ + public void setChannelSelection(ChannelSelection value) { + this.channelSelection = value; + } + + /** + * Gets the value of the overlapBehavior property. + * + * @return + * possible object is + * {@link OverlapBehavior } + * + */ + public OverlapBehavior getOverlapBehavior() { + return overlapBehavior; + } + + /** + * Sets the value of the overlapBehavior property. + * + * @param value + * allowed object is + * {@link OverlapBehavior } + * + */ + public void setOverlapBehavior(OverlapBehavior value) { + this.overlapBehavior = value; + } + + /** + * Gets the value of the colorMap property. + * + * @return + * possible object is + * {@link ColorMap } + * + */ + public ColorMap getColorMap() { + return colorMap; + } + + /** + * Sets the value of the colorMap property. + * + * @param value + * allowed object is + * {@link ColorMap } + * + */ + public void setColorMap(ColorMap value) { + this.colorMap = value; + } + + /** + * Gets the value of the contrastEnhancement property. + * + * @return + * possible object is + * {@link ContrastEnhancement } + * + */ + public ContrastEnhancement getContrastEnhancement() { + return contrastEnhancement; + } + + /** + * Sets the value of the contrastEnhancement property. + * + * @param value + * allowed object is + * {@link ContrastEnhancement } + * + */ + public void setContrastEnhancement(ContrastEnhancement value) { + this.contrastEnhancement = value; + } + + /** + * Gets the value of the shadedRelief property. + * + * @return + * possible object is + * {@link ShadedRelief } + * + */ + public ShadedRelief getShadedRelief() { + return shadedRelief; + } + + /** + * Sets the value of the shadedRelief property. + * + * @param value + * allowed object is + * {@link ShadedRelief } + * + */ + public void setShadedRelief(ShadedRelief value) { + this.shadedRelief = value; + } + + /** + * Gets the value of the imageOutline property. + * + * @return + * possible object is + * {@link ImageOutline } + * + */ + public ImageOutline getImageOutline() { + return imageOutline; + } + + /** + * Sets the value of the imageOutline property. + * + * @param value + * allowed object is + * {@link ImageOutline } + * + */ + public void setImageOutline(ImageOutline value) { + this.imageOutline = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RemoteOWS.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RemoteOWS.java new file mode 100644 index 0000000..3031f02 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/RemoteOWS.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Service"/>
+ *         <element ref="{http://www.opengis.net/sld}OnlineResource"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "service", + "onlineResource" +}) +@XmlRootElement(name = "RemoteOWS") +public class RemoteOWS { + + @XmlElement(name = "Service", required = true) + protected String service; + @XmlElement(name = "OnlineResource", required = true) + protected OnlineResource onlineResource; + + /** + * Gets the value of the service property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getService() { + return service; + } + + /** + * Sets the value of the service property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setService(String value) { + this.service = value; + } + + /** + * Gets the value of the onlineResource property. + * + * @return + * possible object is + * {@link OnlineResource } + * + */ + public OnlineResource getOnlineResource() { + return onlineResource; + } + + /** + * Sets the value of the onlineResource property. + * + * @param value + * allowed object is + * {@link OnlineResource } + * + */ + public void setOnlineResource(OnlineResource value) { + this.onlineResource = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ResourceType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ResourceType.java new file mode 100644 index 0000000..f8d13e4 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ResourceType.java @@ -0,0 +1,192 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import org.w3c.dom.Element; + + +/** + *

Java class for resourceType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="resourceType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <group ref="{http://www.w3.org/1999/xlink}resourceModel"/>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}resourceAttrs"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "resourceType", namespace = "http://www.w3.org/1999/xlink", propOrder = { + "content" +}) +public class ResourceType { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink", required = true) + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String label; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getContent().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Element } + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.RESOURCE; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the label property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getLabel() { + return label; + } + + /** + * Sets the value of the label property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLabel(String value) { + this.label = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Rule.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Rule.java new file mode 100644 index 0000000..40eb9aa --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Rule.java @@ -0,0 +1,311 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Name" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Title" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Abstract" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}LegendGraphic" minOccurs="0"/>
+ *         <choice minOccurs="0">
+ *           <element ref="{http://www.opengis.net/ogc}Filter"/>
+ *           <element ref="{http://www.opengis.net/sld}ElseFilter"/>
+ *         </choice>
+ *         <element ref="{http://www.opengis.net/sld}MinScaleDenominator" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}MaxScaleDenominator" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Symbolizer" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "name", + "title", + "_abstract", + "legendGraphic", + "filter", + "elseFilter", + "minScaleDenominator", + "maxScaleDenominator", + "symbolizer" +}) +@XmlRootElement(name = "Rule") +public class Rule { + + @XmlElement(name = "Name") + protected String name; + @XmlElement(name = "Title") + protected String title; + @XmlElement(name = "Abstract") + protected String _abstract; + @XmlElement(name = "LegendGraphic") + protected LegendGraphic legendGraphic; + @XmlElement(name = "Filter", namespace = "http://www.opengis.net/ogc") + protected FilterType filter; + @XmlElement(name = "ElseFilter") + protected ElseFilter elseFilter; + @XmlElement(name = "MinScaleDenominator") + protected Double minScaleDenominator; + @XmlElement(name = "MaxScaleDenominator") + protected Double maxScaleDenominator; + @XmlElementRef(name = "Symbolizer", namespace = "http://www.opengis.net/sld", type = JAXBElement.class) + protected List> symbolizer; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the abstract property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAbstract() { + return _abstract; + } + + /** + * Sets the value of the abstract property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAbstract(String value) { + this._abstract = value; + } + + /** + * Gets the value of the legendGraphic property. + * + * @return + * possible object is + * {@link LegendGraphic } + * + */ + public LegendGraphic getLegendGraphic() { + return legendGraphic; + } + + /** + * Sets the value of the legendGraphic property. + * + * @param value + * allowed object is + * {@link LegendGraphic } + * + */ + public void setLegendGraphic(LegendGraphic value) { + this.legendGraphic = value; + } + + /** + * Gets the value of the filter property. + * + * @return + * possible object is + * {@link FilterType } + * + */ + public FilterType getFilter() { + return filter; + } + + /** + * Sets the value of the filter property. + * + * @param value + * allowed object is + * {@link FilterType } + * + */ + public void setFilter(FilterType value) { + this.filter = value; + } + + /** + * Gets the value of the elseFilter property. + * + * @return + * possible object is + * {@link ElseFilter } + * + */ + public ElseFilter getElseFilter() { + return elseFilter; + } + + /** + * Sets the value of the elseFilter property. + * + * @param value + * allowed object is + * {@link ElseFilter } + * + */ + public void setElseFilter(ElseFilter value) { + this.elseFilter = value; + } + + /** + * Gets the value of the minScaleDenominator property. + * + * @return + * possible object is + * {@link Double } + * + */ + public Double getMinScaleDenominator() { + return minScaleDenominator; + } + + /** + * Sets the value of the minScaleDenominator property. + * + * @param value + * allowed object is + * {@link Double } + * + */ + public void setMinScaleDenominator(Double value) { + this.minScaleDenominator = value; + } + + /** + * Gets the value of the maxScaleDenominator property. + * + * @return + * possible object is + * {@link Double } + * + */ + public Double getMaxScaleDenominator() { + return maxScaleDenominator; + } + + /** + * Sets the value of the maxScaleDenominator property. + * + * @param value + * allowed object is + * {@link Double } + * + */ + public void setMaxScaleDenominator(Double value) { + this.maxScaleDenominator = value; + } + + /** + * Gets the value of the symbolizer property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the symbolizer property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getSymbolizer().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link PolygonSymbolizer }{@code >} + * {@link JAXBElement }{@code <}{@link LineSymbolizer }{@code >} + * {@link JAXBElement }{@code <}{@link SymbolizerType }{@code >} + * {@link JAXBElement }{@code <}{@link RasterSymbolizer }{@code >} + * {@link JAXBElement }{@code <}{@link PointSymbolizer }{@code >} + * {@link JAXBElement }{@code <}{@link TextSymbolizer }{@code >} + * + * + */ + public List> getSymbolizer() { + if (symbolizer == null) { + symbolizer = new ArrayList>(); + } + return this.symbolizer; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SLDType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SLDType.java new file mode 100644 index 0000000..cf35bd4 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SLDType.java @@ -0,0 +1,211 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for SLDType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="SLDType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="Title" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="LegendURL" type="{http://www.opengis.net/context}URLType" minOccurs="0"/>
+ *         <choice>
+ *           <element name="OnlineResource" type="{http://www.opengis.net/context}OnlineResourceType"/>
+ *           <element ref="{http://www.opengis.net/sld}StyledLayerDescriptor"/>
+ *           <element ref="{http://www.opengis.net/sld}FeatureTypeStyle"/>
+ *         </choice>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SLDType", namespace = "http://www.opengis.net/context", propOrder = { + "name", + "title", + "legendURL", + "onlineResource", + "styledLayerDescriptor", + "featureTypeStyle" +}) +public class SLDType { + + @XmlElement(name = "Name") + protected String name; + @XmlElement(name = "Title") + protected String title; + @XmlElement(name = "LegendURL") + protected URLType legendURL; + @XmlElement(name = "OnlineResource") + protected OnlineResourceType onlineResource; + @XmlElement(name = "StyledLayerDescriptor", namespace = "http://www.opengis.net/sld") + protected StyledLayerDescriptor styledLayerDescriptor; + @XmlElement(name = "FeatureTypeStyle", namespace = "http://www.opengis.net/sld") + protected FeatureTypeStyle featureTypeStyle; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the legendURL property. + * + * @return + * possible object is + * {@link URLType } + * + */ + public URLType getLegendURL() { + return legendURL; + } + + /** + * Sets the value of the legendURL property. + * + * @param value + * allowed object is + * {@link URLType } + * + */ + public void setLegendURL(URLType value) { + this.legendURL = value; + } + + /** + * Gets the value of the onlineResource property. + * + * @return + * possible object is + * {@link OnlineResourceType } + * + */ + public OnlineResourceType getOnlineResource() { + return onlineResource; + } + + /** + * Sets the value of the onlineResource property. + * + * @param value + * allowed object is + * {@link OnlineResourceType } + * + */ + public void setOnlineResource(OnlineResourceType value) { + this.onlineResource = value; + } + + /** + * Gets the value of the styledLayerDescriptor property. + * + * @return + * possible object is + * {@link StyledLayerDescriptor } + * + */ + public StyledLayerDescriptor getStyledLayerDescriptor() { + return styledLayerDescriptor; + } + + /** + * Sets the value of the styledLayerDescriptor property. + * + * @param value + * allowed object is + * {@link StyledLayerDescriptor } + * + */ + public void setStyledLayerDescriptor(StyledLayerDescriptor value) { + this.styledLayerDescriptor = value; + } + + /** + * Gets the value of the featureTypeStyle property. + * + * @return + * possible object is + * {@link FeatureTypeStyle } + * + */ + public FeatureTypeStyle getFeatureTypeStyle() { + return featureTypeStyle; + } + + /** + * Sets the value of the featureTypeStyle property. + * + * @param value + * allowed object is + * {@link FeatureTypeStyle } + * + */ + public void setFeatureTypeStyle(FeatureTypeStyle value) { + this.featureTypeStyle = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SelectedChannelType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SelectedChannelType.java new file mode 100644 index 0000000..f1548e8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SelectedChannelType.java @@ -0,0 +1,97 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for SelectedChannelType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="SelectedChannelType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}SourceChannelName"/>
+ *         <element ref="{http://www.opengis.net/sld}ContrastEnhancement" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SelectedChannelType", propOrder = { + "sourceChannelName", + "contrastEnhancement" +}) +public class SelectedChannelType { + + @XmlElement(name = "SourceChannelName", required = true) + protected String sourceChannelName; + @XmlElement(name = "ContrastEnhancement") + protected ContrastEnhancement contrastEnhancement; + + /** + * Gets the value of the sourceChannelName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSourceChannelName() { + return sourceChannelName; + } + + /** + * Sets the value of the sourceChannelName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSourceChannelName(String value) { + this.sourceChannelName = value; + } + + /** + * Gets the value of the contrastEnhancement property. + * + * @return + * possible object is + * {@link ContrastEnhancement } + * + */ + public ContrastEnhancement getContrastEnhancement() { + return contrastEnhancement; + } + + /** + * Sets the value of the contrastEnhancement property. + * + * @param value + * allowed object is + * {@link ContrastEnhancement } + * + */ + public void setContrastEnhancement(ContrastEnhancement value) { + this.contrastEnhancement = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ServerType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ServerType.java new file mode 100644 index 0000000..cefc524 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ServerType.java @@ -0,0 +1,151 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ServerType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ServerType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="OnlineResource" type="{http://www.opengis.net/context}OnlineResourceType"/>
+ *       </sequence>
+ *       <attribute name="service" use="required" type="{http://www.opengis.net/context}serviceType" />
+ *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ServerType", namespace = "http://www.opengis.net/context", propOrder = { + "onlineResource" +}) +public class ServerType { + + @XmlElement(name = "OnlineResource", required = true) + protected OnlineResourceType onlineResource; + @XmlAttribute(required = true) + protected ServiceType service; + @XmlAttribute(required = true) + protected String version; + @XmlAttribute + protected String title; + + /** + * Gets the value of the onlineResource property. + * + * @return + * possible object is + * {@link OnlineResourceType } + * + */ + public OnlineResourceType getOnlineResource() { + return onlineResource; + } + + /** + * Sets the value of the onlineResource property. + * + * @param value + * allowed object is + * {@link OnlineResourceType } + * + */ + public void setOnlineResource(OnlineResourceType value) { + this.onlineResource = value; + } + + /** + * Gets the value of the service property. + * + * @return + * possible object is + * {@link ServiceType } + * + */ + public ServiceType getService() { + return service; + } + + /** + * Sets the value of the service property. + * + * @param value + * allowed object is + * {@link ServiceType } + * + */ + public void setService(ServiceType value) { + this.service = value; + } + + /** + * Gets the value of the version property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVersion(String value) { + this.version = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ServiceType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ServiceType.java new file mode 100644 index 0000000..7af5bd1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ServiceType.java @@ -0,0 +1,58 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlEnumValue; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for serviceType. + * + *

The following schema fragment specifies the expected content contained within this class. + *

+ *

+ * <simpleType name="serviceType">
+ *   <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *     <enumeration value="OGC:WMS"/>
+ *     <enumeration value="OGC:WFS"/>
+ *   </restriction>
+ * </simpleType>
+ * 
+ * + */ +@XmlType(name = "serviceType", namespace = "http://www.opengis.net/context") +@XmlEnum +public enum ServiceType { + + @XmlEnumValue("OGC:WMS") + OGC_WMS("OGC:WMS"), + @XmlEnumValue("OGC:WFS") + OGC_WFS("OGC:WFS"); + private final String value; + + ServiceType(String v) { + value = v; + } + + public String value() { + return value; + } + + public static ServiceType fromValue(String v) { + for (ServiceType c: ServiceType.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ShadedRelief.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ShadedRelief.java new file mode 100644 index 0000000..da8725a --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ShadedRelief.java @@ -0,0 +1,99 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}BrightnessOnly" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}ReliefFactor" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "brightnessOnly", + "reliefFactor" +}) +@XmlRootElement(name = "ShadedRelief") +public class ShadedRelief { + + @XmlElement(name = "BrightnessOnly") + protected Boolean brightnessOnly; + @XmlElement(name = "ReliefFactor") + protected Double reliefFactor; + + /** + * Gets the value of the brightnessOnly property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isBrightnessOnly() { + return brightnessOnly; + } + + /** + * Sets the value of the brightnessOnly property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setBrightnessOnly(Boolean value) { + this.brightnessOnly = value; + } + + /** + * Gets the value of the reliefFactor property. + * + * @return + * possible object is + * {@link Double } + * + */ + public Double getReliefFactor() { + return reliefFactor; + } + + /** + * Sets the value of the reliefFactor property. + * + * @param value + * allowed object is + * {@link Double } + * + */ + public void setReliefFactor(Double value) { + this.reliefFactor = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ShowType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ShowType.java new file mode 100644 index 0000000..77c7ceb --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ShowType.java @@ -0,0 +1,67 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlEnumValue; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for showType. + * + *

The following schema fragment specifies the expected content contained within this class. + *

+ *

+ * <simpleType name="showType">
+ *   <restriction base="{http://www.w3.org/2001/XMLSchema}token">
+ *     <enumeration value="new"/>
+ *     <enumeration value="replace"/>
+ *     <enumeration value="embed"/>
+ *     <enumeration value="other"/>
+ *     <enumeration value="none"/>
+ *   </restriction>
+ * </simpleType>
+ * 
+ * + */ +@XmlType(name = "showType", namespace = "http://www.w3.org/1999/xlink") +@XmlEnum +public enum ShowType { + + @XmlEnumValue("new") + NEW("new"), + @XmlEnumValue("replace") + REPLACE("replace"), + @XmlEnumValue("embed") + EMBED("embed"), + @XmlEnumValue("other") + OTHER("other"), + @XmlEnumValue("none") + NONE("none"); + private final String value; + + ShowType(String v) { + value = v; + } + + public String value() { + return value; + } + + public static ShowType fromValue(String v) { + for (ShowType c: ShowType.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Simple.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Simple.java new file mode 100644 index 0000000..f66f548 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Simple.java @@ -0,0 +1,275 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlType; +import org.w3c.dom.Element; + + +/** + * + * Intended for use as the type of user-declared elements to make them + * simple links. + * + * + *

Java class for simple complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="simple">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <group ref="{http://www.w3.org/1999/xlink}simpleModel"/>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}simpleAttrs"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "simple", namespace = "http://www.w3.org/1999/xlink", propOrder = { + "content" +}) +public class Simple { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String href; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String role; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String arcrole; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected String title; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ShowType show; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink") + protected ActuateType actuate; + + /** + * + * Intended for use as the type of user-declared elements to make them + * simple links. + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getContent().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Element } + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.SIMPLE; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * Gets the value of the href property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getHref() { + return href; + } + + /** + * Sets the value of the href property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setHref(String value) { + this.href = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRole(String value) { + this.role = value; + } + + /** + * Gets the value of the arcrole property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getArcrole() { + return arcrole; + } + + /** + * Sets the value of the arcrole property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArcrole(String value) { + this.arcrole = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the show property. + * + * @return + * possible object is + * {@link ShowType } + * + */ + public ShowType getShow() { + return show; + } + + /** + * Sets the value of the show property. + * + * @param value + * allowed object is + * {@link ShowType } + * + */ + public void setShow(ShowType value) { + this.show = value; + } + + /** + * Gets the value of the actuate property. + * + * @return + * possible object is + * {@link ActuateType } + * + */ + public ActuateType getActuate() { + return actuate; + } + + /** + * Sets the value of the actuate property. + * + * @param value + * allowed object is + * {@link ActuateType } + * + */ + public void setActuate(ActuateType value) { + this.actuate = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SpatialOpsType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SpatialOpsType.java new file mode 100644 index 0000000..40cb4e2 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SpatialOpsType.java @@ -0,0 +1,43 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for SpatialOpsType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="SpatialOpsType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SpatialOpsType", namespace = "http://www.opengis.net/ogc") +@XmlSeeAlso({ + BinarySpatialOpType.class, + DistanceBufferType.class, + BBOXType.class +}) +public abstract class SpatialOpsType { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Stroke.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Stroke.java new file mode 100644 index 0000000..ef766d5 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/Stroke.java @@ -0,0 +1,136 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <choice minOccurs="0">
+ *           <element ref="{http://www.opengis.net/sld}GraphicFill"/>
+ *           <element ref="{http://www.opengis.net/sld}GraphicStroke"/>
+ *         </choice>
+ *         <element ref="{http://www.opengis.net/sld}CssParameter" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "graphicFill", + "graphicStroke", + "cssParameter" +}) +@XmlRootElement(name = "Stroke") +public class Stroke { + + @XmlElement(name = "GraphicFill") + protected GraphicFill graphicFill; + @XmlElement(name = "GraphicStroke") + protected GraphicStroke graphicStroke; + @XmlElement(name = "CssParameter") + protected List cssParameter; + + /** + * Gets the value of the graphicFill property. + * + * @return + * possible object is + * {@link GraphicFill } + * + */ + public GraphicFill getGraphicFill() { + return graphicFill; + } + + /** + * Sets the value of the graphicFill property. + * + * @param value + * allowed object is + * {@link GraphicFill } + * + */ + public void setGraphicFill(GraphicFill value) { + this.graphicFill = value; + } + + /** + * Gets the value of the graphicStroke property. + * + * @return + * possible object is + * {@link GraphicStroke } + * + */ + public GraphicStroke getGraphicStroke() { + return graphicStroke; + } + + /** + * Sets the value of the graphicStroke property. + * + * @param value + * allowed object is + * {@link GraphicStroke } + * + */ + public void setGraphicStroke(GraphicStroke value) { + this.graphicStroke = value; + } + + /** + * Gets the value of the cssParameter property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the cssParameter property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getCssParameter().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link CssParameter } + * + * + */ + public List getCssParameter() { + if (cssParameter == null) { + cssParameter = new ArrayList(); + } + return this.cssParameter; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyleListType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyleListType.java new file mode 100644 index 0000000..d1c3262 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyleListType.java @@ -0,0 +1,76 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for StyleListType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="StyleListType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Style" type="{http://www.opengis.net/context}StyleType" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "StyleListType", namespace = "http://www.opengis.net/context", propOrder = { + "style" +}) +public class StyleListType { + + @XmlElement(name = "Style") + protected List style; + + /** + * Gets the value of the style property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the style property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getStyle().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link StyleType } + * + * + */ + public List getStyle() { + if (style == null) { + style = new ArrayList(); + } + return this.style; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyleType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyleType.java new file mode 100644 index 0000000..e847096 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyleType.java @@ -0,0 +1,211 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for StyleType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="StyleType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice>
+ *         <sequence>
+ *           <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           <element name="Title" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           <element name="Abstract" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *           <element name="LegendURL" type="{http://www.opengis.net/context}URLType" minOccurs="0"/>
+ *         </sequence>
+ *         <element name="SLD" type="{http://www.opengis.net/context}SLDType" minOccurs="0"/>
+ *       </choice>
+ *       <attribute name="current" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "StyleType", namespace = "http://www.opengis.net/context", propOrder = { + "name", + "title", + "_abstract", + "legendURL", + "sld" +}) +public class StyleType { + + @XmlElement(name = "Name") + protected String name; + @XmlElement(name = "Title") + protected String title; + @XmlElement(name = "Abstract") + protected String _abstract; + @XmlElement(name = "LegendURL") + protected URLType legendURL; + @XmlElement(name = "SLD") + protected SLDType sld; + @XmlAttribute + protected Boolean current; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the abstract property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAbstract() { + return _abstract; + } + + /** + * Sets the value of the abstract property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAbstract(String value) { + this._abstract = value; + } + + /** + * Gets the value of the legendURL property. + * + * @return + * possible object is + * {@link URLType } + * + */ + public URLType getLegendURL() { + return legendURL; + } + + /** + * Sets the value of the legendURL property. + * + * @param value + * allowed object is + * {@link URLType } + * + */ + public void setLegendURL(URLType value) { + this.legendURL = value; + } + + /** + * Gets the value of the sld property. + * + * @return + * possible object is + * {@link SLDType } + * + */ + public SLDType getSLD() { + return sld; + } + + /** + * Sets the value of the sld property. + * + * @param value + * allowed object is + * {@link SLDType } + * + */ + public void setSLD(SLDType value) { + this.sld = value; + } + + /** + * Gets the value of the current property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isCurrent() { + return current; + } + + /** + * Sets the value of the current property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setCurrent(Boolean value) { + this.current = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyledLayerDescriptor.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyledLayerDescriptor.java new file mode 100644 index 0000000..bfb2c35 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/StyledLayerDescriptor.java @@ -0,0 +1,202 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElements; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Name" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Title" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Abstract" minOccurs="0"/>
+ *         <choice maxOccurs="unbounded" minOccurs="0">
+ *           <element ref="{http://www.opengis.net/sld}NamedLayer"/>
+ *           <element ref="{http://www.opengis.net/sld}UserLayer"/>
+ *         </choice>
+ *       </sequence>
+ *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}string" fixed="1.0.0" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "name", + "title", + "_abstract", + "namedLayerOrUserLayer" +}) +@XmlRootElement(name = "StyledLayerDescriptor") +public class StyledLayerDescriptor { + + @XmlElement(name = "Name") + protected String name; + @XmlElement(name = "Title") + protected String title; + @XmlElement(name = "Abstract") + protected String _abstract; + @XmlElements({ + @XmlElement(name = "UserLayer", type = UserLayer.class), + @XmlElement(name = "NamedLayer", type = NamedLayer.class) + }) + protected List namedLayerOrUserLayer; + @XmlAttribute(required = true) + protected String version; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the abstract property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAbstract() { + return _abstract; + } + + /** + * Sets the value of the abstract property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAbstract(String value) { + this._abstract = value; + } + + /** + * Gets the value of the namedLayerOrUserLayer property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the namedLayerOrUserLayer property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getNamedLayerOrUserLayer().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link UserLayer } + * {@link NamedLayer } + * + * + */ + public List getNamedLayerOrUserLayer() { + if (namedLayerOrUserLayer == null) { + namedLayerOrUserLayer = new ArrayList(); + } + return this.namedLayerOrUserLayer; + } + + /** + * Gets the value of the version property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + if (version == null) { + return "1.0.0"; + } else { + return version; + } + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVersion(String value) { + this.version = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SymbolizerType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SymbolizerType.java new file mode 100644 index 0000000..fe816ab --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/SymbolizerType.java @@ -0,0 +1,51 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * A "SymbolizerType" is an abstract type for encoding the graphical + * properties used to portray geographic information. Concrete symbol + * types are derived from this base type. + * + * + *

Java class for SymbolizerType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="SymbolizerType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SymbolizerType") +@XmlSeeAlso({ + LineSymbolizer.class, + PointSymbolizer.class, + PolygonSymbolizer.class, + TextSymbolizer.class, + RasterSymbolizer.class +}) +public abstract class SymbolizerType { + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TextSymbolizer.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TextSymbolizer.java new file mode 100644 index 0000000..fb119b7 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TextSymbolizer.java @@ -0,0 +1,211 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/sld}SymbolizerType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Geometry" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Label" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Font" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}LabelPlacement" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Halo" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Fill" minOccurs="0"/>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "geometry", + "label", + "font", + "labelPlacement", + "halo", + "fill" +}) +public class TextSymbolizer + extends SymbolizerType +{ + + @XmlElement(name = "Geometry") + protected Geometry geometry; + @XmlElement(name = "Label") + protected ParameterValueType label; + @XmlElement(name = "Font") + protected Font font; + @XmlElement(name = "LabelPlacement") + protected LabelPlacement labelPlacement; + @XmlElement(name = "Halo") + protected Halo halo; + @XmlElement(name = "Fill") + protected Fill fill; + + /** + * Gets the value of the geometry property. + * + * @return + * possible object is + * {@link Geometry } + * + */ + public Geometry getGeometry() { + return geometry; + } + + /** + * Sets the value of the geometry property. + * + * @param value + * allowed object is + * {@link Geometry } + * + */ + public void setGeometry(Geometry value) { + this.geometry = value; + } + + /** + * Gets the value of the label property. + * + * @return + * possible object is + * {@link ParameterValueType } + * + */ + public ParameterValueType getLabel() { + return label; + } + + /** + * Sets the value of the label property. + * + * @param value + * allowed object is + * {@link ParameterValueType } + * + */ + public void setLabel(ParameterValueType value) { + this.label = value; + } + + /** + * Gets the value of the font property. + * + * @return + * possible object is + * {@link Font } + * + */ + public Font getFont() { + return font; + } + + /** + * Sets the value of the font property. + * + * @param value + * allowed object is + * {@link Font } + * + */ + public void setFont(Font value) { + this.font = value; + } + + /** + * Gets the value of the labelPlacement property. + * + * @return + * possible object is + * {@link LabelPlacement } + * + */ + public LabelPlacement getLabelPlacement() { + return labelPlacement; + } + + /** + * Sets the value of the labelPlacement property. + * + * @param value + * allowed object is + * {@link LabelPlacement } + * + */ + public void setLabelPlacement(LabelPlacement value) { + this.labelPlacement = value; + } + + /** + * Gets the value of the halo property. + * + * @return + * possible object is + * {@link Halo } + * + */ + public Halo getHalo() { + return halo; + } + + /** + * Sets the value of the halo property. + * + * @param value + * allowed object is + * {@link Halo } + * + */ + public void setHalo(Halo value) { + this.halo = value; + } + + /** + * Gets the value of the fill property. + * + * @return + * possible object is + * {@link Fill } + * + */ + public Fill getFill() { + return fill; + } + + /** + * Sets the value of the fill property. + * + * @param value + * allowed object is + * {@link Fill } + * + */ + public void setFill(Fill value) { + this.fill = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TitleEltType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TitleEltType.java new file mode 100644 index 0000000..be87ee6 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TitleEltType.java @@ -0,0 +1,141 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlType; +import org.w3c.dom.Element; + + +/** + *

Java class for titleEltType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="titleEltType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <group ref="{http://www.w3.org/1999/xlink}titleModel"/>
+ *       <attGroup ref="{http://www.w3.org/1999/xlink}titleAttrs"/>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "titleEltType", namespace = "http://www.w3.org/1999/xlink", propOrder = { + "content" +}) +public class TitleEltType { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + @XmlAttribute(namespace = "http://www.w3.org/1999/xlink", required = true) + protected TypeType type; + @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace") + protected String lang; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getContent().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Element } + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link TypeType } + * + */ + public TypeType getType() { + if (type == null) { + return TypeType.TITLE; + } else { + return type; + } + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link TypeType } + * + */ + public void setType(TypeType value) { + this.type = value; + } + + /** + * + * xml:lang is not required, but provides much of the + * motivation for title elements in addition to attributes, and so + * is provided here for convenience. + * + * + * @return + * possible object is + * {@link String } + * + */ + public String getLang() { + return lang; + } + + /** + * Sets the value of the lang property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLang(String value) { + this.lang = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TypeType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TypeType.java new file mode 100644 index 0000000..628aca7 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/TypeType.java @@ -0,0 +1,70 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlEnumValue; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for typeType. + * + *

The following schema fragment specifies the expected content contained within this class. + *

+ *

+ * <simpleType name="typeType">
+ *   <restriction base="{http://www.w3.org/2001/XMLSchema}token">
+ *     <enumeration value="simple"/>
+ *     <enumeration value="extended"/>
+ *     <enumeration value="title"/>
+ *     <enumeration value="resource"/>
+ *     <enumeration value="locator"/>
+ *     <enumeration value="arc"/>
+ *   </restriction>
+ * </simpleType>
+ * 
+ * + */ +@XmlType(name = "typeType", namespace = "http://www.w3.org/1999/xlink") +@XmlEnum +public enum TypeType { + + @XmlEnumValue("simple") + SIMPLE("simple"), + @XmlEnumValue("extended") + EXTENDED("extended"), + @XmlEnumValue("title") + TITLE("title"), + @XmlEnumValue("resource") + RESOURCE("resource"), + @XmlEnumValue("locator") + LOCATOR("locator"), + @XmlEnumValue("arc") + ARC("arc"); + private final String value; + + TypeType(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TypeType fromValue(String v) { + for (TypeType c: TypeType.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/URLType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/URLType.java new file mode 100644 index 0000000..d63e1cb --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/URLType.java @@ -0,0 +1,152 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.math.BigInteger; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for URLType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="URLType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="OnlineResource" type="{http://www.opengis.net/context}OnlineResourceType"/>
+ *       </sequence>
+ *       <attribute name="width" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="height" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="format" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "URLType", namespace = "http://www.opengis.net/context", propOrder = { + "onlineResource" +}) +public class URLType { + + @XmlElement(name = "OnlineResource", required = true) + protected OnlineResourceType onlineResource; + @XmlAttribute + protected BigInteger width; + @XmlAttribute + protected BigInteger height; + @XmlAttribute + protected String format; + + /** + * Gets the value of the onlineResource property. + * + * @return + * possible object is + * {@link OnlineResourceType } + * + */ + public OnlineResourceType getOnlineResource() { + return onlineResource; + } + + /** + * Sets the value of the onlineResource property. + * + * @param value + * allowed object is + * {@link OnlineResourceType } + * + */ + public void setOnlineResource(OnlineResourceType value) { + this.onlineResource = value; + } + + /** + * Gets the value of the width property. + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getWidth() { + return width; + } + + /** + * Sets the value of the width property. + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setWidth(BigInteger value) { + this.width = value; + } + + /** + * Gets the value of the height property. + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getHeight() { + return height; + } + + /** + * Sets the value of the height property. + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setHeight(BigInteger value) { + this.height = value; + } + + /** + * Gets the value of the format property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFormat() { + return format; + } + + /** + * Sets the value of the format property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFormat(String value) { + this.format = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UnaryLogicOpType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UnaryLogicOpType.java new file mode 100644 index 0000000..7d7ee60 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UnaryLogicOpType.java @@ -0,0 +1,176 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for UnaryLogicOpType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="UnaryLogicOpType">
+ *   <complexContent>
+ *     <extension base="{http://www.opengis.net/ogc}LogicOpsType">
+ *       <sequence>
+ *         <choice>
+ *           <element ref="{http://www.opengis.net/ogc}comparisonOps"/>
+ *           <element ref="{http://www.opengis.net/ogc}spatialOps"/>
+ *           <element ref="{http://www.opengis.net/ogc}logicOps"/>
+ *         </choice>
+ *       </sequence>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "UnaryLogicOpType", namespace = "http://www.opengis.net/ogc", propOrder = { + "comparisonOps", + "spatialOps", + "logicOps" +}) +public class UnaryLogicOpType + extends LogicOpsType +{ + + @XmlElementRef(name = "comparisonOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement comparisonOps; + @XmlElementRef(name = "spatialOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement spatialOps; + @XmlElementRef(name = "logicOps", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement logicOps; + + /** + * Gets the value of the comparisonOps property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsLikeType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsBetweenType }{@code >} + * {@link JAXBElement }{@code <}{@link ComparisonOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsNullType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * + */ + public JAXBElement getComparisonOps() { + return comparisonOps; + } + + /** + * Sets the value of the comparisonOps property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsLikeType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsBetweenType }{@code >} + * {@link JAXBElement }{@code <}{@link ComparisonOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link PropertyIsNullType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryComparisonOpType }{@code >} + * + */ + public void setComparisonOps(JAXBElement value) { + this.comparisonOps = ((JAXBElement ) value); + } + + /** + * Gets the value of the spatialOps property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BBOXType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link SpatialOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * + */ + public JAXBElement getSpatialOps() { + return spatialOps; + } + + /** + * Sets the value of the spatialOps property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link DistanceBufferType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BBOXType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * {@link JAXBElement }{@code <}{@link SpatialOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinarySpatialOpType }{@code >} + * + */ + public void setSpatialOps(JAXBElement value) { + this.spatialOps = ((JAXBElement ) value); + } + + /** + * Gets the value of the logicOps property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link LogicOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link UnaryLogicOpType }{@code >} + * + */ + public JAXBElement getLogicOps() { + return logicOps; + } + + /** + * Sets the value of the logicOps property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link LogicOpsType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryLogicOpType }{@code >} + * {@link JAXBElement }{@code <}{@link UnaryLogicOpType }{@code >} + * + */ + public void setLogicOps(JAXBElement value) { + this.logicOps = ((JAXBElement ) value); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UpperBoundaryType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UpperBoundaryType.java new file mode 100644 index 0000000..dafbd94 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UpperBoundaryType.java @@ -0,0 +1,84 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for UpperBoundaryType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="UpperBoundaryType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/ogc}expression"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "UpperBoundaryType", namespace = "http://www.opengis.net/ogc", propOrder = { + "expression" +}) +public class UpperBoundaryType { + + @XmlElementRef(name = "expression", namespace = "http://www.opengis.net/ogc", type = JAXBElement.class) + protected JAXBElement expression; + + /** + * Gets the value of the expression property. + * + * @return + * possible object is + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + */ + public JAXBElement getExpression() { + return expression; + } + + /** + * Sets the value of the expression property. + * + * @param value + * allowed object is + * {@link JAXBElement }{@code <}{@link PropertyNameType }{@code >} + * {@link JAXBElement }{@code <}{@link LiteralType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link ExpressionType }{@code >} + * {@link JAXBElement }{@code <}{@link BinaryOperatorType }{@code >} + * {@link JAXBElement }{@code <}{@link FunctionType }{@code >} + * + */ + public void setExpression(JAXBElement value) { + this.expression = ((JAXBElement ) value); + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UserLayer.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UserLayer.java new file mode 100644 index 0000000..3fab626 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UserLayer.java @@ -0,0 +1,162 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Name" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}RemoteOWS" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}LayerFeatureConstraints"/>
+ *         <element ref="{http://www.opengis.net/sld}UserStyle" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "name", + "remoteOWS", + "layerFeatureConstraints", + "userStyle" +}) +@XmlRootElement(name = "UserLayer") +public class UserLayer { + + @XmlElement(name = "Name") + protected String name; + @XmlElement(name = "RemoteOWS") + protected RemoteOWS remoteOWS; + @XmlElement(name = "LayerFeatureConstraints", required = true) + protected LayerFeatureConstraints layerFeatureConstraints; + @XmlElement(name = "UserStyle", required = true) + protected List userStyle; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the remoteOWS property. + * + * @return + * possible object is + * {@link RemoteOWS } + * + */ + public RemoteOWS getRemoteOWS() { + return remoteOWS; + } + + /** + * Sets the value of the remoteOWS property. + * + * @param value + * allowed object is + * {@link RemoteOWS } + * + */ + public void setRemoteOWS(RemoteOWS value) { + this.remoteOWS = value; + } + + /** + * Gets the value of the layerFeatureConstraints property. + * + * @return + * possible object is + * {@link LayerFeatureConstraints } + * + */ + public LayerFeatureConstraints getLayerFeatureConstraints() { + return layerFeatureConstraints; + } + + /** + * Sets the value of the layerFeatureConstraints property. + * + * @param value + * allowed object is + * {@link LayerFeatureConstraints } + * + */ + public void setLayerFeatureConstraints(LayerFeatureConstraints value) { + this.layerFeatureConstraints = value; + } + + /** + * Gets the value of the userStyle property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the userStyle property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getUserStyle().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link UserStyle } + * + * + */ + public List getUserStyle() { + if (userStyle == null) { + userStyle = new ArrayList(); + } + return this.userStyle; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UserStyle.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UserStyle.java new file mode 100644 index 0000000..e15d3f9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/UserStyle.java @@ -0,0 +1,190 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{http://www.opengis.net/sld}Name" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Title" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}Abstract" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}IsDefault" minOccurs="0"/>
+ *         <element ref="{http://www.opengis.net/sld}FeatureTypeStyle" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "name", + "title", + "_abstract", + "isDefault", + "featureTypeStyle" +}) +@XmlRootElement(name = "UserStyle") +public class UserStyle { + + @XmlElement(name = "Name") + protected String name; + @XmlElement(name = "Title") + protected String title; + @XmlElement(name = "Abstract") + protected String _abstract; + @XmlElement(name = "IsDefault") + protected Boolean isDefault; + @XmlElement(name = "FeatureTypeStyle", required = true) + protected List featureTypeStyle; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the abstract property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAbstract() { + return _abstract; + } + + /** + * Sets the value of the abstract property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAbstract(String value) { + this._abstract = value; + } + + /** + * Gets the value of the isDefault property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIsDefault() { + return isDefault; + } + + /** + * Sets the value of the isDefault property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsDefault(Boolean value) { + this.isDefault = value; + } + + /** + * Gets the value of the featureTypeStyle property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the featureTypeStyle property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getFeatureTypeStyle().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link FeatureTypeStyle } + * + * + */ + public List getFeatureTypeStyle() { + if (featureTypeStyle == null) { + featureTypeStyle = new ArrayList(); + } + return this.featureTypeStyle; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextCollectionType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextCollectionType.java new file mode 100644 index 0000000..51a98ae --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextCollectionType.java @@ -0,0 +1,108 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ViewContextCollectionType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ViewContextCollectionType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="ViewContextReference" type="{http://www.opengis.net/context}ViewContextReferenceType" maxOccurs="unbounded"/>
+ *       </sequence>
+ *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}string" fixed="1.1.0" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ViewContextCollectionType", namespace = "http://www.opengis.net/context", propOrder = { + "viewContextReference" +}) +public class ViewContextCollectionType { + + @XmlElement(name = "ViewContextReference", required = true) + protected List viewContextReference; + @XmlAttribute(required = true) + protected String version; + + /** + * Gets the value of the viewContextReference property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the viewContextReference property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getViewContextReference().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ViewContextReferenceType } + * + * + */ + public List getViewContextReference() { + if (viewContextReference == null) { + viewContextReference = new ArrayList(); + } + return this.viewContextReference; + } + + /** + * Gets the value of the version property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + if (version == null) { + return "1.1.0"; + } else { + return version; + } + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVersion(String value) { + this.version = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextReferenceType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextReferenceType.java new file mode 100644 index 0000000..4518e60 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextReferenceType.java @@ -0,0 +1,155 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ViewContextReferenceType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ViewContextReferenceType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Title" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         <element name="ContextURL" type="{http://www.opengis.net/context}ContextURLType"/>
+ *       </sequence>
+ *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}anySimpleType" />
+ *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}anySimpleType" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ViewContextReferenceType", namespace = "http://www.opengis.net/context", propOrder = { + "title", + "contextURL" +}) +public class ViewContextReferenceType { + + @XmlElement(name = "Title", required = true) + protected String title; + @XmlElement(name = "ContextURL", required = true) + protected ContextURLType contextURL; + @XmlAttribute(required = true) + @XmlSchemaType(name = "anySimpleType") + protected String version; + @XmlAttribute(required = true) + @XmlSchemaType(name = "anySimpleType") + protected String id; + + /** + * Gets the value of the title property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTitle() { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTitle(String value) { + this.title = value; + } + + /** + * Gets the value of the contextURL property. + * + * @return + * possible object is + * {@link ContextURLType } + * + */ + public ContextURLType getContextURL() { + return contextURL; + } + + /** + * Sets the value of the contextURL property. + * + * @param value + * allowed object is + * {@link ContextURLType } + * + */ + public void setContextURL(ContextURLType value) { + this.contextURL = value; + } + + /** + * Gets the value of the version property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVersion(String value) { + this.version = value; + } + + /** + * Gets the value of the id property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextType.java new file mode 100644 index 0000000..c8ea8cd --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/ViewContextType.java @@ -0,0 +1,158 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for ViewContextType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="ViewContextType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="General" type="{http://www.opengis.net/context}GeneralType"/>
+ *         <element name="LayerList" type="{http://www.opengis.net/context}LayerListType"/>
+ *       </sequence>
+ *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}string" fixed="1.1.0" />
+ *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(namespace = "http://www.opengis.net/context", propOrder = { + "general", + "layerList" +}) +@XmlRootElement(name = "ViewContext") +public class ViewContextType { + + @XmlElement(name = "General", required = true) + protected GeneralType general; + @XmlElement(name = "LayerList", required = true) + protected LayerListType layerList; + @XmlAttribute(required = true) + protected String version; + @XmlAttribute(required = true) + protected String id; + + /** + * Gets the value of the general property. + * + * @return + * possible object is + * {@link GeneralType } + * + */ + public GeneralType getGeneral() { + return general; + } + + /** + * Sets the value of the general property. + * + * @param value + * allowed object is + * {@link GeneralType } + * + */ + public void setGeneral(GeneralType value) { + this.general = value; + } + + /** + * Gets the value of the layerList property. + * + * @return + * possible object is + * {@link LayerListType } + * + */ + public LayerListType getLayerList() { + return layerList; + } + + /** + * Sets the value of the layerList property. + * + * @param value + * allowed object is + * {@link LayerListType } + * + */ + public void setLayerList(LayerListType value) { + this.layerList = value; + } + + /** + * Gets the value of the version property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + if (version == null) { + return "1.1.0"; + } else { + return version; + } + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVersion(String value) { + this.version = value; + } + + /** + * Gets the value of the id property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/WindowType.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/WindowType.java new file mode 100644 index 0000000..76e4a54 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/WindowType.java @@ -0,0 +1,93 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + + +package org.opengeoportal.ogc.wmc.jaxb; + +import java.math.BigInteger; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for WindowType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="WindowType">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="width" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="height" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "WindowType", namespace = "http://www.opengis.net/context") +public class WindowType { + + @XmlAttribute(required = true) + protected BigInteger width; + @XmlAttribute(required = true) + protected BigInteger height; + + /** + * Gets the value of the width property. + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getWidth() { + return width; + } + + /** + * Sets the value of the width property. + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setWidth(BigInteger value) { + this.width = value; + } + + /** + * Gets the value of the height property. + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getHeight() { + return height; + } + + /** + * Sets the value of the height property. + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setHeight(BigInteger value) { + this.height = value; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/jaxb.properties b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/jaxb.properties new file mode 100644 index 0000000..5837a4c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/jaxb.properties @@ -0,0 +1 @@ +javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/package-info.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/package-info.java new file mode 100644 index 0000000..ed960d7 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wmc/jaxb/package-info.java @@ -0,0 +1,25 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.04.02 at 04:08:12 PM EDT +// + +@XmlSchema( + namespace = "http://www.opengis.net/context", + elementFormDefault = XmlNsForm.QUALIFIED, + xmlns = { + @XmlNs(prefix = "", namespaceURI = "http://www.opengis.net/context"), + @XmlNs(prefix = "xlink", namespaceURI = "http://www.w3.org/1999/xlink"), + @XmlNs(prefix = "sld", namespaceURI = "http://www.opengis.net/sld"), + @XmlNs(prefix = "gml", namespaceURI = "http://www.opengis.net/gml"), + @XmlNs(prefix = "ogc", namespaceURI = "http://www.opengis.net/ogc"), + @XmlNs(prefix = "xsi", namespaceURI = "http://www.w3.org/2001/XMLSchema-instance"), + }, + location = "http://schemas.opengis.net/context/1.1.0/context.xsd" + ) +package org.opengeoportal.ogc.wmc.jaxb; + +import javax.xml.bind.annotation.XmlNs; +import javax.xml.bind.annotation.XmlSchema; +import javax.xml.bind.annotation.XmlNsForm; \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/opengeoportal/ogc/wms/WmsDescribeLayer.java b/geoportal_1/src/main/java/org/opengeoportal/ogc/wms/WmsDescribeLayer.java new file mode 100644 index 0000000..3eda446 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/ogc/wms/WmsDescribeLayer.java @@ -0,0 +1,111 @@ +package org.opengeoportal.ogc.wms; + +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.ogc.OgcInfoRequest; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.ogc.OwsInfo.OwsProtocol; +import org.opengeoportal.utilities.OgpXmlUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; + +public class WmsDescribeLayer implements OgcInfoRequest { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + public final String VERSION = "1.1.1"; + + @Override + public String createRequest(String layerName){ + /* + * http://localhost:8080/geoserver/topp/wms?service=WMS +&version=1.1.1 +&request=DescribeLayer +&layers=topp:coverage + */ + String describeFeatureRequest = "service=WMS&version=" + VERSION + "&request=DescribeLayer&layers=" + layerName; + return describeFeatureRequest; + } + + @Override + public OwsInfo parseResponse(InputStream inputStream) throws Exception { + + /* + * + + + + + + + * + * + * + */ + + //Parse the document..closes inputStream + Document document = OgpXmlUtils.getDocument(inputStream); + + //initialize return variable + Map describeLayerInfo = new HashMap(); + + //get the namespace info + Node schemaNode = document.getFirstChild(); + OgpXmlUtils.handleServiceException(schemaNode); + + try { + Node layerDescription = document.getElementsByTagName("LayerDescription").item(0); + + NamedNodeMap attributes = layerDescription.getAttributes(); + String name = attributes.getNamedItem("name").getTextContent(); + logger.info(name); + describeLayerInfo.put("qualifiedName", name); + + Node urlNode = attributes.getNamedItem("owsURL"); + if (urlNode.equals(null)){ + urlNode = attributes.getNamedItem("wfs"); + if (urlNode.equals(null)){ + urlNode = attributes.getNamedItem("wcs"); + } + } + String url = urlNode.getNodeValue(); + describeLayerInfo.put("owsUrl", url); + logger.info(url); + + String type = attributes.getNamedItem("owsType").getTextContent(); + describeLayerInfo.put("owsType", type); + logger.info(type); + + } catch (Exception e){ + logger.error(document.getFirstChild().getTextContent()); + throw new Exception("Error getting layer info from DescribeLayer: "+ e.getMessage()); + } + + OwsInfo owsResponse = new OwsInfo(); + owsResponse.setOwsProtocol(OwsProtocol.parseOwsProtocol(this.getOgcProtocol())); + owsResponse.setInfoMap(describeLayerInfo); + + return owsResponse; + + } + + + @Override + public String getMethod() { + return "GET"; + } + + @Override + public String getOgcProtocol() { + return "wms"; + } + + @Override + public String getVersion() { + return VERSION; + } +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GenericProxy.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/GenericProxy.java similarity index 56% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GenericProxy.java rename to geoportal_1/src/main/java/org/opengeoportal/proxy/GenericProxy.java index d7db8e0..270bccb 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GenericProxy.java +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/GenericProxy.java @@ -1,11 +1,8 @@ -package org.OpenGeoPortal.Proxy; - -import java.io.InputStream; +package org.opengeoportal.proxy; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface GenericProxy { public void proxyRequest(HttpServletRequest request, HttpServletResponse response, String remoteUrl); - public InputStream getContentStream(HttpServletRequest request, HttpServletResponse response, String remoteUrl); } diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/GenericProxyImpl.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/GenericProxyImpl.java new file mode 100644 index 0000000..93d433e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/GenericProxyImpl.java @@ -0,0 +1,91 @@ +package org.opengeoportal.proxy; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.BitSet; +import java.util.Enumeration; +import java.util.Formatter; + +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.IOUtils; +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.HttpHeaders; +import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIUtils; +import org.apache.http.entity.InputStreamEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicHttpEntityEnclosingRequest; +import org.apache.http.message.HeaderGroup; +import org.apache.http.util.EntityUtils; +import org.opengeoportal.utilities.http.OgpHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +public class GenericProxyImpl implements GenericProxy { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + @Qualifier("httpClient.pooling") + protected OgpHttpClient ogpHttpClient; + + @Override + public void proxyRequest(HttpServletRequest request, + HttpServletResponse response, String remoteUrl){ + + try { + this.doProxy(request, response, remoteUrl); + } catch (IOException e) { + logger.error(e.getLocalizedMessage()); + + } + + + } + + protected void doProxy(HttpServletRequest request, + HttpServletResponse response, String remoteUrl) throws IOException{ + + CloseableHttpClient httpClient = ogpHttpClient.getCloseableHttpClient(); + + + HttpGet proxyRequest = new HttpGet(remoteUrl); + + + CloseableHttpResponse proxyResponse = null; + try { + proxyResponse = httpClient.execute(proxyRequest); + } catch (ClientProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + logger.info(proxyResponse.getStatusLine().getReasonPhrase()); + IOUtils.copy(proxyResponse.getEntity().getContent(), response.getOutputStream()); + } finally { + proxyResponse.close(); + } + + }; + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GetCapabilitiesWFSProxy.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/GetCapabilitiesWFSProxy.java similarity index 99% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GetCapabilitiesWFSProxy.java rename to geoportal_1/src/main/java/org/opengeoportal/proxy/GetCapabilitiesWFSProxy.java index f23780e..ab31a32 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GetCapabilitiesWFSProxy.java +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/GetCapabilitiesWFSProxy.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Proxy; +package org.opengeoportal.proxy; import java.io.IOException; import java.io.InputStream; @@ -26,8 +26,8 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.OpenGeoPortal.Metadata.LayerInfoRetriever; -import org.OpenGeoPortal.Solr.SolrRecord; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.solr.SolrRecord; import org.springframework.web.HttpRequestHandler; import org.w3c.dom.Document; import org.w3c.dom.Element; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GetCapabilitiesWMSProxy.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/GetCapabilitiesWMSProxy.java similarity index 94% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GetCapabilitiesWMSProxy.java rename to geoportal_1/src/main/java/org/opengeoportal/proxy/GetCapabilitiesWMSProxy.java index 638433a..75e4401 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/GetCapabilitiesWMSProxy.java +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/GetCapabilitiesWMSProxy.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Proxy; +package org.opengeoportal.proxy; import java.io.IOException; import java.io.StringWriter; @@ -22,10 +22,10 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.OpenGeoPortal.Metadata.LayerInfoRetriever; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.OpenGeoPortal.Utilities.ParseJSONSolrLocationField; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.LocationFieldUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.HttpRequestHandler; @@ -114,8 +114,8 @@ public void handleRequest(HttpServletRequest request, SolrRecord firstRecord = layerRecords.get(0); //String institution = firstRecord.getInstitution(); - String servicePoint = firstRecord.getLocation(); - servicePoint = ParseJSONSolrLocationField.getWmsUrl(servicePoint); + String location = firstRecord.getLocation(); + String servicePoint = LocationFieldUtils.getWmsUrl(location); String serverName = servicePoint.substring(0, servicePoint.indexOf("/wms")); logger.debug(serverName); genericProxy.proxyRequest(request, response, servicePoint + "request=getCapabilities&version=1.1.1"); diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageCompositor.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageCompositor.java similarity index 50% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageCompositor.java rename to geoportal_1/src/main/java/org/opengeoportal/proxy/ImageCompositor.java index fccf0ad..d911ace 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/ImageCompositor.java +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageCompositor.java @@ -1,6 +1,6 @@ -package org.OpenGeoPortal.Proxy; +package org.opengeoportal.proxy; -import org.OpenGeoPortal.Proxy.Controllers.ImageRequest; +import org.opengeoportal.proxy.controllers.ImageRequest; public interface ImageCompositor { diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageCompositorImpl.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageCompositorImpl.java new file mode 100644 index 0000000..8568ad1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageCompositorImpl.java @@ -0,0 +1,311 @@ +package org.opengeoportal.proxy; + +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.awt.image.IndexColorModel; +import java.awt.image.RescaleOp; +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import javax.imageio.ImageIO; + +import org.opengeoportal.proxy.controllers.ImageRequest; +import org.opengeoportal.proxy.controllers.ImageRequest.ImageStatus; +import org.opengeoportal.proxy.controllers.ImageRequest.LayerImage; +import org.opengeoportal.utilities.DirectoryRetriever; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; + +public class ImageCompositorImpl implements ImageCompositor { + private static final String FORMAT_SUFFIX = "png"; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + private Graphics2D compositeImageGraphicsObj = null; + @Autowired + private DirectoryRetriever directoryRetriever; + + private int width; + private int height; + private int maxSizeMB; + private BufferedImage compositeImage = null; + + + + @Async + @Override + public void createComposite(ImageRequest imageRequest) { + + logger.debug("Starting compositing..."); + + try { + + //at this point, we need to iterate over the zIndexes, construct appropriate urls, layer on top of image, then write to a file + //should sort based on zOrder + List layerImageList = imageRequest.getLayers(); + Collections.sort(layerImageList); + + //we need to do some data validation for width and height here. if the image is too big, we will get an OutOfMemoryError + setDimensions(imageRequest.getHeight(), imageRequest.getWidth()); + + for (LayerImage layerImage: layerImageList){ + + //now we have everything we need to create a request + //this needs to be done for each image received + File imgFile = null; + try { + imgFile = layerImage.getImageFileFuture().get(4, TimeUnit.MINUTES); + } catch (TimeoutException e) { + //just skip it + logger.error("There was an error retrieving this layer image. The process timed out. Skipping..."); + layerImage.setImageStatus(ImageStatus.FAILED); + e.printStackTrace(); + continue; + } catch (ExecutionException e){ + logger.error("threw execution exception on 'get'."); + layerImage.setImageStatus(ImageStatus.FAILED); + e.printStackTrace(); + continue; + } + + + try{ + logger.info("adding image to composite: " + layerImage.getLayerId()); + addImageToComposite(imgFile, layerImage.getOpacity()); + layerImage.setImageStatus(ImageStatus.SUCCESS); + } catch (Exception e){ + //just skip it + logger.error("There was an error processing this layer image. Skipping..."); + layerImage.setImageStatus(ImageStatus.FAILED); + e.printStackTrace(); + } + + } + + if (compositeImage != null){ + imageRequest.setDownloadFile(writeImage(compositeImage)); + } else { + throw new Exception("Image is null!"); + } + + } catch (Exception e){ + e.printStackTrace(); + for (LayerImage layerImage: imageRequest.getLayers()){ + layerImage.setImageStatus(ImageStatus.FAILED); + } + } finally { + if (compositeImageGraphicsObj != null){ + compositeImageGraphicsObj.dispose(); + } + } + } + + + private void setDimensions(Integer height, Integer width) throws Exception { + //should I just throw an exception if there is a negative value? + height = Math.abs(height); + width = Math.abs(width); + + Long estImgSize = height.longValue() * width.longValue() * 4; //number of bytes + if (estImgSize >= getMaxSizeMB() * 1048576){ + //megaBytes * 1048576 bytes/MB + throw new Exception("Image is too large! ['est. " + Long.toString(estImgSize/1048576) + " MB'] Not enough memory to process."); + } + this.height = height; + this.width = width; + + } + + + private File getDirectory() throws IOException{ + //? + File downloadDirectory = this.directoryRetriever.getDownloadDirectory(); + File newDir = File.createTempFile("OGP", "", downloadDirectory); + newDir.delete(); + //Boolean success= + newDir.mkdir(); + newDir.setReadable(true); + newDir.setWritable(true); + return newDir; + } + + private File writeImage(BufferedImage compositeImage) throws IOException{ + File imageDirectory = getDirectory(); + File outputFile = getOutputFile(imageDirectory); + try { + //write image to file + ImageIO.write(compositeImage, FORMAT_SUFFIX, outputFile); + } catch (IOException e) { + //... + logger.warn("Exception writing image to disk."); + } + + logger.debug("Image written"); + return outputFile; + } + + private File getOutputFile(File imageDirectory){ + File outputFile; + do { + String outputFileName = "OGPImage." + FORMAT_SUFFIX; + outputFile = new File(imageDirectory, outputFileName); + } while (outputFile.exists()); + return outputFile; + } + + private Graphics2D createCompositeImage(int width, int height){ + logger.debug("Creating image composite..."); + //we need to do some data validation for width and height here. if the image is too big, we will get an OutOfMemoryError + compositeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + compositeImageGraphicsObj = compositeImage.createGraphics(); + return compositeImageGraphicsObj; + } + + private Graphics2D getCompositeImage(){ + if (compositeImageGraphicsObj == null){ + compositeImageGraphicsObj = createCompositeImage(width, height); + } + return compositeImageGraphicsObj; + } + + private void addImageToComposite(File imgFile, int opacity) throws IOException { + //now we have everything we need to create a request + logger.debug("adding layer to composite"); + if (imgFile == null){ + throw new IOException("File is null."); + } + + try{ + BufferedImage currentImg = ImageIO.read(imgFile); + + logger.debug("image retrieved"); + //this needs to be done for each image received + + //this defines opacity + float[] scales = { 1f, 1f, 1f, 1f}; + scales[3] = opacity / 100f; + //System.out.println(scales[3]); + float[] offsets = new float[4]; + RescaleOp rop = new RescaleOp(scales, offsets, null); + + Graphics2D composite = getCompositeImage(); + + logger.debug("drawing layer..."); + try{ + composite.drawImage(currentImg, rop, 0, 0); + + } catch(IllegalArgumentException e){ + if (e.getMessage().contains("indexed")){ + logger.debug("trying to add indexed image."); + composite.drawImage(rescaleAlpha(currentImg, scales[3]), 0, 0, null); + } else { + throw e; + } + + } + + }finally { + //cleaning up temp file + if (imgFile.exists()){ + imgFile.delete(); + } + + } + } + + + public int getMaxSizeMB() { + return maxSizeMB; + } + + + public void setMaxSizeMB(int maxSizeMB) { + this.maxSizeMB = maxSizeMB; + } + + + + /** + * https://forums.oracle.com/thread/1269537 + * @param icm + * @param alphaScaleFactor + * @return + */ + + public static IndexColorModel rescaleAlpha(IndexColorModel icm, float alphaScaleFactor) { + + int size = icm.getMapSize(); + + byte[] reds=new byte[size], greens=new byte[size], blues=new byte[size], alphas=new byte[size]; + + icm.getReds(reds); + + icm.getGreens(greens); + + icm.getBlues(blues); + + icm.getAlphas(alphas); + + rescale(alphas, alphaScaleFactor); + + return new IndexColorModel(8, size, reds, greens, blues, alphas); + + } + + /** + * https://forums.oracle.com/thread/1269537 + * + * @param comps + * @param scaleFactor + */ + + + public static void rescale(byte[] comps, float scaleFactor) { + + for(int i=0; i 255){ + newComp = 255; + } + + comps[i] = (byte) newComp; + + } + + } + + + /** + * https://forums.oracle.com/thread/1269537 + * @param indexed + * @param alphaFactor + * @return + */ + + public static BufferedImage rescaleAlpha(BufferedImage indexed, float alphaFactor) { + + IndexColorModel icm = (IndexColorModel) indexed.getColorModel(); + + return new BufferedImage(rescaleAlpha(icm, alphaFactor), indexed.getRaster(), false, null); + + } + + + + + + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloader.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloader.java new file mode 100644 index 0000000..367069f --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloader.java @@ -0,0 +1,10 @@ +package org.opengeoportal.proxy; + +import java.io.File; +import java.net.URL; +import java.util.concurrent.Future; + +public interface ImageDownloader { + + Future getImage(URL imageLocation) throws Exception; +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloaderFactory.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloaderFactory.java new file mode 100644 index 0000000..eebc506 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloaderFactory.java @@ -0,0 +1,33 @@ +package org.opengeoportal.proxy; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class ImageDownloaderFactory implements ApplicationContextAware { + private ApplicationContext applicationContext; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public ImageDownloader getObject() throws Exception { + logger.info("Creating ImageDownloader bean"); + return applicationContext.getBean(ImageDownloader.class); + } + + public Class getObjectType() { + return ImageDownloader.class; + } + + public boolean isSingleton() { + return false; + } + + @Override + public void setApplicationContext(ApplicationContext appContext) + throws BeansException { + applicationContext = appContext; + + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloaderImpl.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloaderImpl.java new file mode 100644 index 0000000..26b5a06 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageDownloaderImpl.java @@ -0,0 +1,56 @@ +package org.opengeoportal.proxy; + +import java.io.File; +import java.io.InputStream; +import java.net.URL; +import java.util.concurrent.Future; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.opengeoportal.utilities.http.HttpRequester; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; + +public class ImageDownloaderImpl implements ImageDownloader { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired @Qualifier("httpRequester.generic") + private HttpRequester httpRequester; + + @Override + @Async + public Future getImage(URL imageLocation) throws Exception { + + InputStream is = null; + try { + File tempFile = File.createTempFile("img", ".png"); + String query = imageLocation.getQuery(); + String base = imageLocation.toString().replace(query, ""); + + is = this.httpRequester.sendRequest(base, query, "GET"); + String contentType = this.httpRequester.getContentType(); + logger.debug(contentType); + if (contentType.toLowerCase().contains("png")){ + FileUtils.copyInputStreamToFile(is, tempFile); + return new AsyncResult(tempFile); + + } else { + if ((contentType.toLowerCase().contains("xml"))||(contentType.toLowerCase().contains("html"))|| + (contentType.toLowerCase().contains("text"))){ + logger.error("Response content: " + IOUtils.toString(is)); + } + + throw new Exception("Image not found"); + } + + } finally { + IOUtils.closeQuietly(is); + } + + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandler.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandler.java new file mode 100644 index 0000000..61294e9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandler.java @@ -0,0 +1,11 @@ +package org.opengeoportal.proxy; + +import java.util.UUID; + +import org.opengeoportal.proxy.controllers.ImageRequest; + +public interface ImageHandler { + + UUID requestImage(String sessionId, ImageRequest imageRequest) throws Exception; + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandlerFactory.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandlerFactory.java new file mode 100644 index 0000000..9f537d9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandlerFactory.java @@ -0,0 +1,35 @@ +package org.opengeoportal.proxy; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class ImageHandlerFactory implements ApplicationContextAware { + private ApplicationContext applicationContext; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public ImageHandler getObject() throws Exception { + logger.info("Creating ImageHandler bean"); + return applicationContext.getBean(ImageHandler.class); + } + + public Class getObjectType() { + return ImageHandler.class; + } + + public boolean isSingleton() { + return false; + } + + @Override + public void setApplicationContext(ApplicationContext appContext) + throws BeansException { + applicationContext = appContext; + + } + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandlerImpl.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandlerImpl.java new file mode 100644 index 0000000..e7fcf36 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ImageHandlerImpl.java @@ -0,0 +1,151 @@ +package org.opengeoportal.proxy; + +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.Future; + +import org.opengeoportal.config.proxy.ProxyConfigRetriever; +import org.opengeoportal.download.RequestStatusManager; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.proxy.controllers.ImageRequest; +import org.opengeoportal.proxy.controllers.ImageRequest.ImageStatus; +import org.opengeoportal.proxy.controllers.ImageRequest.LayerImage; +import org.opengeoportal.solr.SolrRecord; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +public class ImageHandlerImpl implements ImageHandler { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private RequestStatusManager requestStatusManager; + @Autowired + private ImageCompositor imageCompositor; + @Autowired + private ImageDownloaderFactory imageDownloaderFactory; + @Autowired + private LayerInfoRetriever layerInfoRetriever; + @Autowired + private ProxyConfigRetriever proxyConfigRetriever; + private String baseQuery; + + @Override + public UUID requestImage(String sessionId, ImageRequest imageRequest) throws Exception { + + UUID requestId = registerRequest(sessionId, imageRequest); + logger.debug("Image Request registered: " + requestId.toString()); + downloadLayerImages(imageRequest); + imageCompositor.createComposite(imageRequest); + + return requestId; + } + + private UUID registerRequest(String sessionId, ImageRequest imageRequest) { + UUID requestId = UUID.randomUUID(); + requestStatusManager.addImageRequest(requestId, sessionId, imageRequest); + return requestId; + } + + + private void downloadLayerImages(ImageRequest imageRequest) throws Exception { + + setBaseQuery(imageRequest.getFormat(), imageRequest.getBbox(), imageRequest.getSrs(), + imageRequest.getHeight(), imageRequest.getWidth()); + //populateImageRequest depends on setBaseQuery running first + populateImageRequest(imageRequest); + + List layerImageList = imageRequest.getLayers(); + + for (LayerImage layerImage: layerImageList){ + //now we have everything we need to create a request + //this needs to be done for each image received + try { + logger.info(layerImage.getUrl().toString()); + ImageDownloader imageDownloader = imageDownloaderFactory.getObject(); + Future imgFile = imageDownloader.getImage(layerImage.getUrl()); + layerImage.setImageFileFuture(imgFile); + + } catch (Exception e) { + //just skip it + layerImage.setImageStatus(ImageStatus.FAILED); + logger.error("There was a problem getting this image. Skipping."); + e.printStackTrace(); + } + } + + } + + private void populateImageRequest(ImageRequest imageRequest) throws Exception { + //only retrieve records the user has permission to access data for + List layerInfo = this.layerInfoRetriever.fetchAllowedRecords(imageRequest.getLayerIds()); + logger.info("Number of layers in image: " + Integer.toString(layerInfo.size())); + + for (LayerImage layerImage: imageRequest.getLayers()){ + + String currentId = layerImage.getLayerId(); + + for (SolrRecord solrRecord : layerInfo){ + + if (solrRecord.getLayerId().equalsIgnoreCase(currentId)){ + layerImage.setSolrRecord(solrRecord); + populateLayerUrl(layerImage); + } + } + } + + } + + private void populateLayerUrl(LayerImage layerImage){ + + SolrRecord solrRecord = layerImage.getSolrRecord(); + + String layerQueryString = "&layers=" + solrRecord.getWorkspaceName() + ":" + solrRecord.getName(); + String currentSLD = layerImage.getSld(); + if ((currentSLD != null)&&(!currentSLD.equals("null")&&(!currentSLD.isEmpty()))){ + try { + layerQueryString += "&sld_body=" + URLEncoder.encode(currentSLD, "UTF-8"); + } catch (UnsupportedEncodingException e) { + //problem with the sld encoding...just ignore the sld. + logger.error("There was a problem with the SLD encoding. Requesting image without SLD. "); + } + } + + String baseUrl = ""; + + try{ + baseUrl = this.proxyConfigRetriever.getInternalUrl("wms", solrRecord.getInstitution(), solrRecord.getAccess(),solrRecord.getLocation()); + layerImage.setUrl(new URL(baseUrl + "?" + baseQuery + layerQueryString)); + + } catch (Exception e1) { + e1.printStackTrace(); + logger.error("Problem retrieving a URL for this layer."); + //there's some problem retrieving a url. skip the layer + } + } + + private void setBaseQuery(String format, String bbox, String srs, int height, int width){ + + String genericQueryString; + genericQueryString = "SERVICE=WMS&version=1.1.1&REQUEST=GetMap&FORMAT=" + format + "&SRS=" + srs; + genericQueryString += "&STYLES=&BBOX=" + bbox; + + if (format.equals("image/png")){ + + /*int requestedDpi = 90;//dpi & size options? + url$ += "&format_options=dpi:" + Integer.toString(requestedDpi) + ";"; + width = Integer.toString(Math.round(Integer.parseInt(width) * requestedDpi / 90)); + height = Integer.toString(Math.round(Integer.parseInt(height) * requestedDpi / 90)); + */ + genericQueryString += "&TILED=false&TRANSPARENT=true"; + } + genericQueryString += "&HEIGHT=" + height + "&WIDTH=" + width; + logger.debug(genericQueryString); + baseQuery = genericQueryString; + } + + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/ProxyFactory.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/ProxyFactory.java new file mode 100644 index 0000000..ab411f1 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/ProxyFactory.java @@ -0,0 +1,33 @@ +package org.opengeoportal.proxy; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class ProxyFactory implements ApplicationContextAware { + private ApplicationContext applicationContext; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public GenericProxy getObject() throws Exception { + logger.info("Creating GenericProxy bean"); + return applicationContext.getBean(GenericProxy.class); + } + + public Class getObjectType() { + return GenericProxy.class; + } + + public boolean isSingleton() { + return false; + } + + @Override + public void setApplicationContext(ApplicationContext appContext) + throws BeansException { + applicationContext = appContext; + + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/DynamicOgcController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/DynamicOgcController.java new file mode 100644 index 0000000..b1b7bc8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/DynamicOgcController.java @@ -0,0 +1,771 @@ +package org.opengeoportal.proxy.controllers; + +/** + * Adapted from David Smiley's HTTP reverse proxy/gateway servlet + */ +/** +* Copyright MITRE +* +* 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. +*/ + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.http.*; +import org.apache.http.client.methods.AbortableHttpRequest; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIUtils; +import org.apache.http.entity.InputStreamEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicHttpEntityEnclosingRequest; +import org.apache.http.message.HeaderGroup; +import org.apache.http.util.EntityUtils; +import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.response.QueryResponse; +import org.opengeoportal.metadata.*; +import org.opengeoportal.solr.*; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.OgpUtils; +import org.opengeoportal.utilities.http.OgpHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; +import org.w3c.dom.Node; +import org.xml.sax.SAXException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.StringWriter; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Enumeration; +import java.util.Formatter; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Controller +@RequestMapping("/dynamic") +public class DynamicOgcController { + /* INIT PARAMETER NAME CONSTANTS */ + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /* MISC */ + protected URI targetUri; + + @Autowired + private LayerInfoRetriever layerInfoRetriever; + + private TransformerFactory transformerFactory = TransformerFactory.newInstance(); + private DocumentBuilder builder = null; + + @Autowired + @Qualifier("httpClient.pooling") + private OgpHttpClient ogpHttpClient; + + +/** +* An HTTP reverse proxy/gateway servlet. It is designed to be extended for customization +* if desired. Most of the work is handled by +* Apache HttpClient. +*

+* There are alternatives to a servlet based proxy such as Apache mod_proxy if that is available to you. However +* this servlet is easily customizable by Java, secure-able by your web application's security (e.g. spring-security), +* portable across servlet engines, and is embeddable into another web application. +*

+*

+* Inspiration: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html +*

+* +* @author David Smiley dsmiley@mitre.org> +*/ + + + private void createBuilder() throws ParserConfigurationException{ + // Create a factory + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + //ignore validation, dtd + factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + factory.setValidating(false); + + // Use document builder factory + builder = factory.newDocumentBuilder(); + } + + private Document getDocument(InputStream inputStream) throws SAXException, IOException, ParserConfigurationException{ + try{ + if (builder == null){ + this.createBuilder(); + } + return builder.parse(inputStream); + } finally { + IOUtils.closeQuietly(inputStream); + } + } + + private class UrlToNameContainer { + Set qualifiedNames; + String ogcUrl; + } + + @RequestMapping(value="/wfs", method=RequestMethod.GET, params="request=GetCapabilities") + public ModelAndView doWfsGetCapabilitiesCase(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + return handleGetCapabilities(layerIds, servletRequest, servletResponse); + } + + @RequestMapping(value="/wfs", method=RequestMethod.GET, params="REQUEST=GetCapabilities") + public ModelAndView doWfsGetCapabilities(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + + return handleGetCapabilities(layerIds, servletRequest, servletResponse); + + } + + private ModelAndView handleGetCapabilities(Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception{ + logger.info("wfs get capabilities requested"); + + Map recordMap = getRecordMapFromLayerIds(layerIds); + + //parse the returned XML + + String version = "1.0.0"; + String currentUrl = ""; + String wfsQueryBoilerPlate = "?version=" + version + "&service=wfs"; + String capabilitiesQuery = "&request=GetCapabilities"; + String featureTypeInfo = ""; + CloseableHttpClient proxyClient = ogpHttpClient.getCloseableHttpClient(); + + + for (UrlToNameContainer container : recordMap.values()){ + //this should happen asynchronously? + currentUrl = container.ogcUrl; + HttpResponse response = proxyClient.execute(new HttpGet(currentUrl + wfsQueryBoilerPlate + capabilitiesQuery)); + + InputStream inputStream = response.getEntity().getContent(); + Document document = this.getDocument(inputStream); + Set nameList = container.qualifiedNames; + + featureTypeInfo += this.extractWfsFeatureTypeNodes(document, nameList); + + } + + String onlineResource = ""; + String describeFeatureUrl = ""; + String getFeatureUrl = ""; + + if (recordMap.values().size() == 1){ + //this is a special case... + //if every layer is from a single server, pass that server value into the caps doc for describelayer and getfeature. that way, clients that do the right thing will bypass this ogp service + //otherwise, everything must be proxied + onlineResource = currentUrl; + describeFeatureUrl = currentUrl + wfsQueryBoilerPlate + "&request=DescribeFeatureType"; + getFeatureUrl = currentUrl + wfsQueryBoilerPlate + "&request=GetFeature"; + } else { + //values for describelayer and getFeature should refer back to this controller + String thisUrl = servletRequest.getRequestURL().toString() + "?"; + onlineResource = thisUrl + "ogpids=" + servletRequest.getParameter("ogpids"); + describeFeatureUrl = thisUrl + "request=DescribeFeatureType"; + getFeatureUrl = thisUrl + "request=GetFeature"; + } + + //create the model to return + ModelAndView mav = new ModelAndView("wfs_caps_1_0_0"); + + mav.addObject("onlineResource", StringEscapeUtils.escapeXml(onlineResource)); + mav.addObject("getCapabilities", StringEscapeUtils.escapeXml(servletRequest.getRequestURL().toString() + "?" + servletRequest.getQueryString())); + mav.addObject("describeFeatureUrl", StringEscapeUtils.escapeXml(describeFeatureUrl)); + mav.addObject("getFeatureUrl",StringEscapeUtils.escapeXml(getFeatureUrl)); + mav.addObject("featureTypeInfo", featureTypeInfo); + + servletResponse.setHeader("Content-Disposition", "inline;filename=GetCapabilities.xml"); + return mav; + } + + private String extractWfsFeatureTypeNodes(Document xmlDocument, Set nameList) throws Exception{ + String featureTypeInfo = ""; + NodeList layerNodeList = xmlDocument.getElementsByTagName("Name"); + if (layerNodeList.getLength() == 0){ + throw new Exception("Malformed GetCapabilities Document."); + } + /* + * sde:GISPORTAL.GISOWNER01.AFGHANISTANRIVERREGION97GISPORTAL.GISOWNER01.AFGHANISTANRIVERREGION97ArcSDE, GISPORTAL.GISOWNER01.AFGHANISTANRIVERREGION97EPSG:100004 + * + */ + for (int j = 0; j < layerNodeList.getLength(); j++){ + Node currentLayerNode = layerNodeList.item(j); + String layerName = currentLayerNode.getTextContent().toLowerCase(); + if (OgpUtils.getSetAsLowerCase(nameList).contains(layerName)){ + featureTypeInfo += xmlToString(currentLayerNode.getParentNode()); + } + + } + + return featureTypeInfo; + } + + private String extractWmsLayerNodes(Document xmlDocument, Set nameList) throws Exception{ + String featureTypeInfo = ""; + NodeList layerNodeList = xmlDocument.getElementsByTagName("Name"); + if (layerNodeList.getLength() == 0){ + throw new Exception("Malformed GetCapabilities Document."); + } + + for (int j = 0; j < layerNodeList.getLength(); j++){ + Node currentLayerNode = layerNodeList.item(j); + if (currentLayerNode.getParentNode().getNodeName().equals("Layer")){ + String layerName = currentLayerNode.getTextContent().toLowerCase(); + + if (OgpUtils.getSetAsLowerCase(nameList).contains(layerName)){ + featureTypeInfo += xmlToString(currentLayerNode.getParentNode()); + } + + } + } + + return featureTypeInfo; + } + +@RequestMapping(value="/wfs", method=RequestMethod.GET) + public void doWfsRequest(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + Enumeration paramNames = servletRequest.getParameterNames(); + String ogcRequest = ""; + String typeName = ""; + while (paramNames.hasMoreElements()){ + String param = (String) paramNames.nextElement(); + if (param.equalsIgnoreCase("version")){ + + } else if (param.equalsIgnoreCase("request")){ + logger.info("request: " + servletRequest.getParameter(param)); + ogcRequest = servletRequest.getParameter(param); + } else if (param.equalsIgnoreCase("typename")){ + typeName = servletRequest.getParameter(param); + } + } + + if (ogcRequest.equalsIgnoreCase("describefeaturetype") || ogcRequest.equalsIgnoreCase("getfeature")){ + //TODO: strip all the params and rebuild the request with only sanctioned parameters, in case of fussy servers + String remoteUrl = getOgcUrlFromLayerName(typeName, "wfs"); + String newQuery = removeParamFromQuery(servletRequest.getQueryString(), "ogpids"); + if (ogcRequest.equalsIgnoreCase("describefeaturetype")){ + newQuery = removeParamFromQuery(newQuery, "srsname"); + } + remoteUrl += "?" + newQuery; + logger.info("remote url:" + remoteUrl); + doProxy(remoteUrl, servletRequest, servletResponse); + } else if ( ogcRequest.equalsIgnoreCase("getcapabilities")){ + //forward to handleGetCapabilities + } else { + throw new Exception("Unrecognized request type."); + } + + + } + +@RequestMapping(value="/wms", method=RequestMethod.GET, params="request=GetCapabilities") + public ModelAndView doWmsGetCapabilitiesCase(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + return doWmsGetCapabilities(layerIds, servletRequest, servletResponse); +} + +private Map getRecordMapFromLayerIds(Set layerIds) throws Exception{ + List solrRecords = null; + try { + solrRecords = this.layerInfoRetriever.fetchAllLayerInfo(layerIds); + } catch (Exception e) { + e.printStackTrace(); + throw new ServletException("Unable to retrieve layer info."); + } + //need to pass a model to the caps document + + Map recordMap = new HashMap(); + for (SolrRecord solrRecord: solrRecords){ + //we have to get all of the wfs service points for the passed layerids. match layerids to service points, so we only have to process each caps document once + //in the future, we should cache these caps documents + String workspaceName = solrRecord.getWorkspaceName(); + String layerName = solrRecord.getName(); + + String qualifiedName = OgpUtils.getLayerNameNS(workspaceName, layerName); + String wmsUrl = LocationFieldUtils.getWmsUrl(solrRecord.getLocation()); + + URI currentURI = new URI(wmsUrl); + //is it ok to call these equivalent? + String currentURIString = currentURI.getScheme() + currentURI.getHost() + currentURI.getPath(); + if (recordMap.containsKey(currentURIString)){ + UrlToNameContainer urlMap = recordMap.get(currentURIString); + logger.info(qualifiedName); + urlMap.qualifiedNames.add(qualifiedName); + } else { + UrlToNameContainer urlMap = new UrlToNameContainer(); + urlMap.ogcUrl = wmsUrl; + Set qNamesSet = new HashSet(); + qNamesSet.add(qualifiedName); + logger.info(qualifiedName); + urlMap.qualifiedNames = qNamesSet; + + recordMap.put(currentURIString,urlMap); + } + } + + return recordMap; +} + +@RequestMapping(value="/wms", method=RequestMethod.GET, params="REQUEST=GetCapabilities") +public ModelAndView doWmsGetCapabilities(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + logger.info("wms get capabilities requested"); + + //need to pass a model to the caps document + + Map recordMap = getRecordMapFromLayerIds(layerIds); + + + //parse the returned XML + + + String version = "1.1.1"; + String currentUrl = ""; + String wmsQueryBoilerPlate = "?version=" + version + "&service=wms"; + String capabilitiesQuery = "&request=GetCapabilities"; + String featureTypeInfo = ""; + CloseableHttpClient proxyClient = ogpHttpClient.getCloseableHttpClient(); + + + + for (UrlToNameContainer container : recordMap.values()){ + //this should happen asynchronously + currentUrl = container.ogcUrl; + HttpResponse response = proxyClient.execute(new HttpGet(currentUrl + wmsQueryBoilerPlate + capabilitiesQuery)); + + InputStream inputStream = response.getEntity().getContent(); + Document document = this.getDocument(inputStream); + + featureTypeInfo += extractWmsLayerNodes(document, container.qualifiedNames); + + } + + + String servicePoint = ""; + + if (recordMap.values().size() == 1){ + //this is a special case... + //if every layer is from a single server, pass that server value into the caps doc for describelayer and getfeature. that way, clients that do the right thing will bypass this ogp service + //otherwise, everything must be proxied + servicePoint = currentUrl; + } else { + //values for describelayer and getFeature should refer back to this controller + String thisUrl = servletRequest.getRequestURL().toString() + "?"; + servicePoint = thisUrl + "ogpids=" + servletRequest.getParameter("ogpids"); + } + ModelAndView mav = new ModelAndView("wms_caps_1_1_1"); + + mav.addObject("servicePoint", StringEscapeUtils.escapeXml(servicePoint)); + mav.addObject("featureTypeInfo", featureTypeInfo); + + servletResponse.setHeader("Content-Disposition", "inline;filename=GetCapabilities.xml"); + return mav; + +} + + +@RequestMapping(value="/wms", method=RequestMethod.GET) +public void doWmsRequest(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + Enumeration paramNames = servletRequest.getParameterNames(); + String ogcRequest = ""; + String layers = ""; + while (paramNames.hasMoreElements()){ + String param = (String) paramNames.nextElement(); + if (param.equalsIgnoreCase("version")){ + + } else if (param.equalsIgnoreCase("request")){ + logger.info("request: " + servletRequest.getParameter(param)); + ogcRequest = servletRequest.getParameter(param); + } else if (param.equalsIgnoreCase("layers")){ + layers = servletRequest.getParameter(param); + } + } + + if (ogcRequest.equalsIgnoreCase("getfeatureinfo") || ogcRequest.equalsIgnoreCase("describelayer") || ogcRequest.equalsIgnoreCase("getmap")){ + //TODO: strip all the params and rebuild the request with only sanctioned parameters, in case of fussy servers + String remoteUrl = getOgcUrlFromLayerName(layers, "wms"); + String newQuery = removeParamFromQuery(servletRequest.getQueryString(), "ogpids"); + if (ogcRequest.equalsIgnoreCase("describelayer")){ + newQuery = removeParamFromQuery(newQuery, "srsname"); + } + remoteUrl += "?" + newQuery; + logger.info("remote url:" + remoteUrl); + doProxy(remoteUrl, servletRequest, servletResponse); + } + + +} + + +private String xmlToString(Node node) throws TransformerException{ + StringWriter stw = new StringWriter(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + transformer.transform(new DOMSource(node), new StreamResult(stw)); + return stw.toString(); +} + +public static String removeParamFromQuery(String query, String param){ + if (query.startsWith("?")){ + query = query.substring(1); + } + String[] arrQuery = query.split("&"); + String newQuery = ""; + for (int i = 0; i < arrQuery.length; i++){ + String currentParam = arrQuery[i].substring(0, arrQuery[i].indexOf("=")); + if (!currentParam.equalsIgnoreCase(param)){ + newQuery += arrQuery[i] + "&"; + } + } + if (newQuery.length() > 0){ + newQuery = newQuery.substring(0, newQuery.length() - 1); + } + return newQuery; +} + +private String getOgcUrlFromLayerName(String layerName, String ogcProtocol) throws Exception{ + SolrQuery query = new SolrQuery(); + + if (layerName.contains(":")){ + String[] arrName = layerName.split(":"); + layerName = arrName[1]; + } + + String queryText = "Name:" + layerName; + + query.setQuery(queryText); + QueryResponse queryResponse = this.layerInfoRetriever.getSolrServer().query(query); + List records = queryResponse.getBeans(SolrRecord.class); + if (records.isEmpty()){ + throw new Exception("No matching record found in Solr Index for ['" + layerName + "']"); + } + String location = records.get(0).getLocation(); + + if (ogcProtocol.equalsIgnoreCase("wfs")){ + return LocationFieldUtils.getWfsUrl(location); + + } else if (ogcProtocol.equalsIgnoreCase("wms")){ + return LocationFieldUtils.getWmsUrl(location); + + } else if (ogcProtocol.equalsIgnoreCase("wcs")){ + return LocationFieldUtils.getWcsUrl(location); + } else { + throw new Exception("Unsupported OGC Protocol ['" + ogcProtocol + "']"); + } + +} + +@SuppressWarnings("deprecation") + private void doProxy(String remoteUrl, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException { + // Make the Request + //note: we won't transfer the protocol version because I'm not sure it would truly be compatible + try { + this.targetUri = new URI(remoteUrl); + } catch (URISyntaxException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + //Need to handle https, but think about "restricted" layers for now. Some institutions don't really have good protection for restricted layers. Does this open up potential for security + //problems for those folks? + if (servletRequest.getScheme().equals("https")){ + //actually, what matters the most is if the remote url is https + } + + BasicHttpEntityEnclosingRequest proxyRequest = + new BasicHttpEntityEnclosingRequest(servletRequest.getMethod(), rewriteUrlFromRequest(servletRequest)); + + //HttpGet httpget = new HttpGet(rewriteUrlFromRequest(servletRequest)); + copyRequestHeaders(servletRequest, proxyRequest); + + // Add the input entity (streamed) then execute the request. + HttpResponse proxyResponse = null; + InputStream servletRequestInputStream = servletRequest.getInputStream(); + CloseableHttpClient proxyClient = ogpHttpClient.getCloseableHttpClient(); + + try { + try { + //proxyRequest.setEntity(new InputStreamEntity(servletRequestInputStream)); + proxyRequest.setEntity(new InputStreamEntity(servletRequestInputStream, servletRequest.getContentLength())); + + // Execute the request + logger.debug("proxy " + servletRequest.getMethod() + " uri: " + servletRequest.getRequestURI() + " -- " + proxyRequest.getRequestLine().getUri()); + + proxyResponse = proxyClient.execute(URIUtils.extractHost(targetUri), proxyRequest); + } finally { + IOUtils.closeQuietly(servletRequestInputStream); + } + + // Process the response + int statusCode = proxyResponse.getStatusLine().getStatusCode(); + logger.info("Status from remote server: " + Integer.toString(statusCode)); + if (doResponseRedirectOrNotModifiedLogic(servletRequest, servletResponse, proxyResponse, statusCode)) { + EntityUtils.consume(proxyResponse.getEntity()); + return; + } + + // Pass the response code. This method with the "reason phrase" is deprecated but it's the only way to pass the + // reason along too. + //noinspection deprecation + servletResponse.setStatus(statusCode, proxyResponse.getStatusLine().getReasonPhrase()); + + copyResponseHeaders(proxyResponse, servletResponse); + + // Send the content to the client + copyResponseEntity(proxyResponse, servletResponse); + + } catch (Exception e) { + //abort request, according to best practice with HttpClient + if (proxyRequest instanceof AbortableHttpRequest) { + AbortableHttpRequest abortableHttpRequest = (AbortableHttpRequest) proxyRequest; + abortableHttpRequest.abort(); + } + if (e instanceof RuntimeException) + throw (RuntimeException)e; + if (e instanceof ServletException) + throw (ServletException)e; + throw new RuntimeException(e); + } + } + private boolean doResponseRedirectOrNotModifiedLogic(HttpServletRequest servletRequest, HttpServletResponse servletResponse, HttpResponse proxyResponse, int statusCode) throws ServletException, IOException { + // Check if the proxy response is a redirect + // The following code is adapted from org.tigris.noodle.filters.CheckForRedirect + if (statusCode >= HttpServletResponse.SC_MULTIPLE_CHOICES /* 300 */ + && statusCode < HttpServletResponse.SC_NOT_MODIFIED /* 304 */) { + Header locationHeader = proxyResponse.getLastHeader(HttpHeaders.LOCATION); + if (locationHeader == null) { + throw new ServletException("Received status code: " + statusCode + + " but no " + HttpHeaders.LOCATION + " header was found in the response"); + } + // Modify the redirect to go to this proxy servlet rather that the proxied host + String locStr = rewriteUrlFromResponse(servletRequest, locationHeader.getValue()); + + servletResponse.sendRedirect(locStr); + return true; + } + // 304 needs special handling. See: + // http://www.ics.uci.edu/pub/ietf/http/rfc1945.html#Code304 + // We get a 304 whenever passed an 'If-Modified-Since' + // header and the data on disk has not changed; server + // responds w/ a 304 saying I'm not going to send the + // body because the file has not changed. + if (statusCode == HttpServletResponse.SC_NOT_MODIFIED) { + servletResponse.setIntHeader(HttpHeaders.CONTENT_LENGTH, 0); + servletResponse.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + return true; + } + return false; + } + + /** These are the "hop-by-hop" headers that should not be copied. +* http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html +* I use an HttpClient HeaderGroup class instead of Set because this +* approach does case insensitive lookup faster. +*/ + private static final HeaderGroup hopByHopHeaders; + static { + hopByHopHeaders = new HeaderGroup(); + String[] headers = new String[] { + "Connection", "Keep-Alive", "Proxy-Authenticate", "Proxy-Authorization", + "TE", "Trailers", "Transfer-Encoding", "Upgrade" }; + for (String header : headers) { + hopByHopHeaders.addHeader(new BasicHeader(header, null)); + } + } + + /** Copy request headers from the servlet client to the proxy request. */ + protected void copyRequestHeaders(HttpServletRequest servletRequest, HttpRequest proxyRequest) { + // Get an Enumeration of all of the header names sent by the client + Enumeration enumerationOfHeaderNames = servletRequest.getHeaderNames(); + while (enumerationOfHeaderNames.hasMoreElements()) { + String headerName = (String) enumerationOfHeaderNames.nextElement(); + //TODO why? + if (headerName.equalsIgnoreCase(HttpHeaders.CONTENT_LENGTH)) + continue; + if (hopByHopHeaders.containsHeader(headerName)) + continue; + // As per the Java Servlet API 2.5 documentation: + // Some headers, such as Accept-Language can be sent by clients + // as several headers each with a different value rather than + // sending the header as a comma separated list. + // Thus, we get an Enumeration of the header values sent by the client + Enumeration headers = servletRequest.getHeaders(headerName); + while (headers.hasMoreElements()) { + String headerValue = (String) headers.nextElement(); + //Don't do this unless we need to + /*if (headerName.equalsIgnoreCase(HttpHeaders.USER_AGENT)){ + headerValue = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0"; + }*/ + // In case the proxy host is running multiple virtual servers, + // rewrite the Host header to ensure that we get content from + // the correct virtual server + if (headerName.equalsIgnoreCase(HttpHeaders.HOST)) { + HttpHost host = URIUtils.extractHost(this.targetUri); + headerValue = host.getHostName(); + if (host.getPort() != -1) + headerValue += ":"+host.getPort(); + } + proxyRequest.addHeader(headerName, headerValue); + } + } + } + + /** Copy proxied response headers back to the servlet client. */ + protected void copyResponseHeaders(HttpResponse proxyResponse, HttpServletResponse servletResponse) { + for (Header header : proxyResponse.getAllHeaders()) { + if (hopByHopHeaders.containsHeader(header.getName())) + continue; + servletResponse.addHeader(header.getName(), header.getValue()); + } + } + + /** Copy response body data (the entity) from the proxy to the servlet client. */ + private void copyResponseEntity(HttpResponse proxyResponse, HttpServletResponse servletResponse) throws IOException { + HttpEntity entity = proxyResponse.getEntity(); + if (entity != null) { + OutputStream servletOutputStream = servletResponse.getOutputStream(); + try { + entity.writeTo(servletOutputStream); + } finally { + IOUtils.closeQuietly(servletOutputStream); + } + } + } + + private String rewriteUrlFromRequest(HttpServletRequest servletRequest) { + StringBuilder uri = new StringBuilder(500); + uri.append(this.targetUri.toString()); + + // Handle the query string + /* String queryString = servletRequest.getQueryString();//ex:(following '?'): name=value&foo=bar#fragment + if (queryString != null && queryString.length() > 0) { + uri.append('?'); + int fragIdx = queryString.indexOf('#'); + String queryNoFrag = (fragIdx < 0 ? queryString : queryString.substring(0,fragIdx)); + uri.append(encodeUriQuery(queryNoFrag)); + if (fragIdx >= 0) { + uri.append('#'); + uri.append(encodeUriQuery(queryString.substring(fragIdx + 1))); + } + }*/ + //skip this for now + + // http://giswebservices.massgis.state.ma.us/geoserver/wfs?service=wfs&version=1.0.0&request=getFeature&typename=massgis:MORIS.RFI_AIS_GT50_POLY + //?ogpids=MassGIS.MORIS.RFI_AIS_GT50_POLY&service=wfs&version=1.0.0&request=getFeature&typename=massgis:MORIS.RFI_AIS_GT50_POLY + logger.info("new url string: " + uri.toString()); + return uri.toString(); + } + + private String rewriteUrlFromResponse(HttpServletRequest servletRequest, String theUrl) { + //TODO document example paths + if (theUrl.startsWith(this.targetUri.toString())) { + String curUrl = servletRequest.getRequestURL().toString();//no query + String pathInfo = servletRequest.getPathInfo(); + if (pathInfo != null) { + assert curUrl.endsWith(pathInfo); + curUrl = curUrl.substring(0,curUrl.length()-pathInfo.length());//take pathInfo off + } + theUrl = curUrl+theUrl.substring(this.targetUri.toString().length()); + } + return theUrl; + } + + /** +*

Encodes characters in the query or fragment part of the URI. +* +*

Unfortunately, an incoming URI sometimes has characters disallowed by the spec. HttpClient +* insists that the outgoing proxied request has a valid URI because it uses Java's {@link URI}. To be more +* forgiving, we must escape the problematic characters. See the URI class for the spec. +* +* @param in example: name=value&foo=bar#fragment +*/ + static CharSequence encodeUriQuery(CharSequence in) { + //Note that I can't simply use URI.java to encode because it will escape pre-existing escaped things. + StringBuilder outBuf = null; + Formatter formatter = null; + for(int i = 0; i < in.length(); i++) { + char c = in.charAt(i); + boolean escape = true; + if (c < 128) { + if (asciiQueryChars.get((int)c)) { + escape = false; + } + } else if (!Character.isISOControl(c) && !Character.isSpaceChar(c)) {//not-ascii + escape = false; + } + if (!escape) { + if (outBuf != null) + outBuf.append(c); + } else { + //escape + if (outBuf == null) { + outBuf = new StringBuilder(in.length() + 5*3); + outBuf.append(in,0,i); + formatter = new Formatter(outBuf); + } + //leading %, 0 padded, width 2, capital hex + formatter.format("%%%02X",(int)c);//TODO + formatter.close(); + } + } + return outBuf != null ? outBuf : in; + } + + + static final BitSet asciiQueryChars; + static { + char[] c_unreserved = "_-!.~'()*".toCharArray();//plus alphanum + char[] c_punct = ",;:$&+=".toCharArray(); + char[] c_reserved = "?/[]@".toCharArray();//plus punct + + asciiQueryChars = new BitSet(128); + for(char c = 'a'; c <= 'z'; c++) asciiQueryChars.set((int)c); + for(char c = 'A'; c <= 'Z'; c++) asciiQueryChars.set((int)c); + for(char c = '0'; c <= '9'; c++) asciiQueryChars.set((int)c); + for(char c : c_unreserved) asciiQueryChars.set((int)c); + for(char c : c_punct) asciiQueryChars.set((int)c); + for(char c : c_reserved) asciiQueryChars.set((int)c); + + asciiQueryChars.set((int)'%');//leave existing percent escapes in place + } + +} \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetFeatureInfoController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetFeatureInfoController.java new file mode 100644 index 0000000..72cf3c8 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetFeatureInfoController.java @@ -0,0 +1,120 @@ +package org.opengeoportal.proxy.controllers; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.IOUtils; +import org.opengeoportal.config.proxy.ProxyConfigRetriever; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.OgpUtils; +import org.opengeoportal.utilities.http.HttpRequester; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.security.access.prepost.PostAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequestMapping("/featureInfo") +public class GetFeatureInfoController { + private static final int NUMBER_OF_FEATURES = 1; + //private static final int BUFFER_MULTIPLIER = 5; + + //unfortunately, not every source supports gml response + private static final String RESPONSE_FORMAT = "text/html"; + private static final String EXCEPTION_FORMAT = "application/vnd.ogc.se_xml"; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired @Qualifier("httpRequester.generic") + private HttpRequester httpRequester; + @Autowired + private LayerInfoRetriever layerInfoRetriever; + @Autowired + private ProxyConfigRetriever proxyConfigRetriever; + + @RequestMapping(method=RequestMethod.GET) + public void getFeatureInfo(@RequestParam("ogpid") String layerId, @RequestParam("bbox") String bbox, + @RequestParam("x") String xCoord,@RequestParam("y") String yCoord, + @RequestParam("width") String width,@RequestParam("height") String height, + HttpServletRequest request, HttpServletResponse response) throws Exception { + + SolrRecord layerInfo = getSolrRecord(layerId); + + + + String wmsEndpoint = proxyConfigRetriever.getInternalUrl("wms", layerInfo.getInstitution(), layerInfo.getAccess(), layerInfo.getLocation()); + + //filter any query terms + wmsEndpoint = OgpUtils.filterQueryString(wmsEndpoint); + + String query = createRequestFromSolrRecord(layerInfo, xCoord, yCoord, bbox, height, width); + + logger.info("executing WMS getFeatureRequest: " + wmsEndpoint + "?" + query); + + sendGetRequest(wmsEndpoint, query, request, response); + + } + //Not necessary...only allowed layers are fetched from solr + //@PostAuthorize("hasPermission(#layerInfo, 'download')") + String createRequestFromSolrRecord(SolrRecord layerInfo, String xCoord, String yCoord, String bbox, String height, String width) throws Exception{ + String layerName = OgpUtils.getLayerNameNS(layerInfo.getWorkspaceName(), layerInfo.getName()); + return this.createWmsGetFeatureInfoQuery(layerName, xCoord, yCoord, bbox, height, width); + } + + String createWmsGetFeatureInfoQuery(String layerName, String xCoord, String yCoord, String bbox, String height, String width){ + //in caps to support ogc services through arcgis server 9.x + String query = "SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&INFO_FORMAT=" + RESPONSE_FORMAT + + "&SRS=EPSG:3857&FEATURE_COUNT=" + NUMBER_OF_FEATURES + "&STYLES=&HEIGHT=" + height + "&WIDTH=" + width +"&BBOX=" + bbox + + "&X=" + xCoord + "&Y=" + yCoord +"&QUERY_LAYERS=" + layerName + "&LAYERS=" + layerName + "&EXCEPTIONS=" + EXCEPTION_FORMAT; + + return query; + } + + + void sendGetRequest(String wmsEndpoint, String wmsQuery, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ + /*if (!wmsEndpoint.contains("http")){ + //this is a relative path + request.getRequestDispatcher(wmsEndpoint + "?" + wmsQuery).forward(request, response); + + } else {*/ + InputStream input = null; + try{ + String method = "GET"; + input = httpRequester.sendRequest(wmsEndpoint, wmsQuery, method); + logger.debug(httpRequester.getContentType()); + response.setContentType(httpRequester.getContentType()); + IOUtils.copy(input, response.getOutputStream()); + } finally { + IOUtils.closeQuietly(input); + } + //} + } + + + SolrRecord getSolrRecord(String layerId) throws Exception{ + Set layerIds = new HashSet(); + layerIds.add(layerId); + + List allLayerInfo = this.layerInfoRetriever.fetchAllowedRecords(layerIds); + + if (allLayerInfo.isEmpty()){ + throw new Exception("No allowed records returned for Layer Id: ['" + layerId + "'"); + } + + SolrRecord layerInfo = allLayerInfo.get(0); + return layerInfo; + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetOgcInfoController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetOgcInfoController.java new file mode 100644 index 0000000..84156aa --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetOgcInfoController.java @@ -0,0 +1,58 @@ +package org.opengeoportal.proxy.controllers; + + +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.ogc.AugmentedSolrRecord; +import org.opengeoportal.ogc.AugmentedSolrRecordRetriever; +import org.opengeoportal.ogc.OwsInfo; +import org.opengeoportal.solr.SolrRecord; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping("/info") +public class GetOgcInfoController { + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + AugmentedSolrRecordRetriever augmentedSolrRecordRetriever; + + @Autowired + LayerInfoRetriever layerInfoRetriever; + + @RequestMapping(method=RequestMethod.GET, produces="application/json") + public @ResponseBody AugmentedSolrRecord getLayerInfo(@RequestParam("ogpid") String layerId) throws Exception { + return augmentedSolrRecordRetriever.getOgcAugmentedSolrRecord(layerId); + + } + + @RequestMapping(value="wmsInfo", method=RequestMethod.GET, produces="application/json") + public @ResponseBody OwsInfo wmsInfo(@RequestParam("ogpid") String layerId) throws Exception { + return augmentedSolrRecordRetriever.getWmsInfo(layerId); + } + + @RequestMapping(value="ogcData", method=RequestMethod.GET, produces="application/json") + public @ResponseBody OwsInfo ogcDataInfo(@RequestParam("ogpid") String layerId) throws Exception { + return augmentedSolrRecordRetriever.getOgcDataInfo(layerId); + } + + @RequestMapping(value="ogp", method=RequestMethod.GET, produces="application/json") + public @ResponseBody SolrRecord ogcSolrInfo(@RequestParam("ogpid") String layerId, @RequestParam(value="full", defaultValue="false") Boolean includeMetadata) throws Exception { + SolrRecord record = layerInfoRetriever.getAllLayerInfo(layerId); + if (includeMetadata){ + return record; + } else { + record.setFgdcText(null); + + return record; + } + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetWmcController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetWmcController.java new file mode 100644 index 0000000..b829b9d --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/GetWmcController.java @@ -0,0 +1,50 @@ +package org.opengeoportal.proxy.controllers; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletResponse; + +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.ogc.WmcCreator; +import org.opengeoportal.ogc.OwsInfo.OwsType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequestMapping("/wmc") +public class GetWmcController { + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WmcCreator wmcCreator; + + @RequestMapping(method=RequestMethod.GET, produces="application/xml") + public void getLayerInfo(@RequestParam("ogpids") Set layerIds, @RequestParam("type") String ogcType, @RequestParam("minx") Double minx, @RequestParam("miny") Double miny, + @RequestParam("maxx") Double maxx, @RequestParam("maxy") Double maxy, HttpServletResponse response) throws Exception { + + OwsType requestedType = OwsType.parseOwsType(ogcType); + BoundingBox bounds = new BoundingBox(minx,miny,maxx,maxy); + Map layerMap = new LinkedHashMap(); + for (String layer: layerIds){ + layerMap.put(layer, requestedType); + } + + + String disposition = "attachment"; + String contentType = "application/xml;charset=UTF-8"; + + response.setHeader("Content-Disposition", disposition + "; filename=\"wmc.xml\""); + response.setContentType(contentType); + wmcCreator.getWmcResponse(layerMap, bounds, response.getOutputStream()); + + } + +} \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageController.java new file mode 100644 index 0000000..fcadb84 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageController.java @@ -0,0 +1,60 @@ +package org.opengeoportal.proxy.controllers; + +import java.net.URLDecoder; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.opengeoportal.proxy.ImageHandler; +import org.opengeoportal.proxy.ImageHandlerFactory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.RequestContextHolder; + +import com.fasterxml.jackson.databind.ObjectMapper; + +/** +* This controller given the above parameters + z order, grabs images +* from various servers and composites them. Is passed a custom json object to maintain structure. +* +* We should offer formats available via geoserver. +* +* determine if a layer is within the provided bounds and exclude it if not +* +* @author Chris Barnett +*/ + +@Controller +@RequestMapping("/requestImage") +public class ImageController { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ImageHandlerFactory imageHandlerFactory; + + @RequestMapping(method=RequestMethod.POST, headers = "content-type=application/x-www-form-urlencoded", produces="application/json") + public @ResponseBody Map processImageRequest(@RequestBody String imageRequest) throws Exception { + + + ObjectMapper mapper = new ObjectMapper(); + ImageRequest imageRequestObj = mapper.readValue(URLDecoder.decode(imageRequest, "UTF-8"), ImageRequest.class); + + Map map = new HashMap(); + + ImageHandler imageHandler = imageHandlerFactory.getObject(); + UUID requestId = imageHandler.requestImage(RequestContextHolder.currentRequestAttributes().getSessionId(), imageRequestObj); + logger.debug("Image requested."); + + map.put("requestId", requestId.toString()); + return map; + } + + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageRequest.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageRequest.java similarity index 89% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageRequest.java rename to geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageRequest.java index 3962d49..9b934b5 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageRequest.java +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageRequest.java @@ -1,20 +1,24 @@ -package org.OpenGeoPortal.Proxy.Controllers; +package org.opengeoportal.proxy.controllers; import java.io.File; +import java.net.URL; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; import java.util.concurrent.Future; -import org.OpenGeoPortal.Download.Controllers.RequestStatusController.StatusSummary; -import org.OpenGeoPortal.Download.Types.BoundingBox; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; +import org.opengeoportal.download.controllers.RequestStatusController.StatusSummary; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.solr.SolrRecord; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown=true) public class ImageRequest { @JsonIgnore final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -148,10 +152,6 @@ public static class LayerImage implements Comparable { String layerId; String sld; @JsonIgnore - String baseUrl; - @JsonIgnore - String queryString; - @JsonIgnore SolrRecord solrRecord; @JsonIgnore File imageFile; @@ -159,6 +159,7 @@ public static class LayerImage implements Comparable { Future imageFileFuture; @JsonIgnore ImageStatus imageStatus = ImageStatus.PROCESSING; + private URL url; public String getName() { return name; @@ -192,18 +193,6 @@ public void setzIndex(int zIndex) { this.zIndex = zIndex; } - public String getBaseUrl() { - return baseUrl; - } - public void setBaseUrl(String baseUrl) { - this.baseUrl = baseUrl; - } - public String getQueryString() { - return queryString; - } - public void setQueryString(String queryString) { - this.queryString = queryString; - } public SolrRecord getSolrRecord() { return solrRecord; } @@ -249,6 +238,12 @@ public boolean equals(Object o) { LayerImage n = (LayerImage) o; return n.layerId.equals(layerId); } + public void setUrl(URL url) { + this.url = url; + } + public URL getUrl(){ + return url; + } } private StatusSummary getRawStatusSummary(){ diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageRetrievalController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageRetrievalController.java similarity index 85% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageRetrievalController.java rename to geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageRetrievalController.java index 9f4610d..cbef60c 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/ImageRetrievalController.java +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/ImageRetrievalController.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Proxy.Controllers; +package org.opengeoportal.proxy.controllers; import java.io.File; import java.io.IOException; @@ -6,8 +6,8 @@ import javax.servlet.http.HttpServletResponse; -import org.OpenGeoPortal.Download.RequestStatusManager; import org.apache.commons.io.FileUtils; +import org.opengeoportal.download.RequestStatusManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -39,7 +39,11 @@ public void getDownload(@RequestParam("requestId") String requestId, HttpServlet throw new IOException("File does not exist."); } } - logger.info("Milliseconds slept: " + Long.toString(counter)); + if (counter > 0){ + logger.info("Milliseconds slept: " + Long.toString(counter)); + } + logger.info(downloadPackage.getName()); + logger.info(downloadPackage.getAbsolutePath()); response.setContentLength((int) downloadPackage.length()); response.setContentType("application/octet-stream"); response.addHeader("Content-Disposition", "attachment;filename=" + downloadPackage.getName()); diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/DynamicOgcController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/OldDynamicOgcController.java similarity index 54% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/DynamicOgcController.java rename to geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/OldDynamicOgcController.java index 69ab615..7292d13 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/DynamicOgcController.java +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/OldDynamicOgcController.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Proxy.Controllers; +package org.opengeoportal.proxy.controllers; /** * Adapted from David Smiley's HTTP reverse proxy/gateway servlet @@ -19,11 +19,11 @@ * limitations under the License. */ -import org.OpenGeoPortal.Metadata.*; -import org.OpenGeoPortal.Solr.*; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.http.*; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.AbortableHttpRequest; +import org.apache.http.client.methods.HttpGet; import org.apache.http.client.params.ClientPNames; import org.apache.http.client.utils.URIUtils; import org.apache.http.entity.InputStreamEntity; @@ -35,6 +35,12 @@ import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; +import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.response.QueryResponse; +import org.opengeoportal.metadata.*; +import org.opengeoportal.solr.*; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.OgpUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -42,25 +48,43 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; +import org.w3c.dom.Node; + -import javax.servlet.ServletConfig; import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.StringWriter; import java.net.URI; import java.net.URISyntaxException; import java.util.BitSet; import java.util.Enumeration; import java.util.Formatter; - -@Controller -@RequestMapping("/dynamic") -public class DynamicOgcController { +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/*@Controller +@RequestMapping("/dynamic")*/ +public class OldDynamicOgcController { /* INIT PARAMETER NAME CONSTANTS */ final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -71,10 +95,9 @@ public class DynamicOgcController { @Autowired private LayerInfoRetriever layerInfoRetriever; - private String layerIds; - - + private DocumentBuilderFactory factory; + private TransformerFactory transformerFactory; /** @@ -94,10 +117,18 @@ public class DynamicOgcController { */ - DynamicOgcController() { + OldDynamicOgcController() { HttpParams hcParams = new BasicHttpParams(); hcParams.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, true); proxyClient = createHttpClient(hcParams); + + // Create a factory + factory = DocumentBuilderFactory.newInstance(); + //ignore validation, dtd + factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + factory.setValidating(false); + + transformerFactory = TransformerFactory.newInstance(); } /** Called from {@link #init(javax.servlet.ServletConfig)}. HttpClient offers many opportunities for customization. @@ -113,56 +144,238 @@ public void destroy() { proxyClient.getConnectionManager().shutdown(); } -@RequestMapping(value="/wfs", method=RequestMethod.GET, params="request=GetCapabilities") - public void doWfsGetCapabilities(@RequestParam("typeName") String layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException { + private class UrlToNameContainer { + Set qualifiedNames; + String wfsUrl; + } + + @RequestMapping(value="/wfs", method=RequestMethod.GET, params="request=GetCapabilities") + public ModelAndView doWfsGetCapabilitiesCase(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + return doWfsGetCapabilities(layerIds, servletRequest, servletResponse); + } + + @RequestMapping(value="/wfs", method=RequestMethod.GET, params="REQUEST=GetCapabilities") + public ModelAndView doWfsGetCapabilities(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + logger.info("wfs get capabilities requested"); + List solrRecords = null; + try { + solrRecords = this.layerInfoRetriever.fetchAllLayerInfo(layerIds); + } catch (Exception e) { + e.printStackTrace(); + throw new ServletException("Unable to retrieve layer info."); + } + //need to pass a model to the caps document + + + //parse the returned XML + // Use document builder factory + DocumentBuilder builder = factory.newDocumentBuilder(); + + Map recordMap = new HashMap(); + for (SolrRecord solrRecord: solrRecords){ + //we have to get all of the wfs service points for the passed layerids. match layerids to service points, so we only have to process each caps document once + //in the future, we should cache these caps documents + String workspaceName = solrRecord.getWorkspaceName(); + String layerName = solrRecord.getName(); + + String qualifiedName = OgpUtils.getLayerNameNS(workspaceName, layerName); + String wfsUrl = LocationFieldUtils.getWfsUrl(solrRecord.getLocation()); + + URI currentURI = new URI(wfsUrl); + //is it ok to call these equivalent? + String currentURIString = currentURI.getScheme() + currentURI.getHost() + currentURI.getPath(); + if (recordMap.containsKey(currentURIString)){ + UrlToNameContainer urlMap = recordMap.get(currentURIString); + logger.info(qualifiedName); + urlMap.qualifiedNames.add(qualifiedName); + } else { + UrlToNameContainer urlMap = new UrlToNameContainer(); + urlMap.wfsUrl = wfsUrl; + Set qNamesSet = new HashSet(); + qNamesSet.add(qualifiedName); + logger.info(qualifiedName); + urlMap.qualifiedNames = qNamesSet; + + recordMap.put(currentURIString,urlMap); + } + } + + String version = "1.0.0"; + String currentUrl = ""; + String wfsQueryBoilerPlate = "?version=" + version + "&service=wfs"; + String capabilitiesQuery = "&request=GetCapabilities"; + String featureTypeInfo = ""; + for (UrlToNameContainer container : recordMap.values()){ + //this should happen asynchronously + currentUrl = container.wfsUrl; + HttpResponse response = proxyClient.execute(new HttpGet(currentUrl + wfsQueryBoilerPlate + capabilitiesQuery)); + InputStream inputStream = response.getEntity().getContent(); + //Parse the document + Document document = builder.parse(inputStream); + inputStream.close(); + + + NodeList layerNodeList = document.getElementsByTagName("Name"); + if (layerNodeList.getLength() == 0){ + throw new Exception("Malformed GetCapabilities Document."); + } + /* + * sde:GISPORTAL.GISOWNER01.AFGHANISTANRIVERREGION97GISPORTAL.GISOWNER01.AFGHANISTANRIVERREGION97ArcSDE, GISPORTAL.GISOWNER01.AFGHANISTANRIVERREGION97EPSG:100004 + * + */ + for (int j = 0; j < layerNodeList.getLength(); j++){ + Node currentLayerNode = layerNodeList.item(j); + String layerName = currentLayerNode.getTextContent().toLowerCase(); + if (OgpUtils.getSetAsLowerCase(container.qualifiedNames).contains(layerName)){ + featureTypeInfo += xmlToString(currentLayerNode.getParentNode()); + } + + } + + } + + String onlineResource = ""; + String describeFeatureUrl = ""; + String getFeatureUrl = ""; + + if (recordMap.values().size() == 1){ + //this is a special case... + //if every layer is from a single server, pass that server value into the caps doc for describelayer and getfeature. that way, clients that do the right thing will bypass this ogp service + //otherwise, everything must be proxied + onlineResource = currentUrl; + describeFeatureUrl = currentUrl + wfsQueryBoilerPlate + "&request=DescribeFeatureType"; + getFeatureUrl = currentUrl + wfsQueryBoilerPlate + "&request=GetFeature"; + } else { + //values for describelayer and getFeature should refer back to this controller + String thisUrl = servletRequest.getRequestURL().toString() + "?"; + onlineResource = thisUrl + "ogpids=" + servletRequest.getParameter("ogpids"); + describeFeatureUrl = thisUrl + "request=DescribeFeatureType"; + getFeatureUrl = thisUrl + "request=GetFeature"; + } + ModelAndView mav = new ModelAndView("wfs_caps_1_0_0"); + + mav.addObject("onlineResource", StringEscapeUtils.escapeXml(onlineResource)); + mav.addObject("getCapabilities", StringEscapeUtils.escapeXml(servletRequest.getRequestURL().toString() + "?" + servletRequest.getQueryString())); + mav.addObject("describeFeatureUrl", StringEscapeUtils.escapeXml(describeFeatureUrl)); + mav.addObject("getFeatureUrl",StringEscapeUtils.escapeXml(getFeatureUrl)); + mav.addObject("featureTypeInfo", featureTypeInfo); + + servletResponse.setHeader("Content-Disposition", "inline;filename=GetCapabilities.xml"); + return mav; + + } + + +@RequestMapping(value="/wfs", method=RequestMethod.GET) + public void doWfsRequest(@RequestParam("ogpids") Set layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception { + Enumeration paramNames = servletRequest.getParameterNames(); + String ogcRequest = ""; + String typeName = ""; + while (paramNames.hasMoreElements()){ + String param = (String) paramNames.nextElement(); + if (param.equalsIgnoreCase("version")){ + + } else if (param.equalsIgnoreCase("request")){ + logger.info("request: " + servletRequest.getParameter(param)); + ogcRequest = servletRequest.getParameter(param); + } else if (param.equalsIgnoreCase("typename")){ + typeName = servletRequest.getParameter(param); + } + } + + if (ogcRequest.equalsIgnoreCase("describefeaturetype") || ogcRequest.equalsIgnoreCase("getfeature")){ + //TODO: strip all the params and rebuild the request with only sanctioned parameters, in case of fussy servers + String remoteUrl = getOgcUrlFromLayerName(typeName, "wfs"); + String newQuery = removeParamFromQuery(servletRequest.getQueryString(), "ogpids"); + if (ogcRequest.equalsIgnoreCase("describefeaturetype")){ + newQuery = removeParamFromQuery(newQuery, "srsname"); + } + remoteUrl += "?" + newQuery; + logger.info("remote url:" + remoteUrl); + doProxy(remoteUrl, servletRequest, servletResponse); + } + - //return getCapabilities doc use a jsp to resolve view, populate with data from describe feature type requests } -@RequestMapping(value="/wfs", method=RequestMethod.GET, params="request=GetFeature") -public void doWfsGetFeature(@RequestParam("typeName") String layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException { - SolrRecord solrRecord = null; - try { - solrRecord = this.layerInfoRetriever.getAllLayerInfo(layerIds); - } catch (Exception e) { - e.printStackTrace(); - throw new ServletException("Unable to retrieve layer info."); + +private String xmlToString(Node node) throws TransformerException{ + StringWriter stw = new StringWriter(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + transformer.transform(new DOMSource(node), new StreamResult(stw)); + return stw.toString(); +} + +public static String removeParamFromQuery(String query, String param){ + if (query.startsWith("?")){ + query = query.substring(1); } - doProxy(solrRecord, servletRequest, servletResponse); + String[] arrQuery = query.split("&"); + String newQuery = ""; + for (int i = 0; i < arrQuery.length; i++){ + String currentParam = arrQuery[i].substring(0, arrQuery[i].indexOf("=")); + if (!currentParam.equalsIgnoreCase(param)){ + newQuery += arrQuery[i] + "&"; + } + } + newQuery = newQuery.substring(0, newQuery.length() - 1); + return newQuery; } -@RequestMapping(value="/wfs", method=RequestMethod.GET, params="request=DescribeFeatureType") -public void doWfsDescribeFeatureType(@RequestParam("typeName") String layerIds, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException { - //replace layerId with typeName, get wfs location from solr - SolrRecord solrRecord = null; - try { - solrRecord = layerInfoRetriever.getAllLayerInfo(layerIds); - } catch (Exception e) { - e.printStackTrace(); - throw new ServletException("Unable to retrieve layer info."); +private String getOgcUrlFromLayerName(String layerName, String ogcProtocol) throws Exception{ + SolrQuery query = new SolrQuery(); + + if (layerName.contains(":")){ + String[] arrName = layerName.split(":"); + layerName = arrName[1]; + } + + String queryText = "Name:" + layerName; + + query.setQuery(queryText); + QueryResponse queryResponse = this.layerInfoRetriever.getSolrServer().query(query); + List records = queryResponse.getBeans(SolrRecord.class); + if (records.isEmpty()){ + throw new Exception("No matching record found in Solr Index for ['" + layerName + "']"); } - doProxy(solrRecord, servletRequest, servletResponse); + String location = records.get(0).getLocation(); + + if (ogcProtocol.equalsIgnoreCase("wfs")){ + return LocationFieldUtils.getWfsUrl(location); + + } else if (ogcProtocol.equalsIgnoreCase("wms")){ + return LocationFieldUtils.getWmsUrl(location); + + } else if (ogcProtocol.equalsIgnoreCase("wcs")){ + return LocationFieldUtils.getWcsUrl(location); + } else { + throw new Exception("Unsupported OGC Protocol ['" + ogcProtocol + "']"); + } + } @SuppressWarnings("deprecation") - private void doProxy(SolrRecord solrRecord, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException { + private void doProxy(String remoteUrl, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException { // Make the Request //note: we won't transfer the protocol version because I'm not sure it would truly be compatible try { - this.targetUri = new URI(layerInfoRetriever.getWFSUrl(solrRecord)); + this.targetUri = new URI(remoteUrl); } catch (URISyntaxException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } - String layerName = ""; - if (solrRecord.getWorkspaceName().length() > 0){ - layerName += solrRecord.getWorkspaceName() + ":" + solrRecord.getName(); - } else { - layerName += solrRecord.getName(); + //Need to handle https, but think about "restricted" layers for now. Some institutions don't really have good protection for restricted layers. Does this open up potential for security + //problems for those folks? + if (servletRequest.getScheme().equals("https")){ + //actually, what matters the most is if the remote url is https } + + BasicHttpEntityEnclosingRequest proxyRequest = - new BasicHttpEntityEnclosingRequest(servletRequest.getMethod(), rewriteUrlFromRequest(layerName, servletRequest)); + new BasicHttpEntityEnclosingRequest(servletRequest.getMethod(), rewriteUrlFromRequest(servletRequest)); copyRequestHeaders(servletRequest, proxyRequest); @@ -175,6 +388,7 @@ private void doProxy(SolrRecord solrRecord, HttpServletRequest servletRequest, H // Execute the request logger.debug("proxy " + servletRequest.getMethod() + " uri: " + servletRequest.getRequestURI() + " -- " + proxyRequest.getRequestLine().getUri()); + proxyResponse = proxyClient.execute(URIUtils.extractHost(targetUri), proxyRequest); } finally { closeQuietly(servletRequestInputStream); @@ -182,7 +396,7 @@ private void doProxy(SolrRecord solrRecord, HttpServletRequest servletRequest, H // Process the response int statusCode = proxyResponse.getStatusLine().getStatusCode(); - + logger.info("Status from remote server: " + Integer.toString(statusCode)); if (doResponseRedirectOrNotModifiedLogic(servletRequest, servletResponse, proxyResponse, statusCode)) { EntityUtils.consume(proxyResponse.getEntity()); return; @@ -272,10 +486,10 @@ protected void copyRequestHeaders(HttpServletRequest servletRequest, HttpRequest while (enumerationOfHeaderNames.hasMoreElements()) { String headerName = (String) enumerationOfHeaderNames.nextElement(); //TODO why? - if (headerName.equalsIgnoreCase(HttpHeaders.CONTENT_LENGTH)) - continue; + // if (headerName.equalsIgnoreCase(HttpHeaders.CONTENT_LENGTH)) + // continue; if (hopByHopHeaders.containsHeader(headerName)) - continue; + continue; // As per the Java Servlet API 2.5 documentation: // Some headers, such as Accept-Language can be sent by clients // as several headers each with a different value rather than @@ -284,6 +498,10 @@ protected void copyRequestHeaders(HttpServletRequest servletRequest, HttpRequest Enumeration headers = servletRequest.getHeaders(headerName); while (headers.hasMoreElements()) { String headerValue = (String) headers.nextElement(); + //Don't do this unless we need to + /*if (headerName.equalsIgnoreCase(HttpHeaders.USER_AGENT)){ + headerValue = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0"; + }*/ // In case the proxy host is running multiple virtual servers, // rewrite the Host header to ensure that we get content from // the correct virtual server @@ -320,16 +538,12 @@ private void copyResponseEntity(HttpResponse proxyResponse, HttpServletResponse } } - private String rewriteUrlFromRequest(String layerName, HttpServletRequest servletRequest) { + private String rewriteUrlFromRequest(HttpServletRequest servletRequest) { StringBuilder uri = new StringBuilder(500); uri.append(this.targetUri.toString()); - // Handle the path given to the servlet - /*if (servletRequest.getPathInfo() != null) {//ex: /my/path.html - uri.append(servletRequest.getPathInfo()); - }*/ + // Handle the query string - String queryString = servletRequest.getQueryString();//ex:(following '?'): name=value&foo=bar#fragment - queryString = queryString.replace(layerIds, layerName); + /* String queryString = servletRequest.getQueryString();//ex:(following '?'): name=value&foo=bar#fragment if (queryString != null && queryString.length() > 0) { uri.append('?'); int fragIdx = queryString.indexOf('#'); @@ -339,7 +553,12 @@ private String rewriteUrlFromRequest(String layerName, HttpServletRequest servle uri.append('#'); uri.append(encodeUriQuery(queryString.substring(fragIdx + 1))); } - } + }*/ + //skip this for now + + // http://giswebservices.massgis.state.ma.us/geoserver/wfs?service=wfs&version=1.0.0&request=getFeature&typename=massgis:MORIS.RFI_AIS_GT50_POLY + //?ogpids=MassGIS.MORIS.RFI_AIS_GT50_POLY&service=wfs&version=1.0.0&request=getFeature&typename=massgis:MORIS.RFI_AIS_GT50_POLY + logger.info("new url string: " + uri.toString()); return uri.toString(); } diff --git a/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/RestrictedWMSController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/RestrictedWMSController.java new file mode 100644 index 0000000..df92ba3 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/RestrictedWMSController.java @@ -0,0 +1,59 @@ +package org.opengeoportal.proxy.controllers; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.opengeoportal.config.ogp.OgpConfigRetriever; +import org.opengeoportal.config.proxy.ProxyConfigRetriever; +import org.opengeoportal.proxy.GenericProxy; +import org.opengeoportal.proxy.ProxyFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@Controller +@RequestMapping("/restricted/*") +public class RestrictedWMSController { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ProxyConfigRetriever proxyConfigRetriever; + + @Autowired + OgpConfigRetriever ogpConfigRetriever; + + @Autowired + private ProxyFactory proxyFactory; + + @RequestMapping(value="/{repositoryId}/wms", method=RequestMethod.GET) + public void forwardWMSRequest(@PathVariable String repositoryId, HttpServletRequest request, HttpServletResponse response) throws Exception { + //If the request went through to the controller, we know that the user has authenticated + //We're also checking that the repositoryId is equal to the one set in config for login capability and that there is a proxy defined + //for the repositoryId + //probably a better place to centralize/abstract this + if (ogpConfigRetriever.getConfig().getLoginConfig().getRepositoryId().equalsIgnoreCase(repositoryId) && proxyConfigRetriever.hasProxy("wms", repositoryId, "restricted")){ + // forward the request to the protected GeoServer instance + + String remoteUrl = this.getProxyTo(repositoryId) + "?" + + request.getQueryString(); + logger.info("executing WMS request to protected GeoServer: " + + remoteUrl); + GenericProxy proxy = proxyFactory.getObject(); + proxy.proxyRequest(request, response, remoteUrl); + } else { + response.sendError(403); + } + } + + public String getProxyTo(String repositoryId) throws Exception { + + return proxyConfigRetriever.getInternalProxyUrl("wms", repositoryId, "restricted"); + } + + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/UrlShortenerController.java b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/UrlShortenerController.java similarity index 92% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/UrlShortenerController.java rename to geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/UrlShortenerController.java index 9d2eb73..f431113 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/UrlShortenerController.java +++ b/geoportal_1/src/main/java/org/opengeoportal/proxy/controllers/UrlShortenerController.java @@ -1,9 +1,9 @@ -package org.OpenGeoPortal.Proxy.Controllers; +package org.opengeoportal.proxy.controllers; import java.util.HashMap; import java.util.Map; -import org.OpenGeoPortal.Utilities.UrlShortener; +import org.opengeoportal.utilities.UrlShortener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/geoportal_1/src/main/java/org/opengeoportal/security/CustomAuthenticationFilter.java b/geoportal_1/src/main/java/org/opengeoportal/security/CustomAuthenticationFilter.java new file mode 100644 index 0000000..7c0855e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/security/CustomAuthenticationFilter.java @@ -0,0 +1,47 @@ +package org.opengeoportal.security; + +import java.io.IOException; +import java.io.Writer; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletResponseWrapper; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + + + +public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFilter { + + protected void onSuccessfulAuthentication(HttpServletRequest request, + HttpServletResponse response, FilterChain chain, Authentication authResult) + throws IOException, ServletException { + super.successfulAuthentication(request, response, chain, authResult); + HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response); + + Writer out = responseWrapper.getWriter(); + + //String targetUrl = determineTargetUrl( request ); + //out.write("{success:true, targetUrl : \'" + targetUrl + "\'}"); + out.close(); + + } + + protected void onUnsuccessfulAuthentication( HttpServletRequest request, + HttpServletResponse response, AuthenticationException failed ) + throws IOException { + + HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response); + + Writer out = responseWrapper.getWriter(); + + out.write("{ success: false, errors: { reason: 'Login failed. Try again.' }}"); + out.close(); + + } + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/FormLoginService.java b/geoportal_1/src/main/java/org/opengeoportal/security/FormLoginService.java similarity index 71% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Security/FormLoginService.java rename to geoportal_1/src/main/java/org/opengeoportal/security/FormLoginService.java index 31a0f84..53cb992 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/FormLoginService.java +++ b/geoportal_1/src/main/java/org/opengeoportal/security/FormLoginService.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Security; +package org.opengeoportal.security; import java.util.ArrayList; import java.util.Collection; @@ -26,6 +26,9 @@ public class FormLoginService implements LoginService { public LoginStatus getStatus() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + logger.debug(auth.getName()); + logger.debug(auth.getAuthorities().iterator().next().toString()); + logger.debug(Boolean.toString(auth.isAuthenticated())); if (auth != null && !auth.getName().equals("anonymousUser") && auth.isAuthenticated()) { return new LoginStatus(true, auth.getName(), auth.getAuthorities()); } else { @@ -35,10 +38,20 @@ public LoginStatus getStatus() { public LoginStatus login(String username, String password) { UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password); + logger.debug("Attempting login."); + Authentication auth = null; try { - Authentication auth = authenticationManager.authenticate(token); + auth = authenticationManager.authenticate(token); logger.debug("Login succeeded!"); + } catch (BadCredentialsException e){ + logger.error(e.getMessage()); + Collection authorities = new ArrayList(); + LoginStatus errorStatus = new LoginStatus(false, null, authorities); + errorStatus.setMessage(e.getMessage()); + return errorStatus; + } + try{ SecurityContextHolder.getContext().setAuthentication(auth); Collection authorities = null; if (auth.getAuthorities().isEmpty()){ @@ -47,17 +60,18 @@ public LoginStatus login(String username, String password) { authorities = auth.getAuthorities(); } return new LoginStatus(auth.isAuthenticated(), auth.getName(), authorities); - } catch (BadCredentialsException e) { + } catch (Exception e) { + logger.error(e.getMessage()); Collection authorities = new ArrayList(); - return new LoginStatus(false, null, authorities); + LoginStatus errorStatus = new LoginStatus(false, null, authorities); + errorStatus.setMessage(e.getMessage()); + return errorStatus; } } @Override - public LoginStatus logout() { + public LoginStatus logoutResponse() { logger.debug("Logout succeeded!"); - //SecurityContextHolder.getContext().getAuthentication().setAuthenticated(false); - SecurityContextHolder.clearContext(); List authorities = new ArrayList(); return new LoginStatus(false, null, authorities); diff --git a/geoportal_1/src/main/java/org/opengeoportal/security/IframeLoginController.java b/geoportal_1/src/main/java/org/opengeoportal/security/IframeLoginController.java new file mode 100644 index 0000000..d520395 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/security/IframeLoginController.java @@ -0,0 +1,57 @@ +package org.opengeoportal.security; + +import org.opengeoportal.config.ogp.OgpConfigRetriever; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; + +/** + * Use this controller for iframe login with authentication natively supported in Spring Security (like CAS) + * @author cbarne02 + * + */ +@Controller +public class IframeLoginController { + @Autowired + @Qualifier("formLoginService") + LoginService loginService; + + @Autowired + OgpConfigRetriever ogpConfigRetriever; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @RequestMapping(value="restricted/weblogin", method=RequestMethod.GET) + @ResponseBody public ModelAndView getStatus() throws JsonProcessingException { + logger.debug("Login status checked"); + + String sendingPage = ogpConfigRetriever.getPropertyWithDefault("ogp.domain", ""); + //create the model to return + ModelAndView mav = new ModelAndView("iframeLogin"); + LoginStatus status = loginService.getStatus(); + + ObjectWriter ow = new ObjectMapper().writer(); + String json = ow.writeValueAsString(status); + + //test + //json = json.replace("false", "true"); + + //send the authentication status as a json string + mav.addObject("authStatus", json); + //the sendingPage must be set to the domain of the OGP instance running for postMessage to work properly + mav.addObject("sendingPage", sendingPage); + + return mav; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/security/LayerPermissionEvaluator.java b/geoportal_1/src/main/java/org/opengeoportal/security/LayerPermissionEvaluator.java new file mode 100644 index 0000000..db2ceba --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/security/LayerPermissionEvaluator.java @@ -0,0 +1,80 @@ +package org.opengeoportal.security; + +import java.io.Serializable; + +import org.opengeoportal.config.ogp.OgpConfigRetriever; +import org.opengeoportal.solr.SolrRecord; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.PermissionEvaluator; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +/** + * use this class to determine if the user has permission to perform an action on a layer + * Use this in conjunction with Spring Security hasPermission annotation expression + * + * + * @author cbarne02 + * + */ +public class LayerPermissionEvaluator implements PermissionEvaluator { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + OgpConfigRetriever ogpConfigRetriever; + + @Override + public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission){ + logger.info("checking permission..."); + boolean hasPermission = false; + + if (targetDomainObject instanceof SolrRecord){ + SolrRecord sr = (SolrRecord) targetDomainObject; + if (sr.getAccess().equalsIgnoreCase("public")){ + hasPermission = true; + } else if (authentication.isAuthenticated() && hasAuthority(authentication, "ROLE_USER")){ + + String repId = ogpConfigRetriever.getConfig().getLoginConfig().getRepositoryId(); + if (sr.getInstitution().equalsIgnoreCase(repId)){ + hasPermission = true; + } + //also get repositoryId for authentication + //if the 2 match return true; + //should we add repository specific authority? + } + + } else { + logger.error("Only allowed to authorize using SolrRecord Object."); + } + //user should have access: + //1. layer is public + //2. user is authenticated and repository matches authentication repository + //Permissions: data access + //currently, it's really just yes, the user can access the data, or no they can't + //all metadata is available to the user + + return hasPermission; + + + } + + private boolean hasAuthority(Authentication authentication, String role) { + logger.info(authentication.getName()); + for (GrantedAuthority ga: authentication.getAuthorities()){ + logger.info(ga.getAuthority()); + if (ga.getAuthority().equalsIgnoreCase(role)){ + return true; + } + } + + return false; + } + + @Override + public boolean hasPermission(Authentication auth, Serializable targetId, String targetType, Object permission) { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginController.java b/geoportal_1/src/main/java/org/opengeoportal/security/LoginController.java similarity index 65% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginController.java rename to geoportal_1/src/main/java/org/opengeoportal/security/LoginController.java index b6b68cd..5dd41ac 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginController.java +++ b/geoportal_1/src/main/java/org/opengeoportal/security/LoginController.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Security; +package org.opengeoportal.security; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -19,17 +19,23 @@ public class LoginController { @RequestMapping(value="loginStatus", method=RequestMethod.GET, produces="application/json") @ResponseBody public LoginStatus getStatus() { + logger.debug("Login status checked"); return loginService.getStatus(); } - @RequestMapping(value="login", method=RequestMethod.GET, produces="application/json") - @ResponseBody public LoginStatus login(@RequestParam("j_username") String username, - @RequestParam("j_password") String password) { + @RequestMapping(value="login", method=RequestMethod.POST, produces="application/json") + @ResponseBody public LoginStatus login(@RequestParam("username") String username, + @RequestParam("password") String password) { + logger.debug("Login attempted"); + return loginService.login(username, password); } - @RequestMapping(value="logout", method=RequestMethod.GET, produces="application/json") + @RequestMapping(value="logoutResponse", method=RequestMethod.GET, produces="application/json") @ResponseBody public LoginStatus logout() { - return loginService.logout(); + + logger.info("Logout attempted"); + + return loginService.logoutResponse(); } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginService.java b/geoportal_1/src/main/java/org/opengeoportal/security/LoginService.java similarity index 64% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginService.java rename to geoportal_1/src/main/java/org/opengeoportal/security/LoginService.java index c24edd4..7e9a4c3 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginService.java +++ b/geoportal_1/src/main/java/org/opengeoportal/security/LoginService.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Security; +package org.opengeoportal.security; public interface LoginService { @@ -6,5 +6,5 @@ public interface LoginService { LoginStatus login(String username, String password); - LoginStatus logout(); + LoginStatus logoutResponse(); } \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginStatus.java b/geoportal_1/src/main/java/org/opengeoportal/security/LoginStatus.java similarity index 79% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginStatus.java rename to geoportal_1/src/main/java/org/opengeoportal/security/LoginStatus.java index e59d532..638e288 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginStatus.java +++ b/geoportal_1/src/main/java/org/opengeoportal/security/LoginStatus.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Security; +package org.opengeoportal.security; import java.util.Collection; @@ -8,6 +8,7 @@ public class LoginStatus { private final boolean authenticated; private final String username; private final Collection authorities; + private String message; public LoginStatus(boolean loggedIn, String username, Collection authorities) { this.authenticated = loggedIn; @@ -26,4 +27,12 @@ public String getUsername() { public Collection getAuthorities() { return authorities; } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } } diff --git a/geoportal_1/src/main/java/org/opengeoportal/security/NopLoginController.java b/geoportal_1/src/main/java/org/opengeoportal/security/NopLoginController.java new file mode 100644 index 0000000..a2701eb --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/security/NopLoginController.java @@ -0,0 +1,67 @@ +package org.opengeoportal.security; + +import org.opengeoportal.config.ogp.OgpConfigRetriever; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; + +/** + * Use this controller for login with auth schemes not natively supported in Spring Security (proprietery systems, Shib (until integration of SAML extension) + * + * This should be the page that your external auth system protects. Accessing this page authenticates you as an OGP user. Since you can't get to this page without + * authenticating to your external system, OGP is protected from non-authorized users. + * If you can provide authentication with deeper Spring Security integrations,it is recommeneded. + * + * @author cbarne02 + * + */ +@Controller +public class NopLoginController { + @Autowired + @Qualifier("formLoginService") + LoginService loginService; + + @Autowired + OgpConfigRetriever ogpConfigRetriever; + + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @RequestMapping(value="weblogin", method=RequestMethod.GET) + @ResponseBody public ModelAndView getStatus() throws JsonProcessingException { + logger.debug("Login status checked"); + + String sendingPage = ogpConfigRetriever.getPropertyWithDefault("ogp.domain", ""); + String noopUser = ogpConfigRetriever.getPropertyWithDefault("login.nop.user", ""); + String noopPass = ogpConfigRetriever.getPropertyWithDefault("login.nop.password", ""); + + //create the model to return + ModelAndView mav = new ModelAndView("iframeLogin"); + //The appropriate authentication manager must be configured. The default one should work. + //Make sure this username and password combo matches what's in your Spring Security context + LoginStatus status = loginService.login(noopUser, noopPass); + + ObjectWriter ow = new ObjectMapper().writer(); + String json = ow.writeValueAsString(status); + + //test + //json = json.replace("false", "true"); + + //send the authentication status as a json string + mav.addObject("authStatus", json); + //the sendingPage must be set to the domain of the OGP instance running for postMessage to work properly + mav.addObject("sendingPage", sendingPage); + + return mav; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/security/cas/SimpleCasUserService.java b/geoportal_1/src/main/java/org/opengeoportal/security/cas/SimpleCasUserService.java new file mode 100644 index 0000000..1cc8eaa --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/security/cas/SimpleCasUserService.java @@ -0,0 +1,123 @@ +package org.opengeoportal.security.cas; +/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited +* +* 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. +*/ + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.cas.userdetails.AbstractCasAssertionUserDetailsService; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.util.Assert; +import org.apache.commons.lang.ArrayUtils; +import org.jasig.cas.client.validation.Assertion; + +import java.util.List; +import java.util.ArrayList; + +/** +* Populates the {@link org.springframework.security.core.GrantedAuthority}s for a user by reading a list of attributes that were returned as +* part of the CAS response. Each attribute is read and each value of the attribute is turned into a GrantedAuthority. If the attribute has no +* value then its not added. +* +* --modified: if the user has been authenticated via CAS, they are granted the role "ROLE_USER". If the user is found in the admins list, they +* are also granted the role "ROLE_ADMIN". Note that at this point the admin user has no special privileges in the application. the addition is +* for future functionality and parity with the LDAP authorization as it stands. +* +* @author Scott Battaglia, modified Chris Barnett +* @since 3.0 +*/ +public final class SimpleCasUserService extends AbstractCasAssertionUserDetailsService { + + protected String admins; + protected String[] adminList; + final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private static final String NON_EXISTENT_PASSWORD_VALUE = "NO_PASSWORD"; + + private final String[] attributes; + + private boolean convertToUpperCase = true; + + public void setAdmins(String admins){ + admins = admins.replace(" ", ""); + adminList = admins.split(","); + } + + protected Boolean isAdmin(String username){ + return ArrayUtils.contains(adminList, username); + } + + //public SimpleCasUserService() {} + + public SimpleCasUserService(final String[] attributes) { + Assert.notNull(attributes, "attributes cannot be null.");//should null attributes be allowed, since we are not using CAS attributes for our roles? + // Assert.isTrue(attributes.length > 0, "At least one attribute is required to retrieve roles from."); + this.attributes = attributes; + } + + /** + * Converts the returned attribute values to uppercase values. + * + * @param convertToUpperCase true if it should convert, false otherwise. + */ + public void setConvertToUpperCase(final boolean convertToUpperCase) { + this.convertToUpperCase = convertToUpperCase; + } + + //@SuppressWarnings("rawtypes") + @Override + protected UserDetails loadUserDetails(final Assertion assertion) { + final List grantedAuthorities = new ArrayList(); + + grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER")); + + String username = assertion.getPrincipal().getName(); + + if(isAdmin(username)){ + grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); + } + + + //attempt to add authorities based on attributes passed + //perhaps this is not safe; an attribute that happens to have an ogp role name could be present inadvertantly + /* + for (final String attribute : this.attributes) { + final Object value = assertion.getPrincipal().getAttributes().get(attribute); + + if (value == null) { + continue; + } + + if (value instanceof List) { + final List list = (List) value; + + for (final Object o : list) { + grantedAuthorities.add(new SimpleGrantedAuthority(this.convertToUpperCase ? o.toString().toUpperCase() : o.toString())); + } + + } else { + grantedAuthorities.add(new SimpleGrantedAuthority(this.convertToUpperCase ? value.toString().toUpperCase() : value.toString())); + } + + } + */ + + return new User(username, NON_EXISTENT_PASSWORD_VALUE, true, true, true, true, grantedAuthorities); + } + + +} \ No newline at end of file diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/SimpleLdapUserDetailsMapper.java b/geoportal_1/src/main/java/org/opengeoportal/security/ldap/SimpleLdapUserDetailsMapper.java similarity index 97% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Security/SimpleLdapUserDetailsMapper.java rename to geoportal_1/src/main/java/org/opengeoportal/security/ldap/SimpleLdapUserDetailsMapper.java index ed3386a..6492e09 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/SimpleLdapUserDetailsMapper.java +++ b/geoportal_1/src/main/java/org/opengeoportal/security/ldap/SimpleLdapUserDetailsMapper.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Security; +package org.opengeoportal.security.ldap; import java.util.Collection; import java.util.HashSet; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrRecord.java b/geoportal_1/src/main/java/org/opengeoportal/solr/SolrRecord.java similarity index 99% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrRecord.java rename to geoportal_1/src/main/java/org/opengeoportal/solr/SolrRecord.java index 984da9c..349545b 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Solr/SolrRecord.java +++ b/geoportal_1/src/main/java/org/opengeoportal/solr/SolrRecord.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Solr; +package org.opengeoportal.solr; import java.util.Date; import java.util.HashMap; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/CleanupDirectory.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/CleanupDirectory.java similarity index 68% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/CleanupDirectory.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/CleanupDirectory.java index 1f16e9f..608df83 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/CleanupDirectory.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/CleanupDirectory.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities; public interface CleanupDirectory { public void cleanupDownloadDirectory(); diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/CleanupDirectoryImpl.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/CleanupDirectoryImpl.java similarity index 54% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/CleanupDirectoryImpl.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/CleanupDirectoryImpl.java index 7589ee5..b15861c 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/CleanupDirectoryImpl.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/CleanupDirectoryImpl.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities; import java.io.File; @@ -6,44 +6,83 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +/** + * This class inspects the donwload directory, looks for files last modified before FILE_AGE_MINUTES, then deletes them + * + * This is set up as a recurring task + * + * @author cbarne02 + * + */ public class CleanupDirectoryImpl implements CleanupDirectory { - private static final int FILE_AGE_MINUTES = 240; + int maxAge; @Autowired private DirectoryRetriever directoryRetriever; final static Logger logger = LoggerFactory.getLogger(CleanupDirectoryImpl.class.getName()); + public int getMaxAge() { + return maxAge; + } + + public void setMaxAge(int maxAge) { + this.maxAge = maxAge; + } + + private Boolean fileDelete(File file){ + String descriptor = "file"; + if (file.isDirectory()){ + descriptor = "directory"; + } + + if (file.canWrite() && !file.isHidden()){ + logger.info("Deleting " + descriptor + ": " + file.getName()); + return file.delete(); + + } else { + logger.warn("No permissions to delete "+ descriptor + ": " + file.getName()); + return false; + } + }; + /* (non-Javadoc) + * @see org.OpenGeoPortal.Utilities.CleanupDirectory#cleanupDownloadDirectory() + */ public void cleanupDownloadDirectory(){ logger.debug("Attempting to clean directory..."); //this is not great...only handles one level of directories try { //convert to milliseconds int counter = 0; - long timeInterval = FILE_AGE_MINUTES * 60 * 1000; + long timeInterval = maxAge * 60 * 1000; File[] downloadedFiles = directoryRetriever.getDownloadDirectory().listFiles(); + long currentTime = System.currentTimeMillis(); for (File downloadedFile : downloadedFiles) { - + if (downloadedFile.isDirectory()){ + if (!downloadedFile.canRead()){ + continue; + } File[] innerDownloadedFiles = downloadedFile.listFiles(); for (File innerDownloadedFile : innerDownloadedFiles) { + if (currentTime - innerDownloadedFile.lastModified() > timeInterval){ - logger.info("Deleting file: " + innerDownloadedFile.getName()); - innerDownloadedFile.delete(); - counter++; + if (fileDelete(innerDownloadedFile)){ + counter++; + } } } if (downloadedFile.listFiles().length == 0){ - logger.info("Deleting directory: " + downloadedFile.getName()); - downloadedFile.delete(); - counter++; + if (fileDelete(downloadedFile)){ + counter++; + } } } else { if (currentTime - downloadedFile.lastModified() > timeInterval){ - logger.info("Deleting file: " + downloadedFile.getName()); - downloadedFile.delete(); - counter++; + if (fileDelete(downloadedFile)){ + counter++; + } } } @@ -53,6 +92,7 @@ public void cleanupDownloadDirectory(){ logger.debug("No items to delete."); } } catch (Exception e) { + e.printStackTrace(); logger.error("Attempt to delete old files was unsuccessful."); } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/DirectoryRetriever.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/DirectoryRetriever.java similarity index 84% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/DirectoryRetriever.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/DirectoryRetriever.java index 5bc8cda..8eff42f 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/DirectoryRetriever.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/DirectoryRetriever.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities; import java.io.File; import java.io.IOException; diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/DirectoryRetrieverImpl.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/DirectoryRetrieverImpl.java new file mode 100644 index 0000000..d50c5c3 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/DirectoryRetrieverImpl.java @@ -0,0 +1,59 @@ +package org.opengeoportal.utilities; + +import java.io.File; +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DirectoryRetrieverImpl implements DirectoryRetriever { + private String downloadDirectory; + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + DirectoryRetrieverImpl(String downloadDirectory) { + this.downloadDirectory = downloadDirectory; + } + + /** + * a method to create a directory to put downloaded files into, if it doesn't already exist + * puts the directory in the temp directory + * + * @param directoryName the name of the directory as a String + * @throws IOException + * + */ + public File getDirectory(String directoryName) throws IOException{ + //check permissions + File tempFile = File.createTempFile("tmp", "tmp"); + File tempDir = tempFile.getParentFile(); + tempFile.delete(); + File theDirectory = new File(tempDir, directoryName); + + if (!theDirectory.exists()){ + theDirectory.mkdir(); + } + + if (!theDirectory.canRead() || !theDirectory.canWrite()){ + throw new IOException("Download directory is inaccessible."); + } else { + return theDirectory; + } + } + + + /** + * + * @return a File handle for the temp directory, which we're using for downloads + * @see org.OpenGeoPortal.Utilities.DirectoryRetriever#getDownloadDirectory() + */ + public File getDownloadDirectory() { + File theDirectory = null; + try { + theDirectory = getDirectory(downloadDirectory); + } catch (IOException e) { + logger.error("Unable to retrieve directory ['" + downloadDirectory + "'] in the temp directory."); + } + return theDirectory; + } +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/GenericResponseWrapper.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/GenericResponseWrapper.java similarity index 91% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/GenericResponseWrapper.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/GenericResponseWrapper.java index e1e1c5f..9b60872 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/GenericResponseWrapper.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/GenericResponseWrapper.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; @@ -7,6 +7,8 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; +import org.opengeoportal.utilities.http.FilterServletOutputStream; + public class GenericResponseWrapper extends HttpServletResponseWrapper { private ByteArrayOutputStream output; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/LinkShortenRequestGoogle.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/LinkShortenRequestGoogle.java similarity index 51% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/LinkShortenRequestGoogle.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/LinkShortenRequestGoogle.java index e610305..c0ea97c 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/LinkShortenRequestGoogle.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/LinkShortenRequestGoogle.java @@ -1,16 +1,19 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; @JsonIgnoreProperties(ignoreUnknown=true) public class LinkShortenRequestGoogle { - /*{ - "kind": "urlshortener#url", - "id": "http://goo.gl/fbsS", - "longUrl": "http://www.google.com/" -} -*/ + /* + * Example request to Google Link Shortener API + * { + * "kind": "urlshortener#url", + * "id": "http://goo.gl/fbsS", + * "longUrl": "http://www.google.com/" + * } + */ LinkShortenRequestGoogle (String longUrl){ this.setLongUrl(longUrl); } diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/LinkShortenReturnGoogle.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/LinkShortenReturnGoogle.java new file mode 100644 index 0000000..cd484a9 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/LinkShortenReturnGoogle.java @@ -0,0 +1,49 @@ +package org.opengeoportal.utilities; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * A java object to parse and contain the response from a call to the Google Link Shortening API + * + * @author cbarne02 + * + */ +@JsonIgnoreProperties(ignoreUnknown=true) +public class LinkShortenReturnGoogle { + /* + * Example return from Google API: + * { + * "kind": "urlshortener#url", + * "id": "http://goo.gl/fbsS", + * "longUrl": "http://www.google.com/" + * } + */ + + @JsonProperty + private String kind; + @JsonProperty + private String id; + @JsonProperty + private String longUrl; + + public void setKind (String kind){ + this.kind = kind; + } + public String getKind(){ + return this.kind; + } + public void setId (String id){ + this.id = id; + } + public String getId (){ + return this.id; + } + public void setLongUrl (String longUrl){ + this.longUrl = longUrl; + } + public String getLongUrl (){ + return this.longUrl; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/LocalSchemaLSResourceResolver.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/LocalSchemaLSResourceResolver.java new file mode 100644 index 0000000..824c104 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/LocalSchemaLSResourceResolver.java @@ -0,0 +1,51 @@ +package org.opengeoportal.utilities; + +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.Resource; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.bootstrap.DOMImplementationRegistry; +import org.w3c.dom.ls.DOMImplementationLS; +import org.w3c.dom.ls.LSInput; +import org.w3c.dom.ls.LSResourceResolver; + +public class LocalSchemaLSResourceResolver implements LSResourceResolver { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + private Resource resource; + + public Resource getResource() { + return resource; + } + + public void setResource(Resource resource) { + this.resource = resource; + } + + @Override + public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) { + DOMImplementationRegistry registry = null; + logger.info("resolve resource"); + try { + registry = DOMImplementationRegistry.newInstance(); + } catch (ClassNotFoundException ex) { + } catch (InstantiationException ex) { + } catch (IllegalAccessException ex) { + } catch (ClassCastException ex) { + } + + try { + DOMImplementation impl2 = registry.getDOMImplementation("XML 1.0 LS 3.0"); + DOMImplementationLS domImplLS = (DOMImplementationLS) impl2; + LSInput lsInput = domImplLS.createLSInput(); + lsInput.setByteStream(resource.getInputStream()); + return lsInput; + } catch (IOException e) { + e.printStackTrace(); + return null; + } + + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/LocationFieldUtils.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/LocationFieldUtils.java new file mode 100644 index 0000000..0b400c3 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/LocationFieldUtils.java @@ -0,0 +1,312 @@ +package org.opengeoportal.utilities; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; + +/** + * A set of methods for parsing and dealing with the Location field in an OGP SolrRecord + * + * The Location field is stored as a String, but should be a JSON object with key-value pairs + * that describe how to access the layer over the web + * + * @author cbarne02 + * + */ +public final class LocationFieldUtils { + final static Logger logger = LoggerFactory.getLogger(LocationFieldUtils.class.getName()); + + /** + * Get the first value of type "type" from the Location field + * + * @param type The field key + * @param locationField The Solr record Location field as a String + * @return the url for the layer, if the record has been populated correctly + * @throws JsonParseException + */ + public static String getUrl(String type, String locationField) throws JsonParseException{ + return parseLocationFromKey(locationField, type).get(0); + + } + + /** + * Get the first value in the "wms" array from the Location field + * + * @param locationField The Solr record Location field as a String + * @return the url for the wms server for the layer, if the record has been populated correctly + * @throws JsonParseException + */ + public static String getWmsUrl(String locationField) throws JsonParseException{ + return parseLocationFromKey(locationField, "wms").get(0); + + } + + /** + * determines if the SolrRecord Location field contains a value for the key "wms" + * + * @param locationField The Solr record Location field as a String + * @return true if the SolrRecord Location field contains a key for "wms" + */ + public static Boolean hasWmsUrl(String locationField){ + try { + return hasKey(locationField, "wms"); + } catch (JsonParseException e) { + + } + return false; + } + + /** + * determines if the SolrRecord Location field contains a value for the key "serviceStart" + * + * the service start url refers to a custom servlet at Harvard that configures a layer in GeoServer so + * that it can be accessed via OGC web protocols + * + * @param locationField The Solr record Location field as a String + * @return true if the SolrRecord Location field contains a key for "serviceStart" + */ + public static Boolean hasServiceStart(String locationField){ + try { + return hasKey(locationField, "serviceStart"); + } catch (JsonParseException e) { + + } + return false; + } + + /** + * Get the value for the "tilecache" key from the Location field + * + * some layers have a tile cache url that differs from the wms url. if the tile cache acts as + * a full wms server, the value should be in "wms" rather than "tilecache" + * + * @param locationField The Solr record Location field as a String + * @return the url for the tilecache service point for the layer, if the record has been populated correctly + * @throws JsonParseException + */ + public static String getTilecacheUrl(String locationField) throws JsonParseException{ + return parseLocationFromKey(locationField, "tilecache").get(0); + + } + + /** + * Get the value for the "wfs" key from the Location field. + * + * Only vector layers with a wfs service should have + * a value here. + * + * @param locationField The Solr record Location field as a String + * @return the url for the wfs server for the layer, if the record has been populated correctly + * @throws JsonParseException + */ + public static String getWfsUrl(String locationField) throws JsonParseException{ + return parseLocationFromKey(locationField, "wfs").get(0); + + } + + /** + * determines if the SolrRecord Location field contains a value for the key "wfs" + * + * @param locationField The Solr record Location field as a String + * @return true if the SolrRecord Location field contains a key for "wms" + */ + + // Added by Allen Lin on Jan, 24, 2014 + + public static Boolean hasWfsUrl(String locationField){ + + try { + + return hasKey(locationField, "wfs"); + + } catch (JsonParseException e) { + + } + + return false; + + } + + /** + * determines if the SolrRecord Location field contains a value for the passed key + * + * @param locationField The Solr record Location field as a String + * @param key The key in the Location Json object + * @return true if the key exists at the root of the Location Json object + * @throws JsonParseException + */ + private static Boolean hasKey(String locationField, String key) throws JsonParseException{ + JsonNode rootNode = parseLocationField(locationField); + JsonNode pathNode = rootNode.path(key); + if (pathNode.isMissingNode()){ + return false; + + } else { + return true; + } + } + + /** + * @param locationField The Solr record Location field as a String + * @param key The key in the Location Json object + * @return a list of values with the given key + * @throws JsonParseException + */ + private static List parseLocationFromKey(String locationField, String key) throws JsonParseException{ + JsonNode rootNode = parseLocationField(locationField); + JsonNode pathNode = rootNode.path(key); + Set url = new HashSet(); + if (pathNode.isMissingNode()){ + + throw new JsonParseException("The Object '" + key + "' could not be found.", null); + + } else if (pathNode.isArray()){ + + ArrayNode urls = (ArrayNode) rootNode.path(key); + for(JsonNode currentUrl: urls){ + if (currentUrl.isTextual()){ + url.add(currentUrl.asText()); + } else { + throw new JsonParseException("Invalid url value in Location field", null); + } + } + + } else if (pathNode.isTextual()){ + url.add(pathNode.asText()); + } + + if (url == null || url.isEmpty()){ + + throw new JsonParseException("The Object '" + key + "' is empty.", null); + + } + List urlList = new ArrayList(); + urlList.addAll(url); + return urlList; + } + + /** + * Get the value for the "wcs" key from the Location field + * + * @param locationField The Solr record Location field as a String + * @return the url for the wcs server for the layer, if the record has been populated correctly + * @throws JsonParseException + */ + public static String getWcsUrl(String locationField) throws JsonParseException{ + + return parseLocationFromKey(locationField, "wcs").get(0); + } + + /** + * Get the value for the "serviceStart" key from the Location field + * + * @param locationField The Solr record Location field as a String + * @return the url for the "serviceStart" service point for the layer, if the record has been populated correctly + * @throws JsonParseException + */ + public static String getServiceStartUrl(String locationField) throws JsonParseException{ + return parseLocationFromKey(locationField, "serviceStart").get(0); + + } + + /** + * Get the values for the "fileDownload" key from the Location field + * + * @param locationField The Solr record Location field as a String + * @return a List of urls for download for the layer, if the record has been populated correctly + * @throws JsonParseException + */ + public static List getDownloadUrl(String locationField) throws JsonParseException{ + return parseLocationFromKey(locationField, "fileDownload"); + + } + + /** + * determines if the SolrRecord Location field contains a value for the key "wfs" + * + * @param locationField The Solr record Location field as a String + * @return true if the SolrRecord Location field contains a key for "wms" + */ + + // Added by Allen Lin on Jan, 24, 2014 + + public static Boolean hasArcGISRestUrl(String locationField){ + + try { + + return hasKey(locationField, "ArcGISRest"); + + } catch (JsonParseException e) { + + + + } + + return false; + + } + + /** + * Get the value in the "ArcGISRest" field from the Location field + * + * @param locationField The Solr record Location field as a String + * @return the url for the wms server for the layer, if the record has been populated correctly + * @throws JsonParseException + */ + + //Added by Allen Lin on Jan, 24, 2014 + + public static String getArcGISRestUrl(String locationField) throws JsonParseException{ + + return parseLocationFromKey(locationField, "ArcGISRest").get(0); + + + + } + + /** + * parses the SolrRecord Location Field into a JsonNode object for further processing. + * + * Additionally, attempts to normalize key names before parsing + * + * @param locationField The Solr record Location field as a String + * @return a JsonNode parsed from the locationField String + */ + private static JsonNode parseLocationField(String locationField){ + //normalize key names + locationField = locationField.replaceAll("(?i)\"wms\"", "\"wms\""); + locationField = locationField.replaceAll("(?i)\"wcs\"", "\"wcs\""); + locationField = locationField.replaceAll("(?i)\"wfs\"", "\"wfs\""); + locationField = locationField.replaceAll("(?i)\"serviceStart\"", "\"serviceStart\""); + locationField = locationField.replaceAll("(?i)\"download\"", "\"fileDownload\""); + locationField = locationField.replaceAll("(?i)\"fileDownload\"", "\"fileDownload\""); + locationField = locationField.replaceAll("(?i)\"tilecache\"", "\"tilecache\""); + + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = null; + try { + rootNode = mapper.readTree(locationField); + + } catch (JsonProcessingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return rootNode; + + } +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/OgpFileUtils.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/OgpFileUtils.java similarity index 64% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/OgpFileUtils.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/OgpFileUtils.java index 55a39ad..2c5de23 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/OgpFileUtils.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/OgpFileUtils.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities; import java.io.File; import java.io.IOException; @@ -6,12 +6,21 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Some utilities dealing with File handling. + * + * @author cbarne02 + * + */ public class OgpFileUtils { private static final int TEMP_DIR_ATTEMPTS = 10000; final static Logger logger = LoggerFactory.getLogger(OgpFileUtils.class.getName()); /** * Processes the layer's Name so that it can be used as a file name + * + * processes the layer name String so that it can be used as a file name + * * @param layerName * @return filtered name */ @@ -28,13 +37,55 @@ public static String filterName(String layerName){ /** * method creates a new file, adds the appropriate extension to the filename based on MIME-TYPE - * @param layerName, mimeType, directory - * @return a handle to the new file + * + * used for files retrieved over the web + * + * @param fileName the name of the File to create minus the extension + * @param mimeType the mime-type of the File + * @param directory the directory to create the new File in + * @return a handle to the new File * @throws IOException */ - public static File createNewFileFromDownload(String fileName, String mimeType, File directory) throws IOException{ + public static File createNewFileFromDownload(String fileName, String mimeType, File directory) throws IOException { + String fileExtension = ""; + String[] fileNameArr = fileName.split("\\."); + + if (fileNameArr.length > 1){ + String temp = fileNameArr[fileNameArr.length -1]; + if (temp.length() == 3){ + //assume this is a file extension + fileExtension = "." + temp; + fileName = fileName.substring(0, fileName.indexOf(fileExtension)); + } + } + logger.debug(fileName); + + if (fileExtension.isEmpty()){ + //try to get it from the mime type + fileExtension = getFileExtensionFromMimeType(mimeType); + } fileName = OgpFileUtils.filterName(fileName); - String responseContentType = mimeType; + directory.mkdirs(); + directory.mkdir(); + File newFile = new File(directory, fileName + fileExtension); + int i = 1; + while (newFile.exists()){ + newFile = new File(directory, fileName + "_" + i + fileExtension); + i++; + } + newFile.createNewFile(); + logger.debug("New file path: " + newFile.getAbsolutePath()); + return newFile; + } + + /** + * a simplistic way of mapping mime-type to extensions. There is likely a good library to use for this. + * + * @param contentType the mime-type of the content + * @return an extension appropriate to the content type + */ + public static String getFileExtensionFromMimeType(String contentType){ + String responseContentType = contentType.toLowerCase(); logger.info("response MIME-Type: " + responseContentType); //get info from RequestedLayer object if (responseContentType.indexOf(";") > -1){ @@ -47,7 +98,7 @@ public static File createNewFileFromDownload(String fileName, String mimeType, F fileExtension = ".html"; } else if (responseContentType.contains("application/zip")){ fileExtension = ".zip"; - } else if (responseContentType.contains("image/tiff")){ + } else if (responseContentType.contains("tiff")||responseContentType.contains("geotiff")){ fileExtension = ".tif"; } else if (responseContentType.contains("image/jpeg")){ fileExtension = ".jpg"; @@ -58,19 +109,14 @@ public static File createNewFileFromDownload(String fileName, String mimeType, F } else { fileExtension = ".unk"; } - directory.mkdirs(); - directory.mkdir(); - File newFile = new File(directory, fileName + fileExtension); - int i = 1; - while (newFile.exists()){ - newFile = new File(directory, fileName + "_" + i + fileExtension); - i++; - } - newFile.createNewFile(); - logger.debug("New file path: " + newFile.getAbsolutePath()); - return newFile; + return fileExtension; } + /** + * create a temp directory + * + * @return a handle to a temporary directory + */ public static File createTempDir() { File baseDir = new File(System.getProperty("java.io.tmpdir")); String baseName = System.currentTimeMillis() + "-"; diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/OgpUtils.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/OgpUtils.java new file mode 100644 index 0000000..0174c8d --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/OgpUtils.java @@ -0,0 +1,231 @@ +package org.opengeoportal.utilities; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.geotools.geometry.jts.ReferencedEnvelope; +import org.opengeoportal.solr.SolrRecord; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * A class containing utility methods that should be useful throughout the project + * + * @author cbarne02 + * + */ + +public class OgpUtils { + final static Logger logger = LoggerFactory.getLogger(OgpUtils.class.getName()); + + /** + * a method to determine if an email address is well-formed or not + * + * Validity of an email address is very difficult to determine. For now, at least, we must + * be content to ensure that an email address could actually be a real email address. + * + * @param emailAddress a String containing a potential email address + * @return a Boolean base on whether the email address appears to be well-formed or not + */ + public static Boolean isWellFormedEmailAddress(String emailAddress){ + //a very basic check of the email address + emailAddress = emailAddress.trim(); + if (emailAddress.contains(" ")){ + return false; + } + String[] arr = emailAddress.split("@"); + if (arr.length != 2){ + return false; + } + if (!arr[1].contains(".")){ + return false; + } + + return true; + } + + + /** + * a convenience method to get a url without the query string + * + * @param url a url String + * @return a url String without the query String + */ + public static String filterQueryString(String url){ + if (url.contains("?")){ + //can happen with generic ows endpoint + //get rid of everything after the query param + url = url.substring(0,url.indexOf("?")); + } + + return url; + } + + /** + * a convenience method that takes a Set of Strings of mixed case and returns a copy of the Set in all lowercase + * useful for String matching using Set.contains() + * + * @param mixedCaseSet a Set of Strings of arbitrary case + * @return a Set of Strings that is all lowercase + */ + public static Set getSetAsLowerCase(Set mixedCaseSet){ + Set lcSet = new HashSet(); + for (String name: mixedCaseSet){ + lcSet.add(name.toLowerCase()); + } + return lcSet; + } + + public static Boolean containsIgnoreCase(Collection stringCollection, String testString){ + for (String curr: stringCollection){ + if (curr.equalsIgnoreCase(testString)){ + return true; + } + } + return false; + } + + /** + * a convenience method to get the fully qualified name for a layer (workspace name plus layer name) + * + * In some cases, the workspace name may be embedded in the layer name (an ingest error) or there may be no workspace name. + * This allows code that requires a qualified layer name to be more fault tolerant. + * + * @param workspaceName the workspace name for a layer + * @param layerName the layer name + * @return the layer name with workspace name (fully qualified) + * @throws Exception + */ + public static String getLayerNameNS(String workspaceName, String layerName) throws Exception{ + workspaceName = workspaceName.trim(); + layerName = layerName.trim(); + + String embeddedWSName = ""; + if (layerName.contains(":")){ + String[] layerNameArr = layerName.split(":"); + if (layerNameArr.length > 2){ + throw new Exception("Invalid layer name ['" + layerName + "']"); + } + embeddedWSName = layerNameArr[0]; + layerName = layerNameArr[1]; + } + if (!workspaceName.isEmpty()){ + //prefer the explicit workspaceName? + return workspaceName + ":" + layerName; + } else { + if (embeddedWSName.isEmpty()){ + return layerName; + } else { + return embeddedWSName + ":" + layerName; + } + } + } + + /** + * puts together a url with query string. + * + * sometimes the provided url in the location field may contain query parameters. This method removes + * duplicate parameters and determines whether a "?" is needed. It may be better to replace this implementation + * using utility methods from Apache HttpComponents + * + * @param path + * @param requestString + * @return combined URL + * @throws MalformedURLException + */ + public static String combinePathWithQuery(String path, String requestString) throws MalformedURLException{ + if (requestString.startsWith("?")){ + requestString = requestString.substring(requestString.indexOf("?")); + } + if (path.endsWith("?")){ + path = path.substring(0, path.indexOf("?")); + } + + int count = StringUtils.countMatches(path, "?"); + if (count == 0){ + //we're good + } else if (count == 1){ + + //there are some embedded params + String[] urlArr = path.split("\\?"); + path = urlArr[0]; + List embeddedParams = new ArrayList(Arrays.asList(urlArr[1].split("\\&"))); + List queryParams = new ArrayList(Arrays.asList(requestString.split("\\&"))); + List duplicates = new ArrayList(); + + for (String mParam: embeddedParams){ + String mKey = mParam.split("=")[0]; + for (String qParam: queryParams){ + String qKey = qParam.split("=")[0]; + if (mKey.equalsIgnoreCase(qKey)){ + duplicates.add(mParam); + } + } + } + if (!duplicates.isEmpty()){ + embeddedParams.removeAll(duplicates); + } + if (!embeddedParams.isEmpty()){ + queryParams.addAll(embeddedParams); + } + requestString = StringUtils.join(queryParams, "&"); + } else if (count > 1){ + //something's really wrong here, or the path has parameters embedded in the path + throw new MalformedURLException("This path is problematic: ['" + path + "']"); + } + + + String combined = path + "?" + requestString; + logger.info("Combined URL: " + combined); + return combined; + } + + + /** + * Converts a Double to a String, rounding it to 7 decimal places. Some OGC service endpoints have problems with + * higher precision + * + * @param value Double to convert to String + * @return Double as a String, with rounding + */ + public static String doubleToString(Double value){ + logger.info(Double.toString(value)); + BigDecimal valDec = new BigDecimal(value); + String valString = valDec.setScale(7, RoundingMode.HALF_UP).toPlainString(); + return valString; + } + + /** + * returns a bbox string from a ReferencedEnvelope object + * + * @param env ReferencedEnvelope + * @return bbox String + */ + public static String referencedEnvelopeToString(ReferencedEnvelope env){ + String envString = doubleToString(env.getMinX()) + ","; + envString += doubleToString(env.getMinY()) + ","; + envString += doubleToString(env.getMaxX()) + ","; + envString += doubleToString(env.getMaxY()); + return envString; + } + + public static SolrRecord findRecordById(String layerId, List recordList) throws Exception{ + for (SolrRecord sr: recordList){ + if (sr.getLayerId().equals(layerId)){ + + return sr; + } + } + + throw new Exception("Record not found."); + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/OgpXmlUtils.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/OgpXmlUtils.java new file mode 100644 index 0000000..1316966 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/OgpXmlUtils.java @@ -0,0 +1,225 @@ +package org.opengeoportal.utilities; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +/** + * This class contains utilities and convenience methods for dealing with XML + * + * @author cbarne02 + * + */ +public class OgpXmlUtils { + final static Logger logger = LoggerFactory.getLogger(OgpXmlUtils.class.getName()); + + /** + * some boilerplate code to get a w3c.dom Document instance (namespace aware) from an InputStream + * + * @param inputStream an InputStream of XML + * @return a w3c.dom Document instance + * @throws SAXException + * @throws IOException + * @throws ParserConfigurationException + */ + public static Document getDocument(InputStream inputStream) throws SAXException, IOException, ParserConfigurationException{ + try{ + // Create a factory + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + + documentBuilderFactory.setValidating(false); // dtd isn't always available; would be nice to attempt to validate + documentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + documentBuilderFactory.setNamespaceAware(true); + + // Use document builder factory + DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); + //Parse the document + Document document = builder.parse(inputStream); + return document; + } finally { + IOUtils.closeQuietly(inputStream); + } + } + + + /** + * A method to return a Node name, whether or not the parent Document is namespaced + * + * @param node + * @return a String with the node name + * @throws Exception + */ + public static String alwaysGetName(Node node) throws Exception{ + if (node.equals(null)){ + throw new Exception("This node is null."); + } + String localName = ""; + try{ + if (!node.getLocalName().equals(null)){ + localName = node.getLocalName(); + } + } catch (NullPointerException e){ + localName = node.getNodeName(); + } + return localName; + } + + /** + * method determines if XML Document is an ows service exception report and if so, + * tries to convert it into an Exception + * + * @param baseNode the root node of the document + * @throws Exception if the parent Document is an ows service exception report; + * message contains the exception code returned + */ + public static void handleServiceException(Node baseNode) throws Exception{ + /* + * + * + + java.lang.NullPointerException null + + + */ + + logger.debug("Full response: " + baseNode.getTextContent()); + String errorMessage = ""; + + if (alwaysGetName(baseNode).toLowerCase().contains("serviceexception")){ + if (baseNode.hasChildNodes()){ + for (int i = 0; i < baseNode.getChildNodes().getLength(); i++){ + String nodeName = alwaysGetName(baseNode.getChildNodes().item(i)); + if (nodeName.equals("ServiceException")){ + logger.error("Service Exception:"); + errorMessage += baseNode.getChildNodes().item(i).getTextContent().trim(); + } + } + } else { + errorMessage += "poorly formed service exception"; + } + } else if (alwaysGetName(baseNode).toLowerCase().contains("exception")){ + try{ + errorMessage += baseNode.getFirstChild().getAttributes().getNamedItem("exceptionCode").getTextContent(); + } catch (Exception e){ + errorMessage += "Abridged response: " + baseNode.getTextContent().trim(); + } + } else { + return; + } + if (errorMessage.length() > 1024){ + errorMessage = errorMessage.substring(0, 1023); + } + throw new Exception(errorMessage); + } + + /** + * This method looks at the children of a given node, matches the ones in the passed Set, + * then returns a map of the matches with their values + * + * @param parent parent node + * @param childTags Set of desired tag names + * @return Map of desired tag names to their values + */ + public static Map getDesiredChildrenValues (Node parent, Set childTags){ + Map responseMap = new HashMap(); + NodeList children = parent.getChildNodes(); + for (int i=0; i < children.getLength(); i++){ + Node child = children.item(i); + responseMap.putAll(getSiblingValues(child, childTags)); + } + return responseMap; + } + + /** + * This method gets a List of values for all child nodes with the specified tag name + * + * @param parentNode + * @param tagName the name of the desired node type + * @return a List of values for child nodes with the given tag name + */ + public static List getChildValuesList(Node parentNode, String tagName){ + List values = new ArrayList(); + NodeList children = parentNode.getChildNodes(); + for (int i = 0 ; i < children.getLength(); i++){ + Node currentNode = children.item(i); + if (currentNode.getLocalName().equalsIgnoreCase(tagName)){ + values.add(currentNode.getTextContent().trim()); + } + } + return values; + } + + /** + * Gets the attribute value for a Node given the attribute name + * + * @param currentNode + * @param attributeName + * @return the attribute value + */ + public static String getAttribute(Node currentNode, String attributeName){ + NamedNodeMap attrs = currentNode.getAttributes(); + return attrs.getNamedItem(attributeName).getNodeValue().trim(); + } + + /** + * This method looks at the siblings of a given node, matches the ones in the passed Set, + * then returns a map of the matches with their values + * + * @param currentNode + * @param siblingTags a Set of Strings containing the tagnames to look for + * @return Map of desired tag names to their values + */ + public static Map getSiblingValues(Node currentNode, Set siblingTags){ + Map responseMap = new HashMap(); + String testString = currentNode.getLocalName().toLowerCase(); + for (String tagName: siblingTags){ + if (testString.contains(tagName.toLowerCase())){ + responseMap.put(tagName, currentNode.getTextContent().trim()); + return responseMap; + } + } + + return responseMap; + } + + /** + * Get the first child with a certain tag name + * + * @param parent + * @param tagName + * @return child Node with the given tag name + * @throws Exception if no child with the given tag name is found + */ + public static Node getChildNode(Node parent, String tagName) throws Exception{ + NodeList children = parent.getChildNodes(); + + for (int i = 0 ; i < children.getLength(); i++){ + Node currentNode = children.item(i); + if (currentNode.getLocalName().equalsIgnoreCase(tagName)){ + return currentNode; + } + } + + throw new Exception("Child Node ['" + tagName + "'] not found." ); + + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/QuickDownload.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/QuickDownload.java new file mode 100644 index 0000000..d25f345 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/QuickDownload.java @@ -0,0 +1,15 @@ +package org.opengeoportal.utilities; + +import java.io.File; + +import org.opengeoportal.layer.BoundingBox; + +/** + * An interface to download a zipped shapefile + * + * @author cbarne02 + * + */ +public interface QuickDownload { + public File downloadZipFile(String layerId, BoundingBox bounds) throws Exception; +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/QuickWfsDownload.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/QuickWfsDownload.java similarity index 69% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/QuickWfsDownload.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/QuickWfsDownload.java index f6a312a..4dad4c8 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/QuickWfsDownload.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/QuickWfsDownload.java @@ -1,14 +1,10 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; -import org.OpenGeoPortal.Layer.BoundingBox; -import org.OpenGeoPortal.Metadata.LayerInfoRetriever; -import org.OpenGeoPortal.Solr.SolrRecord; -import org.OpenGeoPortal.Utilities.Http.OgpHttpClient; import org.apache.commons.io.FileUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; @@ -16,12 +12,24 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.util.EntityUtils; +import org.opengeoportal.layer.BoundingBox; +import org.opengeoportal.metadata.LayerInfoRetriever; +import org.opengeoportal.solr.SolrRecord; +import org.opengeoportal.utilities.LocationFieldUtils; +import org.opengeoportal.utilities.OgpFileUtils; +import org.opengeoportal.utilities.http.OgpHttpClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +/** + * A convenience class to download a zipped shapefile via WFS (endpoint must support outputFormat=shape-zip) + * + * @author cbarne02 + * + */ public class QuickWfsDownload implements QuickDownload { /*http://geoserver01.uit.tufts.edu:80/wfs?request=GetFeature&version=1.1.0&typeName=topp:states&BBOX=-75.102613,40.212597,-72.361859,41.512517,EPSG:4326 */ @@ -33,7 +41,16 @@ public class QuickWfsDownload implements QuickDownload { @Autowired @Qualifier("httpClient.pooling") OgpHttpClient ogpHttpClient; - + + /** + * Method retreives a zipped Shapefile via WFS and places it in the "download" directory + * + * @param layerId a String containing the OGP layer id for the desired layer + * @param bounds a BoundingBox with the desired selection bounds for the layer in EPSG:4326 + * @return a zip File containing the shape file + * @throws Exception if the remote server does not response with status code 200 or returns an XML response (assumed to be an error) + * @see org.OpenGeoPortal.Utilities.QuickDownload#downloadZipFile(java.lang.String, org.OpenGeoPortal.Layer.BoundingBox) + */ @Override public File downloadZipFile(String layerId, BoundingBox bounds) throws Exception{ @@ -56,10 +73,10 @@ public File downloadZipFile(String layerId, BoundingBox bounds) throws Exception requestString += "&typeName=" + workspace + ":" + layerName; requestString += "&srsName=EPSG:4326"; requestString += "&BBOX=" + requestBounds.toString() + ",EPSG:4326"; - HttpClient httpclient = ogpHttpClient.getHttpClient(); + HttpClient httpclient = ogpHttpClient.getCloseableHttpClient(); File outputFile = null; - String wfsLocation = ParseJSONSolrLocationField.getWfsUrl(layerInfo.getLocation()); + String wfsLocation = LocationFieldUtils.getWfsUrl(layerInfo.getLocation()); HttpGet httpget = new HttpGet(wfsLocation + "?" + requestString); logger.info("executing request " + httpget.getURI()); @@ -81,10 +98,19 @@ public File downloadZipFile(String layerId, BoundingBox bounds) throws Exception } File directory = directoryRetriever.getDirectory("download"); outputFile = new File(directory, OgpFileUtils.filterName(layerName) + ".zip"); - InputStream inputStream = entity.getContent(); - InputStream bufferedIn = new BufferedInputStream(inputStream); - FileUtils.copyInputStreamToFile(bufferedIn, outputFile); - bufferedIn.close(); + + InputStream inputStream = null; + BufferedInputStream bufferedIn = null; + try { + inputStream = entity.getContent(); + bufferedIn = new BufferedInputStream(inputStream); + FileUtils.copyInputStreamToFile(bufferedIn, outputFile); + } catch (Exception e){ + + } finally { + bufferedIn.close(); + inputStream.close(); + } } catch (ClientProtocolException e) { // TODO Auto-generated catch block diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/UrlShortener.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/UrlShortener.java new file mode 100644 index 0000000..d976518 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/UrlShortener.java @@ -0,0 +1,10 @@ +package org.opengeoportal.utilities; + +/** + * Interface for retrieving shortened Urls + * + * @author cbarne02 + */ +public interface UrlShortener { + public String retrieveShortLink(String longUrl) throws Exception; +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/UrlShortenerGoogle.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/UrlShortenerGoogle.java new file mode 100644 index 0000000..da49e3e --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/UrlShortenerGoogle.java @@ -0,0 +1,65 @@ +package org.opengeoportal.utilities; + +import java.util.ArrayList; +import java.util.List; + +import org.opengeoportal.config.PropertiesFile; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +/** + * A class that uses the Google Url Shortener API to get shortened links. + + * Implements the interface UrlShortener + * + * @author cbarne02 + * + */ + +public class UrlShortenerGoogle implements UrlShortener { + private String url = "https://www.googleapis.com/urlshortener/v1/url?key="; + PropertiesFile propertiesFile; + + public PropertiesFile getPropertiesFile() { + return propertiesFile; + } + + + public void setPropertiesFile(PropertiesFile propertiesFile) { + this.propertiesFile = propertiesFile; + } + + + /** + * Takes a url and returns a shortened version from the Google Url Shortener service + * + * @param longUrl a String containing the url to be shortened + * @return a String containing the shortened Url, if the call to Google was successful. + * @throws Exception + * @see org.OpenGeoPortal.Utilities.UrlShortener#retrieveShortLink(java.lang.String) + */ + public String retrieveShortLink(String longUrl) throws Exception{ + /* + * /*POST https://www.googleapis.com/urlshortener/v1/url + Content-Type: application/json + + {"longUrl": "http://www.google.com/"} + */ + String defaultVal = "NO_KEY"; + String apiKey = propertiesFile.getProperty("apikey.google", defaultVal); + if (apiKey.equals(defaultVal)){ + throw new Exception("API key required to use Google link shortening service."); + } + RestTemplate template = new RestTemplate(); + List> messageConverters = new ArrayList>(); + messageConverters.add(new MappingJackson2HttpMessageConverter()); + template.setMessageConverters(messageConverters); + //retrieve the google api key from a config file + //now we need to add the parameters + LinkShortenRequestGoogle postObject = new LinkShortenRequestGoogle(longUrl); + LinkShortenReturnGoogle result = template.postForObject(url + apiKey, postObject, LinkShortenReturnGoogle.class); + + return result.getId(); + } +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/ZipFilePackager.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/ZipFilePackager.java new file mode 100644 index 0000000..f554bbc --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/ZipFilePackager.java @@ -0,0 +1,259 @@ +package org.opengeoportal.utilities; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; +import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; +import org.apache.commons.compress.archivers.zip.ZipFile; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class contains utility methods for zipping and unzipping files + * + * @author Chris Barnett + */ +public class ZipFilePackager{ + /** + * Adds a set of files to a zip archive. + * @param Set filesToPackage + * @param File zipArchive + * + * @throws FileNotFoundException + */ + final static Logger logger = LoggerFactory.getLogger(ZipFilePackager.class.getName()); + + /** + * Zips up a File + * + * This method creates a zip archive in the File's current directory with the File's name appended with ".zip". + * Once the archive is created, the original file is deleted. + * + * @param fileToZip a File to zip + * @return the zipped File + * @throws IOException if there is a problem reading or writing a File + */ + public static File zipUpFile(File fileToZip) throws IOException { + String zipFileName = fileToZip.getName() + ".zip"; + File zipFile = new File(fileToZip.getParent(), zipFileName); + ZipArchiveEntry zipEntry = new ZipArchiveEntry(fileToZip.getName()); + + FileInputStream currentFileStream = null; + ZipArchiveOutputStream newZipStream = null; + + try { + newZipStream = new ZipArchiveOutputStream(zipFile); + //add this uncompressed file to the archive + newZipStream.putArchiveEntry(zipEntry); + + currentFileStream = new FileInputStream(fileToZip); + IOUtils.copy(currentFileStream, newZipStream); + } finally { + newZipStream.closeArchiveEntry(); + IOUtils.closeQuietly(newZipStream); + IOUtils.closeQuietly(currentFileStream); + try { + logger.info("Deleting: " + fileToZip.getName()); + fileToZip.delete(); + } catch (Exception e){ + logger.error("Unable to delete file. Check permissions."); + } + } + return zipFile; + } + + + /** + * Adds a Set of Files to an existing Zip Archive + * + * Adds a new ZipArchive entry for each of a Set of Files to a Zip Archive + * + * @param filesToPackage a Set of Files to add to a zip archive + * @param zipArchive the zip archive to add the passed Set of Files to + * @throws IOException + */ + public static void addFilesToArchive(Set filesToPackage, File zipArchive) throws IOException { + if (filesToPackage.isEmpty()){ + //if there are no files, don't do anything. + logger.error("No files to package."); + return; + } + if (filesToPackage.size() == 1){ + File returnFile = filesToPackage.iterator().next(); + if (returnFile.getName().toLowerCase().endsWith(".zip")){ + logger.debug("Only 1 zip file...no need to process"); + returnFile.renameTo(zipArchive); + return; + } + } + + ZipArchiveOutputStream newZipStream = null; + try{ + newZipStream = new ZipArchiveOutputStream(zipArchive); + + for (File currentFile : filesToPackage){ + FileInputStream currentFileStream = null; + try{ + + currentFileStream = new FileInputStream(currentFile); + if (!currentFile.getName().toLowerCase().endsWith(".zip")){ + + logger.debug("Adding uncompressed file..."); + //add this uncompressed file to the archive + //create a new archive entry with the file's name + String entryName = currentFile.getName(); + logger.debug("Zipping: " + entryName); + ZipArchiveEntry zipEntry = new ZipArchiveEntry(entryName); + + try{ + newZipStream.putArchiveEntry(zipEntry); + IOUtils.copy(currentFileStream, newZipStream); + } finally { + //always close the archive entry + newZipStream.closeArchiveEntry(); + //InputStreams are closed elsewhere + } + } else { + logger.debug("Adding entries from compressed file..."); + //read the entries from the zip file and copy them to the new zip archive + //so that we don't have to recompress them. + ZipArchiveInputStream currentZipStream = null; + try{ + ArchiveEntry currentEntry = null; + currentZipStream = new ZipArchiveInputStream(currentFileStream); + + while ((currentEntry = currentZipStream.getNextEntry()) != null) { + String entryName = currentEntry.getName(); + logger.debug("Zipping: " + entryName); + ZipArchiveEntry zipEntry = new ZipArchiveEntry(entryName); + try { + newZipStream.putArchiveEntry(zipEntry); + } catch (Exception e){ + //duplicate names should never happen. + entryName = Math.round(Math.random() * 10000) + "_" + entryName; + ZipArchiveEntry zipEntry2 = new ZipArchiveEntry(entryName); + newZipStream.putArchiveEntry(zipEntry2); + } + IOUtils.copy(currentZipStream, newZipStream); + + + } + } finally { + newZipStream.closeArchiveEntry(); + IOUtils.closeQuietly(currentZipStream); + } + } + } catch (FileNotFoundException e) { + String filename = currentFile.getName(); + logger.error("File not found ['" + filename + "']"); + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(currentFileStream); + //always delete the file + logger.debug("Deleting: " + currentFile.getName()); + currentFile.delete(); + + } + } + + + } finally { + IOUtils.closeQuietly(newZipStream); + } + + } + + /** + * Unzips a zipped archive into a Set of Files + * + * @param zipArchive archive File to unzip + * @return a Set of Files from the archive + * @throws Exception + */ + + public static Set unarchiveFiles(File zipArchive) throws Exception { + Set unarchivedFiles = new HashSet(); + try{ + if (!zipArchive.canRead()){ + if (!zipArchive.setReadable(true)){ + throw new IOException("File is not readable"); + } + } + String fileName = zipArchive.getName(); + File containerDir; + if (fileName.endsWith(".zip")){ + fileName = fileName.substring(0, fileName.lastIndexOf(".zip")); + containerDir = new File(zipArchive.getParentFile(), fileName); + containerDir.mkdir(); + } else { + throw new IOException("Not a zipfile!"); + } + ZipFile zipFile = new ZipFile(zipArchive); + Enumeration entries = zipFile.getEntriesInPhysicalOrder(); + + while (entries.hasMoreElements()) { + ZipArchiveEntry currentEntry = entries.nextElement(); + String entryName = currentEntry.getName(); + logger.debug("Current entry: " + entryName); + try { + logger.debug(zipArchive.getParent() + "/" + currentEntry.getName()); + File destFile = new File(containerDir, currentEntry.getName()); + if (currentEntry.isDirectory()){ + destFile.mkdir(); + logger.debug("created directory: " + destFile.getAbsolutePath()); + // create the parent directory structure if needed + } else { + File parentDir = destFile.getParentFile(); + if (!parentDir.exists()){ + parentDir.mkdir(); + } + destFile.createNewFile(); + logger.debug("created file: " + destFile.getAbsolutePath()); + InputStream zipStream = null; + FileOutputStream fos = null; + try{ + zipStream = zipFile.getInputStream(currentEntry); + fos = new FileOutputStream(destFile); + IOUtils.copy(zipStream, fos); + } finally { + IOUtils.closeQuietly(zipStream); + IOUtils.closeQuietly(fos); + + } + unarchivedFiles.add(destFile); + logger.info("Unzipped file : " + destFile.getName()); + } + } catch (Exception e){ + e.printStackTrace(); + logger.error("zip exception:" + e.getMessage()); + break; + } + } + + zipFile.close(); + + } catch (FileNotFoundException e) { + logger.error("file not found exception"); + //e.printStackTrace(); + } catch (IOException e) { + logger.error("IO exception"); + //e.printStackTrace(); + } + return unarchivedFiles; + } + +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingCertPoolingHttpClient.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingCertPoolingHttpClient.java new file mode 100644 index 0000000..a40bb46 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingCertPoolingHttpClient.java @@ -0,0 +1,81 @@ +package org.opengeoportal.utilities.http; + +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; + +import javax.net.ssl.SSLContext; + +import org.apache.http.client.HttpClient; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; + +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContexts; + +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.opengeoportal.utilities.http.AllTrustingTrustStrategy; +import org.opengeoportal.utilities.http.OgpHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AllTrustingCertPoolingHttpClient implements OgpHttpClient { + //Not sure if this does what it's supposed to..however it's not currently being used + final Logger logger = LoggerFactory.getLogger(this.getClass()); + private PoolingHttpClientConnectionManager connectionManager; + private CloseableHttpClient client; + private boolean initCalled = false; + + private void init() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + //since the php script we are accessing is https, (self-signed cert) but doesn't require certs, we need to create a context that essentially + //ignores certs + + ConnectionSocketFactory plainsf = PlainConnectionSocketFactory.getSocketFactory(); + KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); + + SSLContext sc = SSLContexts.custom() + .useTLS() + .loadTrustMaterial(trustStore, new AllTrustingTrustStrategy()) + .setSecureRandom(new java.security.SecureRandom()) + .build(); + + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sc); + Registry r = RegistryBuilder.create() + .register("http", plainsf) + .register("https", sslsf) + .build(); + + connectionManager = new PoolingHttpClientConnectionManager(r); + + client = HttpClients.custom() + .setConnectionManager(connectionManager) + .build(); + initCalled = true; + } + + + @Override + public CloseableHttpClient getCloseableHttpClient() { + if (!initCalled){ + try { + init(); + } catch (KeyManagementException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (KeyStoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return client; + } + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/AllTrustingTrustManager.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingTrustManager.java similarity index 92% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/AllTrustingTrustManager.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingTrustManager.java index d7a3e12..5f1c333 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/AllTrustingTrustManager.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingTrustManager.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities.Http; +package org.opengeoportal.utilities.http; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingTrustStrategy.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingTrustStrategy.java new file mode 100644 index 0000000..2301d9b --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/AllTrustingTrustStrategy.java @@ -0,0 +1,17 @@ +package org.opengeoportal.utilities.http; + +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import org.apache.http.conn.ssl.TrustStrategy; + +public class AllTrustingTrustStrategy implements TrustStrategy { + + @Override + public boolean isTrusted(X509Certificate[] arg0, String arg1) + throws CertificateException { + // accept all certs + return true; + } + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/FilterServletOutputStream.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/FilterServletOutputStream.java similarity index 93% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/FilterServletOutputStream.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/http/FilterServletOutputStream.java index d4a9d2e..c0c0a99 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/FilterServletOutputStream.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/FilterServletOutputStream.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities.http; import java.io.DataOutputStream; import java.io.IOException; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/HttpComponentsHttpRequester.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/HttpComponentsHttpRequester.java similarity index 50% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/HttpComponentsHttpRequester.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/http/HttpComponentsHttpRequester.java index b4806eb..dafd08a 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/HttpComponentsHttpRequester.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/HttpComponentsHttpRequester.java @@ -1,16 +1,30 @@ -package org.OpenGeoPortal.Utilities.Http; +package org.opengeoportal.utilities.http; import java.io.IOException; import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import org.apache.http.Header; import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.AuthCache; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.protocol.ClientContext; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; +import org.apache.http.impl.auth.BasicScheme; +import org.apache.http.impl.client.BasicAuthCache; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.protocol.BasicHttpContext; +import org.opengeoportal.utilities.OgpUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +32,8 @@ public class HttpComponentsHttpRequester implements HttpRequester { final Logger logger = LoggerFactory.getLogger(this.getClass()); protected String contentType; private OgpHttpClient ogpHttpClient; + private int status; + protected Header[] headers; public OgpHttpClient getOgpHttpClient() { return ogpHttpClient; @@ -31,31 +47,67 @@ public void setContentType(String contentType) { this.contentType = contentType; } - public InputStream sendGetRequest(String url){ - HttpClient httpclient = ogpHttpClient.getHttpClient(); + public Header[] getHeaders(){ + return headers; + } + + public void setStatus(int status){ + this.status = status; + } + + @Override + public int getStatus(){ + return status; + } + + @Override + public String getHeaderValue(String headerName) throws Exception{ + for (Header header: getHeaders()){ + if(header.getName().equalsIgnoreCase(headerName)){ + return header.getValue(); + } + } + throw new Exception("Header ['" + headerName + "'] not found."); + } + + private Boolean checkUrl(String url) { + try{ + new URL(url); + return true; + } catch (Exception e){ + logger.error("URL is somehow invalid: " + url); + return false; + } + } + + public InputStream sendGetRequest(String url) throws MalformedURLException, IOException{ + logger.debug("about to send url: " + url); + HttpClient httpclient = ogpHttpClient.getCloseableHttpClient(); InputStream replyStream = null; + HttpResponse response = null; try { HttpGet httpget = new HttpGet(url); - logger.debug("executing get request " + httpget.getURI()); - HttpResponse response = httpclient.execute(httpget); + logger.info("executing get request " + httpget.getURI()); + + response = httpclient.execute(httpget); + this.setStatus(response.getStatusLine().getStatusCode()); + this.setHeaders(response.getAllHeaders()); HttpEntity entity = response.getEntity(); this.setContentType(entity.getContentType().getValue()); + if (entity != null) { - replyStream = entity.getContent(); + replyStream = entity.getContent(); } } catch (ClientProtocolException e) { - // TODO Auto-generated catch block + e.printStackTrace(); } catch (IOException e) { - // TODO Auto-generated catch block + e.printStackTrace(); - } finally { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - //httpclient.getConnectionManager().shutdown(); - } + } + //make sure you close the input stream at the other end + return replyStream; } @@ -66,20 +118,29 @@ public InputStream sendRequest(String serviceURL, String requestString, } protected InputStream sendPostRequest(String serviceURL, - String requestBody, String contentType) { - HttpClient httpclient = ogpHttpClient.getHttpClient(); + String requestBody, String contentType) throws IOException{ + HttpClient httpclient = ogpHttpClient.getCloseableHttpClient(); InputStream replyStream = null; - try { + try{ HttpPost httppost = new HttpPost(serviceURL); logger.info(requestBody); StringEntity postEntity = new StringEntity(requestBody, ContentType.create(contentType, "UTF-8")); httppost.setEntity(postEntity); logger.info("executing POST request to " + httppost.getURI()); HttpResponse response = httpclient.execute(httppost); + + StatusLine status = response.getStatusLine(); + int statusCode = status.getStatusCode(); + this.setStatus(statusCode); + if (status.getStatusCode() != 200){ + logger.error("Server responded with: " + Integer.toString(statusCode) + status.getReasonPhrase()); + } + this.setHeaders(response.getAllHeaders()); HttpEntity entity = response.getEntity(); + this.setContentType(entity.getContentType().getValue()); if (entity != null) { - replyStream = entity.getContent(); + replyStream = entity.getContent(); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block @@ -87,15 +148,15 @@ protected InputStream sendPostRequest(String serviceURL, } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); - } finally { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - //httpclient.getConnectionManager().shutdown(); - } + } + //make sure you close the input stream at the other end return replyStream; } + private void setHeaders(Header[] allHeaders) { + headers = allHeaders; + } + @Override public InputStream sendRequest(String serviceURL, String requestString, String requestMethod, String contentType) throws IOException { @@ -103,15 +164,26 @@ public InputStream sendRequest(String serviceURL, String requestString, logger.debug("Query string: " + requestString); logger.debug("Request Method: " + requestMethod); if ((serviceURL.isEmpty())||(serviceURL.equals(null))){ + logger.error("No service URL!"); throw new IOException("No URL provided!"); } + + if (!checkUrl(serviceURL)){ + logger.error("Malformed URL: " + serviceURL); + throw new MalformedURLException(); + } if (requestMethod.equals("POST")){ return sendPostRequest(serviceURL, requestString, contentType); } else if (requestMethod.equals("GET")){ - return sendGetRequest(serviceURL + "?" + requestString); + String url = ""; + try { + url = OgpUtils.combinePathWithQuery(serviceURL, requestString); + } catch (Exception e){ + throw new IOException("Problem forming URL: " + e.getMessage()); + } + return sendGetRequest(url); } else { - //throw new Exception("The method " + requestMethod + " is not supported."); - return null; + throw new IOException("The method " + requestMethod + " is not supported."); } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/HttpRequester.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/HttpRequester.java similarity index 75% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/HttpRequester.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/http/HttpRequester.java index c931f2a..dec33fb 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/HttpRequester.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/HttpRequester.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities.Http; +package org.opengeoportal.utilities.http; import java.io.IOException; import java.io.InputStream; @@ -9,4 +9,6 @@ InputStream sendRequest(String serviceURL, String requestString, InputStream sendRequest(String serviceURL, String requestString, String requestMethod, String contentType) throws IOException; String getContentType(); + String getHeaderValue(String headerName) throws Exception; + int getStatus(); } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/JsonpCallbackFilter.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/JsonpCallbackFilter.java similarity index 81% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/JsonpCallbackFilter.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/http/JsonpCallbackFilter.java index 9bc0a61..6002649 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/JsonpCallbackFilter.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/JsonpCallbackFilter.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities; +package org.opengeoportal.utilities.http; import java.io.IOException; @@ -15,16 +15,26 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.opengeoportal.utilities.GenericResponseWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * a filter that wraps jsonp responses with callback specified in the parameters + * + * + * @author cbarne02 + * + */ public class JsonpCallbackFilter implements Filter { final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Override public void init(FilterConfig fConfig) throws ServletException {} + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; @@ -32,8 +42,8 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha @SuppressWarnings("unchecked") Map parms = httpRequest.getParameterMap(); if(parms.containsKey("callback")) { - if(logger.isDebugEnabled()) - logger.debug("Wrapping response with JSONP callback '" + parms.get("callback")[0] + "'"); + + logger.debug("Wrapping response with JSONP callback '" + parms.get("callback")[0] + "'"); OutputStream out = httpResponse.getOutputStream(); @@ -53,6 +63,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha } } + @Override public void destroy() {} } diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/http/OgpHttpClient.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/OgpHttpClient.java new file mode 100644 index 0000000..cb88025 --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/OgpHttpClient.java @@ -0,0 +1,9 @@ +package org.opengeoportal.utilities.http; + +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.CloseableHttpClient; + +public interface OgpHttpClient { + //HttpClient getHttpClient(); + CloseableHttpClient getCloseableHttpClient(); +} diff --git a/geoportal_1/src/main/java/org/opengeoportal/utilities/http/PoolingHttpClient.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/PoolingHttpClient.java new file mode 100644 index 0000000..d70b40c --- /dev/null +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/PoolingHttpClient.java @@ -0,0 +1,254 @@ +package org.opengeoportal.utilities.http; + +import java.net.MalformedURLException; +import java.net.URL; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.util.List; + +import javax.annotation.PreDestroy; +import javax.net.ssl.SSLContext; + +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContexts; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.opengeoportal.config.proxy.InternalServerMapping; +import org.opengeoportal.config.proxy.ProxyConfig; +import org.opengeoportal.config.proxy.ProxyConfigRetriever; +import org.opengeoportal.config.proxy.ServerMapping; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +public class PoolingHttpClient implements OgpHttpClient { + final Logger logger = LoggerFactory.getLogger(this.getClass()); + private PoolingHttpClientConnectionManager connectionManager; + private CloseableHttpClient client; + private Boolean initCalled = false; + int maxConnections; + int maxConnectionsRt; + + @Autowired + private ProxyConfigRetriever proxyConfigRetriever; + + public int getMaxConnections() { + return maxConnections; + } + + public void setMaxConnections(int maxConnections) { + this.maxConnections = maxConnections; + } + + public int getMaxConnectionsRt() { + return maxConnectionsRt; + } + + public void setMaxConnectionsRt(int maxConnectionsRt) { + this.maxConnectionsRt = maxConnectionsRt; + } + + private void init(){ + + ConnectionSocketFactory plainsf = PlainConnectionSocketFactory.getSocketFactory(); + + SSLContext sc = null; + try { + sc = SSLContexts.custom() + .useTLS() + .setSecureRandom(new java.security.SecureRandom()) + .build(); + } catch (KeyManagementException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sc); + Registry r = RegistryBuilder.create() + .register("http", plainsf) + .register("https", sslsf) + .build(); + + connectionManager = new PoolingHttpClientConnectionManager(r); + // Increase max total connection + connectionManager.setMaxTotal(maxConnections); + // Increase default max connection per route + connectionManager.setDefaultMaxPerRoute(maxConnectionsRt); + + + /* + * + * + * + * MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); +HttpConnectionManagerParams params = connectionManager.getParams(); + +params.setConnectionTimeout(connectiontimeout); //set connection timeout (how long it takes to connect to remote host) +params.setSoTimeout(sotimeout); //set socket timeout (how long it takes to retrieve data from remote host) + +HttpMethodBase baseMethod = null; + +try { + HttpClient httpClient = new HttpClient(connectionManager); + httpClient.getParams().setParameter("http.connection-manager.timeout", poolTimeout); //set timeout on how long we’ll wait for a connection from the pool + + baseMethod = new GetMethod(…); + int statusCode = httpClient.executeMethod(…); + + … +} +catch (ConnectTimeoutException cte ){ + //Took too long to connect to remote host +} +catch (SocketTimeoutException ste){ + //Remote host didn’t respond in time +} +catch (Exception se){ + //Some other error occurred +} +finally { + if (baseMethod != null) + baseMethod.releaseConnection(); +} + +CoreConnectionPNames.TCP_NODELAY='http.tcp.nodelay': determines whether Nagle's algorithm is to be used. Nagle's algorithm tries to conserve bandwidth by minimizing the number of segments that are sent. When applications wish to decrease network latency and increase performance, they can disable Nagle's algorithm (that is enable TCP_NODELAY. Data will be sent earlier, at the cost of an increase in bandwidth consumption. This parameter expects a value of type java.lang.Boolean. If this parameter is not set, TCP_NODELAY will be enabled (no delay). + +CoreConnectionPNames.SOCKET_BUFFER_SIZE='http.socket.buffer-size': determines the size of the internal socket buffer used to buffer data while receiving / transmitting HTTP messages. This parameter expects a value of type java.lang.Integer. If this parameter is not set, HttpClient will allocate 8192 byte socket buffers. + +HttpClientContext context = HttpClientContext.create(); +HttpClientConnectionManager connMrg = new BasicHttpClientConnectionManager(); + +HttpRoute route = new HttpRoute(new HttpHost("localhost", 80)); +// Request new connection. This can be a long process +ConnectionRequest connRequest = connMrg.requestConnection(route, null); +// Wait for connection up to 10 sec +HttpClientConnection conn = connRequest.get(10, TimeUnit.SECONDS); +try { + // If not open + if (!conn.isOpen()) { + // establish connection based on its route info + connMrg.connect(conn, route, 1000, context); + // and mark it as route complete + connMrg.routeComplete(conn, route, context); + } + // Do useful things with the connection. +} finally { + connMrg.releaseConnection(conn, null, 1, TimeUnit.MINUTES); +} + +package org.apache.http.examples.client; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; +import org.apache.http.HttpResponse; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.AuthCache; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.protocol.ClientContext; +import org.apache.http.impl.auth.BasicScheme; +import org.apache.http.impl.client.BasicAuthCache; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.protocol.BasicHttpContext; +import org.apache.http.util.EntityUtils; + +/** + * An example of HttpClient can be customized to authenticate + * preemptively using BASIC scheme. + * + * Generally, preemptive authentication can be considered less + * secure than a response to an authentication challenge + * and therefore discouraged. + */ + + // Increase max total connection to 200 + //cm.setMaxTotal(200); + // Increase default max connection per route to 20 + //cm.setDefaultMaxPerRoute(20); + // Increase max connections for localhost:80 to 50 + //HttpHost localhost = new HttpHost("locahost", 80); + //cm.setMaxPerRoute(new HttpRoute(localhost), 50); + + client = HttpClients.custom() + .setConnectionManager(connectionManager) + .setDefaultCredentialsProvider(getCredentialsProvider()) + .build(); + + + initCalled = true; + //client.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8"); + //client.getParams().setParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 16384); + //client.getParams().setParameter("http.connection-manager.timeout", 10); + } + + private CredentialsProvider getCredentialsProvider(){ + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + + List proxyList = proxyConfigRetriever.getConfig(); + //get info from properties + for (ProxyConfig config: proxyList){ + List serverList = config.getServerMapping(); + for (ServerMapping server: serverList){ + InternalServerMapping intServer = (InternalServerMapping) server; + String username = intServer.getUsername(); + String password = intServer.getPassword(); + try { + URL url = new URL(intServer.getInternalUrl()); + String domain = url.getHost(); + int port = url.getPort(); + if (port == -1){ + String protocol = url.getProtocol(); + if (protocol == "http"){ + port = 80; + } else if (protocol == "https"){ + port = 443; + } + } + logger.info("credential info"); + logger.info(username); + logger.info(password); + logger.info(domain); + logger.info(Integer.toString(port)); + + credsProvider.setCredentials( + new AuthScope(domain, port), + new UsernamePasswordCredentials(username, password)); + } catch (MalformedURLException e) { + logger.error(e.getLocalizedMessage()); + } + + + } + } + + return credsProvider; + } + + @Override + public CloseableHttpClient getCloseableHttpClient() { + if (!initCalled){ + init(); + } + return client; + } + + @PreDestroy + public void cleanUp() throws Exception { + if (initCalled){ + connectionManager.shutdown(); + } + } + +} diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/AllTrustingCertPoolingHttpClient.java b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/PreemptiveBasicAuthPoolingHttpClient.java similarity index 86% rename from geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/AllTrustingCertPoolingHttpClient.java rename to geoportal_1/src/main/java/org/opengeoportal/utilities/http/PreemptiveBasicAuthPoolingHttpClient.java index 04c8b95..6d51631 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Utilities/Http/AllTrustingCertPoolingHttpClient.java +++ b/geoportal_1/src/main/java/org/opengeoportal/utilities/http/PreemptiveBasicAuthPoolingHttpClient.java @@ -1,4 +1,4 @@ -package org.OpenGeoPortal.Utilities.Http; +package org.opengeoportal.utilities.http; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; @@ -12,17 +12,18 @@ import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.scheme.SchemeSocketFactory; import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class AllTrustingCertPoolingHttpClient implements OgpHttpClient { +public class PreemptiveBasicAuthPoolingHttpClient implements OgpHttpClient { final Logger logger = LoggerFactory.getLogger(this.getClass()); private PoolingClientConnectionManager connectionManager; - private HttpClient client; + private CloseableHttpClient client; - AllTrustingCertPoolingHttpClient(){ + PreemptiveBasicAuthPoolingHttpClient(){ //since the php script we are accessing is https, but doesn't require certs, we need to create a context that essentially //ignores certs TrustManager[] trustAllCerts = new TrustManager[] { new AllTrustingTrustManager() }; @@ -57,8 +58,10 @@ public class AllTrustingCertPoolingHttpClient implements OgpHttpClient { client = new DefaultHttpClient(connectionManager); } + @Override - public HttpClient getHttpClient() { + public CloseableHttpClient getCloseableHttpClient() { + // TODO Auto-generated method stub return client; } diff --git a/geoportal_1/src/main/resources/log4j.properties b/geoportal_1/src/main/resources/log4j.properties index 970afcb..d94def0 100644 --- a/geoportal_1/src/main/resources/log4j.properties +++ b/geoportal_1/src/main/resources/log4j.properties @@ -45,14 +45,3 @@ log4j.appender.R.DatePattern = '.'yyy-MM-dd log4j.appender.R.layout = org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n -#------------------------------------------------------------------------------ -# -# The following properties configure the Rolling File appender in HTML. -# See http://logging.apache.org/log4j/docs/api/index.html for details. -# -#------------------------------------------------------------------------------ -log4j.appender.H = org.apache.log4j.RollingFileAppender -log4j.appender.H.File = logs/bensApps.html -log4j.appender.H.MaxFileSize = 100KB -log4j.appender.H.Append = false -log4j.appender.H.layout = org.apache.log4j.HTMLLayout \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/.gitignore b/geoportal_1/src/main/webapp/WEB-INF/.gitignore index 9c0b44d..3f2a29a 100644 --- a/geoportal_1/src/main/webapp/WEB-INF/.gitignore +++ b/geoportal_1/src/main/webapp/WEB-INF/.gitignore @@ -1,2 +1 @@ -/views /tufts-security-app-context.xml diff --git a/geoportal_1/src/main/webapp/WEB-INF/appServlet-servlet.xml b/geoportal_1/src/main/webapp/WEB-INF/appServlet-servlet.xml index eda2858..a4d87af 100644 --- a/geoportal_1/src/main/webapp/WEB-INF/appServlet-servlet.xml +++ b/geoportal_1/src/main/webapp/WEB-INF/appServlet-servlet.xml @@ -1,30 +1,36 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/applicationContext.xml b/geoportal_1/src/main/webapp/WEB-INF/applicationContext.xml index 7559956..d26f857 100644 --- a/geoportal_1/src/main/webapp/WEB-INF/applicationContext.xml +++ b/geoportal_1/src/main/webapp/WEB-INF/applicationContext.xml @@ -1,184 +1,310 @@ + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm.xsd"> + + - + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + - - - + + + + + + + + + + + + + + + class="org.opengeoportal.download.RequestStatusManagerImpl" /> + class="org.opengeoportal.utilities.CleanupDirectoryImpl" > + + + - + class="org.opengeoportal.utilities.UrlShortenerGoogle" scope="prototype"> + - - - + class="org.opengeoportal.metadata.SolrLayerInfoRetriever" /> - + + + + + class="org.opengeoportal.download.config.OgpDownloadConfigRetriever"> - - - + - - + + + + + - + - - - + + + + + - - - - + + + + + + + + + + + + + class="org.opengeoportal.download.methods.WmsDownloadMethod" scope="prototype"> + class="org.opengeoportal.download.methods.WfsDownloadMethod" scope="prototype"> - + class="org.opengeoportal.download.methods.KmlDownloadMethod" scope="prototype"> + class="org.opengeoportal.download.methods.WcsDownloadMethod" scope="prototype"> - - - + + + + + + + + class="org.opengeoportal.download.PerLayerDownloader" scope="prototype"> + class="org.opengeoportal.download.PerLayerDownloader" scope="prototype"> + class="org.opengeoportal.download.PerLayerDownloader" scope="prototype"> + class="org.opengeoportal.download.PerLayerDownloader" scope="prototype"> + class="org.opengeoportal.download.PerLayerDownloader" scope="prototype"> + class="org.opengeoportal.download.PerLayerDownloader" scope="prototype"> + class="org.opengeoportal.download.PerLayerDownloader" scope="prototype"> - - - + + + + + + class="org.opengeoportal.download.EmailLayerDownloader" scope="prototype"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + fixed-rate="${cleanupInterval}" /> + diff --git a/geoportal_1/src/main/webapp/WEB-INF/ogp.properties b/geoportal_1/src/main/webapp/WEB-INF/ogp.properties index 7403774..ac26b80 100644 --- a/geoportal_1/src/main/webapp/WEB-INF/ogp.properties +++ b/geoportal_1/src/main/webapp/WEB-INF/ogp.properties @@ -1,4 +1,97 @@ -ogp.proxyToWMS=http://127.0.0.1:8580/wms -ogp.proxyToWFS=http://127.0.0.1:8580/wfs -ogp.proxyToWCS=http://127.0.0.1:8580/wcs -admins=admin \ No newline at end of file +# The domain of your ogp site. This value is used for CORS and other +# security measures +#localhost is just a placeholder; you need to put in the actual domain +ogp.domain=http://localhost:8080 + +# if you have css and js files to localize your ogp site, you can reference +# them here +#example: +#ogp.cssLocalized=resources/css/localizeTufts.css +ogp.cssLocalized= +ogp.jsLocalized= + +# default is OpenGeoportal +#primary is the main text color (default black) and offset will have the css class offsetColor +ogp.pageTitle.primary= +ogp.pageTitle.offset= + +# comma separated list of repository ids (see repositories.properties) +# that will appear in the repositories drop down +# and will be queried by solr +# you can specify "all" for defaultSelected or particular repository ids +ogp.repositories=tufts,harvard,berkeley,mit,massgis +ogp.repositories.defaultSelected=all + +# to use google analytics and link shortener and geocoder, you need +# your own api keys +apikey.analytics= +apikey.google= + + +# the url given to the web browser so that it can query solr directly +# if .internal is blank the external value will be used internally as well +# By default, this value will point to the Tufts production solr instance +# .external needs to be a web accessible url +# note: currently ogp will use only /select and /terms +solr.url.internal= +solr.url.external=http://geodata.tufts.edu/solr +#solr.url.external=http://localhost:8080/solr + + +# if you are using ogp to proxy download and preview of layers, set it +# up here. (form is: proxy.${repository id}.*) +proxy.tufts.accessLevel=restricted + +#specifying "geoserver" expands to wms, wfs, and wcs endpoint mappings +#this is just a placeholder.. input the ip address of the map server to proxy +#in the example case: +#Ex: +# proxy.tufts.geoserver.internal=http://127.0.0.1:8580 +# proxy.tufts.geoserver.external=restricted +# +# the path /restricted/wms maps to http://127.0.0.1:8580/wms , etc. + +proxy.tufts.geoserver.internal=http://localhost:8080/geoserver +proxy.tufts.geoserver.external=restricted +proxy.tufts.geoserver.username=chris +proxy.tufts.geoserver.password=chupacabra + +# this should eventually go in an auth module, I think. +login.repository=tufts +#'form' or 'iframe' +login.type=form +#'login' for local form (ldap or default username and password) +#'weblogin' for noop iframe login (external web form auth with no deep Spring Security integration) +#'restricted/weblogin' for iframe login (external web form auth with deep Spring Security integration [CAS, potentially Shib]) +login.url=login +login.secureDomain=https://localhost:8443 +#if you're using the nop iframe login, you'll need to uncomment these values and insert appropriate values (you can just use the ones in +#the default authenticationManager (see security-app-context.xml) +#login.nop.user= +#login.nop.password= + +# every ${cleanupInterval} milliseconds, files older than ${maxFileAge} minutes are +# deleted from the download folder java.temp/${ogp.downloadDir} +ogp.downloadDir=ogpdownload + +styleSheet.fgdc=WEB-INF/xml/FGDC_V2_a.xsl +styleSheet.iso19139=WEB-INF/xml/isoBasic.xsl + +cleanupInterval=30000 +maxFileAge=240 + +# maximum memory for the initial ImageBuffer in the ImageCompositor in MB's +# this will be an uncompressed array of ints representing pixels. To composite, +# the compositor will need about twice this amount of heap space. +# 20 MB roughly equates to an image of 2289 pixels sq. +maxImageSize=20 + +threadPool.executor=5-10 +threadPool.scheduler=1 + +connectionPool.maxTotal=100 +connectionPool.maxPerRoute=10 + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/repositories.properties b/geoportal_1/src/main/webapp/WEB-INF/repositories.properties new file mode 100644 index 0000000..dd30fb7 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/repositories.properties @@ -0,0 +1,36 @@ +# Configuration for repositories. Which of these repositories +# are searched and appear in the interface is specified in +# ogp.properties + +tufts.shortName=Tufts +tufts.fullName=Tufts University +tufts.sourceIconClass=tuftsIcon + +harvard.shortName=Harvard +harvard.fullName=Harvard Geospatial Library +harvard.sourceIconClass=harvardIcon + +berkeley.shortName=Berkeley +berkeley.fullName=UC Berkeley +berkeley.sourceIconClass=berkeleyIcon + +mit.shortName=MIT +mit.fullName=Massachusetts Institute of Technology +mit.sourceIconClass=mitIcon + +maryland.shortName=Maryland +maryland.fullName=University of Maryland (CARPE) +maryland.sourceIconClass=marylandIcon + +un.shortName=UN +un.fullName=United Nations +un.sourceIconClass=unIcon + +unwfp.shortName=UNWFP +unwfp.fullName=UN World Food Program +unwfp.sourceIconClass=unIcon + +massgis.shortName=MassGIS +massgis.fullName=MassGIS +massgis.sourceIconClass=massgisIcon + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/sample-cas-security-app-context.xml b/geoportal_1/src/main/webapp/WEB-INF/sample-cas-security-app-context.xml new file mode 100644 index 0000000..5f4ad5b --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/sample-cas-security-app-context.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/schema/collection.xsd b/geoportal_1/src/main/webapp/WEB-INF/schema/collection.xsd new file mode 100644 index 0000000..021621d --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/schema/collection.xsd @@ -0,0 +1,48 @@ + + + + + collection.xsd + + This XML Schema defines the encoding of a Web Map Context Collection + Document. Primary editor: Tom Kralidis + + WMC is an OGC Standard. + Copyright (c) 2005,2010 Open Geospatial Consortium. + To obtain additional rights of use, visit + http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/schema/context.xsd b/geoportal_1/src/main/webapp/WEB-INF/schema/context.xsd new file mode 100644 index 0000000..7e0f193 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/schema/context.xsd @@ -0,0 +1,238 @@ + + + + + context.xsd + + This XML Schema defines the encoding of a Web Map Context Document. + Primary editor: Tom Kralidis + + WMC is an OGC Standard. + Copyright (c) 2005,2010 Open Geospatial Consortium. + To obtain additional rights of use, visit + http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This allows additional elements to be added to + support non WMS Layer services. + + + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/schema/ort.xsd b/geoportal_1/src/main/webapp/WEB-INF/schema/ort.xsd new file mode 100644 index 0000000..46198e6 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/schema/ort.xsd @@ -0,0 +1,27 @@ + + + + + + Web Map Context version 1.1 + + WMC is an OGC Standard. + Copyright (c) 2005,2010 Open Geospatial Consortium. + To obtain additional rights of use, visit + http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/schema/wmcAll.xsd b/geoportal_1/src/main/webapp/WEB-INF/schema/wmcAll.xsd new file mode 100644 index 0000000..83658fc --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/schema/wmcAll.xsd @@ -0,0 +1,25 @@ + + + + + + Web Map Context version 1.1 + + This 'all-components' schema document has been constructed to satisfy the + 'Publication Rules for OGC Schemas' described in the Policy + Directives. + Simon Cox 2010-11-15 + + WMC is an OGC Standard. + Copyright (c) 2005,2010 Open Geospatial Consortium. + To obtain additional rights of use, visit + http://www.opengeospatial.org/legal/ . + + + + + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/security-app-context.xml b/geoportal_1/src/main/webapp/WEB-INF/security-app-context.xml index 5829ef2..d2d2033 100644 --- a/geoportal_1/src/main/webapp/WEB-INF/security-app-context.xml +++ b/geoportal_1/src/main/webapp/WEB-INF/security-app-context.xml @@ -2,35 +2,43 @@ xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security - http://www.springframework.org/schema/security/spring-security-3.1.xsd"> - - + http://www.springframework.org/schema/security/spring-security.xsd"> - - - - - + + + + + + + + + - - - - + + + + + + + + + + + + + + + - - + + - \ No newline at end of file + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/iframeLogin.jsp b/geoportal_1/src/main/webapp/WEB-INF/views/iframeLogin.jsp new file mode 100644 index 0000000..b81c6d2 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/iframeLogin.jsp @@ -0,0 +1,26 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/about.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/about.jspf new file mode 100644 index 0000000..8331fe5 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/about.jspf @@ -0,0 +1,25 @@ +

+

GeoData@Tufts is developed and maintained by Tufts University + Information Technology. Tufts is leading the development in + collaboration with Harvard of this open source, federated web + application to rapidly discover, preview, and retrieve geospatial data + from multiple repositories. GeoData@Tufts combines an intuitive, + map-based search interface along with traditional text-based metadata + search tools for rapid data discovery and for use in teaching, + learning, and research.

+

+ GeoData@Tufts is part of The + Open Geoportal. The Open Geoportal is a consortium comprised of + contributions of several universities and organizations to help + facilitate the discovery and acquisition of geospatial data across + many organizations and platforms. Current partners include: Harvard, + MIT, MassGIS, Princeton, Columbia, Stanford, UC Berkeley, UCLA, Yale, + and UConn. Built on open source technology, The Open Geoportal + provides organizations the opportunity to share thousands of + geospatial data layers, maps, metadata, and development resources + through a single common interface. +

+

+ <%@include file="mailto.jspf"%> +

+
\ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/contact.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/contact.jspf new file mode 100644 index 0000000..c665bef --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/contact.jspf @@ -0,0 +1,18 @@ +
+

+ <%@include file="mailto.jspf"%> +

+ +
+

Project Management:

+ Patrick Florance, Manager of Geospatial Technology Services, UIT, + Tufts University +
+ +
+ + +
+
diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/devincludes.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/devincludes.jspf new file mode 100644 index 0000000..25c3ae8 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/devincludes.jspf @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/footer.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/footer.jspf new file mode 100644 index 0000000..0e078b9 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/footer.jspf @@ -0,0 +1,17 @@ + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/gettingStartedTab.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/gettingStartedTab.jspf new file mode 100644 index 0000000..e2f4a1a --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/gettingStartedTab.jspf @@ -0,0 +1,53 @@ +
+

<%@include file="institutionWelcome.jspf"%>

+

Search, discover, preview, and retrieve geospatial data from + multiple repositories

+ +

Search

+

There are two ways to search for data. The two methods can be + used individually or combined for more effective search

+
    +
  • Use basic or advanced search +
  • +
  • Interact with the map to search for data by relevant + geographic extent
  • +
+

Interacting with the map

+
    +
  • Interacting with the map will perform a search for relevant + data
  • +
  • Enter a place in the Find + Place field to zoom to a location +
  • +
  • Click the Zoom or Pan tool and drag the map with the + mouse +
  • +
  • Double-click to zoom in on an area
  • +
  • Hold down shift and click-drag a box to zoom to an area
  • +
  • Click on Basemap to + set the background layer to OpenStreetMap, Google Maps, etc. +
  • +
+

Preview

+
    +
  • Click the Preview + checkbox to preview the layer on the map from your search results or + from your Cart +
  • +
  • Expand the layer dropdown to access the preview controls
  • +
  • Click the attribute preview tool and click on a feature on the + map to view its attributes +
  • +
+

Download

+
    +
  • Click the Cart + checkbox to add the selected layer to your Cart for download, + additional preview, or to create web mapping services +
  • +
+
+ diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/header.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/header.jspf new file mode 100644 index 0000000..9c285f3 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/header.jspf @@ -0,0 +1,15 @@ + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/highlights.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/highlights.jspf new file mode 100644 index 0000000..2177431 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/highlights.jspf @@ -0,0 +1,6 @@ +
+

Welcome to GeoData@Tufts! We are happy to announce that as of + 11/4/2011 we are live. We will be making updates regularly.

+

Please zoom in and pan around with the map and/or enter search + terms to begin discovering our geospatial data holdings.

+
\ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/includes.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/includes.jspf new file mode 100644 index 0000000..019153e --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/includes.jspf @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + <%@include file="devincludes.jspf"%> + + + + + + + + + + + diff --git a/geoportal_1/src/main/webapp/jspf/institutionWelcome.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/institutionWelcome.jspf similarity index 70% rename from geoportal_1/src/main/webapp/jspf/institutionWelcome.jspf rename to geoportal_1/src/main/webapp/WEB-INF/views/jspf/institutionWelcome.jspf index 2897fb4..fb58f6b 100644 --- a/geoportal_1/src/main/webapp/jspf/institutionWelcome.jspf +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/institutionWelcome.jspf @@ -1,3 +1,3 @@ -Welcome to the Tufts Geospatial Data Repository +Welcome to the Tufts Geospatial Data Repository diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/leftPanel.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/leftPanel.jspf new file mode 100644 index 0000000..ff61a89 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/leftPanel.jspf @@ -0,0 +1,34 @@ + +
+ +
+ +
+
+ +
+ <%@include file="results.jspf"%> +
+
+
+
+
+
+ + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/mailto.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/mailto.jspf new file mode 100644 index 0000000..d8dfa4d --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/mailto.jspf @@ -0,0 +1,4 @@ +For questions, comments, or to + report problems, please contact: geodata@elist.tufts.edu + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/results.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/results.jspf new file mode 100644 index 0000000..631b7ee --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/results.jspf @@ -0,0 +1,12 @@ + +
+
Sort Results
+
Columns
+ +
+
+
+
+ + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/search.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/search.jspf new file mode 100644 index 0000000..95e61bc --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/search.jspf @@ -0,0 +1,72 @@ + + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/userGuide.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/userGuide.jspf similarity index 88% rename from geoportal_1/src/main/webapp/jspf/userGuide.jspf rename to geoportal_1/src/main/webapp/WEB-INF/views/jspf/userGuide.jspf index 0ab160b..ac4b672 100644 --- a/geoportal_1/src/main/webapp/jspf/userGuide.jspf +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/userGuide.jspf @@ -11,27 +11,37 @@ div#userGuide { overflow: auto; } -div#userGuide@font-face { +div +#userGuide +@font-face { font-family: Wingdings; panose-1: 5 0 0 0 0 0 0 0 0 0; } -div#userGuide@font-face { +div +#userGuide +@font-face { font-family: Wingdings; panose-1: 5 0 0 0 0 0 0 0 0 0; } -div#userGuide@font-face { +div +#userGuide +@font-face { font-family: Calibri; panose-1: 2 15 5 2 2 2 4 3 2 4; } -div#userGuide@font-face { +div +#userGuide +@font-face { font-family: Tahoma; panose-1: 2 11 6 4 3 5 4 4 2 4; } -div#userGuide@font-face { +div +#userGuide +@font-face { font-family: Georgia; panose-1: 2 4 5 2 5 4 5 2 3 3; } @@ -183,9 +193,9 @@ normal;border:none;padding:0in'>Table of Contents

- - top - + + top
    @@ -559,13 +569,11 @@ normal;border:none;padding:0in'> -

    -
    +


  1. @@ -581,14 +589,12 @@ normal;border:none;padding:0in'> -

    -
    +


  2. @@ -614,7 +620,8 @@ normal;border:none;padding:0in'>Forward Moves you through subsequent map extents - + style='color: black'> Moves you through subsequent map + extents

  3. @@ -667,18 +674,18 @@ normal;border:none;padding:0in'>Zoom Slider - Bar displays for each map, - allowing you to zoom in or zoom out by clicking the ends of the - slider bar, or by dragging the slider up or down on the bar. + Zoom + Slider Bar displays for each + map, allowing you to zoom in or zoom out by clicking the ends of + the slider bar, or by dragging the slider up or down on the bar.

  4. Clear PreviewsUsed to deselect any - results checked to preview and remove them from the + src="resources/media/userGuide/image008.gif">Used to + deselect any results checked to preview and remove them from the map

  5. @@ -686,9 +693,9 @@ normal;border:none;padding:0in'> -

    -
    + height=362 id="Picture3" + src="resources/media/userGuide/image009.gif">
    +


  6. @@ -699,15 +706,12 @@ normal;border:none;padding:0in'> In order to search for data, click on the Search tab. -

    - -
    +


    -

    -
    +


    There are two ways to locate, explore and download data. These two @@ -721,22 +725,19 @@ normal;border:none;padding:0in'> Drag - and Draw a Box to perform a search similar to "Find Place". Using - the Zoom In to perform a search similar to "Find Place". + Using the Zoom In tool while clicking and dragging - draws a box that zooms to the extent of the area of interest. By default the OpenGeoportal returns - relevant results each time the displayed map extent changes. + draws a box that zooms to the extent of the area of interest. By + default the OpenGeoportal returns relevant results each time the + displayed map extent changes.

    For example, to search for data for the Boston area: 1. Drag and draw a box over Boston, MA. 2. In Search Results, - you will see all the data layers that are within or partially within - Boston. -

    - -
    + you will see all the data layers that are within or partially + within Boston. +


    -

    -
    +


    Also, panning or zooming in to a different - area imresources/mediately initiates another search for the new area.

    -

    Try combining your spatial search with a text search to further refine your results.

    + area imresources/mediately initiates another search for the new + area.

    +

    Try combining your spatial search with a text search to + further refine your results.

  7. @@ -843,7 +842,8 @@ normal;border:none;padding:0in'> + height=356 id="Picture11" + src="resources/media/userGuide/image016.gif">

      @@ -862,7 +862,7 @@ normal;border:none;padding:0in'> - Agriculture and Farming
      + Agriculture and Farming
      The rearing of animals or cultivation of plants. For example, resources describing irrigation, aquaculture, herding, and pests and diseases affecting crops and @@ -872,7 +872,7 @@ normal;border:none;padding:0in'> - Biology and Ecology
      + Biology and Ecology
      Naturally occurring flora and fauna. For example, resources describing wildlife, biological sciences, ecology, wilderness, sea life, wetlands, and habitats. @@ -1127,10 +1127,9 @@ normal;border:none;padding:0in'>Repository - - Click the Select - Repositories dropdown. Use the checkboxes to include all or a - select set of the data available from the contributing data - repositories. + - Click the Select Repositories dropdown. Use + the checkboxes to include all or a select set of the data + available from the contributing data repositories.

      Search Tab Preferences +

      + Search Tab + Preferences

      Elements on the Search tab @@ -1245,32 +1249,33 @@ normal;border:none;padding:0in'>Collapse/Expand collapses or expands - the portion of the Search tab where criteria are entered. Having - this portion of the tab collapsed allows more search results to - appear on the screen. + src="resources/media/userGuide/image025.jpg">collapses or + expands the portion of the Search tab where criteria are entered. + Having this portion of the tab collapsed allows more search + results to appear on the screen.

    1. Collapse Left collapses the tabbed - area of the interface completely, maximizing the map view. When - the left side of the screen is collapsed, the button to expand - right displays at the left edge of the screen. Using the expand - right button will restore the interface to the default view. + src="resources/media/userGuide/image026.jpg"> collapses + the tabbed area of the interface completely, maximizing the map + view. When the left side of the screen is collapsed, the button + to expand right displays at the left edge of the screen. Using + the expand right button will restore the interface to the default + view.

    2. Expand Right collapses the map area - of the interface completely, maximizing the tabbed potion of the - interface. When the right side of the screen is collapsed, using - the expand left button will restore the interface to the default - view. + src="resources/media/userGuide/image027.jpg"> collapses + the map area of the interface completely, maximizing the tabbed + potion of the interface. When the right side of the screen is + collapsed, using the expand left button will restore the + interface to the default view.

      Save Image Print The Print button allows you to print the current map.
      Tip - Consider using a PDF - printer to avoid having to download a map, saving the map with - a name and location of your choosing. + printer to avoid having to download a map, saving the map with a + name and location of your choosing.

    3. Basemap There - are five options for the basemap you can use in the OpenGeoportal. + are five options for the basemap you can use in the + OpenGeoportal.

      Google Hybrid - The Hybrid view shows a map - depicting roads, parks, borders, and more, overlayed on satellite - imagery. + depicting roads, parks, borders, and more, overlayed on + satellite imagery.

    4. @@ -1347,8 +1356,7 @@ normal;border:none;padding:0in'>Google Physical - This shows the topography and - physical features of the land along with major roads. - + physical features of the land along with major roads.

    5. @@ -1356,7 +1364,8 @@ normal;border:none;padding:0in'>Open Street Map - This option is a free, editable source of geographic data, which is built similar to - Wikipedia. OSM has mapped some parts of the world not easily available from other sources. + Wikipedia. OSM has mapped some parts of the world not easily + available from other sources.

    6. @@ -1412,14 +1421,15 @@ normal;border:none;padding:0in'> Expands the result to provide options to customize opacity, font size and color, adjusting how - the data will preview on the map. Click on the arrow by the - data layer to show controls. + the data will preview on the map. Click on the arrow by the data + layer to show controls.

      + height=131 id="Picture15" + src="resources/media/userGuide/image037.gif">

      @@ -1428,8 +1438,9 @@ normal;border:none;padding:0in'>Add to Cart - A checkbox used to save a result to the Cart. Simply check the box and the data layer will be - placed in the cart. The cart is a temporary holding place to preview or download chosen results, which - can be accessed by clicking the Cart tab. + placed in the cart. The cart is a temporary holding place to + preview or download chosen results, which can be accessed by + clicking the Cart tab.

      @@ -1442,9 +1453,10 @@ normal;border:none;padding:0in'>Data Type

      - Raster - - a generally rectangular grid of pixels + Raster - a generally rectangular grid + of pixels

      @@ -1472,8 +1484,8 @@ normal;border:none;padding:0in'>Name - - The document or data set name + Name + - The document or data set name

      @@ -1483,8 +1495,8 @@ normal;border:none;padding:0in'>Originator - - The office or agency providing the + Originator - The office or agency providing the source data for the search result

      @@ -1529,14 +1541,15 @@ normal;border:none;padding:0in'> + height=335 id="Picture461" + src="resources/media/userGuide/image045.gif">

      Within Preview, there are - several options for controlling how your features look and exploring - their attribute data. They are a. Opacity, b. Width, c. - Color, d. Zoom to Geographic Extent of Layer, and e. - Click a Previewed Feature on the Map to View its Attributes. + several options for controlling how your features look and + exploring their attribute data. They are a. Opacity, b. + Width, c. Color, d. Zoom to Geographic Extent of Layer, and + e. Click a Previewed Feature on the Map to View its Attributes.

        @@ -1544,23 +1557,24 @@ normal;border:none;padding:0in'>Opacity - controls the transparency of the - data layer in the view. Hover your cursor over the control and a - scale bar appears. Move the arrow up and down the scale to adjust - the opacity of the layer. + data layer in the view. Hover your cursor over the control and + a scale bar appears. Move the arrow up and down the scale to + adjust the opacity of the layer.

        + height=343 id="Picture462" + src="resources/media/userGuide/image046.gif">

      1. Size/Ln Width- This controls the size of points or the width of the - lines (or borders for polygons) in the data layers. Move the - arrow on the scale to adjust. Note this option is - not available for raster data. + style='color: black'>- This controls the size of points + or the width of the lines (or borders for polygons) in the data + layers. Move the arrow on the scale to adjust. Note this option + is not available for raster data.

        @@ -1571,41 +1585,45 @@ normal;border:none;padding:0in'>Color - Click on - the color icon to bring up the color palette. Note this option is - not available for raster data. + the color icon to bring up the color palette. Note this option + is not available for raster data.

        + height=293 id="Picture38" + src="resources/media/userGuide/image048.gif">

      2. Zoom to Geographic Extent of Layer By clicking on the - magnifying glass, the map pans and zooms to the full extent of the layer. + src="resources/media/userGuide/image049.jpg"> By clicking + on the magnifying glass, the map pans and zooms to the full + extent of the layer.

        + height=250 id="Picture40" + src="resources/media/userGuide/image050.gif">

      3. Click a Previewed Feature on the Map to View its Attributes By - clicking on this, the cursor turns into a crosshairs. Then, - click on any feature to bring up the attribute information - about it. + id="Picture115" src="resources/media/userGuide/image051.jpg">By clicking on this, the cursor + turns into a crosshairs. Then, click on any feature to bring up + the attribute information about it.

        + height=260 id="Picture42" + src="resources/media/userGuide/image052.gif">

      @@ -1623,7 +1641,8 @@ normal;border:none;padding:0in'> + height=273 id="Picture484" + src="resources/media/userGuide/image053.gif">

      @@ -1635,7 +1654,8 @@ normal;border:none;padding:0in'> + height=223 id="Picture485" + src="resources/media/userGuide/image054.gif">

      @@ -1697,8 +1717,8 @@ normal;border:none;padding:0in'>Clear Previews - Used to - deselect any results checked to preview and remove them - from the map + deselect any results checked to preview and remove them from the + map

      @@ -1712,11 +1732,13 @@ normal;border:none;padding:0in'>Cart

      The Cart tab - provides temporary storage for data sets and map images you have selected. From the cart, several actions are possible; - downloading layers, creating web services, sharing the contents of your cart, and opening layers in GeoCommons (coming soon). - Hovering on each button will highlight which layers are available for that particular action. Additionally, you can - preview the data in the cart the same way you preview data on the - Search tab.

      + provides temporary storage for data sets and map images you have + selected. From the cart, several actions are possible; downloading + layers, creating web services, sharing the contents of your cart, + and opening layers in GeoCommons (coming soon). Hovering on each + button will highlight which layers are available for that particular + action. Additionally, you can preview the data in the cart the same + way you preview data on the Search tab.

      While in the Search tab, check the layer you want to @@ -1748,7 +1770,7 @@ normal;border:none;padding:0in'>Download - Used to save selected data and maps to the location of your choice. When you choose to download items in your cart, you are - given options on the format and map extent to include. + given options on the format and map extent to include.

      @@ -1781,7 +1803,8 @@ normal;border:none;padding:0in'> Clip to map extent - Clip to map extent limits the properties/attributes to only those shapes visible in the - shapefile. This is an advised option for raster layers and large data sets. + shapefile. This is an advised option for raster layers and large + data sets.

      @@ -1820,7 +1843,7 @@ normal;border:none;padding:0in'>The - OpenGeoportal Interface
      Several + OpenGeoportal Interface

      Several links are always visible on the Open Geoportal interface. They include four links on a menu bar on the upper right of the site:

      @@ -1828,8 +1851,8 @@ normal;border:none;padding:0in'>Reset - restores the OpenGeoportal to its default state, - erasing any previously entered search criteria and + style='color: black'> - restores the OpenGeoportal to its + default state, erasing any previously entered search criteria and emptying your Cart

      diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/jspf/welcomeText.jspf b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/welcomeText.jspf new file mode 100644 index 0000000..c336e01 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/jspf/welcomeText.jspf @@ -0,0 +1,8 @@ +
      +

      Welcome

      +

      There are two ways to begin your search:

      +
        +
      1. Enter information using one or both search fields.
      2. +
      3. Zoom in on a location using the map.
      4. +
      +
      \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/ogp_home.jsp b/geoportal_1/src/main/webapp/WEB-INF/views/ogp_home.jsp new file mode 100644 index 0000000..5bce657 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/ogp_home.jsp @@ -0,0 +1,60 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> + + + + ${pageTitle.primary} ${pageTitle.offset} + + + +<%@include file="jspf/includes.jspf"%> + + + + + + + + + + + + + + + <%@include file="jspf/header.jspf"%> + <%@include file="jspf/search.jspf"%> +
      +
      + +
      +
      + <%@include file="jspf/leftPanel.jspf"%> +
      +
      +
      + <%@include file="jspf/footer.jspf"%> + +
      + <%@include file="jspf/about.jspf"%> + <%@include file="jspf/contact.jspf"%> +
      +
      +
      + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/ungeoreferenced.jsp b/geoportal_1/src/main/webapp/WEB-INF/views/ungeoreferenced.jsp new file mode 100644 index 0000000..7153d21 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/ungeoreferenced.jsp @@ -0,0 +1,35 @@ + + + + + + UnGeoreferenced Image Preview + + + + + + + + + + + + + + + + + + +
      You are previewing an ungeoreferenced image, which cannot be displayed on the map.
      + Move the image into the center of the window before zooming. +
      +
      +
      + + + + + diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/wfs_caps_1_0_0.jsp b/geoportal_1/src/main/webapp/WEB-INF/views/wfs_caps_1_0_0.jsp new file mode 100644 index 0000000..4bd1755 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/wfs_caps_1_0_0.jsp @@ -0,0 +1,226 @@ + +<%@ page language="java" contentType="text/xml; charset=UTF-8" + pageEncoding="UTF-8"%> + + WFS OpenGeoportal Web +Feature Service A dynamically created capabilites +document including only certain layers. For use in a mapping client that +supports WFS services. WFS, WMS, GEOSERVER +${onlineResource} NONE NONE + + + + + + + + + + + + + + + + + +${featureTypeInfo} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + abs + abs_2 + abs_3 + abs_4 + acos + area + asin + atan + atan2 + between + boundary + boundaryDimension + buffer + bufferWithSegments + Categorize + ceil + centroid + classify + Collection_Average + Collection_Bounds + Collection_Count + Collection_Max + Collection_Median + Collection_Min + Collection_Sum + Collection_Unique + Concatenate + contains + convert + convexHull + cos + crosses + dateFormat + dateParse + difference + dimension + disjoint + distance + double2bool + endAngle + endPoint + env + envelope + EqualInterval + equalsExact + equalsExactTolerance + equalTo + exp + exteriorRing + floor + geometryType + geomFromWKT + geomLength + getGeometryN + getX + getY + getZ + greaterEqualThan + greaterThan + id + IEEEremainder + if_then_else + in10 + in2 + in3 + in4 + in5 + in6 + in7 + in8 + in9 + int2bbool + int2ddouble + interiorPoint + interiorRingN + Interpolate + intersection + intersects + isClosed + isEmpty + isLike + isNull + isometric + isRing + isSimple + isValid + isWithinDistance + Jenks + length + lessEqualThan + lessThan + log + max + max_2 + max_3 + max_4 + min + min_2 + min_3 + min_4 + not + notEqualTo + numberFormat + numberFormat2 + numGeometries + numInteriorRing + numPoints + offset + overlaps + parseBoolean + parseDouble + parseInt + parseLong + pi + pointN + pow + PropertyExists + Quantile + random + Recode + relate + relatePattern + rint + round + round_2 + roundDouble + sin + sqrt + StandardDeviation + startAngle + startPoint + strCapitalize + strConcat + strEndsWith + strEqualsIgnoreCase + strIndexOf + strLastIndexOf + strLength + strMatches + strPosition + strReplace + strStartsWith + strSubstring + strSubstringStart + strToLowerCase + strToUpperCase + strTrim + strTrim2 + symDifference + tan + toDegrees + toRadians + touches + toWKT + union + UniqueInterval + vertices + within + + + + + + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/views/wms_caps_1_1_1.jsp b/geoportal_1/src/main/webapp/WEB-INF/views/wms_caps_1_1_1.jsp new file mode 100644 index 0000000..2a4028d --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/views/wms_caps_1_1_1.jsp @@ -0,0 +1,1263 @@ + +<%@ page language="java" contentType="text/xml; charset=UTF-8" + pageEncoding="UTF-8"%> + + + OGC:WMS OpenGeoportal +Web Map Service A dynamically created capabilites +document including only certain layers. For use in a mapping client that +supports WMS services. WFS +WMS OpenGeoportal + Geoportal +Development Team Tufts +University Work +
      Somerville US + atsystems@elist.tufts.edu + NONE NONE + application/vnd.ogc.wms_xml + +image/png application/atom xml application/atom+xml +application/openlayers application/pdf +application/rss xml application/rss+xml +application/vnd.google-earth.kml application/vnd.google-earth.kml +xml application/vnd.google-earth.kml+xml application/vnd.google-earth.kmz +application/vnd.google-earth.kmz xml application/vnd.google-earth.kmz+xml +atom image/geotiff image/geotiff8 +image/gif image/jpeg image/png8 +image/svg image/svg xml image/svg+xml +image/tiff image/tiff8 kml +kmz openlayers rss + +text/plain application/vnd.ogc.gml text/html + +application/vnd.ogc.wms_xml + + image/png image/jpeg +image/gif + + application/vnd.ogc.sld+xml + +application/vnd.ogc.se_xml application/vnd.ogc.se_inimage + OpenGeoportal Dynamic +Web Map Service A compliant implementation of WMS +plus most of the SLD extension (dynamic styling). Can also generate PDF, +SVG, KML, GeoRSS AUTO:42001 +AUTO:42002 AUTO:42003 AUTO:42004 EPSG:WGS84(DD) +EPSG:2000 EPSG:2001 EPSG:2002 EPSG:2003 +EPSG:2004 EPSG:2005 EPSG:2006 EPSG:2007 +EPSG:2008 EPSG:2009 EPSG:2010 EPSG:2011 +EPSG:2012 EPSG:2013 EPSG:2014 EPSG:2015 +EPSG:2016 EPSG:2017 EPSG:2018 EPSG:2019 +EPSG:2020 EPSG:2021 EPSG:2022 EPSG:2023 +EPSG:2024 EPSG:2025 EPSG:2026 EPSG:2027 +EPSG:2028 EPSG:2029 EPSG:2030 EPSG:2031 +EPSG:2032 EPSG:2033 EPSG:2034 EPSG:2035 +EPSG:2036 EPSG:2037 EPSG:2038 EPSG:2039 +EPSG:2040 EPSG:2041 EPSG:2042 EPSG:2043 +EPSG:2044 EPSG:2045 EPSG:2046 EPSG:2047 +EPSG:2048 EPSG:2049 EPSG:2050 EPSG:2051 +EPSG:2052 EPSG:2053 EPSG:2054 EPSG:2055 +EPSG:2056 EPSG:2057 EPSG:2058 EPSG:2059 +EPSG:2060 EPSG:2061 EPSG:2062 EPSG:2063 +EPSG:2064 EPSG:2065 EPSG:2066 EPSG:2067 +EPSG:2068 EPSG:2069 EPSG:2070 EPSG:2071 +EPSG:2072 EPSG:2073 EPSG:2074 EPSG:2075 +EPSG:2076 EPSG:2077 EPSG:2078 EPSG:2079 +EPSG:2080 EPSG:2081 EPSG:2082 EPSG:2083 +EPSG:2084 EPSG:2085 EPSG:2086 EPSG:2087 +EPSG:2088 EPSG:2089 EPSG:2090 EPSG:2091 +EPSG:2092 EPSG:2093 EPSG:2094 EPSG:2095 +EPSG:2096 EPSG:2097 EPSG:2098 EPSG:2099 +EPSG:2100 EPSG:2101 EPSG:2102 EPSG:2103 +EPSG:2104 EPSG:2105 EPSG:2106 EPSG:2107 +EPSG:2108 EPSG:2109 EPSG:2110 EPSG:2111 +EPSG:2112 EPSG:2113 EPSG:2114 EPSG:2115 +EPSG:2116 EPSG:2117 EPSG:2118 EPSG:2119 +EPSG:2120 EPSG:2121 EPSG:2122 EPSG:2123 +EPSG:2124 EPSG:2125 EPSG:2126 EPSG:2127 +EPSG:2128 EPSG:2129 EPSG:2130 EPSG:2131 +EPSG:2132 EPSG:2133 EPSG:2134 EPSG:2135 +EPSG:2136 EPSG:2137 EPSG:2138 EPSG:2139 +EPSG:2140 EPSG:2141 EPSG:2142 EPSG:2143 +EPSG:2144 EPSG:2145 EPSG:2146 EPSG:2147 +EPSG:2148 EPSG:2149 EPSG:2150 EPSG:2151 +EPSG:2152 EPSG:2153 EPSG:2154 EPSG:2155 +EPSG:2156 EPSG:2157 EPSG:2158 EPSG:2159 +EPSG:2160 EPSG:2161 EPSG:2162 EPSG:2163 +EPSG:2164 EPSG:2165 EPSG:2166 EPSG:2167 +EPSG:2168 EPSG:2169 EPSG:2170 EPSG:2171 +EPSG:2172 EPSG:2173 EPSG:2174 EPSG:2175 +EPSG:2176 EPSG:2177 EPSG:2178 EPSG:2179 +EPSG:2180 EPSG:2188 EPSG:2189 EPSG:2190 +EPSG:2191 EPSG:2192 EPSG:2193 EPSG:2194 +EPSG:2195 EPSG:2196 EPSG:2197 EPSG:2198 +EPSG:2199 EPSG:2200 EPSG:2201 EPSG:2202 +EPSG:2203 EPSG:2204 EPSG:2205 EPSG:2206 +EPSG:2207 EPSG:2208 EPSG:2209 EPSG:2210 +EPSG:2211 EPSG:2212 EPSG:2213 EPSG:2214 +EPSG:2215 EPSG:2216 EPSG:2217 EPSG:2218 +EPSG:2219 EPSG:2220 EPSG:2221 EPSG:2222 +EPSG:2223 EPSG:2224 EPSG:2225 EPSG:2226 +EPSG:2227 EPSG:2228 EPSG:2229 EPSG:2230 +EPSG:2231 EPSG:2232 EPSG:2233 EPSG:2234 +EPSG:2235 EPSG:2236 EPSG:2237 EPSG:2238 +EPSG:2239 EPSG:2240 EPSG:2241 EPSG:2242 +EPSG:2243 EPSG:2244 EPSG:2245 EPSG:2246 +EPSG:2247 EPSG:2248 EPSG:2249 EPSG:2250 +EPSG:2251 EPSG:2252 EPSG:2253 EPSG:2254 +EPSG:2255 EPSG:2256 EPSG:2257 EPSG:2258 +EPSG:2259 EPSG:2260 EPSG:2261 EPSG:2262 +EPSG:2263 EPSG:2264 EPSG:2265 EPSG:2266 +EPSG:2267 EPSG:2268 EPSG:2269 EPSG:2270 +EPSG:2271 EPSG:2272 EPSG:2273 EPSG:2274 +EPSG:2275 EPSG:2276 EPSG:2277 EPSG:2278 +EPSG:2279 EPSG:2280 EPSG:2281 EPSG:2282 +EPSG:2283 EPSG:2284 EPSG:2285 EPSG:2286 +EPSG:2287 EPSG:2288 EPSG:2289 EPSG:2290 +EPSG:2291 EPSG:2292 EPSG:2294 EPSG:2295 +EPSG:2296 EPSG:2297 EPSG:2298 EPSG:2299 +EPSG:2300 EPSG:2301 EPSG:2302 EPSG:2303 +EPSG:2304 EPSG:2305 EPSG:2306 EPSG:2307 +EPSG:2308 EPSG:2309 EPSG:2310 EPSG:2311 +EPSG:2312 EPSG:2313 EPSG:2314 EPSG:2315 +EPSG:2316 EPSG:2317 EPSG:2318 EPSG:2319 +EPSG:2320 EPSG:2321 EPSG:2322 EPSG:2323 +EPSG:2324 EPSG:2325 EPSG:2326 EPSG:2327 +EPSG:2328 EPSG:2329 EPSG:2330 EPSG:2331 +EPSG:2332 EPSG:2333 EPSG:2334 EPSG:2335 +EPSG:2336 EPSG:2337 EPSG:2338 EPSG:2339 +EPSG:2340 EPSG:2341 EPSG:2342 EPSG:2343 +EPSG:2344 EPSG:2345 EPSG:2346 EPSG:2347 +EPSG:2348 EPSG:2349 EPSG:2350 EPSG:2351 +EPSG:2352 EPSG:2353 EPSG:2354 EPSG:2355 +EPSG:2356 EPSG:2357 EPSG:2358 EPSG:2359 +EPSG:2360 EPSG:2361 EPSG:2362 EPSG:2363 +EPSG:2364 EPSG:2365 EPSG:2366 EPSG:2367 +EPSG:2368 EPSG:2369 EPSG:2370 EPSG:2371 +EPSG:2372 EPSG:2373 EPSG:2374 EPSG:2375 +EPSG:2376 EPSG:2377 EPSG:2378 EPSG:2379 +EPSG:2380 EPSG:2381 EPSG:2382 EPSG:2383 +EPSG:2384 EPSG:2385 EPSG:2386 EPSG:2387 +EPSG:2388 EPSG:2389 EPSG:2390 EPSG:2391 +EPSG:2392 EPSG:2393 EPSG:2394 EPSG:2395 +EPSG:2396 EPSG:2397 EPSG:2398 EPSG:2399 +EPSG:2400 EPSG:2401 EPSG:2402 EPSG:2403 +EPSG:2404 EPSG:2405 EPSG:2406 EPSG:2407 +EPSG:2408 EPSG:2409 EPSG:2410 EPSG:2411 +EPSG:2412 EPSG:2413 EPSG:2414 EPSG:2415 +EPSG:2416 EPSG:2417 EPSG:2418 EPSG:2419 +EPSG:2420 EPSG:2421 EPSG:2422 EPSG:2423 +EPSG:2424 EPSG:2425 EPSG:2426 EPSG:2427 +EPSG:2428 EPSG:2429 EPSG:2430 EPSG:2431 +EPSG:2432 EPSG:2433 EPSG:2434 EPSG:2435 +EPSG:2436 EPSG:2437 EPSG:2438 EPSG:2439 +EPSG:2440 EPSG:2441 EPSG:2442 EPSG:2443 +EPSG:2444 EPSG:2445 EPSG:2446 EPSG:2447 +EPSG:2448 EPSG:2449 EPSG:2450 EPSG:2451 +EPSG:2452 EPSG:2453 EPSG:2454 EPSG:2455 +EPSG:2456 EPSG:2457 EPSG:2458 EPSG:2459 +EPSG:2460 EPSG:2461 EPSG:2462 EPSG:2463 +EPSG:2464 EPSG:2465 EPSG:2466 EPSG:2467 +EPSG:2468 EPSG:2469 EPSG:2470 EPSG:2471 +EPSG:2472 EPSG:2473 EPSG:2474 EPSG:2475 +EPSG:2476 EPSG:2477 EPSG:2478 EPSG:2479 +EPSG:2480 EPSG:2481 EPSG:2482 EPSG:2483 +EPSG:2484 EPSG:2485 EPSG:2486 EPSG:2487 +EPSG:2488 EPSG:2489 EPSG:2490 EPSG:2491 +EPSG:2492 EPSG:2493 EPSG:2494 EPSG:2495 +EPSG:2496 EPSG:2497 EPSG:2498 EPSG:2499 +EPSG:2500 EPSG:2501 EPSG:2502 EPSG:2503 +EPSG:2504 EPSG:2505 EPSG:2506 EPSG:2507 +EPSG:2508 EPSG:2509 EPSG:2510 EPSG:2511 +EPSG:2512 EPSG:2513 EPSG:2514 EPSG:2515 +EPSG:2516 EPSG:2517 EPSG:2518 EPSG:2519 +EPSG:2520 EPSG:2521 EPSG:2522 EPSG:2523 +EPSG:2524 EPSG:2525 EPSG:2526 EPSG:2527 +EPSG:2528 EPSG:2529 EPSG:2530 EPSG:2531 +EPSG:2532 EPSG:2533 EPSG:2534 EPSG:2535 +EPSG:2536 EPSG:2537 EPSG:2538 EPSG:2539 +EPSG:2540 EPSG:2541 EPSG:2542 EPSG:2543 +EPSG:2544 EPSG:2545 EPSG:2546 EPSG:2547 +EPSG:2548 EPSG:2549 EPSG:2550 EPSG:2551 +EPSG:2552 EPSG:2553 EPSG:2554 EPSG:2555 +EPSG:2556 EPSG:2557 EPSG:2558 EPSG:2559 +EPSG:2560 EPSG:2561 EPSG:2562 EPSG:2563 +EPSG:2564 EPSG:2565 EPSG:2566 EPSG:2567 +EPSG:2568 EPSG:2569 EPSG:2570 EPSG:2571 +EPSG:2572 EPSG:2573 EPSG:2574 EPSG:2575 +EPSG:2576 EPSG:2577 EPSG:2578 EPSG:2579 +EPSG:2580 EPSG:2581 EPSG:2582 EPSG:2583 +EPSG:2584 EPSG:2585 EPSG:2586 EPSG:2587 +EPSG:2588 EPSG:2589 EPSG:2590 EPSG:2591 +EPSG:2592 EPSG:2593 EPSG:2594 EPSG:2595 +EPSG:2596 EPSG:2597 EPSG:2598 EPSG:2599 +EPSG:2600 EPSG:2601 EPSG:2602 EPSG:2603 +EPSG:2604 EPSG:2605 EPSG:2606 EPSG:2607 +EPSG:2608 EPSG:2609 EPSG:2610 EPSG:2611 +EPSG:2612 EPSG:2613 EPSG:2614 EPSG:2615 +EPSG:2616 EPSG:2617 EPSG:2618 EPSG:2619 +EPSG:2620 EPSG:2621 EPSG:2622 EPSG:2623 +EPSG:2624 EPSG:2625 EPSG:2626 EPSG:2627 +EPSG:2628 EPSG:2629 EPSG:2630 EPSG:2631 +EPSG:2632 EPSG:2633 EPSG:2634 EPSG:2635 +EPSG:2636 EPSG:2637 EPSG:2638 EPSG:2639 +EPSG:2640 EPSG:2641 EPSG:2642 EPSG:2643 +EPSG:2644 EPSG:2645 EPSG:2646 EPSG:2647 +EPSG:2648 EPSG:2649 EPSG:2650 EPSG:2651 +EPSG:2652 EPSG:2653 EPSG:2654 EPSG:2655 +EPSG:2656 EPSG:2657 EPSG:2658 EPSG:2659 +EPSG:2660 EPSG:2661 EPSG:2662 EPSG:2663 +EPSG:2664 EPSG:2665 EPSG:2666 EPSG:2667 +EPSG:2668 EPSG:2669 EPSG:2670 EPSG:2671 +EPSG:2672 EPSG:2673 EPSG:2674 EPSG:2675 +EPSG:2676 EPSG:2677 EPSG:2678 EPSG:2679 +EPSG:2680 EPSG:2681 EPSG:2682 EPSG:2683 +EPSG:2684 EPSG:2685 EPSG:2686 EPSG:2687 +EPSG:2688 EPSG:2689 EPSG:2690 EPSG:2691 +EPSG:2692 EPSG:2693 EPSG:2694 EPSG:2695 +EPSG:2696 EPSG:2697 EPSG:2698 EPSG:2699 +EPSG:2700 EPSG:2701 EPSG:2702 EPSG:2703 +EPSG:2704 EPSG:2705 EPSG:2706 EPSG:2707 +EPSG:2708 EPSG:2709 EPSG:2710 EPSG:2711 +EPSG:2712 EPSG:2713 EPSG:2714 EPSG:2715 +EPSG:2716 EPSG:2717 EPSG:2718 EPSG:2719 +EPSG:2720 EPSG:2721 EPSG:2722 EPSG:2723 +EPSG:2724 EPSG:2725 EPSG:2726 EPSG:2727 +EPSG:2728 EPSG:2729 EPSG:2730 EPSG:2731 +EPSG:2732 EPSG:2733 EPSG:2734 EPSG:2735 +EPSG:2736 EPSG:2737 EPSG:2738 EPSG:2739 +EPSG:2740 EPSG:2741 EPSG:2742 EPSG:2743 +EPSG:2744 EPSG:2745 EPSG:2746 EPSG:2747 +EPSG:2748 EPSG:2749 EPSG:2750 EPSG:2751 +EPSG:2752 EPSG:2753 EPSG:2754 EPSG:2755 +EPSG:2756 EPSG:2757 EPSG:2758 EPSG:2759 +EPSG:2760 EPSG:2761 EPSG:2762 EPSG:2763 +EPSG:2764 EPSG:2765 EPSG:2766 EPSG:2767 +EPSG:2768 EPSG:2769 EPSG:2770 EPSG:2771 +EPSG:2772 EPSG:2773 EPSG:2774 EPSG:2775 +EPSG:2776 EPSG:2777 EPSG:2778 EPSG:2779 +EPSG:2780 EPSG:2781 EPSG:2782 EPSG:2783 +EPSG:2784 EPSG:2785 EPSG:2786 EPSG:2787 +EPSG:2788 EPSG:2789 EPSG:2790 EPSG:2791 +EPSG:2792 EPSG:2793 EPSG:2794 EPSG:2795 +EPSG:2796 EPSG:2797 EPSG:2798 EPSG:2799 +EPSG:2800 EPSG:2801 EPSG:2802 EPSG:2803 +EPSG:2804 EPSG:2805 EPSG:2806 EPSG:2807 +EPSG:2808 EPSG:2809 EPSG:2810 EPSG:2811 +EPSG:2812 EPSG:2813 EPSG:2814 EPSG:2815 +EPSG:2816 EPSG:2817 EPSG:2818 EPSG:2819 +EPSG:2820 EPSG:2821 EPSG:2822 EPSG:2823 +EPSG:2824 EPSG:2825 EPSG:2826 EPSG:2827 +EPSG:2828 EPSG:2829 EPSG:2830 EPSG:2831 +EPSG:2832 EPSG:2833 EPSG:2834 EPSG:2835 +EPSG:2836 EPSG:2837 EPSG:2838 EPSG:2839 +EPSG:2840 EPSG:2841 EPSG:2842 EPSG:2843 +EPSG:2844 EPSG:2845 EPSG:2846 EPSG:2847 +EPSG:2848 EPSG:2849 EPSG:2850 EPSG:2851 +EPSG:2852 EPSG:2853 EPSG:2854 EPSG:2855 +EPSG:2856 EPSG:2857 EPSG:2858 EPSG:2859 +EPSG:2860 EPSG:2861 EPSG:2862 EPSG:2863 +EPSG:2864 EPSG:2865 EPSG:2866 EPSG:2867 +EPSG:2868 EPSG:2869 EPSG:2870 EPSG:2871 +EPSG:2872 EPSG:2873 EPSG:2874 EPSG:2875 +EPSG:2876 EPSG:2877 EPSG:2878 EPSG:2879 +EPSG:2880 EPSG:2881 EPSG:2882 EPSG:2883 +EPSG:2884 EPSG:2885 EPSG:2886 EPSG:2887 +EPSG:2888 EPSG:2889 EPSG:2890 EPSG:2891 +EPSG:2892 EPSG:2893 EPSG:2894 EPSG:2895 +EPSG:2896 EPSG:2897 EPSG:2898 EPSG:2899 +EPSG:2900 EPSG:2901 EPSG:2902 EPSG:2903 +EPSG:2904 EPSG:2905 EPSG:2906 EPSG:2907 +EPSG:2908 EPSG:2909 EPSG:2910 EPSG:2911 +EPSG:2912 EPSG:2913 EPSG:2914 EPSG:2915 +EPSG:2916 EPSG:2917 EPSG:2918 EPSG:2919 +EPSG:2920 EPSG:2921 EPSG:2922 EPSG:2923 +EPSG:2924 EPSG:2925 EPSG:2926 EPSG:2927 +EPSG:2928 EPSG:2929 EPSG:2930 EPSG:2931 +EPSG:2932 EPSG:2933 EPSG:2934 EPSG:2935 +EPSG:2936 EPSG:2937 EPSG:2938 EPSG:2939 +EPSG:2940 EPSG:2941 EPSG:2942 EPSG:2943 +EPSG:2944 EPSG:2945 EPSG:2946 EPSG:2947 +EPSG:2948 EPSG:2949 EPSG:2950 EPSG:2951 +EPSG:2952 EPSG:2953 EPSG:2954 EPSG:2955 +EPSG:2956 EPSG:2957 EPSG:2958 EPSG:2959 +EPSG:2960 EPSG:2961 EPSG:2962 EPSG:2963 +EPSG:2964 EPSG:2965 EPSG:2966 EPSG:2967 +EPSG:2968 EPSG:2969 EPSG:2970 EPSG:2971 +EPSG:2972 EPSG:2973 EPSG:2975 EPSG:2976 +EPSG:2977 EPSG:2978 EPSG:2979 EPSG:2980 +EPSG:2981 EPSG:2982 EPSG:2983 EPSG:2984 +EPSG:2985 EPSG:2986 EPSG:2987 EPSG:2988 +EPSG:2989 EPSG:2990 EPSG:2991 EPSG:2992 +EPSG:2993 EPSG:2994 EPSG:2995 EPSG:2996 +EPSG:2997 EPSG:2998 EPSG:2999 EPSG:3000 +EPSG:3001 EPSG:3002 EPSG:3003 EPSG:3004 +EPSG:3005 EPSG:3006 EPSG:3007 EPSG:3008 +EPSG:3009 EPSG:3010 EPSG:3011 EPSG:3012 +EPSG:3013 EPSG:3014 EPSG:3015 EPSG:3016 +EPSG:3017 EPSG:3018 EPSG:3019 EPSG:3020 +EPSG:3021 EPSG:3022 EPSG:3023 EPSG:3024 +EPSG:3025 EPSG:3026 EPSG:3027 EPSG:3028 +EPSG:3029 EPSG:3030 EPSG:3031 EPSG:3032 +EPSG:3033 EPSG:3034 EPSG:3035 EPSG:3036 +EPSG:3037 EPSG:3038 EPSG:3039 EPSG:3040 +EPSG:3041 EPSG:3042 EPSG:3043 EPSG:3044 +EPSG:3045 EPSG:3046 EPSG:3047 EPSG:3048 +EPSG:3049 EPSG:3050 EPSG:3051 EPSG:3052 +EPSG:3053 EPSG:3054 EPSG:3055 EPSG:3056 +EPSG:3057 EPSG:3058 EPSG:3059 EPSG:3060 +EPSG:3061 EPSG:3062 EPSG:3063 EPSG:3064 +EPSG:3065 EPSG:3066 EPSG:3067 EPSG:3068 +EPSG:3069 EPSG:3070 EPSG:3071 EPSG:3072 +EPSG:3073 EPSG:3074 EPSG:3075 EPSG:3076 +EPSG:3077 EPSG:3078 EPSG:3079 EPSG:3080 +EPSG:3081 EPSG:3082 EPSG:3083 EPSG:3084 +EPSG:3085 EPSG:3086 EPSG:3087 EPSG:3088 +EPSG:3089 EPSG:3090 EPSG:3091 EPSG:3092 +EPSG:3093 EPSG:3094 EPSG:3095 EPSG:3096 +EPSG:3097 EPSG:3098 EPSG:3099 EPSG:3100 +EPSG:3101 EPSG:3102 EPSG:3103 EPSG:3104 +EPSG:3105 EPSG:3106 EPSG:3107 EPSG:3108 +EPSG:3109 EPSG:3110 EPSG:3111 EPSG:3112 +EPSG:3113 EPSG:3114 EPSG:3115 EPSG:3116 +EPSG:3117 EPSG:3118 EPSG:3119 EPSG:3120 +EPSG:3121 EPSG:3122 EPSG:3123 EPSG:3124 +EPSG:3125 EPSG:3126 EPSG:3127 EPSG:3128 +EPSG:3129 EPSG:3130 EPSG:3131 EPSG:3132 +EPSG:3133 EPSG:3134 EPSG:3135 EPSG:3136 +EPSG:3137 EPSG:3138 EPSG:3139 EPSG:3140 +EPSG:3141 EPSG:3142 EPSG:3143 EPSG:3144 +EPSG:3145 EPSG:3146 EPSG:3147 EPSG:3148 +EPSG:3149 EPSG:3150 EPSG:3151 EPSG:3152 +EPSG:3153 EPSG:3154 EPSG:3155 EPSG:3156 +EPSG:3157 EPSG:3158 EPSG:3159 EPSG:3160 +EPSG:3161 EPSG:3162 EPSG:3163 EPSG:3164 +EPSG:3165 EPSG:3166 EPSG:3167 EPSG:3168 +EPSG:3169 EPSG:3170 EPSG:3171 EPSG:3172 +EPSG:3173 EPSG:3174 EPSG:3175 EPSG:3176 +EPSG:3177 EPSG:3178 EPSG:3179 EPSG:3180 +EPSG:3181 EPSG:3182 EPSG:3183 EPSG:3184 +EPSG:3185 EPSG:3186 EPSG:3187 EPSG:3188 +EPSG:3189 EPSG:3190 EPSG:3191 EPSG:3192 +EPSG:3193 EPSG:3194 EPSG:3195 EPSG:3196 +EPSG:3197 EPSG:3198 EPSG:3199 EPSG:3200 +EPSG:3201 EPSG:3202 EPSG:3203 EPSG:3204 +EPSG:3205 EPSG:3206 EPSG:3207 EPSG:3208 +EPSG:3209 EPSG:3210 EPSG:3211 EPSG:3212 +EPSG:3213 EPSG:3214 EPSG:3215 EPSG:3216 +EPSG:3217 EPSG:3218 EPSG:3219 EPSG:3220 +EPSG:3221 EPSG:3222 EPSG:3223 EPSG:3224 +EPSG:3225 EPSG:3226 EPSG:3227 EPSG:3228 +EPSG:3229 EPSG:3230 EPSG:3231 EPSG:3232 +EPSG:3233 EPSG:3234 EPSG:3235 EPSG:3236 +EPSG:3237 EPSG:3238 EPSG:3239 EPSG:3240 +EPSG:3241 EPSG:3242 EPSG:3243 EPSG:3244 +EPSG:3245 EPSG:3246 EPSG:3247 EPSG:3248 +EPSG:3249 EPSG:3250 EPSG:3251 EPSG:3252 +EPSG:3253 EPSG:3254 EPSG:3255 EPSG:3256 +EPSG:3257 EPSG:3258 EPSG:3259 EPSG:3260 +EPSG:3261 EPSG:3262 EPSG:3263 EPSG:3264 +EPSG:3265 EPSG:3266 EPSG:3267 EPSG:3268 +EPSG:3269 EPSG:3270 EPSG:3271 EPSG:3272 +EPSG:3273 EPSG:3274 EPSG:3275 EPSG:3276 +EPSG:3277 EPSG:3278 EPSG:3279 EPSG:3280 +EPSG:3281 EPSG:3282 EPSG:3283 EPSG:3284 +EPSG:3285 EPSG:3286 EPSG:3287 EPSG:3288 +EPSG:3289 EPSG:3290 EPSG:3291 EPSG:3292 +EPSG:3293 EPSG:3294 EPSG:3295 EPSG:3296 +EPSG:3297 EPSG:3298 EPSG:3299 EPSG:3300 +EPSG:3301 EPSG:3302 EPSG:3303 EPSG:3304 +EPSG:3305 EPSG:3306 EPSG:3307 EPSG:3308 +EPSG:3309 EPSG:3310 EPSG:3311 EPSG:3312 +EPSG:3313 EPSG:3314 EPSG:3315 EPSG:3316 +EPSG:3317 EPSG:3318 EPSG:3319 EPSG:3320 +EPSG:3321 EPSG:3322 EPSG:3323 EPSG:3324 +EPSG:3325 EPSG:3326 EPSG:3327 EPSG:3328 +EPSG:3329 EPSG:3330 EPSG:3331 EPSG:3332 +EPSG:3333 EPSG:3334 EPSG:3335 EPSG:3336 +EPSG:3337 EPSG:3338 EPSG:3339 EPSG:3340 +EPSG:3341 EPSG:3342 EPSG:3343 EPSG:3344 +EPSG:3345 EPSG:3346 EPSG:3347 EPSG:3348 +EPSG:3349 EPSG:3350 EPSG:3351 EPSG:3352 +EPSG:3353 EPSG:3354 EPSG:3355 EPSG:3356 +EPSG:3357 EPSG:3358 EPSG:3359 EPSG:3360 +EPSG:3361 EPSG:3362 EPSG:3363 EPSG:3364 +EPSG:3365 EPSG:3366 EPSG:3367 EPSG:3368 +EPSG:3369 EPSG:3370 EPSG:3371 EPSG:3372 +EPSG:3373 EPSG:3374 EPSG:3375 EPSG:3376 +EPSG:3377 EPSG:3378 EPSG:3379 EPSG:3380 +EPSG:3381 EPSG:3382 EPSG:3383 EPSG:3384 +EPSG:3385 EPSG:3386 EPSG:3387 EPSG:3388 +EPSG:3389 EPSG:3390 EPSG:3391 EPSG:3392 +EPSG:3393 EPSG:3394 EPSG:3395 EPSG:3396 +EPSG:3397 EPSG:3398 EPSG:3399 EPSG:3400 +EPSG:3401 EPSG:3402 EPSG:3403 EPSG:3404 +EPSG:3405 EPSG:3406 EPSG:3407 EPSG:3408 +EPSG:3409 EPSG:3410 EPSG:3411 EPSG:3412 +EPSG:3413 EPSG:3414 EPSG:3415 EPSG:3416 +EPSG:3417 EPSG:3418 EPSG:3419 EPSG:3420 +EPSG:3421 EPSG:3422 EPSG:3423 EPSG:3424 +EPSG:3425 EPSG:3426 EPSG:3427 EPSG:3428 +EPSG:3429 EPSG:3430 EPSG:3431 EPSG:3432 +EPSG:3433 EPSG:3434 EPSG:3435 EPSG:3436 +EPSG:3437 EPSG:3438 EPSG:3439 EPSG:3440 +EPSG:3441 EPSG:3442 EPSG:3443 EPSG:3444 +EPSG:3445 EPSG:3446 EPSG:3447 EPSG:3448 +EPSG:3449 EPSG:3450 EPSG:3451 EPSG:3452 +EPSG:3453 EPSG:3454 EPSG:3455 EPSG:3456 +EPSG:3457 EPSG:3458 EPSG:3459 EPSG:3460 +EPSG:3461 EPSG:3462 EPSG:3463 EPSG:3464 +EPSG:3465 EPSG:3466 EPSG:3467 EPSG:3468 +EPSG:3469 EPSG:3470 EPSG:3471 EPSG:3472 +EPSG:3473 EPSG:3474 EPSG:3475 EPSG:3476 +EPSG:3477 EPSG:3478 EPSG:3479 EPSG:3480 +EPSG:3481 EPSG:3482 EPSG:3483 EPSG:3484 +EPSG:3485 EPSG:3486 EPSG:3487 EPSG:3488 +EPSG:3489 EPSG:3490 EPSG:3491 EPSG:3492 +EPSG:3493 EPSG:3494 EPSG:3495 EPSG:3496 +EPSG:3497 EPSG:3498 EPSG:3499 EPSG:3500 +EPSG:3501 EPSG:3502 EPSG:3503 EPSG:3504 +EPSG:3505 EPSG:3506 EPSG:3507 EPSG:3508 +EPSG:3509 EPSG:3510 EPSG:3511 EPSG:3512 +EPSG:3513 EPSG:3514 EPSG:3515 EPSG:3516 +EPSG:3517 EPSG:3518 EPSG:3519 EPSG:3520 +EPSG:3521 EPSG:3522 EPSG:3523 EPSG:3524 +EPSG:3525 EPSG:3526 EPSG:3527 EPSG:3528 +EPSG:3529 EPSG:3530 EPSG:3531 EPSG:3532 +EPSG:3533 EPSG:3534 EPSG:3535 EPSG:3536 +EPSG:3537 EPSG:3538 EPSG:3539 EPSG:3540 +EPSG:3541 EPSG:3542 EPSG:3543 EPSG:3544 +EPSG:3545 EPSG:3546 EPSG:3547 EPSG:3548 +EPSG:3549 EPSG:3550 EPSG:3551 EPSG:3552 +EPSG:3553 EPSG:3554 EPSG:3555 EPSG:3556 +EPSG:3557 EPSG:3558 EPSG:3559 EPSG:3560 +EPSG:3561 EPSG:3562 EPSG:3563 EPSG:3564 +EPSG:3565 EPSG:3566 EPSG:3567 EPSG:3568 +EPSG:3569 EPSG:3570 EPSG:3571 EPSG:3572 +EPSG:3573 EPSG:3574 EPSG:3575 EPSG:3576 +EPSG:3577 EPSG:3578 EPSG:3579 EPSG:3580 +EPSG:3581 EPSG:3582 EPSG:3583 EPSG:3584 +EPSG:3585 EPSG:3586 EPSG:3587 EPSG:3588 +EPSG:3589 EPSG:3590 EPSG:3591 EPSG:3592 +EPSG:3593 EPSG:3594 EPSG:3595 EPSG:3596 +EPSG:3597 EPSG:3598 EPSG:3599 EPSG:3600 +EPSG:3601 EPSG:3602 EPSG:3603 EPSG:3604 +EPSG:3605 EPSG:3606 EPSG:3607 EPSG:3608 +EPSG:3609 EPSG:3610 EPSG:3611 EPSG:3612 +EPSG:3613 EPSG:3614 EPSG:3615 EPSG:3616 +EPSG:3617 EPSG:3618 EPSG:3619 EPSG:3620 +EPSG:3621 EPSG:3622 EPSG:3623 EPSG:3624 +EPSG:3625 EPSG:3626 EPSG:3627 EPSG:3628 +EPSG:3629 EPSG:3630 EPSG:3631 EPSG:3632 +EPSG:3633 EPSG:3634 EPSG:3635 EPSG:3636 +EPSG:3637 EPSG:3638 EPSG:3639 EPSG:3640 +EPSG:3641 EPSG:3642 EPSG:3643 EPSG:3644 +EPSG:3645 EPSG:3646 EPSG:3647 EPSG:3648 +EPSG:3649 EPSG:3650 EPSG:3651 EPSG:3652 +EPSG:3653 EPSG:3654 EPSG:3655 EPSG:3656 +EPSG:3657 EPSG:3658 EPSG:3659 EPSG:3660 +EPSG:3661 EPSG:3662 EPSG:3663 EPSG:3664 +EPSG:3665 EPSG:3666 EPSG:3667 EPSG:3668 +EPSG:3669 EPSG:3670 EPSG:3671 EPSG:3672 +EPSG:3673 EPSG:3674 EPSG:3675 EPSG:3676 +EPSG:3677 EPSG:3678 EPSG:3679 EPSG:3680 +EPSG:3681 EPSG:3682 EPSG:3683 EPSG:3684 +EPSG:3685 EPSG:3686 EPSG:3687 EPSG:3688 +EPSG:3689 EPSG:3690 EPSG:3691 EPSG:3692 +EPSG:3693 EPSG:3694 EPSG:3695 EPSG:3696 +EPSG:3697 EPSG:3698 EPSG:3699 EPSG:3700 +EPSG:3701 EPSG:3702 EPSG:3703 EPSG:3704 +EPSG:3705 EPSG:3706 EPSG:3707 EPSG:3708 +EPSG:3709 EPSG:3710 EPSG:3711 EPSG:3712 +EPSG:3713 EPSG:3714 EPSG:3715 EPSG:3716 +EPSG:3717 EPSG:3718 EPSG:3719 EPSG:3720 +EPSG:3721 EPSG:3722 EPSG:3723 EPSG:3724 +EPSG:3725 EPSG:3726 EPSG:3727 EPSG:3728 +EPSG:3729 EPSG:3730 EPSG:3731 EPSG:3732 +EPSG:3733 EPSG:3734 EPSG:3735 EPSG:3736 +EPSG:3737 EPSG:3738 EPSG:3739 EPSG:3740 +EPSG:3741 EPSG:3742 EPSG:3743 EPSG:3744 +EPSG:3745 EPSG:3746 EPSG:3747 EPSG:3748 +EPSG:3749 EPSG:3750 EPSG:3751 EPSG:3752 +EPSG:3753 EPSG:3754 EPSG:3755 EPSG:3756 +EPSG:3757 EPSG:3758 EPSG:3759 EPSG:3760 +EPSG:3761 EPSG:3762 EPSG:3763 EPSG:3764 +EPSG:3765 EPSG:3766 EPSG:3767 EPSG:3768 +EPSG:3769 EPSG:3770 EPSG:3771 EPSG:3772 +EPSG:3773 EPSG:3774 EPSG:3775 EPSG:3776 +EPSG:3777 EPSG:3778 EPSG:3779 EPSG:3780 +EPSG:3781 EPSG:3782 EPSG:3783 EPSG:3784 +EPSG:3785 EPSG:3786 EPSG:3787 EPSG:3788 +EPSG:3789 EPSG:3790 EPSG:3791 EPSG:3793 +EPSG:3794 EPSG:3795 EPSG:3796 EPSG:3797 +EPSG:3798 EPSG:3799 EPSG:3800 EPSG:3801 +EPSG:3802 EPSG:3812 EPSG:3814 EPSG:3815 +EPSG:3816 EPSG:3819 EPSG:3821 EPSG:3822 +EPSG:3823 EPSG:3824 EPSG:3825 EPSG:3826 +EPSG:3827 EPSG:3828 EPSG:3829 EPSG:3832 +EPSG:3833 EPSG:3834 EPSG:3835 EPSG:3836 +EPSG:3837 EPSG:3838 EPSG:3839 EPSG:3840 +EPSG:3841 EPSG:3842 EPSG:3843 EPSG:3844 +EPSG:3845 EPSG:3846 EPSG:3847 EPSG:3848 +EPSG:3849 EPSG:3850 EPSG:3851 EPSG:3852 +EPSG:3854 EPSG:3855 EPSG:3857 EPSG:3886 +EPSG:3887 EPSG:3888 EPSG:3889 EPSG:3890 +EPSG:3891 EPSG:3892 EPSG:3893 EPSG:3906 +EPSG:3907 EPSG:3908 EPSG:3909 EPSG:3910 +EPSG:3911 EPSG:3912 EPSG:3920 EPSG:3942 +EPSG:3943 EPSG:3944 EPSG:3945 EPSG:3946 +EPSG:3947 EPSG:3948 EPSG:3949 EPSG:3950 +EPSG:3968 EPSG:3969 EPSG:3970 EPSG:3973 +EPSG:3974 EPSG:3975 EPSG:3976 EPSG:3978 +EPSG:3979 EPSG:3985 EPSG:3986 EPSG:3987 +EPSG:3988 EPSG:3989 EPSG:3991 EPSG:3992 +EPSG:3993 EPSG:3994 EPSG:3995 EPSG:3996 +EPSG:3997 EPSG:4000 EPSG:4001 EPSG:4002 +EPSG:4003 EPSG:4004 EPSG:4005 EPSG:4006 +EPSG:4007 EPSG:4008 EPSG:4009 EPSG:4010 +EPSG:4011 EPSG:4012 EPSG:4013 EPSG:4014 +EPSG:4015 EPSG:4016 EPSG:4017 EPSG:4018 +EPSG:4019 EPSG:4020 EPSG:4021 EPSG:4022 +EPSG:4023 EPSG:4024 EPSG:4025 EPSG:4026 +EPSG:4027 EPSG:4028 EPSG:4029 EPSG:4030 +EPSG:4031 EPSG:4032 EPSG:4033 EPSG:4034 +EPSG:4035 EPSG:4036 EPSG:4037 EPSG:4038 +EPSG:4039 EPSG:4040 EPSG:4041 EPSG:4042 +EPSG:4043 EPSG:4044 EPSG:4045 EPSG:4046 +EPSG:4047 EPSG:4048 EPSG:4049 EPSG:4050 +EPSG:4051 EPSG:4052 EPSG:4053 EPSG:4054 +EPSG:4055 EPSG:4056 EPSG:4057 EPSG:4058 +EPSG:4059 EPSG:4060 EPSG:4061 EPSG:4062 +EPSG:4063 EPSG:4071 EPSG:4073 EPSG:4074 +EPSG:4075 EPSG:4079 EPSG:4080 EPSG:4081 +EPSG:4082 EPSG:4083 EPSG:4087 EPSG:4088 +EPSG:4093 EPSG:4094 EPSG:4095 EPSG:4096 +EPSG:4097 EPSG:4098 EPSG:4099 EPSG:4100 +EPSG:4120 EPSG:4121 EPSG:4122 EPSG:4123 +EPSG:4124 EPSG:4125 EPSG:4126 EPSG:4127 +EPSG:4128 EPSG:4129 EPSG:4130 EPSG:4131 +EPSG:4132 EPSG:4133 EPSG:4134 EPSG:4135 +EPSG:4136 EPSG:4137 EPSG:4138 EPSG:4139 +EPSG:4140 EPSG:4141 EPSG:4142 EPSG:4143 +EPSG:4144 EPSG:4145 EPSG:4146 EPSG:4147 +EPSG:4148 EPSG:4149 EPSG:4150 EPSG:4151 +EPSG:4152 EPSG:4153 EPSG:4154 EPSG:4155 +EPSG:4156 EPSG:4157 EPSG:4158 EPSG:4159 +EPSG:4160 EPSG:4161 EPSG:4162 EPSG:4163 +EPSG:4164 EPSG:4165 EPSG:4166 EPSG:4167 +EPSG:4168 EPSG:4169 EPSG:4170 EPSG:4171 +EPSG:4172 EPSG:4173 EPSG:4174 EPSG:4175 +EPSG:4176 EPSG:4178 EPSG:4179 EPSG:4180 +EPSG:4181 EPSG:4182 EPSG:4183 EPSG:4184 +EPSG:4185 EPSG:4188 EPSG:4189 EPSG:4190 +EPSG:4191 EPSG:4192 EPSG:4193 EPSG:4194 +EPSG:4195 EPSG:4196 EPSG:4197 EPSG:4198 +EPSG:4199 EPSG:4200 EPSG:4201 EPSG:4202 +EPSG:4203 EPSG:4204 EPSG:4205 EPSG:4206 +EPSG:4207 EPSG:4208 EPSG:4209 EPSG:4210 +EPSG:4211 EPSG:4212 EPSG:4213 EPSG:4214 +EPSG:4215 EPSG:4216 EPSG:4217 EPSG:4218 +EPSG:4219 EPSG:4220 EPSG:4221 EPSG:4222 +EPSG:4223 EPSG:4224 EPSG:4225 EPSG:4226 +EPSG:4227 EPSG:4228 EPSG:4229 EPSG:4230 +EPSG:4231 EPSG:4232 EPSG:4233 EPSG:4234 +EPSG:4235 EPSG:4236 EPSG:4237 EPSG:4238 +EPSG:4239 EPSG:4240 EPSG:4241 EPSG:4242 +EPSG:4243 EPSG:4244 EPSG:4245 EPSG:4246 +EPSG:4247 EPSG:4248 EPSG:4249 EPSG:4250 +EPSG:4251 EPSG:4252 EPSG:4253 EPSG:4254 +EPSG:4255 EPSG:4256 EPSG:4257 EPSG:4258 +EPSG:4259 EPSG:4260 EPSG:4261 EPSG:4262 +EPSG:4263 EPSG:4264 EPSG:4265 EPSG:4266 +EPSG:4267 EPSG:4268 EPSG:4269 EPSG:4270 +EPSG:4271 EPSG:4272 EPSG:4273 EPSG:4274 +EPSG:4275 EPSG:4276 EPSG:4277 EPSG:4278 +EPSG:4279 EPSG:4280 EPSG:4281 EPSG:4282 +EPSG:4283 EPSG:4284 EPSG:4285 EPSG:4286 +EPSG:4287 EPSG:4288 EPSG:4289 EPSG:4291 +EPSG:4292 EPSG:4293 EPSG:4294 EPSG:4295 +EPSG:4296 EPSG:4297 EPSG:4298 EPSG:4299 +EPSG:4300 EPSG:4301 EPSG:4302 EPSG:4303 +EPSG:4304 EPSG:4306 EPSG:4307 EPSG:4308 +EPSG:4309 EPSG:4310 EPSG:4311 EPSG:4312 +EPSG:4313 EPSG:4314 EPSG:4315 EPSG:4316 +EPSG:4317 EPSG:4318 EPSG:4319 EPSG:4322 +EPSG:4324 EPSG:4326 EPSG:4327 EPSG:4328 +EPSG:4329 EPSG:4330 EPSG:4331 EPSG:4332 +EPSG:4333 EPSG:4334 EPSG:4335 EPSG:4336 +EPSG:4337 EPSG:4338 EPSG:4339 EPSG:4340 +EPSG:4341 EPSG:4342 EPSG:4343 EPSG:4344 +EPSG:4345 EPSG:4346 EPSG:4347 EPSG:4348 +EPSG:4349 EPSG:4350 EPSG:4351 EPSG:4352 +EPSG:4353 EPSG:4354 EPSG:4355 EPSG:4356 +EPSG:4357 EPSG:4358 EPSG:4359 EPSG:4360 +EPSG:4361 EPSG:4362 EPSG:4363 EPSG:4364 +EPSG:4365 EPSG:4366 EPSG:4367 EPSG:4368 +EPSG:4369 EPSG:4370 EPSG:4371 EPSG:4372 +EPSG:4373 EPSG:4374 EPSG:4375 EPSG:4376 +EPSG:4377 EPSG:4378 EPSG:4379 EPSG:4380 +EPSG:4381 EPSG:4382 EPSG:4383 EPSG:4384 +EPSG:4385 EPSG:4386 EPSG:4387 EPSG:4388 +EPSG:4389 EPSG:4399 EPSG:4400 EPSG:4401 +EPSG:4402 EPSG:4403 EPSG:4404 EPSG:4405 +EPSG:4406 EPSG:4407 EPSG:4408 EPSG:4409 +EPSG:4410 EPSG:4411 EPSG:4412 EPSG:4413 +EPSG:4414 EPSG:4415 EPSG:4417 EPSG:4418 +EPSG:4419 EPSG:4420 EPSG:4421 EPSG:4422 +EPSG:4423 EPSG:4424 EPSG:4425 EPSG:4426 +EPSG:4427 EPSG:4428 EPSG:4429 EPSG:4430 +EPSG:4431 EPSG:4432 EPSG:4433 EPSG:4434 +EPSG:4437 EPSG:4438 EPSG:4439 EPSG:4440 +EPSG:4455 EPSG:4456 EPSG:4457 EPSG:4458 +EPSG:4462 EPSG:4463 EPSG:4465 EPSG:4466 +EPSG:4467 EPSG:4468 EPSG:4469 EPSG:4470 +EPSG:4471 EPSG:4472 EPSG:4473 EPSG:4474 +EPSG:4475 EPSG:4479 EPSG:4480 EPSG:4481 +EPSG:4482 EPSG:4483 EPSG:4484 EPSG:4485 +EPSG:4486 EPSG:4487 EPSG:4488 EPSG:4489 +EPSG:4490 EPSG:4491 EPSG:4492 EPSG:4493 +EPSG:4494 EPSG:4495 EPSG:4496 EPSG:4497 +EPSG:4498 EPSG:4499 EPSG:4500 EPSG:4501 +EPSG:4502 EPSG:4503 EPSG:4504 EPSG:4505 +EPSG:4506 EPSG:4507 EPSG:4508 EPSG:4509 +EPSG:4510 EPSG:4511 EPSG:4512 EPSG:4513 +EPSG:4514 EPSG:4515 EPSG:4516 EPSG:4517 +EPSG:4518 EPSG:4519 EPSG:4520 EPSG:4521 +EPSG:4522 EPSG:4523 EPSG:4524 EPSG:4525 +EPSG:4526 EPSG:4527 EPSG:4528 EPSG:4529 +EPSG:4530 EPSG:4531 EPSG:4532 EPSG:4533 +EPSG:4534 EPSG:4535 EPSG:4536 EPSG:4537 +EPSG:4538 EPSG:4539 EPSG:4540 EPSG:4541 +EPSG:4542 EPSG:4543 EPSG:4544 EPSG:4545 +EPSG:4546 EPSG:4547 EPSG:4548 EPSG:4549 +EPSG:4550 EPSG:4551 EPSG:4552 EPSG:4553 +EPSG:4554 EPSG:4555 EPSG:4556 EPSG:4557 +EPSG:4558 EPSG:4559 EPSG:4568 EPSG:4569 +EPSG:4570 EPSG:4571 EPSG:4572 EPSG:4573 +EPSG:4574 EPSG:4575 EPSG:4576 EPSG:4577 +EPSG:4578 EPSG:4579 EPSG:4580 EPSG:4581 +EPSG:4582 EPSG:4583 EPSG:4584 EPSG:4585 +EPSG:4586 EPSG:4587 EPSG:4588 EPSG:4589 +EPSG:4600 EPSG:4601 EPSG:4602 EPSG:4603 +EPSG:4604 EPSG:4605 EPSG:4606 EPSG:4607 +EPSG:4608 EPSG:4609 EPSG:4610 EPSG:4611 +EPSG:4612 EPSG:4613 EPSG:4614 EPSG:4615 +EPSG:4616 EPSG:4617 EPSG:4618 EPSG:4619 +EPSG:4620 EPSG:4621 EPSG:4622 EPSG:4623 +EPSG:4624 EPSG:4625 EPSG:4626 EPSG:4627 +EPSG:4628 EPSG:4629 EPSG:4630 EPSG:4631 +EPSG:4632 EPSG:4633 EPSG:4634 EPSG:4635 +EPSG:4636 EPSG:4637 EPSG:4638 EPSG:4639 +EPSG:4640 EPSG:4641 EPSG:4642 EPSG:4643 +EPSG:4644 EPSG:4645 EPSG:4646 EPSG:4647 +EPSG:4652 EPSG:4653 EPSG:4654 EPSG:4655 +EPSG:4656 EPSG:4657 EPSG:4658 EPSG:4659 +EPSG:4660 EPSG:4661 EPSG:4662 EPSG:4663 +EPSG:4664 EPSG:4665 EPSG:4666 EPSG:4667 +EPSG:4668 EPSG:4669 EPSG:4670 EPSG:4671 +EPSG:4672 EPSG:4673 EPSG:4674 EPSG:4675 +EPSG:4676 EPSG:4677 EPSG:4678 EPSG:4679 +EPSG:4680 EPSG:4681 EPSG:4682 EPSG:4683 +EPSG:4684 EPSG:4685 EPSG:4686 EPSG:4687 +EPSG:4688 EPSG:4689 EPSG:4690 EPSG:4691 +EPSG:4692 EPSG:4693 EPSG:4694 EPSG:4695 +EPSG:4696 EPSG:4697 EPSG:4698 EPSG:4699 +EPSG:4700 EPSG:4701 EPSG:4702 EPSG:4703 +EPSG:4704 EPSG:4705 EPSG:4706 EPSG:4707 +EPSG:4708 EPSG:4709 EPSG:4710 EPSG:4711 +EPSG:4712 EPSG:4713 EPSG:4714 EPSG:4715 +EPSG:4716 EPSG:4717 EPSG:4718 EPSG:4719 +EPSG:4720 EPSG:4721 EPSG:4722 EPSG:4723 +EPSG:4724 EPSG:4725 EPSG:4726 EPSG:4727 +EPSG:4728 EPSG:4729 EPSG:4730 EPSG:4731 +EPSG:4732 EPSG:4733 EPSG:4734 EPSG:4735 +EPSG:4736 EPSG:4737 EPSG:4738 EPSG:4739 +EPSG:4740 EPSG:4741 EPSG:4742 EPSG:4743 +EPSG:4744 EPSG:4745 EPSG:4746 EPSG:4747 +EPSG:4748 EPSG:4749 EPSG:4750 EPSG:4751 +EPSG:4752 EPSG:4753 EPSG:4754 EPSG:4755 +EPSG:4756 EPSG:4757 EPSG:4758 EPSG:4759 +EPSG:4760 EPSG:4761 EPSG:4762 EPSG:4763 +EPSG:4764 EPSG:4765 EPSG:4766 EPSG:4767 +EPSG:4768 EPSG:4769 EPSG:4770 EPSG:4771 +EPSG:4772 EPSG:4773 EPSG:4774 EPSG:4775 +EPSG:4776 EPSG:4777 EPSG:4778 EPSG:4779 +EPSG:4780 EPSG:4781 EPSG:4782 EPSG:4783 +EPSG:4784 EPSG:4785 EPSG:4786 EPSG:4787 +EPSG:4788 EPSG:4789 EPSG:4790 EPSG:4791 +EPSG:4792 EPSG:4793 EPSG:4794 EPSG:4795 +EPSG:4796 EPSG:4797 EPSG:4798 EPSG:4799 +EPSG:4800 EPSG:4801 EPSG:4802 EPSG:4803 +EPSG:4804 EPSG:4805 EPSG:4806 EPSG:4807 +EPSG:4808 EPSG:4809 EPSG:4810 EPSG:4811 +EPSG:4812 EPSG:4813 EPSG:4814 EPSG:4815 +EPSG:4816 EPSG:4817 EPSG:4818 EPSG:4819 +EPSG:4820 EPSG:4821 EPSG:4822 EPSG:4823 +EPSG:4824 EPSG:4826 EPSG:4839 EPSG:4855 +EPSG:4856 EPSG:4857 EPSG:4858 EPSG:4859 +EPSG:4860 EPSG:4861 EPSG:4862 EPSG:4863 +EPSG:4864 EPSG:4865 EPSG:4866 EPSG:4867 +EPSG:4868 EPSG:4869 EPSG:4870 EPSG:4871 +EPSG:4872 EPSG:4873 EPSG:4874 EPSG:4875 +EPSG:4876 EPSG:4877 EPSG:4878 EPSG:4879 +EPSG:4880 EPSG:4882 EPSG:4883 EPSG:4884 +EPSG:4885 EPSG:4886 EPSG:4887 EPSG:4888 +EPSG:4889 EPSG:4890 EPSG:4891 EPSG:4892 +EPSG:4893 EPSG:4894 EPSG:4895 EPSG:4896 +EPSG:4897 EPSG:4898 EPSG:4899 EPSG:4900 +EPSG:4901 EPSG:4902 EPSG:4903 EPSG:4904 +EPSG:4906 EPSG:4907 EPSG:4908 EPSG:4909 +EPSG:4910 EPSG:4911 EPSG:4912 EPSG:4913 +EPSG:4914 EPSG:4915 EPSG:4916 EPSG:4917 +EPSG:4918 EPSG:4919 EPSG:4920 EPSG:4921 +EPSG:4922 EPSG:4923 EPSG:4924 EPSG:4925 +EPSG:4926 EPSG:4927 EPSG:4928 EPSG:4929 +EPSG:4930 EPSG:4931 EPSG:4932 EPSG:4933 +EPSG:4934 EPSG:4935 EPSG:4936 EPSG:4937 +EPSG:4938 EPSG:4939 EPSG:4940 EPSG:4941 +EPSG:4942 EPSG:4943 EPSG:4944 EPSG:4945 +EPSG:4946 EPSG:4947 EPSG:4948 EPSG:4949 +EPSG:4950 EPSG:4951 EPSG:4952 EPSG:4953 +EPSG:4954 EPSG:4955 EPSG:4956 EPSG:4957 +EPSG:4958 EPSG:4959 EPSG:4960 EPSG:4961 +EPSG:4962 EPSG:4963 EPSG:4964 EPSG:4965 +EPSG:4966 EPSG:4967 EPSG:4968 EPSG:4969 +EPSG:4970 EPSG:4971 EPSG:4972 EPSG:4973 +EPSG:4974 EPSG:4975 EPSG:4976 EPSG:4977 +EPSG:4978 EPSG:4979 EPSG:4980 EPSG:4981 +EPSG:4982 EPSG:4983 EPSG:4984 EPSG:4985 +EPSG:4986 EPSG:4987 EPSG:4988 EPSG:4989 +EPSG:4990 EPSG:4991 EPSG:4992 EPSG:4993 +EPSG:4994 EPSG:4995 EPSG:4996 EPSG:4997 +EPSG:4998 EPSG:4999 EPSG:5011 EPSG:5012 +EPSG:5013 EPSG:5014 EPSG:5015 EPSG:5016 +EPSG:5017 EPSG:5018 EPSG:5041 EPSG:5042 +EPSG:5069 EPSG:5070 EPSG:5071 EPSG:5072 +EPSG:5600 EPSG:5601 EPSG:5602 EPSG:5603 +EPSG:5604 EPSG:5605 EPSG:5606 EPSG:5607 +EPSG:5608 EPSG:5609 EPSG:5610 EPSG:5611 +EPSG:5612 EPSG:5613 EPSG:5614 EPSG:5615 +EPSG:5616 EPSG:5617 EPSG:5618 EPSG:5619 +EPSG:5620 EPSG:5621 EPSG:5701 EPSG:5702 +EPSG:5703 EPSG:5704 EPSG:5705 EPSG:5706 +EPSG:5709 EPSG:5710 EPSG:5711 EPSG:5712 +EPSG:5713 EPSG:5714 EPSG:5715 EPSG:5716 +EPSG:5717 EPSG:5718 EPSG:5719 EPSG:5720 +EPSG:5721 EPSG:5722 EPSG:5723 EPSG:5724 +EPSG:5725 EPSG:5726 EPSG:5727 EPSG:5728 +EPSG:5729 EPSG:5730 EPSG:5731 EPSG:5732 +EPSG:5733 EPSG:5734 EPSG:5735 EPSG:5736 +EPSG:5737 EPSG:5738 EPSG:5739 EPSG:5740 +EPSG:5741 EPSG:5742 EPSG:5743 EPSG:5744 +EPSG:5745 EPSG:5746 EPSG:5747 EPSG:5748 +EPSG:5749 EPSG:5750 EPSG:5751 EPSG:5752 +EPSG:5753 EPSG:5754 EPSG:5755 EPSG:5756 +EPSG:5757 EPSG:5758 EPSG:5759 EPSG:5760 +EPSG:5761 EPSG:5762 EPSG:5763 EPSG:5764 +EPSG:5765 EPSG:5766 EPSG:5767 EPSG:5768 +EPSG:5769 EPSG:5770 EPSG:5771 EPSG:5772 +EPSG:5773 EPSG:5774 EPSG:5775 EPSG:5776 +EPSG:5777 EPSG:5778 EPSG:5779 EPSG:5780 +EPSG:5781 EPSG:5782 EPSG:5783 EPSG:5784 +EPSG:5785 EPSG:5786 EPSG:5787 EPSG:5788 +EPSG:5789 EPSG:5790 EPSG:5791 EPSG:5792 +EPSG:5793 EPSG:5794 EPSG:5795 EPSG:5796 +EPSG:5797 EPSG:5798 EPSG:5799 EPSG:5800 +EPSG:5801 EPSG:5802 EPSG:5803 EPSG:5804 +EPSG:5805 EPSG:5806 EPSG:5807 EPSG:5808 +EPSG:5809 EPSG:5810 EPSG:5811 EPSG:5812 +EPSG:5813 EPSG:5814 EPSG:5815 EPSG:5816 +EPSG:5817 EPSG:5818 EPSG:5819 EPSG:5820 +EPSG:5821 EPSG:7400 EPSG:7401 EPSG:7402 +EPSG:7403 EPSG:7404 EPSG:7405 EPSG:7406 +EPSG:7407 EPSG:7408 EPSG:7409 EPSG:7410 +EPSG:7411 EPSG:7412 EPSG:7413 EPSG:7414 +EPSG:7415 EPSG:7416 EPSG:7417 EPSG:7418 +EPSG:7419 EPSG:7420 EPSG:7421 EPSG:7422 +EPSG:7423 EPSG:20004 EPSG:20005 EPSG:20006 +EPSG:20007 EPSG:20008 EPSG:20009 EPSG:20010 +EPSG:20011 EPSG:20012 EPSG:20013 EPSG:20014 +EPSG:20015 EPSG:20016 EPSG:20017 EPSG:20018 +EPSG:20019 EPSG:20020 EPSG:20021 EPSG:20022 +EPSG:20023 EPSG:20024 EPSG:20025 EPSG:20026 +EPSG:20027 EPSG:20028 EPSG:20029 EPSG:20030 +EPSG:20031 EPSG:20032 EPSG:20064 EPSG:20065 +EPSG:20066 EPSG:20067 EPSG:20068 EPSG:20069 +EPSG:20070 EPSG:20071 EPSG:20072 EPSG:20073 +EPSG:20074 EPSG:20075 EPSG:20076 EPSG:20077 +EPSG:20078 EPSG:20079 EPSG:20080 EPSG:20081 +EPSG:20082 EPSG:20083 EPSG:20084 EPSG:20085 +EPSG:20086 EPSG:20087 EPSG:20088 EPSG:20089 +EPSG:20090 EPSG:20091 EPSG:20092 EPSG:20135 +EPSG:20136 EPSG:20137 EPSG:20138 EPSG:20248 +EPSG:20249 EPSG:20250 EPSG:20251 EPSG:20252 +EPSG:20253 EPSG:20254 EPSG:20255 EPSG:20256 +EPSG:20257 EPSG:20258 EPSG:20348 EPSG:20349 +EPSG:20350 EPSG:20351 EPSG:20352 EPSG:20353 +EPSG:20354 EPSG:20355 EPSG:20356 EPSG:20357 +EPSG:20358 EPSG:20436 EPSG:20437 EPSG:20438 +EPSG:20439 EPSG:20440 EPSG:20499 EPSG:20538 +EPSG:20539 EPSG:20790 EPSG:20791 EPSG:20822 +EPSG:20823 EPSG:20824 EPSG:20934 EPSG:20935 +EPSG:20936 EPSG:21035 EPSG:21036 EPSG:21037 +EPSG:21095 EPSG:21096 EPSG:21097 EPSG:21100 +EPSG:21148 EPSG:21149 EPSG:21150 EPSG:21291 +EPSG:21292 EPSG:21413 EPSG:21414 EPSG:21415 +EPSG:21416 EPSG:21417 EPSG:21418 EPSG:21419 +EPSG:21420 EPSG:21421 EPSG:21422 EPSG:21423 +EPSG:21453 EPSG:21454 EPSG:21455 EPSG:21456 +EPSG:21457 EPSG:21458 EPSG:21459 EPSG:21460 +EPSG:21461 EPSG:21462 EPSG:21463 EPSG:21473 +EPSG:21474 EPSG:21475 EPSG:21476 EPSG:21477 +EPSG:21478 EPSG:21479 EPSG:21480 EPSG:21481 +EPSG:21482 EPSG:21483 EPSG:21500 EPSG:21780 +EPSG:21781 EPSG:21782 EPSG:21817 EPSG:21818 +EPSG:21891 EPSG:21892 EPSG:21893 EPSG:21894 +EPSG:21896 EPSG:21897 EPSG:21898 EPSG:21899 +EPSG:22032 EPSG:22033 EPSG:22091 EPSG:22092 +EPSG:22171 EPSG:22172 EPSG:22173 EPSG:22174 +EPSG:22175 EPSG:22176 EPSG:22177 EPSG:22181 +EPSG:22182 EPSG:22183 EPSG:22184 EPSG:22185 +EPSG:22186 EPSG:22187 EPSG:22191 EPSG:22192 +EPSG:22193 EPSG:22194 EPSG:22195 EPSG:22196 +EPSG:22197 EPSG:22234 EPSG:22235 EPSG:22236 +EPSG:22275 EPSG:22277 EPSG:22279 EPSG:22281 +EPSG:22283 EPSG:22285 EPSG:22287 EPSG:22289 +EPSG:22291 EPSG:22293 EPSG:22300 EPSG:22332 +EPSG:22391 EPSG:22392 EPSG:22521 EPSG:22522 +EPSG:22523 EPSG:22524 EPSG:22525 EPSG:22700 +EPSG:22770 EPSG:22780 EPSG:22832 EPSG:22991 +EPSG:22992 EPSG:22993 EPSG:22994 EPSG:23028 +EPSG:23029 EPSG:23030 EPSG:23031 EPSG:23032 +EPSG:23033 EPSG:23034 EPSG:23035 EPSG:23036 +EPSG:23037 EPSG:23038 EPSG:23090 EPSG:23095 +EPSG:23239 EPSG:23240 EPSG:23433 EPSG:23700 +EPSG:23830 EPSG:23831 EPSG:23832 EPSG:23833 +EPSG:23834 EPSG:23835 EPSG:23836 EPSG:23837 +EPSG:23838 EPSG:23839 EPSG:23840 EPSG:23841 +EPSG:23842 EPSG:23843 EPSG:23844 EPSG:23845 +EPSG:23846 EPSG:23847 EPSG:23848 EPSG:23849 +EPSG:23850 EPSG:23851 EPSG:23852 EPSG:23853 +EPSG:23866 EPSG:23867 EPSG:23868 EPSG:23869 +EPSG:23870 EPSG:23871 EPSG:23872 EPSG:23877 +EPSG:23878 EPSG:23879 EPSG:23880 EPSG:23881 +EPSG:23882 EPSG:23883 EPSG:23884 EPSG:23886 +EPSG:23887 EPSG:23888 EPSG:23889 EPSG:23890 +EPSG:23891 EPSG:23892 EPSG:23893 EPSG:23894 +EPSG:23946 EPSG:23947 EPSG:23948 EPSG:24047 +EPSG:24048 EPSG:24100 EPSG:24200 EPSG:24305 +EPSG:24306 EPSG:24311 EPSG:24312 EPSG:24313 +EPSG:24342 EPSG:24343 EPSG:24344 EPSG:24345 +EPSG:24346 EPSG:24347 EPSG:24370 EPSG:24371 +EPSG:24372 EPSG:24373 EPSG:24374 EPSG:24375 +EPSG:24376 EPSG:24377 EPSG:24378 EPSG:24379 +EPSG:24380 EPSG:24381 EPSG:24382 EPSG:24383 +EPSG:24500 EPSG:24547 EPSG:24548 EPSG:24571 +EPSG:24600 EPSG:24718 EPSG:24719 EPSG:24720 +EPSG:24817 EPSG:24818 EPSG:24819 EPSG:24820 +EPSG:24821 EPSG:24877 EPSG:24878 EPSG:24879 +EPSG:24880 EPSG:24881 EPSG:24882 EPSG:24891 +EPSG:24892 EPSG:24893 EPSG:25000 EPSG:25231 +EPSG:25391 EPSG:25392 EPSG:25393 EPSG:25394 +EPSG:25395 EPSG:25700 EPSG:25828 EPSG:25829 +EPSG:25830 EPSG:25831 EPSG:25832 EPSG:25833 +EPSG:25834 EPSG:25835 EPSG:25836 EPSG:25837 +EPSG:25838 EPSG:25884 EPSG:25932 EPSG:26191 +EPSG:26192 EPSG:26193 EPSG:26194 EPSG:26195 +EPSG:26237 EPSG:26331 EPSG:26332 EPSG:26391 +EPSG:26392 EPSG:26393 EPSG:26432 EPSG:26591 +EPSG:26592 EPSG:26632 EPSG:26692 EPSG:26701 +EPSG:26702 EPSG:26703 EPSG:26704 EPSG:26705 +EPSG:26706 EPSG:26707 EPSG:26708 EPSG:26709 +EPSG:26710 EPSG:26711 EPSG:26712 EPSG:26713 +EPSG:26714 EPSG:26715 EPSG:26716 EPSG:26717 +EPSG:26718 EPSG:26719 EPSG:26720 EPSG:26721 +EPSG:26722 EPSG:26729 EPSG:26730 EPSG:26731 +EPSG:26732 EPSG:26733 EPSG:26734 EPSG:26735 +EPSG:26736 EPSG:26737 EPSG:26738 EPSG:26739 +EPSG:26740 EPSG:26741 EPSG:26742 EPSG:26743 +EPSG:26744 EPSG:26745 EPSG:26746 EPSG:26747 +EPSG:26748 EPSG:26749 EPSG:26750 EPSG:26751 +EPSG:26752 EPSG:26753 EPSG:26754 EPSG:26755 +EPSG:26756 EPSG:26757 EPSG:26758 EPSG:26759 +EPSG:26760 EPSG:26766 EPSG:26767 EPSG:26768 +EPSG:26769 EPSG:26770 EPSG:26771 EPSG:26772 +EPSG:26773 EPSG:26774 EPSG:26775 EPSG:26776 +EPSG:26777 EPSG:26778 EPSG:26779 EPSG:26780 +EPSG:26781 EPSG:26782 EPSG:26783 EPSG:26784 +EPSG:26785 EPSG:26786 EPSG:26787 EPSG:26791 +EPSG:26792 EPSG:26793 EPSG:26794 EPSG:26795 +EPSG:26796 EPSG:26797 EPSG:26798 EPSG:26799 +EPSG:26801 EPSG:26802 EPSG:26803 EPSG:26811 +EPSG:26812 EPSG:26813 EPSG:26814 EPSG:26815 +EPSG:26819 EPSG:26820 EPSG:26821 EPSG:26822 +EPSG:26823 EPSG:26824 EPSG:26825 EPSG:26826 +EPSG:26830 EPSG:26831 EPSG:26832 EPSG:26833 +EPSG:26834 EPSG:26835 EPSG:26836 EPSG:26837 +EPSG:26841 EPSG:26842 EPSG:26843 EPSG:26844 +EPSG:26845 EPSG:26846 EPSG:26847 EPSG:26848 +EPSG:26849 EPSG:26850 EPSG:26851 EPSG:26852 +EPSG:26853 EPSG:26854 EPSG:26855 EPSG:26856 +EPSG:26857 EPSG:26858 EPSG:26859 EPSG:26860 +EPSG:26861 EPSG:26862 EPSG:26863 EPSG:26864 +EPSG:26865 EPSG:26866 EPSG:26867 EPSG:26868 +EPSG:26869 EPSG:26870 EPSG:26891 EPSG:26892 +EPSG:26893 EPSG:26894 EPSG:26895 EPSG:26896 +EPSG:26897 EPSG:26898 EPSG:26899 EPSG:26901 +EPSG:26902 EPSG:26903 EPSG:26904 EPSG:26905 +EPSG:26906 EPSG:26907 EPSG:26908 EPSG:26909 +EPSG:26910 EPSG:26911 EPSG:26912 EPSG:26913 +EPSG:26914 EPSG:26915 EPSG:26916 EPSG:26917 +EPSG:26918 EPSG:26919 EPSG:26920 EPSG:26921 +EPSG:26922 EPSG:26923 EPSG:26929 EPSG:26930 +EPSG:26931 EPSG:26932 EPSG:26933 EPSG:26934 +EPSG:26935 EPSG:26936 EPSG:26937 EPSG:26938 +EPSG:26939 EPSG:26940 EPSG:26941 EPSG:26942 +EPSG:26943 EPSG:26944 EPSG:26945 EPSG:26946 +EPSG:26948 EPSG:26949 EPSG:26950 EPSG:26951 +EPSG:26952 EPSG:26953 EPSG:26954 EPSG:26955 +EPSG:26956 EPSG:26957 EPSG:26958 EPSG:26959 +EPSG:26960 EPSG:26961 EPSG:26962 EPSG:26963 +EPSG:26964 EPSG:26965 EPSG:26966 EPSG:26967 +EPSG:26968 EPSG:26969 EPSG:26970 EPSG:26971 +EPSG:26972 EPSG:26973 EPSG:26974 EPSG:26975 +EPSG:26976 EPSG:26977 EPSG:26978 EPSG:26979 +EPSG:26980 EPSG:26981 EPSG:26982 EPSG:26983 +EPSG:26984 EPSG:26985 EPSG:26986 EPSG:26987 +EPSG:26988 EPSG:26989 EPSG:26990 EPSG:26991 +EPSG:26992 EPSG:26993 EPSG:26994 EPSG:26995 +EPSG:26996 EPSG:26997 EPSG:26998 EPSG:27037 +EPSG:27038 EPSG:27039 EPSG:27040 EPSG:27120 +EPSG:27200 EPSG:27205 EPSG:27206 EPSG:27207 +EPSG:27208 EPSG:27209 EPSG:27210 EPSG:27211 +EPSG:27212 EPSG:27213 EPSG:27214 EPSG:27215 +EPSG:27216 EPSG:27217 EPSG:27218 EPSG:27219 +EPSG:27220 EPSG:27221 EPSG:27222 EPSG:27223 +EPSG:27224 EPSG:27225 EPSG:27226 EPSG:27227 +EPSG:27228 EPSG:27229 EPSG:27230 EPSG:27231 +EPSG:27232 EPSG:27258 EPSG:27259 EPSG:27260 +EPSG:27291 EPSG:27292 EPSG:27391 EPSG:27392 +EPSG:27393 EPSG:27394 EPSG:27395 EPSG:27396 +EPSG:27397 EPSG:27398 EPSG:27429 EPSG:27492 +EPSG:27493 EPSG:27500 EPSG:27561 EPSG:27562 +EPSG:27563 EPSG:27564 EPSG:27571 EPSG:27572 +EPSG:27573 EPSG:27574 EPSG:27581 EPSG:27582 +EPSG:27583 EPSG:27584 EPSG:27591 EPSG:27592 +EPSG:27593 EPSG:27594 EPSG:27700 EPSG:28191 +EPSG:28192 EPSG:28193 EPSG:28232 EPSG:28348 +EPSG:28349 EPSG:28350 EPSG:28351 EPSG:28352 +EPSG:28353 EPSG:28354 EPSG:28355 EPSG:28356 +EPSG:28357 EPSG:28358 EPSG:28402 EPSG:28403 +EPSG:28404 EPSG:28405 EPSG:28406 EPSG:28407 +EPSG:28408 EPSG:28409 EPSG:28410 EPSG:28411 +EPSG:28412 EPSG:28413 EPSG:28414 EPSG:28415 +EPSG:28416 EPSG:28417 EPSG:28418 EPSG:28419 +EPSG:28420 EPSG:28421 EPSG:28422 EPSG:28423 +EPSG:28424 EPSG:28425 EPSG:28426 EPSG:28427 +EPSG:28428 EPSG:28429 EPSG:28430 EPSG:28431 +EPSG:28432 EPSG:28462 EPSG:28463 EPSG:28464 +EPSG:28465 EPSG:28466 EPSG:28467 EPSG:28468 +EPSG:28469 EPSG:28470 EPSG:28471 EPSG:28472 +EPSG:28473 EPSG:28474 EPSG:28475 EPSG:28476 +EPSG:28477 EPSG:28478 EPSG:28479 EPSG:28480 +EPSG:28481 EPSG:28482 EPSG:28483 EPSG:28484 +EPSG:28485 EPSG:28486 EPSG:28487 EPSG:28488 +EPSG:28489 EPSG:28490 EPSG:28491 EPSG:28492 +EPSG:28600 EPSG:28991 EPSG:28992 EPSG:29100 +EPSG:29101 EPSG:29118 EPSG:29119 EPSG:29120 +EPSG:29121 EPSG:29122 EPSG:29168 EPSG:29169 +EPSG:29170 EPSG:29171 EPSG:29172 EPSG:29177 +EPSG:29178 EPSG:29179 EPSG:29180 EPSG:29181 +EPSG:29182 EPSG:29183 EPSG:29184 EPSG:29185 +EPSG:29187 EPSG:29188 EPSG:29189 EPSG:29190 +EPSG:29191 EPSG:29192 EPSG:29193 EPSG:29194 +EPSG:29195 EPSG:29220 EPSG:29221 EPSG:29333 +EPSG:29371 EPSG:29373 EPSG:29375 EPSG:29377 +EPSG:29379 EPSG:29381 EPSG:29383 EPSG:29385 +EPSG:29635 EPSG:29636 EPSG:29700 EPSG:29701 +EPSG:29702 EPSG:29738 EPSG:29739 EPSG:29849 +EPSG:29850 EPSG:29871 EPSG:29872 EPSG:29873 +EPSG:29900 EPSG:29901 EPSG:29902 EPSG:29903 +EPSG:30161 EPSG:30162 EPSG:30163 EPSG:30164 +EPSG:30165 EPSG:30166 EPSG:30167 EPSG:30168 +EPSG:30169 EPSG:30170 EPSG:30171 EPSG:30172 +EPSG:30173 EPSG:30174 EPSG:30175 EPSG:30176 +EPSG:30177 EPSG:30178 EPSG:30179 EPSG:30200 +EPSG:30339 EPSG:30340 EPSG:30491 EPSG:30492 +EPSG:30493 EPSG:30494 EPSG:30729 EPSG:30730 +EPSG:30731 EPSG:30732 EPSG:30791 EPSG:30792 +EPSG:30800 EPSG:31028 EPSG:31121 EPSG:31154 +EPSG:31170 EPSG:31171 EPSG:31251 EPSG:31252 +EPSG:31253 EPSG:31254 EPSG:31255 EPSG:31256 +EPSG:31257 EPSG:31258 EPSG:31259 EPSG:31265 +EPSG:31266 EPSG:31267 EPSG:31268 EPSG:31275 +EPSG:31276 EPSG:31277 EPSG:31278 EPSG:31279 +EPSG:31281 EPSG:31282 EPSG:31283 EPSG:31284 +EPSG:31285 EPSG:31286 EPSG:31287 EPSG:31288 +EPSG:31289 EPSG:31290 EPSG:31291 EPSG:31292 +EPSG:31293 EPSG:31294 EPSG:31295 EPSG:31296 +EPSG:31297 EPSG:31300 EPSG:31370 EPSG:31461 +EPSG:31462 EPSG:31463 EPSG:31464 EPSG:31465 +EPSG:31466 EPSG:31467 EPSG:31468 EPSG:31469 +EPSG:31528 EPSG:31529 EPSG:31600 EPSG:31700 +EPSG:31838 EPSG:31839 EPSG:31900 EPSG:31901 +EPSG:31965 EPSG:31966 EPSG:31967 EPSG:31968 +EPSG:31969 EPSG:31970 EPSG:31971 EPSG:31972 +EPSG:31973 EPSG:31974 EPSG:31975 EPSG:31976 +EPSG:31977 EPSG:31978 EPSG:31979 EPSG:31980 +EPSG:31981 EPSG:31982 EPSG:31983 EPSG:31984 +EPSG:31985 EPSG:31986 EPSG:31987 EPSG:31988 +EPSG:31989 EPSG:31990 EPSG:31991 EPSG:31992 +EPSG:31993 EPSG:31994 EPSG:31995 EPSG:31996 +EPSG:31997 EPSG:31998 EPSG:31999 EPSG:32000 +EPSG:32001 EPSG:32002 EPSG:32003 EPSG:32005 +EPSG:32006 EPSG:32007 EPSG:32008 EPSG:32009 +EPSG:32010 EPSG:32011 EPSG:32012 EPSG:32013 +EPSG:32014 EPSG:32015 EPSG:32016 EPSG:32017 +EPSG:32018 EPSG:32019 EPSG:32020 EPSG:32021 +EPSG:32022 EPSG:32023 EPSG:32024 EPSG:32025 +EPSG:32026 EPSG:32027 EPSG:32028 EPSG:32029 +EPSG:32030 EPSG:32031 EPSG:32033 EPSG:32034 +EPSG:32035 EPSG:32036 EPSG:32037 EPSG:32038 +EPSG:32039 EPSG:32040 EPSG:32041 EPSG:32042 +EPSG:32043 EPSG:32044 EPSG:32045 EPSG:32046 +EPSG:32047 EPSG:32048 EPSG:32049 EPSG:32050 +EPSG:32051 EPSG:32052 EPSG:32053 EPSG:32054 +EPSG:32055 EPSG:32056 EPSG:32057 EPSG:32058 +EPSG:32061 EPSG:32062 EPSG:32064 EPSG:32065 +EPSG:32066 EPSG:32067 EPSG:32074 EPSG:32075 +EPSG:32076 EPSG:32077 EPSG:32081 EPSG:32082 +EPSG:32083 EPSG:32084 EPSG:32085 EPSG:32086 +EPSG:32098 EPSG:32099 EPSG:32100 EPSG:32104 +EPSG:32107 EPSG:32108 EPSG:32109 EPSG:32110 +EPSG:32111 EPSG:32112 EPSG:32113 EPSG:32114 +EPSG:32115 EPSG:32116 EPSG:32117 EPSG:32118 +EPSG:32119 EPSG:32120 EPSG:32121 EPSG:32122 +EPSG:32123 EPSG:32124 EPSG:32125 EPSG:32126 +EPSG:32127 EPSG:32128 EPSG:32129 EPSG:32130 +EPSG:32133 EPSG:32134 EPSG:32135 EPSG:32136 +EPSG:32137 EPSG:32138 EPSG:32139 EPSG:32140 +EPSG:32141 EPSG:32142 EPSG:32143 EPSG:32144 +EPSG:32145 EPSG:32146 EPSG:32147 EPSG:32148 +EPSG:32149 EPSG:32150 EPSG:32151 EPSG:32152 +EPSG:32153 EPSG:32154 EPSG:32155 EPSG:32156 +EPSG:32157 EPSG:32158 EPSG:32161 EPSG:32164 +EPSG:32165 EPSG:32166 EPSG:32167 EPSG:32180 +EPSG:32181 EPSG:32182 EPSG:32183 EPSG:32184 +EPSG:32185 EPSG:32186 EPSG:32187 EPSG:32188 +EPSG:32189 EPSG:32190 EPSG:32191 EPSG:32192 +EPSG:32193 EPSG:32194 EPSG:32195 EPSG:32196 +EPSG:32197 EPSG:32198 EPSG:32199 EPSG:32201 +EPSG:32202 EPSG:32203 EPSG:32204 EPSG:32205 +EPSG:32206 EPSG:32207 EPSG:32208 EPSG:32209 +EPSG:32210 EPSG:32211 EPSG:32212 EPSG:32213 +EPSG:32214 EPSG:32215 EPSG:32216 EPSG:32217 +EPSG:32218 EPSG:32219 EPSG:32220 EPSG:32221 +EPSG:32222 EPSG:32223 EPSG:32224 EPSG:32225 +EPSG:32226 EPSG:32227 EPSG:32228 EPSG:32229 +EPSG:32230 EPSG:32231 EPSG:32232 EPSG:32233 +EPSG:32234 EPSG:32235 EPSG:32236 EPSG:32237 +EPSG:32238 EPSG:32239 EPSG:32240 EPSG:32241 +EPSG:32242 EPSG:32243 EPSG:32244 EPSG:32245 +EPSG:32246 EPSG:32247 EPSG:32248 EPSG:32249 +EPSG:32250 EPSG:32251 EPSG:32252 EPSG:32253 +EPSG:32254 EPSG:32255 EPSG:32256 EPSG:32257 +EPSG:32258 EPSG:32259 EPSG:32260 EPSG:32301 +EPSG:32302 EPSG:32303 EPSG:32304 EPSG:32305 +EPSG:32306 EPSG:32307 EPSG:32308 EPSG:32309 +EPSG:32310 EPSG:32311 EPSG:32312 EPSG:32313 +EPSG:32314 EPSG:32315 EPSG:32316 EPSG:32317 +EPSG:32318 EPSG:32319 EPSG:32320 EPSG:32321 +EPSG:32322 EPSG:32323 EPSG:32324 EPSG:32325 +EPSG:32326 EPSG:32327 EPSG:32328 EPSG:32329 +EPSG:32330 EPSG:32331 EPSG:32332 EPSG:32333 +EPSG:32334 EPSG:32335 EPSG:32336 EPSG:32337 +EPSG:32338 EPSG:32339 EPSG:32340 EPSG:32341 +EPSG:32342 EPSG:32343 EPSG:32344 EPSG:32345 +EPSG:32346 EPSG:32347 EPSG:32348 EPSG:32349 +EPSG:32350 EPSG:32351 EPSG:32352 EPSG:32353 +EPSG:32354 EPSG:32355 EPSG:32356 EPSG:32357 +EPSG:32358 EPSG:32359 EPSG:32360 EPSG:32401 +EPSG:32402 EPSG:32403 EPSG:32404 EPSG:32405 +EPSG:32406 EPSG:32407 EPSG:32408 EPSG:32409 +EPSG:32410 EPSG:32411 EPSG:32412 EPSG:32413 +EPSG:32414 EPSG:32415 EPSG:32416 EPSG:32417 +EPSG:32418 EPSG:32419 EPSG:32420 EPSG:32421 +EPSG:32422 EPSG:32423 EPSG:32424 EPSG:32425 +EPSG:32426 EPSG:32427 EPSG:32428 EPSG:32429 +EPSG:32430 EPSG:32431 EPSG:32432 EPSG:32433 +EPSG:32434 EPSG:32435 EPSG:32436 EPSG:32437 +EPSG:32438 EPSG:32439 EPSG:32440 EPSG:32441 +EPSG:32442 EPSG:32443 EPSG:32444 EPSG:32445 +EPSG:32446 EPSG:32447 EPSG:32448 EPSG:32449 +EPSG:32450 EPSG:32451 EPSG:32452 EPSG:32453 +EPSG:32454 EPSG:32455 EPSG:32456 EPSG:32457 +EPSG:32458 EPSG:32459 EPSG:32460 EPSG:32501 +EPSG:32502 EPSG:32503 EPSG:32504 EPSG:32505 +EPSG:32506 EPSG:32507 EPSG:32508 EPSG:32509 +EPSG:32510 EPSG:32511 EPSG:32512 EPSG:32513 +EPSG:32514 EPSG:32515 EPSG:32516 EPSG:32517 +EPSG:32518 EPSG:32519 EPSG:32520 EPSG:32521 +EPSG:32522 EPSG:32523 EPSG:32524 EPSG:32525 +EPSG:32526 EPSG:32527 EPSG:32528 EPSG:32529 +EPSG:32530 EPSG:32531 EPSG:32532 EPSG:32533 +EPSG:32534 EPSG:32535 EPSG:32536 EPSG:32537 +EPSG:32538 EPSG:32539 EPSG:32540 EPSG:32541 +EPSG:32542 EPSG:32543 EPSG:32544 EPSG:32545 +EPSG:32546 EPSG:32547 EPSG:32548 EPSG:32549 +EPSG:32550 EPSG:32551 EPSG:32552 EPSG:32553 +EPSG:32554 EPSG:32555 EPSG:32556 EPSG:32557 +EPSG:32558 EPSG:32559 EPSG:32560 EPSG:32600 +EPSG:32601 EPSG:32602 EPSG:32603 EPSG:32604 +EPSG:32605 EPSG:32606 EPSG:32607 EPSG:32608 +EPSG:32609 EPSG:32610 EPSG:32611 EPSG:32612 +EPSG:32613 EPSG:32614 EPSG:32615 EPSG:32616 +EPSG:32617 EPSG:32618 EPSG:32619 EPSG:32620 +EPSG:32621 EPSG:32622 EPSG:32623 EPSG:32624 +EPSG:32625 EPSG:32626 EPSG:32627 EPSG:32628 +EPSG:32629 EPSG:32630 EPSG:32631 EPSG:32632 +EPSG:32633 EPSG:32634 EPSG:32635 EPSG:32636 +EPSG:32637 EPSG:32638 EPSG:32639 EPSG:32640 +EPSG:32641 EPSG:32642 EPSG:32643 EPSG:32644 +EPSG:32645 EPSG:32646 EPSG:32647 EPSG:32648 +EPSG:32649 EPSG:32650 EPSG:32651 EPSG:32652 +EPSG:32653 EPSG:32654 EPSG:32655 EPSG:32656 +EPSG:32657 EPSG:32658 EPSG:32659 EPSG:32660 +EPSG:32661 EPSG:32662 EPSG:32663 EPSG:32664 +EPSG:32665 EPSG:32666 EPSG:32667 EPSG:32700 +EPSG:32701 EPSG:32702 EPSG:32703 EPSG:32704 +EPSG:32705 EPSG:32706 EPSG:32707 EPSG:32708 +EPSG:32709 EPSG:32710 EPSG:32711 EPSG:32712 +EPSG:32713 EPSG:32714 EPSG:32715 EPSG:32716 +EPSG:32717 EPSG:32718 EPSG:32719 EPSG:32720 +EPSG:32721 EPSG:32722 EPSG:32723 EPSG:32724 +EPSG:32725 EPSG:32726 EPSG:32727 EPSG:32728 +EPSG:32729 EPSG:32730 EPSG:32731 EPSG:32732 +EPSG:32733 EPSG:32734 EPSG:32735 EPSG:32736 +EPSG:32737 EPSG:32738 EPSG:32739 EPSG:32740 +EPSG:32741 EPSG:32742 EPSG:32743 EPSG:32744 +EPSG:32745 EPSG:32746 EPSG:32747 EPSG:32748 +EPSG:32749 EPSG:32750 EPSG:32751 EPSG:32752 +EPSG:32753 EPSG:32754 EPSG:32755 EPSG:32756 +EPSG:32757 EPSG:32758 EPSG:32759 EPSG:32760 +EPSG:32761 EPSG:32766 EPSG:61206405 EPSG:61216405 +EPSG:61226405 EPSG:61236405 EPSG:61246405 +EPSG:61266405 EPSG:61266413 EPSG:61276405 +EPSG:61286405 EPSG:61296405 EPSG:61306405 +EPSG:61306413 EPSG:61316405 EPSG:61326405 +EPSG:61336405 EPSG:61346405 EPSG:61356405 +EPSG:61366405 EPSG:61376405 EPSG:61386405 +EPSG:61396405 EPSG:61406405 EPSG:61406413 +EPSG:61416405 EPSG:61426405 EPSG:61436405 +EPSG:61446405 EPSG:61456405 EPSG:61466405 +EPSG:61476405 EPSG:61486405 EPSG:61486413 +EPSG:61496405 EPSG:61506405 EPSG:61516405 +EPSG:61516413 EPSG:61526405 EPSG:61526413 +EPSG:61536405 EPSG:61546405 EPSG:61556405 +EPSG:61566405 EPSG:61576405 EPSG:61586405 +EPSG:61596405 EPSG:61606405 EPSG:61616405 +EPSG:61626405 EPSG:61636405 EPSG:61636413 +EPSG:61646405 EPSG:61656405 EPSG:61666405 +EPSG:61676405 EPSG:61676413 EPSG:61686405 +EPSG:61696405 EPSG:61706405 EPSG:61706413 +EPSG:61716405 EPSG:61716413 EPSG:61736405 +EPSG:61736413 EPSG:61746405 EPSG:61756405 +EPSG:61766405 EPSG:61766413 EPSG:61786405 +EPSG:61796405 EPSG:61806405 EPSG:61806413 +EPSG:61816405 EPSG:61826405 EPSG:61836405 +EPSG:61846405 EPSG:61886405 EPSG:61896405 +EPSG:61896413 EPSG:61906405 EPSG:61906413 +EPSG:61916405 EPSG:61926405 EPSG:61936405 +EPSG:61946405 EPSG:61956405 EPSG:61966405 +EPSG:61976405 EPSG:61986405 EPSG:61996405 +EPSG:62006405 EPSG:62016405 EPSG:62026405 +EPSG:62036405 EPSG:62046405 EPSG:62056405 +EPSG:62066405 EPSG:62076405 EPSG:62086405 +EPSG:62096405 EPSG:62106405 EPSG:62116405 +EPSG:62126405 EPSG:62136405 EPSG:62146405 +EPSG:62156405 EPSG:62166405 EPSG:62186405 +EPSG:62196405 EPSG:62206405 EPSG:62216405 +EPSG:62226405 EPSG:62236405 EPSG:62246405 +EPSG:62256405 EPSG:62276405 EPSG:62296405 +EPSG:62306405 EPSG:62316405 EPSG:62326405 +EPSG:62336405 EPSG:62366405 EPSG:62376405 +EPSG:62386405 EPSG:62396405 EPSG:62406405 +EPSG:62416405 EPSG:62426405 EPSG:62436405 +EPSG:62446405 EPSG:62456405 EPSG:62466405 +EPSG:62476405 EPSG:62486405 EPSG:62496405 +EPSG:62506405 EPSG:62516405 EPSG:62526405 +EPSG:62536405 EPSG:62546405 EPSG:62556405 +EPSG:62566405 EPSG:62576405 EPSG:62586405 +EPSG:62586413 EPSG:62596405 EPSG:62616405 +EPSG:62626405 EPSG:62636405 EPSG:62646405 +EPSG:62656405 EPSG:62666405 EPSG:62676405 +EPSG:62686405 EPSG:62696405 EPSG:62706405 +EPSG:62716405 EPSG:62726405 EPSG:62736405 +EPSG:62746405 EPSG:62756405 EPSG:62766405 +EPSG:62776405 EPSG:62786405 EPSG:62796405 +EPSG:62806405 EPSG:62816405 EPSG:62826405 +EPSG:62836405 EPSG:62836413 EPSG:62846405 +EPSG:62856405 EPSG:62866405 EPSG:62886405 +EPSG:62896405 EPSG:62926405 EPSG:62936405 +EPSG:62956405 EPSG:62976405 EPSG:62986405 +EPSG:62996405 EPSG:63006405 EPSG:63016405 +EPSG:63026405 EPSG:63036405 EPSG:63046405 +EPSG:63066405 EPSG:63076405 EPSG:63086405 +EPSG:63096405 EPSG:63106405 EPSG:63116405 +EPSG:63126405 EPSG:63136405 EPSG:63146405 +EPSG:63156405 EPSG:63166405 EPSG:63176405 +EPSG:63186405 EPSG:63196405 EPSG:63226405 +EPSG:63246405 EPSG:63266405 EPSG:63266406 +EPSG:63266407 EPSG:63266408 EPSG:63266409 +EPSG:63266410 EPSG:63266411 EPSG:63266412 +EPSG:63266413 EPSG:63266414 EPSG:63266415 +EPSG:63266416 EPSG:63266417 EPSG:63266418 +EPSG:63266419 EPSG:63266420 EPSG:66006405 +EPSG:66016405 EPSG:66026405 EPSG:66036405 +EPSG:66046405 EPSG:66056405 EPSG:66066405 +EPSG:66076405 EPSG:66086405 EPSG:66096405 +EPSG:66106405 EPSG:66116405 EPSG:66126405 +EPSG:66126413 EPSG:66136405 EPSG:66146405 +EPSG:66156405 EPSG:66166405 EPSG:66186405 +EPSG:66196405 EPSG:66196413 EPSG:66206405 +EPSG:66216405 EPSG:66226405 EPSG:66236405 +EPSG:66246405 EPSG:66246413 EPSG:66256405 +EPSG:66266405 EPSG:66276405 EPSG:66276413 +EPSG:66286405 EPSG:66296405 EPSG:66306405 +EPSG:66316405 EPSG:66326405 EPSG:66336405 +EPSG:66346405 EPSG:66356405 EPSG:66366405 +EPSG:66376405 EPSG:66386405 EPSG:66396405 +EPSG:66406405 EPSG:66406413 EPSG:66416405 +EPSG:66426405 EPSG:66436405 EPSG:66446405 +EPSG:66456405 EPSG:66456413 EPSG:66466405 +EPSG:66576405 EPSG:66586405 EPSG:66596405 +EPSG:66596413 EPSG:66606405 EPSG:66616405 +EPSG:66616413 EPSG:66636405 EPSG:66646405 +EPSG:66656405 EPSG:66666405 EPSG:66676405 +EPSG:68016405 EPSG:68026405 EPSG:68036405 +EPSG:68046405 EPSG:68056405 EPSG:68066405 +EPSG:68086405 EPSG:68096405 EPSG:68136405 +EPSG:68146405 EPSG:68156405 EPSG:68186405 +EPSG:68206405 EPSG:69036405 EPSG:42302 +EPSG:42301 EPSG:54009 EPSG:900913 EPSG:45556 +EPSG:45555 EPSG:54004 EPSG:41001 EPSG:42311 +EPSG:42310 EPSG:18001 EPSG:54012 EPSG:100003 +EPSG:42106 EPSG:100002 EPSG:42105 EPSG:100001 +EPSG:42309 EPSG:42104 EPSG:42308 EPSG:42103 +EPSG:42307 EPSG:42102 EPSG:42306 EPSG:42101 +EPSG:42305 EPSG:42304 EPSG:42303 +${featureTypeInfo} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/WEB-INF/web.xml b/geoportal_1/src/main/webapp/WEB-INF/web.xml index fa7e1b5..a576bf0 100644 --- a/geoportal_1/src/main/webapp/WEB-INF/web.xml +++ b/geoportal_1/src/main/webapp/WEB-INF/web.xml @@ -1,61 +1,64 @@ - - OpenGeoPortal - - openGeoPortalHome.jsp - - - - contextConfigLocation - /WEB-INF/applicationContext.xml /WEB-INF/security-app-context.xml + + OpenGeoportal + + contextConfigLocation + /WEB-INF/applicationContext.xml - - jsonpCallbackFilter - org.springframework.web.filter.DelegatingFilterProxy - - - - jsonpCallbackFilter - /login - - - jsonpCallbackFilter - /loginStatus - - - jsonpCallbackFilter - /logout - - - springSecurityFilterChain - org.springframework.web.filter.DelegatingFilterProxy + + appServlet + org.springframework.web.servlet.DispatcherServlet + 2 + + + appServlet + / + + + jsonpCallbackFilter + org.springframework.web.filter.DelegatingFilterProxy + + + jsonpCallbackFilter + /* + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy - - springSecurityFilterChain - /* + springSecurityFilterChain + /* - - - org.springframework.web.context.request.RequestContextListener - + + org.springframework.web.context.request.RequestContextListener - org.springframework.web.context.ContextLoaderListener - + org.springframework.web.context.ContextLoaderListener + - - org.OpenGeoPortal.Download.RequestStatusSessionListener - - - - appServlet - org.springframework.web.servlet.DispatcherServlet - 1 - + org.opengeoportal.download.RequestStatusSessionListener + + + + CORS + com.thetransactioncompany.cors.CORSFilter + + cors.supportedMethods + GET, HEAD, POST, PUT, DELETE, OPTIONS + + + cors.supportedHeaders + Content-Type, X-Requested-With, Origin, Accept + - - appServlet - / - + + + CORS + /* + diff --git a/geoportal_1/src/main/webapp/WEB-INF/wro.xml b/geoportal_1/src/main/webapp/WEB-INF/wro.xml new file mode 100644 index 0000000..50c3763 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/wro.xml @@ -0,0 +1,56 @@ + + + + + /resources/css/google.css + /resources/css/dataTable.css + /resources/css/mapDiv.css + /resources/css/structure.css + /resources/css/localize.css + + /resources/javascript/lib/utility.js + /resources/javascript/lib/templates/template.js + /resources/javascript/lib/config.js + /resources/javascript/lib/analytics.js + /resources/javascript/lib/commonControls.js + /resources/javascript/lib/models/resultItem.js + /resources/javascript/lib/models/basemapModel.js + /resources/javascript/lib/models/tableConfig.js + /resources/javascript/lib/models/tableLayerSettings.js + /resources/javascript/lib/models/tableSortSettings.js + /resources/javascript/lib/models/previewedLayers.js + /resources/javascript/lib/models/cartCollection.js + /resources/javascript/lib/models/downloadQueue.js + /resources/javascript/lib/models/loadIndicator.js + /resources/javascript/lib/login.js + /resources/javascript/lib/models/appSettings.js + /resources/javascript/lib/models/queryModel.js + /resources/javascript/lib/models/leftPanelModel.js + /resources/javascript/lib/views/selectBoxes.js + /resources/javascript/lib/views/mapLoadIndicatorView.js + /resources/javascript/lib/views/cartHeader.js + /resources/javascript/lib/views/cartRowView.js + /resources/javascript/lib/views/cartView.js + /resources/javascript/lib/views/leftPanel.js + /resources/javascript/lib/views/tableRowSettings.js + /resources/javascript/lib/models/externalPreviewWindowsCollection.js + /resources/javascript/lib/views/cartActionView.js + /resources/javascript/lib/views/downloadFlow.js + /resources/javascript/lib/views/shareCartView.js + /resources/javascript/lib/views/mapItView.js + /resources/javascript/lib/views/dynamicWebServicesView.js + /resources/javascript/lib/views/search.js + /resources/javascript/lib/views/previewControls.js + /resources/javascript/lib/views/previewedLayersPanel.js + /resources/javascript/lib/layerTable.js + /resources/javascript/lib/solr.js + /resources/javascript/lib/searchResultsTable.js + /resources/javascript/lib/geoCommonsExport.js + /resources/javascript/lib/mapDiv.js + /resources/javascript/lib/userInterface.js + + + ogpLib + /resources/javascript/lib/main.js + + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/xml/FGDC_V2_a.xsl b/geoportal_1/src/main/webapp/WEB-INF/xml/FGDC_V2_a.xsl similarity index 63% rename from geoportal_1/src/main/webapp/resources/xml/FGDC_V2_a.xsl rename to geoportal_1/src/main/webapp/WEB-INF/xml/FGDC_V2_a.xsl index 02f8546..4811c2c 100644 --- a/geoportal_1/src/main/webapp/resources/xml/FGDC_V2_a.xsl +++ b/geoportal_1/src/main/webapp/WEB-INF/xml/FGDC_V2_a.xsl @@ -1,107 +1,103 @@ - - + + - - - -

      - -

      -

      Metadata:

      -
      + + + + + + + + +
      -
      +
      @@ -115,7 +111,7 @@
      - +
      @@ -131,7 +127,7 @@ Abstract:
      - +
      @@ -140,7 +136,7 @@ Purpose:
      - +
      @@ -149,7 +145,7 @@ Supplemental_Information:
      - +
      @@ -162,13 +158,13 @@
      - +
      Currentness_Reference:
      - +
      @@ -183,11 +179,15 @@
      - Progress:
      + Progress: + +
      - Maintenance_and_Update_Frequency:
      + Maintenance_and_Update_Frequency: + +
      @@ -206,13 +206,21 @@
      - West_Bounding_Coordinate:
      + West_Bounding_Coordinate: + +
      - East_Bounding_Coordinate:
      + East_Bounding_Coordinate: + +
      - North_Bounding_Coordinate:
      + North_Bounding_Coordinate: + +
      - South_Bounding_Coordinate:
      + South_Bounding_Coordinate: + +
      @@ -228,8 +236,8 @@
      - - + +
      @@ -239,8 +247,8 @@
      - - + +
      @@ -265,11 +273,15 @@
      - Theme_Keyword_Thesaurus:
      + Theme_Keyword_Thesaurus: + +
      - Theme_Keyword:
      + Theme_Keyword: + +
      @@ -283,11 +295,15 @@
      - Place_Keyword_Thesaurus:
      + Place_Keyword_Thesaurus: + +
      - Place_Keyword:
      + Place_Keyword: + +
      @@ -301,11 +317,15 @@
      - Stratum_Keyword_Thesaurus:
      + Stratum_Keyword_Thesaurus: + +
      - Stratum_Keyword:
      + Stratum_Keyword: + +
      @@ -319,11 +339,15 @@
      - Temporal_Keyword_Thesaurus:
      + Temporal_Keyword_Thesaurus: + +
      - Temporal_Keyword:
      + Temporal_Keyword: + +
      @@ -334,14 +358,16 @@
      - Access_Constraints:
      + Access_Constraints: + +
      Use_Constraints:
      - +
      @@ -351,7 +377,7 @@
      - +
      @@ -366,8 +392,9 @@
      Browse_Graphic_File_Name: - - + +
      @@ -376,12 +403,14 @@ Browse_Graphic_File_Description:
      - +
      - Browse_Graphic_File_Type:
      + Browse_Graphic_File_Type: + +
      @@ -392,7 +421,7 @@ Data_Set_Credit:
      - +
      @@ -404,15 +433,21 @@
      - Security_Classification_System:
      + Security_Classification_System: + +
      - Security_Classification:
      + Security_Classification: + +
      - Security_Handling_Description:
      + Security_Handling_Description: + +
      @@ -423,7 +458,7 @@ Native_Data_Set_Environment:
      - +
      @@ -433,7 +468,7 @@
      - +
      @@ -445,7 +480,7 @@ -
      +
      @@ -464,7 +499,7 @@ Attribute_Accuracy_Report:
      - +
      @@ -475,14 +510,16 @@
      - Attribute_Accuracy_Value:
      + Attribute_Accuracy_Value: + +
      Attribute_Accuracy_Explanation:
      - +
      @@ -497,7 +534,7 @@ Logical_Consistency_Report:
      - +
      @@ -505,7 +542,7 @@ Completeness_Report:
      - +
      @@ -526,7 +563,7 @@ Horizontal_Positional_Accuracy_Report:
      - +
      @@ -537,14 +574,16 @@
      - Horizontal_Positional_Accuracy_Value:
      + Horizontal_Positional_Accuracy_Value: + +
      Horizontal_Positional_Accuracy_Explanation:
      - +
      @@ -564,7 +603,7 @@ Vertical_Positional_Accuracy_Report:
      - +
      @@ -575,14 +614,16 @@
      - Vertical_Positional_Accuracy_Value:
      + Vertical_Positional_Accuracy_Value: + +
      Vertical_Positional_Accuracy_Explanation:
      - +
      @@ -613,17 +654,21 @@
      - +
      - Source_Scale_Denominator:
      + Source_Scale_Denominator: + +
      - Type_of_Source_Media:
      + Type_of_Source_Media: + +
      @@ -632,13 +677,13 @@
      - +
      Source_Currentness_Reference:
      - +
      @@ -650,7 +695,7 @@ Source_Citation_Abbreviation:
      - +
      @@ -658,7 +703,7 @@ Source_Contribution:
      - +
      @@ -676,7 +721,7 @@ Process_Description:
      - +
      @@ -684,23 +729,27 @@ Source_Used_Citation_Abbreviation:
      - +
      - Process_Date:
      + Process_Date: + +
      - Process_Time:
      + Process_Time: + +
      Source_Produced_Citation_Abbreviation:
      - +
      @@ -709,7 +758,7 @@
      - +
      @@ -721,7 +770,9 @@
      - Cloud_Cover:
      + Cloud_Cover: + +
      @@ -731,7 +782,7 @@ -
      +
      @@ -744,13 +795,15 @@ Indirect_Spatial_Reference_Method:
      - +
      - Direct_Spatial_Reference_Method:
      + Direct_Spatial_Reference_Method: + +
      @@ -767,11 +820,15 @@
      - SDTS_Point_and_Vector_Object_Type:
      + SDTS_Point_and_Vector_Object_Type: + +
      - Point_and_Vector_Object_Count:
      + Point_and_Vector_Object_Count: + +
      @@ -785,7 +842,9 @@
      - VPF_Topology_Level:
      + VPF_Topology_Level: + +
      @@ -795,11 +854,15 @@
      - VPF_Point_and_Vector_Object_Type:
      + VPF_Point_and_Vector_Object_Type: + +
      - Point_and_Vector_Object_Count:
      + Point_and_Vector_Object_Count: + +
      @@ -819,19 +882,27 @@
      - Raster_Object_Type:
      + Raster_Object_Type: + +
      - Row_Count:
      + Row_Count: + +
      - Column_Count:
      + Column_Count: + +
      - Vertical_Count:
      + Vertical_Count: + +
      @@ -844,7 +915,7 @@ -
      +
      @@ -866,15 +937,21 @@
      - Latitude_Resolution:
      + Latitude_Resolution: + +
      - Longitude_Resolution:
      + Longitude_Resolution: + +
      - Geographic_Coordinate_Units:
      + Geographic_Coordinate_Units: + +
      @@ -894,7 +971,9 @@
      - Map_Projection_Name:
      + Map_Projection_Name: + +
      @@ -948,8 +1027,8 @@
      - - + +
      @@ -984,9 +1063,9 @@
      - - - + + +
      @@ -1001,10 +1080,10 @@
      - - - - + + + +
      @@ -1024,7 +1103,7 @@ - +
      @@ -1037,7 +1116,9 @@
      - Grid_Coordinate_System_Name:
      + Grid_Coordinate_System_Name: + +
      @@ -1048,14 +1129,16 @@
      - UTM_Zone_Number:
      + UTM_Zone_Number: + +
      Transverse_Mercator:
      - +
      @@ -1068,14 +1151,16 @@
      - UPS_Zone_Identifier:
      + UPS_Zone_Identifier: + +
      Polar_Stereographic:
      - +
      @@ -1088,32 +1173,34 @@
      - SPCS_Zone_Identifier:
      + SPCS_Zone_Identifier: + +
      Lambert_Conformal_Conic:
      - +
      Transverse_Mercator:
      - +
      Oblique_Mercator:
      - +
      Polyconic:
      - +
      @@ -1126,20 +1213,22 @@
      - ARC_System_Zone_Identifier:
      + ARC_System_Zone_Identifier: + +
      Equirectangular:
      - +
      Azimuthal_Equidistant:
      - +
      @@ -1149,7 +1238,7 @@ Other_Grid_System's_Definition:
      - +
      @@ -1167,7 +1256,7 @@ Local_Planar_Description:
      - +
      @@ -1175,7 +1264,7 @@ Local_Planar_Georeference_Information:
      - +
      @@ -1190,7 +1279,9 @@
      - Planar_Coordinate_Encoding_Method:
      + Planar_Coordinate_Encoding_Method: + +
      @@ -1200,11 +1291,15 @@
      - Abscissa_Resolution:
      + Abscissa_Resolution: + +
      - Ordinate_Resolution:
      + Ordinate_Resolution: + +
      @@ -1217,30 +1312,42 @@
      - Distance_Resolution:
      + Distance_Resolution: + +
      - Bearing_Resolution:
      + Bearing_Resolution: + +
      - Bearing_Units:
      + Bearing_Units: + +
      - Bearing_Reference_Direction:
      + Bearing_Reference_Direction: + +
      - Bearing_Reference_Meridian:
      + Bearing_Reference_Meridian: + +
      - Planar_Distance_Units:
      + Planar_Distance_Units: + +
      @@ -1257,14 +1364,16 @@
      - Local_Description:
      + Local_Description: + +
      Local_Georeference_Information:
      - +
      @@ -1279,19 +1388,27 @@
      - Horizontal_Datum_Name:
      + Horizontal_Datum_Name: + +
      - Ellipsoid_Name:
      + Ellipsoid_Name: + +
      - Semi-major_Axis:
      + Semi-major_Axis: + +
      - Denominator_of_Flattening_Ratio:
      + Denominator_of_Flattening_Ratio: + +
      @@ -1314,19 +1431,27 @@
      - Altitude_Datum_Name:
      + Altitude_Datum_Name: + +
      - Altitude_Resolution:
      + Altitude_Resolution: + +
      - Altitude_Distance_Units:
      + Altitude_Distance_Units: + +
      - Altitude_Encoding_Method:
      + Altitude_Encoding_Method: + +
      @@ -1340,19 +1465,27 @@
      - Depth_Datum_Name:
      + Depth_Datum_Name: + +
      - Depth_Resolution:
      + Depth_Resolution: + +
      - Depth_Distance_Units:
      + Depth_Distance_Units: + +
      - Depth_Encoding_Method:
      + Depth_Encoding_Method: + +
      @@ -1368,7 +1501,7 @@ -
      +
      @@ -1390,14 +1523,16 @@
      - Entity_Type_Label:
      + Entity_Type_Label: + +
      Entity_Type_Definition:
      - +
      @@ -1405,7 +1540,7 @@ Entity_Type_Definition_Source:
      - +
      @@ -1420,14 +1555,16 @@
      - Attribute_Label:
      + Attribute_Label: + +
      Attribute_Definition:
      - +
      @@ -1435,7 +1572,7 @@ Attribute_Definition_Source:
      - +
      @@ -1453,14 +1590,16 @@
      - Enumerated_Domain_Value:
      + Enumerated_Domain_Value: + +
      Enumerated_Domain_Value_Definition:
      - +
      @@ -1468,12 +1607,14 @@ Enumerated_Domain_Value_Definition_Source:
      - +
      - Attribute:
      + Attribute: + +
      @@ -1487,23 +1628,33 @@
      - Range_Domain_Minimum:
      + Range_Domain_Minimum: + +
      - Range_Domain_Maximum:
      + Range_Domain_Maximum: + +
      - Attribute_Units_of_Measure:
      + Attribute_Units_of_Measure: + +
      - Attribute_Measurement_Resolution:
      + Attribute_Measurement_Resolution: + +
      - Attribute:
      + Attribute: + +
      @@ -1517,11 +1668,15 @@
      - Codeset_Name:
      + Codeset_Name: + +
      - Codeset_Source:
      + Codeset_Source: + +
      @@ -1532,7 +1687,7 @@ Unrepresentable_Domain:
      - +
      @@ -1541,11 +1696,15 @@
      - Beginning_Date_of_Attribute_Values:
      + Beginning_Date_of_Attribute_Values: + +
      - Ending_Date_of_Attribute_Values:
      + Ending_Date_of_Attribute_Values: + +
      @@ -1556,14 +1715,16 @@
      - Attribute_Value_Accuracy:
      + Attribute_Value_Accuracy: + +
      Attribute_Value_Accuracy_Explanation:
      - +
      @@ -1574,7 +1735,7 @@ Attribute_Measurement_Frequency:
      - +
      @@ -1595,7 +1756,7 @@ Entity_and_Attribute_Overview:
      - +
      @@ -1603,7 +1764,7 @@ Entity_and_Attribute_Detail_Citation:
      - +
      @@ -1616,13 +1777,14 @@
      -
      - - +
      +
      +
      - Distribution_Information:
      + Distribution_Information: +
      @@ -1631,21 +1793,23 @@
      - +
      - Resource_Description:
      + Resource_Description: + +
      Distribution_Liability:
      - +
      @@ -1660,7 +1824,7 @@ Non-digital_Form:
      - +
      @@ -1677,22 +1841,28 @@
      - Format_Name:
      + Format_Name: + +
      - Format_Version_Number:
      + Format_Version_Number: + +
      - Format_Version_Date:
      + Format_Version_Date: + +
      Format_Specification:
      - +
      @@ -1700,16 +1870,20 @@ Format_Information_Content:
      - +
      - File_Decompression_Technique:
      + File_Decompression_Technique: + +
      - Transfer_Size:
      + Transfer_Size: + +
      @@ -1741,10 +1915,12 @@
      - Network_Resource_Name: - - - + Network_Resource_Name: + + + +
      @@ -1759,35 +1935,51 @@
      - Lowest_BPS:
      + Lowest_BPS: + +
      - Highest_BPS:
      + Highest_BPS: + +
      - Number_DataBits:
      + Number_DataBits: + +
      - Number_StopBits:
      + Number_StopBits: + +
      - Parity:
      + Parity: + +
      - Compression_Support:
      + Compression_Support: + +
      - Dialup_Telephone:
      + Dialup_Telephone: + +
      - Dialup_File_Name:
      + Dialup_File_Name: + +
      @@ -1800,7 +1992,7 @@ Access_Instructions:
      - +
      @@ -1808,7 +2000,7 @@ Online_Computer_and_Operating_System:
      - +
      @@ -1823,7 +2015,9 @@
      - Offline_Media:
      + Offline_Media: + +
      @@ -1833,25 +2027,31 @@
      - Recording_Density:
      + Recording_Density: + +
      - Recording_Density_Units:
      + Recording_Density_Units: + +
      - Recording_Format:
      + Recording_Format: + +
      Compatibility_Information:
      - +
      @@ -1866,19 +2066,23 @@
      - Fees:
      + Fees: + +
      Ordering_Instructions:
      - +
      - Turnaround:
      + Turnaround: + +
      @@ -1889,7 +2093,7 @@ Custom_Order_Process:
      - +
      @@ -1897,7 +2101,7 @@ Technical_Prerequisites:
      - +
      @@ -1906,7 +2110,7 @@
      - +
      @@ -1918,7 +2122,7 @@ -
      +
      @@ -1928,15 +2132,21 @@
      - Metadata_Date:
      + Metadata_Date: + +
      - Metadata_Review_Date:
      + Metadata_Review_Date: + +
      - Metadata_Future_Review_Date:
      + Metadata_Future_Review_Date: + +
      @@ -1945,34 +2155,42 @@
      - +
      - Metadata_Standard_Name:
      + Metadata_Standard_Name: + +
      - Metadata_Standard_Version:
      + Metadata_Standard_Version: + +
      - Metadata_Time_Convention:
      + Metadata_Time_Convention: + +
      - Metadata_Access_Constraints:
      + Metadata_Access_Constraints: + +
      Metadata_Use_Constraints:
      - +
      @@ -1984,18 +2202,22 @@
      - Metadata_Security_Classification_System:
      + Metadata_Security_Classification_System: + +
      - Metadata_Security_Classification:
      + Metadata_Security_Classification: + +
      Metadata_Security_Handling_Description:
      - +
      @@ -2010,13 +2232,17 @@
      - Online_Linkage: - + Online_Linkage: + + +
      - Profile_Name:
      + Profile_Name: + +
      @@ -2035,16 +2261,22 @@
      - Originator:
      + Originator: + +
      - Publication_Date:
      + Publication_Date: + +
      - Publication_Time:
      + Publication_Time: + +
      @@ -2052,17 +2284,21 @@ Title:
      - +
      - Edition:
      + Edition: + +
      - Geospatial_Data_Presentation_Form:
      + Geospatial_Data_Presentation_Form: + +
      @@ -2073,11 +2309,15 @@
      - Series_Name:
      + Series_Name: + +
      - Issue_Identification:
      + Issue_Identification: + +
      @@ -2091,11 +2331,15 @@
      - Publication_Place:
      + Publication_Place: + +
      - Publisher:
      + Publisher: + +
      @@ -2106,15 +2350,18 @@ Other_Citation_Details:
      - +
      - Online_Linkage: - - + Online_Linkage: + + + +
      @@ -2124,7 +2371,7 @@
      - +
      @@ -2146,11 +2393,15 @@
      - Contact_Person:
      + Contact_Person: + +
      - Contact_Organization:
      + Contact_Organization: + +
      @@ -2163,18 +2414,24 @@
      - Contact_Organization:
      + Contact_Organization: + +
      - Contact_Person:
      + Contact_Person: + +
      - Contact_Position:
      + Contact_Position: + +
      @@ -2185,27 +2442,39 @@
      - Address_Type:
      + Address_Type: + +
      - Address:
      + Address: + +
      - City:
      + City: + +
      - State_or_Province:
      + State_or_Province: + +
      - Postal_Code:
      + Postal_Code: + +
      - Country:
      + Country: + +
      @@ -2213,29 +2482,42 @@
      - Contact_Voice_Telephone:
      + Contact_Voice_Telephone: + +
      - Contact_TDD/TTY_Telephone:
      + Contact_TDD/TTY_Telephone: + +
      - Contact_Facsimile_Telephone:
      + Contact_Facsimile_Telephone: + +
      - Contact_Electronic_Mail_Address: + Contact_Electronic_Mail_Address: + + +
      - Hours_of_Service:
      + Hours_of_Service: + +
      - Contact Instructions:
      + Contact Instructions: + +
      @@ -2247,9 +2529,9 @@
      - - - + + +
      @@ -2262,11 +2544,15 @@
      - Calendar_Date:
      + Calendar_Date: + +
      - Time of Day:
      + Time of Day: + +
      @@ -2278,7 +2564,7 @@
      - +
      @@ -2291,19 +2577,27 @@
      - Beginning_Date:
      + Beginning_Date: + +
      - Beginning_Time:
      + Beginning_Time: + +
      - Ending_Date:
      + Ending_Date: + +
      - Ending_Time:
      + Ending_Time: + +
      @@ -2317,11 +2611,15 @@
      - G-Ring_Latitude:
      + G-Ring_Latitude: + +
      - G-Ring_Longitude:
      + G-Ring_Longitude: + +
      @@ -2331,18 +2629,18 @@ G-Ring:
      - +
      - - - - - + + + + +
      @@ -2351,12 +2649,12 @@
      - + - - - - + + + +
      @@ -2365,15 +2663,15 @@
      - + - - + + - - - + + +
      @@ -2382,12 +2680,12 @@
      - + - - - - + + + +
      @@ -2395,11 +2693,11 @@
      - - - - - + + + + +
      @@ -2407,78 +2705,104 @@
      - - - - - - + + + + + +
      - Standard_Parallel:
      + Standard_Parallel: + +
      - Longitude_of_Central_Meridian:
      + Longitude_of_Central_Meridian: + +
      - Latitude_of_Projection_Origin:
      + Latitude_of_Projection_Origin: + +
      - False_Easting:
      + False_Easting: + +
      - False_Northing:
      + False_Northing: + +
      - Scale_Factor_at_Equator:
      + Scale_Factor_at_Equator: + +
      - Height_of_Perspective_Point_Above_Surface:
      + Height_of_Perspective_Point_Above_Surface: + +
      - Longitude_of_Projection_Center:
      + Longitude_of_Projection_Center: + +
      - Latitude_of_Projection_Center:
      + Latitude_of_Projection_Center: + +
      - Scale_Factor_at_Center_Line:
      + Scale_Factor_at_Center_Line: + +
      - Oblique_Line_Azimuth:
      + Oblique_Line_Azimuth: + +
      - Azimuthal_Angle:
      + Azimuthal_Angle: + +
      - Azimuthal_Measure_Point_Longitude:
      + Azimuthal_Measure_Point_Longitude: + +
      @@ -2486,16 +2810,22 @@
      - Oblique_Line_Point:
      + Oblique_Line_Point: + +
      - Oblique_Line_Latitude:
      + Oblique_Line_Latitude: + +
      - Oblique_Line_Longitude:
      + Oblique_Line_Longitude: + +
      @@ -2503,27 +2833,37 @@
      - Straight_Vertical_Longitude_from_Pole:
      + Straight_Vertical_Longitude_from_Pole: + +
      - Scale_Factor_at_Projection_Origin:
      + Scale_Factor_at_Projection_Origin: + +
      - Landsat_Number:
      + Landsat_Number: + +
      - Path_Number:
      + Path_Number: + +
      - Scale_Factor_at_Central_Meridian:
      + Scale_Factor_at_Central_Meridian: + +
      @@ -2531,11 +2871,14 @@ Other_Projection's_Definition:
      - +
      - + diff --git a/geoportal_1/src/main/webapp/WEB-INF/xml/isoBasic.xsl b/geoportal_1/src/main/webapp/WEB-INF/xml/isoBasic.xsl new file mode 100644 index 0000000..16a5238 --- /dev/null +++ b/geoportal_1/src/main/webapp/WEB-INF/xml/isoBasic.xsl @@ -0,0 +1,202 @@ + + + + + +

      + +

      +
      + +

      Abstract:

      +

      + +

      +
      + + + +

      + + Keywords: + +

      + + + +
      +
      +
      + + +

      Extent Information:

      + + + Spatial Temporal Extent: + +
      + + Geographic Element: +
      + Bounding Coordinates: +
      + + Area to display current cursor lat/lon location: + +
       
      + Westbound Longitude: + + + + + ° +
      + Eastbound Longitude: + + + + + ° +
      + Southbound Latitude: + + + + + ° +
      + Northbound Latitude: + + + + + ° +
      +
      +
      +
      + + + +

      + Vertical Element: +

      +
      + Minimum Value: + + + + +
      + Maximum Value: + + + + +
      + + + Coordinate Reference System (CRS): + +
      +
      + + Coordinate Reference System (CRS): + +
      +
      +
      +
      +
      +
      +
      +
      + + +

      Contact:

      +

      + + +
      +
      + + +
      +
      + + +
      +
      + +
      + + + +
      +
      + + + + + +
      +
      +
      +

      +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      diff --git a/geoportal_1/src/main/webapp/jspf/about.jspf b/geoportal_1/src/main/webapp/jspf/about.jspf deleted file mode 100644 index df4c7f8..0000000 --- a/geoportal_1/src/main/webapp/jspf/about.jspf +++ /dev/null @@ -1,18 +0,0 @@ -
      -

      - GeoData@Tufts is developed and maintained by Tufts University Information Technology. - Tufts is leading the development in collaboration with Harvard of this open source, federated web application to rapidly discover, preview, - and retrieve geospatial data from multiple repositories. GeoData@Tufts combines an intuitive, map-based search interface along with traditional - text-based metadata search tools for rapid data discovery and for use in teaching, learning, and research. -

      -

      - GeoData@Tufts is part of The Open Geoportal. The Open Geoportal is a consortium comprised of contributions - of several universities and organizations to help facilitate the discovery and acquisition of geospatial data across many organizations and platforms. - Current partners include: Harvard, MIT, MassGIS, Princeton, Columbia, Stanford, UC Berkeley, UCLA, Yale, and UConn. Built on open source technology, - The Open Geoportal provides organizations the opportunity to share thousands of geospatial data layers, maps, metadata, and development resources through - a single common interface. -

      -

      - <%@include file="mailto.jspf"%> -

      -
      \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/advancedSearch.jspf b/geoportal_1/src/main/webapp/jspf/advancedSearch.jspf deleted file mode 100644 index 5419067..0000000 --- a/geoportal_1/src/main/webapp/jspf/advancedSearch.jspf +++ /dev/null @@ -1,54 +0,0 @@ - -
      -
      -
      - -
      -
      -
      -
      - - -
      -
      - - -
      -
      - - - - to - - -
      -
      - -
      -
      -
      - -
      - -
      -
      -
      - -
      - - - - - -
      -
      - Clear - Search -
      -
      - - - basic options -
      -
      -
      diff --git a/geoportal_1/src/main/webapp/jspf/basicSearch.jspf b/geoportal_1/src/main/webapp/jspf/basicSearch.jspf deleted file mode 100644 index 7dac8d0..0000000 --- a/geoportal_1/src/main/webapp/jspf/basicSearch.jspf +++ /dev/null @@ -1,13 +0,0 @@ -
      -
      -
      - - Search -
      -
      - - -
      - advanced options -
      -
      diff --git a/geoportal_1/src/main/webapp/jspf/contact.jspf b/geoportal_1/src/main/webapp/jspf/contact.jspf deleted file mode 100644 index 2d75085..0000000 --- a/geoportal_1/src/main/webapp/jspf/contact.jspf +++ /dev/null @@ -1,17 +0,0 @@ -
      -

      - <%@include file="mailto.jspf"%> -

      - -
      -

      Project Management:

      - Patrick Florance, Manager of Geospatial Technology Services, UIT, Tufts University -
      - -
      - - -
      -
      diff --git a/geoportal_1/src/main/webapp/jspf/footer.jspf b/geoportal_1/src/main/webapp/jspf/footer.jspf deleted file mode 100644 index ca7b701..0000000 --- a/geoportal_1/src/main/webapp/jspf/footer.jspf +++ /dev/null @@ -1,17 +0,0 @@ - -<%@include file="about.jspf"%> -<%@include file="contact.jspf"%> -<%@include file="highlights.jspf"%> - \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/gettingStartedTab.jspf b/geoportal_1/src/main/webapp/jspf/gettingStartedTab.jspf deleted file mode 100644 index 9c7bb88..0000000 --- a/geoportal_1/src/main/webapp/jspf/gettingStartedTab.jspf +++ /dev/null @@ -1,33 +0,0 @@ -
      -

      <%@include file="institutionWelcome.jspf"%>

      -

      - Search, discover, preview, and retrieve geospatial data from multiple repositories -

      - -

      Search

      -

      There are two ways to search for data. The two methods can be used individually or combined for more effective search

      -
        -
      • Use basic or advanced search
      • -
      • Interact with the map to search for data by relevant geographic extent
      • -
      -

      Interacting with the map

      -
        -
      • Interacting with the map will perform a search for relevant data
      • -
      • Enter a place in the Find Place field to zoom to a location
      • -
      • Click the Zoom or Pan tool and drag the map with the mouse
      • -
      • Double-click to zoom in on an area
      • -
      • Hold down shift and click-drag a box to zoom to an area
      • -
      • Click on Basemap to set the background layer to OpenStreetMap, Google Maps, etc.
      • -
      -

      Preview

      -
        -
      • Click the Preview checkbox to preview the layer on the map from your search results or from your Cart
      • -
      • Expand the layer dropdown to access the preview controls
      • -
      • Click the attribute preview tool and click on a feature on the map to view its attributes
      • -
      -

      Download

      -
        -
      • Click the Cart checkbox to add the selected layer to your Cart for download, additional preview, or to create web mapping services
      • -
      -
      - diff --git a/geoportal_1/src/main/webapp/jspf/header.jspf b/geoportal_1/src/main/webapp/jspf/header.jspf deleted file mode 100644 index aa9b2bb..0000000 --- a/geoportal_1/src/main/webapp/jspf/header.jspf +++ /dev/null @@ -1,13 +0,0 @@ - \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/highlights.jspf b/geoportal_1/src/main/webapp/jspf/highlights.jspf deleted file mode 100644 index 09f7dd3..0000000 --- a/geoportal_1/src/main/webapp/jspf/highlights.jspf +++ /dev/null @@ -1,7 +0,0 @@ -
      -

      Welcome to GeoData@Tufts! We are happy to announce that as of 11/4/2011 we are live. We will be making updates regularly. -

      -

      - Please zoom in and pan around with the map and/or enter search terms to begin discovering our geospatial data holdings. -

      -
      \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/includes.jspf b/geoportal_1/src/main/webapp/jspf/includes.jspf deleted file mode 100644 index ae1fc5e..0000000 --- a/geoportal_1/src/main/webapp/jspf/includes.jspf +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/geoportal_1/src/main/webapp/jspf/leftPanel.jspf b/geoportal_1/src/main/webapp/jspf/leftPanel.jspf deleted file mode 100644 index f42e1e3..0000000 --- a/geoportal_1/src/main/webapp/jspf/leftPanel.jspf +++ /dev/null @@ -1,31 +0,0 @@ -
      -
      - -
      - <%@include file="gettingStartedTab.jspf"%> -
      -
      - <%@include file="searchForm.jspf"%> -
      -
      - <%@include file="savedLayersTab.jspf"%> -
      -
      -
      - - diff --git a/geoportal_1/src/main/webapp/jspf/mailto.jspf b/geoportal_1/src/main/webapp/jspf/mailto.jspf deleted file mode 100644 index bf08bed..0000000 --- a/geoportal_1/src/main/webapp/jspf/mailto.jspf +++ /dev/null @@ -1 +0,0 @@ -For questions, comments, or to report problems, please contact: geodata@elist.tufts.edu \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/map.jspf b/geoportal_1/src/main/webapp/jspf/map.jspf deleted file mode 100644 index e01d554..0000000 --- a/geoportal_1/src/main/webapp/jspf/map.jspf +++ /dev/null @@ -1,12 +0,0 @@ -
      - -
      -
      -
      - -
      go
      -
      -
      - \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/savedLayersTab.jspf b/geoportal_1/src/main/webapp/jspf/savedLayersTab.jspf deleted file mode 100644 index 32d18d8..0000000 --- a/geoportal_1/src/main/webapp/jspf/savedLayersTab.jspf +++ /dev/null @@ -1,38 +0,0 @@ -
      -
      - - OPTIONS - -
      - collapse left - expand right -
      -
      -
      - Download - Web Service - Share - Map It -
      -
      -
      - - LAYERS - - - - - - - Remove - - - -
      -
      -
      \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/searchForm.jspf b/geoportal_1/src/main/webapp/jspf/searchForm.jspf deleted file mode 100644 index 2cf7a99..0000000 --- a/geoportal_1/src/main/webapp/jspf/searchForm.jspf +++ /dev/null @@ -1,50 +0,0 @@ -
      -
      - - SEARCH - - -
      - collapse - collapse left - expand right -
      -
      - - - -
      - - - 0 - - - RESULTS - - - - by -
      -
      - -
      - columns -
      - -
      - <%@include file="welcomeText.jspf"%> -
      -
      -
      - -
      - - diff --git a/geoportal_1/src/main/webapp/jspf/welcomeText.jspf b/geoportal_1/src/main/webapp/jspf/welcomeText.jspf deleted file mode 100644 index 811613d..0000000 --- a/geoportal_1/src/main/webapp/jspf/welcomeText.jspf +++ /dev/null @@ -1,6 +0,0 @@ -
      -

      <%@include file="institutionWelcome.jspf"%>

      -

      - Enter a keyword and/or interact with the map to discover geospatial data -

      -
      \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/ogpWFS.jsp b/geoportal_1/src/main/webapp/ogpWFS.jsp deleted file mode 100644 index 9dd7355..0000000 --- a/geoportal_1/src/main/webapp/ogpWFS.jsp +++ /dev/null @@ -1,410 +0,0 @@ -<%@ page language="java" contentType="application/xml; charset=UTF-8" - pageEncoding="UTF-8" import="java.util.*, javax.xml.transform.*, java.net.URLDecoder, javax.xml.transform.dom.*, javax.xml.transform.stream.*, - org.OpenGeoPortal.Utilities.Http.HttpRequester, org.OpenGeoPortal.Metadata.LayerInfoRetriever, org.OpenGeoPortal.Solr.*, java.io.*, javax.xml.parsers.DocumentBuilderFactory, - javax.xml.parsers.DocumentBuilder, org.w3c.dom.NodeList, org.w3c.dom.Node, org.w3c.dom.Document, java.net.URLConnection, java.util.Set, java.util.HashSet, java.util.Map, - org.springframework.context.*, org.springframework.web.context.support.*, org.springframework.beans.factory.* "%><% - response.setHeader("Content-disposition","attachment; filename=\"wfs.xml\""); - - Enumeration sentParams = request.getParameterNames(); - while (sentParams.hasMoreElements()){ - String blah = sentParams.nextElement(); - System.out.println(blah); - System.out.println(request.getParameter(blah)); - } - String layers = request.getParameter("OGPIDS"); - while (layers.indexOf("%") > -1){ - layers = URLDecoder.decode(layers, "UTF-8"); - } - System.out.println(layers); - String[] layerIds = layers.split(","); - //String[] layerIds = request.getParameterValues("layerId"); - Set layerIdSet = new HashSet(); - - for (int i = 0; i < layerIds.length; i++){ - layerIdSet.add(layerIds[i]); - } - - ApplicationContext injector = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()); - - LayerInfoRetriever layerInfoRetriever = (LayerInfoRetriever) injector.getBean("layerInfoRetriever.solr"); - List solrRecords = layerInfoRetriever.fetchAllLayerInfo(layerIdSet); - HttpRequester httpRequester = (HttpRequester) injector.getBean("httpRequester.generic"); - - //There is some info that requires the getCapabilities doc (native epsg code), - //so we must request it and parse it. The benefit is that we can just grab the appropriate FeatureType node and - //insert it into this response. Eventually, if we can get the epsg code from solr reliably, solr might be the - //faster method, since we are parsing a potentially large xml document. - String institution = solrRecords.get(0).getInstitution(); - //String serverName = ParseJSONSolrLocationField.getWfsUrl(layerInfoMap.get(layerIds[0]).get("Location")); - - String serverName = "http://geoserver01.uit.tufts.edu"; - String servicePoint = serverName + "/wfs"; - String featureTypeInfo = ""; - - for (int i = 0; i < layerIds.length; i++){ - String workspace = "sde"; - //String workspace = layerInfoMap.get(layerIds[i]).get("WorkspaceName"); - String layerName = solrRecords.get(0).getName(); - - InputStream inputStream = httpRequester.sendRequest(serverName + "/" + workspace + "/" + layerName + "/wfs", "request=getCapabilities&version=1.1.0", "GET"); - - //parse the returned XML - // Create a factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - //ignore validation, dtd - factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - factory.setValidating(false); - // Use document builder factory - DocumentBuilder builder = factory.newDocumentBuilder(); - //Parse the document - Document document = builder.parse(inputStream); - - NodeList layerNodeList = document.getElementsByTagName("FeatureType"); - Node layerNode = layerNodeList.item(0); - - StringWriter stw = new StringWriter(); - Transformer serializer = TransformerFactory.newInstance().newTransformer(); - serializer.setOutputProperty(OutputKeys.INDENT, "yes"); - serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - serializer.transform(new DOMSource(layerNode), new StreamResult(stw)); - featureTypeInfo += stw.toString(); - System.out.println(featureTypeInfo); - } - - - /* - //parse the returned XML - // Create a factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - //ignore validation, dtd - factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - factory.setValidating(false); - // Use document builder factory - DocumentBuilder builder = factory.newDocumentBuilder(); - //Parse the document - Document document = builder.parse(inputStream); - - NodeList elementNodes = document.getElementsByTagName("Name"); - for (int i = 0; i < elementNodes.getLength(); i++){ - Node featureTypeNameElement = elementNodes.item(i); - String featureTypeName = featureTypeNameElement.getTextContent().trim(); - for (String layer : layerIds){ - String currentLayerName = layerInfoMap.get(layer).get("WorkspaceName") + ":" + layerInfoMap.get(layer).get("Name"); - if (currentLayerName.equals(featureTypeName)){ - Node featureTypeElement = featureTypeNameElement.getParentNode(); - StringWriter stw = new StringWriter(); - Transformer serializer = TransformerFactory.newInstance().newTransformer(); - serializer.setOutputProperty(OutputKeys.INDENT, "yes"); - serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - serializer.transform(new DOMSource(featureTypeElement), new StreamResult(stw)); - featureTypeInfo += stw.toString(); - break; - } - } - } - */ - //can I get this info from getCapabilites (WFS 1.0) with this syntax request=getCapabilities#sde:featureTypeName - //The piece we're grabbing from the getCapabilities doc looks like this: - /* String featureType = "" - + "" + currentMap.get("Name") + "" - + "" + currentMap.get("DisplayName") + "" - + "" - + "urn:x-ogc:def:crs:EPSG:" + epsgCode + "" - + "" - + "" + currentMap.get("MinX") + " " + currentMap.get("MinY") + "" - + "" + currentMap.get("MaxX") + " " + currentMap.get("MaxY") + "" - + "" - + ""; - out.write(featureType); - } - }*/ - System.out.println("Layers found...");%> - - OpenGeoportal Web Feature Service - A dynamically created capabilites document including only certain layers. For use in a mapping client that supports WFS services. - WFSOpenGeoportalWFS1.1.0NONE - NONE - - Tufts University - - OpenGeoportal Development Team - - - - Somerville, MAUS - - - - - - - - - - - 1.0.0 - 1.1.0 - - - text/xml - - - - - - - - - - - text/xml; subtype=gml/3.1.1 - - - - - - - - - - - results - hits - - - text/xml; subtype=gml/3.1.1 - GML2 - GML2-GZIP - SHAPE-ZIP - csv - gml3 - gml32 - json - text/xml; subtype=gml/2.1.2 - text/xml; subtype=gml/3.2 - - - 2 - - - - - - - - - - - - - - Query - <% - out.write(featureTypeInfo); - %> - - - - gml:Envelope - gml:Point - gml:LineString - gml:Polygon - - - - - - - - - - - - - - - - - - LessThan - GreaterThan - LessThanEqualTo - GreaterThanEqualTo - EqualTo - NotEqualTo - Like - Between - NullCheck - - - - - - abs - abs_2 - abs_3 - abs_4 - acos - area - asin - atan - atan2 - between - boundary - boundaryDimension - buffer - bufferWithSegments - Categorize - ceil - centroid - classify - Collection_Average - Collection_Bounds - Collection_Count - Collection_Max - Collection_Median - Collection_Min - Collection_Sum - Collection_Unique - Concatenate - contains - convert - convexHull - cos - crosses - dateFormat - dateParse - difference - dimension - disjoint - distance - double2bool - endAngle - endPoint - env - envelope - EqualInterval - equalsExact - equalsExactTolerance - equalTo - exp - exteriorRing - floor - geometryType - geomFromWKT - geomLength - getGeometryN - getX - getY - getZ - greaterEqualThan - greaterThan - id - IEEEremainder - if_then_else - in10 - in2 - in3 - in4 - in5 - in6 - in7 - in8 - in9 - int2bbool - int2ddouble - interiorPoint - interiorRingN - Interpolate - intersection - intersects - isClosed - isEmpty - isLike - isNull - isometric - isRing - isSimple - isValid - isWithinDistance - Jenks - length - lessEqualThan - lessThan - log - max - max_2 - max_3 - max_4 - min - min_2 - min_3 - min_4 - not - notEqualTo - numberFormat - numberFormat2 - numGeometries - numInteriorRing - numPoints - offset - overlaps - parseBoolean - parseDouble - parseInt - parseLong - pi - pointN - pow - PropertyExists - Quantile - random - Recode - relate - relatePattern - rint - round - round_2 - roundDouble - sin - sqrt - StandardDeviation - startAngle - startPoint - strCapitalize - strConcat - strEndsWith - strEqualsIgnoreCase - strIndexOf - strLastIndexOf - strLength - strMatches - strPosition - strReplace - strStartsWith - strSubstring - strSubstringStart - strToLowerCase - strToUpperCase - strTrim - strTrim2 - symDifference - tan - toDegrees - toRadians - touches - toWKT - union - UniqueInterval - vertices - within - - - - - - - - - - \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/ogpWMS.jsp b/geoportal_1/src/main/webapp/ogpWMS.jsp deleted file mode 100644 index 39880b2..0000000 --- a/geoportal_1/src/main/webapp/ogpWMS.jsp +++ /dev/null @@ -1,5004 +0,0 @@ -<%@ page language="java" contentType="application/vnd.ogc.wms_xml; charset=UTF-8" - pageEncoding="UTF-8" import="javax.xml.transform.*, java.net.URLDecoder, javax.xml.transform.dom.*, javax.xml.transform.stream.*, org.OpenGeoPortal.Utilities.Http.*, - org.OpenGeoPortal.Solr.*, org.OpenGeoPortal.Metadata.LayerInfoRetriever, java.io.*, javax.xml.parsers.DocumentBuilderFactory, javax.xml.parsers.DocumentBuilder, - org.w3c.dom.NodeList, org.w3c.dom.Node,org.w3c.dom.Document, java.net.URLConnection, java.util.Set, java.util.HashSet, java.util.List, org.springframework.context.*, - org.springframework.web.context.support.*, org.springframework.beans.factory.* "%><% - response.setHeader("Content-disposition","attachment; filename=\"wms\""); - - String layers = request.getParameter("OGPIDS"); - while (layers.indexOf("%") > -1){ - layers = URLDecoder.decode(layers, "UTF-8"); - } - System.out.println(layers); - String[] layerIds = layers.split(","); - System.out.println(layerIds[0]); - //String[] layerIds = request.getParameterValues("layerId"); - - Set layerIdSet = new HashSet(); - - for (int i = 0; i < layerIds.length; i++){ - layerIdSet.add(layerIds[i]); - } - - ApplicationContext injector = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()); - - /*String contextRelativePath = ""; - contextRelativePath += "../webapps/ROOT/"; - String contextConfigPath = contextRelativePath + "WEB-INF/download.xml"; - BeanFactory injector = new FileSystemXmlApplicationContext(contextConfigPath); - LayerInfoRetriever layerInfoRetriever = (LayerInfoRetriever) injector.getBean("layerInfoRetriever.solr"); - */ - LayerInfoRetriever layerInfoRetriever = (LayerInfoRetriever) injector.getBean("layerInfoRetriever.solr"); - - List solrRecords = layerInfoRetriever.fetchAllLayerInfo(layerIdSet); - HttpRequester httpRequester = (HttpRequester) injector.getBean("httpRequester.generic"); - - //There is some info that requires the getCapabilities doc (native epsg code), - //so we must request it and parse it. The benefit is that we can just grab the appropriate FeatureType node and - //insert it into this response. Eventually, if we can get the epsg code from solr reliably, solr might be the - //faster method, since we are parsing a potentially large xml document. - String institution = solrRecords.get(0).getInstitution(); - //String servicePoint = ParseJSONSolrLocationField.getWmsUrl(layerInfoMap.get(layerIds[0]).get("Location")); - //String serverName = servicePoint.substring(0, servicePoint.indexOf("/wms")); - - String serverName = "http://geoserver01.uit.tufts.edu"; - String servicePoint = serverName + "/wms"; - String featureTypeInfo = ""; - System.out.println(serverName); - for (int i = 0; i < layerIds.length; i++){ - String workspace = "sde"; - //String workspace = layerInfoMap.get(layerIds[i]).get("WorkspaceName"); - String layerName = solrRecords.get(i).getName(); - - InputStream inputStream = httpRequester.sendRequest(serverName + "/" + workspace + "/" + layerName + "/wms", "request=getCapabilities&version=1.1.1", "GET"); - - //parse the returned XML - // Create a factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - //ignore validation, dtd - factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - factory.setValidating(false); - // Use document builder factory - DocumentBuilder builder = factory.newDocumentBuilder(); - //Parse the document - Document document = builder.parse(inputStream); - - NodeList layerNodeList = document.getElementsByTagName("Layer"); - Node layerNode = null; - for (int j = 0; j < layerNodeList.getLength(); j++){ - Node currentLayerNode = layerNodeList.item(j); - if (currentLayerNode.getParentNode().getNodeName().equals("Layer")){ - layerNode = currentLayerNode; - break; - } - } - if (layerNode == null){ - continue; - } - - StringWriter stw = new StringWriter(); - Transformer serializer = TransformerFactory.newInstance().newTransformer(); - serializer.setOutputProperty(OutputKeys.INDENT, "yes"); - serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - serializer.transform(new DOMSource(layerNode), new StreamResult(stw)); - featureTypeInfo += stw.toString(); - System.out.println(featureTypeInfo); - } - - /*for (int i = 0; i < elementNodes.getLength(); i++){ - Node featureTypeNameElement = elementNodes.item(i); - String featureTypeName = featureTypeNameElement.getTextContent().trim(); - for (String layer : layerIds){ - String currentLayerName = layerInfoMap.get(layer).get("WorkspaceName") + ":" + layerInfoMap.get(layer).get("Name"); - System.out.println(currentLayerName); - if (currentLayerName.equals(featureTypeName)){ - Node featureTypeElement = featureTypeNameElement.getParentNode(); - StringWriter stw = new StringWriter(); - Transformer serializer = TransformerFactory.newInstance().newTransformer(); - serializer.setOutputProperty(OutputKeys.INDENT, "yes"); - serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - serializer.transform(new DOMSource(featureTypeElement), new StreamResult(stw)); - featureTypeInfo += stw.toString(); - break; - } - } - }*/ - System.out.println(featureTypeInfo); - if (featureTypeInfo.length() == 0){ - throw new Exception("No features found."); - } -/* - - sde:GISPORTAL.GISOWNER01.ESRI_CITIES - GISPORTAL.GISOWNER01.ESRI_CITIES - - - EPSG:4326 - - - - - -*/ - System.out.println("Layers found...");%> -<%out.write("");%> - - - OGC:WMS - OpenGeoportal Web Map Service - A dynamically created capabilites document including only certain layers. For use in a mapping client that supports WMS services. - - WFS - WMS - OpenGeoportal - - - - - Geoportal Development Team - Tufts University - - - - Work -
      - Somerville - - - US - - - - atsystems@elist.tufts.edu - - NONE - NONE - - - - - application/vnd.ogc.wms_xml - - - - - - - - - - - - - image/png - application/atom xml - application/atom+xml - application/openlayers - application/pdf - application/rss xml - application/rss+xml - application/vnd.google-earth.kml - application/vnd.google-earth.kml xml - application/vnd.google-earth.kml+xml - application/vnd.google-earth.kmz - application/vnd.google-earth.kmz xml - application/vnd.google-earth.kmz+xml - atom - image/geotiff - image/geotiff8 - image/gif - image/jpeg - image/png8 - image/svg - image/svg xml - image/svg+xml - image/tiff - image/tiff8 - kml - kmz - openlayers - rss - - - - - - - - - - text/plain - application/vnd.ogc.gml - text/html - - - - - - - - - - - - - application/vnd.ogc.wms_xml - - - - - - - - - - image/png - image/jpeg - image/gif - - - - - - - - - - application/vnd.ogc.sld+xml - - - - - - - - - - - application/vnd.ogc.se_xml - application/vnd.ogc.se_inimage - - - - OpenGeoportal Dynamic Web Map Service - A compliant implementation of WMS plus most of the SLD extension (dynamic styling). Can also generate PDF, SVG, KML, GeoRSS - - AUTO:42001 - AUTO:42002 - AUTO:42003 - AUTO:42004 - EPSG:WGS84(DD) - EPSG:2000 - EPSG:2001 - EPSG:2002 - EPSG:2003 - EPSG:2004 - EPSG:2005 - EPSG:2006 - EPSG:2007 - EPSG:2008 - EPSG:2009 - EPSG:2010 - EPSG:2011 - EPSG:2012 - EPSG:2013 - EPSG:2014 - EPSG:2015 - EPSG:2016 - EPSG:2017 - EPSG:2018 - EPSG:2019 - EPSG:2020 - EPSG:2021 - EPSG:2022 - EPSG:2023 - EPSG:2024 - EPSG:2025 - EPSG:2026 - EPSG:2027 - EPSG:2028 - EPSG:2029 - EPSG:2030 - EPSG:2031 - EPSG:2032 - EPSG:2033 - EPSG:2034 - EPSG:2035 - EPSG:2036 - EPSG:2037 - EPSG:2038 - EPSG:2039 - EPSG:2040 - EPSG:2041 - EPSG:2042 - EPSG:2043 - EPSG:2044 - EPSG:2045 - EPSG:2046 - EPSG:2047 - EPSG:2048 - EPSG:2049 - EPSG:2050 - EPSG:2051 - EPSG:2052 - EPSG:2053 - EPSG:2054 - EPSG:2055 - EPSG:2056 - EPSG:2057 - EPSG:2058 - EPSG:2059 - EPSG:2060 - EPSG:2061 - EPSG:2062 - EPSG:2063 - EPSG:2064 - EPSG:2065 - EPSG:2066 - EPSG:2067 - EPSG:2068 - EPSG:2069 - EPSG:2070 - EPSG:2071 - EPSG:2072 - EPSG:2073 - EPSG:2074 - EPSG:2075 - EPSG:2076 - EPSG:2077 - EPSG:2078 - EPSG:2079 - EPSG:2080 - EPSG:2081 - EPSG:2082 - EPSG:2083 - EPSG:2084 - EPSG:2085 - EPSG:2086 - EPSG:2087 - EPSG:2088 - EPSG:2089 - EPSG:2090 - EPSG:2091 - EPSG:2092 - EPSG:2093 - EPSG:2094 - EPSG:2095 - EPSG:2096 - EPSG:2097 - EPSG:2098 - EPSG:2099 - EPSG:2100 - EPSG:2101 - EPSG:2102 - EPSG:2103 - EPSG:2104 - EPSG:2105 - EPSG:2106 - EPSG:2107 - EPSG:2108 - EPSG:2109 - EPSG:2110 - EPSG:2111 - EPSG:2112 - EPSG:2113 - EPSG:2114 - EPSG:2115 - EPSG:2116 - EPSG:2117 - EPSG:2118 - EPSG:2119 - EPSG:2120 - EPSG:2121 - EPSG:2122 - EPSG:2123 - EPSG:2124 - EPSG:2125 - EPSG:2126 - EPSG:2127 - EPSG:2128 - EPSG:2129 - EPSG:2130 - EPSG:2131 - EPSG:2132 - EPSG:2133 - EPSG:2134 - EPSG:2135 - EPSG:2136 - EPSG:2137 - EPSG:2138 - EPSG:2139 - EPSG:2140 - EPSG:2141 - EPSG:2142 - EPSG:2143 - EPSG:2144 - EPSG:2145 - EPSG:2146 - EPSG:2147 - EPSG:2148 - EPSG:2149 - EPSG:2150 - EPSG:2151 - EPSG:2152 - EPSG:2153 - EPSG:2154 - EPSG:2155 - EPSG:2156 - EPSG:2157 - EPSG:2158 - EPSG:2159 - EPSG:2160 - EPSG:2161 - EPSG:2162 - EPSG:2163 - EPSG:2164 - EPSG:2165 - EPSG:2166 - EPSG:2167 - EPSG:2168 - EPSG:2169 - EPSG:2170 - EPSG:2171 - EPSG:2172 - EPSG:2173 - EPSG:2174 - EPSG:2175 - EPSG:2176 - EPSG:2177 - EPSG:2178 - EPSG:2179 - EPSG:2180 - EPSG:2188 - EPSG:2189 - EPSG:2190 - EPSG:2191 - EPSG:2192 - EPSG:2193 - EPSG:2194 - EPSG:2195 - EPSG:2196 - EPSG:2197 - EPSG:2198 - EPSG:2199 - EPSG:2200 - EPSG:2201 - EPSG:2202 - EPSG:2203 - EPSG:2204 - EPSG:2205 - EPSG:2206 - EPSG:2207 - EPSG:2208 - EPSG:2209 - EPSG:2210 - EPSG:2211 - EPSG:2212 - EPSG:2213 - EPSG:2214 - EPSG:2215 - EPSG:2216 - EPSG:2217 - EPSG:2218 - EPSG:2219 - EPSG:2220 - EPSG:2221 - EPSG:2222 - EPSG:2223 - EPSG:2224 - EPSG:2225 - EPSG:2226 - EPSG:2227 - EPSG:2228 - EPSG:2229 - EPSG:2230 - EPSG:2231 - EPSG:2232 - EPSG:2233 - EPSG:2234 - EPSG:2235 - EPSG:2236 - EPSG:2237 - EPSG:2238 - EPSG:2239 - EPSG:2240 - EPSG:2241 - EPSG:2242 - EPSG:2243 - EPSG:2244 - EPSG:2245 - EPSG:2246 - EPSG:2247 - EPSG:2248 - EPSG:2249 - EPSG:2250 - EPSG:2251 - EPSG:2252 - EPSG:2253 - EPSG:2254 - EPSG:2255 - EPSG:2256 - EPSG:2257 - EPSG:2258 - EPSG:2259 - EPSG:2260 - EPSG:2261 - EPSG:2262 - EPSG:2263 - EPSG:2264 - EPSG:2265 - EPSG:2266 - EPSG:2267 - EPSG:2268 - EPSG:2269 - EPSG:2270 - EPSG:2271 - EPSG:2272 - EPSG:2273 - EPSG:2274 - EPSG:2275 - EPSG:2276 - EPSG:2277 - EPSG:2278 - EPSG:2279 - EPSG:2280 - EPSG:2281 - EPSG:2282 - EPSG:2283 - EPSG:2284 - EPSG:2285 - EPSG:2286 - EPSG:2287 - EPSG:2288 - EPSG:2289 - EPSG:2290 - EPSG:2291 - EPSG:2292 - EPSG:2294 - EPSG:2295 - EPSG:2296 - EPSG:2297 - EPSG:2298 - EPSG:2299 - EPSG:2300 - EPSG:2301 - EPSG:2302 - EPSG:2303 - EPSG:2304 - EPSG:2305 - EPSG:2306 - EPSG:2307 - EPSG:2308 - EPSG:2309 - EPSG:2310 - EPSG:2311 - EPSG:2312 - EPSG:2313 - EPSG:2314 - EPSG:2315 - EPSG:2316 - EPSG:2317 - EPSG:2318 - EPSG:2319 - EPSG:2320 - EPSG:2321 - EPSG:2322 - EPSG:2323 - EPSG:2324 - EPSG:2325 - EPSG:2326 - EPSG:2327 - EPSG:2328 - EPSG:2329 - EPSG:2330 - EPSG:2331 - EPSG:2332 - EPSG:2333 - EPSG:2334 - EPSG:2335 - EPSG:2336 - EPSG:2337 - EPSG:2338 - EPSG:2339 - EPSG:2340 - EPSG:2341 - EPSG:2342 - EPSG:2343 - EPSG:2344 - EPSG:2345 - EPSG:2346 - EPSG:2347 - EPSG:2348 - EPSG:2349 - EPSG:2350 - EPSG:2351 - EPSG:2352 - EPSG:2353 - EPSG:2354 - EPSG:2355 - EPSG:2356 - EPSG:2357 - EPSG:2358 - EPSG:2359 - EPSG:2360 - EPSG:2361 - EPSG:2362 - EPSG:2363 - EPSG:2364 - EPSG:2365 - EPSG:2366 - EPSG:2367 - EPSG:2368 - EPSG:2369 - EPSG:2370 - EPSG:2371 - EPSG:2372 - EPSG:2373 - EPSG:2374 - EPSG:2375 - EPSG:2376 - EPSG:2377 - EPSG:2378 - EPSG:2379 - EPSG:2380 - EPSG:2381 - EPSG:2382 - EPSG:2383 - EPSG:2384 - EPSG:2385 - EPSG:2386 - EPSG:2387 - EPSG:2388 - EPSG:2389 - EPSG:2390 - EPSG:2391 - EPSG:2392 - EPSG:2393 - EPSG:2394 - EPSG:2395 - EPSG:2396 - EPSG:2397 - EPSG:2398 - EPSG:2399 - EPSG:2400 - EPSG:2401 - EPSG:2402 - EPSG:2403 - EPSG:2404 - EPSG:2405 - EPSG:2406 - EPSG:2407 - EPSG:2408 - EPSG:2409 - EPSG:2410 - EPSG:2411 - EPSG:2412 - EPSG:2413 - EPSG:2414 - EPSG:2415 - EPSG:2416 - EPSG:2417 - EPSG:2418 - EPSG:2419 - EPSG:2420 - EPSG:2421 - EPSG:2422 - EPSG:2423 - EPSG:2424 - EPSG:2425 - EPSG:2426 - EPSG:2427 - EPSG:2428 - EPSG:2429 - EPSG:2430 - EPSG:2431 - EPSG:2432 - EPSG:2433 - EPSG:2434 - EPSG:2435 - EPSG:2436 - EPSG:2437 - EPSG:2438 - EPSG:2439 - EPSG:2440 - EPSG:2441 - EPSG:2442 - EPSG:2443 - EPSG:2444 - EPSG:2445 - EPSG:2446 - EPSG:2447 - EPSG:2448 - EPSG:2449 - EPSG:2450 - EPSG:2451 - EPSG:2452 - EPSG:2453 - EPSG:2454 - EPSG:2455 - EPSG:2456 - EPSG:2457 - EPSG:2458 - EPSG:2459 - EPSG:2460 - EPSG:2461 - EPSG:2462 - EPSG:2463 - EPSG:2464 - EPSG:2465 - EPSG:2466 - EPSG:2467 - EPSG:2468 - EPSG:2469 - EPSG:2470 - EPSG:2471 - EPSG:2472 - EPSG:2473 - EPSG:2474 - EPSG:2475 - EPSG:2476 - EPSG:2477 - EPSG:2478 - EPSG:2479 - EPSG:2480 - EPSG:2481 - EPSG:2482 - EPSG:2483 - EPSG:2484 - EPSG:2485 - EPSG:2486 - EPSG:2487 - EPSG:2488 - EPSG:2489 - EPSG:2490 - EPSG:2491 - EPSG:2492 - EPSG:2493 - EPSG:2494 - EPSG:2495 - EPSG:2496 - EPSG:2497 - EPSG:2498 - EPSG:2499 - EPSG:2500 - EPSG:2501 - EPSG:2502 - EPSG:2503 - EPSG:2504 - EPSG:2505 - EPSG:2506 - EPSG:2507 - EPSG:2508 - EPSG:2509 - EPSG:2510 - EPSG:2511 - EPSG:2512 - EPSG:2513 - EPSG:2514 - EPSG:2515 - EPSG:2516 - EPSG:2517 - EPSG:2518 - EPSG:2519 - EPSG:2520 - EPSG:2521 - EPSG:2522 - EPSG:2523 - EPSG:2524 - EPSG:2525 - EPSG:2526 - EPSG:2527 - EPSG:2528 - EPSG:2529 - EPSG:2530 - EPSG:2531 - EPSG:2532 - EPSG:2533 - EPSG:2534 - EPSG:2535 - EPSG:2536 - EPSG:2537 - EPSG:2538 - EPSG:2539 - EPSG:2540 - EPSG:2541 - EPSG:2542 - EPSG:2543 - EPSG:2544 - EPSG:2545 - EPSG:2546 - EPSG:2547 - EPSG:2548 - EPSG:2549 - EPSG:2550 - EPSG:2551 - EPSG:2552 - EPSG:2553 - EPSG:2554 - EPSG:2555 - EPSG:2556 - EPSG:2557 - EPSG:2558 - EPSG:2559 - EPSG:2560 - EPSG:2561 - EPSG:2562 - EPSG:2563 - EPSG:2564 - EPSG:2565 - EPSG:2566 - EPSG:2567 - EPSG:2568 - EPSG:2569 - EPSG:2570 - EPSG:2571 - EPSG:2572 - EPSG:2573 - EPSG:2574 - EPSG:2575 - EPSG:2576 - EPSG:2577 - EPSG:2578 - EPSG:2579 - EPSG:2580 - EPSG:2581 - EPSG:2582 - EPSG:2583 - EPSG:2584 - EPSG:2585 - EPSG:2586 - EPSG:2587 - EPSG:2588 - EPSG:2589 - EPSG:2590 - EPSG:2591 - EPSG:2592 - EPSG:2593 - EPSG:2594 - EPSG:2595 - EPSG:2596 - EPSG:2597 - EPSG:2598 - EPSG:2599 - EPSG:2600 - EPSG:2601 - EPSG:2602 - EPSG:2603 - EPSG:2604 - EPSG:2605 - EPSG:2606 - EPSG:2607 - EPSG:2608 - EPSG:2609 - EPSG:2610 - EPSG:2611 - EPSG:2612 - EPSG:2613 - EPSG:2614 - EPSG:2615 - EPSG:2616 - EPSG:2617 - EPSG:2618 - EPSG:2619 - EPSG:2620 - EPSG:2621 - EPSG:2622 - EPSG:2623 - EPSG:2624 - EPSG:2625 - EPSG:2626 - EPSG:2627 - EPSG:2628 - EPSG:2629 - EPSG:2630 - EPSG:2631 - EPSG:2632 - EPSG:2633 - EPSG:2634 - EPSG:2635 - EPSG:2636 - EPSG:2637 - EPSG:2638 - EPSG:2639 - EPSG:2640 - EPSG:2641 - EPSG:2642 - EPSG:2643 - EPSG:2644 - EPSG:2645 - EPSG:2646 - EPSG:2647 - EPSG:2648 - EPSG:2649 - EPSG:2650 - EPSG:2651 - EPSG:2652 - EPSG:2653 - EPSG:2654 - EPSG:2655 - EPSG:2656 - EPSG:2657 - EPSG:2658 - EPSG:2659 - EPSG:2660 - EPSG:2661 - EPSG:2662 - EPSG:2663 - EPSG:2664 - EPSG:2665 - EPSG:2666 - EPSG:2667 - EPSG:2668 - EPSG:2669 - EPSG:2670 - EPSG:2671 - EPSG:2672 - EPSG:2673 - EPSG:2674 - EPSG:2675 - EPSG:2676 - EPSG:2677 - EPSG:2678 - EPSG:2679 - EPSG:2680 - EPSG:2681 - EPSG:2682 - EPSG:2683 - EPSG:2684 - EPSG:2685 - EPSG:2686 - EPSG:2687 - EPSG:2688 - EPSG:2689 - EPSG:2690 - EPSG:2691 - EPSG:2692 - EPSG:2693 - EPSG:2694 - EPSG:2695 - EPSG:2696 - EPSG:2697 - EPSG:2698 - EPSG:2699 - EPSG:2700 - EPSG:2701 - EPSG:2702 - EPSG:2703 - EPSG:2704 - EPSG:2705 - EPSG:2706 - EPSG:2707 - EPSG:2708 - EPSG:2709 - EPSG:2710 - EPSG:2711 - EPSG:2712 - EPSG:2713 - EPSG:2714 - EPSG:2715 - EPSG:2716 - EPSG:2717 - EPSG:2718 - EPSG:2719 - EPSG:2720 - EPSG:2721 - EPSG:2722 - EPSG:2723 - EPSG:2724 - EPSG:2725 - EPSG:2726 - EPSG:2727 - EPSG:2728 - EPSG:2729 - EPSG:2730 - EPSG:2731 - EPSG:2732 - EPSG:2733 - EPSG:2734 - EPSG:2735 - EPSG:2736 - EPSG:2737 - EPSG:2738 - EPSG:2739 - EPSG:2740 - EPSG:2741 - EPSG:2742 - EPSG:2743 - EPSG:2744 - EPSG:2745 - EPSG:2746 - EPSG:2747 - EPSG:2748 - EPSG:2749 - EPSG:2750 - EPSG:2751 - EPSG:2752 - EPSG:2753 - EPSG:2754 - EPSG:2755 - EPSG:2756 - EPSG:2757 - EPSG:2758 - EPSG:2759 - EPSG:2760 - EPSG:2761 - EPSG:2762 - EPSG:2763 - EPSG:2764 - EPSG:2765 - EPSG:2766 - EPSG:2767 - EPSG:2768 - EPSG:2769 - EPSG:2770 - EPSG:2771 - EPSG:2772 - EPSG:2773 - EPSG:2774 - EPSG:2775 - EPSG:2776 - EPSG:2777 - EPSG:2778 - EPSG:2779 - EPSG:2780 - EPSG:2781 - EPSG:2782 - EPSG:2783 - EPSG:2784 - EPSG:2785 - EPSG:2786 - EPSG:2787 - EPSG:2788 - EPSG:2789 - EPSG:2790 - EPSG:2791 - EPSG:2792 - EPSG:2793 - EPSG:2794 - EPSG:2795 - EPSG:2796 - EPSG:2797 - EPSG:2798 - EPSG:2799 - EPSG:2800 - EPSG:2801 - EPSG:2802 - EPSG:2803 - EPSG:2804 - EPSG:2805 - EPSG:2806 - EPSG:2807 - EPSG:2808 - EPSG:2809 - EPSG:2810 - EPSG:2811 - EPSG:2812 - EPSG:2813 - EPSG:2814 - EPSG:2815 - EPSG:2816 - EPSG:2817 - EPSG:2818 - EPSG:2819 - EPSG:2820 - EPSG:2821 - EPSG:2822 - EPSG:2823 - EPSG:2824 - EPSG:2825 - EPSG:2826 - EPSG:2827 - EPSG:2828 - EPSG:2829 - EPSG:2830 - EPSG:2831 - EPSG:2832 - EPSG:2833 - EPSG:2834 - EPSG:2835 - EPSG:2836 - EPSG:2837 - EPSG:2838 - EPSG:2839 - EPSG:2840 - EPSG:2841 - EPSG:2842 - EPSG:2843 - EPSG:2844 - EPSG:2845 - EPSG:2846 - EPSG:2847 - EPSG:2848 - EPSG:2849 - EPSG:2850 - EPSG:2851 - EPSG:2852 - EPSG:2853 - EPSG:2854 - EPSG:2855 - EPSG:2856 - EPSG:2857 - EPSG:2858 - EPSG:2859 - EPSG:2860 - EPSG:2861 - EPSG:2862 - EPSG:2863 - EPSG:2864 - EPSG:2865 - EPSG:2866 - EPSG:2867 - EPSG:2868 - EPSG:2869 - EPSG:2870 - EPSG:2871 - EPSG:2872 - EPSG:2873 - EPSG:2874 - EPSG:2875 - EPSG:2876 - EPSG:2877 - EPSG:2878 - EPSG:2879 - EPSG:2880 - EPSG:2881 - EPSG:2882 - EPSG:2883 - EPSG:2884 - EPSG:2885 - EPSG:2886 - EPSG:2887 - EPSG:2888 - EPSG:2889 - EPSG:2890 - EPSG:2891 - EPSG:2892 - EPSG:2893 - EPSG:2894 - EPSG:2895 - EPSG:2896 - EPSG:2897 - EPSG:2898 - EPSG:2899 - EPSG:2900 - EPSG:2901 - EPSG:2902 - EPSG:2903 - EPSG:2904 - EPSG:2905 - EPSG:2906 - EPSG:2907 - EPSG:2908 - EPSG:2909 - EPSG:2910 - EPSG:2911 - EPSG:2912 - EPSG:2913 - EPSG:2914 - EPSG:2915 - EPSG:2916 - EPSG:2917 - EPSG:2918 - EPSG:2919 - EPSG:2920 - EPSG:2921 - EPSG:2922 - EPSG:2923 - EPSG:2924 - EPSG:2925 - EPSG:2926 - EPSG:2927 - EPSG:2928 - EPSG:2929 - EPSG:2930 - EPSG:2931 - EPSG:2932 - EPSG:2933 - EPSG:2934 - EPSG:2935 - EPSG:2936 - EPSG:2937 - EPSG:2938 - EPSG:2939 - EPSG:2940 - EPSG:2941 - EPSG:2942 - EPSG:2943 - EPSG:2944 - EPSG:2945 - EPSG:2946 - EPSG:2947 - EPSG:2948 - EPSG:2949 - EPSG:2950 - EPSG:2951 - EPSG:2952 - EPSG:2953 - EPSG:2954 - EPSG:2955 - EPSG:2956 - EPSG:2957 - EPSG:2958 - EPSG:2959 - EPSG:2960 - EPSG:2961 - EPSG:2962 - EPSG:2963 - EPSG:2964 - EPSG:2965 - EPSG:2966 - EPSG:2967 - EPSG:2968 - EPSG:2969 - EPSG:2970 - EPSG:2971 - EPSG:2972 - EPSG:2973 - EPSG:2975 - EPSG:2976 - EPSG:2977 - EPSG:2978 - EPSG:2979 - EPSG:2980 - EPSG:2981 - EPSG:2982 - EPSG:2983 - EPSG:2984 - EPSG:2985 - EPSG:2986 - EPSG:2987 - EPSG:2988 - EPSG:2989 - EPSG:2990 - EPSG:2991 - EPSG:2992 - EPSG:2993 - EPSG:2994 - EPSG:2995 - EPSG:2996 - EPSG:2997 - EPSG:2998 - EPSG:2999 - EPSG:3000 - EPSG:3001 - EPSG:3002 - EPSG:3003 - EPSG:3004 - EPSG:3005 - EPSG:3006 - EPSG:3007 - EPSG:3008 - EPSG:3009 - EPSG:3010 - EPSG:3011 - EPSG:3012 - EPSG:3013 - EPSG:3014 - EPSG:3015 - EPSG:3016 - EPSG:3017 - EPSG:3018 - EPSG:3019 - EPSG:3020 - EPSG:3021 - EPSG:3022 - EPSG:3023 - EPSG:3024 - EPSG:3025 - EPSG:3026 - EPSG:3027 - EPSG:3028 - EPSG:3029 - EPSG:3030 - EPSG:3031 - EPSG:3032 - EPSG:3033 - EPSG:3034 - EPSG:3035 - EPSG:3036 - EPSG:3037 - EPSG:3038 - EPSG:3039 - EPSG:3040 - EPSG:3041 - EPSG:3042 - EPSG:3043 - EPSG:3044 - EPSG:3045 - EPSG:3046 - EPSG:3047 - EPSG:3048 - EPSG:3049 - EPSG:3050 - EPSG:3051 - EPSG:3052 - EPSG:3053 - EPSG:3054 - EPSG:3055 - EPSG:3056 - EPSG:3057 - EPSG:3058 - EPSG:3059 - EPSG:3060 - EPSG:3061 - EPSG:3062 - EPSG:3063 - EPSG:3064 - EPSG:3065 - EPSG:3066 - EPSG:3067 - EPSG:3068 - EPSG:3069 - EPSG:3070 - EPSG:3071 - EPSG:3072 - EPSG:3073 - EPSG:3074 - EPSG:3075 - EPSG:3076 - EPSG:3077 - EPSG:3078 - EPSG:3079 - EPSG:3080 - EPSG:3081 - EPSG:3082 - EPSG:3083 - EPSG:3084 - EPSG:3085 - EPSG:3086 - EPSG:3087 - EPSG:3088 - EPSG:3089 - EPSG:3090 - EPSG:3091 - EPSG:3092 - EPSG:3093 - EPSG:3094 - EPSG:3095 - EPSG:3096 - EPSG:3097 - EPSG:3098 - EPSG:3099 - EPSG:3100 - EPSG:3101 - EPSG:3102 - EPSG:3103 - EPSG:3104 - EPSG:3105 - EPSG:3106 - EPSG:3107 - EPSG:3108 - EPSG:3109 - EPSG:3110 - EPSG:3111 - EPSG:3112 - EPSG:3113 - EPSG:3114 - EPSG:3115 - EPSG:3116 - EPSG:3117 - EPSG:3118 - EPSG:3119 - EPSG:3120 - EPSG:3121 - EPSG:3122 - EPSG:3123 - EPSG:3124 - EPSG:3125 - EPSG:3126 - EPSG:3127 - EPSG:3128 - EPSG:3129 - EPSG:3130 - EPSG:3131 - EPSG:3132 - EPSG:3133 - EPSG:3134 - EPSG:3135 - EPSG:3136 - EPSG:3137 - EPSG:3138 - EPSG:3139 - EPSG:3140 - EPSG:3141 - EPSG:3142 - EPSG:3143 - EPSG:3144 - EPSG:3145 - EPSG:3146 - EPSG:3147 - EPSG:3148 - EPSG:3149 - EPSG:3150 - EPSG:3151 - EPSG:3152 - EPSG:3153 - EPSG:3154 - EPSG:3155 - EPSG:3156 - EPSG:3157 - EPSG:3158 - EPSG:3159 - EPSG:3160 - EPSG:3161 - EPSG:3162 - EPSG:3163 - EPSG:3164 - EPSG:3165 - EPSG:3166 - EPSG:3167 - EPSG:3168 - EPSG:3169 - EPSG:3170 - EPSG:3171 - EPSG:3172 - EPSG:3173 - EPSG:3174 - EPSG:3175 - EPSG:3176 - EPSG:3177 - EPSG:3178 - EPSG:3179 - EPSG:3180 - EPSG:3181 - EPSG:3182 - EPSG:3183 - EPSG:3184 - EPSG:3185 - EPSG:3186 - EPSG:3187 - EPSG:3188 - EPSG:3189 - EPSG:3190 - EPSG:3191 - EPSG:3192 - EPSG:3193 - EPSG:3194 - EPSG:3195 - EPSG:3196 - EPSG:3197 - EPSG:3198 - EPSG:3199 - EPSG:3200 - EPSG:3201 - EPSG:3202 - EPSG:3203 - EPSG:3204 - EPSG:3205 - EPSG:3206 - EPSG:3207 - EPSG:3208 - EPSG:3209 - EPSG:3210 - EPSG:3211 - EPSG:3212 - EPSG:3213 - EPSG:3214 - EPSG:3215 - EPSG:3216 - EPSG:3217 - EPSG:3218 - EPSG:3219 - EPSG:3220 - EPSG:3221 - EPSG:3222 - EPSG:3223 - EPSG:3224 - EPSG:3225 - EPSG:3226 - EPSG:3227 - EPSG:3228 - EPSG:3229 - EPSG:3230 - EPSG:3231 - EPSG:3232 - EPSG:3233 - EPSG:3234 - EPSG:3235 - EPSG:3236 - EPSG:3237 - EPSG:3238 - EPSG:3239 - EPSG:3240 - EPSG:3241 - EPSG:3242 - EPSG:3243 - EPSG:3244 - EPSG:3245 - EPSG:3246 - EPSG:3247 - EPSG:3248 - EPSG:3249 - EPSG:3250 - EPSG:3251 - EPSG:3252 - EPSG:3253 - EPSG:3254 - EPSG:3255 - EPSG:3256 - EPSG:3257 - EPSG:3258 - EPSG:3259 - EPSG:3260 - EPSG:3261 - EPSG:3262 - EPSG:3263 - EPSG:3264 - EPSG:3265 - EPSG:3266 - EPSG:3267 - EPSG:3268 - EPSG:3269 - EPSG:3270 - EPSG:3271 - EPSG:3272 - EPSG:3273 - EPSG:3274 - EPSG:3275 - EPSG:3276 - EPSG:3277 - EPSG:3278 - EPSG:3279 - EPSG:3280 - EPSG:3281 - EPSG:3282 - EPSG:3283 - EPSG:3284 - EPSG:3285 - EPSG:3286 - EPSG:3287 - EPSG:3288 - EPSG:3289 - EPSG:3290 - EPSG:3291 - EPSG:3292 - EPSG:3293 - EPSG:3294 - EPSG:3295 - EPSG:3296 - EPSG:3297 - EPSG:3298 - EPSG:3299 - EPSG:3300 - EPSG:3301 - EPSG:3302 - EPSG:3303 - EPSG:3304 - EPSG:3305 - EPSG:3306 - EPSG:3307 - EPSG:3308 - EPSG:3309 - EPSG:3310 - EPSG:3311 - EPSG:3312 - EPSG:3313 - EPSG:3314 - EPSG:3315 - EPSG:3316 - EPSG:3317 - EPSG:3318 - EPSG:3319 - EPSG:3320 - EPSG:3321 - EPSG:3322 - EPSG:3323 - EPSG:3324 - EPSG:3325 - EPSG:3326 - EPSG:3327 - EPSG:3328 - EPSG:3329 - EPSG:3330 - EPSG:3331 - EPSG:3332 - EPSG:3333 - EPSG:3334 - EPSG:3335 - EPSG:3336 - EPSG:3337 - EPSG:3338 - EPSG:3339 - EPSG:3340 - EPSG:3341 - EPSG:3342 - EPSG:3343 - EPSG:3344 - EPSG:3345 - EPSG:3346 - EPSG:3347 - EPSG:3348 - EPSG:3349 - EPSG:3350 - EPSG:3351 - EPSG:3352 - EPSG:3353 - EPSG:3354 - EPSG:3355 - EPSG:3356 - EPSG:3357 - EPSG:3358 - EPSG:3359 - EPSG:3360 - EPSG:3361 - EPSG:3362 - EPSG:3363 - EPSG:3364 - EPSG:3365 - EPSG:3366 - EPSG:3367 - EPSG:3368 - EPSG:3369 - EPSG:3370 - EPSG:3371 - EPSG:3372 - EPSG:3373 - EPSG:3374 - EPSG:3375 - EPSG:3376 - EPSG:3377 - EPSG:3378 - EPSG:3379 - EPSG:3380 - EPSG:3381 - EPSG:3382 - EPSG:3383 - EPSG:3384 - EPSG:3385 - EPSG:3386 - EPSG:3387 - EPSG:3388 - EPSG:3389 - EPSG:3390 - EPSG:3391 - EPSG:3392 - EPSG:3393 - EPSG:3394 - EPSG:3395 - EPSG:3396 - EPSG:3397 - EPSG:3398 - EPSG:3399 - EPSG:3400 - EPSG:3401 - EPSG:3402 - EPSG:3403 - EPSG:3404 - EPSG:3405 - EPSG:3406 - EPSG:3407 - EPSG:3408 - EPSG:3409 - EPSG:3410 - EPSG:3411 - EPSG:3412 - EPSG:3413 - EPSG:3414 - EPSG:3415 - EPSG:3416 - EPSG:3417 - EPSG:3418 - EPSG:3419 - EPSG:3420 - EPSG:3421 - EPSG:3422 - EPSG:3423 - EPSG:3424 - EPSG:3425 - EPSG:3426 - EPSG:3427 - EPSG:3428 - EPSG:3429 - EPSG:3430 - EPSG:3431 - EPSG:3432 - EPSG:3433 - EPSG:3434 - EPSG:3435 - EPSG:3436 - EPSG:3437 - EPSG:3438 - EPSG:3439 - EPSG:3440 - EPSG:3441 - EPSG:3442 - EPSG:3443 - EPSG:3444 - EPSG:3445 - EPSG:3446 - EPSG:3447 - EPSG:3448 - EPSG:3449 - EPSG:3450 - EPSG:3451 - EPSG:3452 - EPSG:3453 - EPSG:3454 - EPSG:3455 - EPSG:3456 - EPSG:3457 - EPSG:3458 - EPSG:3459 - EPSG:3460 - EPSG:3461 - EPSG:3462 - EPSG:3463 - EPSG:3464 - EPSG:3465 - EPSG:3466 - EPSG:3467 - EPSG:3468 - EPSG:3469 - EPSG:3470 - EPSG:3471 - EPSG:3472 - EPSG:3473 - EPSG:3474 - EPSG:3475 - EPSG:3476 - EPSG:3477 - EPSG:3478 - EPSG:3479 - EPSG:3480 - EPSG:3481 - EPSG:3482 - EPSG:3483 - EPSG:3484 - EPSG:3485 - EPSG:3486 - EPSG:3487 - EPSG:3488 - EPSG:3489 - EPSG:3490 - EPSG:3491 - EPSG:3492 - EPSG:3493 - EPSG:3494 - EPSG:3495 - EPSG:3496 - EPSG:3497 - EPSG:3498 - EPSG:3499 - EPSG:3500 - EPSG:3501 - EPSG:3502 - EPSG:3503 - EPSG:3504 - EPSG:3505 - EPSG:3506 - EPSG:3507 - EPSG:3508 - EPSG:3509 - EPSG:3510 - EPSG:3511 - EPSG:3512 - EPSG:3513 - EPSG:3514 - EPSG:3515 - EPSG:3516 - EPSG:3517 - EPSG:3518 - EPSG:3519 - EPSG:3520 - EPSG:3521 - EPSG:3522 - EPSG:3523 - EPSG:3524 - EPSG:3525 - EPSG:3526 - EPSG:3527 - EPSG:3528 - EPSG:3529 - EPSG:3530 - EPSG:3531 - EPSG:3532 - EPSG:3533 - EPSG:3534 - EPSG:3535 - EPSG:3536 - EPSG:3537 - EPSG:3538 - EPSG:3539 - EPSG:3540 - EPSG:3541 - EPSG:3542 - EPSG:3543 - EPSG:3544 - EPSG:3545 - EPSG:3546 - EPSG:3547 - EPSG:3548 - EPSG:3549 - EPSG:3550 - EPSG:3551 - EPSG:3552 - EPSG:3553 - EPSG:3554 - EPSG:3555 - EPSG:3556 - EPSG:3557 - EPSG:3558 - EPSG:3559 - EPSG:3560 - EPSG:3561 - EPSG:3562 - EPSG:3563 - EPSG:3564 - EPSG:3565 - EPSG:3566 - EPSG:3567 - EPSG:3568 - EPSG:3569 - EPSG:3570 - EPSG:3571 - EPSG:3572 - EPSG:3573 - EPSG:3574 - EPSG:3575 - EPSG:3576 - EPSG:3577 - EPSG:3578 - EPSG:3579 - EPSG:3580 - EPSG:3581 - EPSG:3582 - EPSG:3583 - EPSG:3584 - EPSG:3585 - EPSG:3586 - EPSG:3587 - EPSG:3588 - EPSG:3589 - EPSG:3590 - EPSG:3591 - EPSG:3592 - EPSG:3593 - EPSG:3594 - EPSG:3595 - EPSG:3596 - EPSG:3597 - EPSG:3598 - EPSG:3599 - EPSG:3600 - EPSG:3601 - EPSG:3602 - EPSG:3603 - EPSG:3604 - EPSG:3605 - EPSG:3606 - EPSG:3607 - EPSG:3608 - EPSG:3609 - EPSG:3610 - EPSG:3611 - EPSG:3612 - EPSG:3613 - EPSG:3614 - EPSG:3615 - EPSG:3616 - EPSG:3617 - EPSG:3618 - EPSG:3619 - EPSG:3620 - EPSG:3621 - EPSG:3622 - EPSG:3623 - EPSG:3624 - EPSG:3625 - EPSG:3626 - EPSG:3627 - EPSG:3628 - EPSG:3629 - EPSG:3630 - EPSG:3631 - EPSG:3632 - EPSG:3633 - EPSG:3634 - EPSG:3635 - EPSG:3636 - EPSG:3637 - EPSG:3638 - EPSG:3639 - EPSG:3640 - EPSG:3641 - EPSG:3642 - EPSG:3643 - EPSG:3644 - EPSG:3645 - EPSG:3646 - EPSG:3647 - EPSG:3648 - EPSG:3649 - EPSG:3650 - EPSG:3651 - EPSG:3652 - EPSG:3653 - EPSG:3654 - EPSG:3655 - EPSG:3656 - EPSG:3657 - EPSG:3658 - EPSG:3659 - EPSG:3660 - EPSG:3661 - EPSG:3662 - EPSG:3663 - EPSG:3664 - EPSG:3665 - EPSG:3666 - EPSG:3667 - EPSG:3668 - EPSG:3669 - EPSG:3670 - EPSG:3671 - EPSG:3672 - EPSG:3673 - EPSG:3674 - EPSG:3675 - EPSG:3676 - EPSG:3677 - EPSG:3678 - EPSG:3679 - EPSG:3680 - EPSG:3681 - EPSG:3682 - EPSG:3683 - EPSG:3684 - EPSG:3685 - EPSG:3686 - EPSG:3687 - EPSG:3688 - EPSG:3689 - EPSG:3690 - EPSG:3691 - EPSG:3692 - EPSG:3693 - EPSG:3694 - EPSG:3695 - EPSG:3696 - EPSG:3697 - EPSG:3698 - EPSG:3699 - EPSG:3700 - EPSG:3701 - EPSG:3702 - EPSG:3703 - EPSG:3704 - EPSG:3705 - EPSG:3706 - EPSG:3707 - EPSG:3708 - EPSG:3709 - EPSG:3710 - EPSG:3711 - EPSG:3712 - EPSG:3713 - EPSG:3714 - EPSG:3715 - EPSG:3716 - EPSG:3717 - EPSG:3718 - EPSG:3719 - EPSG:3720 - EPSG:3721 - EPSG:3722 - EPSG:3723 - EPSG:3724 - EPSG:3725 - EPSG:3726 - EPSG:3727 - EPSG:3728 - EPSG:3729 - EPSG:3730 - EPSG:3731 - EPSG:3732 - EPSG:3733 - EPSG:3734 - EPSG:3735 - EPSG:3736 - EPSG:3737 - EPSG:3738 - EPSG:3739 - EPSG:3740 - EPSG:3741 - EPSG:3742 - EPSG:3743 - EPSG:3744 - EPSG:3745 - EPSG:3746 - EPSG:3747 - EPSG:3748 - EPSG:3749 - EPSG:3750 - EPSG:3751 - EPSG:3752 - EPSG:3753 - EPSG:3754 - EPSG:3755 - EPSG:3756 - EPSG:3757 - EPSG:3758 - EPSG:3759 - EPSG:3760 - EPSG:3761 - EPSG:3762 - EPSG:3763 - EPSG:3764 - EPSG:3765 - EPSG:3766 - EPSG:3767 - EPSG:3768 - EPSG:3769 - EPSG:3770 - EPSG:3771 - EPSG:3772 - EPSG:3773 - EPSG:3774 - EPSG:3775 - EPSG:3776 - EPSG:3777 - EPSG:3778 - EPSG:3779 - EPSG:3780 - EPSG:3781 - EPSG:3782 - EPSG:3783 - EPSG:3784 - EPSG:3785 - EPSG:3786 - EPSG:3787 - EPSG:3788 - EPSG:3789 - EPSG:3790 - EPSG:3791 - EPSG:3793 - EPSG:3794 - EPSG:3795 - EPSG:3796 - EPSG:3797 - EPSG:3798 - EPSG:3799 - EPSG:3800 - EPSG:3801 - EPSG:3802 - EPSG:3812 - EPSG:3814 - EPSG:3815 - EPSG:3816 - EPSG:3819 - EPSG:3821 - EPSG:3822 - EPSG:3823 - EPSG:3824 - EPSG:3825 - EPSG:3826 - EPSG:3827 - EPSG:3828 - EPSG:3829 - EPSG:3832 - EPSG:3833 - EPSG:3834 - EPSG:3835 - EPSG:3836 - EPSG:3837 - EPSG:3838 - EPSG:3839 - EPSG:3840 - EPSG:3841 - EPSG:3842 - EPSG:3843 - EPSG:3844 - EPSG:3845 - EPSG:3846 - EPSG:3847 - EPSG:3848 - EPSG:3849 - EPSG:3850 - EPSG:3851 - EPSG:3852 - EPSG:3854 - EPSG:3855 - EPSG:3857 - EPSG:3886 - EPSG:3887 - EPSG:3888 - EPSG:3889 - EPSG:3890 - EPSG:3891 - EPSG:3892 - EPSG:3893 - EPSG:3906 - EPSG:3907 - EPSG:3908 - EPSG:3909 - EPSG:3910 - EPSG:3911 - EPSG:3912 - EPSG:3920 - EPSG:3942 - EPSG:3943 - EPSG:3944 - EPSG:3945 - EPSG:3946 - EPSG:3947 - EPSG:3948 - EPSG:3949 - EPSG:3950 - EPSG:3968 - EPSG:3969 - EPSG:3970 - EPSG:3973 - EPSG:3974 - EPSG:3975 - EPSG:3976 - EPSG:3978 - EPSG:3979 - EPSG:3985 - EPSG:3986 - EPSG:3987 - EPSG:3988 - EPSG:3989 - EPSG:3991 - EPSG:3992 - EPSG:3993 - EPSG:3994 - EPSG:3995 - EPSG:3996 - EPSG:3997 - EPSG:4000 - EPSG:4001 - EPSG:4002 - EPSG:4003 - EPSG:4004 - EPSG:4005 - EPSG:4006 - EPSG:4007 - EPSG:4008 - EPSG:4009 - EPSG:4010 - EPSG:4011 - EPSG:4012 - EPSG:4013 - EPSG:4014 - EPSG:4015 - EPSG:4016 - EPSG:4017 - EPSG:4018 - EPSG:4019 - EPSG:4020 - EPSG:4021 - EPSG:4022 - EPSG:4023 - EPSG:4024 - EPSG:4025 - EPSG:4026 - EPSG:4027 - EPSG:4028 - EPSG:4029 - EPSG:4030 - EPSG:4031 - EPSG:4032 - EPSG:4033 - EPSG:4034 - EPSG:4035 - EPSG:4036 - EPSG:4037 - EPSG:4038 - EPSG:4039 - EPSG:4040 - EPSG:4041 - EPSG:4042 - EPSG:4043 - EPSG:4044 - EPSG:4045 - EPSG:4046 - EPSG:4047 - EPSG:4048 - EPSG:4049 - EPSG:4050 - EPSG:4051 - EPSG:4052 - EPSG:4053 - EPSG:4054 - EPSG:4055 - EPSG:4056 - EPSG:4057 - EPSG:4058 - EPSG:4059 - EPSG:4060 - EPSG:4061 - EPSG:4062 - EPSG:4063 - EPSG:4071 - EPSG:4073 - EPSG:4074 - EPSG:4075 - EPSG:4079 - EPSG:4080 - EPSG:4081 - EPSG:4082 - EPSG:4083 - EPSG:4087 - EPSG:4088 - EPSG:4093 - EPSG:4094 - EPSG:4095 - EPSG:4096 - EPSG:4097 - EPSG:4098 - EPSG:4099 - EPSG:4100 - EPSG:4120 - EPSG:4121 - EPSG:4122 - EPSG:4123 - EPSG:4124 - EPSG:4125 - EPSG:4126 - EPSG:4127 - EPSG:4128 - EPSG:4129 - EPSG:4130 - EPSG:4131 - EPSG:4132 - EPSG:4133 - EPSG:4134 - EPSG:4135 - EPSG:4136 - EPSG:4137 - EPSG:4138 - EPSG:4139 - EPSG:4140 - EPSG:4141 - EPSG:4142 - EPSG:4143 - EPSG:4144 - EPSG:4145 - EPSG:4146 - EPSG:4147 - EPSG:4148 - EPSG:4149 - EPSG:4150 - EPSG:4151 - EPSG:4152 - EPSG:4153 - EPSG:4154 - EPSG:4155 - EPSG:4156 - EPSG:4157 - EPSG:4158 - EPSG:4159 - EPSG:4160 - EPSG:4161 - EPSG:4162 - EPSG:4163 - EPSG:4164 - EPSG:4165 - EPSG:4166 - EPSG:4167 - EPSG:4168 - EPSG:4169 - EPSG:4170 - EPSG:4171 - EPSG:4172 - EPSG:4173 - EPSG:4174 - EPSG:4175 - EPSG:4176 - EPSG:4178 - EPSG:4179 - EPSG:4180 - EPSG:4181 - EPSG:4182 - EPSG:4183 - EPSG:4184 - EPSG:4185 - EPSG:4188 - EPSG:4189 - EPSG:4190 - EPSG:4191 - EPSG:4192 - EPSG:4193 - EPSG:4194 - EPSG:4195 - EPSG:4196 - EPSG:4197 - EPSG:4198 - EPSG:4199 - EPSG:4200 - EPSG:4201 - EPSG:4202 - EPSG:4203 - EPSG:4204 - EPSG:4205 - EPSG:4206 - EPSG:4207 - EPSG:4208 - EPSG:4209 - EPSG:4210 - EPSG:4211 - EPSG:4212 - EPSG:4213 - EPSG:4214 - EPSG:4215 - EPSG:4216 - EPSG:4217 - EPSG:4218 - EPSG:4219 - EPSG:4220 - EPSG:4221 - EPSG:4222 - EPSG:4223 - EPSG:4224 - EPSG:4225 - EPSG:4226 - EPSG:4227 - EPSG:4228 - EPSG:4229 - EPSG:4230 - EPSG:4231 - EPSG:4232 - EPSG:4233 - EPSG:4234 - EPSG:4235 - EPSG:4236 - EPSG:4237 - EPSG:4238 - EPSG:4239 - EPSG:4240 - EPSG:4241 - EPSG:4242 - EPSG:4243 - EPSG:4244 - EPSG:4245 - EPSG:4246 - EPSG:4247 - EPSG:4248 - EPSG:4249 - EPSG:4250 - EPSG:4251 - EPSG:4252 - EPSG:4253 - EPSG:4254 - EPSG:4255 - EPSG:4256 - EPSG:4257 - EPSG:4258 - EPSG:4259 - EPSG:4260 - EPSG:4261 - EPSG:4262 - EPSG:4263 - EPSG:4264 - EPSG:4265 - EPSG:4266 - EPSG:4267 - EPSG:4268 - EPSG:4269 - EPSG:4270 - EPSG:4271 - EPSG:4272 - EPSG:4273 - EPSG:4274 - EPSG:4275 - EPSG:4276 - EPSG:4277 - EPSG:4278 - EPSG:4279 - EPSG:4280 - EPSG:4281 - EPSG:4282 - EPSG:4283 - EPSG:4284 - EPSG:4285 - EPSG:4286 - EPSG:4287 - EPSG:4288 - EPSG:4289 - EPSG:4291 - EPSG:4292 - EPSG:4293 - EPSG:4294 - EPSG:4295 - EPSG:4296 - EPSG:4297 - EPSG:4298 - EPSG:4299 - EPSG:4300 - EPSG:4301 - EPSG:4302 - EPSG:4303 - EPSG:4304 - EPSG:4306 - EPSG:4307 - EPSG:4308 - EPSG:4309 - EPSG:4310 - EPSG:4311 - EPSG:4312 - EPSG:4313 - EPSG:4314 - EPSG:4315 - EPSG:4316 - EPSG:4317 - EPSG:4318 - EPSG:4319 - EPSG:4322 - EPSG:4324 - EPSG:4326 - EPSG:4327 - EPSG:4328 - EPSG:4329 - EPSG:4330 - EPSG:4331 - EPSG:4332 - EPSG:4333 - EPSG:4334 - EPSG:4335 - EPSG:4336 - EPSG:4337 - EPSG:4338 - EPSG:4339 - EPSG:4340 - EPSG:4341 - EPSG:4342 - EPSG:4343 - EPSG:4344 - EPSG:4345 - EPSG:4346 - EPSG:4347 - EPSG:4348 - EPSG:4349 - EPSG:4350 - EPSG:4351 - EPSG:4352 - EPSG:4353 - EPSG:4354 - EPSG:4355 - EPSG:4356 - EPSG:4357 - EPSG:4358 - EPSG:4359 - EPSG:4360 - EPSG:4361 - EPSG:4362 - EPSG:4363 - EPSG:4364 - EPSG:4365 - EPSG:4366 - EPSG:4367 - EPSG:4368 - EPSG:4369 - EPSG:4370 - EPSG:4371 - EPSG:4372 - EPSG:4373 - EPSG:4374 - EPSG:4375 - EPSG:4376 - EPSG:4377 - EPSG:4378 - EPSG:4379 - EPSG:4380 - EPSG:4381 - EPSG:4382 - EPSG:4383 - EPSG:4384 - EPSG:4385 - EPSG:4386 - EPSG:4387 - EPSG:4388 - EPSG:4389 - EPSG:4399 - EPSG:4400 - EPSG:4401 - EPSG:4402 - EPSG:4403 - EPSG:4404 - EPSG:4405 - EPSG:4406 - EPSG:4407 - EPSG:4408 - EPSG:4409 - EPSG:4410 - EPSG:4411 - EPSG:4412 - EPSG:4413 - EPSG:4414 - EPSG:4415 - EPSG:4417 - EPSG:4418 - EPSG:4419 - EPSG:4420 - EPSG:4421 - EPSG:4422 - EPSG:4423 - EPSG:4424 - EPSG:4425 - EPSG:4426 - EPSG:4427 - EPSG:4428 - EPSG:4429 - EPSG:4430 - EPSG:4431 - EPSG:4432 - EPSG:4433 - EPSG:4434 - EPSG:4437 - EPSG:4438 - EPSG:4439 - EPSG:4440 - EPSG:4455 - EPSG:4456 - EPSG:4457 - EPSG:4458 - EPSG:4462 - EPSG:4463 - EPSG:4465 - EPSG:4466 - EPSG:4467 - EPSG:4468 - EPSG:4469 - EPSG:4470 - EPSG:4471 - EPSG:4472 - EPSG:4473 - EPSG:4474 - EPSG:4475 - EPSG:4479 - EPSG:4480 - EPSG:4481 - EPSG:4482 - EPSG:4483 - EPSG:4484 - EPSG:4485 - EPSG:4486 - EPSG:4487 - EPSG:4488 - EPSG:4489 - EPSG:4490 - EPSG:4491 - EPSG:4492 - EPSG:4493 - EPSG:4494 - EPSG:4495 - EPSG:4496 - EPSG:4497 - EPSG:4498 - EPSG:4499 - EPSG:4500 - EPSG:4501 - EPSG:4502 - EPSG:4503 - EPSG:4504 - EPSG:4505 - EPSG:4506 - EPSG:4507 - EPSG:4508 - EPSG:4509 - EPSG:4510 - EPSG:4511 - EPSG:4512 - EPSG:4513 - EPSG:4514 - EPSG:4515 - EPSG:4516 - EPSG:4517 - EPSG:4518 - EPSG:4519 - EPSG:4520 - EPSG:4521 - EPSG:4522 - EPSG:4523 - EPSG:4524 - EPSG:4525 - EPSG:4526 - EPSG:4527 - EPSG:4528 - EPSG:4529 - EPSG:4530 - EPSG:4531 - EPSG:4532 - EPSG:4533 - EPSG:4534 - EPSG:4535 - EPSG:4536 - EPSG:4537 - EPSG:4538 - EPSG:4539 - EPSG:4540 - EPSG:4541 - EPSG:4542 - EPSG:4543 - EPSG:4544 - EPSG:4545 - EPSG:4546 - EPSG:4547 - EPSG:4548 - EPSG:4549 - EPSG:4550 - EPSG:4551 - EPSG:4552 - EPSG:4553 - EPSG:4554 - EPSG:4555 - EPSG:4556 - EPSG:4557 - EPSG:4558 - EPSG:4559 - EPSG:4568 - EPSG:4569 - EPSG:4570 - EPSG:4571 - EPSG:4572 - EPSG:4573 - EPSG:4574 - EPSG:4575 - EPSG:4576 - EPSG:4577 - EPSG:4578 - EPSG:4579 - EPSG:4580 - EPSG:4581 - EPSG:4582 - EPSG:4583 - EPSG:4584 - EPSG:4585 - EPSG:4586 - EPSG:4587 - EPSG:4588 - EPSG:4589 - EPSG:4600 - EPSG:4601 - EPSG:4602 - EPSG:4603 - EPSG:4604 - EPSG:4605 - EPSG:4606 - EPSG:4607 - EPSG:4608 - EPSG:4609 - EPSG:4610 - EPSG:4611 - EPSG:4612 - EPSG:4613 - EPSG:4614 - EPSG:4615 - EPSG:4616 - EPSG:4617 - EPSG:4618 - EPSG:4619 - EPSG:4620 - EPSG:4621 - EPSG:4622 - EPSG:4623 - EPSG:4624 - EPSG:4625 - EPSG:4626 - EPSG:4627 - EPSG:4628 - EPSG:4629 - EPSG:4630 - EPSG:4631 - EPSG:4632 - EPSG:4633 - EPSG:4634 - EPSG:4635 - EPSG:4636 - EPSG:4637 - EPSG:4638 - EPSG:4639 - EPSG:4640 - EPSG:4641 - EPSG:4642 - EPSG:4643 - EPSG:4644 - EPSG:4645 - EPSG:4646 - EPSG:4647 - EPSG:4652 - EPSG:4653 - EPSG:4654 - EPSG:4655 - EPSG:4656 - EPSG:4657 - EPSG:4658 - EPSG:4659 - EPSG:4660 - EPSG:4661 - EPSG:4662 - EPSG:4663 - EPSG:4664 - EPSG:4665 - EPSG:4666 - EPSG:4667 - EPSG:4668 - EPSG:4669 - EPSG:4670 - EPSG:4671 - EPSG:4672 - EPSG:4673 - EPSG:4674 - EPSG:4675 - EPSG:4676 - EPSG:4677 - EPSG:4678 - EPSG:4679 - EPSG:4680 - EPSG:4681 - EPSG:4682 - EPSG:4683 - EPSG:4684 - EPSG:4685 - EPSG:4686 - EPSG:4687 - EPSG:4688 - EPSG:4689 - EPSG:4690 - EPSG:4691 - EPSG:4692 - EPSG:4693 - EPSG:4694 - EPSG:4695 - EPSG:4696 - EPSG:4697 - EPSG:4698 - EPSG:4699 - EPSG:4700 - EPSG:4701 - EPSG:4702 - EPSG:4703 - EPSG:4704 - EPSG:4705 - EPSG:4706 - EPSG:4707 - EPSG:4708 - EPSG:4709 - EPSG:4710 - EPSG:4711 - EPSG:4712 - EPSG:4713 - EPSG:4714 - EPSG:4715 - EPSG:4716 - EPSG:4717 - EPSG:4718 - EPSG:4719 - EPSG:4720 - EPSG:4721 - EPSG:4722 - EPSG:4723 - EPSG:4724 - EPSG:4725 - EPSG:4726 - EPSG:4727 - EPSG:4728 - EPSG:4729 - EPSG:4730 - EPSG:4731 - EPSG:4732 - EPSG:4733 - EPSG:4734 - EPSG:4735 - EPSG:4736 - EPSG:4737 - EPSG:4738 - EPSG:4739 - EPSG:4740 - EPSG:4741 - EPSG:4742 - EPSG:4743 - EPSG:4744 - EPSG:4745 - EPSG:4746 - EPSG:4747 - EPSG:4748 - EPSG:4749 - EPSG:4750 - EPSG:4751 - EPSG:4752 - EPSG:4753 - EPSG:4754 - EPSG:4755 - EPSG:4756 - EPSG:4757 - EPSG:4758 - EPSG:4759 - EPSG:4760 - EPSG:4761 - EPSG:4762 - EPSG:4763 - EPSG:4764 - EPSG:4765 - EPSG:4766 - EPSG:4767 - EPSG:4768 - EPSG:4769 - EPSG:4770 - EPSG:4771 - EPSG:4772 - EPSG:4773 - EPSG:4774 - EPSG:4775 - EPSG:4776 - EPSG:4777 - EPSG:4778 - EPSG:4779 - EPSG:4780 - EPSG:4781 - EPSG:4782 - EPSG:4783 - EPSG:4784 - EPSG:4785 - EPSG:4786 - EPSG:4787 - EPSG:4788 - EPSG:4789 - EPSG:4790 - EPSG:4791 - EPSG:4792 - EPSG:4793 - EPSG:4794 - EPSG:4795 - EPSG:4796 - EPSG:4797 - EPSG:4798 - EPSG:4799 - EPSG:4800 - EPSG:4801 - EPSG:4802 - EPSG:4803 - EPSG:4804 - EPSG:4805 - EPSG:4806 - EPSG:4807 - EPSG:4808 - EPSG:4809 - EPSG:4810 - EPSG:4811 - EPSG:4812 - EPSG:4813 - EPSG:4814 - EPSG:4815 - EPSG:4816 - EPSG:4817 - EPSG:4818 - EPSG:4819 - EPSG:4820 - EPSG:4821 - EPSG:4822 - EPSG:4823 - EPSG:4824 - EPSG:4826 - EPSG:4839 - EPSG:4855 - EPSG:4856 - EPSG:4857 - EPSG:4858 - EPSG:4859 - EPSG:4860 - EPSG:4861 - EPSG:4862 - EPSG:4863 - EPSG:4864 - EPSG:4865 - EPSG:4866 - EPSG:4867 - EPSG:4868 - EPSG:4869 - EPSG:4870 - EPSG:4871 - EPSG:4872 - EPSG:4873 - EPSG:4874 - EPSG:4875 - EPSG:4876 - EPSG:4877 - EPSG:4878 - EPSG:4879 - EPSG:4880 - EPSG:4882 - EPSG:4883 - EPSG:4884 - EPSG:4885 - EPSG:4886 - EPSG:4887 - EPSG:4888 - EPSG:4889 - EPSG:4890 - EPSG:4891 - EPSG:4892 - EPSG:4893 - EPSG:4894 - EPSG:4895 - EPSG:4896 - EPSG:4897 - EPSG:4898 - EPSG:4899 - EPSG:4900 - EPSG:4901 - EPSG:4902 - EPSG:4903 - EPSG:4904 - EPSG:4906 - EPSG:4907 - EPSG:4908 - EPSG:4909 - EPSG:4910 - EPSG:4911 - EPSG:4912 - EPSG:4913 - EPSG:4914 - EPSG:4915 - EPSG:4916 - EPSG:4917 - EPSG:4918 - EPSG:4919 - EPSG:4920 - EPSG:4921 - EPSG:4922 - EPSG:4923 - EPSG:4924 - EPSG:4925 - EPSG:4926 - EPSG:4927 - EPSG:4928 - EPSG:4929 - EPSG:4930 - EPSG:4931 - EPSG:4932 - EPSG:4933 - EPSG:4934 - EPSG:4935 - EPSG:4936 - EPSG:4937 - EPSG:4938 - EPSG:4939 - EPSG:4940 - EPSG:4941 - EPSG:4942 - EPSG:4943 - EPSG:4944 - EPSG:4945 - EPSG:4946 - EPSG:4947 - EPSG:4948 - EPSG:4949 - EPSG:4950 - EPSG:4951 - EPSG:4952 - EPSG:4953 - EPSG:4954 - EPSG:4955 - EPSG:4956 - EPSG:4957 - EPSG:4958 - EPSG:4959 - EPSG:4960 - EPSG:4961 - EPSG:4962 - EPSG:4963 - EPSG:4964 - EPSG:4965 - EPSG:4966 - EPSG:4967 - EPSG:4968 - EPSG:4969 - EPSG:4970 - EPSG:4971 - EPSG:4972 - EPSG:4973 - EPSG:4974 - EPSG:4975 - EPSG:4976 - EPSG:4977 - EPSG:4978 - EPSG:4979 - EPSG:4980 - EPSG:4981 - EPSG:4982 - EPSG:4983 - EPSG:4984 - EPSG:4985 - EPSG:4986 - EPSG:4987 - EPSG:4988 - EPSG:4989 - EPSG:4990 - EPSG:4991 - EPSG:4992 - EPSG:4993 - EPSG:4994 - EPSG:4995 - EPSG:4996 - EPSG:4997 - EPSG:4998 - EPSG:4999 - EPSG:5011 - EPSG:5012 - EPSG:5013 - EPSG:5014 - EPSG:5015 - EPSG:5016 - EPSG:5017 - EPSG:5018 - EPSG:5041 - EPSG:5042 - EPSG:5069 - EPSG:5070 - EPSG:5071 - EPSG:5072 - EPSG:5600 - EPSG:5601 - EPSG:5602 - EPSG:5603 - EPSG:5604 - EPSG:5605 - EPSG:5606 - EPSG:5607 - EPSG:5608 - EPSG:5609 - EPSG:5610 - EPSG:5611 - EPSG:5612 - EPSG:5613 - EPSG:5614 - EPSG:5615 - EPSG:5616 - EPSG:5617 - EPSG:5618 - EPSG:5619 - EPSG:5620 - EPSG:5621 - EPSG:5701 - EPSG:5702 - EPSG:5703 - EPSG:5704 - EPSG:5705 - EPSG:5706 - EPSG:5709 - EPSG:5710 - EPSG:5711 - EPSG:5712 - EPSG:5713 - EPSG:5714 - EPSG:5715 - EPSG:5716 - EPSG:5717 - EPSG:5718 - EPSG:5719 - EPSG:5720 - EPSG:5721 - EPSG:5722 - EPSG:5723 - EPSG:5724 - EPSG:5725 - EPSG:5726 - EPSG:5727 - EPSG:5728 - EPSG:5729 - EPSG:5730 - EPSG:5731 - EPSG:5732 - EPSG:5733 - EPSG:5734 - EPSG:5735 - EPSG:5736 - EPSG:5737 - EPSG:5738 - EPSG:5739 - EPSG:5740 - EPSG:5741 - EPSG:5742 - EPSG:5743 - EPSG:5744 - EPSG:5745 - EPSG:5746 - EPSG:5747 - EPSG:5748 - EPSG:5749 - EPSG:5750 - EPSG:5751 - EPSG:5752 - EPSG:5753 - EPSG:5754 - EPSG:5755 - EPSG:5756 - EPSG:5757 - EPSG:5758 - EPSG:5759 - EPSG:5760 - EPSG:5761 - EPSG:5762 - EPSG:5763 - EPSG:5764 - EPSG:5765 - EPSG:5766 - EPSG:5767 - EPSG:5768 - EPSG:5769 - EPSG:5770 - EPSG:5771 - EPSG:5772 - EPSG:5773 - EPSG:5774 - EPSG:5775 - EPSG:5776 - EPSG:5777 - EPSG:5778 - EPSG:5779 - EPSG:5780 - EPSG:5781 - EPSG:5782 - EPSG:5783 - EPSG:5784 - EPSG:5785 - EPSG:5786 - EPSG:5787 - EPSG:5788 - EPSG:5789 - EPSG:5790 - EPSG:5791 - EPSG:5792 - EPSG:5793 - EPSG:5794 - EPSG:5795 - EPSG:5796 - EPSG:5797 - EPSG:5798 - EPSG:5799 - EPSG:5800 - EPSG:5801 - EPSG:5802 - EPSG:5803 - EPSG:5804 - EPSG:5805 - EPSG:5806 - EPSG:5807 - EPSG:5808 - EPSG:5809 - EPSG:5810 - EPSG:5811 - EPSG:5812 - EPSG:5813 - EPSG:5814 - EPSG:5815 - EPSG:5816 - EPSG:5817 - EPSG:5818 - EPSG:5819 - EPSG:5820 - EPSG:5821 - EPSG:7400 - EPSG:7401 - EPSG:7402 - EPSG:7403 - EPSG:7404 - EPSG:7405 - EPSG:7406 - EPSG:7407 - EPSG:7408 - EPSG:7409 - EPSG:7410 - EPSG:7411 - EPSG:7412 - EPSG:7413 - EPSG:7414 - EPSG:7415 - EPSG:7416 - EPSG:7417 - EPSG:7418 - EPSG:7419 - EPSG:7420 - EPSG:7421 - EPSG:7422 - EPSG:7423 - EPSG:20004 - EPSG:20005 - EPSG:20006 - EPSG:20007 - EPSG:20008 - EPSG:20009 - EPSG:20010 - EPSG:20011 - EPSG:20012 - EPSG:20013 - EPSG:20014 - EPSG:20015 - EPSG:20016 - EPSG:20017 - EPSG:20018 - EPSG:20019 - EPSG:20020 - EPSG:20021 - EPSG:20022 - EPSG:20023 - EPSG:20024 - EPSG:20025 - EPSG:20026 - EPSG:20027 - EPSG:20028 - EPSG:20029 - EPSG:20030 - EPSG:20031 - EPSG:20032 - EPSG:20064 - EPSG:20065 - EPSG:20066 - EPSG:20067 - EPSG:20068 - EPSG:20069 - EPSG:20070 - EPSG:20071 - EPSG:20072 - EPSG:20073 - EPSG:20074 - EPSG:20075 - EPSG:20076 - EPSG:20077 - EPSG:20078 - EPSG:20079 - EPSG:20080 - EPSG:20081 - EPSG:20082 - EPSG:20083 - EPSG:20084 - EPSG:20085 - EPSG:20086 - EPSG:20087 - EPSG:20088 - EPSG:20089 - EPSG:20090 - EPSG:20091 - EPSG:20092 - EPSG:20135 - EPSG:20136 - EPSG:20137 - EPSG:20138 - EPSG:20248 - EPSG:20249 - EPSG:20250 - EPSG:20251 - EPSG:20252 - EPSG:20253 - EPSG:20254 - EPSG:20255 - EPSG:20256 - EPSG:20257 - EPSG:20258 - EPSG:20348 - EPSG:20349 - EPSG:20350 - EPSG:20351 - EPSG:20352 - EPSG:20353 - EPSG:20354 - EPSG:20355 - EPSG:20356 - EPSG:20357 - EPSG:20358 - EPSG:20436 - EPSG:20437 - EPSG:20438 - EPSG:20439 - EPSG:20440 - EPSG:20499 - EPSG:20538 - EPSG:20539 - EPSG:20790 - EPSG:20791 - EPSG:20822 - EPSG:20823 - EPSG:20824 - EPSG:20934 - EPSG:20935 - EPSG:20936 - EPSG:21035 - EPSG:21036 - EPSG:21037 - EPSG:21095 - EPSG:21096 - EPSG:21097 - EPSG:21100 - EPSG:21148 - EPSG:21149 - EPSG:21150 - EPSG:21291 - EPSG:21292 - EPSG:21413 - EPSG:21414 - EPSG:21415 - EPSG:21416 - EPSG:21417 - EPSG:21418 - EPSG:21419 - EPSG:21420 - EPSG:21421 - EPSG:21422 - EPSG:21423 - EPSG:21453 - EPSG:21454 - EPSG:21455 - EPSG:21456 - EPSG:21457 - EPSG:21458 - EPSG:21459 - EPSG:21460 - EPSG:21461 - EPSG:21462 - EPSG:21463 - EPSG:21473 - EPSG:21474 - EPSG:21475 - EPSG:21476 - EPSG:21477 - EPSG:21478 - EPSG:21479 - EPSG:21480 - EPSG:21481 - EPSG:21482 - EPSG:21483 - EPSG:21500 - EPSG:21780 - EPSG:21781 - EPSG:21782 - EPSG:21817 - EPSG:21818 - EPSG:21891 - EPSG:21892 - EPSG:21893 - EPSG:21894 - EPSG:21896 - EPSG:21897 - EPSG:21898 - EPSG:21899 - EPSG:22032 - EPSG:22033 - EPSG:22091 - EPSG:22092 - EPSG:22171 - EPSG:22172 - EPSG:22173 - EPSG:22174 - EPSG:22175 - EPSG:22176 - EPSG:22177 - EPSG:22181 - EPSG:22182 - EPSG:22183 - EPSG:22184 - EPSG:22185 - EPSG:22186 - EPSG:22187 - EPSG:22191 - EPSG:22192 - EPSG:22193 - EPSG:22194 - EPSG:22195 - EPSG:22196 - EPSG:22197 - EPSG:22234 - EPSG:22235 - EPSG:22236 - EPSG:22275 - EPSG:22277 - EPSG:22279 - EPSG:22281 - EPSG:22283 - EPSG:22285 - EPSG:22287 - EPSG:22289 - EPSG:22291 - EPSG:22293 - EPSG:22300 - EPSG:22332 - EPSG:22391 - EPSG:22392 - EPSG:22521 - EPSG:22522 - EPSG:22523 - EPSG:22524 - EPSG:22525 - EPSG:22700 - EPSG:22770 - EPSG:22780 - EPSG:22832 - EPSG:22991 - EPSG:22992 - EPSG:22993 - EPSG:22994 - EPSG:23028 - EPSG:23029 - EPSG:23030 - EPSG:23031 - EPSG:23032 - EPSG:23033 - EPSG:23034 - EPSG:23035 - EPSG:23036 - EPSG:23037 - EPSG:23038 - EPSG:23090 - EPSG:23095 - EPSG:23239 - EPSG:23240 - EPSG:23433 - EPSG:23700 - EPSG:23830 - EPSG:23831 - EPSG:23832 - EPSG:23833 - EPSG:23834 - EPSG:23835 - EPSG:23836 - EPSG:23837 - EPSG:23838 - EPSG:23839 - EPSG:23840 - EPSG:23841 - EPSG:23842 - EPSG:23843 - EPSG:23844 - EPSG:23845 - EPSG:23846 - EPSG:23847 - EPSG:23848 - EPSG:23849 - EPSG:23850 - EPSG:23851 - EPSG:23852 - EPSG:23853 - EPSG:23866 - EPSG:23867 - EPSG:23868 - EPSG:23869 - EPSG:23870 - EPSG:23871 - EPSG:23872 - EPSG:23877 - EPSG:23878 - EPSG:23879 - EPSG:23880 - EPSG:23881 - EPSG:23882 - EPSG:23883 - EPSG:23884 - EPSG:23886 - EPSG:23887 - EPSG:23888 - EPSG:23889 - EPSG:23890 - EPSG:23891 - EPSG:23892 - EPSG:23893 - EPSG:23894 - EPSG:23946 - EPSG:23947 - EPSG:23948 - EPSG:24047 - EPSG:24048 - EPSG:24100 - EPSG:24200 - EPSG:24305 - EPSG:24306 - EPSG:24311 - EPSG:24312 - EPSG:24313 - EPSG:24342 - EPSG:24343 - EPSG:24344 - EPSG:24345 - EPSG:24346 - EPSG:24347 - EPSG:24370 - EPSG:24371 - EPSG:24372 - EPSG:24373 - EPSG:24374 - EPSG:24375 - EPSG:24376 - EPSG:24377 - EPSG:24378 - EPSG:24379 - EPSG:24380 - EPSG:24381 - EPSG:24382 - EPSG:24383 - EPSG:24500 - EPSG:24547 - EPSG:24548 - EPSG:24571 - EPSG:24600 - EPSG:24718 - EPSG:24719 - EPSG:24720 - EPSG:24817 - EPSG:24818 - EPSG:24819 - EPSG:24820 - EPSG:24821 - EPSG:24877 - EPSG:24878 - EPSG:24879 - EPSG:24880 - EPSG:24881 - EPSG:24882 - EPSG:24891 - EPSG:24892 - EPSG:24893 - EPSG:25000 - EPSG:25231 - EPSG:25391 - EPSG:25392 - EPSG:25393 - EPSG:25394 - EPSG:25395 - EPSG:25700 - EPSG:25828 - EPSG:25829 - EPSG:25830 - EPSG:25831 - EPSG:25832 - EPSG:25833 - EPSG:25834 - EPSG:25835 - EPSG:25836 - EPSG:25837 - EPSG:25838 - EPSG:25884 - EPSG:25932 - EPSG:26191 - EPSG:26192 - EPSG:26193 - EPSG:26194 - EPSG:26195 - EPSG:26237 - EPSG:26331 - EPSG:26332 - EPSG:26391 - EPSG:26392 - EPSG:26393 - EPSG:26432 - EPSG:26591 - EPSG:26592 - EPSG:26632 - EPSG:26692 - EPSG:26701 - EPSG:26702 - EPSG:26703 - EPSG:26704 - EPSG:26705 - EPSG:26706 - EPSG:26707 - EPSG:26708 - EPSG:26709 - EPSG:26710 - EPSG:26711 - EPSG:26712 - EPSG:26713 - EPSG:26714 - EPSG:26715 - EPSG:26716 - EPSG:26717 - EPSG:26718 - EPSG:26719 - EPSG:26720 - EPSG:26721 - EPSG:26722 - EPSG:26729 - EPSG:26730 - EPSG:26731 - EPSG:26732 - EPSG:26733 - EPSG:26734 - EPSG:26735 - EPSG:26736 - EPSG:26737 - EPSG:26738 - EPSG:26739 - EPSG:26740 - EPSG:26741 - EPSG:26742 - EPSG:26743 - EPSG:26744 - EPSG:26745 - EPSG:26746 - EPSG:26747 - EPSG:26748 - EPSG:26749 - EPSG:26750 - EPSG:26751 - EPSG:26752 - EPSG:26753 - EPSG:26754 - EPSG:26755 - EPSG:26756 - EPSG:26757 - EPSG:26758 - EPSG:26759 - EPSG:26760 - EPSG:26766 - EPSG:26767 - EPSG:26768 - EPSG:26769 - EPSG:26770 - EPSG:26771 - EPSG:26772 - EPSG:26773 - EPSG:26774 - EPSG:26775 - EPSG:26776 - EPSG:26777 - EPSG:26778 - EPSG:26779 - EPSG:26780 - EPSG:26781 - EPSG:26782 - EPSG:26783 - EPSG:26784 - EPSG:26785 - EPSG:26786 - EPSG:26787 - EPSG:26791 - EPSG:26792 - EPSG:26793 - EPSG:26794 - EPSG:26795 - EPSG:26796 - EPSG:26797 - EPSG:26798 - EPSG:26799 - EPSG:26801 - EPSG:26802 - EPSG:26803 - EPSG:26811 - EPSG:26812 - EPSG:26813 - EPSG:26814 - EPSG:26815 - EPSG:26819 - EPSG:26820 - EPSG:26821 - EPSG:26822 - EPSG:26823 - EPSG:26824 - EPSG:26825 - EPSG:26826 - EPSG:26830 - EPSG:26831 - EPSG:26832 - EPSG:26833 - EPSG:26834 - EPSG:26835 - EPSG:26836 - EPSG:26837 - EPSG:26841 - EPSG:26842 - EPSG:26843 - EPSG:26844 - EPSG:26845 - EPSG:26846 - EPSG:26847 - EPSG:26848 - EPSG:26849 - EPSG:26850 - EPSG:26851 - EPSG:26852 - EPSG:26853 - EPSG:26854 - EPSG:26855 - EPSG:26856 - EPSG:26857 - EPSG:26858 - EPSG:26859 - EPSG:26860 - EPSG:26861 - EPSG:26862 - EPSG:26863 - EPSG:26864 - EPSG:26865 - EPSG:26866 - EPSG:26867 - EPSG:26868 - EPSG:26869 - EPSG:26870 - EPSG:26891 - EPSG:26892 - EPSG:26893 - EPSG:26894 - EPSG:26895 - EPSG:26896 - EPSG:26897 - EPSG:26898 - EPSG:26899 - EPSG:26901 - EPSG:26902 - EPSG:26903 - EPSG:26904 - EPSG:26905 - EPSG:26906 - EPSG:26907 - EPSG:26908 - EPSG:26909 - EPSG:26910 - EPSG:26911 - EPSG:26912 - EPSG:26913 - EPSG:26914 - EPSG:26915 - EPSG:26916 - EPSG:26917 - EPSG:26918 - EPSG:26919 - EPSG:26920 - EPSG:26921 - EPSG:26922 - EPSG:26923 - EPSG:26929 - EPSG:26930 - EPSG:26931 - EPSG:26932 - EPSG:26933 - EPSG:26934 - EPSG:26935 - EPSG:26936 - EPSG:26937 - EPSG:26938 - EPSG:26939 - EPSG:26940 - EPSG:26941 - EPSG:26942 - EPSG:26943 - EPSG:26944 - EPSG:26945 - EPSG:26946 - EPSG:26948 - EPSG:26949 - EPSG:26950 - EPSG:26951 - EPSG:26952 - EPSG:26953 - EPSG:26954 - EPSG:26955 - EPSG:26956 - EPSG:26957 - EPSG:26958 - EPSG:26959 - EPSG:26960 - EPSG:26961 - EPSG:26962 - EPSG:26963 - EPSG:26964 - EPSG:26965 - EPSG:26966 - EPSG:26967 - EPSG:26968 - EPSG:26969 - EPSG:26970 - EPSG:26971 - EPSG:26972 - EPSG:26973 - EPSG:26974 - EPSG:26975 - EPSG:26976 - EPSG:26977 - EPSG:26978 - EPSG:26979 - EPSG:26980 - EPSG:26981 - EPSG:26982 - EPSG:26983 - EPSG:26984 - EPSG:26985 - EPSG:26986 - EPSG:26987 - EPSG:26988 - EPSG:26989 - EPSG:26990 - EPSG:26991 - EPSG:26992 - EPSG:26993 - EPSG:26994 - EPSG:26995 - EPSG:26996 - EPSG:26997 - EPSG:26998 - EPSG:27037 - EPSG:27038 - EPSG:27039 - EPSG:27040 - EPSG:27120 - EPSG:27200 - EPSG:27205 - EPSG:27206 - EPSG:27207 - EPSG:27208 - EPSG:27209 - EPSG:27210 - EPSG:27211 - EPSG:27212 - EPSG:27213 - EPSG:27214 - EPSG:27215 - EPSG:27216 - EPSG:27217 - EPSG:27218 - EPSG:27219 - EPSG:27220 - EPSG:27221 - EPSG:27222 - EPSG:27223 - EPSG:27224 - EPSG:27225 - EPSG:27226 - EPSG:27227 - EPSG:27228 - EPSG:27229 - EPSG:27230 - EPSG:27231 - EPSG:27232 - EPSG:27258 - EPSG:27259 - EPSG:27260 - EPSG:27291 - EPSG:27292 - EPSG:27391 - EPSG:27392 - EPSG:27393 - EPSG:27394 - EPSG:27395 - EPSG:27396 - EPSG:27397 - EPSG:27398 - EPSG:27429 - EPSG:27492 - EPSG:27493 - EPSG:27500 - EPSG:27561 - EPSG:27562 - EPSG:27563 - EPSG:27564 - EPSG:27571 - EPSG:27572 - EPSG:27573 - EPSG:27574 - EPSG:27581 - EPSG:27582 - EPSG:27583 - EPSG:27584 - EPSG:27591 - EPSG:27592 - EPSG:27593 - EPSG:27594 - EPSG:27700 - EPSG:28191 - EPSG:28192 - EPSG:28193 - EPSG:28232 - EPSG:28348 - EPSG:28349 - EPSG:28350 - EPSG:28351 - EPSG:28352 - EPSG:28353 - EPSG:28354 - EPSG:28355 - EPSG:28356 - EPSG:28357 - EPSG:28358 - EPSG:28402 - EPSG:28403 - EPSG:28404 - EPSG:28405 - EPSG:28406 - EPSG:28407 - EPSG:28408 - EPSG:28409 - EPSG:28410 - EPSG:28411 - EPSG:28412 - EPSG:28413 - EPSG:28414 - EPSG:28415 - EPSG:28416 - EPSG:28417 - EPSG:28418 - EPSG:28419 - EPSG:28420 - EPSG:28421 - EPSG:28422 - EPSG:28423 - EPSG:28424 - EPSG:28425 - EPSG:28426 - EPSG:28427 - EPSG:28428 - EPSG:28429 - EPSG:28430 - EPSG:28431 - EPSG:28432 - EPSG:28462 - EPSG:28463 - EPSG:28464 - EPSG:28465 - EPSG:28466 - EPSG:28467 - EPSG:28468 - EPSG:28469 - EPSG:28470 - EPSG:28471 - EPSG:28472 - EPSG:28473 - EPSG:28474 - EPSG:28475 - EPSG:28476 - EPSG:28477 - EPSG:28478 - EPSG:28479 - EPSG:28480 - EPSG:28481 - EPSG:28482 - EPSG:28483 - EPSG:28484 - EPSG:28485 - EPSG:28486 - EPSG:28487 - EPSG:28488 - EPSG:28489 - EPSG:28490 - EPSG:28491 - EPSG:28492 - EPSG:28600 - EPSG:28991 - EPSG:28992 - EPSG:29100 - EPSG:29101 - EPSG:29118 - EPSG:29119 - EPSG:29120 - EPSG:29121 - EPSG:29122 - EPSG:29168 - EPSG:29169 - EPSG:29170 - EPSG:29171 - EPSG:29172 - EPSG:29177 - EPSG:29178 - EPSG:29179 - EPSG:29180 - EPSG:29181 - EPSG:29182 - EPSG:29183 - EPSG:29184 - EPSG:29185 - EPSG:29187 - EPSG:29188 - EPSG:29189 - EPSG:29190 - EPSG:29191 - EPSG:29192 - EPSG:29193 - EPSG:29194 - EPSG:29195 - EPSG:29220 - EPSG:29221 - EPSG:29333 - EPSG:29371 - EPSG:29373 - EPSG:29375 - EPSG:29377 - EPSG:29379 - EPSG:29381 - EPSG:29383 - EPSG:29385 - EPSG:29635 - EPSG:29636 - EPSG:29700 - EPSG:29701 - EPSG:29702 - EPSG:29738 - EPSG:29739 - EPSG:29849 - EPSG:29850 - EPSG:29871 - EPSG:29872 - EPSG:29873 - EPSG:29900 - EPSG:29901 - EPSG:29902 - EPSG:29903 - EPSG:30161 - EPSG:30162 - EPSG:30163 - EPSG:30164 - EPSG:30165 - EPSG:30166 - EPSG:30167 - EPSG:30168 - EPSG:30169 - EPSG:30170 - EPSG:30171 - EPSG:30172 - EPSG:30173 - EPSG:30174 - EPSG:30175 - EPSG:30176 - EPSG:30177 - EPSG:30178 - EPSG:30179 - EPSG:30200 - EPSG:30339 - EPSG:30340 - EPSG:30491 - EPSG:30492 - EPSG:30493 - EPSG:30494 - EPSG:30729 - EPSG:30730 - EPSG:30731 - EPSG:30732 - EPSG:30791 - EPSG:30792 - EPSG:30800 - EPSG:31028 - EPSG:31121 - EPSG:31154 - EPSG:31170 - EPSG:31171 - EPSG:31251 - EPSG:31252 - EPSG:31253 - EPSG:31254 - EPSG:31255 - EPSG:31256 - EPSG:31257 - EPSG:31258 - EPSG:31259 - EPSG:31265 - EPSG:31266 - EPSG:31267 - EPSG:31268 - EPSG:31275 - EPSG:31276 - EPSG:31277 - EPSG:31278 - EPSG:31279 - EPSG:31281 - EPSG:31282 - EPSG:31283 - EPSG:31284 - EPSG:31285 - EPSG:31286 - EPSG:31287 - EPSG:31288 - EPSG:31289 - EPSG:31290 - EPSG:31291 - EPSG:31292 - EPSG:31293 - EPSG:31294 - EPSG:31295 - EPSG:31296 - EPSG:31297 - EPSG:31300 - EPSG:31370 - EPSG:31461 - EPSG:31462 - EPSG:31463 - EPSG:31464 - EPSG:31465 - EPSG:31466 - EPSG:31467 - EPSG:31468 - EPSG:31469 - EPSG:31528 - EPSG:31529 - EPSG:31600 - EPSG:31700 - EPSG:31838 - EPSG:31839 - EPSG:31900 - EPSG:31901 - EPSG:31965 - EPSG:31966 - EPSG:31967 - EPSG:31968 - EPSG:31969 - EPSG:31970 - EPSG:31971 - EPSG:31972 - EPSG:31973 - EPSG:31974 - EPSG:31975 - EPSG:31976 - EPSG:31977 - EPSG:31978 - EPSG:31979 - EPSG:31980 - EPSG:31981 - EPSG:31982 - EPSG:31983 - EPSG:31984 - EPSG:31985 - EPSG:31986 - EPSG:31987 - EPSG:31988 - EPSG:31989 - EPSG:31990 - EPSG:31991 - EPSG:31992 - EPSG:31993 - EPSG:31994 - EPSG:31995 - EPSG:31996 - EPSG:31997 - EPSG:31998 - EPSG:31999 - EPSG:32000 - EPSG:32001 - EPSG:32002 - EPSG:32003 - EPSG:32005 - EPSG:32006 - EPSG:32007 - EPSG:32008 - EPSG:32009 - EPSG:32010 - EPSG:32011 - EPSG:32012 - EPSG:32013 - EPSG:32014 - EPSG:32015 - EPSG:32016 - EPSG:32017 - EPSG:32018 - EPSG:32019 - EPSG:32020 - EPSG:32021 - EPSG:32022 - EPSG:32023 - EPSG:32024 - EPSG:32025 - EPSG:32026 - EPSG:32027 - EPSG:32028 - EPSG:32029 - EPSG:32030 - EPSG:32031 - EPSG:32033 - EPSG:32034 - EPSG:32035 - EPSG:32036 - EPSG:32037 - EPSG:32038 - EPSG:32039 - EPSG:32040 - EPSG:32041 - EPSG:32042 - EPSG:32043 - EPSG:32044 - EPSG:32045 - EPSG:32046 - EPSG:32047 - EPSG:32048 - EPSG:32049 - EPSG:32050 - EPSG:32051 - EPSG:32052 - EPSG:32053 - EPSG:32054 - EPSG:32055 - EPSG:32056 - EPSG:32057 - EPSG:32058 - EPSG:32061 - EPSG:32062 - EPSG:32064 - EPSG:32065 - EPSG:32066 - EPSG:32067 - EPSG:32074 - EPSG:32075 - EPSG:32076 - EPSG:32077 - EPSG:32081 - EPSG:32082 - EPSG:32083 - EPSG:32084 - EPSG:32085 - EPSG:32086 - EPSG:32098 - EPSG:32099 - EPSG:32100 - EPSG:32104 - EPSG:32107 - EPSG:32108 - EPSG:32109 - EPSG:32110 - EPSG:32111 - EPSG:32112 - EPSG:32113 - EPSG:32114 - EPSG:32115 - EPSG:32116 - EPSG:32117 - EPSG:32118 - EPSG:32119 - EPSG:32120 - EPSG:32121 - EPSG:32122 - EPSG:32123 - EPSG:32124 - EPSG:32125 - EPSG:32126 - EPSG:32127 - EPSG:32128 - EPSG:32129 - EPSG:32130 - EPSG:32133 - EPSG:32134 - EPSG:32135 - EPSG:32136 - EPSG:32137 - EPSG:32138 - EPSG:32139 - EPSG:32140 - EPSG:32141 - EPSG:32142 - EPSG:32143 - EPSG:32144 - EPSG:32145 - EPSG:32146 - EPSG:32147 - EPSG:32148 - EPSG:32149 - EPSG:32150 - EPSG:32151 - EPSG:32152 - EPSG:32153 - EPSG:32154 - EPSG:32155 - EPSG:32156 - EPSG:32157 - EPSG:32158 - EPSG:32161 - EPSG:32164 - EPSG:32165 - EPSG:32166 - EPSG:32167 - EPSG:32180 - EPSG:32181 - EPSG:32182 - EPSG:32183 - EPSG:32184 - EPSG:32185 - EPSG:32186 - EPSG:32187 - EPSG:32188 - EPSG:32189 - EPSG:32190 - EPSG:32191 - EPSG:32192 - EPSG:32193 - EPSG:32194 - EPSG:32195 - EPSG:32196 - EPSG:32197 - EPSG:32198 - EPSG:32199 - EPSG:32201 - EPSG:32202 - EPSG:32203 - EPSG:32204 - EPSG:32205 - EPSG:32206 - EPSG:32207 - EPSG:32208 - EPSG:32209 - EPSG:32210 - EPSG:32211 - EPSG:32212 - EPSG:32213 - EPSG:32214 - EPSG:32215 - EPSG:32216 - EPSG:32217 - EPSG:32218 - EPSG:32219 - EPSG:32220 - EPSG:32221 - EPSG:32222 - EPSG:32223 - EPSG:32224 - EPSG:32225 - EPSG:32226 - EPSG:32227 - EPSG:32228 - EPSG:32229 - EPSG:32230 - EPSG:32231 - EPSG:32232 - EPSG:32233 - EPSG:32234 - EPSG:32235 - EPSG:32236 - EPSG:32237 - EPSG:32238 - EPSG:32239 - EPSG:32240 - EPSG:32241 - EPSG:32242 - EPSG:32243 - EPSG:32244 - EPSG:32245 - EPSG:32246 - EPSG:32247 - EPSG:32248 - EPSG:32249 - EPSG:32250 - EPSG:32251 - EPSG:32252 - EPSG:32253 - EPSG:32254 - EPSG:32255 - EPSG:32256 - EPSG:32257 - EPSG:32258 - EPSG:32259 - EPSG:32260 - EPSG:32301 - EPSG:32302 - EPSG:32303 - EPSG:32304 - EPSG:32305 - EPSG:32306 - EPSG:32307 - EPSG:32308 - EPSG:32309 - EPSG:32310 - EPSG:32311 - EPSG:32312 - EPSG:32313 - EPSG:32314 - EPSG:32315 - EPSG:32316 - EPSG:32317 - EPSG:32318 - EPSG:32319 - EPSG:32320 - EPSG:32321 - EPSG:32322 - EPSG:32323 - EPSG:32324 - EPSG:32325 - EPSG:32326 - EPSG:32327 - EPSG:32328 - EPSG:32329 - EPSG:32330 - EPSG:32331 - EPSG:32332 - EPSG:32333 - EPSG:32334 - EPSG:32335 - EPSG:32336 - EPSG:32337 - EPSG:32338 - EPSG:32339 - EPSG:32340 - EPSG:32341 - EPSG:32342 - EPSG:32343 - EPSG:32344 - EPSG:32345 - EPSG:32346 - EPSG:32347 - EPSG:32348 - EPSG:32349 - EPSG:32350 - EPSG:32351 - EPSG:32352 - EPSG:32353 - EPSG:32354 - EPSG:32355 - EPSG:32356 - EPSG:32357 - EPSG:32358 - EPSG:32359 - EPSG:32360 - EPSG:32401 - EPSG:32402 - EPSG:32403 - EPSG:32404 - EPSG:32405 - EPSG:32406 - EPSG:32407 - EPSG:32408 - EPSG:32409 - EPSG:32410 - EPSG:32411 - EPSG:32412 - EPSG:32413 - EPSG:32414 - EPSG:32415 - EPSG:32416 - EPSG:32417 - EPSG:32418 - EPSG:32419 - EPSG:32420 - EPSG:32421 - EPSG:32422 - EPSG:32423 - EPSG:32424 - EPSG:32425 - EPSG:32426 - EPSG:32427 - EPSG:32428 - EPSG:32429 - EPSG:32430 - EPSG:32431 - EPSG:32432 - EPSG:32433 - EPSG:32434 - EPSG:32435 - EPSG:32436 - EPSG:32437 - EPSG:32438 - EPSG:32439 - EPSG:32440 - EPSG:32441 - EPSG:32442 - EPSG:32443 - EPSG:32444 - EPSG:32445 - EPSG:32446 - EPSG:32447 - EPSG:32448 - EPSG:32449 - EPSG:32450 - EPSG:32451 - EPSG:32452 - EPSG:32453 - EPSG:32454 - EPSG:32455 - EPSG:32456 - EPSG:32457 - EPSG:32458 - EPSG:32459 - EPSG:32460 - EPSG:32501 - EPSG:32502 - EPSG:32503 - EPSG:32504 - EPSG:32505 - EPSG:32506 - EPSG:32507 - EPSG:32508 - EPSG:32509 - EPSG:32510 - EPSG:32511 - EPSG:32512 - EPSG:32513 - EPSG:32514 - EPSG:32515 - EPSG:32516 - EPSG:32517 - EPSG:32518 - EPSG:32519 - EPSG:32520 - EPSG:32521 - EPSG:32522 - EPSG:32523 - EPSG:32524 - EPSG:32525 - EPSG:32526 - EPSG:32527 - EPSG:32528 - EPSG:32529 - EPSG:32530 - EPSG:32531 - EPSG:32532 - EPSG:32533 - EPSG:32534 - EPSG:32535 - EPSG:32536 - EPSG:32537 - EPSG:32538 - EPSG:32539 - EPSG:32540 - EPSG:32541 - EPSG:32542 - EPSG:32543 - EPSG:32544 - EPSG:32545 - EPSG:32546 - EPSG:32547 - EPSG:32548 - EPSG:32549 - EPSG:32550 - EPSG:32551 - EPSG:32552 - EPSG:32553 - EPSG:32554 - EPSG:32555 - EPSG:32556 - EPSG:32557 - EPSG:32558 - EPSG:32559 - EPSG:32560 - EPSG:32600 - EPSG:32601 - EPSG:32602 - EPSG:32603 - EPSG:32604 - EPSG:32605 - EPSG:32606 - EPSG:32607 - EPSG:32608 - EPSG:32609 - EPSG:32610 - EPSG:32611 - EPSG:32612 - EPSG:32613 - EPSG:32614 - EPSG:32615 - EPSG:32616 - EPSG:32617 - EPSG:32618 - EPSG:32619 - EPSG:32620 - EPSG:32621 - EPSG:32622 - EPSG:32623 - EPSG:32624 - EPSG:32625 - EPSG:32626 - EPSG:32627 - EPSG:32628 - EPSG:32629 - EPSG:32630 - EPSG:32631 - EPSG:32632 - EPSG:32633 - EPSG:32634 - EPSG:32635 - EPSG:32636 - EPSG:32637 - EPSG:32638 - EPSG:32639 - EPSG:32640 - EPSG:32641 - EPSG:32642 - EPSG:32643 - EPSG:32644 - EPSG:32645 - EPSG:32646 - EPSG:32647 - EPSG:32648 - EPSG:32649 - EPSG:32650 - EPSG:32651 - EPSG:32652 - EPSG:32653 - EPSG:32654 - EPSG:32655 - EPSG:32656 - EPSG:32657 - EPSG:32658 - EPSG:32659 - EPSG:32660 - EPSG:32661 - EPSG:32662 - EPSG:32663 - EPSG:32664 - EPSG:32665 - EPSG:32666 - EPSG:32667 - EPSG:32700 - EPSG:32701 - EPSG:32702 - EPSG:32703 - EPSG:32704 - EPSG:32705 - EPSG:32706 - EPSG:32707 - EPSG:32708 - EPSG:32709 - EPSG:32710 - EPSG:32711 - EPSG:32712 - EPSG:32713 - EPSG:32714 - EPSG:32715 - EPSG:32716 - EPSG:32717 - EPSG:32718 - EPSG:32719 - EPSG:32720 - EPSG:32721 - EPSG:32722 - EPSG:32723 - EPSG:32724 - EPSG:32725 - EPSG:32726 - EPSG:32727 - EPSG:32728 - EPSG:32729 - EPSG:32730 - EPSG:32731 - EPSG:32732 - EPSG:32733 - EPSG:32734 - EPSG:32735 - EPSG:32736 - EPSG:32737 - EPSG:32738 - EPSG:32739 - EPSG:32740 - EPSG:32741 - EPSG:32742 - EPSG:32743 - EPSG:32744 - EPSG:32745 - EPSG:32746 - EPSG:32747 - EPSG:32748 - EPSG:32749 - EPSG:32750 - EPSG:32751 - EPSG:32752 - EPSG:32753 - EPSG:32754 - EPSG:32755 - EPSG:32756 - EPSG:32757 - EPSG:32758 - EPSG:32759 - EPSG:32760 - EPSG:32761 - EPSG:32766 - EPSG:61206405 - EPSG:61216405 - EPSG:61226405 - EPSG:61236405 - EPSG:61246405 - EPSG:61266405 - EPSG:61266413 - EPSG:61276405 - EPSG:61286405 - EPSG:61296405 - EPSG:61306405 - EPSG:61306413 - EPSG:61316405 - EPSG:61326405 - EPSG:61336405 - EPSG:61346405 - EPSG:61356405 - EPSG:61366405 - EPSG:61376405 - EPSG:61386405 - EPSG:61396405 - EPSG:61406405 - EPSG:61406413 - EPSG:61416405 - EPSG:61426405 - EPSG:61436405 - EPSG:61446405 - EPSG:61456405 - EPSG:61466405 - EPSG:61476405 - EPSG:61486405 - EPSG:61486413 - EPSG:61496405 - EPSG:61506405 - EPSG:61516405 - EPSG:61516413 - EPSG:61526405 - EPSG:61526413 - EPSG:61536405 - EPSG:61546405 - EPSG:61556405 - EPSG:61566405 - EPSG:61576405 - EPSG:61586405 - EPSG:61596405 - EPSG:61606405 - EPSG:61616405 - EPSG:61626405 - EPSG:61636405 - EPSG:61636413 - EPSG:61646405 - EPSG:61656405 - EPSG:61666405 - EPSG:61676405 - EPSG:61676413 - EPSG:61686405 - EPSG:61696405 - EPSG:61706405 - EPSG:61706413 - EPSG:61716405 - EPSG:61716413 - EPSG:61736405 - EPSG:61736413 - EPSG:61746405 - EPSG:61756405 - EPSG:61766405 - EPSG:61766413 - EPSG:61786405 - EPSG:61796405 - EPSG:61806405 - EPSG:61806413 - EPSG:61816405 - EPSG:61826405 - EPSG:61836405 - EPSG:61846405 - EPSG:61886405 - EPSG:61896405 - EPSG:61896413 - EPSG:61906405 - EPSG:61906413 - EPSG:61916405 - EPSG:61926405 - EPSG:61936405 - EPSG:61946405 - EPSG:61956405 - EPSG:61966405 - EPSG:61976405 - EPSG:61986405 - EPSG:61996405 - EPSG:62006405 - EPSG:62016405 - EPSG:62026405 - EPSG:62036405 - EPSG:62046405 - EPSG:62056405 - EPSG:62066405 - EPSG:62076405 - EPSG:62086405 - EPSG:62096405 - EPSG:62106405 - EPSG:62116405 - EPSG:62126405 - EPSG:62136405 - EPSG:62146405 - EPSG:62156405 - EPSG:62166405 - EPSG:62186405 - EPSG:62196405 - EPSG:62206405 - EPSG:62216405 - EPSG:62226405 - EPSG:62236405 - EPSG:62246405 - EPSG:62256405 - EPSG:62276405 - EPSG:62296405 - EPSG:62306405 - EPSG:62316405 - EPSG:62326405 - EPSG:62336405 - EPSG:62366405 - EPSG:62376405 - EPSG:62386405 - EPSG:62396405 - EPSG:62406405 - EPSG:62416405 - EPSG:62426405 - EPSG:62436405 - EPSG:62446405 - EPSG:62456405 - EPSG:62466405 - EPSG:62476405 - EPSG:62486405 - EPSG:62496405 - EPSG:62506405 - EPSG:62516405 - EPSG:62526405 - EPSG:62536405 - EPSG:62546405 - EPSG:62556405 - EPSG:62566405 - EPSG:62576405 - EPSG:62586405 - EPSG:62586413 - EPSG:62596405 - EPSG:62616405 - EPSG:62626405 - EPSG:62636405 - EPSG:62646405 - EPSG:62656405 - EPSG:62666405 - EPSG:62676405 - EPSG:62686405 - EPSG:62696405 - EPSG:62706405 - EPSG:62716405 - EPSG:62726405 - EPSG:62736405 - EPSG:62746405 - EPSG:62756405 - EPSG:62766405 - EPSG:62776405 - EPSG:62786405 - EPSG:62796405 - EPSG:62806405 - EPSG:62816405 - EPSG:62826405 - EPSG:62836405 - EPSG:62836413 - EPSG:62846405 - EPSG:62856405 - EPSG:62866405 - EPSG:62886405 - EPSG:62896405 - EPSG:62926405 - EPSG:62936405 - EPSG:62956405 - EPSG:62976405 - EPSG:62986405 - EPSG:62996405 - EPSG:63006405 - EPSG:63016405 - EPSG:63026405 - EPSG:63036405 - EPSG:63046405 - EPSG:63066405 - EPSG:63076405 - EPSG:63086405 - EPSG:63096405 - EPSG:63106405 - EPSG:63116405 - EPSG:63126405 - EPSG:63136405 - EPSG:63146405 - EPSG:63156405 - EPSG:63166405 - EPSG:63176405 - EPSG:63186405 - EPSG:63196405 - EPSG:63226405 - EPSG:63246405 - EPSG:63266405 - EPSG:63266406 - EPSG:63266407 - EPSG:63266408 - EPSG:63266409 - EPSG:63266410 - EPSG:63266411 - EPSG:63266412 - EPSG:63266413 - EPSG:63266414 - EPSG:63266415 - EPSG:63266416 - EPSG:63266417 - EPSG:63266418 - EPSG:63266419 - EPSG:63266420 - EPSG:66006405 - EPSG:66016405 - EPSG:66026405 - EPSG:66036405 - EPSG:66046405 - EPSG:66056405 - EPSG:66066405 - EPSG:66076405 - EPSG:66086405 - EPSG:66096405 - EPSG:66106405 - EPSG:66116405 - EPSG:66126405 - EPSG:66126413 - EPSG:66136405 - EPSG:66146405 - EPSG:66156405 - EPSG:66166405 - EPSG:66186405 - EPSG:66196405 - EPSG:66196413 - EPSG:66206405 - EPSG:66216405 - EPSG:66226405 - EPSG:66236405 - EPSG:66246405 - EPSG:66246413 - EPSG:66256405 - EPSG:66266405 - EPSG:66276405 - EPSG:66276413 - EPSG:66286405 - EPSG:66296405 - EPSG:66306405 - EPSG:66316405 - EPSG:66326405 - EPSG:66336405 - EPSG:66346405 - EPSG:66356405 - EPSG:66366405 - EPSG:66376405 - EPSG:66386405 - EPSG:66396405 - EPSG:66406405 - EPSG:66406413 - EPSG:66416405 - EPSG:66426405 - EPSG:66436405 - EPSG:66446405 - EPSG:66456405 - EPSG:66456413 - EPSG:66466405 - EPSG:66576405 - EPSG:66586405 - EPSG:66596405 - EPSG:66596413 - EPSG:66606405 - EPSG:66616405 - EPSG:66616413 - EPSG:66636405 - EPSG:66646405 - EPSG:66656405 - EPSG:66666405 - EPSG:66676405 - EPSG:68016405 - EPSG:68026405 - EPSG:68036405 - EPSG:68046405 - EPSG:68056405 - EPSG:68066405 - EPSG:68086405 - EPSG:68096405 - EPSG:68136405 - EPSG:68146405 - EPSG:68156405 - EPSG:68186405 - EPSG:68206405 - EPSG:69036405 - EPSG:42302 - EPSG:42301 - EPSG:54009 - EPSG:900913 - EPSG:45556 - EPSG:45555 - EPSG:54004 - EPSG:41001 - EPSG:42311 - EPSG:42310 - EPSG:18001 - EPSG:54012 - EPSG:100003 - EPSG:42106 - EPSG:100002 - EPSG:42105 - EPSG:100001 - EPSG:42309 - EPSG:42104 - EPSG:42308 - EPSG:42103 - EPSG:42307 - EPSG:42102 - EPSG:42306 - EPSG:42101 - EPSG:42305 - EPSG:42304 - EPSG:42303 - - <% out.write(featureTypeInfo); %> - - \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/openGeoPortalHome.jsp b/geoportal_1/src/main/webapp/openGeoPortalHome.jsp index 91ad40e..5944b20 100644 --- a/geoportal_1/src/main/webapp/openGeoPortalHome.jsp +++ b/geoportal_1/src/main/webapp/openGeoPortalHome.jsp @@ -1,34 +1,14 @@ - - - - -GeoData@Tufts -<%@include file="jspf/includes.jspf"%> - - -
      - <%@include file="jspf/header.jspf"%> - -
      -
      -
      - <%@include file="jspf/leftPanel.jspf"%> -
      -
      - <%@include file="jspf/map.jspf"%> -
      -
      - <%@include file="jspf/footer.jspf"%> -
      - - +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + + + + + + + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/dataTable.css b/geoportal_1/src/main/webapp/resources/css/dataTable.css index 74fbf74..8c5f60d 100644 --- a/geoportal_1/src/main/webapp/resources/css/dataTable.css +++ b/geoportal_1/src/main/webapp/resources/css/dataTable.css @@ -29,10 +29,11 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables features */ - .dataTables_wrapper { - position: relative; + /*position: relative;*/ zoom: 1; /* Feeling sorry for IE */ + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; } .dataTables_processing { @@ -48,7 +49,8 @@ text-align: center; color: #999; font-size: 14px; - background-color: white; + background-color: #FFFFFF; + z-index: 2; } .dataTables_length { @@ -68,14 +70,15 @@ } .dataTables_paginate { - width: 44px; - * width: 50px; + /*width: 44px;*/ + width: 50px; float: right; text-align: right; } /* Pagination nested */ -.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { +.paginate_disabled_previous,.paginate_enabled_previous,.paginate_disabled_next,.paginate_enabled_next + { height: 19px; width: 19px; margin-left: 3px; @@ -98,19 +101,16 @@ background-image: url('../media/forward_enabled.jpg'); } - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables display */ table.display { margin: 0px; - font-family: Arial, sans-serif; border-collapse: collapse; table-layout: fixed; cursor: default; - -/* width: 100%; + margin-bottom: 1px; + /* width: 100%; clear: both; */ /* Note Firefox 3.5 and before have a bug with border-collapse @@ -129,23 +129,54 @@ table.display { table.display thead th { text-align: center; - border-collapse:collapse; + border-collapse: collapse; padding: 3px; margin: 0px; - border: 1px solid rgb(204, 204, 204); - background-color:#FFFFFF; - font-size: 11px; - color: #333333; + /*border: 1px solid rgb(204, 204, 204);*/ + border-color: #CCCCCC; + /*border-right: 1px solid #CCCCCC;*/ + border-style: none solid solid; + border-width: 0 1px 1px; + /*background-color:#FFFFFF;*/ + font-size: 12px; + color: #000000; font-weight: normal; + position: relative; + white-space: nowrap; /* cursor: hand;*/ } +/* text columns */ +.cellWrapper { + overflow: hidden; + word-break: break-all; + width: 100%; +} + +td.colOriginator .cellWrapper { + margin-left: 2px; + margin-right: 2px; + overflow: hidden; +} + +td.colTitle .cellWrapper { + margin-left: 2px; + margin-right: 2px; + overflow: hidden; +} + +td.colPublisher .cellWrapper { + margin-left: 2px; + margin-right: 2px; + overflow: hidden; +} + #resultsTable th:hover { - color:#417dc1; + color: #417dc1; } #resultsTable th.colPreview:hover { - color:#333333; + color: #333333; } th.colPreview { @@ -162,14 +193,16 @@ table.display tr.heading2 td { border-bottom: 1px solid #aaa; } -table.display > tbody > tr > td { +table.display>tbody>tr>td { padding: 3px; overflow: hidden; - font-size: 12px; - color: #333333; + color: #4E4E4E; height: 17px; - border: 0px; - white-space: nowrap; + border-collapse: collapse; + border-color: #FFFFFF; + border-style: none solid solid; + border-width: 0 1px 1px; + /*white-space: nowrap;*/ } table.display td.center { @@ -181,9 +214,6 @@ td.searchResultsCell { text-overflow: ellipsis; } -.colExpand { - border-bottom: 1px solid rgb(236, 236, 236); -} th.colExpand { border-left: 0 none !important; @@ -200,11 +230,32 @@ th.colChkBoxes { clear: both; } +.dataTables_scrollHead { + border-bottom: none; + height: 100%; + /*max-height: 200px; + */ +} + +table.display>tbody>tr>td.previewTools { + overflow: visible; +} + +.dataTables_scrollHead table.display > tbody { + background-color: #F8F8E4; +} + +.dataTables_scrollHead table.display > tbody > tr > td { + border-color: #F8F8E4; +} + .dataTables_scrollBody { *margin-top: -1px; + overflow-x: hidden; + overflow-y: scroll; } -.top, .bottom { +.top,.bottom { padding: 15px; background-color: white; border: none; @@ -246,7 +297,6 @@ td.details { border-bottom: 1px solid rgb(236, 236, 236); } - .example_alt_pagination div.dataTables_info { width: 40%; } @@ -257,8 +307,8 @@ td.details { line-height: 22px; } -.paging_full_numbers span.paginate_button, - .paging_full_numbers span.paginate_active { +.paging_full_numbers span.paginate_button,.paging_full_numbers span.paginate_active + { border: 1px solid #aaa; -webkit-border-radius: 5px; -moz-border-radius: 5px; @@ -280,44 +330,47 @@ td.details { background-color: #99B3FF; } -table.display tr td { - background-color:#FFFFFF; +table.display tr.row_selected { + background-color: #ebf6ff; } table.display tr.row_selected td { - background-color:#EDF4FA; + border-color: #ebf6ff; } -table.display tr.downloadSelection td { - background-color:#CDE4FA; +table.display tr.row_selected_top td { + border-bottom: #d8e8fa 1px solid !important; } -table.display tr.downloadUnselection td { - opacity: .6; +table.display tr.row_selected_bottom td { + border-bottom: #d8e8fa 1px solid !important; } + + + + div.box { height: 100px; padding: 10px; overflow: auto; -/* border: 1px solid #8080FF; + /* border: 1px solid #8080FF; background-color: #E5E5FF;*/ } /* expanded preview controls for search results table */ - .previewControls { - font-size: 11px; + font-size: 11px; } -.previewControls > div { +.previewControls>div { display: inline-block; height: 17px; - position: absolute; + position: relative; } -.opacitySlider { +/*.opacitySlider { position: relative; overflow: visible; } @@ -325,6 +378,33 @@ div.box { .opacitySlider > div { display:inline; position:absolute; +}*/ +.sliderControl>div { + color: #231F20; + background-color: #FFFFFF; + z-index: 10; +} + +.sliderDisplay { + font-size: 10px; + border: 1px solid #aaaaaa; + border-radius: 3px 0 0 3px; + padding-left: 5px; + padding-right: 2px; + display: inline-block; +} + +.sliderArrow { + background: url("../media/ogp-sprite.png") no-repeat scroll -65px -64px + transparent; + border-bottom: 1px solid #aaaaaa; + border-radius: 0 3px 3px 0; + border-right: 1px solid #aaaaaa; + border-top: 1px solid #aaaaaa; + height: 15px; + vertical-align: top; + width: 14px; + display: inline-block; } .controlContainer { @@ -332,108 +412,174 @@ div.box { border: 1px solid #aaaaaa; background: white; height: 11px; - padding: 5px 4px 0px 8px; + width: 71px; + padding: 5px 10px 5px 8px; + right: 0; + top: 100%; display: none; - } - -.controlContainer > div > img { - padding-bottom: 10px; - padding-top: 0px; } -.controlText{ +.controlText { height: 13px; display: inline-block; font-size: 10px; padding: 0px 1px; - } - -.opacityText { - width: 26px; - } +} -.controlExpand { - padding-left: 1px; +/*.opacityText { + width: 26px; } - +*/ .sizeText { - } -.colorPalette { - width:15px; - height:15px; - border:1px solid #666666; +} + +.colorControl { + width: 12px; + height: 12px; + border: 1px solid #aaaaaa; display: inline-block; -moz-border-radius: 1px; } td.colTitle { cursor: pointer; + color: #000000 !important; } -.ui-resizable-helper { - /*border-right: 1px solid black;*/ - margin-right: -5px; -} - +/*.ui-resizable-helper { */ +/*border-right: 1px solid black;*/ +/*margin-right: -5px; +}*/ .tableCheckBox { /*margin-bottom: 0px;*/ + display: none; max-height: 13px; } .sortGraphic_unsorted:hover { background: url("../media/sort_both.png") no-repeat right transparent; } + .sortGraphic_sortedAsc:hover { background: url("../media/sort_asc.png") no-repeat right transparent; } + .sortGraphic_sortedDesc:hover { background: url("../media/sort_desc.png") no-repeat right transparent; } +.sizeControlCell .sliderLabel { + display: inline-block; + width: 50px; +} + .opacityControlCell { - left: 85px; + left: 71px; + top: -3px; +} + +.opacityControlCell .sliderValue { + display: inline-block; + width: 19px; + text-align: right; } .sizeControlCell { - left: 175px; + left: 83px; + top: -3px; } .colorControlCell { - left: 250px; + left: 89px; + top: -1px; +} + +.expandControl { + height: 17px; + width: 11px; } -.zoomToLayerControlCell { - left: 290px; +.expanded { + background: url("../media/ogp-sprite.png") no-repeat scroll -92px -115px + transparent; } -.attributeInfoControlCell { - left: 312px; +.notExpanded { + background: url("../media/ogp-sprite.png") no-repeat scroll -83px -63px + transparent; +} + +.zoomToLayerControl { + left: 104px; + background: url("../media/ogp-sprite.png") no-repeat scroll -9px -90px + transparent; + height: 17px; + width: 17px; + top: 1px; +} + +.attributeInfoControl { + left: 110px; + height: 17px; + width: 17px; + top: 1px; +} + +.attributeInfoControlOn { + background: url("../media/ogp-sprite.png") no-repeat scroll -115px + -115px transparent; +} + +.attributeInfoControlOff { + background: url("../media/ogp-sprite.png") no-repeat scroll -36px -90px + transparent; +} + +.cartIconTable { + background: url("../media/ogp-sprite.png") no-repeat scroll -102px -62px + transparent; + height: 17px; + width: 17px; +} + +.repositoryIcon { + height: 17px; + width: 17px; } .typeIcon { - vertical-align: middle; + height: 17px; + width: 17px; +} + +.typeIcon { + vertical-align: middle; } .expandIcon { /*vertical-align: middle; */ + } -table.display > thead > tr > th > div { - height: 17px; +table.display>thead>tr>th>div { + /* height: 17px; line-height: 17px; + */ + } -table.display > tbody > tr > td > div { +table.display>tbody>tr>td>div { height: 17px; - line-height: 17px; + line-height: 15px; } .opacityControl { + } table.display tr.previewedLayer td { - background-color:#DDDDDD; + background-color: #f8f8e4; } .previewLock { @@ -448,7 +594,5 @@ tr.previewedLayer .previewLock { } .previewSeparator { - border-bottom: 1px solid #666666; -} - - \ No newline at end of file + border-bottom: 1px solid #7E7E7E; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/google.css b/geoportal_1/src/main/webapp/resources/css/google.css index d2bb24e..0ba83ad 100644 --- a/geoportal_1/src/main/webapp/resources/css/google.css +++ b/geoportal_1/src/main/webapp/resources/css/google.css @@ -1,18 +1,23 @@ +/* attribution displayed elsewhere */ .olLayerGoogleCopyright { - right: 3px; - bottom: 2px; - left: auto; + display: none; } + .olLayerGooglePoweredBy { - display: none !important; - left: 2px; - bottom: 2px; + width: 70px; +} + +.gm-style .gmnoprint { + right: 69px !important; } -.olLayerGoogleCopyright > img{ - display: none; +.googleLogo { + margin-bottom: 19px !important; } -.olLayerGoogleCopyright > div{ - display: none; +.poweredByGoogleAttr { + background: url("../media/powered-by-google/desktop/powered-by-google-on-white.png") no-repeat scroll 0 0 #FFFFFF; + float: right; + height: 20px; + width: 110px; } diff --git a/geoportal_1/src/main/webapp/resources/css/images/animated-overlay.gif b/geoportal_1/src/main/webapp/resources/css/images/animated-overlay.gif new file mode 100755 index 0000000..d441f75 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/animated-overlay.gif differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_222222_40x100.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_222222_40x100.png new file mode 100755 index 0000000..1a24a87 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_222222_40x100.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100755 index 0000000..cb642ee Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_ffffff_40x100.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_ffffff_40x100.png new file mode 100755 index 0000000..28cd235 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_flat_0_ffffff_40x100.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_dadada_1x400.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_dadada_1x400.png new file mode 100755 index 0000000..18789ac Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_dadada_1x400.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_ebf6ff_1x400.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_ebf6ff_1x400.png new file mode 100755 index 0000000..0348c5b Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_ebf6ff_1x400.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_eeeeee_1x400.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_eeeeee_1x400.png new file mode 100755 index 0000000..12a5330 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_eeeeee_1x400.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_fef1ec_1x400.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_fef1ec_1x400.png new file mode 100755 index 0000000..b1c7173 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_0_fef1ec_1x400.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_10_eeeeee_1x400.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_10_eeeeee_1x400.png new file mode 100755 index 0000000..3a10c47 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_glass_10_eeeeee_1x400.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-bg_highlight-soft_0_eeeeee_1x100.png b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_highlight-soft_0_eeeeee_1x100.png new file mode 100755 index 0000000..1520a9a Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-bg_highlight-soft_0_eeeeee_1x100.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-icons_307DB9_256x240.png b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_307DB9_256x240.png new file mode 100755 index 0000000..234e638 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_307DB9_256x240.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-icons_454545_256x240.png b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_454545_256x240.png new file mode 100755 index 0000000..b6db1ac Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_454545_256x240.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-icons_555555_256x240.png b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_555555_256x240.png new file mode 100755 index 0000000..5dcdcb4 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_555555_256x240.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-icons_777777_256x240.png b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_777777_256x240.png new file mode 100755 index 0000000..067a992 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_777777_256x240.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-icons_cd0a0a_256x240.png b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_cd0a0a_256x240.png new file mode 100755 index 0000000..ed5b6b0 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_cd0a0a_256x240.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/images/ui-icons_ffffff_256x240.png b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_ffffff_256x240.png new file mode 100755 index 0000000..4f624bb Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/css/images/ui-icons_ffffff_256x240.png differ diff --git a/geoportal_1/src/main/webapp/resources/css/jquery-ui-ogpTheme.custom.css b/geoportal_1/src/main/webapp/resources/css/jquery-ui-ogpTheme.custom.css new file mode 100755 index 0000000..06ba510 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/css/jquery-ui-ogpTheme.custom.css @@ -0,0 +1,1922 @@ +/*! jQuery UI - v1.10.3 - 2013-08-01 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2Csans-serif&fwDefault=normal&fsDefault=12px&cornerRadius=3px&bgColorHeader=%23eeeeee&bgTextureHeader=highlight_soft&bgImgOpacityHeader=0&borderColorHeader=%23999999&fcHeader=%23555555&iconColorHeader=%23555555&bgColorContent=%23ffffff&bgTextureContent=flat&bgImgOpacityContent=0&borderColorContent=%23999999&fcContent=%23555555&iconColorContent=%23555555&bgColorDefault=%23eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=0&borderColorDefault=%23999999&fcDefault=%23777777&iconColorDefault=%23777777&bgColorHover=%23dadada&bgTextureHover=glass&bgImgOpacityHover=0&borderColorHover=%23999999&fcHover=%23212121&iconColorHover=%23454545&bgColorActive=%23eeeeee&bgTextureActive=glass&bgImgOpacityActive=10&borderColorActive=%23999999&fcActive=%23555555&iconColorActive=%23555555&bgColorHighlight=%23ebf6ff&bgTextureHighlight=glass&bgImgOpacityHighlight=0&borderColorHighlight=%23ffffff&fcHighlight=%23555555&iconColorHighlight=%23307DB9&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=0&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23222222&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=0&thicknessShadow=0px&offsetTopShadow=5px&offsetLeftShadow=-3px&cornerRadiusShadow=3px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} + +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} + +.ui-effects-transfer { + border: 2px dotted gray; + background: black; + z-Index: 9999; +} + +.ui-helper-clearfix:before,.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} + +.ui-helper-clearfix:after { + clear: both; +} + +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} + +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity = 0); +} + +.ui-front { + z-index: 1500; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ui-resizable { + position: relative; +} + +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} + +.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle + { + display: none; +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} + +.ui-resizable-e { + cursor: col-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ +} + +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} + +.ui-accordion .ui-accordion-noicons { + padding-left: .7em; +} + +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} + +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} + +.ui-autocomplete.ui-menu { + z-index: 9999; +} + +.ui-autocomplete-input.ui-corner-all { + border-radius: 0px; +} + +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} + +.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active + { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} + +.ui-button-icons-only { + width: 3.4em; +} + +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + overflow: hidden; + display: block; + line-height: 13px; + height: 13px; + font-size: 12px; +} + +.ui-button-text-only .ui-button-text { + padding: 3px 1em; +} + +.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text + { + padding: .4em; + text-indent: -9999999px; +} + +.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: 3px 1em 3px 2.1em; +} + +.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: 3px 2.1em 3px 1em; +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon + { + position: absolute; + top: 50%; + margin-top: -8px; +} + +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} + +.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary + { + left: .5em; +} + +.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary + { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} + +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} + +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} + +.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} + +.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover + { + top: 1px; +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} + +.ui-datepicker .ui-datepicker-next { + right: 2px; +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} + +.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span + { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} + +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} + +.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year + { + width: 49%; +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} + +.ui-datepicker td { + border: 0; + padding: 1px; +} + +.ui-datepicker td span,.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header + { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group + { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header + { + border-right-width: 0; + border-left-width: 1px; +} + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: 0; + outline: 0; + border-radius: 0; + z-index: 1500; + -moz-box-shadow: 0px 4px 6px -2px #888888; + -webkit-box-shadow: 0px 4px 6px -2px #888888; + box-shadow: 0px 4px 6px -2px #888888; +} + +.ui-dialog.ui-corner-all { + border-radius: 0; +} + +.ui-dialog .ui-dialog-titlebar { + padding: .1em 1em; + position: relative; + border-top: 0; + border-left: 0; + border-right: 0; + border-radius: 0; +} + +/*added: a button that appears in a title bar*/ +.ui-dialog .ui-dialog-titlebar .ui-titlebar-button { + margin: -10px 0 0; + padding: 1px; + position: absolute; + top: 57%; +} + +.ui-dialog .ui-dialog-titlebar .ui-button-text-only .ui-button-text { + padding: .1em 1em; +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .6em 0 .1em; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; + font-size: 14px; + color: #404143; +} + +.ui-dialog-titlebar button.ui-dialog-titlebar-close { + border: medium none; + height: 15px; + margin: -8px 0 0; + padding: 1px; + position: absolute; + right: 0.3em; + top: 57%; + width: 17px; + + /*position: absolute; + right: .3em; + top: 57%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; + background-image: none; + background-color: #6F6F72;*/ +} + +.ui-dialog .ui-dialog-titlebar-close .ui-icon { + background: url("../media/ogp-sprite.png") no-repeat scroll -9px -116px + rgba(0, 0, 0, 0); +} + +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} + +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} + +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} + +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +.ui-menu { + list-style: none; + margin: 0; + display: block; + outline: none; + padding: 1px 0; +} + +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} + +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'); +} + +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} + +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; + padding: 2px 2em 2px 1em; + white-space: nowrap; +} + +.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active + { + font-weight: normal; + margin: -1px; +} + +.ui-menu .ui-state-disabled { + font-weight: normal; + margin: .4em 0 .2em; + line-height: 1.5; +} + +.ui-menu .ui-state-disabled a { + cursor: default; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} + +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} + +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} + +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} + +.ui-progressbar .ui-progressbar-overlay { + background: url("images/animated-overlay.gif"); + height: 100%; + filter: alpha(opacity = 25); + opacity: 0.25; +} + +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} + +.ui-slider { + position: relative; + text-align: left; +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range + { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +/*added for preview tools slider. this way others can still use the default slider if they want */ +.ui-slider-horizontal.previewToolsSlider { + background: url(../media/opacity_bg.png) no-repeat scroll 50% 50% + transparent; + border: 0; + border-radius: 0; +} + +.ui-slider-horizontal.previewToolsSlider .ui-slider-handle { + border: 0; + border-radius: 0; +} + +.ui-slider-horizontal.previewToolsSlider .ui-slider-handle.ui-state-default + { + background: url(../media/opacity_arrow_inactive.png) no-repeat scroll + 1px 6px transparent; +} + +.ui-slider-horizontal.previewToolsSlider .ui-slider-handle.ui-state-active + { + background: url(../media/opacity_arrow.png) no-repeat scroll 1px 6px + transparent; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} + +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} + +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to overide default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertical centre icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} + +.ui-spinner-up { + top: 0; +} + +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} + +.ui-tabs { + position: relative; + /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + border-radius: 0; +} + +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: 0.2em 0.9em 0; + border-radius: 0; + border-top: none; + border-left: none; + border-right: none; + background-image: none; +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + /*position: relative;*/ + top: 0; + margin: 2px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + background-image: none; + background-color: #F9F9F9; + text-align: center; + font-weight: bold; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; + background-color: #EAEAEA; +} + +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .1em 1em; + text-decoration: none; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a + { + cursor: text; +} + +.ui-tabs .ui-tabs-nav li a, + /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ + .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer; +} + +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + background: none; + overflow: hidden; +} + +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} + +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial, sans-serif; + font-size: 12px; +} + +.ui-widget .ui-widget { + font-size: 1em; +} + +.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button + { + font-family: Arial, sans-serif; + font-size: 1em; +} + +.ui-widget-content { + border: 1px solid #999999; + background: #ffffff url(images/ui-bg_flat_0_ffffff_40x100.png) 50% 50% + repeat-x; + color: #555555; +} + +.ui-widget-content a { + color: #555555; +} + +.ui-widget-header { + border: 1px solid #999999; + /*background: #eeeeee url(images/ui-bg_highlight-soft_0_eeeeee_1x100.png) 50% 50% repeat-x;*/ + background: linear-gradient(#EAEAEA, #D3D3D3); + font-size: 14px; + color: #404143; + font-weight: bold; +} + +.ui-widget-header a { + color: #555555; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default + { + border: 1px solid #999999; + background: #eeeeee url(../media/gray_button_off.png) 50% 50% repeat; + font-weight: normal; + color: #000000; +} + +.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited + { + color: #777777; + text-decoration: none; +} + +.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus + { + border: 1px solid #999999; + background: #dadada url(../media/gray_button_on.png) 50% 50% repeat; + font-weight: normal; + color: #000000; +} + +.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited + { + color: #212121; + text-decoration: none; +} + +.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active + { + border: 1px solid #999999; + background: #eeeeee url(../media/gray_button_on.png) 50% 50% repeat; + font-weight: normal; + color: #000000; +} + +.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited { + color: #555555; + text-decoration: none; +} + +/* menu interaction states */ +.ui-menu .ui-menu-item a.ui-state-focus { + border-top: 1px solid #d8e8fa; + border-bottom: 1px solid #d8e8fa; + background: #ebf6ff; + border-radius: 0; +} + +.ui-menu .ui-menu-item a.selected { + color: #0755AC; +} +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight + { + border: 1px solid #ffffff; + background: #ebf6ff url(images/ui-bg_glass_0_ebf6ff_1x400.png) 50% 50% + repeat-x; + color: #555555; +} + +.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a + { + color: #555555; +} + +.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error + { + border: 1px solid #cd0a0a; + background: #fef1ec url(images/ui-bg_glass_0_fef1ec_1x400.png) 50% 50% + repeat-x; + color: #cd0a0a; +} + +.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a + { + color: #cd0a0a; +} + +.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text + { + color: #cd0a0a; +} + +.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary + { + font-weight: bold; +} + +.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary + { + opacity: .7; + filter: Alpha(Opacity = 70); + font-weight: normal; +} + +.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled + { + opacity: .35; + filter: Alpha(Opacity = 35); + background-image: none; +} + +.ui-state-disabled .ui-icon { + filter: Alpha(Opacity = 35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} + +.ui-icon,.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png); +} + +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png); +} + +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_777777_256x240.png); +} + +.ui-state-hover .ui-icon,.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png); +} + +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png); +} + +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_307DB9_256x240.png); +} + +.ui-state-error .ui-icon,.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-blank { + background-position: 16px 16px; +} + +.ui-icon-carat-1-n { + background-position: 0 0; +} + +.ui-icon-carat-1-ne { + background-position: -16px 0; +} + +.ui-icon-carat-1-e { + background-position: -32px 0; +} + +.ui-icon-carat-1-se { + background-position: -48px 0; +} + +.ui-icon-carat-1-s { + background-position: -64px 0; +} + +.ui-icon-carat-1-sw { + background-position: -80px 0; +} + +.ui-icon-carat-1-w { + background-position: -96px 0; +} + +.ui-icon-carat-1-nw { + background-position: -112px 0; +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0; +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0; +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px; +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px; +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px; +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} + +.ui-icon-arrow-4 { + background-position: 0 -80px; +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} + +.ui-icon-extlink { + background-position: -32px -80px; +} + +.ui-icon-newwin { + background-position: -48px -80px; +} + +.ui-icon-refresh { + background-position: -64px -80px; +} + +.ui-icon-shuffle { + background-position: -80px -80px; +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} + +.ui-icon-folder-open { + background-position: -16px -96px; +} + +.ui-icon-document { + background-position: -32px -96px; +} + +.ui-icon-document-b { + background-position: -48px -96px; +} + +.ui-icon-note { + background-position: -64px -96px; +} + +.ui-icon-mail-closed { + background-position: -80px -96px; +} + +.ui-icon-mail-open { + background-position: -96px -96px; +} + +.ui-icon-suitcase { + background-position: -112px -96px; +} + +.ui-icon-comment { + background-position: -128px -96px; +} + +.ui-icon-person { + background-position: -144px -96px; +} + +.ui-icon-print { + background-position: -160px -96px; +} + +.ui-icon-trash { + background-position: -176px -96px; +} + +.ui-icon-locked { + background-position: -192px -96px; +} + +.ui-icon-unlocked { + background-position: -208px -96px; +} + +.ui-icon-bookmark { + background-position: -224px -96px; +} + +.ui-icon-tag { + background-position: -240px -96px; +} + +.ui-icon-home { + background-position: 0 -112px; +} + +.ui-icon-flag { + background-position: -16px -112px; +} + +.ui-icon-calendar { + background-position: -32px -112px; +} + +.ui-icon-cart { + background-position: -48px -112px; +} + +.ui-icon-pencil { + background-position: -64px -112px; +} + +.ui-icon-clock { + background-position: -80px -112px; +} + +.ui-icon-disk { + background-position: -96px -112px; +} + +.ui-icon-calculator { + background-position: -112px -112px; +} + +.ui-icon-zoomin { + background-position: -128px -112px; +} + +.ui-icon-zoomout { + background-position: -144px -112px; +} + +.ui-icon-search { + background-position: -160px -112px; +} + +.ui-icon-wrench { + background-position: -176px -112px; +} + +.ui-icon-gear { + background-position: -192px -112px; +} + +.ui-icon-heart { + background-position: -208px -112px; +} + +.ui-icon-star { + background-position: -224px -112px; +} + +.ui-icon-link { + background-position: -240px -112px; +} + +.ui-icon-cancel { + background-position: 0 -128px; +} + +.ui-icon-plus { + background-position: -16px -128px; +} + +.ui-icon-plusthick { + background-position: -32px -128px; +} + +.ui-icon-minus { + background-position: -48px -128px; +} + +.ui-icon-minusthick { + background-position: -64px -128px; +} + +.ui-icon-close { + background-position: -80px -128px; +} + +.ui-icon-closethick { + background-position: -96px -128px; +} + +.ui-icon-key { + background-position: -112px -128px; +} + +.ui-icon-lightbulb { + background-position: -128px -128px; +} + +.ui-icon-scissors { + background-position: -144px -128px; +} + +.ui-icon-clipboard { + background-position: -160px -128px; +} + +.ui-icon-copy { + background-position: -176px -128px; +} + +.ui-icon-contact { + background-position: -192px -128px; +} + +.ui-icon-image { + background-position: -208px -128px; +} + +.ui-icon-video { + background-position: -224px -128px; +} + +.ui-icon-script { + background-position: -240px -128px; +} + +.ui-icon-alert { + background-position: 0 -144px; +} + +.ui-icon-info { + background-position: -16px -144px; +} + +.ui-icon-notice { + background-position: -32px -144px; +} + +.ui-icon-help { + background-position: -48px -144px; +} + +.ui-icon-check { + background-position: -64px -144px; +} + +.ui-icon-bullet { + background-position: -80px -144px; +} + +.ui-icon-radio-on { + background-position: -96px -144px; +} + +.ui-icon-radio-off { + background-position: -112px -144px; +} + +.ui-icon-pin-w { + background-position: -128px -144px; +} + +.ui-icon-pin-s { + background-position: -144px -144px; +} + +.ui-icon-play { + background-position: 0 -160px; +} + +.ui-icon-pause { + background-position: -16px -160px; +} + +.ui-icon-seek-next { + background-position: -32px -160px; +} + +.ui-icon-seek-prev { + background-position: -48px -160px; +} + +.ui-icon-seek-end { + background-position: -64px -160px; +} + +.ui-icon-seek-start { + background-position: -80px -160px; +} +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { + background-position: -80px -160px; +} + +.ui-icon-stop { + background-position: -96px -160px; +} + +.ui-icon-eject { + background-position: -112px -160px; +} + +.ui-icon-volume-off { + background-position: -128px -160px; +} + +.ui-icon-volume-on { + background-position: -144px -160px; +} + +.ui-icon-power { + background-position: 0 -176px; +} + +.ui-icon-signal-diag { + background-position: -16px -176px; +} + +.ui-icon-signal { + background-position: -32px -176px; +} + +.ui-icon-battery-0 { + background-position: -48px -176px; +} + +.ui-icon-battery-1 { + background-position: -64px -176px; +} + +.ui-icon-battery-2 { + background-position: -80px -176px; +} + +.ui-icon-battery-3 { + background-position: -96px -176px; +} + +.ui-icon-circle-plus { + background-position: 0 -192px; +} + +.ui-icon-circle-minus { + background-position: -16px -192px; +} + +.ui-icon-circle-close { + background-position: -32px -192px; +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} + +.ui-icon-circle-check { + background-position: -208px -192px; +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} + +.ui-icon-gripsmall-diagonal-se { + background: none; +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl { + border-top-left-radius: 3px; +} + +.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr { + border-top-right-radius: 3px; +} + +.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl { + border-bottom-left-radius: 3px; +} + +.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% + repeat-x; + opacity: .3; + filter: Alpha(Opacity = 30); +} + +.ui-widget-shadow { + -webkit-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); + box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); + /*margin: 5px 0 0 -3px; + padding: 0px; + background: #222222 url(images/ui-bg_flat_0_222222_40x100.png) 50% 50% repeat-x; + opacity: 0; + filter: Alpha(Opacity=0); + border-radius: 3px;*/ +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/jquery-ui.custom.css b/geoportal_1/src/main/webapp/resources/css/jquery-ui.custom.css deleted file mode 100755 index c722787..0000000 --- a/geoportal_1/src/main/webapp/resources/css/jquery-ui.custom.css +++ /dev/null @@ -1,456 +0,0 @@ -/* -* jQuery UI CSS Framework -* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -*/ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: inline-block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* -* jQuery UI CSS Framework -* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -*/ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Arial,sans-serif; font-size: 12px; } -.ui-widget .ui-widget { font-size: 12px; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,sans-serif; font-size: 12px; } -.ui-widget-content { border: 0px solid #aaaaaa; background: #ffffff url(../media/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } -.ui-widget-content a { color: #300f00; } -.ui-widget-header { border: 0px solid #aaaaaa; background: none 50% 50% repeat-x; color: #222222; font-weight: bold; } -.ui-widget-header a { color: #333333; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #999999; background: #ffffff url(../media/tab_bg.gif) 50% 50% repeat-x; font-weight: normal; color: #555555; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(../media/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } -/*.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }*/ -.ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #999999; background: #ffffff url(../media/tab_bg.gif) 50% 50% repeat-x; font-weight: normal; color: #212121; } -/*.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }*/ -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(../media/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(../media/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(../media/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(../media/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(../media/ui-icons_222222_256x240.png); } -.ui-state-default .ui-icon { background-image: url(../media/ui-icons_888888_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../media/ui-icons_454545_256x240.png); } -.ui-state-active .ui-icon {background-image: url(../media/ui-icons_454545_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(../media/ui-icons_2e83ff_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../media/ui-icons_cd0a0a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { /*background-position: -80px -128px;*/ - background-image: url(../media/button_close_dialog.png) !important; - border: 0px solid black !important; - } -.ui-icon-closethick { /*background-position: -96px -128px;*/ - background-image: url(../media/button_close_dialog.png) !important; - border: 0px solid black !important; - } - .ui-icon-close:hover { /*background-position: -80px -128px;*/ - background-image: url(../media/button_close_dialog.png) !important; - border: 0px solid black !important; - } -.ui-icon-closethick:hover { /*background-position: -96px -128px;*/ - background-image: url(../media/button_close_dialog.png) !important; - border: 0px solid black !important; - } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } -.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; } - -.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -/*.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }*/ - -/* Overlays */ -.ui-widget-overlay { background: #aaaaaa url(../media/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(../media/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } -/* Resizable -----------------------------------*/ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 2500; display: block;} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: col-resize; width: 5px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: col-resize; width: 5px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} -/* Selectable -----------------------------------*/ -.ui-selectable-helper { border:1px dotted black } - -/* Autocomplete -----------------------------------*/ -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} - .ui-autocomplete { - max-height: 150px; - overflow-y: auto; - /* prevent horizontal scrollbar */ - overflow-x: hidden; - } - /* IE 6 doesn't support max-height - * we use height instead, but this forces the menu to always be this tall - */ - * html .ui-autocomplete { - height: 150px; - } -.ui-autocomplete-loading { background: white url('../media/ui-anim_basic_16x16.gif') right center no-repeat; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* Menu -----------------------------------*/ - .ui-menu { border: 1px solid #CCCCCC; - display: block; - list-style: none outside none; - margin: 0; - outline: medium none; - padding: 2px; - text-align: left; - z-index: 2000 !important; - box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); -} -.ui-menu .ui-menu { margin-top: -3px; position: absolute; } -.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; } -.ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; } -.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; } -.ui-menu .ui-menu-item a.ui-state-focus, -.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; border: none; background: #edf4fa none; margin: 0; font-weight: normal;} - -.ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; } -.ui-menu .ui-state-disabled a { cursor: default; } - -/* icon support */ -.ui-menu-icons { position: relative; } -.ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; } - -/* left-aligned */ -.ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; } - -/* right-aligned */ -.ui-menu .ui-menu-icon { position: static; float: right; } -/* Button -----------------------------------*/ - -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } - -/*button text element */ -.ui-button .ui-button-text { display: block; /*line-height: 1.4;*/ } -.ui-button-text-only .ui-button-text { width: 75px; padding: 2px 0px; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } - -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } - -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } - -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ - - - - - -/* Dialog -----------------------------------*/ -.ui-dialog { position: absolute; width: 300px; overflow: hidden; border: 1px solid #CCCCCC; -webkit-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1);} -.ui-dialog .ui-dialog-titlebar { height: 26.2px; padding: 0; position: relative; background:url("../media/bg_grayfade.png") repeat-x scroll 0 0 #CCCCCC; } -.ui-dialog .ui-dialog-title { float: left; padding-left: 28px; color: #003366; line-height: 25px; font-family: Trebuchet MS; font-weight: lighter; font-size: 13px; padding-right: 10px; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; left: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; background-image: none !important; background-color: transparent; border: 0px solid black !important;} -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -/*.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }*/ -.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; /*overflow: auto; */zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; /*padding: .2em .6em .3em .6em;*/ line-height: 1.4em; width:auto; overflow:visible;background: url("../media/tab_bg.gif") repeat-x scroll 50% 50% #FFFFFF; color: #333333; border:1px solid #AEAEAE; font-family:tahoma; -moz-border-radius: 3px; border-radius: 3px;} -.ui-dialog .ui-dialog-buttonpane button:hover { color: #417DC1} -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* Slider -----------------------------------*/ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -2px; cursor: pointer; border: medium none; background: url("../media/opacity_arrow.png") no-repeat scroll 0 0 transparent;margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; width:129px; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs -----------modified: Chris Barnett------------------------*/ -.ui-tabs { color: #333333; position: relative; padding: 0; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; margin: 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: 0 1em; padding-top: .25em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; padding-bottom: 1px;} -li.ui-tabs a {color: #300f00;} -li.ui-tabs-active a {color: #417dc1;} -.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: default; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 0; background: none; width: 100%; position: relative; height: 100%;} - -.ui-accordion-content { border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC; padding: 5px;} -.ui-accordion-header { height: 26.2px; padding: 0; position: relative; border: 1px solid #CCCCCC !important; border-radius:0 0 0 0;} -.ui-accordion-header a { text-decoration: none; padding-left: 4px; color: #333333; line-height: 25px; font-family: tahoma; font-weight: lighter; font-size: 13px; padding-right: 10px; } -.ui-accordion-header.ui-state-active a {color: #417dc1} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/localize.css b/geoportal_1/src/main/webapp/resources/css/localize.css new file mode 100644 index 0000000..1cc4648 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/css/localize.css @@ -0,0 +1,26 @@ +@CHARSET "UTF-8"; + + +#logoGraphic { + background: url("../media/OGP_logo.png") repeat scroll 0 -5px rgba(0, 0, 0, 0); + height: 50px; + width: 50px; + padding: 2px; +} + +#logo > div { + display: inline-block; + vertical-align: top; +} + +#logo > div.logoText { + margin-left: -9px; +} +/* +#footerLogos .institutionLogo { + background: url("../media/ogp-institutions.png") no-repeat scroll -9px + -59px transparent; + height: 30px; + width: 66px; +} +*/ diff --git a/geoportal_1/src/main/webapp/resources/css/localizeTufts.css b/geoportal_1/src/main/webapp/resources/css/localizeTufts.css new file mode 100644 index 0000000..8610e31 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/css/localizeTufts.css @@ -0,0 +1,23 @@ +#logoGraphic { + background: none; + height: 0px; + width: 0px; + padding: 0px; +} + +#logo > div { + display: inline-block; + vertical-align: top; +} + +#logo > div.logoText { + margin-left: 0px; +} + +#footerLogos .institutionLogo { + background: url("../media/ogp-institutions.png") no-repeat scroll -9px + -59px transparent; + height: 30px; + width: 66px; +} + diff --git a/geoportal_1/src/main/webapp/resources/css/mapDiv.css b/geoportal_1/src/main/webapp/resources/css/mapDiv.css index 6f2f4ab..ce941bb 100644 --- a/geoportal_1/src/main/webapp/resources/css/mapDiv.css +++ b/geoportal_1/src/main/webapp/resources/css/mapDiv.css @@ -1,73 +1,76 @@ /* map panel */ #map { - min-width: 415px; - height: 512px; - display: inline-block; + min-height: 512px; + margin: 0; + min-width: 512px; + position: absolute; + right: 0; } .map_expanded { - width: 1000px !important; + /*width: 1000px !important;*/ z-index: 500; - position:absolute; + /*position:absolute;*/ } - + .clearfloats { - clear:both; + clear: both; } -#map_tabs { - float:right; - height: 25px; - margin-right:5px; +#mapToolBar { + height: 31px; + position: absolute; + right: 0; + z-index: 1005; } -#geosearchDiv { - position: absolute; - top: 5px; - right: 4px; - width: 253px; - z-index: 1001; +#neCorner { + border-color: rgba(0, 0, 0, 0) #1D6EEF rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); + border-width: 0 30px 30px 0; + right: 0px; } -#geosearchDiv > input { - background: none repeat scroll 0 0 transparent; - border: 1px solid #AAAAAA; - color: #FFFFFF; - height: 17px; - width: 220px; - opacity: .7; - filter:Alpha(Opacity=70); - padding-left: 3px; - padding-right: 3px; + +#seCorner { + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #1D6EEF rgba(0, 0, 0, 0); + border-width: 0 0 30px 30px; + bottom: 0; + right: 0; } -#geosearchDiv > span { - color: white; - font-size: 10px; - visibility: hidden; + +#nwCorner { + border-color: #1D6EEF rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); + border-width: 30px 30px 0 0; } -#goButton { - float: right; - height: 19px; - width: 19px; - background: #cccccc url(../media/bg_grayfade.png) repeat-x; - color: #666666; - border:1px solid #AEAEAE; - font-family:tahoma; - font-size:12px; - /*margin-top:4px; - padding:0 4px;*/ - -moz-border-radius: 0px 4px 4px 0px; - border-radius: 0px 4px 4px 0px; - position: absolute; - right: 0px; - top: 0px; - box-shadow: -1px -1px 2px -1px #AEAEAE inset; +#swCorner { + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #1D6EEF; + border-width: 30px 0 0 30px; + bottom: 0; +} + +.corner { + border-style: solid; + height: 0; + margin: 10px; + position: absolute; + width: 0; + z-index: 1001; + display: none; } -div#goButton:hover { - color:#417dc1; +#ogpMapButtons { + margin-right: 20px; + margin-top: 5px; +} + +#ogpMapButtons .ui-button { + margin-right: 6px; +} + +#basemapMenu { + display: inline-block; } .mapClearButtonItemInactive { @@ -77,9 +80,9 @@ div#goButton:hover { /*background: #cccccc url(../media/bg_grayfade.png) repeat-x;*/ background: #FFFFFF; color: #666666; - border:1px solid #AEAEAE; - font-family:tahoma; - font-size:12px; + border: 1px solid #AEAEAE; + font-family: tahoma; + font-size: 12px; -moz-border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px; cursor: pointer; @@ -89,302 +92,368 @@ div#goButton:hover { } .mapClearButtonItemInactive:hover { - color:#417dc1; + color: #417dc1; } #mapLoadIndicator { - position: absolute; - width: 27px; - height: 25px; - left: 205px; - top: 3px; + background-color: #E9EAEB; + border: 1px solid #8B8C8E; + border-radius: 5px; + -moz-border-radius: 5px; + height: 24px; + margin: 3px; + padding: 0 2px 3px 1px; + width: 26px; + visibility: none; + -moz-box-shadow: 2px 5px 4px -1px #777777; + -webkit-box-shadow: 2px 5px 4px -1px #777777; + box-shadow: 2px 5px 4px -1px #777777; + } div.olControlMousePosition { - bottom: 13px !important; + background: linear-gradient(rgba(255, 255, 255, 0.75), rgba(255, 255, 255, 0.05)); + background: -moz-linear-gradient(left center , rgba(255, 255, 255, 0.75), rgba(255, 255, 255, 0.05)) repeat scroll 0 0 rgba(255, 255, 255, 0); + height: 19px; + line-height: 19px; + padding-left: 15px; + padding-right: 53px; + right: auto !important; } #geoportalMap { - margin: 0px; - padding: 0px; - opacity: 0; + margin: 0px; + padding: 0px; + opacity: 0; } - + + +.olControlAttribution { + bottom: 0 !important; +} + .olControlScaleLine { - margin-left: 60px; - padding: 1px; - opacity: 0.65; - filter:Alpha(Opacity=65); - background-color: white; + left: auto !important; + right: 10px; + bottom: 31px !important; + margin-left: 60px; + padding: 1px; + opacity: 0.65; + filter: Alpha(Opacity = 65); + background-color: white; } .olControlPanel { - left: 5px; - top: 5px; + left: 50px; + top: 5px; } /*.olImageLoadError_custom { display: none; }*/ - .olControlPanel div { - float: left; -} - -#mapToolBar { - height: 31px; - width: 100%; - position: absolute; - background-color: #000000; - opacity: .35; - filter:Alpha(Opacity=35); - z-index: 1000; + float: left; } .olControlOverviewMapContainer { - position: absolute; - bottom: 100%; - top: 53px; - right: 4px; + position: absolute; + bottom: 100%; + top: 53px; + right: 4px; } .olControlOverviewMapElement { - padding: 2px 2px 2px 2px; - background-color: #CCCCCC; - -moz-border-radius: 0 0 0 0; - margin-right: -3px; - margin-top: -21px; + padding: 2px 2px 2px 2px; + background-color: #CCCCCC; + -moz-border-radius: 0 0 0 0; + margin-right: -3px; + margin-top: -21px; } .olControlOverviewMapMinimizeButton { - right: 0px; - bottom: 0px; - cursor: pointer; -} + right: 0px; + bottom: 0px; + cursor: pointer; +} .olControlOverviewMapMaximizeButton { - right: 0px; - bottom: 0px; - cursor: pointer; + right: 0px; + bottom: 0px; + cursor: pointer; } .olControlOverviewMapExtentRectangle { - overflow: hidden; - /*background-image: url("img/blank.gif");*/ - cursor: move; - border: 2px dotted red; + overflow: hidden; + /*background-image: url("img/blank.gif");*/ + cursor: move; + border: 2px dotted red; } + .olControlOverviewMapRectReplacement { - overflow: hidden; - cursor: move; - background-image: url("img/overview_replacement.gif"); - background-repeat: no-repeat; - background-position: center; -} - -.olControlNavToolbar { - width:60px; - height:30px; -} -.olControlNavToolbar div { - display:block; - width: 100px; - height: 28px; - top: 10px; - left: 6px; - position: relative; + overflow: hidden; + cursor: move; + background-image: url("img/overview_replacement.gif"); + background-repeat: no-repeat; + background-position: center; +} + +.olControlNavToolbar { + width: 60px; + height: 30px; +} + +.olControlNavToolbar div { + display: block; + width: 100px; + height: 28px; + top: 10px; + left: 6px; + position: relative; } .olControlNavigationHistory { background-image: none; - background-repeat:no-repeat; - height:24px; - width:24px; - cursor: pointer; + background-repeat: no-repeat; + height: 38px; + width: 30px; + cursor: pointer; } -.olControlNavigationHistoryPreviousItemActive { - background: url("../media/arrow_back.png") no-repeat scroll 0 0 transparent; + +.olControlNavigationHistoryPreviousItemActive { + background: url("../media/ogp-sprite.png") no-repeat scroll -31px -139px + transparent; } -.olControlNavigationHistoryPreviousItemActive:hover { - background: url("../media/arrow_back_blue.png") no-repeat scroll 0 0 transparent; + +.olControlNavigationHistoryPreviousItemActive:hover { + background: url("../media/ogp-sprite.png") no-repeat scroll -31px -183px + transparent; } -.olControlNavigationHistoryPreviousItemInactive { - background: url("../media/arrow_back_disable.png") no-repeat scroll 0 0 transparent; + +.olControlNavigationHistoryPreviousItemInactive { + background: url("../media/ogp-sprite.png") no-repeat scroll -31px -139px + transparent; } -.olControlNavigationHistoryNextItemActive { - background: url("../media/arrow_forward.png") no-repeat scroll 0 0 transparent; + +.olControlNavigationHistoryNextItemActive { + background: url("../media/ogp-sprite.png") no-repeat scroll -61px -139px + transparent; } -.olControlNavigationHistoryNextItemActive:hover { - background: url("../media/arrow_forward_blue.png") no-repeat scroll 0 0 transparent; +.olControlNavigationHistoryNextItemActive:hover { + background: url("../media/ogp-sprite.png") no-repeat scroll -61px -183px + transparent; } -.olControlNavigationHistoryNextItemInactive { - background: url("../media/arrow_forward_disable.png") no-repeat scroll 0 0 transparent; +.olControlNavigationHistoryNextItemInactive { + background: url("../media/ogp-sprite.png") no-repeat scroll -61px -139px + transparent; } -.olControlPanel .olControlNavigationItemActive { - background: url("../media/pan_on.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; - cursor: pointer; +.olControlPanel .olControlNavigationItemActive { + background: url("../media/ogp-sprite.png") no-repeat scroll -122px + -183px transparent; + width: 38px; + height: 38px; + cursor: pointer; } -.olControlPanel .olControlNavigationItemInactive { - background: url("../media/pan_off.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; - cursor: pointer; + +.olControlPanel .olControlNavigationItemInactive { + background: url("../media/ogp-sprite.png") no-repeat scroll -122px + -139px transparent; + width: 38px; + height: 38px; + cursor: pointer; } -.olControlPanel .olControlZoomBoxItemActive { - background: url("../media/zoom_on.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; - cursor: pointer; + +.olControlPanel .olControlNavigationItemInactive:hover { + background: url("../media/ogp-sprite.png") no-repeat scroll -122px + -183px transparent; } -.olControlPanel .olControlZoomBoxItemInactive { - background: url("../media/zoom_off.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; - cursor: pointer; + +.olControlPanel .olControlZoomBoxItemActive { + background: url("../media/ogp-sprite.png") no-repeat scroll -91px -183px + transparent; + width: 31px; + height: 38px; + cursor: pointer; } -div.olControlZoomBoxItemInactive:hover { - background-image: url("../media/zoom_off.png"); +.olControlPanel .olControlZoomBoxItemInactive { + background: url("../media/ogp-sprite.png") no-repeat scroll -91px -139px + transparent; + width: 31px; + height: 38px; + cursor: pointer; } -.olControlPanel .olControlZoomToMaxExtentItemInactive { - background: url("../media/full_extent.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; - cursor: pointer; +.olControlPanel .olControlZoomBoxItemInactive:hover { + background: url("../media/ogp-sprite.png") no-repeat scroll -91px -183px + transparent; } -div.olControlZoomToMaxExtentItemInactive:hover { - background-image: url("../media/full_extent_hover.png") !important; +.olControlPanel .olControlZoomToMaxExtentItemInactive { + background: url("../media/ogp-sprite.png") no-repeat scroll 0 -139px + transparent; + width: 31px; + height: 38px; + cursor: pointer; +} + +.olControlPanel .olControlZoomToMaxExtentItemInactive:hover { + background: url("../media/ogp-sprite.png") no-repeat scroll 0 -183px + transparent; } -.olControlZoomToMaxExtentItemInactiveHover { - background-image: url("../media/full_extent_hover.png") !important; - cursor: pointer; - -} +.zoomPlus { + background: url("../media/ogp-sprite.png") no-repeat scroll -165px -12px + transparent; +} + +.zoomMinus { + background: url("../media/ogp-sprite.png") no-repeat scroll -165px + -240px transparent; +} -.olControlPanel .olControlZoomToMaxExtentItemActive { - background: url("../media/full_extent_hover.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; +.zoomSlideBar { + background: url("../media/ogp-sprite.png") no-repeat scroll -170px -30px + transparent; +} + +.zoomSlider { + background-color: #ffffff; + border: 1px solid #555555; + z-index: 9; + -moz-box-shadow: 3px 0px 5px -1px #777777; + -webkit-box-shadow: 3px 0px 5px -1px #777777; + box-shadow: 3px 0px 5px -1px #777777; } .olHandlerBoxZoomBox { - border: 2px solid red; - position: absolute; - background-color: white; - opacity: 0.50; - font-size: 1px; - filter: alpha(opacity=50); + border: 2px solid red; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity = 50); } + .olHandlerBoxSelectFeature { - border: 2px solid blue; - position: absolute; - background-color: white; - opacity: 0.50; - font-size: 1px; - filter: alpha(opacity=50); -} + border: 2px solid blue; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity = 50); +} .olControlPanPanel { - top: 37px; - left: 5px; - width: 41px; - height: 41px; - background: url("../media/panarrows_bg.png") no-repeat scroll 0 0 transparent; -} + top: 37px; + left: 5px; + width: 41px; + height: 41px; + background: url("../media/panarrows_bg.png") no-repeat scroll 0 0 + transparent; +} .olControlPanPanel div { - cursor: pointer; - position: absolute; - width:41px; - height:41px; + cursor: pointer; + position: absolute; + width: 41px; + height: 41px; } .olControlPanPanel .olControlPanNorthItemInactive { width: 18px; height: 18px; - top: 2px; - left: 13px; - background: url("../media/pandarrows_north.png") no-repeat scroll 0 0 transparent; + top: 2px; + left: 13px; + background: url("../media/pandarrows_north.png") no-repeat scroll 0 0 + transparent; } + .olControlPanPanel .olControlPanSouthItemInactive { - width: 18px; + width: 18px; height: 18px; - top: 30px; - left: 13px; - background: url("../media/pandarrows_south.png") no-repeat scroll 0 0 transparent; + top: 30px; + left: 13px; + background: url("../media/pandarrows_south.png") no-repeat scroll 0 0 + transparent; } + .olControlPanPanel .olControlPanWestItemInactive { - width: 18px; + width: 18px; height: 18px; - top: 15px; - left: 2px; - background: url("../media/pandarrows_west.png") no-repeat scroll 0 0 transparent; + top: 15px; + left: 2px; + background: url("../media/pandarrows_west.png") no-repeat scroll 0 0 + transparent; } + .olControlPanPanel .olControlPanEastItemInactive { - width: 18px; + width: 18px; height: 18px; - top: 15px; - left: 28px; - background: url("../media/pandarrows_east.png") no-repeat scroll 0 0 transparent; + top: 15px; + left: 28px; + background: url("../media/pandarrows_east.png") no-repeat scroll 0 0 + transparent; } .olControlPanPanel .olControlPanNorth { - width: 18px; + width: 18px; height: 18px; - top: 2px; - left: 13px; - background: url("../media/pandarrows_north.png") no-repeat scroll 0 0 transparent; + top: 2px; + left: 13px; + background: url("../media/pandarrows_north.png") no-repeat scroll 0 0 + transparent; } + .olControlPanPanel .olControlPanSouth { - width: 18px; + width: 18px; height: 18px; - top: 30px; - left: 13px; - background: url("../media/pandarrows_south.png") no-repeat scroll 0 0 transparent; + top: 30px; + left: 13px; + background: url("../media/pandarrows_south.png") no-repeat scroll 0 0 + transparent; } + .olControlPanPanel .olControlPanWest { - width: 18px; + width: 18px; height: 18px; - top: 15px; - left: 2px; - background: url("../media/pandarrows_west.png") no-repeat scroll 0 0 transparent; + top: 15px; + left: 2px; + background: url("../media/pandarrows_west.png") no-repeat scroll 0 0 + transparent; } + .olControlPanPanel .olControlPanEast { - width: 18px; + width: 18px; height: 18px; - top: 15px; - left: 28px; - background: url("../media/pandarrows_east.png") no-repeat scroll 0 0 transparent; + top: 15px; + left: 28px; + background: url("../media/pandarrows_east.png") no-repeat scroll 0 0 + transparent; } .olControlZoomPanel .olControlZoomOutItemInactive { - top: 36px; - left: 0px; - background-position: 0px 0px; + top: 36px; + left: 0px; + background-position: 0px 0px; } .olImageLoadError { - background-color: pink; - opacity: 0.5; - filter: alpha(opacity=50); /* IE */ + background-color: pink; + opacity: 0.5; + filter: alpha(opacity = 50); /* IE */ } #OpenLayers.Map_46_GMap2Container { - background-color:white !important; + background-color: white !important; } .olControlModPanZoomBar { top: 0px !important; left: 0px !important; - } +} #OpenLayers_Control_PanZoomBar_ZoombarOpenLayers.Map_61 { left: 19px !important; @@ -394,5 +463,4 @@ div.olControlZoomToMaxExtentItemInactive:hover { .olLayerGoogleCopyright { z-index: 0 !important; -} - +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/institutionTufts.css b/geoportal_1/src/main/webapp/resources/css/old/institutionTufts.css similarity index 61% rename from geoportal_1/src/main/webapp/resources/css/institutionTufts.css rename to geoportal_1/src/main/webapp/resources/css/old/institutionTufts.css index 65ee367..134a43e 100644 --- a/geoportal_1/src/main/webapp/resources/css/institutionTufts.css +++ b/geoportal_1/src/main/webapp/resources/css/old/institutionTufts.css @@ -1,5 +1,5 @@ body { - background: #cccccc url(../media/bg_tile.gif) repeat; + background: #cccccc url(../media/bg_tile.gif) repeat; font-family: arial, sans-serif; /* altering font-size could cause formatting problems in places */ font-size: 12px; @@ -17,27 +17,27 @@ body { } #contactLogos { - background: none repeat scroll 0 0 #CCCCCC; - bottom: 15px; - height: 30px; - left: 33px; - padding-top: 5px; - position: absolute; - width: 83%; + background: none repeat scroll 0 0 #CCCCCC; + bottom: 15px; + height: 30px; + left: 33px; + padding-top: 5px; + position: absolute; + width: 83%; } -#contactLogos > div { +#contactLogos>div { cursor: pointer; - display: inline-block; - height: 25px; - padding: 5px; + display: inline-block; + height: 25px; + padding: 5px; } -#contactLogos > div.gisLogo { +#contactLogos>div.gisLogo { float: right; } -#contactLogos > div.itLogo { +#contactLogos>div.itLogo { float: left; margin-left: 10px; } @@ -46,16 +46,16 @@ body { .itLogo { width: 34px; background: url(../media/uit_logo.png) no-repeat transparent; - } +} .gisLogo { width: 111px; background: url(../media/gis_logo.png) no-repeat transparent; - } +} h1 { font-size: 14px; - color:#003366; + color: #003366; } h2 { @@ -64,32 +64,32 @@ h2 { margin-bottom: 3px; } - h4 { - text-decoration:underline; - } - +h4 { + text-decoration: underline; +} + #header { - background-color: #edf4fa; + background-color: #edf4fa; border-right: #333 solid 1px; border-left: #333 solid 1px; border-bottom: #999999 solid 1px; } #top_menu { - width: 252px; - background: url(../media/top_menu_bg.png) no-repeat transparent; - } - - #top_menu a { - color:#FFFFFF; + width: 252px; + background: url(../media/top_menu_bg.png) no-repeat transparent; +} + +#top_menu a { + color: #FFFFFF; } #top_menu a:hover { - color:#FFFF66; + color: #FFFF66; } #welcome { - color:#333333; + color: #333333; } #footer { @@ -100,13 +100,13 @@ h2 { border-bottom: #333 solid 1px; } -#footer a{ - color:#FFFFFF; - text-decoration:none; +#footer a { + color: #FFFFFF; + text-decoration: none; } -#footer a:hover{ - color:#FFFF66; +#footer a:hover { + color: #FFFF66; } .highlight_row { diff --git a/geoportal_1/src/main/webapp/resources/css/old/jquery-ui-1.10.3.custom.css b/geoportal_1/src/main/webapp/resources/css/old/jquery-ui-1.10.3.custom.css new file mode 100755 index 0000000..47b4e12 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/css/old/jquery-ui-1.10.3.custom.css @@ -0,0 +1,1811 @@ +/*! jQuery UI - v1.10.3 - 2013-08-01 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2Csans-serif&fwDefault=normal&fsDefault=12px&cornerRadius=3px&bgColorHeader=%23eeeeee&bgTextureHeader=highlight_soft&bgImgOpacityHeader=0&borderColorHeader=%23999999&fcHeader=%23555555&iconColorHeader=%23555555&bgColorContent=%23ffffff&bgTextureContent=flat&bgImgOpacityContent=0&borderColorContent=%23999999&fcContent=%23555555&iconColorContent=%23555555&bgColorDefault=%23eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=0&borderColorDefault=%23999999&fcDefault=%23777777&iconColorDefault=%23777777&bgColorHover=%23dadada&bgTextureHover=glass&bgImgOpacityHover=0&borderColorHover=%23999999&fcHover=%23212121&iconColorHover=%23454545&bgColorActive=%23eeeeee&bgTextureActive=glass&bgImgOpacityActive=10&borderColorActive=%23999999&fcActive=%23555555&iconColorActive=%23555555&bgColorHighlight=%23ebf6ff&bgTextureHighlight=glass&bgImgOpacityHighlight=0&borderColorHighlight=%23ffffff&fcHighlight=%23555555&iconColorHighlight=%23307DB9&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=0&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23222222&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=0&thicknessShadow=0px&offsetTopShadow=5px&offsetLeftShadow=-3px&cornerRadiusShadow=3px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} + +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} + +.ui-helper-clearfix:before,.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} + +.ui-helper-clearfix:after { + clear: both; +} + +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} + +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity = 0); +} + +.ui-front { + z-index: 100; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ui-resizable { + position: relative; +} + +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} + +.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle + { + display: none; +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ +} + +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} + +.ui-accordion .ui-accordion-noicons { + padding-left: .7em; +} + +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} + +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} + +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} + +.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active + { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} + +.ui-button-icons-only { + width: 3.4em; +} + +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} + +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} + +.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text + { + padding: .4em; + text-indent: -9999999px; +} + +.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: .4em 1em .4em 2.1em; +} + +.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: .4em 2.1em .4em 1em; +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon + { + position: absolute; + top: 50%; + margin-top: -8px; +} + +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} + +.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary + { + left: .5em; +} + +.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary + { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} + +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} + +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} + +.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} + +.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover + { + top: 1px; +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} + +.ui-datepicker .ui-datepicker-next { + right: 2px; +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} + +.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span + { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} + +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} + +.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year + { + width: 49%; +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} + +.ui-datepicker td { + border: 0; + padding: 1px; +} + +.ui-datepicker td span,.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header + { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group + { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header + { + border-right-width: 0; + border-left-width: 1px; +} + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} + +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} + +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} + +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} + +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} + +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + outline: none; +} + +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} + +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: + url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} + +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} + +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; +} + +.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active + { + font-weight: normal; + margin: -1px; +} + +.ui-menu .ui-state-disabled { + font-weight: normal; + margin: .4em 0 .2em; + line-height: 1.5; +} + +.ui-menu .ui-state-disabled a { + cursor: default; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} + +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} + +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} + +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} + +.ui-progressbar .ui-progressbar-overlay { + background: url("images/animated-overlay.gif"); + height: 100%; + filter: alpha(opacity = 25); + opacity: 0.25; +} + +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} + +.ui-slider { + position: relative; + text-align: left; +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range + { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} + +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} + +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to overide default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertical centre icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} + +.ui-spinner-up { + top: 0; +} + +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} + +.ui-tabs { + position: relative; + /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} + +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} + +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a + { + cursor: text; +} + +.ui-tabs .ui-tabs-nav li a, + /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ + .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer; +} + +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} + +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} + +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial, sans-serif; + font-size: 12px; +} + +.ui-widget .ui-widget { + font-size: 1em; +} + +.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button + { + font-family: Arial, sans-serif; + font-size: 1em; +} + +.ui-widget-content { + border: 1px solid #999999; + background: #ffffff url(images/ui-bg_flat_0_ffffff_40x100.png) 50% 50% + repeat-x; + color: #555555; +} + +.ui-widget-content a { + color: #555555; +} + +.ui-widget-header { + border: 1px solid #999999; + background: #eeeeee url(images/ui-bg_highlight-soft_0_eeeeee_1x100.png) + 50% 50% repeat-x; + color: #555555; + font-weight: bold; +} + +.ui-widget-header a { + color: #555555; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default + { + border: 1px solid #999999; + background: #eeeeee url(images/ui-bg_glass_0_eeeeee_1x400.png) 50% 50% + repeat-x; + font-weight: normal; + color: #777777; +} + +.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited + { + color: #777777; + text-decoration: none; +} + +.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus + { + border: 1px solid #999999; + background: #dadada url(images/ui-bg_glass_0_dadada_1x400.png) 50% 50% + repeat-x; + font-weight: normal; + color: #212121; +} + +.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited + { + color: #212121; + text-decoration: none; +} + +.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active + { + border: 1px solid #999999; + background: #eeeeee url(images/ui-bg_glass_10_eeeeee_1x400.png) 50% 50% + repeat-x; + font-weight: normal; + color: #555555; +} + +.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited { + color: #555555; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight + { + border: 1px solid #ffffff; + background: #ebf6ff url(images/ui-bg_glass_0_ebf6ff_1x400.png) 50% 50% + repeat-x; + color: #555555; +} + +.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a + { + color: #555555; +} + +.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error + { + border: 1px solid #cd0a0a; + background: #fef1ec url(images/ui-bg_glass_0_fef1ec_1x400.png) 50% 50% + repeat-x; + color: #cd0a0a; +} + +.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a + { + color: #cd0a0a; +} + +.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text + { + color: #cd0a0a; +} + +.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary + { + font-weight: bold; +} + +.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary + { + opacity: .7; + filter: Alpha(Opacity = 70); + font-weight: normal; +} + +.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled + { + opacity: .35; + filter: Alpha(Opacity = 35); + background-image: none; +} + +.ui-state-disabled .ui-icon { + filter: Alpha(Opacity = 35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} + +.ui-icon,.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png); +} + +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png); +} + +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_777777_256x240.png); +} + +.ui-state-hover .ui-icon,.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png); +} + +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png); +} + +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_307DB9_256x240.png); +} + +.ui-state-error .ui-icon,.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-blank { + background-position: 16px 16px; +} + +.ui-icon-carat-1-n { + background-position: 0 0; +} + +.ui-icon-carat-1-ne { + background-position: -16px 0; +} + +.ui-icon-carat-1-e { + background-position: -32px 0; +} + +.ui-icon-carat-1-se { + background-position: -48px 0; +} + +.ui-icon-carat-1-s { + background-position: -64px 0; +} + +.ui-icon-carat-1-sw { + background-position: -80px 0; +} + +.ui-icon-carat-1-w { + background-position: -96px 0; +} + +.ui-icon-carat-1-nw { + background-position: -112px 0; +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0; +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0; +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px; +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px; +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px; +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} + +.ui-icon-arrow-4 { + background-position: 0 -80px; +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} + +.ui-icon-extlink { + background-position: -32px -80px; +} + +.ui-icon-newwin { + background-position: -48px -80px; +} + +.ui-icon-refresh { + background-position: -64px -80px; +} + +.ui-icon-shuffle { + background-position: -80px -80px; +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} + +.ui-icon-folder-open { + background-position: -16px -96px; +} + +.ui-icon-document { + background-position: -32px -96px; +} + +.ui-icon-document-b { + background-position: -48px -96px; +} + +.ui-icon-note { + background-position: -64px -96px; +} + +.ui-icon-mail-closed { + background-position: -80px -96px; +} + +.ui-icon-mail-open { + background-position: -96px -96px; +} + +.ui-icon-suitcase { + background-position: -112px -96px; +} + +.ui-icon-comment { + background-position: -128px -96px; +} + +.ui-icon-person { + background-position: -144px -96px; +} + +.ui-icon-print { + background-position: -160px -96px; +} + +.ui-icon-trash { + background-position: -176px -96px; +} + +.ui-icon-locked { + background-position: -192px -96px; +} + +.ui-icon-unlocked { + background-position: -208px -96px; +} + +.ui-icon-bookmark { + background-position: -224px -96px; +} + +.ui-icon-tag { + background-position: -240px -96px; +} + +.ui-icon-home { + background-position: 0 -112px; +} + +.ui-icon-flag { + background-position: -16px -112px; +} + +.ui-icon-calendar { + background-position: -32px -112px; +} + +.ui-icon-cart { + background-position: -48px -112px; +} + +.ui-icon-pencil { + background-position: -64px -112px; +} + +.ui-icon-clock { + background-position: -80px -112px; +} + +.ui-icon-disk { + background-position: -96px -112px; +} + +.ui-icon-calculator { + background-position: -112px -112px; +} + +.ui-icon-zoomin { + background-position: -128px -112px; +} + +.ui-icon-zoomout { + background-position: -144px -112px; +} + +.ui-icon-search { + background-position: -160px -112px; +} + +.ui-icon-wrench { + background-position: -176px -112px; +} + +.ui-icon-gear { + background-position: -192px -112px; +} + +.ui-icon-heart { + background-position: -208px -112px; +} + +.ui-icon-star { + background-position: -224px -112px; +} + +.ui-icon-link { + background-position: -240px -112px; +} + +.ui-icon-cancel { + background-position: 0 -128px; +} + +.ui-icon-plus { + background-position: -16px -128px; +} + +.ui-icon-plusthick { + background-position: -32px -128px; +} + +.ui-icon-minus { + background-position: -48px -128px; +} + +.ui-icon-minusthick { + background-position: -64px -128px; +} + +.ui-icon-close { + background-position: -80px -128px; +} + +.ui-icon-closethick { + background-position: -96px -128px; +} + +.ui-icon-key { + background-position: -112px -128px; +} + +.ui-icon-lightbulb { + background-position: -128px -128px; +} + +.ui-icon-scissors { + background-position: -144px -128px; +} + +.ui-icon-clipboard { + background-position: -160px -128px; +} + +.ui-icon-copy { + background-position: -176px -128px; +} + +.ui-icon-contact { + background-position: -192px -128px; +} + +.ui-icon-image { + background-position: -208px -128px; +} + +.ui-icon-video { + background-position: -224px -128px; +} + +.ui-icon-script { + background-position: -240px -128px; +} + +.ui-icon-alert { + background-position: 0 -144px; +} + +.ui-icon-info { + background-position: -16px -144px; +} + +.ui-icon-notice { + background-position: -32px -144px; +} + +.ui-icon-help { + background-position: -48px -144px; +} + +.ui-icon-check { + background-position: -64px -144px; +} + +.ui-icon-bullet { + background-position: -80px -144px; +} + +.ui-icon-radio-on { + background-position: -96px -144px; +} + +.ui-icon-radio-off { + background-position: -112px -144px; +} + +.ui-icon-pin-w { + background-position: -128px -144px; +} + +.ui-icon-pin-s { + background-position: -144px -144px; +} + +.ui-icon-play { + background-position: 0 -160px; +} + +.ui-icon-pause { + background-position: -16px -160px; +} + +.ui-icon-seek-next { + background-position: -32px -160px; +} + +.ui-icon-seek-prev { + background-position: -48px -160px; +} + +.ui-icon-seek-end { + background-position: -64px -160px; +} + +.ui-icon-seek-start { + background-position: -80px -160px; +} +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { + background-position: -80px -160px; +} + +.ui-icon-stop { + background-position: -96px -160px; +} + +.ui-icon-eject { + background-position: -112px -160px; +} + +.ui-icon-volume-off { + background-position: -128px -160px; +} + +.ui-icon-volume-on { + background-position: -144px -160px; +} + +.ui-icon-power { + background-position: 0 -176px; +} + +.ui-icon-signal-diag { + background-position: -16px -176px; +} + +.ui-icon-signal { + background-position: -32px -176px; +} + +.ui-icon-battery-0 { + background-position: -48px -176px; +} + +.ui-icon-battery-1 { + background-position: -64px -176px; +} + +.ui-icon-battery-2 { + background-position: -80px -176px; +} + +.ui-icon-battery-3 { + background-position: -96px -176px; +} + +.ui-icon-circle-plus { + background-position: 0 -192px; +} + +.ui-icon-circle-minus { + background-position: -16px -192px; +} + +.ui-icon-circle-close { + background-position: -32px -192px; +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} + +.ui-icon-circle-check { + background-position: -208px -192px; +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl { + border-top-left-radius: 3px; +} + +.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr { + border-top-right-radius: 3px; +} + +.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl { + border-bottom-left-radius: 3px; +} + +.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% + repeat-x; + opacity: .3; + filter: Alpha(Opacity = 30); +} + +.ui-widget-shadow { + margin: 5px 0 0 -3px; + padding: 0px; + background: #222222 url(images/ui-bg_flat_0_222222_40x100.png) 50% 50% + repeat-x; + opacity: 0; + filter: Alpha(Opacity = 0); + border-radius: 3px; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/old/jquery-ui-1.10.3.custom.min.css b/geoportal_1/src/main/webapp/resources/css/old/jquery-ui-1.10.3.custom.min.css new file mode 100755 index 0000000..a2b6ad1 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/css/old/jquery-ui-1.10.3.custom.min.css @@ -0,0 +1,1766 @@ +/*! jQuery UI - v1.10.3 - 2013-08-01 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2Csans-serif&fwDefault=normal&fsDefault=12px&cornerRadius=3px&bgColorHeader=%23eeeeee&bgTextureHeader=highlight_soft&bgImgOpacityHeader=0&borderColorHeader=%23999999&fcHeader=%23555555&iconColorHeader=%23555555&bgColorContent=%23ffffff&bgTextureContent=flat&bgImgOpacityContent=0&borderColorContent=%23999999&fcContent=%23555555&iconColorContent=%23555555&bgColorDefault=%23eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=0&borderColorDefault=%23999999&fcDefault=%23777777&iconColorDefault=%23777777&bgColorHover=%23dadada&bgTextureHover=glass&bgImgOpacityHover=0&borderColorHover=%23999999&fcHover=%23212121&iconColorHover=%23454545&bgColorActive=%23eeeeee&bgTextureActive=glass&bgImgOpacityActive=10&borderColorActive=%23999999&fcActive=%23555555&iconColorActive=%23555555&bgColorHighlight=%23ebf6ff&bgTextureHighlight=glass&bgImgOpacityHighlight=0&borderColorHighlight=%23ffffff&fcHighlight=%23555555&iconColorHighlight=%23307DB9&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=0&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23222222&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=0&thicknessShadow=0px&offsetTopShadow=5px&offsetLeftShadow=-3px&cornerRadiusShadow=3px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ +.ui-helper-hidden { + display: none +} + +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none +} + +.ui-helper-clearfix:before,.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse +} + +.ui-helper-clearfix:after { + clear: both +} + +.ui-helper-clearfix { + min-height: 0 +} + +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity = 0) +} + +.ui-front { + z-index: 100 +} + +.ui-state-disabled { + cursor: default !important +} + +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat +} + +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100% +} + +.ui-resizable { + position: relative +} + +.ui-resizable-handle { + position: absolute; + font-size: .1px; + display: block +} + +.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle + { + display: none +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0 +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0 +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100% +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100% +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px +} + +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted #000 +} + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: .5em .5em .5em .7em; + min-height: 0 +} + +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em +} + +.ui-accordion .ui-accordion-noicons { + padding-left: .7em +} + +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em +} + +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto +} + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default +} + +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible +} + +.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active + { + text-decoration: none +} + +.ui-button-icon-only { + width: 2.2em +} + +button.ui-button-icon-only { + width: 2.4em +} + +.ui-button-icons-only { + width: 3.4em +} + +button.ui-button-icons-only { + width: 3.7em +} + +.ui-button .ui-button-text { + display: block; + line-height: normal +} + +.ui-button-text-only .ui-button-text { + padding: .4em 1em +} + +.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text + { + padding: .4em; + text-indent: -9999999px +} + +.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: .4em 1em .4em 2.1em +} + +.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: .4em 2.1em .4em 1em +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em +} + +input.ui-button { + padding: .4em 1em +} + +.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon + { + position: absolute; + top: 50%; + margin-top: -8px +} + +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px +} + +.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary + { + left: .5em +} + +.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary + { + right: .5em +} + +.ui-buttonset { + margin-right: 7px +} + +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em +} + +input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner { + border: 0; + padding: 0 +} + +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0 +} + +.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em +} + +.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover + { + top: 1px +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px +} + +.ui-datepicker .ui-datepicker-next { + right: 2px +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px +} + +.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span + { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0 +} + +.ui-datepicker select.ui-datepicker-month-year { + width: 100% +} + +.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year + { + width: 49% +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: 700; + border: 0 +} + +.ui-datepicker td { + border: 0; + padding: 1px +} + +.ui-datepicker td span,.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0 +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em; + width: auto; + overflow: visible +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left +} + +.ui-datepicker.ui-datepicker-multi { + width: auto +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50% +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3% +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25% +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header + { + border-left-width: 0 +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0 +} + +.ui-datepicker-rtl { + direction: rtl +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group + { + float: right +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header + { + border-right-width: 0; + border-left-width: 1px +} + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0 +} + +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px +} + +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: 0; + overflow: auto +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em +} + +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right +} + +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer +} + +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move +} + +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + outline: 0 +} + +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute +} + +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + list-style-image: + url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) +} + +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 +} + +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + min-height: 0; + font-weight: 400 +} + +.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active + { + font-weight: 400; + margin: -1px +} + +.ui-menu .ui-state-disabled { + font-weight: 400; + margin: .4em 0 .2em; + line-height: 1.5 +} + +.ui-menu .ui-state-disabled a { + cursor: default +} + +.ui-menu-icons { + position: relative +} + +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em +} + +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em +} + +.ui-menu .ui-menu-icon { + position: static; + float: right +} + +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden +} + +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100% +} + +.ui-progressbar .ui-progressbar-overlay { + background: url(images/animated-overlay.gif); + height: 100%; + filter: alpha(opacity = 25); + opacity: .25 +} + +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none +} + +.ui-slider { + position: relative; + text-align: left +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0 +} + +.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range + { + filter: inherit +} + +.ui-slider-horizontal { + height: .8em +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100% +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0 +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0 +} + +.ui-slider-vertical { + width: .8em; + height: 100px +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100% +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0 +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0 +} + +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle +} + +.ui-spinner-input { + border: 0; + background: 0; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px +} + +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0 +} + +.ui-spinner a.ui-spinner-button { + border-top: 0; + border-bottom: 0; + border-right: 0 +} + +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0 +} + +.ui-spinner-up { + top: 0 +} + +.ui-spinner-down { + bottom: 0 +} + +.ui-spinner .ui-icon-triangle-1-s { + background-position: -65px -16px +} + +.ui-tabs { + position: relative; + padding: .2em +} + +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0 +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap +} + +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a + { + cursor: text +} + +.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a + { + cursor: pointer +} + +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: 0 +} + +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa +} + +body .ui-tooltip { + border-width: 2px +} + +.ui-widget { + font-family: Arial, sans-serif; + font-size: 12px +} + +.ui-widget .ui-widget { + font-size: 1em +} + +.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button + { + font-family: Arial, sans-serif; + font-size: 1em +} + +.ui-widget-content { + border: 1px solid #999; + background: #fff url(images/ui-bg_flat_0_ffffff_40x100.png) 50% 50% + repeat-x; + color: #555 +} + +.ui-widget-content a { + color: #555 +} + +.ui-widget-header { + border: 1px solid #999; + background: #eee url(images/ui-bg_highlight-soft_0_eeeeee_1x100.png) 50% + 50% repeat-x; + color: #555; + font-weight: bold +} + +.ui-widget-header a { + color: #555 +} + +.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default + { + border: 1px solid #999; + background: #eee url(images/ui-bg_glass_0_eeeeee_1x400.png) 50% 50% + repeat-x; + font-weight: normal; + color: #777 +} + +.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited + { + color: #777; + text-decoration: none +} + +.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus + { + border: 1px solid #999; + background: #dadada url(images/ui-bg_glass_0_dadada_1x400.png) 50% 50% + repeat-x; + font-weight: normal; + color: #212121 +} + +.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited + { + color: #212121; + text-decoration: none +} + +.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active + { + border: 1px solid #999; + background: #eee url(images/ui-bg_glass_10_eeeeee_1x400.png) 50% 50% + repeat-x; + font-weight: normal; + color: #555 +} + +.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited { + color: #555; + text-decoration: none +} + +.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight + { + border: 1px solid #fff; + background: #ebf6ff url(images/ui-bg_glass_0_ebf6ff_1x400.png) 50% 50% + repeat-x; + color: #555 +} + +.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a + { + color: #555 +} + +.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error + { + border: 1px solid #cd0a0a; + background: #fef1ec url(images/ui-bg_glass_0_fef1ec_1x400.png) 50% 50% + repeat-x; + color: #cd0a0a +} + +.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a + { + color: #cd0a0a +} + +.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text + { + color: #cd0a0a +} + +.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary + { + font-weight: bold +} + +.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary + { + opacity: .7; + filter: Alpha(Opacity = 70); + font-weight: normal +} + +.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled + { + opacity: .35; + filter: Alpha(Opacity = 35); + background-image: none +} + +.ui-state-disabled .ui-icon { + filter: Alpha(Opacity = 35) +} + +.ui-icon { + width: 16px; + height: 16px +} + +.ui-icon,.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png) +} + +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png) +} + +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_777777_256x240.png) +} + +.ui-state-hover .ui-icon,.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png) +} + +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_555555_256x240.png) +} + +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_307DB9_256x240.png) +} + +.ui-state-error .ui-icon,.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png) +} + +.ui-icon-blank { + background-position: 16px 16px +} + +.ui-icon-carat-1-n { + background-position: 0 0 +} + +.ui-icon-carat-1-ne { + background-position: -16px 0 +} + +.ui-icon-carat-1-e { + background-position: -32px 0 +} + +.ui-icon-carat-1-se { + background-position: -48px 0 +} + +.ui-icon-carat-1-s { + background-position: -64px 0 +} + +.ui-icon-carat-1-sw { + background-position: -80px 0 +} + +.ui-icon-carat-1-w { + background-position: -96px 0 +} + +.ui-icon-carat-1-nw { + background-position: -112px 0 +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0 +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0 +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px +} + +.ui-icon-arrow-4 { + background-position: 0 -80px +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px +} + +.ui-icon-extlink { + background-position: -32px -80px +} + +.ui-icon-newwin { + background-position: -48px -80px +} + +.ui-icon-refresh { + background-position: -64px -80px +} + +.ui-icon-shuffle { + background-position: -80px -80px +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px +} + +.ui-icon-folder-open { + background-position: -16px -96px +} + +.ui-icon-document { + background-position: -32px -96px +} + +.ui-icon-document-b { + background-position: -48px -96px +} + +.ui-icon-note { + background-position: -64px -96px +} + +.ui-icon-mail-closed { + background-position: -80px -96px +} + +.ui-icon-mail-open { + background-position: -96px -96px +} + +.ui-icon-suitcase { + background-position: -112px -96px +} + +.ui-icon-comment { + background-position: -128px -96px +} + +.ui-icon-person { + background-position: -144px -96px +} + +.ui-icon-print { + background-position: -160px -96px +} + +.ui-icon-trash { + background-position: -176px -96px +} + +.ui-icon-locked { + background-position: -192px -96px +} + +.ui-icon-unlocked { + background-position: -208px -96px +} + +.ui-icon-bookmark { + background-position: -224px -96px +} + +.ui-icon-tag { + background-position: -240px -96px +} + +.ui-icon-home { + background-position: 0 -112px +} + +.ui-icon-flag { + background-position: -16px -112px +} + +.ui-icon-calendar { + background-position: -32px -112px +} + +.ui-icon-cart { + background-position: -48px -112px +} + +.ui-icon-pencil { + background-position: -64px -112px +} + +.ui-icon-clock { + background-position: -80px -112px +} + +.ui-icon-disk { + background-position: -96px -112px +} + +.ui-icon-calculator { + background-position: -112px -112px +} + +.ui-icon-zoomin { + background-position: -128px -112px +} + +.ui-icon-zoomout { + background-position: -144px -112px +} + +.ui-icon-search { + background-position: -160px -112px +} + +.ui-icon-wrench { + background-position: -176px -112px +} + +.ui-icon-gear { + background-position: -192px -112px +} + +.ui-icon-heart { + background-position: -208px -112px +} + +.ui-icon-star { + background-position: -224px -112px +} + +.ui-icon-link { + background-position: -240px -112px +} + +.ui-icon-cancel { + background-position: 0 -128px +} + +.ui-icon-plus { + background-position: -16px -128px +} + +.ui-icon-plusthick { + background-position: -32px -128px +} + +.ui-icon-minus { + background-position: -48px -128px +} + +.ui-icon-minusthick { + background-position: -64px -128px +} + +.ui-icon-close { + background-position: -80px -128px +} + +.ui-icon-closethick { + background-position: -96px -128px +} + +.ui-icon-key { + background-position: -112px -128px +} + +.ui-icon-lightbulb { + background-position: -128px -128px +} + +.ui-icon-scissors { + background-position: -144px -128px +} + +.ui-icon-clipboard { + background-position: -160px -128px +} + +.ui-icon-copy { + background-position: -176px -128px +} + +.ui-icon-contact { + background-position: -192px -128px +} + +.ui-icon-image { + background-position: -208px -128px +} + +.ui-icon-video { + background-position: -224px -128px +} + +.ui-icon-script { + background-position: -240px -128px +} + +.ui-icon-alert { + background-position: 0 -144px +} + +.ui-icon-info { + background-position: -16px -144px +} + +.ui-icon-notice { + background-position: -32px -144px +} + +.ui-icon-help { + background-position: -48px -144px +} + +.ui-icon-check { + background-position: -64px -144px +} + +.ui-icon-bullet { + background-position: -80px -144px +} + +.ui-icon-radio-on { + background-position: -96px -144px +} + +.ui-icon-radio-off { + background-position: -112px -144px +} + +.ui-icon-pin-w { + background-position: -128px -144px +} + +.ui-icon-pin-s { + background-position: -144px -144px +} + +.ui-icon-play { + background-position: 0 -160px +} + +.ui-icon-pause { + background-position: -16px -160px +} + +.ui-icon-seek-next { + background-position: -32px -160px +} + +.ui-icon-seek-prev { + background-position: -48px -160px +} + +.ui-icon-seek-end { + background-position: -64px -160px +} + +.ui-icon-seek-start { + background-position: -80px -160px +} + +.ui-icon-seek-first { + background-position: -80px -160px +} + +.ui-icon-stop { + background-position: -96px -160px +} + +.ui-icon-eject { + background-position: -112px -160px +} + +.ui-icon-volume-off { + background-position: -128px -160px +} + +.ui-icon-volume-on { + background-position: -144px -160px +} + +.ui-icon-power { + background-position: 0 -176px +} + +.ui-icon-signal-diag { + background-position: -16px -176px +} + +.ui-icon-signal { + background-position: -32px -176px +} + +.ui-icon-battery-0 { + background-position: -48px -176px +} + +.ui-icon-battery-1 { + background-position: -64px -176px +} + +.ui-icon-battery-2 { + background-position: -80px -176px +} + +.ui-icon-battery-3 { + background-position: -96px -176px +} + +.ui-icon-circle-plus { + background-position: 0 -192px +} + +.ui-icon-circle-minus { + background-position: -16px -192px +} + +.ui-icon-circle-close { + background-position: -32px -192px +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px +} + +.ui-icon-circle-check { + background-position: -208px -192px +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px +} + +.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl { + border-top-left-radius: 3px +} + +.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr { + border-top-right-radius: 3px +} + +.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl { + border-bottom-left-radius: 3px +} + +.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br { + border-bottom-right-radius: 3px +} + +.ui-widget-overlay { + background: #aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% + repeat-x; + opacity: .3; + filter: Alpha(Opacity = 30) +} + +.ui-widget-shadow { + margin: 5px 0 0 -3px; + padding: 0; + background: #222 url(images/ui-bg_flat_0_222222_40x100.png) 50% 50% + repeat-x; + opacity: 0; + filter: Alpha(Opacity = 0); + border-radius: 3px +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/old/jquery-ui.custom.css b/geoportal_1/src/main/webapp/resources/css/old/jquery-ui.custom.css new file mode 100755 index 0000000..b90eea9 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/css/old/jquery-ui.custom.css @@ -0,0 +1,1618 @@ +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +*/ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} + +.ui-helper-hidden-accessible { + position: absolute; + left: -99999999px; +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} + +.ui-helper-clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.ui-helper-clearfix { + display: inline-block; +} +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { + height: 1%; +} + +.ui-helper-clearfix { + display: block; +} +/* end clearfix */ +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity = 0); +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: inline-block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +*/ + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial, sans-serif; + font-size: 12px; +} + +.ui-widget .ui-widget { + font-size: 12px; +} + +.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button + { + font-family: Arial, sans-serif; + font-size: 12px; +} + +.ui-widget-content { + border: 0px solid #aaaaaa; + background: #ffffff url(../media/ui-bg_flat_75_ffffff_40x100.png) 50% + 50% repeat-x; + color: #222222; +} + +.ui-widget-content a { + color: #300f00; +} + +.ui-widget-header { + border: 0px solid #aaaaaa; + background: none 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} + +.ui-widget-header a { + color: #333333; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default + { + border: 1px solid #999999; + background: #eeeeee /*url(../media/tab_bg.gif) 50% 50% repeat-x*/; + font-weight: normal; + color: #555555; +} + +.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited + { + text-decoration: none; +} + +.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus + { + border: 1px solid #999999; + background: #dadada url(../media/ui-bg_glass_75_dadada_1x400.png) 50% + 50% repeat-x; + font-weight: normal; + color: #212121; +} +/*.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }*/ +.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active { + border: 1px solid #999999; + background: #eeeeee /*url(../media/tab_bg.gif) 50% 50% repeat-x*/; + font-weight: normal; + color: #212121; +} +/*.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }*/ +.ui-widget :active { + outline: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight + { + border: 1px solid #fcefa1; + background: #fbf9ee url(../media/ui-bg_glass_55_fbf9ee_1x400.png) 50% + 50% repeat-x; + color: #363636; +} + +.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a + { + color: #363636; +} + +.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error + { + border: 1px solid #cd0a0a; + background: #fef1ec url(../media/ui-bg_glass_95_fef1ec_1x400.png) 50% + 50% repeat-x; + color: #cd0a0a; +} + +.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a + { + color: #cd0a0a; +} + +.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text + { + color: #cd0a0a; +} + +.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary + { + font-weight: bold; +} + +.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary + { + opacity: .7; + filter: Alpha(Opacity = 70); + font-weight: normal; +} + +.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled + { + opacity: .35; + filter: Alpha(Opacity = 35); + background-image: none; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; + background-image: url(../media/ui-icons_222222_256x240.png); +} + +.ui-widget-content .ui-icon { + background-image: url(../media/ui-icons_222222_256x240.png); +} + +.ui-widget-header .ui-icon { + background-image: url(../media/ui-icons_222222_256x240.png); +} + +.ui-state-default .ui-icon { + background-image: url(../media/ui-icons_888888_256x240.png); +} + +.ui-state-hover .ui-icon,.ui-state-focus .ui-icon { + background-image: url(../media/ui-icons_454545_256x240.png); +} + +.ui-state-active .ui-icon { + background-image: url(../media/ui-icons_454545_256x240.png); +} + +.ui-state-highlight .ui-icon { + background-image: url(../media/ui-icons_2e83ff_256x240.png); +} + +.ui-state-error .ui-icon,.ui-state-error-text .ui-icon { + background-image: url(../media/ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-carat-1-n { + background-position: 0 0; +} + +.ui-icon-carat-1-ne { + background-position: -16px 0; +} + +.ui-icon-carat-1-e { + background-position: -32px 0; +} + +.ui-icon-carat-1-se { + background-position: -48px 0; +} + +.ui-icon-carat-1-s { + background-position: -64px 0; +} + +.ui-icon-carat-1-sw { + background-position: -80px 0; +} + +.ui-icon-carat-1-w { + background-position: -96px 0; +} + +.ui-icon-carat-1-nw { + background-position: -112px 0; +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0; +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0; +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px; +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px; +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px; +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} + +.ui-icon-arrow-4 { + background-position: 0 -80px; +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} + +.ui-icon-extlink { + background-position: -32px -80px; +} + +.ui-icon-newwin { + background-position: -48px -80px; +} + +.ui-icon-refresh { + background-position: -64px -80px; +} + +.ui-icon-shuffle { + background-position: -80px -80px; +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} + +.ui-icon-folder-open { + background-position: -16px -96px; +} + +.ui-icon-document { + background-position: -32px -96px; +} + +.ui-icon-document-b { + background-position: -48px -96px; +} + +.ui-icon-note { + background-position: -64px -96px; +} + +.ui-icon-mail-closed { + background-position: -80px -96px; +} + +.ui-icon-mail-open { + background-position: -96px -96px; +} + +.ui-icon-suitcase { + background-position: -112px -96px; +} + +.ui-icon-comment { + background-position: -128px -96px; +} + +.ui-icon-person { + background-position: -144px -96px; +} + +.ui-icon-print { + background-position: -160px -96px; +} + +.ui-icon-trash { + background-position: -176px -96px; +} + +.ui-icon-locked { + background-position: -192px -96px; +} + +.ui-icon-unlocked { + background-position: -208px -96px; +} + +.ui-icon-bookmark { + background-position: -224px -96px; +} + +.ui-icon-tag { + background-position: -240px -96px; +} + +.ui-icon-home { + background-position: 0 -112px; +} + +.ui-icon-flag { + background-position: -16px -112px; +} + +.ui-icon-calendar { + background-position: -32px -112px; +} + +.ui-icon-cart { + background-position: -48px -112px; +} + +.ui-icon-pencil { + background-position: -64px -112px; +} + +.ui-icon-clock { + background-position: -80px -112px; +} + +.ui-icon-disk { + background-position: -96px -112px; +} + +.ui-icon-calculator { + background-position: -112px -112px; +} + +.ui-icon-zoomin { + background-position: -128px -112px; +} + +.ui-icon-zoomout { + background-position: -144px -112px; +} + +.ui-icon-search { + background-position: -160px -112px; +} + +.ui-icon-wrench { + background-position: -176px -112px; +} + +.ui-icon-gear { + background-position: -192px -112px; +} + +.ui-icon-heart { + background-position: -208px -112px; +} + +.ui-icon-star { + background-position: -224px -112px; +} + +.ui-icon-link { + background-position: -240px -112px; +} + +.ui-icon-cancel { + background-position: 0 -128px; +} + +.ui-icon-plus { + background-position: -16px -128px; +} + +.ui-icon-plusthick { + background-position: -32px -128px; +} + +.ui-icon-minus { + background-position: -48px -128px; +} + +.ui-icon-minusthick { + background-position: -64px -128px; +} + +.ui-icon-close { /*background-position: -80px -128px;*/ + background-image: url(../media/button_close_dialog.png) !important; + border: 0px solid black !important; +} + +.ui-icon-closethick { /*background-position: -96px -128px;*/ + background-image: url(../media/button_close_dialog.png) !important; + border: 0px solid black !important; +} + +.ui-icon-close:hover { /*background-position: -80px -128px;*/ + background-image: url(../media/button_close_dialog.png) !important; + border: 0px solid black !important; +} + +.ui-icon-closethick:hover { /*background-position: -96px -128px;*/ + background-image: url(../media/button_close_dialog.png) !important; + border: 0px solid black !important; +} + +.ui-icon-key { + background-position: -112px -128px; +} + +.ui-icon-lightbulb { + background-position: -128px -128px; +} + +.ui-icon-scissors { + background-position: -144px -128px; +} + +.ui-icon-clipboard { + background-position: -160px -128px; +} + +.ui-icon-copy { + background-position: -176px -128px; +} + +.ui-icon-contact { + background-position: -192px -128px; +} + +.ui-icon-image { + background-position: -208px -128px; +} + +.ui-icon-video { + background-position: -224px -128px; +} + +.ui-icon-script { + background-position: -240px -128px; +} + +.ui-icon-alert { + background-position: 0 -144px; +} + +.ui-icon-info { + background-position: -16px -144px; +} + +.ui-icon-notice { + background-position: -32px -144px; +} + +.ui-icon-help { + background-position: -48px -144px; +} + +.ui-icon-check { + background-position: -64px -144px; +} + +.ui-icon-bullet { + background-position: -80px -144px; +} + +.ui-icon-radio-off { + background-position: -96px -144px; +} + +.ui-icon-radio-on { + background-position: -112px -144px; +} + +.ui-icon-pin-w { + background-position: -128px -144px; +} + +.ui-icon-pin-s { + background-position: -144px -144px; +} + +.ui-icon-play { + background-position: 0 -160px; +} + +.ui-icon-pause { + background-position: -16px -160px; +} + +.ui-icon-seek-next { + background-position: -32px -160px; +} + +.ui-icon-seek-prev { + background-position: -48px -160px; +} + +.ui-icon-seek-end { + background-position: -64px -160px; +} + +.ui-icon-seek-start { + background-position: -80px -160px; +} +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { + background-position: -80px -160px; +} + +.ui-icon-stop { + background-position: -96px -160px; +} + +.ui-icon-eject { + background-position: -112px -160px; +} + +.ui-icon-volume-off { + background-position: -128px -160px; +} + +.ui-icon-volume-on { + background-position: -144px -160px; +} + +.ui-icon-power { + background-position: 0 -176px; +} + +.ui-icon-signal-diag { + background-position: -16px -176px; +} + +.ui-icon-signal { + background-position: -32px -176px; +} + +.ui-icon-battery-0 { + background-position: -48px -176px; +} + +.ui-icon-battery-1 { + background-position: -64px -176px; +} + +.ui-icon-battery-2 { + background-position: -80px -176px; +} + +.ui-icon-battery-3 { + background-position: -96px -176px; +} + +.ui-icon-circle-plus { + background-position: 0 -192px; +} + +.ui-icon-circle-minus { + background-position: -16px -192px; +} + +.ui-icon-circle-close { + background-position: -32px -192px; +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} + +.ui-icon-circle-check { + background-position: -208px -192px; +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; +} + +.ui-corner-tr { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-bl { + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.ui-corner-br { + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-bottom { + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; +} + +.ui-corner-right { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} +/*.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }*/ + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(../media/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% + repeat-x; + opacity: .30; + filter: Alpha(Opacity = 30); +} + +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url(../media/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% + repeat-x; + opacity: .30; + filter: Alpha(Opacity = 30); + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} +/* Resizable +----------------------------------*/ +.ui-resizable { + position: relative; +} + +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + z-index: 2500; + display: block; +} + +.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle + { + display: none; +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} + +.ui-resizable-e { + cursor: col-resize; + width: 5px; + right: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-w { + cursor: col-resize; + width: 5px; + left: 0px; + top: 0; + height: 100%; +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +/* Selectable +----------------------------------*/ +.ui-selectable-helper { + border: 1px dotted black +} + +/* Autocomplete +----------------------------------*/ +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} + +.ui-autocomplete { + max-height: 150px; + overflow-y: auto; + /* prevent horizontal scrollbar */ + overflow-x: hidden; +} +/* IE 6 doesn't support max-height + * we use height instead, but this forces the menu to always be this tall + */ +* html .ui-autocomplete { + height: 150px; +} + +.ui-autocomplete-loading { + background: white url('../media/ui-anim_basic_16x16.gif') right center + no-repeat; +} + +/* workarounds */ +* html .ui-autocomplete { + width: 1px; +} /* without this, the menu expands to 100% in IE6 */ + +/* Menu +----------------------------------*/ +.ui-menu { + border: 1px solid #CCCCCC; + display: block; + list-style: none outside none; + margin: 0; + outline: medium none; + padding: 2px; + text-align: left; + z-index: 2000 !important; + box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); +} + +.ui-menu { + position: absolute; +} + +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} + +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + zoom: 1; + width: 100%; +} + +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} + +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + zoom: 1; + font-weight: normal; +} + +.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active + { + font-weight: normal; + border: none; + background: #edf4fa none; + margin: 0; + font-weight: normal; +} + +.ui-menu .ui-state-disabled { + font-weight: normal; + margin: .4em 0 .2em; + line-height: 1.5; +} + +.ui-menu .ui-state-disabled a { + cursor: default; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} + +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} +/* Button +----------------------------------*/ +.ui-button { + display: inline-block; + position: relative; + padding: 0; + margin-right: .1em; + text-decoration: none !important; + cursor: pointer; + text-align: center; + zoom: 1; + overflow: visible; +} /* the overflow property removes extra width in IE */ +.ui-button-icon-only { + width: 2.2em; +} /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { + width: 2.4em; +} /* button elements seem to need a little more width */ +.ui-button-icons-only { + width: 3.4em; +} + +button.ui-button-icons-only { + width: 3.7em; +} + +/*button text element */ +.ui-button .ui-button-text { + display: inline-block; + line-height: 1.4; +} + +.ui-button-text-only .ui-button-text { + width: 75px; + padding: 2px 0px; +} + +.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text + { + padding: .4em; + text-indent: -9999999px; +} + +.ui-button-text-icon .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: .4em 1em .4em 2.1em; +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon,.ui-button-text-icon .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon + { + position: absolute; + top: 50%; + margin-top: -8px; +} + +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} + +.ui-button-text-icon .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary + { + left: .5em; +} + +.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary + { + right: .5em; +} + +/*button sets*/ +.ui-buttonset { + margin-right: 7px; +} + +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} /* reset extra padding in Firefox */ + +/* Dialog +----------------------------------*/ +.ui-dialog { + position: absolute; + width: 300px; + overflow: hidden; + border: 1px solid #CCCCCC; + -webkit-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); + box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); +} + +.ui-dialog .ui-dialog-titlebar { + height: 26.2px; + padding: 0; + position: relative; + background: url("../media/bg_grayfade.png") repeat-x scroll 0 0 #CCCCCC; +} + +.ui-dialog .ui-dialog-title { + float: left; + padding-left: 28px; + color: #003366; + line-height: 25px; + font-family: Trebuchet MS; + font-weight: lighter; + font-size: 13px; + padding-right: 10px; +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + left: .3em; + top: 50%; + width: 19px; + margin: -10px 0 0 0; + padding: 1px; + height: 18px; + background-image: none !important; + background-color: transparent; + border: 0px solid black !important; +} + +.ui-dialog .ui-dialog-titlebar-close span { + display: block; + margin: 1px; +} +/*.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }*/ +.ui-dialog .ui-dialog-content { + border: 0; + padding: .5em 1em; + background: none; /*overflow: auto; */ + zoom: 1; +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + background-image: none; + margin: .5em 0 0 0; + padding: .3em 1em .5em .4em; +} + +.ui-dialog .ui-dialog-buttonpane button { + float: right; + margin: .5em .4em .5em 0; + cursor: pointer; /*padding: .2em .6em .3em .6em;*/ + line-height: 1.4em; + width: auto; + overflow: visible; + background: url("../media/tab_bg.gif") repeat-x scroll 50% 50% #FFFFFF; + color: #333333; + border: 1px solid #AEAEAE; + font-family: tahoma; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.ui-dialog .ui-dialog-buttonpane button:hover { + color: #417DC1 +} + +.ui-dialog .ui-resizable-se { + width: 14px; + height: 14px; + right: 3px; + bottom: 3px; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +/* Slider +----------------------------------*/ +.ui-slider { + position: relative; + text-align: left; +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1em; + cursor: default; +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +.ui-slider-horizontal { + height: .8em; +} + +.ui-slider-horizontal .ui-slider-handle { + top: -2px; + cursor: pointer; + border: medium none; + background: url("../media/opacity_arrow.png") no-repeat scroll 0 0 + transparent; + margin-left: -.6em; +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; + width: 129px; +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} /* Tabs +----------modified: Chris Barnett------------------------*/ +.ui-tabs { + color: #333333; + position: relative; + padding: 0; + zoom: 1; +} + /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: 0; +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + margin: 0 3px 1px 0; + border-bottom: 0 !important; + padding: 0; + white-space: nowrap; + z-index: 99; +} + +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: 0 1em; + padding-top: .25em; + text-decoration: none; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: 0; + padding-bottom: 3px; +} + +li.ui-tabs a { + color: #300f00; +} + +li.ui-tabs-active a { + color: #417dc1; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a + { + cursor: default; +} + +.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a + { + cursor: pointer; +} + /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 0; + background: none; + width: 100%; + position: absolute; + height: 100%; + margin-top: -1px; +} + +.ui-accordion-content { + border-bottom: 1px solid #CCCCCC; + border-left: 1px solid #CCCCCC; + border-right: 1px solid #CCCCCC; + padding: 5px; +} + +.ui-accordion-header { + height: 26.2px; + padding: 0; + position: relative; + border: 1px solid #CCCCCC !important; + border-radius: 0 0 0 0; +} + +.ui-accordion-header a { + text-decoration: none; + padding-left: 4px; + color: #333333; + line-height: 25px; + font-family: tahoma; + font-weight: lighter; + font-size: 13px; + padding-right: 10px; +} + +.ui-accordion-header.ui-state-active a { + color: #417dc1 +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/print.css b/geoportal_1/src/main/webapp/resources/css/print.css index d5b73d5..fae1cc6 100644 --- a/geoportal_1/src/main/webapp/resources/css/print.css +++ b/geoportal_1/src/main/webapp/resources/css/print.css @@ -1,10 +1,12 @@ -@page {size: landscape} +@media print +{ .page { - -webkit-transform: rotate(-90deg); - -moz-transform:rotate(-90deg); - filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - } + size: landscape; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} svg { display: none; @@ -34,7 +36,7 @@ svg { display: none; } -#roll_right > img { +#roll_right>img { display: none; } @@ -71,6 +73,4 @@ svg { .olControlMousePosition { display: none; } - - - +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/structure.css b/geoportal_1/src/main/webapp/resources/css/structure.css index f0af97b..4e95048 100644 --- a/geoportal_1/src/main/webapp/resources/css/structure.css +++ b/geoportal_1/src/main/webapp/resources/css/structure.css @@ -6,26 +6,36 @@ Released for free under a Creative Commons Attribution 2.5 License /* This file has been heavily modified from the original template */ +:focus { + outline: none; +} -:focus {outline:none;} - +/*html, body { + height: 100%; + margin: 0; + width: 100%; +}*/ body { - text-align: center; - margin: 0; + text-align: left; + margin: 0; padding: 0; - background: #cccccc url(../media/bg_tile.gif) repeat; + background: #cccccc; /* url(../media/bg_tile.gif) repeat;*/ font-family: arial, sans-serif; font-size: 12px; color: black; } +.hiddenElements { + display: none; +} + img { border: none; } h1 { font-size: 14px; - color:#003366; + color: #003366; } h2 { @@ -34,72 +44,92 @@ h2 { margin-bottom: 3px; } -h3 { +h3 { font-size: 12px; - color:#003366; + color: #003366; +} + +h4 { + text-decoration: underline; } - h4 { - text-decoration:underline; - } - .button { - cursor: pointer; -} - -.styledButton { - -moz-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - background: url("../media/tab_bg.gif") repeat-x scroll 50% 50% #FFFFFF; - border: 1px solid #AEAEAE; - color: #333333; - cursor: pointer; - font-family: tahoma; - margin: 0.5em 0.4em 0.5em 0; - padding: 2px 0px; - min-width: 88px; - text-align: center; - display: inline-block; + cursor: pointer; } .raised { - -webkit-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); - box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); + -webkit-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); + box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px + rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); } -.styledButton:hover { - color: #417DC1; - } - -.styledButtonSmall { - -moz-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - background: url("../media/tab_bg.gif") repeat-x scroll 50% 50% #FFFFFF; - border: 1px solid #AEAEAE; - color: #333333; - cursor: pointer; - font-family: tahoma; - /* margin: 0.5em 0.4em 0.5em 0;*/ - min-width: 66px; - text-align: center; - display: inline-block; - font-size: 10px; - line-height: 16px; - font-weight: normal; +.shadowDown { + -moz-box-shadow: 0px 3px 4px -1px #888888 inset; + -webkit-box-shadow: 0px 3px 4px -1px #888888 inset; + box-shadow: 0px 3px 4px -1px #888888 inset; +} + +.shadowDownOuter { + -moz-box-shadow: 0px 4px 6px -2px #888888; + -webkit-box-shadow: 0px 4px 6px -2px #888888; + box-shadow: 0px 4px 6px -2px #888888; +} + +.shadowRight { + -moz-box-shadow: 3px 0px 4px 1px #888888 inset; + -webkit-box-shadow: 3px 0px 4px 1px #888888 inset; + box-shadow: 3px 0px 4px 1px #888888 inset; +} + +.shadowRightOuter { + -moz-box-shadow: 2px 0px 9px 1px #888888; + -webkit-box-shadow: 2px 0px 9px 1px #888888; + box-shadow: 2px 0px 9px 1px #888888; +} + +.searchButton { + background: #6B91D5; +background: -webkit-gradient(linear, left top, left bottom, from(#6B91D5), to(#577CBE)); +background: -webkit-linear-gradient(#6B91D5, #577CBE); +background: -moz-linear-gradient(top, #6B91D5, #577CBE); +background: -ms-linear-gradient(#6B91D5, #577CBE); +background: -o-linear-gradient(#6B91D5, #577CBE); +background: linear-gradient(#6B91D5, #577CBE); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6B91D5', endColorstr='#577CBE'); +zoom: 1; + border: 1px solid #6B91D5; + color: #FFFFFF; +} + +li.searchAttribution.ui-widget-content.ui-menu-divider { + border: medium none; + margin: 0; +} + +#mapClearButton { + float: right; + margin-top: 1px; + right: 17px; +} + +#sortDropdown { + margin-left: 12px; +} + +#sortDropdown .select .ui-button-text { + width: 70px; } -.styledButtonSmall:hover { - color: #417DC1; - } - .owsServicesButton { width: 100%; - text-align: left; + text-align: left; } -.owsServicesButton > span.ui-button-text { - width: 100%; +.owsServicesButton>span.ui-button-text { + width: 100%; } .warning { @@ -110,377 +140,311 @@ h3 { font-weight: bold; } +.directionsText { + padding: 20px; +} +/*2*/ #metadataDownloadButton { - padding-left: 20px; - padding-right: 20px; - float: right; - margin-right: 5px; - margin-top: 3px - } - - div#main { - width: 100%; - min-width: 1002px; - /*width: 1002px;*/ - margin: 0 auto; - /*background-color: #fff;*/ - text-align: left; - opacity: 0; - } - + right: 2.3em; +} + /* Header */ #header { - height: 92px; - background-color: #edf4fa; - border-right: #333 solid 1px; - border-left: #333 solid 1px; + height: 120px; + background-color: #ffffff; + border-right: #CCCCCC solid 1px; + border-left: #CCCCCC solid 1px; border-bottom: #999999 solid 1px; } #logo { - float:left; - margin-left: 40px; - background: no-repeat transparent; - height: 75px; cursor: pointer; + color: #492318; + font-size: 35px; + padding-left: 49px; + padding-top: 25px; + display: inline-block; +} + +.offsetColor { + color: #587CBC; } - + #top_menu { - float:right; - height: 26px; - width: 252px; - background: url(../media/top_menu_bg.png) no-repeat transparent; - padding-top: 5px; - padding-left: 20px; - } + float: right; + margin-top: 18px; + margin-right: 17px; +} + +.separator { + padding: 0 5px; +} #top_menu a { - color:#FFFFFF; - text-decoration: none; + color: #000; + text-decoration: none; } #top_menu a:hover { - color:#FFFF66; + color: #0755AC; } -span.infoLinks { - cursor: pointer; - color:#FFFFFF; +.headerButton { + color: #000; + background: none; + border: none; + padding: 0; } -span.infoLinks:hover { - color:#FFFF66; +.headerButton:hover { + color: #0755AC; } #welcome { - float:right; - color:#333333; - font-style:italic; + float: right; + color: #333333; + font-style: italic; height: 20px; margin-top: 9px; margin-right: 10px; visibility: hidden; } -/* Menu */ -#menu { +.styledSelect>ul { + max-height: 160px; + overflow-x: hidden; + overflow-y: auto; position: absolute; - top: 62px; - height: 25px; - width: inherit; - min-width: 1000px; + z-index: 1500; } -.styledDropdown { +.searchFormInput.dropdown { display: inline-block; } -.styledSelect { - line-height: 10px; - -moz-border-radius: 4px; - border-radius: 4px; - background-color: #ffffff; - font-family: tahoma; - color: #222222 !important; - z-index: 999; - padding-left: 11px; - text-align: left; - width: 100%; +.searchFormInput.dropdown .select.ui-button { + width: 198px; } -.styledSelect:hover{ - color:#417DC1 !important; - background: #ffffff url(../media/tab_bg.gif) 50% 50% repeat-x; +.searchFormInput.dropdown ul { + min-width: 196px; } -.styledSelect > span { - width: 100% !important; +.searchFormInput>.styledSelect { + width: 220px; } -.styledSelectText { - display: inline-block; - overflow: hidden; - white-space: nowrap; +.dropdown .ui-menu-item>a>div { + display: inline-block; + margin-right: 9px; } -.styledSelectArrow { +.dropdown .ui-menu-item>a>div.checkOff { float: right; - margin-top: 1px; - padding-right: 11px; -} - -.styledSelectMenu { - display: none; position: absolute; - background-color: #ffffff; - border: #999999 solid 1px; - margin-top: -5px; - z-index: 99999; - max-height: 225px; - overflow: auto; - width: 227px; - line-height: 23px; -} - -.styledSelectMenu label { - background-image: none !important; - border: none !important; - /*-moz-border-radius: 0px; - border-radius: 0px;*/ - background-color: #ffffff !important; - width: 97%; - padding-left: 5px; - display: inline-block; -} - -.styledSelectMenu label.ui-state-active { - color:#417DC1; + right: 5px; } -.styledSelectMenu label > span { - width: 100% !important; - text-align: left; - line-height: 19px; +.dropdown .ui-menu-item>a>div.checkOn { + float: right; + position: absolute; + right: 5px; } -.styledSelectMenu label > span > img { - padding-right: 10px; - float: left; +.selectText { + vertical-align: top; } -.styledSelectMenu input { - left: 192px; - z-index: 99; - margin-top: 6px; +.advancedSearchButtons>div { + display: inline-block; } -.styledSelectMenu label:hover { - background-color:#EDF4FA !important; +.basicSearchButtons { + margin-left: -32px; } -#basemapDropdown { +.basicSearchButtons>div { display: inline-block; - vertical-align: top; } -#basemapSelect { - height: 24px; - -moz-border-radius: 4px 4px 0px 0px; - border-radius: 4px 4px 0px 0px; - background-color: #ffffff; - z-index: 2500; - border-bottom: none; -} -#basemapSelect:hover{ - color:#417DC1; -} - -#basemapSelect > span > span > img { - padding-left: 2px; - margin-bottom: -1px; +/* Container */ +#container { + background-color: #fff; + /*border-right: #CCCCCC solid 1px; + border-left: #CCCCCC solid 1px; */ + /*min-height:512px;*/ + /*height: 100%;*/ + overflow: hidden; } -#basemapMenu { +/* left column panel */ +#left_col { + height: 100%; + float: left; + cursor: default; display: none; - position: absolute; - background-color: #ffffff; - border: #999999 solid 1px; - z-index: 2499; - right: 0px; - margin-right: 1px; - top: 29px; - width: 100px; + z-index: 1010; } -#basemapMenu label { - background-image: none; - display: block; - border: none; - -moz-border-radius: 0px; - border-radius: 0px; - margin: 0px; - padding: 2px 5px; - background-color: #ffffff; +#left_tabs { + color: #666666; + font-size: 10px; + height: 100%; } -#basemapMenu label.ui-state-active { - color:#417DC1; +#tabs { + border-right: #999 solid 1px; + z-index: 1001; + min-height: 100%; } -#basemapMenu label > span { - width: 100%; - text-align: left; +#tabs>.ui-resizable-e { + background: none repeat scroll 0 0 red; } -#basemapMenu label:hover { - background-color:#EDF4FA; +th >.ui-resizable-e { + cursor: col-resize; + float: right; + height: 14px; + margin: -14px -9px 0 0; + position: static; + width: 7px; +} + +#left_col>.ui-resizable-se { + cursor: col-resize; + height: 100% !important; + right: 0; + width: 7px !important; + z-index: 2147483647 !important +} + +.tableHeader { + background: linear-gradient(#EAEAEA, #D3D3D3) repeat scroll 0 0 + transparent; + background: #EAEAEA; +background: -webkit-gradient(linear, left top, left bottom, from(#EAEAEA), to(#D3D3D3)); +background: -webkit-linear-gradient(#EAEAEA, #D3D3D3); +background: -moz-linear-gradient(top, #EAEAEA, #D3D3D3); +background: -ms-linear-gradient(#EAEAEA, #D3D3D3); +background: -o-linear-gradient(#EAEAEA, #D3D3D3); +background: linear-gradient(#EAEAEA, #D3D3D3); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EAEAEA', endColorstr='#D3D3D3'); +zoom: 1; + border-bottom: 1px solid #999999; + padding: 2px; } -#sortDropdown { +.tableHeader>div { display: inline-block; } -#sortDropdownMenu { - width: 125px; - overflow: hidden; - margin-top: -3px; -} - -.subHeaderDropdownSelect { - font-size: 11px; - height: 18px; - line-height: 9px; - margin: 0; - top: 0px; -} - -#columnDropdown { - float: right; - margin-top: 1px; - padding-right: 5px; +.tableHeader .button { + margin-right: 5px; } -#columnDropdownMenu { - width: 125px; - overflow: hidden; - margin-top: -3px; +.previewPane { + border-bottom: 1px solid #CCCCCC !important; } -#columnDropdownMenu input { - left: 100px; +.arrow_buttons { + float: right; + margin-top: 3px; + position: relative; + z-index: 1002; } -#dataTypeDropdownMenu { - overflow: hidden; +.shoppingCartIcon { + background: url("../media/ogp-sprite.png") no-repeat scroll -127px -61px + transparent; + width: 31px; + height: 22px; + display: inline-block; + float: left; } -#sourceDropdownMenu { - overflow: hidden; +.arrow_left { + background: url("../media/ogp-sprite.png") no-repeat scroll 0 -58px + transparent; + width: 30px; + height: 26px; + display: inline-block; + margin-top: 1px; + vertical-align: top; + border: none; } -/* Container */ -#container { - background-color: #fff; - border-right: #333 solid 1px; - border-left: #333 solid 1px; - border-bottom: #333 solid 1px; - min-height:680px; - height: 100%; +.arrow_separator { + background: url("../media/ogp-sprite.png") no-repeat scroll -29px -58px + transparent; + width: 10px; + height: 26px; + display: inline-block; } -/* left column panel */ -#left_col { - width: 450px; - border-right: #999 solid 1px; - float:left; - cursor: default; +.arrow_right { + background: url("../media/ogp-sprite.png") no-repeat scroll -39px -58px + transparent; + width: 27px; + height: 26px; + display: inline-block; + margin-top: 1px; + vertical-align: top; + border: none; } -#left_tabs { - color:#666666; - font-size:10px; - /*min-height: 680px !important;*/ - height: 100%; -} - -#tabs { - background: none !important; - background-color: transparent !important; - height: 100%; +.tabImage { + height: 15px; + /*border: none;*/ } -#tabs > ul { - padding-left: 10px; - position: absolute; - top: -20px; +.tabText { + height: 22px; + padding-top: 2px; } -#tabs > ul > li > a { - text-decoration: none; +#searchTabText { + width: 119px; } -.sub_header { - height: 25px; - line-height: 25px; - background: #cccccc url(../media/bg_grayfade.png) repeat-x; - border-top:1px solid #CCC; - font-size: 12px; - clear: both; +#searchTabText>div { + margin-top: 2px; } -.sub_header button.styledSelect { - font-size: 11px; - max-width: 88px; +#cart { + padding-bottom: 50px; } -.sub_header .arrow_buttons { - display: inline; - position: absolute; - right: 5px; - margin-top: 4px; - } - -.tabImage { - height: 15px; - /*border: none;*/ +#cartTabText { + width: 107px; } -.tabText { - font-size: 12px; - line-height: 12px; - font-family: tahoma, sans-serif; - height: 15px; - width: 86px; - display: block; - text-align:center; +#cartTabTextInner { + margin-right: 24px; + margin-top: 1px; } -.tabText > img { +.tabText>img { margin-bottom: -3px; position: relative; } #basicSearchDiv { - min-height: 680px; + /*min-height: 680px;*/ height: 100%; } #roll_right { - float:left; - min-height:680px; - width:17px; + min-height: 512px; + width: 25px; border-right: 1px solid #999999; - background: #cccccc url(../media/bg_grayfade_vert.png) repeat-y; - display: none; - padding: 0px; - margin-left: 0px; - height: 100%; -} - -#roll_right > img { - margin-left: 1px; - margin-top: 4px; + background-color: #eeeeee; + vertical-align: top; + position: absolute; + padding: 0px; + height: 100%; + z-index: 1010; } .sub_headerButtons { @@ -492,23 +456,38 @@ span.infoLinks:hover { display: none; } -#resultsSubHeader > div { - display: none; -} - .sub_headerTitle { margin-left: 20px; color: #003366; - font-family: Trebuchet MS; - font-size: 13px; - font-weight: normal; - line-height: 25px; + font-family: Trebuchet MS; + font-size: 13px; + font-weight: normal; + line-height: 25px; } /* search area */ +form input[type=search] { + border: 1px solid #999999; + line-height: 15px; + padding: 2px; + -moz-box-shadow: 0 2px 3px 0 #878888 inset; + -webkit-box-shadow: 0 2px 3px 0 #878888 inset; + box-shadow: 0 2px 3px 0 #878888 inset; + -webkit-appearance: textfield; +} + +form input[type=search]:focus { + border: 1px solid #417DC1; +} + form input[type=text] { - border: 1px solid #CCCCCC; + border: 1px solid #999999; + line-height: 15px; + padding: 2px; + -moz-box-shadow: 0 2px 3px 0 #878888 inset; + -webkit-box-shadow: 0 2px 3px 0 #878888 inset; + box-shadow: 0 2px 3px 0 #878888 inset; } form input[type=text]:focus { @@ -532,105 +511,168 @@ textarea:focus { } .searchBox { - padding-top: 20px; - padding-bottom: 20px; - padding-left: 35px; - font-family: arial,sans-serif; + background: none repeat scroll 0 0 white; + border-bottom: 1px solid #CCCCCC; + font-family: arial, sans-serif; font-size: 12px; - width: 345px; + height: 30px; + padding-bottom: 23px; + padding-top: 2px; + position: absolute; + top: 65px; + width: 100%; + z-index: 1500; } -#basicSearchBox { - display: block; +.scrollFiller { + position: absolute; + background-color: white; + width: 14px; + height: 49px; + z-index: 9999999; + border-left: 1px solid lightgray; + right: 0; } -#basicSearchTextField { - height: 15px; - padding: 2px; - width: 264px; +.previewPane .colPreview, .previewPane .previewTools { + border-right: 1px solid #cccccc !important; } -#basicSearchSubmit { - float: right; - font-size: 11px; - line-height: 19px; +#leftColSpacer { + background-color: #FFFFFF; + position: relative; + z-index: 1490; + height: 0px; } -#basicSearchMapFilterContainer { - margin-top: 5px; +.advancedSearchButtons { + margin-left: 80px; + margin-top: 25px; +} + +.basicSearch { display: inline-block; - visibility: hidden; + line-height: 22px; + padding-right: 6px; + width: 306px; +} + +.labelText { + padding-right: 5px; } -#advancedSearchBox { +.basicSearch input[type="search"] { + width: 220px; + -webkit-appearance: textfield; +} + +.advancedSearch { display: none; - width: 350px; } -.advancedSearchButtons{ - text-align: right; - margin-right: 5px; +.whereBox.basicSearch > label { + width: 55px; +} + +.basicSearch.whatBox.searchFormRow > label { + width: 51px; +} + +.basicSearch.whatBox.searchFormRow { + margin-left: -46px; +} + +.basicSearch.basicSearchButtons.searchFormRow { + margin-left: -105px; } -#advancedSearchClear { - margin:2px 4px; - /*border:none;*/ +#basicSearchBox { + display: block; } -#advancedSearchSubmit { - margin:2px 0px; - /*border:none;*/ +#basicSearchMapFilterContainer { + display: none; + margin-top: 5px; + display: inline-block; + visibility: hidden; } .searchFormRow { - /*height: 27px;*/ line-height: 27px; } -.searchFormRowTwo { - margin-top: -4px; -} +.searchFormRow > label { + display: inline-block; + width: 76px; + font-family: arial; + font-size: 14px; +} -.searchFormInput { - width: 230px; +.searchFormRow.advancedSearch>label { + width: 77px; } -#moreSearchOptions { - margin-top: 5px; - /*margin-left: 55px;*/ - float: right; +.searchFormRow.advancedSearch>input[type="search"] { + width: 192px; + -webkit-appearance: textfield; } -#lessSearchOptions { - float: right; - /*margin-left: 78px;*/ +.searchFormRow .styledSelectText { + min-width: 190px; +} + +#searchForm { + display: inline-block; +} + +.searchCol { + position: absolute; + width: 302px; + margin-right: 42px; +} + +#searchCol1 { + left: 50px; +} + +#searchCol2 { + left: 400px; +} + +#searchCol3 { + left: 750px; } .searchToggle { - color: blue; + background: none; + border: none; text-decoration: underline; white-space: nowrap; + font-size: 11px; + display: inline-block; } .searchToggle span:hover { color: yellow; - } +} -.searchFormLabel { - display: inline-block; - margin-right: 15px; - text-align: right; - width: 95px; +.whereBox { + color: #0755AC; + font-weight: bold; +} + +.whatBox { + color: #0755AC; + font-weight: bold; } .formCheckbox { - margin-left: -5px; + padding-left: 76px; display: inline-block; width: 228px; } - -/* results & cart table */ +/* results & cart table */ #searchResultsMessage { display: none; padding: 0 50px; @@ -642,7 +684,7 @@ textarea:focus { bottom: 0px; text-align: center; width: 100%; - padding-bottom: 5px; + padding-bottom: 5px; font-size: 10px; } @@ -651,28 +693,42 @@ textarea:focus { } #searchResultsNavigation a:hover { - color:#417dc1; + color: #417dc1; } #resultsTable { display: none; } +#cartTable { + width: 100%; +} + +#cartHeader { + padding-right: 40px; + text-align: right; +} + +#removeFromCartButton { + float: left; + margin-left: 20px; +} + .table_header { - font-size:11px; + font-size: 11px; } -.ui-effects-transfer { +.ui-effects-transfer { /*border: 2px dotted gray;*/ background-color: #edf4fa; opacity: .5; - filter:Alpha(Opacity=50); + filter: Alpha(Opacity = 50); } #savedLayersOptions { - padding-top:15px; + padding-top: 15px; padding-bottom: 10px; - padding-left:20px; + padding-left: 20px; padding-right: 20px; } @@ -682,12 +738,12 @@ textarea:focus { #pagination { width: 400px; - margin-left:auto; - margin-right:auto; + margin-left: auto; + margin-right: auto; border-top: 1px #ccc solid; margin-top: 5px; text-align: center; - font-size:11px; + font-size: 11px; padding-top: 3px; } @@ -696,54 +752,55 @@ textarea:focus { } .welcomeText { - padding-top:20px; - padding-bottom:20px; - padding-left:30px; - padding-right:30px; - font-size: 12px; + padding-top: 20px; + padding-bottom: 20px; + padding-left: 30px; + padding-right: 30px; } -/* footer */ +/* footer */ #footer { - /*text-align: center; - vertical-align:middle;*/ + z-index: 1050; height: 30px; - background: #003366; - border-right: #333 solid 1px; - border-left: #333 solid 1px; - border-bottom: #333 solid 1px; + background: #FFF; + border: #CCCCCC solid 1px; font-size: 13px; -} - + position: fixed; + bottom: 0; + width: 100%; +} + #footerLogos { - float: right; - margin-right: 80px; - margin-top: 2px; + float: left; + margin-left: 20px; + height: 30px; + overflow: hidden; } -#footerLogos > div { +#footerLogos>div { + cursor: pointer; display: inline-block; - height: 25px; + line-height: 30px; padding-right: 10px; - cursor: pointer; + vertical-align: text-bottom; } - + #footerInfo { + float: right; line-height: 30px; - margin-left: 8px; + margin-right: 20px; } -#footer a{ +#footer a { /*font-size: 13px;*/ - color:#FFFFFF; - text-decoration:none; + color: #FFFFFF; + text-decoration: none; } -#footer a:hover{ - color:#FFFF66; +#footer a:hover { + color: #FFFF66; } - /* dialogs */ #organizeDialog th { text-align: left; @@ -753,17 +810,17 @@ textarea:focus { margin-right: 5px; } -td.colorCellParent{ +td.colorCellParent { width: 18px; height: 18px; padding: 0px; } - + div.colorCell { cursor: pointer; - width:14px; - height:14px; - border:1px solid #CCCCCC; + width: 14px; + height: 14px; + border: 1px solid #CCCCCC; } div.colorCell:hover { @@ -773,9 +830,9 @@ div.colorCell:hover { } .colorCellSelected { - border: 1px solid black !important; - width:16px !important; - height:16px !important; + border: 1px solid black !important; + width: 16px !important; + height: 16px !important; } .linkText { @@ -791,28 +848,79 @@ div.colorCell:hover { background: transparent; opacity: .35; height: 15px; - left: 0; - margin-right: -21px; - width: 100%; + left: 0; + margin-right: -21px; + width: 100%; } #toMetadataTop:hover { - background: url("../media/arrow_up_white.png") no-repeat scroll 5px 50% black; + background: url("../media/arrow_up_white.png") no-repeat scroll 5px 50% + black; } + #metadataFooter { color: white; } + #metadataDialog { padding-top: 0; padding-right: 0; padding-bottom: 15px; } + #metadataContent { overflow: auto; height: 100%; /*word-wrap: break-word;*/ } +.metadataIframe { + height: 100%; + width: 100%; + border: none; +} + +td div.button { + margin: auto; +} + +.viewLibraryRecordControl { + background: url("../media/ogp-sprite.png") no-repeat scroll -131px -35px + transparent; + height: 17px; + width: 17px; +} + +.viewMetadataControl { + background: url("../media/ogp-sprite.png") no-repeat scroll -131px -35px + transparent; + height: 17px; + width: 17px; +} + +td div.typeIcon { + margin: auto; +} + +td div.repositoryIcon { + margin: auto; +} + +.saveControl { + height: 17px; + width: 17px; +} + +.notInCart { + background: url("../media/ogp-sprite.png") no-repeat scroll -102px -13px + transparent; +} + +.inCart { + background: url("../media/ogp-sprite.png") no-repeat scroll -130px -13px + transparent; +} + .dialog { text-align: left; cursor: default; @@ -827,19 +935,19 @@ div.colorCell:hover { } span.columnNote { - display:block; - float:right; - margin-top:4px; + display: block; + float: right; + margin-top: 4px; font-style: italic; } -.downloadSettingsDialog { +.downloadDialog { margin-left: 17px; line-height: 20px; margin-top: 5px; } -.downloadSettingsDialog div { +.downloadDialog div { padding-top: 5px; padding-bottom: 5px; } @@ -854,16 +962,16 @@ span.columnNote { border: 1px solid #417DC1; } -.downloadSettingsDialog select { - width: 100px; +.downloadDialog select { + width: 100px; position: absolute; left: 126px; } -.downloadSettingsDialog label.downloadSelect { +.downloadDialog label.downloadSelect { display: inline-block; - text-align: right; - width: 90px; + text-align: right; + width: 90px; } #downloadDialog label { @@ -881,10 +989,9 @@ span.columnNote { .ignoreWarning { bottom: 0; - display: block; - left: 0; - padding: 14px; - position: absolute; + display: block; + left: 0; + padding: 14px; } .genericModalDialog { @@ -899,6 +1006,10 @@ span.columnNote { margin-left: 0px; } +.owsServicesLinkContainer > label, .owsServicesLinkContainer > select, .owsServicesLinkContainer > div { + margin: 4px; +} + table.downloadStatus { padding: 10px; width: 100%; @@ -924,19 +1035,18 @@ td.attributeName { } td.attributeName:hover { - color:#417dc1; + color: #417dc1; } .getFeatureTitle { - color: #003366; - font-family: Trebuchet MS; - font-weight: lighter; - font-size: 13px; - padding: 10px; + font-size: 14px; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + text-align: left; } .columnSort { - display: inline-block; width: 19px; height: 19px; } @@ -944,9 +1054,11 @@ td.attributeName:hover { .columnSort_unsorted { background: url("../media/sort_both.png") no-repeat right transparent; } + .columnSort_sortedAsc { background: url("../media/sort_asc.png") no-repeat right transparent; } + .columnSort_sortedDesc { background: url("../media/sort_desc.png") no-repeat right transparent; } @@ -956,25 +1068,45 @@ td.attributeName:hover { } #optionDetails { - height: 17px; - padding: 5px; + display: none; + background: none repeat scroll 0 0 #4B8ACF; + height: 34px; + left: 0; + position: absolute; + text-align: left; + top: 0; + width: 100%; + overflow: visible; + color: white; + font-size: 14px; +} + +#optionDetails > div { + padding: 9px 5px 9px 20px; } #requestTickerContainer { - -moz-border-radius: 4px 0px 0px 0px; - border-radius: 4px 0px 0px 0px; border-left: 1px solid #AAAAAA; + border-radius: 4px 0 0 4px; border-top: 1px solid #AAAAAA; - display: none; + bottom: 71px; color: #333333; - position: fixed; - bottom: 0; - right: 1px; + display: none; height: 31px; + position: fixed; + right: 0; width: 170px; background-color: #DDDDDD; - background: -moz-linear-gradient(left, #BBBBBB, #DDDDDD); + background: -webkit-gradient(linear, left, right, from(#BBBBBB), to(#DDDDDD)); + background: -webkit-linear-gradient(#BBBBBB, #DDDDDD); + background: -moz-linear-gradient(left, #BBBBBB, #DDDDDD); + background: -ms-linear-gradient(#BBBBBB, #DDDDDD); + background: -o-linear-gradient(#BBBBBB, #DDDDDD); + background: linear-gradient(#BBBBBB, #DDDDDD); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#BBBBBB', endColorstr='#DDDDDD'); + zoom: 1; + z-index: 2000; } @@ -988,10 +1120,10 @@ td.attributeName:hover { } #processingIndicator { + height: 28px; + margin: 2px; position: absolute; - margin: 4px; - height: 25px; - width: 27px; + width: 28px; } iframe.download { @@ -1003,42 +1135,426 @@ iframe.download { } /* geocommons dialog */ -#geoCommonsExportForm > select { - left: 97px; - margin-top: 3px; - position: absolute; +#geoCommonsExportForm>select { + left: 97px; + margin-top: 3px; + position: absolute; } -#geoCommonsExportDialog > form { - line-height: 30px; - padding: 10px; +#geoCommonsExportDialog>form { + line-height: 30px; + padding: 10px; } -#geoCommonsExportForm > input[type="text"] { - left: 90px; - margin-top: 4px; - position: absolute; - width: 252px; - padding: 2px; +#geoCommonsExportForm>input[type="text"] { + left: 90px; + margin-top: 4px; + position: absolute; + width: 252px; + padding: 2px; } -#geoCommonsExportForm > fieldset { +#geoCommonsExportForm>fieldset { background-color: #F2F2F2; - border: 1px solid #CCCCCC; - padding: 15px; + border: 1px solid #CCCCCC; + padding: 15px; } -#geoCommonsExportForm > fieldset > input { +#geoCommonsExportForm>fieldset>input { left: 108px; position: absolute; margin-top: 4px; } .linkButton { - color: blue; - text-decoration: underline; + color: blue; + text-decoration: underline; +} + +#geoCommonsExportForm>fieldset .linkButton { + float: right; +} +/******** +Preview controls +*********/ +.checkOff { + background: url("../media/ogp-sprite.png") no-repeat scroll -61px -89px + transparent; + width: 25px; + height: 17px; +} + +.checkOn { + background: url("../media/ogp-sprite.png") no-repeat scroll -84px -89px + transparent; + width: 25px; + height: 17px; } -#geoCommonsExportForm > fieldset .linkButton { +.loginButton { + background: url("../media/ogp-sprite.png") no-repeat scroll -67px -12px + transparent; + width: 25px; + height: 17px; +} + +.previewLink { + background: url("../media/ogp-sprite.png") no-repeat scroll -110px -89px rgba(0, 0, 0, 0); + height: 17px; + width: 25px; +} + +/******* +DataTypes +********/ +.polygonIcon { + background: url("../media/ogp-sprite.png") no-repeat scroll -101px -36px + transparent; + width: 17px; + height: 17px; +} + +.pointIcon { + background: url("../media/ogp-sprite.png") no-repeat scroll -80px -36px + transparent; + width: 17px; + height: 17px; +} + +.lineIcon { + background: url("../media/ogp-sprite.png") no-repeat scroll -10px -36px + transparent; + width: 17px; + height: 17px; +} + +.rasterIcon { + background: url("../media/ogp-sprite.png") no-repeat scroll -35px -36px + transparent; + width: 17px; + height: 17px; +} + +.mapIcon { + background: url("../media/ogp-sprite.png") no-repeat scroll -58px -36px + transparent; + width: 17px; + height: 17px; +} + +/************* +Repositories +*************/ +.tuftsIcon { + background: url("../media/ogp-institutions.png") no-repeat scroll -33px + -10px transparent; +} + +.mitIcon { + background: url("../media/ogp-institutions.png") no-repeat scroll -129px + -10px transparent; +} + +.harvardIcon { + background: url("../media/ogp-institutions.png") no-repeat scroll -79px + -10px transparent; +} + +.berkeleyIcon { + background: url("../media/ogp-institutions.png") no-repeat scroll -35px + -35px transparent; +} + +.marylandIcon { + background: url("../media/ogp-institutions.png") no-repeat scroll -12px + -35px transparent; +} + +.unIcon { + background: url("../media/ogp-institutions.png") no-repeat scroll -10px + -10px transparent; +} + +.massgisIcon { + background: url("../media/ogp-institutions.png") no-repeat scroll -102px + -10px transparent; +} + +.princetonIcon { + background: url("../media/ogp-institutions.png") no-repeat scroll -56px + -10px transparent; +} + + +/************** +Backbone table view +***************/ + +.tableWrapper { + font-family: Verdana,Geneva,sans-serif; +} + +.tableHeaders { + border-bottom: 1px solid #CCCCCC; + width: 100%; +} + +/*.rowContainer { + height: 100%; + overflow: auto; +}*/ + +.tableRow { + width: 100%; + padding-top: 1px; + padding-bottom: 1px; +} + +.tableCell { + display: inline-block; +} + +.tableHeaders > .tableCell { + border-color: #CCCCCC; + border-style: none none none solid; + border-width: 0 0 0 1px; + color: #000000; + font-size: 12px; + font-weight: normal; + margin: 0; + padding: 3px; + position: relative; + text-align: center; + height: 18px; + vertical-align: top; + overflow: hidden; +} + +.rowContainer .tableCell { + height: 17px; + color: #4E4E4E; + overflow: hidden; + padding: 2px 4px 2px 3px; +} + +.tableCell > div { + margin: auto; +} + +.tableCell > .cellWrapper { + width: 100%; + margin-left: 2px; + margin-right: 2px; + overflow: hidden; + font-size: 11px; + height: 17px; + line-height: 17px; +} + + +.previewControls > div { + line-height: 15px; +} + +.rowContainer .colTitle { + cursor: pointer; +} + +.tableRow.rowHover { + background-color: #ebf6ff; + border-bottom: #d8e8fa 1px solid !important; + border-top: #d8e8fa 1px solid !important; + padding-top: 0; + padding-bottom: 0; +} + +.emptyTable { + padding: 5px; + text-align: center; +} + +.tableRow.cartAction { + opacity: .6; +} + +.tableRow.cartAction.cartSelected { + opacity: 1; + background-color: #CDE4FA; + border-color: #CDE4FA; +} + +/************* +Info Bubble +*************/ +.closeBubble { + background: url("../media/ogp-sprite.png") no-repeat scroll -66px -114px + transparent; + width: 20px; + height: 20px; float: right; } + +button.closeBubble { + border: none; +} + +.infoBubbleText { + padding: 10px 20px; + left: 2px; + top: 2px; + color: white; + font: 24px "Univers", Sans-Serif; + z-index: 2147483647; + text-align: left; +} + +.infoBubbleText h1 { + color: white; + font: 55px "Univers", Sans-Serif; + font-style: oblique; +} + +.infoBubbleText label { + color: white; + font: 12px "Univers", Sans-Serif; +} + +.triangle-isosceles.top-arrow:after { + border-color: #6B91D5 transparent; + border-width: 0 15px 155px; + bottom: auto; + left: 24px; + right: auto; + top: -155px; + transform: scale(1.01); +} + +.triangle-isosceles.left-arrow:after { + border-color: #648ACE transparent; + border-width: 0 0 27px 56px; + bottom: auto; + left: -51px; + top: 125px; + transform: rotate(14deg); +} + +.triangle-isosceles:after { + border-color: #6B91D5 transparent; + border-style: solid; + border-width: 15px 15px 0; + bottom: -15px; + content: ""; + display: block; + left: 50px; + position: absolute; + width: 0; +} + +.triangle-isosceles.top-arrow { + + background: #6B91D5; +background: -webkit-gradient(linear, top, bottom, from(#6B91D5), to(#577CBE)); +background: -webkit-linear-gradient(#6B91D5, #577CBE); +background: -moz-linear-gradient(top, #6B91D5, #577CBE); +background: -ms-linear-gradient(#6B91D5, #577CBE); +background: -o-linear-gradient(#6B91D5, #577CBE); +background: linear-gradient(#6B91D5, #577CBE); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6B91D5', endColorstr='#577CBE'); +zoom: 1; +} + +.triangle-isosceles.left-arrow { + background: #6B91D5; +background: -webkit-gradient(linear, top, bottom, from(#6B91D5), to(#577CBE)); +background: -webkit-linear-gradient(#6B91D5, #577CBE); +background: -moz-linear-gradient(top, #6B91D5, #577CBE); +background: -ms-linear-gradient(#6B91D5, #577CBE); +background: -o-linear-gradient(#6B91D5, #577CBE); +background: linear-gradient(#6B91D5, #577CBE); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6B91D5', endColorstr='#577CBE'); +zoom: 1; +} + +.triangle-isosceles { + background: #6B91D5; +background: -webkit-gradient(linear, top, bottom, from(#6B91D5), to(#577CBE)); +background: -webkit-linear-gradient(#6B91D5, #577CBE); +background: -moz-linear-gradient(top, #6B91D5, #577CBE); +background: -ms-linear-gradient(#6B91D5, #577CBE); +background: -o-linear-gradient(#6B91D5, #577CBE); +background: linear-gradient(#6B91D5, #577CBE); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6B91D5', endColorstr='#577CBE'); +zoom: 1; + border-radius: 15px; + position: absolute; +} + +.infoBubbleBackground { + padding: 10px 20px; + color: white; + box-shadow: 0 0 7px black; + display: none; + z-index: 9999; +} + +.triangle-isoscelesBackground.top-arrowBackground:after { + border-color: #61729E transparent; + border-width: 0 17px 154px; + bottom: auto; + left: 24px; + right: auto; + top: -154px; + transform: scale(1.01); +} + +.triangle-isoscelesBackground.left-arrowBackground:after { + border-width: 0 0 31px 59px; + bottom: auto; + left: -55px; + top: 124px; + transform: rotate(14deg); +} + +.triangle-isoscelesBackground:after { + border-color: #61729E transparent; + border-style: solid; + border-width: 15px 15px 0; + bottom: -15px; + content: ""; + display: block; + left: 50px; + position: absolute; + width: 0; +} + +.triangle-isoscelesBackground.top-arrowBackground { + background-color: #61729E; +} + +.triangle-isoscelesBackground.left-arrowBackground { + background-color: #61729E; +} + +.triangle-isoscelesBackground { + background-color: #61729E; + border-radius: 15px; + position: absolute; +} + +.detailsBottom:after { + content: ""; + position: absolute; + left: 47%; + width: 10px; + height: 10px; + /* box-shadow: 6px 5px 9px -9px black;*/ + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + tranform: rotate(45deg); + background-color: #4B8ACF; + /*border-bottom: 8px solid #4B8ACF;*/ + top: -11px; + z-index: 999; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/html_table.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/html_table.html index 11ab14a..9572521 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/html_table.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/html_table.html @@ -1,487 +1,496 @@ - - - - - FixedHeader example - - - - + + - - -
      -
      - FixedHeader example - HTML table -
      - -

      Preamble

      -

      FixedHeader will work standalone as well (i.e. without DataTables), as can be seen in this example. The standard settings can be applied to FixedHeader to enhance the table.

      - -

      Live example

      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +
      +	
      +
      FixedHeader example - HTML table
      + +

      Preamble

      +

      FixedHeader will work standalone as well (i.e. without + DataTables), as can be seen in this example. The standard settings + can be applied to FixedHeader to enhance the table.

      + +

      Live example

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	new FixedHeader( document.getElementById('example') );
       } );
      -

      Examples

      - - -

      Empty paragraphs to force scrolling!...

      -

       

      - - - +

      Examples

      + + +

      Empty paragraphs to force scrolling!...

      +

       

      + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/index.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/index.html index ad64d75..5fd9721 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/index.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/index.html @@ -1,491 +1,507 @@ - - - - - FixedHeader example - - - - - + + + - - -
      -
      - FixedHeader example -
      - -

      Preamble

      -

      When displaying large amounts of data in a table, it can often be useful for the end user to have the column titles (the "thead" element as a whole in fact) always visible. This is particularly true if using DataTables with pagination disabled, or the display length is set to a high value.

      -

      The "FixedHeader" add-on for DataTables will ensure that your column titles will scroll with the page, showing at the top of the table at all times. Try the demo shown below - you might want to try resizing the window for full effect! Note also that the column titles remain clickable to perform sorting on the table.

      - -

      Live example

      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +
      +	
      +
      FixedHeader example
      + +

      Preamble

      +

      When displaying large amounts of data in a table, it can often + be useful for the end user to have the column titles (the "thead" + element as a whole in fact) always visible. This is particularly true + if using DataTables with pagination disabled, or the display length + is set to a high value.

      +

      The "FixedHeader" add-on for DataTables will ensure that your + column titles will scroll with the page, showing at the top of the + table at all times. Try the demo shown below - you might want to try + resizing the window for full effect! Note also that the column titles + remain clickable to perform sorting on the table.

      + +

      Live example

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	var oTable = $('#example').dataTable();
       	new FixedHeader( oTable );
       } );
      -

      Examples

      - - -

      Empty paragraphs to force scrolling!...

      -

       

      - - - +

      Examples

      + + +

      Empty paragraphs to force scrolling!...

      +

       

      + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/top_bottom_left_right.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/top_bottom_left_right.html index c572958..80176a9 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/top_bottom_left_right.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/top_bottom_left_right.html @@ -1,45 +1,55 @@ - - - - - FixedHeader example - - - - - + + + - - -
      -

      FixedHeader example - top, bottom, left and right fixed

      -

      This example shows how FixedHeader can be made to look more like a spreadsheet application. Click 'View source' in your browser to see the set up.

      -
      - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      - + + +
      +

      FixedHeader example - top, + bottom, left and right fixed

      +

      This example shows how FixedHeader can be made to look more + like a spreadsheet application. Click 'View source' in your browser + to see the set up.

      +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/top_left.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/top_left.html index 5551853..7ffaa96 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/top_left.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/top_left.html @@ -1,491 +1,504 @@ - - - - - FixedHeader example - - - - - + + + - - -
      -
      - FixedHeader example - header and left columns fixed -
      - -

      Preamble

      -

      This example shows how tivial it is to fix the left hand column of the table as well as the header. In fact, the header, footer, left and right columns can all be fixed in exactly the same manner. The header is the only one to be fixed by default.

      -

      Note that the window has of course been made artificially wide to show the fixed left column in action.

      - -

      Live example

      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +
      +	
      +
      FixedHeader example - header and + left columns fixed
      + +

      Preamble

      +

      This example shows how tivial it is to fix the left hand column + of the table as well as the header. In fact, the header, footer, left + and right columns can all be fixed in exactly the same manner. The + header is the only one to be fixed by default.

      +

      Note that the window has of course been made artificially wide + to show the fixed left column in action.

      + +

      Live example

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	var oTable = $('#example').dataTable();
       	new FixedHeader( oTable, { "left": true } );
       } );
      -

      Examples

      - - -

      Empty paragraphs to force scrolling!...

      -

       

      - - - +

      Examples

      + + +

      Empty paragraphs to force scrolling!...

      +

       

      + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/two_tables.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/two_tables.html index 03caece..e9da069 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/two_tables.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/two_tables.html @@ -1,20 +1,28 @@ - - - - - FixedHeader example - - - - - + + + - - -
      -
      - FixedHeader example - two tables -
      - -

      Preamble

      -

      The following example shows two DataTables enhanced tables both with FixedHeader enabled on them. The footer is also fixed for both table.

      - -

      Live example

      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      + + +
      +
      FixedHeader example - two tables
      + +

      Preamble

      +

      The following example shows two DataTables enhanced tables both + with FixedHeader enabled on them. The footer is also fixed for both + table.

      -
      +

      Live example

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet
      Explorer 7
      Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +			
      +				
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +				
      +				
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +				
      +				
      +					
      +						
      +						
      +						
      +						
      +						
      +					
      +				
      +			
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet
      Explorer 7 +
      Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	var oTable = $('#example').dataTable();
       	new FixedHeader( oTable, { "bottom": true } );
       	
      @@ -901,24 +904,29 @@ 

      Initialisation code

      new FixedHeader( oTable2, { "bottom": true } ); } );
      -

      Examples

      - - -

      Empty paragraphs to force scrolling!...

      -

       

      - - - +

      Examples

      + + +

      Empty paragraphs to force scrolling!...

      +

       

      + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/zIndexes.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/zIndexes.html index c7986fb..43fdb73 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/zIndexes.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/FixedHeader/zIndexes.html @@ -1,497 +1,513 @@ - - - - - FixedHeader example - - - - - + + + - - -
      -
      - FixedHeader example - zIndex example -
      - -

      Preamble

      -

      When you have two or more columns fixed on a table, there might be occasions when you which to have one column floating on top of another. This example shows how you can do that with the initialisation parameters zTop, zBottom, zLeft and zRight. In this example the left column is set to float on top of the header. The difference is subtle, but can be effective.

      -

      The default zIndexes are:

      -
        -
      • zTop: 104
      • -
      • zBottom: 103
      • -
      • zLeft: 102
      • -
      • zRight: 101
      • -
      - -

      Live example

      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +
      +	
      +
      FixedHeader example - zIndex example +
      + +

      Preamble

      +

      + When you have two or more columns fixed on a table, there might be + occasions when you which to have one column floating on top of + another. This example shows how you can do that with the + initialisation parameters zTop, zBottom, zLeft and zRight. + In this example the left column is set to float on top of the header. + The difference is subtle, but can be effective. +

      +

      The default zIndexes are:

      +
        +
      • zTop: 104
      • +
      • zBottom: 103
      • +
      • zLeft: 102
      • +
      • zRight: 101
      • +
      + +

      Live example

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	var oTable = $('#example').dataTable();
       	new FixedHeader( oTable, { "left": true, "zLeft": 105 } );
       } );
      -

      Examples

      - - -

      Empty paragraphs to force scrolling!...

      -

       

      - - - +

      Examples

      + + +

      Empty paragraphs to force scrolling!...

      +

       

      + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/datatable.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/datatable.html index 87968b5..18d6d33 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/datatable.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/datatable.html @@ -1,18 +1,22 @@ - - - - - KeyTable / DataTables example - - - - - + + + - - -
      -
      - KeyTable with DataTables integration example -
      - -

      Preamble

      -

      KeyTable will work great with any plain HTML table, but it also integrates with DataTables plug-in for jQuery. This allows the navigation to take account of paging, sorting etc. This is shown in an example below.

      - -

      Live example

      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +
      +	
      +
      KeyTable with DataTables integration + example
      + +

      Preamble

      +

      + KeyTable will work great with any plain HTML table, but it also + integrates with DataTables + plug-in for jQuery. This allows the navigation to take account of + paging, sorting etc. This is shown in an example below. +

      + +

      Live example

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	var oTable = $('#example').dataTable();
       	
       	var keys = new KeyTable( {
      @@ -472,22 +477,23 @@ 

      Initialisation code

      "datatable": oTable } ); } );
      - - -

      Other examples

      - - - - + + +

      Other examples

      + + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/editing.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/editing.html index 72cc327..9fd3668 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/editing.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/editing.html @@ -1,18 +1,22 @@ - - - - - KeyTables editing example - - - - - + + + - - -
      -
      - KeyTable editing example -
      - -

      Preamble

      -

      Possibly one of the most obvious applications of KeyTable is using it to navigate around a table, allowing a user to edit data as they go. This is an example of how that might be done through integration with the excellent jEditable plug-in for jQuery.

      -

      To edit data in the table, simply navigate to where you want to edit using the arrow keys, hit return and they make your edit. Hit return again to complete and submit the edit (note this example doesn't actually send the data to the server!) and then continue navigating.

      - -

      Live example

      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +
      +	
      +
      KeyTable editing example
      + +

      Preamble

      +

      + Possibly one of the most obvious applications of KeyTable is using it + to navigate around a table, allowing a user to edit data as they go. + This is an example of how that might be done through integration with + the excellent jEditable + plug-in for jQuery. +

      +

      To edit data in the table, simply navigate to where you want to + edit using the arrow keys, hit return and they make your edit. Hit + return again to complete and submit the edit (note this example + doesn't actually send the data to the server!) and then continue + navigating.

      + +

      Live example

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	var keys = new KeyTable( {
       		"table": document.getElementById('example')
       	} );
      @@ -511,23 +524,24 @@ 

      Initialisation code

      setTimeout( function () { $(nCell).click(); }, 0 ); } ); } );
      - - -

      Other examples

      - - - - - + + +

      Other examples

      + + + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/form.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/form.html index bcae769..3108903 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/form.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/form.html @@ -1,132 +1,141 @@ - - - - - KeyTables example - - - - + + - - -
      -
      - KeyTable form integration example -
      - -

      Preamble

      -

      One of possible use of KeyTable is to use a table as a form element (for example a calendar date selector). For this you want to be table to tab into and out of the table, as you would do with any other form element on the page.

      -

      The example shown below as a small table as it's third input element, and you can tab between input fields. When the 'focus' reaches the end of the table, hitting tab will take you into the next field.

      - -

      Live example

      - - - - - - - - - - - - - - - - - - - - - - - -
      Input 1:
      Input 2:
      Input 3: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      -
      Input 4:
      Input 5:
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +
      +	
      +
      KeyTable form integration example
      + +

      Preamble

      +

      One of possible use of KeyTable is to use a table as a form + element (for example a calendar date selector). For this you want to + be table to tab into and out of the table, as you would do with any + other form element on the page.

      +

      The example shown below as a small table as it's third input + element, and you can tab between input fields. When the 'focus' + reaches the end of the table, hitting tab will take you into the next + field.

      + +

      Live example

      + + + + + + + + + + + + + + + + + + + + + + + +
      Input 1:
      Input 2:
      Input 3: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      +
      Input 4:
      Input 5:
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	var keys = new KeyTable( {
       		"form": true
       	} );
       } );
      - - -

      Other examples

      - - - + + +

      Other examples

      + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/index.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/index.html index 4f6f9eb..c12bb91 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/index.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/KeyTable/index.html @@ -1,17 +1,20 @@ - - - - - KeyTables example - - - - + + - - -
      -
      - KeyTable example -
      - -

      Preamble

      -

      KeyTable allows you to use keyboard navigation on an HTML table. The focused cell is shown through the CSS class ('focus') which in the case below is simply a blue border. Events such as 'focus', 'blur', 'esc' (the escape key) and 'return' (the return key) can be assigned event handling functions thought the API presented.

      -

      The example shown below has a few cells (selected at random, but near the top) with blur and focus events assigned to them. You can also see the navigation around the table using arrow keys.

      - -

      Live example

      -
      - Event information:
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0 (focus once)Win 95+4X
      TridentInternet Explorer 5.0Win 95+ (blur)5C
      Trident (focus)Internet Explorer 5.5Win 95+ (action/bold)5.5A
      TridentInternet Explorer 6 (focus)Win 98+6A
      TridentInternet Explorer 7Win XP SP2+ (blur)7A
      TridentAOL browser (AOL desktop)Win XP (action/italic)6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      Gecko (focus - row)Firefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      -
      -
      - - -

      Initialisation code

      -
      function fnMessage ( sMesg )
      +
      +
      +	
      +
      KeyTable example
      + +

      Preamble

      +

      KeyTable allows you to use keyboard navigation on an HTML + table. The focused cell is shown through the CSS class ('focus') + which in the case below is simply a blue border. Events such as + 'focus', 'blur', 'esc' (the escape key) and 'return' (the return key) + can be assigned event handling functions thought the API presented.

      +

      The example shown below has a few cells (selected at random, + but near the top) with blur and focus events assigned to them. You + can also see the navigation around the table using arrow keys.

      + +

      Live example

      +
      + Event information:
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0 (focus once)Win 95+4X
      TridentInternet Explorer 5.0Win 95+ (blur)5C
      Trident (focus)Internet Explorer 5.5Win 95+ (action/bold)5.5A
      TridentInternet Explorer 6 (focus)Win 98+6A
      TridentInternet Explorer 7Win XP SP2+ (blur)7A
      TridentAOL browser (AOL desktop)Win XP (action/italic)6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      Gecko (focus - row)Firefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      +
      +
      + + +

      Initialisation code

      +
      function fnMessage ( sMesg )
       {
       	var n = document.getElementById('info');
       	n.innerHTML += sMesg+"<br>";
      @@ -574,21 +582,22 @@ 

      Initialisation code

      } } ); } );
      - - -

      Other examples

      - - - + + +

      Other examples

      + + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/TableTools/index.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/TableTools/index.html index 80b6f1e..a133183 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/TableTools/index.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/TableTools/index.html @@ -1,20 +1,27 @@ - - - - - TableTools example - - - - - - + + + + - - -
      -
      - TableTools example -
      - -

      Preamble

      -

      TableTools in a features plug-in for DataTables which presents a tool bar for a table providing the end user with options for saving files Comma Separated Values (CSV) or Excel (XLS), copying data to system Clipboard, or printing the table.

      -

      Points to note

      -
        -
      • Please note that DataTables 1.5.x or greater is required for TableTools
      • -
      • Flash 10 is used for the file save / clipboard operations so the user will required that installed for their browser
      • -
      • Features and customisation options for TableTools is done through the TableToolsInit variable
      • -
      • You might need to set the sSwfPath variable for TableTools to find the required Flash file (TableToolsInit.sSwfPath="...")
      • -
      • TableTools will not work using file:// protocol (i.e. from your desktop) unless you specifically allow it in your Flash Player settings
      • -
      - - -

      Live example

      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+ (Entity: &)4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      Gecko (UTF-8: $¢€)Firefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      -
      -
      - - -

      Initialisation code

      -
      $(document).ready( function () {
      +
      +
      +	
      +
      TableTools example
      + +

      Preamble

      +

      TableTools in a features plug-in for DataTables which presents + a tool bar for a table providing the end user with options for saving + files Comma Separated Values (CSV) or Excel (XLS), copying data to + system Clipboard, or printing the table.

      +

      Points to note

      +
        +
      • Please note that DataTables 1.5.x or greater is required for + TableTools
      • +
      • Flash 10 is used for the file save / clipboard operations so + the user will required that installed for their browser
      • +
      • Features and customisation options for TableTools is done + through the TableToolsInit variable +
      • +
      • You might need to set the sSwfPath variable for TableTools + to find the required Flash file (TableToolsInit.sSwfPath="...")
      • +
      • TableTools will not work using file:// protocol (i.e. from + your desktop) unless you specifically allow it in your Flash + Player settings +
      • +
      + + +

      Live example

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+ (Entity: &)4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      Gecko (UTF-8: $¢€)Firefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      +
      +
      + + +

      Initialisation code

      +
      $(document).ready( function () {
       	/* You might need to set the sSwfPath! Something like:
       	 *   TableToolsInit.sSwfPath = "/media/swf/ZeroClipboard.swf";
       	 */
      @@ -470,14 +488,18 @@ 

      Initialisation code

      "sDom": 'T<"clear">lfrtip' } ); } );
      - - + + - +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/TableTools/media/css/TableTools.css b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/TableTools/media/css/TableTools.css index a5637d2..1bb80a1 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/TableTools/media/css/TableTools.css +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/extras/TableTools/media/css/TableTools.css @@ -1,4 +1,3 @@ - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TableTools styles */ @@ -72,13 +71,10 @@ background-color: #3f3f3f; color: white; padding: 10px 30px; - opacity: 0.9; - border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); @@ -94,4 +90,4 @@ .TableTools_PrintInfo p { font-size: 14px; line-height: 20px; -} +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_page.css b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_page.css index bee7b0d..f7bb8a5 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_page.css +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_page.css @@ -1,4 +1,3 @@ - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * General page setup */ @@ -10,14 +9,12 @@ background-color: #fff; } - #dt_example #container { width: 800px; margin: 30px auto; padding: 0; } - #dt_example #footer { margin: 50px auto 0 auto; padding: 0; diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_table.css b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_table.css index 20f7415..8595a8d 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_table.css +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_table.css @@ -29,7 +29,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables features */ - .dataTables_wrapper { position: relative; /*min-height: 302px; @@ -71,14 +70,15 @@ } .dataTables_paginate { - width: 44px; - * width: 50px; + width: 44px; * + width: 50px; float: right; text-align: right; } /* Pagination nested */ -.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { +.paginate_disabled_previous,.paginate_enabled_previous,.paginate_disabled_next,.paginate_enabled_next + { height: 19px; width: 19px; margin-left: 3px; @@ -101,8 +101,6 @@ background-image: url('../images/forward_enabled.jpg'); } - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables display */ @@ -110,7 +108,7 @@ table.display { margin: 0px; font-family: Arial, sans-serif; border-collapse: collapse; -/* width: 100%; + /* width: 100%; clear: both; */ /* Note Firefox 3.5 and before have a bug with border-collapse @@ -128,15 +126,15 @@ table.display { } table.display thead th { - border-collapse:collapse; + border-collapse: collapse; padding: 3px 18px 3px 10px; margin: 0px; border: 1px solid rgb(204, 204, 204); font-size: 11px; color: #333333; font-weight: normal; - cursor: pointer; - * cursor: hand; + cursor: pointer; * + cursor: hand; } /* table.display tfoot th { @@ -156,7 +154,7 @@ table.display td { color: #333333; height: .5em; border: 0px; - white-space: nowrap; + white-space: nowrap; } table.display td.center { @@ -165,13 +163,11 @@ table.display td.center { .searchResultsCell { overflow: hidden; - } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables sorting */ - .sorting_asc { background: url('../images/sort_asc.png') no-repeat center right; } @@ -185,17 +181,15 @@ table.display td.center { } .sorting_asc_disabled { - background: url('../images/sort_asc_disabled.png') no-repeat center right; + background: url('../images/sort_asc_disabled.png') no-repeat center + right; } .sorting_desc_disabled { - background: url('../images/sort_desc_disabled.png') no-repeat center right; + background: url('../images/sort_desc_disabled.png') no-repeat center + right; } - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables row classes */ @@ -249,9 +243,6 @@ tr.even { } */ - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Misc */ @@ -263,7 +254,7 @@ tr.even { *margin-top: -1px; } -.top, .bottom { +.top,.bottom { padding: 15px; background-color: white; border: none; @@ -301,7 +292,6 @@ td.details { border-bottom: 1px solid rgb(236, 236, 236); } - .example_alt_pagination div.dataTables_info { width: 40%; } @@ -312,8 +302,8 @@ td.details { line-height: 22px; } -.paging_full_numbers span.paginate_button, - .paging_full_numbers span.paginate_active { +.paging_full_numbers span.paginate_button,.paging_full_numbers span.paginate_active + { border: 1px solid #aaa; -webkit-border-radius: 5px; -moz-border-radius: 5px; @@ -343,7 +333,6 @@ table.display tr.odd.row_selected td { background-color: #CCCCDD; } - /* * Sorting classes for columns */ @@ -479,15 +468,16 @@ tr.even.gradeU td.sorting_3 { background-color: #e2e2e2; } - /* * Row highlighting example */ -.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { +.ex_highlight #example tbody tr.even:hover,#example tbody tr.even td.highlighted + { background-color: #ECFFB3; } -.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { +.ex_highlight #example tbody tr.odd:hover,#example tbody tr.odd td.highlighted + { background-color: #E6FF99; } @@ -523,7 +513,6 @@ tr.even.gradeU td.sorting_3 { background-color: #DBFF70; } - /* * KeyTable */ @@ -555,6 +544,6 @@ div.box { height: 100px; padding: 10px; overflow: auto; -/* border: 1px solid #8080FF; + /* border: 1px solid #8080FF; background-color: #E5E5FF;*/ -} +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_table_jui.css b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_table_jui.css index 0da810f..04b4428 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_table_jui.css +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/css/demo_table_jui.css @@ -26,21 +26,19 @@ * ../images/ - relative to this CSS file. */ - /* * jQuery UI specific styling */ - .paging_two_button .fg-button { float: left; - cursor: pointer; - * cursor: hand; + cursor: pointer; * + cursor: hand; } .paging_full_numbers .fg-button { padding: 2px 6px; - cursor: pointer; - * cursor: hand; + cursor: pointer; * + cursor: hand; } .paging_full_numbers { @@ -57,11 +55,10 @@ table.display thead th { padding: 3px 0px 3px 10px; - cursor: pointer; - * cursor: hand; + cursor: pointer; * + cursor: hand; } - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Everything below this line is the same as demo_table.css. This file is @@ -69,12 +66,9 @@ table.display thead th { * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables features */ - .dataTables_wrapper { position: relative; min-height: 302px; @@ -117,7 +111,8 @@ table.display thead th { } /* Pagination nested */ -.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { +.paginate_disabled_previous,.paginate_enabled_previous,.paginate_disabled_next,.paginate_enabled_next + { height: 19px; width: 19px; margin-left: 3px; @@ -140,8 +135,6 @@ table.display thead th { background-image: url('../images/forward_enabled.jpg'); } - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables display */ @@ -170,12 +163,9 @@ table.display td.center { text-align: center; } - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables sorting */ - .sorting_asc { background: url('../images/sort_asc.jpg') no-repeat center right; } @@ -188,9 +178,6 @@ table.display td.center { background: url('../images/sort_both.jpg') no-repeat center right; } - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables row classes */ @@ -202,9 +189,6 @@ table.display tr.even.gradeA { background-color: #eeffee; } - - - table.display tr.odd.gradeA { background-color: #ddffdd; } @@ -237,7 +221,6 @@ table.display tr.even.gradeU { background-color: #eee; } - tr.odd { background-color: #E2E4FF; } @@ -246,10 +229,6 @@ tr.even { background-color: white; } - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Misc */ @@ -257,7 +236,7 @@ tr.even { clear: both; } -.top, .bottom { +.top,.bottom { padding: 15px; background-color: #F5F5F5; border: 1px solid #CCCCCC; @@ -296,13 +275,12 @@ td.details { border: 2px solid #A19B9E; } - .example_alt_pagination div.dataTables_info { width: 40%; } -.paging_full_numbers span.paginate_button, - .paging_full_numbers span.paginate_active { +.paging_full_numbers span.paginate_button,.paging_full_numbers span.paginate_active + { border: 1px solid #aaa; -webkit-border-radius: 5px; -moz-border-radius: 5px; @@ -332,7 +310,6 @@ table.display tr.odd.row_selected td { background-color: #9FAFD1; } - /* * Sorting classes for columns */ @@ -361,7 +338,6 @@ tr.even td.sorting_3 { background-color: #F9F9FF; } - /* For the Conditional-CSS grading rows */ /* Colour calculations (based off the main row colours) @@ -468,14 +444,15 @@ tr.even.gradeU td.sorting_3 { background-color: #e2e2e2; } - /* * Row highlighting example */ -.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { +.ex_highlight #example tbody tr.even:hover,#example tbody tr.even td.highlighted + { background-color: #ECFFB3; } -.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { +.ex_highlight #example tbody tr.odd:hover,#example tbody tr.odd td.highlighted + { background-color: #E6FF99; } \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/index.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/index.html index caab383..7f1d454 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/index.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/index.html @@ -1,7 +1,7 @@ - - - - + + + + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/draw.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/draw.html index 32af1a9..c32af16 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/draw.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/draw.html @@ -1,17 +1,21 @@ - - - - - DataTables example - - - - + + - - -
      -
      - DataTables performance test - draw -
      -
      - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - - + + +
      +
      + DataTables performance test - draw
      - +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + + +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/page.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/page.html index 77c6c2a..db014ad 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/page.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/page.html @@ -1,17 +1,21 @@ - - - - - DataTables example - - - - + + - - -
      -
      - DataTables performance test - draw -
      -
      - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - - + + +
      +
      + DataTables performance test - draw
      - +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + + +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/sort.html b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/sort.html index d154fb0..5826f63 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/sort.html +++ b/geoportal_1/src/main/webapp/resources/javascript/DataTables/media/unit_testing/performance/sort.html @@ -1,17 +1,21 @@ - - - - - DataTables example - - - - + + - - -
      -
      - DataTables performance test - draw -
      -
      - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet - Explorer 4.0Win 95+4X
      TridentInternet - Explorer 5.0Win 95+5C
      TridentInternet - Explorer 5.5Win 95+5.5A
      TridentInternet - Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      -
      -
      - - - + + +
      +
      + DataTables performance test - draw
      - +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      TridentInternet Explorer 4.0Win 95+4X
      TridentInternet Explorer 5.0Win 95+5C
      TridentInternet Explorer 5.5Win 95+5.5A
      TridentInternet Explorer 6Win 98+6A
      TridentInternet Explorer 7Win XP SP2+7A
      TridentAOL browser (AOL desktop)Win XP6A
      GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
      GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
      GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
      GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
      GeckoCamino 1.0OSX.2+1.8A
      GeckoCamino 1.5OSX.3+1.8A
      GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
      GeckoNetscape Browser 8Win 98SE+1.7A
      GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
      GeckoMozilla 1.0Win 95+ / OSX.1+1A
      GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
      GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
      GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
      GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
      GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
      GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
      GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
      GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
      GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
      GeckoEpiphany 2.20Gnome1.8A
      WebkitSafari 1.2OSX.3125.5A
      WebkitSafari 1.3OSX.3312.8A
      WebkitSafari 2.0OSX.4+419.3A
      WebkitSafari 3.0OSX.4+522.1A
      WebkitOmniWeb 5.5OSX.4+420A
      WebkitiPod Touch / iPhoneiPod420.1A
      WebkitS60S60413A
      PrestoOpera 7.0Win 95+ / OSX.1+-A
      PrestoOpera 7.5Win 95+ / OSX.2+-A
      PrestoOpera 8.0Win 95+ / OSX.2+-A
      PrestoOpera 8.5Win 95+ / OSX.2+-A
      PrestoOpera 9.0Win 95+ / OSX.3+-A
      PrestoOpera 9.2Win 88+ / OSX.3+-A
      PrestoOpera 9.5Win 88+ / OSX.3+-A
      PrestoOpera for WiiWii-A
      PrestoNokia N800N800-A
      PrestoNintendo DS browserNintendo DS8.5C/A1
      KHTMLKonqureror 3.1KDE 3.13.1C
      KHTMLKonqureror 3.3KDE 3.33.3A
      KHTMLKonqureror 3.5KDE 3.53.5A
      TasmanInternet Explorer 4.5Mac OS 8-9-X
      TasmanInternet Explorer 5.1Mac OS 7.6-91C
      TasmanInternet Explorer 5.2Mac OS 8-X1C
      MiscNetFront 3.1Embedded devices-C
      MiscNetFront 3.4Embedded devices-A
      MiscDillo 0.8Embedded devices-X
      MiscLinksText only-X
      MiscLynxText only-X
      MiscIE MobileWindows Mobile 6-C
      MiscPSP browserPSP-C
      Other browsersAll others--U
      Rendering engineBrowserPlatform(s)Engine versionCSS grade
      +
      +
      + + + +
      + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/dataTables.scroller.min.js b/geoportal_1/src/main/webapp/resources/javascript/dataTables.scroller.min.js new file mode 100644 index 0000000..279811a --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/dataTables.scroller.min.js @@ -0,0 +1,34 @@ +/* + * File: dataTables.scroller.min.js + * Version: 1.1.0 + * Author: Allan Jardine (www.sprymedia.co.uk) + * Info: www.datatables.net + * + * Copyright 2008-2012 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + * + * This source file 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 license files for details. + */ +/* + GPL v2 or BSD 3 point style +*/ +(function(c,i,h){var f=function(a,b){if(!this instanceof f)alert("Scroller warning: Scroller must be initialised with the 'new' keyword.");else{if(typeof b=="undefined")b={};this.s={dt:a,tableTop:0,tableBottom:0,redrawTop:0,redrawBottom:0,rowHeight:null,autoHeight:true,viewportHeight:0,viewportRows:0,stateTO:null,drawTO:null};this.s=c.extend(this.s,f.oDefaults,b);this.dom={force:h.createElement("div"),scroller:null,table:null};this.s.dt.oScroller=this;this._fnConstruct()}};f.prototype={fnRowToPixels:function(a){return a* +this.s.rowHeight},fnPixelsToRow:function(a){return parseInt(a/this.s.rowHeight,10)},fnScrollToRow:function(a,b){a=this.fnRowToPixels(a);typeof b=="undefined"||b?c(this.dom.scroller).animate({scrollTop:a}):c(this.dom.scroller).scrollTop(a)},fnMeasure:function(a){this.s.autoHeight&&this._fnCalcRowHeight();this.s.viewportHeight=c(this.dom.scroller).height();this.s.viewportRows=parseInt(this.s.viewportHeight/this.s.rowHeight,10)+1;this.s.dt._iDisplayLength=this.s.viewportRows*this.s.displayBuffer;this.s.trace&& +console.log("Row height: "+this.s.rowHeight+" Viewport height: "+this.s.viewportHeight+" Viewport rows: "+this.s.viewportRows+" Display rows: "+this.s.dt._iDisplayLength);if(typeof a=="undefined"||a)this.s.dt.oInstance.fnDraw()},_fnConstruct:function(){var a=this;this.dom.force.style.position="absolute";this.dom.force.style.top="0px";this.dom.force.style.left="0px";this.dom.force.style.width="1px";this.dom.scroller=c("div."+this.s.dt.oClasses.sScrollBody,this.s.dt.nTableWrapper)[0];this.dom.scroller.appendChild(this.dom.force); +this.dom.scroller.style.position="relative";this.dom.table=c(">table",this.dom.scroller)[0];this.dom.table.style.position="absolute";this.dom.table.style.top="0px";this.dom.table.style.left="0px";c(this.s.dt.nTableWrapper).addClass("DTS");this.s.loadingIndicator&&c(this.dom.scroller.parentNode).css("position","relative").append('
      '+this.s.dt.oLanguage.sLoadingRecords+"
      ");if(this.s.rowHeight&&this.s.rowHeight!="auto")this.s.autoHeight=false;this.fnMeasure(false);c(this.dom.scroller).scroll(function(){a._fnScroll.call(a)}); +c(this.dom.scroller).bind("touchstart",function(){a._fnScroll.call(a)});this.s.dt.aoDrawCallback.push({fn:function(){a.s.dt.bInitialised&&a._fnDrawCallback.call(a)},sName:"Scroller"});this.s.dt.oApi._fnCallbackReg(this.s.dt,"aoStateSaveParams",function(b,d){d.iScroller=a.dom.scroller.scrollTop},"Scroller_State")},_fnScroll:function(){var a=this,b=this.dom.scroller.scrollTop,d;if(!(this.s.dt.bFiltered||this.s.dt.bSorted)){this.s.trace&&console.log("Scroll: "+b+"px - boundaries: "+this.s.redrawTop+ +" / "+this.s.redrawBottom+". Showing rows "+this.fnPixelsToRow(b)+" to "+this.fnPixelsToRow(b+c(this.dom.scroller).height())+" in the viewport, with rows "+this.s.dt._iDisplayStart+" to "+this.s.dt._iDisplayEnd+" rendered by the DataTable");this._fnInfo();clearTimeout(this.s.stateTO);this.s.stateTO=setTimeout(function(){a.s.dt.oApi._fnSaveState(a.s.dt)},250);if(bthis.s.redrawBottom){var e=(this.s.displayBuffer-1)/2*this.s.viewportRows;d=parseInt(b/this.s.rowHeight,10)-e;if(d< +0)d=0;else if(d+this.s.dt._iDisplayLength>this.s.dt.fnRecordsDisplay()){d=this.s.dt.fnRecordsDisplay()-this.s.dt._iDisplayLength;if(d<0)d=0}else d%2!==0&&d++;if(d!=this.s.dt._iDisplayStart){this.s.tableTop=c(this.s.dt.nTable).offset().top;this.s.tableBottom=c(this.s.dt.nTable).height()+this.s.tableTop;if(this.s.dt.oFeatures.bServerSide){clearTimeout(this.s.drawTO);this.s.drawTO=setTimeout(function(){a.s.dt._iDisplayStart=d;a.s.dt.oApi._fnCalculateEnd(a.s.dt);a.s.dt.oApi._fnDraw(a.s.dt)},this.s.serverWait)}else{this.s.dt._iDisplayStart= +d;this.s.dt.oApi._fnCalculateEnd(this.s.dt);this.s.dt.oApi._fnDraw(this.s.dt)}this.s.trace&&console.log("Scroll forcing redraw - top DT render row: "+d)}}}},_fnDrawCallback:function(){var a=this,b=this.dom.scroller.scrollTop,d=b+this.s.viewportHeight;this.dom.force.style.height=this.s.rowHeight*this.s.dt.fnRecordsDisplay()+"px";var e=this.s.rowHeight*this.s.dt._iDisplayStart;if(this.s.dt._iDisplayStart===0)e=0;else if(this.s.dt._iDisplayStart===this.s.dt.fnRecordsDisplay()-this.s.dt._iDisplayLength)e= +this.s.rowHeight*this.s.dt._iDisplayStart;this.dom.table.style.top=e+"px";this.s.tableTop=e;this.s.tableBottom=c(this.s.dt.nTable).height()+this.s.tableTop;this.s.redrawTop=b-(b-this.s.tableTop)*this.s.boundaryScale;this.s.redrawBottom=b+(this.s.tableBottom-d)*this.s.boundaryScale;this.s.trace&&console.log("Table redraw. Table top: "+e+"px Table bottom: "+this.s.tableBottom+" Scroll boundary top: "+this.s.redrawTop+" Scroll boundary bottom: "+this.s.redrawBottom+" Rows drawn: "+this.s.dt._iDisplayLength); +setTimeout(function(){a._fnInfo.call(a)},0);if(this.s.dt.oFeatures.bStateSave&&this.s.dt.oLoadedState!==null&&typeof this.s.dt.oLoadedState.iScroller!="undefined")if(this.s.dt.sAjaxSource!==null&&this.s.dt.iDraw==2||this.s.dt.sAjaxSource===null&&this.s.dt.iDraw==1)setTimeout(function(){c(a.dom.scroller).scrollTop(a.s.dt.oLoadedState.iScroller);a.s.redrawTop=a.s.dt.oLoadedState.iScroller-a.s.viewportHeight/2},0)},_fnCalcRowHeight:function(){var a=this.s.dt.nTable.cloneNode(false),b=c('
      ')[0];c(a).append(" ");c("div."+this.s.dt.oClasses.sScrollBody,b).append(a);h.body.appendChild(b);this.s.rowHeight=c("tbody tr",a).outerHeight();h.body.removeChild(b)},_fnInfo:function(){if(this.s.dt.oFeatures.bInfo){var a=this.s.dt,b=this.dom.scroller.scrollTop,d=this.fnPixelsToRow(b)+1,e=a.fnRecordsTotal(),g= +a.fnRecordsDisplay();b=this.fnPixelsToRow(b+c(this.dom.scroller).height());b=g
      '); - var that = this; - this.requestQueue = { - "pollId": "", - "isPollRunning": false, - "tickerId": "", - "processingIndicatorId": "", - "isTickerRunning": false, - "requests": { - "pending":{ - "layers":[], - "images":[], - "exports":[] - }, - "complete":{ - "layers":[], - "images":[], - "exports":[] - }, - "failed":{ - "layers":[], - "images":[], - "exports":[] - } - } - }; - - var INTERVAL_MS = 3000; - - //helper functions for working with queues - var removeRequest = function (requestId, srcArray){ - var requestQueueObj; - for (var i in srcArray){ - var currentRequest = srcArray[i]; - if (currentRequest.requestId == requestId){ - return srcArray.splice(i, 1)[0]; - } - } - return false; - }; - - var getNewRequest = function(requestId, requestObj){ - var request = {}; - request.requestId = requestId; - request.status = {}; - request.params = requestObj; - return request; - }; - - - //getters for queues - this.getImageRequests = function(){ - return that.requestQueue.requests.pending.images; - }; - - this.getCompleteImageRequests = function(){ - return that.requestQueue.requests.complete.images; - }; - - this.getFailedImageRequests = function(){ - return that.requestQueue.requests.failed.images; - }; - - this.getExportRequests = function(){ - return that.requestQueue.requests.pending.exports; - }; - - this.getCompleteExportRequests = function(){ - return that.requestQueue.requests.complete.exports; - }; - - this.getFailedExportRequests = function(){ - return that.requestQueue.requests.failed.exports; - }; - - this.getLayerRequests = function(){ - return that.requestQueue.requests.pending.layers; - }; - - this.getCompleteLayerRequests = function(){ - return that.requestQueue.requests.complete.layers; - }; - - this.getFailedLayerRequests = function(){ - return that.requestQueue.requests.failed.layers; - }; - - //add requests to various queues - - var addLayerRequest = function(requestId, requestObj){ - that.requestQueue.requests.pending.layers.push(getNewRequest(requestId, requestObj)); - }; - - var addImageRequest = function(requestId, requestObj){ - that.requestQueue.requests.pending.images.push(getNewRequest(requestId, requestObj)); - }; - - var addExportRequest = function(requestId, requestObj){ - that.requestQueue.requests.pending.exports.push(getNewRequest(requestId, requestObj)); - }; - - this.addLayerToComplete = function(requestObj){ - that.requestQueue.requests.complete.layers.push(requestObj); - }; - - this.addImageToComplete = function(requestStatus){ - that.requestQueue.requests.complete.images.push(requestStatus); - }; - - this.addExportToComplete = function(requestStatus){ - that.requestQueue.requests.complete.exports.push(requestStatus); - }; - - - this.addLayerToFailed = function(requestObj){ - that.requestQueue.requests.failed.layers.push(requestObj); - }; - - this.addImageToFailed = function(requestStatus){ - that.requestQueue.requests.failed.images.push(requestStatus); - }; - - this.addExportToFailed = function(requestStatus){ - that.requestQueue.requests.failed.exports.push(requestStatus); - }; - - //remove requests from various queues - this.removePendingLayerRequest = function(requestId){ - return removeRequest(requestId, this.getLayerRequests()); - }; - - this.removePendingImageRequest = function(requestId){ - return removeRequest(requestId, this.getImageRequests()); - }; - - this.removePendingExportRequest = function(requestId){ - return removeRequest(requestId, this.getExportRequests()); - }; - - - - - //register requests in the queue - this.registerLayerRequest = function(requestId, requestObj){ - addLayerRequest(requestId, requestObj); - if (!that.requestQueue.isPollRunning){ - this.startPoll(); - } - }; - - this.registerExportRequest = function(requestId, requestObj){ - addExportRequest(requestId, requestObj); - if (!that.requestQueue.isPollRunning){ - this.startPoll(); - } - }; - - this.registerImageRequest = function(requestId, requestObj){ - addImageRequest(requestId, requestObj); - if (!that.requestQueue.isPollRunning){ - this.startPoll(); - } - }; - - - - //transfer requests objects - this.layerRequestToComplete = function(requestStatus){ - var requestQueueObj = this.removePendingLayerRequest(requestStatus.requestId); - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addLayerToComplete(newObj); - }; - - this.imageRequestToComplete = function(requestStatus){ - var requestQueueObj = this.removePendingImageRequest(requestStatus.requestId); - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addImageToComplete(newObj); - }; - - this.exportRequestToComplete = function(requestStatus){ - var requestQueueObj = this.removePendingExportRequest(requestStatus.requestId); - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addExportToComplete(newObj); - }; - - this.layerRequestToFailed = function(requestStatus){ - var requestQueueObj = this.removePendingLayerRequest(requestStatus.requestId); - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addLayerToFailed(newObj); - }; - - this.imageRequestToFailed = function(requestStatus){ - var requestQueueObj = this.removePendingImageRequest(requestStatus.requestId); - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addImageToFailed(newObj); - }; - - this.exportRequestToFailed = function(requestStatus){ - var requestQueueObj = this.removePendingExportRequest(requestStatus.requestId); - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addExportToFailed(newObj); - }; - - - - //convenience functions - this.getRequestById = function(id){ - var requests = this.getLayerRequests().concat(this.getImageRequests()); - requests = requests.concat(this.getExportRequests); - for (var i in requests){ - var currentRequest = requests[i]; - if (currentRequest.requestId == id){ - currentRequest.queue = "pending"; - return currentRequest; - } - } - var requests = this.getCompleteLayerRequests().concat(this.getCompleteImageRequests()); - requests = requests.concat(this.getCompleteExportRequests); - for (var i in requests){ - var currentRequest = requests[i]; - if (currentRequest.requestId == id){ - currentRequest.queue = "complete"; - return currentRequest; - } - } - var requests = this.getFailedLayerRequests().concat(this.getFailedImageRequests()); - requests = requests.concat(this.getFailedExportRequests); - for (var i in requests){ - var currentRequest = requests[i]; - if (currentRequest.requestId == id){ - currentRequest.queue = "failed"; - return currentRequest; - } - } - - }; - - this.requestsToFailedById = function(ids){ - for (var i in ids){ - var requestId = ids[i]; - var requestQueueObj = this.removePendingLayerRequest(requestId); - if (requestQueueObj){ - this.addLayerToFailed(requestQueueObj); - continue; - } else { - var requestQueueObj = this.removePendingImageRequest(requestId); - if (requestQueueObj){ - this.addImageToFailed(requestQueueObj); - } else { - var requestQueueObj = this.removePendingExportRequest(requestId); - if (requestQueueObj){ - this.addExportToFailed(requestQueueObj); - } else { - throw new Error("Downloader.requestToFailedById fall through"); - } - } - } - } - }; - - this.requestToFailedByStatus = function(requestStatus){ - var requestId = requestStatus.requestId; - var requestQueueObj = this.removePendingLayerRequest(requestId); - if (requestQueueObj){ - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addLayerToFailed(newObj); - return; - } else { - var requestQueueObj = this.removePendingImageRequest(requestId); - if (requestQueueObj){ - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addImageToFailed(newObj); - } else { - var requestQueueObj = this.removePendingExportRequest(requestId); - if (requestQueueObj){ - var newObj = {}; - jQuery.extend(true, newObj, requestQueueObj, requestStatus); - this.addExportToFailed(newObj); - } else { - //there's a problem - throw new Error("Downloader.requestToFailedByStatus fall through"); - } - } - } - }; - - var getLayerRequestIds = function(){ - var requestIdObjs = that.getLayerRequests(); - var requestIds = []; - for (var i in requestIdObjs){ - requestIds.push(requestIdObjs[i].requestId); - } - return requestIds; - }; - - var getImageRequestIds = function(){ - var requestIdObjs = that.getImageRequests(); - var requestIds = []; - for (var i in requestIdObjs){ - requestIds.push(requestIdObjs[i].requestId); - } - return requestIds; - }; - - var getExportRequestIds = function(){ - var requestIdObjs = that.getExportRequests(); - var requestIds = []; - for (var i in requestIdObjs){ - requestIds.push(requestIdObjs[i].requestId); - } - return requestIds; - }; - - //poll handling - this.firePoll = function(){ - var t=setTimeout('org.OpenGeoPortal.downloadQueue.pollRequestStatus()', INTERVAL_MS); - this.requestQueue.pollId = t; - this.requestQueue.isPollRunning = true; - this.setTickerText(); - }; - - this.startPoll = function(){ - if (!that.requestQueue.isPollRunning){ - that.startTicker(); - that.firePoll(); - } else { - //poll is already running - } - }; - - this.startTicker = function(){ - //show ticker (a div with transparent black background, fixed to bottom of screen, loader - //put a counter in a closure to iterate over the array - if (jQuery("#requestTicker").length == 0){ - jQuery("#requestTickerContainer").html('
      '); - } else { - } - - jQuery("#requestTickerContainer").fadeIn(); - - //jQuery("#requestTicker").text(this.getTickerText()); - - this.requestQueue.processingIndicatorId = org.OpenGeoPortal.Utility.indicatorAnimationStart("processingIndicator"); - }; - - this.stopTicker = function(){ - try { - var intervalId = this.requestQueue.tickerId; - clearInterval(intervalId); - } catch (e) {} - //hide ticker - jQuery("#requestTickerContainer").fadeOut(); - clearInterval(this.requestQueue.processingIndicatorId); - }; - - this.setTickerText = function(){ - var pending = this.requestQueue.requests.pending; - var imageRequests = pending.images.length; - var layerRequests = pending.layers.length; - var totalRequests = imageRequests + layerRequests; - //console.log(imageRequests + " " + layerRequests + " " + totalRequests); - var tickerText = "Processing "; - - if (totalRequests > 1){ - tickerText += totalRequests; - tickerText += " Requests"; - //var that = this; - //this.requestQueue.tickerId = setInterval(function(){ that.tick () }, 3000); - } else { - tickerText += "Request"; - } - - jQuery("#requestTicker").text(tickerText); - //jQuery("#requestTickerContainer").width(jQuery("#requestTicker").width()); - }; - - /*this.tick = function(){ - jQuery('#requestTicker').slideUp( function () { jQuery('#requestTicker').slideDown(); }); - }*/ - - this.stopPoll = function(){ - this.stopTicker(); - if (this.requestQueue.isPollRunning){ - var t= this.requestQueue.pollId; - clearTimeout(t); - this.requestQueue.isPollRunning = false; - } else { - //poll is not running - } - }; - - var handleStatusResponse = function(data){ - var statuses = data.requestStatus; - //console.log(statuses); - var pendingCounter = 0; - for (var i in statuses){ - var currentStatus = statuses[i].status; - //console.log(currentStatus); - //should be a clause for each possible status message - if ((currentStatus == "COMPLETE_SUCCEEDED")|| - (currentStatus == "COMPLETE_PARTIAL")){ - //get the download - handleDownload(statuses[i]); - if (currentStatus == "COMPLETE_PARTIAL"){ - //should be a note to the user for partial success - } - } else if (currentStatus == "PROCESSING"){ - pendingCounter++; - } else if (currentStatus == "COMPLETE_FAILED"){ - that.requestToFailedByStatus(statuses[i]); - //should be a note to user that the download failed - } - } - - if (pendingCounter > 0){ - //console.log("should fire poll"); - that.firePoll(); - } else { - that.stopPoll(); - } - }; - - var handleDownload = function(statusObj){ - var url; - var currentRequestId; - if (statusObj.type == "layer"){ - currentRequestId = statusObj.requestId; - that.layerRequestToComplete(statusObj); - url = "getDownload?requestId=" + currentRequestId; - jQuery('body').append(''); - - } else if (statusObj.type == "image"){ - currentRequestId = statusObj.requestId; - that.imageRequestToComplete(statusObj); - url = "getImage?requestId=" + currentRequestId; - jQuery('body').append(''); - - } else if (statusObj.type == "export"){ - currentRequestId = statusObj.requestId; - that.exportRequestToComplete(statusObj); - //should open map in GeoCommons - url = "geocommons/getExport?requestId=" + currentRequestId; - var successFunction = function(data){ - window.open(data.location); - }; - var params = { - url: url, - dataType: "json", - success: successFunction//, - //error: failureFunction - }; - jQuery.ajax(params); - } - - }; - - this.pollRequestStatus = function(){ - var ids = getLayerRequestIds().concat(getImageRequestIds()); - ids = ids.concat(getExportRequestIds()); - var that = this; - //console.log(getLayerRequestIds()); - //console.log(getImageRequestIds()); - var successFunction = function(data){ - that.requestQueue.isPollRunning = false; - //parse this data, update request queue - handleStatusResponse(data); - //fire a LayerDownload completion event - jQuery(document).trigger("requestStatus.success", data); - }; - - var failureFunction = function(){ - that.requestQueue.isPollRunning = false; - //fire a LayerDownload request failed event - that.requestsToFailedById(ids); - jQuery(document).trigger("requestStatus.failure", ids); - }; - var path = "requestStatus"; - if (ids.length == 0){ - failureFunction(); - return; - } - var params = { - url: path + "?requestIds=" + ids.join(","), - dataType: "json", - success: successFunction, - error: failureFunction - }; - - jQuery.ajax(params); - }; - - this.createErrorMessageObj = function(statusObj){ - var requestId = statusObj.requestId; - var statusMessage = statusObj.status; - var requestObj = this.getRequestById(requestId); - var layers = []; - var layerIds = []; - var layersParam = requestObj.layers; - for (var i in layersParam){ - var arrLayer = layersParam[i].split("="); - var layerObj = {"layerId": arrLayer[0], "format": arrLayer[1]}; - layerIds.push(arrLayer[0]); - layers.push(layerObj); - } - //get some info from solr about the layer - var solr = new org.OpenGeoPortal.Solr(); - var query = solr.getInfoFromLayerIdQuery(layerIds); - solr.sendToSolr(query, this.errorInfoSuccess, this.errorInfoError); - //create message box here, but keep it hidden until solr callback - }; - - this.errorInfoSuccess = function(data){ - - }; -}; \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/errorObject.js b/geoportal_1/src/main/webapp/resources/javascript/errorObject.js deleted file mode 100644 index 32fd5c0..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/errorObject.js +++ /dev/null @@ -1,42 +0,0 @@ -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -org.OpenGeoPortal.ErrorObject = function(errObj, customMessage){ - var debug = false; - if (typeof jQuery('#errorDialog')[0] == 'undefined'){ - var div = '
      '; - div += '

      '; - if (debug){ - div += 'An Error has occured in the following function:'; - div += '
      '; - div += ''; - div += '
      '; - div += errObj.name + ": " + errObj.message; - div += '
      '; - } - div += customMessage; - div += '

      '; - div += '
      '; - jQuery('body').append(div); - jQuery('#errorDialog').dialog({ - zIndex: 2999, - width: 550, - resizable: false, - autoOpen: false - }); - } - jQuery('#errorDialog').dialog('open'); -}; - -org.OpenGeoPortal.ErrorObject.prototype = new Error(); - diff --git a/geoportal_1/src/main/webapp/resources/javascript/extras.js b/geoportal_1/src/main/webapp/resources/javascript/extras.js deleted file mode 100644 index 868d61e..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/extras.js +++ /dev/null @@ -1,136 +0,0 @@ -//not currently being used, since we are using the google geocoder -org.OpenGeoPortal.UserInterface.prototype.geoSearch = function() { - if (true == true) return; - jQuery("#geosearch").autocomplete({ - source: function(request, response) { - jQuery.ajax({ - url: "http://ws.geonames.org/searchJSON", - dataType: "jsonp", - data: { - style: "long", - maxRows: 12, - name: request.term - }, - success: function(data) { - response(jQuery.map(data.geonames, function(item) { - var mercatorCoords = map.WGS84ToMercator(item.lng, item.lat); - return { - label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName, - value: item.name, - lat: mercatorCoords.lat, - lon: mercatorCoords.lon - }; - })); - } - }); - }, - minLength: 2, - delay: 750, - select: function(event, ui) { - map.setCenter(new OpenLayers.LonLat(ui.item.lon, ui.item.lat)); - //fire off another ajax request calling google geocoder - }, - open: function() { - jQuery(this).removeClass("ui-corner-all").addClass("ui-corner-top"); - }, - close: function() { - jQuery(this).removeClass("ui-corner-top").addClass("ui-corner-all"); - } - }); -}; - -//used? -org.OpenGeoPortal.UserInterface.prototype.createQueryString = function(){ - var searchType = this.whichSearch().type; - if (searchType == 'basicSearch'){ - var searchString = 'searchTerm=' + jQuery('#basicSearchTextField').val(); - searchString += '&topic=' + jQuery('#selectTopic').val(); - } else if (searchType =='advancedSearch'){ - var searchString = 'keyword=' + jQuery('#advancedKeywordText').val(); - searchString += '&topic=' + jQuery('#advancedSelectTopic').val(); - //searchString += '&collection=' + jQuery('#advancedCollectionText').val(); - searchString += '&publisher=' + jQuery('#advancedPublisherText').val(); - searchString += '&dateFrom=' + jQuery('#advancedDateFromText').val(); - searchString += '&dateTo=' + jQuery('#advancedDateToText').val(); - searchString += '&typeRaster=' + this.getCheckboxValue('dataTypeCheckRaster'); - searchString += '&typeVector=' + this.getCheckboxValue('dataTypeCheckVector'); - searchString += '&typeMap=' + this.getCheckboxValue('dataTypeCheckMap'); - searchString += '&sourceHarvard=' + this.getCheckboxValue('sourceCheckHarvard'); - searchString += '&sourceMit=' + this.getCheckboxValue('sourceCheckMit'); - searchString += '&sourceMassGis=' + this.getCheckboxValue('sourceCheckMassGis'); - searchString += '&sourcePrinceton=' + this.getCheckboxValue('sourceCheckPrinceton'); - searchString += '&sourceTufts=' + this.getCheckboxValue('sourceCheckTufts'); - } - if (this.filterState()){ - // pass along the extents of the map - var extent = map.returnExtent(); - searchString += "&minX=" + extent.minX + "&maxX=" + extent.maxX + "&minY=" + extent.minY + "&maxY=" + extent.maxY; - } - - return searchString; -}; - -//must exclude header cell for the following click handlers - -// this is a test function -// it tests jQuery creating a script tag -/* -ajaxTest = function(thisObj){ - var ajaxParams = { - type: "GET", - url: "http://geoportal-dev.atech.tufts.edu:8480/temp.jsp", - dataType: 'jsonp', - success: function(data){ - var solrResponse = data["response"]; - var totalResults = solrResponse["numFound"]; - alert("in ajaxTest with " + totalResults + ", and " + data); - foo = data; - }, - error: function() {throw new Error("The attempt to retrieve FGDC layer information failed.");} - }; - jQuery.ajax(ajaxParams); -}; -*/ -/*this has been replaced with a jsonp version -//click-handler for showing metadata pane -showMetadata = function(thisObj){ - var tableElement = jQuery(thisObj).parents('tr').last(); - var tableObj = tableElement.parent().parent().dataTable(); - //Get the position of the current data from the node - var aPos = tableObj.fnGetPosition( tableElement[0] ); - //Get the data array for this row - var aData = tableObj.fnGetData(aPos); - //make an ajax call to retrieve metadata - var layerId = aData[that.tableHeadingsObj.getColumnIndex("LayerId")]; - var ajaxParams = { - type: "GET", - url: "getFgdcTextHandler.jsp", - data: "layerId=" + layerId, - dataType: 'json', - success: function(data){ - var solrResponse = data["response"]; - var totalResults = solrResponse["numFound"]; - if (totalResults != 1) - { - alert("Request for FGDC returned " + totalResults +". Exactly 1 was expected."); - return; - } - var doc = solrResponse["docs"][0]; // get the first layer object - var fgdcRawText = doc["FgdcText"]; - var fgdcText = unescape(fgdcRawText); // text was escaped on ingest into Solr - var parser = new DOMParser(); - var fgdcDocument = parser.parseFromString(fgdcText,"text/xml"); - var xsl = loadXMLDoc("FGDC_Classic_for_Web_body.xsl"); - var xsltProcessor = new XSLTProcessor(); - xsltProcessor.importStylesheet(xsl); - resultDocument = xsltProcessor.transformToFragment(fgdcDocument, document); - document.getElementById("dialogDiv").innerHTML = ""; // delete previously displayed metadata - document.getElementById("dialogDiv").appendChild(resultDocument); - jQuery('#dialogDiv').width("550"); - jQuery("#dialogDiv").dialog({ zIndex: 9999, width: 560, height: 400 }); - }, - error: function() {throw new Error("The attempt to retrieve FGDC layer information failed.");} - }; - jQuery.ajax(ajaxParams); -}; -*/ diff --git a/geoportal_1/src/main/webapp/resources/javascript/geoCommonsExport.js b/geoportal_1/src/main/webapp/resources/javascript/geoCommonsExport.js deleted file mode 100644 index 07b48e4..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/geoCommonsExport.js +++ /dev/null @@ -1,222 +0,0 @@ -/** - * This javascript module includes functions for exporting public layers to - * GeoCommons via KML - * - * @author Chris Barnett - */ - -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -//Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal.Export == 'undefined'){ - org.OpenGeoPortal.Export = {}; -} else if (typeof org.OpenGeoPortal.Export != "object"){ - throw new Error("org.OpenGeoPortal.Export already exists and is not an object"); -} - -org.OpenGeoPortal.Export.GeoCommons = function GeoCommons(exportObj){ - //console.log(exportObj); - this.layerObj = exportObj.layers; - this.descriptor = "geoCommonsExport"; - - this.extentOptions = {"Layer Max": exportObj.extent.maxForLayers, "Current Map": exportObj.extent.current, "Global": exportObj.extent.global}; - - this.exportBasemapOptions = {"Acetate (GeoCommons default)": "acetate", "Acetate Terrain":"acetateterrain", "Google Hybrid":"googlehybrid", - "Google Satellite": "googleaerial", "Google Street":"googleroad", "OpenStreetMap":"openstreetmap"}; - - this.init = function init(){ - - }; - - this.exportDialog = function(uiObject){ - var dialogContent = this.getGeoCommonsExportDialogContent(); - var that = this; - var dialogTitle = "Export Layers to GeoCommons"; - var dialogDivId = this.descriptor + "Dialog"; - //this.layerObj = uiObject.getLayerList("mapIt"); - var buttonsObj = { - "Export": function(){that.exportLayers.call(that); - jQuery(this).dialog('close');}, - Cancel: function() { - jQuery(this).dialog('close'); - } - }; - uiObject.dialogTemplate(dialogDivId, dialogContent, dialogTitle, buttonsObj); - jQuery("#" + dialogDivId).dialog({"width":"375"}); - jQuery("#" + dialogDivId).dialog('open'); - jQuery("#" + dialogDivId).dialog('moveToTop'); - - - jQuery("#" + dialogDivId).unbind("keypress"); - jQuery("#" + dialogDivId).bind("keypress", function(event){ - if (event.keyCode == '13') { - that.exportLayers(); - jQuery("#" + dialogDivId).dialog('close'); - } - }); - jQuery("#createGeoCommonsAccountControl").click(function(){ - window.open("http://geocommons.com/register", 'geocommons', 'toolbar=0,menubar=0,status=0,location=0,height=500,width=400'); - }); - }; - - this.getInputElement = function(paramObj){ - //function(labelText, inputType, className, idName, defaultValue){ - if (typeof paramObj.id == "undefined"){ - throw new Error("id must be defined."); - } - var idName = paramObj.id; - var inputType = paramObj.type || "text"; - var defaultValue = paramObj.value || ""; - var labelText = paramObj.label || paramObj.name + ":" || ""; - var classNames; - if (jQuery.isArray(paramObj.classes)){ - classNames = paramObj.classes.join(" "); - } else { - classNames = paramObj.classes || ""; - } - var elementType = paramObj.elementType || "textbox"; - elementType = elementType.toLowerCase(); - var elementLabelAsText = ''; - var elementAsText; - switch (elementType){ - case "textbox": - elementAsText = elementLabelAsText + '
      '; - break; - case "selectbox": - elementAsText = elementLabelAsText + ''; - elementAsText += '
      '; - break; - } - return elementAsText; - } - - this.getGeoCommonsExportDialogContent = function() { - var identifier = this.descriptor; - var content = '
      '; - var textBoxObj = { - elementType: "textbox", - id: identifier + "Title", - name: "Title", - value: "OGP Export", - classes: ["dialog", identifier + "Form"] - }; - content += this.getInputElement(textBoxObj); - - textBoxObj.id = identifier + "Description"; - textBoxObj.name = "Description"; - - var layerObj = this.layerObj; - var titleArr = []; - for (var i in layerObj){ - titleArr.push(layerObj[i].title); - } - textBoxObj.value = titleArr.join(", "); - content += this.getInputElement(textBoxObj); - - //dropdown for extent - /*var extentSelectId = identifier + "Extent"; - var extentSelectObj = { - elementType: "selectbox", - id: extentSelectId, - name: "Extent", - options: this.extentOptions, - classes: ["dialog", identifier + "Form"] - }; - content += this.getInputElement(extentSelectObj); - */ - //bind change event to textBoxObj value above - - //dropdown for basemap - var basemapSelectObj = { - elementType: "selectbox", - id: identifier + "Basemap", - name: "Basemap", - options: this.exportBasemapOptions, - classes: ["dialog", identifier + "Form"] - }; - content += this.getInputElement(basemapSelectObj); - - - content += '
      '; - content += 'GeoCommons Account Info'; - textBoxObj.id = identifier + "Username"; - textBoxObj.name = "Username"; - textBoxObj.value = null; - content += this.getInputElement(textBoxObj); - - textBoxObj.id = identifier + "Password"; - textBoxObj.name = "Password"; - textBoxObj.type = "password" - content += this.getInputElement(textBoxObj); - - content += '
      Create GeoCommons Account
      '; - content += '
      '; - - content += '
      '; - return content; - } - - //need code to create dialog - //code to send ajax request to export servlet - this.createExportRequest = function createExportRequest(){ - //need a list of ogpids, basemap, username, password, extent - //title, description....most of these will be provided by a form - var descriptor = this.descriptor; - var requestObj = {}; - requestObj.basemap = jQuery("#" + descriptor + "Basemap").val(); - requestObj.username = jQuery("#" + descriptor + "Username").val(); - requestObj.password = jQuery("#" + descriptor + "Password").val(); - requestObj.extent = this.extentOptions["Layer Max"];//jQuery("#" + descriptor + "Extent").val(); - requestObj.title = jQuery("#" + descriptor + "Title").val(); - requestObj.description = jQuery("#" + descriptor + "Description").val(); - this.ogpids = []; - for (var layerId in this.layerObj){ - this.ogpids.push(layerId); - } - requestObj.OGPIDS = this.ogpids; - return requestObj; - }; - - this.getBasemapId = function getBasemapId(basemapDescriptor){ - basemapDescriptor = basemapDescriptor.toLowerCase(); - var basemapMap = this.exportBasemapOptions; - if(basemapMap[basemapDescriptor] != "undefined"){ - return basemapMap[basemapDescriptor]; - } else { - throw new Error('Basemap "' + basemapDescriptor + '" is undefined.'); - } - }; - - - this.exportLayers = function exportLayers(){ - var requestObj = this.createExportRequest(); - var that = this; - var params = { - url: "geocommons/requestExport", - data: JSON.stringify(requestObj), - processData: false, - dataType: "json", - type: "POST", - context: this, - success: function(data){org.OpenGeoPortal.downloadQueue.registerExportRequest(data.requestId, requestObj);} - }; - jQuery.ajax(params); - }; - -}; \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/institution.js b/geoportal_1/src/main/webapp/resources/javascript/institution.js deleted file mode 100644 index 58c688a..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/institution.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * pulls info from ogpConfig.json for the client to use - * - * */ - -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -if (typeof org.OpenGeoPortal.InstitutionInfo == 'undefined'){ - org.OpenGeoPortal.InstitutionInfo = {}; -} else if (typeof org.OpenGeoPortal.InstitutionInfo !== "object"){ - throw new Error("org.OpenGeoPortal.InstitutionInfo already exists and is not an object"); -} - -org.OpenGeoPortal.InstitutionInfo.Config = {}; -org.OpenGeoPortal.InstitutionInfo.Search = {}; -org.OpenGeoPortal.InstitutionInfo.homeInstitution = ""; -org.OpenGeoPortal.InstitutionInfo.institutionSpecificCss = ""; -org.OpenGeoPortal.InstitutionInfo.institutionSpecificJavaScript = ""; -org.OpenGeoPortal.InstitutionInfo.institutionSpecificGoogleAnalyticsId = ""; - -org.OpenGeoPortal.InstitutionInfo.getHomeInstitution = function(){ - var institution = org.OpenGeoPortal.InstitutionInfo.homeInstitution; - //return homeInstitution if it is not empty - if (institution.length > 0){ - return institution; - } else { - org.OpenGeoPortal.InstitutionInfo.requestInfo(); - return org.OpenGeoPortal.InstitutionInfo.homeInstitution; - } -}; - - -org.OpenGeoPortal.InstitutionInfo.getCustomCss = function(){ - var institution = org.OpenGeoPortal.InstitutionInfo.institutionSpecificCss; - //return institutionSpecificCss if it is not empty - if (institution.length > 0){ - return institution; - } else { - org.OpenGeoPortal.InstitutionInfo.requestInfo(); - return org.OpenGeoPortal.InstitutionInfo.institutionSpecificCss; - } -}; - -org.OpenGeoPortal.InstitutionInfo.getCustomJavaScript = function(){ - var javaScriptFileName = org.OpenGeoPortal.InstitutionInfo.institutionSpecificJavaScript; - return javaScriptFileName; -}; - -org.OpenGeoPortal.InstitutionInfo.getGoogleAnalyticsId = function(){ - var googleAnalyticsId = org.OpenGeoPortal.InstitutionInfo.institutionSpecificGoogleAnalyticsId; - return googleAnalyticsId; -}; - -org.OpenGeoPortal.InstitutionInfo.getWMSProxy = function(institution, accessLevel) { - var configObj = org.OpenGeoPortal.InstitutionInfo.Config[institution]; - if (typeof configObj.proxy != "undefined"){ - if (jQuery.inArray(accessLevel.toLowerCase(), configObj.proxy.accessLevel) > -1){ - return configObj.proxy.wms; - } - } - - return false; - -}; - -org.OpenGeoPortal.InstitutionInfo.getLoginType = function(institution){ - var info = org.OpenGeoPortal.InstitutionInfo.getInstitutionInfo(); - return info[institution]["login"]["loginType"]; -}; - -org.OpenGeoPortal.InstitutionInfo.getAuthenticationPage = function(institution){ - var info = org.OpenGeoPortal.InstitutionInfo.getInstitutionInfo(); - return info[institution]["login"]["authenticationPage"]; -}; - -org.OpenGeoPortal.InstitutionInfo.getSearch = function(){ - var search = org.OpenGeoPortal.InstitutionInfo.Search; - //return Search if it is not empty - for (var i in search){ - return search; - } - - org.OpenGeoPortal.InstitutionInfo.requestInfo(); - return org.OpenGeoPortal.InstitutionInfo.Search; - -}; - -org.OpenGeoPortal.InstitutionInfo.getInstitutionInfo = function(){ - var configObj = org.OpenGeoPortal.InstitutionInfo.Config; - //return the configObj if it is not empty - for (var i in configObj){ - return configObj; - } - //otherwise, get set the configObj from the xml config file - org.OpenGeoPortal.InstitutionInfo.requestInfo(); - return org.OpenGeoPortal.InstitutionInfo.Config; -}; - -org.OpenGeoPortal.InstitutionInfo.requestInfo = function(){ - var params = { - url: "resources/ogpConfig.json", - async: false, - contentType: "text/json", - dataType: 'json', - success: function(data){ - var institutions = data["config"]["institutions"]; - org.OpenGeoPortal.InstitutionInfo.Search = data["config"]["search"]; - org.OpenGeoPortal.InstitutionInfo.institutionSpecificCss = data["config"]["institutionSpecificCss"]; - org.OpenGeoPortal.InstitutionInfo.institutionSpecificJavaScript = data["config"]["institutionSpecificJavaScript"]; - org.OpenGeoPortal.InstitutionInfo.institutionSpecificGoogleAnalyticsId = data["config"]["googleAnalyticsId"]; - org.OpenGeoPortal.InstitutionInfo.Config = institutions; - org.OpenGeoPortal.InstitutionInfo.homeInstitution = data["config"]["homeInstitution"]; - }, - error: function(jqXHR, textStatus, errorThrown){ - alert(textStatus); - alert(errorThrown); - alert(jqXHR); - } - }; - jQuery.ajax(params); -}; - -org.OpenGeoPortal.InstitutionInfo.imagePath = org.OpenGeoPortal.Utility.ImageLocation; - -org.OpenGeoPortal.InstitutionInfo.icons = { - "dataTypes": { - "Point": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_dot.png", "displayName":"point"}, - "Line": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_arc.png", "displayName":"line"}, - "Polygon": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_polygon.png", "displayName":"polygon"}, - "Raster": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_raster.png", "displayName":"raster"}, - "PaperMap": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_map.png", "displayName":"scanned map"}/*, - "LibraryRecord": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_library.png", "displayName":"library record"}*/ - } -}; - - -org.OpenGeoPortal.InstitutionInfo.dataTypes = { dataTypeArray : [{"DisplayName":"Point", "value": "point"}, - {"DisplayName":"Line", "value": "line"}, - {"DisplayName":"Polygon", "value": "polygon"}, - {"DisplayName":"Raster", "value": "raster"}, - {"DisplayName":"Scanned Map", "value": "paper map"}]}; \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/jquery.ba-postmessage.min.js b/geoportal_1/src/main/webapp/resources/javascript/jquery.ba-postmessage.min.js index 5fe80a2..6a6b0fd 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/jquery.ba-postmessage.min.js +++ b/geoportal_1/src/main/webapp/resources/javascript/jquery.ba-postmessage.min.js @@ -6,4 +6,5 @@ * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ -(function($){var g,d,j=1,a,b=this,f=!1,h="postMessage",e="addEventListener",c,i=b[h]&&!$.browser.opera;$[h]=function(k,l,m){if(!l){return}k=typeof k==="string"?k:$.param(k);m=m||parent;if(i){m[h](k,l.replace(/([^:]+:\/\/[^\/]+).*/,"$1"))}else{if(l){m.location=l.replace(/#.*$/,"")+"#"+(+new Date)+(j++)+"&"+k}}};$.receiveMessage=c=function(l,m,k){if(i){if(l){a&&c();a=function(n){if((typeof m==="string"&&n.origin!==m)||($.isFunction(m)&&m(n.origin)===f)){return f}l(n)}}if(b[e]){b[l?e:"removeEventListener"]("message",a,f)}else{b[l?"attachEvent":"detachEvent"]("onmessage",a)}}else{g&&clearInterval(g);g=null;if(l){k=typeof m==="number"?m:typeof k==="number"?k:100;g=setInterval(function(){var o=document.location.hash,n=/^#?\d+&/;if(o!==d&&n.test(o)){d=o;l({data:o.replace(n,"")})}},k)}}}})(jQuery); \ No newline at end of file +//&&!$.browser.opera +(function($){var g,d,j=1,a,b=this,f=!1,h="postMessage",e="addEventListener",c,i=b[h];$[h]=function(k,l,m){if(!l){return}k=typeof k==="string"?k:$.param(k);m=m||parent;if(i){m[h](k,l.replace(/([^:]+:\/\/[^\/]+).*/,"$1"))}else{if(l){m.location=l.replace(/#.*$/,"")+"#"+(+new Date)+(j++)+"&"+k}}};$.receiveMessage=c=function(l,m,k){if(i){if(l){a&&c();a=function(n){if((typeof m==="string"&&n.origin!==m)||($.isFunction(m)&&m(n.origin)===f)){return f}l(n)}}if(b[e]){b[l?e:"removeEventListener"]("message",a,f)}else{b[l?"attachEvent":"detachEvent"]("onmessage",a)}}else{g&&clearInterval(g);g=null;if(l){k=typeof m==="number"?m:typeof k==="number"?k:100;g=setInterval(function(){var o=document.location.hash,n=/^#?\d+&/;if(o!==d&&n.test(o)){d=o;l({data:o.replace(n,"")})}},k)}}}})(jQuery); \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/jquery.nanoscroller.min.js b/geoportal_1/src/main/webapp/resources/javascript/jquery.nanoscroller.min.js new file mode 100644 index 0000000..aeaa925 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/jquery.nanoscroller.min.js @@ -0,0 +1,4 @@ +/*! nanoScrollerJS - v0.7.6 - (c) 2013 James Florentino; Licensed MIT */ + +!function(a,b,c){"use strict";var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F;x={paneClass:"pane",sliderClass:"slider",contentClass:"content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},s="scrollbar",r="scroll",k="mousedown",l="mousemove",n="mousewheel",m="mouseup",q="resize",h="drag",u="up",p="panedown",f="DOMMouseScroll",g="down",v="wheel",i="keydown",j="keyup",t="touchmove",d="Microsoft Internet Explorer"===b.navigator.appName&&/msie 7./i.test(b.navigator.appVersion)&&b.ActiveXObject,e=null,B=b.requestAnimationFrame,w=b.cancelAnimationFrame,D=c.createElement("div").style,F=function(){var a,b,c,d,e,f;for(d=["t","webkitT","MozT","msT","OT"],a=e=0,f=d.length;f>e;a=++e)if(c=d[a],b=d[a]+"ransform",b in D)return d[a].substr(0,d[a].length-1);return!1}(),E=function(a){return F===!1?!1:""===F?a:F+a.charAt(0).toUpperCase()+a.substr(1)},C=E("transform"),z=C!==!1,y=function(){var a,b,d;return a=c.createElement("div"),b=a.style,b.position="absolute",b.width="100px",b.height="100px",b.overflow=r,b.top="-9999px",c.body.appendChild(a),d=a.offsetWidth-a.clientWidth,c.body.removeChild(a),d},A=function(){var a,c,d;return c=b.navigator.userAgent,(a=/(?=.+Mac OS X)(?=.+Firefox)/.test(c))?(d=/Firefox\/\d{2}\./.exec(c),d&&(d=d[0].replace(/\D+/g,"")),a&&+d>23):!1},o=function(){function i(d,f){this.el=d,this.options=f,e||(e=y()),this.$el=a(this.el),this.doc=a(this.options.documentContext||c),this.win=a(this.options.windowContext||b),this.$content=this.$el.children("."+f.contentClass),this.$content.attr("tabindex",this.options.tabIndex||0),this.content=this.$content[0],this.options.iOSNativeScrolling&&null!=this.el.style.WebkitOverflowScrolling?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return i.prototype.preventScrolling=function(a,b){if(this.isActive)if(a.type===f)(b===g&&a.originalEvent.detail>0||b===u&&a.originalEvent.detail<0)&&a.preventDefault();else if(a.type===n){if(!a.originalEvent||!a.originalEvent.wheelDelta)return;(b===g&&a.originalEvent.wheelDelta<0||b===u&&a.originalEvent.wheelDelta>0)&&a.preventDefault()}},i.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},i.prototype.updateScrollValues=function(){var a;a=this.content,this.maxScrollTop=a.scrollHeight-a.clientHeight,this.prevScrollTop=this.contentScrollTop||0,this.contentScrollTop=a.scrollTop,this.iOSNativeScrolling||(this.maxSliderTop=this.paneHeight-this.sliderHeight,this.sliderTop=0===this.maxScrollTop?0:this.contentScrollTop*this.maxSliderTop/this.maxScrollTop)},i.prototype.setOnScrollStyles=function(){var a,b=this;z?(a={},a[C]="translate(0, "+this.sliderTop+"px)"):a={top:this.sliderTop},B?this.scrollRAF||(this.scrollRAF=B(function(){b.scrollRAF=null,b.slider.css(a)})):this.slider.css(a)},i.prototype.createEvents=function(){var a=this;this.events={down:function(b){return a.isBeingDragged=!0,a.offsetY=b.pageY-a.slider.offset().top,a.pane.addClass("active"),a.doc.bind(l,a.events[h]).bind(m,a.events[u]),!1},drag:function(b){return a.sliderY=b.pageY-a.$el.offset().top-a.offsetY,a.scroll(),a.contentScrollTop>=a.maxScrollTop&&a.prevScrollTop!==a.maxScrollTop?a.$el.trigger("scrollend"):0===a.contentScrollTop&&0!==a.prevScrollTop&&a.$el.trigger("scrolltop"),!1},up:function(){return a.isBeingDragged=!1,a.pane.removeClass("active"),a.doc.unbind(l,a.events[h]).unbind(m,a.events[u]),!1},resize:function(){a.reset()},panedown:function(b){return a.sliderY=(b.offsetY||b.originalEvent.layerY)-.5*a.sliderHeight,a.scroll(),a.events.down(b),!1},scroll:function(b){a.updateScrollValues(),a.isBeingDragged||(a.iOSNativeScrolling||(a.sliderY=a.sliderTop,a.setOnScrollStyles()),null!=b&&(a.contentScrollTop>=a.maxScrollTop?(a.options.preventPageScrolling&&a.preventScrolling(b,g),a.prevScrollTop!==a.maxScrollTop&&a.$el.trigger("scrollend")):0===a.contentScrollTop&&(a.options.preventPageScrolling&&a.preventScrolling(b,u),0!==a.prevScrollTop&&a.$el.trigger("scrolltop"))))},wheel:function(b){var c;if(null!=b)return c=b.delta||b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.detail||b.originalEvent&&-b.originalEvent.detail,c&&(a.sliderY+=-c/3),a.scroll(),!1}}},i.prototype.addEvents=function(){var a;this.removeEvents(),a=this.events,this.options.disableResize||this.win.bind(q,a[q]),this.iOSNativeScrolling||(this.slider.bind(k,a[g]),this.pane.bind(k,a[p]).bind(""+n+" "+f,a[v])),this.$content.bind(""+r+" "+n+" "+f+" "+t,a[r])},i.prototype.removeEvents=function(){var a;a=this.events,this.win.unbind(q,a[q]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+r+" "+n+" "+f+" "+t,a[r])},i.prototype.generate=function(){var a,c,d,f,g,h;return f=this.options,g=f.paneClass,h=f.sliderClass,a=f.contentClass,this.$el.find("."+g).length||this.$el.find("."+h).length||this.$el.append('
      '),this.pane=this.$el.children("."+g),this.slider=this.pane.find("."+h),0===e&&A()?(d=b.getComputedStyle(this.content,null).getPropertyValue("padding-right").replace(/\D+/g,""),c={right:-14,paddingRight:+d+14}):e&&(c={right:-e},this.$el.addClass("has-scrollbar")),null!=c&&this.$content.css(c),this},i.prototype.restore=function(){this.stopped=!1,this.iOSNativeScrolling||this.pane.show(),this.addEvents()},i.prototype.reset=function(){var a,b,c,f,g,h,i,j,k,l;return this.iOSNativeScrolling?(this.contentHeight=this.content.scrollHeight,void 0):(this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(),a=this.content,c=a.style,f=c.overflowY,d&&this.$content.css({height:this.$content.height()}),b=a.scrollHeight+e,k=parseInt(this.$el.css("max-height"),10),k>0&&(this.$el.height(""),this.$el.height(a.scrollHeight>k?k:a.scrollHeight)),h=this.pane.outerHeight(!1),j=parseInt(this.pane.css("top"),10),g=parseInt(this.pane.css("bottom"),10),i=h+j+g,l=Math.round(i/b*i),lthis.options.sliderMaxHeight&&(l=this.options.sliderMaxHeight),f===r&&c.overflowX!==r&&(l+=e),this.maxSliderTop=i-l,this.contentHeight=b,this.paneHeight=h,this.paneOuterHeight=i,this.sliderHeight=l,this.slider.height(l),this.events.scroll(),this.pane.show(),this.isActive=!0,a.scrollHeight===a.clientHeight||this.pane.outerHeight(!0)>=a.scrollHeight&&f!==r?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===a.scrollHeight&&f===r?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),this)},i.prototype.scroll=function(){return this.isActive?(this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop((this.paneHeight-this.contentHeight+e)*this.sliderY/this.maxSliderTop*-1),this.iOSNativeScrolling||(this.updateScrollValues(),this.setOnScrollStyles()),this):void 0},i.prototype.scrollBottom=function(a){return this.isActive?(this.reset(),this.$content.scrollTop(this.contentHeight-this.$content.height()-a).trigger(n),this):void 0},i.prototype.scrollTop=function(a){return this.isActive?(this.reset(),this.$content.scrollTop(+a).trigger(n),this):void 0},i.prototype.scrollTo=function(a){return this.isActive?(this.reset(),this.scrollTop(this.$el.find(a).get(0).offsetTop),this):void 0},i.prototype.stop=function(){return w&&this.scrollRAF&&(w(this.scrollRAF),this.scrollRAF=null),this.stopped=!0,this.removeEvents(),this.iOSNativeScrolling||this.pane.hide(),this},i.prototype.destroy=function(){return this.stopped||this.stop(),!this.iOSNativeScrolling&&this.pane.length&&this.pane.remove(),d&&this.$content.height(""),this.$content.removeAttr("tabindex"),this.$el.hasClass("has-scrollbar")&&(this.$el.removeClass("has-scrollbar"),this.$content.css({right:""})),this},i.prototype.flash=function(){var a=this;if(!this.iOSNativeScrolling&&this.isActive)return this.reset(),this.pane.addClass("flashed"),setTimeout(function(){a.pane.removeClass("flashed")},this.options.flashDelay),this},i}(),a.fn.nanoScroller=function(b){return this.each(function(){var c,d;if((d=this.nanoscroller)||(c=a.extend({},x,b),this.nanoscroller=d=new o(this,c)),b&&"object"==typeof b){if(a.extend(d.options,b),null!=b.scrollBottom)return d.scrollBottom(b.scrollBottom);if(null!=b.scrollTop)return d.scrollTop(b.scrollTop);if(b.scrollTo)return d.scrollTo(b.scrollTo);if("bottom"===b.scroll)return d.scrollBottom(0);if("top"===b.scroll)return d.scrollTop(0);if(b.scroll&&b.scroll instanceof a)return d.scrollTo(b.scroll);if(b.stop)return d.stop();if(b.destroy)return d.destroy();if(b.flash)return d.flash()}return d.reset()})},a.fn.nanoScroller.Constructor=o}(jQuery,window,document); +//# sourceMappingURL=jquery.nanoscroller.min.js.map \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/jquery/css/ui-lightness/jquery-ui-1.8.custom.css b/geoportal_1/src/main/webapp/resources/javascript/jquery/css/ui-lightness/jquery-ui-1.8.custom.css index aa6a5b4..944d952 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/jquery/css/ui-lightness/jquery-ui-1.8.custom.css +++ b/geoportal_1/src/main/webapp/resources/javascript/jquery/css/ui-lightness/jquery-ui-1.8.custom.css @@ -6,476 +6,1749 @@ /* Layout helpers ----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } +.ui-helper-hidden { + display: none; +} + +.ui-helper-hidden-accessible { + position: absolute; + left: -99999999px; +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} + +.ui-helper-clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.ui-helper-clearfix { + display: inline-block; +} /* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } +* html .ui-helper-clearfix { + height: 1%; +} + +.ui-helper-clearfix { + display: block; +} /* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity = 0); +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px +*/ + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial, sans-serif; + font-size: 1.1em; +} + +.ui-widget .ui-widget { + font-size: 1em; +} + +.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button + { + font-family: Arial, sans-serif; + font-size: 1em; +} + +.ui-widget-content { + border: 1px solid #dddddd; + background: #eeeeee + url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; + color: #333333; +} + +.ui-widget-content a { + color: #333333; +} + +.ui-widget-header { + border: 1px solid #e78f08; + background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) + 50% 50% repeat-x; + color: #ffffff; + font-weight: bold; +} + +.ui-widget-header a { + color: #ffffff; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default,.ui-widget-content .ui-state-default { + border: 1px solid #cccccc; + background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% + repeat-x; + font-weight: bold; + color: #1c94c4; +} + +.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited + { + color: #1c94c4; + text-decoration: none; +} + +.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus + { + border: 1px solid #fbcb09; + background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% + repeat-x; + font-weight: bold; + color: #c77405; +} + +.ui-state-hover a,.ui-state-hover a:hover { + color: #c77405; + text-decoration: none; +} + +.ui-state-active,.ui-widget-content .ui-state-active { + border: 1px solid #fbd850; + background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% + repeat-x; + font-weight: bold; + color: #eb8f00; +} + +.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited { + color: #eb8f00; + text-decoration: none; +} + +.ui-widget :active { + outline: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight,.ui-widget-content .ui-state-highlight { + border: 1px solid #fed22f; + background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) + 50% top repeat-x; + color: #363636; +} + +.ui-state-highlight a,.ui-widget-content .ui-state-highlight a { + color: #363636; +} + +.ui-state-error,.ui-widget-content .ui-state-error { + border: 1px solid #cd0a0a; + background: #b81900 + url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; + color: #ffffff; +} + +.ui-state-error a,.ui-widget-content .ui-state-error a { + color: #ffffff; +} + +.ui-state-error-text,.ui-widget-content .ui-state-error-text { + color: #ffffff; +} + +.ui-priority-primary,.ui-widget-content .ui-priority-primary { + font-weight: bold; +} + +.ui-priority-secondary,.ui-widget-content .ui-priority-secondary { + opacity: .7; + filter: Alpha(Opacity = 70); + font-weight: normal; +} + +.ui-state-disabled,.ui-widget-content .ui-state-disabled { + opacity: .35; + filter: Alpha(Opacity = 35); + background-image: none; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; + background-image: url(images/ui-icons_222222_256x240.png); +} + +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png); +} + +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_ffffff_256x240.png); +} + +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_ef8c08_256x240.png); +} + +.ui-state-hover .ui-icon,.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_ef8c08_256x240.png); +} + +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_ef8c08_256x240.png); +} + +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_228ef1_256x240.png); +} + +.ui-state-error .ui-icon,.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_ffd27a_256x240.png); +} + +/* positioning */ +.ui-icon-carat-1-n { + background-position: 0 0; +} + +.ui-icon-carat-1-ne { + background-position: -16px 0; +} + +.ui-icon-carat-1-e { + background-position: -32px 0; +} + +.ui-icon-carat-1-se { + background-position: -48px 0; +} + +.ui-icon-carat-1-s { + background-position: -64px 0; +} + +.ui-icon-carat-1-sw { + background-position: -80px 0; +} + +.ui-icon-carat-1-w { + background-position: -96px 0; +} + +.ui-icon-carat-1-nw { + background-position: -112px 0; +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0; +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0; +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px; +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px; +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px; +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} + +.ui-icon-arrow-4 { + background-position: 0 -80px; +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} + +.ui-icon-extlink { + background-position: -32px -80px; +} + +.ui-icon-newwin { + background-position: -48px -80px; +} + +.ui-icon-refresh { + background-position: -64px -80px; +} + +.ui-icon-shuffle { + background-position: -80px -80px; +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} + +.ui-icon-folder-open { + background-position: -16px -96px; +} + +.ui-icon-document { + background-position: -32px -96px; +} + +.ui-icon-document-b { + background-position: -48px -96px; +} + +.ui-icon-note { + background-position: -64px -96px; +} + +.ui-icon-mail-closed { + background-position: -80px -96px; +} + +.ui-icon-mail-open { + background-position: -96px -96px; +} + +.ui-icon-suitcase { + background-position: -112px -96px; +} + +.ui-icon-comment { + background-position: -128px -96px; +} + +.ui-icon-person { + background-position: -144px -96px; +} + +.ui-icon-print { + background-position: -160px -96px; +} + +.ui-icon-trash { + background-position: -176px -96px; +} + +.ui-icon-locked { + background-position: -192px -96px; +} + +.ui-icon-unlocked { + background-position: -208px -96px; +} + +.ui-icon-bookmark { + background-position: -224px -96px; +} + +.ui-icon-tag { + background-position: -240px -96px; +} + +.ui-icon-home { + background-position: 0 -112px; +} + +.ui-icon-flag { + background-position: -16px -112px; +} + +.ui-icon-calendar { + background-position: -32px -112px; +} + +.ui-icon-cart { + background-position: -48px -112px; +} + +.ui-icon-pencil { + background-position: -64px -112px; +} + +.ui-icon-clock { + background-position: -80px -112px; +} + +.ui-icon-disk { + background-position: -96px -112px; +} + +.ui-icon-calculator { + background-position: -112px -112px; +} + +.ui-icon-zoomin { + background-position: -128px -112px; +} + +.ui-icon-zoomout { + background-position: -144px -112px; +} + +.ui-icon-search { + background-position: -160px -112px; +} + +.ui-icon-wrench { + background-position: -176px -112px; +} + +.ui-icon-gear { + background-position: -192px -112px; +} + +.ui-icon-heart { + background-position: -208px -112px; +} + +.ui-icon-star { + background-position: -224px -112px; +} + +.ui-icon-link { + background-position: -240px -112px; +} + +.ui-icon-cancel { + background-position: 0 -128px; +} + +.ui-icon-plus { + background-position: -16px -128px; +} + +.ui-icon-plusthick { + background-position: -32px -128px; +} + +.ui-icon-minus { + background-position: -48px -128px; +} + +.ui-icon-minusthick { + background-position: -64px -128px; +} + +.ui-icon-close { + background-position: -80px -128px; +} + +.ui-icon-closethick { + background-position: -96px -128px; +} + +.ui-icon-key { + background-position: -112px -128px; +} + +.ui-icon-lightbulb { + background-position: -128px -128px; +} + +.ui-icon-scissors { + background-position: -144px -128px; +} + +.ui-icon-clipboard { + background-position: -160px -128px; +} + +.ui-icon-copy { + background-position: -176px -128px; +} + +.ui-icon-contact { + background-position: -192px -128px; +} + +.ui-icon-image { + background-position: -208px -128px; +} + +.ui-icon-video { + background-position: -224px -128px; +} + +.ui-icon-script { + background-position: -240px -128px; +} + +.ui-icon-alert { + background-position: 0 -144px; +} + +.ui-icon-info { + background-position: -16px -144px; +} + +.ui-icon-notice { + background-position: -32px -144px; +} + +.ui-icon-help { + background-position: -48px -144px; +} + +.ui-icon-check { + background-position: -64px -144px; +} + +.ui-icon-bullet { + background-position: -80px -144px; +} + +.ui-icon-radio-off { + background-position: -96px -144px; +} + +.ui-icon-radio-on { + background-position: -112px -144px; +} + +.ui-icon-pin-w { + background-position: -128px -144px; +} + +.ui-icon-pin-s { + background-position: -144px -144px; +} + +.ui-icon-play { + background-position: 0 -160px; +} + +.ui-icon-pause { + background-position: -16px -160px; +} + +.ui-icon-seek-next { + background-position: -32px -160px; +} + +.ui-icon-seek-prev { + background-position: -48px -160px; +} + +.ui-icon-seek-end { + background-position: -64px -160px; +} + +.ui-icon-seek-start { + background-position: -80px -160px; +} +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { + background-position: -80px -160px; +} + +.ui-icon-stop { + background-position: -96px -160px; +} + +.ui-icon-eject { + background-position: -112px -160px; +} + +.ui-icon-volume-off { + background-position: -128px -160px; +} + +.ui-icon-volume-on { + background-position: -144px -160px; +} + +.ui-icon-power { + background-position: 0 -176px; +} + +.ui-icon-signal-diag { + background-position: -16px -176px; +} + +.ui-icon-signal { + background-position: -32px -176px; +} + +.ui-icon-battery-0 { + background-position: -48px -176px; +} + +.ui-icon-battery-1 { + background-position: -64px -176px; +} + +.ui-icon-battery-2 { + background-position: -80px -176px; +} + +.ui-icon-battery-3 { + background-position: -96px -176px; +} + +.ui-icon-circle-plus { + background-position: 0 -192px; +} + +.ui-icon-circle-minus { + background-position: -16px -192px; +} + +.ui-icon-circle-close { + background-position: -32px -192px; +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} + +.ui-icon-circle-check { + background-position: -208px -192px; +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} -/* Interaction Cues +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} + +/* Misc visuals ----------------------------------*/ -.ui-state-disabled { cursor: default !important; } +/* Corner radius */ +.ui-corner-tl { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; +} -/* Icons -----------------------------------*/ +.ui-corner-tr { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } +.ui-corner-bl { + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ui-corner-br { + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} -/* Misc visuals -----------------------------------*/ +.ui-corner-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } +.ui-corner-bottom { + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.ui-corner-right { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} -/* -* jQuery UI CSS Framework -* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px -*/ +.ui-corner-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ui-corner-all { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } -.ui-widget-content a { color: #333333; } -.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } -.ui-widget-header a { color: #ffffff; } +/* Overlays */ +.ui-widget-overlay { + background: #666666 + url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; + opacity: .50; + filter: Alpha(Opacity = 50); +} -/* Interaction states +.ui-widget-shadow { + margin: -5px 0 0 -5px; + padding: 5px; + background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% + repeat-x; + opacity: .20; + filter: Alpha(Opacity = 20); + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} /* Resizable ----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } -.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } -.ui-widget :active { outline: none; } +.ui-resizable { + position: relative; +} -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + z-index: 99999; + display: block; +} -/* Icons -----------------------------------*/ +.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle + { + display: none; +} -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} -/* Misc visuals -----------------------------------*/ +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } -.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} -/* Overlays */ -.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } -.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* Resizable -----------------------------------*/ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Accordion +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} /* Accordion ----------------------------------*/ -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } -.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } -.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete +.ui-accordion .ui-accordion-header { + cursor: pointer; + position: relative; + margin-top: 1px; + zoom: 1; +} + +.ui-accordion .ui-accordion-li-fix { + display: inline; +} + +.ui-accordion .ui-accordion-header-active { + border-bottom: 0 !important; +} + +.ui-accordion .ui-accordion-header a { + display: block; + font-size: 1em; + padding: .5em .5em .5em .7em; +} + +.ui-accordion-icons .ui-accordion-header a { + padding-left: 2.2em; +} + +.ui-accordion .ui-accordion-header .ui-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + margin-top: -2px; + position: relative; + top: 1px; + margin-bottom: 2px; + overflow: auto; + display: none; + zoom: 1; +} + +.ui-accordion .ui-accordion-content-active { + display: block; +} /* Autocomplete ----------------------------------*/ -.ui-autocomplete { position: absolute; cursor: default; } -.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; } +.ui-autocomplete { + position: absolute; + cursor: default; +} + +.ui-autocomplete-loading { + background: white url('images/ui-anim_basic_16x16.gif') right center + no-repeat; +} /* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ +* html .ui-autocomplete { + width: 1px; +} /* without this, the menu expands to 100% in IE6 */ /* Menu ----------------------------------*/ .ui-menu { - list-style:none; + list-style: none; padding: 2px; margin: 0; - display:block; + display: block; } + .ui-menu .ui-menu { margin-top: -3px; } + .ui-menu .ui-menu-item { - margin:0; + margin: 0; padding: 0; width: 100%; } + .ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { + text-decoration: none; + display: block; + padding: .2em .4em; + line-height: 1.5; + zoom: 1; +} + +.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active + { margin: -1px; } /* Button ----------------------------------*/ +.ui-button { + display: inline-block; + position: relative; + padding: 0; + margin-right: .1em; + text-decoration: none !important; + cursor: pointer; + text-align: center; + zoom: 1; + overflow: visible; +} /* the overflow property removes extra width in IE */ +.ui-button-icon-only { + width: 2.2em; +} /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { + width: 2.4em; +} /* button elements seem to need a little more width */ +.ui-button-icons-only { + width: 3.4em; +} -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } +button.ui-button-icons-only { + width: 3.7em; +} /*button text element */ -.ui-button .ui-button-text { display: block; line-height: 1.4; } -.ui-button-text-only .ui-button-text { padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +.ui-button .ui-button-text { + display: block; + line-height: 1.4; +} + +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} + +.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text + { + padding: .4em; + text-indent: -9999999px; +} + +.ui-button-text-icon .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: .4em 1em .4em 2.1em; +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} /* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } +input.ui-button { + padding: .4em 1em; +} /*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-icon-only .ui-icon,.ui-button-text-icon .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon + { + position: absolute; + top: 50%; + margin-top: -8px; +} -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +.ui-button-text-icon .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary + { + left: .5em; +} +.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary + { + right: .5em; +} +/*button sets*/ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} +/* workarounds */ +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} /* reset extra padding in Firefox */ /* Dialog ----------------------------------*/ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } +.ui-dialog { + position: absolute; + padding: .2em; + width: 300px; + overflow: hidden; +} + +.ui-dialog .ui-dialog-titlebar { + padding: .5em 1em .3em; + position: relative; +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 16px .2em 0; +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 19px; + margin: -10px 0 0 0; + padding: 1px; + height: 18px; +} + +.ui-dialog .ui-dialog-titlebar-close span { + display: block; + margin: 1px; +} + +.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus + { + padding: 0; +} + +.ui-dialog .ui-dialog-content { + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; + zoom: 1; +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin: .5em 0 0 0; + padding: .3em 1em .5em .4em; +} + +.ui-dialog .ui-dialog-buttonpane button { + float: right; + margin: .5em .4em .5em 0; + cursor: pointer; + padding: .2em .6em .3em .6em; + line-height: 1.4em; + width: auto; + overflow: visible; +} + +.ui-dialog .ui-resizable-se { + width: 14px; + height: 14px; + right: 3px; + bottom: 3px; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} /* Slider ----------------------------------*/ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; } +.ui-slider { + position: relative; + text-align: left; +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +.ui-slider-horizontal { + height: .8em; +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} /* Tabs -----------------------------modified: Chris Barnett-----*/ -.ui-tabs { position: relative; padding: 0em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: 0em 0em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: 0em 0em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 0em 0em; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } +.ui-tabs { + position: relative; + padding: 0em; + zoom: 1; +} + /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: 0em 0em 0; +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 1px; + margin: 0 1px 0; + border-bottom: 0 !important; + padding: 0; + white-space: nowrap; +} + +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: 0em 0em; + text-decoration: none; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { + margin-bottom: 0; + padding-bottom: 1px; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a + { + cursor: text; +} + +.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a + { + cursor: pointer; +} + /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { + display: block; + border: 0; + padding: 0em 0em; + background: none; +} + +.ui-tabs .ui-tabs-hide { + display: none !important; +} /* Datepicker ----------------------------------*/ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} + +.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} + +.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover + { + top: 1px; +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} + +.ui-datepicker .ui-datepicker-next { + right: 2px; +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} + +.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span + { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} + +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} + +.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year + { + width: 49%; +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} + +.ui-datepicker td { + border: 0; + padding: 1px; +} + +.ui-datepicker td span,.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} /* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } +.ui-datepicker.ui-datepicker-multi { + width: auto; +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; +} /* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl { + direction: rtl; +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current + { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* Progressbar + display: none; /*sorry for IE5*/ + display /**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} /* Progressbar ----------------------------------*/ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file +.ui-progressbar { + height: 2em; + text-align: left; +} + +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/jquery/index.html b/geoportal_1/src/main/webapp/resources/javascript/jquery/index.html index fdc6db3..fbc5096 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/jquery/index.html +++ b/geoportal_1/src/main/webapp/resources/javascript/jquery/index.html @@ -1,12 +1,13 @@ - - - jQuery UI Example Page - - - - + + - - - + + +

      Welcome to jQuery UI!

      -

      This page demonstrates the widgets you downloaded using the theme you selected in the download builder. We've included and linked to minified versions of jQuery, your personalized copy of jQuery UI (js/jquery-ui-1.8.custom.min.js), and css/ui-lightness/jquery-ui-1.8.custom.css which imports the entire jQuery UI CSS Framework. You can choose to link a subset of the CSS Framework depending on your needs.

      -

      You've downloaded components and a theme that are compatible with jQuery 1.3+. Please make sure you are using jQuery 1.3+ in your production environment.

      - -

      YOUR COMPONENTS:

      - - -

      Accordion

      -
      -
      -

      First

      -
      Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
      -
      -
      -

      Second

      -
      Phasellus mattis tincidunt nibh.
      -
      -
      -

      Third

      -
      Nam dui erat, auctor a, dignissim quis.
      -
      +

      + This page demonstrates the widgets you downloaded using the theme you + selected in the download builder. We've included and linked to + minified versions of jQuery, your + personalized copy of jQuery + UI (js/jquery-ui-1.8.custom.min.js), and css/ui-lightness/jquery-ui-1.8.custom.css + which imports the entire jQuery UI CSS Framework. You can choose to + link a subset of the CSS Framework depending on your needs. +

      +

      You've + downloaded components and a theme that are compatible with jQuery + 1.3+. Please make sure you are using jQuery 1.3+ in your production + environment.

      + +

      YOUR + COMPONENTS:

      + + +

      Accordion

      +
      +
      +

      + First +

      +
      Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. + Lorem ipsum dolor sit amet.
      - - -

      Tabs

      -
      - -
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
      -
      Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.
      -
      Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.
      +
      +

      + Second +

      +
      Phasellus mattis tincidunt nibh.
      - - -

      Dialog

      -

      Open Dialog

      - - -

      Overlay and Shadow Classes (not currently used in UI widgets)

      -
      -

      Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit quis purus consectetur consequat.

      Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci.

      Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat.

      Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam.

      Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante.

      Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi.

      - - -
      -
      -
      -

      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

      -
      -
      - +
      +

      + Third +

      +
      Nam dui erat, auctor a, dignissim quis.
      +
      - - -
      -

      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

      -
      - - - -

      Framework Icons (content color preview)

      -
        - -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • - -
      • -
      • -
      • -
      • -
      • + +

        Tabs

        +
        + +
        Lorem ipsum dolor sit amet, consectetur + adipisicing elit, sed do eiusmod tempor incididunt ut labore et + dolore magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
        +
        Phasellus mattis tincidunt nibh. Cras orci + urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas + scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.
        +
        Nam dui erat, auctor a, dignissim quis, + sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, + sagittis et, consequat vestibulum, lacus. Mauris porttitor + ullamcorper augue.
        +
        - - -

        Slider

        -
        - - -

        Datepicker

        -
        - - -

        Progressbar

        -
        - - -

        Highlight / Error

        -
        -
        -

        - Hey! Sample ui-state-highlight style.

        -
        + +

        Dialog

        +

        + Open Dialog +

        + + +

        + Overlay and Shadow Classes (not currently used in UI widgets) +

        +
        +

        Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit + quis purus consectetur consequat.

        +

        Nam congue semper tellus. Sed erat dolor, dapibus sit amet, + venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse + scelerisque dui nec velit. Duis augue augue, gravida euismod, + vulputate ac, facilisis id, sem. Morbi in orci.

        +

        Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, + quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem + ipsum dolor sit amet, consectetur adipiscing elit. Donec libero + risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec + tortor. Donec id elit quis purus consectetur consequat.

        +

        Nam congue semper tellus. Sed erat dolor, dapibus sit amet, + venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse + scelerisque dui nec velit. Duis augue augue, gravida euismod, + vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, + pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie + scelerisque quam.

        +

        Nullam feugiat cursus lacus.orem ipsum dolor sit amet, + consectetur adipiscing elit. Donec libero risus, commodo vitae, + pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit + quis purus consectetur consequat. Nam congue semper tellus. Sed erat + dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam + ante.

        +

        Suspendisse scelerisque dui nec velit. Duis augue augue, + gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. + Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam + molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum + dolor sit amet, consectetur adipiscing elit. Donec libero risus, + commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. + Donec id elit quis purus consectetur consequat. Nam congue semper + tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices + ut, nisi.

        + + +
        +
        +
        -
        -
        -
        -

        - Alert: Sample ui-state-error style.

        +
        +
        +

        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat.

        - +
        + + + +
        +

        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut aliquip ex ea commodo consequat.

        +
        + + + +

        Framework Icons (content color preview)

        +
          + +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        • +
        • +
        • +
        • +
        + + + +

        Slider

        +
        + + +

        Datepicker

        +
        + + +

        Progressbar

        +
        + + +

        Highlight / Error

        +
        +
        +

        + Hey! + Sample ui-state-highlight style. +

        +
        +
        +
        +
        +
        +

        + Alert: + Sample ui-state-error style. +

        +
        +
        + + diff --git a/geoportal_1/src/main/webapp/resources/javascript/layerSettings.js b/geoportal_1/src/main/webapp/resources/javascript/layerSettings.js deleted file mode 100644 index e6d7637..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/layerSettings.js +++ /dev/null @@ -1,242 +0,0 @@ -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} -/*org.OpenGeoPortal.LayerSettings -* object to hold display setting info, where it exists (opacity, etc.) -*/ -org.OpenGeoPortal.LayerSettings = function(){ - var settings = {}; - var that = this; - this.getGenericDefaults = function(){ - return {"preview": "off", "inCart": false, "dataType": "", "wmsName": ""}; - }; - this.getPointDefaults = function(){ - return {"getFeature": false, "color": "#ff0000", "opacity": 100, "graphicWidth": 2, "sld": ""}; - }; - this.getLineDefaults = function(){ - return {"getFeature": false, "color": "#0000ff", "opacity": 100, "graphicWidth": 1, "sld": ""}; - }; - this.getPolygonDefaults = function(){ - return {"getFeature": false, "color": "#aaaaaa", "opacity": 80, "graphicWidth": 1, "sld": ""}; - }; - this.getRasterDefaults = function(){ - return {"opacity": 100}; - }; - - this.layerStateDefined = function(layerID){ - if (typeof settings[layerID] == 'undefined'){ - return false; - } else { - return true; - } - }; - - this.addNewLayer = function(layerID, params){ - var dataType = params.dataType; - - if ((typeof dataType == 'undefined')||(dataType == '')){ - throw new Error("dataType (Point, Line, Polygon, or Raster) must be specified to create a new layer."); - } - if (this.layerStateDefined(layerID)){ - throw new Error("org.OpenGeoPortal.LayerState.addNewLayer: This layer already exists."); - } - settings[layerID] = this.getGenericDefaults(); - settings[layerID].dataType = dataType; - var typeSpecificDefaults = {}; - switch(dataType){ - case "Point": - typeSpecificDefaults = this.getPointDefaults(); - break; - case "Line": - typeSpecificDefaults = this.getLineDefaults(); - break; - case "Polygon": - typeSpecificDefaults = this.getPolygonDefaults(); - break; - case "Raster": - case "Paper Map": - case "LibraryRecord": - typeSpecificDefaults = this.getRasterDefaults(); - break; - }; - for (var key in typeSpecificDefaults){ - settings[layerID][key] = typeSpecificDefaults[key]; - } - for (var key in params){ - settings[layerID][key] = params[key]; - } - }; - - this.allLayersByParam = function(key, value){ - var layers = new Array(); - for (var layer in settings){ - if (settings[layer][key] == value){ - layers.push(layer); - } - } - return layers; - }; - - this.getState = function(layerID, key){ - //this checks to see if a layer has a particular value for a particular parameter, returns true or false - //if state info exists for the layer, key & value are matched against that value - //otherwise, it is matched against defaults... - for (var layer in settings){ - if (layer == layerID){ - if (typeof settings[layer][key] == 'undefined'){ - return null; - //throw new Error("The given parameter\"" + key + "\" is not valid for the layer \"" + layer + "\"."); - } else { - return settings[layer][key]; - } - } - } - //no layer info set....check defaults - if (typeof this.getGenericDefaults()[key] == 'undefined'){ - //what can we do in this case, w/out dataType info? - throw new Error("org.OpenGeoPortal.LayerSettings.getState(): Requested Parameter\"" + key +"\":State information for the layer has not been set and the default cannot be determined without a Data Type (Point, Line, Polygon, Raster, Paper Map)"); - } else { - return this.getGenericDefaults()[key]; - } - - }; - - this.setState = function(layerID, updateObj){ - var sync = false; - //if the layer has no state info, try to add it (dataType must be in updateObj to succeed) - if (typeof settings[layerID] == 'undefined'){ - this.addNewLayer(layerID, updateObj); - } - for (var key in updateObj){ - var currentValue = settings[layerID][key]; - if (updateObj[key] != currentValue){ - //state has changed - settings[layerID][key] = updateObj[key]; - sync = true; - }; - } - updateObj.layerID = layerID; - //if state has changed, propogate the change - if (sync){ - syncUi(updateObj); - } - }; - - this.getImage = function(imageName){ - return org.OpenGeoPortal.Utility.ImageLocation + imageName; - }; - - this.resetState = function(columnName){ - if (columnName == 'all'){ - settings = {}; - } else { - for (var layer in settings){ - if (typeof this.getGenericDefaults()[columnName] != 'undefined'){ - settings[layer][columnName] = this.getGenericDefaults()[columnName]; - } else { - var dataType = settings[layer]["dataType"]; - switch(dataType){ - case "Point": - settings[layer][columnName] = this.getPointDefaults()[columnName]; - break; - case "Line": - settings[layer][columnName] = this.getLineDefaults()[columnName]; - break; - case "Polygon": - settings[layer][columnName] = this.getPolygonDefaults()[columnName]; - break; - case "Raster": - case "Paper Map": - case "LibraryRecords": - settings[layer][columnName] = this.getRasterDefaults()[columnName]; - break; - }; - } - } - } - }; - - var syncUi = function (updateObj){ - //console.log('syncUi'); - //return true; - for (var key in updateObj){ - switch(key){ - case "preview": - //this needs to check or uncheck a checkbox in another table - //the checkbox itself will hold state in the current table - jQuery('.colPreview').each(function(){ - if (this.tagName == 'TD'){ - var tableObj = jQuery(this).closest('table.display'); - var dataTableObj = tableObj.dataTable(); - var aData = dataTableObj.fnGetData(this.parentNode); - var layerID = aData[org.OpenGeoPortal.resultsTableObj.tableHeadingsObj.getColumnIndex("LayerId")]; - if (layerID == updateObj.layerID){ - if (updateObj.preview == 'on'){ - jQuery(this).find("input").attr("checked", true); - } else if (updateObj.preview == 'off'){ - jQuery(this).find("input").attr("checked", false); - } - //clauses for login and external needed - } - } - }); - break; - case "opacity": - var stateVal = that.getState(updateObj.layerID, "opacity"); - var escapedLayerID = org.OpenGeoPortal.Utility.idEscape(updateObj.layerID); - - jQuery('#opacitysearchResults' + escapedLayerID).slider("value", stateVal); - jQuery('#opacitysavedLayers' + escapedLayerID).slider("value", stateVal); - break; - case "color": - break; - //since we are wiping state when we click getFeature, I think - //we only need to sync icons for expanded rows. register events? - case "getFeature": - if (org.OpenGeoPortal.map.currentAttributeRequest){ - org.OpenGeoPortal.map.currentAttributeRequest.abort(); - } - var stateVal = that.getState(updateObj.layerID, "getFeature"); - var layer = org.OpenGeoPortal.map.getLayersByName(updateObj.layerID)[0]; - var escapedLayerID = org.OpenGeoPortal.Utility.idEscape(updateObj.layerID); - if (stateVal === true){ - var mapLayers = org.OpenGeoPortal.map.layers; - for (var i in mapLayers){ - var currentLayer = mapLayers[i]; - if ((currentLayer.CLASS_NAME != 'OpenLayers.Layer.Google')&& - (currentLayer.name != 'OpenStreetMap')&& - (currentLayer.CLASS_NAME != 'OpenLayers.Layer.Vector')&& - (currentLayer.name != updateObj.layerID)){ - that.setState(currentLayer.name, {"getFeature": false}); - } else { - continue; - } - } - jQuery('.attributeInfoControl').filter('[id$="' + escapedLayerID + '"]').attr("src", that.getImage("preview_down.gif")); - org.OpenGeoPortal.map.events.register("click", layer, org.OpenGeoPortal.map.wmsGetFeature); - jQuery(document).trigger("getFeatureActivated"); - //console.log(["register layer:", layer]); - org.OpenGeoPortal.map.getControlsByClass("OpenLayers.Control.ZoomBox")[0].deactivate(); - org.OpenGeoPortal.map.getControlsByClass("OpenLayers.Control.Navigation")[0].deactivate(); - jQuery('.olMap').css('cursor', "crosshair"); - } else { - jQuery('.attributeInfoControl').filter('[id$="' + escapedLayerID + '"]').attr("src", that.getImage("preview.gif")); - org.OpenGeoPortal.map.events.unregister("click", layer, org.OpenGeoPortal.map.wmsGetFeature); - - } - break; - default: - break; - } - } - }; -}; diff --git a/geoportal_1/src/main/webapp/resources/javascript/layerTable.js b/geoportal_1/src/main/webapp/resources/javascript/layerTable.js deleted file mode 100644 index 3fdbfae..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/layerTable.js +++ /dev/null @@ -1,2421 +0,0 @@ -/** - * This javascript module includes functions for dealing with the search - * results table under the object LayerTable. LayerTable uses the excellent - * jQuery-based dataTables as the basis for the table. - * - * @author Chris Barnett - * - */ -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -/** - * LayerTable constructor - * this object defines the behavior of the search results table, as well as the saved layers table - * - * @param userDiv the id of the div element to place the table in - * @param tableName the id of the actual table element - */ -org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ - - var analytics = new org.OpenGeoPortal.Analytics(); - - //set default for the name of the table div...these defaults should not be in the generic layertable code - //but in the extensions of the object - if ((typeof userDiv == 'undefined')||(userDiv.length === 0)){ - userDiv = 'resultsTable'; - } - - if ((typeof tableName == 'undefined')||(tableName.length === 0)){ - tableName = 'searchResults'; - } - var that = this; - - this.getTableDiv = function(){ - return userDiv; - }; - //this.tableDiv = userDiv; - this.getTableID = function(){ - return tableName; - }; - - this.getTableObj = function(){ - return jQuery('#' + tableName).dataTable(); - }; - - this.tableHeadingsObj = new org.OpenGeoPortal.LayerTable.TableHeadings(this); - //temporary? - var tableHeadings = this.tableHeadingsObj.getTableHeadings(); - - this.tableLayerState = new org.OpenGeoPortal.LayerTable.TableLayerState(); - this.getImage = function(imageName){ - return org.OpenGeoPortal.Utility.getImage(imageName); - }; - /*private methods - * - */ - //maintains state for how the table is sorted - //*******Search Results only - this.tableOrganize = { - //set some defaults - settings: {"organizeBy": "score", "organizeType": "numeric", "organizeDirection": "desc"}, - //we only need organizetype if there is more than one possibility per column - //get the current sort state - getState: function(){ - return this.settings; - }, - - //set the state - setState: function(updateObj){//can't directly set organizeType; this will be looked up in tableHeading - //test to see if the state is changed; if so, fire new solr search - var innerThat = this; - compareState = function(key){ - if (updateObj[key] == innerThat.settings[key]){ - return true; - } else { - return false; - } - }; - setSortColumn = function(){ - //test for rank first - var newColumn = updateObj.organizeBy; - - analytics.track("Change Results Sort Order", newColumn); - - if (newColumn == 'score'){ - innerThat.settings.organizeBy = newColumn; - innerThat.settings.organizeType = "numeric"; - } else { - for (var columnName in tableHeadings){ - if (newColumn == columnName){ - var newOrganize = columnName.organize; - if (newOrganize){ - throw new Error("This column cannot be organized."); //you can't organize this column - } else { - innerThat.settings.organizeBy = newColumn; - innerThat.settings.organizeType = newOrganize; - return; - } - } - } - throw new Error("The specified column name does not exist."); //if it gets here, this means that there was no matching column name in tableHeadings - } - }; - - setSortDirection = function(){ - if (typeof updateObj.organizeDirection == 'undefined'){ - updateObj.organizeDirection = innerThat.settings.organizeDirection; - } - if ((updateObj.organizeDirection == 'asc')||(updateObj.organizeDirection == 'desc')){ - innerThat.settings.organizeDirection = updateObj.organizeDirection; - } else { - throw new Error("The specified sort direction is invalid for this column."); //invalid organize direction type - } - }; - - if (typeof updateObj.organizeBy == 'undefined'){ - if (typeof updateObj.organizeDirection == 'undefined'){ - //these values can't both be unspecified - throw new Error("Must specify a column and/or direction."); - } else { - //set organizeBy to current value, continue processing - updateObj.organizeBy = innerThat.settings.organizeBy; - setSortColumn(); - setSortDirection(); - that.searchRequest(0); - org.OpenGeoPortal.ui.updateSortMenu(); - } - } else if (compareState('organizeBy')){ - if (compareState('organizeDirection')){ - //don't do anything...the object hasn't changed exit function - return; - } else { - setSortDirection(); - that.searchRequest(0); - org.OpenGeoPortal.ui.updateSortMenu(); - } - } else { - setSortColumn(); - setSortDirection(); - that.searchRequest(0); - org.OpenGeoPortal.ui.updateSortMenu(); - } - } - }; - //wrap the content of each table cell in a div so we can control the size - this.wrapCells = function(){ - var tableName = that.getTableID(); - jQuery('#' + tableName + ' td').add('#' + tableName + ' th').each(function (iPosition, Element){ - //reference the column, so we can set the width of each div - var tableCell = jQuery(this); - if (!tableCell.children().first().is("div")){ - tableCell.wrapInner('
        '); - } - }); - that.sizeCells(); - }; - //dynamically size the table depending on visible columns & the width of the container - this.sizeCells = function(){ - //determine which fields are showing, set widths from header object - //if they add up to the total width, we're done. otherwise we need to adjust - //we need to maintain minimum widths - var currentTab = org.OpenGeoPortal.Utility.whichTab(); - var tableID = this.getTableID(); - var adjustObj; - - if (!currentTab.tableObject){ - return; - } - if (currentTab.tableName != tableID){ - return; - } - var totalWidth = jQuery('#left_col').width(); - var arrColumns = this.getVisibleColumns(); - totalWidth = totalWidth - (arrColumns.length * 7) + 1;//account for cell padding plus right borders of cells, leftmost border - //var divWidth = totalWidth; - var arrSizable = new Array(); - var sizableWidth = 0; - var headingsObj = this.tableHeadingsObj; - for (var i in arrColumns){ - var currentColumn = arrColumns[i]; - var currentWidth = headingsObj.getWidth(currentColumn); - if (headingsObj.getValue(currentColumn, "resizable")){ - sizableWidth += currentWidth; - arrSizable.push(currentColumn); - } else { - var fixedColumnWidth = parseFloat(currentWidth); - totalWidth = totalWidth - fixedColumnWidth; - } - } - var numberSizable = arrSizable.length; - if (numberSizable == 0){ - return;//we're done. exit the function - } - //working here.... - if (numberSizable == 1){ - var currentClass = headingsObj.getValue(arrSizable[0], "sClass"); - var currentMinWidth = headingsObj.getValue(arrSizable[0], "minWidth"); - if (totalWidth >= currentMinWidth){ - jQuery('#' + tableID + ' .' + currentClass + ' > div').width(totalWidth); - } else { - //debugging - this.removeExtraColumn(); - //alert('remaining width is less than the minWidth for the column (sizable = 1)'); - //what can we do here? I think we have to remove columns to make things fit. - //this will fail to adjust columns properly if the visible resizable column is not - //removed by the above function - } - //should also update the currentWidth; - headingsObj.setWidth(arrSizable[0], totalWidth); - return;//we're done. exit the function - } - - //following is executed if numberSizable is > 1 - //determine if the total width currently set for the sizable columns is equal to the - //width available on the page. - var remainingWidth = totalWidth - sizableWidth; - if (remainingWidth == 0){ - //set columns to currentWidth values - for (var j in arrSizable){ - var currentSizable = arrSizable[j]; - //var currentMinWidth = headingsObj.getValue(currentSizable, "minWidth"); - var currentWidth = headingsObj.getValue(currentSizable, "currentWidth"); - var currentClass = headingsObj.getValue(currentSizable, "sClass"); - jQuery('#' + tableID + ' .' + currentClass + ' > div').width(currentWidth); - //since setWidth cannot set a 'currentWidth' smaller than 'minWidth', we - //should be ok not comparing with 'minWidth' here - headingsObj.setWidth(currentSizable, currentWidth); - }; - } else { - //split the difference between columns and add to each currentWidth, taking care not to go below minWidth - var remainder = remainingWidth % numberSizable; - // widthDifference * numberSizable will always be <= remainingWidth - var widthDifference = Math.floor(remainingWidth / numberSizable); - var propagate = 0;//we need this variable outside the loop. - var adjustArr = []; - for (var j in arrSizable){ - var currentSizable = arrSizable[j]; - var currentMinWidth = headingsObj.getValue(currentSizable, "minWidth"); - var currentWidth = headingsObj.getValue(currentSizable, "currentWidth") + widthDifference - propagate; - var currentClass = headingsObj.getValue(currentSizable, "sClass"); - //we only want to apply the remainder to the first field if possible - if (remainder > 0){ - currentWidth++; - remainder--; - } - if (currentWidth >= currentMinWidth){ - adjustObj = {}; - adjustObj.sClass = currentClass; - adjustObj.availableWidth = currentWidth - currentMinWidth; - adjustObj.currentWidth = currentWidth; - adjustObj.currentSizable = currentSizable; - adjustArr.push(adjustObj); - jQuery('#' + tableID + ' .' + currentClass + ' > div').width(currentWidth); - headingsObj.setWidth(currentSizable, currentWidth); - propagate = 0; - } else { - //if we set the column to the currentMinWidth, we have to propagate the difference to - //another column. - propagate = currentMinWidth - currentWidth; - jQuery('#' + tableID + ' .' + currentClass + ' > div').width(currentMinWidth); - headingsObj.setWidth(currentSizable, currentMinWidth); - } - }; - while (propagate > 0){ - //in this case, we need to start taking width from earlier columns - if (adjustArr.length > 0){ - for (var k in adjustArr){ - var currentAdjust = adjustArr[k]; - //compare the value of propagate with the value of currentAdjust.availableWidth - var adjustDelta = propagate - currentAdjust.availableWidth; - if (adjustDelta <= 0){ - jQuery('#' + tableID + ' .' + currentAdjust.sClass + ' > div').width(currentAdjust.currentWidth - propagate); - headingsObj.setWidth(adjustObj.currentSizable, currentAdjust.currentWidth - propagate); - return; //we're done - } else { - jQuery('#' + tableID + ' .' + currentAdjust.sClass + ' > div').width(currentAdjust.currentWidth - currentAdjust.availableWidth); - headingsObj.setWidth(adjustObj.currentSizable, currentAdjust.currentWidth - currentAdjust.availableWidth); - propagate = adjustDelta; - } - } - } else { - //if propagate is still > 0 when all columns are at minWidth, we have to remove a column from display - this.removeExtraColumn(); - return; //avoid possible infinite loop - } - } - } - //totalWidth must be shared between all visible columns - }; - - //html content/formatting for expanded row - this.formatDetails = function(rowNode){ - var tableID = this.getTableID(); - var tableObj = this.getTableObj(); - var rowData = tableObj.fnGetData(rowNode); - //layerIDs returned from the search are used as OpenLayers layer names - var layerID = rowData[this.tableHeadingsObj.getColumnIndex("LayerId")]; - var dataType = rowData[this.tableHeadingsObj.getColumnIndex("DataType")]; - var displayName = org.OpenGeoPortal.Utility.escapeQuotes(rowData[this.tableHeadingsObj.getColumnIndex("LayerDisplayName")]); - var extent = []; - extent.push(rowData[this.tableHeadingsObj.getColumnIndex("MinX")]); - extent.push(rowData[this.tableHeadingsObj.getColumnIndex("MinY")]); - extent.push(rowData[this.tableHeadingsObj.getColumnIndex("MaxX")]); - extent.push(rowData[this.tableHeadingsObj.getColumnIndex("MaxY")]); - var sOut = '
        '; - //read state - if (!org.OpenGeoPortal.layerState.layerStateDefined(layerID)){ - org.OpenGeoPortal.layerState.addNewLayer(layerID, {"dataType": dataType}); - } - - var opacityVal = org.OpenGeoPortal.layerState.getState(layerID, "opacity") + '%'; - - sOut += '
        '; - sOut += '
        opacity: '; - sOut += '
        ' + opacityVal + '
        '; - sOut += ''; - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - if ((dataType == "Raster")||(dataType == "Paper Map")||(dataType == "LibraryRecord")){ - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - sOut += '
        Zoom to geographic extent of layer
        '; - sOut += '
        '; - sOut += '
        '; - } else { - var attributeToolImg; - if (org.OpenGeoPortal.layerState.getState(layerID, "getFeature")){ - attributeToolImg = this.getImage("preview_down.gif"); - } else { - attributeToolImg = this.getImage("preview.gif"); - } - var sizeVal = org.OpenGeoPortal.layerState.getState(layerID, "graphicWidth") + 'px'; - - sOut += '
        '; - sOut += '
        '; - switch (dataType){ - case "Polygon": - sOut += "border: "; - break; - case "Point": - sOut += "pt size: "; - break; - case "Line": - sOut += "ln width: "; - break; - } - sOut += '
        ' + sizeVal + '
        '; - sOut += ''; - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - //sOut += ''; - sOut += '
        '; - sOut += '
        '; - sOut += '
        Zoom to geographic extent of layer
        '; - sOut += '
        '; - sOut += 'Show Attributes
        '; - } - - sOut += '
        '; - - return sOut; - }; - - this.selectPreviewedRow = function(){ - var tableName = this.getTableID(); - jQuery(document).on("click", '#' + tableName + ' td.colPreview > div > input:checkbox', function(event) { - var rowObj = jQuery(event.target).closest("tr"); - if (jQuery(event.target).is(":checked")){ - rowObj.addClass('previewedLayer'); - if (rowObj.next().children('td').hasClass('resultsControls')){ - rowObj.next().addClass('previewedLayer'); - } - } else { - rowObj.removeClass('previewedLayer'); - if (rowObj.next().children('td').hasClass('resultsControls')){ - rowObj.next().removeClass('previewedLayer'); - } - } - - }); - }; - - //adds class to row for highlighting current row - this.highlightRow = function(){ - var tableName = this.getTableID(); - jQuery(document).on("mouseout", '#' + tableName + ' > tbody', function(event) { - var currentNode = jQuery(event.target).parentsUntil('#' + tableName).last(); - jQuery(currentNode).children().removeClass('row_selected'); - org.OpenGeoPortal.map.hideLayerBBox(); - }); - - var tableObj = this.getTableObj(); - var tableHeadingsObj = this.tableHeadingsObj; - jQuery(document).on("mouseover", '#' + tableName + ' > tbody', function(event) { - var rowObj = jQuery(event.target).parentsUntil('#' + tableName + ' > tbody').last(); - rowObj.addClass('row_selected'); - if (rowObj.children('td').hasClass('resultsControls')){ - rowObj.prev().addClass('row_selected'); - } - if (rowObj.next().children('td').hasClass('resultsControls')){ - rowObj.next().addClass('row_selected'); - } - //if next sibling is details row, then add class 'row_selected' to it as well - //set first tr ancestor to class row_selected - var aData = tableObj.fnGetData(rowObj[0]); - //console.log(aData); - if (aData == null){ - rowObj = rowObj.prev(); - aData = tableObj.fnGetData(rowObj[0]); - } - var bbox = {}; - bbox.south = aData[tableHeadingsObj.getColumnIndex("MinY")]; - bbox.north = aData[tableHeadingsObj.getColumnIndex("MaxY")]; - bbox.west = aData[tableHeadingsObj.getColumnIndex("MinX")]; - bbox.east = aData[tableHeadingsObj.getColumnIndex("MaxX")]; - org.OpenGeoPortal.map.showLayerBBox(bbox); - }); - }; - - this.downloadActionSelectRow = function(rowPosition, isSelected){ - var selectionClass; - if (isSelected){ - selectionClass = 'downloadSelection'; - } else { - selectionClass = 'downloadUnselection'; - } - var tableObj = this.getTableObj(); - //var tableHeadingsObj = this.tableHeadingsObj; - var rowObj = jQuery(tableObj.fnGetNodes(rowPosition)); - rowObj.addClass(selectionClass); - - if (rowObj.next().children('td').hasClass('resultsControls')){ - rowObj.next().addClass(selectionClass); - } - //if next sibling is details row, then add class 'row_selected' to it as well - //set first tr ancestor to class row_selected - /*var aData = tableObj.fnGetData(rowObj[0]); - //console.log(aData); - if (aData == null){ - rowObj = rowObj.prev(); - aData = tableObj.fnGetData(rowObj[0]); - } - var bbox = {}; - bbox.south = aData[tableHeadingsObj.getColumnIndex("MinY")]; - bbox.north = aData[tableHeadingsObj.getColumnIndex("MaxY")]; - bbox.west = aData[tableHeadingsObj.getColumnIndex("MinX")]; - bbox.east = aData[tableHeadingsObj.getColumnIndex("MaxX")]; - org.OpenGeoPortal.map.showLayerBBox(bbox); - */ - }; - - this.getLayerIdFromRow = function(rowObj){ - return rowObj.aData[that.tableHeadingsObj.getColumnIndex('LayerId')]; - }; - - this.toolBarState = function(rowNode){ - if (rowNode.next().children('td').hasClass('resultsControls')){ - return true; - } else { - return false; - } - }; - //click-handler to expand row, expose preview controls - this.expandableRow = function(thisObj){ - //debug - try{ - //set the previewCount variable, so we know that a layer has been expanded before - if (typeof org.OpenGeoPortal.layerState.previewCount == "undefined"){ - org.OpenGeoPortal.layerState.previewCount = true; - } - var rowNode = jQuery(thisObj).closest('tr'); - - //test here to see if the next row is a tools row....then we can deal - //with this properly - - var isOpen = this.toolBarState(rowNode); - var detailsOpen = this.getImage("arrow_down.png"); - var detailsClosed = this.getImage("arrow_right.png"); - //this should do the right thing if the layerState for 'expanded' and the row icon - //don't match - var graphicsState = jQuery(thisObj).attr('src'); - if (graphicsState == detailsClosed){ - /* Open this row */ - this.openRow(rowNode[0]); - } else if (graphicsState == detailsOpen){ - //if layerExpanded is true and tools are open - if (isOpen){ - /* This row is already open - close it */ - this.closeToolBar(rowNode[0]); - } else { - /* Open this row */ - this.openRow(rowNode[0]); - } - - } - //debug - } catch(err){alert(err + " expandableRow");}; - }; - - this.closeToolBar = function(rowNode){ - try{ - var detailsClosed = this.getImage("arrow_right.png"); - jQuery(rowNode).find(".colExpand img").attr('src', detailsClosed); - var tableObj = this.getTableObj(); - var tableID = this.getTableID(); - tableObj.fnClose(rowNode); - var layerID = tableObj.fnGetData(rowNode)[this.tableHeadingsObj.getColumnIndex("LayerId")]; - - if (this.tableLayerState.getState(layerID, "expanded")){ - this.tableLayerState.setState(layerID, {"expanded": false}); - } - - if (tableID != 'savedLayers'){ - this.setTableLength(); - } - jQuery(".previewedLayer").removeClass('previewSeparator'); - jQuery(".previewedLayer").last().addClass('previewSeparator'); - tableObj.fnDraw(false); - } catch(err){alert(err + " closeToolBar");}; - }; - - this.openRow = function(rowNode){ - try{ - /* Open this row */ - var detailsOpen = this.getImage("arrow_down.png"); - jQuery(rowNode).find(".colExpand img").attr('src', detailsOpen); - - var tableObj = this.getTableObj(); - var tableID = this.getTableID(); - var layerID = tableObj.fnGetData(rowNode)[this.tableHeadingsObj.getColumnIndex("LayerId")]; - var escapedLayerID = org.OpenGeoPortal.Utility.idEscape(layerID); - - tableObj.fnOpen(rowNode, this.formatDetails(rowNode), 'resultsControls'); - - var dataType = tableObj.fnGetData(rowNode)[this.tableHeadingsObj.getColumnIndex("DataType")]; - //console.log(dataType); - if (!org.OpenGeoPortal.layerState.layerStateDefined(layerID)){ - org.OpenGeoPortal.layerState.addNewLayer(layerID, {"dataType": dataType}); - } - - if (!this.tableLayerState.getState(layerID, "expanded")){ - this.tableLayerState.setState(layerID, {"expanded": true}); - } - - if (tableID != 'savedLayers'){ - this.setTableLength(); - } - if ((dataType == "Raster")||(dataType =="Paper Map")||(dataType == "LibraryRecord")){ - //return; - } else { - var minSize = 1; - var maxSize = 6; - if (dataType == "Polygon"){ - minSize = 0; - maxSize = 5; - } - - //trigger an event? - if (jQuery(".colorPalette").length == 0){ - setTimeout("org.OpenGeoPortal.ui.setPaletteColor(" + layerID + ")",250); - } - org.OpenGeoPortal.ui.setPaletteColor(layerID); - - var sizeControl = jQuery("div.sizeControl"); - sizeControl.each(function(){ - jQuery(this).parent().hover(function(){org.OpenGeoPortal.ui.openControl(this);}, function(){org.OpenGeoPortal.ui.closeControl(this);}); - }); - - var widthVal = org.OpenGeoPortal.layerState.getState(layerID, "graphicWidth"); - jQuery("#size" + tableID + escapedLayerID).slider({ - min: minSize, - max: maxSize, - step: 1, - value: widthVal, //get value from Layer State object - slide: function(event, ui) { - jQuery('#sizeText' + tableID + escapedLayerID).text(ui.value + 'px'); - }, - stop: function(event, ui){ - org.OpenGeoPortal.layerState.setState(layerID, {"graphicWidth": ui.value}); - for (var i in org.OpenGeoPortal.map.getLayersByName(layerID)){ - org.OpenGeoPortal.map.changeStyle(layerID, dataType); - } - } - }); - } - var opacityControl = jQuery("div.opacityControl"); - opacityControl.each(function(){ - jQuery(this).parent().hover(function(){org.OpenGeoPortal.ui.openControl(this);}, function(){org.OpenGeoPortal.ui.closeControl(this);}); - }); - //retrieve opacity if it has been defined - //opacity control ID must also reference the tablename - var opacityVal = org.OpenGeoPortal.layerState.getState(layerID, "opacity"); - - jQuery("#opacity" + tableID + escapedLayerID).slider({ - min: 0, - max: 100, - step: 5, - value: opacityVal, //get value from Layer State object - slide: function(event, ui) { - jQuery('#opacityText' + tableID + escapedLayerID).text(ui.value + '%'); - //console.log(layerID); - for (var i in org.OpenGeoPortal.map.getLayersByName(layerID)){ - org.OpenGeoPortal.map.getLayersByName(layerID)[0].setOpacity(ui.value * .01); - //console.log(org.OpenGeoPortal.map.getLayersByName(layerID)[0]); - }}, - stop: function(event, ui){ - org.OpenGeoPortal.layerState.setState(layerID, {"opacity": ui.value}); - } - }); - if (jQuery(rowNode).hasClass("previewedLayer")){ - jQuery(rowNode).next().addClass("previewedLayer"); - } - if (jQuery(rowNode).hasClass("row_selected")){ - jQuery(rowNode).next().addClass("row_selected"); - } - - jQuery(".previewedLayer").removeClass('previewSeparator'); - jQuery(".previewedLayer").last().addClass('previewSeparator'); - tableObj.fnDraw(false); - - } catch(err){alert(err + " openRow");}; - }; - - - // handles jsonp response from request for metadata call - this.showMetadataJsonpSuccess = function(data) - { - var solrResponse = data["response"]; - var totalResults = solrResponse["numFound"]; - if (totalResults != 1) - { - throw new Error("Request for Metadata returned " + totalResults +". Exactly 1 was expected."); - return; - } - var doc = solrResponse["docs"][0]; // get the first layer object - var metadataRawText = doc["FgdcText"]; - var layerId = doc["LayerId"];//[0]; - var metadataDocument = jQuery.parseXML(metadataRawText); - - var xsl = null; - var xslUrl = null; - - if (metadataDocument.firstChild.localName == "MD_Metadata"){ - xslUrl = "isoBasic.xsl"; - } else { - xslUrl = "FGDC_V2_a.xsl"; - } - xslUrl = "resources/xml/" + xslUrl; - var params = { - url: xslUrl, - async: false, - dataType: 'xml', - success: function(data){xsl = data;} - }; - jQuery.ajax(params); - var resultDocument = ""; - if (xsl != null){ - if (jQuery.browser.msie){ - resultDocument = metadataDocument.transformNode(xsl); - } else { - var xsltProcessor = new XSLTProcessor(); - xsltProcessor.importStylesheet(xsl); - resultDocument = xsltProcessor.transformToFragment(metadataDocument, window.document); - } - } - if (typeof jQuery('#metadataDialog')[0] == 'undefined'){ - var dialogDiv = '
        \n'; - dialogDiv += '
        \n'; - jQuery('body').append(dialogDiv); - } - var dialogHeight = 400; - var metadataTemplate = '
        ' + layerId + '
        '; - var metadataDialog = jQuery("#metadataDialog"); - metadataDialog.html(metadataTemplate) - jQuery("#metadataContent").html(resultDocument); - - metadataDialog.dialog({ zIndex: 9999, width: 630, height: dialogHeight, title: "
        METADATA
        " }); - if (jQuery("#metadataDownloadButton").length == 0){ - var downloadButton = 'Download Metadata (XML)'; - metadataDialog.parent().find(".ui-dialog-titlebar").first().prepend(downloadButton); - } - var metadataContent = jQuery("#metadataContent"); - metadataContent[0].scrollTop = 0; - metadataDialog.dialog("open"); - metadataContent.find("a").click(function(event){ - var toID = jQuery(this).attr("href"); - if (toID.indexOf("#") == 0){ - event.preventDefault(); - //parse the hrefs for the anchors in this DOM element into toID - //current xsl uses names instead of ids; yuck - toID = toID.substring(1); - metadataContent.scrollTo(jQuery('[name="' + toID + '"]')); - } - }); - jQuery("#metadataDownloadButton").unbind(); - var iframeSource = "getMetadata/download?id=" + layerId; - var downloadFunction = function(){ - if (typeof jQuery('#metadataDownloadIframe')[0] == 'undefined'){ - var downloadIframe = ''; + } + + dialogContent = dialogContent + + '
        '; + + return dialogContent; + }, + + // retrieve user entered values, generate https request and set + // login flag + + // some special processing is included for running on localhost + processFormLogin : function(deferred) { + var that = this; + var url = this.model.get("authUrl"); + // var url = this.authenticationPage; + var username = jQuery("#loginFormUsername").val(); + var password = jQuery("#loginFormPassword").val(); + var ajaxArgs = { + type : "POST", + url : url, + context : that, + crossDomain : true, + xhrFields : { + withCredentials : true + }, + data : { + "username" : username, + "password" : password + }, + dataType : "json", + + success : function(data) { + that.model.set(data); + if (that.model.get("authenticated")) { + // console.log("resolve"); + deferred.resolve(); + } + + if (typeof data.message !== "undefined" + && data.message !== null) { + that.showLoginMessage(data.message); + } + }, + + error : that.loginResponseError + }; + return jQuery.ajax(ajaxArgs); + + }, + + showLoginMessage : function(passedMessage) { + if (passedMessage.length > 0) { + jQuery("#loginDialog .warning").text(passedMessage); + } + }, + + processIframeLogin : function(deferred) { + var that = this; + // IE uses "onmessage" instead of "message" + var eventMethod = window.addEventListener ? "addEventListener" + : "attachEvent"; + var messageEvent = eventMethod == "attachEvent" ? "onmessage" + : "message"; + jQuery(window).on(messageEvent, function(e) { + that.model.set(jQuery.parseJSON(e.originalEvent.data)); + if (that.model.get("authenticated")) { + deferred.resolve(); + } else { + deferred.fail(); + } + }); + + }, + + loginResponseError : function(data) { + + this.showLoginMessage("Error communicating with login server."); + }, + // callback handler invoked with response to authenticate server + // call + // sets the userId variable to hold the id of the logged in user + processLoginState : function(model) { + if (model.get("authenticated")) { + + // console.log("authchanged true"); + jQuery("#headerLogin").text("Logout"); + + jQuery("#loginDialog").dialog('close'); + jQuery(".loginButton").trigger("loginSucceeded"); + + } else { + jQuery("#headerLogin").text("Login"); + // console.log("authchanged false"); + jQuery(".previewControl").trigger("logoutSucceeded"); + + } + } + + }); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/main.js b/geoportal_1/src/main/webapp/resources/javascript/lib/main.js new file mode 100644 index 0000000..e9ea80d --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/main.js @@ -0,0 +1,90 @@ +/* This javascript module creates all the global objects, namespaces them + * It is the main function of the OGP application + * + * author: Chris Barnett + * + */ + +if (typeof OpenGeoportal == 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal != "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +jQuery(document) + .ready( + function() { + + // ogp will hold instances + OpenGeoportal.ogp = {}; + var ogp = OpenGeoportal.ogp; // an alias + + ogp.template = new OpenGeoportal.Template(); + ogp.controls = new OpenGeoportal.CommonControls(); + ogp.controls.setTemplate(ogp.template); + + // holds and initializes app-wide settings + ogp.appState = new OpenGeoportal.Models.OgpSettings({ + queryTerms : new OpenGeoportal.Models.QueryTerms(), + previewed : new OpenGeoportal.PreviewedLayers(), + cart : new OpenGeoportal.CartCollection(), + login : new OpenGeoportal.Views.Login({ + model : new OpenGeoportal.Models.User() + }), + requestQueue: new OpenGeoportal.RequestQueue(), + currentTab : 0 + }); + + + + // handles behavior of "frame elements", like expansion of + // advanced search area, left panel + ogp.ui = new OpenGeoportal.UserInterface(); + ogp.ui.init(); + + // create the map and handle map related functions + ogp.map = new OpenGeoportal.MapController(); + ogp.map.initMap("map"); + + // creating the cart + new OpenGeoportal.Views.CartHeader({ + collection: ogp.appState.get("cart"), + el: $("#cartHeader") + }); + ogp.cartView = new OpenGeoportal.Views.CartTable({ + collection : ogp.appState.get("cart"), + el : $("#cart") + }); + + jQuery(document) + .on( + "mapReady", + function() { + // wait to do this until the base map is + // ready + // (createMap could instead return a + // promise that is fullfilled when the + // map is loaded) + + // The collection that holds search + // results + ogp.results = new OpenGeoportal.ResultCollection(); + + // The search results table + ogp.resultsTableObj = new OpenGeoportal.SearchResultsTable(); + ogp.resultsTableObj + .initTable("searchResults"); + + // if the url is a share link, add the + // shared layers to the cart + var hasSharedLayers = ogp.cartView.addSharedLayers(); + + // introFlow dictates behavior of info + // bubbles, first search opens Search + // Results, etc. + ogp.ui.introFlow(hasSharedLayers); + }); + + /* downtime notice --does this still work? */ + // ogp.ui.showDowntimeNotice(); + }); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/mapDiv.js b/geoportal_1/src/main/webapp/resources/javascript/lib/mapDiv.js new file mode 100644 index 0000000..820c96d --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/mapDiv.js @@ -0,0 +1,2445 @@ +/** + * + * This javascript module includes functions for dealing with the map defined + * under the object MapController. MapController inherits from the + * OpenLayers.Map object + * + * @author Chris Barnett + */ + +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +// some code to test presence of OpenLayers, check version? + +/** + * MapController constructor + * + * @constructor + * @requires OpenLayers + * @requires OpenGeoportal.PreviewedLayers + * @requires OpenGeoportal.Template + * @requires OpenGeoportal.Analytics + * + */ +OpenGeoportal.MapController = function() { + // dependencies + this.previewed = OpenGeoportal.ogp.appState.get("previewed"); + this.requestQueue = OpenGeoportal.ogp.appState.get("requestQueue"); + + this.template = OpenGeoportal.ogp.template; + var analytics = new OpenGeoportal.Analytics(); + + /** + * initialization function for the map + * + * @param {string} + * containerDiv - the id of the div element that the map should + * be rendered to + * @param {object} + * userOptions - object can be used to pass OpenLayers options to + * the created OpenLayers map + * + */ + this.initMap = function(containerDiv, userOptions) { + // would passing a jQuery object be preferable to the string id? + if ((typeof containerDiv === 'undefined') + || (containerDiv.length === 0)) { + throw new Error("The id of the map div must be specified."); + } + this.containerDiv = containerDiv; + + this.createMapHtml(containerDiv); + + try { + this.createOLMap(userOptions); + } catch (e) { + console.log("problem creating ol map"); + console.log(e); + } + + this.initBasemaps(); + this.addMapToolbarElements(); + + var center = this.WGS84ToMercator(0, 0); + // set map position + this.setCenter(center); + + try { + this.registerMapEvents(); + } catch (e) { + console.log("problem registering map events"); + console.log(e); + } + + }; + + /** + * Create the internal HTML for the map + * + * @param {string} + * div - the id for the div the map should be rendered to + */ + this.createMapHtml = function(div) { + // test for uniqueness + var div$ = jQuery("#" + div); + if (div$.length === 0) { + throw new Error("The DIV [" + div + "] does not exist!"); + } + var resultsHTML = this.template.map({ + mapId : div + }); + div$.html(resultsHTML); + }; + + /** + * Create the controls for the OL map. Depends on "previewed" object. + * + * @requires OpenGeoportal.PreviewedLayers + * @returns {Array} - array of controls to pass to + * OpenLayers map + */ + this.createOLControls = function() { + var nav = new OpenLayers.Control.NavigationHistory({ + nextOptions : { + title : "Zoom to next geographic extent" + }, + previousOptions : { + title : "Zoom to previous geographic extent" + } + }); + + var zoomBox = new OpenLayers.Control.ZoomBox({ + title : "Click or draw rectangle on map to zoom in" + }); + var that = this; + // we could fire an event instead if we wanted to remove previewed as a + // dependency + var zoomBoxListener = function() { + jQuery('.olMap').css('cursor', "-moz-zoom-in"); + that.previewed.clearGetFeature(); + }; + zoomBox.events.register("activate", this, zoomBoxListener); + var panListener = function() { + jQuery('.olMap').css('cursor', "-moz-grab"); + that.previewed.clearGetFeature(); + }; + var panHand = new OpenLayers.Control.Navigation({ + title : "Pan by dragging the map" + }); + panHand.events.register("activate", this, panListener); + var globalExtent = new OpenLayers.Control.ZoomToMaxExtent({ + title : "Zoom to global extent" + }); + var panel = new OpenLayers.Control.Panel({ + defaultControl : panHand + }); + + var displayCoords = new OpenLayers.Control.MousePosition({ + displayProjection : new OpenLayers.Projection("EPSG:4326") + }); + + panel.addControls([ globalExtent, nav.previous, nav.next, zoomBox, + panHand ]); + + var zoomBar = new OpenLayers.Control.ModPanZoomBar(); + var scaleLine = new OpenLayers.Control.ScaleLine({ + geodesic : true + }); + + var attribution = new OpenLayers.Control.Attribution(); + + var controls = [ zoomBar, scaleLine, displayCoords, nav, panel, attribution ]; + return controls; + }; + + /** + * Calculate the initial zoom level for the map based on window size + * + * @returns {Number} - initial zoom level + */ + this.getInitialZoomLevel = function() { + var initialZoom = 1; + + if (jQuery('#' + this.containerDiv).parent().height() > 810) { + initialZoom = 2; + // TODO: this should be more sophisticated. width is also important + // initialZoom = Math.ceil(Math.sqrt(Math.ceil(jQuery('#' + + // this.containerDiv).parent().height() / 256))); + } + return initialZoom; + }; + + /** + * Instantiate the actual OpenLayers map object, set parameters + * + * @param {object} + * userOptions - options to pass through to the OpenLayers Map + * object + */ + this.createOLMap = function(userOptions) { + // set default OpenLayers map options + this.mapDiv = this.containerDiv + "OLMap"; + + var mapBounds = new OpenLayers.Bounds(-20037508.34, -20037508.34, + 20037508.34, 20037508.34); + + var controls = this.createOLControls(); + + var initialZoom = this.getInitialZoomLevel(); + + var options = { + allOverlays : true, + projection : new OpenLayers.Projection("EPSG:3857"), + maxResolution : 2.8125, + maxExtent : mapBounds, + //minZoomLevel: 1, + //maxZoomLevel: 17, + //numZoomLevels: 16, + units : "m", + zoom : initialZoom, + controls : controls + }; + + // merge default options and user specified options into 'options'--not + // recursive + jQuery.extend(userOptions, options); + + // div defaults to 0 height for certain doc-types; we want the map to + // fill the parent container + jQuery('#' + this.mapDiv).height("512px"); + + // attempt to reload tile if load fails + OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3; + OpenLayers.ImgPath = "resources/media/"; + // make OL compute scale according to WMS spec + OpenLayers.DOTS_PER_INCH = 90.71428571428572; + OpenLayers.Util.onImageLoadErrorColor = 'transparent'; + + // call OpenLayers.Map with function arguments + OpenLayers.Map.call(this, "ogpMap", options); + + }; + + /** + * Initialize the Basemaps collection, set the initial basemap + * + * @default - the default basemap is "googlePhysical" + */ + this.initBasemaps = function() { + // populate the basemaps collection + this.basemaps = this.createBaseMaps(); + + // set default background map; should get this value from config instead + var defaultBasemapModel = this.basemaps.findWhere({ + name : "googlePhysical" + }); + defaultBasemapModel.set({ + selected : true + }); + defaultBasemapModel.get("initialRenderCallback").apply(this, + [ defaultBasemapModel.get("type") ]); + + }; + + /** + * Populates the map toolbar with controls. + * + * @requires OpenGeoportal.Utility + */ + this.addMapToolbarElements = function() { + + this.addMapToolbarButton({ + displayClass : "saveImageButton", + title : "Save map image", + buttonText : "Save Image" + }, this.saveImage); + + this.addMapToolbarButton({ + displayClass : "printButton", + title : "Print map", + buttonText : "Print" + }, OpenGeoportal.Utility.doPrint); + + // add the HTML for the basemap menu to the toolbar + this.addToMapToolbar(this.template.basemapMenu()); + + // the menu itself is implemented as a view of the Basemap collection + this.basemapMenu = new OpenGeoportal.Views.CollectionSelect({ + collection : this.basemaps, + el : "div#basemapMenu", + valueAttribute : "name", + displayAttribute : "displayName", + buttonLabel : "Basemap", + itemClass : "baseMapMenuItem" + }); + + }; + + /** + * register event handlers for the map + */ + this.registerMapEvents = function() { + var that = this; + // register events + jQuery('#' + this.mapDiv).resize(function() { + that.updateSize(); + if (parseInt(jQuery("#" + that.mapDiv).width()) >= 1024) { + if (that.zoom == 0) { + that.zoomTo(1); + } + } + }); + + // OpenLayers event + this.events.register('zoomend', this, function() { + var zoomLevel = that.getZoom(); + // console.log(zoomLevel); + var maxZoom = that.basemaps.findWhere({ + selected : true + }).get("zoomLevels"); + + // need to add logic to go back to original basemap type when user + // zooms back out + if (zoomLevel >= (maxZoom - 1)) { + that.basemaps.findWhere({ + name : "googleHybrid" + }).set({ + selected : true + }); + that.zoomTo(that.getZoom()); + } else { + /* + * if (that.getBackgroundType() !== + * that.getCurrentBackgroundMap()){ + * that.changeBackgroundMap(that.getCurrentBackgroundMap()); } + */ + } + var mapHeight = Math.pow((zoomLevel + 1), 2) / 2 * 256; + var containerHeight = jQuery("#" + that.mapDiv).parent().parent() + .height(); + if (mapHeight > containerHeight) { + mapHeight = containerHeight; + } + + if (jQuery("#" + that.mapDiv).height() != mapHeight) { + jQuery("#" + that.mapDiv).height(mapHeight);// calculate min and + // max sizes + that.updateSize(); + } + if (zoomLevel == 0) { + that.setCenter(that.WGS84ToMercator(that.getSearchCenter().lon, + 0)); + } + /* + * Translate the OpenLayers event to a jQuery event used by the + * application + * + * @fires "eventZoomEnd" + */ + + jQuery(document).trigger('eventZoomEnd'); + }); + + // OpenLayers event + this.events.register('moveend', this, function() { + var newExtent = that.getSearchExtent(); + var newCenter = that.getSearchCenter(); + + /* + * Translate the OpenLayers event to a jQuery event used by the + * application. This is the event used to trigger a search on map + * move. + * + * @fires "map.extentChanged" + */ + jQuery(document).trigger('map.extentChanged', { + mapExtent : newExtent, + mapCenter : newCenter + }); + }); + + this.bboxHandler(); + this.styleChangeHandler(); + this.opacityHandler(); + this.zoomToLayerExtentHandler(); + this.previewLayerHandler(); + this.getFeatureInfoHandler(); + this.clearLayersHandler(); + this.attributeDescriptionHandler(); + this.mouseCursorHandler(); + this.loadIndicatorHandler(); + }; + + /** + * Appends HTML to the map tool bar. + */ + this.addToMapToolbar = function(markup) { + // this has a hidden dependency on the map toolbar template. Should be a + // better way to do this, but its hard not to have some sort of + // dependency on the template. Maybe it's better to just pass everything + // in to the template on construction, rather than adding after the + // fact. + + jQuery("#ogpMapButtons").append(markup); + }; + + /** + * Parameter object for MapButton template + * + * @typedef {Object} MapButtonParams + * @property {string} displayClass - new button has this css class + * @property {string} title - button title (tooltip) + * @property {string} buttonText - text for the button + */ + + /** + * Appends a button to the map toolbar. + * + * @param {MapButtonParams} + * @param {function} + * clickCallback - Function called when the button is clicked. + */ + this.addMapToolbarButton = function(displayParams, clickCallback) { + + this.addToMapToolbar(this.template.mapButton(displayParams)); + var that = this; + jQuery("." + displayParams.displayClass).button().on("click", + function() { + clickCallback.call(that); + }); + }; + + /*************************************************************************** + * basemap handling + **************************************************************************/ + this.googleMapsRenderCallback = function(type) { + var bgMap = this.getLayersBy("basemapType", type)[0]; + // console.log(bgMap); + var that = this; + google.maps.event.addListener(bgMap.mapObject, "tilesloaded", + function() { + that.render(that.mapDiv); + + // let the application know that the map is ready + jQuery(document).trigger("mapReady"); + // should only fire the first time (or should + // only listen the first time) + google.maps.event.clearListeners(bgMap.mapObject, + "tilesloaded"); + + // Make sure Google logos, etc are displayed + jQuery("div.olLayerGooglePoweredBy").children().css( + "display", "block"); + // find the google logo and add class ".googleLogo", + // so we can make sure it always shows + jQuery("[id$=GMapContainer]").find( + '[title*="Click to see this area"]').parent() + .addClass("googleLogo"); + + // display the map once the google tiles are loaded + jQuery("#geoportalMap").fadeTo("slow", 1); + + }); + }; + + this.initialRenderCallback = function(type) { + // console.log("osm initial render callback"); + var that = this; + var bgMap = this.getLayersBy("basemapType", type)[0]; + bgMap.events.register(bgMap.mapObject, "loadend", function() { + // console.log("Tiles loaded"); + that.render(that.mapDiv); + // really should only fire the first time + bgMap.events.unregister(bgMap.mapObject, "loadend"); + jQuery("#geoportalMap").fadeTo("slow", 1); + }); + }; + + /** + * @this - the base map model + * @returns {OpenLayers.Layer.Google} + */ + this.googleMapsLayerDefinition = function() { + var bgMap = new OpenLayers.Layer.Google(this.get("displayName"), { + type : this.get("subType"), + basemapType : this.get("type"), + layerRole : "basemap" + }, { + animationEnabled : true + }); + return bgMap; + }; + + /** + * @this - the base map model + * @returns {OpenLayers.Layer.Bing} + */ + this.bingMapsLayerDefinition = function() { + + var bgMap = new OpenLayers.Layer.Bing({ + name : this.get("displayName"), + type : this.get("subType"), + // get this from config + key : "getYourOwnKeyFromMicrosoft" + }); + bgMap.basemapType = this.get("type"); + bgMap.layerRole = "basemap"; + bgMap.wrapDateLine = true; + return bgMap; + }; + + this.googleMapsShow = function(model) { + // see if there is a basemap layer of the specified type + if (this.getLayersBy("basemapType", model.get("type")).length === 0) { + // add the appropriate basemap layer + this.addLayer(model.get("getLayerDefinition").call(model)); + } else { + var layer = this.getLayersBy("basemapType", model.get("type"))[0]; + layer.mapObject.setMapTypeId(model.get("subType")); + layer.type = model.get("subType"); + layer.setVisibility(true); + } + jQuery("div.olLayerGooglePoweredBy").children().css("display", "block"); + }; + + this.bingMapsShow = function(model) { + // see if there is a basemap layer of the specified type + if (this.getLayersBy("basemapType", model.get("type")).length === 0) { + // add the appropriate basemap layer + this.addLayer(model.get("getLayerDefinition").call(model)); + } else { + var layer = this.getLayersBy("basemapType", model.get("type"))[0]; + layer.setVisibility(true); + } + + }; + + this.baseMapHide = function(model) { + var layer = this.getLayersBy("basemapType", model.get("type"))[0]; + layer.setVisibility(false); + }; + + /** + * @requires OpenGeoportal.BasemapCollection + * + * @returns {OpenGeoportal.BasemapCollection} + */ + this.createBaseMaps = function() { + var that = this; + var googlePhysical = { + displayName : "Google Physical", + name : "googlePhysical", + selected : false, + subType : google.maps.MapTypeId.TERRAIN, + type : "Google", + zoomLevels : 22, + getLayerDefinition : that.googleMapsLayerDefinition, + showOperations : function(model) { + that.googleMapsShow(model); + }, + hideOperations : function(model) { + that.baseMapHide(model); + jQuery("div.olLayerGooglePoweredBy").children().css("display", + "none"); + }, + initialRenderCallback : that.googleMapsRenderCallback + }; + + var googleHybrid = { + displayName : "Google Hybrid", + name : "googleHybrid", + selected : false, + subType : google.maps.MapTypeId.HYBRID, + type : "Google", + zoomLevels : 22, + getLayerDefinition : that.googleMapsLayerDefinition, + showOperations : function(model) { + that.googleMapsShow(model); + }, + hideOperations : function(model) { + that.baseMapHide(model); + jQuery("div.olLayerGooglePoweredBy").children().css("display", + "none"); + }, + initialRenderCallback : that.googleMapsRenderCallback + }; + + var googleSat = { + displayName : "Google Satellite", + name : "googleSatellite", + selected : false, + subType : google.maps.MapTypeId.SATELLITE, + type : "Google", + zoomLevels : 22, + getLayerDefinition : that.googleMapsLayerDefinition, + showOperations : function(model) { + that.googleMapsShow(model); + }, + hideOperations : function(model) { + that.baseMapHide(model); + jQuery("div.olLayerGooglePoweredBy").children().css("display", + "none"); + }, + initialRenderCallback : that.googleMapsRenderCallback + }; + + var googleStreets = { + displayName : "Google Streets", + name : "googleStreets", + selected : false, + subType : google.maps.MapTypeId.ROADMAP, + type : "Google", + zoomLevels : 22, + getLayerDefinition : that.googleMapsLayerDefinition, + showOperations : function(model) { + that.googleMapsShow(model); + }, + hideOperations : function(model) { + that.baseMapHide(model); + + jQuery("div.olLayerGooglePoweredBy").children().css("display", + "none"); + }, + initialRenderCallback : that.googleMapsRenderCallback + }; + + var osm = { + displayName : "OpenStreetMap", + name : "osm", + selected : false, + type : "osm", + subType : "osm", + zoomLevels : 22, + getLayerDefinition : function() { + var attribution = "Tiles © OpenStreetMap contributors, CC BY-SA  "; + attribution += "Data © OpenStreetMap contributors, ODbL"; + + var bgMap = new OpenLayers.Layer.OSM(this.get("displayName"), + null, { + attribution: attribution, + basemapType : this.get("type"), + layerRole : "basemap" + }); + + + return bgMap; + }, + + showOperations : function(model) { + // see if there is a basemap layer of the specified type + if (that.getLayersBy("basemapType", model.get("type")).length === 0) { + // add the appropriate basemap layer + var newLayer = model.get("getLayerDefinition").call(model); + var displayLayers = that.layers; // getLayerIndex + var highestBasemap = 0; + for ( var i in displayLayers) { + if (displayLayers[i].layerRole != "basemap") { + var indx = that.getLayerIndex(displayLayers[i]); + that.setLayerIndex(displayLayers[i], indx + 1); + } else { + highestBasemap = Math.max(highestBasemap, that + .getLayerIndex(displayLayers[i])); + } + } + that.addLayer(newLayer); + that.setLayerIndex(newLayer, highestBasemap + 1); + } else { + var layer = that.getLayersBy("basemapType", model + .get("type"))[0]; + layer.setVisibility(true); + } + + }, + hideOperations : function(model) { + that.baseMapHide(model); + }, + initialRenderCallback : that.initialRenderCallback + }; + + /* + * Bing Map Types: 1. Aerial - Aerial imagery. 2. AerialWithLabels - + * Aerial imagery with a road overlay. 3. Birdseye - Bird’s eye + * (oblique-angle) imagery 4. BirdseyeWithLabels - Bird’s eye imagery + * with a road overlay. 5. Road - Roads without additional imagery. + */ + var bingAerial = { + displayName : "Bing Aerial", + name : "bingAerial", + selected : false, + type : "bingAerial", + subType : "Aerial", + zoomLevels : 17, + getLayerDefinition : that.bingMapsLayerDefinition, + showOperations : function(model) { + that.bingMapsShow(model); + }, + hideOperations : function(model) { + that.baseMapHide(model); + }, + initialRenderCallback : that.initialRenderCallback + }; + + var bingHybrid = { + displayName : "Bing Hybrid", + name : "bingAerialWithLabels", + selected : false, + type : "bingHybrid", + subType : "AerialWithLabels", + zoomLevels : 17, + getLayerDefinition : that.bingMapsLayerDefinition, + + showOperations : function(model) { + that.bingMapsShow(model); + }, + hideOperations : function(model) { + that.baseMapHide(model); + }, + initialRenderCallback : that.initialRenderCallback + }; + + var bingRoad = { + displayName : "Bing Road", + name : "bingRoad", + selected : false, + type : "bingRoad", + subType : "Road", + zoomLevels : 17, + getLayerDefinition : that.bingMapsLayerDefinition, + + showOperations : function(model) { + that.bingMapsShow(model); + }, + hideOperations : function(model) { + that.baseMapHide(model); + }, + initialRenderCallback : that.initialRenderCallback + }; + + // Bing maps implementation isn't quite ready for prime time + var models = [ googlePhysical, googleHybrid, googleSat, osm ]; + + // create an instance of the basemap collection + var collection = new OpenGeoportal.BasemapCollection(models); + return collection; + + }; + + /*************************************************************************** + * map event handlers + **************************************************************************/ + this.opacityHandler = function() { + var that = this; + jQuery(document) + .on( + "map.opacityChange", + function(event, data) { + // console.log(data); + for ( var i in that.getLayersBy("ogpLayerId", + data.LayerId)) { + that.getLayersBy("ogpLayerId", data.LayerId)[0] + .setOpacity(data.opacity * .01); + } + }); + }; + + this.previewLayerHandler = function() { + var that = this; + jQuery(document).on("previewLayerOn", function(event, data) { + that.previewLayerOn(data.LayerId); + }); + + jQuery(document).on("previewLayerOff", function(event, data) { + that.previewLayerOff(data.LayerId); + }); + }; + + this.styleChangeHandler = function() { + var that = this; + jQuery(document).on("map.styleChange", function(event, data) { + that.changeStyle(data.LayerId); + }); + }; + + this.bboxHandler = function() { + var that = this; + jQuery(document).on("map.showBBox", function(event, bbox) { + that.showLayerBBox(bbox); + }); + jQuery(document).on("map.hideBBox", function(event) { + that.hideLayerBBox(); + }); + }; + + this.getFeatureInfoHandler = function() { + var that = this; + jQuery(document) + .on( + "map.getFeatureInfoOn", + function(event, data) { + // console.log("map.getFeatureInfoOn"); + var layerId = data.LayerId; + // console.log(layerId); + var layers = that + .getLayersBy("ogpLayerId", layerId); + if (layers.length == 0) { + // layer is not in OpenLayers... + throw new Error( + "This layer has not yet been previewed. Please preview it first."); + } else { + that.events.register("click", layers[0], + that.getFeatureAttributes); + } + }); + jQuery(document).on( + "map.getFeatureInfoOff", + function(event, data) { + var layerId = data.LayerId; + var layers = that.getLayersBy("ogpLayerId", layerId); + if (layers.length == 0) { + // layer is not in OpenLayers...add it? + } else { + that.events.unregister("click", layers[0], + that.getFeatureAttributes); + } + }); + }; + + this.zoomToLayerExtentHandler = function() { + var that = this; + jQuery(document).on("map.zoomToLayerExtent", function(event, data) { + // console.log(data); + that.zoomToLayerExtent(data.bbox); + }); + }; + + /** + * event handler to determine cursor behavior and button state behavior for + * pan-zoom controls + */ + this.mouseCursorHandler = function() { + var that = this; + jQuery(document) + .on( + "attributeInfoOn", + ".olMap", + function() { + jQuery(this).css('cursor', "crosshair"); + // also deactivate regular map controls + var zoomControl = that + .getControlsByClass("OpenLayers.Control.ZoomBox")[0]; + if (zoomControl.active) { + zoomControl.deactivate(); + } + var panControl = that + .getControlsByClass("OpenLayers.Control.Navigation")[0]; + if (panControl.active) { + panControl.deactivate(); + } + }); + }; + + /** + * event handler to clear map on map clear button click. + */ + this.clearLayersHandler = function() { + var that = this; + // TODO: this should be in the previewed layers view. clearing the map + // should update the previewed layers collection, which triggers + // removal from the map. + var mapClear$ = jQuery("#mapClearButton"); + mapClear$.button(); + mapClear$.on("click", function(event) { + that.clearMap(); + }); + }; + + this.loadIndicatorHandler = function(){ + this.indicatorCollection = new OpenGeoportal.LoadIndicatorCollection(); + this.indicatorView = new OpenGeoportal.Views.MapLoadIndicatorView({collection: this.indicatorCollection, template: this.template}); + + var getCriteria = function(e){ + var actionObj = {}; + + if (typeof e.loadType === "undefined"){ + actionObj.actionType = "generic"; + } else { + actionObj.actionType = e.loadType; + } + + if (typeof e.layerId === "undefined"){ + actionObj.actionId = "unspecified"; + } else { + actionObj.actionId = e.layerId; + } + + return actionObj; + }; + var that = this; + jQuery(document).on("showLoadIndicator", function(e){ + + that.indicatorCollection.add([getCriteria(e)]); + }); + + jQuery(document).on("hideLoadIndicator", function(e){ + + var model = that.indicatorCollection.findWhere(getCriteria(e)); + if (typeof model !== "undefined"){ + that.indicatorCollection.remove(model); + } + }); + }; + + + /*************************************************************************** + * map utility functions + **************************************************************************/ + this.WGS84ToMercator = function(lon, lat) { + // returns -infinity for -90.0 lat; a bug? + lat = parseFloat(lat); + lon = parseFloat(lon); + if (lat >= 90) { + lat = 89.99; + } + if (lat <= -90) { + lat = -89.99; + } + if (lon >= 180) { + lon = 179.99; + } + if (lon <= -180) { + lon = -179.99; + } + // console.log([lon, "tomercator"]) + return OpenLayers.Layer.SphericalMercator.forwardMercator(lon, lat); + }; + + this.MercatorToWGS84 = function(lon, lat) { + lat = parseFloat(lat); + lon = parseFloat(lon); + var transformedValue = OpenLayers.Layer.SphericalMercator + .inverseMercator(lon, lat); + var newLat = transformedValue.lat; + var newLon = transformedValue.lon; + if (newLat > 90) { + newLat = 90; + } + if (newLat < -90) { + newLat = -90; + } + if (newLon > 180) { + newLon = 180; + } + if (newLon < -180) { + newLon = -180; + } + return new OpenLayers.LonLat(newLon, newLat); + }; + + /** + * Helper function to get the aspect ratio of an OpenLayers.Bounds object + * + * @param {Object. + * } extent + * @returns {Number} the aspect ratio of the bounds passed + */ + this.getAspectRatio = function(extent) { + return (extent.getWidth() / extent.getHeight()); + }; + + this.hasMultipleWorlds = function() { + var exp = this.getZoom() + 8; + var globalWidth = Math.pow(2, exp); + + var viewPortWidth = this.getSize().w - this.getMapOffset().x; + + if (viewPortWidth > globalWidth) { + // console.log("has multiple worlds"); + return true; + } else { + return false; + } + }; + + this.getMapOffset = function() { + var mapOffset = jQuery("#" + this.containerDiv).offset(); + var xOffset = 0; + var leftCol$ = jQuery("#left_col"); + var leftColOffset = leftCol$.offset(); + if (leftCol$.is(":visible")) { + xOffset = leftCol$.width() + leftColOffset.left - mapOffset.left; + } + var yOffset = jQuery("#tabs").offset().top - mapOffset.top; + + return new OpenLayers.Pixel(xOffset, yOffset); + }; + + this.getVisibleExtent = function() { + var topLeft = this.getLonLatFromViewPortPx(this.getMapOffset()); + var fullExtent = this.getExtent(); + fullExtent.top = topLeft.lat; + if (fullExtent.getWidth() >= 40075015.68) { + fullExtent.left = -20037508.34; + fullExtent.right = 20037508.34; + } else { + fullExtent.left = topLeft.lon; + } + return fullExtent; + }; + + this.adjustExtent = function() { + var offset = this.getMapOffset(); + var fullMapHeight = jQuery('#' + this.mapDiv).height(); + var fullMapWidth = jQuery('#' + this.mapDiv).width(); + var adjust = {}; + adjust.x = (fullMapWidth - offset.x) / fullMapWidth; + adjust.y = (fullMapHeight - offset.y) / fullMapHeight; + return adjust; + }; + + this.getCombinedBounds = function(arrBounds) { + + var newExtent = new OpenLayers.Bounds(); + for ( var currentIndex in arrBounds) { + var currentBounds = arrBounds[currentIndex]; + newExtent.extend(currentBounds); + } + return newExtent; + }; + + this.getMaxLayerExtent = function getMaxLayerExtent(layerId) { + var bbox = this.previewed.get(layerId).get("bbox"); + var arrBbox = bbox.split(","); + var newExtent = new OpenLayers.Bounds(); + + newExtent.left = arrBbox[0]; + newExtent.right = arrBbox[2]; + newExtent.top = arrBbox[3]; + newExtent.bottom = arrBbox[1]; + return newExtent; + }; + + this.boundsToOLObject = function(model) { + var newExtent = new OpenLayers.Bounds(); + newExtent.left = model.get("MinX"); + newExtent.right = model.get("MaxX"); + newExtent.top = model.get("MaxY"); + newExtent.bottom = model.get("MinY"); + + return newExtent; + }; + + this.getSpecifiedExtent = function getSpecifiedExtent(extentType, layerObj) { + // this code should be in mapDiv.js, since it has access to the + // openlayers object + var extentArr = []; + var maxExtentForLayers = null; + if (extentType === "maxForLayers") { + for ( var indx in layerObj) { + + var arrBbox = this.boundsToOLObject(layerObj[indx]); + extentArr.push(arrBbox); + } + if (extentArr.length > 1) { + maxExtentForLayers = this.getCombinedBounds(extentArr).toBBOX(); + } else { + maxExtentForLayers = extentArr[0].toBBOX(); + } + } + var extentMap = { + "global" : "-180,-85,180,85", + "current" : this.getGeodeticExtent().toBBOX(), + "maxForLayers" : maxExtentForLayers + }; + + if (typeof extentMap[extentType] !== "undefined") { + return extentMap[extentType]; + } else { + throw new Error('Extent type "' + extentType + '" is undefined.'); + } + }; + + this.getBboxFromCoords = function(minx, miny, maxx, maxy) { + var bbox = []; + bbox.push(minx); + bbox.push(miny); + bbox.push(maxx); + bbox.push(maxy); + bbox = bbox.join(","); + return bbox; + }; + + this.getGeodeticExtent = function() { + var mercatorExtent = this.getVisibleExtent(); + var sphericalMercator = new OpenLayers.Projection('EPSG:900913'); + var geodetic = new OpenLayers.Projection('EPSG:4326'); + return mercatorExtent.transform(sphericalMercator, geodetic); + }; + + this.getSearchExtent = function() { + this.updateSize(); + var rawExtent = this.getGeodeticExtent(); + return rawExtent; + }; + + this.getSearchCenter = function() { + var sphericalMercator = new OpenLayers.Projection('EPSG:900913'); + var geodetic = new OpenLayers.Projection('EPSG:4326'); + var topLeft = this.getMapOffset(); + var width = jQuery(".olMap").width(); + var height = jQuery(".olMap").height(); + topLeft.x = topLeft.x + width / 2; + topLeft.y = topLeft.y - height / 2; + var center = this.getLonLatFromViewPortPx(topLeft); + return center.transform(sphericalMercator, geodetic); + }; + + this.clipToWorld = function(bounds) { + return this.clipExtent(bounds, + new OpenLayers.Bounds(-180, -90, 180, 90)); + }; + + this.clipExtent = function(bounds, clipBounds) { + if (bounds.intersectsBounds(clipBounds)) { + var newExtent = new OpenLayers.Bounds(); + newExtent.left = Math.max(bounds.left, clipBounds.left); + newExtent.top = Math.min(bounds.top, clipBounds.top); + newExtent.right = Math.min(bounds.right, clipBounds.right); + newExtent.bottom = Math.max(bounds.bottom, clipBounds.bottom); + return newExtent; + } else { + throw new Error("The extents don't intersect"); + } + }; + + this.getPreviewUrlArray = function(layerModel, useTilecache) { + // is layer public or private? is this a request that can be handled by + // a tilecache? + + var urlArraySize = 1; // this seems to be a good size for OpenLayers performance + var urlArray = []; + var populateUrlArray = function(addressArray) { + if (addressArray.length == 1) { + for (var i = 0; i < urlArraySize; i++) { + urlArray[i] = addressArray[0]; + } + } else { + urlArray = addressArray; + } + + }; + + // check for a proxy here + var proxy = OpenGeoportal.Config.getWMSProxy(layerModel + .get("Institution"), layerModel.get("Access")); + if (proxy) { + layerModel.set({ + wmsProxy : proxy + }); + } + + if (layerModel.has("wmsProxy")) { + populateUrlArray([ layerModel.get("wmsProxy") ]); + } else if ((typeof layerModel.get("Location").tilecache !== "undefined") + && useTilecache) { + populateUrlArray(layerModel.get("Location").tilecache); + } else { + populateUrlArray(layerModel.get("Location").wms); + } + + // console.log(urlArray); + return urlArray; + }; + + /*************************************************************************** + * map actions and requests + **************************************************************************/ + this.clearMap = function() { + this.previewed.each(function(model) { + model.set({ + preview : "off" + }); + }); + }; + + this.zoomToLayerExtent = function(extent) { + var layerExtent = OpenLayers.Bounds.fromString(extent); + var lowerLeft = this.WGS84ToMercator(layerExtent.left, + layerExtent.bottom); + var upperRight = this.WGS84ToMercator(layerExtent.right, + layerExtent.top); + + var newExtent = new OpenLayers.Bounds(); + newExtent.extend(new OpenLayers.LonLat(lowerLeft.lon, lowerLeft.lat)); + newExtent.extend(new OpenLayers.LonLat(upperRight.lon, upperRight.lat)); + + var size = newExtent.getSize(); + var adjustFactor = this.adjustExtent(); + var newWidth = size.w / adjustFactor.x; + var newHeight = size.h / adjustFactor.y; + + var adjustedExtent = new OpenLayers.Bounds(); + var newWLon = Math.max(upperRight.lon - newWidth, -20037508.34); + var newNLat = Math.min(lowerLeft.lat + newHeight, 20037508.34); + var newELon = Math.min(upperRight.lon, 20037508.34); + var newSLat = Math.max(lowerLeft.lat, -20037508.34); + + adjustedExtent.extend(new OpenLayers.LonLat(newWLon, newSLat)); + adjustedExtent.extend(new OpenLayers.LonLat(newELon, newNLat)); + // console.log(newExtent); + // console.log(adjustedExtent); + this.zoomToExtent(adjustedExtent); + + }; + + // add layers to OL map + this.hideLayerBBox = function() { + if (this.getLayersByName("layerBBox").length > 0) { + var featureLayer = this.getLayersByName("layerBBox")[0]; + featureLayer.removeAllFeatures(); + } + jQuery(".corner").hide(); + }; + + this.createBBoxLayer = function() { + var style_blue = OpenLayers.Util.extend({}, + OpenLayers.Feature.Vector.style['default']); + /* + * 4px border, border color: #1D6EEF, background color: #DAEDFF, box + * opacity: 25% + */ + style_blue.strokeColor = "#1D6EEF"; + style_blue.fillColor = "#DAEDFF"; + style_blue.fillOpacity = .25; + style_blue.pointRadius = 10; + style_blue.strokeWidth = 4; + style_blue.strokeLinecap = "butt"; + style_blue.zIndex = 999; + + return new OpenLayers.Layer.Vector("layerBBox", { + style : style_blue, + displayOutsideMaxExtent : true + }); + }; + + this.showLayerBBox = function(mapObj) { + // add or modify a layer with a vector representing the selected feature + var featureLayer = this.getLayersByName("layerBBox"); + if (featureLayer.length > 0) { + featureLayer = featureLayer[0]; + this.hideLayerBBox(); + } else { + featureLayer = this.createBBoxLayer(); + this.addLayer(featureLayer); + } + var bottomLeft = this.WGS84ToMercator(mapObj.west, mapObj.south); + var topRight = this.WGS84ToMercator(mapObj.east, mapObj.north); + + //if pixel distance b/w topRight and bottomLeft falls below a certain threshold, + //add a marker(fixed pixel size) in the center, so the user can see where the layer is + var blPixel = this.getPixelFromLonLat(bottomLeft); + var trPixel = this.getPixelFromLonLat(topRight); + var pixelDistance = blPixel.distanceTo(trPixel); + var threshold = 10; + var displayMarker = false; + + if (pixelDistance <= threshold){ + displayMarker = true; + } + + + var arrFeatures = []; + if (bottomLeft.lon > topRight.lon) { + var dateline = this.WGS84ToMercator(180, 0).lon; + var geom1 = new OpenLayers.Bounds( + bottomLeft.lon, bottomLeft.lat, dateline, topRight.lat) + .toGeometry(); + var geom2 = new OpenLayers.Bounds( + topRight.lon, topRight.lat, -1 * dateline, bottomLeft.lat) + .toGeometry(); + arrFeatures.push(new OpenLayers.Feature.Vector(geom1)); + arrFeatures.push(new OpenLayers.Feature.Vector(geom2)); + + if (displayMarker){ + arrFeatures.push(new OpenLayers.Feature.Vector(geom1.getCentroid())); + } + + } else { + var geom = new OpenLayers.Bounds( + bottomLeft.lon, bottomLeft.lat, topRight.lon, topRight.lat).toGeometry(); + + var box = new OpenLayers.Feature.Vector(geom); + + arrFeatures.push(box); + + if (displayMarker){ + arrFeatures.push(new OpenLayers.Feature.Vector(geom.getCentroid())); + } + } + + featureLayer.addFeatures(arrFeatures); + this.setLayerIndex(featureLayer, (this.layers.length - 1)); + + // do a comparison with current map extent + var extent = this.getVisibleExtent(); + var geodeticExtent = this.getGeodeticExtent(); + var mapTop = extent.top; + if (geodeticExtent.top > 83) { + mapTop = 238107694; + } + var mapBottom = extent.bottom; + if (geodeticExtent.bottom < -83) { + mapBottom = -238107694; + } + var mapLeft = extent.left; + if (geodeticExtent.left < -179) { + mapLeft = -20037510; + } + var mapRight = extent.right; + if (geodeticExtent.right > 180) { + mapRight = 20037510; + } + + var layerTop = topRight.lat; + var layerBottom = bottomLeft.lat; + var layerLeft = bottomLeft.lon; + var layerRight = topRight.lon; + + + + var showEWArrows = true; + // don't show arrows for east and west offscreen if multiple "worlds" + // are on screen + if (this.hasMultipleWorlds()) { + showEWArrows = false; + mapLeft = -20037510; + mapRight = 20037510; + extent.left = mapLeft; + extent.Right = mapRight; + } + + if (layerLeft < mapLeft || layerRight > mapRight || layerTop > mapTop + || layerBottom < mapBottom) { + // console.log("should show arrow"); + + if (layerTop < mapTop && layerBottom > mapBottom) { + if (showEWArrows) { + if (layerRight > mapRight) { + // console.log("ne + se"); + this.showCorners([ "ne", "se" ]); + } + + if (layerLeft < mapLeft) { + // console.log("sw + nw"); + this.showCorners([ "sw", "nw" ]); + } + } + } else if (layerRight < mapRight && layerLeft > mapLeft) { + if (layerTop > mapTop) { + // console.log("ne + nw"); + this.showCorners([ "ne", "nw" ]); + } + + if (layerBottom < mapBottom) { + this.showCorners([ "se", "sw" ]); + } + + } else { + // corners only + if (layerTop > mapTop && layerRight > mapRight) { + this.showCorners([ "ne" ]); + } + + if (layerBottom < mapBottom && layerRight > mapRight) { + this.showCorners([ "se" ]); + } + + if (layerTop > mapTop && layerLeft < mapLeft) { + this.showCorners([ "nw" ]); + } + + if (layerBottom < mapBottom && layerLeft < mapLeft) { + this.showCorners([ "sw" ]); + } + + } + + } + + }; + + this.showCorners = function(corners) { + var cornerIds = { + ne : "neCorner", + nw : "nwCorner", + sw : "swCorner", + se : "seCorner" + }; + + for ( var i in corners) { + jQuery("#" + cornerIds[corners[i]]).show(); + } + }; + + /** + * Forms a request to save map layers as a composite image, respecting + * z-order and SLDs applied. Basemap is not included for legal and technical + * reasons. The request is passed to the request queue, where the actual + * call to the server is made. Note that the params are not currently + * respected. + * + * @requires OpenGeoportal.RequestQueue - request queue + * @param {string} + * imageFormat + * @param {number} + * resolution + */ + this.saveImage = function(imageFormat, resolution) { + // TODO: add html5 canvas stuff...may have to wait for OL3? + imageFormat = 'png'; + var format; + switch (imageFormat) { + case 'jpeg': + format = "image/jpeg"; + break; + case 'png': + format = "image/png"; + break; + case 'bmp': + format = "image/bmp"; + break; + default: + throw new Error("This image format (" + imageFormat + + ") is unavailable."); + } + + var requestObj = { + requestType : "image" + }; + requestObj.layers = []; + + for ( var layer in this.layers) { + var currentLayer = this.layers[layer]; + if (currentLayer.CLASS_NAME != "OpenLayers.Layer.WMS") { + continue; + } + if (currentLayer.visibility == false) { + continue; + } + var layerModel = this.previewed.findWhere({ + LayerId : currentLayer.ogpLayerId + }); + if (typeof layerModel == "undefined") { + throw new Error( + "Layer ['" + + currentLayer.ogpLayerId + + "'] could not be found in the PreviewedLayers collection."); + } + var sld = layerModel.get("sld"); + var opacity = layerModel.get("opacity"); + if (opacity == 0) { + continue; + } + // insert this opacity value into the sld to pass to the wms server + var layerObj = {}; + var storedName = layerModel.get("qualifiedName"); + if (storedName == '') { + layerObj.name = currentLayer.params.LAYERS; + } else { + layerObj.name = storedName; + } + layerObj.opacity = opacity; + layerObj.zIndex = this.getLayerIndex(currentLayer); + if ((typeof sld != 'undefined') && (sld !== null) && (sld != "")) { + var sldParams = [ { + wmsName : layerObj.name, + layerStyle : sld + } ]; + layerObj.sld = this.createSLDFromParams(sldParams); + } + layerObj.layerId = layerModel.get("LayerId"); + requestObj.layers.push(layerObj); + } + + var extent = this.getVisibleExtent(); + var bbox = extent.toBBOX(); + + requestObj.format = format; + requestObj.bbox = bbox; + requestObj.srs = 'EPSG:900913'; + var offset = this.getMapOffset(); + var ar = this.getAspectRatio(extent); + // NOTE: this doesn't really work... should get appropriate width and + // height based on bbox NB (CB 2/1/2014): not sure what this note + // means... + var currSize = this.getCurrentSize(); + requestObj.width = currSize.w - offset.x; + requestObj.height = parseInt(requestObj.width / ar); + // add the request to the queue + this.requestQueue.createRequest(requestObj); + }; + + this.processMetadataSolrResponse = function(data) { + var solrResponse = data.response; + var totalResults = solrResponse.numFound; + if (totalResults != 1) { + throw new Error("Request for Metadata returned " + totalResults + + ". Exactly 1 was expected."); + return; + } + var doc = solrResponse.docs[0]; // get the first layer object + return doc; + }; + + this.getAttributeDescriptionJsonpSuccess = function(data) { + jQuery(".attributeName").css("cursor", "default"); + + var that = this; + + var solrdoc = this.processMetadataSolrResponse(data); + var xmlDoc = jQuery.parseXML(solrdoc.FgdcText); // text was escaped on + // ingest into Solr + + var layerId = jQuery("td.attributeName").first().closest("table").find( + "caption").attr("title"); + var layerAttrs = this.previewed.findWhere({ + LayerId : layerId + }).get("layerAttributes"); + + jQuery(xmlDoc) + .find("attrlabl") + .each( + function() { + var currentXmlAttribute$ = jQuery(this); + jQuery("td.attributeName") + .each( + function() { + var attributeName = jQuery(this) + .text().trim(); + if (currentXmlAttribute$.text() + .trim().toLowerCase() == attributeName + .toLowerCase()) { + var attributeDescription = currentXmlAttribute$ + .siblings("attrdef") + .first(); + attributeDescription = OpenGeoportal.Utility + .stripExtraSpaces(attributeDescription + .text() + .trim()); + if (attributeDescription.length === 0) { + attributeDescription = "No description available"; + } + jQuery(this) + .attr('title', + attributeDescription); + layerAttrs + .findWhere( + { + attributeName : attributeName + }) + .set( + { + description : attributeDescription + }); + return; + } + }); + }); + }; + + this.getAttributeDescriptionJsonpError = function() { + jQuery(".attributeName").css("cursor", "default"); + throw new Error("The attribute description could not be retrieved."); + }; + + this.attributeDescriptionHandler = function() { + // mouseover to display attribute descriptions + var that = this; + jQuery(document) + .on( + 'mouseenter', + "td.attributeName", + function() { + var layerId = jQuery(this).closest("table").find( + "caption").attr("title"); + var layerAttrs = that.previewed.findWhere({ + LayerId : layerId + }).get("layerAttributes"); + + var attrModel = layerAttrs.findWhere({ + attributeName : jQuery(this).text().trim() + }); + + if (typeof attrModel !== "undefined" + && attrModel.has("description")) { + jQuery(this).attr('title', + attrModel.get("description")); + // short circuit if attributes have already been + // looked up + } else { + var solr = new OpenGeoportal.Solr(); + var query = solr.getServerName() + + "?" + + jQuery.param(solr + .getMetadataParams(layerId)); + jQuery(".attributeName").css("cursor", "wait"); + solr + .sendToSolr( + query, + that.getAttributeDescriptionJsonpSuccess, + that.getAttributeDescriptionJsonpError, + that); + } + }); + }; + + this.getFeatureAttributes = function(e) { + // console.log("getFeatureAttributes"); + if (typeof this.map !== "undefined") { + var mapObject = this.map;// since this is an event handler, the + // context isn't the MapController + // Object, it's the map layer. Should it + // be? + + // generate the query string + var layerId = this.ogpLayerId; + var searchString = "ogpid=" + layerId; + + var mapExtent = mapObject.getExtent(); + searchString += "&bbox=" + mapExtent.toBBOX(); + + var pixel = e.xy; + // geoserver doesn't like fractional pixel values + searchString += "&x=" + Math.round(pixel.x) + "&y=" + + Math.round(pixel.y); + searchString += "&height=" + mapObject.size.h + "&width=" + + mapObject.size.w; + + var params = { + ogpid: layerId, + bbox: mapExtent.toBBOX(), + x: Math.round(pixel.x), + y: Math.round(pixel.y), + height: mapObject.size.h, + width: mapObject.size.w + }; + + var layerModel = mapObject.previewed.findWhere({ + LayerId : layerId + }); + var dialogTitle = layerModel.get("LayerDisplayName"); + var institution = layerModel.get("Institution"); + + var ajaxParams = { + type : "GET", + url : 'featureInfo', + data : params, + dataType : 'html', + beforeSend : function() { + if (mapObject.currentAttributeRequests.length > 0) { + // abort any outstanding requests before submitting a + // new one + for ( var i in mapObject.currentAttributeRequests) { + var request = mapObject.currentAttributeRequests.splice(i, 1)[0]; + request.featureRequest.abort(); + } + } + + jQuery(document).trigger({type: "showLoadIndicator", loadType: "getFeature", layerId: layerId}); + }, + success : function(data, textStatus, XMLHttpRequest) { + + mapObject.getFeatureAttributesSuccessCallback(layerId, + dialogTitle, data); + }, + error : function(jqXHR, textStatus, errorThrown) { + if ((jqXHR.status != 401) && (textStatus != 'abort')) { + throw new Error("Error retrieving Feature Information."); + + } + }, + complete : function(jqXHR) { + for ( var i in mapObject.currentAttributeRequests) { + if (mapObject.currentAttributeRequests[i].featureRequest === jqXHR) { + mapObject.currentAttributeRequests.splice(i, 1); + + } + } + jQuery(document).trigger({type: "hideLoadIndicator", loadType: "getFeature", layerId: layerId}); + } + }; + + mapObject.currentAttributeRequests.push({layerId: layerId, featureRequest: jQuery.ajax(ajaxParams)}); + + analytics.track("Layer Attributes Viewed", institution, layerId); + } else { + new OpenGeoportal.ErrorObject( + new Error(), + "This layer has not been previewed.
        You must preview it before getting attribute information."); + } + }; + + this.currentAttributeRequests = []; + + this.registerAttributes = function(layerId, attrNames) { + var layerModel = this.previewed.findWhere({ + LayerId : layerId + }); + if (!layerModel.has("layerAttributes")) { + var attributes = new OpenGeoportal.Attributes(); + for ( var i in attrNames) { + if (attrNames.hasOwnProperty(i)){ + var attrModel = new OpenGeoportal.Models.Attribute({ + attributeName : attrNames[i] + }); + attributes.add(attrModel); + } + } + layerModel.set({ + layerAttributes : attributes + }); + } + }; + + this.getFeatureAttributesSuccessCallback = function(layerId, dialogTitle, + data) { + // grab the html table from the response + var responseTable$ = jQuery(data).filter(function() { + return jQuery(this).is('table'); + }); + + var template = this.template; + var tableText = ""; + + if ((responseTable$.length === 0) + || (jQuery(data).find("tr").length === 0)) { + // what should happen here? returned content is empty or otherwise + // unexpected + tableText = '

        There is no data for "' + dialogTitle + + '" at this point.

        '; + } else { + responseTable$ = responseTable$.first(); + // process the html table returned from wms getfeature request + var rows = this.processAttributeTable(responseTable$); + + tableText = template.attributeTable({ + layerId : layerId, + title : dialogTitle, + tableContent : rows + }); + + var attrNames = []; + for ( var i in rows) { + attrNames.push(rows[i].header); + } + this.registerAttributes(layerId, attrNames); + + } + + // create a new dialog instance, or just open the dialog if it already + // exists + + if (typeof jQuery('#featureInfo')[0] === 'undefined') { + var infoDiv = template.genericDialogShell({ + elId : "featureInfo" + }); + jQuery("#dialogs").append(infoDiv); + jQuery("#featureInfo").dialog({ + zIndex : 2999, + title : "Feature Attributes", + width : 'auto', + autoOpen : false + }); + + } + jQuery("#featureInfo").fadeOut(200, function() { + jQuery("#featureInfo").html(tableText); + // limit the height of the dialog. some layers will have hundreds of + // attributes + var containerHeight = jQuery("#container").height(); + var linecount = jQuery("#featureInfo tr").length; + var dataHeight = linecount * 20; + if (dataHeight > containerHeight) { + dataHeight = containerHeight; + } else { + dataHeight = "auto"; + } + jQuery("#featureInfo").dialog("option", "height", dataHeight); + + jQuery("#featureInfo").dialog('open'); + jQuery("#featureInfo").fadeIn(200); + }); + + }; + + this.processAttributeTable = function(responseTable$) { + var tableArr = []; + if (responseTable$.find("tr").length === 2) { + // horizontal table returned + responseTable$.find("tr").each( + function() { + + if (jQuery(this).find("th").length > 0) { + // this is the header row + var cells$ = jQuery(this).find("th"); + + } else { + var cells$ = jQuery(this).find("td"); + } + var rowArr = []; + cells$.each(function() { + var cellText = jQuery(this).text().trim(); + if (cellText.indexOf('http') === 0) { + cellText = '' + + cellText + ''; + } + rowArr.push(cellText); + }); + tableArr.push(rowArr); + }); + + } else { + // vertical table returned + // TODO: handle vertical table case + } + + // iterate over headers + var rows = []; + if (tableArr.length > 0) { + + for (var i = 0; i < tableArr[0].length; i++) { + var newRowObj = {}; + newRowObj.values = []; + for (var j = 0; j < tableArr.length; j++) { + if (j === 0) { + newRowObj.header = tableArr[j][i]; + } else { + newRowObj.values.push(tableArr[j][i]); + } + + } + rows.push(newRowObj); + } + + } + + return rows; + }; + + this.startService = function(layerModel) { + // if layer has a startService value in the location field, try to start + // the service via the provided url + var requestObj = {}; + requestObj.AddLayer = [ layerModel.get("qualifiedName") ]; + requestObj.ValidationKey = "OPENGEOPORTALROCKS"; + var params = { + url : layerModel.get("Location").serviceStart, + dataType : "jsonp", + data : requestObj, + type : "GET", + traditional : true, + complete : function() { + jQuery(document).trigger({type: "hideLoadIndicator", loadType: "serviceStart", layerId: layerModel.get("LayerId")}); + + }, + statusCode : { + 200 : function() { + jQuery("body").trigger( + layerModel.get("LayerId") + 'Exists'); + }, + 500 : function() { + throw new Error("layer could not be added"); + } + } + }; + + jQuery(document).trigger({type:"showLoadIndicator", loadType: "serviceStart", layerId: layerModel.get("LayerId")}); + + jQuery.ajax(params); + }; + + this.setWmsLayerInfo = function(model) { + var queryData = { + ogpid : model.get("LayerId") + }; + var ajaxParams = { + type : "GET", + url : 'info/wmsInfo', // don't throw a 500 error for layers with + // service start. otherwise, throw the + // error, or note in 200 response + data : queryData, + dataType : 'json', + success : function(data) { + // {"owsProtocol":"WMS","infoMap":{"owsUrl":"http://geoserver01.uit.tufts.edu/wfs/WfsDispatcher?","owsType":"WFS","qualifiedName":"sde:GISPORTAL.GISOWNER01.WORLDBOUNDARIES95"},"owsDescribeInfo":null} + // jQuery("body").trigger(model.get("qualifiedName") + + // 'Exists'); + model.set({ + qualifiedName : data.infoMap.qualifiedName + }); + // should we also set a wfs or wcs if found?...if the dataType + // is unknown, it should be updated to vector or raster + }, + error : function() { + + // let the user know the layer is not previewable + // remove the layer from preview panel + // throw new Error("layer could not be added"); + //console.log("got an error trying to get layer info"); + }, + complete : function() { + //jQuery("body").trigger(model.get("LayerId") + 'Exists'); + + jQuery(document).trigger({type: "hideLoadIndicator", loadType: "getWmsInfo", layerId: model.get("LayerId")}); + } + }; + jQuery.ajax(ajaxParams); + //for now, don't wait for wmsinfo response to start loading the layer; perhaps only call if there is an error + jQuery("body").trigger(model.get("LayerId") + 'Exists'); + + jQuery(document).trigger({type: "showLoadIndicator", loadType: "getWmsInfo", layerId: model.get("LayerId")}); + + }; + + this.layerExists = function(layerModel) { + // otherwise, do a wms describe layer to make sure the layer is there + // before + // attempting to add it to the map (must be proxied). handling wms + // errors is non-trivial, since, + // by design, OpenLayers requires an error of type 'image' from the wms + // server + // (OpenLayers is merely dynamically setting the src attribute of img + // tags) + // console.log(mapObj); + if (typeof layerModel.get("Location").wms !== "undefined") { + this.setWmsLayerInfo(layerModel); + } else { + // assume it exists + jQuery("body").trigger(layerModel.get("LayerId") + 'Exists'); + } + }; + + /*************************************************************************** + * style (SLD) handling + **************************************************************************/ + + this.changeStyle = function(layerId) { + var layer = this.getLayersBy("ogpLayerId", layerId)[0]; + if (typeof layer === 'undefined') { + console.log("layer with id=['" + layerId + "'] not found on map."); + // should we try to add it then? + return; + } + + var layerModel = this.previewed.findWhere({ + LayerId : layerId + }); + if (typeof layerModel === "undefined") { + throw new Error( + "This layer can't be found in the PreviewedLayers collection."); + } + // console.log(layerModel); + var dataType = layerModel.get("DataType").toLowerCase(); + var userSLD = {}; + // we need this for now, since the tilecache name and geoserver name for + // layers is different for Harvard layers + var wmsName = layerModel.get("qualifiedName"); + // don't use a tilecache + layer.url = this.getPreviewUrlArray(layerModel, false); + var userColor = layerModel.get("color"); + var userWidth = layerModel.get("graphicWidth"); + switch (dataType) { + case "polygon": + // for polygons + userSLD.symbolizer = {}; + userSLD.symbolizer.Polygon = {}; + userSLD.symbolizer.Polygon.fill = true; + userSLD.symbolizer.Polygon.fillColor = userColor; + if (userWidth > 0) { + userSLD.symbolizer.Polygon.stroke = true; + userSLD.symbolizer.Polygon.strokeWidth = userWidth; + userSLD.symbolizer.Polygon.strokeColor = this + .getBorderColor(userColor); + } + break; + case "point": + // for points + userSLD.symbolizer = {}; + userSLD.symbolizer.Point = {}; + userSLD.symbolizer.Point.fill = true; + userSLD.symbolizer.Point.fillColor = userColor; + userSLD.symbolizer.Point.graphicName = 'circle'; + userSLD.symbolizer.Point.pointRadius = userWidth; + userSLD.symbolizer.Point.strokeWidth = 0; + userSLD.symbolizer.Point.strokeColor = userColor; + break; + case "line": + // for lines + userSLD.symbolizer = {}; + userSLD.symbolizer.Line = {}; + userSLD.symbolizer.Line.stroke = true; + userSLD.symbolizer.Line.strokeWidth = userWidth; + userSLD.symbolizer.Line.strokeColor = userColor; + break; + default: + return; + } + var layerUniqueInfo = userSLD; + var arrSLD = [ { + wmsName : wmsName, + layerStyle : layerUniqueInfo + } ]; + var newSLD = { + layers : wmsName, + sld_body : this.createSLDFromParams(arrSLD) + }; + layer.mergeNewParams(newSLD); + layerModel.set({ + sld : layerUniqueInfo + }); + }; + + this.getBorderColor = function(fillColor) { + // calculate an appropriate border color + var borderColor = {}; + borderColor.red = fillColor.slice(1, 3); + borderColor.green = fillColor.slice(3, 5); + borderColor.blue = fillColor.slice(5); + for ( var color in borderColor) { + // make the border color darker than the fill + var tempColor = parseInt(borderColor[color], 16) - parseInt(0x50); + if (tempColor < 0) { + // so we don't get any negative values for color + tempColor = "00"; + } else { + // convert to hex + tempColor = tempColor.toString(16); + } + // check length; the string should be 2 characters + if (tempColor.length == 2) { + borderColor[color] = tempColor; + } else if (tempColor.length == 1) { + borderColor[color] = '0' + tempColor; + } else { + borderColor[color] = '00'; + } + } + // reassemble the color string + return "#" + borderColor.red + borderColor.green + borderColor.blue; + }; + + this.createSLDFromParams = function(arrUserParams) { + var userSLD = { + namedLayers : [] + }; + for ( var i in arrUserParams) { + var currentRule = new OpenLayers.Rule(arrUserParams[i].layerStyle); + var currentStyle = new OpenLayers.Style("", { + rules : [ currentRule ] + }); + currentStyle = { + name : arrUserParams[i].wmsName, + userStyles : [ currentStyle ] + }; + userSLD.namedLayers.push(currentStyle); + } + var newSLD = new OpenLayers.Format.SLD().write(userSLD); + return newSLD; + }; + + /*************************************************************************** + * map preview functions + **************************************************************************/ + + this.hideLayer = function(layerId) { + var layers = this.getLayersBy("ogpLayerId", layerId); + + for ( var i in layers) { + layers[i].setVisibility(false); + } + + }; + + this.showLayer = function(layerId) { + var layers = this.getLayersBy("ogpLayerId", layerId); + for ( var i in layers) { + layers[i].setVisibility(true); + } + }; + + this.addMapBBox = function(mapObj) { + // mapObj requires west, east, north, south + // add or modify a layer with a vector representing the selected feature + var featureLayer; + + var style_green = OpenLayers.Util.extend({}, + OpenLayers.Feature.Vector.style['default']); + style_green.strokeColor = "green"; + style_green.fillColor = "green"; + style_green.fillOpacity = .05; + // style_green.pointRadius = 10; + style_green.strokeWidth = 2; + style_green.strokeLinecap = "butt"; + style_green.zIndex = 999; + + featureLayer = new OpenLayers.Layer.Vector(mapObj.title, { + // style: style_green + }); + this.addLayer(featureLayer); + var bbox = mapObj.bbox.split(","); + var bottomLeft = this.WGS84ToMercator(bbox[0], bbox[1]); + var topRight = this.WGS84ToMercator(bbox[2], bbox[3]); + + if (bottomLeft.lon > topRight.lon) { + var dateline = this.WGS84ToMercator(180, 0).lon; + var box1 = new OpenLayers.Feature.Vector(new OpenLayers.Bounds( + bottomLeft.lon, bottomLeft.lat, dateline, topRight.lat) + .toGeometry()); + var box2 = new OpenLayers.Feature.Vector(new OpenLayers.Bounds( + topRight.lon, topRight.lat, -1 * dateline, bottomLeft.lat) + .toGeometry()); + featureLayer.addFeatures([ box1, box2 ]); + } else { + var box = new OpenLayers.Feature.Vector(new OpenLayers.Bounds( + bottomLeft.lon, bottomLeft.lat, topRight.lon, topRight.lat) + .toGeometry()); + featureLayer.addFeatures([ box ]); + } + this.setLayerIndex(featureLayer, (this.layers.length - 1)); + }; + + + + this.getLayerName = function(layerModel, url) { + var layerName = layerModel.get("Name"); + var wmsNamespace = layerModel.get("WorkspaceName"); + //if there is a workspace name listed and the layername doesn't already contain one, prepend it + var qualifiedName = layerName; + if ((wmsNamespace.length > 0) && (layerName.indexOf(":") == -1)) { + qualifiedName = wmsNamespace + ":" + layerName; + } + + layerModel.set({ + qualifiedName : qualifiedName + }); + + // tilecache and GeoServer names are different for Harvard layers + if (layerModel.get("Institution") === "Harvard") { + var tilecacheName = layerName.substr(layerName.indexOf(".") + 1); + tilecacheName = tilecacheName.substr(layerName.indexOf(":") + 1); + + layerModel.set({ + tilecacheName : tilecacheName + }); + + //see if used url matches the tilecache url + if (layerModel.get("Location").tilecache[0] === url){ + layerName = layerModel.get("tilecacheName") + } else { + layerName = qualifiedName; + } + } else { + layerName = qualifiedName; + } + + return layerName; + }; + + this.addWMSLayer = function(layerModel) { + // mapObj requires institution, layerName, title, datatype, access + /* + * var bottomLeft = this.WGS84ToMercator(mapObj.west, mapObj.south); var + * topRight = this.WGS84ToMercator(mapObj.east, mapObj.north); var + * bounds = new OpenLayers.Bounds(); bounds.extend(new + * OpenLayers.LonLat(bottomLeft.lon, bottomLeft.lat)); bounds.extend(new + * OpenLayers.LonLat(topRight.lon, topRight.lat)); console.log(bounds); + * var box = new OpenLayers.Feature.Vector(bounds.toGeometry()); var + * featureLayer = new OpenLayers.Layer.Vector("BBoxTest"); + * featureLayer.addFeatures([box]); this.addLayer(featureLayer); + */ + + var layerId = layerModel.get("LayerId"); + // check to see if layer is on openlayers map, if so, show layer + var opacitySetting = layerModel.get("opacity"); + + var matchingLayers = this.getLayersBy("ogpLayerId", layerId); + for ( var i in matchingLayers) { + this.showLayer(layerId); + matchingLayers[i].setOpacity(opacitySetting * .01); + return; + } + + if (matchingLayers.length > 1) { + console + .log("ERROR: There should never be more than one copy of the layer on the map"); + } + + // use a tilecache if we are aware of it + + var wmsArray = this.getPreviewUrlArray(layerModel, true); + + + // won't actually do anything, since noMagic is true and transparent is + // true + var format; + var dataType = layerModel.get("DataType"); + if ((dataType == "Raster") || (dataType == "Paper Map")) { + format = "image/jpeg"; + } else { + format = "image/png"; + } + + + var that = this; + + + // we do a check to see if the layer exists before we add it + jQuery("body").bind(layerModel.get("LayerId") + 'Exists', + function() { + // if this is a raster layer, we should use jpeg format, png for vector + // (per geoserver docs) + var layerName = that.getLayerName(layerModel, wmsArray[0]); + + var newLayer = new OpenLayers.Layer.WMS( + layerModel.get("LayerDisplayName"), + wmsArray, + { + layers : layerName, + format : format, + tiled : true, + exceptions : "application/vnd.ogc.se_xml", + transparent : true, + version : "1.3.0" + }, { + transitionEffect : 'resize', + opacity : opacitySetting * .01, + ogpLayerId : layerModel.get("LayerId"), + ogpLayerRole : "LayerPreview" + }); + + newLayer.events.register('loadstart', newLayer, function() { + //console.log("Load start"); + jQuery(document).trigger({type: "showLoadIndicator", loadType: "layerLoad", layerId: layerModel.get("LayerId")}); + }); + + newLayer.events.register('loadend', newLayer, function() { + //console.log("Load end"); + jQuery(document).trigger({type: "hideLoadIndicator", loadType: "layerLoad", layerId: layerModel.get("LayerId")}); + }); + + //console.log("wms layer"); + //console.log(layerModel); + //console.log("openlayers layer"); + //console.log(newLayer); + + that.addLayer(newLayer); + }); + this.layerExists(layerModel); + + }; + + // thanks to Allen Lin, U of MN + this.addArcGISRestLayer = function(layerModel) { + // won't actually do anything, since noMagic is true and transparent is + // true + var format; + if (layerModel.isVector) { + format = "image/png"; + } else { + format = "image/jpeg"; + } + + // if this is a raster layer, we should use jpeg format, png for vector + // (per geoserver docs) + var newLayer = new OpenLayers.Layer.ArcGIS93Rest( + layerModel.get("LayerDisplayName"), + layerModel.get("Location").ArcGISRest, + { + layers : "show:" + layerModel.get("Name"), + transparent : true + }, { + buffer : 0, + transitionEffect : 'resize', + opacity : layerModel.get("opacity"), + ogpLayerId : layerModel.get("LayerId") + }); + newLayer.projection = new OpenLayers.Projection("EPSG:3857"); + // how should this change? trigger custom events with jQuery + newLayer.events.register('loadstart', newLayer, function() { + jQuery(document).trigger({type: "showLoadIndicator", loadType: "layerLoad", layerId: layerModel.get("LayerId")}); + }); + newLayer.events.register('loadend', newLayer, function() { + jQuery(document).trigger({type: "hideLoadIndicator", loadType: "layerLoad", layerId: layerModel.get("LayerId")}); + }); + var that = this; + // we do a cursory check to see if the layer exists before we add it + jQuery("body").bind(newLayer.ogpLayerId + 'Exists', function() { + that.addLayer(newLayer); + }); + this.layerExists(layerModel); + }; + + this.previewBrowseGraphic = function(layerModel) { + var dialogHtml = ''; + if (typeof jQuery('#browseGraphic')[0] == 'undefined') { + var infoDiv = '
        ' + + dialogHtml + '
        '; + jQuery("body").append(infoDiv); + jQuery("#browseGraphic").dialog({ + zIndex : 2999, + title : "Thumbnail Preview", + width : 'auto', + height : "auto", + resizable : false, + autoOpen : false + }); + jQuery("#browseGraphic").dialog('open'); + } else { + jQuery("#browseGraphic").html(dialogHtml); + jQuery("#browseGraphic").dialog('open'); + } + }; + + this.closeBrowseGraphic = function(layerId) { + jQuery("#browseGraphic").dialog('close'); + jQuery("#browseGraphic").html(""); + }; + + // a place to store references to external windows and associated data + this.externalPreviewWindows = new OpenGeoportal.ExternalPreviewWindows(); + + this.openImageCollectionUnGeoReferenced = function(model) { + // this model has attributes to facilitate preview of ImageCollection + // UnGeoreferenced layers + var newModel = new OpenGeoportal.Models.ImageCollectionUnGeoreferenced( + model.attributes); + // adding the model opens the external window + this.externalPreviewWindows.add(newModel); + }; + + this.closeImageCollectionUnGeoReferenced = function(layerId) { + var model = this.externalPreviewWindows.findWhere({ + LayerId : layerId + }); + this.externalPreviewWindows.remove(model); + }; + + /** + * + * @param {string} + * previewType a key that should match up with a "type" property + * @param {string} + * functionType either "onHandler" for the function that turns on + * a layer preview or "offHandler" for the function that turns + * off a layer preview + * @returns {Function} a function that turns on or off a layer depending on + * passed type + */ + this.getPreviewMethod = function(previewType, functionType) { + var previewMethods = [ { + type : "imagecollection", + onHandler : this.openImageCollectionUnGeoReferenced, + offHandler : this.closeImageCollectionUnGeoReferenced + }, { + type : "tilecache", + onHandler : this.addWMSLayer, + offHandler : this.hideLayer + }, { + type : "wms", + onHandler : this.addWMSLayer, + offHandler : this.hideLayer + }, { + type : "arcgisrest", + onHandler : this.addArcGISRestLayer, + offHandler : this.hideLayer + }, { + type : "browsegraphic", + onHandler : this.previewBrowseGraphic, + offHandler : this.closeBrowseGraphic + }, { + type : "default", + onHandler : this.addMapBBox, + offHandler : this.hideLayer + } ]; + + for ( var i in previewMethods) { + if (previewMethods[i].type === previewType) { + return previewMethods[i][functionType]; + } + } + return previewMethods["default"][functionType]; + }; + + this.previewLayerOn = function(layerId) { + // find preview method + + var currModel = this.previewed.findWhere({ + LayerId : layerId + }); + if (typeof currModel === "undefined") { + throw new Error("Layer['" + layerId + + "'] not found in PreviewedLayers collection."); + } + + try { + var type = currModel.get("previewType"); + var previewOnFunction = this.getPreviewMethod(type, "onHandler"); + + // var previewObj = this.previewOnDispatcher(location); + try { + previewOnFunction.call(this, currModel); + } catch (e) { + console.log(e); + throw new Error("error in preview on handler."); + } + + analytics.track("Layer Previewed", currModel.get("Institution"), + layerId); + } catch (err) { + // if there's a problem, set preview to off, give the user a notice + console.log("error in layer on"); + console.log(err); + currModel.set({ + preview : "off" + }); + throw new Error( + 'Unable to Preview layer "' + + currModel.get("LayerDisplayName") + '"'); + } + + }; + + this.previewLayerOff = function(layerId) { + // find preview off method + var previewModel = this.previewed.findWhere({ + LayerId : layerId + }); + var type = previewModel.get("previewType"); + var previewOffFunction = this.getPreviewMethod(type, "offHandler"); + + try { + // previewHandler = this.previewOffDispatcher(previewType); + previewOffFunction.call(this, layerId); + + } catch (err) { + console.log("error in layer off"); + throw new OpenGeoportal.ErrorObject(err, + 'Unable to remove Previewed layer "' + + previewModel.get("LayerDisplayName") + '"'); + } + // if no errors, set state for the layer + + // previewModel.set({preview: "off"}); + // this.addToPreviewedLayers(rowData.node);//this should happen in the + // datatable + // analytics.track("Layer Unpreviewed", dataObj["Institution"], + // layerId); + + }; + +};// object end +// set inheritance for MapController +OpenGeoportal.MapController.prototype = Object.create(OpenLayers.Map.prototype); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/appSettings.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/appSettings.js new file mode 100644 index 0000000..ed57a9f --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/appSettings.js @@ -0,0 +1,16 @@ +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} +if (typeof OpenGeoportal.Models === 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models !== "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} +/* + * OpenGeoportal.Ogpsettings object to hold setting info for the application + */ + +OpenGeoportal.Models.OgpSettings = Backbone.Model.extend({ +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/basemapModel.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/basemapModel.js new file mode 100644 index 0000000..cb3d0f1 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/basemapModel.js @@ -0,0 +1,46 @@ +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models === 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models !== "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + +/** + * Basemap model + */ +OpenGeoportal.Models.Basemap = Backbone.Model.extend({}); + +/** + * collection of Basemap models + */ +OpenGeoportal.BasemapCollection = Backbone.Collection.extend({ + model : OpenGeoportal.Models.Basemap, + initialize : function() { + this.listenTo(this, "change:selected", this.changeSelection); + }, + + changeSelection : function(model) { + if (model.get("selected")) { + this.showBasemap(model); + } else { + this.hideBasemap(model); + } + }, + + showBasemap : function(model) { + if (model.has("showOperations")) { + model.get("showOperations").call(this, model); + } + }, + + hideBasemap : function(model) { + if (model.has("hideOperations")) { + model.get("hideOperations").call(this, model); + } + } +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/cartCollection.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/cartCollection.js new file mode 100644 index 0000000..bff75b7 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/cartCollection.js @@ -0,0 +1,264 @@ +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models === 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models !== "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + +OpenGeoportal.Models.CartLayer = OpenGeoportal.Models.ProtocolAware.extend({ + + defaults : {}, + + + + intersectsBounds : function(bounds) { + + var minX = this.get("MinX"); + var minY = this.get("MinY"); + var maxX = this.get("MaxX"); + var maxY = this.get("MaxY"); + // would prefer for bounds to be an object, rather than an array + var isIntx = function(min1, max1, min2, max2) { + return (Math.min(max1, max2) - Math.max(min1, min2)) > 0; + }; + + if (!isIntx(bounds[1], bounds[3], minY, maxY)) { + return false; + } + + var dateLine = false; + if (minX > maxX) { + // wraps across international date line. + dateLine = true; + } + if (!dateLine) { + var xIntx = isIntx(bounds[0], bounds[2], minX, maxX); + return xIntx; + } + + // split the model's bounds into 2 boxes + var xIntx1 = isIntx(bounds[0], bounds[2], -180.0, maxX); + var xIntx2 = isIntx(bounds[0], bounds[2], minX, 180.0); + return xIntx1 || xIntx2; + }, + + assignAttributes : function() { + + //additional attributes are assigned in views + + } +}); + +/* + * + * setDownloadType : function() { // either a download type that can be handled + * by OGP backend or // something else, like an external link (fileDownload) // + * alternatively, no download is available for the resource // ultimately, to + * determine if the download can be handled by // the // backend, a request + * should be made to the backend. + * + * var locationObj = this.get("parsedLocation"); var locationKey = ""; var + * downloadType = "default"; + * + * if (OpenGeoportal.Utility.hasLocationValueIgnoreCase( locationObj, [ "wfs" + * ])) { downloadType = "wfs"; } else if + * (OpenGeoportal.Utility.hasLocationValueIgnoreCase( locationObj, [ "wcs" ])) { + * downloadType = "wcs"; } else if + * (OpenGeoportal.Utility.hasLocationValueIgnoreCase( locationObj, [ + * "arcgisrest" ])) { downloadType = "arcgisrest"; } else if + * (OpenGeoportal.Utility.hasLocationValueIgnoreCase( locationObj, [ "wms" ])) { + * downloadType = "wms"; // until we have a good mechanism // for // querying + * the server, we'll assume // GeoServer, which means we can get kml // this way } + * + * this.set({ downloadType : downloadType }); + * + * return downloadType; }, + * + * + */ +/* + * // preview controls are available according to what attributes this // model + * has // previewType determines what function is used to preview the layer // + * preview types: // wms, arcgis, tilecache w/wms, tilecache w/out wms + * (essentially // wmts, // right?), imageCollection, // browseGraphic, + * previewUrl supportedAttributesByType : [ { type : "wms", discriminator : + * "DataType", attributes : { raster : { getFeature : false, opacity : 100, sld : "" }, // + * it's understood that point, line, polygon, are vector // types // types point : { + * getFeature : false, opacity : 100, colorPickerOn : false, sld : "", color : + * "#ff0000", graphicWidth : 2 }, line : { getFeature : false, opacity : 100, + * colorPickerOn : false, sld : "", color : "#0000ff", graphicWidth : 1 }, + * polygon : { getFeature : false, opacity : 100, colorPickerOn : false, sld : + * "", opacity : 80, color : "#aaaaaa", graphicWidth : 1 }, unknown : { + * getFeature : false, opacity : 100, colorPickerOn : false, sld : "", color : + * "#aaaaaa", graphicWidth : 1 } } }, { type : "tilecache", discriminator : + * "none", attributes : { opacity : 100 } }, { type : "arcgisrest", + * discriminator : "none", attributes : { opacity : 100 } } ], + */ +OpenGeoportal.CartCollection = Backbone.Collection + .extend({ + model : OpenGeoportal.Models.CartLayer, + initialize : function() { + + this.listenTo(this, "invalid", function(model, error) { + console.log(error); + }); + }, + + addLayer : function(model, options) { + + // check the login object + var hasAccess = OpenGeoportal.ogp.appState.get("login").model + .hasAccess(model); + + if (!hasAccess) { + this.addWithWarning(model); + // alert("Must log in to preview or download this layer."); + + } else { + this.add(model); + } + }, + + toggleCartState : function(itemModel) { + // console.log("toggleCartState"); + var layerId = itemModel.get("LayerId"); + var layerModel = this.findWhere({ + LayerId : layerId + }); + + if (typeof layerModel === "undefined") { + var cartItem = itemModel.clone();// Do I need to clone, + // since I am passing + // just the attributes? + this.addLayer(new OpenGeoportal.Models.CartLayer( + cartItem.attributes)); + + } else { + this.remove(layerModel); + } + }, + + ignoreAuthenticationWarning : { + local : false, + external : false + }, + + addWithWarning : function(layerModel) { + var ignoreWarning = false; + if (typeof options !== "undefined" + && typeof options.ignoreWarning != "undefined") { + ignoreWarning = options.ignoreWarning; + } + var canLogin = OpenGeoportal.ogp.appState.get("login").model + .canLogin(layerModel); + + var institution = layerModel.get("Institution"); + var ignoreWarningId = "ignoreAuthenticationWarning"; + var disposition; + var warningMessage = 'This layer is restricted by licensing agreement to the ' + + institution + ' community. '; + var that = this; + + if (canLogin) { + disposition = "local"; + + warningMessage += 'Restricted layers can be added to the Cart, but you must login before you can preview or download restricted layers.'; + + } else { + disposition = "external"; + + warningMessage += 'Restricted layers can be added to the Cart here, but you must use ' + + institution; + warningMessage += "'s site and login to preview or download restricted layers."; + + } + + warningMessage += "
        "; + warningMessage += ''; + + if (this.ignoreAuthenticationWarning[disposition]) { + this.add(layerModel); + return; + } + + jQuery(document) + .on( + "change", + "#" + ignoreWarningId, + function() { + that.ignoreAuthenticationWarning[disposition] = jQuery( + this).is(":checked"); + }); + + var divId = OpenGeoportal.ogp.controls.genericModalDialog(warningMessage, "Restricted Layer"); + + var addToCartFunction = function() { + that.add(layerModel); + jQuery(this).dialog('close'); + + }; + + var loginAndAddFunction = function() { + + var loginView = OpenGeoportal.ogp.appState.get("login"); + loginView.promptLogin(); + + // pass some info to the loginDialog + jQuery(this).dialog('disable'); + var dialogBox = jQuery('#' + divId); + // listenTo (Once) user object; test for hasAccess; then add + // layerModel to collection + + var deferredAdd = function(model) { + if (model.hasAccess(layerModel)) { + that.add(layerModel); + } + + dialogBox.dialog('close'); + + }; + + loginView.listenToOnce(loginView.model, + "change:authenticated", deferredAdd); + + jQuery(document).on( + "loginCancel", + function() { + dialogBox.dialog("enable"); + loginView.stopListening(loginView.model, + "change:authenticated", deferredAdd); + + }); + }; + + var cancelFunction = function() { + // that.IgnoreAuthenticationWarning[disposition] = + // jQuery("#" + ignoreWarningId).is(":checked"); + jQuery(this).dialog('close'); + }; + + var buttons = {}; + if (canLogin) { + buttons["Login & Add"] = loginAndAddFunction; + buttons["Add Only"] = addToCartFunction; + buttons["Cancel"] = cancelFunction; + } else { + buttons["Add"] = addToCartFunction; + buttons["Cancel"] = cancelFunction; + } + + var dialog$ = jQuery('#' + divId); + dialog$.dialog({ + width : 535, + buttons : buttons + }).siblings(".ui-dialog-buttonpane").find( + ".ui-dialog-buttonset > button").first().focus(); + } + }); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/downloadQueue.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/downloadQueue.js new file mode 100644 index 0000000..3fcf616 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/downloadQueue.js @@ -0,0 +1,386 @@ +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models === 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models !== "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + +OpenGeoportal.Models.QueueItem = Backbone.Model.extend({ + defaults : { + requestId : "", + layers : [], + bbox : "", + email : "", + status : "REQUESTING", + requestType : "" + } + +/* + * attributes: type: layer, image, export, etc. bbox: (if no clipping requested, + * set this to full extent; we want to keep track of if a user has requested + * this data before) requestId: email: (opt.) status: "PROCESSING", + * "COMPLETE_SUCCEEDED", "COMPLETE_PARTIAL", "COMPLETE_FAILED" + */ +}); + +OpenGeoportal.RequestQueue = Backbone.Collection + .extend({ + model : OpenGeoportal.Models.QueueItem, + + // processingIndicatorId: "", + pollId : "", + pollRunning : false, + pollInterval : 3000, + + initialize : function() { + this.listenTo(this, "add change:status", + this.handleStatusChange); + this.controls = OpenGeoportal.ogp.controls; + }, + + handleStatusChange : function(model) { + var status = model.get("status"); + // do some stuff depending on the item's status + if ((status == "COMPLETE_SUCCEEDED") + || (status == "COMPLETE_PARTIAL")) { + // get the download + try { + this.handleDownload(model); + } catch (e) { + console.log(e); + console.log("Download handler failed."); + } + try { + this.createNotice(model); + } catch (e) { + console.log("Download notice creation failed."); + } + } else if (status == "COMPLETE_FAILED") { + // should be a note to user that the download failed + this.createNotice(model); + } + + this.checkPoll(); + }, + + handleDownload : function(model) { + var statuses = model.get("layerStatuses"); + var doDownload = false; + var i = null; + + if (typeof statuses !== "undefined") { + for (i in statuses) { + var responseType = statuses[i].responseType; + if (responseType === "download") { + doDownload = true; + break; + } + } + } else { + doDownload = true; + } + + if (doDownload) { + var type = model.get("requestType"); + this.requestTypes[type].successCallback.call(this, model); + } + }, + + openGeoCommons : function(model) { + // should open map in GeoCommons + var url = this.requestTypes[model.get("requestType")].retrieveUrl; + url += "?requestId=" + model.get("requestId"); + + var successFunction = function(data) { + window.open(data.location); + }; + + var params = { + url : url, + dataType : "json", + success : successFunction + }; + + jQuery.ajax(params); + }, + + iframeDownload : function(model) { + var url = this.requestTypes[model.get("requestType")].retrieveUrl; + + url += "?requestId=" + model.get("requestId"); + jQuery('body').append( + ''); + }, + + createNotice : function(model) { + var layerInfo = model.get("layerStatuses"); + // generate a notice using the info in requestedLayerStatuses + // if all succeeded, no need to pop up a message; the user + // should see the save file dialog + // "requestedLayerStatuses":[{"status":"PROCESSING","id":"Tufts.WorldShorelineArea95","bounds":"-66.513260443112,-314.6484375,66.513260443112,314.6484375","name":"sde:GISPORTAL.GISOWNER01.WORLDSHORELINEAREA95"}]}]} + //console.log(model); + var failed = []; + var succeeded = []; + var i = null; + for (i in layerInfo) { + var currentLayer = layerInfo[i]; + var status = currentLayer.status.toLowerCase(); + var layerName = currentLayer.id; + if (status != "success") { + failed.push(currentLayer); + } else { + succeeded.push(currentLayer); + } + + } + + var email = ""; + if (model.has("email")){ + email = model.get("email"); + } + + this.noticeDialog(succeeded, failed, email); + + }, + + noticeDialog: function(succeeded, failed, email){ + var text = ""; + var failedIds = []; + if (failed.length > 0) { + _.each(failed, function(status){ + failedIds.push(status.id); + }); + text += "The following layers failed to download: " + failedIds.join(", "); + } + + var emailedIds = []; + if (succeeded.length > 0) { + _.each(succeeded, function(status){ + if (status.responseType === "email"){ + emailedIds.push(status.id); + } + }); + if (emailedIds.length > 0){ + text += "The following layers have been emailed to " + email + ": " + emailedIds.join(); + } + } + + if (text.length > 0){ + var dialog$ = this.controls.genericModalDialog(text, "Download Notice"); + var buttonsObj = {buttons: [{text: "OK", click: function(){jQuery(this).dialog.close();}}]}; + dialog$.dialog("option", "buttons", buttonsObj); + } + }, + + checkPoll : function() { + var pending = this.where({ + status : "PROCESSING" + }); + if (typeof pending == "undefined" || pending.length === 0) { + // if nothing in the queue has a status "PROCESSING", then + // stop the poll + this.stopPoll(); + } else { + + this.startPoll(); + } + }, + + stopPoll : function() { + if (this.pollRunning) { + clearInterval(this.pollId); + this.pollRunning = false; + //jQuery(document).trigger("hideRequestSpinner"); + } + }, + + startPoll : function() { + // called when a queue item is added + var that = this; + if (!this.pollRunning) { + // instead of fetch, use plain old ajax request + this.pollId = setInterval(function() { + var pending = that.where({ + status : "PROCESSING" + }); + var requestIds = []; + var i = null; + for (i in pending) { + requestIds.push(pending[i].get("requestId")); + } + that.checkStatus(requestIds); + }, that.pollInterval); + + this.pollRunning = true; + + } + + var layerCount = this.getLayerCount(); + /*jQuery(document).trigger("showRequestSpinner", { + layers : layerCount + });*/ + + }, + + getLayerCount : function() { + var processing = this.where({ + status : "PROCESSING" + }); + var count = 0; + var i = null; + for (i in processing) { + count += processing[i].get("layers").length; + } + return count; + }, + // {"requestStatus":[ + // {"requestId":"26fe6ae7-274b-4b2d-aa58-9da1ee438dac","type":"layer","status":"PROCESSING", + // "requestedLayerStatuses":[{"status":"PROCESSING","id":"Tufts.WorldShorelineArea95","bounds":"-66.513260443112,-314.6484375,66.513260443112,314.6484375","name":"sde:GISPORTAL.GISOWNER01.WORLDSHORELINEAREA95"}]}]} + + checkStatus : function(arrIds) { + var requestIds = { + requestIds : arrIds.join() + }; + var that = this; + var params = { + url : "requestStatus", + data : requestIds, + success : function(data) { + that.updateRequestQueue(data.requestStatus); + }, + error : function() { + // if failure statuses, notify the user + // also stop the poll. change to failed? + that.stopPoll(); + jQuery(document).trigger("requestStatus.failure"); + } + }; + jQuery.ajax(params); + }, + + updateRequestQueue : function(requestStatus) { + // console.log("updateRequestQueue"); + var i = null; + for (i in requestStatus) { + var rId = requestStatus[i].requestId; + var newStatus = requestStatus[i].status; + var layerInfo = requestStatus[i].requestedLayerStatuses; + var requestModel = this.findWhere({ + requestId : rId + }); + requestModel.set({ + status : newStatus, + layerStatuses : layerInfo + }); + } + }, + // Each of these should move to the code that generates the request. use promises? + requestTypes : { + layer : { + retrieveUrl : "getDownload", + successCallback : function() { + this.iframeDownload.apply(this, arguments); + } + }, + image : { + requestUrl : "requestImage", + retrieveUrl : "getImage", + successCallback : function() { + this.iframeDownload.apply(this, arguments); + } + }, + exportTo : { + requestUrl : "geocommons/requestExport", + retrieveUrl : "geocommons/getExport", + successCallback : function() { + this.openGeoCommons.apply(this, arguments); + } + } + }, + + createRequest : function(requestObj) { + var that = this; + + var requestInfo = this.requestTypes[requestObj.requestType]; + + var model = this.add(requestObj); + var params = { + url : requestInfo.requestUrl, + data : JSON.stringify(requestObj), + dataType : "json", + type : "POST", + success : function(data) { + model.set({ + requestId : data.requestId, + status: "PROCESSING" + }); + }, + error : function() { + // + } + }; + jQuery.ajax(params); + + }, + + getParamsFromQueueItem : function(queueItem) { + // we'll have to truncate some of these attributes for the + // request, + try { + var requestObj = queueItem.attributes; + var layerModels = queueItem.get("layers"); + + var layerRequests = []; + _.each(layerModels, function(model) { + layerRequests.push({ + layerId : model.get("LayerId"), + format : model.get("requestedFormat") + }); + }); + + requestObj.layers = layerRequests; + + requestObj.bbox = requestObj.bbox.toBBOX(); + + return JSON.stringify(requestObj); + + } catch (e){ + console.log(e); + throw new Error("Error creating params"); + } + }, + + addToQueue : function(queueItem) { + //TODO: return a promise; the deferred can be an attribute of newQ. the deferred can be resolved on "status change". + //the promise.done back in the object that added an object to the q handles the retrievals and notifications + + var newQ = queueItem.clone(); + this.add(newQ); + + + var params = { + url : queueItem.get("requestUrl"), + data : this.getParamsFromQueueItem(newQ), + dataType : "json", + type : "POST", + success : function(data) { + newQ.set({ + requestId : data.requestId, + status: "PROCESSING" + }); + }, + error : function() { + // + } + }; + + jQuery.ajax(params); + + } + + }); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/externalPreviewWindowsCollection.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/externalPreviewWindowsCollection.js new file mode 100644 index 0000000..9dbd80d --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/externalPreviewWindowsCollection.js @@ -0,0 +1,133 @@ +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models === 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models !== "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + +OpenGeoportal.Models.ImageCollectionUnGeoreferenced = Backbone.Model + .extend({ + defaults : { + baseURL : null, + layers : null, + CQL : null, + collectionurl : null, + gssUrl : null, + windowUrl : "ungeoreferenced", + windowTarget : "_blank", + windowOptions : "width=800,height=800,status=yes,resizable=yes" + + }, + initialize : function() { + var location = this.get("parsedLocation"); + var workspaceName = this.get("workspaceName"); + var collectionId = this.get("CollectionId"); + + if (typeof location.imageCollection !== "undefined") { + console + .log("This layer requires the property 'imageCollection' in the Location field."); + } else { + + var gssURL = null; + + // this url should be included in the solr location + // field, since gss + // must be run locally against the image + if (typeof location.imageCollection.gssUrl !== "undefined") { + gssURL = location.imageCollection.gssUrl; + } else if (this.get("Institution").toLowerCase() === "berkeley") { + // since this url can only apply to Berkeley layers... + gssURL = 'http://linuxdev.lib.berkeley.edu:8080/newOGP/gss'; + + } + + var baseURL = null; + if (typeof location.imageCollection.url !== "undefined") { + baseURL = location.imageCollection.url; + } + + var path = null; + if (typeof location.imageCollection.path !== "undefined") { + path = location.imageCollection.path; + } + + var collectionurl = null; + if (typeof location.imageCollection.collectionurl !== "undefined") { + collectionurl = location.imageCollection.collectionurl; + } + + this.set({ + gssURL : gssURL, + layers : workspaceName + ":" + collectionId, + baseURL : baseURL, + CQL : "PATH='" + path + "'", + collectionurl : collectionurl + }); + } + } + }); + +// a place to store references to external windows and associated data +// should the logic go in a view instead? +OpenGeoportal.ExternalPreviewWindows = Backbone.Collection + .extend({ + initialize : function() { + + this.listenTo(this, "add", this.openWindow); + this.listenTo(this, "remove", this.closeWindow); + + }, + openWindow : function(model, val, options) { + // open an external window, reading values from model passed to + // the collection arguments for "open" URL,name,specs,replace + // url is required + if (model.has("windowUrl")) { + var url = model.get("windowUrl"); + var target = null; + if (model.has("windowTarget")) { + target = model.get("windowTarget"); + } + var options = null; + if (model.has("windowOptions")) { + options = model.get("windowOptions"); + } + var windowReference = window.open(url, target, options); + model.set({ + windowReference : windowReference + }); + + // pass the model to the child window + // child window code should define this object, but just in + // case... + if (typeof windowReference.OpenGeoportal === "undefined") { + windowReference.OpenGeoportal = {}; + } + windowReference.OpenGeoportal.externalWindowAttr = model.attributes; + + // we also need to add a listener to the beforeunload event + // of the + // child window. On beforeunload, remove the model from the + // collection + var that = this; + + // will this work? seems reasonable. limited to same domain? + jQuery(windowReference).unload(function() { + that.remove(model); + }); + + } else { + console.log("No url specified for new window."); + } + }, + closeWindow : function(model, val, options) { + if (model.has("windowReference")) { + // check to see if the windowReference still exists + model.get("windowReference").close(); + } + } + }); \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/leftPanelModel.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/leftPanelModel.js new file mode 100644 index 0000000..4790c17 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/leftPanelModel.js @@ -0,0 +1,20 @@ +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} +if (typeof OpenGeoportal.Models === 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models !== "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + +OpenGeoportal.Models.LeftPanel = Backbone.Model.extend({ + defaults : { + mode : "closed", + openWidth : 500, // maybe initial openWidth should be a certain + // percentage of the screen width or panelminwidth + panelMinWidth : 390, + mapMinWidth : 550 + } +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/loadIndicator.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/loadIndicator.js new file mode 100644 index 0000000..320653c --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/loadIndicator.js @@ -0,0 +1,32 @@ +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models === 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models !== "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + +/** + * LoadIndicator model + */ +OpenGeoportal.Models.LoadIndicator = Backbone.Model.extend({ + defaults: { + actionId : "unspecified", + actionType : "generic" + } +}); + +/** + * collection of Loading models + */ +OpenGeoportal.LoadIndicatorCollection = Backbone.Collection.extend({ + model : OpenGeoportal.Models.LoadIndicator +}); + + + + diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/previewedLayers.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/previewedLayers.js new file mode 100644 index 0000000..74a3f53 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/previewedLayers.js @@ -0,0 +1,380 @@ +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models === 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models !== "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} +/* + * OpenGeoportal.LayerSettings object to hold display setting info, where it + * exists (opacity, etc.) + */ + +/* + * + * + * Attributes: - resourceName: this is the layer name value needed to preview + * the layer. Unfortunately, this may be different from the solr "Name" value, + * which should be the layer name used to access ogc web services (ex: Harvard's + * name value to access their tilecache does not include the database prefixes, + * while ogc layer names (GeoServer) do.) + * + * + */ + +OpenGeoportal.Models.ProtocolAware = OpenGeoportal.Models.ResultItem + .extend({ + initialize : function() { + this.assignAttributes(); + }, + + // a stub + assignAttributes : function() { + console.log("subclass me!"); + }, + supportedAttributesByType : [], + getAttributesByType : function(type) { + var arrAttr = this.supportedAttributesByType; + var objAttr = {}; + for ( var i in arrAttr) { + if (arrAttr[i].type === type) { + objAttr = arrAttr[i]; + } + } + + if (_.isEmpty(objAttr)) { + // if no match, then there are no attributes to add + return objAttr; + } + + var attributes = {}; + if (_.has(objAttr, "discriminator") + && objAttr["discriminator"] !== "none") { + // parse the object further based on discriminator value + if (!this.has(objAttr["discriminator"])) { + throw new Error( + "Model does not contain the attribute : " + + objAttr["discriminator"]); + } + var key = this.get(objAttr["discriminator"]).toLowerCase(); + if (_.has(objAttr.attributes, key)) { + attributes = objAttr.attributes[key]; + } else { + console + .log("attributes Object does not contain the property : " + + key); + } + + } else { + attributes = objAttr.attributes; + } + + return attributes; + }, + missingAttribute : function(attributeName) { + throw new Error("Model does not contain the attribute '" + + attributeName + "'"); + }, + isPublic : function() { + var access = this.get("Access").toLowerCase(); + if (access !== "public") { + + return false; + } + return true; + }, + attributeIsOneOf : function(attr, attrVals) { + if (this.has(attr)) { + var val = this.get(attr); + return OpenGeoportal.Utility.arrayContainsIgnoreCase( + attrVals, val); + } + + this.missingAttribute(att); + }, + isVector : function() { + var attr = "DataType"; + // we'll assume that unknown is a vector + var attrVals = [ "point", "line", "polygon", "undefined" ]; + return this.attributeIsOneOf(attr, attrVals); + }, + isRaster : function() { + var attr = "DataType"; + var attrVals = [ "raster", "paper map", "scanned map" ]; + return this.attributeIsOneOf(attr, attrVals); + }, + hasOGCEndpoint : function(ogcProtocol) { + var attr = "Location"; + if (this.has(attr)) { + + var location = this.get(attr); + + return OpenGeoportal.Utility.hasLocationValueIgnoreCase( + location, [ ogcProtocol ]); + } + + this.missingAttribute(att); + } + + }); + +OpenGeoportal.Models.PreviewLayer = OpenGeoportal.Models.ProtocolAware.extend({ + // preview controls are available according to what attributes this + // model has + // previewType determines what function is used to preview the layer + defaults : { + preview : "off", + resourceName : "", + previewType : "", + showControls : false + // panel is hidden by default + }, + + // preview types: + // wms, arcgis, tilecache w/wms, tilecache w/out wms (essentially wmts, + // right?), imageCollection, + // browseGraphic, previewUrl + supportedAttributesByType : [ { + type : "wms", + discriminator : "DataType", + attributes : { + raster : { + getFeature : false, + opacity : 100, + sld : "" + }, + + "paper map" : { + opacity : 100 + }, + // it's understood that point, line, polygon, are vector types + point : { + getFeature : false, + opacity : 100, + colorPickerOn : false, + sld : "", + color : "#ff0000", + graphicWidth : 2 + }, + line : { + getFeature : false, + opacity : 100, + colorPickerOn : false, + sld : "", + color : "#0000ff", + graphicWidth : 1 + }, + polygon : { + getFeature : false, + opacity : 100, + colorPickerOn : false, + sld : "", + opacity : 80, + color : "#aaaaaa", + graphicWidth : 1 + }, + "undefined" : { + getFeature : false, + opacity : 100, + colorPickerOn : false, + sld : "", + color : "#aaaaaa", + graphicWidth : 1 + } + } + }, { + type : "tilecache", + attributes : { + opacity : 100 + } + }, { + type : "arcgisrest", + attributes : { + opacity : 100 + } + } ], + + setPreviewType : function() { + if (!this.has("Location")){ + return "noPreview"; + } + var locationObj = this.get("Location"); + + if (_.isEmpty(locationObj)){ + return "noPreview"; + } + var previewType = "default"; + + if (OpenGeoportal.Utility.hasLocationValueIgnoreCase(locationObj, + [ "wms" ])) { + previewType = "wms"; + } else if (OpenGeoportal.Utility.hasLocationValueIgnoreCase( + locationObj, [ "arcgisrest" ])) { + previewType = "arcgisrest"; + } else if (OpenGeoportal.Utility.hasLocationValueIgnoreCase( + locationObj, [ "tilecache" ])) { + // if we're here, the location field has a tilecache value, but no + // wms value or arcgisrest value + previewType = "tilecache"; + } else if (OpenGeoportal.Utility.hasLocationValueIgnoreCase( + locationObj, [ "imagecollection" ])) { + // {"imageCollection": {"path": "furtwangler/17076013_03_028a.tif", + // "url": "http://gis.lib.berkeley.edu:8080/geoserver/wms", + // "collectionurl": + // "http://www.lib.berkeley.edu/EART/mapviewer/collections/histoposf"}} + previewType = "imagecollection"; + } else if (OpenGeoportal.Utility.hasLocationValueIgnoreCase( + locationObj, [ "arcgisrest" ])) { + previewType = "arcgisrest"; + } + + this.set({ + previewType : previewType + }); + + return previewType; + }, + + assignAttributes : function() { + // do some categorization + var previewType = this.setPreviewType(); + var attr = this.getAttributesByType(previewType); + this.set(attr); + } +}); + +OpenGeoportal.Models.Attribute = Backbone.Model.extend({}); + +OpenGeoportal.Attributes = Backbone.Collection.extend({ + model : OpenGeoportal.Models.Attribute +}); + +OpenGeoportal.PreviewedLayers = Backbone.Collection.extend({ + model : OpenGeoportal.Models.PreviewLayer, + initialize : function() { + this.listenTo(this, "change:preview", this.changePreview); + this.listenTo(this, "change:graphicWidth change:color", + this.changeLayerStyle); + this.listenTo(this, "change:opacity", this.changeLayerOpacity); + this.listenTo(this, "change:getFeature", this.changeGetFeatureState); + + }, + changeLayerStyle : function(model, val, options) { + var layerId = model.get("LayerId"); + // tell map to change the linewidth/pointsize/borderwidth for this layer + // this event should be attached to the model, so it only fires once; + // better yet, have a map view that listens for this change event + jQuery(document).trigger("map.styleChange", { + LayerId : layerId + }); + }, + changeLayerOpacity : function(model, val, options) { + var value = model.get("opacity"); + var layerId = model.get("LayerId"); + // tell map to change the opacity for this layer + jQuery(document).trigger("map.opacityChange", { + LayerId : layerId, + opacity : value + }); + }, + changeGetFeatureState : function(model, val, options) { + var value = model.get("getFeature"); + var layerId = model.get("LayerId"); + // tell map to change the getFeature status for this layer + var mapEvent = null; + if (value) { + mapEvent = "map.getFeatureInfoOn"; + this.clearGetFeature(model); // passing a model to + // clearGetFeature clears all other + // gf + } else { + mapEvent = "map.getFeatureInfoOff"; + } + jQuery(document).trigger(mapEvent, { + LayerId : layerId + }); + }, + + changePreview : function(model, val, options) { + // console.log(arguments); + var preview = model.get("preview"); + var layerId = model.get("LayerId"); + if (preview === "on") { + jQuery(document).trigger("view.previewOn", { + LayerId : layerId + });// show correct state in table control + jQuery(document).trigger("previewLayerOn", { + LayerId : layerId + });// show layer on map + } else { + jQuery(document).trigger("view.previewOff", { + LayerId : layerId + }); + jQuery(document).trigger("previewLayerOff", { + LayerId : layerId + }); + // also set getFeature state to off. + if (model.has("getFeature")) { + model.set({ + getFeature : false + }); + } + } + // console.log(model.get("LayerId") + " changed preview to " + preview); + }, + + isPreviewed : function(layerId) { + var currModel = this.findWhere({ + LayerId : layerId + }); + var stateVal = false; + if (typeof currModel !== "undefined") { + var previewVal = currModel.get("preview"); + if (previewVal === "on") { + stateVal = true; + } + } + return stateVal; + }, + + getLayerModel : function(resultModel) { + var layerId = resultModel.get("LayerId"); + var arrModel = this.where({LayerId: layerId}); + var layerModel; + if (arrModel.length > 1){ + throw new Error("There are " + arrModel.length + " layers in the previewed layers collection. This should never happen."); + } + if (arrModel.length > 0){ + layerModel = arrModel[0]; + } else { + this.add(resultModel.attributes); + layerModel = this.findWhere({ + LayerId : layerId + }); + } + return layerModel; + }, + + clearGetFeature : function(turnOnModel) { + // console.log("clearGetFeature"); + var layerId = "dummy"; + if (typeof turnOnModel !== "undefined") { + layerId = turnOnModel.get("LayerId"); + } + this.each(function(model) { + if (model.get("LayerId") === layerId) { + return; + } + if (model.get("getFeature")) { + model.set({ + getFeature : false + }); + } + }); + } + +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/queryModel.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/queryModel.js new file mode 100644 index 0000000..df41c37 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/queryModel.js @@ -0,0 +1,33 @@ +if (typeof OpenGeoportal == 'undefined'){ + OpenGeoportal = {}; +} else if (typeof OpenGeoportal != "object"){ + throw new Error("OpenGeoportal already exists and is not an object"); +} +if (typeof OpenGeoportal.Models == 'undefined'){ + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models != "object"){ + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + + +OpenGeoportal.Models.QueryTerms = Backbone.Model.extend({ + defaults: { + mapExtent: {minX: -180, maxX: 180, minY: -90, maxY: 90}, + mapCenter: {centerX: 0, centerY: 0}, + ignoreSpatial: false, + displayRestricted: ["Tufts"], + sortBy: "score", + sortDir: "asc", + what: "", + where: "", + keyword: "", + originator: "", + dataType: [], + repository: [], + dateFrom: null, + dateTo: null, + isoTopic: "", + facets: "", + searchType: "basic" + } +}); \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/resultItem.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/resultItem.js new file mode 100644 index 0000000..55174ff --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/resultItem.js @@ -0,0 +1,22 @@ +if (typeof OpenGeoportal == 'undefined'){ + OpenGeoportal = {}; +} else if (typeof OpenGeoportal != "object"){ + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models == 'undefined'){ + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models != "object"){ + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + + +OpenGeoportal.Models.ResultItem = Backbone.Model.extend({ + //there are some cases where the LayerId doesn't make a good id for a Backbone model + //idAttribute: "LayerId" + +}); + +OpenGeoportal.ResultCollection = Backbone.Collection.extend({ + model: OpenGeoportal.Models.ResultItem +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableConfig.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableConfig.js new file mode 100644 index 0000000..ae48ee8 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableConfig.js @@ -0,0 +1,37 @@ +/** + * This javascript module maintains state for how the table is configured + * + * @author Chris Barnett + * + */ + +if (typeof OpenGeoportal == 'undefined'){ + OpenGeoportal = {}; +} else if (typeof OpenGeoportal != "object"){ + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models == 'undefined'){ + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models != "object"){ + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} + +/** + * TableConfig + * this object maintains state for the LayerTable + * + */ + +OpenGeoportal.Models.ColumnInfo = Backbone.Model.extend({ + idAttribute: "columnName" +}); + +//object defines the columns and their display properties, holds state information +OpenGeoportal.TableConfig = Backbone.Collection.extend({ + model: OpenGeoportal.Models.ColumnInfo, + comparator: function(model) { + return model.get("order"); + } + +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableLayerSettings.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableLayerSettings.js new file mode 100644 index 0000000..cf5b995 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableLayerSettings.js @@ -0,0 +1,78 @@ +/** + * This javascript module maintains state for how the table displays layers + * + * @author Chris Barnett + * + */ + +if (typeof OpenGeoportal == 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal != "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +if (typeof OpenGeoportal.Models == 'undefined') { + OpenGeoportal.Models = {}; +} else if (typeof OpenGeoportal.Models != "object") { + throw new Error("OpenGeoportal.Models already exists and is not an object"); +} +/** + * TableRowSettings this object maintains state for rows, dependent on table + * instance + * + */ + +OpenGeoportal.Models.RowSetting = Backbone.Model.extend({ + // idAttribute: "LayerId", + defaults : { + expanded : false + }, + validate : function(model) { + if (!model.changed.has("LayerId") || !model.changed.has("expanded")) { + return "Both 'layerId' and 'expanded' parameters required"; + } + if (typeof model.changed.expanded != "boolean") { + return "'expanded' must be a boolean value"; + } + } + +}); + +// if the value is equal to the default value, maybe we should just remove the +// model from the collection +OpenGeoportal.TableRowSettings = Backbone.Collection.extend({ + model : OpenGeoportal.Models.RowSetting, + + setExpandState : function(currentLayerId, state) { + var layerModel = this.findWhere({ + LayerId : currentLayerId + }); + + if (typeof layerModel === "undefined") { + if (state) { + this.add({ + LayerId : currentLayerId, + expanded : true + }); + } + } else { + if (state) { + layerModel.set({ + "expanded" : true + }); + } else { + this.remove(layerModel); + } + } + }, + isExpanded : function(layerId) { + var layerModel = this.findWhere({ + LayerId : layerId + }); + + if (typeof layerModel === "undefined") { + return false; + } + return true; + } +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableSortSettings.js b/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableSortSettings.js new file mode 100644 index 0000000..076f74d --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/models/tableSortSettings.js @@ -0,0 +1,54 @@ +/** + * This javascript module maintains state for how the table is sorted + * + * @author Chris Barnett + * + */ + +if (typeof OpenGeoportal == 'undefined'){ + OpenGeoportal = {}; +} else if (typeof OpenGeoportal != "object"){ + throw new Error("OpenGeoportal already exists and is not an object"); +} + +/** + * TableSortSettings + * this object maintains state for sort order + * + */ + + + +OpenGeoportal.TableSortSettings = Backbone.Model.extend({ + defaults: { + column: "score", + type: "numeric", + direction: "desc" + }, + + + setColumn: function(newColumn){ + if (newColumn == 'score'){ + this.set({column: "score", direction: "desc"}); + } else { + //if it's a different column, default to direction "asc" + if (this.get("column") !== newColumn){ + this.set({column: newColumn, direction: "asc"}); + } else { + //toggle direction + this.toggleDirection(); + } + } + }, + + toggleDirection: function(){ + var newDirection = "desc"; + if (this.get("direction") == "desc"){ + newDirection = "asc"; + } + this.set({direction: newDirection}); + } + + + +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/searchResultsTable.js b/geoportal_1/src/main/webapp/resources/javascript/lib/searchResultsTable.js new file mode 100644 index 0000000..cbbc82b --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/searchResultsTable.js @@ -0,0 +1,656 @@ +/** + * This javascript module includes functions for dealing with the search results + * table, which inherits from the object LayerTable. LayerTable uses the + * excellent jQuery-based dataTables as the basis for the table. + * + * @author Chris Barnett + * + */ + +if (typeof OpenGeoportal == 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal != "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +/** + * SearchResultsTable constructor this object defines the behavior of the search + * results table, inherits from the LayerTable + * + * @param object + * OpenGeoportal.OgpSettings + */ +OpenGeoportal.SearchResultsTable = function SearchResultsTable() { + OpenGeoportal.LayerTable.call(this); + + this.tableOrganize = new OpenGeoportal.TableSortSettings(); + var that = this; + + this.backingData = OpenGeoportal.ogp.results; + + this.cart = OpenGeoportal.ogp.appState.get("cart"); + + this.addTableDrawCallback("sortGraphics", function() { + this.createSortGraphics(); + }); + // this.addTableDrawCallback("markPreviewed", + // function(){this.markPreviewedLayers();}); + + /* + * insert into tableConfig "Save": {"ajax": false, "resizable": false, + * "organize": false, "columnConfig": {"sName": "Save", "sTitle": "
        ", + * "bVisible": true, "aTargets": [ 3 ], "sClass": "colSave", "sWidth": + * "19px", "bSortable": false, "fnRender": function(oObj){return + * thisObj.getSaveControl(oObj);}}} + */ + + var columnObj = { + order : 1, + columnName : "Save", + solr : false, + resizable : false, + organize : false, + visible : true, + hidable : false, + header : "
        ", + columnClass : "colSave", + width : 19, + dtRender : function(data, type, full) { + var layerId = full.LayerId; + var stateVal = false; + var selModel = that.cart.findWhere({ + LayerId : layerId + }); + if (typeof selModel !== 'undefined') { + stateVal = true; + } + return that.controls.renderSaveControl(stateVal); + }, + modelRender : function(model) { + var layerId = model.get("LayerId"); + + var stateVal = false; + var selModel = that.cart.findWhere({ + LayerId : layerId + }); + if (typeof selModel !== 'undefined') { + stateVal = true; + } + + + return that.controls.renderSaveControl(stateVal); + } + + }; + + this.tableHeadingsObj.add(columnObj); + + this.adjustForScrollbar = function() { + // we need to make adjustments for Windows non webkit browsers + // console.log(columnDefs[columnDefs.length - 1]); + // returns 0 for browsers that don't need adjustment + var scrollbarWidth = OpenGeoportal.Utility.getScrollbarWidth(); + if (scrollbarWidth === 0) { + return; + } + + var models = this.tableHeadingsObj.where({ + visible : true + }); + // models are ordered by display order, so we can just take the last + // visible one + var model = models[models.length - 1]; + var newWidth = model.get("width") + scrollbarWidth; + var newClass = model.get("columnClass") + " scrollBarAdjust"; + model.set({ + width : newWidth, + columnClass : newClass + }, { + silent : true + }); + + // this needs to apply after creation of cells + jQuery( + "").appendTo( + document.documentElement); + + var panelModel = OpenGeoportal.ogp.ui.panelView.model; + panelModel.set({ + openWidth : panelModel.get("openWidth") + scrollbarWidth + }); + panelModel.set({ + panelMinWidth : panelModel.get("panelMinWidth") + scrollbarWidth + }); + + }; + + this.lastResponse = {}; + + // override + /* + * In the new search paradigm, we need to have dataTable's sSource point to + * a function that gets a url to solr with appropriate params. some params + * will be passed directly from the table so that it can handle paging; + * possibly sorting as well + * + */ + this.getDataTableParams = function() { + try { + var that = this; + // table created + // TODO: find the column index for "score"..probably can use + // tableHeadingsObj since this is initialization + var sortArr = [ 3, "desc" ]; + + // we need to make adjustments for Windows IE and Firefox scrollbars + // if we do it before getColumnDefinitions, we only have to modify + // the model for the column + this.adjustForScrollbar(); + + var columnDefs = this.getColumnDefinitions(); + + var scrollY = Math.floor(jQuery("#tabs").height() - 60) + "px"; + this.searchQ = []; + var params = { + "aoColumnDefs" : columnDefs, + "fnDrawCallback" : that.runTableDrawCallbacks, + "bAutoWidth" : false, + "sDom" : 'rtS', + "oLanguage" : { + "sEmptyTable" : "No matching layers."// function(){that.getEmptyTableMessage();}()//initialize + // the empty table + // message + }, + "bProcessing" : true, + "bServerSide" : true, + "aaSorting" : [ sortArr ], + "iDeferLoading" : [ 0 ], + "sScrollY" : scrollY, // should be a function to set this when + // table height should change + "bScrollAutoCss" : false, + "oScroller" : { + // "loadingIndicator": true, + "serverWait" : 100, + // "rowHeight": 25, + "displayBuffer" : 3 + }, + "bDeferRender" : true, + "sAjaxSource" : that.searcher.getSearchRequest(), + "fnServerData" : function(sSource, aoData, fnCallback, + oSettings) { + oSettings.jqXHR = jQuery + .ajax({ + "dataType" : 'jsonp', + "crossDomain" : true, + "jsonp" : 'json.wrf', + "type" : "GET", + // this should just be the solr url + "url" : that.searcher.getSearchRequest(), + // this should contain all the query params + "data" : that.getAdditionalQueryData(aoData), + "beforeSend" : function(jqXHR, settings) { + // console.log(that.searchQ); + // if the request is identical to the + // previous one, then cancel call to server + // otherwise abort previous searchs and + // remove + // from queue + var paramsArr = [ "_=", "json.wrf=" ]; + var continueSend = true; + + for ( var i in that.searchQ) { + if (OpenGeoportal.Utility.compareUrls( + settings.url, + that.searchQ[i].settings.url, + paramsArr)) { + + // console.log("identical search; no + // new search should be fired. using + // cached results"); + + // make sure that the lastResponse + // is populated + if (that.lastResponse + .hasOwnProperty("aaData")) { + that.lastResponse.sEcho = that + .processAoData(aoData).echo; + fnCallback(that.lastResponse); + continueSend = false; + } + } + that.searchQ[i].request.abort(); + } + + that.searchQ = []; + + if (continueSend) { + var time = Date.now(); + that.searchQ.push({ + time : time, + request : jqXHR, + settings : settings + }); + } + // console.log(continueSend); + return continueSend; + }, + "success" : function(returnedData, textStatus, + jqXHR) { + + // console.log(jqXHR); + + var dtData = {}; + var totalRecords = parseInt(returnedData.response.numFound); + + dtData.iTotalRecords = totalRecords; + dtData.iTotalDisplayRecords = totalRecords; + + dtData.sEcho = that.processAoData(aoData).echo; + dtData.aaData = that + .processSearchResponse(returnedData); + // console.log(dtData.aaData); + fnCallback(dtData); + + that.lastResponse = dtData; + jQuery(document).trigger( + "searchResults.totalFound", + totalRecords); + + }, + + "error" : function(xhr, error, thrown) { + var log = oSettings.oApi._fnLog; + + if (error == "parsererror") { + log(oSettings, 0, + 'Invalid JSON response', 1); + } else if (error == "abort") { + // log(oSettings, 0, 'response aborted', + // 1); + console.log("request aborted"); + } else { + log(oSettings, 0, 'Ajax error', 7); + } + } + + }); + } + }; + + } catch (e) { + console.log("problem creating params."); + console.log(e); + throw new Error(e); + } + + try { + for ( var param in params) { + this.dataTableParams[param] = params[param]; + } + } catch (e) { + console.log("problem setting params"); + console.log(e); + } + return this.dataTableParams; + }; + + this.processAoData = function(aoData) { + var data = {}; + // console.log(aoData); + for ( var i in aoData) { + if (aoData[i].hasOwnProperty("name") + && aoData[i].hasOwnProperty("value")) { + if (aoData[i].name === "sEcho") { + // console.log("echo:" + aoData[i].value); + data.echo = aoData[i].value; + } else if (aoData[i].name === "iDisplayStart") { + data.start = aoData[i].value; + } else if (aoData[i].name === "iDisplayLength") { + data.rows = aoData[i].value; + } + } + } + return data; + }; + + this.getAdditionalQueryData = function(aoData) { + + var data = this.processAoData(aoData); + var queryData = { + start : data.start, + rows : data.rows + }; + + return queryData; + }; + + this.searcher = new OpenGeoportal.Views.Query({ + model : new OpenGeoportal.Models.QueryTerms(), + el : "form#searchForm" + }); + + // we must override initControlHandlers to add additional eventhandlers to + // the table + this.initControlHandlers = function() { + this.initControlHandlersDefault(); + this.initSearchResultsHandlers(); + this.sortView = new OpenGeoportal.Views.Sort({ + model : this.tableOrganize, + el : $("#sortDropdown") + }); + var that = this; + this.sortView.listenTo(this.sortView.model, "change", function() { + that.fireSearch(); + }); + + var iconRenderer = function() { + return ""; + }; + var columnMenu = new OpenGeoportal.Views.CollectionMultiSelectWithCheckbox( + { + collection : that.tableHeadingsObj, + el : "div#columnDropdown", + collectionFilter : { + attr : "hidable", + val : true + }, + valueAttribute : "columnName", + displayAttribute : "displayName", + selectionAttribute : "visible", + buttonLabel : "Columns", + itemClass : "columnMenuItem", + iconRenderer : iconRenderer, + controlClass : "columnCheck" + }); + + this.previewedLayers = new OpenGeoportal.Views.PreviewedLayersTable({ + collection : that.previewed, + el : jQuery(".dataTables_scrollHead table") + }); + + }; + + + // *******Search Results only + + // save "view" + this.saveControlShowOn = function(saveControl$) { + saveControl$.removeClass("notInCart").addClass("inCart"); + var tooltipText = "Remove this layer from your cart."; + saveControl$.attr("title", tooltipText); + }; + + this.saveControlShowOff = function(saveControl$) { + saveControl$.removeClass("inCart").addClass("notInCart"); + var tooltipText = "Add this layer to your cart for download."; + saveControl$.attr("title", tooltipText); + }; + + this.saveToCartViewHandler = function() { + var that = this; + jQuery(document).on("view.showInCart", function(event, data) { + var control$ = that.findSaveControl(data.layerId); + if (control$.length > 0) { + that.saveControlShowOn(control$); + } + }); + jQuery(document).on("view.showNotInCart", function(event, data) { + var control$ = that.findSaveControl(data.layerId); + if (control$.length > 0) { + that.saveControlShowOff(control$); + } + }); + }; + + this.findSaveControl = function(layerId) { + return this.findTableControl(layerId, "td.colSave", "div.saveControl"); + }; + + // save "controller" + this.saveHandler = function() { + var that = this; + jQuery(document).on("click.save", + "#" + this.getTableId() + " div.saveControl", function(event) { + var aData = that.getRowData(this).data; + var layerId = that.getColumnData(aData, "LayerId"); + var layerModel = that.backingData.findWhere({ + LayerId : layerId + }); + that.cart.toggleCartState(layerModel); + }); + }; + + // *******Search Results only + // saveLayer or previewLayer add a layer to the layerState obj, if it is not + // there. + // click-handler for save column + + /*************************************************************************** + * Sorting + **************************************************************************/ + + this.createSortGraphics = function() { + var tableId = this.getTableId(); + var that = this; + jQuery('#' + tableId + ' > thead > tr > th') + .each( + function() { + var innerThis = jQuery(this); + var organize = that.tableOrganize; + + that.tableHeadingsObj + .each(function(model) { + if (model.get("header") == innerThis + .find('div').text()) { + if (model.get("organize")) { + // now, we need to get a value + // for organize to determine + // which class is added + innerThis + .removeClass("sortGraphic_unsorted"); + innerThis + .removeClass("sortGraphic_sortedAsc"); + innerThis + .removeClass("sortGraphic_sortedDesc"); + if (organize.get("organizeBy") == model + .get("columnName")) { + if (organize + .get("organizeDirection") == "asc") { + innerThis + .addClass("sortGraphic_sortedAsc"); + } else if (organize + .get("organizeDirection") == "desc") { + innerThis + .addClass("sortGraphic_sortedDesc"); + } + } else { + innerThis + .addClass("sortGraphic_unsorted"); + } + } + } + }); + }); + }; + + this.headerSort = function() { + // for each column header; will have to add a similar click handler for + // showCol + // the datatables object holds state info for which columns are visible + var that = this; + jQuery('#searchResults th').each(function() { + jQuery(this).unbind("mouseenter.header"); + jQuery(this).bind("mouseenter.header", function() { + jQuery(this).find('img.sortGraphic').css("display", "inline"); + }); + jQuery(this).unbind("mouseleave.header"); + jQuery(this).bind("mouseleave.header", function() { + jQuery(this).find('img.sortGraphic').css("display", "none"); + }); + jQuery(this).unbind("click.header"); + jQuery(this).bind("click.header", function() { + var title = jQuery(this).text(); + // translate title to tableHeading + that.tableHeadingsObj.each(function(model) { + if (model.get("header") == title) { + that.sortColumns(model.get("columnName"), true); + return; + } + }); + }); + }); + }; + + this.sortColumns = function(heading, toggle) { + if (heading == 'score') { + this.tableOrganize.set({ + "organizeBy" : heading, + "organizeDirection" : "desc" + }); + } else if (this.tableHeadingsObj.findWhere({ + columnName : heading + }).get("organize")) { + var currentSort = this.tableOrganize; + var sortDirection = "asc"; + if (currentSort.get("organizeBy") == heading) { + // toggle direction + if (toggle) { + if (currentSort.get("organizeDirection") == "asc") { + sortDirection = "desc"; + } + } + } + this.tableOrganize.set({ + "organizeBy" : heading, + "organizeDirection" : sortDirection + }); + } + }; + + this.getEmptyTableMessage = function getEmptyTableMessage() { + var resultsMessage = "No results were found for the terms specified."; + return resultsMessage; + ; + }; + + /** + * message handler for addSpatialToEmptySearchMessage tell user how many + * search results are available if they turn off the map constraint + * + * @param data + * @return + */ + this.emptySearchMessageHandler = function(data) { + var numberOfResults = data.response.numFound; + if (numberOfResults > 0) { + var result = "results lie"; + if (numberOfResults == 1) + result = "result lies"; + var initialMessage = "

        No results were found for the terms specified.

        Search results are currently limited to the visible map area.

        "; + + jQuery('#searchResultsMessage').html( + initialMessage + " " + numberOfResults + " " + result + + " outside the current map area."); + } + }; + + this.fireSearch = function() { + // redrawing the table causes the search to be performed + // console + // .log("*********************fire search***************************" + // + Date.now()); + this.getTableObj().fnDraw(); + }; + + // *******Search Results only + /* + * this.tableEffect = function(status){ if (status == 'searchStart'){ + * jQuery("#searchResults").animate({ opacity: 0.5 }, {queue: false, + * duration: 25}); } else if (status == 'searchEnd'){ + * jQuery("#searchResults").animate({ opacity: 1 }, {queue: false, duration: + * 25}); } }; + */ + + this.updateResultsNumber = function(numFound) { + jQuery('.resultsNumber').text(numFound); + }; + /* + * if (parseInt(numFound) == 0){ //set some html below the search results + * table var resultsMessage = "

        No results were found for the terms + * specified.

        "; if (this.appState.get("spatialSearch")){ + * this.addSpatialToEmptySearchMessage(); } + * jQuery('#searchResultsMessage').html(resultsMessage); + * jQuery('#searchResultsMessage').css("display", "block"); } else { + * jQuery('#searchResultsMessage').css("display", "none"); } + */ + + // *******Search Results only + this.currentSearchRequests = 0; + /* + * this.searchRequest = function(startIndex){ //wait a moment before firing + * search, reset the wait if a new search is fired. + * this.currentSearchRequests++; this.deferredSearchSetTimeOut(startIndex); }; + */ + + /* + * Highlight previewed layers, add separator; called on table draw callback + */ + this.markPreviewedLayers = function() { + // console.log("mark previewed"); + jQuery(".previewOn").closest('tr').addClass('previewedLayer'); + var previewedLayer$ = jQuery(".previewedLayer"); + previewedLayer$.removeClass('previewSeparator'); + previewedLayer$.last().addClass('previewSeparator'); + }; + + this.updateSortMenu = function() { + new OpenGeoportal.View.Sort(); + var organize = this.tableOrganize; + + var fields = this.tableHeadingsObj; + var buttonHtml = fields.findWhere({ + columnName : organize.get("organizeBy") + }).displayName; + jQuery("#sortDropdownSelect > span > span").html(buttonHtml); + jQuery("#sortDropdownMenu").find("input:radio").each(function() { + if (jQuery(this).val() == organize.get("organizeBy")) { + jQuery(this).attr("checked", true); + } + }); + + }; + + this.updateResultsTotalHandler = function() { + var that = this; + jQuery(document).on("searchResults.totalFound", function(event, data) { + that.updateResultsNumber(data); + }); + }; + + /* + * this.updateSortMenuHandler = function(){ var that = this; + * jQuery(document).on("view.updateSortMenu", that.updateSortMenu()); }; + */ + + this.fireSearchHandler = function() { + var that = this; + jQuery(document).on("fireSearch", function(event) { + // console.log(event); + that.fireSearch.apply(that, arguments); + }); + }; + + this.initSearchResultsHandlers = function() { + this.saveHandler(); + this.saveToCartViewHandler(); + // this.updateSortMenuHandler(); + + this.fireSearchHandler(); + this.updateResultsTotalHandler(); + }; +}; + +OpenGeoportal.SearchResultsTable.prototype = Object + .create(OpenGeoportal.LayerTable.prototype); diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/solr.js b/geoportal_1/src/main/webapp/resources/javascript/lib/solr.js new file mode 100644 index 0000000..0e61e22 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/solr.js @@ -0,0 +1,988 @@ +// This code provides an interface to the spatial data in the OpenGeoServer Solr server + +// To use it, first create an instance. Then call member functions to set +// as many search parameters as desired (e.g., setBoundingBox or setPublisher). +// Finally, to run the query call executeSearchQuery with success and error functions. + +// Solr queries can contain multiple filters (fq=) and a single query term (q=). Filters are used to eliminate rows +// from the set of returned results. However, they do not affect scoring. The query term +// can both eliminate rows and specify a boost (which affects scoring). +// For spatial searching, both filtering and query terms are used. +// For keyword searching, only query terms are used (different boosts are applied to each field). +// For searches requiring both keywords and spatial elements, their query terms are ANDed together + +// Documentation on search in OpenGeoPortal is at http://code.google.com/p/opengeoportal/wiki/Search + +// This code uses ogpConfig.json values via OpenGeoportal.InstitutionInfo.getSearch() + +// Repeat the creation and type-checking code for the next level +if (typeof OpenGeoportal === 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal !== "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +OpenGeoportal.Solr = function() { + // constructor code + + /** + * config element from ogpConfig.json can contain either a single server or + * all the shards on which to run queries we always send the query to the + * first server in the list the way the jsonp call works, server name needs + * the protocol (http://) also, it must end in "/select" for Solr. this + * function adds them if they aren't there this function is inefficient + * because it re-processes the shards every time it is called + */ + this.getServerName = function getServerName() { + var configInfo = OpenGeoportal.Config.General.get("searchUrl"); + var elements = configInfo.split(","); + var primaryServer = elements[0]; + if (!(primaryServer.indexOf("http://") == 0 || primaryServer + .indexOf("https://") == 0)) { + primaryServer = "http://" + primaryServer; + } + var select = "select"; + if ((primaryServer.substring(primaryServer.length - select.length) == select) == false) { + // here if the server name does not end in select + primaryServer = primaryServer + "select"; + } + return primaryServer; + }; + + /** + * return the shard argument for a Solr search command config element from + * ogpConfig.json can contain a single server or all the shards on which to + * run queries the returned Solr argument should not contain any protocol + * specification ("http://") nor should the urls end in "/select". this + * function removes these elements as needed this function is inefficient + * because it re-processes the shards every time it is called + * + * @return + */ + this.getShardServerNames = function getShardNames() { + var configInfo = OpenGeoportal.Config.General.get("searchUrl"); + var elements = configInfo.split(","); + var shards = ""; + if (elements.length == 1) { + // here if there really aren't any shards, only a single primary + // server listed + return shards; + } + // otherwise, we build the Solr shard string + var protocol = "http://"; + var select = "select"; + for (var i = 0; i < elements.length; i++) { + + if (elements[i].indexOf(protocol) == 0) { + // shards can not specify protocol + elements[i] = elements[i].substr(protocol.length); + } + + if ((elements[i].substring(elements[i].length - select.length) == select) == true) { + // here if the current element ends in "select", we must strip + // it from shards + elements[i] = elements[i].substring(0, elements[i].length + - select.length); + } + + if (shards.length > 0) { + shards = shards + ","; + } + + shards = shards + elements[i]; + } + shards = "shards=" + shards; + return shards; + }; + + /*************************************************************************** + * Base Query + **************************************************************************/ + + this.ignoreSpatial = false; + this.setIgnoreSpatial = function(bool) { + this.ignoreSpatial = bool; + }; + + this.getSearchParams = function() { + // TODO: this is not the greatest. It might be better if the solr object + // was a model/collection? + this.textParams = this.getOgpTextSearchParams(); + this.spatialParams = {}; + if (!this.ignoreSpatial) { + this.spatialParams = this.getOgpSpatialQueryParams(this.bounds); + } + + this.baseParams = { + wt : "json", + /* + * facet: true, "facet.field": [ "{!ex=dt,insf}InstitutionSort", + * "{!ex=dt,insf}DataTypeSort", "{!ex=dt,insf}PlaceKeywordsSort" ], + * "f.PlaceKeywordsSort.facet.mincount": 1, + * "f.PlaceKeywordsSort.facet.limit": 10, + */ + defType : "edismax", + fl : this.getReturnedColumns(this.SearchRequest), + sort : this.getSortClause() + // , + // debug: true + }; + + var params = this.combineParams(this.baseParams, this.spatialParams, + this.textParams); + return params; + }; + + this.combineParams = function() { + var newParams = {}; + for ( var i in arguments) { + var currentObj = arguments[i]; + + for ( var j in currentObj) { + if (typeof newParams[j] === "undefined" + || newParams[j].length === 0) { + newParams[j] = currentObj[j]; + } else if (jQuery.isArray(newParams[j])) { + if (jQuery.isArray(currentObj[j])) { + for ( var k in currentObj[j]) { + newParams[j].push(currentObj[j][k]); + } + } else { + newParams[j].push(currentObj[j]); + } + } else { + newParams[j] = currentObj[j]; + } + } + } + + return newParams; + }; + + /* + * Sorting + */ + + this.SortAscending = "asc"; + this.SortDescending = "desc"; + + this.SortOrder = this.SortDescending; + this.SortColumn = "score"; + + this.setSort = function(column, order) { + if (order !== "asc" && order !== "desc") { + order = this.SortOrder; + } + if (column === null) { + column = this.SortColumn; + } else if (_.contains([ "score", "ContentDate", "Access" ], column)) { + // nothing to do, sortColumn + // doesn't need adjustment + } else { + column += "Sort"; // use solr sort column + // that hasn't been + // tokenized + // Is it worth generalizing this? + } + + this.SortColumn = column; + this.SortOrder = order; + }; + + // this function must be passed the name of the column to sort on and the + // direction to sort + // e.g., getSortClause("ContentDate", this.SortDecending); + this.getSortClause = function getSortClause() { + var column = this.SortColumn; + var order = this.SortOrder; + + var sortClause = column + " " + order; + return sortClause; + }; + + /* + * Returned Columns + */ + this.SearchRequest = "Search"; + this.MetadataRequest = "FgdcText"; + this.CountRequest = "CountOnly"; + + this.SearchRequestColumns = [ "Name", "Institution", "Access", "DataType", + "LayerDisplayName", "Publisher", "GeoReferenced", "Originator", + "Location", "MinX", "MaxX", "MinY", "MaxY", "ContentDate", + "LayerId", "score", "WorkspaceName", "CollectionId", "Availability" ]; + + // this function returns a Solr fl clause specifying the columns to return + // for the passed request + // since the full FGDC text can be very long, we don't want to return it for + // search requests + this.getReturnedColumns = function getReturnedColumns(requestType) { + var returnedColumns = ""; + if (requestType == this.MetadataRequest) { + returnedColumns = "LayerId,FgdcText"; + } else if (requestType == this.CountRequest) { + returnedColumns = ""; + } else if (requestType == this.SearchRequest) { + returnedColumns = this.SearchRequestColumns.join(); + } else { + returnedColumns = "error in this.getReturnedColumnsClause" + + " did not understand passed requestType " + requestType; + } + + return returnedColumns; + }; + + this.getURL = function() { + + var query = jQuery.param(this.getSearchParams(), true); + return this.getServerName() + "?" + query; + + }; + + /*************************************************************************** + * Keyword/text components + **************************************************************************/ + + /** + * Return parameters for text search component + * + * @private + * @return {object} solr parameters + */ + this.getOgpTextSearchParams = function() { + + var terms = this.getTerms(); + + var params = { + qf : terms.fields.join(" "), + q : terms.userTerms || "*", + fq : this.filters + }; + + return params; + }; + + // default value + this.SearchType = "basic"; + this.setSearchType = function(searchType) { + this.SearchType = searchType; + }; + + // auto sense whether this is a basic or advanced search + // based on which ui fields are populated; + this.getTerms = function() { + var searchType = this.SearchType; + var terms = {}; + if (searchType === "advanced") { + terms.userTerms = this.getAdvancedKeywords(); + terms.fields = this.getAdvancedKeywordTermsArr(); + } else if (searchType === "basic") { + terms.userTerms = this.what; + terms.fields = this.getBasicKeywordTermsArr(); + } else { + throw new Error("Search type '" + searchType + "' is unsupported."); + } + return terms; + }; + + this.setWhat = function(what) { + this.what = what; + }; + + this.setWhere = function(where) { + this.where = where; + }; + + this.AdvancedKeywordString = null; + + this.setAdvancedKeywords = function setAdvancedKeywords(keywordString) { + this.AdvancedKeywordString = keywordString; + }; + + this.getAdvancedKeywords = function getAdvancedKeywords() { + return this.AdvancedKeywordString; + }; + + // you can specify different solr fields and boosts for basic and advanced. + this.LayerDisplayNameTerm = { + basic : { + term : "LayerDisplayNameSynonyms", + boost : .2 + }, + advanced : { + term : "LayerDisplayNameSynonyms", + boost : .2 + } + }; + + this.ThemeKeywordsTerm = { + term : "ThemeKeywordsSynonymsLcsh", + boost : .1 + }; + + this.PlaceKeywordsTerm = { + term : "PlaceKeywordsSynonyms", + boost : .1 + }; + + this.PublisherTerm = { + term : "Publisher", + boost : .1 + }; + + this.OriginatorTerm = { + term : "Originator", + boost : .1 + }; + + this.IsoTopicTerm = { + term : "ThemeKeywordsSynonymsIso", + boost : .1 + }; + + // Terms that will be searched in a basic search against the what field + // contents + // Search Title, theme keywords, place keywords, publisher, and originator + this.BasicKeywordTerms = [ this.LayerDisplayNameTerm, this.IsoTopicTerm, + this.ThemeKeywordsTerm, this.PlaceKeywordsTerm, this.PublisherTerm, + this.OriginatorTerm ]; + + // Terms that will be searched in an advanced search against the keyword + // field contents + // Search Title, theme keywords, and place keywords + this.AdvancedKeywordTerms = [ this.LayerDisplayNameTerm, + this.ThemeKeywordsTerm, this.PlaceKeywordsTerm ]; + + this.getKeywordTerms = function(termArr, termType) { + var keywordArr = []; + for (var i = 0; i < termArr.length; i++) { + var currentTerm = termArr[i]; + if (currentTerm.hasOwnProperty(termType)) { + currentTerm = currentTerm[termType]; + } + keywordArr.push(currentTerm.term + "^" + currentTerm.boost); + } + return keywordArr; + }; + + this.getBasicKeywordTermsArr = function getBasicKeywordTermsArr() { + return this.getKeywordTerms(this.BasicKeywordTerms, "basic"); + }; + + this.getAdvancedKeywordTermsArr = function getAdvancedKeywordTermsArr() { + return this.getKeywordTerms(this.AdvancedKeywordTerms, "advanced"); + }; + + /* + * Filters + * + */ + this.filters = []; + // a private function used to create filters + this.createFilter = function createFilter(columnName, values, prefix, + joiner) { + if (typeof values === "undefined" || values.length === 0) { + return ""; // on empty input, no filter returned + } + if (!jQuery.isArray(values)) { + values = [ values ]; + } + if (typeof prefix === "undefined") { + prefix = ""; + } + var i; + var temp = []; + for (i = 0; i < values.length; i++) { + var value = values[i]; + temp.push(columnName + ":" + value); + } + if (typeof joiner === "undefined") { + joiner = "OR"; + } else { + if ((joiner != "OR") && (joiner != "AND")) { + throw new Error("clause must be joined with 'AND' or 'OR'."); + } + + } + var filter = temp.join(" " + joiner + " "); + + return filter; + }; + + this.createRangeFilter = function(field, from, to, prefix) { + if (typeof prefix === "undefined") { + prefix = ""; + } + var searchClause = field + ":[" + from + " TO " + to + "]"; + return prefix + searchClause; + }; + + this.addFilter = function(filter) { + + if (filter.length > 0) { + this.filters.push(filter); + } + }; + + /** + * Specialized Filters + */ + this.createAccessFilter = function(arrDisplayRestricted) { + + var accessFilter = this.createFilter("Institution", + arrDisplayRestricted); + if (accessFilter.length > 0) { + accessFilter += " OR Access:Public"; + } + return accessFilter; + }; + + this.filterDateValue = function filterDateValue(dateValue) { + if ((dateValue == null) || (dateValue == "")) { + return ""; + } + // only 4 digit numbers should be allowed + if (!jQuery.isNumeric(dateValue)) { + throw new Error("Year must be numeric"); + } + var dateLen = dateValue.length; + + if (dateLen > 4) { + throw new Error("Year cannot be more than 4 digits."); + } else if (dateLen == 4) { + return dateValue; + } else if (dateLen == 3) { + return "0" + dateValue; + } else if (dateLen == 2) { + return "00" + dateValue; + } else if (dateLen == 1) { + return "000" + dateValue; + } + + return ""; + + }; + + // this function must be passed years, either the from date or the to date + // can be null + // e.g., getDateFilter(1940, null); // get layers since 1940 + this.createDateRangeFilter = function createDateRangeFilter(dateField, + fromDate, toDate) { + var dateSuffix = "-01-01T01:01:01Z"; // per an ISO standard solr + // expects + fromDate = this.filterDateValue(fromDate); + toDate = this.filterDateValue(toDate); + + if (((fromDate == null) || (fromDate == "")) + && ((toDate == null) || (toDate == ""))) { + return ""; // no date search data specified so no search filter + } + + fromDate = fromDate || "0001"; + toDate = toDate || "2100"; + + fromDate += dateSuffix; + toDate += dateSuffix; + + return this.createRangeFilter(dateField, fromDate, toDate); + + }; + + /*************************************************************************** + * Spatial query components + **************************************************************************/ + + // term objects + // boost have to be extremely high when using boost function syntax to match + // up with + // values in previous version. + this.LayerWithinMap = { + term : "LayerWithinMap", + boost : 80.0 + }; + + this.LayerMatchesScale = { + term : "LayerMatchesScale", + boost : 70.0 + }; + this.LayerMatchesCenter = { + term : "LayerMatchesCenter", + boost : 15.0 + }; + + this.LayerAreaIntersection = { + term : "LayerAreaIntersection", + boost : 30.0 + }; + + // all we need is "bounds", which in the application is the map extent + this.getOgpSpatialQueryParams = function(bounds) { + /* + * var centerLon = this.getCenter(bounds.minX, bounds.maxX); var + * centerLat = this.getCenter(bounds.minY, bounds.maxY); + * console.log(centerLon); console.log(centerLat); + */ + // bf clauses are additive + // var area = this.getBoundsArea(bounds); + var bf_array = [ + this.classicLayerMatchesArea(bounds) + "^" + + this.LayerMatchesScale.boost, + this.classicLayerAreaIntersectionScore(bounds) + "^" + + this.LayerAreaIntersection.boost, + this.classicCenterRelevancyClause() + "^" + + this.LayerMatchesCenter.boost, + this.classicLayerWithinMap(bounds) + "^" + + this.LayerWithinMap.boost ]; + var params = { + bf : bf_array, + fq : [ this.getIntersectionFilter() ], + intx : this.getIntersectionFunction(bounds) + }; + + return params; + }; + + /** + * Query component to filter out non-intersecting layers. + * + * @return {string} Query string filter + */ + this.getIntersectionFilter = function() { + // this filter should not be cached, since it will be different each + // time + return "{!frange l=0 incl=false cache=false}$intx"; + + }; + + /** + * Returns the intersection area of the layer and map. + * + * @return {string} Query string to calculate intersection + */ + this.getIntersectionFunction = function(bounds) { + // TODO: this needs work. have to account for dateline crossing properly + var getRangeClause = function(minVal, minTerm, maxVal, maxTerm) { + + var rangeClause = "max(0,sub(min(" + maxVal + "," + maxTerm + + "),max(" + minVal + "," + minTerm + ")))"; + return rangeClause; + }; + + var xRange; + if (bounds.minX > bounds.maxX) { + // crosses the dateline + var xRange1 = getRangeClause(bounds.minX, "MinX", 180, "MaxX"); + var xRange2 = getRangeClause(-180, "MinX", bounds.maxX, "MaxX"); + xRange = "sum(" + xRange1 + "," + xRange2 + ")"; + } else { + xRange = getRangeClause(bounds.minX, "MinX", bounds.maxX, "MaxX"); + } + + var yRange = getRangeClause(bounds.minY, "MinY", bounds.maxY, "MaxY"); + + var intersection = "product(" + xRange + "," + yRange + ")"; + + return intersection; + + }; + + /** + * score layer based on how close map center latitude is to the layer's + * center latitude + */ + this.layerNearCenterClause = function(center, minTerm, maxTerm) { + var smoothingFactor = 1000; + var layerMatchesCenter = "recip(abs(sub(product(sum(" + minTerm + "," + + maxTerm + "),.5)," + center + ")),1," + smoothingFactor + "," + + smoothingFactor + ")"; + return layerMatchesCenter; + }; + + this.classicCenterRelevancyClause = function() { + var center = this.getCenter(); + var clause = "sum(" + + this.layerNearCenterClause(center.centerX, "MinX", "MaxX") + + ","; + clause += this.layerNearCenterClause(center.centerY, "MinY", "MaxY") + + ")"; + return clause; + }; + + /** + * return a search element to boost the scores of layers whose scale matches + * the displayed map scale specifically, it compares their area + */ + this.classicLayerMatchesArea = function(bounds) { + var mapDeltaX = Math.abs(bounds.maxX - bounds.minX); + var mapDeltaY = Math.abs(bounds.maxY - bounds.minY); + var mapArea = (mapDeltaX * mapDeltaY); + var smoothingFactor = 1000; + var layerMatchesArea = "recip(sum(abs(sub(Area," + mapArea + + ")),.01),1," + smoothingFactor + "," + smoothingFactor + ")"; + return layerMatchesArea; + }; + + /** + * return a search clause whose score reflects how much of the map this + * layers covers 9 points in a 3x3 grid are used. we compute how many of + * those 9 points are within the the layer's bounding box. This count is + * then normalized and multiplied by the boost the grid is evenly space and + * does not include points on the edge of the map. for example, for a 3x3 + * grid we use 9 points spaced at 1/4, 1/2 and 3/4 x and y each point in the + * grid is weighted evenly + */ + this.classicLayerAreaIntersectionScore = function(bounds) { + var mapMaxX = bounds.maxX; + var mapMinX = bounds.minX; + var mapMinY = bounds.minY; + var mapMaxY = bounds.maxY; + + var stepCount = 3; // use 3x3 grid + var mapDeltaX = Math.abs(mapMaxX - mapMinX); + var mapXStepSize = mapDeltaX / (stepCount + 1.); + + var mapDeltaY = Math.abs(mapMaxY - mapMinY); + var mapYStepSize = mapDeltaY / (stepCount + 1.); + + var clause = "sum("; // add up all the map points within the layer + for (var i = 0; i < stepCount; i++) { + + for (var j = 0; j < stepCount; j++) { + + var currentMapX = mapMinX + ((i + 1) * mapXStepSize); + var currentMapY = mapMinY + ((j + 1) * mapYStepSize); + + // console.log([currentMapX, currentMapY]); + // is the current map point in the layer + // that is, is currentMapX between MinX and MaxX and is + // currentMapY betweeen MinY and MaxY + + // why 400? this should not be a fixed size + var thisPointWithin = "map(sum(map(sub(" + currentMapX + + ",MinX),0,400,1,0),"; + thisPointWithin += "map(sub(" + currentMapX + + ",MaxX),-400,0,1,0),"; + thisPointWithin += "map(sub(" + currentMapY + + ",MinY),0,400,1,0),"; + thisPointWithin += "map(sub(" + currentMapY + + ",MaxY),-400,0,1,0)),"; + thisPointWithin += "4,4,1,0)"; // final map values + + // note that map(" + currentMapX + ",MinX,MaxX,1,0) doesn't work + // because the min,max,target in map must be constants, not + // field values + // so we do many sub based comparisons + + if ((i > 0) || (j > 0)) { + clause += ","; // comma separate point checks + } + + clause += thisPointWithin; + } + } + clause += ")"; + + // clause has the sum of 9 point checks, this could be 9,6,4,3,2,1 or 0 + // normalize to between 0 and 1, then multiple by boost + + clause = "product(" + clause + "," + (1.0 / (stepCount * stepCount)) + + ")"; + + return clause; + }; + + /** + * compute a score for layers within the current map the layer's MinX and + * MaxX must be within the map extent in X and the layer's MinY and MaxY + * must be within the map extent in Y I had trouble using a range based test + * (e.g., MinX:[mapMinX+TO+mapMapX]) along with other scoring functions + * based on _val_. So, this function is like the other scoring functions and + * uses _val_. The Solr "sum" function returns 4 if the layer is contained + * within the map. The outer "map" converts 4 to 1 and anything else to 0. + * Finally, the product converts the 1 to LayerWithinMapBoost + */ + this.classicLayerWithinMap = function(bounds) { + var mapMinX = bounds.minX; + var mapMaxX = bounds.maxX; + var mapMinY = bounds.minY; + var mapMaxY = bounds.maxY; + + var layerWithinMap = "if(and(exists(MinX),exists(MaxX),exists(MinY),exists(MaxY)),"; + + layerWithinMap += "map(sum("; + layerWithinMap += "map(MinX," + mapMinX + "," + mapMaxX + ",1,0),"; + layerWithinMap += "map(MaxX," + mapMinX + "," + mapMaxX + ",1,0),"; + layerWithinMap += "map(MinY," + mapMinY + "," + mapMaxY + ",1,0),"; + layerWithinMap += "map(MaxY," + mapMinY + "," + mapMaxY + ",1,0))"; + layerWithinMap += ",4,4,1,0),0)"; + + return layerWithinMap; + }; + + // Helpers + + this.setBoundingBox = function setBoundingBox(bounds) { + this.bounds = { + minX : Math.max(bounds.minX, -180), + minY : Math.max(bounds.minY, -90), + maxX : Math.min(bounds.maxX, 180), + maxY : Math.min(bounds.maxY, 90) + }; + }; + + this.clearBoundingBox = function clearBoundingBox() { + this.bounds = {}; + }; + + this.center = {}; + + this.setCenter = function(center) { + this.center = center; + }; + + this.getCenter = function() { + return this.center; + /* + * if (min >= max){ var tempMin = min; min = max; max = tempMin; } + * return Math.abs((max - min)/2) + min; + */ + }; + + this.getBoundsArea = function(bounds) { + var w = Math.abs(bounds.maxX - bounds.minX); + var l = Math.abs(bounds.maxY - bounds.minY); + + return l * w; + }; + + /** + * Other Solr queries: term query, layerInfo query, metadata query + * + */ + + /** + * execute the passed query asynchronously and call the success or error + * function when completed a jsonp + */ + + this.sendToSolr = function sendToSolr(url, successFunction, errorFunction) { + var ajaxParams = { + type : "GET", + url : url, + dataType : 'jsonp', + jsonp : 'json.wrf', + timeout : 5000, + crossDomain : true, + success : function(data) { + successFunction(data); + }, + error : function(arg) { + errorFunction(arg); + } + }; + if (arguments.length > 3) { + // 4th parameter is context parameter + var newContext = arguments[3]; + ajaxParams.context = newContext; + var newSuccessFunction = function(data) { + successFunction.apply(newContext, arguments); + }; + ajaxParams.success = newSuccessFunction; + } + jQuery.ajax(ajaxParams); + }; + + // returns the solr query to obtain a layer's metadata document from the + // Solr server + this.getMetadataParams = function(layerId) { + var metadataParams = { + q : this.createFilter("LayerId", layerId), + fl : this.getReturnedColumns(this.MetadataRequest), + wt : "json" + }; + + return metadataParams; + }; + + // returns the solr query to obtain terms directly from the index for a + // field + this.getTermParams = function(termField, requestTerm) { + var termParams = { + "terms.fl" : termField, + "terms.regex" : ".*" + requestTerm + ".*", + "terms.regex.flag" : "case_insensitive", + "terms.limit" : -1, + omitHeader : true, + wt : "json" + }; + return termParams; + }; + + // returns the solr query params to obtain a layer info from the Solr server + // given + // a layerId or array of layerId's + this.getInfoFromLayerIdParams = function getInfoFromLayerIdQuery(layerId) { + + var infoParams = { + q : this.createFilter("LayerId", layerId), + wt : "json", + fl : this.getReturnedColumns(this.SearchRequest), + rows : 10000 + }; + return infoParams; + }; + + this.getLayerInfoFromSolr = function(layerIds, successFunction, + errorFunction) { + var url = this.getServerName(); + + var query = jQuery.param(this.getInfoFromLayerIdParams(layerIds), true); + + this.sendToSolr(url + "?" + query, successFunction, errorFunction); + }; + + this.termQuery = function termQuery(field, term, successFunction, + errorFunction) { + var url = this.getServerName().substring(0, + this.getServerName().indexOf("select")) + + "terms"; + + var query = jQuery.param(this.getTermParams(field, term), true); + + this.sendToSolr(url + "?" + query, successFunction, errorFunction); + }; + + /* + * + * Experimental spatial query clauses + * + */ + + // all we need is "bounds", which in the application is the map extent + this.getNewOgpSpatialQueryParams = function(bounds) { + var centerLon = this.getCenter(bounds.minX, bounds.maxX); + var centerLat = this.getCenter(bounds.minY, bounds.maxY); + console.log(centerLon); + console.log(centerLat); + // bf clauses are additive + var area = this.getBoundsArea(bounds); + var bf_array = [ + this.getBoundsAreaRelevancyClause() + "^" + + this.LayerMatchesScale.boost, + // this.getIntersectionAreaRelevancyClause(area) + "^" + + // this.LayerAreaIntersection.boost, + this.getCenterRelevancyClause(centerLat, centerLon) + "^" + + this.LayerMatchesCenter.boost// , + // this.getLayerWithinMapClause() + "^" + this.LayerWithinMap.boost + ]; + var params = { + bf : bf_array, + boost : this.getLayerWithinMapClause(), + fq : [ this.getIntersectionFilter() ], + intx : this.getIntersectionFunction(bounds), + union : area, + debug : true + }; + + return params; + }; + + /** + * Calculates the reciprocal of the distance of the layer center from the + * bounding box center. + * + * note that, while the squared Euclidean distance is perfectly adequate to + * calculate relative distances, it affects the score/ranking in a + * non-linear way; we may decide that is ok + * + * @return {string} query string to calculate score for center distance + */ + this.getCenterRelevancyClause = function(centerLat, centerLon) { + var smoothingFactor = 1000; + var score = "if(and(exists(CenterX),exists(CenterY)),"; + + score += "recip(dist(2,CenterX,CenterY," + centerLon + "," + centerLat + + "),1," + smoothingFactor + "," + smoothingFactor + "),0)"; + + return score; + + }; + + /** + * Compares the area of the layer to the area of the map extent; "scale" + * + * @return {string} query string to calculate score for area comparison + */ + this.getBoundsAreaRelevancyClause = function() { + // smoothing factor really should be examined; is the curve shape + // appropriate? + var smoothingFactor = 1000; + var areaClause = "if(exists(Area),recip(abs(sub(Area,$union)),1," + + smoothingFactor + "," + smoothingFactor + "),0)"; + return areaClause; + }; + + /** + * + * Compares the area of the layer's intersection with the map extent to the + * area of the map extent. $intx depends on the intersection function + * defined in "getIntersectionFunction", while $union depends on the value + * of union being populated with the area of the map extent + * + * @return {string} query string to calculate score for area comparison + */ + this.getIntersectionAreaRelevancyClause = function(area) { + // how useful is this? what exactly are we trying to measure that is not + // accounted for elsewhere implicitly or explicitly + + // $intx is the area of intersection of the layer bounds and the search + // extent + // $union is the area of the search extent + + // a few different ideas + // var areaClause = "scale(div($intx,$union),0,1)"; + // if $intx - $union = 0, then the layer likely fully overlaps + // var areaClause = + // "if($intx,recip(abs(sub($intx,$union)),1,1000,1000),0)"; + // + area = area - 1; + var areaClause = "if(not(sub($union,$intx)),div($intx,$union),0)"; + // var areaClause = "if(map(Area,0," + area + + // ",1,0),div($intx,$union),0)"; + return areaClause; + + }; + this.getLayerWithinMapClause = function() { + // $intx is the area of intersection + // Area is the stored area of the layer extent + // var areaClause = "div($intx,Area)"; + // be careful with these reciprocal clauses the way they are weighted + // should generally be dynamic + // var areaClause = + // "if(exists(Area),recip(abs(sub($intx,Area)),1,Area,Area),0)"; + // map(x,min,max,target,value) + // to give the boost if a certain percentage of the area is in the + // search extent + // map($intx,product(.95,Area),Area,0,1); + // This clause is true to Steve's original conception of giving a + // straight-across + // boost to any layer fully contained by the search extent, translated + // into a more + // compact expression, as allowed by newer solr query syntax. + // if the Area value exists, subtract the area of intersection from the + // total layer area. + // this will yield 0 if they are the same, which equates to a boolean + // false + // take "not" to yield a boolean true (= 1) + // if there is a differential, "not" will yield a boolean false (= 0) + // var areaClause = "if(exists(Area),not(sub(Area,$intx)),0)"; + // var within = "1"; + // var notwithin = "0"; + // var areaClause = "if(exists(Area),not(sub(Area,$intx)),0)"; + // var areaClause = "{!frange u=1 incu=false cache=false} + // if(exists(Area),if(not(sub(Area,$intx)),div($intx,$union),0),0)"; + var areaClause = "{!frange u=15 l=0 incu=false incl=false cache=false} product(15,div($intx,$union))"; + return areaClause; + }; + +}; diff --git a/geoportal_1/src/main/webapp/resources/javascript/lib/templates/template.js b/geoportal_1/src/main/webapp/resources/javascript/lib/templates/template.js new file mode 100644 index 0000000..b8c32a7 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/lib/templates/template.js @@ -0,0 +1,215 @@ +if (typeof OpenGeoportal == 'undefined') { + OpenGeoportal = {}; +} else if (typeof OpenGeoportal != "object") { + throw new Error("OpenGeoportal already exists and is not an object"); +} + +OpenGeoportal.Template = function() { + + var cartHeaderHtml = '
        '; + cartHeaderHtml += '
        '; + + this.cartHeader = _.template(cartHeaderHtml); + + var cartTableHtml = '
        '; + cartTableHtml += '<% _.each(headers, function(col) { %>
        <%= col.header %>
        <% }); %>'; + cartTableHtml += '
        '; + cartTableHtml += '
        '; + this.cartTable = _.template(cartTableHtml); + + this.dataTable = _ + .template('
        '); + + var mapToolBarHtml = '
        ' + + '
        ' + '
        '; + + var genericDivHtml = '
        '; + this.genericDiv = _.template(genericDivHtml); + var mapHtml = '
        ' + this.genericDiv({ + elId : "nwCorner", + elClass : "corner slideHorizontal" + }) + this.genericDiv({ + elId : "neCorner", + elClass : "corner" + }) + this.genericDiv({ + elId : "swCorner", + elClass : "corner slideHorizontal" + }) + this.genericDiv({ + elId : "seCorner", + elClass : "corner" + }) + '
        '; + this.map = _.template(mapToolBarHtml + mapHtml); + + this.mapButton = _ + .template(''); + this.basemapMenu = _.template('
        '); + + var loadIndicatorHtml = '
        '; + this.loadIndicator = _.template(loadIndicatorHtml); + + var requestIndicatorHtml = '
        '; + requestIndicatorHtml += '
        '; + this.requestIndicator = _.template(requestIndicatorHtml); + + var selectHtml = '
        ' + "
        " + + '' + "
        " + + "
          <%= menuHtml%>
        ";// + + '
        '; + + this.styledSelectBody = _.template(selectHtml); + + var simpleMenuHtml = '
      • <%= name %>' + + '
      • '; + this.simpleMenuItem = _.template(simpleMenuHtml); + + var controlMenuHtml = '
      • <%= icon %>
        <%= name %>
        <%= control %>
        '; + controlMenuHtml += '
      • '; + this.controlMenuItem = _.template(controlMenuHtml); + + var genericButtonHtml = ''; + this.genericButton = _.template(genericButtonHtml); + + var dialogHeaderButtonHtml = ''; + this.dialogHeaderButton = _.template(dialogHeaderButtonHtml); + + /*************************************************************************** + * Preview Tools + **************************************************************************/ + var previewToolContainerHtml = '
        '; + this.previewToolsContainer = _.template(previewToolContainerHtml); + + var cartPreviewToolContainerHtml = '
        '; + this.cartPreviewToolsContainer = _.template(cartPreviewToolContainerHtml); + // html content/formatting for expanded row + var previewToolHtml = '
        <%=toolsMarkup%>'; + previewToolHtml += '
        '; + this.previewTools = _.template(previewToolHtml); + + var sliderHtml = '
        '; + sliderHtml += '
        '; + sliderHtml += '
        '; + sliderHtml += '<%=label%>:'; + sliderHtml += '<%=value%>'; + sliderHtml += '<%=units%>'; + sliderHtml += '
        '; + sliderHtml += '
        '; + sliderHtml += '
        '; + sliderHtml += '
        '; + sliderHtml += '
        '; + /* remove the class "previewToolsSlider" to use the default jquery ui slider */ + sliderHtml += '
        '; + + this.sliderControl = _.template(sliderHtml); + + var colorHtml = '
        '; + this.colorControl = _.template(colorHtml); + + // can probably make all of these from this generic control html + var zoomHtml = '
        '; + this.zoomControl = _.template(zoomHtml); + + var getFeatureHtml = '
        '; + this.getFeatureControl = _.template(getFeatureHtml); + + var genericControl = '
        <%= text %>
        '; + this.genericControl = _.template(genericControl); + + var genericIconHtml = '
        <%= text %>
        '; + this.genericIcon = _.template(genericIconHtml); + + var genericDialogHtml = '
        '; + this.genericDialogShell = _.template(genericDialogHtml); + + var genericIframeHtml = ''; - } - if (message != null) { - dialogContent = dialogContent + '
        ' + message + ""; - } - - return dialogContent; - }; - - this.loginDialog = function(loginObj){ - var dialogContent = ""; - if (loginObj == null){ - dialogContent = this.getLoginContent(); - } else if (typeof loginObj.message == "undefined"){ - dialogContent = this.getLoginContent(); - } else { - dialogContent = this.getLoginContent(loginObj.message); - } - - var that = this; - if (typeof jQuery('#loginDialog')[0] == 'undefined'){ - var shareDiv = '
        \n'; - shareDiv += dialogContent; - shareDiv += '
        \n'; - jQuery('body').append(shareDiv); - - var loginButtons; - if (this.TYPE == "form"){ - loginButtons = { - Login: function() { - that.processFormLogin(); - }, - Cancel: function() { - jQuery(this).dialog('close'); - jQuery(document).trigger("loginCancel"); - } - }; - } else if (this.TYPE == "iframe"){ - loginButtons = { - Cancel: function() { - jQuery(this).dialog('close'); - jQuery(document).trigger("loginCancel"); - } - }; - } - - jQuery("#loginDialog").dialog({ - autoOpen: false, - width: 'auto', - title: this.dialogTitle, - context: that, - resizable: false, - zIndex: 3000, - stack: true, - buttons: loginButtons }); - } else { - //replace dialog text/controls & open the instance of 'dialog' that already exists - jQuery("#loginDialog").html(dialogContent); - } - - - if (this.TYPE == "form"){ - jQuery("#loginDialog").unbind("keypress"); - jQuery('#loginDialog').bind("keypress", function(event){ - if (event.keyCode == '13') { - that.processFormLogin(); - } - }); - } else if (this.TYPE == "iframe"){ - this.processIframeLogin(); - } - - jQuery("#loginDialog").dialog('open'); -}; - -this.checkLoginStatus = function(){ - var that = this; - var url = this.getUrl() + "loginStatus"; - var ajaxArgs = {url: url, type: "GET", - context: that, - crossDomain: true, - dataType: "jsonp", - success: that.loginStatusResponse - }; - jQuery.ajax(ajaxArgs); -}; - -this.getUrl = function(){ - var hostname = window.location.hostname; - var currentPathname = window.location.pathname; - var pathParts = currentPathname.split("/"); - var extraPath = ""; - if (pathParts.length > 2) - { - // a hack to handle localhost where there is another element in the pathname - extraPath = pathParts[1] + "/"; - } - var port = window.location.port; - if ((port == "") || (port == null)){ - port = ""; - } else { - port = ":" + port; - } - var protocol = "https"; - if (hostname == "localhost"){ - //protocol = "http"; - port = ":8443"; - } - var url = protocol + "://" + hostname + port + "/" + extraPath; - return url; -}; -// retrieve user entered values, generate https request and set login flag -// some special processing is included for running on localhost -this.processFormLogin = function() -{ - var that = this; - var url = this.getUrl() + this.authenticationPage; - //var url = this.authenticationPage; - var username = jQuery("#loginFormUsername").val(); - var password = jQuery("#loginFormPassword").val(); - var ajaxArgs = {url: url, - context: that, - xhrFields: { - withCredentials: true - }, - data: {"j_username": username, "j_password": password}, - dataType: "jsonp", - success: that.loginResponse, - error: that.loginResponseError}; - jQuery.ajax(ajaxArgs); - -}; - -this.processIframeLogin = function(){ - var that = this; - jQuery.receiveMessage( - function(e) { - that.loginResponse(jQuery.parseJSON(e.data)); - }, - that.ogpBase); -}; - -//callback handler invoked with response to authenticate server call -//sets the userId variable to hold the id of the logged in user -this.loginStatusResponse = function(data, textStatus, jqXHR) -{ - - var that = this; - if (data.authenticated) - { - var username = data.username; - this.userId = username || data.authenticated; - jQuery(document).trigger("loginSucceeded"); - } - else - { - that.loginStatusError(data,textStatus,jqXHR); - - } -}; -//callback handler invoked with response to authenticate server call -//sets the userId variable to hold the id of the logged in user -this.loginResponse = function(data, textStatus, jqXHR) -{ - - var that = this; - if (data.authenticated) - { - var username = data.username; - this.userId = username || data.authenticated; - jQuery("#loginDialog").dialog('close'); - jQuery(document).trigger("loginSucceeded"); - } - else - { - that.loginResponseError(data,textStatus,jqXHR); - - } -}; - - -//callback handler invoked when if an error occurs during ajax call to authenticate a user -this.loginResponseError = function(jqXHR, textStatus, errorThrown){ - this.userId = null; - this.loginDialog({"message": "login failed"}); - jQuery(document).trigger("loginFailed"); -}; - -//callback handler invoked when if an error occurs during ajax call to authenticate a user -this.loginStatusError = function(jqXHR, textStatus, errorThrown){ - this.userId = null; - jQuery(document).trigger("loginFailed"); -}; - - -}; diff --git a/geoportal_1/src/main/webapp/resources/javascript/main.js b/geoportal_1/src/main/webapp/resources/javascript/main.js deleted file mode 100644 index 15320a4..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/main.js +++ /dev/null @@ -1,67 +0,0 @@ -/* This javascript module creates all the global objects, namespaces them - * - * author: Chris Barnett - * - */ - -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -org.OpenGeoPortal.init = function(){ - org.OpenGeoPortal.InstitutionInfo.getInstitutionInfo(); - document.title = "GeoData@" + org.OpenGeoPortal.InstitutionInfo.getHomeInstitution(); - - //we do this here so that we can try to get the css before the document is ready (should we do this in the jsp instead?) - var url = org.OpenGeoPortal.InstitutionInfo.getCustomCss(); - if (document.createStyleSheet){ - document.createStyleSheet(url); - } else { - jQuery('').appendTo('head'); - } -}; - -org.OpenGeoPortal.init(); - -jQuery(document).ready(function (){ - jQuery.noConflict(); - var javaScriptFileName = org.OpenGeoPortal.InstitutionInfo.getCustomJavaScript(); - if (javaScriptFileName.length > 0){ - jQuery.getScript(javaScriptFileName); - } - org.OpenGeoPortal.layerState = new org.OpenGeoPortal.LayerSettings(); - org.OpenGeoPortal.map = new org.OpenGeoPortal.MapController(); - org.OpenGeoPortal.resultsTableObj = new org.OpenGeoPortal.LayerTable(); - org.OpenGeoPortal.cartTableObj = new org.OpenGeoPortal.LayerTable("savedLayersTable", "savedLayers"); - org.OpenGeoPortal.ui = new org.OpenGeoPortal.UserInterface(); - - org.OpenGeoPortal.cartTableObj.hideCol("Save"); - org.OpenGeoPortal.cartTableObj.showCol("checkBox"); - org.OpenGeoPortal.ui.addSharedLayersToCart(); - - org.OpenGeoPortal.downloadQueue = new org.OpenGeoPortal.Downloader(); - - /*downtime notice */ - /*var downtimeText = "Layers will be unavailable until later this afternoon while we perform server maintenance. We apologize for the inconvenience."; - var downtimeDiv = '

        ' + downtimeText + '

        '; - jQuery("body").append(downtimeDiv); - jQuery('#downtimeNotice').dialog({ - zIndex: 2999, - title: "Downtime", - resizable: false, - minWidth: 415, - autoOpen: false - }); - jQuery("#downtimeNotice").dialog("open"); - */ -}); - \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/mapDiv.js b/geoportal_1/src/main/webapp/resources/javascript/mapDiv.js deleted file mode 100644 index 7cefb43..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/mapDiv.js +++ /dev/null @@ -1,1107 +0,0 @@ -/** - - * This javascript module includes functions for dealing with the map Div - * defined under the object MapController. MapController inherits from - * the OpenLayers.Map object - * - * @author Chris Barnett - */ - -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -//some code to test presence of OpenLayers, check version? - -//MapDiv Constructor -org.OpenGeoPortal.MapController = function(userDiv, userOptions) { - //set default for the name of the map div - if ((typeof userDiv == 'undefined')||(userDiv.length == 0)){ - userDiv = 'geoportalMap'; - } - - this.userDiv = userDiv; - this.layerStateObject = org.OpenGeoPortal.layerState; - this.config = org.OpenGeoPortal.InstitutionInfo; - this.userMapAction = false; - var analytics = new org.OpenGeoPortal.Analytics(); - - //set default OpenLayers map options - var nav = new OpenLayers.Control.NavigationHistory({nextOptions: {title: "Zoom to next geographic extent"}, previousOptions:{title: "Zoom to previous geographic extent"}}); - var zoomBox = new OpenLayers.Control.ZoomBox( - {title:"Click or draw rectangle on map to zoom in"}); - var zoomBoxListener = function(){jQuery(document).trigger("zoomBoxActivated")}; - zoomBox.events.register("activate", this, zoomBoxListener); - var panListener = function(){jQuery(document).trigger("panActivated")}; - var panHand = new OpenLayers.Control.Navigation( - {title:"Pan by dragging the map"}); - panHand.events.register("activate", this, panListener); - var globalExtent = new OpenLayers.Control.ZoomToMaxExtent({title:"Zoom to global extent"}); - var panel = new OpenLayers.Control.Panel({defaultControl: panHand}); - var that = this; - var clearMap = new OpenLayers.Control.Button({ - displayClass: "mapClearButton", trigger: function(){that.clearMap();}, - type: OpenLayers.Control.TYPE_BUTTON, - title: "Clear the map", active: true - }); - - panel.addControls([ - globalExtent, - nav.previous, - nav.next, - zoomBox, - panHand, - clearMap - ]); - //display mouse coords in lon-lat - var displayCoords = new OpenLayers.Control.MousePosition({displayProjection: new OpenLayers.Projection("EPSG:4326")}); - var mapBounds = new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34); - - var options = { - allOverlays: true, - projection: new OpenLayers.Projection("EPSG:900913"), - maxResolution: 2.8125, - maxExtent: mapBounds, - units: "m", - minZoomLevel: 1, - controls: [new OpenLayers.Control.ModPanZoomBar(), - new OpenLayers.Control.ScaleLine(), - displayCoords, - nav, - panel] - }; - - //merge default options and user specified options into 'options'--not recursive - jQuery.extend(userOptions, options); - //div defaults to 0 height for certain doc-types - jQuery('#' + userDiv).height("100%"); - //jQuery("#map").height(512); - //call OpenLayers.Map with function arguments - - // attempt to reload tile if load fails - OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3; - OpenLayers.ImgPath = "resources/media/" - // make OL compute scale according to WMS spec - //OpenLayers.DOTS_PER_INCH = 90.71428571428572; - OpenLayers.Util.onImageLoadErrorColor = 'transparent'; - var that = this; - OpenLayers.Map.call(this, "ogpMap", options); - //default background map - this.setBackgroundMap(); - - var center = this.WGS84ToMercator(0, 0); - //set map position - this.setCenter(center); - - //register events - jQuery('#' + userDiv).resize(function () {that.updateSize();}); - - /*this.events.registerPriority('click', this, function(){ - console.log("click"); - that.userMapAction = true; - });*/ - - /*this.events.registerPriority('dblclick', this, function(){ - console.log("dblclick"); - that.userMapAction = true; - }); - this.events.registerPriority('drag', this, function(){ - console.log("drag"); - that.userMapAction = true; - }); - - this.events.registerPriority('dragstart', this, function(){ - console.log("drag"); - that.userMapAction = true; - }); - - this.events.registerPriority('dragend', this, function(){ - console.log("drag"); - that.userMapAction = true; - });*/ - - this.events.register('zoomend', this, function(){ - var zoomLevel = that.getZoom(); - //console.log(zoomLevel); - if (zoomLevel >= (that.backgroundMaps(that.getCurrentBackgroundMap()).zoomLevels - 1)){ - that.changeBackgroundMap("googleHybrid"); - that.zoomTo(that.getZoom()); - } else { - if (that.getBackgroundType() !== that.getCurrentBackgroundMap()){ - that.changeBackgroundMap(that.getCurrentBackgroundMap()); - } - } - var mapHeight = Math.pow((zoomLevel + 2), 2) / 2 * 256; - var containerHeight = jQuery('#container').height(); - if (mapHeight > containerHeight){ - mapHeight = containerHeight; - } - - if (jQuery("#map").height() != mapHeight){ - jQuery("#map").height(mapHeight);//calculate min and max sizes - } - if (zoomLevel == 0){ - that.setCenter(that.WGS84ToMercator(that.getCenter().lon, 0)); - } - //console.log('zoomend'); - jQuery(document).trigger('eventZoomEnd'); - }); - - this.events.register('moveend', this, function(){ - jQuery(document).trigger('eventMoveEnd'); - }); - - this.currentAttributeRequest = false; - this.prevExtent = this.getExtent(); -}; - -//set inheritance for MapController -org.OpenGeoPortal.MapController.prototype = new OpenLayers.Map(); - -//method to set background map -org.OpenGeoPortal.MapController.prototype.getOsmTileUrl = function getOsmTileUrl(bounds) { - var res = this.map.getResolution(); - var x = Math.round((bounds.left - this.getMaxExtent().left) / (res * this.tileSize.w)); - var y = Math.round((this.getMaxExtent().top - bounds.top) / (res * this.tileSize.h)); - var z = this.map.getZoom() + 1; - var limit = Math.pow(2, z); - - if (y < 0 || y >= limit) { - //console.log["ol 404"]; - return org.OpenGeoPortal.Utility.getImage("404.png"); - } else { - x = ((x % limit) + limit) % limit; - //console.log([this.url, this.type]); - return this.url + z + "/" + x + "/" + y + "." + this.type; - } -}; - -org.OpenGeoPortal.MapController.prototype.getBackgroundType = function() { - var layers = this.layers; - for (var i in layers){ - if ((layers[i].CLASS_NAME == "OpenLayers.Layer.Google")&&(layers[i].visibility == true) - &&layers[i].opacity == 1){ - return layers[i].type; - } else { - return "osm"; - } - } -}; - -org.OpenGeoPortal.MapController.prototype.backgroundMaps = function(mapType){ - if (typeof google != "undefined"){ - var bgMaps = { - googleHybrid: {mapClass: "Google", zoomLevels: 22, name: "Google Hybrid", params: {type: google.maps.MapTypeId.HYBRID}}, - googleSatellite: {mapClass: "Google", zoomLevels: 22, name: "Google Satellite", params: {type: google.maps.MapTypeId.SATELLITE}}, - googleStreets: {mapClass: "Google", zoomLevels: 20, name: "Google Streets", params: {type: google.maps.MapTypeId.ROADMAP}}, - googlePhysical: {mapClass: "Google", zoomLevels: 15, name: "Google Physical", params: {type: google.maps.MapTypeId.TERRAIN}}, - osm: {mapClass: "TMS", zoomLevels: 17, name: "OpenStreetMap", params: {type: 'png', getURL: this.getOsmTileUrl, - displayOutsideMaxExtent: true}, url: "http://tile.openstreetmap.org/"} - }; - if (mapType == "all"){ - return bgMaps; - } else { - return bgMaps[mapType]; - } - } else{ - bgMaps = {osm: {mapClass: "TMS", zoomLevels: 17, name: "OpenStreetMap", params: {type: 'png', getURL: this.getOsmTileUrl, - displayOutsideMaxExtent: true}, url: "http://tile.openstreetmap.org/"}}; - if (mapType == "all"){ - return bgMaps; - } else { - return bgMaps["osm"]; - } - } -}; - -org.OpenGeoPortal.MapController.prototype.getCurrentBackgroundMap = function(){ - if (typeof google != "undefined"){ - return this.currentBackgroundMap; - } else{ - return "osm"; - } -}; - -org.OpenGeoPortal.MapController.prototype.currentBackgroundMap = "googlePhysical"; //default background map - -org.OpenGeoPortal.MapController.prototype.setCurrentBackgroundMap = function(bgType){ - try { - this.backgroundMaps(bgType); - this.currentBackgroundMap = bgType; - } catch (e) { - throw new Error("This background type does not exist: "+ bgType); - } -}; - -org.OpenGeoPortal.MapController.prototype.setBackgroundMap = function(bgType) { - //default - bgType = bgType || this.getCurrentBackgroundMap(); - this.setCurrentBackgroundMap(bgType); - var zoomLevel = this.getZoom(); - if (zoomLevel >= (this.backgroundMaps(bgType).zoomLevels - 1)){ - this.changeBackgroundMap("googleHybrid"); - } else { - this.changeBackgroundMap(bgType); - } -}; - -org.OpenGeoPortal.MapController.prototype.changeBackgroundMap = function(bgType){ - //minimize the number of Google layers by changing map types in the Google Maps API - var that = this; - var backgroundMaps = this.backgroundMaps(bgType); - if (backgroundMaps.mapClass == "Google"){ - if (this.getLayersByClass('OpenLayers.Layer.Google').length > 0){ - var googleLayer = this.getLayersByClass('OpenLayers.Layer.Google')[0]; - googleLayer.mapObject.setMapTypeId(backgroundMaps["params"]["type"]); - googleLayer.type = backgroundMaps["params"]["type"]; - googleLayer.setOpacity(1); - jQuery("div.olLayerGooglePoweredBy").children().css("display", "block"); - - } else { - backgroundMaps.params.sphericalMercator = true; - backgroundMaps.params.maxExtent = new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34); - var bgMap = new OpenLayers.Layer.Google(backgroundMaps.name, - backgroundMaps.params); - - this.addLayer(bgMap); - google.maps.event.addListener(bgMap.mapObject, "tilesloaded", function() { - //console.log("Tiles loaded"); - that.render(that.userDiv); - jQuery(".mapClearButtonItemInactive").text("clear previews"); - that.userMapAction = true; - jQuery(document).trigger("mapReady"); - //really should only fire the first time - google.maps.event.clearListeners(bgMap.mapObject, "tilesloaded"); - jQuery("#geoportalMap").fadeTo("slow", 1); - - }); - - } - if (this.getLayersByName('OpenStreetMap').length > 0){ - this.getLayersByName('OpenStreetMap')[0].setVisibility(false); - } - } else if (backgroundMaps.mapClass == "TMS"){ - if (this.getLayersByName('OpenStreetMap').length > 0){ - var osmLayer = this.getLayersByName('OpenStreetMap')[0]; - osmLayer.setVisibility(true); - } else { - var bgMap = new OpenLayers.Layer.TMS( - backgroundMaps.name, - backgroundMaps.url, - backgroundMaps.params - ); - this.addLayer(bgMap); - this.setLayerIndex(this.getLayersByName('OpenStreetMap')[0], 1); - bgMap.events.register(bgMap.mapObject, "loadend", function() { - //console.log("Tiles loaded"); - that.render(that.userDiv); - jQuery(".mapClearButtonItemInactive").text("clear previews"); - that.userMapAction = true; - //really should only fire the first time - bgMap.events.unregister(bgMap.mapObject, "loadend"); - jQuery("#geoportalMap").fadeTo("slow", 1); - }); - } - if (this.getLayersByClass('OpenLayers.Layer.Google').length > 0){ - var googleLayer = this.getLayersByClass('OpenLayers.Layer.Google')[0]; - googleLayer.mapObject.setMapTypeId(this.backgroundMaps("googleHybrid")["params"]["type"]); - googleLayer.type = this.backgroundMaps("googleHybrid")["params"]["type"]; - googleLayer.setOpacity(0); - jQuery("div.olLayerGooglePoweredBy").children().css("display", "none"); - } - } -}; - -//utility functions -org.OpenGeoPortal.MapController.prototype.WGS84ToMercator = function (lon, lat){ - //returns -infinity for -90.0 lat; a bug? - lat = parseFloat(lat); - lon = parseFloat(lon); - if (lat > 90){ - lat = 90; - } - if (lat < -90){ - lat = -90; - } - if (lon > 180){ - lon = 180; - } - if (lon < -180){ - lon = -180; - } - //console.log([lon, "tomercator"]) - return OpenLayers.Layer.SphericalMercator.forwardMercator(lon, lat); -}; - -org.OpenGeoPortal.MapController.prototype.MercatorToWGS84 = function (lon, lat) { - lat = parseFloat(lat); - lon = parseFloat(lon); - var transformedValue = OpenLayers.Layer.SphericalMercator.inverseMercator(lon, lat); - var newLat = transformedValue.lat; - var newLon = transformedValue.lon; - if (newLat > 90){ - newLat = 90; - } - if (newLat < -90){ - newLat = -90; - } - if (newLon > 180){ - newLon = 180; - } - if (newLon < -180){ - newLon = -180; - } - return new OpenLayers.LonLat(newLon, newLat); -}; - -org.OpenGeoPortal.MapController.prototype.returnExtent = function(){ - // pass along the extents of the map - var extents = this.getExtent().toArray(); - var left = extents[0]; - var bottom = extents[1]; - var right = extents[2]; - var top = extents[3]; - var bottomLeftLonLat = this.MercatorToWGS84(left, bottom); - var topRightLonLat = this.MercatorToWGS84(right, top); - var bbox = {}; - bbox.left = parseFloat(bottomLeftLonLat.lon); - bbox.bottom = parseFloat(bottomLeftLonLat.lat); - bbox.right = parseFloat(topRightLonLat.lon); - bbox.top = parseFloat(topRightLonLat.lat); - //console.log(new OpenLayers.Bounds(bbox));why doesn't this return a nice openlayers bounds object? - return bbox; -}; - -//method to clear the map while keeping the base layer -org.OpenGeoPortal.MapController.prototype.clearMap = function (){ - var mapLayers = this.layers; - if (mapLayers.length > 0){ - org.OpenGeoPortal.PreviewedLayers.clearLayers(); - for (var i in mapLayers){ - var currentLayer = mapLayers[i]; - if ((currentLayer.CLASS_NAME != 'OpenLayers.Layer.Google')&& - (currentLayer.name != 'OpenStreetMap')&& - (currentLayer.name != 'layerBBox')){ - //remove the layer from the map - currentLayer.setVisibility(false); - //we'll also need to update the state of buttons and the layer state object - this.layerStateObject.setState(currentLayer.name, {"preview": "off", "getFeature": false}); - } else { - continue; - } - } - } -}; - -org.OpenGeoPortal.MapController.prototype.getAttributeDescription = function (thisObj, layerId) { - //no need to make the call if the title attribute has already been set - if (!jQuery(thisObj).attr('title')){ - var solr = new org.OpenGeoPortal.Solr(); - var query = solr.getMetadataQuery(layerId); - jQuery(".attributeName").css("cursor", "wait"); - solr.sendToSolr(query, this.getAttributeDescriptionJsonpSuccess, this.getAttributeDescriptionJsonpError, thisObj); - } -}; - -org.OpenGeoPortal.MapController.prototype.getAttributeDescriptionJsonpSuccess = function(data, thisObj) { - var that = thisObj; - jQuery(".attributeName").css("cursor", "default"); - var solrResponse = data["response"]; - var totalResults = solrResponse["numFound"]; - if (totalResults != 1) - { - throw new Error("Request for FGDC returned " + totalResults +". Exactly 1 was expected."); - return; - } - var doc = solrResponse["docs"][0]; // get the first layer object - var fgdcRawText = doc["FgdcText"]; - var fgdcText = fgdcRawText; // text was escaped on ingest into Solr - //var parser = new DOMParser(); - //var fgdcDocument = parser.parseFromString(fgdcText,"text/xml"); - jQuery(jQuery.parseXML(fgdcText)).find("attrlabl").each(function(){ - var currentXmlAttribute = jQuery(this); - jQuery(that).closest("tbody").find(".attributeName").each(function(){ - if (currentXmlAttribute.text() == jQuery(this).text()){ - var attributeDescription = currentXmlAttribute.siblings("attrdef").first(); - attributeDescription = org.OpenGeoPortal.Utility.stripExtraSpaces(attributeDescription.text().trim()); - if (attributeDescription.length == 0){ - attributeDescription = "No description available"; - } - jQuery(this).attr('title', attributeDescription); - return; - } - }); - }); -}; - -org.OpenGeoPortal.MapController.prototype.getAttributeDescriptionJsonpError = function () { - jQuery(".attributeName").css("cursor", "default"); - throw new Error("The attribute description could not be retrieved."); -}; - -org.OpenGeoPortal.MapController.prototype.wmsGetFeature = function(e){ - //since this is an event handler, the context isn't the MapController Object - if (typeof this.map != "undefined"){ - var mapObject = this.map; - var layerStateObject = mapObject.layerStateObject; - var that = this; - var PIXELS = 10;//#pixel(s) on each side - var pixelSize = mapObject.getGeodesicPixelSize();//pixel size in kilometers - //console.log(pixelSize); - var xbboxSize = pixelSize.w * PIXELS * 1000;//in meters - var ybboxSize = pixelSize.h * PIXELS * 1000; - var point = mapObject.getLonLatFromViewPortPx(e.xy); - var pixel = e.xy; - //console.log(point); - //var srcProj = new OpenLayers.Projection("EPSG:4326"); - //var destProj = new OpenLayers.Projection("EPSG:900913"); - var projPoint = point;//.transform(srcProj, destProj); - //console.log(projPoint); - var xMin = projPoint.lon - xbboxSize/2; - var yMin = projPoint.lat - ybboxSize/2; - var xMax = projPoint.lon + xbboxSize/2; - var yMax = projPoint.lat + ybboxSize/2; - var layerID = this.name; - var searchString = "OGPID=" + layerID; - searchString += "&bbox=" + this.map.getExtent().toBBOX();//+ xMin + "," + yMin + "," + xMax + "," + yMax; - //+ this.map.getExtent().toBBOX(); - //geoserver doesn't like fractional pixel values - searchString += "&x=" + Math.round(pixel.x) + "&y=" + Math.round(pixel.y); - searchString += "&height=" + this.map.size.h + "&width=" + this.map.size.w; - - var ajaxParams = { - type: "GET", - context: this, - url: 'featureInfo', - data: searchString, - dataType: 'text', - success: function(data, textStatus, XMLHttpRequest){ - //create a new dialog instance, or just open the dialog if it already exists - var dialogTitle = '' + layerStateObject.getFeatureTitle + ""; - var tableText = ''; - var response = jQuery.parseXML(jQuery.trim(data)); - var attributes = response.getElementsByTagName("gml:featureMember"); - if (attributes.length == 0){ - attributes = response.getElementsByTagName("featureMember"); - } - var rawFeatures = response;//.getElementsByTagName("wfs:FeatureCollection"); - var innerText = ''; - /*var featureLayer; - //add or modify a layer with a vector representing the selected feature - if (this.map.getLayersByName("featureSelection").length > 0){ - featureLayer = this.map.getLayersByName("featureSelection")[0]; - } else { - var style_blue = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); - style_blue.strokeColor = "blue"; - style_blue.fillColor = "blue"; - style_blue.fillOpacity = 1; - style_blue.pointRadius = 2; - style_blue.strokeWidth = 2; - style_blue.strokeLinecap = "butt"; - style_blue.zIndex = 999999; - featureLayer = new OpenLayers.Layer.Vector("featureSelection");//, { - // style: style_blue - //}); - - this.map.addLayer(featureLayer); - } - var options = { - 'featureType': "GISPORTAL.GISOWNER01.BOSTONINFRASTRUCTURE12", - 'featureNS': "http://geoserver.sf.net", - 'internalProjection': new OpenLayers.Projection("EPSG:900913"), - 'externalProjection': new OpenLayers.Projection("EPSG:2249") - }; - var format = new OpenLayers.Format.GML.v3(options); - var features = format.read(rawFeatures); - //console.log(features); - var vector = new OpenLayers.Feature.Vector(features.geometry); - //vector.bounds = this.map.getExtent(); - this.map.testVector = vector; - featureLayer.removeAllFeatures(); - featureLayer.addFeatures([vector]); - featureLayer.redraw(); - this.map.setLayerIndex(featureLayer, (this.map.layers.length -1)); - */ - var linecount = 0; - //supports only one feature as is - jQuery(attributes).children().first().children().each(function(){ - if (typeof jQuery(this).children()[0] == 'undefined'){ - var attributeName = this.nodeName; - attributeName = attributeName.substr(attributeName.indexOf(":") + 1); - var attributeValue = jQuery(this).text(); - linecount++; - innerText += '"; - } - }); - - tableText += innerText + "
        '; - innerText += attributeName; - innerText += ""; - innerText += attributeValue; - innerText += "
        "; - if (innerText.length == 0){ - //return; - tableText = '

        There is no data for this layer at this point.

        '; - } - var containerHeight = jQuery("#container").height(); - var dataHeight = linecount * 20; - if (dataHeight > containerHeight){ - dataHeight = containerHeight; - } else { - dataHeight = "auto"; - } - if (typeof jQuery('#featureInfo')[0] == 'undefined'){ - var infoDiv = '
        ' + dialogTitle + tableText + '
        '; - jQuery("body").append(infoDiv); - jQuery("#featureInfo").dialog({ - zIndex: 2999, - title: "FEATURE ATTRIBUTES", - width: 'auto', - height: dataHeight, - autoOpen: false - }); - jQuery("#featureInfo").dialog('open'); - } else { - jQuery("#featureInfo").html(dialogTitle + tableText); - jQuery("#featureInfo").dialog("option", "height", dataHeight); - jQuery("#featureInfo").dialog('open'); - } - var that = this; - jQuery("td.attributeName").mouseenter(function(){that.map.getAttributeDescription(this, that.name);}); - }, - error: function(jqXHR, textStatus, errorThrown) {if ((jqXHR.status != 401)&&(textStatus != 'abort')){new org.OpenGeoPortal.ErrorObject(new Error(), "Error retrieving Feature Information.");}}, - complete: function(){that.map.currentAttributeRequest = false; - jQuery(document).trigger("hideLoadIndicator");} - }; - - if (typeof this.map.currentAttributeRequest == 'object'){ - this.map.currentAttributeRequest.abort(); - } - this.map.currentAttributeRequest = jQuery.ajax(ajaxParams); - jQuery(document).trigger("showLoadIndicator"); - var institution = (layerID.indexOf(".") > -1) ? layerID.split(".")[0] : ""; - analytics.track("Layer Attributes Viewed", institution, layerID); - } else { - new org.OpenGeoPortal.ErrorObject(new Error(), "This layer has not been previewed.
        You must preview it before getting attribute information."); - } -}; - - -//methods to add layers - -org.OpenGeoPortal.MapController.prototype.hideLayerBBox = function () { - if (this.getLayersByName("layerBBox").length > 0){ - var featureLayer = this.getLayersByName("layerBBox")[0]; - //featureLayer.destroy(); - featureLayer.removeAllFeatures(); - } -}; - -org.OpenGeoPortal.MapController.prototype.showLayerBBox = function (mapObj) { - //mapObj requires west, east, north, south - //add or modify a layer with a vector representing the selected feature - var featureLayer; - if (this.getLayersByName("layerBBox").length > 0){ - featureLayer = this.getLayersByName("layerBBox")[0]; - featureLayer.removeAllFeatures(); - } else { - var style_blue = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); - style_blue.strokeColor = "blue";//'#003366'; - style_blue.fillColor = "blue";//'#003366'; - style_blue.fillOpacity = .1; - style_blue.pointRadius = 10; - style_blue.strokeWidth = 2; - style_blue.strokeLinecap = "butt"; - style_blue.zIndex = 999; - - featureLayer = new OpenLayers.Layer.Vector("layerBBox", { - style: style_blue - }); - this.addLayer(featureLayer); - } - var bottomLeft = this.WGS84ToMercator(mapObj.west, mapObj.south); - var topRight = this.WGS84ToMercator(mapObj.east, mapObj.north); - - if (bottomLeft.lon > topRight.lon) { - var dateline = this.WGS84ToMercator(180,0).lon; - var box1 = new OpenLayers.Feature.Vector(new OpenLayers.Bounds(bottomLeft.lon,bottomLeft.lat,dateline,topRight.lat).toGeometry()); - var box2 = new OpenLayers.Feature.Vector(new OpenLayers.Bounds(topRight.lon,topRight.lat,-1*dateline, bottomLeft.lat).toGeometry()); - featureLayer.addFeatures([box1, box2]); - } - else { - var box = new OpenLayers.Feature.Vector(new OpenLayers.Bounds(bottomLeft.lon,bottomLeft.lat,topRight.lon,topRight.lat).toGeometry()); - featureLayer.addFeatures([box]); - } - this.setLayerIndex(featureLayer, (this.layers.length -1)); -}; - -org.OpenGeoPortal.MapController.prototype.addMapBBox = function (mapObj) { - //mapObj requires west, east, north, south - //add or modify a layer with a vector representing the selected feature - var featureLayer; - - var style_green = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); - style_green.strokeColor = "green"; - style_green.fillColor = "green"; - style_green.fillOpacity = .05; - //style_green.pointRadius = 10; - style_green.strokeWidth = 2; - style_green.strokeLinecap = "butt"; - style_green.zIndex = 999; - - featureLayer = new OpenLayers.Layer.Vector(mapObj.title, { - //style: style_green - }); - this.addLayer(featureLayer); - var bbox = mapObj.bbox.split(","); - var bottomLeft = this.WGS84ToMercator(bbox[0], bbox[1]); - var topRight = this.WGS84ToMercator(bbox[2], bbox[3]); - - if (bottomLeft.lon > topRight.lon) { - var dateline = this.WGS84ToMercator(180,0).lon; - var box1 = new OpenLayers.Feature.Vector(new OpenLayers.Bounds(bottomLeft.lon,bottomLeft.lat,dateline,topRight.lat).toGeometry()); - var box2 = new OpenLayers.Feature.Vector(new OpenLayers.Bounds(topRight.lon,topRight.lat,-1*dateline, bottomLeft.lat).toGeometry()); - featureLayer.addFeatures([box1, box2]); - } else { - var box = new OpenLayers.Feature.Vector(new OpenLayers.Bounds(bottomLeft.lon,bottomLeft.lat,topRight.lon,topRight.lat).toGeometry()); - featureLayer.addFeatures([box]); - } - this.setLayerIndex(featureLayer, (this.layers.length -1)); -}; - -org.OpenGeoPortal.MapController.prototype.layerExists = function (mapObj) { - //if layer is a Harvard one, send an ajax request to - //http://dixon.hul.harvard.edu:8080/HGL/RemoteServiceStarter?AddLayer=[layer name]&ValidationKey=OPENGEOPORTALROCKS - //otherwise, do a wms describe layer to make sure the layer is there before - //attempting to add it to the map (must be proxied). handling wms errors is non-trivial, since, - //by design, OpenLayers requires an error of type 'image' from the wms server - //(OpenLayers is merely dynamically setting the src attribute of img tags) - //console.log(mapObj); - if (typeof mapObj.location.serviceStart != 'undefined'){ - var requestObj = {}; - requestObj.AddLayer = [mapObj.layerName]; - requestObj.ValidationKey = "OPENGEOPORTALROCKS"; - var params = { - url: mapObj.location.serviceStart, - dataType: "jsonp", - data: requestObj, - type: "GET", - traditional: true, - complete: function(){ - jQuery("body").trigger(mapObj.layerName + 'Exists'); - }, - statusCode: { - 200: function(){ - jQuery("body").trigger(mapObj.layerName + 'Exists'); - }, - 500: function(){ - throw new Error("layer could not be added"); - } - } - }; - jQuery.ajax(params); - } else { - jQuery("body").trigger(mapObj.layerName + 'Exists'); - } -}; - -org.OpenGeoPortal.MapController.prototype.getPreviewUrlArray = function (location, useTilecache) { - //is layer public or private? is this a request that can be handled by a tilecache? - //is this a wms request? something to think about. for now, we only support wms previews - - var urlArraySize = 3; //this seems to be a good size for OpenLayers performance - var urlArray = []; - var populateUrlArray = function(addressArray){ - if (addressArray.length == 1){ - for (var i=0; i < urlArraySize; i++){ - urlArray[i] = addressArray[0]; - } - } else { - urlArray = addressArray; - } - - }; - - if ((typeof location.wmsProxy != "undefined")||(location.wmsProxy != null)){ - populateUrlArray([location.wmsProxy]); - } else if (((typeof location.tilecache == "undefined")||(location.tilecache == null))||(!useTilecache)){ - populateUrlArray(location.wms); - } else { - populateUrlArray(location.tilecache); - } - - - return urlArray; -}; - -org.OpenGeoPortal.MapController.prototype.addWMSLayer = function (mapObj) { -//mapObj requires institution, layerName, title, datatype, access - /*var bottomLeft = this.WGS84ToMercator(mapObj.west, mapObj.south); - var topRight = this.WGS84ToMercator(mapObj.east, mapObj.north); - var bounds = new OpenLayers.Bounds(); - bounds.extend(new OpenLayers.LonLat(bottomLeft.lon, bottomLeft.lat)); - bounds.extend(new OpenLayers.LonLat(topRight.lon, topRight.lat)); - console.log(bounds); - var box = new OpenLayers.Feature.Vector(bounds.toGeometry()); - var featureLayer = new OpenLayers.Layer.Vector("BBoxTest"); - featureLayer.addFeatures([box]); - this.addLayer(featureLayer);*/ - //use a tilecache if we are aware of it - - var wmsArray = this.getPreviewUrlArray(mapObj.location, true); - - //tilecache and GeoServer names are different for Harvard layers - if (mapObj.institution == "Harvard"){ - mapObj.layerName = mapObj.layerName.substr(mapObj.layerName.indexOf(".") + 1); - mapObj.layerName = mapObj.layerName.substr(mapObj.layerName.indexOf(":") + 1); - } - //won't actually do anything, since noMagic is true and transparent is true - var format; - if ((mapObj.dataType == "Raster")||(mapObj.dataType == "Paper Map")){ - format = "image/jpeg"; - } else { - format = "image/png"; - } - -//if this is a raster layer, we should use jpeg format, png for vector (per geoserver docs) - var newLayer = new OpenLayers.Layer.WMS( mapObj.title, - wmsArray, - {layers: mapObj.layerName, - format: format, - tiled: true, - exceptions: "application/vnd.ogc.se_inxml", - transparent: true//, - //version: "1.1.1" - }, - { - //buffer: 0, - //gutter: 4, - transitionEffect: 'resize', - opacity: mapObj.opacity//, - //displayOutsideMaxExtent: false//, - //wrapDateLine: true - }); - //how should this change? trigger custom events with jQuery - newLayer.events.register('loadstart', newLayer, function() {org.OpenGeoPortal.Utility.showLoadIndicator("mapLoadIndicator", newLayer.name);}); - newLayer.events.register('loadend', newLayer, function() {org.OpenGeoPortal.Utility.hideLoadIndicator("mapLoadIndicator", newLayer.name);}); - var that = this; - //we do a check to see if the layer exists before we add it - jQuery("body").bind(mapObj.layerName + 'Exists', function(){that.addLayer(newLayer);}); - this.layerExists(mapObj); -}; - -//thanks to Allen Lin, MN -org.OpenGeoPortal.MapController.prototype.addArcGISRestLayer = function (mapObj) { - //won't actually do anything, since noMagic is true and transparent is true - var format; - if ((mapObj.dataType == "Raster")||(mapObj.dataType == "Paper Map")){ - format = "image/jpeg"; - } else { - format = "image/png"; - } - -//if this is a raster layer, we should use jpeg format, png for vector (per geoserver docs) - var newLayer = new OpenLayers.Layer.ArcGIS93Rest( mapObj.title, - mapObj.location.ArcGISRest, - { - layers: "show:" + mapObj.layerName, - transparent: true - }, - { - buffer: 0, - transitionEffect: 'resize', - opacity: mapObj.opacity - }); - newLayer.projection = new OpenLayers.Projection("EPSG:3857"); - //how should this change? trigger custom events with jQuery - newLayer.events.register('loadstart', newLayer, function() {org.OpenGeoPortal.Utility.showLoadIndicator("mapLoadIndicator", newLayer.name);}); - newLayer.events.register('loadend', newLayer, function() {org.OpenGeoPortal.Utility.hideLoadIndicator("mapLoadIndicator", newLayer.name);}); - var that = this; - //we do a cursory check to see if the layer exists before we add it - jQuery("body").bind(mapObj.layerName + 'Exists', function(){that.addLayer(newLayer);}); - this.layerExists(mapObj); -}; - -org.OpenGeoPortal.MapController.prototype.addOverview = function() { - //add overview options? - //google maps api v3 seems to have broken this - var overviewLayer = new OpenLayers.Layer.Google('Google Satellite', - {type: google.maps.MapTypeId.SATELLITE}); - - var overviewSize = new OpenLayers.Size(); - overviewSize.h = 100; - overviewSize.w = 150; - - var overviewBounds = new OpenLayers.Bounds(); - overviewBounds.extend(new OpenLayers.LonLat(-2.003750834E7,-2.003750834E7)); - overviewBounds.extend(new OpenLayers.LonLat(2.003750834E7,2.003750834E7)); - var overviewOptions = { - autoActivate: true, - title: 'Overview window', - //autoPan: true, - mapOptions: { resolutions: [156543.03390625, 78271.516953125, 39135.7584765625, 19567.87923828125, - 9783.939619140625, 4891.9698095703125, 2445.9849047851562, 1222.9924523925781, - 611.4962261962891, 305.74811309814453, 152.87405654907226, 76.43702827453613, - 38.218514137268066, 19.109257068634033, 9.554628534317017, 4.777314267158508, - 2.388657133579254, 1.194328566789627, 0.5971642833948135, 0.29858214169740677, - 0.14929107084870338, 0.07464553542435169], - projection: new OpenLayers.Projection('EPSG:900913'), - maxExtent: overviewBounds, - units: "m" - }, - layers: [overviewLayer], - size: overviewSize - }; - - var overview = new OpenLayers.Control.OverviewMap(overviewOptions); - return overview; - //this.addControl(overview); - -}; - -org.OpenGeoPortal.MapController.prototype.changeStyle = function(layerID, dataType){ - var layer = this.getLayersByName(layerID)[0]; - if (typeof layer == 'undefined'){ - return; - } - - var userSLD = {}; - var layerStateObject = this.layerStateObject; - //we need this for now, since the tilecache name and geoserver name for layers is different for Harvard layers - var wmsName = layerStateObject.getState(layerID, "wmsName"); - var location = layerStateObject.getState(layerID, "location"); - //don't use a tilecache - layer.url = this.getPreviewUrlArray(location, false); - var userColor = layerStateObject.getState(layerID, "color"); - var userWidth = layerStateObject.getState(layerID, "graphicWidth"); - switch (dataType){ - case "Polygon": - //for polygons - userSLD.symbolizer = {}; - userSLD.symbolizer.Polygon = {}; - userSLD.symbolizer.Polygon.fill = true; - userSLD.symbolizer.Polygon.fillColor = userColor; - if (userWidth > 0){ - userSLD.symbolizer.Polygon.stroke = true; - userSLD.symbolizer.Polygon.strokeWidth = userWidth; - userSLD.symbolizer.Polygon.strokeColor = this.getBorderColor(userColor); - } - break; - case "Point": - //for points - userSLD.symbolizer = {}; - userSLD.symbolizer.Point = {}; - userSLD.symbolizer.Point.fill = true; - userSLD.symbolizer.Point.fillColor = userColor; - userSLD.symbolizer.Point.graphicName = 'circle'; - userSLD.symbolizer.Point.pointRadius = userWidth; - userSLD.symbolizer.Point.strokeWidth = 0; - userSLD.symbolizer.Point.strokeColor = userColor; - break; - case "Line": - //for lines - userSLD.symbolizer = {}; - userSLD.symbolizer.Line = {}; - userSLD.symbolizer.Line.stroke = true; - userSLD.symbolizer.Line.strokeWidth = userWidth; - userSLD.symbolizer.Line.strokeColor = userColor; - break; - default: - return; - } - var layerUniqueInfo = userSLD; - var arrSLD = [{wmsName: wmsName, layerStyle: layerUniqueInfo}]; - var newSLD = { layers: wmsName, sld_body: this.createSLDFromParams(arrSLD)}; - layer.mergeNewParams(newSLD); - layerStateObject.setState(layerID, {"sld": layerUniqueInfo}); -}; - -org.OpenGeoPortal.MapController.prototype.getBorderColor = function(fillColor){ - //calculate an appropriate border color - var borderColor = {}; - borderColor.red = fillColor.slice(1,3); - borderColor.green = fillColor.slice(3,5); - borderColor.blue = fillColor.slice(5); - for (var color in borderColor){ - //make the border color darker than the fill - var tempColor = parseInt(borderColor[color], 16) - parseInt(0x50); - if (tempColor < 0){ - //so we don't get any negative values for color - tempColor = "00"; - } else { - //convert to hex - tempColor = tempColor.toString(16); - } - //check length; the string should be 2 characters - if (tempColor.length == 2){ - borderColor[color] = tempColor; - } else if (tempColor.length == 1){ - borderColor[color] = '0' + tempColor; - } else { - borderColor[color] = '00'; - } - } - //reassemble the color string - return "#" + borderColor.red + borderColor.green + borderColor.blue; -}; - -org.OpenGeoPortal.MapController.prototype.createSLDFromParams = function(arrUserParams){ - var userSLD = { namedLayers: []}; - for (var i in arrUserParams){ - var currentRule = new OpenLayers.Rule(arrUserParams[i].layerStyle); - var currentStyle = new OpenLayers.Style("", {rules: [currentRule]}); - currentStyle = { - name: arrUserParams[i].wmsName, - userStyles: [currentStyle] - }; - userSLD.namedLayers.push(currentStyle); - } - var newSLD = new OpenLayers.Format.SLD().write(userSLD); - return newSLD; -}; - -org.OpenGeoPortal.MapController.prototype.hideLayer = function(layerID){ - var layer = this.getLayersByName(layerID)[0]; - layer.setVisibility(false); -}; - -org.OpenGeoPortal.MapController.prototype.showLayer = function(layerID){ - var layer = this.getLayersByName(layerID)[0]; - layer.setVisibility(true); -}; - -/** - * a property that stores the previous map extent, so that we can test to see if the extent has changed - */ - -org.OpenGeoPortal.MapController.prototype.prevExtent = null; - -org.OpenGeoPortal.MapController.prototype.extentChanged = function(){ - var currentExtent = this.getExtent(); - var previous; - if (typeof this.prevExtent == "object"){ - previous = this.prevExtent; - } else { - previous = new OpenLayers.Bounds(0,0,0,0); - } - //console.log("currentExtent:" + currentExtent); - //console.log("previousExtent:" + previous); - - if ((previous.left != currentExtent.left)|| - (previous.right != currentExtent.right)|| - (previous.bottom != currentExtent.bottom)|| - (previous.top != currentExtent.top)){ - this.prevExtent = currentExtent; - return true; - } else { - return false; - } -}; - -org.OpenGeoPortal.MapController.prototype.getGeodeticExtent = function(){ - var mercatorExtent = this.getExtent(); - var sphericalMercator = new OpenLayers.Projection('EPSG:900913'); - var geodetic = new OpenLayers.Projection('EPSG:4326'); - return mercatorExtent.transform(sphericalMercator, geodetic); -}; - -org.OpenGeoPortal.MapController.prototype.zoomToLayerExtent = function(extent){ - var layerExtent = OpenLayers.Bounds.fromString(extent); - var lowerLeft = this.WGS84ToMercator(layerExtent.left, layerExtent.bottom); - var upperRight = this.WGS84ToMercator(layerExtent.right, layerExtent.top); - - var newExtent = new OpenLayers.Bounds(); - newExtent.extend(new OpenLayers.LonLat(lowerLeft.lon, lowerLeft.lat)); - newExtent.extend(new OpenLayers.LonLat(upperRight.lon, upperRight.lat)); - this.zoomToExtent(newExtent); - -}; - -org.OpenGeoPortal.MapController.prototype.getCombinedBounds = function(arrBounds){ - function sortNumber(a, b){ - return a - b; - } - - function inverseSortNumber(a, b){ - return b - a; - } - - var arrLeft = []; - var arrRight = []; - - var arrTop = []; - var arrBottom = []; - - for (var currentIndex in arrBounds){ - var currentBounds = arrBounds[currentIndex]; - arrLeft.push(currentBounds.left); - arrRight.push(currentBounds.right); - arrTop.push(currentBounds.top); - arrBottom.push(currentBounds.bottom); - } - var newExtent = new OpenLayers.Bounds(); - - newExtent.left = arrLeft.sort(sortNumber)[0]; - newExtent.right = arrRight.sort(inverseSortNumber)[0]; - newExtent.top = arrTop.sort(inverseSortNumber)[0]; - newExtent.bottom = arrBottom.sort(sortNumber)[0]; - - return newExtent; -}; - -org.OpenGeoPortal.MapController.prototype.getMaxLayerExtent = function getMaxLayerExtent(layerID){ - var layerStateObject = this.layerStateObject; - var bbox = layerStateObject.getState(layerID, "bbox"); - var arrBbox = bbox.split(","); - var newExtent = new OpenLayers.Bounds(); - - newExtent.left = arrBbox[0]; - newExtent.right = arrBbox[2]; - newExtent.top = arrBbox[3]; - newExtent.bottom = arrBbox[1]; - return newExtent; -}; - -org.OpenGeoPortal.MapController.prototype.boundsArrayToOLObject = function (arrBbox){ - var newExtent = new OpenLayers.Bounds(); - newExtent.left = arrBbox[0]; - newExtent.right = arrBbox[2]; - newExtent.top = arrBbox[3]; - newExtent.bottom = arrBbox[1]; - - return newExtent; -}; - -org.OpenGeoPortal.MapController.prototype.getSpecifiedExtent = function getSpecifiedExtent(extentType, layerObj){ - //this code should be in mapDiv.js, since it has access to the openlayers object - var extentArr = []; - var maxExtentForLayers; - if (extentType == "maxForLayers"){ - for (var layerID in layerObj){ - var arrBbox = layerObj[layerID].bounds; - extentArr.push(this.boundsArrayToOLObject(arrBbox)); - } - if (extentArr.length > 1){ - maxExtentForLayers = this.getCombinedBounds(extentArr).toBBOX(); - } else { - maxExtentForLayers = extentArr[0].toBBOX(); - } - } - var extentMap = {"global": "-180,-85,180,85", "current": this.getGeodeticExtent().toBBOX(), - "maxForLayers": maxExtentForLayers}; - - if(extentMap[extentType] != "undefined"){ - return extentMap[extentType]; - } else { - throw new Exception('Extent type "' + extentType + '" is undefined.'); - } -}; diff --git a/geoportal_1/src/main/webapp/resources/javascript/old/institution.js b/geoportal_1/src/main/webapp/resources/javascript/old/institution.js deleted file mode 100644 index d42f604..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/old/institution.js +++ /dev/null @@ -1,225 +0,0 @@ -/** - * this should come from a config file - * Ideally we could have an object with all needed variables of an institution parameterized; - * wms server, tilecaching server, download server, source graphic...what else? resolutions array for tile caching? - */ - -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -if (typeof org.OpenGeoPortal.InstitutionInfo == 'undefined'){ - org.OpenGeoPortal.InstitutionInfo = {}; -} else if (typeof org.OpenGeoPortal.InstitutionInfo !== "object"){ - throw new Error("org.OpenGeoPortal.InstitutionInfo already exists and is not an object"); -} - -org.OpenGeoPortal.InstitutionInfo.Config = {}; -org.OpenGeoPortal.InstitutionInfo.Search = {}; -org.OpenGeoPortal.InstitutionInfo.homeInstitution = ""; -org.OpenGeoPortal.InstitutionInfo.institutionSpecificCss = ""; -org.OpenGeoPortal.InstitutionInfo.institutionSpecificJavaScript = ""; -org.OpenGeoPortal.InstitutionInfo.institutionSpecificGoogleAnalyticsId = ""; - -org.OpenGeoPortal.InstitutionInfo.getHomeInstitution = function(){ - var institution = org.OpenGeoPortal.InstitutionInfo.homeInstitution; - //return homeInstitution if it is not empty - if (institution.length > 0){ - return institution; - } else { - org.OpenGeoPortal.InstitutionInfo.requestInfo(); - return org.OpenGeoPortal.InstitutionInfo.homeInstitution; - } -}; - - -org.OpenGeoPortal.InstitutionInfo.getCustomCss = function(){ - var institution = org.OpenGeoPortal.InstitutionInfo.institutionSpecificCss; - //return institutionSpecificCss if it is not empty - if (institution.length > 0){ - return institution; - } else { - org.OpenGeoPortal.InstitutionInfo.requestInfo(); - return org.OpenGeoPortal.InstitutionInfo.institutionSpecificCss; - } -}; - -org.OpenGeoPortal.InstitutionInfo.getCustomJavaScript = function(){ - var javaScriptFileName = org.OpenGeoPortal.InstitutionInfo.institutionSpecificJavaScript; - return javaScriptFileName; -}; - -org.OpenGeoPortal.InstitutionInfo.getGoogleAnalyticsId = function(){ - var googleAnalyticsId = org.OpenGeoPortal.InstitutionInfo.institutionSpecificGoogleAnalyticsId; - return googleAnalyticsId; -}; - -org.OpenGeoPortal.InstitutionInfo.getWMSProxy = function(institution, accessLevel) { - var configObj = org.OpenGeoPortal.InstitutionInfo.Config[institution]; - if (typeof configObj.proxy != "undefined"){ - if (jQuery.inArray(accessLevel.toLowerCase(), configObj.proxy.accessLevel) > -1){ - return configObj.proxy.wms; - } - } - - return false; - -}; - -org.OpenGeoPortal.InstitutionInfo.getSearch = function(){ - var search = org.OpenGeoPortal.InstitutionInfo.Search; - //return Search if it is not empty - for (var i in search){ - return search; - } - - org.OpenGeoPortal.InstitutionInfo.requestInfo(); - return org.OpenGeoPortal.InstitutionInfo.Search; - -}; - -org.OpenGeoPortal.InstitutionInfo.getInstitutionInfo = function(){ - var configObj = org.OpenGeoPortal.InstitutionInfo.Config; - //return the configObj if it is not empty - for (var i in configObj){ - return configObj; - } - //otherwise, get set the configObj from the xml config file - org.OpenGeoPortal.InstitutionInfo.requestInfo(); - return org.OpenGeoPortal.InstitutionInfo.Config; -}; - -org.OpenGeoPortal.InstitutionInfo.requestInfo = function(){ - var params = { - url: "resources/ogpConfig.json", - async: false, - contentType: "text/json", - dataType: 'json', - success: function(data){ - var institutions = data["config"]["institutions"]; - org.OpenGeoPortal.InstitutionInfo.Search = data["config"]["search"]; - org.OpenGeoPortal.InstitutionInfo.institutionSpecificCss = data["config"]["institutionSpecificCss"]; - org.OpenGeoPortal.InstitutionInfo.institutionSpecificJavaScript = data["config"]["institutionSpecificJavaScript"]; - org.OpenGeoPortal.InstitutionInfo.institutionSpecificGoogleAnalyticsId = data["config"]["googleAnalyticsId"]; - org.OpenGeoPortal.InstitutionInfo.Config = institutions; - org.OpenGeoPortal.InstitutionInfo.homeInstitution = data["config"]["homeInstitution"]; - }, - error: function(jqXHR, textStatus, errorThrown){ - alert(textStatus); - alert(errorThrown); - alert(jqXHR); - } - }; - jQuery.ajax(params); -}; - -/*org.OpenGeoPortal.InstitutionInfo.getPreviewUrlArray = function(layerObj){ - //is layer public or private? is this a request that can be handled by a tilecache? - //is this a wms request? something to think about. for now, we only support wms previews - validateLayerObj = function(){ - var paramArray = ["access", "institution", "tilecache"]; - for (var paramIndex in paramArray){ - var param = paramArray[paramIndex]; - if (typeof layerObj[param] == "undefined"){ - throw new Error("org.OpenGeoPortal.InstitutionInfo.getPreviewUrlArray: The parameter " + param + " is required."); - } - } - }; - validateLayerObj(); - var urlArraySize = 3; //this seems to be a good size for OpenLayers performance - var urlArray = []; - populateUrlArray = function(url){ - for (var i=0; i < urlArraySize; i++){ - urlArray[i] = url; - } - }; - var wmsProxyUrl = this.localRestrictedWMS; - if (wmsProxyUrl.length == 0){ - throw new Error("No server for restricted data has been configured."); - } - if (layerObj.access.toLowerCase() != "public"){ - if (layerObj.institution.toLowerCase() != this.getHomeInstitution().toLowerCase()) { - throw new Error("You don't have access to preview this layer"); - } else { - populateUrlArray(wmsProxyUrl); - } - } else { - var institutionInfo = this.getInstitutionInfo(); - var addressArray; - if ((typeof institutionInfo[layerObj.institution].preview.tileCache == "undefined") || - (layerObj.tilecache == false)){ - addressArray = institutionInfo[layerObj.institution].preview.WMS.serviceAddress; - if (addressArray.length == 1){ - populateUrlArray(addressArray[0]); - } else { - urlArray = addressArray; - } - } else { - addressArray = institutionInfo[layerObj.institution].preview.tileCache.serviceAddress; - if (addressArray.length == 1){ - populateUrlArray(addressArray[0]); - } else { - urlArray = addressArray; - } - } - } - - return urlArray; -}; - -org.OpenGeoPortal.InstitutionInfo.tilecacheToWMS = function(tilingUrl){ - var wmsArray = false; - var tilingArray = new Array(); - if (jQuery.isArray(tilingUrl)){ - tilingArray = tilingUrl; - tilingUrl = tilingUrl[0]; - wmsArray = true; - } - - if (tilingUrl.indexOf(this.localRestrictedWMS) > -1){ - return tilingUrl; - } - var institutionInfo = org.OpenGeoPortal.InstitutionInfo.getInstitutionInfo(); - for (var institution in institutionInfo){ - var currentInstitution = institutionInfo[institution].preview; - for (var serviceType in currentInstitution){ - if (tilingUrl == currentInstitution[serviceType].serviceAddress[0]){ - if (wmsArray){ - for (var i in tilingArray){ - tilingArray[i] = currentInstitution.WMS.serviceAddress[0]; - } - return tilingArray; - } else { - return currentInstitution.WMS.serviceAddress[0]; - } - } - } - } -}; -*/ -org.OpenGeoPortal.InstitutionInfo.imagePath = "resources/media/"; - -org.OpenGeoPortal.InstitutionInfo.icons = { - "dataTypes": { - "Point": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_dot.png", "displayName":"Point"}, - "Line": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_arc.png", "displayName":"Line"}, - "Polygon": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_polygon.png", "displayName":"Polygon"}, - "Raster": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_raster.png", "displayName":"Raster"}, - "PaperMap": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_map.png", "displayName":"Scanned Map"} - } -}; - -org.OpenGeoPortal.InstitutionInfo.dataTypes = { dataTypeArray : [{"DisplayName":"Point", "value": "point"}, - {"DisplayName":"Line", "value": "line"}, - {"DisplayName":"Polygon", "value": "polygon"}, - {"DisplayName":"Raster", "value": "raster"}, - {"DisplayName":"Scanned Map", "value": "paper map"}]}; \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/old/jquery.ba-resize.js b/geoportal_1/src/main/webapp/resources/javascript/old/jquery.ba-resize.js deleted file mode 100644 index 1f41d37..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/old/jquery.ba-resize.js +++ /dev/null @@ -1,246 +0,0 @@ -/*! - * jQuery resize event - v1.1 - 3/14/2010 - * http://benalman.com/projects/jquery-resize-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ - -// Script: jQuery resize event -// -// *Version: 1.1, Last updated: 3/14/2010* -// -// Project Home - http://benalman.com/projects/jquery-resize-plugin/ -// GitHub - http://github.com/cowboy/jquery-resize/ -// Source - http://github.com/cowboy/jquery-resize/raw/master/jquery.ba-resize.js -// (Minified) - http://github.com/cowboy/jquery-resize/raw/master/jquery.ba-resize.min.js (1.0kb) -// -// About: License -// -// Copyright (c) 2010 "Cowboy" Ben Alman, -// Dual licensed under the MIT and GPL licenses. -// http://benalman.com/about/license/ -// -// About: Examples -// -// This working example, complete with fully commented code, illustrates a few -// ways in which this plugin can be used. -// -// resize event - http://benalman.com/code/projects/jquery-resize/examples/resize/ -// -// About: Support and Testing -// -// Information about what version or versions of jQuery this plugin has been -// tested with, what browsers it has been tested in, and where the unit tests -// reside (so you can test it yourself). -// -// jQuery Versions - 1.3.2, 1.4.1, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome, Opera 9.6-10.1. -// Unit Tests - http://benalman.com/code/projects/jquery-resize/unit/ -// -// About: Release History -// -// 1.1 - (3/14/2010) Fixed a minor bug that was causing the event to trigger -// immediately after bind in some circumstances. Also changed $.fn.data -// to $.data to improve performance. -// 1.0 - (2/10/2010) Initial release - -(function($,window,undefined){ - '$:nomunge'; // Used by YUI compressor. - - // A jQuery object containing all non-window elements to which the resize - // event is bound. - var elems = $([]), - - // Extend $.resize if it already exists, otherwise create it. - jq_resize = $.resize = $.extend( $.resize, {} ), - - timeout_id, - - // Reused strings. - str_setTimeout = 'setTimeout', - str_resize = 'resize', - str_data = str_resize + '-special-event', - str_delay = 'delay', - str_throttle = 'throttleWindow'; - - // Property: jQuery.resize.delay - // - // The numeric interval (in milliseconds) at which the resize event polling - // loop executes. Defaults to 250. - - jq_resize[ str_delay ] = 250; - - // Property: jQuery.resize.throttleWindow - // - // Throttle the native window object resize event to fire no more than once - // every milliseconds. Defaults to true. - // - // Because the window object has its own resize event, it doesn't need to be - // provided by this plugin, and its execution can be left entirely up to the - // browser. However, since certain browsers fire the resize event continuously - // while others do not, enabling this will throttle the window resize event, - // making event behavior consistent across all elements in all browsers. - // - // While setting this property to false will disable window object resize - // event throttling, please note that this property must be changed before any - // window object resize event callbacks are bound. - - jq_resize[ str_throttle ] = true; - - // Event: resize event - // - // Fired when an element's width or height changes. Because browsers only - // provide this event for the window element, for other elements a polling - // loop is initialized, running every milliseconds - // to see if elements' dimensions have changed. You may bind with either - // .resize( fn ) or .bind( "resize", fn ), and unbind with .unbind( "resize" ). - // - // Usage: - // - // > jQuery('selector').bind( 'resize', function(e) { - // > // element's width or height has changed! - // > ... - // > }); - // - // Additional Notes: - // - // * The polling loop is not created until at least one callback is actually - // bound to the 'resize' event, and this single polling loop is shared - // across all elements. - // - // Double firing issue in jQuery 1.3.2: - // - // While this plugin works in jQuery 1.3.2, if an element's event callbacks - // are manually triggered via .trigger( 'resize' ) or .resize() those - // callbacks may double-fire, due to limitations in the jQuery 1.3.2 special - // events system. This is not an issue when using jQuery 1.4+. - // - // > // While this works in jQuery 1.4+ - // > $(elem).css({ width: new_w, height: new_h }).resize(); - // > - // > // In jQuery 1.3.2, you need to do this: - // > var elem = $(elem); - // > elem.css({ width: new_w, height: new_h }); - // > elem.data( 'resize-special-event', { width: elem.width(), height: elem.height() } ); - // > elem.resize(); - - $.event.special[ str_resize ] = { - - // Called only when the first 'resize' event callback is bound per element. - setup: function() { - // Since window has its own native 'resize' event, return false so that - // jQuery will bind the event using DOM methods. Since only 'window' - // objects have a .setTimeout method, this should be a sufficient test. - // Unless, of course, we're throttling the 'resize' event for window. - if ( !jq_resize[ str_throttle ] && this[ str_setTimeout ] ) { return false; } - - var elem = $(this); - - // Add this element to the list of internal elements to monitor. - elems = elems.add( elem ); - - // Initialize data store on the element. - $.data( this, str_data, { w: elem.width(), h: elem.height() } ); - - // If this is the first element added, start the polling loop. - if ( elems.length === 1 ) { - loopy(); - } - }, - - // Called only when the last 'resize' event callback is unbound per element. - teardown: function() { - // Since window has its own native 'resize' event, return false so that - // jQuery will unbind the event using DOM methods. Since only 'window' - // objects have a .setTimeout method, this should be a sufficient test. - // Unless, of course, we're throttling the 'resize' event for window. - if ( !jq_resize[ str_throttle ] && this[ str_setTimeout ] ) { return false; } - - var elem = $(this); - - // Remove this element from the list of internal elements to monitor. - elems = elems.not( elem ); - - // Remove any data stored on the element. - elem.removeData( str_data ); - - // If this is the last element removed, stop the polling loop. - if ( !elems.length ) { - clearTimeout( timeout_id ); - } - }, - - // Called every time a 'resize' event callback is bound per element (new in - // jQuery 1.4). - add: function( handleObj ) { - // Since window has its own native 'resize' event, return false so that - // jQuery doesn't modify the event object. Unless, of course, we're - // throttling the 'resize' event for window. - if ( !jq_resize[ str_throttle ] && this[ str_setTimeout ] ) { return false; } - - var old_handler; - - // The new_handler function is executed every time the event is triggered. - // This is used to update the internal element data store with the width - // and height when the event is triggered manually, to avoid double-firing - // of the event callback. See the "Double firing issue in jQuery 1.3.2" - // comments above for more information. - - function new_handler( e, w, h ) { - var elem = $(this), - data = $.data( this, str_data ); - - // If called from the polling loop, w and h will be passed in as - // arguments. If called manually, via .trigger( 'resize' ) or .resize(), - // those values will need to be computed. - data.w = w !== undefined ? w : elem.width(); - data.h = h !== undefined ? h : elem.height(); - - old_handler.apply( this, arguments ); - }; - - // This may seem a little complicated, but it normalizes the special event - // .add method between jQuery 1.4/1.4.1 and 1.4.2+ - if ( $.isFunction( handleObj ) ) { - // 1.4, 1.4.1 - old_handler = handleObj; - return new_handler; - } else { - // 1.4.2+ - old_handler = handleObj.handler; - handleObj.handler = new_handler; - } - } - - }; - - function loopy() { - - // Start the polling loop, asynchronously. - timeout_id = window[ str_setTimeout ](function(){ - - // Iterate over all elements to which the 'resize' event is bound. - elems.each(function(){ - var elem = $(this), - width = elem.width(), - height = elem.height(), - data = $.data( this, str_data ); - - // If element size has changed since the last time, update the element - // data store and trigger the 'resize' event. - if ( width !== data.w || height !== data.h ) { - elem.trigger( str_resize, [ data.w = width, data.h = height ] ); - } - - }); - - // Loop. - loopy(); - - }, jq_resize[ str_delay ] ); - - }; - -})(jQuery,this); diff --git a/geoportal_1/src/main/webapp/resources/javascript/old/jquery.scrollTo-min.js b/geoportal_1/src/main/webapp/resources/javascript/old/jquery.scrollTo-min.js deleted file mode 100644 index 5e78778..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/old/jquery.scrollTo-min.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * jQuery.ScrollTo - Easy element scrolling using jQuery. - * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Dual licensed under MIT and GPL. - * Date: 5/25/2009 - * @author Ariel Flesler - * @version 1.4.2 - * - * http://flesler.blogspot.com/2007/10/jqueryscrollto.html - */ -;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/old/layerTable.js b/geoportal_1/src/main/webapp/resources/javascript/old/layerTable.js deleted file mode 100644 index c57c598..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/old/layerTable.js +++ /dev/null @@ -1,2461 +0,0 @@ -/** - * This javascript module includes functions for dealing with the search - * results table under the object LayerTable. LayerTable uses the excellent - * jQuery-based dataTables as the basis for the table. - * - * @author Chris Barnett - * - */ -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -/** - * LayerTable constructor - * this object defines the behavior of the search results table, as well as the saved layers table - * - * @param userDiv the id of the div element to place the table in - * @param tableName the id of the actual table element - */ -org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ - //set default for the name of the table div...these defaults should not be in the generic layertable code - //but in the extensions of the object - if ((typeof userDiv == 'undefined')||(userDiv.length === 0)){ - userDiv = 'resultsTable'; - } - - if ((typeof tableName == 'undefined')||(tableName.length === 0)){ - tableName = 'searchResults'; - } - var that = this; - - this.getTableDiv = function(){ - return userDiv; - }; - //this.tableDiv = userDiv; - this.getTableID = function(){ - return tableName; - }; - - this.getTableObj = function(){ - return jQuery('#' + tableName).dataTable(); - }; - - this.tableHeadingsObj = new org.OpenGeoPortal.LayerTable.TableHeadings(this); - //temporary? - tableHeadings = this.tableHeadingsObj.getTableHeadings(); - - this.tableLayerState = new org.OpenGeoPortal.LayerTable.TableLayerState(); - /*private methods - * - */ - //maintains state for how the table is sorted - //*******Search Results only - this.tableOrganize = { - //set some defaults - settings: {"organizeBy": "score", "organizeType": "numeric", "organizeDirection": "desc"}, - //we only need organizetype if there is more than one possibility per column - //get the current sort state - getState: function(){ - return this.settings; - }, - - //set the state - setState: function(updateObj){//can't directly set organizeType; this will be looked up in tableHeading - //test to see if the state is changed; if so, fire new solr search - var innerThat = this; - compareState = function(key){ - if (updateObj[key] == innerThat.settings[key]){ - return true; - } else { - return false; - } - }; - setSortColumn = function(){ - //test for rank first - var newColumn = updateObj.organizeBy; - if (newColumn == 'score'){ - innerThat.settings.organizeBy = newColumn; - innerThat.settings.organizeType = "numeric"; - } else { - for (var columnName in tableHeadings){ - if (newColumn == columnName){ - var newOrganize = columnName.organize; - if (newOrganize){ - throw new Error("This column cannot be organized."); //you can't organize this column - } else { - innerThat.settings.organizeBy = newColumn; - innerThat.settings.organizeType = newOrganize; - return; - } - } - } - throw new Error("The specified column name does not exist."); //if it gets here, this means that there was no matching column name in tableHeadings - } - }; - - setSortDirection = function(){ - if (typeof updateObj.organizeDirection == 'undefined'){ - updateObj.organizeDirection = innerThat.settings.organizeDirection; - } - if ((updateObj.organizeDirection == 'asc')||(updateObj.organizeDirection == 'desc')){ - innerThat.settings.organizeDirection = updateObj.organizeDirection; - } else { - throw new Error("The specified sort direction is invalid for this column."); //invalid organize direction type - } - }; - - if (typeof updateObj.organizeBy == 'undefined'){ - if (typeof updateObj.organizeDirection == 'undefined'){ - //these values can't both be unspecified - throw new Error("Must specify a column and/or direction."); - } else { - //set organizeBy to current value, continue processing - updateObj.organizeBy = innerThat.settings.organizeBy; - setSortColumn(); - setSortDirection(); - that.searchRequest(0); - org.OpenGeoPortal.ui.updateSortMenu(); - } - } else if (compareState('organizeBy')){ - if (compareState('organizeDirection')){ - //don't do anything...the object hasn't changed exit function - return; - } else { - setSortDirection(); - that.searchRequest(0); - org.OpenGeoPortal.ui.updateSortMenu(); - } - } else { - setSortColumn(); - setSortDirection(); - that.searchRequest(0); - org.OpenGeoPortal.ui.updateSortMenu(); - } - } - }; - //wrap the content of each table cell in a div so we can control the size - this.wrapCells = function(){ - var tableName = that.getTableID(); - jQuery('#' + tableName + ' td').add('#' + tableName + ' th').each(function (iPosition, Element){ - //reference the column, so we can set the width of each div - var tableCell = jQuery(this); - if (!tableCell.children().first().is("div")){ - tableCell.wrapInner('
        '); - } - }); - that.sizeCells(); - }; - //dynamically size the table depending on visible columns & the width of the container - this.sizeCells = function(){ - //determine which fields are showing, set widths from header object - //if they add up to the total width, we're done. otherwise we need to adjust - //we need to maintain minimum widths - var currentTab = org.OpenGeoPortal.Utility.whichTab(); - var tableID = this.getTableID(); - var adjustObj; - - if (!currentTab.tableObject){ - return; - } - if (currentTab.tableName != tableID){ - return; - } - var totalWidth = jQuery('#left_col').width(); - var arrColumns = this.getVisibleColumns(); - totalWidth = totalWidth - (arrColumns.length * 7) + 1;//account for cell padding plus right borders of cells, leftmost border - //var divWidth = totalWidth; - var arrSizable = new Array(); - var sizableWidth = 0; - var headingsObj = this.tableHeadingsObj; - for (var i in arrColumns){ - var currentColumn = arrColumns[i]; - var currentWidth = headingsObj.getWidth(currentColumn); - if (headingsObj.getValue(currentColumn, "resizable")){ - sizableWidth += currentWidth; - arrSizable.push(currentColumn); - } else { - var fixedColumnWidth = parseFloat(currentWidth); - totalWidth = totalWidth - fixedColumnWidth; - } - } - var numberSizable = arrSizable.length; - if (numberSizable == 0){ - return;//we're done. exit the function - } - //working here.... - if (numberSizable == 1){ - var currentClass = headingsObj.getValue(arrSizable[0], "sClass"); - var currentMinWidth = headingsObj.getValue(arrSizable[0], "minWidth"); - if (totalWidth >= currentMinWidth){ - jQuery('#' + tableID + ' .' + currentClass + ' > div').width(totalWidth); - } else { - //debugging - this.removeExtraColumn(); - //alert('remaining width is less than the minWidth for the column (sizable = 1)'); - //what can we do here? I think we have to remove columns to make things fit. - //this will fail to adjust columns properly if the visible resizable column is not - //removed by the above function - } - //should also update the currentWidth; - headingsObj.setWidth(arrSizable[0], totalWidth); - return;//we're done. exit the function - } - - //following is executed if numberSizable is > 1 - //determine if the total width currently set for the sizable columns is equal to the - //width available on the page. - var remainingWidth = totalWidth - sizableWidth; - if (remainingWidth == 0){ - //set columns to currentWidth values - for (var j in arrSizable){ - var currentSizable = arrSizable[j]; - //var currentMinWidth = headingsObj.getValue(currentSizable, "minWidth"); - var currentWidth = headingsObj.getValue(currentSizable, "currentWidth"); - var currentClass = headingsObj.getValue(currentSizable, "sClass"); - jQuery('#' + tableID + ' .' + currentClass + ' > div').width(currentWidth); - //since setWidth cannot set a 'currentWidth' smaller than 'minWidth', we - //should be ok not comparing with 'minWidth' here - headingsObj.setWidth(currentSizable, currentWidth); - }; - } else { - //split the difference between columns and add to each currentWidth, taking care not to go below minWidth - var remainder = remainingWidth % numberSizable; - // widthDifference * numberSizable will always be <= remainingWidth - var widthDifference = Math.floor(remainingWidth / numberSizable); - var propagate = 0;//we need this variable outside the loop. - var adjustArr = []; - for (var j in arrSizable){ - var currentSizable = arrSizable[j]; - var currentMinWidth = headingsObj.getValue(currentSizable, "minWidth"); - var currentWidth = headingsObj.getValue(currentSizable, "currentWidth") + widthDifference - propagate; - var currentClass = headingsObj.getValue(currentSizable, "sClass"); - //we only want to apply the remainder to the first field if possible - if (remainder > 0){ - currentWidth++; - remainder--; - } - if (currentWidth >= currentMinWidth){ - adjustObj = {}; - adjustObj.sClass = currentClass; - adjustObj.availableWidth = currentWidth - currentMinWidth; - adjustObj.currentWidth = currentWidth; - adjustObj.currentSizable = currentSizable; - adjustArr.push(adjustObj); - jQuery('#' + tableID + ' .' + currentClass + ' > div').width(currentWidth); - headingsObj.setWidth(currentSizable, currentWidth); - propagate = 0; - } else { - //if we set the column to the currentMinWidth, we have to propagate the difference to - //another column. - propagate = currentMinWidth - currentWidth; - jQuery('#' + tableID + ' .' + currentClass + ' > div').width(currentMinWidth); - headingsObj.setWidth(currentSizable, currentMinWidth); - } - }; - while (propagate > 0){ - //in this case, we need to start taking width from earlier columns - if (adjustArr.length > 0){ - for (var k in adjustArr){ - var currentAdjust = adjustArr[k]; - //compare the value of propagate with the value of currentAdjust.availableWidth - var adjustDelta = propagate - currentAdjust.availableWidth; - if (adjustDelta <= 0){ - jQuery('#' + tableID + ' .' + currentAdjust.sClass + ' > div').width(currentAdjust.currentWidth - propagate); - headingsObj.setWidth(adjustObj.currentSizable, currentAdjust.currentWidth - propagate); - return; //we're done - } else { - jQuery('#' + tableID + ' .' + currentAdjust.sClass + ' > div').width(currentAdjust.currentWidth - currentAdjust.availableWidth); - headingsObj.setWidth(adjustObj.currentSizable, currentAdjust.currentWidth - currentAdjust.availableWidth); - propagate = adjustDelta; - } - } - } else { - //if propagate is still > 0 when all columns are at minWidth, we have to remove a column from display - this.removeExtraColumn(); - return; //avoid possible infinite loop - } - } - } - //totalWidth must be shared between all visible columns - }; - - //html content/formatting for expanded row - this.formatDetails = function(rowNode){ - var tableID = this.getTableID(); - var tableObj = this.getTableObj(); - var rowData = tableObj.fnGetData(rowNode); - //layerIDs returned from the search are used as OpenLayers layer names - var layerID = rowData[this.tableHeadingsObj.getColumnIndex("LayerId")]; - var dataType = rowData[this.tableHeadingsObj.getColumnIndex("DataType")]; - var displayName = rowData[this.tableHeadingsObj.getColumnIndex("LayerDisplayName")]; - var extent = []; - extent.push(rowData[this.tableHeadingsObj.getColumnIndex("MinX")]); - extent.push(rowData[this.tableHeadingsObj.getColumnIndex("MinY")]); - extent.push(rowData[this.tableHeadingsObj.getColumnIndex("MaxX")]); - extent.push(rowData[this.tableHeadingsObj.getColumnIndex("MaxY")]); - var sOut = '
        '; - //read state - if (!org.OpenGeoPortal.layerState.layerStateDefined(layerID)){ - org.OpenGeoPortal.layerState.addNewLayer(layerID, {"dataType": dataType}); - } - - var opacityVal = org.OpenGeoPortal.layerState.getState(layerID, "opacity") + '%'; - - sOut += '
        '; - sOut += '
        opacity: '; - sOut += '
        ' + opacityVal + '
        '; - sOut += ''; - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - if ((dataType == "Raster")||(dataType == "Paper Map")){ - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - sOut += '
        Zoom to geographic extent of layer
        '; - sOut += '
        '; - sOut += '
        '; - } else { - var attributeToolImg; - if (org.OpenGeoPortal.layerState.getState(layerID, "getFeature")){ - attributeToolImg = "resources/media/preview_down.gif"; - } else { - attributeToolImg = "resources/media/preview.gif"; - } - var sizeVal = org.OpenGeoPortal.layerState.getState(layerID, "graphicWidth") + 'px'; - - sOut += '
        '; - sOut += '
        '; - switch (dataType){ - case "Polygon": - sOut += "border: "; - break; - case "Point": - sOut += "pt size: "; - break; - case "Line": - sOut += "ln width: "; - break; - } - sOut += '
        ' + sizeVal + '
        '; - sOut += ''; - sOut += '
        '; - sOut += '
        '; - sOut += '
        '; - //sOut += ''; - sOut += '
        '; - sOut += '
        '; - sOut += '
        Zoom to geographic extent of layer
        '; - sOut += '
        '; - sOut += 'Show Attributes
        '; - } - - sOut += '
        '; - return sOut; - }; - - this.selectPreviewedRow = function(){ - var tableName = this.getTableID(); - jQuery('#' + tableName + ' td.colPreview > div > input:checkbox').live("click", function(event) { - var rowObj = jQuery(event.target).closest("tr"); - if (jQuery(event.target).is(":checked")){ - rowObj.addClass('previewedLayer'); - if (rowObj.next().children('td').hasClass('resultsControls')){ - rowObj.next().addClass('previewedLayer'); - } - } else { - rowObj.removeClass('previewedLayer'); - if (rowObj.next().children('td').hasClass('resultsControls')){ - rowObj.next().removeClass('previewedLayer'); - } - } - - }); - }; - - //adds class to row for highlighting current row - this.highlightRow = function(){ - var tableName = this.getTableID(); - jQuery('#' + tableName + ' > tbody').live("mouseout", function(event) { - var currentNode = jQuery(event.target).parentsUntil('#' + tableName).last(); - jQuery(currentNode).children().removeClass('row_selected'); - org.OpenGeoPortal.map.hideLayerBBox(); - }); - - var tableObj = this.getTableObj(); - var tableHeadingsObj = this.tableHeadingsObj; - jQuery('#' + tableName + ' > tbody').live("mouseover", function(event) { - var rowObj = jQuery(event.target).parentsUntil('#' + tableName + ' > tbody').last(); - rowObj.addClass('row_selected'); - if (rowObj.children('td').hasClass('resultsControls')){ - rowObj.prev().addClass('row_selected'); - } - if (rowObj.next().children('td').hasClass('resultsControls')){ - rowObj.next().addClass('row_selected'); - } - //if next sibling is details row, then add class 'row_selected' to it as well - //set first tr ancestor to class row_selected - var aData = tableObj.fnGetData(rowObj[0]); - //console.log(aData); - if (aData == null){ - rowObj = rowObj.prev(); - aData = tableObj.fnGetData(rowObj[0]); - } - var bbox = {}; - bbox.south = aData[tableHeadingsObj.getColumnIndex("MinY")]; - bbox.north = aData[tableHeadingsObj.getColumnIndex("MaxY")]; - bbox.west = aData[tableHeadingsObj.getColumnIndex("MinX")]; - bbox.east = aData[tableHeadingsObj.getColumnIndex("MaxX")]; - org.OpenGeoPortal.map.showLayerBBox(bbox); - }); - }; - - this.downloadActionSelectRow = function(rowPosition, isSelected){ - if (isSelected){ - selectionClass = 'downloadSelection'; - } else { - selectionClass = 'downloadUnselection'; - } - var tableObj = this.getTableObj(); - //var tableHeadingsObj = this.tableHeadingsObj; - var rowObj = jQuery(tableObj.fnGetNodes(rowPosition)); - rowObj.addClass(selectionClass); - - if (rowObj.next().children('td').hasClass('resultsControls')){ - rowObj.next().addClass(selectionClass); - } - //if next sibling is details row, then add class 'row_selected' to it as well - //set first tr ancestor to class row_selected - /*var aData = tableObj.fnGetData(rowObj[0]); - //console.log(aData); - if (aData == null){ - rowObj = rowObj.prev(); - aData = tableObj.fnGetData(rowObj[0]); - } - var bbox = {}; - bbox.south = aData[tableHeadingsObj.getColumnIndex("MinY")]; - bbox.north = aData[tableHeadingsObj.getColumnIndex("MaxY")]; - bbox.west = aData[tableHeadingsObj.getColumnIndex("MinX")]; - bbox.east = aData[tableHeadingsObj.getColumnIndex("MaxX")]; - org.OpenGeoPortal.map.showLayerBBox(bbox); - */ - }; - - this.getLayerIdFromRow = function(rowObj){ - return rowObj.aData[that.tableHeadingsObj.getColumnIndex('LayerId')]; - }; - - this.toolBarState = function(rowNode){ - if (rowNode.next().children('td').hasClass('resultsControls')){ - return true; - } else { - return false; - } - }; - //click-handler to expand row, expose preview controls - this.expandableRow = function(thisObj){ - //debug - try{ - //set the previewCount variable, so we know that a layer has been expanded before - if (typeof org.OpenGeoPortal.layerState.previewCount == "undefined"){ - org.OpenGeoPortal.layerState.previewCount = true; - } - var rowNode = jQuery(thisObj).closest('tr'); - - //test here to see if the next row is a tools row....then we can deal - //with this properly - - var isOpen = this.toolBarState(rowNode); - var detailsOpen = "resources/media/arrow_down.png"; - var detailsClosed = "resources/media/arrow_right.png"; - //this should do the right thing if the layerState for 'expanded' and the row icon - //don't match - var graphicsState = jQuery(thisObj).attr('src'); - if (graphicsState == detailsClosed){ - /* Open this row */ - this.openRow(rowNode[0]); - } else if (graphicsState == detailsOpen){ - //if layerExpanded is true and tools are open - if (isOpen){ - /* This row is already open - close it */ - this.closeToolBar(rowNode[0]); - } else { - /* Open this row */ - this.openRow(rowNode[0]); - } - - } - //debug - } catch(err){alert(err + " expandableRow");}; - }; - - this.closeToolBar = function(rowNode){ - try{ - var detailsClosed = "resources/media/arrow_right.png"; - jQuery(rowNode).find(".colExpand img").attr('src', detailsClosed); - var tableObj = this.getTableObj(); - var tableID = this.getTableID(); - tableObj.fnClose(rowNode); - var layerID = tableObj.fnGetData(rowNode)[this.tableHeadingsObj.getColumnIndex("LayerId")]; - - if (this.tableLayerState.getState(layerID, "expanded")){ - this.tableLayerState.setState(layerID, {"expanded": false}); - } - - if (tableID != 'savedLayers'){ - this.setTableLength(); - } - jQuery(".previewedLayer").removeClass('previewSeparator'); - jQuery(".previewedLayer").last().addClass('previewSeparator'); - tableObj.fnDraw(false); - } catch(err){alert(err + " closeToolBar");}; - }; - - this.openRow = function(rowNode){ - try{ - /* Open this row */ - var detailsOpen = "resources/media/arrow_down.png"; - jQuery(rowNode).find(".colExpand img").attr('src', detailsOpen); - - var tableObj = this.getTableObj(); - var tableID = this.getTableID(); - var layerID = tableObj.fnGetData(rowNode)[this.tableHeadingsObj.getColumnIndex("LayerId")]; - var escapedLayerID = org.OpenGeoPortal.Utility.idEscape(layerID); - - tableObj.fnOpen(rowNode, this.formatDetails(rowNode), 'resultsControls'); - - var dataType = tableObj.fnGetData(rowNode)[this.tableHeadingsObj.getColumnIndex("DataType")]; - //console.log(dataType); - if (!org.OpenGeoPortal.layerState.layerStateDefined(layerID)){ - org.OpenGeoPortal.layerState.addNewLayer(layerID, {"dataType": dataType}); - } - - if (!this.tableLayerState.getState(layerID, "expanded")){ - this.tableLayerState.setState(layerID, {"expanded": true}); - } - - if (tableID != 'savedLayers'){ - this.setTableLength(); - } - if ((dataType == "Raster")||(dataType =="Paper Map")){ - //return; - } else { - var minSize = 1; - var maxSize = 6; - if (dataType == "Polygon"){ - minSize = 0; - maxSize = 5; - } - - //trigger an event? - if (jQuery(".colorPalette").length == 0){ - setTimeout("org.OpenGeoPortal.ui.setPaletteColor(" + layerID + ")",250); - } - org.OpenGeoPortal.ui.setPaletteColor(layerID); - - // - - var sizeControl = jQuery("div.sizeControl"); - sizeControl.each(function(){ - jQuery(this).parent().hover(function(){org.OpenGeoPortal.ui.openControl(this);}, function(){org.OpenGeoPortal.ui.closeControl(this);}); - }); - - var widthVal = org.OpenGeoPortal.layerState.getState(layerID, "graphicWidth"); - jQuery("#size" + tableID + escapedLayerID).slider({ - min: minSize, - max: maxSize, - step: 1, - value: widthVal, //get value from Layer State object - slide: function(event, ui) { - jQuery('#sizeText' + tableID + escapedLayerID).text(ui.value + 'px'); - }, - stop: function(event, ui){ - org.OpenGeoPortal.layerState.setState(layerID, {"graphicWidth": ui.value}); - for (var i in org.OpenGeoPortal.map.getLayersByName(layerID)){ - org.OpenGeoPortal.map.changeStyle(layerID, dataType); - } - } - }); - } - var opacityControl = jQuery("div.opacityControl"); - opacityControl.each(function(){ - jQuery(this).parent().hover(function(){org.OpenGeoPortal.ui.openControl(this);}, function(){org.OpenGeoPortal.ui.closeControl(this);}); - }); - //retrieve opacity if it has been defined - //opacity control ID must also reference the tablename - var opacityVal = org.OpenGeoPortal.layerState.getState(layerID, "opacity"); - jQuery("#opacity" + tableID + escapedLayerID).slider({ - min: 0, - max: 100, - step: 5, - value: opacityVal, //get value from Layer State object - slide: function(event, ui) { - jQuery('#opacityText' + tableID + escapedLayerID).text(ui.value + '%'); - for (var i in org.OpenGeoPortal.map.getLayersByName(layerID)){ - org.OpenGeoPortal.map.getLayersByName(layerID)[0].setOpacity(ui.value * .01); - }}, - stop: function(event, ui){ - org.OpenGeoPortal.layerState.setState(layerID, {"opacity": ui.value}); - } - }); - if (jQuery(rowNode).hasClass("previewedLayer")){ - jQuery(rowNode).next().addClass("previewedLayer"); - } - if (jQuery(rowNode).hasClass("row_selected")){ - jQuery(rowNode).next().addClass("row_selected"); - } - - jQuery(".previewedLayer").removeClass('previewSeparator'); - jQuery(".previewedLayer").last().addClass('previewSeparator'); - tableObj.fnDraw(false); - - } catch(err){alert(err + " openRow");}; - }; - - // handles jsonp response from request for metadata call - this.showMetadataJsonpSuccess = function(data, contextObj) - { - var solrResponse = data["response"]; - var totalResults = solrResponse["numFound"]; - if (totalResults != 1) - { - throw new Error("Request for FGDC returned " + totalResults +". Exactly 1 was expected."); - return; - } - var doc = solrResponse["docs"][0]; // get the first layer object - var fgdcRawText = doc["FgdcText"]; - var layerId = doc["LayerId"][0]; - var fgdcText = unescape(fgdcRawText); // text was escaped on ingest into Solr - var fgdcDocument = jQuery.parseXML(fgdcText); - var xsl = null; - var params = { - url: "resources/xml/FGDC_V2_a.xsl", - async: false, - context: contextObj, - dataType: 'xml', - success: function(data){xsl = data;} - }; - jQuery.ajax(params); - var resultDocument = ""; - if (xsl != null){ - if (jQuery.browser.msie){ - resultDocument=fgdcDocument.transformNode(xsl); - } else { - var xsltProcessor = new XSLTProcessor(); - xsltProcessor.importStylesheet(xsl); - resultDocument = xsltProcessor.transformToFragment(fgdcDocument, document); - } - } - if (typeof jQuery('#metadataDialog')[0] == 'undefined'){ - var dialogDiv = '
        \n'; - dialogDiv += '
        \n'; - jQuery('body').append(dialogDiv); - } - var downloadButton = 'Download Metadata (XML)'; - //jQuery('#metadataDialog').width("550"); - var metadataDialog = jQuery("#metadataDialog"); - metadataDialog.html(resultDocument); - metadataDialog.prepend(downloadButton); - metadataDialog.dialog({ zIndex: 9999, width: 560, height: 400, title: "
        FGDC METADATA
        " }); - metadataDialog[0].scrollTop = 0; - metadataDialog.dialog("open"); - metadataDialog.find("a").click(function(event){ - var toID = jQuery(this).attr("href"); - if (toID.indexOf("#") == 0){ - event.preventDefault(); - //parse the hrefs for the anchors in this DOM element into toID - //xsl uses names instead of ids; yuck - toID = toID.substring(1); - metadataDialog.scrollTo(jQuery('[name="' + toID + '"]')); - } - }); - jQuery("#metadataDownloadButton").unbind(); - var iframeSource = "getMetadata/download?id=" + layerId; - var downloadFunction = function(){ - if (typeof jQuery('#metadataDownloadIframe')[0] == 'undefined'){ - var downloadIframe = ''); - } - var line = "";*/ - /*for (var successful in data.succeeded){ - if (data.succeeded[successful].disposition == "LINK_EMAILED"){ - line += ""; - line += ""; - line += data.succeeded[successful]["institution"]; - line += ""; - line += ""; - line += data.succeeded[successful]["title"]; - line += ""; - //line += ""; - //line += data.succeeded[successful]["layerId"]; - //line += ""; - //line += ""; - //line += data.succeeded[successful]["message"]; - //line += ""; - line += ""; - } - } - */ - /*if (line.length > 0){ - var message = "

        A link for the following layers was emailed to '" + requestObj.email + "'. "; - message += 'It may take up to 10 minutes to receive the email.

        '; - message += ''; - message += line; - message += "
        "; - this.genericModalDialog(message, "LAYERS EMAILED"); - } - }*/ - //} - }; - - jQuery.ajax(params); - //close the download box; - jQuery("#downloadDialog").dialog("close"); -}; - -org.OpenGeoPortal.UserInterface.prototype.genericModalDialog = function(customMessage, dialogTitle){ - - var divId = "genericModalDialog" + jQuery('.genericModalDialog').size(); - var div = '
        '; - div += customMessage; - div += '
        '; - jQuery('body').append(div); - - jQuery('#' + divId).dialog({ - zIndex: 2999, - title: dialogTitle, - resizable: true, - modal: true, - minWidth: 415, - autoOpen: false - }); - - jQuery('#' + divId).dialog('open'); - return divId; -}; - -org.OpenGeoPortal.UserInterface.prototype.requiresEmailAddress = function(layerObject){ - if ((layerObject.institution == "Harvard")&&(this.isRaster(layerObject.dataType))){ - return true; - } else { - return false; - } -}; - -org.OpenGeoPortal.UserInterface.prototype.IgnoreAuthenticationWarning = {"home": false, "external": false}; - - -org.OpenGeoPortal.UserInterface.prototype.authenticationWarning = function(checkboxObj, rowData, canLogin){ - - var that = this; - var institution = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex("Institution")]; - var ignoreWarningId = "ignoreAuthenticationWarning"; - var disposition; - var warningMessage = 'This layer is restricted by licensing agreement to the ' + institution + ' community. '; - if (canLogin){ - if (this.IgnoreAuthenticationWarning.home){ - this.cartTableObject.addToCart(checkboxObj, rowData); - return; - } - warningMessage += 'Restricted layers can be added to the Cart, but you must login before you can preview or download restricted layers.'; - ignoreWarningId += "Internal"; - disposition = "home"; - } else { - if (this.IgnoreAuthenticationWarning.external){ - this.cartTableObject.addToCart(checkboxObj, rowData); - return; - } - warningMessage += 'Restricted layers can be added to the Cart here, but you must use ' + institution; - warningMessage += "'s site and login to preview or download restricted layers."; - ignoreWarningId += "External"; - disposition = "external"; - } - - warningMessage += "
        "; - warningMessage += ''; - - var divId = this.genericModalDialog(warningMessage, "RESTRICTED LAYER"); - - var addToCartFunction = function() { - that.IgnoreAuthenticationWarning[disposition] = jQuery("#" + ignoreWarningId).is(":checked"); - jQuery(this).dialog('close'); - that.cartTableObject.addToCart(checkboxObj, rowData); - }; - - var loginAndAddFunction = function(){ - that.IgnoreAuthenticationWarning[disposition] = jQuery("#" + ignoreWarningId).is(":checked"); - that.loginDialog(); - - //pass some info to the loginDialog - jQuery(this).dialog('disable'); - var dialogBox = jQuery(this); - jQuery(document).bind("loginSuccess", function(){ - that.cartTableObject.addToCart(checkboxObj, rowData); - dialogBox.dialog('close'); - }); - jQuery(document).bind("loginCancel", function(){ - dialogBox.dialog("enable"); - }); - }; - - var cancelFunction = function(){ - that.IgnoreAuthenticationWarning[disposition] = jQuery("#" + ignoreWarningId).is(":checked"); - jQuery(this).dialog('close'); - //some code to deselect the layer check box; - jQuery(checkboxObj).attr("checked", false); - }; - - var buttons = {}; - if (canLogin){ - buttons["Login & Add"] = loginAndAddFunction; - buttons["Add Only"] = addToCartFunction; - buttons["Cancel"] = cancelFunction; - } else { - buttons["Add"] = addToCartFunction; - buttons["Cancel"] = cancelFunction; - } - - jQuery('#' + divId).dialog( - {width: 535, - buttons: buttons - } - ); - - -}; - -org.OpenGeoPortal.UserInterface.prototype.availableLayerLogic = function(action, rowData){ - switch (action){ - case "mapIt": - return false; - break; - case "removeFromCart": - return true; - break; - case "shareLink": - return true; - break; - case "download": - //no external restricted layers, no local restricted layers if not logged in. - var institution = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Institution')].toLowerCase(); - var access = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Access')].toLowerCase(); - if (access == "public"){ - return true; - } else if (institution != org.OpenGeoPortal.InstitutionInfo.getHomeInstitution().toLowerCase()){ - return false; - } else if (this.userId != null){ - return true; - } - break; - case "webService": - //public layers only. right now, only Tufts. - var institution = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Institution')].toLowerCase(); - var access = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Access')].toLowerCase(); - if ((institution != "tufts")||(access != "public")){ - return false; - } else { - return true; - } - break; - } - return false; -}; - -org.OpenGeoPortal.UserInterface.prototype.getLayerList = function(downloadAction, params){ - if (arguments.length < 2){ - params = {}; - params.clipped = false; - } - jQuery(".downloadSelection").removeClass("downloadSelection"); - jQuery(".downloadSelection").removeClass("downloadUnselection"); - - layerInfo = {}; - var tableObj = jQuery("#savedLayers").dataTable(); - var checkedRows = jQuery(".cartCheckBox:checked"); - var that = this; - checkedRows.each(function(){ - var rowNode = jQuery(this).closest('tr'); - var aPos = tableObj.fnGetPosition(rowNode[0]); - var aData = tableObj.fnGetData(aPos); - var headingsObj = that.cartTableObject.tableHeadingsObj; - var minX = aData[headingsObj.getColumnIndex('MinX')]; - var minY = aData[headingsObj.getColumnIndex('MinY')]; - var maxX = aData[headingsObj.getColumnIndex('MaxX')]; - var maxY = aData[headingsObj.getColumnIndex('MinY')]; - var isValidLayer = that.availableLayerLogic(downloadAction, aData); - if (params.clipped != false){ - //do a test to see if the layer's bbox is within the clip extent - var layerBounds = new OpenLayers.Bounds(); - layerBounds.extend(new OpenLayers.LonLat(minX,minY)); - layerBounds.extend(new OpenLayers.LonLat(maxX,maxY)); - - var clipBounds = new OpenLayers.Bounds(); - clipBounds.extend(new OpenLayers.LonLat(params.clipped[0],params.clipped[1])); - clipBounds.extend(new OpenLayers.LonLat(params.clipped[2],params.clipped[3])); - //this isn't working yet - //isValidLayer = layerBounds.intersectsBounds(clipBounds); - } - if (isValidLayer){ - that.cartTableObject.downloadActionSelectRow(aPos, true); - var layerID = aData[headingsObj.getColumnIndex('LayerId')]; - //console.log(layerID); - layerInfo[layerID] = {}; - layerInfo[layerID].name = aData[headingsObj.getColumnIndex('Name')]; - layerInfo[layerID].institution = aData[headingsObj.getColumnIndex('Institution')]; - layerInfo[layerID].dataType = aData[headingsObj.getColumnIndex('DataType')]; - layerInfo[layerID].access = aData[headingsObj.getColumnIndex('Access')]; - layerInfo[layerID].bounds = [minX, minY, maxX, maxY]; - } else { - that.cartTableObject.downloadActionSelectRow(aPos, false); - } - }); - return layerInfo; -}; - -/*org.OpenGeoPortal.UserInterface.prototype.downloadFromMapServer = function(requestObj) { - //modularize wms call so I can use the same code for 'save image' - /*if (!jQuery("#attachment")[0]){ - jQuery("body").append(''); - }*/ - //var url = "WMSGetMapProxy.jsp?server=" + requestObj.server + '&format=' + requestObj.format + '&bbox=' + requestObj.bbox; - /*var url = "getImage?server=" + requestObj.server + '&format=' + requestObj.format + '&bbox=' + requestObj.bbox; - url += '&srs=' + requestObj.srs + '&layers=' + requestObj.layers; - url += '&width=' + requestObj.width + '&height=' + requestObj.height + '&type=' + requestObj.type; - if (typeof requestObj.sld != 'undefined'){ - url += '&sld=' + requestObj.sld; - } - jQuery("#downloadDialog").dialog("close"); - var downloadFrameId; - do { - downloadFrameId = "downloadFrame" + parseInt(Math.random() * 10000); - } while (jQuery("#" + downloadFrameId).length > 0) - var that = this; - this.utility.showLoadIndicator("mapLoadIndicator", downloadFrameId); - jQuery("body").append(''); - jQuery("#" + downloadFrameId).bind("load", function(e){ - that.utility.hideLoadIndicator("mapLoadIndicator", downloadFrameId); - }); -};*/ - -org.OpenGeoPortal.UserInterface.prototype.doPrint = function(){ - window.print(); - //jQuery('head > link[href="css/print.css"]').remove(); -}; - -org.OpenGeoPortal.UserInterface.prototype.printImage = function(){ - //just not fast enough to be reliable - //jQuery('head').append(''); - //setTimeout("org.OpenGeoPortal.ui.doPrint()", 100); - window.print(); -}; - -org.OpenGeoPortal.UserInterface.prototype.saveImage = function(imageFormat, resolution){ - imageFormat = 'png'; - var format; - switch (imageFormat){ - case 'jpeg': - format = "image/jpeg"; - break; - case 'png': - format = "image/png"; - break; - case 'bmp': - format = "image/bmp"; - break; - default: throw new Error("This image format (" + imageFormat + ") is unavailable."); - } - - requestObj = {}; - requestObj.layers = []; - - for (var layer in this.mapObject.layers){ - var currentLayer = this.mapObject.layers[layer]; - if (currentLayer.CLASS_NAME != "OpenLayers.Layer.WMS"){ - continue; - } - if (currentLayer.visibility == false){ - continue; - } - - var sld = this.layerStateObject.getState(currentLayer.name, "sld"); - var opacity = this.layerStateObject.getState(currentLayer.name, "opacity"); - if (opacity == 0){ - continue; - } - //insert this opacity value into the sld to pass to the wms server - var layerObj = {}; - var storedName = this.layerStateObject.getState(currentLayer.name, "wmsName"); - if (storedName == ''){ - layerObj.name = currentLayer.params.LAYERS; - } else { - layerObj.name = storedName; - } - layerObj.opacity = opacity; - layerObj.zIndex = this.mapObject.getLayerIndex(currentLayer); - if ((typeof sld != 'undefined')&&(sld !== null)&&(sld != "")){ - var sldParams = [{wmsName: layerObj.name, layerStyle: sld}]; - layerObj.sld = escape(this.mapObject.createSLDFromParams(sldParams)); - } - layerObj.layerId = currentLayer.name; - requestObj.layers.push(layerObj); - } - - var bbox; - bbox = this.mapObject.getExtent().toBBOX(); - - requestObj.format = format; - requestObj.bbox = bbox; - requestObj.srs = 'EPSG:900913'; - requestObj.width = jQuery('#map').width(); - requestObj.height = jQuery('#map').height(); - //return a url from the servlet - var params = { - url: "getImage", - data: JSON.stringify(requestObj), - cache: false, - dataType: "json", - type: "POST", - context: this, - complete: function(){ - }, - success: function(data){ - //should parse errors - //will also have status info for requested layers in this returned object - /*var line = ""; - for (var failedToDownload in data.errors){ - line += ""; - //for (var infoElement in data.failed[failedToDownload]){ - line += ""; - line += ''; - line += ""; - line += ""; - //line += data.failed[failedToDownload]["institution"]; - line += ""; - line += ""; - //line += data.failed[failedToDownload]["title"]; - line += ""; - line += ""; - //line += data.failed[failedToDownload]["layerId"]; - line += ""; - line += ''; - //line += data.failed[failedToDownload]["message"]; - line += ""; - //} - line += ""; - } - if (line.length > 0){ - var message = ''; - message += line; - message += "
        "; - this.genericModalDialog(message, "DOWNLOAD ERRORS"); - }*/ - //check packageLink - if (typeof data.imageLink != 'undefined'){ - var downloadFrameId; - do { - downloadFrameId = "downloadFrame" + parseInt(Math.random() * 10000); - } while (jQuery("#" + downloadFrameId).length > 0) - var that = this; - this.utility.showLoadIndicator("mapLoadIndicator", downloadFrameId); - jQuery("body").append(''); - jQuery("#" + downloadFrameId).bind("load", function(e){ - that.utility.hideLoadIndicator("mapLoadIndicator", downloadFrameId); - }); - } - - - } - }; - - jQuery.ajax(params); - -}; -/*org.OpenGeoPortal.UserInterface.prototype.saveImage = function(){ - //check to see if layer is visible and in the extent - var imageFormat = 'png'; - var format; - switch (imageFormat){ - case 'jpeg': - format = "image/jpeg"; - break; - case 'png': - format = "image/png"; - break; - case 'bmp': - format = "image/bmp"; - break; - default: throw new Error("This image format (" + imageFormat + ") is unavailable."); - } - - //construct appropriate url - var numberOfLayers = 0; - //for (var layer in org.OpenGeoPortal.map.layers){ - for (var layer in this.mapObject.layers){ - //var currentLayer = org.OpenGeoPortal.map.layers[layer]; - var currentLayer = this.mapObject.layers[layer]; - if (currentLayer.CLASS_NAME != "OpenLayers.Layer.WMS"){ - continue; - } - if (currentLayer.visibility == false){ - continue; - } - //do a test to see if the layer's bbox is within the clip extent - - - var server = this.layerStateObject.getState(currentLayer.name, "location").wms[0]; - - var sld = this.layerStateObject.getState(currentLayer.name, "sld"); - - var opacity = this.layerStateObject.getState(currentLayer.name, "opacity"); - //insert this opacity value into the sld to pass to the wms server - var storedName = this.layerStateObject.getState(currentLayer.name, "wmsName"); - requestObj = {}; - if (storedName == ''){ - requestObj.name = currentLayer.params.LAYERS; - } else { - requestObj.name = storedName; - } - requestObj.opacity = opacity; - if ((typeof sld != 'undefined')&&(sld !== null)){ - if (typeof sld.symbolizer != 'undefined'){ - requestObj.sld = sld; - var sldParams = [{wmsName: requestObj.name, layerStyle: requestObj.sld}]; - //requestObj.sld = escape(org.OpenGeoPortal.map.createSLDFromParams(sldParams)); - requestObj.sld = escape(this.mapObject.createSLDFromParams(sldParams)); - } - } - //visibleLayers.push(layerObj); - numberOfLayers++; - - var bbox; - //bbox = org.OpenGeoPortal.map.getExtent().toBBOX(); - bbox = this.mapObject.getExtent().toBBOX(); - //for(var layer in visibleLayers){ - //this will only work for images from a single server...we need a server side script that will overlay layers in the correct order - //need width, height, bbox - //var allLayers = serverURL[server]; - //var requestedLayers = []; - - requestObj.type = 'image'; - requestObj.server = server; - requestObj.format = format; - requestObj.bbox = bbox; - requestObj.srs = 'EPSG:900913'; - requestObj.width = jQuery('#map').width(); - requestObj.height = jQuery('#map').height(); - - requestObj.layers = requestObj.name; - this.downloadFromMapServer(requestObj); - } - if (numberOfLayers == 0){ - throw new Error("There are no layers in the current extent."); - } -};*/ - -//based on Dave's code -org.OpenGeoPortal.UserInterface.prototype.getParamsFromUrl = function() { - var params = {}; - var layers = [], hash; - var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); - for(var i = 0; i < hashes.length; i++) { - hash = hashes[i].split('='); - if ((hash[0] == "layer%5B%5D")||(hash[0] == "layer[]")){ - layers.push(hash[1]); - } else { - params[hash[0]] = hash[1]; - } - } - if (layers.length > 0){ - params.layer = layers; - } - return params; -}; - -org.OpenGeoPortal.UserInterface.prototype.addSharedLayersToCart = function(){ - var params = this.getParamsFromUrl(); - - if (typeof params.layer == 'undefined'){ - return; - } - var solr = new org.OpenGeoPortal.Solr(); - var query = solr.getInfoFromLayerIdQuery(params.layer); - solr.sendToSolr(query, this.getLayerInfoJsonpSuccess, this.getLayerInfoJsonpError, this); - var sharedExtent = params.minX + ',' + params.minY + ',' + params.maxX + ',' + params.maxY; - this.mapObject.zoomToLayerExtent(sharedExtent); - jQuery("#tabs").tabs({selected: 2}); - this.initSortable(); -}; - -org.OpenGeoPortal.UserInterface.prototype.getLayerInfoJsonpSuccess = function(data, newContext){ - //wrong context? not sure - newCartData = newContext.cartTableObject.processData(data); - for(var i in newCartData){ - newContext.addLayerToCart(newCartData[i]); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.getLayerInfoJsonpError = function(){ - throw new Error("The attempt to retrieve layer information from layerIDs failed."); -}; -//solr query against layerIds -//process data functions, pass to this function -org.OpenGeoPortal.UserInterface.prototype.addLayerToCart = function(layerData){ - var savedTable = jQuery('#savedLayers').dataTable(); - var currentData = savedTable.fnGetData(); - layerData = [layerData]; - var newData = layerData.concat(currentData); - savedTable.fnClearTable(); - savedTable.fnAddData(newData); - this.updateSavedLayersNumber(); - //jQuery('#savedLayersNumber').text('(' + org.OpenGeoPortal.cartTableObject.numberOfResults() + ')'); - //console.log(layerData); - var headingsObj = this.cartTableObject.tableHeadingsObj; - var layerID = layerData[0][headingsObj.getColumnIndex('LayerId')]; - var dataType = layerData[0][headingsObj.getColumnIndex('DataType')]; - if (!this.layerStateObject.layerStateDefined(layerID)){ - this.layerStateObject.addNewLayer(layerID, {"dataType": dataType, "inCart": true}); - } else { - this.layerStateObject.setState(layerID, {"inCart": true}); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.shortenLink = function(longLink){ - /*POST https://www.googleapis.com/urlshortener/v1/url - Content-Type: application/json - {"longUrl": "http://www.google.com/"}*/ - var request = {"link": longLink}; - //this should be done server side to protect login and api key; plus google api doesn't support jsonp; - //var url = "https://www.googleapis.com/urlshortener/v1/url?key=" + apiKey; - var url = "shortenLink"; - var that = this; - var ajaxArgs = {url: url, - data: jQuery.param(request), - type: "GET", - dataType: "json", - success: function(data){ - var shortLink = data["shortLink"]; - jQuery("#shareText").attr("rows", that.calculateRows(shortLink)); - jQuery("#shareDialog").dialog('open'); - jQuery("#shareText").text(shortLink); - jQuery("#shareText").focus()} - }; - - jQuery.ajax(ajaxArgs); -}; - -org.OpenGeoPortal.UserInterface.prototype.calculateRows = function(theText){ - var numCharacters = theText.length; - var rows = 1; - if (numCharacters > 75){ - rows = Math.floor(numCharacters/40); - } - return rows; -}; - -org.OpenGeoPortal.UserInterface.prototype.shareLayers = function(){ - var layers = []; - var layerObj = this.getLayerList("shareLink"); - for (var layer in layerObj){ - layers.push(layer); - } - var dialogContent = ""; - if (layers.length == 0){ - dialogContent = 'No layers have been selected.'; - //this should probably call a dialog instance for error messages/notifications - } else { - var path = top.location.href.substring(0, top.location.href.lastIndexOf("/")); - var shareLink = path + "/openGeoPortalHome.jsp"; - var geodeticBbox = this.mapObject.getGeodeticExtent(); - var queryString = '?' + jQuery.param({ layer: layers, minX: geodeticBbox.left, minY: geodeticBbox.bottom, maxX: geodeticBbox.right, maxY: geodeticBbox.top }); - shareLink += queryString; - - dialogContent = ' \n'; - dialogContent += '

        Use this link to share this Cart

        '; - this.shortenLink(shareLink); - } - - this.createShareDialog(dialogContent); -}; - -org.OpenGeoPortal.UserInterface.prototype.createShareDialog = function(dialogContent){ - if (typeof jQuery('#shareDialog')[0] == 'undefined'){ - var shareDiv = '
        \n'; - shareDiv += dialogContent; - shareDiv += '
        \n'; - jQuery('body').append(shareDiv); - jQuery("#shareDialog").dialog({ - zIndex: 3000, - autoOpen: false, - width: 495, - height: 'auto', - title: 'SHARE CART', - resizable: false, - buttons: { - Close: function() { - jQuery(this).dialog('close'); - jQuery("#optionDetails").html(""); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection"); - } - }}); - } else { - //replace dialog text/controls & open the instance of 'dialog' that already exists - jQuery("#shareDialog").html(dialogContent); - } - jQuery('#shareText').focus(function(){ - // Select input field contents - this.select(); - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.shareServices = function(){ - var layerList = this.getLayerList("webService"); - var dialogContent = ""; - var queryString = []; - for (var layerId in layerList){ - //console.log(layerId); - //console.log(layerList[layerId]); - if (layerList[layerId]["access"].toLowerCase() == "public"){ - //console.log({LayerId: layerId}); - queryString.push(layerId); - } - } - if (queryString.length == 0){ - dialogContent = 'No layers have been selected.'; - } else { - //console.log(queryString); - //console.log(jQuery.param(queryString, true)); - var serviceTypes = [{"type": "WFS", "title": "Web Feature Service (WFS):", "caption": "Creates a vector web service. Only available for vector data."}, - {"type":"WMS", "title": "Web Mapping Service (WMS):", "caption": "Creates a raster web service for all your data. Vector data will be converted to raster format."}];//WCS later? - var path = top.location.href.substring(0, top.location.href.lastIndexOf("/")); - dialogContent += '

        Web Services are provided in two formats. Paste the selected link into your desktop mapping software.

        '; - dialogContent += '
        \n'; - for (var i in serviceTypes){ - dialogContent += '' + serviceTypes[i].title + '?'; - dialogContent += '
        ' + serviceTypes[i].caption + ''; - dialogContent += '
        '; - } - - dialogContent += '
        '; - - } - - - if (typeof jQuery('#shareDialog')[0] == 'undefined'){ - var shareDiv = '
        \n'; - shareDiv += '
        \n'; - jQuery('body').append(shareDiv); - jQuery("#shareServicesDialog").dialog({ - zIndex: 3000, - autoOpen: false, - height: 'auto', - title: 'WEB SERVICES', - width: 495, - buttons: { - Close: function() { - jQuery(this).dialog('close'); - jQuery("#optionDetails").html(""); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection"); - } - }}); - } - //replace dialog text/controls & open the instance of 'dialog' that already exists - jQuery("#shareServicesDialog").html(dialogContent); - var that = this; - jQuery(".shareServicesText").each(function(){ - jQuery(this).attr("rows", that.calculateRows(jQuery(this).text())); - }); - - jQuery("#shareServicesDialog").dialog('open'); - - jQuery('.shareServicesText').bind("focus", function(){ - // Select input field contents - this.select(); - }); - jQuery('.shareServicesText').first().focus(); - -}; - - - -org.OpenGeoPortal.UserInterface.prototype.loginDialog = function(loginObj){ - var dialogContent = ""; - if (loginObj == null){ - dialogContent = this.getLoginForm(); - } else if (typeof loginObj.message == "undefined"){ - dialogContent = this.getLoginForm(); - } else { - dialogContent = this.getLoginForm(loginObj.message); - } - - var that = this; - if (typeof jQuery('#loginDialog')[0] == 'undefined'){ - var shareDiv = '
        \n'; - shareDiv += dialogContent; - shareDiv += '
        \n'; - jQuery('body').append(shareDiv); - jQuery("#loginDialog").dialog({ - zIndex: 3000, - autoOpen: false, - width: 'auto', - title: 'LOGIN', - context: that, - resizable: false, - buttons: { - Login: function() { - that.processLogin(); - }, - Cancel: function() { - jQuery(this).dialog('close'); - jQuery(document).trigger("loginCancel"); - } - }}); - } else { - //replace dialog text/controls & open the instance of 'dialog' that already exists - jQuery("#loginDialog").html(dialogContent); - } - jQuery("#loginDialog").dialog('open'); - jQuery("#loginDialog").unbind("keypress"); - jQuery('#loginDialog').bind("keypress", function(event){ - if (event.keyCode == '13') { - that.processLogin(); - } - }); - -}; - -org.OpenGeoPortal.UserInterface.prototype.userNameLabel = org.OpenGeoPortal.InstitutionInfo.getHomeInstitution() + " Username:"; -org.OpenGeoPortal.UserInterface.prototype.passwordLabel = org.OpenGeoPortal.InstitutionInfo.getHomeInstitution() + " Password:"; - -// userId is null if no user is logged in -// when non-null, it is the id of the logged in user -org.OpenGeoPortal.UserInterface.prototype.userId = null; - -// return the login form to be presented to the user -org.OpenGeoPortal.UserInterface.prototype.getLoginForm = function(message) -{ - var dialogContent = '
        ' + - '' + - '' + - '' + - '' + - '
        ' + this.userNameLabel + '
        ' + this.passwordLabel + '
        '; - if (message != null) - { - dialogContent = dialogContent + '
        ' + message + ""; - } - return dialogContent; -}; - - -// retrieve user entered values, generate https request and set login flag -// some special processing is included for running on localhost -org.OpenGeoPortal.UserInterface.prototype.processLogin = function() -{ - jQuery("#loginDialog").dialog('close'); - var authenticatePage = "authenticate" + org.OpenGeoPortal.InstitutionInfo.getHomeInstitution() + ".jsp"; - - var hostname = window.location.hostname; - var currentPathname = window.location.pathname; - var pathParts = currentPathname.split("/"); - var extraPath = ""; - if (pathParts.length > 2) - { - // a hack to handle localhost where there is another element in the pathname - extraPath = pathParts[1] + "/"; - } - var port = window.location.port; - if ((port == "") || (port == null)) - port = "443"; - port = ":" + port; - var protocol = "https"; - if (hostname == "localhost") - protocol = "http"; - var that = this; - var url = protocol + "://" + hostname + port + "/" + extraPath + authenticatePage; - var username = jQuery("#loginFormUsername").val(); - var password = jQuery("#loginFormPassword").val(); - var ajaxArgs = {url: url, type: "POST", - context: that, - data: {"username": username, "password": password}, - dataType: "jsonp", - success: that.loginResponse, - error: that.loginResponseError}; - jQuery.ajax(ajaxArgs); - -}; - - -org.OpenGeoPortal.UserInterface.prototype.logoutResponse = function(data, textStatus, jqXHR) { - var that = this; - jQuery("#headerLogin").text("Login").unbind("click"); - jQuery("#headerLogin").click(function(event){that.promptLogin(event);}); - - this.userId = null; - this.changeControlsToLoginButtons("Tufts"); - // - //will also need to turn on login labels for layers in search results and cart, remove - //restricted layers from preview? - //should we logout on page load to prevent weird states? or just check the state at page load? -}; - -org.OpenGeoPortal.UserInterface.prototype.promptLogin = function(event){ - //console.log("promptLogin"); - this.loginDialog(); -}; - -// callback handler invoked with response to authenticate server call -// sets the userId variable to hold the id of the logged in user -org.OpenGeoPortal.UserInterface.prototype.loginResponse = function(data, textStatus, jqXHR) -{ - var loggedIn = data.authenticated; - var username = data.username; - var that = this; - if (loggedIn) - { - if (typeof _gaq != "undefined") - _gaq.push(["_trackEvent", "login", "success"]); - this.userId = username || loggedIn; - jQuery(document).trigger("loginSucceeded"); - this.applyLoginActions(); - - //change the javascript function called, as well? - that.filterResults(); - //remember what button the user clicked to login...if in preview column, preview, etc. - } - else - { - if (typeof _gaq != "undefined") - _gaq.push(["_trackEvent", "login", "failed"]); - that.userId = null; - that.loginDialog({"message": "login failed"}); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.changeLoginButtonsToControls = function(){ - //change login button to checkbox for institution logged in - var that = this; - jQuery(".colPreview img").each(function(){ - if (jQuery(this).attr("src") == "resources/media/view_login.png"){ - var node = jQuery(this).closest("tr"); - var tableObject = node.closest("table"); - var tableName = tableObject.attr("id"); - tableObject = tableObject.dataTable(); - var pos = tableObject.fnGetPosition(node[0]); - var row = tableObject.fnGetData(pos); - var rowObj = {}; - rowObj.aData = row; - if (tableName == "searchResults"){ - jQuery(this).parent().html(that.resultsTableObject.getActivePreviewControl(rowObj)); - } else if (tableName == "savedLayers"){ - jQuery(this).parent().html(that.cartTableObject.getActivePreviewControl(rowObj)); - } - } - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.changeControlsToLoginButtons = function(logoutInstitution){ - //change checkbox to login button for institution logged out - var that = this; - jQuery(".colPreview input").each(function(){ - var node = jQuery(this).closest("tr"); - var tableObject = node.closest("table"); - var tableName = tableObject.attr("id"); - tableObject = tableObject.dataTable(); - var pos = tableObject.fnGetPosition(node[0]); - var row = tableObject.fnGetData(pos); - var rowObj = {}; - rowObj.aData = row; - if (tableName == "searchResults"){ - jQuery(this).parent().html(that.resultsTableObject.getPreviewControl(rowObj)); - } else if (tableName == "savedLayers"){ - jQuery(this).parent().html(that.cartTableObject.getPreviewControl(rowObj)); - } - - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.applyLoginActions = function(){ - // how do we update the UI so the user know login succeeded? - this.changeLoginButtonsToControls(); - //change the login button in top right to logout - var that = this; - //console.log(this); - jQuery("#headerLogin").text("Logout"); - jQuery("#headerLogin").unbind("click"); - jQuery("#headerLogin").click(function(event){event.preventDefault(); - //for logout capability - var ajaxArgs = {url: "logout.jsp", - context: that, - dataType: "json", - success: that.logoutResponse - }; - jQuery.ajax(ajaxArgs); - }); -}; - -// callback handler invoked when if an error occurs during ajax call to authenticate a user -org.OpenGeoPortal.UserInterface.prototype.loginResponseError = function(jqXHR, textStatus, errorThrown) -{ - alert("an error occured during log in: " + textStatus); - this.userId = null; -}; - - -//toggle the attribute info button & functionality -org.OpenGeoPortal.UserInterface.prototype.toggleFeatureInfo = function(thisObj, layerID, displayName){ - var layerStateObject = this.layerStateObject; - if (!layerStateObject.getState(layerID, "getFeature")){ - //update layer state - layerStateObject.setState(layerID, {"getFeature": true}); - layerStateObject.getFeatureTitle = displayName; - } else { - //update layer state, turn off get feature - layerStateObject.setState(layerID, {"getFeature": false}); - } - -}; - -//get the color from the layer state object to use for the shown swatch -org.OpenGeoPortal.UserInterface.prototype.setPaletteColor = function(layerID){ - var paletteColor = this.layerStateObject.getState(layerID, "color"); - var escapedLayerID = this.utility.idEscape(layerID); - jQuery(".colorPalette").each(function(){ - //console.log(["iterate", paletteColor]); - if (jQuery(this).is('[id$=' + escapedLayerID + ']')){ - //console.log("match"); - jQuery(this).css("background-color", paletteColor); - } - }); -}; - -//create the color picker dialog box -org.OpenGeoPortal.UserInterface.prototype.colorDialog = function(layerID, dataType){ - //create a hidden div w/ the dialog info - //create a new dialog instance, or just open the dialog if it already exists - //if it already exists, function should reset color picker to match layer - //button to apply color, button to cancel - //apply color changes state object for the layer - //call map function to apply style from the state object - var allColors = {}; - allColors.grey = ["#828282", "#9c9c9c", "#b2b2b2", "#cccccc", "#e1e1e1", "#ffffff"]; - allColors.red = ["#730000", "#a80000", "#e80000", "#ff0000", "#ff7f7f", "#ffbebe"]; - allColors.darkOrange = ["#732600", "#a83800", "#e64c00", "#ff5500", "#ffa77f", "#ffebbe"]; - allColors.orange = ["#734c00", "#a87000", "#e69800", "#ffaa00", "#ffd37f", "#ffebaf"]; - allColors.yellow = ["#737300", "#a8a800", "#e6e600", "#ffff00", "#ffff73", "#ffffbe"]; - allColors.grassGreen = ["#426e00", "#6da800", "#98e600", "#aaff00", "#d1ff73", "#e9ffbe"]; - allColors.green = ["#267300", "#38a800", "#4ce600", "#55ff00", "#a3ff73", "#d3ffbe"]; - allColors.cyan = ["#00734c", "#00a884", "#00e6a9", "#00ffc5", "#73ffdf", "#beffe8"]; - allColors.blue = ["#004c73", "#0084a8", "#00a9e6", "#00c5ff", "#73dfff", "#bee8ff"]; - allColors.indigo = ["#002673", "#0049a9", "#005ce6", "#0070ff", "#73b2ff", "#bed2ff"]; - allColors.violet = ["#4c0073", "#8400a8", "#a900e6", "#c500ff", "#df73ff", "#e8beff"]; - allColors.pink = ["#780f52", "#a80084", "#e00fa7", "#ff00c5", "#ff73df", "#ffbee8"]; - var currentColorSelection = this.layerStateObject.getState(layerID, "color"); - if (typeof jQuery('#colorDialog')[0] == 'undefined'){ - var dialogDiv = '
        \n'; - dialogDiv += '
        \n'; - jQuery('body').append(dialogDiv); - } - - var colorDiv = ''; - for (var row in allColors){ - colorDiv += ''; - for (var cell in allColors[row]){ - colorDiv += ''; - } - colorDiv += ''; - } - colorDiv += '
        '; - var currentColorValue = allColors[row][cell]; - var selectionClass; - if (currentColorValue == currentColorSelection){ - selectionClass = " colorCellSelected"; - } else { - selectionClass = ""; - } - colorDiv += '
        '; - colorDiv += '
        '; - jQuery('#colorDialog').html(colorDiv); - jQuery("#colorDialog").dialog({ - zIndex: 2999, - autoOpen: false, - width: 'auto', - height: 'auto', - title: '', - resizable: false - }); - jQuery("#colorDialog").dialog('open'); -}; - -org.OpenGeoPortal.UserInterface.prototype.selectColorCell = function(thisObj, layerID, dataType){ - jQuery('.colorCell').removeClass('colorCellSelected'); - jQuery(thisObj).addClass('colorCellSelected'); - //for IE - var selectedColor = jQuery('div.colorCellSelected').css("background-color"); - if (selectedColor.indexOf("rgb") > -1){ - selectedColor = this.utility.rgb2hex(selectedColor); - } - this.layerStateObject.setState(layerID, {color: selectedColor}); - this.setPaletteColor(layerID); - //org.OpenGeoPortal.map.changeStyle(layerID, dataType); - this.mapObject.changeStyle(layerID, dataType); -}; - -//toggle whether the applied style has an outline -org.OpenGeoPortal.UserInterface.prototype.toggleOutline = function(thisObj, layerID, dataType){ - //sets state object to match checkbox value, calls map function to apply the style to the layer - var layerStateObject = this.layerStateObject; - if (jQuery(thisObj).is(':checked') == true){ - layerStateObject.setState(layerID, {"graphicWidth": 1}); - } else { - layerStateObject.setState(layerID, {"graphicWidth": 0}); - } - //org.OpenGeoPortal.map.changeStyle(layerID, dataType); - this.mapObject.changeStyle(layerID, dataType); -}; - -org.OpenGeoPortal.UserInterface.prototype.mouseCursor = function(){ - var that = this; - var layerStateObject = this.layerStateObject; - jQuery('.olMap').css('cursor', "-moz-grab"); - jQuery('div.olControlZoomBoxItemInactive').bind('click', function(){ - jQuery('.olMap').css('cursor', "-moz-zoom-in"); - var mapLayers = that.mapObject.layers; - for (var i in mapLayers){ - var currentLayer = mapLayers[i]; - if (layerStateObject.layerStateDefined(currentLayer.name)){ - if (layerStateObject.getState(currentLayer.name, "getFeature")){ - that.mapObject.events.unregister("click", currentLayer, that.mapObject.wmsGetFeature); - } - } else { - continue; - } - } - layerStateObject.resetState('getFeature'); - jQuery('.attributeInfoControl').attr('src', 'resources/media/preview.gif'); - }); - jQuery('.olControlNavigationItemActive').bind('click', function(){ - jQuery('.olMap').css('cursor', "-moz-grab"); - //var mapLayers = org.OpenGeoPortal.map.layers; - var mapLayers = that.mapObject.layers; - for (var i in mapLayers){ - var currentLayer = mapLayers[i]; - if (layerStateObject.layerStateDefined(currentLayer.name)){ - if (layerStateObject.getState(currentLayer.name, "getFeature")){ - that.mapObject.events.unregister("click", currentLayer, that.mapObject.wmsGetFeature); - } - } else { - continue; - } - } - layerStateObject.resetState('getFeature'); - jQuery('.attributeInfoControl').attr('src', 'resources/media/preview.gif'); - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.resizePanels = function(){ - var that = this; - jQuery("#map").resizable({handles: 'w', ghost: true, - minWidth: jQuery(".olControlPanel").width() + jQuery("#geosearchDiv").width() + jQuery("#mapLoadIndicator").width(), - maxWidth: jQuery("#container").width() - jQuery("#basicSearchBox").width(), - stop: function(event, ui) { - //var widthDelta = ui.size.width - ui.originalSize.width; - var newWidth = jQuery("#container").width() - jQuery("#map").width(); - jQuery("#map").css("left", 0); - jQuery("#left_col").width(newWidth - 1); - that.setSearchPanelWidth(jQuery("#left_col").width()); - - that.utility.whichTab().tableObject().getTableObj().fnDraw(); - that.mapObject.updateSize(); - } - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.cartOptionText = function(){ - var noSelectionHtml = ""; - var mapItHtml = "Open highlighted layers in GeoCommons to create maps"; - var shareHtml = "Create a link to share this Cart"; - var webServiceHtml = "Stream highlighted layers into an application"; - var downloadHtml = "Download highlighted layers to your computer"; - var that = this; - jQuery("#mapItButton").hover(function(){jQuery("#optionDetails").html(mapItHtml);that.getLayerList("mapIt");}, - function(){jQuery("#optionDetails").html(noSelectionHtml); jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}); - jQuery("#mapItButton").click(function(){jQuery('#mapitNotice').dialog("open");}); - jQuery("#shareButton").hover(function(){jQuery("#optionDetails").html(shareHtml);that.getLayerList("shareLink");}, - function(){if ((jQuery("#shareDialog").length == 0)||(!jQuery("#shareDialog").dialog("isOpen"))){jQuery("#optionDetails").html(noSelectionHtml); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}}); - jQuery("#shareButton").click(function(){that.shareLayers();}); - jQuery("#webServiceButton").hover(function(){jQuery("#optionDetails").html(webServiceHtml);that.getLayerList("webService");}, - function(){if ((jQuery("#shareServicesDialog").length == 0)||(!jQuery("#shareServicesDialog").dialog("isOpen"))){jQuery("#optionDetails").html(noSelectionHtml); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}}); - jQuery("#webServiceButton").click(function(){that.shareServices();}); - jQuery("#downloadButton").hover(function(){jQuery("#optionDetails").html(downloadHtml);that.getLayerList("download");}, - function(){if ((jQuery("#downloadDialog").length == 0)||(!jQuery("#downloadDialog").dialog("isOpen"))){jQuery("#optionDetails").html(noSelectionHtml); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}}); - jQuery("#downloadButton").click(function(){that.downloadDialog();}); - jQuery("#removeFromCartButton").hover(function(){that.getLayerList("removeFromCart");}, - function(){jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}); - jQuery("#removeFromCartButton").click(function(){that.cartTableObject.removeRows();}); -}; - -org.OpenGeoPortal.UserInterface.prototype.anchorsToNiceScroll = function(affectedDiv, offsetHash){ - jQuery("#" + affectedDiv + " a.niceScroll").click(function(event){ - event.preventDefault(); - //parse the hrefs for the anchors in this DOM element into toID - var toID = jQuery(this).attr("href"); - jQuery("#" + affectedDiv).scrollTo(jQuery(toID), {offset: offsetHash }); - }); -}; - - diff --git a/geoportal_1/src/main/webapp/resources/javascript/old/utility.js b/geoportal_1/src/main/webapp/resources/javascript/old/utility.js deleted file mode 100644 index 38a176d..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/old/utility.js +++ /dev/null @@ -1,183 +0,0 @@ -/* This javascript module includes utility functions for OpenGeoPortal plus - * extra functions with no current home. org.OpenGeoPortal.Utility is a - * namespace rather than an object. The XML functions might go away when we - * upgrade to a newer version of jQuery, as it contains functions to parse XML. - * - * author: Chris Barnett - * - */ - -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -if (typeof org.OpenGeoPortal.Utility == 'undefined'){ - org.OpenGeoPortal.Utility = {}; -} else if (typeof org.OpenGeoPortal.Utility != "object"){ - throw new Error("org.OpenGeoPortal.Utility already exists and is not an object"); -} - -org.OpenGeoPortal.Utility.whichTab = function(){ - var tabInfo = {}; - var tabIndex; - if (arguments.length > 0){ - tabIndex = arguments[0]; - } else { - tabIndex = jQuery("#tabs").tabs( "option", "selected" ); - } - tabInfo.index = tabIndex; - switch (tabIndex){ - case 0: - tabInfo.name = 'welcome'; - tabInfo.tableObject = false; - tabInfo.tableDiv = false; - tabInfo.tableName = false; - break; - case 1: - tabInfo.name = 'search'; - tabInfo.tableObject = function(){return org.OpenGeoPortal.resultsTableObj;}; - tabInfo.tableDiv = 'resultsTable'; - tabInfo.tableName = 'searchResults'; - break; - case 2: - tabInfo.name = 'saved'; - tabInfo.tableObject = function(){return org.OpenGeoPortal.cartTableObj;}; - tabInfo.tableDiv = 'savedLayersTable'; - tabInfo.tableName = 'savedLayers'; - break; - default: - //throw new Error('No tab is selected.'); - } - return tabInfo; -}; - - -org.OpenGeoPortal.Utility.whichSearch = function(){ - var activeSearchDiv = null; - jQuery(".searchBox > div").each(function(){ - if (jQuery(this).css("display") == 'block'){ - activeSearchDiv = jQuery(this).attr("id"); - } - }); - var searchInfo = {}; - //searchInfo.script = 'solrSearchHandler.jsp'; - switch (activeSearchDiv){ - case "basicSearchBox": - searchInfo.type = 'basicSearch'; - break; - case "advancedSearchBox": - searchInfo.type = 'advancedSearch'; - break; - default: - //throw new Error('No tab is selected.'); - } - return searchInfo; -}; - -org.OpenGeoPortal.Utility.rgb2hex = function(rgb) { - rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); - function hex(x) { - return ("0" + parseInt(x).toString(16)).slice(-2); - } - return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); -}; - -org.OpenGeoPortal.Utility.hexFromRGB = function(r, g, b) { - var hex = [ - r.toString(16), - g.toString(16), - b.toString(16) - ]; - jQuery.each(hex, function (nr, val) { - if (val.length == 1) { - hex[nr] = '0' + val; - } - }); - return hex.join('').toUpperCase(); -}; - -org.OpenGeoPortal.Utility.idEscape = function (domElementID) { - return domElementID.replace(/(:|\.)/g,'\\$1'); -}; - -org.OpenGeoPortal.Utility.getMetadata = function (layerId){ - var params = { - url: "getMetadata.jsp?layer=" + layerId, - dataType: 'xml', - success: function(data){ - console.log(data); - } - }; - jQuery.ajax(params); -}; - -org.OpenGeoPortal.Utility.loadIndicatorStatus = {"intervalId": "", "currentRequests": 0}; - -org.OpenGeoPortal.Utility.showLoadIndicator = function(div){ - var that = this; - var indicatorFunction = function(){ - try{ - indicator.css("background-position", - function(a,b){ - var y = parseInt(b.substr(b.indexOf(" "))); - y -= 25; - var value = "0 " + y + "px"; - return value;}); - } catch (e){} - }; - var indicator = jQuery('#' + div); - //var j = 1; - //no current ajax requests, so we can start a new indicator - if (that.loadIndicatorStatus["currentRequests"] == 0){ - indicator.css("background-image", "url('resources/media/progress.png')"); - indicator.fadeIn(); - - that.loadIndicatorStatus["intervalId"] = setInterval(indicatorFunction, 84); - that.loadIndicatorStatus["currentRequests"] = 1; - } else { - //we don't need to setInterval or change intervalId; we do need to push a value into currentRequests - /*var requests = that.loadIndicatorStatus["currentRequests"]; - for (var i in requests){ - if (requests[i] > j){ - j = requests[i]; - } - } - j++;*/ - //pass in a value that is 1 larger than the largest value in the array to keep uniqueness - that.loadIndicatorStatus["currentRequests"] += 1; - } - //return j; - //console.log(that.loadIndicatorStatus["currentRequests"]); - }; - -org.OpenGeoPortal.Utility.hideLoadIndicator = function(div){ - var that = this; - var indicator = jQuery('#' + div); - - //remove the passed ajaxRequestId from the currentRequests array. if the array is now empty, then proceed - - /*var requests = that.loadIndicatorStatus["currentRequests"]; - for (var i in requests){ - if (requests[i] == requestId){ - that.loadIndicatorStatus["currentRequests"].splice(i, 1); - break; - } - }*/ - that.loadIndicatorStatus["currentRequests"] -= 1; - if (that.loadIndicatorStatus["currentRequests"] == 0){ - indicator.fadeOut(); - clearInterval(that.loadIndicatorStatus["intervalId"]); - that.loadIndicatorStatus["intervalId"] = ""; - } - -}; - diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/.gitignore b/geoportal_1/src/main/webapp/resources/javascript/openlayers/.gitignore new file mode 100644 index 0000000..8455665 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/.gitignore @@ -0,0 +1 @@ +/OpenLayers-2.12 diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/google.tidy.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/google.tidy.css index 4ba0cd8..7389726 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/google.tidy.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/google.tidy.css @@ -1 +1,19 @@ -.olLayerGoogleCopyright{right:3px;bottom:2px;left:auto;}.olLayerGoogleV3.olLayerGoogleCopyright{bottom:0;right:0!important;}.olLayerGooglePoweredBy{left:2px;bottom:2px;}.olLayerGoogleV3.olLayerGooglePoweredBy{bottom:0!important;} \ No newline at end of file +.olLayerGoogleCopyright { + right: 3px; + bottom: 2px; + left: auto; +} + +.olLayerGoogleV3.olLayerGoogleCopyright { + bottom: 0; + right: 0 !important; +} + +.olLayerGooglePoweredBy { + left: 2px; + bottom: 2px; +} + +.olLayerGoogleV3.olLayerGooglePoweredBy { + bottom: 0 !important; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/google_old.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/google_old.css index 3ee757c..98e2c4e 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/google_old.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/google_old.css @@ -1,17 +1,19 @@ .olLayerGoogleCopyright { - right: 3px; - bottom: 2px; - left: auto; + right: 3px; + bottom: 2px; + left: auto; } + .olLayerGoogleV3.olLayerGoogleCopyright { - bottom: 0px; - right: 0px !important; + bottom: 0px; + right: 0px !important; } + .olLayerGooglePoweredBy { - left: 2px; - bottom: 2px; -} -.olLayerGoogleV3.olLayerGooglePoweredBy { - bottom: 0px !important; + left: 2px; + bottom: 2px; } +.olLayerGoogleV3.olLayerGooglePoweredBy { + bottom: 0px !important; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/ie6-style.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/ie6-style.css index a0fd7c6..e40b56e 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/ie6-style.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/ie6-style.css @@ -1,10 +1,11 @@ .olControlZoomPanel div { - background-image: url(img/zoom-panel-NOALPHA.png); + background-image: url(img/zoom-panel-NOALPHA.png); } + .olControlPanPanel div { - background-image: url(img/pan-panel-NOALPHA.png); -} -.olControlEditingToolbar { - width: 200px; + background-image: url(img/pan-panel-NOALPHA.png); } +.olControlEditingToolbar { + width: 200px; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/ie6-style.tidy.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/ie6-style.tidy.css index 7a23bbc..e40b56e 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/ie6-style.tidy.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/ie6-style.tidy.css @@ -1 +1,11 @@ -.olControlZoomPanel div{background-image:url(img/zoom-panel-NOALPHA.png);}.olControlPanPanel div{background-image:url(img/pan-panel-NOALPHA.png);}.olControlEditingToolbar{width:200px;} \ No newline at end of file +.olControlZoomPanel div { + background-image: url(img/zoom-panel-NOALPHA.png); +} + +.olControlPanPanel div { + background-image: url(img/pan-panel-NOALPHA.png); +} + +.olControlEditingToolbar { + width: 200px; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.css index fa79d29..d585cd7 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.css @@ -1,380 +1,405 @@ div.olMap { - z-index: 0; - padding: 0px!important; - margin: 0px!important; - cursor: default; + z-index: 0; + padding: 0px !important; + margin: 0px !important; + cursor: default; } div.olMapViewport { - text-align: left; + text-align: left; } div.olLayerDiv { - -moz-user-select: none; + -moz-user-select: none; } -.olLayerGoogleCopyright { - left: 2px; - bottom: 2px; -} -.olLayerGooglePoweredBy { - left: 2px; - bottom: 15px; -} + + .olControlAttribution { - font-size: smaller; - right: 3px; - bottom: 4.5em; - position: absolute; - display: block; + font-size: smaller; + right: 3px; + bottom: 4.5em; + position: absolute; + display: block; } + .olControlScale { - right: 3px; - bottom: 3em; - display: block; - position: absolute; - font-size: smaller; + right: 3px; + bottom: 3em; + display: block; + position: absolute; + font-size: smaller; } + .olControlScaleLine { - display: block; - position: absolute; - left: 10px; - bottom: 15px; - font-size: xx-small; + display: block; + position: absolute; + left: 10px; + bottom: 15px; + font-size: xx-small; } + .olControlScaleLineBottom { - border: solid 2px black; - border-bottom: none; - margin-top:-2px; - text-align: center; + border: solid 2px black; + border-bottom: none; + margin-top: -2px; + text-align: center; } + .olControlScaleLineTop { - border: solid 2px black; - border-top: none; - text-align: center; + border: solid 2px black; + border-top: none; + text-align: center; } .olControlPermalink { - right: 3px; - bottom: 1.5em; - display: block; - position: absolute; - font-size: smaller; -} + right: 3px; + bottom: 1.5em; + display: block; + position: absolute; + font-size: smaller; +} div.olControlMousePosition { - bottom: 0em; - right: 3px; - display: block; - position: absolute; - font-family: Arial; - font-size: smaller; + bottom: 0em; + right: 3px; + display: block; + position: absolute; + font-family: Arial; + font-size: smaller; } .olControlOverviewMapContainer { - position: absolute; - bottom: 0px; - right: 0px; + position: absolute; + bottom: 0px; + right: 0px; } .olControlOverviewMapElement { - padding: 10px 18px 10px 10px; - background-color: #00008B; - -moz-border-radius: 1em 0 0 0; + padding: 10px 18px 10px 10px; + background-color: #00008B; + -moz-border-radius: 1em 0 0 0; } .olControlOverviewMapMinimizeButton { - right: 0px; - bottom: 80px; -} + right: 0px; + bottom: 80px; +} .olControlOverviewMapMaximizeButton { - right: 0px; - bottom: 80px; + right: 0px; + bottom: 80px; } .olControlOverviewMapExtentRectangle { - overflow: hidden; - background-image: url("/media/blank.gif"); - cursor: move; - border: 2px dotted red; + overflow: hidden; + background-image: url("/media/blank.gif"); + cursor: move; + border: 2px dotted red; } + .olControlOverviewMapRectReplacement { - overflow: hidden; - cursor: move; - background-image: url("/media/overview_replacement.gif"); - background-repeat: no-repeat; - background-position: center; + overflow: hidden; + cursor: move; + background-image: url("/media/overview_replacement.gif"); + background-repeat: no-repeat; + background-position: center; } .olLayerGeoRSSDescription { - float:left; - width:100%; - overflow:auto; - font-size:1.0em; + float: left; + width: 100%; + overflow: auto; + font-size: 1.0em; } + .olLayerGeoRSSClose { - float:right; - color:gray; - font-size:1.2em; - margin-right:6px; - font-family:sans-serif; + float: right; + color: gray; + font-size: 1.2em; + margin-right: 6px; + font-family: sans-serif; } + .olLayerGeoRSSTitle { - float:left;font-size:1.2em; + float: left; + font-size: 1.2em; } .olPopupContent { - padding:5px; - overflow: auto; -} -.olControlNavToolbar { - width:0px; - height:0px; -} -.olControlNavToolbar div { - display:block; - width: 28px; - height: 28px; - top: 300px; - left: 6px; - position: relative; -} - -.olControlNavigationHistory { + padding: 5px; + overflow: auto; +} + +.olControlNavToolbar { + width: 0px; + height: 0px; +} + +.olControlNavToolbar div { + display: block; + width: 28px; + height: 28px; + top: 300px; + left: 6px; + position: relative; +} + +/*.olControlNavigationHistory { background-repeat: no-repeat; width: 24px; height: 24px; +}*/ +.olControlNavToolbar .olControlNavigationItemActive { + background-repeat: no-repeat; } -.olControlNavToolbar .olControlNavigationItemActive { - background-repeat: no-repeat; -} -.olControlNavToolbar .olControlNavigationItemInactive { - background-repeat: no-repeat; +.olControlNavToolbar .olControlNavigationItemInactive { + background-repeat: no-repeat; } -.olControlNavToolbar .olControlZoomBoxItemActive { - background-color: orange; - background-repeat: no-repeat; + +.olControlNavToolbar .olControlZoomBoxItemActive { + background-color: orange; + background-repeat: no-repeat; } -.olControlNavToolbar .olControlZoomBoxItemInactive { - background-repeat: no-repeat; + +.olControlNavToolbar .olControlZoomBoxItemInactive { + background-repeat: no-repeat; } -.olControlEditingToolbar { - float:right; - right: 0px; - height: 30px; - width: 200px; + +.olControlEditingToolbar { + float: right; + right: 0px; + height: 30px; + width: 200px; } -.olControlEditingToolbar div { - background-image: url("/media/editing_tool_bar.png"); - background-repeat: no-repeat; - float:right; - width: 24px; - height: 24px; - margin: 5px; + +.olControlEditingToolbar div { + background-image: url("/media/editing_tool_bar.png"); + background-repeat: no-repeat; + float: right; + width: 24px; + height: 24px; + margin: 5px; } -.olControlEditingToolbar .olControlNavigationItemActive { - background-position: -103px -23px; + +.olControlEditingToolbar .olControlNavigationItemActive { + background-position: -103px -23px; } -.olControlEditingToolbar .olControlNavigationItemInactive { - background-position: -103px -0px; + +.olControlEditingToolbar .olControlNavigationItemInactive { + background-position: -103px -0px; } -.olControlEditingToolbar .olControlDrawFeaturePointItemActive { - background-position: -77px -23px; + +.olControlEditingToolbar .olControlDrawFeaturePointItemActive { + background-position: -77px -23px; } -.olControlEditingToolbar .olControlDrawFeaturePointItemInactive { - background-position: -77px -0px; + +.olControlEditingToolbar .olControlDrawFeaturePointItemInactive { + background-position: -77px -0px; } -.olControlEditingToolbar .olControlDrawFeaturePathItemInactive { - background-position: -51px 0px; + +.olControlEditingToolbar .olControlDrawFeaturePathItemInactive { + background-position: -51px 0px; } -.olControlEditingToolbar .olControlDrawFeaturePathItemActive { - background-position: -51px -23px; + +.olControlEditingToolbar .olControlDrawFeaturePathItemActive { + background-position: -51px -23px; } -.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive { - background-position: -26px 0px; + +.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive { + background-position: -26px 0px; } -.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive { - background-position: -26px -23px ; + +.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive { + background-position: -26px -23px; } -div.olControlSaveFeaturesItemActive { - background-image: url(/media/save_features_on.png); - background-repeat: no-repeat; - background-position: 0px 1px; + +div.olControlSaveFeaturesItemActive { + background-image: url(/media/save_features_on.png); + background-repeat: no-repeat; + background-position: 0px 1px; } -div.olControlSaveFeaturesItemInactive { - background-image: url(/media/save_features_off.png); - background-repeat: no-repeat; - background-position: 0px 1px; + +div.olControlSaveFeaturesItemInactive { + background-image: url(/media/save_features_off.png); + background-repeat: no-repeat; + background-position: 0px 1px; } .olHandlerBoxZoomBox { - border: 2px solid red; - position: absolute; - background-color: white; - opacity: 0.50; - font-size: 1px; - filter: alpha(opacity=50); + border: 2px solid red; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity = 50); } + .olHandlerBoxSelectFeature { - border: 2px solid blue; - position: absolute; - background-color: white; - opacity: 0.50; - font-size: 1px; - filter: alpha(opacity=50); -} + border: 2px solid blue; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity = 50); +} .olControlPanPanel { - top: 10px; - left: 5px; -} + top: 10px; + left: 5px; +} .olControlPanPanel div { - background-image: url(/media/pan-panel.png); - height: 18px; - width: 18px; - cursor: pointer; - position: absolute; + background-image: url(/media/pan-panel.png); + height: 18px; + width: 18px; + cursor: pointer; + position: absolute; } .olControlPanPanel .olControlPanNorthItemInactive { - top: 0px; - left: 9px; - background-position: 0px 0px; + top: 0px; + left: 9px; + background-position: 0px 0px; } + .olControlPanPanel .olControlPanSouthItemInactive { - top: 36px; - left: 9px; - background-position: 18px 0px; + top: 36px; + left: 9px; + background-position: 18px 0px; } + .olControlPanPanel .olControlPanWestItemInactive { - position: absolute; - top: 18px; - left: 0px; - background-position: 0px 18px; + position: absolute; + top: 18px; + left: 0px; + background-position: 0px 18px; } + .olControlPanPanel .olControlPanEastItemInactive { - top: 18px; - left: 18px; - background-position: 18px 18px; + top: 18px; + left: 18px; + background-position: 18px 18px; } .olControlZoomPanel { - top: 71px; - left: 14px; -} + top: 71px; + left: 14px; +} .olControlZoomPanel div { - background-image: url(/media/zoom-panel.png); - position: absolute; - height: 18px; - width: 18px; - cursor: pointer; + background-image: url(/media/zoom-panel.png); + position: absolute; + height: 18px; + width: 18px; + cursor: pointer; } .olControlZoomPanel .olControlZoomInItemInactive { - top: 0px; - left: 0px; - background-position: 0px 0px; + top: 0px; + left: 0px; + background-position: 0px 0px; } .olControlZoomPanel .olControlZoomToMaxExtentItemInactive { - top: 18px; - left: 0px; - background-position: 0px -18px; + top: 18px; + left: 0px; + background-position: 0px -18px; } .olControlZoomPanel .olControlZoomOutItemInactive { - top: 36px; - left: 0px; - background-position: 0px 18px; + top: 36px; + left: 0px; + background-position: 0px 18px; } .olPopupCloseBox { - background: url("/media/close.gif") no-repeat; - cursor: pointer; + background: url("/media/close.gif") no-repeat; + cursor: pointer; } .olFramedCloudPopupContent { - padding: 5px; - overflow: auto; + padding: 5px; + overflow: auto; } .olControlNoSelect { - -moz-user-select: none; + -moz-user-select: none; } .olImageLoadError { - background-color: pink; - opacity: 0.5; - filter: alpha(opacity=50); /* IE */ + background-color: pink; + opacity: 0.5; + filter: alpha(opacity = 50); /* IE */ } /** * Cursor styles */ - .olCursorWait { - cursor: wait; + cursor: wait; } + .olDragDown { - cursor: move; + cursor: move; } + .olDrawBox { - cursor: crosshair; + cursor: crosshair; } + .olControlDragFeatureOver { - cursor: move; + cursor: move; } + .olControlDragFeatureActive.olControlDragFeatureOver.olDragDown { - cursor: -moz-grabbing; + cursor: -moz-grabbing; } /** * Layer switcher */ .olControlLayerSwitcher { - position: absolute; - top: 25px; - right: 0px; - width: 20em; - font-family: sans-serif; - font-weight: bold; - margin-top: 3px; - margin-left: 3px; - margin-bottom: 3px; - font-size: smaller; - color: white; - background-color: transparent; + position: absolute; + top: 25px; + right: 0px; + width: 20em; + font-family: sans-serif; + font-weight: bold; + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; + font-size: smaller; + color: white; + background-color: transparent; } .olControlLayerSwitcher .layersDiv { - padding-top: 5px; - padding-left: 10px; - padding-bottom: 5px; - padding-right: 75px; - background-color: darkblue; - width: 100%; - height: 100%; + padding-top: 5px; + padding-left: 10px; + padding-bottom: 5px; + padding-right: 75px; + background-color: darkblue; + width: 100%; + height: 100%; } -.olControlLayerSwitcher .layersDiv .baseLbl, -.olControlLayerSwitcher .layersDiv .dataLbl { - margin-top: 3px; - margin-left: 3px; - margin-bottom: 3px; +.olControlLayerSwitcher .layersDiv .baseLbl,.olControlLayerSwitcher .layersDiv .dataLbl + { + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; } -.olControlLayerSwitcher .layersDiv .baseLayersDiv, -.olControlLayerSwitcher .layersDiv .dataLayersDiv { - padding-left: 10px; +.olControlLayerSwitcher .layersDiv .baseLayersDiv,.olControlLayerSwitcher .layersDiv .dataLayersDiv + { + padding-left: 10px; } -.olControlLayerSwitcher .maximizeDiv, -.olControlLayerSwitcher .minimizeDiv { - top: 5px; - right: 0px; -} +.olControlLayerSwitcher .maximizeDiv,.olControlLayerSwitcher .minimizeDiv + { + top: 5px; + right: 0px; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.tidy.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.tidy.css index b3a73b3..2bc5953 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.tidy.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.tidy.css @@ -1 +1,426 @@ -div.olMap{z-index:0;cursor:default;margin:0!important;padding:0!important;}div.olMapViewport{text-align:left;}.olLayerGoogleCopyright{left:2px;bottom:2px;}.olLayerGoogleV3.olLayerGoogleCopyright{right:auto!important;}.olLayerGooglePoweredBy{left:2px;bottom:15px;}.olLayerGoogleV3.olLayerGooglePoweredBy{bottom:15px!important;}.olControlAttribution{font-size:smaller;right:3px;bottom:4.5em;position:absolute;display:block;}.olControlScale{right:3px;bottom:3em;display:block;position:absolute;font-size:smaller;}.olControlScaleLine{display:block;position:absolute;left:10px;bottom:15px;font-size:xx-small;}.olControlScaleLineBottom{border:solid 2px #000;border-bottom:none;margin-top:-2px;text-align:center;}.olControlScaleLineTop{border:solid 2px #000;border-top:none;text-align:center;}.olControlPermalink{right:3px;bottom:1.5em;display:block;position:absolute;font-size:smaller;}div.olControlMousePosition{bottom:0;right:3px;display:block;position:absolute;font-family:Arial;font-size:smaller;}.olControlOverviewMapContainer{position:absolute;bottom:0;right:0;}.olControlOverviewMapElement{background-color:#00008B;-moz-border-radius:1em 0 0;padding:10px 18px 10px 10px;}.olControlOverviewMapExtentRectangle{overflow:hidden;background-image:url(img/blank.gif);cursor:move;border:2px dotted red;}.olControlOverviewMapRectReplacement{overflow:hidden;cursor:move;background-image:url(img/overview_replacement.gif);background-repeat:no-repeat;background-position:center;}.olLayerGeoRSSDescription{float:left;width:100%;overflow:auto;font-size:1em;}.olLayerGeoRSSClose{float:right;color:gray;font-size:1.2em;margin-right:6px;font-family:sans-serif;}.olLayerGeoRSSTitle{float:left;font-size:1.2em;}.olControlNavigationHistory{background-image:url(img/navigation_history.png);background-repeat:no-repeat;width:24px;height:24px;}.olControlNavigationHistoryPreviousItemActive{background-position:0 0;}.olControlNavigationHistoryPreviousItemInactive{background-position:0 -24px;}.olControlNavigationHistoryNextItemActive{background-position:-24px 0;}.olControlNavigationHistoryNextItemInactive{background-position:-24px -24px;}div.olControlSaveFeaturesItemActive{background-image:url(img/save_features_on.png);background-repeat:no-repeat;background-position:0 1px;}div.olControlSaveFeaturesItemInactive{background-image:url(img/save_features_off.png);background-repeat:no-repeat;background-position:0 1px;}.olHandlerBoxZoomBox{border:2px solid red;position:absolute;background-color:#FFF;opacity:.5;font-size:1px;filter:alpha(opacity=50);}.olHandlerBoxSelectFeature{border:2px solid blue;position:absolute;background-color:#FFF;opacity:.5;font-size:1px;filter:alpha(opacity=50);}.olControlPanPanel{top:10px;left:5px;}.olControlPanPanel div{background-image:url(img/pan-panel.png);height:18px;width:18px;cursor:pointer;position:absolute;}.olControlPanPanel .olControlPanNorthItemInactive{top:0;left:9px;background-position:0 0;}.olControlPanPanel .olControlPanSouthItemInactive{top:36px;left:9px;background-position:18px 0;}.olControlPanPanel .olControlPanWestItemInactive{position:absolute;top:18px;left:0;background-position:0 18px;}.olControlPanPanel .olControlPanEastItemInactive{top:18px;left:18px;background-position:18px 18px;}.olControlZoomPanel{top:71px;left:14px;}.olControlZoomPanel div{background-image:url(img/zoom-panel.png);position:absolute;height:18px;width:18px;cursor:pointer;}.olControlZoomPanel .olControlZoomInItemInactive{top:0;left:0;background-position:0 0;}.olControlZoomPanel .olControlZoomToMaxExtentItemInactive{top:18px;left:0;background-position:0 -18px;}.olControlZoomPanel .olControlZoomOutItemInactive{top:36px;left:0;background-position:0 18px;}.olControlPanZoomBar div{font-size:1px;}.olPopupCloseBox{background:url(img/close.gif) no-repeat;cursor:pointer;}.olImageLoadError{background-color:#FFC0CB;opacity:.5;filter:alpha(opacity=50);}.olCursorWait{cursor:wait;}.olDrawBox{cursor:crosshair;}.olControlDragFeatureActive.olControlDragFeatureOver.olDragDown{cursor:0;}.olControlLayerSwitcher{position:absolute;top:25px;right:0;width:20em;font-family:sans-serif;font-weight:700;margin-top:3px;margin-left:3px;margin-bottom:3px;font-size:smaller;color:#FFF;background-color:transparent;}.olControlLayerSwitcher .layersDiv{background-color:#00008B;width:100%;height:100%;padding:5px 75px 5px 10px;}.olControlLayerSwitcher .layersDiv .baseLbl,.olControlLayerSwitcher .layersDiv .dataLbl{margin-top:3px;margin-left:3px;margin-bottom:3px;}.olControlLayerSwitcher .layersDiv .baseLayersDiv,.olControlLayerSwitcher .layersDiv .dataLayersDiv{padding-left:10px;}.olControlLayerSwitcher .maximizeDiv,.olControlLayerSwitcher .minimizeDiv{top:5px;right:0;cursor:pointer;}.olBingAttribution{color:#DDD;}span.olGoogleAttribution a{color:#77C;}.olControlNavToolbar,.olControlEditingToolbar{margin:5px 5px 0 0;}.olControlNavToolbar div,.olControlEditingToolbar div{background-image:url(img/editing_tool_bar.png);background-repeat:no-repeat;width:24px;height:22px;cursor:pointer;margin:0 0 5px 5px;}.olControlEditingToolbar{right:0;top:0;}.olControlNavToolbar{top:295px;left:9px;}.olControlEditingToolbar div{float:right;}.olControlNavToolbar .olControlNavigationItemInactive,.olControlEditingToolbar .olControlNavigationItemInactive{background-position:-103px -1px;}.olControlNavToolbar .olControlNavigationItemActive,.olControlEditingToolbar .olControlNavigationItemActive{background-position:-103px -24px;}.olControlNavToolbar .olControlZoomBoxItemInactive{background-position:-128px -1px;}.olControlNavToolbar .olControlZoomBoxItemActive{background-position:-128px -24px;}.olControlEditingToolbar .olControlDrawFeaturePointItemInactive{background-position:-77px -1px;}.olControlEditingToolbar .olControlDrawFeaturePointItemActive{background-position:-77px -24px;}.olControlEditingToolbar .olControlDrawFeaturePathItemInactive{background-position:-51px -1px;}.olControlEditingToolbar .olControlDrawFeaturePathItemActive{background-position:-51px -24px;}.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive{background-position:-26px -1px;}.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive{background-position:-26px -24px;}div.olLayerDiv,.olControlNoSelect{-khtml-user-select:none;-moz-user-select:none;}.olControlOverviewMapMinimizeButton,.olControlOverviewMapMaximizeButton{bottom:80px;cursor:pointer;right:0;}.olPopupContent,.olFramedCloudPopupContent{overflow:auto;padding:5px;}.olDragDown,.olControlDragFeatureOver{cursor:move;}.olBingAttribution.road,.olGoogleAttribution{color:#333;}.olGoogleAttribution.hybrid,.olGoogleAttribution.satellite,span.olGoogleAttribution.hybrid a,span.olGoogleAttribution.satellite a{color:#EEE;} \ No newline at end of file +div.olMap { + z-index: 0; + cursor: default; + margin: 0 !important; + padding: 0 !important; +} + +div.olMapViewport { + text-align: left; +} + +.olLayerGoogleCopyright { + left: 2px; + bottom: 2px; +} + +.olLayerGoogleV3.olLayerGoogleCopyright { + right: auto !important; +} + +.olLayerGooglePoweredBy { + left: 2px; + bottom: 15px; +} + +.olLayerGoogleV3.olLayerGooglePoweredBy { + bottom: 15px !important; +} + +.olControlAttribution { + font-size: smaller; + right: 3px; + bottom: 4.5em; + position: absolute; + display: block; +} + +.olControlScale { + right: 3px; + bottom: 3em; + display: block; + position: absolute; + font-size: smaller; +} + +.olControlScaleLine { + display: block; + position: absolute; + left: 10px; + bottom: 15px; + font-size: xx-small; +} + +.olControlScaleLineBottom { + border: solid 2px #000; + border-bottom: none; + margin-top: -2px; + text-align: center; +} + +.olControlScaleLineTop { + border: solid 2px #000; + border-top: none; + text-align: center; +} + +.olControlPermalink { + right: 3px; + bottom: 1.5em; + display: block; + position: absolute; + font-size: smaller; +} + +div.olControlMousePosition { + bottom: 0; + right: 3px; + display: block; + position: absolute; + font-family: Arial; + font-size: smaller; +} + +.olControlOverviewMapContainer { + position: absolute; + bottom: 0; + right: 0; +} + +.olControlOverviewMapElement { + background-color: #00008B; + -moz-border-radius: 1em 0 0; + padding: 10px 18px 10px 10px; +} + +.olControlOverviewMapExtentRectangle { + overflow: hidden; + background-image: url(img/blank.gif); + cursor: move; + border: 2px dotted red; +} + +.olControlOverviewMapRectReplacement { + overflow: hidden; + cursor: move; + background-image: url(img/overview_replacement.gif); + background-repeat: no-repeat; + background-position: center; +} + +.olLayerGeoRSSDescription { + float: left; + width: 100%; + overflow: auto; + font-size: 1em; +} + +.olLayerGeoRSSClose { + float: right; + color: gray; + font-size: 1.2em; + margin-right: 6px; + font-family: sans-serif; +} + +.olLayerGeoRSSTitle { + float: left; + font-size: 1.2em; +} + +.olControlNavigationHistory { + background-image: url(img/navigation_history.png); + background-repeat: no-repeat; + width: 24px; + height: 24px; +} + +.olControlNavigationHistoryPreviousItemActive { + background-position: 0 0; +} + +.olControlNavigationHistoryPreviousItemInactive { + background-position: 0 -24px; +} + +.olControlNavigationHistoryNextItemActive { + background-position: -24px 0; +} + +.olControlNavigationHistoryNextItemInactive { + background-position: -24px -24px; +} + +div.olControlSaveFeaturesItemActive { + background-image: url(img/save_features_on.png); + background-repeat: no-repeat; + background-position: 0 1px; +} + +div.olControlSaveFeaturesItemInactive { + background-image: url(img/save_features_off.png); + background-repeat: no-repeat; + background-position: 0 1px; +} + +.olHandlerBoxZoomBox { + border: 2px solid red; + position: absolute; + background-color: #FFF; + opacity: .5; + font-size: 1px; + filter: alpha(opacity = 50); +} + +.olHandlerBoxSelectFeature { + border: 2px solid blue; + position: absolute; + background-color: #FFF; + opacity: .5; + font-size: 1px; + filter: alpha(opacity = 50); +} + +.olControlPanPanel { + top: 10px; + left: 5px; +} + +.olControlPanPanel div { + background-image: url(img/pan-panel.png); + height: 18px; + width: 18px; + cursor: pointer; + position: absolute; +} + +.olControlPanPanel .olControlPanNorthItemInactive { + top: 0; + left: 9px; + background-position: 0 0; +} + +.olControlPanPanel .olControlPanSouthItemInactive { + top: 36px; + left: 9px; + background-position: 18px 0; +} + +.olControlPanPanel .olControlPanWestItemInactive { + position: absolute; + top: 18px; + left: 0; + background-position: 0 18px; +} + +.olControlPanPanel .olControlPanEastItemInactive { + top: 18px; + left: 18px; + background-position: 18px 18px; +} + +.olControlZoomPanel { + top: 71px; + left: 14px; +} + +.olControlZoomPanel div { + background-image: url(img/zoom-panel.png); + position: absolute; + height: 18px; + width: 18px; + cursor: pointer; +} + +.olControlZoomPanel .olControlZoomInItemInactive { + top: 0; + left: 0; + background-position: 0 0; +} + +.olControlZoomPanel .olControlZoomToMaxExtentItemInactive { + top: 18px; + left: 0; + background-position: 0 -18px; +} + +.olControlZoomPanel .olControlZoomOutItemInactive { + top: 36px; + left: 0; + background-position: 0 18px; +} + +.olControlPanZoomBar div { + font-size: 1px; +} + +.olPopupCloseBox { + background: url(img/close.gif) no-repeat; + cursor: pointer; +} + +.olImageLoadError { + background-color: #FFC0CB; + opacity: .5; + filter: alpha(opacity = 50); +} + +.olCursorWait { + cursor: wait; +} + +.olDrawBox { + cursor: crosshair; +} + +.olControlDragFeatureActive.olControlDragFeatureOver.olDragDown { + cursor: 0; +} + +.olControlLayerSwitcher { + position: absolute; + top: 25px; + right: 0; + width: 20em; + font-family: sans-serif; + font-weight: 700; + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; + font-size: smaller; + color: #FFF; + background-color: transparent; +} + +.olControlLayerSwitcher .layersDiv { + background-color: #00008B; + width: 100%; + height: 100%; + padding: 5px 75px 5px 10px; +} + +.olControlLayerSwitcher .layersDiv .baseLbl,.olControlLayerSwitcher .layersDiv .dataLbl + { + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; +} + +.olControlLayerSwitcher .layersDiv .baseLayersDiv,.olControlLayerSwitcher .layersDiv .dataLayersDiv + { + padding-left: 10px; +} + +.olControlLayerSwitcher .maximizeDiv,.olControlLayerSwitcher .minimizeDiv + { + top: 5px; + right: 0; + cursor: pointer; +} + +.olBingAttribution { + color: #DDD; +} + +span.olGoogleAttribution a { + color: #77C; +} + +.olControlNavToolbar,.olControlEditingToolbar { + margin: 5px 5px 0 0; +} + +.olControlNavToolbar div,.olControlEditingToolbar div { + background-image: url(img/editing_tool_bar.png); + background-repeat: no-repeat; + width: 24px; + height: 22px; + cursor: pointer; + margin: 0 0 5px 5px; +} + +.olControlEditingToolbar { + right: 0; + top: 0; +} + +.olControlNavToolbar { + top: 295px; + left: 9px; +} + +.olControlEditingToolbar div { + float: right; +} + +.olControlNavToolbar .olControlNavigationItemInactive,.olControlEditingToolbar .olControlNavigationItemInactive + { + background-position: -103px -1px; +} + +.olControlNavToolbar .olControlNavigationItemActive,.olControlEditingToolbar .olControlNavigationItemActive + { + background-position: -103px -24px; +} + +.olControlNavToolbar .olControlZoomBoxItemInactive { + background-position: -128px -1px; +} + +.olControlNavToolbar .olControlZoomBoxItemActive { + background-position: -128px -24px; +} + +.olControlEditingToolbar .olControlDrawFeaturePointItemInactive { + background-position: -77px -1px; +} + +.olControlEditingToolbar .olControlDrawFeaturePointItemActive { + background-position: -77px -24px; +} + +.olControlEditingToolbar .olControlDrawFeaturePathItemInactive { + background-position: -51px -1px; +} + +.olControlEditingToolbar .olControlDrawFeaturePathItemActive { + background-position: -51px -24px; +} + +.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive { + background-position: -26px -1px; +} + +.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive { + background-position: -26px -24px; +} + +div.olLayerDiv,.olControlNoSelect { + -khtml-user-select: none; + -moz-user-select: none; +} + +.olControlOverviewMapMinimizeButton,.olControlOverviewMapMaximizeButton + { + bottom: 80px; + cursor: pointer; + right: 0; +} + +.olPopupContent,.olFramedCloudPopupContent { + overflow: auto; + padding: 5px; +} + +.olDragDown,.olControlDragFeatureOver { + cursor: move; +} + +.olBingAttribution.road,.olGoogleAttribution { + color: #333; +} + +.olGoogleAttribution.hybrid,.olGoogleAttribution.satellite,span.olGoogleAttribution.hybrid a,span.olGoogleAttribution.satellite a + { + color: #EEE; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style_old.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style_old.css index 3aeac29..9d3b048 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style_old.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style_old.css @@ -1,255 +1,275 @@ div.olMap { - z-index: 0; - padding: 0 !important; - margin: 0 !important; - cursor: default; + z-index: 0; + padding: 0 !important; + margin: 0 !important; + cursor: default; } div.olMapViewport { - text-align: left; + text-align: left; } div.olLayerDiv { - -moz-user-select: none; - -khtml-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; } .olLayerGoogleCopyright { - left: 2px; - bottom: 2px; + left: 2px; + bottom: 2px; } + .olLayerGoogleV3.olLayerGoogleCopyright { - right: auto !important; + right: auto !important; } + .olLayerGooglePoweredBy { - left: 2px; - bottom: 15px; + left: 2px; + bottom: 15px; } + .olLayerGoogleV3.olLayerGooglePoweredBy { - bottom: 15px !important; + bottom: 15px !important; } + .olControlAttribution { - font-size: smaller; - right: 3px; - bottom: 4.5em; - position: absolute; - display: block; + font-size: smaller; + right: 3px; + bottom: 4.5em; + position: absolute; + display: block; } + .olControlScale { - right: 3px; - bottom: 3em; - display: block; - position: absolute; - font-size: smaller; + right: 3px; + bottom: 3em; + display: block; + position: absolute; + font-size: smaller; } + .olControlScaleLine { - display: block; - position: absolute; - left: 10px; - bottom: 15px; - font-size: xx-small; + display: block; + position: absolute; + left: 10px; + bottom: 15px; + font-size: xx-small; } + .olControlScaleLineBottom { - border: solid 2px black; - border-bottom: none; - margin-top:-2px; - text-align: center; + border: solid 2px black; + border-bottom: none; + margin-top: -2px; + text-align: center; } + .olControlScaleLineTop { - border: solid 2px black; - border-top: none; - text-align: center; + border: solid 2px black; + border-top: none; + text-align: center; } .olControlPermalink { - right: 3px; - bottom: 1.5em; - display: block; - position: absolute; - font-size: smaller; -} + right: 3px; + bottom: 1.5em; + display: block; + position: absolute; + font-size: smaller; +} div.olControlMousePosition { - bottom: 0em; - right: 3px; - display: block; - position: absolute; - font-family: Arial; - font-size: smaller; + bottom: 0em; + right: 3px; + display: block; + position: absolute; + font-family: Arial; + font-size: smaller; } .olControlOverviewMapContainer { - position: absolute; - bottom: 0; - right: 0; + position: absolute; + bottom: 0; + right: 0; } .olControlOverviewMapElement { - padding: 10px 18px 10px 10px; - background-color: #00008B; - -moz-border-radius: 1em 0 0 0; + padding: 10px 18px 10px 10px; + background-color: #00008B; + -moz-border-radius: 1em 0 0 0; } .olControlOverviewMapMinimizeButton { - right: 0; - bottom: 80px; - cursor: pointer; -} + right: 0; + bottom: 80px; + cursor: pointer; +} .olControlOverviewMapMaximizeButton { - right: 0; - bottom: 80px; - cursor: pointer; + right: 0; + bottom: 80px; + cursor: pointer; } .olControlOverviewMapExtentRectangle { - overflow: hidden; - background-image: url("img/blank.gif"); - cursor: move; - border: 2px dotted red; + overflow: hidden; + background-image: url("img/blank.gif"); + cursor: move; + border: 2px dotted red; } + .olControlOverviewMapRectReplacement { - overflow: hidden; - cursor: move; - background-image: url("img/overview_replacement.gif"); - background-repeat: no-repeat; - background-position: center; + overflow: hidden; + cursor: move; + background-image: url("img/overview_replacement.gif"); + background-repeat: no-repeat; + background-position: center; } .olLayerGeoRSSDescription { - float:left; - width:100%; - overflow:auto; - font-size:1.0em; + float: left; + width: 100%; + overflow: auto; + font-size: 1.0em; } + .olLayerGeoRSSClose { - float:right; - color:gray; - font-size:1.2em; - margin-right:6px; - font-family:sans-serif; + float: right; + color: gray; + font-size: 1.2em; + margin-right: 6px; + font-family: sans-serif; } + .olLayerGeoRSSTitle { - float:left;font-size:1.2em; + float: left; + font-size: 1.2em; } .olPopupContent { - padding:5px; - overflow: auto; -} + padding: 5px; + overflow: auto; +} .olControlNavigationHistory { - background-image: url("img/navigation_history.png"); - background-repeat: no-repeat; - width: 24px; - height: 24px; - + background-image: url("img/navigation_history.png"); + background-repeat: no-repeat; + width: 24px; + height: 24px; } -.olControlNavigationHistoryPreviousItemActive { - background-position: 0 0; + +.olControlNavigationHistoryPreviousItemActive { + background-position: 0 0; } -.olControlNavigationHistoryPreviousItemInactive { - background-position: 0 -24px; + +.olControlNavigationHistoryPreviousItemInactive { + background-position: 0 -24px; } -.olControlNavigationHistoryNextItemActive { - background-position: -24px 0; + +.olControlNavigationHistoryNextItemActive { + background-position: -24px 0; } -.olControlNavigationHistoryNextItemInactive { - background-position: -24px -24px; + +.olControlNavigationHistoryNextItemInactive { + background-position: -24px -24px; } -div.olControlSaveFeaturesItemActive { - background-image: url(img/save_features_on.png); - background-repeat: no-repeat; - background-position: 0 1px; +div.olControlSaveFeaturesItemActive { + background-image: url(img/save_features_on.png); + background-repeat: no-repeat; + background-position: 0 1px; } -div.olControlSaveFeaturesItemInactive { - background-image: url(img/save_features_off.png); - background-repeat: no-repeat; - background-position: 0 1px; + +div.olControlSaveFeaturesItemInactive { + background-image: url(img/save_features_off.png); + background-repeat: no-repeat; + background-position: 0 1px; } .olHandlerBoxZoomBox { - border: 2px solid red; - position: absolute; - background-color: white; - opacity: 0.50; - font-size: 1px; - filter: alpha(opacity=50); + border: 2px solid red; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity = 50); } + .olHandlerBoxSelectFeature { - border: 2px solid blue; - position: absolute; - background-color: white; - opacity: 0.50; - font-size: 1px; - filter: alpha(opacity=50); -} + border: 2px solid blue; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity = 50); +} .olControlPanPanel { - top: 10px; - left: 5px; -} + top: 10px; + left: 5px; +} .olControlPanPanel div { - background-image: url(img/pan-panel.png); - height: 18px; - width: 18px; - cursor: pointer; - position: absolute; + background-image: url(img/pan-panel.png); + height: 18px; + width: 18px; + cursor: pointer; + position: absolute; } .olControlPanPanel .olControlPanNorthItemInactive { - top: 0; - left: 9px; - background-position: 0 0; + top: 0; + left: 9px; + background-position: 0 0; } + .olControlPanPanel .olControlPanSouthItemInactive { - top: 36px; - left: 9px; - background-position: 18px 0; + top: 36px; + left: 9px; + background-position: 18px 0; } + .olControlPanPanel .olControlPanWestItemInactive { - position: absolute; - top: 18px; - left: 0; - background-position: 0 18px; + position: absolute; + top: 18px; + left: 0; + background-position: 0 18px; } + .olControlPanPanel .olControlPanEastItemInactive { - top: 18px; - left: 18px; - background-position: 18px 18px; + top: 18px; + left: 18px; + background-position: 18px 18px; } .olControlZoomPanel { - top: 71px; - left: 14px; -} + top: 71px; + left: 14px; +} .olControlZoomPanel div { - background-image: url(img/zoom-panel.png); - position: absolute; - height: 18px; - width: 18px; - cursor: pointer; + background-image: url(img/zoom-panel.png); + position: absolute; + height: 18px; + width: 18px; + cursor: pointer; } .olControlZoomPanel .olControlZoomInItemInactive { - top: 0; - left: 0; - background-position: 0 0; + top: 0; + left: 0; + background-position: 0 0; } .olControlZoomPanel .olControlZoomToMaxExtentItemInactive { - top: 18px; - left: 0; - background-position: 0 -18px; + top: 18px; + left: 0; + background-position: 0 -18px; } .olControlZoomPanel .olControlZoomOutItemInactive { - top: 36px; - left: 0; - background-position: 0 18px; + top: 36px; + left: 0; + background-position: 0 18px; } /* @@ -257,177 +277,193 @@ div.olControlSaveFeaturesItemInactive { * with some headers (closes #3154) */ .olControlPanZoomBar div { - font-size: 1px; + font-size: 1px; } .olPopupCloseBox { - background: url("img/close.gif") no-repeat; - cursor: pointer; + background: url("img/close.gif") no-repeat; + cursor: pointer; } .olFramedCloudPopupContent { - padding: 5px; - overflow: auto; + padding: 5px; + overflow: auto; } .olControlNoSelect { - -moz-user-select: none; - -khtml-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; } .olImageLoadError { - background-color: pink; - opacity: 0.5; - filter: alpha(opacity=50); /* IE */ + background-color: pink; + opacity: 0.5; + filter: alpha(opacity = 50); /* IE */ } /** * Cursor styles */ - .olCursorWait { - cursor: wait; + cursor: wait; } + .olDragDown { - cursor: move; + cursor: move; } + .olDrawBox { - cursor: crosshair; + cursor: crosshair; } + .olControlDragFeatureOver { - cursor: move; + cursor: move; } + .olControlDragFeatureActive.olControlDragFeatureOver.olDragDown { - cursor: -moz-grabbing; + cursor: -moz-grabbing; } /** * Layer switcher */ .olControlLayerSwitcher { - position: absolute; - top: 25px; - right: 0; - width: 20em; - font-family: sans-serif; - font-weight: bold; - margin-top: 3px; - margin-left: 3px; - margin-bottom: 3px; - font-size: smaller; - color: white; - background-color: transparent; + position: absolute; + top: 25px; + right: 0; + width: 20em; + font-family: sans-serif; + font-weight: bold; + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; + font-size: smaller; + color: white; + background-color: transparent; } .olControlLayerSwitcher .layersDiv { - padding-top: 5px; - padding-left: 10px; - padding-bottom: 5px; - padding-right: 75px; - background-color: darkblue; - width: 100%; - height: 100%; + padding-top: 5px; + padding-left: 10px; + padding-bottom: 5px; + padding-right: 75px; + background-color: darkblue; + width: 100%; + height: 100%; } -.olControlLayerSwitcher .layersDiv .baseLbl, -.olControlLayerSwitcher .layersDiv .dataLbl { - margin-top: 3px; - margin-left: 3px; - margin-bottom: 3px; +.olControlLayerSwitcher .layersDiv .baseLbl,.olControlLayerSwitcher .layersDiv .dataLbl + { + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; } -.olControlLayerSwitcher .layersDiv .baseLayersDiv, -.olControlLayerSwitcher .layersDiv .dataLayersDiv { - padding-left: 10px; +.olControlLayerSwitcher .layersDiv .baseLayersDiv,.olControlLayerSwitcher .layersDiv .dataLayersDiv + { + padding-left: 10px; } -.olControlLayerSwitcher .maximizeDiv, -.olControlLayerSwitcher .minimizeDiv { - top: 5px; - right: 0; - cursor: pointer; +.olControlLayerSwitcher .maximizeDiv,.olControlLayerSwitcher .minimizeDiv + { + top: 5px; + right: 0; + cursor: pointer; } .olBingAttribution { - color: #DDD; + color: #DDD; } + .olBingAttribution.road { - color: #333; + color: #333; } -.olGoogleAttribution.hybrid, .olGoogleAttribution.satellite { - color: #EEE; +.olGoogleAttribution.hybrid,.olGoogleAttribution.satellite { + color: #EEE; } + .olGoogleAttribution { - color: #333; + color: #333; } + span.olGoogleAttribution a { - color: #77C; + color: #77C; } -span.olGoogleAttribution.hybrid a, span.olGoogleAttribution.satellite a { - color: #EEE; + +span.olGoogleAttribution.hybrid a,span.olGoogleAttribution.satellite a { + color: #EEE; } /** * Editing and navigation icons. * (using the editing_tool_bar.png sprint image) */ -.olControlNavToolbar , -.olControlEditingToolbar { - margin: 5px 5px 0 0; +.olControlNavToolbar,.olControlEditingToolbar { + margin: 5px 5px 0 0; } -.olControlNavToolbar div, -.olControlEditingToolbar div { - background-image: url("img/editing_tool_bar.png"); - background-repeat: no-repeat; - margin: 0 0 5px 5px; - width: 24px; - height: 22px; - cursor: pointer + +.olControlNavToolbar div,.olControlEditingToolbar div { + background-image: url("img/editing_tool_bar.png"); + background-repeat: no-repeat; + margin: 0 0 5px 5px; + width: 24px; + height: 22px; + cursor: pointer } /* positions */ .olControlEditingToolbar { - right: 0; - top: 0; + right: 0; + top: 0; } + .olControlNavToolbar { - top: 295px; - left: 9px; + top: 295px; + left: 9px; } /* layouts */ .olControlEditingToolbar div { - float: right; + float: right; } /* individual controls */ -.olControlNavToolbar .olControlNavigationItemInactive, -.olControlEditingToolbar .olControlNavigationItemInactive { - background-position: -103px -1px; +.olControlNavToolbar .olControlNavigationItemInactive,.olControlEditingToolbar .olControlNavigationItemInactive + { + background-position: -103px -1px; } -.olControlNavToolbar .olControlNavigationItemActive , -.olControlEditingToolbar .olControlNavigationItemActive { - background-position: -103px -24px; + +.olControlNavToolbar .olControlNavigationItemActive,.olControlEditingToolbar .olControlNavigationItemActive + { + background-position: -103px -24px; } + .olControlNavToolbar .olControlZoomBoxItemInactive { - background-position: -128px -1px; + background-position: -128px -1px; } -.olControlNavToolbar .olControlZoomBoxItemActive { - background-position: -128px -24px; + +.olControlNavToolbar .olControlZoomBoxItemActive { + background-position: -128px -24px; } + .olControlEditingToolbar .olControlDrawFeaturePointItemInactive { - background-position: -77px -1px; + background-position: -77px -1px; } + .olControlEditingToolbar .olControlDrawFeaturePointItemActive { - background-position: -77px -24px; + background-position: -77px -24px; } + .olControlEditingToolbar .olControlDrawFeaturePathItemInactive { - background-position: -51px -1px; + background-position: -51px -1px; } + .olControlEditingToolbar .olControlDrawFeaturePathItemActive { - background-position: -51px -24px; + background-position: -51px -24px; } -.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive{ - background-position: -26px -1px; + +.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive { + background-position: -26px -1px; } + .olControlEditingToolbar .olControlDrawFeaturePolygonItemActive { - background-position: -26px -24px; -} + background-position: -26px -24px; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/google.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/google.css index 3ee757c..98e2c4e 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/google.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/google.css @@ -1,17 +1,19 @@ .olLayerGoogleCopyright { - right: 3px; - bottom: 2px; - left: auto; + right: 3px; + bottom: 2px; + left: auto; } + .olLayerGoogleV3.olLayerGoogleCopyright { - bottom: 0px; - right: 0px !important; + bottom: 0px; + right: 0px !important; } + .olLayerGooglePoweredBy { - left: 2px; - bottom: 2px; -} -.olLayerGoogleV3.olLayerGooglePoweredBy { - bottom: 0px !important; + left: 2px; + bottom: 2px; } +.olLayerGoogleV3.olLayerGooglePoweredBy { + bottom: 0px !important; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/google.tidy.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/google.tidy.css index 4ba0cd8..7389726 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/google.tidy.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/google.tidy.css @@ -1 +1,19 @@ -.olLayerGoogleCopyright{right:3px;bottom:2px;left:auto;}.olLayerGoogleV3.olLayerGoogleCopyright{bottom:0;right:0!important;}.olLayerGooglePoweredBy{left:2px;bottom:2px;}.olLayerGoogleV3.olLayerGooglePoweredBy{bottom:0!important;} \ No newline at end of file +.olLayerGoogleCopyright { + right: 3px; + bottom: 2px; + left: auto; +} + +.olLayerGoogleV3.olLayerGoogleCopyright { + bottom: 0; + right: 0 !important; +} + +.olLayerGooglePoweredBy { + left: 2px; + bottom: 2px; +} + +.olLayerGoogleV3.olLayerGooglePoweredBy { + bottom: 0 !important; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/ie6-style.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/ie6-style.css index a0fd7c6..e40b56e 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/ie6-style.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/ie6-style.css @@ -1,10 +1,11 @@ .olControlZoomPanel div { - background-image: url(img/zoom-panel-NOALPHA.png); + background-image: url(img/zoom-panel-NOALPHA.png); } + .olControlPanPanel div { - background-image: url(img/pan-panel-NOALPHA.png); -} -.olControlEditingToolbar { - width: 200px; + background-image: url(img/pan-panel-NOALPHA.png); } +.olControlEditingToolbar { + width: 200px; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/ie6-style.tidy.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/ie6-style.tidy.css index 7a23bbc..e40b56e 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/ie6-style.tidy.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/ie6-style.tidy.css @@ -1 +1,11 @@ -.olControlZoomPanel div{background-image:url(img/zoom-panel-NOALPHA.png);}.olControlPanPanel div{background-image:url(img/pan-panel-NOALPHA.png);}.olControlEditingToolbar{width:200px;} \ No newline at end of file +.olControlZoomPanel div { + background-image: url(img/zoom-panel-NOALPHA.png); +} + +.olControlPanPanel div { + background-image: url(img/pan-panel-NOALPHA.png); +} + +.olControlEditingToolbar { + width: 200px; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.css index 8e0abb7..f5346ff 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.css @@ -1,252 +1,272 @@ div.olMap { - z-index: 0; - padding: 0 !important; - margin: 0 !important; - cursor: default; + z-index: 0; + padding: 0 !important; + margin: 0 !important; + cursor: default; } div.olMapViewport { - text-align: left; + text-align: left; } div.olLayerDiv { - -moz-user-select: none; - -khtml-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; } .olLayerGoogleCopyright { - left: 2px; - bottom: 2px; + left: 2px; + bottom: 2px; } + .olLayerGoogleV3.olLayerGoogleCopyright { - right: auto !important; + right: auto !important; } + .olLayerGooglePoweredBy { - left: 2px; - bottom: 15px; + left: 2px; + bottom: 15px; } + .olLayerGoogleV3.olLayerGooglePoweredBy { - bottom: 15px !important; + bottom: 15px !important; } + .olControlAttribution { - font-size: smaller; - right: 3px; - bottom: 4.5em; - position: absolute; - display: block; + font-size: smaller; + right: 3px; + bottom: 4.5em; + position: absolute; + display: block; } + .olControlScale { - right: 3px; - bottom: 3em; - display: block; - position: absolute; - font-size: smaller; + right: 3px; + bottom: 3em; + display: block; + position: absolute; + font-size: smaller; } + .olControlScaleLine { - display: block; - position: absolute; - left: 10px; - bottom: 15px; - font-size: xx-small; + display: block; + position: absolute; + left: 10px; + bottom: 15px; + font-size: xx-small; } + .olControlScaleLineBottom { - border: solid 2px black; - border-bottom: none; - margin-top:-2px; - text-align: center; + border: solid 2px black; + border-bottom: none; + margin-top: -2px; + text-align: center; } + .olControlScaleLineTop { - border: solid 2px black; - border-top: none; - text-align: center; + border: solid 2px black; + border-top: none; + text-align: center; } .olControlPermalink { - right: 3px; - bottom: 1.5em; - display: block; - position: absolute; - font-size: smaller; + right: 3px; + bottom: 1.5em; + display: block; + position: absolute; + font-size: smaller; } div.olControlMousePosition { - bottom: 0; - right: 3px; - display: block; - position: absolute; - font-family: Arial; - font-size: smaller; + bottom: 0; + right: 3px; + display: block; + position: absolute; + font-family: Arial; + font-size: smaller; } .olControlOverviewMapContainer { - position: absolute; - bottom: 0; - right: 0; + position: absolute; + bottom: 0; + right: 0; } .olControlOverviewMapElement { - padding: 10px 18px 10px 10px; - background-color: #00008B; - -moz-border-radius: 1em 0 0 0; + padding: 10px 18px 10px 10px; + background-color: #00008B; + -moz-border-radius: 1em 0 0 0; } -.olControlOverviewMapMinimizeButton, -.olControlOverviewMapMaximizeButton { - height: 18px; - width: 18px; - right: 0; - bottom: 80px; - cursor: pointer; +.olControlOverviewMapMinimizeButton,.olControlOverviewMapMaximizeButton + { + height: 18px; + width: 18px; + right: 0; + bottom: 80px; + cursor: pointer; } .olControlOverviewMapExtentRectangle { - overflow: hidden; - background-image: url("img/blank.gif"); - cursor: move; - border: 2px dotted red; + overflow: hidden; + background-image: url("img/blank.gif"); + cursor: move; + border: 2px dotted red; } + .olControlOverviewMapRectReplacement { - overflow: hidden; - cursor: move; - background-image: url("img/overview_replacement.gif"); - background-repeat: no-repeat; - background-position: center; + overflow: hidden; + cursor: move; + background-image: url("img/overview_replacement.gif"); + background-repeat: no-repeat; + background-position: center; } .olLayerGeoRSSDescription { - float:left; - width:100%; - overflow:auto; - font-size:1.0em; + float: left; + width: 100%; + overflow: auto; + font-size: 1.0em; } + .olLayerGeoRSSClose { - float:right; - color:gray; - font-size:1.2em; - margin-right:6px; - font-family:sans-serif; + float: right; + color: gray; + font-size: 1.2em; + margin-right: 6px; + font-family: sans-serif; } + .olLayerGeoRSSTitle { - float:left;font-size:1.2em; + float: left; + font-size: 1.2em; } .olPopupContent { - padding:5px; - overflow: auto; + padding: 5px; + overflow: auto; } .olControlNavigationHistory { - background-image: url("img/navigation_history.png"); - background-repeat: no-repeat; - width: 24px; - height: 24px; - + background-image: url("img/navigation_history.png"); + background-repeat: no-repeat; + width: 24px; + height: 24px; } + .olControlNavigationHistoryPreviousItemActive { - background-position: 0 0; + background-position: 0 0; } + .olControlNavigationHistoryPreviousItemInactive { - background-position: 0 -24px; + background-position: 0 -24px; } + .olControlNavigationHistoryNextItemActive { - background-position: -24px 0; + background-position: -24px 0; } + .olControlNavigationHistoryNextItemInactive { - background-position: -24px -24px; + background-position: -24px -24px; } div.olControlSaveFeaturesItemActive { - background-image: url(img/save_features_on.png); - background-repeat: no-repeat; - background-position: 0 1px; + background-image: url(img/save_features_on.png); + background-repeat: no-repeat; + background-position: 0 1px; } + div.olControlSaveFeaturesItemInactive { - background-image: url(img/save_features_off.png); - background-repeat: no-repeat; - background-position: 0 1px; + background-image: url(img/save_features_off.png); + background-repeat: no-repeat; + background-position: 0 1px; } .olHandlerBoxZoomBox { - border: 2px solid red; - position: absolute; - background-color: white; - opacity: 0.50; - font-size: 1px; - filter: alpha(opacity=50); + border: 2px solid red; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity = 50); } + .olHandlerBoxSelectFeature { - border: 2px solid blue; - position: absolute; - background-color: white; - opacity: 0.50; - font-size: 1px; - filter: alpha(opacity=50); + border: 2px solid blue; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity = 50); } .olControlPanPanel { - top: 10px; - left: 5px; + top: 10px; + left: 5px; } .olControlPanPanel div { - background-image: url(img/pan-panel.png); - height: 18px; - width: 18px; - cursor: pointer; - position: absolute; + background-image: url(img/pan-panel.png); + height: 18px; + width: 18px; + cursor: pointer; + position: absolute; } .olControlPanPanel .olControlPanNorthItemInactive { - top: 0; - left: 9px; - background-position: 0 0; + top: 0; + left: 9px; + background-position: 0 0; } + .olControlPanPanel .olControlPanSouthItemInactive { - top: 36px; - left: 9px; - background-position: 18px 0; + top: 36px; + left: 9px; + background-position: 18px 0; } + .olControlPanPanel .olControlPanWestItemInactive { - position: absolute; - top: 18px; - left: 0; - background-position: 0 18px; + position: absolute; + top: 18px; + left: 0; + background-position: 0 18px; } + .olControlPanPanel .olControlPanEastItemInactive { - top: 18px; - left: 18px; - background-position: 18px 18px; + top: 18px; + left: 18px; + background-position: 18px 18px; } .olControlZoomPanel { - top: 71px; - left: 14px; + top: 71px; + left: 14px; } .olControlZoomPanel div { - background-image: url(img/zoom-panel.png); - position: absolute; - height: 18px; - width: 18px; - cursor: pointer; + background-image: url(img/zoom-panel.png); + position: absolute; + height: 18px; + width: 18px; + cursor: pointer; } .olControlZoomPanel .olControlZoomInItemInactive { - top: 0; - left: 0; - background-position: 0 0; + top: 0; + left: 0; + background-position: 0 0; } .olControlZoomPanel .olControlZoomToMaxExtentItemInactive { - top: 18px; - left: 0; - background-position: 0 -18px; + top: 18px; + left: 0; + background-position: 0 -18px; } .olControlZoomPanel .olControlZoomOutItemInactive { - top: 36px; - left: 0; - background-position: 0 18px; + top: 36px; + left: 0; + background-position: 0 18px; } /* @@ -254,231 +274,252 @@ div.olControlSaveFeaturesItemInactive { * with some headers (closes #3154) */ .olControlPanZoomBar div { - font-size: 1px; + font-size: 1px; } .olPopupCloseBox { - background: url("img/close.gif") no-repeat; - cursor: pointer; + background: url("img/close.gif") no-repeat; + cursor: pointer; } .olFramedCloudPopupContent { - padding: 5px; - overflow: auto; + padding: 5px; + overflow: auto; } .olControlNoSelect { - -moz-user-select: none; - -khtml-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; } .olImageLoadError { - background-color: pink; - opacity: 0.5; - filter: alpha(opacity=50); /* IE */ + background-color: pink; + opacity: 0.5; + filter: alpha(opacity = 50); /* IE */ } /** * Cursor styles */ - .olCursorWait { - cursor: wait; + cursor: wait; } + .olDragDown { - cursor: move; + cursor: move; } + .olDrawBox { - cursor: crosshair; + cursor: crosshair; } + .olControlDragFeatureOver { - cursor: move; + cursor: move; } + .olControlDragFeatureActive.olControlDragFeatureOver.olDragDown { - cursor: -moz-grabbing; + cursor: -moz-grabbing; } /** * Layer switcher */ .olControlLayerSwitcher { - position: absolute; - top: 25px; - right: 0; - width: 20em; - font-family: sans-serif; - font-weight: bold; - margin-top: 3px; - margin-left: 3px; - margin-bottom: 3px; - font-size: smaller; - color: white; - background-color: transparent; + position: absolute; + top: 25px; + right: 0; + width: 20em; + font-family: sans-serif; + font-weight: bold; + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; + font-size: smaller; + color: white; + background-color: transparent; } .olControlLayerSwitcher .layersDiv { - padding-top: 5px; - padding-left: 10px; - padding-bottom: 5px; - padding-right: 10px; - background-color: darkblue; + padding-top: 5px; + padding-left: 10px; + padding-bottom: 5px; + padding-right: 10px; + background-color: darkblue; } -.olControlLayerSwitcher .layersDiv .baseLbl, -.olControlLayerSwitcher .layersDiv .dataLbl { - margin-top: 3px; - margin-left: 3px; - margin-bottom: 3px; +.olControlLayerSwitcher .layersDiv .baseLbl,.olControlLayerSwitcher .layersDiv .dataLbl + { + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; } -.olControlLayerSwitcher .layersDiv .baseLayersDiv, -.olControlLayerSwitcher .layersDiv .dataLayersDiv { - padding-left: 10px; +.olControlLayerSwitcher .layersDiv .baseLayersDiv,.olControlLayerSwitcher .layersDiv .dataLayersDiv + { + padding-left: 10px; } -.olControlLayerSwitcher .maximizeDiv, -.olControlLayerSwitcher .minimizeDiv { - width: 18px; - height: 18px; - top: 5px; - right: 0; - cursor: pointer; +.olControlLayerSwitcher .maximizeDiv,.olControlLayerSwitcher .minimizeDiv + { + width: 18px; + height: 18px; + top: 5px; + right: 0; + cursor: pointer; } .olBingAttribution { - color: #DDD; + color: #DDD; } + .olBingAttribution.road { - color: #333; + color: #333; } -.olGoogleAttribution.hybrid, .olGoogleAttribution.satellite { - color: #EEE; +.olGoogleAttribution.hybrid,.olGoogleAttribution.satellite { + color: #EEE; } + .olGoogleAttribution { - color: #333; + color: #333; } + span.olGoogleAttribution a { - color: #77C; + color: #77C; } -span.olGoogleAttribution.hybrid a, span.olGoogleAttribution.satellite a { - color: #EEE; + +span.olGoogleAttribution.hybrid a,span.olGoogleAttribution.satellite a { + color: #EEE; } /** * Editing and navigation icons. * (using the editing_tool_bar.png sprint image) */ -.olControlNavToolbar , -.olControlEditingToolbar { - margin: 5px 5px 0 0; +.olControlNavToolbar,.olControlEditingToolbar { + margin: 5px 5px 0 0; } -.olControlNavToolbar div, -.olControlEditingToolbar div { - background-image: url("img/editing_tool_bar.png"); - background-repeat: no-repeat; - margin: 0 0 5px 5px; - width: 24px; - height: 22px; - cursor: pointer + +.olControlNavToolbar div,.olControlEditingToolbar div { + background-image: url("img/editing_tool_bar.png"); + background-repeat: no-repeat; + margin: 0 0 5px 5px; + width: 24px; + height: 22px; + cursor: pointer } /* positions */ .olControlEditingToolbar { - right: 0; - top: 0; + right: 0; + top: 0; } + .olControlNavToolbar { - top: 295px; - left: 9px; + top: 295px; + left: 9px; } /* layouts */ .olControlEditingToolbar div { - float: right; + float: right; } /* individual controls */ -.olControlNavToolbar .olControlNavigationItemInactive, -.olControlEditingToolbar .olControlNavigationItemInactive { - background-position: -103px -1px; +.olControlNavToolbar .olControlNavigationItemInactive,.olControlEditingToolbar .olControlNavigationItemInactive + { + background-position: -103px -1px; } -.olControlNavToolbar .olControlNavigationItemActive , -.olControlEditingToolbar .olControlNavigationItemActive { - background-position: -103px -24px; + +.olControlNavToolbar .olControlNavigationItemActive,.olControlEditingToolbar .olControlNavigationItemActive + { + background-position: -103px -24px; } + .olControlNavToolbar .olControlZoomBoxItemInactive { - background-position: -128px -1px; + background-position: -128px -1px; } -.olControlNavToolbar .olControlZoomBoxItemActive { - background-position: -128px -24px; + +.olControlNavToolbar .olControlZoomBoxItemActive { + background-position: -128px -24px; } + .olControlEditingToolbar .olControlDrawFeaturePointItemInactive { - background-position: -77px -1px; + background-position: -77px -1px; } + .olControlEditingToolbar .olControlDrawFeaturePointItemActive { - background-position: -77px -24px; + background-position: -77px -24px; } + .olControlEditingToolbar .olControlDrawFeaturePathItemInactive { - background-position: -51px -1px; + background-position: -51px -1px; } + .olControlEditingToolbar .olControlDrawFeaturePathItemActive { - background-position: -51px -24px; + background-position: -51px -24px; } -.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive{ - background-position: -26px -1px; + +.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive { + background-position: -26px -1px; } + .olControlEditingToolbar .olControlDrawFeaturePolygonItemActive { - background-position: -26px -24px; + background-position: -26px -24px; } div.olControlZoom { - position: absolute; - top: 8px; - left: 8px; - background: rgba(255,255,255,0.4); - border-radius: 4px; - padding: 2px; + position: absolute; + top: 8px; + left: 8px; + background: rgba(255, 255, 255, 0.4); + border-radius: 4px; + padding: 2px; } + div.olControlZoom a { - display: block; - margin: 1px; - padding: 0; - color: white; - font-size: 18px; - font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif; - font-weight: bold; - text-decoration: none; - text-align: center; - height: 22px; - width:22px; - line-height: 19px; - background: #130085; /* fallback for IE - IE6 requires background shorthand*/ - background: rgba(0, 60, 136, 0.5); - filter: alpha(opacity=80); + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 18px; + font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, + sans-serif; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 22px; + width: 22px; + line-height: 19px; + background: #130085; + /* fallback for IE - IE6 requires background shorthand*/ + background: rgba(0, 60, 136, 0.5); + filter: alpha(opacity = 80); } + div.olControlZoom a:hover { - background: #130085; /* fallback for IE */ - background: rgba(0, 60, 136, 0.7); - filter: alpha(opacity=100); + background: #130085; /* fallback for IE */ + background: rgba(0, 60, 136, 0.7); + filter: alpha(opacity = 100); } + @media only screen and (max-width: 600px) { - div.olControlZoom a:hover { - background: rgba(0, 60, 136, 0.5); - } + div.olControlZoom a:hover { + background: rgba(0, 60, 136, 0.5); + } } + a.olControlZoomIn { - border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; } + a.olControlZoomOut { - border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; } - /** * Animations */ - .olLayerGrid .olTileImage { - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; -} + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.mobile.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.mobile.css index 2d4d392..caa3763 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.mobile.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.mobile.css @@ -1,53 +1,61 @@ div.olControlZoom { - position: absolute; - top: 8px; - left: 8px; - background: rgba(255,255,255,0.4); - border-radius: 4px; - padding: 2px; + position: absolute; + top: 8px; + left: 8px; + background: rgba(255, 255, 255, 0.4); + border-radius: 4px; + padding: 2px; } + * { - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + div.olControlZoom a { - display: block; - margin: 1px; - padding: 0; - color: white; - font-size: 28px; - font-family: sans-serif; - font-weight: bold; - text-decoration: none; - text-align: center; - height: 32px; - width: 32px; - line-height: 28px; - text-shadow: 0 0 3px rgba(0,0,0,0.8); - background: #130085; /* fallback for IE - IE6 requires background shorthand*/ - background: rgba(0, 60, 136, 0.5); - filter: alpha(opacity=80); + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 28px; + font-family: sans-serif; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 32px; + width: 32px; + line-height: 28px; + text-shadow: 0 0 3px rgba(0, 0, 0, 0.8); + background: #130085; + /* fallback for IE - IE6 requires background shorthand*/ + background: rgba(0, 60, 136, 0.5); + filter: alpha(opacity = 80); } + a.olControlZoomIn { - border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; } + a.olControlZoomOut { - border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; } + div.olControlZoom a:hover { - background: #130085; /* fallback for IE */ - background: rgba(0, 60, 136, 0.7); - filter: alpha(opacity=100); + background: #130085; /* fallback for IE */ + background: rgba(0, 60, 136, 0.7); + filter: alpha(opacity = 100); } + @media only screen and (max-width: 600px) { - div.olControlZoom a:hover { - background: rgba(0, 60, 136, 0.5); - } + div.olControlZoom a:hover { + background: rgba(0, 60, 136, 0.5); + } } + .olLayerGrid .olTileImage { - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; } /* Enable 3d acceleration when operating on tiles, this is known to yield better performance on IOS Safari. @@ -56,8 +64,8 @@ div.olControlZoom a:hover { It also prevents tile blinking effects in iOS 5. See https://github.com/openlayers/openlayers/issues/511 */ -@media (-webkit-transform-3d) { -img.olTileImage { - -webkit-transform: translate3d(0, 0, 0); -} -} +@media ( -webkit-transform-3d ) { + img.olTileImage { + -webkit-transform: translate3d(0, 0, 0); + } +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.mobile.tidy.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.mobile.tidy.css index 10b8bff..a78d2f2 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.mobile.tidy.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.mobile.tidy.css @@ -1 +1,62 @@ -div.olControlZoom{position:absolute;top:8px;left:8px;background:rgba(255,255,255,0.4);border-radius:4px;padding:2px;}*{-webkit-tap-highlight-color:rgba(0,0,0,0);}div.olControlZoom a{display:block;color:#FFF;font-size:28px;font-family:sans-serif;font-weight:700;text-decoration:none;text-align:center;height:32px;width:32px;line-height:28px;text-shadow:0 0 3px rgba(0,0,0,0.8);background:rgba(0,60,136,0.5);filter:alpha(opacity=80);margin:1px;padding:0;}a.olControlZoomIn{border-radius:4px 4px 0 0;}a.olControlZoomOut{border-radius:0 0 4px 4px;}div.olControlZoom a:hover{background:rgba(0,60,136,0.7);filter:alpha(opacity=100);}.olLayerGrid .olTileImage{-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear;}@media only screen and max-width 600px{div.olControlZoom a:hover{background:rgba(0,60,136,0.5);}}@media -webkit-transform-3d{img.olTileImage{-webkit-transform:translate3d(0,0,0);}} \ No newline at end of file +div.olControlZoom { + position: absolute; + top: 8px; + left: 8px; + background: rgba(255, 255, 255, 0.4); + border-radius: 4px; + padding: 2px; +} + +* { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +div.olControlZoom a { + display: block; + color: #FFF; + font-size: 28px; + font-family: sans-serif; + font-weight: 700; + text-decoration: none; + text-align: center; + height: 32px; + width: 32px; + line-height: 28px; + text-shadow: 0 0 3px rgba(0, 0, 0, 0.8); + background: rgba(0, 60, 136, 0.5); + filter: alpha(opacity = 80); + margin: 1px; + padding: 0; +} + +a.olControlZoomIn { + border-radius: 4px 4px 0 0; +} + +a.olControlZoomOut { + border-radius: 0 0 4px 4px; +} + +div.olControlZoom a:hover { + background: rgba(0, 60, 136, 0.7); + filter: alpha(opacity = 100); +} + +.olLayerGrid .olTileImage { + -webkit-transition: opacity .2s linear; + -moz-transition: opacity .2s linear; + -o-transition: opacity .2s linear; + transition: opacity .2s linear; +} + +@media only screen and max-width 600px { + div.olControlZoom a:hover { + background: rgba(0, 60, 136, 0.5); + } +} + +@media -webkit-transform-3d { + img.olTileImage { + -webkit-transform: translate3d(0, 0, 0); + } +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.tidy.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.tidy.css index 0368055..edd3415 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.tidy.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.12/theme/default/style.tidy.css @@ -1 +1,481 @@ -div.olMap{z-index:0;cursor:default;margin:0!important;padding:0!important;}div.olMapViewport{text-align:left;}.olLayerGoogleCopyright{left:2px;bottom:2px;}.olLayerGoogleV3.olLayerGoogleCopyright{right:auto!important;}.olLayerGooglePoweredBy{left:2px;bottom:15px;}.olLayerGoogleV3.olLayerGooglePoweredBy{bottom:15px!important;}.olControlAttribution{font-size:smaller;right:3px;bottom:4.5em;position:absolute;display:block;}.olControlScale{right:3px;bottom:3em;display:block;position:absolute;font-size:smaller;}.olControlScaleLine{display:block;position:absolute;left:10px;bottom:15px;font-size:xx-small;}.olControlScaleLineBottom{border:solid 2px #000;border-bottom:none;margin-top:-2px;text-align:center;}.olControlScaleLineTop{border:solid 2px #000;border-top:none;text-align:center;}.olControlPermalink{right:3px;bottom:1.5em;display:block;position:absolute;font-size:smaller;}div.olControlMousePosition{bottom:0;right:3px;display:block;position:absolute;font-family:Arial;font-size:smaller;}.olControlOverviewMapContainer{position:absolute;bottom:0;right:0;}.olControlOverviewMapElement{background-color:#00008B;-moz-border-radius:1em 0 0;padding:10px 18px 10px 10px;}.olControlOverviewMapMinimizeButton,.olControlOverviewMapMaximizeButton{height:18px;width:18px;right:0;bottom:80px;cursor:pointer;}.olControlOverviewMapExtentRectangle{overflow:hidden;background-image:url(img/blank.gif);cursor:move;border:2px dotted red;}.olControlOverviewMapRectReplacement{overflow:hidden;cursor:move;background-image:url(img/overview_replacement.gif);background-repeat:no-repeat;background-position:center;}.olLayerGeoRSSDescription{float:left;width:100%;overflow:auto;font-size:1em;}.olLayerGeoRSSClose{float:right;color:gray;font-size:1.2em;margin-right:6px;font-family:sans-serif;}.olLayerGeoRSSTitle{float:left;font-size:1.2em;}.olControlNavigationHistory{background-image:url(img/navigation_history.png);background-repeat:no-repeat;width:24px;height:24px;}.olControlNavigationHistoryPreviousItemActive{background-position:0 0;}.olControlNavigationHistoryPreviousItemInactive{background-position:0 -24px;}.olControlNavigationHistoryNextItemActive{background-position:-24px 0;}.olControlNavigationHistoryNextItemInactive{background-position:-24px -24px;}div.olControlSaveFeaturesItemActive{background-image:url(img/save_features_on.png);background-repeat:no-repeat;background-position:0 1px;}div.olControlSaveFeaturesItemInactive{background-image:url(img/save_features_off.png);background-repeat:no-repeat;background-position:0 1px;}.olHandlerBoxZoomBox{border:2px solid red;position:absolute;background-color:#FFF;opacity:.5;font-size:1px;filter:alpha(opacity=50);}.olHandlerBoxSelectFeature{border:2px solid blue;position:absolute;background-color:#FFF;opacity:.5;font-size:1px;filter:alpha(opacity=50);}.olControlPanPanel{top:10px;left:5px;}.olControlPanPanel div{background-image:url(img/pan-panel.png);height:18px;width:18px;cursor:pointer;position:absolute;}.olControlPanPanel .olControlPanNorthItemInactive{top:0;left:9px;background-position:0 0;}.olControlPanPanel .olControlPanSouthItemInactive{top:36px;left:9px;background-position:18px 0;}.olControlPanPanel .olControlPanWestItemInactive{position:absolute;top:18px;left:0;background-position:0 18px;}.olControlPanPanel .olControlPanEastItemInactive{top:18px;left:18px;background-position:18px 18px;}.olControlZoomPanel{top:71px;left:14px;}.olControlZoomPanel div{background-image:url(img/zoom-panel.png);position:absolute;height:18px;width:18px;cursor:pointer;}.olControlZoomPanel .olControlZoomInItemInactive{top:0;left:0;background-position:0 0;}.olControlZoomPanel .olControlZoomToMaxExtentItemInactive{top:18px;left:0;background-position:0 -18px;}.olControlZoomPanel .olControlZoomOutItemInactive{top:36px;left:0;background-position:0 18px;}.olControlPanZoomBar div{font-size:1px;}.olPopupCloseBox{background:url(img/close.gif) no-repeat;cursor:pointer;}.olImageLoadError{background-color:#FFC0CB;opacity:.5;filter:alpha(opacity=50);}.olCursorWait{cursor:wait;}.olDrawBox{cursor:crosshair;}.olControlDragFeatureActive.olControlDragFeatureOver.olDragDown{cursor:0;}.olControlLayerSwitcher{position:absolute;top:25px;right:0;width:20em;font-family:sans-serif;font-weight:700;margin-top:3px;margin-left:3px;margin-bottom:3px;font-size:smaller;color:#FFF;background-color:transparent;}.olControlLayerSwitcher .layersDiv{background-color:#00008B;padding:5px 10px;}.olControlLayerSwitcher .layersDiv .baseLbl,.olControlLayerSwitcher .layersDiv .dataLbl{margin-top:3px;margin-left:3px;margin-bottom:3px;}.olControlLayerSwitcher .layersDiv .baseLayersDiv,.olControlLayerSwitcher .layersDiv .dataLayersDiv{padding-left:10px;}.olControlLayerSwitcher .maximizeDiv,.olControlLayerSwitcher .minimizeDiv{width:18px;height:18px;top:5px;right:0;cursor:pointer;}.olBingAttribution{color:#DDD;}span.olGoogleAttribution a{color:#77C;}.olControlNavToolbar,.olControlEditingToolbar{margin:5px 5px 0 0;}.olControlNavToolbar div,.olControlEditingToolbar div{background-image:url(img/editing_tool_bar.png);background-repeat:no-repeat;width:24px;height:22px;cursor:pointer;margin:0 0 5px 5px;}.olControlEditingToolbar{right:0;top:0;}.olControlNavToolbar{top:295px;left:9px;}.olControlEditingToolbar div{float:right;}.olControlNavToolbar .olControlNavigationItemInactive,.olControlEditingToolbar .olControlNavigationItemInactive{background-position:-103px -1px;}.olControlNavToolbar .olControlNavigationItemActive,.olControlEditingToolbar .olControlNavigationItemActive{background-position:-103px -24px;}.olControlNavToolbar .olControlZoomBoxItemInactive{background-position:-128px -1px;}.olControlNavToolbar .olControlZoomBoxItemActive{background-position:-128px -24px;}.olControlEditingToolbar .olControlDrawFeaturePointItemInactive{background-position:-77px -1px;}.olControlEditingToolbar .olControlDrawFeaturePointItemActive{background-position:-77px -24px;}.olControlEditingToolbar .olControlDrawFeaturePathItemInactive{background-position:-51px -1px;}.olControlEditingToolbar .olControlDrawFeaturePathItemActive{background-position:-51px -24px;}.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive{background-position:-26px -1px;}.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive{background-position:-26px -24px;}div.olControlZoom{position:absolute;top:8px;left:8px;background:rgba(255,255,255,0.4);border-radius:4px;padding:2px;}div.olControlZoom a{display:block;color:#FFF;font-size:18px;font-family:'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif;font-weight:700;text-decoration:none;text-align:center;height:22px;width:22px;line-height:19px;background:rgba(0,60,136,0.5);filter:alpha(opacity=80);margin:1px;padding:0;}div.olControlZoom a:hover{background:rgba(0,60,136,0.7);filter:alpha(opacity=100);}a.olControlZoomIn{border-radius:4px 4px 0 0;}a.olControlZoomOut{border-radius:0 0 4px 4px;}.olLayerGrid .olTileImage{-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear;}div.olLayerDiv,.olControlNoSelect{-khtml-user-select:none;-moz-user-select:none;}.olPopupContent,.olFramedCloudPopupContent{overflow:auto;padding:5px;}.olDragDown,.olControlDragFeatureOver{cursor:move;}.olBingAttribution.road,.olGoogleAttribution{color:#333;}.olGoogleAttribution.hybrid,.olGoogleAttribution.satellite,span.olGoogleAttribution.hybrid a,span.olGoogleAttribution.satellite a{color:#EEE;}@media only screen and max-width 600px{div.olControlZoom a:hover{background:rgba(0,60,136,0.5);}} \ No newline at end of file +div.olMap { + z-index: 0; + cursor: default; + margin: 0 !important; + padding: 0 !important; +} + +div.olMapViewport { + text-align: left; +} + +.olLayerGoogleCopyright { + left: 2px; + bottom: 2px; +} + +.olLayerGoogleV3.olLayerGoogleCopyright { + right: auto !important; +} + +.olLayerGooglePoweredBy { + left: 2px; + bottom: 15px; +} + +.olLayerGoogleV3.olLayerGooglePoweredBy { + bottom: 15px !important; +} + +.olControlAttribution { + font-size: smaller; + right: 3px; + bottom: 4.5em; + position: absolute; + display: block; +} + +.olControlScale { + right: 3px; + bottom: 3em; + display: block; + position: absolute; + font-size: smaller; +} + +.olControlScaleLine { + display: block; + position: absolute; + left: 10px; + bottom: 15px; + font-size: xx-small; +} + +.olControlScaleLineBottom { + border: solid 2px #000; + border-bottom: none; + margin-top: -2px; + text-align: center; +} + +.olControlScaleLineTop { + border: solid 2px #000; + border-top: none; + text-align: center; +} + +.olControlPermalink { + right: 3px; + bottom: 1.5em; + display: block; + position: absolute; + font-size: smaller; +} + +div.olControlMousePosition { + bottom: 0; + right: 3px; + display: block; + position: absolute; + font-family: Arial; + font-size: smaller; +} + +.olControlOverviewMapContainer { + position: absolute; + bottom: 0; + right: 0; +} + +.olControlOverviewMapElement { + background-color: #00008B; + -moz-border-radius: 1em 0 0; + padding: 10px 18px 10px 10px; +} + +.olControlOverviewMapMinimizeButton,.olControlOverviewMapMaximizeButton + { + height: 18px; + width: 18px; + right: 0; + bottom: 80px; + cursor: pointer; +} + +.olControlOverviewMapExtentRectangle { + overflow: hidden; + background-image: url(img/blank.gif); + cursor: move; + border: 2px dotted red; +} + +.olControlOverviewMapRectReplacement { + overflow: hidden; + cursor: move; + background-image: url(img/overview_replacement.gif); + background-repeat: no-repeat; + background-position: center; +} + +.olLayerGeoRSSDescription { + float: left; + width: 100%; + overflow: auto; + font-size: 1em; +} + +.olLayerGeoRSSClose { + float: right; + color: gray; + font-size: 1.2em; + margin-right: 6px; + font-family: sans-serif; +} + +.olLayerGeoRSSTitle { + float: left; + font-size: 1.2em; +} + +.olControlNavigationHistory { + background-image: url(img/navigation_history.png); + background-repeat: no-repeat; + width: 24px; + height: 24px; +} + +.olControlNavigationHistoryPreviousItemActive { + background-position: 0 0; +} + +.olControlNavigationHistoryPreviousItemInactive { + background-position: 0 -24px; +} + +.olControlNavigationHistoryNextItemActive { + background-position: -24px 0; +} + +.olControlNavigationHistoryNextItemInactive { + background-position: -24px -24px; +} + +div.olControlSaveFeaturesItemActive { + background-image: url(img/save_features_on.png); + background-repeat: no-repeat; + background-position: 0 1px; +} + +div.olControlSaveFeaturesItemInactive { + background-image: url(img/save_features_off.png); + background-repeat: no-repeat; + background-position: 0 1px; +} + +.olHandlerBoxZoomBox { + border: 2px solid red; + position: absolute; + background-color: #FFF; + opacity: .5; + font-size: 1px; + filter: alpha(opacity = 50); +} + +.olHandlerBoxSelectFeature { + border: 2px solid blue; + position: absolute; + background-color: #FFF; + opacity: .5; + font-size: 1px; + filter: alpha(opacity = 50); +} + +.olControlPanPanel { + top: 10px; + left: 5px; +} + +.olControlPanPanel div { + background-image: url(img/pan-panel.png); + height: 18px; + width: 18px; + cursor: pointer; + position: absolute; +} + +.olControlPanPanel .olControlPanNorthItemInactive { + top: 0; + left: 9px; + background-position: 0 0; +} + +.olControlPanPanel .olControlPanSouthItemInactive { + top: 36px; + left: 9px; + background-position: 18px 0; +} + +.olControlPanPanel .olControlPanWestItemInactive { + position: absolute; + top: 18px; + left: 0; + background-position: 0 18px; +} + +.olControlPanPanel .olControlPanEastItemInactive { + top: 18px; + left: 18px; + background-position: 18px 18px; +} + +.olControlZoomPanel { + top: 71px; + left: 14px; +} + +.olControlZoomPanel div { + background-image: url(img/zoom-panel.png); + position: absolute; + height: 18px; + width: 18px; + cursor: pointer; +} + +.olControlZoomPanel .olControlZoomInItemInactive { + top: 0; + left: 0; + background-position: 0 0; +} + +.olControlZoomPanel .olControlZoomToMaxExtentItemInactive { + top: 18px; + left: 0; + background-position: 0 -18px; +} + +.olControlZoomPanel .olControlZoomOutItemInactive { + top: 36px; + left: 0; + background-position: 0 18px; +} + +.olControlPanZoomBar div { + font-size: 1px; +} + +.olPopupCloseBox { + background: url(img/close.gif) no-repeat; + cursor: pointer; +} + +.olImageLoadError { + background-color: #FFC0CB; + opacity: .5; + filter: alpha(opacity = 50); +} + +.olCursorWait { + cursor: wait; +} + +.olDrawBox { + cursor: crosshair; +} + +.olControlDragFeatureActive.olControlDragFeatureOver.olDragDown { + cursor: 0; +} + +.olControlLayerSwitcher { + position: absolute; + top: 25px; + right: 0; + width: 20em; + font-family: sans-serif; + font-weight: 700; + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; + font-size: smaller; + color: #FFF; + background-color: transparent; +} + +.olControlLayerSwitcher .layersDiv { + background-color: #00008B; + padding: 5px 10px; +} + +.olControlLayerSwitcher .layersDiv .baseLbl,.olControlLayerSwitcher .layersDiv .dataLbl + { + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; +} + +.olControlLayerSwitcher .layersDiv .baseLayersDiv,.olControlLayerSwitcher .layersDiv .dataLayersDiv + { + padding-left: 10px; +} + +.olControlLayerSwitcher .maximizeDiv,.olControlLayerSwitcher .minimizeDiv + { + width: 18px; + height: 18px; + top: 5px; + right: 0; + cursor: pointer; +} + +.olBingAttribution { + color: #DDD; +} + +span.olGoogleAttribution a { + color: #77C; +} + +.olControlNavToolbar,.olControlEditingToolbar { + margin: 5px 5px 0 0; +} + +.olControlNavToolbar div,.olControlEditingToolbar div { + background-image: url(img/editing_tool_bar.png); + background-repeat: no-repeat; + width: 24px; + height: 22px; + cursor: pointer; + margin: 0 0 5px 5px; +} + +.olControlEditingToolbar { + right: 0; + top: 0; +} + +.olControlNavToolbar { + top: 295px; + left: 9px; +} + +.olControlEditingToolbar div { + float: right; +} + +.olControlNavToolbar .olControlNavigationItemInactive,.olControlEditingToolbar .olControlNavigationItemInactive + { + background-position: -103px -1px; +} + +.olControlNavToolbar .olControlNavigationItemActive,.olControlEditingToolbar .olControlNavigationItemActive + { + background-position: -103px -24px; +} + +.olControlNavToolbar .olControlZoomBoxItemInactive { + background-position: -128px -1px; +} + +.olControlNavToolbar .olControlZoomBoxItemActive { + background-position: -128px -24px; +} + +.olControlEditingToolbar .olControlDrawFeaturePointItemInactive { + background-position: -77px -1px; +} + +.olControlEditingToolbar .olControlDrawFeaturePointItemActive { + background-position: -77px -24px; +} + +.olControlEditingToolbar .olControlDrawFeaturePathItemInactive { + background-position: -51px -1px; +} + +.olControlEditingToolbar .olControlDrawFeaturePathItemActive { + background-position: -51px -24px; +} + +.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive { + background-position: -26px -1px; +} + +.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive { + background-position: -26px -24px; +} + +div.olControlZoom { + position: absolute; + top: 8px; + left: 8px; + background: rgba(255, 255, 255, 0.4); + border-radius: 4px; + padding: 2px; +} + +div.olControlZoom a { + display: block; + color: #FFF; + font-size: 18px; + font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, + sans-serif; + font-weight: 700; + text-decoration: none; + text-align: center; + height: 22px; + width: 22px; + line-height: 19px; + background: rgba(0, 60, 136, 0.5); + filter: alpha(opacity = 80); + margin: 1px; + padding: 0; +} + +div.olControlZoom a:hover { + background: rgba(0, 60, 136, 0.7); + filter: alpha(opacity = 100); +} + +a.olControlZoomIn { + border-radius: 4px 4px 0 0; +} + +a.olControlZoomOut { + border-radius: 0 0 4px 4px; +} + +.olLayerGrid .olTileImage { + -webkit-transition: opacity .2s linear; + -moz-transition: opacity .2s linear; + -o-transition: opacity .2s linear; + transition: opacity .2s linear; +} + +div.olLayerDiv,.olControlNoSelect { + -khtml-user-select: none; + -moz-user-select: none; +} + +.olPopupContent,.olFramedCloudPopupContent { + overflow: auto; + padding: 5px; +} + +.olDragDown,.olControlDragFeatureOver { + cursor: move; +} + +.olBingAttribution.road,.olGoogleAttribution { + color: #333; +} + +.olGoogleAttribution.hybrid,.olGoogleAttribution.satellite,span.olGoogleAttribution.hybrid a,span.olGoogleAttribution.satellite a + { + color: #EEE; +} + +@media only screen and max-width 600px { + div.olControlZoom a:hover { + background: rgba(0, 60, 136, 0.5); + } +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/panZoom.js b/geoportal_1/src/main/webapp/resources/javascript/panZoom.js index 392a3aa..8541c89 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/panZoom.js +++ b/geoportal_1/src/main/webapp/resources/javascript/panZoom.js @@ -1,15 +1,53 @@ -OpenLayers.Layer.WMS.prototype.getFullRequestString = function(newParams,altUrl) -{ - try{ - var projectionCode=typeof this.options.projection == 'undefined' ? this.map.getProjection() : this.options.projection; - }catch(err){ - var projectionCode=this.map.getProjection(); - } - this.params.SRS = projectionCode=="none" ? null : projectionCode; - - return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this,arguments); -}; + /** + * Function: createBackgroundImage + * Creates an img element with specific attribute values. + * + * Parameters: + * id - {String} The id field for the img. If none assigned one will be + * automatically generated. + * px - {} The left and top positions. + * sz - {} The style.width and style.height values. + * uiClass - {String} The css class that describes the div background + * position - {String} The style.position value. + * border - {String} The border to place around the image. + * opacity - {Float} Fractional value (0.0 - 1.0) + * delayDisplay - {Boolean} If true waits until the image has been + * loaded. + * + * Returns: + * {DOMElement} A DOM Image created with the specified attributes. + */ + OpenLayers.Util.createBackgroundImage = function(id, px, sz, uiClass, position, border, + opacity, delayDisplay) { + var bgimage = document.createElement("div"); + jQuery(bgimage).addClass(uiClass); + + //set generic properties + if (!id) { + id = OpenLayers.Util.createUniqueID("OpenLayersDiv"); + } + if (!position) { + position = "relative"; + } + OpenLayers.Util.modifyDOMElement(bgimage, id, px, sz, position, + border, null, opacity); + + if(delayDisplay) { + bgimage.style.display = "none"; + OpenLayers.Event.observe(bgimage, "load", + OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, bgimage)); + OpenLayers.Event.observe(bgimage, "error", + OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, bgimage)); + + } + + //set special properties + bgimage.style.alt = id; + bgimage.galleryImg = "no"; + + return bgimage; + }; /** * Function: onImageLoadError */ @@ -165,11 +203,11 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, this.draw(); }, /** - * Method: _addButton + * Method: _addButtonDiv * * Parameters: * id - {String} - * img - {String} + * uiClass - {String} * xy - {} * sz - {} * @@ -177,20 +215,39 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, * {DOMElement} A Div (an alphaImageDiv, to be precise) that contains the * image of the button, and has all the proper event handlers set. */ - _addButton:function(id, img, xy, sz) { - var btn = OpenLayers.Util.createAlphaImageDiv( - this.id + "_" + id, - xy, sz, this.imgLocation + img, "absolute"); + _addButtonDiv:function(id, uiClass, xy, sz) { + // this._addButtonDiv("zoomin", "zoomPlus", centered2.add(3, sz2.h*3), sz2); + var btn = OpenLayers.Util.createDiv(); + var bgimage = OpenLayers.Util.createBackgroundImage(this.id + "_" + id, + xy, sz, uiClass, "absolute"); + btn.appendChild(bgimage); + + + OpenLayers.Util.modifyDOMElement(btn, id, xy, sz, "static", + null, null, 1); + + var innerDiv = btn.childNodes[0]; + OpenLayers.Util.modifyDOMElement(innerDiv, btn.id + "_innerImage", null, sz, + "absolute", null); + btn.style.cursor = "pointer"; //we want to add the outer div this.div.appendChild(btn); btn.action = id; btn.className = "olButton"; - + OpenLayers.Event.observe(btn, "mousedown", + OpenLayers.Function.bindAsEventListener(this.buttonDown, btn)); + OpenLayers.Event.observe(btn, "dblclick", + OpenLayers.Function.bindAsEventListener(this.doubleClick, btn)); + OpenLayers.Event.observe(btn, "click", + OpenLayers.Function.bindAsEventListener(this.doubleClick, btn)); + btn.action = id; + btn.map = this.map; //we want to remember/reference the outer div this.buttons.push(btn); return btn; }, + /** * Method: draw * @@ -208,7 +265,7 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, var sz = new OpenLayers.Size(9,13); var szNS = new OpenLayers.Size(13,9); - var sz2 = new OpenLayers.Size(18,20); + var sz2 = new OpenLayers.Size(24,20); var centered = new OpenLayers.Pixel(px.x+sz.w/2, px.y); var centered2 = new OpenLayers.Pixel(px.x+sz2.w/2, px.y); @@ -228,9 +285,10 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, } this._addButton("panright", "east-mini.png", px.add(28, 15)); this._addButton("pandown", "south-mini.png", px.add(15, 28));*/ - this._addButton("zoomin", "zoom-plus-mini.png", centered2.add(3, sz2.h*3), sz2); + this._addButtonDiv("zoomin", "zoomPlus", centered2.add(3, sz2.h*3), sz2); centered2 = this._addZoomBar(centered2.add(3, sz2.h*4)); - this._addButton("zoomout", "zoom-minus-mini.png", centered2, sz2); + this._addButtonDiv("zoomout", "zoomMinus", centered2, new OpenLayers.Size(24,25)); + return this.div; }, @@ -245,11 +303,12 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, var id = this.id + "_" + this.map.id; var zoomsToEnd = this.map.getNumZoomLevels() - 1 - this.map.getZoom(); - var slider = OpenLayers.Util.createAlphaImageDiv(id, - centered.add(2, zoomsToEnd * this.zoomStopHeight +4), - new OpenLayers.Size(14,7), - this.imgLocation+"slider.png", + var slider = OpenLayers.Util.createBackgroundImage(id, + centered.add(2, zoomsToEnd * this.zoomStopHeight + 6), + new OpenLayers.Size(12,10), + "zoomSlider", "absolute"); + this.slider = slider; this.sliderEvents = new OpenLayers.Events(this, slider, null, true, @@ -264,24 +323,24 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, var sz = new OpenLayers.Size(); sz.h = this.zoomStopHeight * this.map.getNumZoomLevels(); - sz.w = 7;//this.zoomStopWidth; + sz.w = 13;//this.zoomStopWidth; var div = null; - if (OpenLayers.Util.alphaHack()) { + // if (OpenLayers.Util.alphaHack()) { var id = this.id + "_" + this.map.id; - div = OpenLayers.Util.createAlphaImageDiv(id, centered, + div = OpenLayers.Util.createBackgroundImage(id, centered.add(5,0), new OpenLayers.Size(sz.w, this.zoomStopHeight), - this.imgLocation + "slider_bar.png", + "zoomSlideBar", "absolute", null, "crop"); div.style.height = sz.h + "px"; - } else { + /*} else { div = OpenLayers.Util.createDiv( 'OpenLayers_Control_PanZoomBar_Zoombar' + this.map.id, centered.add(6,0), sz, this.imgLocation+"slider_bar.png"); - } + }*/ this.zoombarDiv = div; diff --git a/geoportal_1/src/main/webapp/resources/javascript/require.js b/geoportal_1/src/main/webapp/resources/javascript/require.js new file mode 100644 index 0000000..7ff409d --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/require.js @@ -0,0 +1,36 @@ +/* + RequireJS 2.1.8 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. + Available via the MIT or new BSD license. + see: http://github.com/jrburke/requirejs for details +*/ +var requirejs,require,define; +(function(Z){function H(b){return"[object Function]"===L.call(b)}function I(b){return"[object Array]"===L.call(b)}function y(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(H(m)){if(this.events.error&&this.map.isDefine||j.onError!==aa)try{e=i.execCb(c,m,b,e)}catch(d){a=d}else e=i.execCb(c,m,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!== +this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",v(this.error=a)}else e=m;this.exports=e;if(this.map.isDefine&&!this.ignore&&(r[c]=e,j.onResourceLoad))j.onResourceLoad(i,this.map,this.depMaps);x(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete= +!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=n(a.prefix);this.depMaps.push(d);t(d,"defined",u(this,function(e){var m,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,h=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,!0)})||""),e=n(a.prefix+"!"+d,this.map.parentMap),t(e,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})), +d=l(p,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else m=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),m.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];F(p,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&x(a.map.id)});v(a)}),m.fromText=u(this,function(e,c){var d=a.name,g=n(d),B=O;c&&(e=c);B&&(O=!1);q(g);s(k.config,b)&&(k.config[d]=k.config[b]);try{j.exec(e)}catch(ca){return v(A("fromtexteval", +"fromText eval for "+b+" failed: "+ca,ca,[b]))}B&&(O=!0);this.depMaps.push(g);i.completeLoad(d);h([d],m)}),e.load(a.name,h,m,k)}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){T[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,u(this,function(a,b){var c,e;if("string"===typeof a){a=n(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=l(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;t(a,"defined",u(this,function(a){this.defineDep(b, +a);this.check()}));this.errback&&t(a,"error",u(this,this.errback))}c=a.id;e=p[c];!s(N,c)&&(e&&!e.enabled)&&i.enable(a,this)}));F(this.pluginMaps,u(this,function(a){var b=l(p,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:k,contextName:b,registry:p,defined:r,urlFetched:S,defQueue:G,Module:X,makeModuleMap:n, +nextTick:j.nextTick,onError:v,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=k.pkgs,c=k.shim,e={paths:!0,config:!0,map:!0};F(a,function(a,b){e[b]?"map"===b?(k.map||(k.map={}),Q(k[b],a,!0,!0)):Q(k[b],a,!0):k[b]=a});a.shim&&(F(a.shim,function(a,b){I(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);c[b]=a}),k.shim=c);a.packages&&(y(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name, +location:a.location||a.name,main:(a.main||"main").replace(ja,"").replace(ea,"")}}),k.pkgs=b);F(p,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=n(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(Z,arguments));return b||a.exports&&ba(a.exports)}},makeRequire:function(a,f){function d(e,c,h){var g,k;f.enableBuildCallback&&(c&&H(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(H(c))return v(A("requireargs", +"Invalid require call"),h);if(a&&s(N,e))return N[e](p[a.id]);if(j.get)return j.get(i,e,a,d);g=n(e,a,!1,!0);g=g.id;return!s(r,g)?v(A("notloaded",'Module name "'+g+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[g]}K();i.nextTick(function(){K();k=q(n(null,a));k.skipMap=f.skipMap;k.init(e,c,h,{enabled:!0});C()});return d}f=f||{};Q(d,{isBrowser:z,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==f&&(!("."===g||".."===g)||1h.attachEvent.toString().indexOf("[native code"))&&!W?(O=!0,h.attachEvent("onreadystatechange",b.onScriptLoad)):(h.addEventListener("load",b.onScriptLoad,!1),h.addEventListener("error", +b.onScriptError,!1)),h.src=d,K=h,C?x.insertBefore(h,C):x.appendChild(h),K=null,h;if(da)try{importScripts(d),b.completeLoad(c)}catch(l){b.onError(A("importscripts","importScripts failed for "+c+" at "+d,l,[c]))}};z&&M(document.getElementsByTagName("script"),function(b){x||(x=b.parentNode);if(J=b.getAttribute("data-main"))return q=J,t.baseUrl||(D=q.split("/"),q=D.pop(),fa=D.length?D.join("/")+"/":"./",t.baseUrl=fa),q=q.replace(ea,""),j.jsExtRegExp.test(q)&&(q=J),t.deps=t.deps?t.deps.concat(q):[q],!0}); +define=function(b,c,d){var h,j;"string"!==typeof b&&(d=c,c=b,b=null);I(c)||(d=c,c=null);!c&&H(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(h=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),h=P;h&&(b||(b=h.getAttribute("data-requiremodule")),j=E[h.getAttribute("data-requirecontext")])}(j?j.defQueue: +R).push([b,c,d])};define.amd={jQuery:!0};j.exec=function(b){return eval(b)};j(t)}})(this); diff --git a/geoportal_1/src/main/webapp/resources/javascript/spinners/README.md b/geoportal_1/src/main/webapp/resources/javascript/spinners/README.md new file mode 100755 index 0000000..ece9448 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/spinners/README.md @@ -0,0 +1,119 @@ +Spinners +======= + +Spinners is a JavaScript library that creates pixel-perfect cross-browser loading icons through Canvas. Written for use in [Lightview][1] and [Tipped][2], feel free to use it in your own projects. + +Demo (GUI): http://projects.nickstakenburg.com/spinners + + +## Installation + +Spinners is based on jQuery, it also requires [ExplorerCanvas][3] to work in Internet Explorer 8 and below, include both scripts above Spinners. + + + + + + + + +## Usage + +Spinners can be created using a DOM Node or a CSS Selector. Spinners start out in a paused state because animation takes up a small amount of browser resources, because of this it's recommended to only animate spinners when they are visible. + + var spinner = Spinners.create(document.getElementById('mySpinner')).play(); // will start the animation + spinner.pause(); // pauses the spinner + + // multiple spinners using a CSS Selector + var spinners = Spinners.create('.loading').play(); + spinners.pause(); + +Options can be used to customize the spinners: + + Spinners.create('.loading', { + radius: 22, + dashes: 30, + width: 2.5, + height: 10, + opacity: 1, + padding: 3, + rotation: 600, + color: '#000000' + }).play(); + + +### Collections + +`Spinners.create` returns a Collection object that controls a number of spinners. + + var spinners = Spinners.create('.loading'); + spinners.play(); + +Spinners created using `Spinners.create` can be retrieved using `Spinners.get`, this removes the need to store the Collection. + + Spinners.create('.loading'); + Spinners.get('.loading').pause(); + + +### Controls + +The methods `play`, `pause`, `stop`, `toggle` and `remove` are available on Collections returned by `Spinners.create` and `Spinners.get`. + + Spinners.create('.loading').play(); + Spinners.get('.loading').pause(); + Spinners.get('.loading').stop(); + Spinners.get('.loading').remove(); + Spinners.get(document.getElementById('mySpinner')).toggle(); + +They can also be used directly on the `Spinners` object using a CSS Selector or a DOM Node, this allows chaining on different Collections. + + Spinners.create('#first .loading').play(); + Spinners.create('#second .loading'); + + Spinners.play('#first .loading').pause('#second .loading'); + Spinners.remove('#first .loading').play('#second .loading'); + + Spinners.toggle(document.getElementById('mySpinner')); + + +### Positioning + +Options can be changed after initialization using `setOptions`. + + var spinners = Spinners.create('.loading'); + spinners.setOptions({ color: '#ff0000' }); + + +### Removal + +The `remove` method will remove the created spinners from the DOM. + + Spinners.get('.loading').remove(); + + +It might be easier to just remove elements from the DOM followed by a call to `Spinners.removeDetached`, this function is also called automatically each time a new spinner is created. + + // after deleting elements with spinners or doing some ajax updates + Spinners.removeDetached(); + + +### Positioning + +Use `center` to center the element that holds the spinner within its parent. This is done using absolute positioning, the parent element will be given `position:relative`. In this example #spinner will be given `position:absolute` and its parent `position:relative`. + + Spinners.create('#spinner').center().play(); + + +### Dimensions + +`Spinners.getDimensions` will return the dimensions of a created spinner. This could be useful when `center()` isn't used to position the spinner. + + var dimensions = Spinners.getDimensions(document.getElementById('mySpinner')); + // dimensions; //--> { width: 28, height: 28 } + + + [1]: http://projects.nickstakenburg.com/lightview + [2]: http://projects.nickstakenburg.com/tipped + [3]: http://explorercanvas.googlecode.com \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/spinners/excanvas/LICENSE b/geoportal_1/src/main/webapp/resources/javascript/spinners/excanvas/LICENSE new file mode 100755 index 0000000..d645695 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/spinners/excanvas/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/geoportal_1/src/main/webapp/resources/javascript/spinners/excanvas/excanvas.js b/geoportal_1/src/main/webapp/resources/javascript/spinners/excanvas/excanvas.js new file mode 100755 index 0000000..c30ea23 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/spinners/excanvas/excanvas.js @@ -0,0 +1,14 @@ +// Copyright 2006 Google Inc. +// +// 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. +document.createElement("canvas").getContext||function(){function C(){}function B(a){this.type_=a,this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0,this.colors_=[]}function A(a,b,c){!z(b)||(a.m_=b,c&&(a.lineScale_=f(e(b[0][0]*b[1][1]-b[0][1]*b[1][0]))))}function z(a){var b=0;for(;b<3;b++){var c=0;for(;c<2;c++)if(!isFinite(a[b][c])||isNaN(a[b][c]))return!1}return!0}function y(a,b,c,d){a.currentPath_.push({type:"bezierCurveTo",cp1x:b.x,cp1y:b.y,cp2x:c.x,cp2y:c.y,x:d.x,y:d.y}),a.currentX_=d.x,a.currentY_=d.y}function w(a){this.m_=r(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.fillStyle=this.strokeStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=g*1,this.globalAlpha=1,this.canvas=a;var b=a.ownerDocument.createElement("div");b.style.width=a.clientWidth+"px",b.style.height=a.clientHeight+"px",b.style.overflow="hidden",b.style.position="absolute",a.appendChild(b),this.element_=b,this.lineScale_=this.arcScaleY_=this.arcScaleX_=1}function v(a){switch(a){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function u(a){var b,c=1;a=String(a);if(a.substring(0,3)=="rgb"){var d=a.indexOf("(",3),e=a.indexOf(")",d+1),f=a.substring(d+1,e).split(",");b="#";var g=0;for(;g<3;g++)b+=o[Number(f[g])];f.length==4&&a.substr(3,1)=="a"&&(c=f[3])}else b=a;return{color:b,alpha:c}}function t(a,b){b.fillStyle=a.fillStyle,b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.lineWidth=a.lineWidth,b.miterLimit=a.miterLimit,b.shadowBlur=a.shadowBlur,b.shadowColor=a.shadowColor,b.shadowOffsetX=a.shadowOffsetX,b.shadowOffsetY=a.shadowOffsetY,b.strokeStyle=a.strokeStyle,b.globalAlpha=a.globalAlpha,b.arcScaleX_=a.arcScaleX_,b.arcScaleY_=a.arcScaleY_,b.lineScale_=a.lineScale_}function s(a,b){var c=r(),d=0;for(;d<3;d++){var e=0;for(;e<3;e++){var f=0,g=0;for(;g<3;g++)f+=a[d][g]*b[g][e];c[d][e]=f}}return c}function r(){return[[1,0,0],[0,1,0],[0,0,1]]}function n(a){var b=a.srcElement;b.firstChild&&(b.firstChild.style.width=b.clientWidth+"px",b.firstChild.style.height=b.clientHeight+"px")}function m(a){var b=a.srcElement;switch(a.propertyName){case"width":b.style.width=b.attributes.width.nodeValue+"px",b.getContext().clearRect();break;case"height":b.style.height=b.attributes.height.nodeValue+"px",b.getContext().clearRect()}}function k(a,b){var c=j.call(arguments,2);return function(){return a.apply(b,c.concat(j.call(arguments)))}}function i(){return this.context_||(this.context_=new w(this))}var a=Math,b=a.round,c=a.sin,d=a.cos,e=a.abs,f=a.sqrt,g=10,h=g/2,j=Array.prototype.slice,l={init:function(a){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var b=a||document;b.createElement("canvas"),b.attachEvent("onreadystatechange",k(this.init_,this,b))}},init_:function(a){a.namespaces.g_vml_||a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML"),a.namespaces.g_o_||a.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");if(!a.styleSheets.ex_canvas_){var b=a.createStyleSheet();b.owningElement.id="ex_canvas_",b.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=a.getElementsByTagName("canvas"),d=0;for(;d','",""),this.element_.insertAdjacentHTML("BeforeEnd",r.join(""))},x.stroke=function(c){var d=[],e=u(c?this.fillStyle:this.strokeStyle),f=e.color,h=e.alpha*this.globalAlpha;d.push("j.x)j.x=l.x;if(i.y==null||l.yj.y)j.y=l.y}}d.push(' ">');if(c)if(typeof this.fillStyle=="object"){var m=this.fillStyle,n=0,o={x:0,y:0},p=0,q=1;if(m.type_=="gradient"){var r=m.x1_/this.arcScaleX_,s=m.y1_/this.arcScaleY_,t=this.getCoords_(m.x0_/this.arcScaleX_,m.y0_/this.arcScaleY_),w=this.getCoords_(r,s);n=Math.atan2(w.x-t.x,w.y-t.y)*180/Math.PI,n<0&&(n+=360),n<1e-6&&(n=0)}else{var t=this.getCoords_(m.x0_,m.y0_),x=j.x-i.x,y=j.y-i.y;o={x:(t.x-i.x)/x,y:(t.y-i.y)/y},x/=this.arcScaleX_*g,y/=this.arcScaleY_*g;var z=a.max(x,y);p=2*m.r0_/z,q=2*m.r1_/z-p}var A=m.colors_;A.sort(function(a,b){return a.offset-b.offset});var B=A.length,C=A[0].color,D=A[B-1].color,E=A[0].alpha*this.globalAlpha,F=A[B-1].alpha*this.globalAlpha,G=[],k=0;for(;k')}else d.push('');else{var I=this.lineScale_*this.lineWidth;I<1&&(h*=I),d.push("')}d.push(""),this.element_.insertAdjacentHTML("beforeEnd",d.join(""))},x.fill=function(){this.stroke(!0)},x.closePath=function(){this.currentPath_.push({type:"close"})},x.getCoords_=function(a,b){var c=this.m_;return{x:g*(a*c[0][0]+b*c[1][0]+c[2][0])-h,y:g*(a*c[0][1]+b*c[1][1]+c[2][1])-h}},x.save=function(){var a={};t(this,a),this.aStack_.push(a),this.mStack_.push(this.m_),this.m_=s(r(),this.m_)},x.restore=function(){t(this.aStack_.pop(),this),this.m_=this.mStack_.pop()},x.translate=function(a,b){A(this,s([[1,0,0],[0,1,0],[a,b,1]],this.m_),!1)},x.rotate=function(a){var b=d(a),e=c(a);A(this,s([[b,e,0],[-e,b,0],[0,0,1]],this.m_),!1)},x.scale=function(a,b){this.arcScaleX_*=a,this.arcScaleY_*=b,A(this,s([[a,0,0],[0,b,0],[0,0,1]],this.m_),!0)},x.transform=function(a,b,c,d,e,f){A(this,s([[a,b,0],[c,d,0],[e,f,1]],this.m_),!0)},x.setTransform=function(a,b,c,d,e,f){A(this,[[a,b,0],[c,d,0],[e,f,1]],!0)},x.clip=function(){},x.arcTo=function(){},x.createPattern=function(){return new C},B.prototype.addColorStop=function(a,b){b=u(b),this.colors_.push({offset:a,color:b.color,alpha:b.alpha})},G_vmlCanvasManager=l,CanvasRenderingContext2D=w,CanvasGradient=B,CanvasPattern=C}(); diff --git a/geoportal_1/src/main/webapp/resources/javascript/spinners/spinners/spinners.js b/geoportal_1/src/main/webapp/resources/javascript/spinners/spinners/spinners.js new file mode 100755 index 0000000..4825bf2 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/spinners/spinners/spinners.js @@ -0,0 +1,637 @@ +/*! + * Spinners 3.0.0 + * (c) 2010-2012 Nick Stakenburg - http://www.nickstakenburg.com + * + * Spinners is freely distributable under the terms of an MIT-style license. + * + * GitHub: http://github.com/staaky/spinners + */ + +// TODO: Add background option that creates a ring, disabled by default: +// background: { color: '#fff', opacity: .5, padding: 3 } +// TODO: Only draw at 60fps for a more accurate rotation time, in some +// cases frames should be skipped. +// TODO: Add support for simple and complex gradients to the color option: +// color: ['#ff000', '#00ff00', '#0000ff'] +// color: [ +// { position: .0, color: '#ff0000', opacity: 1 }, +// { position: .75, color: '#00ff00', opacity: .5 }, +// { position: 1, color: '#0000ff', opacity: 0 } +// ] + +;var Spinners = { + version: '3.0.0' +}; + +(function($) { +// Helpers +var _ = { + scroll: function(array, distance) { + if (!distance) return array; + var first = array.slice(0, distance), + last = array.slice(distance, array.length); + return last.concat(first); + }, + + isElement: function(object) { + return object && object.nodeType == 1; + }, + + element: { + isAttached: (function() { + function findTopAncestor(element) { + var ancestor = element; + while(ancestor && ancestor.parentNode) { + ancestor = ancestor.parentNode; + } + return ancestor; + } + + return function(element) { + var topAncestor = findTopAncestor(element); + return !!(topAncestor && topAncestor.body); + }; + })() + } +}; + +function getOpacityArray(dashes) { + var step = 1 / dashes, array = []; + for (var i = 0;i')[0]; + return !!(canvas.getContext && canvas.getContext('2d')); + })() + }, + + init: function() { + // require (ex)canvas + if (!(this.support.canvas || + (!!window.G_vmlCanvasManager && + !!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1)))) { + return; + } + + // make sure excanvas is initialized + (window.G_vmlCanvasManager && window.G_vmlCanvasManager.init_(document)); + + this.enabled = true; + }, + + create: function(element, options) { + Collection.create(element, options); + return this.get(element); + }, + + get: function(element) { return new Collection(element); }, + + play: function(element) { this.get(element).play(); return this; }, + pause: function(element) { this.get(element).pause(); return this; }, + toggle: function(element) { this.get(element).toggle(); return this; }, + stop: function(element) { this.get(element).stop(); return this; }, + + remove: function(element) { this.get(element).remove(); return this; }, + + removeDetached: function(element) { + All.removeDetached(); + return this; + }, + + center: function(element) { this.get(element).center(); return this; }, + + setOptions: function(element, options) { + this.get(element).setOptions(options); + return this; + }, + + getDimensions: function(element) { + var spinner = All.get(element)[0], + diameter = spinner.getLayout().workspace.radius * 2; + + return { width: diameter, height: diameter }; + } +}); + + +// We keep track spinners so things can be cleanup up when elements leave the DOM +var All = { + spinners: [], + + get: function(element) { + if (!element) return; + var matched = []; + $.each(this.spinners, function(i, spinner) { + if (spinner && + (_.isElement(element) ? spinner.element == element : // element + $(spinner.element).is(element) // selector + )) { + matched.push(spinner); + } + }); + return matched; + }, + + add: function(spinner) { this.spinners.push(spinner); }, + + remove: function(element) { + $($.map(this.spinners, function(spinner, i) { + if (_.isElement(element) ? spinner.element == element : + $(spinner.element).is(element)) + return spinner.element; + })).each($.proxy(function(i, e) { + this.removeByElement(e); + }, this)); + }, + + removeByElement: function(element) { + var spinner = this.get(element)[0]; + if (spinner) { + spinner.remove(); + this.spinners = $.grep(this.spinners, function(s) { + return s.element != element; + }); + } + }, + + //remove all spinners that are not attached to the DOM + removeDetached: function() { + $.each(this.spinners, $.proxy(function(i, spinner) { + if (spinner && spinner.element && !_.element.isAttached(spinner.element)) + this.remove(spinner.element); + }, this)); + } +}; + + +/* + * Collection + */ +function Collection(element) { this.element = element; }; + +$.extend(Collection, { + create: function(element) { + if (!element) return; + var options = arguments[1] || {}, + spinners = []; + + if (_.isElement(element)) { + spinners.push(new Spinner(element, options)); + } + else { + // if it's not an element, assume selector + $(element).each(function(i, el) { + spinners.push(new Spinner(el, options)); + }); + } + + return spinners; + } +}); + +$.extend(Collection.prototype, { + items: function() { + return All.get(this.element); + }, + + play: function() { + $.each(this.items(), function(i, s) { s.play(); }); + return this; + }, + + stop: function() { + $.each(this.items(), function(i, s) { s.stop(); }); + return this; + }, + + pause: function() { + $.each(this.items(), function(i, s) { s.pause(); }); + return this; + }, + + toggle: function() { + $.each(this.items(), function(i, s) { s.toggle(); }); + return this; + }, + + center: function() { + $.each(this.items(), function(i, s) { s.center(); }); + return this; + }, + + setOptions: function(options) { + $.each(this.items(), function(i, s) { s.setOptions(options); }); + return this; + }, + + remove: function() { + All.remove(this.element); + return this; + } +}); + + +/* + * Spinner + */ +function Spinner(element) { + if (!element) return; + + this.element = element; + + All.remove(element); + All.removeDetached(); + + this._position = 0; + this._state = 'stopped'; + + this.setOptions($.extend({ + color: '#000', + dashes: 12, + radius: 5, + height: 5, + width: 1.8, + opacity: 1, + padding: 3, + rotation: 700 + }, arguments[1] || {})); + + this.drawPosition(0); + + All.add(this); +} +$.extend(Spinner.prototype, { + setOptions: function(options) { + this.options = $.extend({}, this.options, options || {}); + + // backwards compatibility with 2.0 + if (this.options.radii) { + var radii = this.options.radii; + this.options.radius = Math.min(radii[0], radii[1]); + this.options.height = Math.max(radii[0], radii[1]) - this.options.radius; + } + if (this.options.dashWidth) { + this.options.width = this.options.dashWidth; + } + if (this.options.speed) { + this.options.duration = this.options.speed * 1000; + } + + // make it safe to change options during play + var state = this._state, + position = this._position; + + // clear layout cache + this._layout = null; + + // rebuild + this.build(); + + if (position && position >= this.options.dashes -1) { + this._position = this.options.dashes - 1; + } + + switch (state) { + case 'playing': + this.play(); + break; + case 'paused': + case 'stopped': + this.drawPosition(this._position); + break; + } + + if (this._centered) this.center(); + }, + + remove: function() { + if (!this.canvas) return; + + this.pause(); // doesn't destroy position + + $(this.canvas).remove(); + + this.canvas = null; + this.ctx = null; + }, + + build: function() { + this.remove(); + + var radius = this.getLayout().workspace.radius; + + // IE bug: append canvas to the body before getting context + $(document.body).append(this.canvas = $('') + .attr({ width: radius * 2, height: radius * 2 }) + .css({ zoom: 1 }) + ); + + // init canvas + if (window.G_vmlCanvasManager) + G_vmlCanvasManager.initElement(this.canvas[0]); + + this.ctx = this.canvas[0].getContext('2d'); + this.ctx.globalAlpha = this.options.opacity; + + // IE: append to element after getting context + $(this.element).append(this.canvas); + + this.ctx.translate(radius, radius); + return this; + }, + + + /* + * Draw + */ + drawPosition: function(position) { + var workspace = this.getLayout().workspace, + opacities = _.scroll(workspace.opacities, position * -1), + radius = workspace.radius, + dashes = this.options.dashes, + rotation = radian(360 / dashes); + + this.ctx.clearRect(radius * -1, radius * -1, radius * 2, radius * 2); + + for (var i = 0, len = dashes; i < len; i++) { + this.drawDash(opacities[i], this.options.color); + this.ctx.rotate(rotation); + } + }, + + drawDash: function(opacity, color) { + this.ctx.fillStyle = Color.hex2fill(color, opacity); + + var layout = this.getLayout(), + workspaceRadius = layout.workspace.radius, + dashPosition = layout.dash.position, + dashDimensions = layout.dash.dimensions; + + Canvas.drawRoundedRectangle(this.ctx, { + top: dashPosition.top - workspaceRadius, + left: dashPosition.left - workspaceRadius, + width: dashDimensions.width, + height: dashDimensions.height, + radius: Math.min(dashDimensions.height, dashDimensions.width) / 2 + }); + }, + + _nextPosition: function() { + var ms = this.options.rotation / this.options.dashes; + this.nextPosition(); + this._playTimer = window.setTimeout($.proxy(this._nextPosition, this), ms); + }, + + nextPosition: function() { + if (this._position == this.options.dashes - 1) + this._position = -1; + this._position++; + this.drawPosition(this._position); + }, + + + /* + * Controls + */ + play: function() { + if (this._state == 'playing') return; + + this._state = 'playing'; + + var ms = this.options.rotation / this.options.dashes; + this._playTimer = window.setTimeout($.proxy(this._nextPosition, this), ms); + return this; + }, + + pause: function() { + if (this._state == 'paused') return; + + this._pause(); + + this._state = 'paused'; + return this; + }, + + _pause: function() { + if (!this._playTimer) return; + window.clearTimeout(this._playTimer); + this._playTimer = null; + }, + + stop: function() { + if (this._state == 'stopped') return; + + this._pause(); + + this._position = 0; + this.drawPosition(0); + + this._state = 'stopped'; + return this; + }, + + toggle: function() { + this[this._state == 'playing' ? 'pause' : 'play'](); + return this; + }, + + + /* + * Layout + */ + getLayout: function() { + if (this._layout) return this._layout; + + var options = this.options, + dashes = options.dashes, + width = options.width, + minRadius = options.radius, + maxRadius = options.radius + options.height, + + maxWorkspaceRadius = Math.max(width, maxRadius), + radius = Math.ceil(Math.max( + maxWorkspaceRadius, + // the angle created by width could give a bigger radius + pyth(maxRadius, width/2) + )); + + radius += options.padding; + + var layout = { + workspace: { + radius: radius, + opacities: getOpacityArray(dashes) + }, + dash: { + position: { + top: radius - maxRadius, + left: radius - width / 2 + }, + dimensions: { + width: width, + height: maxRadius - minRadius + } + } + }; + + // cache + this._layout = layout; + + return layout; + }, + + // center the element using absolute positioning and negative margins + center: function() { + var diameter = this.getLayout().workspace.radius * 2; + + // the parent needs relative positioning for this to work + // TODO: store original css so it can be restored on remove() + $(this.element.parentNode).css({ position: 'relative' }); + + $(this.element).css({ + position: 'absolute', + height: diameter + 'px', + width: diameter + 'px', + top: '50%', + left: '50%', + marginLeft: -.5 * diameter + 'px', + marginTop: -.5 * diameter + 'px' + }); + + this._centered = true; + } +}); + +// start +Spinners.init(); + +// if there's no support for Canvas/VML, make sure everything dies silently +if (!Spinners.enabled) { + Collection.create = function() { return []; }; +} +})(jQuery); \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/spinners/spinners/spinners.min.js b/geoportal_1/src/main/webapp/resources/javascript/spinners/spinners/spinners.min.js new file mode 100755 index 0000000..d913245 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/spinners/spinners/spinners.min.js @@ -0,0 +1,9 @@ +/*! + * Spinners 3.0.0 + * (c) 2010-2012 Nick Stakenburg - http://www.nickstakenburg.com + * + * Spinners is freely distributable under the terms of an MIT-style license. + * + * GitHub: http://github.com/staaky/spinners + */ +;var Spinners={version:"3.0.0"};(function(a){function b(a){return a*Math.PI/180}function c(a){this.element=a}function d(b,c){b&&(this.element=b,h.remove(b),h.removeDetached(),this._position=0,this._state="stopped",this.setOptions(a.extend({color:"#000",dashes:12,radius:5,height:5,width:1.8,opacity:1,padding:3,rotation:700},c||{})),this.drawPosition(0),h.add(this))}var e={scroll:function(a,b){if(!b)return a;var c=a.slice(0,b);return a.slice(b,a.length).concat(c)},isElement:function(a){return a&&1==a.nodeType},element:{isAttached:function(){return function(a){for(;a&&a.parentNode;)a=a.parentNode;return!!a&&!!a.body}}()}},f={drawRoundedRectangle:function(c,d){var e=a.extend({top:0,left:0,width:0,height:0,radius:0},d||{}),f=e.left,g=e.top,h=e.width,i=e.height,e=e.radius;c.beginPath(),c.moveTo(f+e,g),c.arc(f+h-e,g+e,e,b(-90),b(0),!1),c.arc(f+h-e,g+i-e,e,b(0),b(90),!1),c.arc(f+e,g+i-e,e,b(90),b(180),!1),c.arc(f+e,g+e,e,b(-180),b(-90),!1),c.closePath(),c.fill()}},g=function(){function a(a){var c=[];0==a.indexOf("#")&&(a=a.substring(1)),a=a.toLowerCase();if(""!=a.replace(b,""))return null;3==a.length?(c[0]=a.charAt(0)+a.charAt(0),c[1]=a.charAt(1)+a.charAt(1),c[2]=a.charAt(2)+a.charAt(2)):(c[0]=a.substring(0,2),c[1]=a.substring(2,4),c[2]=a.substring(4));for(a=0;a")[0];return!!b.getContext&&!!b.getContext("2d")}()},init:function(){if(this.support.canvas||window.G_vmlCanvasManager&&window.attachEvent&&-1===navigator.userAgent.indexOf("Opera"))window.G_vmlCanvasManager&&window.G_vmlCanvasManager.init_(document),this.enabled=!0},create:function(a,b){return c.create(a,b),this.get(a)},get:function(a){return new c(a)},play:function(a){return this.get(a).play(),this},pause:function(a){return this.get(a).pause(),this},toggle:function(a){return this.get(a).toggle(),this},stop:function(a){return this.get(a).stop(),this},remove:function(a){return this.get(a).remove(),this},removeDetached:function(){return h.removeDetached(),this},center:function(a){return this.get(a).center(),this},setOptions:function(a,b){return this.get(a).setOptions(b),this},getDimensions:function(a){return a=2*h.get(a)[0].getLayout().workspace.radius,{width:a,height:a}}});var h={spinners:[],get:function(b){if(b){var c=[];return a.each(this.spinners,function(d,f){f&&(e.isElement(b)?f.element==b:a(f.element).is(b))&&c.push(f)}),c}},add:function(a){this.spinners.push(a)},remove:function(b){a(a.map(this.spinners,function(c){if(e.isElement(b)?c.element==b:a(c.element).is(b))return c.element})).each(a.proxy(function(a,b){this.removeByElement(b)},this))},removeByElement:function(b){var c=this.get(b)[0];c&&(c.remove(),this.spinners=a.grep(this.spinners,function(a){return a.element!=b}))},removeDetached:function(){a.each(this.spinners,a.proxy(function(a,b){b&&b.element&&!e.element.isAttached(b.element)&&this.remove(b.element)},this))}};a.extend(c,{create:function(b,c){if(b){var f=c||{},g=[];return e.isElement(b)?g.push(new d(b,f)):a(b).each(function(a,b){g.push(new d(b,f))}),g}}}),a.extend(c.prototype,{items:function(){return h.get(this.element)},play:function(){return a.each(this.items(),function(a,b){b.play()}),this},stop:function(){return a.each(this.items(),function(a,b){b.stop()}),this},pause:function(){return a.each(this.items(),function(a,b){b.pause()}),this},toggle:function(){return a.each(this.items(),function(a,b){b.toggle()}),this},center:function(){return a.each(this.items(),function(a,b){b.center()}),this},setOptions:function(b){return a.each(this.items(),function(a,c){c.setOptions(b)}),this},remove:function(){return h.remove(this.element),this}}),a.extend(d.prototype,{setOptions:function(b){this.options=a.extend({},this.options,b||{}),this.options.radii&&(b=this.options.radii,this.options.radius=Math.min(b[0],b[1]),this.options.height=Math.max(b[0],b[1])-this.options.radius),this.options.dashWidth&&(this.options.width=this.options.dashWidth),this.options.speed&&(this.options.duration=1e3*this.options.speed);var b=this._state,c=this._position;this._layout=null,this.build(),c&&c>=this.options.dashes-1&&(this._position=this.options.dashes-1);switch(b){case"playing":this.play();break;case"paused":case"stopped":this.drawPosition(this._position)}this._centered&&this.center()},remove:function(){this.canvas&&(this.pause(),a(this.canvas).remove(),this.ctx=this.canvas=null)},build:function(){this.remove();var b=this.getLayout().workspace.radius;return a(document.body).append(this.canvas=a("").attr({width:2*b,height:2*b}).css({zoom:1})),window.G_vmlCanvasManager&&G_vmlCanvasManager.initElement(this.canvas[0]),this.ctx=this.canvas[0].getContext("2d"),this.ctx.globalAlpha=this.options.opacity,a(this.element).append(this.canvas),this.ctx.translate(b,b),this},drawPosition:function(a){var c=this.getLayout().workspace,a=e.scroll(c.opacities,-1*a),d=c.radius,c=this.options.dashes,f=b(360/c);this.ctx.clearRect(-1*d,-1*d,2*d,2*d);for(d=0;d + + +Spinners - Pixel-perfect loading icons using Canvas + + + + + + + + + + + + + + + + + + + + +
        +

        Spinners

        + +
        +

        + This is a GUI for Spinners, + a Javascript library that creates pixel-perfect cross-browser + loading icons through Canvas. Written for use in Lightview + and Tipped, + feel free to use it in your own projects. +

        +
        + +
        +
        +
        +
        + +
        +
        + +
        + +
        +
        + + +
        +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        +
        + +
        + +
        +					var spinner = Spinners.create('#spinner', {
        +  radius: #{radius},
        +  height: #{height},
        +  width: #{width},
        +  dashes: #{dashes},
        +  opacity: #{opacity},
        +  padding: #{padding},
        +  rotation: #{rotation},
        +  color: '#{color}'
        +}).play();
        +
        +spinner.center();
        +				
        + +
        + +
        + + + +
        + + \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/staaky-spinners-8352e4f/gui/js/gui.js b/geoportal_1/src/main/webapp/resources/javascript/staaky-spinners-8352e4f/gui/js/gui.js new file mode 100755 index 0000000..72cf9e3 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/staaky-spinners-8352e4f/gui/js/gui.js @@ -0,0 +1,164 @@ +$(document).ready(function() { + // TODO: add a list of preset spinners with examples that can be loaded as options + + var vp_timer, + spinner = Spinners.create('#spinner').center().play(), + _code = $('#gui .code code').html(); + + // disable play button + $("#gui .controls [data-control='play']").addClass('disabled'); + + // prettify code + if (!!window.prettyPrint) { + $('pre').addClass('prettyprint'); + prettyPrint(); + } + + // sliders + $('#gui .slider').each(function(i, element) { + var options = { + min: parseFloat($(element).data('slider-min')), + max: parseFloat($(element).data('slider-max')), + step: parseFloat($(element).data('slider-step')) || 1, + value: parseFloat($(element).next('input.value').val() || 1) + }; + + $(element).slider(options); + + $(element).bind('slidechange', function(event, ui) { + $(element).next('input[type=text]').val(ui.value); + + update(); + Options.store(); + + // visualize padding + if ($(this).next('input').attr('name') == 'padding') { //is("[data-option='padding']")) { + var se = $('#spinner').css({ backgroundColor: '#99ccff'}); + + if (vp_timer) { window.clearTimeout(vp_timer); vp_timer = null; } + vp_timer = window.setTimeout(function() { + se.animate({ backgroundColor: '#ffffff' }, 400, function() { + $(this).css({ backgroundColor: 'transparent' }); + }); + }, 1500); + } + }); + }); + + // inputs + $('#gui .option input').bind('keyup change', function() { + var slider = $(this).prev('.slider'); + + // increase slider min/max if required + if (slider[0] && $(this).attr('name') != 'opacity') { + var val = parseFloat($(this).val()), + min = slider.slider('option', 'min'), + max = slider.slider('option', 'max'); + if (val < min) slider.slider('option', 'min', val); + if (val > max) slider.slider('option', 'max', val); + } + + // colors should start with # + if ($(this).attr('name') == 'color' && $(this).val().substr(0,1) != '#') { + $(this).val('#' + $(this).val()); + } + + // update the slider + // disabled because jquery-ui triggers slidechange before the value updates + // slider.slider('value', parseFloat($(this).val())); + + update(); + Options.store(); + }); + + // controls + $("#gui .controls input").each(function(i, element) { + $(element).bind('click', function(event) { + event.preventDefault(); + + spinner[$(this).data('control')](); + + $(this).addClass('disabled').siblings().removeClass('disabled'); + }); + }) + + // collect the options + function getOptions() { + var options = {}; + + $('.option .slider').each(function(i, element) { + var input = $(element).next('input'); + options[input.attr('name')] = parseFloat(input.val()); + }); + + // add color + options.color = $("#gui input[name='color']").val(); + + return options; + } + + // update, syncs sliders and code with inputs + function update() { + var options = getOptions(); + + // update code + var code = _code; + $.each(options, function(name, value) { + code = code.replace('#{' + name + '}', value, 'g'); + }); + $('#gui .code code').html(code); + if (!!window.prettyPrint) prettyPrint(); + + // update spinners + spinner.setOptions(options); + } + + + // options on # + var Options = { + fromHash: function() { + var qs_hash = /#!(.*)/.exec(decodeURIComponent(location.href)), + ho = qs_hash && qs_hash[1]; + if (!ho) return; + + var options = {}; + + $.each(ho.split('&'), function(i, pair) { + var p = pair.split('='), name = p[0], value = p[1]; + options[name] = value; + if (name != 'color') options[name] = parseFloat(options[name]); + else if (options[name].substr(0,1) != '#') options[name] = '#' + options[name]; + }); + return options; + }, + + toHash: function() { + return '#!' + $('#gui form').serialize(); + }, + + restore: function() { + var options = this.fromHash(); + if (!options) return; + + $('#gui form input').each(function(i, element) { + var name = $(element).attr('name'); + if (options[name]) $(element).val(options[name]); + }); + + update(); + }, + + store: function() { + var hash = this.toHash(), + href = location.href; + href = href.replace(/#!(.*)/, ''); + window.location.href = href + hash; + } + }; + + // attempt to restore options from # + Options.restore(); + + //first render + update(); +}); \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/staaky-spinners-8352e4f/gui/js/prettify.js b/geoportal_1/src/main/webapp/resources/javascript/staaky-spinners-8352e4f/gui/js/prettify.js new file mode 100755 index 0000000..eef5ad7 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/javascript/staaky-spinners-8352e4f/gui/js/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p/im, + bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, + hasLocation = typeof location !== 'undefined' && location.href, + defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), + defaultHostName = hasLocation && location.hostname, + defaultPort = hasLocation && (location.port || undefined), + buildMap = {}, + masterConfig = (module.config && module.config()) || {}; + + text = { + version: '2.0.7', + + strip: function (content) { + //Strips declarations so that external SVG and XML + //documents can be added to a document without worry. Also, if the string + //is an HTML document, only the part inside the body tag is returned. + if (content) { + content = content.replace(xmlRegExp, ""); + var matches = content.match(bodyRegExp); + if (matches) { + content = matches[1]; + } + } else { + content = ""; + } + return content; + }, + + jsEscape: function (content) { + return content.replace(/(['\\])/g, '\\$1') + .replace(/[\f]/g, "\\f") + .replace(/[\b]/g, "\\b") + .replace(/[\n]/g, "\\n") + .replace(/[\t]/g, "\\t") + .replace(/[\r]/g, "\\r") + .replace(/[\u2028]/g, "\\u2028") + .replace(/[\u2029]/g, "\\u2029"); + }, + + createXhr: masterConfig.createXhr || function () { + //Would love to dump the ActiveX crap in here. Need IE 6 to die first. + var xhr, i, progId; + if (typeof XMLHttpRequest !== "undefined") { + return new XMLHttpRequest(); + } else if (typeof ActiveXObject !== "undefined") { + for (i = 0; i < 3; i += 1) { + progId = progIds[i]; + try { + xhr = new ActiveXObject(progId); + } catch (e) {} + + if (xhr) { + progIds = [progId]; // so faster next time + break; + } + } + } + + return xhr; + }, + + /** + * Parses a resource name into its component parts. Resource names + * look like: module/name.ext!strip, where the !strip part is + * optional. + * @param {String} name the resource name + * @returns {Object} with properties "moduleName", "ext" and "strip" + * where strip is a boolean. + */ + parseName: function (name) { + var modName, ext, temp, + strip = false, + index = name.indexOf("."), + isRelative = name.indexOf('./') === 0 || + name.indexOf('../') === 0; + + if (index !== -1 && (!isRelative || index > 1)) { + modName = name.substring(0, index); + ext = name.substring(index + 1, name.length); + } else { + modName = name; + } + + temp = ext || modName; + index = temp.indexOf("!"); + if (index !== -1) { + //Pull off the strip arg. + strip = temp.substring(index + 1) === "strip"; + temp = temp.substring(0, index); + if (ext) { + ext = temp; + } else { + modName = temp; + } + } + + return { + moduleName: modName, + ext: ext, + strip: strip + }; + }, + + xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, + + /** + * Is an URL on another domain. Only works for browser use, returns + * false in non-browser environments. Only used to know if an + * optimized .js version of a text resource should be loaded + * instead. + * @param {String} url + * @returns Boolean + */ + useXhr: function (url, protocol, hostname, port) { + var uProtocol, uHostName, uPort, + match = text.xdRegExp.exec(url); + if (!match) { + return true; + } + uProtocol = match[2]; + uHostName = match[3]; + + uHostName = uHostName.split(':'); + uPort = uHostName[1]; + uHostName = uHostName[0]; + + return (!uProtocol || uProtocol === protocol) && + (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && + ((!uPort && !uHostName) || uPort === port); + }, + + finishLoad: function (name, strip, content, onLoad) { + content = strip ? text.strip(content) : content; + if (masterConfig.isBuild) { + buildMap[name] = content; + } + onLoad(content); + }, + + load: function (name, req, onLoad, config) { + //Name has format: some.module.filext!strip + //The strip part is optional. + //if strip is present, then that means only get the string contents + //inside a body tag in an HTML string. For XML/SVG content it means + //removing the declarations so the content can be inserted + //into the current doc without problems. + + // Do not bother with the work if a build and text will + // not be inlined. + if (config.isBuild && !config.inlineText) { + onLoad(); + return; + } + + masterConfig.isBuild = config.isBuild; + + var parsed = text.parseName(name), + nonStripName = parsed.moduleName + + (parsed.ext ? '.' + parsed.ext : ''), + url = req.toUrl(nonStripName), + useXhr = (masterConfig.useXhr) || + text.useXhr; + + //Load the text. Use XHR if possible and in a browser. + if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { + text.get(url, function (content) { + text.finishLoad(name, parsed.strip, content, onLoad); + }, function (err) { + if (onLoad.error) { + onLoad.error(err); + } + }); + } else { + //Need to fetch the resource across domains. Assume + //the resource has been optimized into a JS module. Fetch + //by the module name + extension, but do not include the + //!strip part to avoid file system issues. + req([nonStripName], function (content) { + text.finishLoad(parsed.moduleName + '.' + parsed.ext, + parsed.strip, content, onLoad); + }); + } + }, + + write: function (pluginName, moduleName, write, config) { + if (buildMap.hasOwnProperty(moduleName)) { + var content = text.jsEscape(buildMap[moduleName]); + write.asModule(pluginName + "!" + moduleName, + "define(function () { return '" + + content + + "';});\n"); + } + }, + + writeFile: function (pluginName, moduleName, req, write, config) { + var parsed = text.parseName(moduleName), + extPart = parsed.ext ? '.' + parsed.ext : '', + nonStripName = parsed.moduleName + extPart, + //Use a '.js' file name so that it indicates it is a + //script that can be loaded across domains. + fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; + + //Leverage own load() method to load plugin value, but only + //write out values that do not have the strip argument, + //to avoid any potential issues with ! in file names. + text.load(nonStripName, req, function (value) { + //Use own write() method to construct full module value. + //But need to create shell that translates writeFile's + //write() to the right interface. + var textWrite = function (contents) { + return write(fileName, contents); + }; + textWrite.asModule = function (moduleName, contents) { + return write.asModule(moduleName, fileName, contents); + }; + + text.write(pluginName, nonStripName, textWrite, config); + }, config); + } + }; + + if (masterConfig.env === 'node' || (!masterConfig.env && + typeof process !== "undefined" && + process.versions && + !!process.versions.node)) { + //Using special require.nodeRequire, something added by r.js. + fs = require.nodeRequire('fs'); + + text.get = function (url, callback, errback) { + try { + var file = fs.readFileSync(url, 'utf8'); + //Remove BOM (Byte Mark Order) from utf8 files if it is there. + if (file.indexOf('\uFEFF') === 0) { + file = file.substring(1); + } + callback(file); + } catch (e) { + errback(e); + } + }; + } else if (masterConfig.env === 'xhr' || (!masterConfig.env && + text.createXhr())) { + text.get = function (url, callback, errback, headers) { + var xhr = text.createXhr(), header; + xhr.open('GET', url, true); + + //Allow plugins direct access to xhr headers + if (headers) { + for (header in headers) { + if (headers.hasOwnProperty(header)) { + xhr.setRequestHeader(header.toLowerCase(), headers[header]); + } + } + } + + //Allow overrides specified in config + if (masterConfig.onXhr) { + masterConfig.onXhr(xhr, url); + } + + xhr.onreadystatechange = function (evt) { + var status, err; + //Do not explicitly handle errors, those should be + //visible via console output in the browser. + if (xhr.readyState === 4) { + status = xhr.status; + if (status > 399 && status < 600) { + //An http 4xx or 5xx error. Signal an error. + err = new Error(url + ' HTTP status: ' + status); + err.xhr = xhr; + errback(err); + } else { + callback(xhr.responseText); + } + + if (masterConfig.onXhrComplete) { + masterConfig.onXhrComplete(xhr, url); + } + } + }; + xhr.send(null); + }; + } else if (masterConfig.env === 'rhino' || (!masterConfig.env && + typeof Packages !== 'undefined' && typeof java !== 'undefined')) { + //Why Java, why is this so awkward? + text.get = function (url, callback) { + var stringBuffer, line, + encoding = "utf-8", + file = new java.io.File(url), + lineSeparator = java.lang.System.getProperty("line.separator"), + input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), + content = ''; + try { + stringBuffer = new java.lang.StringBuffer(); + line = input.readLine(); + + // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 + // http://www.unicode.org/faq/utf_bom.html + + // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: + // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 + if (line && line.length() && line.charAt(0) === 0xfeff) { + // Eat the BOM, since we've already found the encoding on this file, + // and we plan to concatenating this buffer with others; the BOM should + // only appear at the top of a file. + line = line.substring(1); + } + + if (line !== null) { + stringBuffer.append(line); + } + + while ((line = input.readLine()) !== null) { + stringBuffer.append(lineSeparator); + stringBuffer.append(line); + } + //Make sure we return a JavaScript string and not a Java string. + content = String(stringBuffer.toString()); //String + } finally { + input.close(); + } + callback(content); + }; + } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && + typeof Components !== 'undefined' && Components.classes && + Components.interfaces)) { + //Avert your gaze! + Cc = Components.classes, + Ci = Components.interfaces; + Components.utils['import']('resource://gre/modules/FileUtils.jsm'); + + text.get = function (url, callback) { + var inStream, convertStream, + readData = {}, + fileObj = new FileUtils.File(url); + + //XPCOM, you so crazy + try { + inStream = Cc['@mozilla.org/network/file-input-stream;1'] + .createInstance(Ci.nsIFileInputStream); + inStream.init(fileObj, 1, 0, false); + + convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] + .createInstance(Ci.nsIConverterInputStream); + convertStream.init(inStream, "utf-8", inStream.available(), + Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); + + convertStream.readString(inStream.available(), readData); + convertStream.close(); + inStream.close(); + callback(readData.value); + } catch (e) { + throw new Error((fileObj && fileObj.path || '') + ': ' + e); + } + }; + } + return text; +}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/userInterface.js b/geoportal_1/src/main/webapp/resources/javascript/userInterface.js deleted file mode 100644 index f8e32e5..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/userInterface.js +++ /dev/null @@ -1,2502 +0,0 @@ -/** - * This javascript module includes functions for dealing with the user interface. - * - * @author Chris Barnett - * - */ - -/** - * create the namespace objects if they don't already exist - */ -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -org.OpenGeoPortal.UserInterface = function(){ - //default text for the geocoder input box - this.geocodeText = "Find Place (Example: Boston, MA)"; - //default text for the search input box - this.searchText = "Search for data layers..."; - - this.mapObject = org.OpenGeoPortal.map; - this.resultsTableObject = org.OpenGeoPortal.resultsTableObj; - this.cartTableObject = org.OpenGeoPortal.cartTableObj; - this.layerStateObject = org.OpenGeoPortal.layerState; - this.utility = org.OpenGeoPortal.Utility; - this.config = org.OpenGeoPortal.InstitutionInfo; - this.jspfDir = org.OpenGeoPortal.Utility.JspfLocation; - this.login = new org.OpenGeoPortal.LogIn(this.config.getHomeInstitution()); - this.login.checkLoginStatus(); - analytics = new org.OpenGeoPortal.Analytics(); - var that = this; - - /** - * init function - */ - this.init = function(){ - jQuery("#tabs").tabs({ - active: 1, - activate: function( event, ui ) { - that.utility.CurrentTab = jQuery(this).tabs("option", "active"); - var label, - idx = ui.index; - - label = (idx == 2) && "Cart Tab" || - (idx == 1) && "Search Tab" || - "Getting Started Tab"; - analytics.track("Interface", "Change Tab", label); - var tabObj = that.utility.whichTab(); - switch(tabObj.name){ - case 'search': - that.filterResults(); - break; - case 'saved': - jQuery('#savedLayers').dataTable().fnDraw(); - break; - } - } - - }); - this.togglePanels(); - jQuery('.searchBox').keypress(function(event){ - var type, search, keyword; - - if (event.keyCode == '13') { - event.preventDefault(); - that.searchSubmit(); - type = org.OpenGeoPortal.Utility.whichSearch().type; - if (type == "basicSearch") { - search = "Basic"; - keyword = jQuery("#basicSearchTextField").val(); - } else if (type == "advancedSearch") { - search = "Advanced"; - keyword = jQuery("#advancedKeywordText").val(); - } - analytics.track("Search", search, keyword); - } - }); - jQuery("#advancedSearchSubmit").click(function(){that.searchSubmit()}); - jQuery("#geosearch").keypress(function(event){ - if (event.keyCode == '13') { - var location = jQuery("#geosearch").val(); - that.geocodeLocation(); - analytics.track("Go To Box", location); - } else if (jQuery(this).val().trim() == that.geocodeText){ - that.clearInput('geosearchDiv'); - } - }); - jQuery(document).bind('tabsshow', function(event, ui) { - var tabObj = that.utility.whichTab(); - switch(tabObj.name){ - case 'search': - that.filterResults(); - break; - case 'saved': - jQuery('#savedLayers').dataTable().fnDraw(); - break; - } - }); - //info dialogs - - //temporary notice - /*var mapitDiv = '

        Map It functionality to export your maps directly into GeoCommons is coming soon.

        '; - jQuery("body").append(mapitDiv); - jQuery('#mapitNotice').dialog({ - zIndex: 2999, - title: "COMING SOON", - resizable: false, - minWidth: 415, - autoOpen: false - });*/ - - jQuery('#highlights').dialog({ - zIndex: 2999, - title: "HIGHLIGHTS", - resizable: true, - minWidth: 415, - autoOpen: false - }); - jQuery("#highlightsLink").click(function(){ - jQuery('#highlights').dialog("open"); - }); - - jQuery("#top_menu > a").on("click", function() { - analytics.track("Interface", "Reset Page"); - }); - - jQuery('#about').dialog({ - zIndex: 2999, - title: "ABOUT", - resizable: false, - minHeight: 382, - minWidth: 473, - autoOpen: false - }); - jQuery("#aboutLink").click(function(){ - jQuery('#about').dialog("open"); - analytics.track("Help", "Show About"); - }); - jQuery('#contact').dialog({ - zIndex: 2999, - title: "CONTACT INFORMATION", - resizable: false, - minHeight: 222, - minWidth: 405, - autoOpen: false - }); - jQuery("#contactLink").click(function(){ - jQuery('#contact').dialog("open"); - }); - jQuery('#userGuide').dialog({ - zIndex: 2999, - title: "USER GUIDE", - resizable: true, - height: 425, - width: 745, - autoOpen: false - }); - jQuery("#userGuideLink").click(function(){ - if (jQuery("#userGuide").length == 0){ - jQuery.get(that.jspfDir + "userGuide.jspf", function(data){ - jQuery("body").append(data); - jQuery("#userGuide").dialog({ - zIndex: 2999, - title: "USER GUIDE", - resizable: true, - height: 425, - width: 745, - autoOpen: false - }); - that.anchorsToNiceScroll("userGuide", {top: -10, left: -30}); - jQuery('#userGuide').dialog("open"); - }); - } else { - jQuery('#userGuide').dialog("open"); - } - analytics.track("Help", "Show User Guide"); - }); - //buttons - this.createBasemapMenu(); - this.createDataTypesMenu(); - this.createInstitutionsMenu(); - this.createTopicsMenu(); - this.createSortMenu(); - this.createColumnsMenu(); - - jQuery("#basicSearchTextField").val(this.searchText).focus(); - jQuery("#basicSearchTextField").focusin(function(){ - var current = jQuery(this); - if (current.val().indexOf(that.searchText) != -1){ - current.val(""); - } - }); - jQuery("#basicSearchTextField").click(function(){ - var current = jQuery(this); - if (current.val().indexOf(that.searchText) != -1){ - current.val(""); - } - }); - jQuery("#basicSearchTextField").keypress(function(){ - var current = jQuery(this); - if (current.val().indexOf(that.searchText) != -1){ - current.val(""); - } - }); - //needs to check if the input has focus - jQuery("input#geosearch").val(this.geocodeText); - jQuery("input#geosearch").hover(function(){ - jQuery(this).css("opacity", "1"); - jQuery(this).data("mouseOverInput", true); - }, - function(){ - jQuery(this).data("mouseOverInput", false); - if(!jQuery(this).is(":focus")){ - jQuery(this).css("opacity", ".7"); - } - }); - jQuery("input#geosearch").focusin(function(){ - jQuery(this).css("opacity", "1");}); - jQuery("input#geosearch").focusout(function(){ - if(jQuery(this).data("mouseOverInput") !== true){ - jQuery(this).css("opacity", ".5"); - }}); - jQuery("input#geosearch").click(function(){that.clearInput("geosearchDiv");}); - jQuery("#goButton").click( - function(){ - var location = jQuery("#geosearch").val(); - that.geocodeLocation(); - analytics.track("Go To Box", location); - } - ); - - jQuery("input[name='mapFilterCheck'],input[name='mapFilterCheck2']").on( - "change", function(ev) { - var value = this.checked ? "Checked" : "Unchecked"; - analytics.track("Limit Results to Visible Map", value); - } - ); - - this.cartOptionText(); - //set mouse cursor behavior - this.mouseCursor(); - this.resizePanels(); - var loadIndicator = "#mapLoadIndicator"; - jQuery(document).bind("showLoadIndicator",function(e){ - that.utility.showLoadIndicator("mapLoadIndicator"); - }); - - jQuery(document).bind("hideLoadIndicator", function(e){ - that.utility.hideLoadIndicator("mapLoadIndicator"); - }); - - //'hover' for graphics that are not background graphics - var zoomPlusSelector = '.olControlModPanZoomBar img[id*="zoomin"]'; - jQuery(document).on("mouseenter", zoomPlusSelector, function(){ - jQuery(this).attr("src", that.utility.getImage("slider_plus_hover.png")); - //jQuery(this).css("cursor", "pointer"); - }); - - jQuery(document).on("mouseleave", zoomPlusSelector, function(){ - jQuery(this).attr("src", that.utility.getImage("zoom-plus-mini.png")); - }); - - jQuery(document).on("click", zoomPlusSelector, function(){ - that.mapObject.zoomIn(); - }); - - var zoomMinusSelector = '.olControlModPanZoomBar img[id*="zoomout"]'; - jQuery(document).on("mouseenter", zoomMinusSelector, function(){ - jQuery(this).attr("src", that.utility.getImage("slider_minus_hover.png")); - //jQuery(this).css("cursor", "pointer"); - }); - - jQuery(document).on("mouseleave", zoomMinusSelector, function(){ - jQuery(this).attr("src", that.utility.getImage("zoom-minus-mini.png")); - }); - - jQuery(document).on("click", zoomMinusSelector, function(){ - that.mapObject.zoomOut(); - }); - - jQuery('#tabs a').bind("mousedown", function(){ - //console.log(jQuery(this)); - var tabImage = jQuery(this).find("img"); - if (tabImage.length > 0){ - tabImage.attr("src", that.utility.getImage("shoppingcart_on.png")); - } else { - jQuery('#tabs a img').attr("src", that.utility.getImage("shoppingcart.png")); - }; - }); - this.autocomplete(); - var containerHeight = jQuery(window).height() - jQuery("#header").height() - jQuery("#footer").height() - 2; - containerHeight = Math.max(containerHeight, 680); - var containerWidth = jQuery(window).width();//Math.max((Math.floor(jQuery(window).width() * .9)), 1002); - jQuery('#main').width(containerWidth); - jQuery('#container').height(containerHeight); - jQuery('#left_tabs').height(containerHeight); - jQuery("#left_col").width(this.getSearchPanelWidth()); - jQuery('#map').width(jQuery("#container").width() - this.getSearchPanelWidth() - 1); - if (parseInt(jQuery("#map").width()) > 1200) { - //org.OpenGeoPortal.map.zoomTo(org.OpenGeoPortal.map.getZoom() + 1); - if (this.mapObject.zoom == 1){ - this.mapObject.zoomTo(2); - } - } - jQuery('#container').resize(function() { - //org.OpenGeoPortal.map.events.triggerEvent('zoomend'); - that.mapObject.events.triggerEvent('zoomend'); - }); - - jQuery(window).resize(function(){ - var containerHeight = Math.max((jQuery(window).height() - jQuery("#header").height() - jQuery("#footer").height() - 2), 680); - jQuery('#container').height(containerHeight); - jQuery('#left_tabs').height(containerHeight); - //map height and search results table height don't get properly changed here - //org.OpenGeoPortal.Utility.whichTab().tableObject().getTableObj().fnDraw(); - var containerWidth = jQuery(window).width();//Math.max((Math.floor(jQuery(window).width() * .9)), 1002); - jQuery('#main').width(containerWidth); - if (jQuery("#left_col").css("display") == "none"){ - jQuery('#map').width(jQuery("#container").width() - 18); - } else if (jQuery("#map").css("display") != "none"){ - //jQuery("#left_col").width(org.OpenGeoPortal.ui.searchPanelWidth); - var mapWidth = jQuery("#container").width() - jQuery("#left_col").width() - 1; - if (mapWidth >= 415){ - jQuery('#map').width(mapWidth); - } else { - jQuery("#left_col").width(jQuery("#container").width() - 415 - 1); - jQuery('#map').width(415); - that.setSearchPanelWidth(jQuery("#left_col").width()); - } - - } else { - jQuery("#left_col").width(jQuery("#container").width() - 1); - that.setSearchPanelWidth(jQuery("#left_col").width()); - } - - }); - //need to test if user has done anything before binding this event - jQuery(document).bind("eventMoveEnd", function(){ - if (that.utility.whichTab().name == 'search'){ - that.filterResults(); - } - }); - - jQuery(document).on('click', '#downloadHeaderCheck', that.toggleChecksSaved); - jQuery("#headerLogin").click(function(event){that.promptLogin(event);}); - - jQuery(document).bind("loginSucceeded", function(){ - jQuery(document).trigger("loginSuccess.addToCart"); - that.applyLoginActions(); - analytics.track("Login", "Login Success"); - }); - jQuery(document).on("loginFailed", function() { - analytics.track("Login", "Login Failure"); - }); - - jQuery("#searchResultsNavigation").on("click", "a", function() { - var direction, - label = jQuery(this).text(); - - direction = (label.indexOf("Next") > -1 && "Next") || "Previous"; - - analytics.track("Results Pagination", direction + " Results Page"); - }); - /*jQuery(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError){ - console.log(ajaxSettings); - - if (jqXHR.status == 401){ - //if (ajaxSettings.url.indexOf("authenticate") > -1){ - that.promptLogin(); - jQuery(document).unbind("loginSucceeded.retry"); - jQuery(document).bind("loginSucceeded.retry", function(){ - jQuery.ajax(ajaxSettings); - }); - //} - } - /*console.log(event); - console.log(jqXHR); - console.log(ajaxSettings); - console.log(thrownError);*/ - //}); - //this.checkUserInput(); - /*jQuery("body").delegate(".ui-dialog-titlebar", "dblclick", function(){ - var id = jQuery(this).parent().children(".dialog").attr("id"); - if (that.isDialogMinimized(id)){ - that.maximizeDialog(id); - } else { - that.minimizeDialog(id); - } - });*/ - }; - this.init(); - jQuery("#main").fadeTo('fast', 1); -}; - -/** - * creates the basemap menu from the backgroundMaps object in org.OpenGeoPortal.MapController - */ -org.OpenGeoPortal.UserInterface.prototype.createBasemapMenu = function() { - //var backgroundMapsConfig = org.OpenGeoPortal.map.backgroundMaps("all"); - var backgroundMapsConfig = this.mapObject.backgroundMaps("all"); - var radioHtml = ""; - for (var mapType in backgroundMapsConfig){ - var isDefault = ""; - //if (mapType == org.OpenGeoPortal.map.getCurrentBackgroundMap()){ - if (mapType == this.mapObject.getCurrentBackgroundMap()){ - isDefault = ' checked="checked"'; - } - radioHtml += ''; - radioHtml += ''; - } - jQuery("#basemapMenu").html(radioHtml); - jQuery("[name=basemapRadio]").attr("checked", false); - //jQuery("[name=basemapRadio]").filter("[value=" + org.OpenGeoPortal.map.getCurrentBackgroundMap() + "]").attr("checked", "checked"); - jQuery("[name=basemapRadio]").filter("[value=" + this.mapObject.getCurrentBackgroundMap() + "]").attr("checked", "checked"); - jQuery("#basemapSelect").button(); - jQuery("#basemapMenu").buttonset(); - jQuery("#basemapDropdown").hover(function(){jQuery("#basemapMenu").show();}, function(){jQuery("#basemapMenu").hide();}); -}; - -/** - * creates html and behaviours for a css styled dropdown - * - * @param divId the id of the div element to turn into a styled dropdown - * @param paramObj .text is the displayed text, .menuHtml is the Html for the dropdown menu - */ -org.OpenGeoPortal.UserInterface.prototype.styledSelect = function(divId, paramObj) { - var selectElement = jQuery('#' + divId); - selectElement.addClass("styledDropdown"); - - var selectHtml = ''; - selectHtml += '
        '; - selectHtml += paramObj.menuHtml; - selectHtml += '
        '; - - selectElement.html(selectHtml); - - jQuery("#" + divId + "Select").button(); - jQuery("#" + divId + "Select .styledSelectText").width(jQuery("#" + divId).width() - jQuery("#" + divId + "Select .styledSelectArrow").width() - 39); - jQuery("#" + divId + "Menu").buttonset().addClass("raised").hide(); - //jQuery("#sourceCheckMenu").hide(); - - selectElement.mouseleave(function(){ - jQuery("#" + divId + "Menu").hide(); - }); - jQuery("#" + divId + "Select").click(function(event){ - var menu = jQuery("#" + divId + "Menu"); - if (menu.css("display") == "none"){ - menu.show(); - } else { - menu.hide(); - } - }); -}; - -/** - * uses styledSelect to create the menu that allows a user to sort the results table by column name; dynamically created from the table object - */ -org.OpenGeoPortal.UserInterface.prototype.createSortMenu = function() { - var tableObj = this.utility.whichTab().tableObject(); - var fields = tableObj.tableHeadingsObj.getTableHeadings(); - var defaultField = "Relevancy"; - var menuHtml = ""; - for (var sortIndex in fields){ - if (fields[sortIndex].organize){ - var currentField = fields[sortIndex]; - menuHtml += ''; - var checked = ""; - if (currentField.displayName.toLowerCase().trim() == defaultField.toLowerCase()){ - checked += " checked=true"; - } - menuHtml += ''; - } - } - var params = { - "menuHtml": menuHtml, - "text": defaultField - }; - this.styledSelect("sortDropdown", params); - jQuery('.sortDropdownRadio').hide(); - - var buttonHtml = defaultField; - jQuery(".sortDropdownSelect > span > span").html(buttonHtml); - var that = this; - jQuery("#sortDropdownMenu span.ui-button-text").bind("click", function(){ - var selectedField = jQuery(this).closest("label").next().val(); - var buttonHtml = fields[selectedField].displayName; - jQuery("#sortDropdownSelect > span > span").html(buttonHtml); - that.chooseSort(selectedField); - }); - jQuery("#sortDropdownSelect").addClass("subHeaderDropdownSelect"); -}; - -/** - * uses styledSelect to create the menu in advanced search that allows a user to select which institutions to search; dynamically created - * from info in org.OpenGeoPortal.InstitutionInfo - */ -org.OpenGeoPortal.UserInterface.prototype.createInstitutionsMenu = function() { - var institutionConfig = org.OpenGeoPortal.InstitutionInfo.getInstitutionInfo(); - var menuHtml = ""; - for (var institution in institutionConfig){ - menuHtml += '
        '; - menuHtml += ''; - menuHtml += ''; - menuHtml += '
        '; - } - var params = { - "menuHtml": menuHtml, - "text": "Select repositories" - }; - this.styledSelect("sourceDropdown", params); - //jQuery("#sourceDropdown .styledSelectMenu").addClass("formCheckbox"); -}; - -/** - * uses styledSelect to create the menu in advanced search that allows a user to select which data types to search; dynamically created - * from info in org.OpenGeoPortal.InstitutionInfo - */ -org.OpenGeoPortal.UserInterface.prototype.createDataTypesMenu = function() { - var dataTypes = org.OpenGeoPortal.InstitutionInfo.icons.dataTypes; - var menuHtml = ""; - for (var dataTypeIndex in dataTypes){ - menuHtml += '
        '; - menuHtml += ''; - menuHtml += ''; - menuHtml += '
        '; - } - var params = { - "menuHtml": menuHtml, - "text": "Select data types" - }; - this.styledSelect("dataTypeDropdown", params); - //jQuery("#dataTypeDropdown .styledSelectMenu").addClass("formCheckbox"); - -}; - -/** - * uses styledSelect to create the menu in advanced search that allows a user to select an ISO topic to search - */ -org.OpenGeoPortal.UserInterface.prototype.createTopicsMenu = function() { - var topicCategories = [{"topic":"", "label":"None"}, - {"topic":"farming", "label":"Agriculture and Farming"}, - {"topic":"biota", "label":"Biology and Ecology"}, - {"topic":"boundaries", "label":"Administrative and Political Boundaries"}, - {"topic":"climatologyMeteorologyAtmosphere", "label":"Atmospheric and Climatic"}, - {"topic":"economy", "label":"Business and Economic"}, - {"topic":"elevation", "label":"Elevation and Derived Products"}, - {"topic":"environment", "label":"Environment and Conservation"}, - {"topic":"geoscientificinformation", "label":"Geological and Geophysical"}, - {"topic":"health", "label":"Human Health and Disease"}, - {"topic":"imageryBaseMapsEarthCover", "label":"Imagery and Base Maps"}, - {"topic":"intelligenceMilitary", "label":"Military"}, - {"topic":"inlandWaters", "label":"Inland Water Resources"}, - {"topic":"location", "label":"Locations and Geodetic Networks"}, - {"topic":"oceans", "label":"Oceans and Estuaries"}, - {"topic":"planningCadastre", "label":"Cadastral"}, - {"topic":"society", "label":"Cultural, Society, and Demographics"}, - {"topic":"structure", "label":"Facilities and Structure"}, - {"topic":"transportation", "label":"Transportation Networks"}, - {"topic":"utilitiesCommunication", "label":"Utilities and Communication"} - ]; - var menuHtml = ""; - for (var topicIndex in topicCategories){ - var currentTopic = topicCategories[topicIndex]; - menuHtml += '
        '; - menuHtml += ''; - menuHtml += ''; - menuHtml += '
        '; - } - var params = { - "menuHtml": menuHtml, - "text": "Select a topic" - }; - this.styledSelect("topicDropdown", params); - jQuery('.topicRadio').hide(); - jQuery("#topicDropdownSelect > span > span"); - jQuery("#topicDropdownMenu input[type=radio]").first().attr("checked", true); - jQuery("#topicDropdownMenu span.ui-button-text").bind("click", function(){ - var selectedField = jQuery(this).closest("label").find("span").text(); - jQuery('.topicRadio').attr("checked", false); - jQuery(this).closest("label").next().attr("checked", true); - if (selectedField == "None"){ - selectedField = "Select a topic"; - } - - jQuery("#topicDropdownSelect > span > span").html(selectedField); - }); -}; - -/** - * uses styledSelect to create the menu above the results table that allows the user to select which columns to display; dynamically created - * from the table object - */ -org.OpenGeoPortal.UserInterface.prototype.createColumnsMenu = function() { - var menuHtml = ""; - var tableObj = this.utility.whichTab().tableObject(); - var fields = tableObj.tableHeadingsObj.getTableHeadings(); - for (var i in fields){ - if (fields[i].organize){ - if(i == "score"){ - continue; - } - menuHtml += '
        '; - menuHtml += ''; - var checked = ""; - if (fields[i].columnConfig.bVisible){ - checked = ' checked="checked"'; - } - menuHtml += ''; - menuHtml += '
        '; - } - } - var params = { - "menuHtml": menuHtml, - "text": "Columns" - }; - this.styledSelect("columnDropdown", params); - var that = this; - jQuery("#columnDropdownMenu input.columnCheck").bind("change", function(){ - //alert("changed"); - that.toggleColumn(this); - }); - /*jQuery("#columnDropdownMenu").bind("mousedown", function(event){ - //IE workaround - //make the checked attribute match the highlight state - //if (typeof event.target == 'undefined'){ - var highlightedLabel = jQuery(event.srcElement).parent(); - //var labelId = highlightedLabel.length; - //jQuery(event.srcElement); - var thisCheckBox = highlightedLabel.next(); - alert("before: " + thisCheckBox.attr("checked")); - //if (highlightedLabel.hasClass("ui-state-active")){ - if (typeof thisCheckBox.attr("checked") != "undefined"){ - thisCheckBox.filter("input").attr("checked", false); - alert(thisCheckBox.filter("input").attr("checked")); - //} else {} - } else { - //if (typeof thisCheckBox.attr("checked") == "undefined"){ - thisCheckBox.attr("checked", "checked"); - } - //thisCheckBox.trigger("change"); - - //} - //} - });*/ - //this.updateOrganize(); - jQuery("#columnDropdownSelect").addClass("subHeaderDropdownSelect"); -}; - -/** - * function that removes the welcome message from the search tab and shows the search results table - */ -org.OpenGeoPortal.UserInterface.prototype.showSearchResults = function(){ - jQuery("div#welcomeTextSearchTab").remove(); - jQuery("#resultsSubHeader > span").css("display", "inline"); - jQuery("#resultsSubHeader > div").css("display", "inline-block"); - - jQuery("#resultsTable").css("display", "block"); - jQuery("#searchResultsNavigation").css("display", "block"); -}; - -/** - * checks the state of the map filter - * - * @returns a boolean that is true if the map filter is on - */ -org.OpenGeoPortal.UserInterface.prototype.filterState = function(){ - return jQuery('#basicSearchMapFilter').is(":checked"); -}; - -/** - * submits a search if the map extent has changed - */ -//also call when switching tabs to a search tab, onchange of mapfilter select boxes -org.OpenGeoPortal.UserInterface.prototype.filterResults = function(){ - //check if extent has changed - if (this.mapObject.userMapAction){ - if (this.mapObject.extentChanged()){ - if ((this.filterState())&&(jQuery("#map").css("display") != "none")&&(jQuery("#left_col").css("display") != "none")){ - this.searchSubmit(); - } - } - } -}; - -org.OpenGeoPortal.UserInterface.prototype.userInputFlag = false; - -/*org.OpenGeoPortal.UserInterface.prototype.checkUserInput = function(){ - var that = this; - var setUserInputFlag = function(){that.mapObject.userMapAction = true;alert("userInputflag set");}; - //jQuery("#map").one("dblclick", setUserInputFlag); - //jQuery(document).mousedown(setUserInputFlag); - - jQuery("#map").one("mousedown", setUserInputFlag); - -};*/ - -/** - * sets the background map to the value in the background map dropdown menu. called by onchange for the basemap radio button set - */ -org.OpenGeoPortal.UserInterface.prototype.baseMapChanged = function() -{ - var value = jQuery('input:radio[name=basemapRadio]:checked').val(); - //org.OpenGeoPortal.map.setBackgroundMap(value); - this.mapObject.setBackgroundMap(value); -}; - -/** - * geocodes the value typed into the geocoder text input using the Google maps geocoder, - * then zooms to the returned extent. also animates the response - */ -org.OpenGeoPortal.UserInterface.prototype.geocodeLocation = function() -{ - var value = jQuery("#geosearch").val(); - geocoder = new google.maps.Geocoder(); - var that = this; - geocoder.geocode( { 'address': value}, function(results, status) { - if (status != 'OK'){ - jQuery("#geosearch").val("Place name not found"); - } else { - jQuery("#geosearch").val(results[0].formatted_address); - var maxY = results[0].geometry.viewport.getNorthEast().lat(); - var maxX = results[0].geometry.viewport.getNorthEast().lng(); - var minY = results[0].geometry.viewport.getSouthWest().lat(); - var minX = results[0].geometry.viewport.getSouthWest().lng(); - var extent = minX + "," + minY + "," + maxX + "," + maxY; - //zooms to actual extent, rather than a latitude delta - that.mapObject.zoomToLayerExtent(extent); - - } - var currentFontSize = jQuery("#geosearch").css("font-size"); - var currentOpacity = jQuery("#geosearch").css("opacity"); - jQuery("#geosearch").animate({"opacity": 1, "font-size": parseInt(currentFontSize) + 2}, 500).delay(1500) - .animate({ "font-size": 0 }, 300, function(){jQuery("#geosearch").val(that.geocodeText).css({"font-size": currentFontSize, "opacity": currentOpacity});} ); - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.clearInput = function(divName){ - jQuery('#' + divName + ' :input').each(function(){ - var type = this.type; - var tag = this.tagName.toLowerCase(); - if (type == 'text' || type == 'password' || tag == 'textarea'){ - this.value = ''; - } else if (type == 'checkbox' || type == 'radio'){ - this.checked = false; - } else if (tag == 'select'){ - this.selectedIndex = 0; - } - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.clearDefault = function(inputFieldName) -{ - var searchTextElement = document.getElementById(inputFieldName); - if (searchTextElement == null) - return; - var currentValue = searchTextElement.value; - if (currentValue.indexOf("Search") == 0) - searchTextElement.value = ""; -}; - -org.OpenGeoPortal.UserInterface.prototype.searchSubmit = function(){ - //console.log("searchSubmit"); - this.resultsTableObject.searchRequest(0); - this.userInputFlag = true; -}; - -org.OpenGeoPortal.UserInterface.prototype.getCheckboxValue = function(id){ - var query = "#" + id + ":checked"; - var value = jQuery(query).val(); - if (value) - value = "on"; - else - value = "off"; - return value; -}; - -//really, this should probably go elsewhere -org.OpenGeoPortal.UserInterface.prototype.adjustTableLength = function(tableID){ - var tableID = 'searchResults'; - if (tableID == 'searchResults'){ - this.resultsTableObject.setTableLength(); - } else { - throw new Error("The specified table is not applicable."); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.toggleSearch = function(thisObj){ - var thisID = jQuery(thisObj).attr('id'); - if (thisID == 'moreSearchOptions'){ - jQuery('#basicSearchBox').animate( - {height: 'hide'}, - {queue: false, duration: 0} - ); - jQuery('#advancedSearchBox').animate( - {height: 'show'}, - {queue: false, duration: 0} - ); - } else if (thisID == 'lessSearchOptions'){ - jQuery('#basicSearchBox').animate( - {height: 'show'}, - {queue: false, duration: 0} - ); - jQuery('#advancedSearchBox').animate( - {height: 'hide'}, - {queue: false, duration: 0} - ); - } - this.resultsTableObject.setTableLength(); -}; - -org.OpenGeoPortal.UserInterface.prototype.searchPanelWidth = 450; - -org.OpenGeoPortal.UserInterface.prototype.getSearchPanelWidth = function(){ - return this.searchPanelWidth; -}; - -org.OpenGeoPortal.UserInterface.prototype.setSearchPanelWidth = function(newValue){ - this.searchPanelWidth = newValue; -}; - - -org.OpenGeoPortal.UserInterface.prototype.togglePanels = function(){ - var that = this; - jQuery('.arrow_buttons > img').click( function () { - var rollUp = that.getImage("button_arrow_up.png"); - var rollDown = that.getImage("button_arrow_down.png"); - var rollLeft = that.getImage("button_arrow_left.png"); - var rollRight = that.getImage("button_arrow_right.png"); - var tabDiv = jQuery(this).parents('.ui-tabs-panel').last(); - var userDiv = tabDiv.find('.searchBox')[0]; - - var button, - src = jQuery(this).attr("src"); - - button = (src == rollUp) && "Collapse Up" || - (src == rollDown) && "Expand Down" || - (src == rollLeft) && "Collapse Left" || - (src == rollRight) && "Expand Right"; - - analytics.track("Interface", "Expand/Collapse Buttons", button); - - switch (jQuery(this).attr('src')){ - case rollUp: - jQuery(userDiv).toggle("blind",{},250, function(){that.resultsTableObject.setTableLength();}); - jQuery(this).attr('src', rollDown); - break; - case rollDown: - var searchHeight = jQuery(userDiv).height() + parseFloat(jQuery(userDiv).css("padding-top")) + parseFloat(jQuery(userDiv).css("padding-bottom")); - var searchRowHeight = tabDiv.find('table.display > tbody > tr').first().height() || 23; - var adjRows = Math.floor(searchHeight/searchRowHeight) * -1; - that.resultsTableObject.adjustTableLength(adjRows); - jQuery(userDiv).toggle("blind",{},250, function(){that.resultsTableObject.setTableLength();}); - jQuery(this).attr('src', rollUp); - break; - case rollLeft: - //logic to expand map to full size - var panelSelector = jQuery("#left_col"); - var mapSelector = jQuery("#map"); - if (panelSelector.css("display") == "none"){ - //don't do anything; map is already full width - } else if (mapSelector.css("display") == "none"){ - //go back to previous left column width; search panels are full width - panelSelector.width(that.getSearchPanelWidth()); - panelSelector.css("display", "block"); - that.resultsTableObject.hideCol('ContentDate'); - mapSelector.width(jQuery('#container').width() - panelSelector.width() - 1); - mapSelector.add("#menu").css("display", "inline-block"); - //org.OpenGeoPortal.map.updateSize(); - //that.mapObject.updateSize(); - } else { - //display full width map - panelSelector.css("display", "none"); - jQuery("#roll_right").css("display", "block"); - jQuery(".ui-resizable-handle").css("display", "none"); - mapSelector.width(jQuery('#container').width() - 18); - //org.OpenGeoPortal.map.updateSize(); - //that.mapObject.updateSize(); - } - break; - case rollRight: - var panelSelector = jQuery("#left_col"); - var mapSelector = jQuery("#map"); - if (panelSelector.css("display") == "none"){ - //map is full width; go back to combo display - jQuery("#roll_right").css('display', 'none'); - jQuery(".ui-resizable-handle").css("display", "block"); - panelSelector.width(that.getSearchPanelWidth()); - mapSelector.width(jQuery('#container').width() - panelSelector.width() - 1); - //org.OpenGeoPortal.map.updateSize(); - //that.mapObject.updateSize(); - panelSelector.css('display', 'block'); - that.filterResults(); - } else if (mapSelector.css("display") == "none"){ - //don't do anything; search panel is already full width - } else { - //go to full width search panel - mapSelector.add("#menu").css("display", "none"); - panelSelector.width(jQuery('#container').width() - 1); - that.resultsTableObject.showCol('ContentDate'); - } - break; - default: - alert('searchBoxResize fall-through.'); - } - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.mapFilterStatus = function(eventObj){ - if (jQuery(eventObj).is(":checked")){ - jQuery(".mapFilterFlag").attr("checked", "checked"); - } else { - jQuery(".mapFilterFlag").removeAttr("checked"); - } - - this.searchSubmit(); -}; - -org.OpenGeoPortal.UserInterface.prototype.chooseSort = function(columnName){ - this.utility.whichTab().tableObject().sortColumns(columnName, false); -}; - -org.OpenGeoPortal.UserInterface.prototype.toggleColumn = function(thisObj){ - var action, - checked = jQuery(thisObj).is(":checked"), - column = jQuery(thisObj).val(); - - if (checked) { - this.utility.whichTab().tableObject().showCol(column); - } else { - this.utility.whichTab().tableObject().hideCol(column); - } - - action = checked ? "Column Added" : "Column Removed"; - - analytics.track("Change Results Columns Displayed", action, column); -}; - -org.OpenGeoPortal.UserInterface.prototype.updateSortMenu = function(){ - //these pieces should be also called when updated elsewhere - var tableObj = this.utility.whichTab().tableObject(); - - var organize = tableObj.tableOrganize.getState(); - - var fields = tableObj.tableHeadingsObj.getTableHeadings(); - var buttonHtml = fields[organize.organizeBy].displayName; - jQuery("#sortDropdownSelect > span > span").html(buttonHtml); - jQuery("#sortDropdownMenu").find("input:radio").each(function(){ - if (jQuery(this).val() == organize.organizeBy){ - jQuery(this).attr("checked", true); - } - }); - -}; - -//should add to cartTable code -org.OpenGeoPortal.UserInterface.prototype.initSortable = function(){ - var that = this; - jQuery( "#savedLayers > tbody" ).sortable({helper: "original", opacity: .5, containment: "parent", - items: "tr", tolerance: "pointer", cursor: "move", - start: function(event, ui){ - //this code is ugly...optimize - jQuery("#savedLayers .resultsControls").each(function(){ - var rowObj = jQuery(this).parent()[0]; - //console.log(rowObj); - var tableObj = jQuery("#savedLayers").dataTable(); - tableObj.fnClose(rowObj); - //why doesn't this close the row? - tableObj.fnDraw(false); - }); - }, - stop: function(event, ui){ - var dataArr = []; - var tableObj = jQuery("#savedLayers").dataTable(); - dataArr = tableObj.fnGetData(); - var newArr = []; - var openCount = 0; - jQuery("#savedLayers > tbody > tr").each(function(index, Element){ - var dataTableIndex = tableObj.fnGetPosition(Element); - if (typeof dataTableIndex == 'number'){ - newArr[index - openCount] = dataArr[dataTableIndex]; - } else { - openCount += 1; - } - }); - tableObj.fnClearTable(false); - tableObj.fnAddData(newArr); - var tableLength = newArr.length; - for (var i in newArr){ - - if (typeof that.mapObject.getLayersByName(newArr[i][0])[0] != 'undefined'){ - var layer = that.mapObject.getLayersByName(newArr[i][0])[0]; - that.mapObject.setLayerIndex(layer, tableLength - (i+1)); - } - } - - that.cartTableObject.callbackExpand(); - - } - }); -}; - - -org.OpenGeoPortal.UserInterface.prototype.openControl = function(thisObj){ - var control = jQuery(thisObj).find("div.controlContainer"); - if (control.css("display") == "none"){ - var offsetRight = control.prev().position().left - (control.width() - control.prev().width()) - 12; - control.css("left", offsetRight); - control.css("display", "block"); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.closeControl = function(thisObj){ - var control = jQuery(thisObj).find("div.controlContainer"); - control.css("display", "none"); -}; - -org.OpenGeoPortal.UserInterface.prototype.toggleChecksSaved = function(eventObj){ - var target = eventObj.target; - if (jQuery(target).is(':checked')){ - jQuery(target).attr('title', "Unselect All"); - jQuery(".cartCheckBox").each(function(){ - jQuery(this).attr('checked', true); - }); - } else { - jQuery(target).attr('title', "Select All"); - jQuery(".cartCheckBox").each(function(){ - jQuery(this).attr('checked', false); - }); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.updateSavedLayersNumber = function(){ - jQuery('.savedLayersNumber').text('(' + this.cartTableObject.numberOfResults() + ')'); -}; - -org.OpenGeoPortal.UserInterface.prototype.isRaster = function(dataType){ - //console.log(dataType); - dataType = dataType.toLowerCase(); - //console.log(dataType); - if ((dataType == "raster")||(dataType == "paper map")){ - return true; - } else { - return false; - } -}; - -org.OpenGeoPortal.UserInterface.prototype.isVector = function(dataType){ - //console.log(dataType); - dataType = dataType.toLowerCase(); - //console.log(dataType); - if ((dataType == "line")||(dataType == "point")||(dataType == "polygon")){ - return true; - } else { - return false; - } -}; - -org.OpenGeoPortal.UserInterface.prototype.downloadDialog = function(){ - //first, check to see if anything is in savedLayers & checked - var layerList = this.getLayerList("download"); - - var dialogContent = ""; - var counter = 0; - for (var i in layerList){ - counter++; - } - if (counter == 0){ - dialogContent = 'No layers have been selected.'; - } else { - //this should probably call a dialog instance for error messages/notifications - - //generate a list of appropriate choices for the chosen layers - //for now a best guess; at some point, we might be able to do something clever - //by looking at the download config file. - var showVectorControl = false; - var showRasterControl = false; - for (var layerId in layerList){ - if (this.requiresEmailAddress(layerList[layerId])){ - needEmailInput = true; - } - var dataType = layerList[layerId].dataType; - if (this.isVector(dataType)){ - showVectorControl = true; - continue; - } - if (this.isRaster(dataType)){ - showRasterControl = true; - continue; - } - } - var vectorControl = ""; - vectorControl += "
        \n"; - var rasterControl = ""; - rasterControl += "
        \n"; - var clipControl = '
        \n'; - //var emailInput = '
        \n'; - var formatLabel = "Select format for:
        \n"; - if (showVectorControl || showRasterControl){ - dialogContent += formatLabel; - if (showVectorControl){ - dialogContent += vectorControl; - } - if (showRasterControl){ - dialogContent += rasterControl; - } - dialogContent += clipControl; - - } else { - dialogContent += "The selected layers have an invalid data type and can not be downloaded."; - } - } - - var that = this; - var params = { - zIndex: 3000, - autoOpen: false, - minHeight: '30px', - width: 300, - title: "DOWNLOAD SETTINGS", - resizable: false, - modal: true - }; - if (typeof jQuery('#downloadDialog')[0] == 'undefined'){ - var downloadDiv = '
        \n'; - downloadDiv += dialogContent; - downloadDiv += '
        \n'; - jQuery('body').append(downloadDiv); - } else { - //replace dialog text/controls & open the instance of 'dialog' that already exists - jQuery("#downloadDialog").html(dialogContent); - jQuery("#downloadDialog").dialog( "option", "disabled", false ); - } - jQuery("#downloadDialog").dialog(params); - var buttons; - if (counter == 0){ - buttons = { - Cancel: function() { - jQuery(this).dialog('close'); - jQuery("#optionDetails").html(""); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection"); - } - }; - } else { - buttons = { - Continue: function() { - that.downloadContinue(); - }, - Cancel: function() { - jQuery(this).dialog('close'); - jQuery("#optionDetails").html(""); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection"); - } - }; - } - jQuery("#downloadDialog").dialog("option", "buttons", buttons); - jQuery("#downloadDialog").dialog('open'); -}; - -org.OpenGeoPortal.UserInterface.prototype.downloadContinue = function(){ - var clipped = this.isClipped(); - var vectorFormat = jQuery("#vectorDownloadType").val(); - var rasterFormat = jQuery("#rasterDownloadType").val(); - var arrBbox = []; - var layerObj; - if (clipped){ - //if this is true, we should also make sure that part or all of the requested layer is in the extent - //if not, it should be excluded - //arrBbox = org.OpenGeoPortal.map.getGeodeticExtent().toArray(); - arrBbox = this.mapObject.getGeodeticExtent().toArray(); - layerObj = this.getLayerList("download", {clipped: arrBbox}); - } else { - arrBbox = [-180,-90,180,90]; - layerObj = this.getLayerList("download"); - } - var layerIds = []; - var needEmailInput = 0; - var layerNumber = 0; - for (var layer in layerObj){ - layerNumber++; - if ((this.requiresEmailAddress(layerObj[layer]))&&(rasterFormat.toLowerCase() != "kmz")){ - needEmailInput++; - } - if (this.isVector(layerObj[layer].dataType)){ - layerIds.push(layer + "=" + vectorFormat); - } else if (this.isRaster(layerObj[layer].dataType)){ - layerIds.push(layer + "=" + rasterFormat); - } - } - var requestObj = {}; - if (arrBbox.length > 0){ - requestObj.bbox = arrBbox.join(); - } - //requestObj.format = fileFormat; - requestObj.layers = layerIds; - - //first, check to see if anything is in savedLayers & checked - var that = this; - pluralSuffix = function(totalNumber){ - var plural; - if (totalNumber > 1){ - plural = "s"; - } else { - plural = ""; - } - return plural; - }; - var downloadContinue = '
        You have selected ' + layerNumber + ' layer' + pluralSuffix(layerNumber) + ' for download.
        \n'; - var addEmail = ""; - if (needEmailInput > 0){ - addEmail += '

        \n'; - addEmail += '
        \n'; - addEmail += ''; - - } - if ((layerNumber - needEmailInput) > 0){ - downloadContinue += '
        A zip file will be generated. \n'; - downloadContinue += 'It may take up to 10 minutes to process your file.
        \n'; - downloadContinue += 'Do not close the GeoData website.
        \n'; - } - downloadContinue += addEmail; - jQuery("#downloadDialog").html(downloadContinue); - jQuery("#downloadDialog").dialog({title: "DOWNLOAD", - width: 350, - buttons: { - Download: function() { - requestObj.layerNumber = layerNumber; - var emailAddress = ""; - if (needEmailInput > 0){ - emailAddress = jQuery("#emailAddress").val(); - if (!that.checkAddress(emailAddress)){ - var warningText = 'You must enter a valid email address.'; - jQuery("#emailValidationError").html(warningText); - return; - } - } - requestObj.email = emailAddress; - that.toProcessingAnimation(jQuery(this).parent().find("button").first()); - that.requestDownload(requestObj); - }, - Cancel: function() { - jQuery(this).dialog('close'); - jQuery("#optionDetails").html(""); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection"); - } - }}); - jQuery("#emailAddress").focus(); -}; - -org.OpenGeoPortal.UserInterface.prototype.checkAddress = function(emailAddress){ - var stringArray = emailAddress.split("@"); - if (stringArray.length < 2) { - return false; - } else { - var domainArray = stringArray[1].split("."); - var userString = stringArray[0]; - if (domainArray.length < 2) { - return false; - } else if ((domainArray[0].length + domainArray[1].length + userString.length) < 3){ - return false; - } - } - return true; - -}; - -org.OpenGeoPortal.UserInterface.prototype.isClipped = function(){ - if (jQuery('#checkClip').is(':checked')){ - return true; - } else { - return false; - } -}; - -org.OpenGeoPortal.UserInterface.prototype.requestErrorMessage = function(errorMessageObj){ - - var line = ""; - for (var failedToDownload in data.failed){ - line += ""; - //for (var infoElement in data.failed[failedToDownload]){ - line += ""; - line += ''; - line += ""; - line += ""; - line += data.failed[failedToDownload]["institution"]; - line += ""; - line += ""; - line += data.failed[failedToDownload]["title"]; - line += ""; - line += ""; - line += data.failed[failedToDownload]["layerId"]; - line += ""; - line += ''; - line += data.failed[failedToDownload]["message"]; - line += ""; - //} - line += ""; - } - if (line.length > 0){ - var message = ''; - message += line; - message += "
        "; - this.genericModalDialog(message, "DOWNLOAD ERRORS"); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.requestDownloadSuccess = function(data){ - //this will simply be a request ID. add it to the request queue. - org.OpenGeoPortal.downloadQueue.registerLayerRequest(data.requestId); - - //will also have status info for requested layers in this returned object - /*var line = ""; - for (var failedToDownload in data.failed){ - line += ""; - //for (var infoElement in data.failed[failedToDownload]){ - line += ""; - line += ''; - line += ""; - line += ""; - line += data.failed[failedToDownload]["institution"]; - line += ""; - line += ""; - line += data.failed[failedToDownload]["title"]; - line += ""; - line += ""; - line += data.failed[failedToDownload]["layerId"]; - line += ""; - line += ''; - line += data.failed[failedToDownload]["message"]; - line += ""; - //} - line += ""; - } - if (line.length > 0){ - var message = ''; - message += line; - message += "
        "; - this.genericModalDialog(message, "DOWNLOAD ERRORS"); - } - if (data.succeeded.length > 0){ - //check packageLink - if (typeof data.packageLink != 'undefined'){ - jQuery("body").append(''); - } - var line = ""; - for (var successful in data.succeeded){ - if (data.succeeded[successful].disposition == "LINK_EMAILED"){ - line += ""; - line += ""; - line += data.succeeded[successful]["institution"]; - line += ""; - line += ""; - line += data.succeeded[successful]["title"]; - line += ""; - //line += ""; - //line += data.succeeded[successful]["layerId"]; - //line += ""; - //line += ""; - //line += data.succeeded[successful]["message"]; - //line += ""; - line += ""; - } - } - - if (line.length > 0){ - var message = "

        A link for the following layers was emailed to '" + requestObj.email + "'. "; - message += 'It may take up to 10 minutes to receive the email.

        '; - message += ''; - message += line; - message += "
        "; - this.genericModalDialog(message, "LAYERS EMAILED"); - } - }*/ - -}; - -org.OpenGeoPortal.UserInterface.prototype.requestDownload = function(requestObj){ - var that = this; - jQuery("#downloadDialog").dialog( "option", "disabled", true ); - - jQuery("#savedLayers tr").has(".cartCheckBox:checked").each(function() { - var data = jQuery("#savedLayers").dataTable().fnGetData(this), - inst_idx = that.resultsTableObject.tableHeadingsObj.getColumnIndex("Institution"), - layer_idx = that.resultsTableObject.tableHeadingsObj.getColumnIndex("LayerId"); - analytics.track("Layer Downloaded", data[inst_idx], data[layer_idx]); - }); - - delete requestObj.layerNumber; - var params = { - url: "requestDownload", - data: requestObj, - dataType: "json", - type: "POST", - //traditional: true, - context: this, - complete: function(){ - var noSelectionHtml = ""; - jQuery("#optionDetails").html(noSelectionHtml); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection"); - }, - success: function(data){org.OpenGeoPortal.downloadQueue.registerLayerRequest(data.requestId, requestObj);} - }; - //close the download box; - jQuery("#downloadDialog").dialog("close"); - jQuery.ajax(params); -}; - -org.OpenGeoPortal.UserInterface.prototype.genericModalDialog = function(customMessage, dialogTitle){ - - var divId = "genericModalDialog" + jQuery('.genericModalDialog').size(); - var div = '
        '; - div += customMessage; - div += '
        '; - jQuery('body').append(div); - - jQuery('#' + divId).dialog({ - zIndex: 2999, - title: dialogTitle, - resizable: true, - modal: true, - minWidth: 415, - autoOpen: false - }); - - jQuery('#' + divId).dialog('open'); - return divId; -}; - -org.OpenGeoPortal.UserInterface.prototype.requiresEmailAddress = function(layerObject){ - if ((layerObject.institution == "Harvard")&&(this.isRaster(layerObject.dataType))){ - return true; - } else { - return false; - } -}; - -org.OpenGeoPortal.UserInterface.prototype.IgnoreAuthenticationWarning = {"home": false, "external": false}; - - -org.OpenGeoPortal.UserInterface.prototype.authenticationWarning = function(checkboxObj, rowData, canLogin){ - - var that = this; - var institution = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex("Institution")]; - var ignoreWarningId = "ignoreAuthenticationWarning"; - var disposition; - var warningMessage = 'This layer is restricted by licensing agreement to the ' + institution + ' community. '; - if (canLogin){ - if (this.IgnoreAuthenticationWarning.home){ - this.cartTableObject.addToCart(checkboxObj, rowData); - return; - } - warningMessage += 'Restricted layers can be added to the Cart, but you must login before you can preview or download restricted layers.'; - ignoreWarningId += "Internal"; - disposition = "home"; - } else { - if (this.IgnoreAuthenticationWarning.external){ - this.cartTableObject.addToCart(checkboxObj, rowData); - return; - } - warningMessage += 'Restricted layers can be added to the Cart here, but you must use ' + institution; - warningMessage += "'s site and login to preview or download restricted layers."; - ignoreWarningId += "External"; - disposition = "external"; - } - - warningMessage += "
        "; - warningMessage += ''; - - var divId = this.genericModalDialog(warningMessage, "RESTRICTED LAYER"); - - var addToCartFunction = function() { - that.IgnoreAuthenticationWarning[disposition] = jQuery("#" + ignoreWarningId).is(":checked"); - jQuery(this).dialog('close'); - that.cartTableObject.addToCart(checkboxObj, rowData); - }; - - var loginAndAddFunction = function(){ - that.IgnoreAuthenticationWarning[disposition] = jQuery("#" + ignoreWarningId).is(":checked"); - //that.promptLogin(); - that.login.loginDialog(); - - //pass some info to the loginDialog - jQuery(this).dialog('disable'); - var dialogBox = jQuery('#' + divId); - jQuery(document).bind("loginSuccess.addToCart", function(){ - that.cartTableObject.addToCart(checkboxObj, rowData); - dialogBox.dialog('close'); - jQuery(document).unbind("loginSuccess.addToCart"); - }); - jQuery(document).bind("loginCancel", function(){ - dialogBox.dialog("enable"); - }); - }; - - var cancelFunction = function(){ - that.IgnoreAuthenticationWarning[disposition] = jQuery("#" + ignoreWarningId).is(":checked"); - jQuery(this).dialog('close'); - //some code to deselect the layer check box; - jQuery(checkboxObj).attr("checked", false); - }; - - var buttons = {}; - if (canLogin){ - buttons["Login & Add"] = loginAndAddFunction; - buttons["Add Only"] = addToCartFunction; - buttons["Cancel"] = cancelFunction; - } else { - buttons["Add"] = addToCartFunction; - buttons["Cancel"] = cancelFunction; - } - - jQuery('#' + divId).dialog( - {width: 535, - buttons: buttons - } - ); - - -}; - -org.OpenGeoPortal.UserInterface.prototype.availableLayerLogic = function(action, rowData){ - switch (action){ - case "mapIt": - //public vector layers only. - var institution = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Institution')].toLowerCase(); - var access = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Access')].toLowerCase(); - var dataType = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('DataType')].toLowerCase(); - - if (access != "public"){ - return false; - } else { - if (this.isVector(dataType)){ - return true; - } else { - return false; - } - } - break; - case "removeFromCart": - return true; - break; - case "shareLink": - return true; - break; - case "download": - //no external restricted layers, no local restricted layers if not logged in. - var institution = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Institution')].toLowerCase(); - var access = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Access')].toLowerCase(); - var dataType = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('DataType')].toLowerCase(); - if (dataType == "libraryrecord"){ - return false; - } - if (access == "public"){ - return true; - } else if (institution != org.OpenGeoPortal.InstitutionInfo.getHomeInstitution().toLowerCase()){ - return false; - } else if (this.login.isLoggedIn()){ - return true; - } else { - return false; - } - break; - case "webService": - //public layers only. right now, only Tufts. - var institution = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Institution')].toLowerCase(); - var access = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('Access')].toLowerCase(); - var dataType = rowData[this.cartTableObject.tableHeadingsObj.getColumnIndex('DataType')].toLowerCase(); - if (dataType == "libraryrecord"){ - return false; - } - if ((institution != "mit")||(access != "public")){ - return false; - } else { - return true; - } - break; - } - return false; -}; - -org.OpenGeoPortal.UserInterface.prototype.getLayerList = function(downloadAction, params){ - if (arguments.length < 2){ - params = {}; - params.clipped = false; - } - jQuery(".downloadSelection").removeClass("downloadSelection"); - jQuery(".downloadSelection").removeClass("downloadUnselection"); - - var layerInfo = {}; - var tableObj = jQuery("#savedLayers").dataTable(); - var checkedRows = jQuery(".cartCheckBox:checked"); - var that = this; - checkedRows.each(function(){ - var rowNode = jQuery(this).closest('tr'); - var aPos = tableObj.fnGetPosition(rowNode[0]); - var aData = tableObj.fnGetData(aPos); - var headingsObj = that.cartTableObject.tableHeadingsObj; - var minX = aData[headingsObj.getColumnIndex('MinX')]; - var minY = aData[headingsObj.getColumnIndex('MinY')]; - var maxX = aData[headingsObj.getColumnIndex('MaxX')]; - var maxY = aData[headingsObj.getColumnIndex('MinY')]; - var isValidLayer = that.availableLayerLogic(downloadAction, aData); - if (params.clipped != false){ - //do a test to see if the layer's bbox is within the clip extent - var layerBounds = new OpenLayers.Bounds(); - layerBounds.extend(new OpenLayers.LonLat(minX,minY)); - layerBounds.extend(new OpenLayers.LonLat(maxX,maxY)); - - var clipBounds = new OpenLayers.Bounds(); - clipBounds.extend(new OpenLayers.LonLat(params.clipped[0],params.clipped[1])); - clipBounds.extend(new OpenLayers.LonLat(params.clipped[2],params.clipped[3])); - //this isn't working yet - //isValidLayer = layerBounds.intersectsBounds(clipBounds); - } - if (isValidLayer){ - that.cartTableObject.downloadActionSelectRow(aPos, true); - var layerID = aData[headingsObj.getColumnIndex('LayerId')]; - //console.log(layerID); - layerInfo[layerID] = {}; - layerInfo[layerID].name = aData[headingsObj.getColumnIndex('Name')]; - layerInfo[layerID].institution = aData[headingsObj.getColumnIndex('Institution')]; - layerInfo[layerID].dataType = aData[headingsObj.getColumnIndex('DataType')]; - layerInfo[layerID].access = aData[headingsObj.getColumnIndex('Access')]; - layerInfo[layerID].bounds = [minX, minY, maxX, maxY]; - } else { - that.cartTableObject.downloadActionSelectRow(aPos, false); - } - }); - return layerInfo; -}; - -//org.OpenGeoPortal.UserInterface.prototype.downloadFromMapServer = function(requestObj) { - //modularize wms call so I can use the same code for 'save image' - /*if (!jQuery("#attachment")[0]){ - jQuery("body").append(''); - }*/ - //var url = "WMSGetMapProxy.jsp?server=" + requestObj.server + '&format=' + requestObj.format + '&bbox=' + requestObj.bbox; - /*var url = "getImage?server=" + requestObj.server + '&format=' + requestObj.format + '&bbox=' + requestObj.bbox; - url += '&srs=' + requestObj.srs + '&layers=' + requestObj.layers; - url += '&width=' + requestObj.width + '&height=' + requestObj.height + '&type=' + requestObj.type; - if (typeof requestObj.sld != 'undefined'){ - url += '&sld=' + requestObj.sld; - } - jQuery("#downloadDialog").dialog("close"); - var downloadFrameId; - do { - downloadFrameId = "downloadFrame" + parseInt(Math.random() * 10000); - } while (jQuery("#" + downloadFrameId).length > 0) - var that = this; - this.utility.showLoadIndicator("mapLoadIndicator", downloadFrameId); - jQuery("body").append(''); - jQuery("#" + downloadFrameId).bind("load", function(e){ - that.utility.hideLoadIndicator("mapLoadIndicator", downloadFrameId); - });*/ -//}; - -org.OpenGeoPortal.UserInterface.prototype.doPrint = function(){ - window.print(); - //jQuery('head > link[href="css/print.css"]').remove(); -}; - -org.OpenGeoPortal.UserInterface.prototype.printImage = function(){ - //just not fast enough to be reliable - //jQuery('head').append(''); - //setTimeout("org.OpenGeoPortal.ui.doPrint()", 100); - window.print(); -}; - - -org.OpenGeoPortal.UserInterface.prototype.toProcessingAnimation = function($fromObj){ - jQuery("#requestTickerContainer").show(); - var options = { to: "#requestTickerContainer", className: "ui-effects-transfer"}; - $fromObj.effect( "transfer", options, 500, function(){ - //org.OpenGeoPortal.ui.updateSavedLayersNumber(); - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.saveImage = function(imageFormat, resolution){ - imageFormat = 'png'; - var format; - switch (imageFormat){ - case 'jpeg': - format = "image/jpeg"; - break; - case 'png': - format = "image/png"; - break; - case 'bmp': - format = "image/bmp"; - break; - default: throw new Error("This image format (" + imageFormat + ") is unavailable."); - } - - var requestObj = {}; - requestObj.layers = []; - - for (var layer in this.mapObject.layers){ - var currentLayer = this.mapObject.layers[layer]; - if (currentLayer.CLASS_NAME != "OpenLayers.Layer.WMS"){ - continue; - } - if (currentLayer.visibility == false){ - continue; - } - - var sld = this.layerStateObject.getState(currentLayer.name, "sld"); - var opacity = this.layerStateObject.getState(currentLayer.name, "opacity"); - if (opacity == 0){ - continue; - } - //insert this opacity value into the sld to pass to the wms server - var layerObj = {}; - var storedName = this.layerStateObject.getState(currentLayer.name, "wmsName"); - if (storedName == ''){ - layerObj.name = currentLayer.params.LAYERS; - } else { - layerObj.name = storedName; - } - layerObj.opacity = opacity; - layerObj.zIndex = this.mapObject.getLayerIndex(currentLayer); - if ((typeof sld != 'undefined')&&(sld !== null)&&(sld != "")){ - var sldParams = [{wmsName: layerObj.name, layerStyle: sld}]; - //layerObj.sld = escape(this.mapObject.createSLDFromParams(sldParams)); - layerObj.sld = this.mapObject.createSLDFromParams(sldParams); - } - layerObj.layerId = currentLayer.name; - requestObj.layers.push(layerObj); - } - - var bbox; - bbox = this.mapObject.getExtent().toBBOX(); - - requestObj.format = format; - requestObj.bbox = bbox; - requestObj.srs = 'EPSG:900913'; - requestObj.width = jQuery('#map').width(); - requestObj.height = jQuery('#map').height(); - //return a url from the servlet - var params = { - url: "requestImage", - data: JSON.stringify(requestObj), - dataType: "json", - type: "POST", - context: this, - complete: function(){ - }, - success: function(data){ - org.OpenGeoPortal.downloadQueue.registerImageRequest(data.requestId, requestObj); - - //should parse errors - //will also have status info for requested layers in this returned object - /*var line = ""; - for (var failedToDownload in data.errors){ - line += ""; - //for (var infoElement in data.failed[failedToDownload]){ - line += ""; - line += ''; - line += ""; - line += ""; - //line += data.failed[failedToDownload]["institution"]; - line += ""; - line += ""; - //line += data.failed[failedToDownload]["title"]; - line += ""; - line += ""; - //line += data.failed[failedToDownload]["layerId"]; - line += ""; - line += ''; - //line += data.failed[failedToDownload]["message"]; - line += ""; - //} - line += ""; - } - if (line.length > 0){ - var message = ''; - message += line; - message += "
        "; - this.genericModalDialog(message, "DOWNLOAD ERRORS"); - }*/ - //check packageLink - /*if (typeof data.imageLink != 'undefined'){ - var downloadFrameId; - do { - downloadFrameId = "downloadFrame" + parseInt(Math.random() * 10000); - } while (jQuery("#" + downloadFrameId).length > 0) - var that = this; - this.utility.showLoadIndicator("mapLoadIndicator", downloadFrameId); - jQuery("body").append(''); - jQuery("#" + downloadFrameId).bind("load", function(e){ - that.utility.hideLoadIndicator("mapLoadIndicator", downloadFrameId); - }); - }*/ - - - } - }; - - jQuery.ajax(params); - this.toProcessingAnimation(jQuery("#map_tabs > span").first()); - - -}; - -//based on Dave's code -org.OpenGeoPortal.UserInterface.prototype.getParamsFromUrl = function() { - var params = {}; - var layers = [], hash; - var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); - for(var i = 0; i < hashes.length; i++) { - hash = hashes[i].split('='); - if ((hash[0] == "layer%5B%5D")||(hash[0] == "layer[]")){ - layers.push(hash[1]); - } else { - params[hash[0]] = hash[1]; - } - } - if (layers.length > 0){ - params.layer = layers; - } - return params; -}; - -org.OpenGeoPortal.UserInterface.prototype.addSharedLayersToCart = function(){ - var params = this.getParamsFromUrl(); - - if (typeof params.layer == 'undefined'){ - return; - } - var solr = new org.OpenGeoPortal.Solr(); - var query = solr.getInfoFromLayerIdQuery(params.layer); - solr.sendToSolr(query, this.getLayerInfoJsonpSuccess, this.getLayerInfoJsonpError, this); - var sharedExtent = params.minX + ',' + params.minY + ',' + params.maxX + ',' + params.maxY; - this.mapObject.zoomToLayerExtent(sharedExtent); - jQuery("#tabs").tabs("option", "active", 2); - this.initSortable(); -}; - -org.OpenGeoPortal.UserInterface.prototype.getLayerInfoJsonpSuccess = function(data, newContext){ - //wrong context? not sure - newCartData = newContext.cartTableObject.processData(data); - for(var i in newCartData){ - newContext.addLayerToCart(newCartData[i]); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.getLayerInfoJsonpError = function(){ - throw new Error("The attempt to retrieve layer information from layerIDs failed."); -}; -//solr query against layerIds -//process data functions, pass to this function -org.OpenGeoPortal.UserInterface.prototype.addLayerToCart = function(layerData){ - var savedTable = jQuery('#savedLayers').dataTable(); - var currentData = savedTable.fnGetData(); - layerData = [layerData]; - var newData = layerData.concat(currentData); - savedTable.fnClearTable(); - savedTable.fnAddData(newData); - this.updateSavedLayersNumber(); - //jQuery('#savedLayersNumber').text('(' + org.OpenGeoPortal.cartTableObject.numberOfResults() + ')'); - //console.log(layerData); - var headingsObj = this.cartTableObject.tableHeadingsObj; - var layerID = layerData[0][headingsObj.getColumnIndex('LayerId')]; - var dataType = layerData[0][headingsObj.getColumnIndex('DataType')]; - if (!this.layerStateObject.layerStateDefined(layerID)){ - this.layerStateObject.addNewLayer(layerID, {"dataType": dataType, "inCart": true}); - } else { - this.layerStateObject.setState(layerID, {"inCart": true}); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.shortenLink = function(longLink){ - var request = {"link": longLink}; - var url = "shortenLink"; - var that = this; - var ajaxArgs = {url: url, - data: jQuery.param(request), - type: "GET", - dataType: "json", - success: function(data){ - var shortLink = data["shortLink"]; - jQuery("#shareText").attr("rows", that.calculateRows(shortLink)); - jQuery("#shareDialog").dialog('open'); - jQuery("#shareText").text(shortLink).focus();} - }; - - jQuery.ajax(ajaxArgs); -}; - -org.OpenGeoPortal.UserInterface.prototype.calculateRows = function(theText){ - var numCharacters = theText.length; - var rows = 1; - if (numCharacters > 75){ - rows = Math.floor(numCharacters/40); - } - return rows; -}; - -org.OpenGeoPortal.UserInterface.prototype.shareLayers = function(){ - var layers = []; - var layerObj = this.getLayerList("shareLink"); - for (var layer in layerObj){ - layers.push(layer); - } - var dialogContent = ""; - if (layers.length == 0){ - dialogContent = 'No layers have been selected.'; - //this should probably call a dialog instance for error messages/notifications - } else { - var path = top.location.href.substring(0, top.location.href.lastIndexOf("/")); - var shareLink = path + "/openGeoPortalHome.jsp"; - var geodeticBbox = this.mapObject.getGeodeticExtent(); - var queryString = '?' + jQuery.param({ layer: layers, minX: geodeticBbox.left, minY: geodeticBbox.bottom, maxX: geodeticBbox.right, maxY: geodeticBbox.top }); - shareLink += queryString; - - dialogContent = ' \n'; - dialogContent += '

        Use this link to share this Cart

        '; - this.shortenLink(shareLink); - } - - this.createShareDialog(dialogContent); -}; - -org.OpenGeoPortal.UserInterface.prototype.createShareDialog = function(dialogContent){ - if (typeof jQuery('#shareDialog')[0] == 'undefined'){ - var shareDiv = '
        \n'; - shareDiv += dialogContent; - shareDiv += '
        \n'; - jQuery('body').append(shareDiv); - jQuery("#shareDialog").dialog({ - zIndex: 3000, - autoOpen: false, - width: 495, - height: 'auto', - title: 'SHARE CART', - resizable: false, - buttons: { - Close: function() { - jQuery(this).dialog('close'); - jQuery("#optionDetails").html(""); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection"); - } - }}); - } else { - //replace dialog text/controls & open the instance of 'dialog' that already exists - jQuery("#shareDialog").html(dialogContent); - } - jQuery('#shareText').focus(function(){ - // Select input field contents - this.select(); - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.shareServices = function(){ - var layerList = this.getLayerList("webService"); - var dialogContent = ""; - var queryString = []; - for (var layerId in layerList){ - //console.log(layerId); - //console.log(layerList[layerId]); - if (layerList[layerId]["access"].toLowerCase() == "public"){ - //console.log({LayerId: layerId}); - queryString.push(layerId); - } - } - if (queryString.length == 0){ - dialogContent = 'No layers have been selected.'; - } else { - //console.log(queryString); - //console.log(jQuery.param(queryString, true)); - var serviceTypes = [{"type": "WFS", "title": "Web Feature Service (WFS):", "caption": "Creates a vector web service. Only available for vector data."}, - {"type":"WMS", "title": "Web Mapping Service (WMS):", "caption": "Creates a raster web service for all your data. Vector data will be converted to raster format."}];//WCS later? - var path = top.location.href.substring(0, top.location.href.lastIndexOf("/")); - dialogContent += '

        Web Services are provided in two formats. Paste the selected link into your desktop mapping software.

        '; - dialogContent += '
        \n'; - for (var i in serviceTypes){ - dialogContent += '' + serviceTypes[i].title + '?'; - dialogContent += '
        ' + serviceTypes[i].caption + ''; - dialogContent += '
        '; - } - - dialogContent += '
        '; - - } - - - if (typeof jQuery('#shareDialog')[0] == 'undefined'){ - var shareDiv = '
        \n'; - shareDiv += '
        \n'; - jQuery('body').append(shareDiv); - jQuery("#shareServicesDialog").dialog({ - zIndex: 3000, - autoOpen: false, - height: 'auto', - title: 'WEB SERVICES', - width: 495, - buttons: { - Close: function() { - jQuery(this).dialog('close'); - jQuery("#optionDetails").html(""); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection"); - } - }}); - } - //replace dialog text/controls & open the instance of 'dialog' that already exists - jQuery("#shareServicesDialog").html(dialogContent); - var that = this; - jQuery(".shareServicesText").each(function(){ - jQuery(this).attr("rows", that.calculateRows(jQuery(this).text())); - }); - - jQuery("#shareServicesDialog").dialog('open'); - - jQuery('.shareServicesText').bind("focus", function(){ - // Select input field contents - this.select(); - }); - jQuery('.shareServicesText').first().focus(); - -}; - -/* - * - * login code - * - */ - - - -org.OpenGeoPortal.UserInterface.prototype.logoutResponse = function(data, textStatus, jqXHR) { - var that = this; - jQuery("#headerLogin").text("Login").unbind("click"); - jQuery("#headerLogin").click(function(event){that.promptLogin(event);}); - - this.login.userId = null; - this.changeControlsToLoginButtons(this.config.getHomeInstitution());//get local inst. - // - //will also need to turn on login labels for layers in search results and cart, remove - //restricted layers from preview? - //should we logout on page load to prevent weird states? or just check the state at page load? -}; - -org.OpenGeoPortal.UserInterface.prototype.promptLogin = function(event){ - //console.log("promptLogin"); - this.login.loginDialog(); -}; - - -org.OpenGeoPortal.UserInterface.prototype.changeLoginButtonsToControls = function(){ - //change login button to checkbox for institution logged in - var that = this; - jQuery(".colPreview img").each(function(){ - if (jQuery(this).attr("src") == that.getImage("view_login.png")){ - var node = jQuery(this).closest("tr"); - var tableObject = node.closest("table"); - var tableName = tableObject.attr("id"); - tableObject = tableObject.dataTable(); - var pos = tableObject.fnGetPosition(node[0]); - var row = tableObject.fnGetData(pos); - var rowObj = {}; - rowObj.aData = row; - if (tableName == "searchResults"){ - jQuery(this).parent().html(that.resultsTableObject.getActivePreviewControl(rowObj)); - } else if (tableName == "savedLayers"){ - jQuery(this).parent().html(that.cartTableObject.getActivePreviewControl(rowObj)); - } - } - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.changeControlsToLoginButtons = function(logoutInstitution){ - //change checkbox to login button for institution logged out - var that = this; - jQuery(".colPreview input").each(function(){ - var node = jQuery(this).closest("tr"); - var tableObject = node.closest("table"); - var tableName = tableObject.attr("id"); - tableObject = tableObject.dataTable(); - var pos = tableObject.fnGetPosition(node[0]); - var row = tableObject.fnGetData(pos); - var rowObj = {}; - rowObj.aData = row; - if (tableName == "searchResults"){ - jQuery(this).parent().html(that.resultsTableObject.getPreviewControl(rowObj)); - } else if (tableName == "savedLayers"){ - jQuery(this).parent().html(that.cartTableObject.getPreviewControl(rowObj)); - } - - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.applyLoginActions = function(){ - // how do we update the UI so the user know login succeeded? - this.changeLoginButtonsToControls(); - //change the login button in top right to logout - var that = this; - //console.log(this); - jQuery("#headerLogin").text("Logout"); - jQuery("#headerLogin").unbind("click"); - jQuery("#headerLogin").click(function(event){event.preventDefault(); - //for logout capability - var ajaxArgs = {url: "logout", - context: that, - dataType: "json", - success: that.logoutResponse - }; - jQuery.ajax(ajaxArgs); - }); - this.filterResults(); -}; -/* -// callback handler invoked when if an error occurs during ajax call to authenticate a user -org.OpenGeoPortal.UserInterface.prototype.loginResponseError = function(jqXHR, textStatus, errorThrown) -{ - alert("an error occured during log in: " + textStatus); - this.userId = null; -}; -*/ - -/* - * --------------------------------------------------------------- - */ - -//toggle the attribute info button & functionality -org.OpenGeoPortal.UserInterface.prototype.toggleFeatureInfo = function(thisObj, layerID, displayName){ - var layerStateObject = this.layerStateObject; - if (!layerStateObject.getState(layerID, "getFeature")){ - //update layer state - layerStateObject.setState(layerID, {"getFeature": true}); - layerStateObject.getFeatureTitle = displayName; - } else { - //update layer state, turn off get feature - layerStateObject.setState(layerID, {"getFeature": false}); - } - -}; - -//get the color from the layer state object to use for the shown swatch -org.OpenGeoPortal.UserInterface.prototype.setPaletteColor = function(layerID){ - var paletteColor = this.layerStateObject.getState(layerID, "color"); - var escapedLayerID = this.utility.idEscape(layerID); - jQuery(".colorPalette").each(function(){ - //console.log(["iterate", paletteColor]); - if (jQuery(this).is('[id$=' + escapedLayerID + ']')){ - //console.log("match"); - jQuery(this).css("background-color", paletteColor); - } - }); -}; - -//create the color picker dialog box -org.OpenGeoPortal.UserInterface.prototype.colorDialog = function(layerID, dataType){ - //create a hidden div w/ the dialog info - //create a new dialog instance, or just open the dialog if it already exists - //if it already exists, function should reset color picker to match layer - //button to apply color, button to cancel - //apply color changes state object for the layer - //call map function to apply style from the state object - var allColors = {}; - allColors.grey = ["#828282", "#9c9c9c", "#b2b2b2", "#cccccc", "#e1e1e1", "#ffffff"]; - allColors.red = ["#730000", "#a80000", "#e80000", "#ff0000", "#ff7f7f", "#ffbebe"]; - allColors.darkOrange = ["#732600", "#a83800", "#e64c00", "#ff5500", "#ffa77f", "#ffebbe"]; - allColors.orange = ["#734c00", "#a87000", "#e69800", "#ffaa00", "#ffd37f", "#ffebaf"]; - allColors.yellow = ["#737300", "#a8a800", "#e6e600", "#ffff00", "#ffff73", "#ffffbe"]; - allColors.grassGreen = ["#426e00", "#6da800", "#98e600", "#aaff00", "#d1ff73", "#e9ffbe"]; - allColors.green = ["#267300", "#38a800", "#4ce600", "#55ff00", "#a3ff73", "#d3ffbe"]; - allColors.cyan = ["#00734c", "#00a884", "#00e6a9", "#00ffc5", "#73ffdf", "#beffe8"]; - allColors.blue = ["#004c73", "#0084a8", "#00a9e6", "#00c5ff", "#73dfff", "#bee8ff"]; - allColors.indigo = ["#002673", "#0049a9", "#005ce6", "#0070ff", "#73b2ff", "#bed2ff"]; - allColors.violet = ["#4c0073", "#8400a8", "#a900e6", "#c500ff", "#df73ff", "#e8beff"]; - allColors.pink = ["#780f52", "#a80084", "#e00fa7", "#ff00c5", "#ff73df", "#ffbee8"]; - var currentColorSelection = this.layerStateObject.getState(layerID, "color"); - if (typeof jQuery('#colorDialog')[0] == 'undefined'){ - var dialogDiv = '
        \n'; - dialogDiv += '
        \n'; - jQuery('body').append(dialogDiv); - } - - var colorDiv = ''; - for (var row in allColors){ - colorDiv += ''; - for (var cell in allColors[row]){ - colorDiv += ''; - } - colorDiv += ''; - } - colorDiv += '
        '; - var currentColorValue = allColors[row][cell]; - var selectionClass; - if (currentColorValue == currentColorSelection){ - selectionClass = " colorCellSelected"; - } else { - selectionClass = ""; - } - colorDiv += '
        '; - colorDiv += '
        '; - jQuery('#colorDialog').html(colorDiv); - jQuery("#colorDialog").dialog({ - zIndex: 2999, - autoOpen: false, - width: 'auto', - height: 'auto', - title: '', - resizable: false - }); - jQuery("#colorDialog").dialog('open'); -}; - -org.OpenGeoPortal.UserInterface.prototype.selectColorCell = function(thisObj, layerID, dataType){ - jQuery('.colorCell').removeClass('colorCellSelected'); - jQuery(thisObj).addClass('colorCellSelected'); - //for IE - var selectedColor = jQuery('div.colorCellSelected').css("background-color"); - if (selectedColor.indexOf("rgb") > -1){ - selectedColor = this.utility.rgb2hex(selectedColor); - } - this.layerStateObject.setState(layerID, {color: selectedColor}); - this.setPaletteColor(layerID); - //org.OpenGeoPortal.map.changeStyle(layerID, dataType); - this.mapObject.changeStyle(layerID, dataType); -}; - -//toggle whether the applied style has an outline -org.OpenGeoPortal.UserInterface.prototype.toggleOutline = function(thisObj, layerID, dataType){ - //sets state object to match checkbox value, calls map function to apply the style to the layer - var layerStateObject = this.layerStateObject; - if (jQuery(thisObj).is(':checked') == true){ - layerStateObject.setState(layerID, {"graphicWidth": 1}); - } else { - layerStateObject.setState(layerID, {"graphicWidth": 0}); - } - //org.OpenGeoPortal.map.changeStyle(layerID, dataType); - this.mapObject.changeStyle(layerID, dataType); -}; - -org.OpenGeoPortal.UserInterface.prototype.mouseCursor = function(){ - var that = this; - var layerStateObject = this.layerStateObject; - jQuery('.olMap').css('cursor', "-moz-grab"); - jQuery(document).on('click', 'div.olControlZoomBoxItemInactive', function(){ - jQuery('.olMap').css('cursor', "-moz-zoom-in"); - var mapLayers = that.mapObject.layers; - for (var i in mapLayers){ - var currentLayer = mapLayers[i]; - if (layerStateObject.layerStateDefined(currentLayer.name)){ - if (layerStateObject.getState(currentLayer.name, "getFeature")){ - that.mapObject.events.unregister("click", currentLayer, that.mapObject.wmsGetFeature); - } - } else { - continue; - } - } - layerStateObject.resetState('getFeature'); - jQuery('.attributeInfoControl').attr('src', that.utility.getImage('preview.gif')); - }); - jQuery(document).on('click', '.olControlNavigationItemActive', function(){ - jQuery('.olMap').css('cursor', "-moz-grab"); - //var mapLayers = org.OpenGeoPortal.map.layers; - var mapLayers = that.mapObject.layers; - for (var i in mapLayers){ - var currentLayer = mapLayers[i]; - if (layerStateObject.layerStateDefined(currentLayer.name)){ - if (layerStateObject.getState(currentLayer.name, "getFeature")){ - that.mapObject.events.unregister("click", currentLayer, that.mapObject.wmsGetFeature); - } - } else { - continue; - } - } - layerStateObject.resetState('getFeature'); - jQuery('.attributeInfoControl').attr('src', that.utility.getImage('preview.gif')); - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.getImage = function(imageName){ - return this.utility.getImage(imageName); -} - -org.OpenGeoPortal.UserInterface.prototype.resizePanels = function(){ - var that = this; - jQuery("#map").resizable({handles: 'w', ghost: true, - minWidth: jQuery(".olControlPanel").width() + jQuery("#geosearchDiv").width() + jQuery("#mapLoadIndicator").width(), - maxWidth: jQuery("#container").width() - jQuery("#basicSearchBox").width(), - stop: function(event, ui) { - //var widthDelta = ui.size.width - ui.originalSize.width; - var newWidth = jQuery("#container").width() - jQuery("#map").width(); - jQuery("#map").css("left", 0); - jQuery("#left_col").width(newWidth - 1); - that.setSearchPanelWidth(jQuery("#left_col").width()); - - that.utility.whichTab().tableObject().getTableObj().fnDraw(); - that.mapObject.updateSize(); - } - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.createExportParams = function(){ - var exportParams = {}; - exportParams.layers = this.getLayerList("mapIt"); - exportParams.extent = {}; - exportParams.extent.global = this.mapObject.getSpecifiedExtent("global"); - exportParams.extent.current = this.mapObject.getSpecifiedExtent("current"); - exportParams.extent.maxForLayers = this.mapObject.getSpecifiedExtent("maxForLayers", exportParams.layers); - return exportParams; -}; - -org.OpenGeoPortal.UserInterface.prototype.cartOptionText = function(){ - var noSelectionHtml = "Choose what to do with layers in your Cart"; - jQuery("#optionDetails").html(noSelectionHtml); - var mapItHtml = "Open highlighted layers in GeoCommons to create maps"; - var shareHtml = "Create a link to share this Cart"; - var webServiceHtml = "Stream highlighted layers into an application"; - var downloadHtml = "Download highlighted layers to your computer"; - var that = this; - jQuery("#mapItButton").hover(function(){jQuery("#optionDetails").html(mapItHtml);that.getLayerList("mapIt");}, - function(){jQuery("#optionDetails").html(noSelectionHtml);jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}); - jQuery("#mapItButton").click(function(){console.log(that.getLayerList("mapIt"));var geoCommonsExport = new org.OpenGeoPortal.Export.GeoCommons(that.createExportParams()); - geoCommonsExport.exportDialog(that);}); - //jQuery("#mapItButton").click(function(){jQuery("#mapitNotice").dialog("open")}); - jQuery("#shareButton").hover(function(){jQuery("#optionDetails").html(shareHtml);that.getLayerList("shareLink");}, - function(){if ((jQuery("#shareDialog").length == 0)||(!jQuery("#shareDialog").dialog("isOpen"))){jQuery("#optionDetails").html(noSelectionHtml); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}}); - jQuery("#shareButton").click(function(){that.shareLayers();}); - jQuery("#webServiceButton").hover(function(){jQuery("#optionDetails").html(webServiceHtml);that.getLayerList("webService");}, - function(){if ((jQuery("#shareServicesDialog").length == 0)||(!jQuery("#shareServicesDialog").dialog("isOpen"))){jQuery("#optionDetails").html(noSelectionHtml); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}}); - jQuery("#webServiceButton").click(function(){that.shareServices();}); - jQuery("#downloadButton").hover(function(){jQuery("#optionDetails").html(downloadHtml);that.getLayerList("download");}, - function(){if ((jQuery("#downloadDialog").length == 0)||(!jQuery("#downloadDialog").dialog("isOpen"))){jQuery("#optionDetails").html(noSelectionHtml); - jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}}); - jQuery("#downloadButton").click(function(){that.downloadDialog();}); - jQuery("#removeFromCartButton").hover(function(){that.getLayerList("removeFromCart");}, - function(){jQuery(".downloadSelection, .downloadUnselection").removeClass("downloadSelection downloadUnselection");}); - jQuery("#removeFromCartButton").click(function(){that.cartTableObject.removeRows();}); -}; - -org.OpenGeoPortal.UserInterface.prototype.anchorsToNiceScroll = function(affectedDiv, offsetHash){ - jQuery("#" + affectedDiv + " a.niceScroll").click(function(event){ - event.preventDefault(); - //parse the hrefs for the anchors in this DOM element into toID - var toID = jQuery(this).attr("href"); - jQuery("#" + affectedDiv).scrollTo(jQuery(toID), {offset: offsetHash }); - }); -}; - -org.OpenGeoPortal.UserInterface.prototype.dialogTemplate = function dialogTemplate(dialogDivId, dialogContent, dialogTitle, buttonsObj) { - if (typeof jQuery('#' + dialogDivId)[0] == 'undefined'){ - var dialogDiv = '
        \n'; - dialogDiv += dialogContent; - dialogDiv += '
        \n'; - jQuery('body').append(dialogDiv); - jQuery("#" + dialogDivId).dialog({ - zIndex: 3000, - autoOpen: false, - width: 'auto', - title: dialogTitle.toUpperCase(), - resizable: true, - buttons: buttonsObj - }); - } else { - //replace dialog text/controls & open the instance of 'dialog' that already exists - jQuery("#" + dialogDivId).html(dialogContent); - jQuery("#" + dialogDivId).dialog("option", "buttons", buttonsObj); - - } - jQuery("#" + dialogDivId).dialog('open'); -}; - -org.OpenGeoPortal.UserInterface.prototype.minimizeDialog = function(dialogId){ - //1. collect current state of dialog before minimizing. - //2. attach that info to the dialog element (jQuery.data) - //3. also attach a flag that indicates minimized or not - //4. minimize the dialog. (header bar only) - //5. change position to lower right corner (fixed to bottom of window) - //6. animate the movement - //can I just toggle a class? - //7. animated message in toolbar that describes what's being done - if (!this.isDialogMinimized(dialogId)) { - jQuery("#" + dialogId).data({"minimized": true}); - var position = jQuery("#" + dialogId).dialog( "option", "position" ); - jQuery("#" + dialogId).data({"maxPosition": position}); - jQuery("#" + dialogId).parent().children().each( - function(){ - if (!jQuery(this).hasClass("ui-dialog-titlebar")){ - jQuery(this).hide(); - } - }); - jQuery("#" + dialogId).dialog("option","position", ["right","bottom"]); - jQuery("#" + dialogId).parent().css("position", "fixed"); - } -}; - -org.OpenGeoPortal.UserInterface.prototype.isDialogMinimized = function(dialogId){ - var result; - /*if (typeof jQuery("#" + dialogId).data() == "undefined"){ - jQuery("#" + dialogId).data({"minimized": false}); - result = false; - } else if (jQuery("#" + dialogId).data() == null){ - jQuery("#" + dialogId).data({"minimized": false}); - result = false; - } else*/ if (jQuery("#" + dialogId).data().minimized) { - result = true; - } else { - result = false; - } - //console.log(jQuery("#" + dialogId).data().minimized); - return result; -}; - -org.OpenGeoPortal.UserInterface.prototype.maximizeDialog = function(dialogId){ - //1. check minimized flag - //2. read stored state values - //3. apply stored state values - //4. animate the movement - //5. turn off animated message (?) - if (this.isDialogMinimized(dialogId)) { - jQuery("#" + dialogId).parent().children().each( - function(){ - if (!jQuery(this).hasClass("ui-dialog-titlebar")){ - jQuery(this).show(); - } - }); - jQuery("#" + dialogId).data({"minimized": false}); - var position = jQuery("#" + dialogId).data().maxPosition; - jQuery("#" + dialogId).dialog("option", "position", position); - jQuery("#" + dialogId).parent().css("position", "absolute"); - } - //>>> jQuery("#geoCommonsExportDialog").dialog("option", "position", jQuery("#geoCommonsExportDialog").data("maxPosition")) -}; - - -org.OpenGeoPortal.UserInterface.prototype.autocomplete = function(){ - - jQuery( "#advancedOriginatorText" ).autocomplete({ - source: function( request, response ) { - var solr = new org.OpenGeoPortal.Solr(); - var fieldName = "OriginatorSort"; - var query = solr.getTermQuery(fieldName, request.term); - var facetSuccess = function(data){ - var labelArr = []; - var dataArr = data.terms[fieldName]; - for (var i in dataArr){ - if (i%2 != 0){ - continue; - } - var temp = {"label": dataArr[i], "value": '"' + dataArr[i] + '"'}; - labelArr.push(temp); - i++; - i++; - } - response(labelArr); - }; - var facetError = function(){}; - solr.termQuery(query, facetSuccess, facetError, this); - - }, - minLength: 2, - select: function( event, ui ) { - - }, - open: function() { - jQuery( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" ); - }, - close: function() { - jQuery( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" ); - } - }); -}; - diff --git a/geoportal_1/src/main/webapp/resources/javascript/utility.js b/geoportal_1/src/main/webapp/resources/javascript/utility.js deleted file mode 100644 index f44adcb..0000000 --- a/geoportal_1/src/main/webapp/resources/javascript/utility.js +++ /dev/null @@ -1,221 +0,0 @@ -/* This javascript module includes utility functions for OpenGeoPortal plus - * extra functions with no current home. org.OpenGeoPortal.Utility is a - * namespace rather than an object. The XML functions might go away when we - * upgrade to a newer version of jQuery, as it contains functions to parse XML. - * - * author: Chris Barnett - * - */ - -if (typeof org == 'undefined'){ - org = {}; -} else if (typeof org != "object"){ - throw new Error("org already exists and is not an object"); -} - -// Repeat the creation and type-checking code for the next level -if (typeof org.OpenGeoPortal == 'undefined'){ - org.OpenGeoPortal = {}; -} else if (typeof org.OpenGeoPortal != "object"){ - throw new Error("org.OpenGeoPortal already exists and is not an object"); -} - -if (typeof org.OpenGeoPortal.Utility == 'undefined'){ - org.OpenGeoPortal.Utility = {}; -} else if (typeof org.OpenGeoPortal.Utility != "object"){ - throw new Error("org.OpenGeoPortal.Utility already exists and is not an object"); -} - -org.OpenGeoPortal.Utility.ImageLocation = "resources/media/"; -org.OpenGeoPortal.Utility.CssLocation = "resources/css/"; -org.OpenGeoPortal.Utility.JspfLocation = "jspf/" - -org.OpenGeoPortal.Utility.InitSet = false; - -org.OpenGeoPortal.Utility.getImage = function(imageName){ - return org.OpenGeoPortal.Utility.ImageLocation + imageName; -}; - -org.OpenGeoPortal.Utility.CurrentTab = 1; -org.OpenGeoPortal.Utility.whichTab = function(){ - var tabInfo = {}; - var tabIndex; - if (arguments.length > 0){ - tabIndex = arguments[0]; - } else { - tabIndex = org.OpenGeoPortal.Utility.CurrentTab; - } - tabInfo.index = tabIndex; - switch (tabIndex){ - case 0: - tabInfo.name = 'welcome'; - tabInfo.tableObject = false; - tabInfo.tableDiv = false; - tabInfo.tableName = false; - break; - case 1: - tabInfo.name = 'search'; - tabInfo.tableObject = function(){return org.OpenGeoPortal.resultsTableObj;}; - tabInfo.tableDiv = 'resultsTable'; - tabInfo.tableName = 'searchResults'; - break; - case 2: - tabInfo.name = 'saved'; - tabInfo.tableObject = function(){return org.OpenGeoPortal.cartTableObj;}; - tabInfo.tableDiv = 'savedLayersTable'; - tabInfo.tableName = 'savedLayers'; - break; - default: - //throw new Error('No tab is selected.'); - } - return tabInfo; -}; - - -org.OpenGeoPortal.Utility.whichSearch = function(){ - var activeSearchDiv = null; - jQuery(".searchBox > div").each(function(){ - if (jQuery(this).css("display") == 'block'){ - activeSearchDiv = jQuery(this).attr("id"); - } - }); - var searchInfo = {}; - //searchInfo.script = 'solrSearchHandler.jsp'; - switch (activeSearchDiv){ - case "basicSearchBox": - searchInfo.type = 'basicSearch'; - break; - case "advancedSearchBox": - searchInfo.type = 'advancedSearch'; - break; - default: - //throw new Error('No tab is selected.'); - } - return searchInfo; -}; - -org.OpenGeoPortal.Utility.rgb2hex = function(rgb) { - rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); - function hex(x) { - return ("0" + parseInt(x).toString(16)).slice(-2); - } - return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); -}; - -org.OpenGeoPortal.Utility.hexFromRGB = function(r, g, b) { - var hex = [ - r.toString(16), - g.toString(16), - b.toString(16) - ]; - jQuery.each(hex, function (nr, val) { - if (val.length == 1) { - hex[nr] = '0' + val; - } - }); - return hex.join('').toUpperCase(); -}; - -org.OpenGeoPortal.Utility.idEscape = function (domElementID) { - return domElementID.replace(/(:|\.)/g,'\\$1'); -}; - -org.OpenGeoPortal.Utility.getMetadata = function (layerId){ - var params = { - url: "getMetadata.jsp?layer=" + layerId, - dataType: 'xml', - success: function(data){ - console.log(data); - } - }; - jQuery.ajax(params); -}; - -org.OpenGeoPortal.Utility.escapeQuotes = function(stringOfInterest){ - return stringOfInterest.replace("'", "\\'").replace('"', '\\"'); - -}; - -org.OpenGeoPortal.Utility.stripExtraSpaces = function(stringOfInterest){ - stringOfInterest = stringOfInterest.replace("\n", ""); - return stringOfInterest.replace(/\s+/g, ' '); -}; - -org.OpenGeoPortal.Utility.loadIndicatorStatus = {"intervalId": "", "currentRequests": 0}; - -org.OpenGeoPortal.Utility.indicatorAnimationStart = function(div){ - var indicatorFunction = function(){ - try{ - indicator.css("background-position", - function(a,b){ - var y = parseInt(b.substr(b.indexOf(" "))); - y -= 25; - var value = "0 " + y + "px"; - return value;}); - } catch (e){} - }; - var indicator = jQuery('#' + div); - indicator.css("background-image", "url('" + org.OpenGeoPortal.Utility.getImage("progress.png") + "')"); - var intervalId = setInterval(indicatorFunction, 84); - return intervalId; -}; - -org.OpenGeoPortal.Utility.showLoadIndicator = function(div){ - var that = this; - /*var indicatorFunction = function(){ - try{ - indicator.css("background-position", - function(a,b){ - var y = parseInt(b.substr(b.indexOf(" "))); - y -= 25; - var value = "0 " + y + "px"; - return value;}); - } catch (e){} - };*/ - var indicator = jQuery('#' + div); - //var j = 1; - //no current ajax requests, so we can start a new indicator - if (that.loadIndicatorStatus["currentRequests"] == 0){ - //indicator.css("background-image", "url('" + org.OpenGeoPortal.Utility.getImage("progress.png") + "')"); - - that.loadIndicatorStatus["intervalId"] = org.OpenGeoPortal.Utility.indicatorAnimationStart(div); - indicator.fadeIn(); - that.loadIndicatorStatus["currentRequests"] = 1; - } else { - //we don't need to setInterval or change intervalId; we do need to push a value into currentRequests - /*var requests = that.loadIndicatorStatus["currentRequests"]; - for (var i in requests){ - if (requests[i] > j){ - j = requests[i]; - } - } - j++;*/ - //pass in a value that is 1 larger than the largest value in the array to keep uniqueness - that.loadIndicatorStatus["currentRequests"] += 1; - } - //return j; - //console.log(that.loadIndicatorStatus["currentRequests"]); - }; - -org.OpenGeoPortal.Utility.hideLoadIndicator = function(div){ - var that = this; - var indicator = jQuery('#' + div); - - //remove the passed ajaxRequestId from the currentRequests array. if the array is now empty, then proceed - - /*var requests = that.loadIndicatorStatus["currentRequests"]; - for (var i in requests){ - if (requests[i] == requestId){ - that.loadIndicatorStatus["currentRequests"].splice(i, 1); - break; - } - }*/ - that.loadIndicatorStatus["currentRequests"] -= 1; - if (that.loadIndicatorStatus["currentRequests"] == 0){ - indicator.fadeOut(); - clearInterval(that.loadIndicatorStatus["intervalId"]); - that.loadIndicatorStatus["intervalId"] = ""; - } - -}; - diff --git a/geoportal_1/src/main/webapp/resources/media/OGP_logo.png b/geoportal_1/src/main/webapp/resources/media/OGP_logo.png new file mode 100644 index 0000000..bc73c4a Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/OGP_logo.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/blue_button_off.png b/geoportal_1/src/main/webapp/resources/media/blue_button_off.png new file mode 100644 index 0000000..aea2f67 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/blue_button_off.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/blue_button_on.png b/geoportal_1/src/main/webapp/resources/media/blue_button_on.png new file mode 100644 index 0000000..601a17a Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/blue_button_on.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/geodata-sprite-old.png b/geoportal_1/src/main/webapp/resources/media/geodata-sprite-old.png new file mode 100644 index 0000000..e48258c Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/geodata-sprite-old.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/gray_button_off.png b/geoportal_1/src/main/webapp/resources/media/gray_button_off.png new file mode 100644 index 0000000..d550161 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/gray_button_off.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/gray_button_on.png b/geoportal_1/src/main/webapp/resources/media/gray_button_on.png new file mode 100644 index 0000000..10cc3e3 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/gray_button_on.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/ogp-institutions.png b/geoportal_1/src/main/webapp/resources/media/ogp-institutions.png new file mode 100644 index 0000000..25ad662 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/ogp-institutions.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/ogp-sprite.png b/geoportal_1/src/main/webapp/resources/media/ogp-sprite.png new file mode 100644 index 0000000..8862531 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/ogp-sprite.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/ogp-sprite.psd b/geoportal_1/src/main/webapp/resources/media/ogp-sprite.psd new file mode 100644 index 0000000..2bde160 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/ogp-sprite.psd differ diff --git a/geoportal_1/src/main/webapp/resources/media/ogp-sprite_old.png b/geoportal_1/src/main/webapp/resources/media/ogp-sprite_old.png new file mode 100644 index 0000000..afc2233 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/ogp-sprite_old.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/Sorting icons.psd b/geoportal_1/src/main/webapp/resources/media/oldMedia/Sorting icons.psd similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/Sorting icons.psd rename to geoportal_1/src/main/webapp/resources/media/oldMedia/Sorting icons.psd diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/UN-instance3[1].png b/geoportal_1/src/main/webapp/resources/media/oldMedia/UN-instance3[1].png new file mode 100644 index 0000000..e8125dc Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/UN-instance3[1].png differ diff --git a/geoportal_1/src/main/webapp/resources/media/advanced_search.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/advanced_search.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/advanced_search.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/advanced_search.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_back.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_back.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_back_blue.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_blue.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_back_blue.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_blue.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_back_disable.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_disable.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_back_disable.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_disable.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_back_disable_old.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_disable_old.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_back_disable_old.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_disable_old.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_back_down.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_down.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_back_down.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_down.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_back_old.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_old.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_back_old.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_back_old.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_down.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_down.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_down.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_down.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_forward.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_forward.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_forward_blue.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_blue.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_forward_blue.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_blue.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_forward_disable.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_disable.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_forward_disable.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_disable.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_forward_disable_old.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_disable_old.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_forward_disable_old.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_disable_old.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_forward_down.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_down.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_forward_down.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_down.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_forward_old.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_old.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_forward_old.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_forward_old.png diff --git a/geoportal_1/src/main/webapp/resources/media/arrow_right.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_right.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/arrow_right.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_right.png diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_up_white.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_up_white.png new file mode 100644 index 0000000..565dd49 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/arrow_up_white.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/back_disabled.jpg b/geoportal_1/src/main/webapp/resources/media/oldMedia/back_disabled.jpg similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/back_disabled.jpg rename to geoportal_1/src/main/webapp/resources/media/oldMedia/back_disabled.jpg diff --git a/geoportal_1/src/main/webapp/resources/media/back_enabled.jpg b/geoportal_1/src/main/webapp/resources/media/oldMedia/back_enabled.jpg similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/back_enabled.jpg rename to geoportal_1/src/main/webapp/resources/media/oldMedia/back_enabled.jpg diff --git a/geoportal_1/src/main/webapp/resources/media/bg_grayfade.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/bg_grayfade.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/bg_grayfade.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/bg_grayfade.png diff --git a/geoportal_1/src/main/webapp/resources/media/bg_grayfade_vert.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/bg_grayfade_vert.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/bg_grayfade_vert.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/bg_grayfade_vert.png diff --git a/geoportal_1/src/main/webapp/resources/media/bg_tile.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/bg_tile.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/bg_tile.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/bg_tile.gif diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/blank.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/blank.gif new file mode 100644 index 0000000..4bcc753 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/blank.gif differ diff --git a/geoportal_1/src/main/webapp/resources/media/button_add.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_add.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_add.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_add.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_add_check.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_add_check.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_add_check.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_add_check.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_apply.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_apply.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_apply.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_apply.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_apply_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_apply_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_apply_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_apply_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_arrow_down.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_arrow_down.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_arrow_down.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_arrow_down.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_arrow_left.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_arrow_left.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_arrow_left.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_arrow_left.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_arrow_right.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_arrow_right.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_arrow_right.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_arrow_right.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_arrow_up.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_arrow_up.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_arrow_up.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_arrow_up.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_clear.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_clear.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_clear.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_clear.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_clear_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_clear_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_clear_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_clear_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_close.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_close.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_close.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_close.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_close_dialog.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_close_dialog.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_close_dialog.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_close_dialog.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_close_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_close_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_close_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_close_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_download.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_download.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_download.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_download.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_go.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_go.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_go.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_go.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_login_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_login_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_login_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_login_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_off.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_off.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_off.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_off.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_on_check.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_on_check.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_on_check.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_on_check.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_organize.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_organize.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_organize.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_organize.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_print.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_print.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_print.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_print.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_print_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_print_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_print_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_print_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_remove.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_remove.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_remove.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_remove.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_save.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_save.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_save.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_save.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_save_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_save_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_save_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_save_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_search.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_search.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_search.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_search.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_search_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_search_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_search_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_search_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_selectall.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_selectall.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_selectall.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_selectall.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_share_layer.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_share_layer.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_share_layer.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_share_layer.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_view.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_view.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_view.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_view.png diff --git a/geoportal_1/src/main/webapp/resources/media/button_view_check.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/button_view_check.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/button_view_check.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/button_view_check.png diff --git a/geoportal_1/src/main/webapp/resources/media/dropdown_basemap.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/dropdown_basemap.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/dropdown_basemap.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/dropdown_basemap.png diff --git a/geoportal_1/src/main/webapp/resources/media/dropdown_datadensity.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/dropdown_datadensity.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/dropdown_datadensity.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/dropdown_datadensity.png diff --git a/geoportal_1/src/main/webapp/resources/media/favicon.ico b/geoportal_1/src/main/webapp/resources/media/oldMedia/favicon.ico similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/favicon.ico rename to geoportal_1/src/main/webapp/resources/media/oldMedia/favicon.ico diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/footer_logo.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/footer_logo.png new file mode 100644 index 0000000..b7c7311 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/footer_logo.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/forward_disabled.jpg b/geoportal_1/src/main/webapp/resources/media/oldMedia/forward_disabled.jpg similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/forward_disabled.jpg rename to geoportal_1/src/main/webapp/resources/media/oldMedia/forward_disabled.jpg diff --git a/geoportal_1/src/main/webapp/resources/media/forward_enabled.jpg b/geoportal_1/src/main/webapp/resources/media/oldMedia/forward_enabled.jpg similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/forward_enabled.jpg rename to geoportal_1/src/main/webapp/resources/media/oldMedia/forward_enabled.jpg diff --git a/geoportal_1/src/main/webapp/resources/media/full_extent.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/full_extent.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/full_extent.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/full_extent.png diff --git a/geoportal_1/src/main/webapp/resources/media/full_extent_hover.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/full_extent_hover.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/full_extent_hover.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/full_extent_hover.png diff --git a/geoportal_1/src/main/webapp/resources/media/full_extent_hover_old.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/full_extent_hover_old.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/full_extent_hover_old.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/full_extent_hover_old.png diff --git a/geoportal_1/src/main/webapp/resources/media/full_extent_old.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/full_extent_old.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/full_extent_old.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/full_extent_old.png diff --git a/geoportal_1/src/main/webapp/resources/media/header_advancedsearch.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/header_advancedsearch.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/header_advancedsearch.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/header_advancedsearch.png diff --git a/geoportal_1/src/main/webapp/resources/media/header_bg.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/header_bg.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/header_bg.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/header_bg.gif diff --git a/geoportal_1/src/main/webapp/resources/media/header_colors.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/header_colors.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/header_colors.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/header_colors.png diff --git a/geoportal_1/src/main/webapp/resources/media/header_search.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/header_search.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/header_search.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/header_search.png diff --git a/geoportal_1/src/main/webapp/resources/media/header_searchresults.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/header_searchresults.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/header_searchresults.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/header_searchresults.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_colorpalette.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_colorpalette.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_colorpalette.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_colorpalette.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_colorswatch.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_colorswatch.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_colorswatch.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_colorswatch.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_crosshair_off.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_crosshair_off.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_crosshair_off.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_crosshair_off.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_crosshair_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_crosshair_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_crosshair_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_crosshair_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_crosshairs.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_crosshairs.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_crosshairs.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_crosshairs.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_meta.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_meta.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_meta.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_meta.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_meta_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_meta_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_meta_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_meta_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_viewer.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_viewer.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_viewer.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_viewer.png diff --git a/geoportal_1/src/main/webapp/resources/media/icon_zoom.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/icon_zoom.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/icon_zoom.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/icon_zoom.png diff --git a/geoportal_1/src/main/webapp/resources/media/info_icon.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/info_icon.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/info_icon.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/info_icon.png diff --git a/geoportal_1/src/main/webapp/resources/media/info_icon_over.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/info_icon_over.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/info_icon_over.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/info_icon_over.png diff --git a/geoportal_1/src/main/webapp/resources/media/logo.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/logo.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/logo.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/logo.gif diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/map_buttons_active.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/map_buttons_active.png new file mode 100644 index 0000000..76e4b27 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/map_buttons_active.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_arrow.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_arrow.png new file mode 100644 index 0000000..d0822d9 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_arrow.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_arrow_inactive.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_arrow_inactive.png new file mode 100644 index 0000000..93396e2 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_arrow_inactive.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_bg.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_bg.png new file mode 100644 index 0000000..da2747c Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_bg.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/opacity_bg_old.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_bg_old.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/opacity_bg_old.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_bg_old.png diff --git a/geoportal_1/src/main/webapp/resources/media/opacity_placeholder.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_placeholder.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/opacity_placeholder.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/opacity_placeholder.png diff --git a/geoportal_1/src/main/webapp/resources/media/overview_minus.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/overview_minus.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/overview_minus.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/overview_minus.png diff --git a/geoportal_1/src/main/webapp/resources/media/overview_plus.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/overview_plus.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/overview_plus.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/overview_plus.png diff --git a/geoportal_1/src/main/webapp/resources/media/pan_off.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pan_off.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pan_off.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pan_off.png diff --git a/geoportal_1/src/main/webapp/resources/media/pan_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pan_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pan_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pan_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/panarrows.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/panarrows.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/panarrows.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/panarrows.png diff --git a/geoportal_1/src/main/webapp/resources/media/pandarrows_east.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_east.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pandarrows_east.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_east.png diff --git a/geoportal_1/src/main/webapp/resources/media/pandarrows_east_hover.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_east_hover.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pandarrows_east_hover.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_east_hover.png diff --git a/geoportal_1/src/main/webapp/resources/media/pandarrows_north.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_north.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pandarrows_north.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_north.png diff --git a/geoportal_1/src/main/webapp/resources/media/pandarrows_north_hover.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_north_hover.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pandarrows_north_hover.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_north_hover.png diff --git a/geoportal_1/src/main/webapp/resources/media/pandarrows_south.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_south.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pandarrows_south.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_south.png diff --git a/geoportal_1/src/main/webapp/resources/media/pandarrows_south_hover.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_south_hover.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pandarrows_south_hover.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_south_hover.png diff --git a/geoportal_1/src/main/webapp/resources/media/pandarrows_west.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_west.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pandarrows_west.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_west.png diff --git a/geoportal_1/src/main/webapp/resources/media/pandarrows_west_hover.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_west_hover.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/pandarrows_west_hover.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/pandarrows_west_hover.png diff --git a/geoportal_1/src/main/webapp/resources/media/placeholder_map.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/placeholder_map.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/placeholder_map.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/placeholder_map.gif diff --git a/geoportal_1/src/main/webapp/resources/media/preview.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/preview.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/preview.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/preview.gif diff --git a/geoportal_1/src/main/webapp/resources/media/preview_down.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/preview_down.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/preview_down.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/preview_down.gif diff --git a/geoportal_1/src/main/webapp/resources/media/progress.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/progress.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/progress.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/progress.png diff --git a/geoportal_1/src/main/webapp/resources/media/save_icon.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/save_icon.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/save_icon.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/save_icon.png diff --git a/geoportal_1/src/main/webapp/resources/media/save_icon_check.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/save_icon_check.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/save_icon_check.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/save_icon_check.png diff --git a/geoportal_1/src/main/webapp/resources/media/save_icon_yes.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/save_icon_yes.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/save_icon_yes.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/save_icon_yes.png diff --git a/geoportal_1/src/main/webapp/resources/media/shoppingcart.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/shoppingcart.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/shoppingcart.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/shoppingcart.png diff --git a/geoportal_1/src/main/webapp/resources/media/shoppingcart_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/shoppingcart_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/shoppingcart_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/shoppingcart_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/slider.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/slider.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/slider.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/slider.png diff --git a/geoportal_1/src/main/webapp/resources/media/slider_bar.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/slider_bar.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/slider_bar.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/slider_bar.png diff --git a/geoportal_1/src/main/webapp/resources/media/slider_minus.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/slider_minus.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/slider_minus.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/slider_minus.png diff --git a/geoportal_1/src/main/webapp/resources/media/slider_minus_hover.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/slider_minus_hover.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/slider_minus_hover.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/slider_minus_hover.png diff --git a/geoportal_1/src/main/webapp/resources/media/slider_plus.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/slider_plus.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/slider_plus.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/slider_plus.png diff --git a/geoportal_1/src/main/webapp/resources/media/slider_plus_hover.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/slider_plus_hover.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/slider_plus_hover.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/slider_plus_hover.png diff --git a/geoportal_1/src/main/webapp/resources/media/sort_asc.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/sort_asc.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/sort_asc.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/sort_asc.png diff --git a/geoportal_1/src/main/webapp/resources/media/sort_asc_disabled.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/sort_asc_disabled.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/sort_asc_disabled.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/sort_asc_disabled.png diff --git a/geoportal_1/src/main/webapp/resources/media/sort_both.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/sort_both.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/sort_both.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/sort_both.png diff --git a/geoportal_1/src/main/webapp/resources/media/sort_desc.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/sort_desc.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/sort_desc.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/sort_desc.png diff --git a/geoportal_1/src/main/webapp/resources/media/sort_desc_disabled.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/sort_desc_disabled.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/sort_desc_disabled.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/sort_desc_disabled.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_berkeley.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_berkeley.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_berkeley.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_berkeley.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_cambridge.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_cambridge.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_cambridge.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_cambridge.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_harvard.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_harvard.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_harvard.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_harvard.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_maryland.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_maryland.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_maryland.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_maryland.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_massgis.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_massgis.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_massgis.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_massgis.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_mit.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_mit.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_mit.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_mit.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_princeton.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_princeton.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_princeton.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_princeton.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_tufts.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_tufts.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_tufts.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_tufts.png diff --git a/geoportal_1/src/main/webapp/resources/media/src_un.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/src_un.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/src_un.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/src_un.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_advsearch_off.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_advsearch_off.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_advsearch_off.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_advsearch_off.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_advsearch_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_advsearch_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_advsearch_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_advsearch_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_bg.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_bg.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_bg.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_bg.gif diff --git a/geoportal_1/src/main/webapp/resources/media/tab_bg.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_bg.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_bg.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_bg.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_gettingstarted_off.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_gettingstarted_off.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_gettingstarted_off.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_gettingstarted_off.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_gettingstarted_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_gettingstarted_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_gettingstarted_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_gettingstarted_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_savedlayers_off.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_savedlayers_off.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_savedlayers_off.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_savedlayers_off.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_savedlayers_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_savedlayers_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_savedlayers_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_savedlayers_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_search_off.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_search_off.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_search_off.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_search_off.png diff --git a/geoportal_1/src/main/webapp/resources/media/tab_search_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/tab_search_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/tab_search_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/tab_search_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/title.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/title.png new file mode 100644 index 0000000..77d91a8 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/title.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/oldMedia/top_menu_bg_un.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/top_menu_bg_un.png new file mode 100644 index 0000000..bfd876d Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/oldMedia/top_menu_bg_un.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/type_arc.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/type_arc.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/type_arc.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/type_arc.png diff --git a/geoportal_1/src/main/webapp/resources/media/type_dot.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/type_dot.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/type_dot.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/type_dot.png diff --git a/geoportal_1/src/main/webapp/resources/media/type_library.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/type_library.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/type_library.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/type_library.png diff --git a/geoportal_1/src/main/webapp/resources/media/type_map.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/type_map.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/type_map.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/type_map.png diff --git a/geoportal_1/src/main/webapp/resources/media/type_polygon.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/type_polygon.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/type_polygon.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/type_polygon.png diff --git a/geoportal_1/src/main/webapp/resources/media/type_raster.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/type_raster.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/type_raster.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/type_raster.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-anim_basic_16x16.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-anim_basic_16x16.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-anim_basic_16x16.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-anim_basic_16x16.gif diff --git a/geoportal_1/src/main/webapp/resources/media/ui-bg_flat_0_aaaaaa_40x100.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-bg_flat_0_aaaaaa_40x100.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-bg_flat_75_ffffff_40x100.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-bg_flat_75_ffffff_40x100.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_flat_75_ffffff_40x100.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-bg_glass_55_fbf9ee_1x400.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-bg_glass_55_fbf9ee_1x400.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-bg_glass_65_ffffff_1x400.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-bg_glass_65_ffffff_1x400.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_65_ffffff_1x400.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-bg_glass_75_dadada_1x400.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-bg_glass_75_dadada_1x400.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_75_dadada_1x400.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-bg_glass_75_e6e6e6_1x400.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-bg_glass_75_e6e6e6_1x400.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-bg_glass_95_fef1ec_1x400.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-bg_glass_95_fef1ec_1x400.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_glass_95_fef1ec_1x400.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-bg_highlight-soft_75_cccccc_1x100.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-bg_highlight-soft_75_cccccc_1x100.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-icons_222222_256x240.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_222222_256x240.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-icons_222222_256x240.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_222222_256x240.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-icons_2e83ff_256x240.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_2e83ff_256x240.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-icons_2e83ff_256x240.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_2e83ff_256x240.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-icons_454545_256x240.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_454545_256x240.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-icons_454545_256x240.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_454545_256x240.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-icons_888888_256x240.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_888888_256x240.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-icons_888888_256x240.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_888888_256x240.png diff --git a/geoportal_1/src/main/webapp/resources/media/ui-icons_cd0a0a_256x240.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_cd0a0a_256x240.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/ui-icons_cd0a0a_256x240.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/ui-icons_cd0a0a_256x240.png diff --git a/geoportal_1/src/main/webapp/resources/media/view_external.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/view_external.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/view_external.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/view_external.png diff --git a/geoportal_1/src/main/webapp/resources/media/view_hide.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/view_hide.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/view_hide.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/view_hide.png diff --git a/geoportal_1/src/main/webapp/resources/media/view_login.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/view_login.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/view_login.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/view_login.png diff --git a/geoportal_1/src/main/webapp/resources/media/view_show.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/view_show.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/view_show.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/view_show.png diff --git a/geoportal_1/src/main/webapp/resources/media/zoom-minus-mini.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/zoom-minus-mini.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/zoom-minus-mini.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/zoom-minus-mini.png diff --git a/geoportal_1/src/main/webapp/resources/media/zoom-plus-mini.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/zoom-plus-mini.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/zoom-plus-mini.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/zoom-plus-mini.png diff --git a/geoportal_1/src/main/webapp/resources/media/zoom_off.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/zoom_off.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/zoom_off.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/zoom_off.png diff --git a/geoportal_1/src/main/webapp/resources/media/zoom_on.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/zoom_on.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/zoom_on.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/zoom_on.png diff --git a/geoportal_1/src/main/webapp/resources/media/zoombar.png b/geoportal_1/src/main/webapp/resources/media/oldMedia/zoombar.png similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/zoombar.png rename to geoportal_1/src/main/webapp/resources/media/oldMedia/zoombar.png diff --git a/geoportal_1/src/main/webapp/resources/media/zoomextent.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/zoomextent.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/zoomextent.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/zoomextent.gif diff --git a/geoportal_1/src/main/webapp/resources/media/zoomextent_down.gif b/geoportal_1/src/main/webapp/resources/media/oldMedia/zoomextent_down.gif similarity index 100% rename from geoportal_1/src/main/webapp/resources/media/zoomextent_down.gif rename to geoportal_1/src/main/webapp/resources/media/oldMedia/zoomextent_down.gif diff --git a/geoportal_1/src/main/webapp/resources/media/opacity_arrow.png b/geoportal_1/src/main/webapp/resources/media/opacity_arrow.png index 4208958..d0822d9 100644 Binary files a/geoportal_1/src/main/webapp/resources/media/opacity_arrow.png and b/geoportal_1/src/main/webapp/resources/media/opacity_arrow.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/opacity_arrow_inactive.png b/geoportal_1/src/main/webapp/resources/media/opacity_arrow_inactive.png new file mode 100644 index 0000000..93396e2 Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/opacity_arrow_inactive.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/powered-by-google/desktop/powered-by-google-on-white.png b/geoportal_1/src/main/webapp/resources/media/powered-by-google/desktop/powered-by-google-on-white.png new file mode 100755 index 0000000..ae3cf0c Binary files /dev/null and b/geoportal_1/src/main/webapp/resources/media/powered-by-google/desktop/powered-by-google-on-white.png differ diff --git a/geoportal_1/src/main/webapp/resources/media/top_menu_bg.png b/geoportal_1/src/main/webapp/resources/media/top_menu_bg.png deleted file mode 100644 index 6ac7bf0..0000000 Binary files a/geoportal_1/src/main/webapp/resources/media/top_menu_bg.png and /dev/null differ diff --git a/geoportal_1/src/main/webapp/resources/ogpConfig.json b/geoportal_1/src/main/webapp/resources/ogpConfig.json deleted file mode 100644 index 8d764a5..0000000 --- a/geoportal_1/src/main/webapp/resources/ogpConfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{"config":{"homeInstitution": "Tufts", "institutionSpecificCss": "resources/css/institutionTufts.css", - "institutionSpecificJavaScript": "", - "googleAnalyticsId": "UA-19787732-1", - "googleAPIKey": "AIzaSyCuK9otEY-rbMNJEpDO_NzD1jA-OyqubDY", - "search":{"serviceType": "solr", "serviceAddress": "http://localhost:8080/solr/select"}, - "institutions": {"Tufts": {"login": {"loginType": "form", "authenticationPage": "login"}, - "proxy": {"id": "proxy.Restricted.Tufts", "accessLevel": ["restricted"], "wms": "restricted/wms", "wfs": "restricted/wfs"}, - "graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_tufts.png", "altDisplay": "Tufts", "tooltipText": "Tufts University"}}}, - "Harvard":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_harvard.png", - "altDisplay": "HGL", "tooltipText": "Harvard Geospatial Library"}}}, - "Berkeley":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_berkeley.png", "altDisplay": "Berkeley", "tooltipText": "UC Berkeley"}}}, - "MIT":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_mit.png", "altDisplay": "MIT", "tooltipText": "Massachusetts Institute of Technology"}}}, - "Maryland":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_maryland.png", "altDisplay": "University of Maryland", "tooltipText": "University of Maryland"}}}, - "UNWFP":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "altDisplay": "UN World Food Program", "tooltipText": "UN World Food Program"}}}, - "MassGIS":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_massgis.png", "altDisplay": "MassGIS", "tooltipText": "MassGIS"}}} - }}} diff --git a/geoportal_1/src/main/webapp/resources/ogpDownloadConfig.json b/geoportal_1/src/main/webapp/resources/ogpDownloadConfig.json index b0cbc98..12cdf2f 100644 --- a/geoportal_1/src/main/webapp/resources/ogpDownloadConfig.json +++ b/geoportal_1/src/main/webapp/resources/ogpDownloadConfig.json @@ -1,19 +1,12 @@ {"config":{ "institutions":{ - "Tufts":[{"classKey": "layerDownloader.kml", "accessLevel":["public"],"dataType":["vector", "raster"], "outputFormats":["kml", "kmz"]}, - {"classKey": "layerDownloader.wfs", "accessLevel":["public"],"dataType":["vector"], "outputFormats":["shp"]}, + "tufts":[ {"classKey": "layerDownloader.wfs.proxied", "accessLevel":["restricted"],"dataType":["vector"], "outputFormats":["shp"]}, - {"classKey": "layerDownloader.wcs", "accessLevel":["public"],"dataType":["raster", "paper map"],"outputFormats":["geotiff"]}, {"classKey": "layerDownloader.wcs.proxied", "accessLevel":["restricted"],"dataType":["raster", "paper map"],"outputFormats":["geotiff"]}], - "Berkeley":[{"classKey": "layerDownloader.kml", "accessLevel":["public"],"dataType":["vector", "raster"], "outputFormats":["kml", "kmz"]}, - {"classKey": "layerDownloader.wfs", "accessLevel":["public","restricted"],"dataType":["vector"], "outputFormats":["shp"]}, - {"classKey": "layerDownloader.wcs", "accessLevel":["public","restricted"],"dataType":["raster", "paper map"],"outputFormats":["geotiff"]}], - "Harvard":[{"classKey": "layerDownloader.kml", "accessLevel":["public"],"dataType":["vector","raster","paper map"], "outputFormats":["kml","kmz"]}, - {"classKey": "layerDownloader.wfs", "accessLevel":["public"],"dataType":["vector"],"outputFormats":["shp"]}, + "harvard":[ {"classKey": "layerDownloader.email.HGL", "accessLevel":["public","restricted"],"dataType":["raster","paper map"],"outputFormats":["geotiff"]}], - "MIT":[{"classKey": "layerDownloader.kml", "accessLevel":["public"],"dataType":["vector", "raster"], "outputFormats":["kml", "kmz"]}, - {"classKey": "layerDownloader.wfs", "accessLevel":["public","restricted"],"dataType":["vector"], "outputFormats":["shp"]}, - {"classKey": "layerDownloader.wcs", "accessLevel":["public","restricted"],"dataType":["raster", "paper map"],"outputFormats":["geotiff"]}], - "MassGIS":[{"classKey": "layerDownloader.kml", "accessLevel":["public"],"dataType":["vector", "raster"], "outputFormats":["kml", "kmz"]}, - {"classKey": "layerDownloader.wfs", "accessLevel":["public","restricted"],"dataType":["vector"],"outputFormats":["shp"]}, - {"classKey": "layerDownloader.wcs", "accessLevel":["public","restricted"],"dataType":["raster", "paper map"],"outputFormats":["geotiff"]}]}}} \ No newline at end of file + "default":[{"classKey": "layerDownloader.wfs", "accessLevel":["public"],"dataType":["vector"],"outputFormats":["shp"], "preference": 1}, + {"classKey": "layerDownloader.wcs", "accessLevel":["public"],"dataType":["raster", "paper map"],"outputFormats":["geotiff"], "preference": 1}, + {"classKey": "layerDownloader.wms", "accessLevel":["public"],"dataType":["raster", "paper map"],"outputFormats":["geotiff"], "preference": 3}, + {"classKey": "layerDownloader.kml", "accessLevel":["public"],"dataType":["raster", "vector"],"outputFormats":["kml", "kmz"], "preference": 4}, + {"classKey": "layerDownloader.file", "accessLevel":["public"],"dataType":["vector", "raster"],"outputFormats":["shp", "geotiff"], "preference": 2}]}}} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/old/ogpConfig.json b/geoportal_1/src/main/webapp/resources/old/ogpConfig.json new file mode 100644 index 0000000..36bdf7b --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/old/ogpConfig.json @@ -0,0 +1,17 @@ +{"config":{"homeInstitution": "Tufts", "institutionSpecificCss": "", + "institutionSpecificJavaScript": "", + "googleAnalyticsId": "UA-19787732-1", + "search":{"serviceType": "solr", "serviceAddress": "http://geodata.tufts.edu/solr/select"}, + "institutions": {"Tufts": {"login": {"loginType": "form", "authenticationPage": "login"}, + "proxy": {"id": "proxy.Restricted.Tufts", "accessLevel": ["restricted"], "wms": "restricted/wms", "wfs": "restricted/wfs"}, + "graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_tufts.png", "uiClass": "tuftsIcon", "altDisplay": "Tufts", "tooltipText": "Tufts University"}}}, + "Harvard":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_harvard.png", "uiClass": "harvardIcon", + "altDisplay": "HGL", "tooltipText": "Harvard Geospatial Library"}}}, + "Berkeley":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_berkeley.png", "uiClass": "berkeleyIcon", "altDisplay": "Berkeley", "tooltipText": "UC Berkeley"}}}, + "Columbia":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "uiClass": "columbiaIcon", "altDisplay": "Columbia University", "tooltipText": "Columbia University"}}}, + "MIT":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_mit.png", "uiClass": "mitIcon", "altDisplay": "MIT", "tooltipText": "Massachusetts Institute of Technology"}}}, + "Maryland":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_maryland.png", "uiClass": "marylandIcon", "altDisplay": "University of Maryland", "tooltipText": "University of Maryland"}}}, + "UN":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "uiClass": "unIcon", "altDisplay": "United Nations", "tooltipText": "United Nations"}}}, + "UNWFP":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "uiClass": "unIcon", "altDisplay": "UN World Food Program", "tooltipText": "UN World Food Program"}}}, + "MassGIS":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_massgis.png", "uiClass": "massgisIcon", "altDisplay": "MassGIS", "tooltipText": "MassGIS"}}} + }}} diff --git a/geoportal_1/src/main/webapp/resources/old/ogpConfigBB.json b/geoportal_1/src/main/webapp/resources/old/ogpConfigBB.json new file mode 100644 index 0000000..69b5d76 --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/old/ogpConfigBB.json @@ -0,0 +1,7 @@ +{ + "customCss": "", + "customJavaScript": "", + "googleAnalyticsId": "UA-19787732-1", + "solrUrl": "http://localhost:8080/solr/select" + } + diff --git a/geoportal_1/src/main/webapp/resources/old/repositoryConfig.json b/geoportal_1/src/main/webapp/resources/old/repositoryConfig.json new file mode 100644 index 0000000..0809a8a --- /dev/null +++ b/geoportal_1/src/main/webapp/resources/old/repositoryConfig.json @@ -0,0 +1,52 @@ +[{"id": "tufts", + "shortName":"Tufts", + "fullName": "Tufts University", + "login": {"loginType": "form", "authenticationPage": "login"}, + "proxy": {"id": "proxy.Restricted.Tufts", "accessLevel": ["restricted"], "wms": "restricted/wms", "wfs": "restricted/wfs"}, + "sourceIconClass":"tuftsIcon", + "selected": true + }, + {"id": "harvard", + "shortName": "Harvard", + "fullName": "Harvard Geospatial Library", + "sourceIconClass": "harvardIcon", + "selected": true + }, + {"id": "berkeley", + "shortName": "Berkeley", + "fullName": "UC Berkeley", + "sourceIconClass": "berkeleyIcon", + "selected": true + }, + {"id": "mit", + "shortName": "MIT", + "fullName": "Massachusetts Institute of Technology", + "sourceIconClass": "mitIcon", + "selected": true + }, + {"id": "maryland", + "shortName": "Maryland", + "fullName": "University of Maryland (CARPE)", + "sourceIconClass": "marylandIcon", + "selected": true + }, + {"id": "un", + "shortName": "UN", + "fullName": "United Nations", + "sourceIconClass": "unIcon", + "selected": true + }, + {"id": "unwfp", + "shortName": "UN WFP", + "fullName": "UN World Food Program", + "sourceIconClass": "unIcon", + "selected": true + }, + {"id": "massgis", + "shortName": "MassGIS", + "fullName": "MassGIS", + "sourceIconClass": "massgisIcon", + "selected": true + }] + + diff --git a/geoportal_1/src/main/webapp/resources/xml/isoBasic.xsl b/geoportal_1/src/main/webapp/resources/xml/isoBasic.xsl deleted file mode 100644 index 786ea2e..0000000 --- a/geoportal_1/src/main/webapp/resources/xml/isoBasic.xsl +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -

        -
        - -

        Abstract:

        -

        -
        - - - -

        Keywords:

        - - -
        -
        -
        - - -

        Extent Information:

        - - Spatial Temporal Extent: -
        - - Geographic Element: -
        - Bounding Coordinates: -
        - Area to display current cursor lat/lon location: -
         
        - Westbound Longitude: - - - - °
        - Eastbound Longitude: - - - - °
        - Southbound Latitude: - - - - °
        - Northbound Latitude: - - - - °
        -
        -
        -
        - - - -

        Vertical Element:

        -
        - Minimum Value: - - - -
        - Maximum Value: - - - -
        - - - Coordinate Reference System (CRS):
        -
        - - Coordinate Reference System (CRS):
        -
        -
        -
        -
        -
        -
        -
        - - -

        Contact:

        -

        - -
        -
        - -
        -
        - -
        -
        - -
        - - -
        -
        - - -
        -
        -
        -

        -
        - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        diff --git a/geoportal_1/src/main/webapp/testMap.jsp b/geoportal_1/src/main/webapp/testMap.jsp new file mode 100644 index 0000000..2fa9cba --- /dev/null +++ b/geoportal_1/src/main/webapp/testMap.jsp @@ -0,0 +1,88 @@ + + + + +test map + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + diff --git a/geoportal_1/src/main/webapp/testTable.jsp b/geoportal_1/src/main/webapp/testTable.jsp new file mode 100644 index 0000000..e4c00db --- /dev/null +++ b/geoportal_1/src/main/webapp/testTable.jsp @@ -0,0 +1,84 @@ + + + + +test table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + diff --git a/geoportal_1/target/maven-archiver/pom.properties b/geoportal_1/target/maven-archiver/pom.properties index 1873d3b..54279f6 100644 --- a/geoportal_1/target/maven-archiver/pom.properties +++ b/geoportal_1/target/maven-archiver/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven -#Wed Feb 06 22:39:02 EST 2013 -version=1.2.RC1 -groupId=org.OpenGeoPortal +#Mon Apr 14 16:15:12 EDT 2014 +version=2.0.BETA +groupId=org.opengeoportal artifactId=geoportal