<%-- This file is part of deegree, http://deegree.org/ Copyright (C) 2001-2009 by: - Department of Geography, University of Bonn - and - lat/lon GmbH - This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact information: lat/lon GmbH Aennchenstr. 19, 53177 Bonn Germany http://lat-lon.de/ Department of Geography, University of Bonn Prof. Dr. Klaus Greve Postfach 1147, 53001 Bonn Germany http://www.geographie.uni-bonn.de/deegree/ e-mail: info@deegree.org --%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="org.deegree.i18n.Messages" %> <%@ page import="java.util.Locale" %> <% Locale loc = request.getLocale(); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>iGeoPortal Gazetteer Panel</title> <meta name="author" content="lat/lon GmbH" /> <meta name="KeyWords" content="deegree iGeoPortal lat/lon" /> <link href="../../css/deegree.css" rel="stylesheet" type="text/css" /> <link rel="stylesheet" type="text/css" href="../../javascript/ext-3.0.0/resources/css/ext-all.css" /> <script type="text/javascript" src="gazetteer.js"></script> <script type="text/javascript" src="../../javascript/request_handler.js"></script> <script type="text/javascript" src="../../javascript/json2.js"></script> <script type="text/javascript" src="../../javascript/utils.js"></script> <script type="text/javascript" src="../../javascript/validation.js"></script> <script type="text/javascript" src="../../javascript/envelope.js"></script> <script type="text/javascript" src="../../javascript/event.js"></script> <script type="text/javascript" src="../../javascript/ext-3.0.0/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="../../javascript/ext-3.0.0/ext-all.js"></script> <script type="text/javascript"> var url = null; var selectID; var selectedIndex; var maxLevel; function register() { if ( parent.controller == null ) { parent.controller = new parent.Controller(); parent.controller.init(); } } function initGazetteer() { clearPage(); selectedIndex = 0; parent.controller.initGazetteer(document); var tmp = window.location.pathname.split( '/' ); var s = ''; for ( var i = 0; i < tmp.length-3; i++) { s += (tmp[i] + '/' ); } url = window.location.protocol + '//' + window.location.host + s + 'ajaxcontrol'; try { submitGetRequest( url + "?action=loadHierarchyList", handleLoadTHierarchyList, null, false ); } catch(e) { //alert( 1 + JSON.stringify( e ) ); } var layer = parent.controller.mapModel.getLayerByName( 'highlight' ); var cb = getElement( 'INP_HIGHLIGHT' ); if ( layer != null && layer.isVisible() ) { cb.checked = true; } else { cb.checked = false; } } function handleLoadTHierarchyList(response) { var list = JSON.parse( response ); var select = getElement( "TYPES" ); removeChildren( select ); for (var i = 0; i < list.length; i++ ) { if ( i == 0 ) { appendOption( select, list[i], '' + i, true ); } else { appendOption( select, list[i], '' + i, false ); } } var cb = new Ext.form.ComboBox({ listeners:{ 'select': loadHierarchy }, itemId: 'hList', typeAhead: true, triggerAction: 'all', editable: false, transform:'TYPES', width:180, listWidth:180, x: 90, y: -17, forceSelection:true }); selectedIndex = 0; var bean = JSON.stringify( new function() { this.action = 'loadHierarchy'; this.hierarchy = '' + 0; }, null, false ); try { submitPostRequest( url, handleLoadHierarchy, bean ); } catch(e) { alert( 22+ JSON.stringify( e ) ); } } function loadHierarchy(cb, record, index) { if ( index > 0 ) { selectedIndex = record.data['value']; var bean = JSON.stringify( new function() { this.action = 'loadHierarchy'; this.hierarchy = '' + record.data['value']; }, null, false ); try { submitPostRequest( url, handleLoadHierarchy, bean ); } catch(e) { alert( 2 + JSON.stringify( e ) ); } } } function clearPage() { try { var tmp = true; while ( tmp ) { tmp = false; var divs = document.getElementsByTagName( "div" ); for ( var i = 0; i < divs.length; i++ ) { if ( divs[i].id != null && divs[i].id.indexOf( "NAVIGATION" ) == 0 ) { removeElement( divs[i] ); tmp = true; } } } var inps = document.getElementsByTagName( "input" ); for ( var i = 0; i < inps.length; i++ ) { if ( inps[i].id != null && inps[i].id.indexOf( "INP_HIGHLIGHT" ) < 0 && inps[i].id.indexOf( "ext-gen" ) < 0 ) { removeElement( inps[i] ); } } } catch(e) { alert( 10 + " " + JSON.stringify( e ) ); } selectID = 0; maxLevel = 0; } function handleLoadHierarchy(response) { clearPage(); try { var body = document.getElementsByTagName( "body" )[0]; var beans = JSON.parse( response ); maxLevel = beans.length-1; for ( var i = 0; i <= beans.length; i++ ) { var div = createElement( "div", "NAVIGATION" + i, "NAVIGATION" + i, null, body ); div.style.position = "absolute"; div.style.top = ( 60 + i * 30 )+"px"; } getElement( "HIGHLIGHT" ).style.top = ( 90 + beans.length * 30 ) + "px"; getElement( "HIGHLIGHT" ).style.visibility = 'visible'; getElement( "ZOOM" ).style.top = ( 120 + beans.length * 30 ) + "px"; getElement( "ZOOM" ).style.visibility = 'visible'; for ( var i = 0; i < beans.length; i++ ) { if ( beans[i].supportFreeText ) { getElement( 'NAVIGATION' + i ).innerHTML = getFreeSearch( i, beans[i].name ); getElement( 'NAVIGATION' + (i + 1) ).innerHTML = getValueList( i, beans[i].name ); } else { getElement( 'NAVIGATION' + (i + 1) ).innerHTML = getValueList( i, beans[i].name ); if ( i == 0 ) { // if no free text search is defined initial list must be loaded automaticly // while initializing GUI // dummy element required to perform loading item list var inp = createElement( "input", "" + (1000 + i), "" + i, null, body ); inp.style.visibility = 'hidden'; inp.value = '*'; loadValues1( i ); } } } } catch( e ) { alert( 11 + " " + JSON.stringify( e ) ); } } function getFreeSearch( no, name ) { // use 1000+no as ID to enable having a freetext search plus a values list for // one hierarchy level return '<div style="position:absolute; width:100px; text-decoration:none"><%=Messages.get( loc, "IGEO_STD_EGAZ_SEARCH" ) %>' + '<input id="' + (1000 + no) + '" style="position:absolute; left:90px; width:100px; color:#000000">' + '<img style="position:absolute; left:220px" alt="search" src="../../images/png/forward_green.png" '+ 'onclick="loadValues1( ' + no + ' )" title="<%=Messages.get( loc, "IGEO_STD_EGAZ_SEARCH_TT" ) %>"></div>'; } function getValueList(no, name) { return '<div style="position:absolute; width:100px; text-decoration:none" >' + name + ':' + '<select id="' + no + '" style="position:absolute; left:90px; width:140px" '+ 'onchange="loadValues2(' + no + ')"></select></div>' } function loadValues1( id ) { // id equals to index of assigned hierarchy level selectID = id; var bean = JSON.stringify( new function() { this.action = 'performFreeGazetteerSearch'; this.level = id; // see getFreeSearch(..) var ins = document.getElementsByTagName( 'input' ); for ( var i = 0; i < ins.length; i++) { if ( ins[i].type == 'text' ) { this.searchString = ins[i].value; } } this.hierarchyIndex = '' + selectedIndex; }, null, false ); try { submitPostRequest( url, handleLoadValues1, bean ); } catch(e) { alert( 3 + " " + e ); } } function handleLoadValues1(response) { try { var items = JSON.parse( response ); var select = getElement( '' + selectID ); removeChildren( select ); appendOption( select, '<%=Messages.get( loc, "IGEO_STD_EGAZ_SELECT_ENTRY" ) %>' , "-", true ); for (var i = 0; i < items.length; i++) { appendOption( select, items[i].displayName, items[i].geographicIdentifier, false, items[i].alternativeGeographicIdentifier ); } } catch(e) { alert( 4 + " " + e ); } } function loadValues2( id ) { // id equals to index of assigned hierarchy level selectID = id; if ( id < maxLevel ) { // for last location type no child list can be loaded var bean = JSON.stringify( new function() { this.action = 'performGazetteerLoadList'; this.level = id + 1; this.hierarchyIndex = '' + selectedIndex; this.geographicIdentifier = getSelectedValue( '' + id, null, '-' ); }, null, false ); try { submitPostRequest( url, handleLoadValues2, bean ); } catch(e) { alert( 5 + " " + e ); } } } function handleLoadValues2(response) { try { var items = JSON.parse( response ); var select = getElement( '' + (selectID + 1) ); removeChildren( select ); appendOption( select, '<%=Messages.get( loc, "IGEO_STD_EGAZ_SELECT_ENTRY2" ) %>', "-", true ); for (var i = 0; i < items.length; i++) { appendOption( select, items[i].displayName, items[i].geographicIdentifier, false, items[i].alternativeGeographicIdentifier ); } } catch(e) { alert( 6 + " " + e ); } } function zoomTo() { removeLayer(); if ( getSelectedValue( '' + selectID, null, '-' ) != '-' ) { var bean = JSON.stringify( new function() { this.action = 'loadGazetteerItemBBox'; this.level = selectID; this.hierarchyIndex = '' + selectedIndex; this.geographicIdentifier = getSelectedValue( '' + selectID, null, '-' ); }, null, false ); try { submitPostRequest( url, handlezoomTo, bean ); } catch(e) { alert( 7 + " " + e ); } } else { parent.Ext.Msg.show({ title: '<%=Messages.get( loc, "IGEO_STD_EGAZ_ERROR_WND_TITLE" ) %>', msg: '<%=Messages.get( loc, "IGEO_STD_EGAZ_ERROR_WND_MSG" ) %>', buttons: {ok: 'OK' }, width: 300, icon: parent.Ext.MessageBox.ERROR }); } } function handlezoomTo(response) { try { var tmp = response.split( ',' ); var env = new Envelope( parseFloat( tmp[0] ), parseFloat( tmp[1] ), parseFloat( tmp[2] ), parseFloat( tmp[3] ) ); env = env.getBuffer( env.getWidth() / 20 ); parent.controller.actionPerformed( new Event( this, "BBOX", env ) ); if ( getElement( "INP_HIGHLIGHT" ).checked ) { if ( parent.controller.mapModel.getLayerByName( 'highlight' ) == null ) { // just add new layer if a highlight layer is not already available var tmp = window.location.pathname.split( '/' ); var s = ''; for ( var i = 0; i < tmp.length-3; i++) { s += (tmp[i] + '/' ); } var layers = new Array(); layers[0] = new Array(); layers[0]['name'] = 'highlight'; layers[0]['title'] = '<%=Messages.get( loc, "IGEO_STD_EGAZ_HIGHLIGHT_LAYER" ) %>'; layers[0]['queryable'] = false; layers[0]['metadataURL'] = null; layers[0]['minScale'] = '0'; layers[0]['maxScale'] = '99999999999'; layers[0]['visible'] = true; var wmsurl = window.location.protocol + '//' + window.location.host + s + 'highlightwms'; parent.controller.addLayersToModel("gazetteer highlight", wmsurl, "1.1.1", layers, "image/gif", false, true ); } } } catch( e ) { alert( 8 + " " + e ); } } function removeLayer() { try { var layer = parent.controller.mapModel.getLayerByName( 'highlight' ); if ( layer != null ) { var bean = JSON.stringify( new function() { this.action = 'REMOVENODE'; this.node = layer.getIdentifier(); }, null, false ); try { submitPostRequest( url, handleRemoveLayer, bean ); } catch(e) { alert( 99 + " " + e ); } parent.controller.mapModel.removeLayer( layer ); parent.controller.mapModel.setChanged( true ); parent.controller.repaint(); } else if ( getElement( "INP_HIGHLIGHT" ).checked ) { if ( getSelectedValue( '' + selectID, null, '-' ) != '-' ) { // zoomTo(); } } } catch( e ) { alert( 9 + " " + e ); } } function handleRemoveLayer(response) { try { if ( response.indexOf( "ERROR:") == 0 ) { alert( response ); } else { parent.getElement( "IDLayerTree" ).contentWindow.location.reload( true ); } } catch( e ) { alert( 10 + " " + e ); } } </script> </head> <body onload="register(); initGazetteer();" class="pEasyGaz"> <br> <div id="HIERARCHIES"><%=Messages.get( loc, "IGEO_STD_EGAZ_TYPE" ) %><select name="TYPES" id="TYPES" style="width:140px;" onchange="loadHierarchy()"></select></div> <br> <div id="HIGHLIGHT" style="position:absolute; top:220px; visibility:hidden"> <input id="INP_HIGHLIGHT" type="checkbox" onclick="removeLayer()"> <%=Messages.get( loc, "IGEO_STD_EGAZ_HIGHLIGHT_CB" ) %><br> </div> <div id="ZOOM" style="position:absolute; top:220px; visibility:hidden; width:160px;" title="<%=Messages.get( loc, "IGEO_STD_EGAZ_ZOOMTO_TT" ) %>"> <a href="javascript:zoomTo()" class="buttonArea" style="position:absolute"><%=Messages.get( loc, "IGEO_STD_BTN_ZOOMTO" ) %></a> </div> </body> </html>