[OpenLayers-Commits] r4796 - in sandbox/timandseb/wfsv: examples lib/OpenLayers/Control

commits at openlayers.org commits at openlayers.org
Wed Oct 3 16:55:23 EDT 2007


Author: sbenthall
Date: 2007-10-03 16:55:22 -0400 (Wed, 03 Oct 2007)
New Revision: 4796

Modified:
   sandbox/timandseb/wfsv/examples/wfs-v.html
   sandbox/timandseb/wfsv/lib/OpenLayers/Control/ModifyFeature.js
   sandbox/timandseb/wfsv/lib/OpenLayers/Control/SelectFeature.js
Log:
Delete now works


Modified: sandbox/timandseb/wfsv/examples/wfs-v.html
===================================================================
--- sandbox/timandseb/wfsv/examples/wfs-v.html	2007-10-03 20:42:35 UTC (rev 4795)
+++ sandbox/timandseb/wfsv/examples/wfs-v.html	2007-10-03 20:55:22 UTC (rev 4796)
@@ -133,7 +133,15 @@
         } else {
             OpenLayers.ProxyHost = "proxy.cgi?url=";
         }
+/* local
+        var wfsUrl = "http://localhost:8080/geoserver/wfsv",
+            wmsUrl = "http://localhost:8080/geoserver/wms",
+            wms = {},
+            map, panel;
+*/
 
+
+/*  Original */
         var wfsUrl = "http://geo.openplans.org/geoserver/wfsv",
             wmsUrl = "http://geo.openplans.org/geoserver/wms",
             wms = {},
@@ -285,8 +293,8 @@
 			view.appendChild(table);
 			
 			var deleteb = document.createElement('button')
-			deleteb.innerHTML = "*Delete"
-			deleteb.onclick = function () { OpenLayers.Console.log("No delete functionality yet.");}
+			deleteb.innerHTML = "Delete"
+			deleteb.onclick = function () { deleteFeature(feature);}
 			view.appendChild(deleteb);
 			var edit = document.createElement("button")
 			edit.onclick = function () {onModificationEnd(feature); onModificationStart(feature);}
@@ -302,8 +310,73 @@
 			addPopup(feature,view)
 			
 			}
+			
+			
+			/*
+			 *  Deletes feature--called from the delete button on the feature's View popup.
+			 *  
+			 *  There are a number of design decisions made in this code, including:
+			 *  	- automatically "saving" after a delete (i.e., making a server request)
+			 *  	- choosing to maintain the client and server feature data in parallel, 
+			 *  	  rather than updating the server and reloading the features from it 
+			 */
+		 function deleteFeature(feature){
+		 	
+		    /* Request user confirmation; continue only if confirmed */
+			
+			if(!confirm("Are you sure you want to delete this feature?")){
+				return;	
+			}
+			
+			/* Remove popup */
+			
+			//slight code re-use here.  Refactoring TODO: figure out what needs to be abstracted out of onModificationEnd
+			if(feature.popup){
+				map.removePopup(feature.popup);
+            	feature.popup.destroy();
+            	feature.popup = null;
+			}
 		
+			/* Remove feature, client-side */
 		
+			panel.vectorLayer.removeFeatures([feature])
+		
+			/* Remove feature, server side */ 
+		
+		    var delFeature = xml.createElementNS(wfsns, "wfs:Transaction");
+        	delFeature.setAttribute("version", "1.0.0");
+        	delFeature.setAttribute("service", "WFSV");
+			delFeature.setAttribute("handle","Deleting " + feature.fid);
+			//delFeature.setAttribute("srsName", map.projection); // Shoudl be srsName?  <-- Not sure how to do this right because map.projection is not a string.  Need to see how this is parsed in OpenLayers.Util.getParameterString
+        	//delFeature.setAttribute("outputFormat", "GML2");
+        	var deleteElt = xml.createElementNS(wfsns, "wfs:Delete");
+        	deleteElt.setAttribute("typeName", panel.featureType);
+        	var filterProp = xml.createElementNS(ogcns, "ogc:Filter");
+        	var featureProp = xml.createElementNS(ogcns, "ogc:FeatureId");
+			featureProp.setAttribute("fid", feature.fid);
+        	filterProp.appendChild(featureProp);
+			deleteElt.appendChild(filterProp);
+        	delFeature.appendChild(deleteElt);
+		
+		    var data = xml.write(delFeature);
+
+        	var url = wfsUrl;
+    	  		if(OpenLayers.ProxyHost && OpenLayers.String.startsWith(url, "http")) {
+     	       		url = OpenLayers.ProxyHost + escape(url);
+  		    }
+		
+			new OpenLayers.Ajax.Request(url,
+                                   		{method: 'post', 
+                                     	 postBody: data,
+                                     	 onComplete: function(){OpenLayers.Console.log("Delete successful")}, 
+                                     	 onFailure: function(request) {
+                                         	OpenLayers.Console.error(request.responseText);
+                                     	 }
+                                    	});
+            
+		
+		 }
+		
 			
 	
 	var xml = new OpenLayers.Format.XML();
