Revision 5665

View differences:

trunk/applications/appgvSIG/src/com/iver/cit/gvsig/gui/Table.java
49 49
import java.awt.event.MouseEvent;
50 50
import java.beans.PropertyChangeEvent;
51 51
import java.beans.PropertyChangeListener;
52
import java.io.File;
53 52
import java.io.IOException;
54 53
import java.text.ParseException;
55 54
import java.util.BitSet;
......
81 80
import org.apache.log4j.Logger;
82 81

  
83 82
import com.hardcode.driverManager.DriverLoadException;
84
import com.hardcode.gdbms.engine.data.DataSourceFactory;
85 83
import com.hardcode.gdbms.engine.data.driver.DriverException;
86 84
import com.hardcode.gdbms.engine.values.Value;
87 85
import com.hardcode.gdbms.engine.values.ValueFactory;
......
109 107
import com.iver.cit.gvsig.fmap.edition.IWriter;
110 108
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
111 109
import com.iver.cit.gvsig.fmap.edition.commands.CommandListener;
112
import com.iver.cit.gvsig.fmap.edition.writers.gdbms.GdbmsWriter;
113 110
import com.iver.cit.gvsig.fmap.layers.FLayer;
114 111
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
115 112
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
......
593 590
        updating = true;
594 591
        ((DataSourceDataModel) getTable().getModel()).fireTableDataChanged();
595 592
        updating = false;
593

  
596 594
        updateSelection();
597 595
    }
598 596

  
......
753 751
    public void stopEditing() {
754 752
        try {
755 753
        	this.stopEditingCell();
756
        	
754

  
757 755
            FLyrVect lyr = (FLyrVect) getModel().getAssociatedTable();
758 756

  
759 757
            if ((lyr != null) &&
......
773 771
	                 IWriter writer = w.getWriter();
774 772
	                 if (writer == null)
775 773
	                 {
776
	                	 NotificationManager.addError("No existe driver de escritura para la tabla" 
774
	                	 NotificationManager.addError("No existe driver de escritura para la tabla"
777 775
	                			 + getModel().getName(), new EditionException());
778 776
	                 }
779 777
	                 else
780 778
	                 {
781 779
	     				ITableDefinition tableDef = ies.getTableDefinition();
782 780
	    				writer.initialize(tableDef);
783
	                	 
781

  
784 782
	                	 ies.stopEdition(writer,EditionEvent.ALPHANUMERIC);
785
	                 } 
783
	                 }
786 784
                 }
787 785

  
788 786
                 /*
......
799 797

  
800 798
                gdbmswriter.postProcess();
801 799
                */
802
 
800

  
803 801
            }
804 802

  
805 803
        } catch (Exception e) {
......
905 903
     * @throws IOException
906 904
     */
907 905
    public void addRow(IRow[] rows) throws DriverIOException, IOException {
908
        try {
906
    	IEditableSource ies=getModel().getModelo();
907
    	try {
909 908
            if (rows == null) {
909

  
910 910
            	if (getModel().getAssociatedTable()!=null){
911 911
            		JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),"No se puede a?adir una fila a una tabla asociada a una capa.");
912 912
            		return;
......
920 920
            		values[i]=ValueFactory.createNullValue();
921 921
            	}
922 922
                row = new DefaultRow(values);
923
                getModel().getModelo().addRow(row,"Fila en blanco",EditionEvent.ALPHANUMERIC);
923
                ies.addRow(row,"Fila en blanco",EditionEvent.ALPHANUMERIC);
924 924
            } else {
925
            	getModel().getModelo().startComplexRow();
925
            	ies.startComplexRow();
926 926
                for (int i = 0; i < rows.length; i++) {
927
                    getModel().getModelo().addRow(((IRowEdited) rows[i]).getLinkedRow(),"Pegar filas",EditionEvent.ALPHANUMERIC);
927
                   ies.addRow(((IRowEdited) rows[i]).getLinkedRow(),"Pegar filas",EditionEvent.ALPHANUMERIC);
928 928
                }
929
                getModel().getModelo().endComplexRow();
929
                ies.endComplexRow();
930 930
            }
931 931
        } catch (DriverException e) {
932 932
            // TODO Auto-generated catch block
......
1141 1141
        	   return null;
1142 1142
           }
1143 1143
           col--;
1144

  
1144
           int numRow;
1145
           if (orderIndexes != null && row < orderIndexes.length) {
1146
        	   numRow=(int)orderIndexes[row];
1147
           }else {
1148
        	   numRow=row;
1149
           }
1145 1150
        	try {
1146
				if (orderIndexes != null) {
1147
					Object obj =null;
1148

  
1149
					IRowEdited rowEdited=des.getRow((int)orderIndexes[row]);
1150
					obj= rowEdited.getAttribute(mapping[col]);
1151
        		Object obj =null;
1152
				IRowEdited rowEdited=des.getRow(numRow);
1153
				obj= rowEdited.getAttribute(mapping[col]);
1151 1154
					return obj;
1152
				} else {
1153
					Object obj =null;
1154

  
1155
						IRowEdited rowEdited=des.getRow(row);
1156
						obj= rowEdited.getAttribute(mapping[col]);
1157
						//obj = sds.getFieldValue(row, col);
1158
					return obj;
1159
				}
1160
				} catch (DriverIOException e1) {
1161
					return ValueFactory.createValue("").toString();
1162
				} catch (IOException e1) {
1163
					return ValueFactory.createValue("").toString();
1164
				}
1155
			} catch (DriverIOException e1) {
1156
				return ValueFactory.createValue("").toString();
1157
			} catch (IOException e1) {
1158
				return ValueFactory.createValue("").toString();
1159
			}
