Revision 943 trunk/applications/appgvSIG/src/com/iver/cit/gvsig/gui/selectionByTheme/MySelectionByThemeListener.java

View differences:

MySelectionByThemeListener.java
27 27
 * @author Fernando Gonz?lez Cort?s
28 28
 */
29 29
public class MySelectionByThemeListener implements SelectionByThemeListener {
30
    private FLayers layers;
31

  
32 30
    /**
33
     * Creates a new MySelectionByThemeListener object.
34
     *
35
     * @param layers DOCUMENT ME!
36
     */
37
    public MySelectionByThemeListener(FLayers layers) {
38
        this.layers = layers;
39
    }
40

  
41
    /**
42
     * DOCUMENT ME!
43
     *
44
     * @param toSelect DOCUMENT ME!
45
     * @param selectionLayer DOCUMENT ME!
46
     * @param action DOCUMENT ME!
47
     */
48
    private void doSelection(FLayer[] toSelect, FLayer selectionLayer, int action, boolean bFromSet) {
49
    	SingleLayer capaBase = (SingleLayer) selectionLayer;
50
    	Selectable selecBase = (Selectable) capaBase;
51
    	BitSet bitSetBase = selecBase.getSelection();
52
        VectorialAdapter adapterBase = capaBase.getSource();  
53

  
54
        for (int i = 0; i < toSelect.length; i++) {
55
            FLayer capa = toSelect[i];
56
            if (capa instanceof Selectable) {
57
            	Selectable seleccionada = (Selectable) capa;
58
            	VectorialAdapter adapterSelec = ((SingleLayer) capa).getSource();
59
            	BitSet bitSet = seleccionada.getSelection();
60
                int index = bitSetBase.nextSetBit(0);
61
                while (index != -1) {
62
                	FGeometry s1;
63
					try {
64
						s1 = (FGeometry) adapterBase.getShape(index);
65
						Geometry g1 = s1.toJTSGeometry();
66
	                    for (int j = 0; j < adapterSelec.getShapeCount(); j++) {
67
	                    	
68
	                    	if (bFromSet)
69
	                    	{
70
	                    		if (bitSet.get(j)== false)
71
	                    			continue;
72
	                    		bitSet.set(j, false); // Por defecto limpiamos
73
	                    	}
74
	                    		
75
	                    	
76
	                    	FGeometry s2 = (FGeometry) adapterSelec.getShape(j);
77
	                        Geometry g2 = s2.toJTSGeometry();
78
	                        IntersectionMatrix m = g2.relate(g1);
79
	
80
	                        switch (action) {
81
	                        case SelectionByTheme.CONTAINS:
82
	                            if (m.isContains()) {
83
	                                bitSet.set(j, true);
84
	                            }
85
	                            break;
86
	
87
	                        case SelectionByTheme.CROSSES:
88
	
89
	                            if (m.isCrosses(g1.getDimension(), g2.getDimension())) {
90
	                            	bitSet.set(j, true);
91
	                            }
92
	
93
	                            break;
94
	
95
	                        case SelectionByTheme.DISJOINT:
96
	                            if (m.isDisjoint()) {
97
	                            	bitSet.set(j, true);
98
	                            }
99
	                            break;
100
	
101
	                        case SelectionByTheme.EQUALS:
102
	                            if (m.isEquals(g1.getDimension(), g2.getDimension())) {
103
	                            	bitSet.set(j, true);
104
	                            }
105
	
106
	                            break;
107
	
108
	                        case SelectionByTheme.INTERSECTS:
109
	
110
	                            if (m.isIntersects()) {
111
	                            	bitSet.set(j, true);
112
	                            }
113
	
114
	                            break;
115
	
116
	                        case SelectionByTheme.OVERLAPS:
117
	
118
	                            if (m.isOverlaps(g1.getDimension(),
119
	                                        g2.getDimension())) {
120
	                            	bitSet.set(j, true);
121
	                            }
122
	
123
	                            break;
124
	
125
	                        case SelectionByTheme.TOUCHES:
126
	
127
	                            if (m.isTouches(g1.getDimension(), g2.getDimension())) {
128
	                            	bitSet.set(j, true);
129
	                            }
130
	
131
	                            break;
132
	
133
	                        case SelectionByTheme.WITHIN:
134
	                            if (m.isWithin()) {
135
	                            	bitSet.set(j, true);
136
	                            }
137
	
138
	                            break;
139
	                        }
140
	                    } // for
141
					} catch (DriverIOException e) {
142
						// TODO Auto-generated catch block
143
						e.printStackTrace();
144
					}
145

  
146
                    index = bitSetBase.nextSetBit(index + 1);
147
                }
148
                // seleccionada.setSelected(0, seleccionada.isSelected(0), false);
149
            }
150
        }
151
    }
152

  
153
    /**
154 31
     * @see com.iver.cit.gvsig.gui.selectionByTheme.SelectionByThemeListener#newSet(int, int,
155 32
     *      int)
156 33
     */
......
176 53
     *      int, int)
177 54
     */
178 55
    public void addToSet(FLayer[] toSelect, FLayer selectionLayer, int action) {
179
        doSelection(toSelect, selectionLayer, action, false);
56
        for (int i = 0; i < toSelect.length; i++) {
57
        	Selectable capa = (Selectable) toSelect[i];
58
            QueryByThemeVisitor visitor = new QueryByThemeVisitor(toSelect[i], selectionLayer, action);
59
            FBitSet selection = capa.getSelection();
60
            try {
61
				((VectorialData) selectionLayer).process(visitor, ((Selectable)selectionLayer).getSelection());
62
				selection.or(visitor.getBitset());
63
				((Selectable) toSelect[i]).setSelection(selection);
64
			} catch (DriverException e) {
65
				NotificationManager.addError("Error leyendo las capas", e);
66
			} catch (VisitException e) {
67
				NotificationManager.addError("Error leyendo las capas", e);
68
			}
69
        }
180 70
    }
181 71

  
182 72
    /**
......
184 74
     *      int)
185 75
     */
186 76
    public void fromSet(FLayer[] toSelect, FLayer selectionLayer, int action) {
187
    	doSelection(toSelect, selectionLayer, action, true);
77
        for (int i = 0; i < toSelect.length; i++) {
78
        	Selectable capa = (Selectable) toSelect[i];
79
            QueryByThemeVisitor visitor = new QueryByThemeVisitor(toSelect[i], selectionLayer, action);
80
            FBitSet selection = capa.getSelection();
81
            try {
82
				((VectorialData) selectionLayer).process(visitor, ((Selectable)selectionLayer).getSelection());
83
				selection.and(visitor.getBitset());
84
				((Selectable) toSelect[i]).setSelection(selection);
85
			} catch (DriverException e) {
86
				NotificationManager.addError("Error leyendo las capas", e);
87
			} catch (VisitException e) {
88
				NotificationManager.addError("Error leyendo las capas", e);
89
			}
90
        }
188 91
    }
189 92
}

Also available in: Unified diff