Revision 44764

View differences:

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/spi/expressionbuilderformatter/Exists.java
6 6
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
7 7
import org.gvsig.expressionevaluator.Formatter;
8 8
import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
9
import org.gvsig.fmap.dal.SQLBuilder;
10 9

  
11 10
/**
12 11
 *
......
14 13
 */
15 14
public class Exists implements Formatter<Value> {
16 15
    
17
    private final SQLBuilder sqlbuilder;
18 16
    private final Formatter<Value> formatter;
19 17
    
20
    public Exists(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
21
        this.sqlbuilder = sqlbuilder;
18
    public Exists(Formatter<Value> formatter) {
22 19
        this.formatter = formatter;
23 20
    }
24 21
    @Override
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/spi/expressionbuilderformatter/Select.java
7 7
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
8 8
import org.gvsig.expressionevaluator.Formatter;
9 9
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
10
import org.gvsig.fmap.dal.SQLBuilder;
11 10

  
12 11
/**
13 12
 *
......
16 15
@SuppressWarnings("UseSpecificCatch")
17 16
public class Select implements Formatter<Value> {
18 17

  
19
  private final SQLBuilder sqlbuilder;
20 18
  private final Formatter<Value> formatter;
21 19

  
22
  public Select(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
23
    this.sqlbuilder = sqlbuilder;
20
  public Select(Formatter<Value> formatter) {
24 21
    this.formatter = formatter;
25 22
  }
26 23

  
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/spi/expressionbuilderformatter/JDBCFormatter.java
1
package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter;
2

  
3
import org.gvsig.expressionevaluator.ExpressionBuilder;
4
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
5
import org.gvsig.expressionevaluator.Formatter;
6

  
7
/**
8
 *
9
 * @author jjdelcerro
10
 */
11
public class JDBCFormatter implements Formatter<Value> {
12

  
13
    private final Formatter<ExpressionBuilder.Value>[] formatters;
14

  
15
    public JDBCFormatter(Formatter<Value> formatter) {
16

  
17
        this.formatters = new Formatter[]{
18
            new Exists(this),
19
            new Select(this)
20
        };
21
    }
22

  
23
    @Override
24
    public boolean canApply(Value value) {
25
        for (Formatter<Value> formatter : formatters) {
26
            if (formatter.canApply(value)) {
27
                return true;
28
            }
29
        }
30
        return false;
31
    }
32

  
33
    @Override
34
    public String format(Value value) {
35
        for (Formatter<Value> formatter : formatters) {
36
            if (formatter.canApply(value)) {
37
                return formatter.format(value);
38
            }
39
        }
40
        return value.toString(this);
41
    }
42
    
43
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/H2SpatialFormatter.java
3 3
import org.gvsig.expressionevaluator.ExpressionBuilder;
4 4
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
5 5
import org.gvsig.expressionevaluator.Formatter;
6
import org.gvsig.expressionevaluator.spi.formatter.value.BaseFormatter;
6 7
import org.gvsig.fmap.dal.SQLBuilder;
7
import org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter.Getattr;
8
import org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter.JDBCFormatter;
8 9
import org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter.Select;
9
import org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter.Tuple;
10 10

  
11 11
/**
12 12
 *
......
21 21

  
22 22
        this.builder = builder;
23 23
        this.formatters = new Formatter[]{
24
            new BaseFormatter(this),
25
            new JDBCFormatter(this),
24 26
            new IfNull(this.builder, this),
25 27
            new IsNotNull(this.builder, this),
26 28
            new IsNull(this.builder, this),
......
31 33
            new Decode(this.builder, this),
32 34
            new ILike(this.builder, this),
33 35
            new Constant(this.builder, this),
34
            new ST_AsBinary(this.builder, this),
35
            new Exists(this.builder, this),
36
            new Select(this.builder, this),
37
            new Getattr(this.builder, this),
38
            new Tuple(this.builder, this)
36
            new ST_AsBinary(this.builder, this)
39 37
        };
40 38
    }
41 39

  
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/test/java/org/gvsig/fmap/dal/store/h2/TestCreate.java
1 1
package org.gvsig.fmap.dal.store.h2;
2 2

  
3
import java.time.LocalDate;
4
import java.time.LocalTime;
3 5
import java.util.Date;
4 6
import java.util.List;
5 7
import junit.framework.TestCase;
6 8
import static junit.framework.TestCase.assertEquals;
9
import org.gvsig.expressionevaluator.ExpressionBuilder;
10
import org.gvsig.expressionevaluator.ExpressionUtils;
11
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
7 12
import org.gvsig.fmap.dal.DALLocator;
8 13
import org.gvsig.fmap.dal.DataTypes;
9 14
import org.gvsig.fmap.dal.DataManager;
......
13 18
import org.gvsig.fmap.dal.feature.EditableFeatureType;
14 19
import org.gvsig.fmap.dal.feature.Feature;
15 20
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
21
import org.gvsig.fmap.dal.feature.FeatureQuery;
22
import org.gvsig.fmap.dal.feature.FeatureSet;
16 23
import org.gvsig.fmap.dal.feature.FeatureStore;
17 24
import org.gvsig.fmap.dal.feature.FeatureType;
18 25
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
......
267 274

  
268 275
    }
269 276

  
277
    public void testFilterByDate() throws Exception {
278
        FeatureStore sourceStore = TestUtils.openSourceStore1();
279
        JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
280
        
281
        createFrom(explorer, sourceStore);        
282
        copyFrom(explorer, sourceStore, FeatureStore.MODE_APPEND);
283
      
284
        FeatureStore h2Store = openTargetStore1(explorer);
285
        ExpressionBuilder expbuilder = ExpressionUtils.createExpressionBuilder();
270 286

  
287
        String filter = expbuilder.or(
288
          expbuilder.and(
289
            expbuilder.gt(
290
                    expbuilder.column("Time"), 
291
                    expbuilder.time("01:02:03")
292
            ),
293
            expbuilder.lt(
294
                    expbuilder.column("Time"), 
295
                    expbuilder.time(new Date())
296
            )
297
          ),
298
          expbuilder.and(
299
            expbuilder.gt(
300
                    expbuilder.column("Date"), 
301
                    expbuilder.date("2019-02-17")
302
            ),
303
            expbuilder.lt(
304
                    expbuilder.column("Date"), 
305
                    expbuilder.date(new Date())
306
            )
307
          )
308
        ).toString();
309
        FeatureQuery query = sourceStore.createFeatureQuery();
310
        query.addFilter(filter);
311
        List<Feature> features = h2Store.getFeatures(query);
312
        int sz = features.size();
313
    }
314

  
271 315
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/test/java/org/gvsig/fmap/dal/store/h2/operations/sql/TestDate.java
1
package org.gvsig.fmap.dal.store.h2.operations.sql;
2

  
3
import java.text.ParseException;
4
import java.text.SimpleDateFormat;
5
import java.util.Date;
6
import java.util.List;
7
import junit.framework.TestCase;
8
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
9
import org.gvsig.fmap.dal.feature.FeatureQuery;
10
import org.gvsig.fmap.dal.feature.FeatureStore;
11
import org.gvsig.fmap.dal.feature.FeatureType;
12
import org.gvsig.fmap.dal.store.h2.TestUtils;
13
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
14
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
15
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
16
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
17
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
18
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
19
import org.slf4j.Logger;
20
import org.slf4j.LoggerFactory;
21

  
22
public class TestDate extends TestCase {
23

  
24
  private static final Logger LOGGER = LoggerFactory.getLogger(TestDate.class);
25

  
26
  public TestDate(String testName) {
27
    super(testName);
28
  }
29

  
30
  @Override
31
  protected void setUp() throws Exception {
32
    super.setUp();
33
    new DefaultLibrariesInitializer().fullInitialize();
34
  }
35

  
36
  @Override
37
  protected void tearDown() throws Exception {
38
    super.tearDown();
39
  }
40

  
41
  private java.sql.Date date(String x) throws ParseException {
42
    Date d;
43
    if (x == null) {
44
      d = new Date();
45
    } else {
46
      d = new SimpleDateFormat("yyyy-M-d").parse(x);
47
    }
48
    return new java.sql.Date(d.getTime());
49
  }
50

  
51
  private java.sql.Time time(String x) throws ParseException {
52
    Date d = new SimpleDateFormat("H:mm:ss").parse(x);
53
    return new java.sql.Time(d.getTime());
54
  }
55

  
56
  private java.sql.Timestamp timestamp(String x) throws ParseException {
57
    Date d = new SimpleDateFormat("yyyy-M-d H:mm:ss").parse(x);
58
    return new java.sql.Timestamp(d.getTime());
59
  }
60

  
61
  public void testDate1() throws Exception {
62
    JDBCHelper helper = TestUtils.getJDBCHelper();
63
    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
64
    OperationsFactory operations = helper.getOperations();
65

  
66
    List<String> expectedSQLs = TestUtils.getSQLs("date.sql");
67

  
68
    FeatureStore sourceStore = TestUtils.openSourceStore1();
69

  
70
    TableReference table = operations.createTableReference(
71
            "dbtest",
72
            sqlbuilder.default_schema(),
73
            "test",
74
            null
75
    );
76
    GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
77
    SimpleDateFormat df = new SimpleDateFormat();
78
    String filter = expbuilder.or(
79
            expbuilder.and(
80
                    expbuilder.gt(
81
                            expbuilder.column("Time"),
82
                            expbuilder.time("01:02:03")
83
                    ),
84
                    expbuilder.lt(
85
                            expbuilder.column("Time"),
86
                            expbuilder.time("20:52:55")
87
                    )
88
            ),
89
            expbuilder.and(
90
                    expbuilder.gt(
91
                            expbuilder.column("Date"),
92
                            expbuilder.date("2019-02-17")
93
                    ),
94
                    expbuilder.lt(
95
                            expbuilder.column("Date"),
96
                            expbuilder.date("2020-02-23")
97
                    )
98
            )
99
    ).toString();
100
    FeatureType featureType = sourceStore.getDefaultFeatureType();
101
    FeatureQuery query = sourceStore.createFeatureQuery();
102
    query.addFilter(filter);
103
    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
104
            table,
105
            null,
106
            null,
107
            query,
108
            featureType,
109
            featureType,
110
            0,
111
            0,
112
            0
113
    );
114
    String sql = resultSetForSetProvider.getSQL();
115
    System.out.println("###### SQL:" + sql);
116
    System.out.println("###### EXP:" + expectedSQLs.get(0));
117

  
118
    assertEquals("Date SQL", expectedSQLs.get(0), sql);
119
  }
120

  
121
  // TODO: a?adir un test con where, group y order.
122
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/test/resources/org/gvsig/fmap/dal/store/h2/date.sql
1

  
2
-- Date SQL
3

  
4
-- Simple
5
SELECT 
6
    "ID", "Byte", "Bool1", "Long", "Timestamp", "Date", "Time", "Bool2", 
7
    "String", "Bool3", "Double", "Bool4", "Float", "Bool5", "Decimal", 
8
    NVL2("Geometry",ST_AsBinary("Geometry"),NULL) 
9
  FROM "PUBLIC"."test" 
10
  WHERE ((
11
    ("Time" > TIME '01:02:03') AND 
12
    ("Time" < TIME '20:52:55')
13
    ) OR (
14
    ("Date" > DATE '2019-02-17') AND 
15
    ("Date" < DATE '2020-02-23')
16
  ));
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/searchpanel/SearchConditionPanel.java
29 29
  public void setEnabled(boolean enabled);
30 30
  
31 31
  public SearchConditionPanelFactory getFactory();
32
  
33
  public boolean isValid(StringBuilder message);
32 34
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/searchpanel/DefaultSearchPanel.java
21 21
import javax.swing.ImageIcon;
22 22
import javax.swing.JButton;
23 23
import javax.swing.JComponent;
24
import javax.swing.JOptionPane;
24 25
import javax.swing.SwingUtilities;
25 26
import javax.swing.event.ListSelectionEvent;
26 27
import javax.swing.event.ListSelectionListener;
......
71 72
import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryOrderPanel;
72 73
import org.gvsig.fmap.dal.swing.impl.featurequery.DefaultFeatureQueryCalculatedColumnsPanel;
73 74
import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributesSelectionPanel;
75
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
74 76

  
75 77
/**
76 78
 *
......
567 569
        return this.parameters.getQuery();
568 570
    }
569 571

  
572
    public boolean isValid(StringBuilder message) {
573
        int searchMode = this.tabSearchMode.getSelectedIndex();
574
        SearchConditionPanel panel = this.conditionPanels.get(searchMode);
575
        boolean valid = panel.isValid(message);
576
        return valid;
577
    }
578
    
570 579
    @Override
571 580
    public void search() {
572 581
        final MutableObject model = new MutableObject(null);
573
        
582

  
583
        StringBuilder message = new StringBuilder();
584
        if( !this.isValid(message) ) {
585
          ThreadSafeDialogsManager dialogManager = ToolsSwingLocator.getThreadSafeDialogsManager();
586
          dialogManager.messageDialog(
587
                  "_The_specified_search_condition_is_not_valid", 
588
                  "_Search",
589
                  JOptionPane.WARNING_MESSAGE
590
          );
591
          return;
592
        }
574 593
        lblMsg.setText("Searching...");
575 594
        setEnabled(false);
576 595
        Thread th = new Thread(() -> {
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/searchpanel/SearchConditionPanelAdvanced.java
94 94
  }
95 95

  
96 96
  @Override
97
  public boolean isValid(StringBuilder message) {
98
    if( this.advancedExpression.isValid() ) {
99
      return true;
100
    }
101
    message.append("The expression entered is not valid.");
102
    return false;
103
  }
104
  
105
  @Override
97 106
  public boolean set(Expression filter) {
98 107
    this.advancedExpression.set(filter);
99 108
    this.changeListenerHelper.fireEvent();
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/searchpanel/SearchConditionPanelSimplified.java
156 156
  public SearchConditionPanelFactory getFactory() {
157 157
    return FACTORY;
158 158
  }
159

  
160
  @Override
161
  public boolean isValid(StringBuilder message) {
162
    return true;
163
  }
159 164
  
160 165
  private void initComponents() {
161 166
    try {
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/FeatureExtraColumn.java
8 8
 */
9 9
public interface FeatureExtraColumn {
10 10

  
11
public List<EditableFeatureAttributeDescriptor> getColumns();
11
  public boolean isEmpty();
12
  
13
  public List<EditableFeatureAttributeDescriptor> getColumns();
12 14

  
13 15
  public EditableFeatureAttributeDescriptor get(String name);
14 16
  
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/SQLBuilderBase.java
16 16
import org.gvsig.expressionevaluator.ExpressionBuilder;
17 17
import org.gvsig.expressionevaluator.ExpressionBuilder.AbstractValue;
18 18
import org.gvsig.expressionevaluator.ExpressionBuilder.ClassVisitorFilter;
19
import static org.gvsig.expressionevaluator.ExpressionBuilder.EMPTY_FORMATTER;
20 19
import static org.gvsig.expressionevaluator.ExpressionBuilder.PARAMETER_TYPE_CONSTANT;
21 20
import static org.gvsig.expressionevaluator.ExpressionBuilder.PARAMETER_TYPE_VARIABLE;
22 21
import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
......
53 52
import org.gvsig.tools.dataTypes.DataType;
54 53
import org.slf4j.Logger;
55 54
import org.slf4j.LoggerFactory;
55
import static org.gvsig.expressionevaluator.ExpressionBuilder.BASE_FORMATTER;
56 56

  
57 57
@SuppressWarnings("UseSpecificCatch")
58 58
public class SQLBuilderBase implements SQLBuilder {
......
346 346

  
347 347
        @Override
348 348
        public String toString() {
349
            return this.toString(EMPTY_FORMATTER);
349
            return this.toString(BASE_FORMATTER);
350 350
        }
351 351
        
352 352
        @Override
......
2980 2980
    }
2981 2981

  
2982 2982
    protected Formatter formatter() {
2983
        return ExpressionBuilder.EMPTY_FORMATTER;
2983
        return ExpressionBuilder.BASE_FORMATTER;
2984 2984
    }
2985 2985

  
2986 2986
    @Override
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureExtraColumn.java
19 19
 */
20 20
public class DefaultFeatureExtraColumn implements FeatureExtraColumn {
21 21

  
22
    private List<EditableFeatureAttributeDescriptor> extraColumns;
22
    private final List<EditableFeatureAttributeDescriptor> extraColumns;
23
    
23 24
    public DefaultFeatureExtraColumn() {
24 25
        this.extraColumns = new ArrayList();
25 26
    }
27

  
26 28
    @Override
29
    public boolean isEmpty() {
30
      return this.extraColumns.isEmpty();
31
    }
32
    
33
    @Override
27 34
    public EditableFeatureAttributeDescriptor get(String columnName) {
28 35
        for (EditableFeatureAttributeDescriptor extraColumn : this.extraColumns) {
29 36
            if (StringUtils.equals(extraColumn.getName(), columnName)) {
......
37 44
    public EditableFeatureAttributeDescriptor add(String name) {
38 45
        //TODO que no hayan dos columnas iguales
39 46
//        exi.addExtraColumn()
40
        EditableFeatureAttributeDescriptor newAttr = DALLocator.getDataManager().createFeatureAttributeDescriptor();
47
        EditableFeatureAttributeDescriptor newAttr = new DefaultEditableFeatureAttributeDescriptor(null, false);
41 48
        newAttr.setName(name);
42 49
        extraColumns.add(newAttr);
43 50
        return newAttr;

Also available in: Unified diff