Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / layers / SelectionSupport.java @ 1076

History | View | Annotate | Download (2.75 KB)

1
package com.iver.cit.gvsig.fmap.layers;
2

    
3
import com.iver.utiles.XMLEntity;
4

    
5
import java.util.ArrayList;
6
import java.util.Iterator;
7

    
8

    
9
/**
10
 * Clase que gestiona las operaci?nes sobre la selecci?n.
11
 *
12
 * @author Vicente Caballero Navarro
13
 */
14
public class SelectionSupport {
15
        private FBitSet selection = new FBitSet();
16
        private ArrayList listeners = new ArrayList();
17

    
18
        /**
19
         * Inserta una nueva selecci?n.
20
         *
21
         * @param selection FBitSet con la selecci?n.
22
         */
23
        public void setSelection(FBitSet selection) {
24
                this.selection = selection;
25
                fireSelectionEvents();
26
        }
27

    
28
        /**
29
         * Devuelve un FBitSet con los ?ndices de los elementos seleccionados.
30
         *
31
         * @return FBitSet.
32
         */
33
        public FBitSet getSelection() {
34
                return selection;
35
        }
36

    
37
        /**
38
         * Devuelve true si el elemento est? seleccionado.
39
         *
40
         * @param recordIndex ?ndice del registro.
41
         *
42
         * @return True si est? seleccionado.
43
         */
44
        public boolean isSelected(int recordIndex) {
45
                return selection.get(recordIndex);
46
        }
47

    
48
        /**
49
         * Elimina la selecci?n.
50
         */
51
        public void clearSelection() {
52
                this.selection.clear();
53
        }
54

    
55
        /**
56
         * A?ade un SelectionListener al ArrayList de Listeners.
57
         *
58
         * @param listener SelectionListener a a?adir.
59
         */
60
        public void addSelectionListener(SelectionListener listener) {
61
                listeners.add(listener);
62
        }
63

    
64
        /**
65
         * Borra el SelectionListener que se le pasa como par?metro del ArrayList
66
         * de Listener.
67
         *
68
         * @param listener SlectionListener a borrar.
69
         */
70
        public void removeSelectionListener(SelectionListener listener) {
71
                listeners.remove(listener);
72
        }
73

    
74
        /**
75
         * Cuando ocurre un evento de cambio en la selecci?n, ?ste puede ser uno de
76
         * una gran cantidad de eventos. Con el fin de no propagar todos estos
77
         * eventos, se realiza la propagaci?n de manera manual al final de la
78
         * "r?faga" de eventos
79
         */
80
        public void fireSelectionEvents() {
81
                for (Iterator iter = listeners.iterator(); iter.hasNext();) {
82
                        SelectionListener listener = (SelectionListener) iter.next();
83

    
84
                        listener.selectionChanged(new SelectionEvent());
85
                }
86
        }
87

    
88
        /**
89
         * Devuelve el XMLEntity con la informaci?n necesaria para reproducir un
90
         * objeto igual al actual.
91
         *
92
         * @return XMLEntity.
93
         */
94
        public XMLEntity getXMLEntity() {
95
                XMLEntity xml = new XMLEntity();
96

    
97
                if (selection != null) {
98
                        xml.putProperty("numBitSet", selection.cardinality());
99

    
100
                        int n = 0;
101

    
102
                        for (int i = 0; i < selection.length(); i++) {
103
                                if (selection.get(i)) {
104
                                        xml.putProperty(String.valueOf(n), i);
105
                                        n++;
106
                                }
107
                        }
108
                }
109

    
110
                return xml;
111
        }
112

    
113
        /**
114
         * A partir del XMLEntity reproduce la selecci?n.
115
         *
116
         * @param xml DOCUMENT ME!
117
         */
118
        public void setXMLEntity(XMLEntity xml) {
119
                int numBitSet = xml.getIntProperty("numBitSet");
120

    
121
                if (numBitSet != 0) {
122
                        for (int i = 0; i < numBitSet; i++) {
123
                                selection.set(xml.getIntProperty(String.valueOf(i)));
124
                        }
125
                }
126
        }
127
}