1165 1160
	    }
1166 1161

  
1167 1162
        /**
......
1193 1188
                 throw new UnsupportedOperationException("Row Number is a read-only column");
1194 1189
        	 columnIndex--;
1195 1190
        	Value v;
1196
            if (getValueAt(rowIndex,columnIndex+1)==null || getValueAt(rowIndex,columnIndex+1).toString().equals(aValue))
1191
        	 int numRow;
1192
             if (orderIndexes != null) {
1193
          	   numRow=(int)orderIndexes[rowIndex];
1194
             }else {
1195
          	   numRow=rowIndex;
1196
             }
1197
        	if (getValueAt(rowIndex,columnIndex+1)==null || getValueAt(rowIndex,columnIndex+1).toString().equals(aValue))
1197 1198
            	return;
1198 1199
            try {
1199 1200
                v = ValueFactory.createValueByType(aValue.toString(),
1200 1201
                        des.getRecordset().getFieldType(columnIndex));
1201 1202

  
1202
                IRowEdited row = des.getRow(rowIndex); //.getAttribute(columnIndex);
1203
                IRowEdited row = des.getRow(numRow); //.getAttribute(columnIndex);
1203 1204
                Value[] values = row.getAttributes();
1204 1205
                values[columnIndex] = v;
1205 1206

  
......
1212 1213
                    newRow = new DefaultRow(values,row.getID());
1213 1214
                }
1214 1215

  
1215
                des.modifyRow(rowIndex, newRow,"Editar valor", EditionEvent.ALPHANUMERIC);
1216
                des.modifyRow(numRow, newRow,"Editar valor", EditionEvent.ALPHANUMERIC);
1216 1217
            } catch (DriverException e1) {
1217 1218
                throw new RuntimeException(e1);
1218 1219
            } catch (ParseException e) {
......
1533 1534
		frame.getContentPane().add(tf);
1534 1535
		frame.show(true);
1535 1536
	}
1536
	
1537

  
1537 1538
	public void stopEditingCell() {
1538 1539
    	if (table.isEditing()) {
1539 1540
    		// TODO: finalizar la edicion de la columna
1540 1541
    		this.table.getCellEditor().stopCellEditing();
1541 1542
    		this.refresh();
1542 1543
    	}
1543
		
1544

  
1544 1545
	}
1545
	
1546

  
1546 1547
	public void cancelEditingCell() {
1547 1548
    	if (table.isEditing()) {
1548 1549
    		// TODO: finalizar la edicion de la columna
1549 1550
    		this.table.getCellEditor().cancelCellEditing();
1550 1551
    		this.refresh();
1551 1552
    	}
1552
		
1553

  
1553 1554
	}
1554 1555
}
trunk/libraries/libGDBMS/src/main/java/com/hardcode/gdbms/engine/strategies/OrderedDataSource.java
1 1
package com.hardcode.gdbms.engine.strategies;
2 2

  
3 3
import java.io.IOException;
4
import java.text.Collator;
4 5
import java.util.Comparator;
5 6
import java.util.Iterator;
6 7
import java.util.TreeSet;
......
14 15
import com.hardcode.gdbms.engine.instruction.SelectAdapter;
15 16
import com.hardcode.gdbms.engine.values.BooleanValue;
16 17
import com.hardcode.gdbms.engine.values.NullValue;
18
import com.hardcode.gdbms.engine.values.StringValue;
17 19
import com.hardcode.gdbms.engine.values.Value;
18 20

  
19 21

  
......
40 42
    public OrderedDataSource(OperationDataSource ret, String[] fieldNames,
41 43
        int[] types) throws DriverException {
42 44
        this.dataSource = ret;
43
        
45

  
44 46
        fieldIndexes = new int[fieldNames.length];
45 47
        for (int i = 0; i < fieldNames.length; i++) {
46 48
            fieldIndexes[i] = dataSource.getFieldIndexByName(fieldNames[i]);
......
130 132
	        for (int i = 0; i < rowCount; i++) {
131 133
	            columnCache[i][field] = dataSource.getFieldValue(i, fieldIndexes[field]);
132 134
	        }
133
        }        
134
        
135
        }
136

  
135 137
        TreeSet set = new TreeSet(new SortComparator());
136
        
138

  
137 139
        for (int i = 0; i < dataSource.getRowCount(); i++) {
138 140
            set.add(new Integer(i));
139 141
        }
140
        
142

  
141 143
        orderIndexes = new long[(int) dataSource.getRowCount()];
142 144
        int index = 0;
143 145
        Iterator it = set.iterator();
144 146
        while (it.hasNext()) {
145 147
            Integer integer = (Integer) it.next();
146
            
148

  
147 149
            orderIndexes[index] = integer.intValue();
148 150
            index++;
149 151
        }
......
159 161
     * @author Fernando Gonz?lez Cort?s
160 162
     */
