Search in sources :

Example 1 with SimpleQuery

use of org.polymap.recordstore.SimpleQuery in project polymap4-core by Polymap4.

the class CacheStatistics method layerStoreSize.

public long layerStoreSize(String layer) {
    try {
        SimpleQuery query = new SimpleQuery();
        query.setMaxResults(Integer.MAX_VALUE);
        query.eq(CachedTile.TYPE.layerId.name(), layer);
        long result = 0;
        try (ResultSet resultSet = cache.store.find(query)) {
            for (IRecordState state : resultSet) {
                result += new CachedTile(state, null).filesize.get();
            }
        }
        return result;
    } catch (Exception e) {
        return -1;
    }
}
Also used : SimpleQuery(org.polymap.recordstore.SimpleQuery) ResultSet(org.polymap.recordstore.ResultSet) IRecordState(org.polymap.recordstore.IRecordState)

Example 2 with SimpleQuery

use of org.polymap.recordstore.SimpleQuery in project polymap4-core by Polymap4.

the class CacheStatistics method layerTileCount.

public int layerTileCount(String layer) {
    try {
        SimpleQuery query = new SimpleQuery();
        query.setMaxResults(Integer.MAX_VALUE);
        query.eq(CachedTile.TYPE.layerId.name(), layer);
        try (ResultSet resultSet = cache.store.find(query)) {
            return resultSet.count();
        }
    } catch (Exception e) {
        return -1;
    }
}
Also used : SimpleQuery(org.polymap.recordstore.SimpleQuery) ResultSet(org.polymap.recordstore.ResultSet)

Example 3 with SimpleQuery

use of org.polymap.recordstore.SimpleQuery in project polymap4-core by Polymap4.

the class LuceneRecordStore method find.

@Override
public ResultSet find(RecordQuery query) throws Exception {
    assert !isClosed() : "Store is closed already.";
    // SimpleQuery
    if (query instanceof SimpleQuery) {
        Query luceneQuery = null;
        Collection<QueryExpression> expressions = ((SimpleQuery) query).expressions();
        if (expressions.isEmpty()) {
            luceneQuery = new MatchAllDocsQuery();
        } else {
            luceneQuery = new BooleanQuery();
            for (QueryExpression exp : expressions) {
                ((BooleanQuery) luceneQuery).add(valueCoders.searchQuery(exp), BooleanClause.Occur.MUST);
            }
        }
        return new LuceneRecordQuery(this, luceneQuery).setMaxResults(query.getMaxResults()).setFirstResult(query.getFirstResult()).sort(query.getSortKey(), query.getSortOrder(), query.getSortType()).execute();
    } else // other
    {
        return query.execute();
    }
}
Also used : BooleanQuery(org.apache.lucene.search.BooleanQuery) SimpleQuery(org.polymap.recordstore.SimpleQuery) Query(org.apache.lucene.search.Query) RecordQuery(org.polymap.recordstore.RecordQuery) MatchAllDocsQuery(org.apache.lucene.search.MatchAllDocsQuery) SimpleQuery(org.polymap.recordstore.SimpleQuery) BooleanQuery(org.apache.lucene.search.BooleanQuery) QueryExpression(org.polymap.recordstore.QueryExpression) MatchAllDocsQuery(org.apache.lucene.search.MatchAllDocsQuery)

Example 4 with SimpleQuery

use of org.polymap.recordstore.SimpleQuery in project polymap4-core by Polymap4.

the class RDataStore method updateSchema.

