[Suiviobsmer-commits] r591 - in trunk: . wao-business wao-business/src/main/java/fr/ifremer/wao/bean wao-business/src/main/java/fr/ifremer/wao/io/kml wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/xmi wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/java/fr/ifremer/wao/ui/services wao-ui/src/main/webapp wao-ui/src/main/webapp/css wao-ui/src/main/webapp/js wao-ui/src/main/webapp/js/OpenLayers
Author: fdesbois Date: 2010-07-07 13:45:46 +0000 (Wed, 07 Jul 2010) New Revision: 591 Log: Evo #2352 : Cartography for contacts : - Use xerces and Serializer to check CDATA in KML - Clean graph display in tooltip Modified: trunk/pom.xml trunk/wao-business/pom.xml trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactPieChartConstant.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/kml/ContactKmlWriterJak.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactsKmlLoader.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/WaoManager.java trunk/wao-ui/src/main/webapp/Cartography.tml trunk/wao-ui/src/main/webapp/css/cartography.css trunk/wao-ui/src/main/webapp/js/OpenLayers/OpenLayers.js trunk/wao-ui/src/main/webapp/js/cartography.js Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/pom.xml 2010-07-07 13:45:46 UTC (rev 591) @@ -162,6 +162,11 @@ <version>2.2</version> </dependency> <dependency> + <groupId>xerces</groupId> + <artifactId>xerces</artifactId> + <version>2.4.0</version> + </dependency> + <dependency> <groupId>xpp3</groupId> <artifactId>xpp3</artifactId> <version>1.1.4c</version> Modified: trunk/wao-business/pom.xml =================================================================== --- trunk/wao-business/pom.xml 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-business/pom.xml 2010-07-07 13:45:46 UTC (rev 591) @@ -67,6 +67,10 @@ <artifactId>jaxb-xjc</artifactId> </dependency> <dependency> + <groupId>xerces</groupId> + <artifactId>xerces</artifactId> + </dependency> + <dependency> <groupId>xpp3</groupId> <artifactId>xpp3</artifactId> </dependency> Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactPieChartConstant.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactPieChartConstant.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactPieChartConstant.java 2010-07-07 13:45:46 UTC (rev 591) @@ -8,9 +8,9 @@ */ public enum ContactPieChartConstant { - REALIZED("Réalisés", "0000FF"), + REALIZED("R%C3%A9alis%C3%A9s", "0000FF"), - REFUSED("Refusés", "FF0000"), + REFUSED("Refus%C3%A9s", "FF0000"), OTHER("Autres", "FFFF10"); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/kml/ContactKmlWriterJak.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/kml/ContactKmlWriterJak.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/kml/ContactKmlWriterJak.java 2010-07-07 13:45:46 UTC (rev 591) @@ -5,13 +5,14 @@ import de.micromata.opengis.kml.v_2_2_0.Icon; import de.micromata.opengis.kml.v_2_2_0.Kml; import de.micromata.opengis.kml.v_2_2_0.Placemark; -import de.micromata.opengis.kml.v_2_2_0.Point; import de.micromata.opengis.kml.v_2_2_0.Style; import fr.ifremer.wao.entity.GeoPoint; +import org.apache.xml.serialize.OutputFormat; +import org.apache.xml.serialize.XMLSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.FileNotFoundException; +import java.io.IOException; import java.io.OutputStream; /** @@ -72,8 +73,31 @@ } @Override - public void write(OutputStream stream) throws FileNotFoundException { - kml.marshal(stream); + public void write(OutputStream stream) throws IOException { + kml.marshal(getXMLSerializer(stream).asContentHandler()); } + protected XMLSerializer getXMLSerializer(OutputStream stream) { + // configure an OutputFormat to handle CDATA + OutputFormat of = new OutputFormat(); + + // specify which of your elements you want to be handled as CDATA. + // The use of the '^' between the namespaceURI and the localname + // seems to be an implementation detail of the xerces code. + // When processing xml that doesn't use namespaces, simply omit the + // namespace prefix as shown in the third CDataElement below. + of.setCDataElements(new String[] { "http://www.opengis.net/kml/2.2^description" }); + + // set any other options you'd like + of.setPreserveSpace(true); + of.setIndenting(true); + + // create the serializer + XMLSerializer serializer = new XMLSerializer(of); + serializer.setOutputByteStream(stream); + + return serializer; + } + + } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java 2010-07-07 13:45:46 UTC (rev 591) @@ -4,6 +4,8 @@ import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.WaoException; import fr.ifremer.wao.WaoQueryHelper; +import fr.ifremer.wao.bean.ContactPieChartConstant; +import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.PieChartData; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.io.BoatDistrictData; @@ -27,6 +29,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.text.NumberFormat; import java.util.List; import java.util.Map; @@ -144,20 +147,67 @@ Map<String, PieChartData> districts = serviceSynthesis.getContactPieChartDataByBoatDistrict(company); + NumberFormat numberFormat = NumberFormat.getInstance(); + // Only 2 digits maximum after the comma + numberFormat.setMaximumFractionDigits(2); + for (String districtId : districts.keySet()) { PieChartData data = districts.get(districtId); + int nbRealized = (int)getSeriesValue(data, ContactPieChartConstant.REALIZED); + int nbRefused = (int)getSeriesValue(data, ContactPieChartConstant.REFUSED); + int nbOther = (int)getSeriesValue(data, ContactPieChartConstant.OTHER); + // Replace each values by percentage data.computeSeries(); - String miniChartUrl = serviceChart.getPieChartUrl(data, true); - String bigChartUrl = serviceChart.getPieChartUrl(data, false); + String realized = numberFormat.format( + getSeriesValue(data, ContactPieChartConstant.REALIZED)); + String refused = numberFormat.format( + getSeriesValue(data, ContactPieChartConstant.REFUSED)); + String other = numberFormat.format( + getSeriesValue(data, ContactPieChartConstant.OTHER)); BoatDistrict district = dao.findByTopiaId(districtId); - StringBuilder description = new StringBuilder(district.getCode()); + String title = "Répartition des contacts pour le quartier " + + district.getCode(); + StringBuilder description = new StringBuilder("\n"). + append(" <p>"). + append(title). + append("</p>\n"). + append(" <p>"). + append(serviceChart.getHtmlImgTag(data, title, false)). + append("</p>\n"). + append(" <p>"). + append("Réalisés ("). + append(ContactState.BOARDING_EXPECTED.libelle()). + append(", "). + append(ContactState.BOARDING_DONE.libelle()). + append(") : ").append(nbRealized). + append(" (").append(realized).append(" %)"). + append("</p>\n"). + append(" <p>"). + append("Refusés ("). + append(ContactState.BOAT_REFUSED.libelle()). + append(", "). + append(ContactState.BOAT_DEFINITIVE_REFUSED.libelle()). + append(") : ").append(nbRefused). + append(" (").append(refused).append(" %)"). + append("</p>\n"). + append(" <p>"). + append("Autres ("). + append(ContactState.CONTACT_START.libelle()). + append(", "). + append(ContactState.BOAT_UNAVAILABLE.libelle()). + append(") : ").append(nbOther). + append(" (").append(other).append(" %)"). + append("</p>\n"); + + String miniChartUrl = serviceChart.getPieChartUrl(data, true); + writer.record(district, miniChartUrl, description.toString()); } @@ -177,4 +227,8 @@ return new FileInputStream(file); } + + protected double getSeriesValue(PieChartData data, ContactPieChartConstant series) { + return data.getSeries(series.ordinal()).getValue(); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java 2010-07-07 13:45:46 UTC (rev 591) @@ -26,4 +26,9 @@ return ""; } + + @Override + public String getHtmlImgTag(PieChartData data, String text, boolean thumb) { + return ""; + } } Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java 2010-07-07 13:45:46 UTC (rev 591) @@ -4,12 +4,19 @@ import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.service.ServiceCartography; import fr.ifremer.wao.ui.data.RequiresAuthentication; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.RandomStringUtils; +import org.apache.commons.lang.math.RandomUtils; import org.apache.tapestry5.Link; import org.apache.tapestry5.annotations.SessionState; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.services.PageRenderLinkSource; import org.slf4j.Logger; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + /** * Created: 6 juil. 2010 * @@ -33,6 +40,8 @@ private Company company; + private String url; + public Company getCompany() { if (!user.isAdmin() && !user.isGuest()) { company = user.getCompany(); @@ -40,9 +49,20 @@ return company; } - public String getUrl() { - String companyId = getCompany() != null ? getCompany().getTopiaId() : null; - Link link = pageRender.createPageRenderLinkWithContext(ContactsKmlLoader.class, companyId); - return link.toURI(); + public String getUrl() throws IOException { + if (url == null) { + String companyId = getCompany() != null ? getCompany().getTopiaId() : null; + Link link = pageRender.createPageRenderLinkWithContext(ContactsKmlLoader.class, companyId); + url = link.toURI(); + } + return url; } + + public String getTitle() { + return "Contacts"; + } + + public String getRandomCode() { + return RandomStringUtils.randomAlphanumeric(8); + } } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactsKmlLoader.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactsKmlLoader.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactsKmlLoader.java 2010-07-07 13:45:46 UTC (rev 591) @@ -4,6 +4,7 @@ import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.service.ServiceCartography; import fr.ifremer.wao.service.ServiceUser; +import fr.ifremer.wao.ui.data.KmlStreamResponse; import fr.ifremer.wao.ui.data.RequiresAuthentication; import fr.ifremer.wao.ui.services.WaoManager; import org.apache.commons.lang.StringUtils; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java 2010-07-07 13:45:46 UTC (rev 591) @@ -16,7 +16,7 @@ * @author fdesbois <fdesbois at codelutin.com> * @version $Id$ */ -public class ServiceChartImpl implements ServiceChart { +public class ServiceChartImpl extends ServiceChartServlet { /** Service used to create links */ private PageRenderLinkSource pageRender; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java 2010-07-07 13:45:46 UTC (rev 591) @@ -7,6 +7,7 @@ import org.nuiton.util.StringUtil; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -26,6 +27,8 @@ private static final String PROPERTY_LABEL_SEPARATOR = "|"; private static final String PROPERTY_COLOR_SEPARATOR = ","; + ///chdl=50%_5|40%_4|10%_1 :: legend not supported + private static final String PROPERTY_TYPE = "cht="; private static final String PROPERTY_LABEL = "chl="; private static final String PROPERTY_COLOR = "chco="; @@ -33,10 +36,14 @@ private static final String PROPERTY_VALUE = "chd=t:"; private static final String PROPERTY_BACKGROUND_TRANSPARENT = "chf=bg,s,FFFFFF00"; + private static final int PIE_CHART_MAXI_HEIGHT = 150; + private static final int PIE_CHART_MAXI_WIDTH = 350; + private static final String PIE_CHART_MINI_TYPE = PROPERTY_TYPE + "p3"; private static final String PIE_CHART_MAXI_TYPE = PROPERTY_TYPE + "p3"; private static final String PIE_CHART_MINI_SIZE = PROPERTY_SIZE + "32x32"; - private static final String PIE_CHART_MAXI_SIZE = PROPERTY_SIZE + "450x250"; + private static final String PIE_CHART_MAXI_SIZE = PROPERTY_SIZE + + PIE_CHART_MAXI_WIDTH + "x" + PIE_CHART_MAXI_HEIGHT; @Override public String getPieChartUrl(PieChartData data, boolean thumb) { @@ -44,6 +51,7 @@ List<String> labelsList = new ArrayList<String>(); List<Double> valuesList = new ArrayList<Double>(); List<String> colorsList = new ArrayList<String>(); + for (PieChartSeries series : data.getSeries()) { labelsList.add(series.getLabel()); valuesList.add(series.getValue()); @@ -80,6 +88,21 @@ return url.toString(); } + @Override + public String getHtmlImgTag(PieChartData data, String text, boolean thumb) { + StringBuilder builder = new StringBuilder("<img src=\""). + append(getPieChartUrl(data, thumb)). + append("\" alt=\""). + append(text). + append("\" height=\""). + append(PIE_CHART_MAXI_HEIGHT). + append("\" width=\""). + append(PIE_CHART_MAXI_WIDTH). + append("\" />"); + + return builder.toString(); + } + protected String getBaseUrl() { String baseUrl = "http://" + WaoProperty.CHART_SERVER_PATH.getValue() + "/chart?"; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/WaoManager.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/WaoManager.java 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/WaoManager.java 2010-07-07 13:45:46 UTC (rev 591) @@ -132,14 +132,6 @@ return log.isDebugEnabled(); } - public TopiaContext beginTransaction() throws TopiaException { - return context.beginTransaction(); - } - - public void closeTransaction(TopiaContext transaction) { - context.closeTransaction(transaction); - } - public String[] getErrorMessages(WaoException eee, Messages messages, Logger logger) { Modified: trunk/wao-ui/src/main/webapp/Cartography.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Cartography.tml 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/webapp/Cartography.tml 2010-07-07 13:45:46 UTC (rev 591) @@ -36,9 +36,9 @@ <script type="text/javascript" src="${asset:context:js/cartography.js}"/> <script type="text/javascript" src="${asset:context:js/OpenLayers/OpenLayers.js}"></script> </head> - <body id="so-cartography" onload="init('${url}');"> + <body id="so-cartography" onload="init('${url}?${randomCode}', '${title}');"> - <div id="map" class="fullmap"></div> + <div id="map"></div> </body> </html> Modified: trunk/wao-ui/src/main/webapp/css/cartography.css =================================================================== --- trunk/wao-ui/src/main/webapp/css/cartography.css 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/webapp/css/cartography.css 2010-07-07 13:45:46 UTC (rev 591) @@ -5,8 +5,11 @@ Description: Style cheets for cartography page */ -#so-cartography .fullmap { +#map { width: 1024px; height: 768px; border: 1px solid #ccc; + /*width: 100%; + height: 100%; + border: 1px solid #ccc;*/ } \ No newline at end of file Modified: trunk/wao-ui/src/main/webapp/js/OpenLayers/OpenLayers.js =================================================================== --- trunk/wao-ui/src/main/webapp/js/OpenLayers/OpenLayers.js 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/webapp/js/OpenLayers/OpenLayers.js 2010-07-07 13:45:46 UTC (rev 591) @@ -1636,7 +1636,7 @@ this.drawing=true;if(this.lastDown==null){if(this.persist){this.destroyFeature();} this.createFeature(evt.xy);}else{this.modifyFeature(evt.xy);} this.lastDown=evt.xy;return false;},mousemove:function(evt){if(this.drawing){this.modifyFeature(evt.xy);} -return true;},mouseup:function(evt){if(this.drawing){this.finalize();return false;}else{return true;}},CLASS_NAME:"OpenLayers.Handler.Point"});OpenLayers.Layer.GML=OpenLayers.Class(OpenLayers.Layer.Vector,{loaded:false,format:null,formatOptions:null,initialize:function(name,url,options){var newArguments=[];newArguments.push(name,options);OpenLayers.Layer.Vector.prototype.initialize.apply(this,newArguments);this.url=url;},setVisibility:function(visibility,noEvent){OpenLayers.Layer.Vector.prototype.setVisibility.apply(this,arguments);if(this.visibility&&!this.loaded){this.loadGML();}},moveTo:function(bounds,zoomChanged,minor){OpenLayers.Layer.Vector.prototype.moveTo.apply(this,arguments);if(this.visibility&&!this.loaded){this.loadGML();}},loadGML:function(){if(!this.loaded){this.events.triggerEvent("loadstart");OpenLayers.Request.GET({url:this.url,success:this.requestSuccess,failure:this.requestFailure,scope:this});this.loaded=true;}},setUrl:function(url){this.url=url;this.destroyFeatures();this.loaded=false;this.loadGML();},requestSuccess:function(request){var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;} +return true;},mouseup:function(evt){if(this.drawing){this.finalize();return false;}else{return true;}},CLASS_NAME:"OpenLayers.Handler.Point"});OpenLayers.Layer.GML=OpenLayers.Class(OpenLayers.Layer.Vector,{loaded:false,format:null,formatOptions:null,initialize:function(name,url,options){var newArguments=[];newArguments.push(name,options);OpenLayers.Layer.Vector.prototype.initialize.apply(this,newArguments);this.url=url;},setVisibility:function(visibility,noEvent){OpenLayers.Layer.Vector.prototype.setVisibility.apply(this,arguments);if(this.visibility&&!this.loaded){this.loadGML();}},moveTo:function(bounds,zoomChanged,minor){OpenLayers.Layer.Vector.prototype.moveTo.apply(this,arguments);if(this.visibility&&!this.loaded){this.loadGML();}},loadGML:function(){if(!this.loaded){this.events.triggerEvent("loadstart");OpenLayers.Request.GET({url:this.url,success:this.requestSuccess,failure:this.requestFailure,scope:this});this.loaded=true;}},setUrl:function(url){this.url=url;this.destroyFeatures();this.loaded=false;this.loadGML();},requestSuccess:function(request){var doc=request.responseXML; if(!doc||!doc.documentElement){doc=request.responseText;} var options={};OpenLayers.Util.extend(options,this.formatOptions);if(this.map&&!this.projection.equals(this.map.getProjectionObject())){options.externalProjection=this.projection;options.internalProjection=this.map.getProjectionObject();} var gml=this.format?new this.format(options):new OpenLayers.Format.GML(options);this.addFeatures(gml.read(doc));this.events.triggerEvent("loadend");},requestFailure:function(request){OpenLayers.Console.userError(OpenLayers.i18n("errorLoadingGML",{'url':this.url}));this.events.triggerEvent("loadend");},CLASS_NAME:"OpenLayers.Layer.GML"});OpenLayers.Layer.PointTrack=OpenLayers.Class(OpenLayers.Layer.Vector,{dataFrom:null,initialize:function(name,options){OpenLayers.Layer.Vector.prototype.initialize.apply(this,arguments);},addNodes:function(pointFeatures){if(pointFeatures.length<2){OpenLayers.Console.error("At least two point features have to be added to create"+"a line from");return;} var lines=new Array(pointFeatures.length-1);var pointFeature,startPoint,endPoint;for(var i=0,len=pointFeatures.length;i<len;i++){pointFeature=pointFeatures[i];endPoint=pointFeature.geometry;if(!endPoint){var lonlat=pointFeature.lonlat;endPoint=new OpenLayers.Geometry.Point(lonlat.lon,lonlat.lat);}else if(endPoint.CLASS_NAME!="OpenLayers.Geometry.Point"){OpenLayers.Console.error("Only features with point geometries are supported.");return;} @@ -1896,7 +1896,22 @@ return node;},buildCoordinatesNode:function(geometry){var points=null;if(geometry.components){points=geometry.components;} var path;if(points){var numPoints=points.length;var parts=new Array(numPoints);for(var i=0;i<numPoints;i++){parts[i]=points[i].y+" "+points[i].x;} path=parts.join(" ");}else{path=geometry.y+" "+geometry.x;} -return this.createTextNode(path);},CLASS_NAME:"OpenLayers.Format.GeoRSS"});OpenLayers.Format.KML=OpenLayers.Class(OpenLayers.Format.XML,{kmlns:"http://earth.google.com/kml/2.0",placemarksDesc:"No description available",foldersName:"OpenLayers export",foldersDesc:"Exported on "+new Date(),extractAttributes:true,extractStyles:false,internalns:null,features:null,styles:null,styleBaseUrl:"",fetched:null,maxDepth:0,initialize:function(options){this.regExes={trimSpace:(/^\s*|\s*$/g),removeSpace:(/\s*/g),splitSpace:(/\s+/),trimComma:(/\s*,\s*/g),kmlColor:(/(\w{2})(\w{2})(\w{2})(\w{2})/),kmlIconPalette:(/root:\/\/icons\/palette-(\d+)(\.\w+)/),straightBracket:(/\$\[(.*?)\]/g)};this.externalProjection=new OpenLayers.Projection("EPSG:4326");OpenLayers.Format.XML.prototype.initialize.apply(this,[options]);},read:function(data){this.features=[];this.styles={};this.fetched={};var options={depth:0,styleBaseUrl:this.styleBaseUrl};return this.parseData(data,options);},parseData:function(data,options){if(typeof data=="string"){data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);} +return this.createTextNode(path);},CLASS_NAME:"OpenLayers.Format.GeoRSS"}); +OpenLayers.Format.KML=OpenLayers.Class(OpenLayers.Format.XML,{ +kmlns:"http://earth.google.com/kml/2.0",placemarksDesc:"No description available", +foldersName:"OpenLayers export", +foldersDesc:"Exported on "+new Date(), +extractAttributes:true, +extractStyles:false, +internalns:null, +features:null, +styles:null, +styleBaseUrl:"", +fetched:null, +maxDepth:0, +initialize:function(options){this.regExes={trimSpace:(/^\s*|\s*$/g),removeSpace:(/\s*/g),splitSpace:(/\s+/),trimComma:(/\s*,\s*/g),kmlColor:(/(\w{2})(\w{2})(\w{2})(\w{2})/),kmlIconPalette:(/root:\/\/icons\/palette-(\d+)(\.\w+)/),straightBracket:(/\$\[(.*?)\]/g)};this.externalProjection=new OpenLayers.Projection("EPSG:4326");OpenLayers.Format.XML.prototype.initialize.apply(this,[options]);}, +read:function(data){this.features=[];this.styles={};this.fetched={};var options={depth:0,styleBaseUrl:this.styleBaseUrl};return this.parseData(data,options);}, +parseData:function(data,options){if(typeof data=="string"){data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);} var types=["Link","NetworkLink","Style","StyleMap","Placemark"];for(var i=0,len=types.length;i<len;++i){var type=types[i];var nodes=this.getElementsByTagNameNS(data,"*",type);if(nodes.length==0){continue;} switch(type.toLowerCase()){case"link":case"networklink":this.parseLinks(nodes,options);break;case"style":if(this.extractStyles){this.parseStyles(nodes,options);} break;case"stylemap":if(this.extractStyles){this.parseStyleMaps(nodes,options);} Modified: trunk/wao-ui/src/main/webapp/js/cartography.js =================================================================== --- trunk/wao-ui/src/main/webapp/js/cartography.js 2010-07-06 14:09:45 UTC (rev 590) +++ trunk/wao-ui/src/main/webapp/js/cartography.js 2010-07-07 13:45:46 UTC (rev 591) @@ -3,7 +3,7 @@ var zoom = 5; var map; -function init(url) { +function init(url, title) { map = new OpenLayers.Map('map'); var wms = new OpenLayers.Layer.WMS( @@ -12,28 +12,43 @@ {layers: 'basic'} ); - var layer = new OpenLayers.Layer.GML("KML", url, { + var kml = new OpenLayers.Layer.GML(title, url, { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, - extractAttributes: true, - maxDepth: 2 + extractAttributes: true } }); - map.addLayers([wms, layer]); +// var kml = new OpenLayers.Layer.Vector(title, { +// projection: new OpenLayers.Projection("EPSG:4326"), +// strategies: [new OpenLayers.Strategy.Fixed()], +// protocol: new OpenLayers.Protocol.HTTP({ +// url: url, +// format: new OpenLayers.Format.KML({ +// extractStyles: true, +// extractAttributes: true +// }) +// }) +// }); - select = new OpenLayers.Control.SelectFeature(layer); - layer.events.on({ + map.addLayers([wms, kml]); + + select = new OpenLayers.Control.SelectFeature(kml); + + kml.events.on({ "featureselected": onFeatureSelect, "featureunselected": onFeatureUnselect }); map.addControl(select); +// map.addControl( new OpenLayers.Control.LayerSwitcher() ); + select.activate(); - var center = new OpenLayers.LonLat(-1.153586,46.158016); + // Center on Chateauroux + var center = new OpenLayers.LonLat(1.032715,46.637368); map.setCenter(center, 7); } @@ -45,15 +60,19 @@ var feature = event.feature; // Since KML is user-generated, do naive protection against // Javascript. - var content = "<h2>"+feature.attributes.name + "</h2>" + feature.attributes.description; + var content = "<strong>" + feature.attributes.name + "</strong>" + feature.attributes.description; if (content.search("<script") != -1) { content = "Content contained Javascript! Escaped content below.<br />" + content.replace(/</g, "<"); } - popup = new OpenLayers.Popup.FramedCloud("chicken", - feature.geometry.getBounds().getCenterLonLat(), - new OpenLayers.Size(100,100), - content, - null, true, onPopupClose); + popup = new OpenLayers.Popup.FramedCloud( + "bubble", + feature.geometry.getBounds().getCenterLonLat(), + new OpenLayers.Size(100, 100), + content, + null, + true, + onPopupClose + ); feature.popup = popup; map.addPopup(popup); }
participants (1)
-
fdesbois@users.labs.libre-entreprise.org