Statistics
| Revision:

root / tmp / org.txm.groovy.core / src / groovy / org / txm / scripts / commands / mesures / Mesures.groovy @ 1000

History | View | Annotate | Download (4.1 kB)

1 1000 mdecorde
package org.txm.scripts.functions.mesures;
2 321 mdecorde
3 479 mdecorde
import java.io.File;
4 479 mdecorde
import java.io.FileOutputStream;
5 479 mdecorde
import java.io.IOException;
6 479 mdecorde
import java.io.OutputStreamWriter;
7 479 mdecorde
import java.io.Writer;
8 479 mdecorde
import java.text.DecimalFormat;
9 479 mdecorde
import java.util.ArrayList;
10 479 mdecorde
import java.util.Arrays;
11 321 mdecorde
12 479 mdecorde
import org.txm.searchengine.cqp.corpus.Corpus;
13 479 mdecorde
import org.txm.searchengine.cqp.corpus.Partition;
14 321 mdecorde
15 321 mdecorde
/**
16 321 mdecorde
 * Container of mesures
17 321 mdecorde
 *
18 321 mdecorde
 * @author mdecorde
19 321 mdecorde
 *
20 321 mdecorde
 */
21 321 mdecorde
public class Mesures extends ArrayList<Mesure>{
22 321 mdecorde
23 321 mdecorde
        private static final long serialVersionUID = 324346022230541761L;
24 321 mdecorde
25 321 mdecorde
        ArrayList<Corpus> data = new ArrayList<Corpus>();
26 321 mdecorde
27 321 mdecorde
        public Mesures(Corpus corpus) {
28 321 mdecorde
                data = new ArrayList<Corpus>();
29 321 mdecorde
                data.add(corpus);
30 321 mdecorde
        }
31 321 mdecorde
32 321 mdecorde
        public Mesures(ArrayList<Corpus> corpora) {
33 321 mdecorde
                data = corpora;
34 321 mdecorde
                println "hello TXM"
35 321 mdecorde
        }
36 321 mdecorde
37 321 mdecorde
        public Mesures(Partition partition) {
38 321 mdecorde
                data.addAll(partition.getParts());
39 321 mdecorde
        }
40 321 mdecorde
41 321 mdecorde
        public boolean add(Mesure mesure) {
42 321 mdecorde
                if (!mesure.compute(data)) {
43 321 mdecorde
                        return false;
44 321 mdecorde
                }
45 321 mdecorde
46 321 mdecorde
                return super.add(mesure);
47 321 mdecorde
        }
48 321 mdecorde
49 321 mdecorde
        public boolean export(Writer writer, String encoding, String colseparator, String txtseparator) throws IOException {
50 321 mdecorde
                String line = "Mesures";
51 321 mdecorde
                for (Corpus c : data) {
52 321 mdecorde
                        line += colseparator+txtseparator+c.getName().replaceAll(txtseparator,txtseparator+txtseparator)+txtseparator;
53 321 mdecorde
                }
54 321 mdecorde
                writer.write(line+"\n");
55 321 mdecorde
56 321 mdecorde
                for (Mesure m : this) {
57 321 mdecorde
                        for (MesureResult r : m) {
58 321 mdecorde
                                line = r.name;
59 321 mdecorde
                                for (int i = 0 ; i < r.data.length ; i++)
60 321 mdecorde
                                        line += colseparator+r.data[i];
61 321 mdecorde
                                writer.write(line+"\n");
62 321 mdecorde
                        }
63 321 mdecorde
                }
64 321 mdecorde
65 321 mdecorde
                return true;
66 321 mdecorde
        }
67 321 mdecorde
68 321 mdecorde
        public boolean export(File outfile, String encoding, String colseparator, String txtseparator) throws IOException {
69 321 mdecorde
                Writer writer = new OutputStreamWriter(
70 321 mdecorde
                                new FileOutputStream(outfile), encoding); //$NON-NLS-1$
71 321 mdecorde
                boolean rez = export(writer, encoding, colseparator, txtseparator);
72 321 mdecorde
                writer.close();
73 321 mdecorde
                return rez;
74 321 mdecorde
        }
75 321 mdecorde
76 321 mdecorde
        DecimalFormat floatFormatter = new DecimalFormat("###,###.##");
77 321 mdecorde
        DecimalFormat intFormatter = new DecimalFormat("###,###,###");
78 321 mdecorde
        public void prettyPrint() {
79 321 mdecorde
                ArrayList<String[]> lines = new ArrayList<String[]>();
80 321 mdecorde
                int[] maxx = new int[data.size()+1];
81 321 mdecorde
                int[] maxxDecimales = new int[data.size()+1];
82 321 mdecorde
83 321 mdecorde
84 321 mdecorde
                String[] line = new String[data.size() + 1];
85 321 mdecorde
                line[0] = "Mesures";
86 321 mdecorde
                maxx[0] = line[0].length();
87 321 mdecorde
                for (int i = 1 ; i <= data.size() ; i++) {
88 321 mdecorde
                        line[i] = data.get(i-1).getName();
89 321 mdecorde
                        maxx[i] = line[i].length();
90 321 mdecorde
                }
91 321 mdecorde
                lines.add(line);
92 321 mdecorde
93 321 mdecorde
                // fill lines
94 321 mdecorde
                for (Mesure m : this) {
95 321 mdecorde
                        for(MesureResult r : m) {
96 321 mdecorde
                                line = new String[data.size()+1];
97 321 mdecorde
                                line[0] = r.name;
98 321 mdecorde
                                if (maxx[0] < r.name.length())
99 321 mdecorde
                                        maxx[0] = r.name.length();
100 321 mdecorde
101 321 mdecorde
                                int i = 1;
102 321 mdecorde
                                for (Object o : r.data) {
103 321 mdecorde
                                        String str = ""+o;
104 321 mdecorde
                                        if (o instanceof Integer) str = intFormatter.format(o);
105 321 mdecorde
                                        else if (o instanceof Float) str = floatFormatter.format(o);
106 321 mdecorde
107 321 mdecorde
                                        line[i] = str;
108 321 mdecorde
109 321 mdecorde
//                                        if (maxx[i] < str.length())
110 321 mdecorde
//                                                maxx[i] = str.length();
111 321 mdecorde
112 321 mdecorde
                                        int idxDecimal = str.indexOf(",");
113 321 mdecorde
                                        if (idxDecimal > 0) {
114 321 mdecorde
                                                idxDecimal = str.length() - idxDecimal;
115 321 mdecorde
                                                if (maxxDecimales[i] < idxDecimal)
116 321 mdecorde
                                                        maxxDecimales[i] = idxDecimal;
117 321 mdecorde
                                        }
118 321 mdecorde
                                        i++;
119 321 mdecorde
                                }
120 321 mdecorde
                                lines.add(line);
121 321 mdecorde
                        }
122 321 mdecorde
                }
123 321 mdecorde
124 321 mdecorde
//                System.out.println("maxx: "+Arrays.toString(maxx));
125 321 mdecorde
//                System.out.println("maxxDecimales: "+Arrays.toString(maxxDecimales));
126 321 mdecorde
127 321 mdecorde
                // fix cells right lengths (decimals)
128 321 mdecorde
                boolean notfirst = false;
129 321 mdecorde
                for (String[] l : lines) {
130 321 mdecorde
                        for (int i = 1 ; i < data.size() +1; i++) {
131 321 mdecorde
                                String str = l[i];
132 321 mdecorde
                                int nbDecimalToAdd = 0;
133 321 mdecorde
134 321 mdecorde
                                if (str.indexOf(",") < 0) {
135 321 mdecorde
                                        nbDecimalToAdd = maxxDecimales[i];
136 321 mdecorde
                                } else {
137 321 mdecorde
                                        nbDecimalToAdd = maxxDecimales[i] - (str.length() - str.indexOf(","));
138 321 mdecorde
                                }
139 321 mdecorde
140 321 mdecorde
                                if (notfirst)
141 321 mdecorde
                                for (int j = 0 ; j < nbDecimalToAdd ; j++)
142 321 mdecorde
                                        str += " ";
143 321 mdecorde
144 321 mdecorde
                                if (maxx[i] < str.length())
145 321 mdecorde
                                        maxx[i] = str.length();
146 321 mdecorde
147 321 mdecorde
                                l[i] = str;
148 321 mdecorde
                        }
149 321 mdecorde
                        notfirst = true;
150 321 mdecorde
                }
151 321 mdecorde
152 321 mdecorde
                // fix cells left lengths (alignment)
153 321 mdecorde
                for (String[] l : lines) {
154 321 mdecorde
                        for (int i = 0 ; i < data.size() +1; i++) {
155 321 mdecorde
                                while (l[i].length() < maxx[i]) {
156 321 mdecorde
                                        if (i == 0)        l[i] = ""+l[i]+" ";
157 321 mdecorde
                                        else l[i] = " "+l[i];
158 321 mdecorde
                                }
159 321 mdecorde
                        }
160 321 mdecorde
                }
161 321 mdecorde
162 321 mdecorde
                // print cells
163 321 mdecorde
                for (String[] l : lines) {
164 321 mdecorde
                        for (int i = 0 ; i < data.size() +1; i++) {
165 321 mdecorde
                                if (i == 0) System.out.print(l[i]);
166 321 mdecorde
                                else  System.out.print(" "+l[i]);
167 321 mdecorde
                        }
168 321 mdecorde
                        System.out.println("");
169 321 mdecorde
                }
170 321 mdecorde
        }
171 321 mdecorde
}