Revision 47436
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTable.java | ||
---|---|---|
209 | 209 |
// Add a cell renderer for Geometries and Features |
210 | 210 |
setDefaultRenderer(Geometry.class, new GeometryWKTCellRenderer()); |
211 | 211 |
setDefaultEditor(Geometry.class, new GeometryWKTCellEditor()); |
212 |
|
|
212 | 213 |
setDefaultRenderer(Feature.class, new FeatureCellRenderer()); |
214 |
setDefaultRenderer(BigDecimal.class, new FormattedCellRenderer()); |
|
215 |
setDefaultRenderer(Double.class, new FormattedCellRenderer()); |
|
216 |
setDefaultRenderer(Float.class, new FormattedCellRenderer()); |
|
217 |
setDefaultRenderer(Integer.class, new FormattedCellRenderer()); |
|
218 |
setDefaultRenderer(Long.class, new FormattedCellRenderer()); |
|
219 |
setDefaultRenderer(Date.class, new FormattedCellRenderer()); |
|
220 |
setDefaultRenderer(Boolean.class, new BooleanCellRenderer()); |
|
221 |
setDefaultRenderer(String.class, new FeatureAttributeCellRenderer()); |
|
222 |
setDefaultRenderer(Byte.class, new FeatureAttributeCellRenderer()); |
|
213 | 223 |
|
214 | 224 |
if( this.getModel() instanceof ConfigurableFeatureTableModel ) { |
215 | 225 |
ConfigurableFeatureTableModel model = (ConfigurableFeatureTableModel)this.getModel(); |
216 |
setDefaultRenderer(BigDecimal.class, new FormattedCellRenderer(model)); |
|
217 |
setDefaultRenderer(Double.class, new FormattedCellRenderer(model)); |
|
218 |
setDefaultRenderer(Float.class, new FormattedCellRenderer(model)); |
|
219 |
setDefaultRenderer(Integer.class, new FormattedCellRenderer(model)); |
|
220 |
setDefaultRenderer(Long.class, new FormattedCellRenderer(model)); |
|
221 |
setDefaultRenderer(Date.class, new FormattedCellRenderer(model)); |
|
222 |
setDefaultRenderer(Boolean.class, new BooleanCellRenderer()); |
|
223 |
setDefaultRenderer(String.class, new FeatureAttributeCellRenderer(model)); |
|
224 | 226 |
setDefaultEditor(Double.class, new FormattedCellEditor(model)); |
225 | 227 |
setDefaultEditor(Float.class, new FormattedCellEditor(model)); |
226 | 228 |
setDefaultEditor(Integer.class, new FormattedCellEditor(model)); |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/BooleanCellRenderer.java | ||
---|---|---|
5 | 5 |
*/ |
6 | 6 |
package org.gvsig.fmap.mapcontrol.dal.feature.swing.table; |
7 | 7 |
|
8 |
import java.awt.Color; |
|
9 | 8 |
import java.awt.Component; |
10 | 9 |
import javax.swing.JCheckBox; |
11 | 10 |
import javax.swing.JLabel; |
... | ... | |
13 | 12 |
import javax.swing.UIManager; |
14 | 13 |
import javax.swing.border.Border; |
15 | 14 |
import javax.swing.border.EmptyBorder; |
16 |
import javax.swing.plaf.UIResource; |
|
17 |
import javax.swing.table.TableCellRenderer; |
|
18 |
import org.gvsig.fmap.dal.feature.Feature; |
|
19 |
import static org.gvsig.fmap.dal.feature.Feature.CHECK_BASIC; |
|
20 |
import static org.gvsig.fmap.dal.feature.Feature.CHECK_REQUIREDS; |
|
21 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
|
22 | 15 |
|
23 | 16 |
/** |
24 | 17 |
* |
25 | 18 |
* @author fdiaz |
26 | 19 |
*/ |
27 |
public class BooleanCellRenderer extends JCheckBox implements TableCellRenderer, UIResource {
|
|
20 |
public class BooleanCellRenderer extends FeatureAttributeCellRenderer { // implements TableCellRenderer, UIResource {
|
|
28 | 21 |
|
29 | 22 |
private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); |
30 |
protected final Color backgroundColorWarning;
|
|
23 |
private final JCheckBox chkBox;
|
|
31 | 24 |
|
32 | 25 |
@SuppressWarnings("OverridableMethodCallInConstructor") |
33 | 26 |
public BooleanCellRenderer() { |
34 |
super(); |
|
35 |
setHorizontalAlignment(JLabel.CENTER); |
|
36 |
setBorderPainted(true); |
|
37 |
this.backgroundColorWarning = ToolsSwingLocator.getToolsSwingManager().getWarningBackgroundColor(); |
|
27 |
this.chkBox = new JCheckBox(); |
|
28 |
this.chkBox.setHorizontalAlignment(JLabel.CENTER); |
|
29 |
this.chkBox.setBorderPainted(true); |
|
38 | 30 |
} |
39 | 31 |
|
40 | 32 |
@Override |
41 | 33 |
public Component getTableCellRendererComponent(JTable table, Object value, |
42 | 34 |
boolean isSelected, boolean hasFocus, int row, int column) { |
43 | 35 |
try { |
36 |
this.chkBox.setBackground(this.getBackgroundColor(table, isSelected, row, column)); |
|
44 | 37 |
if (isSelected) { |
45 |
setForeground(table.getSelectionForeground()); |
|
46 |
super.setBackground(table.getSelectionBackground()); |
|
38 |
this.chkBox.setForeground(table.getSelectionForeground()); |
|
47 | 39 |
} else { |
48 |
ConfigurableFeatureTableModel tableModel = (ConfigurableFeatureTableModel) table.getModel(); |
|
49 |
|
|
50 |
Feature feature = tableModel.getFeatureAt(row); |
|
51 |
setForeground(table.getForeground()); |
|
52 |
setBackground(table.getBackground()); |
|
53 |
if (tableModel.getFeatureStore().isFeatureModified(feature)) { |
|
54 |
try { |
|
55 |
feature.validate(Feature.CHECK_RULES_AT_FINISH | CHECK_REQUIREDS | CHECK_BASIC); |
|
56 |
} catch (Exception ex) { |
|
57 |
this.setBackground(this.backgroundColorWarning); |
|
58 |
} |
|
59 |
} |
|
40 |
this.chkBox.setForeground(table.getForeground()); |
|
60 | 41 |
} |
61 |
setSelected((value != null && ((Boolean) value))); |
|
42 |
this.chkBox.setSelected((value != null && ((Boolean) value)));
|
|
62 | 43 |
|
63 | 44 |
if (hasFocus) { |
64 |
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); |
|
45 |
this.chkBox.setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
|
|
65 | 46 |
} else { |
66 |
setBorder(noFocusBorder); |
|
47 |
this.chkBox.setBorder(noFocusBorder);
|
|
67 | 48 |
} |
68 | 49 |
} catch (Exception e) { |
69 | 50 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureAttributeCellRenderer.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import java.awt.Color; |
4 | 4 |
import java.awt.Component; |
5 |
import javax.swing.JLabel; |
|
5 | 6 |
import javax.swing.JTable; |
6 |
import javax.swing.UIManager; |
|
7 | 7 |
import javax.swing.table.DefaultTableCellRenderer; |
8 | 8 |
import org.gvsig.fmap.dal.feature.Feature; |
9 | 9 |
import static org.gvsig.fmap.dal.feature.Feature.CHECK_BASIC; |
10 | 10 |
import static org.gvsig.fmap.dal.feature.Feature.CHECK_REQUIREDS; |
11 | 11 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
12 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
|
13 | 12 |
|
14 | 13 |
/** |
15 | 14 |
* |
... | ... | |
18 | 17 |
@SuppressWarnings("UseSpecificCatch") |
19 | 18 |
public class FeatureAttributeCellRenderer extends DefaultTableCellRenderer { |
20 | 19 |
|
21 |
protected ConfigurableFeatureTableModel tableModel; |
|
22 |
protected final Color backgroundColorOk; |
|
23 |
protected final Color backgroundColorWarning; |
|
24 |
|
|
25 |
public FeatureAttributeCellRenderer(ConfigurableFeatureTableModel tableModel) { |
|
26 |
this.tableModel = tableModel; |
|
27 |
this.backgroundColorOk = UIManager.getColor(ToolsSwingManager.COLOR_TABLE_BACKGROUND); |
|
28 |
this.backgroundColorWarning = ToolsSwingLocator.getToolsSwingManager().getWarningBackgroundColor(); |
|
20 |
public FeatureAttributeCellRenderer() { |
|
29 | 21 |
} |
30 | 22 |
|
31 | 23 |
@Override |
32 | 24 |
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
33 |
super.getTableCellRendererComponent(table,value, isSelected, hasFocus,row, column); |
|
25 |
JLabel c = (JLabel) super.getTableCellRendererComponent(table,value, isSelected, hasFocus,row, column); |
|
26 |
c.setBackground(getBackgroundColor(table, isSelected, row, column)); |
|
27 |
return c; |
|
28 |
} |
|
29 |
|
|
30 |
protected Color getBackgroundColor(JTable table, boolean isSelected, int row, int column){ |
|
34 | 31 |
try { |
35 |
if( !isSelected ) { |
|
36 |
Feature feature = this.tableModel.getFeatureAt(row); |
|
37 |
this.setBackground(this.backgroundColorOk); |
|
38 |
if( tableModel.getFeatureStore().isFeatureModified(feature) ) { |
|
39 |
try { |
|
40 |
feature.validate(Feature.CHECK_RULES_AT_FINISH|CHECK_REQUIREDS|CHECK_BASIC); |
|
41 |
} catch(Exception ex) { |
|
42 |
this.setBackground(this.backgroundColorWarning); |
|
32 |
if( isSelected ) { |
|
33 |
return table.getSelectionBackground(); |
|
34 |
} else { |
|
35 |
FeatureTableModel tableModel = getTableModel(table); |
|
36 |
Feature feature = tableModel.getFeatureAt(row); |
|
37 |
if(feature.isBroken()){ |
|
38 |
return ToolsSwingLocator.getToolsSwingManager().getWarningBackgroundColor(); |
|
39 |
} else { |
|
40 |
if( tableModel.getFeatureStore().isFeatureModified(feature) ) { |
|
41 |
try { |
|
42 |
feature.validate(Feature.CHECK_RULES_AT_FINISH|CHECK_REQUIREDS|CHECK_BASIC); |
|
43 |
} catch(Exception ex) { |
|
44 |
return ToolsSwingLocator.getToolsSwingManager().getWarningBackgroundColor(); |
|
45 |
} |
|
43 | 46 |
} |
44 | 47 |
} |
45 | 48 |
} |
46 | 49 |
} catch (Exception ex) { |
47 |
// Do nothing, use values from default renderer
|
|
50 |
return table.getBackground();
|
|
48 | 51 |
} |
49 |
return this;
|
|
52 |
return table.getBackground();
|
|
50 | 53 |
} |
54 |
|
|
55 |
|
|
56 |
public ConfigurableFeatureTableModel getTableModel(JTable table){ |
|
57 |
return (ConfigurableFeatureTableModel) table.getModel(); |
|
58 |
} |
|
51 | 59 |
|
52 | 60 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FormattedCellRenderer.java | ||
---|---|---|
6 | 6 |
import java.text.NumberFormat; |
7 | 7 |
import java.text.SimpleDateFormat; |
8 | 8 |
import java.util.Date; |
9 |
import javax.swing.JLabel; |
|
9 | 10 |
import javax.swing.JTable; |
10 | 11 |
import javax.swing.SwingConstants; |
11 | 12 |
import org.apache.commons.lang3.StringUtils; |
... | ... | |
13 | 14 |
@SuppressWarnings("UseSpecificCatch") |
14 | 15 |
public class FormattedCellRenderer extends FeatureAttributeCellRenderer { |
15 | 16 |
|
16 |
private final DecimalFormat decimalFormat;
|
|
17 |
private final SimpleDateFormat dateFormat;
|
|
17 |
private DecimalFormat decimalFormat; |
|
18 |
private SimpleDateFormat dateFormat; |
|
18 | 19 |
|
19 |
public FormattedCellRenderer(ConfigurableFeatureTableModel tableModel) { |
|
20 |
super(tableModel); |
|
21 |
this.decimalFormat = (DecimalFormat) NumberFormat.getInstance(this.tableModel.getLocaleOfData()); |
|
22 |
this.dateFormat = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.MEDIUM, this.tableModel.getLocaleOfData()); |
|
20 |
public FormattedCellRenderer() { |
|
23 | 21 |
} |
24 | 22 |
|
25 | 23 |
@Override |
26 | 24 |
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
27 |
super.getTableCellRendererComponent(table,value, isSelected, hasFocus,row, column); |
|
25 |
JLabel c = (JLabel) super.getTableCellRendererComponent(table,value, isSelected, hasFocus,row, column);
|
|
28 | 26 |
try { |
27 |
ConfigurableFeatureTableModel tableModel = this.getTableModel(table); |
|
28 |
if(this.decimalFormat == null){ |
|
29 |
this.decimalFormat = (DecimalFormat) NumberFormat.getInstance(tableModel.getLocaleOfData()); |
|
30 |
this.dateFormat = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.MEDIUM, tableModel.getLocaleOfData()); |
|
31 |
} |
|
29 | 32 |
if ( value instanceof Number ) { |
30 |
String pattern = this.tableModel.getFormattingPattern(column);
|
|
33 |
String pattern = this.getTableModel(table).getFormattingPattern(column);
|
|
31 | 34 |
if ( !StringUtils.isBlank(pattern) ) { |
32 | 35 |
this.decimalFormat.applyPattern(pattern); |
33 | 36 |
String formated = this.decimalFormat.format(value); |
34 |
this.setHorizontalAlignment(SwingConstants.RIGHT);
|
|
35 |
this.setText(formated);
|
|
37 |
c.setHorizontalAlignment(SwingConstants.RIGHT);
|
|
38 |
c.setText(formated);
|
|
36 | 39 |
return this; |
37 | 40 |
} |
38 | 41 |
} |
39 | 42 |
if ( value instanceof Date ) { |
40 |
String pattern = this.tableModel.getFormattingPattern(column);
|
|
43 |
String pattern = this.getTableModel(table).getFormattingPattern(column);
|
|
41 | 44 |
if ( !StringUtils.isBlank(pattern) ) { |
42 | 45 |
this.dateFormat.applyPattern(pattern); |
43 | 46 |
String formated = this.dateFormat.format(value); |
44 |
this.setHorizontalAlignment(SwingConstants.RIGHT);
|
|
45 |
this.setText(formated);
|
|
47 |
c.setHorizontalAlignment(SwingConstants.RIGHT);
|
|
48 |
c.setText(formated);
|
|
46 | 49 |
return this; |
47 | 50 |
} |
48 | 51 |
} |
49 | 52 |
} catch (Exception ex) { |
50 | 53 |
// Do nothing, use values from default renderer |
51 | 54 |
} |
52 |
return this;
|
|
55 |
return c;
|
|
53 | 56 |
} |
54 | 57 |
|
55 | 58 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureCellRenderer.java | ||
---|---|---|
49 | 49 |
*/ |
50 | 50 |
package org.gvsig.fmap.mapcontrol.dal.feature.swing.table; |
51 | 51 |
|
52 |
import javax.swing.table.DefaultTableCellRenderer; |
|
53 |
|
|
54 | 52 |
import org.gvsig.fmap.dal.feature.Feature; |
55 | 53 |
|
56 | 54 |
/** |
... | ... | |
58 | 56 |
* |
59 | 57 |
* @author <a href="mailto:cordin@disid.com">C?sar Ordi?ana</a> |
60 | 58 |
*/ |
61 |
public class FeatureCellRenderer extends DefaultTableCellRenderer {
|
|
59 |
public class FeatureCellRenderer extends FeatureAttributeCellRenderer {
|
|
62 | 60 |
|
63 | 61 |
/** |
64 | 62 |
* Generated Serial UID. |
65 | 63 |
*/ |
66 | 64 |
private static final long serialVersionUID = 3547431185199502021L; |
67 | 65 |
|
66 |
public FeatureCellRenderer() { |
|
67 |
} |
|
68 |
|
|
69 |
@Override |
|
68 | 70 |
protected void setValue(Object value) { |
69 | 71 |
// TODO: change the current dumb implementation with something |
70 | 72 |
// more useful, as a link or button to show the Feature details |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/impl/JDBCSetProvider.java | ||
---|---|---|
144 | 144 |
|
145 | 145 |
@Override |
146 | 146 |
public boolean canFilter() { |
147 |
return this.getHelper().supportFilter(this.getFeatureType(), getQuery().getFilter()); |
|
147 |
return this.getHelper().supportFilter(this.getProviderFeatureType(), getQuery().getFilter());
|
|
148 | 148 |
} |
149 | 149 |
|
150 | 150 |
@Override |
151 | 151 |
public boolean canOrder() { |
152 |
return this.getHelper().supportOrder(this.getFeatureType(), getQuery().getOrder()); |
|
152 |
return this.getHelper().supportOrder(this.getProviderFeatureType(), getQuery().getOrder());
|
|
153 | 153 |
} |
154 | 154 |
|
155 | 155 |
public ResulSetControler getResulSetControler() { |
... | ... | |
181 | 181 |
if (size == null) { |
182 | 182 |
JDBCStoreParameters params = this.getJDBCStore().getParameters(); |
183 | 183 |
CountOperation selectCount = this.getOperations().createCount( |
184 |
this.getFeatureType(), |
|
184 |
this.getProviderFeatureType(),
|
|
185 | 185 |
this.getOperations().createTableReference(params), |
186 | 186 |
params.getBaseFilter(), |
187 | 187 |
this.getQuery() |
... | ... | |
202 | 202 |
// filtersql = filter.getSQL(); |
203 | 203 |
// } |
204 | 204 |
TableIsEmptyOperation isEmpty_ = this.getOperations().createTableIsEmpty( |
205 |
this.getFeatureType(), |
|
205 |
this.getProviderFeatureType(),
|
|
206 | 206 |
this.getOperations().createTableReference(params), |
207 | 207 |
params.getBaseFilter(), |
208 | 208 |
this.getQuery() |
... | ... | |
230 | 230 |
JDBCStoreParameters params = this.getJDBCStore().getParameters(); |
231 | 231 |
FeatureType storeType = this.getStore() |
232 | 232 |
.getStoreServices() |
233 |
.getProviderFeatureType(this.getFeatureType().getId()); |
|
233 |
.getProviderFeatureType(this.getProviderFeatureType().getId());
|
|
234 | 234 |
ResultSetForSetProviderOperation createResultSet |
235 | 235 |
= getOperations().createResultSetForSetProvider( |
236 | 236 |
this.getOperations().createTableReference(params), |
... | ... | |
238 | 238 |
params.getBaseOrder(), |
239 | 239 |
this.getQuery(), |
240 | 240 |
storeType, |
241 |
this.getFeatureType(), |
|
241 |
this.getProviderFeatureType(),
|
|
242 | 242 |
elements, |
243 | 243 |
index, |
244 | 244 |
this.getFetchSize() |
... | ... | |
250 | 250 |
return new JDBCFastIterator( |
251 | 251 |
this.getJDBCStore(), |
252 | 252 |
this, |
253 |
this.getFeatureType(), |
|
253 |
this.getProviderFeatureType(),
|
|
254 | 254 |
resultSetEntry |
255 | 255 |
); |
256 | 256 |
} |
... | ... | |
268 | 268 |
JDBCStoreParameters params = this.getJDBCStore().getParameters(); |
269 | 269 |
FeatureType storeType = this.getStore() |
270 | 270 |
.getStoreServices() |
271 |
.getProviderFeatureType(this.getFeatureType().getId()); |
|
271 |
.getProviderFeatureType(this.getProviderFeatureType().getId());
|
|
272 | 272 |
ResultSetForSetProviderOperation createResultSet |
273 | 273 |
= getOperations().createResultSetForSetProvider( |
274 | 274 |
this.getOperations().createTableReference(params), |
... | ... | |
276 | 276 |
params.getBaseOrder(), |
277 | 277 |
this.getQuery(), |
278 | 278 |
storeType, |
279 |
this.getFeatureType(), |
|
279 |
this.getProviderFeatureType(),
|
|
280 | 280 |
elements, |
281 | 281 |
index, |
282 | 282 |
this.getDefaultFetchSize() |
... | ... | |
287 | 287 |
return new JDBCIterator( |
288 | 288 |
this.getJDBCStore(), |
289 | 289 |
this, |
290 |
this.getFeatureType(), |
|
290 |
this.getProviderFeatureType(),
|
|
291 | 291 |
resultSetEntry |
292 | 292 |
); |
293 | 293 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/Feature.java | ||
---|---|---|
496 | 496 |
|
497 | 497 |
public Expression createFilter(); |
498 | 498 |
|
499 |
public boolean isBroken(); |
|
500 |
|
|
499 | 501 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureSetProvider.java | ||
---|---|---|
63 | 63 |
|
64 | 64 |
private final AbstractFeatureStoreProvider store; |
65 | 65 |
private final FeatureQuery query; |
66 |
private final FeatureType featureType; |
|
66 |
private final FeatureType providerFeatureType; |
|
67 |
private final FeatureType storeFeatureType; |
|
67 | 68 |
|
68 | 69 |
/** |
69 | 70 |
* Creates a new {@link FeatureSetProvider}. |
... | ... | |
73 | 74 |
* from |
74 | 75 |
* @param query |
75 | 76 |
* used to create the {@link FeatureSetProvider} |
76 |
* @param featureType
|
|
77 |
* @param providerFeatureType
|
|
77 | 78 |
* the type of feature to get |
78 | 79 |
*/ |
79 | 80 |
public AbstractFeatureSetProvider(AbstractFeatureStoreProvider store, |
80 |
FeatureQuery query, FeatureType featureType) {
|
|
81 |
FeatureQuery query, FeatureType providerFeatureType, FeatureType storeFeatureType) {
|
|
81 | 82 |
this.store = store; |
82 | 83 |
this.query = query; |
83 |
this.featureType = featureType; |
|
84 |
this.providerFeatureType = providerFeatureType; |
|
85 |
this.storeFeatureType = storeFeatureType; |
|
84 | 86 |
} |
85 |
|
|
87 |
public AbstractFeatureSetProvider(AbstractFeatureStoreProvider store, |
|
88 |
FeatureQuery query, FeatureType providerFeatureType) { |
|
89 |
this(store, query, providerFeatureType, null); |
|
90 |
} |
|
86 | 91 |
/** |
87 | 92 |
* Return the {@link AbstractFeatureStoreProvider}. |
88 | 93 |
* |
... | ... | |
102 | 107 |
} |
103 | 108 |
|
104 | 109 |
/** |
105 |
* Returns the type of features to load. |
|
110 |
* Returns the type of features from provider to load.
|
|
106 | 111 |
* |
107 |
* @return the featureType
|
|
112 |
* @return the providerFeatureType
|
|
108 | 113 |
*/ |
109 |
protected FeatureType getFeatureType() { |
|
110 |
return featureType;
|
|
114 |
protected FeatureType getProviderFeatureType() {
|
|
115 |
return providerFeatureType;
|
|
111 | 116 |
} |
112 | 117 |
|
118 |
/** |
|
119 |
* Returns the type of features from store to load. |
|
120 |
* |
|
121 |
* @return the storeFeatureType |
|
122 |
*/ |
|
123 |
protected FeatureType getStoreFeatureType() { |
|
124 |
return storeFeatureType; |
|
125 |
} |
|
126 |
|
|
113 | 127 |
@Override |
114 | 128 |
public final DisposableIterator fastIterator() throws DataException { |
115 | 129 |
return fastIterator(0); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureProvider.java | ||
---|---|---|
90 | 90 |
public Object getExtraValue(String name); |
91 | 91 |
|
92 | 92 |
public boolean hasExtraValue(String name); |
93 |
|
|
94 |
public boolean isBroken(); |
|
93 | 95 |
|
94 | 96 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProvider.java | ||
---|---|---|
52 | 52 |
import org.gvsig.fmap.dal.exception.ReadException; |
53 | 53 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
54 | 54 |
import org.gvsig.fmap.dal.feature.FeatureLocks; |
55 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
|
55 | 56 |
import org.gvsig.fmap.dal.feature.FeatureReference; |
56 | 57 |
import org.gvsig.fmap.dal.feature.FeatureSelection; |
57 | 58 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
... | ... | |
648 | 649 |
return super.toString(); |
649 | 650 |
} |
650 | 651 |
} |
652 |
|
|
653 |
@Override |
|
654 |
public FeatureSetProvider createSet(FeatureQuery query, FeatureType providerFeatureType, FeatureType storeFeatureType) throws DataException { |
|
655 |
return this.createSet(query, storeFeatureType); |
|
656 |
} |
|
657 |
|
|
658 |
|
|
651 | 659 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultFeatureProvider.java | ||
---|---|---|
22 | 22 |
*/ |
23 | 23 |
package org.gvsig.fmap.dal.feature.spi; |
24 | 24 |
|
25 |
import java.math.BigDecimal; |
|
25 | 26 |
import org.apache.commons.lang3.ArrayUtils; |
26 | 27 |
import org.apache.commons.lang3.StringUtils; |
27 | 28 |
import org.gvsig.fmap.dal.DataTypes; |
... | ... | |
34 | 35 |
import org.gvsig.tools.ToolsLocator; |
35 | 36 |
import org.gvsig.tools.dataTypes.Coercion; |
36 | 37 |
import org.gvsig.tools.dataTypes.CoercionException; |
38 |
import org.gvsig.tools.math.BigDecimalUtils; |
|
37 | 39 |
|
38 | 40 |
/** |
39 | 41 |
* Default implementation for {@link FeatureProvider} |
... | ... | |
51 | 53 |
|
52 | 54 |
private String[] extraValuesNames; |
53 | 55 |
private Object[] extraValues; |
56 |
|
|
57 |
protected boolean broken; |
|
54 | 58 |
|
55 | 59 |
public DefaultFeatureProvider(FeatureType type) { |
56 |
if (type instanceof EditableFeatureType) { |
|
57 |
throw new IllegalArgumentException("type can't by editable.");
|
|
58 |
} |
|
60 |
// if (type instanceof EditableFeatureType) {
|
|
61 |
// throw new IllegalArgumentException("type can't be editable.");
|
|
62 |
// }
|
|
59 | 63 |
this.featureType = type; |
60 | 64 |
this.values = new Object[featureType.size()]; |
61 | 65 |
this.nulls = new boolean[featureType.size()]; |
... | ... | |
63 | 67 |
this.envelope = null; |
64 | 68 |
this.defaultGeometry = null; |
65 | 69 |
this.oid = null; |
70 |
this.broken = false; |
|
66 | 71 |
} |
67 | 72 |
|
68 | 73 |
public DefaultFeatureProvider(FeatureType type, Object oid) { |
... | ... | |
124 | 129 |
+ value.toString() |
125 | 130 |
+ "' and context '" |
126 | 131 |
+ attribute.getCoercionContext() |
127 |
+ "'."); |
|
132 |
+ "' to assign to '" |
|
133 |
+ attribute.getName() |
|
134 |
+ "'.",e); |
|
128 | 135 |
} |
136 |
} else { |
|
137 |
try { |
|
138 |
switch(attribute.getType()){ |
|
139 |
case DataTypes.DECIMAL: |
|
140 |
value = BigDecimalUtils.force((BigDecimal) value, attribute.getScale(), attribute.getPrecision()); |
|
141 |
break; |
|
142 |
} |
|
143 |
} catch(Throwable th) { |
|
144 |
throw new IllegalArgumentException("Can't assign " |
|
145 |
+ value.toString() |
|
146 |
+ " to '" |
|
147 |
+ attribute.getName() |
|
148 |
+ "'.",th); |
|
149 |
|
|
150 |
} |
|
129 | 151 |
} |
130 | 152 |
} |
131 | 153 |
} |
... | ... | |
211 | 233 |
} else { |
212 | 234 |
data.extraValuesNames = null; |
213 | 235 |
} |
236 |
data.broken = this.broken; |
|
214 | 237 |
return data; |
215 | 238 |
} |
216 | 239 |
|
... | ... | |
369 | 392 |
this.extraValuesNames = extraValueNames; |
370 | 393 |
this.extraValues = new Object[this.extraValuesNames.length]; |
371 | 394 |
} |
395 |
|
|
396 |
@Override |
|
397 |
public boolean isBroken() { |
|
398 |
return this.broken; |
|
399 |
} |
|
372 | 400 |
|
373 | 401 |
|
374 | 402 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProvider.java | ||
---|---|---|
116 | 116 |
public FeatureSetProvider createSet(FeatureQuery query, |
117 | 117 |
FeatureType featureType) throws DataException; |
118 | 118 |
|
119 |
public FeatureSetProvider createSet(FeatureQuery query, |
|
120 |
FeatureType providerFeatureType, FeatureType storeFeatureType) throws DataException; |
|
121 |
|
|
119 | 122 |
/** |
120 | 123 |
* Return {@link FeatureProvider} from a |
121 | 124 |
* {@link FeatureReferenceProviderServices} using |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureProviderAttributeMapper.java | ||
---|---|---|
262 | 262 |
public boolean hasExtraValue(String name) { |
263 | 263 |
return this.original.hasExtraValue(name); |
264 | 264 |
} |
265 |
|
|
266 |
@Override |
|
267 |
public boolean isBroken() { |
|
268 |
return false; |
|
269 |
} |
|
265 | 270 |
|
266 | 271 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureSet.java | ||
---|---|---|
101 | 101 |
} |
102 | 102 |
Iterator iter = |
103 | 103 |
index <= 0 ? data.iterator() : data.listIterator((int) index); |
104 |
if (getFeatureType() == null) { |
|
104 |
if (getProviderFeatureType() == null) {
|
|
105 | 105 |
return new DelegatedDisposableIterator(getStore(), iter); |
106 | 106 |
} else { |
107 | 107 |
return new DelegatedDisposableWrappedIterator(getStore(), iter, |
108 |
getFeatureType()); |
|
108 |
getProviderFeatureType());
|
|
109 | 109 |
} |
110 | 110 |
} |
111 | 111 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureProvider.java | ||
---|---|---|
1 | 1 |
/** |
2 | 2 |
* gvSIG. Desktop Geographic Information System. |
3 | 3 |
* |
4 |
* Copyright (C) 2007-2013 gvSIG Association.
|
|
4 |
* Copyright (C) 2007-2023 gvSIG Association.
|
|
5 | 5 |
* |
6 | 6 |
* This program is free software; you can redistribute it and/or |
7 | 7 |
* modify it under the terms of the GNU General Public License |
... | ... | |
26 | 26 |
import org.gvsig.fmap.dal.exception.DataException; |
27 | 27 |
import org.gvsig.fmap.dal.exception.ReadRuntimeException; |
28 | 28 |
import org.gvsig.fmap.dal.feature.FeatureType; |
29 |
import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider; |
|
30 |
import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
|
29 |
import org.gvsig.fmap.dal.store.dbf.DBFFeatureProvider; |
|
31 | 30 |
import org.gvsig.fmap.geom.Geometry; |
32 | 31 |
import org.gvsig.fmap.geom.primitive.Envelope; |
33 | 32 |
|
34 |
public class SHPFeatureProvider extends DefaultFeatureProvider { |
|
35 |
protected SHPStoreProvider store; |
|
36 |
protected boolean loading; |
|
37 |
protected boolean loaded; |
|
33 |
public class SHPFeatureProvider extends DBFFeatureProvider { |
|
38 | 34 |
|
35 |
public SHPFeatureProvider(SHPStoreProvider store, FeatureType providerFeatureType, FeatureType storeFeatureType) { |
|
36 |
super(store, providerFeatureType, storeFeatureType); |
|
37 |
} |
|
39 | 38 |
|
40 |
public SHPFeatureProvider(SHPStoreProvider store, FeatureType type) { |
|
41 |
super(type); |
|
42 |
this.store = store; |
|
43 |
loading = false; |
|
44 |
loaded = false; |
|
45 |
} |
|
46 |
|
|
47 |
protected void load() { |
|
48 |
if (loading || loaded || this.isNew()) { |
|
49 |
return; |
|
50 |
} |
|
51 |
loading = true; |
|
52 |
try { |
|
53 |
this.store.loadFeatureProviderByIndex(this); |
|
54 |
} catch (DataException e) { |
|
55 |
throw new ReadRuntimeException(getNameForMessages(), this.getOID(), e); |
|
56 |
} finally { |
|
57 |
loading = false; |
|
58 |
loaded = true; |
|
59 |
} |
|
60 |
} |
|
61 |
|
|
62 |
protected String getNameForMessages() { |
|
63 |
// Solo con proposito de mostrar en mensajes de error. |
|
64 |
try { |
|
65 |
return this.store.getName(); |
|
66 |
} catch(Exception ex) { |
|
67 |
return "unknown"; |
|
68 |
} |
|
39 |
@Override |
|
40 |
protected void load() { |
|
41 |
if (loading || loaded || this.isNew()) { |
|
42 |
return; |
|
69 | 43 |
} |
44 |
loading = true; |
|
45 |
try { |
|
46 |
((SHPStoreProvider)this.store).loadFeatureProviderByIndex(this); |
|
47 |
} catch (DataException e) { |
|
48 |
throw new ReadRuntimeException(getNameForMessages(), this.getOID(), e); |
|
49 |
} finally { |
|
50 |
loading = false; |
|
51 |
loaded = true; |
|
52 |
} |
|
53 |
} |
|
70 | 54 |
|
71 |
public void set(int i, Object value) { |
|
72 |
this.load(); |
|
73 |
super.set(i, value); |
|
74 |
} |
|
75 | 55 |
|
76 |
public void set(String name, Object value) { |
|
77 |
this.load(); |
|
78 |
super.set(featureType.getIndex(name), value); |
|
79 |
} |
|
56 |
@Override |
|
57 |
public Geometry getDefaultGeometry() { |
|
58 |
this.load(); |
|
59 |
Geometry geom = this.defaultGeometry; |
|
60 |
if (geom != null && geom.getProjection() == null) { |
|
61 |
geom.setProjection(((SHPStoreProvider) this.store).getProjection()); |
|
62 |
} |
|
63 |
return geom; |
|
64 |
} |
|
80 | 65 |
|
81 |
public Object get(int i) {
|
|
82 |
this.load();
|
|
83 |
return super.get(i);
|
|
84 |
}
|
|
66 |
@Override
|
|
67 |
public Envelope getDefaultEnvelope() {
|
|
68 |
return this.envelope;
|
|
69 |
}
|
|
85 | 70 |
|
86 |
public Object get(String name) { |
|
87 |
this.load(); |
|
88 |
return super.get(name); |
|
89 |
} |
|
90 |
|
|
91 |
public Geometry getDefaultGeometry() { |
|
92 |
this.load(); |
|
93 |
Geometry geom = this.defaultGeometry; |
|
94 |
if( geom!=null && geom.getProjection()==null ) { |
|
95 |
geom.setProjection(this.store.getProjection()); |
|
96 |
} |
|
97 |
return geom; |
|
98 |
} |
|
99 |
|
|
100 |
public Envelope getDefaultEnvelope() { |
|
101 |
return this.envelope; |
|
102 |
} |
|
103 |
|
|
104 |
public void setOID(Object oid) { |
|
105 |
this.loaded = false; |
|
106 |
super.setOID(oid); |
|
107 |
} |
|
108 |
|
|
109 |
public FeatureProvider getCopy() { |
|
110 |
this.load(); |
|
111 |
return super.getCopy(); |
|
112 |
} |
|
113 |
|
|
114 | 71 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProvider.java | ||
---|---|---|
62 | 62 |
import org.gvsig.fmap.dal.resource.spi.MultiResource; |
63 | 63 |
import org.gvsig.fmap.dal.resource.spi.ResourceProvider; |
64 | 64 |
import org.gvsig.fmap.dal.spi.DataStoreProviderServices; |
65 |
import org.gvsig.fmap.dal.store.dbf.DBFFeatureProvider; |
|
65 | 66 |
import org.gvsig.fmap.dal.store.dbf.DBFStoreParameters; |
66 | 67 |
import org.gvsig.fmap.dal.store.dbf.DBFStoreProvider; |
67 | 68 |
import org.gvsig.fmap.dal.store.shp.utils.ISHPFile; |
... | ... | |
313 | 314 |
/** |
314 | 315 |
* |
315 | 316 |
* @param index |
316 |
* @param featureType
|
|
317 |
* @param providerFeatureType
|
|
317 | 318 |
* @return |
318 | 319 |
* @throws ReadException |
319 | 320 |
*/ |
320 |
protected FeatureProvider getFeatureProviderByIndex(long index, FeatureType featureType) throws DataException {
|
|
321 |
protected FeatureProvider getFeatureProviderByIndex(long index, FeatureType providerFeatureType, FeatureType storeFeatureType) throws DataException {
|
|
321 | 322 |
this.open(); |
322 | 323 |
try { |
323 | 324 |
|
324 |
FeatureProvider featureProvider = super.getFeatureProviderByIndex(index, featureType);
|
|
325 |
FeatureProvider featureProvider = super.getFeatureProviderByIndex(index, providerFeatureType, storeFeatureType);
|
|
325 | 326 |
featureProvider.setDefaultEnvelope(this.shpFile.getBoundingBox(index)); |
326 | 327 |
return featureProvider; |
327 | 328 |
} catch (DataException e) { |
... | ... | |
407 | 408 |
return true; |
408 | 409 |
} |
409 | 410 |
|
410 |
protected void loadValue(FeatureProvider featureProvider, long rowIndex, FeatureAttributeDescriptor descriptor) |
|
411 |
@Override |
|
412 |
protected void loadValue(DBFFeatureProvider featureProvider, long rowIndex, FeatureAttributeDescriptor descriptor) |
|
411 | 413 |
throws ReadException { |
412 |
if (descriptor.getType() == DataTypes.GEOMETRY) { |
|
413 |
return; |
|
414 |
} else { |
|
415 |
super.loadValue(featureProvider, rowIndex, descriptor); |
|
414 |
if (descriptor.getType() != DataTypes.GEOMETRY) { |
|
415 |
super.loadValue((DBFFeatureProvider) featureProvider, rowIndex, descriptor); |
|
416 | 416 |
} |
417 | 417 |
} |
418 | 418 |
|
419 | 419 |
public FeatureProvider createFeatureProvider(FeatureType type) throws DataException { |
420 |
FeatureProvider data = new SHPFeatureProvider(this, type); |
|
420 |
FeatureProvider data = new SHPFeatureProvider(this, type, null);
|
|
421 | 421 |
return data; |
422 | 422 |
} |
423 | 423 |
|
424 |
public FeatureProvider createFeatureProvider(FeatureType providerFeatureType, FeatureType storeFeatureType) throws DataException { |
|
425 |
return new SHPFeatureProvider(this, providerFeatureType, storeFeatureType); |
|
426 |
} |
|
427 |
|
|
428 |
|
|
424 | 429 |
protected void openFile() throws IOException, DataException { |
425 | 430 |
super.openFile(); |
426 | 431 |
this.shpFile.open(); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVSetProvider.java | ||
---|---|---|
233 | 233 |
return new CSVIterator( |
234 | 234 |
getStore(), |
235 | 235 |
getQuery(), |
236 |
getFeatureType(), |
|
236 |
getProviderFeatureType(),
|
|
237 | 237 |
index |
238 | 238 |
); |
239 | 239 |
} |
... | ... | |
244 | 244 |
return new FastCSVIterator( |
245 | 245 |
getStore(), |
246 | 246 |
getQuery(), |
247 |
getFeatureType(), |
|
247 |
getProviderFeatureType(),
|
|
248 | 248 |
index |
249 | 249 |
); |
250 | 250 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreParameters.java | ||
---|---|---|
54 | 54 |
public static final String HANDLE_DATES_AS_STRINGS = "handleDatesAsStrings"; |
55 | 55 |
public static final String DATE_FORMAT = "dateFormat"; |
56 | 56 |
public static final String LOCALE = "locale"; |
57 |
public static final String ALLOW_DECIMAL_INCONSISTENCIES_PARAMTER_NAME = "allowInconsistenciesInDecimals"; |
|
57 | 58 |
public static final String ALLOW_DUPLICATED_FIELD_NAMES = "allowDuplicatedFieldNames"; |
58 | 59 |
|
59 | 60 |
// We don't want to persist or show effective encoding in the store parameters dialog |
... | ... | |
258 | 259 |
} |
259 | 260 |
} |
260 | 261 |
} |
262 |
|
|
263 |
public boolean allowInconsistenciesInDecimals() { |
|
264 |
Boolean x = (Boolean) this.getDynValue(ALLOW_DECIMAL_INCONSISTENCIES_PARAMTER_NAME); |
|
265 |
if(x == null){ |
|
266 |
return false; |
|
267 |
} |
|
268 |
return x; |
|
269 |
} |
|
261 | 270 |
|
262 | 271 |
private static class InvalidDateFormatException extends ValidateDataParametersException { |
263 | 272 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureProvider.java | ||
---|---|---|
32 | 32 |
import org.gvsig.fmap.geom.primitive.Envelope; |
33 | 33 |
|
34 | 34 |
public class DBFFeatureProvider extends DefaultFeatureProvider { |
35 |
protected DBFStoreProvider store; |
|
36 |
protected boolean loading; |
|
37 |
protected boolean loaded; |
|
38 | 35 |
|
39 |
public DBFFeatureProvider(DBFStoreProvider store, FeatureType type) { |
|
40 |
super(type); |
|
41 |
this.store = store; |
|
42 |
loading = false; |
|
43 |
loaded = false; |
|
44 |
} |
|
36 |
protected DBFStoreProvider store; |
|
37 |
protected boolean loading; |
|
38 |
protected boolean loaded; |
|
39 |
private final FeatureType storeFeatureType; |
|
45 | 40 |
|
46 |
protected void load() { |
|
47 |
if (loading || loaded || this.isNew()) { |
|
48 |
return; |
|
49 |
} |
|
50 |
loading = true; |
|
51 |
try { |
|
52 |
this.store.loadFeatureProviderByIndex(this); |
|
53 |
} catch (DataException e) { |
|
54 |
throw new ReadRuntimeException(getNameForMessages(), this.getOID(), e); |
|
55 |
} finally { |
|
56 |
loading = false; |
|
57 |
loaded = true; |
|
58 |
} |
|
59 |
} |
|
60 |
|
|
61 |
protected String getNameForMessages() { |
|
62 |
// Solo con proposito de mostrar en mensajes de error. |
|
63 |
try { |
|
64 |
return this.store.getName(); |
|
65 |
} catch(Exception ex) { |
|
66 |
return "unknown"; |
|
67 |
} |
|
41 |
public DBFFeatureProvider(DBFStoreProvider store, FeatureType providerFeatureType, FeatureType storeFeatureType) { |
|
42 |
super(providerFeatureType); |
|
43 |
this.store = store; |
|
44 |
this.storeFeatureType = storeFeatureType; |
|
45 |
loading = false; |
|
46 |
loaded = false; |
|
47 |
} |
|
48 |
|
|
49 |
protected void load() { |
|
50 |
if (loading || loaded || this.isNew()) { |
|
51 |
return; |
|
68 | 52 |
} |
53 |
loading = true; |
|
54 |
try { |
|
55 |
this.store.loadFeatureProviderByIndex(this); |
|
56 |
} catch (DataException e) { |
|
57 |
throw new ReadRuntimeException(getNameForMessages(), this.getOID(), e); |
|
58 |
} finally { |
|
59 |
loading = false; |
|
60 |
loaded = true; |
|
61 |
} |
|
62 |
} |
|
69 | 63 |
|
70 |
public void set(int i, Object value) { |
|
71 |
this.load(); |
|
72 |
super.set(i, value); |
|
73 |
} |
|
64 |
protected String getNameForMessages() { |
|
65 |
// Solo con proposito de mostrar en mensajes de error. |
|
66 |
try { |
|
67 |
return this.store.getName(); |
|
68 |
} catch (Exception ex) { |
|
69 |
return "unknown"; |
|
70 |
} |
|
71 |
} |
|
74 | 72 |
|
75 |
public void set(String name, Object value) { |
|
76 |
this.load(); |
|
77 |
super.set(featureType.getIndex(name), value); |
|
78 |
} |
|
73 |
@Override |
|
74 |
public void set(int i, Object value) { |
|
75 |
this.load(); |
|
76 |
super.set(i, value); |
|
77 |
} |
|
79 | 78 |
|
80 |
public Object get(int i) { |
|
81 |
this.load(); |
|
82 |
return super.get(i); |
|
83 |
} |
|
79 |
@Override |
|
80 |
public void set(String name, Object value) { |
|
81 |
this.load(); |
|
82 |
super.set(featureType.getIndex(name), value); |
|
83 |
} |
|
84 | 84 |
|
85 |
public Object get(String name) { |
|
86 |
this.load(); |
|
87 |
return super.get(name); |
|
88 |
} |
|
85 |
@Override |
|
86 |
public Object get(int i) { |
|
87 |
this.load(); |
|
88 |
return super.get(i); |
|
89 |
} |
|
89 | 90 |
|
90 |
public Geometry getDefaultGeometry() { |
|
91 |
return null; |
|
92 |
} |
|
91 |
@Override |
|
92 |
public Object get(String name) { |
|
93 |
this.load(); |
|
94 |
return super.get(name); |
|
95 |
} |
|
93 | 96 |
|
94 |
public Envelope getDefaultEnvelope() { |
|
95 |
return null; |
|
96 |
} |
|
97 |
@Override |
|
98 |
public Geometry getDefaultGeometry() { |
|
99 |
return null; |
|
100 |
} |
|
97 | 101 |
|
98 |
public void setOID(Object oid) {
|
|
99 |
this.loaded = false;
|
|
100 |
super.setOID(oid);
|
|
101 |
}
|
|
102 |
@Override
|
|
103 |
public Envelope getDefaultEnvelope() {
|
|
104 |
return null;
|
|
105 |
}
|
|
102 | 106 |
|
103 |
public FeatureProvider getCopy() { |
|
104 |
this.load(); |
|
105 |
return super.getCopy(); |
|
106 |
} |
|
107 |
@Override |
|
108 |
public void setOID(Object oid) { |
|
109 |
this.loaded = false; |
|
110 |
super.setOID(oid); |
|
111 |
} |
|
107 | 112 |
|
113 |
@Override |
|
114 |
public FeatureProvider getCopy() { |
|
115 |
this.load(); |
|
116 |
return super.getCopy(); |
|
117 |
} |
|
108 | 118 |
|
119 |
public void setProviderFeatureType(FeatureType featureType) { |
|
120 |
this.featureType = featureType; |
|
121 |
} |
|
109 | 122 |
|
123 |
void setBroken(boolean b) { |
|
124 |
this.broken = b; |
|
125 |
} |
|
110 | 126 |
|
127 |
public FeatureType getStoreFeatureType() { |
|
128 |
return this.storeFeatureType; |
|
129 |
} |
|
130 |
|
|
131 |
public FeatureType getProviderFeatureType() { |
|
132 |
return this.getType(); |
|
133 |
} |
|
134 |
|
|
111 | 135 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFSetProvider.java | ||
---|---|---|
41 | 41 |
public class DBFSetProvider extends AbstractFeatureSetProvider { |
42 | 42 |
|
43 | 43 |
public DBFSetProvider(DBFStoreProvider store, FeatureQuery query, |
44 |
FeatureType featureType)
|
|
44 |
FeatureType providerFeatureType, FeatureType storeFeatureType)
|
|
45 | 45 |
throws DataException { |
46 |
super(store, query, featureType); |
|
46 |
// super(store, query, providerFeatureType, storeFeatureType); |
|
47 |
super(store, query, getEditable(providerFeatureType), storeFeatureType); |
|
47 | 48 |
} |
49 |
|
|
50 |
private static FeatureType getEditable(FeatureType type) { |
|
51 |
try { |
|
52 |
// return type; |
|
53 |
return type.getEditable(); |
|
54 |
} catch (UnsupportedOperationException ex) { |
|
55 |
return type.getCopy().getEditable(); |
|
56 |
} |
|
57 |
} |
|
48 | 58 |
|
49 | 59 |
public boolean canFilter() { |
50 | 60 |
return false; |
... | ... | |
72 | 82 |
|
73 | 83 |
protected AbstractFeatureProviderIterator createIterator(long index) |
74 | 84 |
throws DataException { |
75 |
return new DBFIterator((DBFStoreProvider) getStore(), getFeatureType(), |
|
85 |
return new DBFIterator((DBFStoreProvider) getStore(), getProviderFeatureType(),
|
|
76 | 86 |
index); |
77 | 87 |
} |
78 | 88 |
|
79 | 89 |
protected AbstractFeatureProviderIterator createFastIterator(long index) |
80 | 90 |
throws DataException { |
81 | 91 |
return new FastDBFIterator((DBFStoreProvider) getStore(), |
82 |
getFeatureType(), index); |
|
92 |
getProviderFeatureType(), index);
|
|
83 | 93 |
} |
84 | 94 |
|
85 | 95 |
protected class DBFIterator extends AbstractFeatureProviderIterator { |
... | ... | |
107 | 117 |
|
108 | 118 |
FeatureProvider ret = |
109 | 119 |
getDBFStoreProvider().getFeatureProviderByIndex(index, |
110 |
this.type); |
|
120 |
this.type, getStoreFeatureType());
|
|
111 | 121 |
index++; |
112 | 122 |
return ret; |
113 | 123 |
} catch (DataException e) { |
... | ... | |
148 | 158 |
public FastDBFIterator(DBFStoreProvider store, FeatureType type, |
149 | 159 |
long startOn) throws DataException { |
150 | 160 |
super(store, type, startOn); |
151 |
this.data = getFeatureStoreProvider().createFeatureProvider(type);
|
|
161 |
this.data = getDBFStoreProvider().createFeatureProvider(type, getStoreFeatureType());
|
|
152 | 162 |
} |
153 | 163 |
|
154 | 164 |
protected Object internalNext() { |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreProvider.java | ||
---|---|---|
27 | 27 |
import java.math.BigDecimal; |
28 | 28 |
import java.nio.charset.Charset; |
29 | 29 |
import java.util.ArrayList; |
30 |
import java.util.Date; |
|
30 | 31 |
import java.util.Iterator; |
31 | 32 |
import java.util.List; |
32 |
import java.util.logging.Level; |
|
33 |
|
|
33 |
import java.util.Locale; |
|
34 | 34 |
import org.apache.commons.io.FileUtils; |
35 |
import org.apache.commons.lang3.StringUtils; |
|
36 |
|
|
35 |
import org.apache.commons.lang3.mutable.MutableInt; |
|
37 | 36 |
import org.gvsig.fmap.dal.DALLocator; |
38 | 37 |
import org.gvsig.fmap.dal.DataManager; |
39 | 38 |
import org.gvsig.fmap.dal.DataServerExplorer; |
... | ... | |
49 | 48 |
import org.gvsig.fmap.dal.exception.ReadException; |
50 | 49 |
import org.gvsig.fmap.dal.exception.UnsupportedVersionException; |
51 | 50 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
51 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
|
52 | 52 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
53 | 53 |
import org.gvsig.fmap.dal.feature.Feature; |
54 | 54 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
... | ... | |
82 | 82 |
import org.gvsig.metadata.MetadataLocator; |
83 | 83 |
import org.gvsig.metadata.MetadataManager; |
84 | 84 |
import org.gvsig.metadata.exceptions.MetadataException; |
85 |
import org.gvsig.tools.dataTypes.CoercionContext; |
|
86 |
import org.gvsig.tools.dataTypes.CoercionContextDecimal; |
|
85 | 87 |
import org.gvsig.tools.dataTypes.CoercionException; |
86 | 88 |
import org.gvsig.tools.dispose.DisposableIterator; |
87 | 89 |
import org.gvsig.tools.dynobject.DynObject; |
88 | 90 |
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException; |
89 | 91 |
import org.gvsig.tools.exception.BaseException; |
90 | 92 |
import org.gvsig.tools.logger.FilteredLogger; |
91 |
|
|
93 |
import org.gvsig.tools.math.BigDecimalUtils; |
|
92 | 94 |
import org.slf4j.Logger; |
93 | 95 |
import org.slf4j.LoggerFactory; |
96 |
import sun.security.ec.point.ProjectivePoint; |
|
94 | 97 |
|
95 | 98 |
public class DBFStoreProvider extends AbstractFeatureStoreProvider implements |
96 | 99 |
ResourceConsumer { |
... | ... | |
170 | 173 |
|
171 | 174 |
} |
172 | 175 |
|
176 |
@Override |
|
173 | 177 |
public Object getDynValue(String name) throws DynFieldNotFoundException { |
174 | 178 |
try { |
175 | 179 |
this.open(); |
... | ... | |
201 | 205 |
dbfResource.addConsumer(this); |
202 | 206 |
} |
203 | 207 |
|
208 |
@Override |
|
204 | 209 |
public String getProviderName() { |
205 | 210 |
return NAME; |
206 | 211 |
} |
... | ... | |
209 | 214 |
return (DBFStoreParameters) super.getParameters(); |
210 | 215 |
} |
211 | 216 |
|
217 |
@Override |
|
212 | 218 |
public DataServerExplorer getExplorer() throws ReadException { |
213 | 219 |
DataManager manager = DALLocator.getDataManager(); |
214 | 220 |
FilesystemServerExplorerParameters params; |
... | ... | |
222 | 228 |
} |
223 | 229 |
} |
224 | 230 |
|
231 |
@Override |
|
225 | 232 |
protected FeatureProvider internalGetFeatureProviderByReference( |
226 | 233 |
FeatureReferenceProviderServices reference, FeatureType featureType) |
227 | 234 |
throws DataException { |
228 | 235 |
return this.getFeatureProviderByIndex( |
229 |
((Number) reference.getOID()).longValue(), featureType); |
|
236 |
((Number) reference.getOID()).longValue(), featureType, null);
|
|
230 | 237 |
} |
231 | 238 |
|
239 |
@Override |
|
232 | 240 |
public void performChanges(Iterator deleteds, Iterator inserteds, |
233 | 241 |
Iterator updateds, Iterator originalFeatureTypesUpdated) |
234 | 242 |
throws PerformEditingException { |
... | ... | |
358 | 366 |
} |
359 | 367 |
} |
360 | 368 |
|
361 |
public FeatureProvider createFeatureProvider(FeatureType type) throws DataException { |
|
362 |
return new DBFFeatureProvider(this, type); |
|
369 |
@Override |
|
370 |
public FeatureProvider createFeatureProvider(FeatureType providerFeatureType) throws DataException { |
|
371 |
return new DBFFeatureProvider(this, providerFeatureType, null); |
|
363 | 372 |
} |
364 | 373 |
|
374 |
public FeatureProvider createFeatureProvider(FeatureType providerFeatureType, FeatureType storeFeatureType) throws DataException { |
|
375 |
return new DBFFeatureProvider(this, providerFeatureType, storeFeatureType); |
|
376 |
} |
|
377 |
|
|
365 | 378 |
protected void initFeatureType() throws InitializeException { |
366 | 379 |
this.featureType = this.getTheFeatureType(); |
367 | 380 |
FeatureType defaultType = this.featureType.getNotEditableCopy(); |
... | ... | |
398 | 411 |
} |
399 | 412 |
|
400 | 413 |
|
401 |
protected void loadValue(FeatureProvider featureProvider, long rowIndex, |
|
414 |
protected void loadValue(DBFFeatureProvider featureProvider, long rowIndex,
|
|
402 | 415 |
FeatureAttributeDescriptor descriptor) throws ReadException { |
403 | 416 |
|
404 | 417 |
if (descriptor.getEvaluator() != null) { |
... | ... | |
437 | 450 |
break; |
438 | 451 |
|
439 | 452 |
case DataTypes.DECIMAL: |
440 |
featureProvider.set(index, |
|
441 |
formatter.parseDecimal( |
|
442 |
value, |
|
443 |
descriptor.getMathContext(), |
|
444 |
descriptor.getScale(), |
|
445 |
(BigDecimal) defaultValue |
|
446 |
) |
|
453 |
BigDecimal d = formatter.parseDecimal( |
|
454 |
value, |
|
455 |
descriptor.getMathContext(), |
|
456 |
descriptor.getScale(), |
|
457 |
(BigDecimal) defaultValue |
|
447 | 458 |
); |
459 |
if (!BigDecimalUtils.isValid(d, descriptor.getScale(), descriptor.getPrecision())) { |
|
460 |
DBFStoreParameters params = this.getDBFParameters(); |
|
461 |
if(params.allowInconsistenciesInDecimals() ) { |
|
462 |
MutableInt scale = new MutableInt(descriptor.getScale()); |
|
463 |
MutableInt precision = new MutableInt(descriptor.getPrecision()); |
|
464 |
d = BigDecimalUtils.fixIfCan(d, scale, precision); |
|
465 |
updateStoreScaleAndPrecision(featureProvider, descriptor, scale.intValue(), precision.intValue()); |
|
466 |
} else { |
|
467 |
FeatureType storeFeatureType = featureProvider.getStoreFeatureType(); |
|
468 |
if(storeFeatureType != null){ |
|
469 |
FeatureAttributeDescriptor storeDescriptor = storeFeatureType.getAttributeDescriptor(descriptor.getName()); |
|
470 |
if (storeDescriptor instanceof EditableFeatureAttributeDescriptor && BigDecimalUtils.isValid(d, storeDescriptor.getScale(), storeDescriptor.getPrecision())) { |
|
471 |
((EditableFeatureAttributeDescriptor)descriptor).setScale(storeDescriptor.getScale()); |
|
472 |
((EditableFeatureAttributeDescriptor)descriptor).setPrecision(storeDescriptor.getPrecision()); |
|
473 |
} |
|
474 |
} |
|
475 |
} |
|
476 |
} |
|
477 |
featureProvider.set(index,d); |
|
448 | 478 |
break; |
449 | 479 |
|
450 | 480 |
case DataTypes.DOUBLE: |
... | ... | |
499 | 529 |
protected FeatureProvider getFeatureProviderByIndex(long index) throws DataException { |
500 | 530 |
return this |
501 | 531 |
.getFeatureProviderByIndex(index, this.getStoreServices() |
502 |
.getDefaultFeatureType()); |
|
532 |
.getDefaultFeatureType(), null);
|
|
503 | 533 |
} |
504 | 534 |
|
535 |
@Override |
|
505 | 536 |
public long getFeatureCount() throws ReadException, OpenException, |
506 | 537 |
ResourceNotifyChangesException { |
507 | 538 |
this.open(); |
508 |
return (long) getResource().execute(new ResourceAction() { |
|
509 |
public Object run() throws Exception { |
|
510 |
return (long) dbfFile.getRecordCount(); |
|
511 |
} |
|
512 |
}); |
|
539 |
return (long) getResource().execute(() -> (long) dbfFile.getRecordCount()); |
|
513 | 540 |
} |
514 | 541 |
|
542 |
@Override |
|
515 | 543 |
public FeatureSetProvider createSet(FeatureQuery query, FeatureType featureType) |
516 | 544 |
throws DataException { |
517 |
return new DBFSetProvider(this, query, featureType); |
|
545 |
return new DBFSetProvider(this, query, featureType, null);
|
|
518 | 546 |
} |
519 | 547 |
|
548 |
public FeatureSetProvider createSet(FeatureQuery query, FeatureType providerFeatureType, FeatureType storeFeatureType) |
|
549 |
throws DataException { |
|
550 |
return new DBFSetProvider(this, query, providerFeatureType, storeFeatureType); |
|
551 |
} |
|
552 |
|
|
520 | 553 |
public boolean canCreate() { |
521 | 554 |
return true; |
522 | 555 |
} |
... | ... | |
600 | 633 |
} |
601 | 634 |
|
602 | 635 |
public boolean allowWrite() { |
603 |
if(allowDuplicatedFieldNames){ |
|
636 |
if(allowDuplicatedFieldNames || this.getDBFParameters().allowInconsistenciesInDecimals()){
|
|
604 | 637 |
return false; |
605 | 638 |
} |
606 | 639 |
return this.dbfFile.isWritable(); |
... | ... | |
621 | 654 |
} |
622 | 655 |
|
623 | 656 |
protected FeatureProvider getFeatureProviderByIndex(long index, |
624 |
FeatureType featureType) throws DataException {
|
|
625 |
FeatureProvider featureProvider = this.createFeatureProvider(featureType);
|
|
657 |
FeatureType providerFeatureType, FeatureType storeFeatureType) throws DataException {
|
|
658 |
FeatureProvider featureProvider = this.createFeatureProvider(providerFeatureType, storeFeatureType);
|
|
626 | 659 |
featureProvider.setOID(index); |
627 | 660 |
return featureProvider; |
628 | 661 |
} |
... | ... | |
649 | 682 |
throw rex; |
650 | 683 |
} |
651 | 684 |
|
685 |
// long t1 = System.nanoTime(); |
|
686 |
((DBFFeatureProvider)featureProvider).setBroken(false); |
|
652 | 687 |
for (FeatureAttributeDescriptor desc : featureProvider.getType()) { |
653 |
this.loadValue(featureProvider, index, desc); |
|
688 |
try { |
|
689 |
this.loadValue((DBFFeatureProvider)featureProvider, index, desc); |
|
690 |
} catch (Throwable th) { |
|
691 |
this.logger.warn("Can't load value for attribute '"+desc.getName()+"'", th); |
|
692 |
((DBFFeatureProvider)featureProvider).setBroken(true); |
|
693 |
featureProvider.set(desc.getIndex(), null); |
|
694 |
} |
|
654 | 695 |
} |
696 |
// long t2 = System.nanoTime(); |
|
697 |
// LOG.info("load "+index+" in :"+(t2-t1)); |
|
655 | 698 |
} |
656 | 699 |
|
700 |
@Override |
|
657 | 701 |
public int getOIDType() { |
658 | 702 |
return DataTypes.LONG; |
659 | 703 |
} |
660 | 704 |
|
705 |
@Override |
|
661 | 706 |
public Object createNewOID() { |
662 | 707 |
if (this.counterNewsOIDs < 0) { |
663 | 708 |
try { |
... | ... | |
672 | 717 |
return counterNewsOIDs; |
673 | 718 |
} |
674 | 719 |
|
720 |
@Override |
|
675 | 721 |
public boolean supportsAppendMode() { |
676 | 722 |
return true; |
677 | 723 |
} |
678 | 724 |
|
725 |
@Override |
|
679 | 726 |
public void append(final FeatureProvider featureProvider) |
680 | 727 |
throws DataException { |
681 |
getResource().execute(new ResourceAction() { |
|
682 |
public Object run() throws Exception { |
|
683 |
writer.append(getStoreServices().createFeature(featureProvider)); |
|
684 |
return null; |
|
685 |
} |
|
728 |
getResource().execute(() -> { |
|
729 |
writer.append(getStoreServices().createFeature(featureProvider)); |
|
730 |
return null; |
|
686 | 731 |
}); |
687 | 732 |
} |
688 | 733 |
|
734 |
@Override |
|
689 | 735 |
public void beginAppend() throws DataException { |
690 | 736 |
this.close(); |
691 |
getResource().execute(new ResourceAction() { |
|
692 |
public Object run() throws Exception { |
|
693 |
writer.begin(getDBFParameters(), |
|
694 |
getStoreServices().getDefaultFeatureType(), |
|
695 |
getStoreServices().getFeatureStore().getFeatureCount()); |
|
696 |
return null; |
|
697 |
} |
|
737 |
getResource().execute(() -> { |
|
738 |
writer.begin(getDBFParameters(), |
|
739 |
getStoreServices().getDefaultFeatureType(), |
|
740 |
getStoreServices().getFeatureStore().getFeatureCount()); |
|
741 |
return null; |
|
698 | 742 |
}); |
699 | 743 |
} |
700 | 744 |
|
... | ... | |
774 | 818 |
} |
775 | 819 |
} |
776 | 820 |
|
821 |
private void updateStoreScaleAndPrecision(DBFFeatureProvider featureProvider, FeatureAttributeDescriptor descriptor, int scale, int precision) { |
|
822 |
if(descriptor.getType() == DataTypes.DECIMAL){ |
|
823 |
if(descriptor.getScale() == scale && descriptor.getPrecision() == precision) { |
|
824 |
return; |
|
825 |
} |
|
826 |
FeatureType ft = this.getFeatureStore().getDefaultFeatureTypeQuietly(); |
|
827 |
FeatureAttributeDescriptor d = ft.getAttributeDescriptor(descriptor.getName()); |
|
828 |
if(d.getScale() == scale && d.getPrecision() == precision) { |
|
829 |
((DBFFeatureProvider)featureProvider).setProviderFeatureType(ft); |
|
830 |
return; |
|
831 |
} |
|
832 |
EditableFeatureType eft = ft.getEditable(); |
|
833 |
EditableFeatureAttributeDescriptor ed = (EditableFeatureAttributeDescriptor) eft.getAttributeDescriptor(descriptor.getName()); |
|
834 |
ed.setScale(scale); |
|
835 |
ed.setPrecision(precision); |
|
836 |
ft = eft.getNotEditableCopy(); |
|
837 |
((DBFFeatureProvider)featureProvider).setProviderFeatureType(ft); |
|
838 |
this.setStoreFeatureType(ft); |
|
839 |
} |
|
840 |
} |
|
841 |
|
|
777 | 842 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureWriter.java | ||
---|---|---|
29 | 29 |
import java.io.RandomAccessFile; |
30 | 30 |
import java.nio.channels.FileChannel; |
31 | 31 |
import java.nio.channels.WritableByteChannel; |
32 |
import java.util.Objects; |
|
32 | 33 |
|
33 | 34 |
import org.gvsig.fmap.dal.exception.DataException; |
34 | 35 |
import org.gvsig.fmap.dal.exception.InitializeException; |
... | ... | |
99 | 100 |
} |
100 | 101 |
|
101 | 102 |
public void append(Feature feature) throws DataException { |
102 |
// TODO use FeatureProvider |
|
103 |
dbfWriter.append(feature); |
|
103 |
if(feature.isBroken()){ |
|
104 |
throw new IllegalStateException("The feature '"+Objects.toString(feature.getReference())+"' is broken."); |
|
105 |
} |
|
106 |
// TODO use FeatureProvider |
|
107 |
dbfWriter.append(feature); |
|
104 | 108 |
} |
105 | 109 |
|
106 | 110 |
public void end() throws DataException { |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFParameters.xml | ||
---|---|---|
83 | 83 |
<field order="105" name="allowDuplicatedFieldNames" label="Allow duplicated field names" type="boolean" mandatory="false" defaultValue="false" group="Advanced"> |
84 | 84 |
<description>If set allow duplicated field names. The layer will be read only.</description> |
85 | 85 |
</field> |
86 |
<field order="105" name="allowInconsistenciesInDecimals" label="Allow inconsistencies in decimals" type="boolean" mandatory="false" defaultValue="false" group="Advanced"> |
|
87 |
<description>If set allow inconsistencies in decimals. The layer will be read only.</description> |
|
88 |
</field> |
|
86 | 89 |
</fields> |
87 | 90 |
</class> |
88 | 91 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/TestCreate.java | ||
---|---|---|
318 | 318 |
|
319 | 319 |
|
320 | 320 |
public void testCreateWithDALFile() throws Exception { |
321 |
FeatureStore sourceStore = TestUtils.openSourceStore1(); |
|
322 |
|
|
323 |
createFrom(sourceStore); |
|
324 |
|
|
325 |
checkTypes(sourceStore.getDefaultFeatureType(),true); |
|
326 |
copyFrom(sourceStore, FeatureStore.MODE_APPEND); |
|
327 |
checkData(sourceStore); |
|
328 |
|
|
329 |
createFrom(sourceStore); |
|
330 |
copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT); |
|
331 |
checkData(sourceStore); |
|
321 |
try { |
|
322 |
FeatureStore sourceStore = TestUtils.openSourceStore1(); |
|
332 | 323 |
|
324 |
createFrom(sourceStore); |
|
325 |
|
|
326 |
checkTypes(sourceStore.getDefaultFeatureType(),true); |
|
327 |
copyFrom(sourceStore, FeatureStore.MODE_APPEND); |
|
328 |
checkData(sourceStore); |
|
329 |
|
|
330 |
createFrom(sourceStore); |
|
331 |
copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT); |
Also available in: Unified diff