@Override
public void updateSchema(Name name, final FeatureType newSchema) throws IOException {
    assert name != null && newSchema != null;
    final Updater tx = store.prepareUpdate();
    try {
        // check modified property names
        boolean namesModified = false;
        for (PropertyDescriptor desc : newSchema.getDescriptors()) {
            // set by FeatureTypeEditor/AttributeCellModifier
            String origName = (String) desc.getUserData().get(ORIG_NAME_KEY);
            if (origName != null) {
                namesModified = true;
            }
        }
        // find deleted properties
        // XXX check complex schemas
        FeatureType schema = getSchema(name);
        final List<PropertyDescriptor> deleted = new ArrayList();
        for (PropertyDescriptor desc : schema.getDescriptors()) {
            if (newSchema.getDescriptor(desc.getName()) == null) {
                deleted.add(desc);
            }
        }
        // schema name changed or prop deleted? -> update features
        final String newName = newSchema.getName().getLocalPart();
        if (!name.getLocalPart().equals(newSchema.getName().getLocalPart()) || !deleted.isEmpty() || namesModified) {
            FeatureSource fs = getFeatureSource(name);
            fs.getFeatures().accepts(new FeatureVisitor() {

                public void visit(Feature feature) {
                    try {
                        // typeName
                        ((RFeature) feature).state.put(RFeature.TYPE_KEY, newName);
                        // List<Name> origModifiedNames = new ArrayList();
                        for (PropertyDescriptor desc : newSchema.getDescriptors()) {
                            // set by FeatureTypeEditor/AttributeCellModifier
                            String origName = (String) desc.getUserData().get(ORIG_NAME_KEY);
                            if (origName != null) {
                                RAttribute prop = (RAttribute) feature.getProperty(origName);
                                if (prop != null) {
                                    if (prop.getValue() != null) {
                                        ((RFeature) feature).state.put(desc.getName().getLocalPart(), prop.getValue());
                                    }
                                    ((RFeature) feature).state.remove(prop.key.toString());
                                }
                            }
                        }
                        // deleted attributes
                        for (PropertyDescriptor desc : deleted) {
                            // XXX check complex schemas
                            RProperty prop = (RProperty) feature.getProperty(desc.getName());
                            ((RFeature) feature).state.remove(prop.key.toString());
                        }
                        tx.store(((RFeature) feature).state);
                    } catch (Exception e) {
                        // Designing a visitor interface without Exception is not a good idea!
                        throw new RuntimeException("", e);
                    }
                }
            }, null);
        }
        // update schema record
        ResultSet rs = store.find(new SimpleQuery().setMaxResults(1).eq("type", "FeatureType").eq("name", name.getLocalPart()));
        IRecordState record = rs.get(0);
        String schemaContent = schemaCoder.encode(newSchema);
        record.put("content", schemaContent);
        record.put("name", newName);
        tx.store(record);
        log.debug("Current schema: " + schemaCoder.encode(schema));
        log.debug("Updated schema: " + schemaContent);
        tx.apply();
    } catch (Throwable e) {
        log.debug("", e);
        tx.discard();
        throw new RuntimeException(e);
    }
}
Also used : FeatureType(org.opengis.feature.type.FeatureType) FeatureSource(org.geotools.data.FeatureSource) PropertyDescriptor(org.opengis.feature.type.PropertyDescriptor) SimpleQuery(org.polymap.recordstore.SimpleQuery) ArrayList(java.util.ArrayList) FeatureVisitor(org.opengis.feature.FeatureVisitor) Feature(org.opengis.feature.Feature) IOException(java.io.IOException) Updater(org.polymap.recordstore.IRecordStore.Updater) ResultSet(org.polymap.recordstore.ResultSet) IRecordState(org.polymap.recordstore.IRecordState)

Example 5 with SimpleQuery

use of org.polymap.recordstore.SimpleQuery in project polymap4-core by Polymap4.

the class RDataStore method getNames.

@Override
public List<Name> getNames() throws IOException {
    // see #loadSchema()
    try {
        ResultSet rs = RDataStore.this.store.find(new SimpleQuery().setMaxResults(1000).eq("type", "FeatureType"));
        HashSet result = new HashSet(rs.count() * 2);
        for (IRecordState entry : rs) {
            String namespace = entry.get("namespace");
            String localpart = entry.get("name");
            Name name = namespace == null ? new NameImpl(namespace, localpart) : new NameImpl(localpart);
            if (!result.add(name)) {
                throw new IllegalStateException("Name already loaded: " + name);
            }
        }
        return ImmutableList.copyOf(result);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : NameImpl(org.geotools.feature.NameImpl) SimpleQuery(org.polymap.recordstore.SimpleQuery) ResultSet(org.polymap.recordstore.ResultSet) IRecordState(org.polymap.recordstore.IRecordState) IOException(java.io.IOException) HashSet(java.util.HashSet) Name(org.opengis.feature.type.Name)

Aggregations

SimpleQuery (org.polymap.recordstore.SimpleQuery)10 ResultSet (org.polymap.recordstore.ResultSet)8 IOException (java.io.IOException)5 IRecordState (org.polymap.recordstore.IRecordState)5 FeatureType (org.opengis.feature.type.FeatureType)2 Timer (org.polymap.core.runtime.Timer)2 Updater (org.polymap.recordstore.IRecordStore.Updater)2 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 BooleanQuery (org.apache.lucene.search.BooleanQuery)1 MatchAllDocsQuery (org.apache.lucene.search.MatchAllDocsQuery)1 Query (org.apache.lucene.search.Query)1 FeatureSource (org.geotools.data.FeatureSource)1 NameImpl (org.geotools.feature.NameImpl)1 ReferencedEnvelope (org.geotools.geometry.jts.ReferencedEnvelope)1 Feature (org.opengis.feature.Feature)1 FeatureVisitor (org.opengis.feature.FeatureVisitor)1 Name (org.opengis.feature.type.Name)1 PropertyDescriptor (org.opengis.feature.type.PropertyDescriptor)1 IRecordStore (org.polymap.recordstore.IRecordStore)1