From cd57063cda9e4bb5f6755db7d159d2bd9f71ccb0 Mon Sep 17 00:00:00 2001 From: KingKemar Date: Wed, 10 Feb 2016 11:59:17 +0100 Subject: [PATCH] nosql --- .../workshop/batch/mongodb/CsvToMongoDb.java | 96 +++++++++++- .../resources/InstallationResource.java | 11 +- .../services/InstallationService.java | 144 ++++++++++++++++-- .../java/nosql/workshop/services/MongoDB.java | 2 +- 4 files changed, 232 insertions(+), 21 deletions(-) diff --git a/src/main/java/nosql/workshop/batch/mongodb/CsvToMongoDb.java b/src/main/java/nosql/workshop/batch/mongodb/CsvToMongoDb.java index 34fbf4b..65bdb76 100644 --- a/src/main/java/nosql/workshop/batch/mongodb/CsvToMongoDb.java +++ b/src/main/java/nosql/workshop/batch/mongodb/CsvToMongoDb.java @@ -1,27 +1,113 @@ package nosql.workshop.batch.mongodb; import java.io.*; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Arrays; +import java.util.Date; import java.util.stream.Collectors; +import com.mongodb.BasicDBObject; +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.DBObject; +import com.mongodb.MongoClient; +import com.mongodb.ServerAddress; + /** * Created by chriswoodrow on 09/02/2016. */ public class CsvToMongoDb { public static void main(String[] args) { + + // Initialisation de la db Mongo + MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); + DB db = mongoClient.getDB( "mydb" ); + + // Creation d'une collection + DBCollection coll = db.getCollection("collectionInstallationsSportives"); try (InputStream inputStream = CsvToMongoDb.class.getResourceAsStream("/batch/csv/installations.csv"); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { reader.lines() .skip(1) .filter(line -> line.length() > 0) - .map(line -> line.split(",")) + .map(line -> line.split("\",\"")) .forEach(columns -> { - System.out.println("Une ligne"); - System.out.println(columns[0].matches("\".*\"")?columns[0].substring(1,columns[0].length()-1):columns[0]); - }); + // Edition de la collection + DBObject doc1 = new BasicDBObject() + .append("_id", columns[1]) + .append("nom", columns[0].substring(1)) + .append("adresse", + new BasicDBObject() + .append("numero",columns[6]) + .append("voie",columns[7]) + .append("lieuDit",columns[5]) + .append("codePostal",columns[4]) + .append("commune",columns[2]) + ) + .append("location", + new BasicDBObject("type","Point") + .append("coordinates",Arrays.asList(Double.valueOf(columns[9]),Double.valueOf(columns[10]))) + ) + .append("multiCommune", "Oui".equals(columns[16])) + .append("nbPlacesParking", columns[17].isEmpty()?null:Integer.valueOf(columns[17])) + .append("nbPlacesParkingHandicapes", columns[18].isEmpty()?null:Integer.valueOf(columns[18])) + .append("dateMiseAJourFiche", + columns.length<29 || columns[28].equals("\"")?null:Date.from(LocalDate.parse(columns[28].substring(0, 10)) + .atStartOfDay(ZoneId.of("UTC")) + .toInstant() + ) + ); + coll.insert(doc1); + + }); } catch (IOException e) { throw new UncheckedIOException(e); } + try (InputStream inputStream2 = CsvToMongoDb.class.getResourceAsStream("/batch/csv/equipements.csv"); + BufferedReader reader2 = new BufferedReader(new InputStreamReader(inputStream2))) { + reader2.lines() + .skip(1) + .filter(line -> line.length() > 0) + .map(line -> line.split(",")) + .forEach(columns -> { + + columns[0]=columns[0].substring(1, columns[0].length()); + + BasicDBObject equip = new BasicDBObject().append("_id", columns[4]) + .append("numero", columns[2]).append("nom", columns[5]) + .append("type", columns[7]) + .append("famille",columns[9]); + + coll.update(new BasicDBObject("_id", columns[2]), + new BasicDBObject("$push", new BasicDBObject("equipements", equip))); + }); + + } catch (IOException e) { + throw new UncheckedIOException(e); + } + try (InputStream inputStream = CsvToMongoDb.class.getResourceAsStream("/batch/csv/activites.csv"); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + reader.lines() + .skip(1) + .filter(line -> line.length() > 0) + .map(line -> line.split("\",\"")) + .forEach(columns -> { + + columns[0]=columns[0].substring(1, columns[0].length()); + + BasicDBObject equipement = new BasicDBObject("equipements", new BasicDBObject("$elemMatch", new BasicDBObject("_id", columns[2].trim()))); + BasicDBObject update = new BasicDBObject("$push", new BasicDBObject("equipements.$.activites", columns[5])); + + coll.update(equipement, update); + }); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + + } -} + + +} \ No newline at end of file diff --git a/src/main/java/nosql/workshop/resources/InstallationResource.java b/src/main/java/nosql/workshop/resources/InstallationResource.java index 856578e..07cdbbe 100644 --- a/src/main/java/nosql/workshop/resources/InstallationResource.java +++ b/src/main/java/nosql/workshop/resources/InstallationResource.java @@ -25,12 +25,12 @@ public InstallationResource(InstallationService installationService) { @Get("/") @Get("") public List list(Context context) { - return null; + return installationService.list(context); } @Get("/:numero") public Installation get(String numero) { - return null; + return installationService.get(numero); } @@ -40,20 +40,21 @@ public Installation random() { } @Get("/search") + public List search(Context context) { - return null; + return installationService.search(context); } @Get("/geosearch") public List geosearch(Context context) { - return null; + return installationService.geoSearch(context); } @Get("/stats") public InstallationsStats stats() { - return null; + return installationService.stats(); } } diff --git a/src/main/java/nosql/workshop/services/InstallationService.java b/src/main/java/nosql/workshop/services/InstallationService.java index 0c3356d..30c91b7 100644 --- a/src/main/java/nosql/workshop/services/InstallationService.java +++ b/src/main/java/nosql/workshop/services/InstallationService.java @@ -2,12 +2,22 @@ import com.google.inject.Inject; import com.google.inject.Singleton; + +import net.codestory.http.Context; import nosql.workshop.model.Equipement; import nosql.workshop.model.Installation; +import nosql.workshop.model.stats.CountByActivity; +import nosql.workshop.model.stats.InstallationsStats; + import org.jongo.MongoCollection; +import org.jongo.MongoCursor; import java.net.UnknownHostException; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.function.Consumer; import static nosql.workshop.model.Installation.*; @@ -19,7 +29,7 @@ public class InstallationService { /** * Nom de la collection MongoDB. */ - public static final String COLLECTION_NAME = "installations"; + public static final String COLLECTION_NAME = "collectionInstallationsSportives"; private final MongoCollection installations; @@ -29,14 +39,128 @@ public InstallationService(MongoDB mongoDB) throws UnknownHostException { } public Installation random() { - // FIXME : bien sûr ce code n'est pas le bon ... peut être quelque chose comme installations.findOne() - Installation installation = new Installation(); - installation.setNom("Mon Installation"); - installation.setEquipements(Arrays.asList(new Equipement())); - installation.setAdresse(new Adresse()); - Location location = new Location(); - location.setCoordinates(new double[]{3.4, 3.2}); - installation.setLocation(location); - return installation; + + return installations.findOne().as(Installation.class); + } + + public List list(Context context) { + List liste = new ArrayList(); + Consumer action = (Installation s) -> liste.add(s); + installations.find().as(Installation.class).forEach(action); + return liste; + + } + + public Installation get(String number){ + Installation installation = installations.findOne(String.format("{_id: '%s'}", number)).as(Installation.class); + return installation; + } + + + public List search(Context context){ + List liste = new ArrayList(); + String query = context.get("query"); + String[] arr = query.split(" "); + MongoCursor[] collection= new MongoCursor[arr.length]; + for (int i=0;i geoSearch(Context context) { + String lat = context.get("lat"); + String lng = context.get("lng"); + String distance = context.get("distance"); + installations.ensureIndex(" { \"location\" : \"2dsphere\" } "); + MongoCursor collection= installations.find( + "{ \"location\" : " + + "{ $near : " + + "{ $geometry : " + + "{ type : \"Point\" , " + + " coordinates : ["+lng+" , "+lat+"]" + + "} ," + + " $maxDistance : "+distance+"" + + "}" + + "}" + + "})" + ).as(Installation.class); + + + List aretourner = new ArrayList(); + + for(int h=0;h liste = new ArrayList(); + Consumer action = (Installation s) -> liste.add(s); + installations.find().as(Installation.class).forEach(action); + List listeActivite= new ArrayList(); + int k=liste.get(0).getEquipements().size(); + int equipementtotal=0; + for (int i=0;iliste.get(k).getEquipements().size()){ + k=i;} + for(int j=0;j listCount = new ArrayList(); + CountByActivity count; + + while(listeActivite.size()>0){ + int j=1; + for(int i=1;i(){ + + @Override + public int compare(CountByActivity arg0, CountByActivity arg1) { + if(arg0.getTotal()>arg1.getTotal()){return -1;} + if(arg0.getTotal()