Statistics
| Revision:

svn-gvsig-desktop / 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 / test / java / org / gvsig / fmap / dal / store / jdbc2 / AbstractTestFeatureReferenceIteratorToFeatureIterator.java @ 46309

History | View | Annotate | Download (6.09 KB)

1
package org.gvsig.fmap.dal.store.jdbc2;
2

    
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.HashSet;
6
import java.util.List;
7
import java.util.Map;
8
import java.util.Objects;
9
import java.util.Set;
10
import junit.framework.TestCase;
11
import static junit.framework.TestCase.assertEquals;
12
import org.apache.commons.lang3.tuple.Pair;
13
import org.apache.log4j.Level;
14
import org.apache.log4j.LogManager;
15
import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
16
import org.gvsig.fmap.dal.feature.Feature;
17
import org.gvsig.fmap.dal.feature.FeatureSelection;
18
import org.gvsig.fmap.dal.feature.FeatureStore;
19
import org.gvsig.fmap.dal.store.jdbc2.impl.ResulSetControlerBase;
20
import org.gvsig.tools.dispose.DisposeUtils;
21
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
22
import org.slf4j.Logger;
23
import org.slf4j.LoggerFactory;
24

    
25
public abstract class AbstractTestFeatureReferenceIteratorToFeatureIterator extends TestCase {
26

    
27
    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestFeatureReferenceIteratorToFeatureIterator.class);
28

    
29
    protected AbstractTestUtils utils;
30

    
31
    public AbstractTestFeatureReferenceIteratorToFeatureIterator(String testName) {
32
        super(testName);
33
    }
34

    
35
    @Override
36
    protected void setUp() throws Exception {
37
        super.setUp();
38
        new DefaultLibrariesInitializer().fullInitialize();
39
    }
40

    
41
    @Override
42
    protected void tearDown() throws Exception {
43
        super.tearDown();
44
    }
45

    
46
    public AbstractTestUtils utils() {
47
        if (this.utils == null) {
48
            this.utils = this.createUtils();
49
        }
50
        return this.utils;
51
    }
52

    
53
    protected abstract AbstractTestUtils createUtils();
54

    
55
    private List<Pair<org.apache.log4j.Logger,Level>> get_loggers(Object... classes) {
56
        List<Pair<org.apache.log4j.Logger,Level>> loggers = new ArrayList<>();
57
        for (Object theClass : classes) {
58
            org.apache.log4j.Logger logger;
59
            if( theClass instanceof Class ) {
60
                logger = LogManager.getLogger((Class)theClass);
61
            } else {
62
                logger = LogManager.getLogger(Objects.toString(theClass, null));
63
            }
64
            if( logger!=null ) {
65
                loggers.add(Pair.of(logger,logger.getLevel()));
66
            }
67
        }
68
        return loggers;
69
    }
70
    
71
    private void restore_level(List<Pair<org.apache.log4j.Logger,Level>> loggers) {
72
        for (Pair<org.apache.log4j.Logger, Level> logger : loggers) {
73
            logger.getLeft().setLevel(logger.getRight());
74
        }
75
    }
76
    
77
    private void set_level(List<Pair<org.apache.log4j.Logger,Level>> loggers, Level level) {
78
        for (Pair<org.apache.log4j.Logger, Level> logger : loggers) {
79
            logger.getLeft().setLevel(level);
80
        }
81
    }
82
    
83
    protected void testFRI2FI1() throws Exception {
84
        try {
85
            if (!utils().isTheDatabaseAvailable()) {
86
                return;
87
            }
88
            
89
            List<Pair<org.apache.log4j.Logger, Level>> loggers = get_loggers(JDBCUtils.class, ResulSetControlerBase.class, "org.gvsig.fmap.dal.store.h2.H2SpatialHelper");
90
            set_level(loggers, Level.INFO);
91
            
92
            FeatureStore sourceStore = utils().openCSVStore("/org/gvsig/fmap/dal/store/jdbc2/esp_poblaciones-nogeom.csv");
93
            JDBCServerExplorer explorer = utils().openServerExplorer("testFRI2FI");
94

    
95
            utils().info_jdbc(explorer);
96

    
97
            // Importamos el CSV en la bbdd
98
            LOGGER.info("Creating table 'poblaciones' in h2 temporary database.");
99
            utils().drop_tables(explorer, "poblaciones", DatabaseWorkspaceManager.TABLE_RESOURCES_NAME);
100
            utils().create_table_from(explorer, "poblaciones", sourceStore);
101
            utils().insert_into_from(explorer, "poblaciones", sourceStore, FeatureStore.MODE_APPEND);
102

    
103
            LOGGER.info("Loading table 'poblaciones' in in memory and populate selection.");
104
            FeatureStore dbstore = utils().openStore(explorer, "poblaciones");
105
            FeatureSelection selection = dbstore.getFeatureSelection();            
106
            Map<Integer,Feature> features = new HashMap<>();
107
            for (Feature feature : dbstore.getFeatureSet()) {
108
                Feature f = feature;
109
                int pk = f.getInt("COD_POBLACION");
110
                features.put(pk,feature.getCopy());
111
                selection.select(feature);
112
            }
113
//            selection.selectAll();
114
            
115
//            LOGGER.info("Getting features from selection (1)");
116
//            long t1 = System.currentTimeMillis();
117
//            int count1 = 0;
118
//            Set<Integer> found1 = new HashSet<>();
119
//            for (FeatureReference featureReference : selection.referenceIterable()) {
120
//                Feature f = featureReference.getFeature();
121
//                int pk = f.getInt("COD_POBLACION");
122
//                assertNotNull("row "+count1, features.get(pk));
123
//                found1.add(pk);
124
//                count1++;
125
//            }
126
//            assertEquals("features recuperadas (1)", features.size(), found1.size());
127
//            long time1 = System.currentTimeMillis()-t1;
128
//            LOGGER.info("time (1) "+time1+"ms, count "+count1);
129
            LOGGER.info("Getting features from selection (2)");
130
            long t2 = System.currentTimeMillis();
131
            int count2 = 0;
132
            Set<Integer> found2 = new HashSet<>();
133
            for (Feature feature : dbstore.getFeaturesIterable(selection.referenceIterator()) ) {
134
                Feature f = feature;
135
                int pk = f.getInt("COD_POBLACION");
136
                assertNotNull("row "+count2, features.get(pk));
137
                found2.add(pk);
138
                count2++;
139
            }
140
            assertEquals("features recuperadas (2)", features.size(), found2.size());
141
            long time2 = System.currentTimeMillis()-t2;
142
//            LOGGER.info("time (1) "+time1+"ms, count "+count1);
143
            LOGGER.info("time (2) "+time2+"ms, count "+count2);
144
            
145
            restore_level(loggers);
146
            
147
            DisposeUtils.dispose(dbstore);
148

    
149
        } catch (Throwable th) {
150
            LOGGER.warn("", th);
151
            throw th;
152
        }
153
    }
154

    
155
}