package com.bitmonlab.osiris.api.core.map.dao.impl; import java.util.Collection; import javax.inject.Inject; import javax.inject.Named; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.UncategorizedMongoDbException; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.BasicQuery; import org.springframework.data.mongodb.core.query.Query; import com.bitmonlab.osiris.api.core.map.dao.api.FeatureRepositoryCustom; import com.bitmonlab.osiris.api.core.map.exceptions.MongoGeospatialException; import com.bitmonlab.osiris.api.core.map.exceptions.QueryException; import com.bitmonlab.osiris.commons.map.model.geojson.Feature; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.mongodb.DBObject; @Named public class FeatureRepositoryCustomImpl implements FeatureRepositoryCustom{ @Inject @Named("mongoTemplate") private MongoTemplate mongoTemplate; private final static String collectionName = "feature_app_"; @Override public Feature save(String idApplication, Feature feature) throws MongoGeospatialException { // TODO Auto-generated method stub if(!mongoTemplate.collectionExists(collectionName+idApplication)){ DBCollection dbCollection = mongoTemplate.getCollection(collectionName+idApplication); DBObject obj = new BasicDBObject(); obj.put("geometry", "2dsphere"); dbCollection.ensureIndex(obj); } try{ mongoTemplate.save(feature, collectionName+idApplication); } catch(UncategorizedMongoDbException uncategorizedMongoDbException){ throw new MongoGeospatialException(); } return feature; } @Override public void delete(String idApplication, String idFeature) { // TODO Auto-generated method stub Feature feature=mongoTemplate.findById(idFeature, Feature.class, collectionName+idApplication); mongoTemplate.remove(feature, collectionName+idApplication); } @Override public Feature findByApplicationIdentifierAndId(String idApplication, String idFeature) { return mongoTemplate.findById(idFeature, Feature.class, collectionName+idApplication); } @Override public Collection<Feature> searchIDAppAndQuery(String idApplication,String query,Integer pageIndex, Integer pageSize) throws QueryException { // TODO Auto-generated method stub Query mongoQuery = createQuery(query,pageIndex, pageSize); Collection<Feature> features = mongoTemplate.find(mongoQuery, Feature.class, collectionName+idApplication); return features; } @Override public Collection<Feature> searchIDAppAndQuery(String idApplication,String query,Integer pageIndex, Integer pageSize, String orderField, String order) throws QueryException { // TODO Auto-generated method stub Query mongoQuery = createQuery(query,pageIndex, pageSize). with(new Sort(Sort.Direction.valueOf(order), orderField)); Collection<Feature> features = mongoTemplate.find(mongoQuery, Feature.class, collectionName+idApplication); return features; } private Query createQuery(String query,Integer pageIndex, Integer pageSize) throws QueryException{ BasicQuery basicquery; try{ basicquery = new BasicQuery(query); } catch(Exception e) { throw new QueryException(); } Integer skipElements = pageIndex * pageSize; Query mongoQuery = basicquery.skip(skipElements.intValue()).limit(pageSize); return mongoQuery; } }