@@ -368,7 +441,7 @@
 			};
             
         new OpenLayers.Ajax.Request(url,
-                                    {method: 'post', 
+                                    {method: 'post', // TODO Should this be 'get'?
                                      postBody: data,
                                      onComplete: xxyzzy, 
                                      onFailure: function(request) {
@@ -491,36 +564,13 @@
 			save.innerHTML = "Save"
 			tabedit.appendChild(save);
 			
+	
 			
-            // var element = document.getElementById("output");
-            // element.style.display = "none";
-            // element.innerHTML = "";
-            // element.appendChild(form);
-            // element.style.display = "block";
-			
-			
-			
-			/*
-			 * select-feature-popup.htm cod
-			 */
-			
-			//permaform = form
-			
-			//OpenLayers.Console.log(form)
-			
 			addPopup(feature,tabedit, true)
 			
-			/*
-			var element = document.getElementById("popup-output");
-            element.style.display = "none";
-            element.innerHTML = "";
-            element.appendChild(form);
-            element.style.display = "block";
-			*/
-			
         }
 		
-		//var permaform;
+	   
 		
 		
 
@@ -596,13 +646,13 @@
             var query = xml.createElementNS(wfsns, "wfs:Query");
             query.setAttribute("typeName", "topp:changesets");
 			
-			//begin new code to alter request
+			/* begin new code to alter request
 			var filterProp = xml.createElementNS(ogcns, "ogc:Filter");
         	var featureProp = xml.createElementNS(ogcns, "ogc:FeatureId");
 			featureProp.setAttribute("fid", "archsites.121");
         	filterProp.appendChild(featureProp);
 			query.appendChild(filterProp);
-			//end new code
+			/* end new code */
 			
 			
 			

Modified: sandbox/timandseb/wfsv/lib/OpenLayers/Control/ModifyFeature.js
===================================================================
--- sandbox/timandseb/wfsv/lib/OpenLayers/Control/ModifyFeature.js	2007-10-03 20:42:35 UTC (rev 4795)
+++ sandbox/timandseb/wfsv/lib/OpenLayers/Control/ModifyFeature.js	2007-10-03 20:55:22 UTC (rev 4796)
@@ -146,7 +146,7 @@
         var control = this;
 
         // configure the select control
-		OpenLayers.Console.log("onModificationStart : " + this.onModificationStart)
+		
         var selectOptions = {
 			hover:true,
             geometryTypes: this.geometryTypes,

Modified: sandbox/timandseb/wfsv/lib/OpenLayers/Control/SelectFeature.js
===================================================================
--- sandbox/timandseb/wfsv/lib/OpenLayers/Control/SelectFeature.js	2007-10-03 20:42:35 UTC (rev 4795)
+++ sandbox/timandseb/wfsv/lib/OpenLayers/Control/SelectFeature.js	2007-10-03 20:55:22 UTC (rev 4796)
@@ -88,7 +88,7 @@
                                                   over: this.overFeature,
                                                   out: this.outFeature
                                                 }, this.callbacks);
-		OpenLayers.Console.log("onClick : " + this.onClick)
+		
         var handlerOptions = {geometryTypes: this.geometryTypes};
         this.handler = new OpenLayers.Handler.Feature(this, layer,
                                                       this.callbacks,



More information about the Commits mailing list