merging from the trunk addons
[odoo/odoo.git] / addons / wiki / wizard / sort_algo.py
1 def sort(data, index):
2     for i in range(len(data)):
3         j = i + 1
4         for j in range(len(data)-1):
5             d1 = data[i].split('.')
6             d2 = data[j].split('.')
7             
8             l1 = len(d1)
9             l2 = len(d2)
10             max = 0
11             if l1 < l2:
12                 max = l1
13             elif l2 < l1:
14                 max = l2
15             else:
16                 max = l1
17             
18             if max == 1:
19                 if int(d1[0]) == int(d2[0]):
20                     if len(d1) < len(d2):
21                         tmp = data[i]
22                         data[i] = data[j]
23                         data[j] = tmp
24                         continue
25
26             for p in range(0, max):
27                 val1 = val2 = 0
28                 try:
29                     val1 = int(d1[p])
30                 except:
31                     val1 = 0
32                     
33                 try:
34                     val2 = int(d2[p])
35                 except:
36                     val2 = 0
37                     
38                 if val1 < val2:
39                     tmp = data[i]
40                     data[i] = data[j]
41                     data[j] = tmp
42             if data[i].startswith(data[j]):
43                 tmp = data[i]
44                 tmp = tmp.replace(data[j],'')
45
46 def group(data):
47     gp = {}
48     for i in range(len(data)):
49         d1 = data[i].split('.')[0]
50         if gp.has_key(d1):
51             gp[d1].append(data[i])
52         else:
53             gp[d1] = [data[i]]
54     return gp
55
56 def max(data):
57     max = 0
58     for i in range(len(data)):
59         d = str(data[i]).split('.')
60         if len(d) > max:
61             max = len(d)
62             
63     return max
64
65 def toint(data):
66     for i in range(len(data)):
67         data[i] = int(data[i])
68         
69 def rearrange(key, groups):
70     i = 1
71     new = {}
72     for ky in key:
73         new[i] = groups[str(ky)]
74         i += 1
75     return new
76
77 def reindex(key, groups):
78     if groups[0] != key:
79         groups[0] = key
80     
81     lvl_group = {}
82     level = max(groups)
83     for i in range(len(groups)):
84         dg = str(groups[i]).split('.')
85         index = len(dg)
86         if lvl_group.has_key(str(index)):
87             lvl_group[str(index)].append(groups[i])
88         else:
89             lvl_group[str(index)] = [groups[i]]
90     
91     for i in range(2, level+1):
92         ixd = 1
93         gps = lvl_group[str(i)]
94         for j in range(len(gps)):
95             dt = gps[j].split('.')
96             new =""
97             for k in range(i-1):
98                 new += str(dt[k])
99                 new += '.'
100                 
101             new += str(ixd)
102             ixd += 1
103             gps[j] = new
104             
105     print lvl_group
106     
107 if __name__ == '__main__':
108     
109     data = ['1', '10.1', '10.3', '1.1', '1.2.3', '1.7', '3.1.8', '1.2.2', '1.2.10', '1.3', '1.4', '2', '20.2', '2.1', '2.2', '3', '3.1', '1.2.1', '2.1.2']
110     
111     sort(data, 0)
112     
113     grp = group(data)
114     
115     for gp in grp:
116         loop = max(grp[gp])
117         for lp in range(1, loop):
118             sort(grp[gp],lp)
119     
120     key = grp.keys()
121     toint(key)
122     key.sort()
123     
124     groups = rearrange(key, grp)
125     
126     new_data = []
127     for key in groups:
128         new_data.extend(groups[key])
129         #print groups[key]
130     
131     print 'XXXXXXXXXXXXXXXXX : ', new_data
132 #    print groups
133 #