From 4f9a9252ffcfd1518d210d1dfc0f9ac2ea843ee5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ma=C3=ABl=20M=C3=A9liani?= <m.meliani@neogeo-online.net>
Date: Fri, 11 Oct 2013 15:32:13 +0200
Subject: [PATCH] Fixed bug about style/class... in test :s

---
 src/mra.py    | 36 ++++++++++++++++++++----------------
 src/server.py |  4 ++--
 src/tools.py  | 11 +++++++++++
 3 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/src/mra.py b/src/mra.py
index 667c68c..46317e0 100644
--- a/src/mra.py
+++ b/src/mra.py
@@ -52,13 +52,19 @@ import stores
 import metadata
 
 class MetadataMixin(object):
-
     def __getattr__(self, attr):
         if hasattr(self, "ms") and hasattr(metadata, attr):
             return functools.partial(getattr(metadata, attr), self.ms)
         raise AttributeError("\"%s\" object has no attribute \"%s\"." %
                              (type(self).__name__, attr))
 
+class Clazz(object):
+    def __init__(self, backend):
+        self.ms = backend
+
+    def index(self):
+        return self.index
+
 class Layer(MetadataMixin):
     def __init__(self, backend):
         self.ms = backend
@@ -124,11 +130,13 @@ class Layer(MetadataMixin):
         return iter(self.get_fields())
 
     def iter_classes(self):
-        for i in xrange(self.ms.numclasses):
-            yield Class(self.ms.getClass(i))
+        for i in reversed(xrange(self.ms.numclasses)):
+            c = Clazz(self.ms.getClass(i))
+            c.index = i
+            yield c
 
     def get_styles(self):
-        return set(self.ms.getClass(i).group for i in xrange(self.ms.numclasses))
+        return set(self.ms.getClass(i).group for i in reversed(xrange(self.ms.numclasses)))
 
     def iter_styles(self):
         return iter(self.get_styles())
@@ -175,18 +183,16 @@ class Layer(MetadataMixin):
         mf.ms.removeLayer(ms_template_layer.index)
 
     def set_default_style(self, mf):
+        s_name = tools.get_dflt_sld_name(self.ms.type)
         if self.ms.type == mapscript.MS_LAYER_POINT:
             self.ms.tolerance = 8
             self.ms.toleranceunits = 6
-            s_name = "default_point"
         elif self.ms.type == mapscript.MS_LAYER_LINE:
             self.ms.tolerance = 8
             self.ms.toleranceunits = 6
-            s_name = "default_line"
         elif self.ms.type == mapscript.MS_LAYER_POLYGON:
             self.ms.tolerance = 0
             self.ms.toleranceunits = 6
-            s_name = "default_polygon"
         else:
             return
 
@@ -199,16 +205,14 @@ class Layer(MetadataMixin):
         self.ms.classgroup = s_name
 
     def remove_style(self, s_name):
-        for c_index in reversed(xrange(self.ms.numclasses)):
-            c = self.ms.getClass(c_index)
-            if c.group == s_name:
-                self.ms.removeClass(c_index)
-                break
-        else:
-            raise KeyError(s_name)
-
         if self.ms.classgroup == s_name:
-            self.ms.classgroup = None # Should never be 'None'
+            self.ms.classgroup = None
+
+        for c in self.iter_classes():
+            if c.ms.group == s_name:
+                self.ms.removeClass(c.index)
+            else:
+                pass
 
 class LayerGroup(object):
 
diff --git a/src/server.py b/src/server.py
index 56affa6..b1bec29 100755
--- a/src/server.py
+++ b/src/server.py
@@ -843,7 +843,7 @@ class layers(object):
 
             # Remove the automatic default style.
             for s_name in layer.iter_styles():
-                if s_name in ("default_polygon", "default_line", "default_point"):
+                if s_name == tools.get_dflt_sld_name(layer.ms.type):
                     layer.remove_style(s_name)
 
         mf.save()
@@ -955,7 +955,7 @@ class layer(object):
             
             # Remove the automatic default style.
             for s_name in layer.iter_styles():
-                if s_name in ("default_polygon", "default_line", "default_point"):
+                if s_name == tools.get_dflt_sld_name(layer.ms.type):
                     layer.remove_style(s_name)
 
         mf.save()
diff --git a/src/tools.py b/src/tools.py
index 8891a5b..a9d5e15 100644
--- a/src/tools.py
+++ b/src/tools.py
@@ -61,6 +61,17 @@ def is_hidden(path):
     # MacOSX has at least four ways to hide files...
     return os.path.basename(path).startswith(".")
 
+def get_dflt_sld_name(type):
+    # TODO: Names should be changed...
+    if type == 0: # point
+        return "default_point"
+    elif type == 1: # line
+        return "default_line"
+    elif type == 2: # polygon
+        return "default_polygon"
+    else:
+        return None
+
 def wkt_to_proj4(wkt):
     """Return Proj4 definition from WKT definition."""
 
-- 
GitLab