161 163
    public class SortComparator implements Comparator {
164
    	private Collator collator = Collator.getInstance();
162 165
        /**
163 166
         * @see java.util.Comparator#compare(java.lang.Object,
164 167
         *      java.lang.Object)
......
171 174
                for (int i = 0; i < orders.length; i++) {
172 175
                    Value v1 = columnCache[i1][i];
173 176
                    Value v2 = columnCache[i2][i];
177

  
174 178
                    if (v1 instanceof NullValue) return -1 * orders[i];
175 179
                    if (v2 instanceof NullValue) return 1 * orders[i];
180

  
181
                    if (v1 instanceof StringValue && v2 instanceof StringValue) {
182
                    	String s1=((StringValue)v1).getValue();
183
                    	String s2=((StringValue)v2).getValue();
184
                    	if (collator.equals(s1.toLowerCase(),(s2.toLowerCase()))) {
185
                    		if(collator.compare(s1,s2)<0) {
186
                        		return -1 * orders[i];
187
                        	}else {
188
                        		return 1 * orders[i];
189
                        	}
190
                    	}
191
                    	if(collator.compare(s1.toLowerCase(),s2.toLowerCase())<0) {
192
                    		return -1 * orders[i];
193
                    	}else {
194
                    		return 1 * orders[i];
195
                    	}
196
                    }
197

  
176 198
                    if (((BooleanValue)v1.less(v2)).getValue()){
177 199
                        return -1 * orders[i];
178 200
                    }else if (((BooleanValue)v2.less(v1)).getValue()){
......
182 204
                /*
183 205
                 * Because none of the orders criteria defined an order. The first
184 206
                 * value will be less than the second
185
                 * 
207
                 *
186 208
                 */
187 209
                return -1;
188 210
            } catch (IncompatibleTypesException e) {

Also available in: Unified diff