Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 91 additions & 5 deletions src/main/java/nosql/workshop/batch/mongodb/CsvToMongoDb.java
Original file line number Diff line number Diff line change
@@ -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);
}


}
}


}
11 changes: 6 additions & 5 deletions src/main/java/nosql/workshop/resources/InstallationResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ public InstallationResource(InstallationService installationService) {
@Get("/")
@Get("")
public List<Installation> list(Context context) {
return null;
return installationService.list(context);
}

@Get("/:numero")
public Installation get(String numero) {
return null;
return installationService.get(numero);
}


Expand All @@ -40,20 +40,21 @@ public Installation random() {
}

@Get("/search")

public List<Installation> search(Context context) {
return null;
return installationService.search(context);

}

@Get("/geosearch")
public List<Installation> geosearch(Context context) {
return null;
return installationService.geoSearch(context);

}

@Get("/stats")
public InstallationsStats stats() {
return null;
return installationService.stats();

}
}
144 changes: 134 additions & 10 deletions src/main/java/nosql/workshop/services/InstallationService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;

Expand All @@ -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;

Expand All @@ -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<Installation> list(Context context) {
List<Installation> liste = new ArrayList<Installation>();
Consumer<Installation> 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<Installation> search(Context context){
List<Installation> liste = new ArrayList();
String query = context.get("query");
String[] arr = query.split(" ");
MongoCursor<Installation>[] collection= new MongoCursor[arr.length];
for (int i=0;i<arr.length;i++){
collection[i] =installations.find(String.format("{nom: '%s'}", arr[0])).as(Installation.class);
//TODO rajouter d'autres critères de recherche.
}
for(int j=0;j<collection.length;j++){
for(int h=0;h<collection[j].count();h++){
liste.add(collection[j].next());
}
}
return liste;
}

public List<Installation> geoSearch(Context context) {
String lat = context.get("lat");
String lng = context.get("lng");
String distance = context.get("distance");
installations.ensureIndex(" { \"location\" : \"2dsphere\" } ");
MongoCursor<Installation> collection= installations.find(
"{ \"location\" : "
+ "{ $near : "
+ "{ $geometry : "
+ "{ type : \"Point\" , "
+ " coordinates : ["+lng+" , "+lat+"]"
+ "} ,"
+ " $maxDistance : "+distance+""
+ "}"
+ "}"
+ "})"
).as(Installation.class);


List<Installation> aretourner = new ArrayList<Installation>();

for(int h=0;h<collection.count();h++){
aretourner.add(collection.next());
}
return aretourner;
}

public InstallationsStats stats(){
long total = installations.count();//nb d'installations
List<Installation> liste = new ArrayList<Installation>();
Consumer<Installation> action = (Installation s) -> liste.add(s);
installations.find().as(Installation.class).forEach(action);
List<String> listeActivite= new ArrayList<String>();
int k=liste.get(0).getEquipements().size();
int equipementtotal=0;
for (int i=0;i<liste.size();i++){
if(liste.get(i).getEquipements()!=null){
equipementtotal=equipementtotal+liste.get(i).getEquipements().size();
if(liste.get(i).getEquipements().size()>liste.get(k).getEquipements().size()){
k=i;}
for(int j=0;j<liste.get(i).getEquipements().size();j++){



if(liste.get(i).getEquipements().get(j).getActivites()!=null){

for(int h=0;h<liste.get(i).getEquipements().get(j).getActivites().size();h++){
listeActivite.add(liste.get(i).getEquipements().get(j).getActivites().get(h));
}}
}}
}
List<CountByActivity> listCount = new ArrayList<CountByActivity>();
CountByActivity count;

while(listeActivite.size()>0){
int j=1;
for(int i=1;i<listeActivite.size();i++){

while(i<listeActivite.size()&&listeActivite.get(i).contains((listeActivite.get(0)))){
j++;
listeActivite.remove(i);
}

}
count = new CountByActivity();
count.setActivite(listeActivite.get(0));
count.setTotal(j);
listeActivite.remove(0);
listCount.add(count);
}

listCount.sort(new Comparator<CountByActivity>(){

@Override
public int compare(CountByActivity arg0, CountByActivity arg1) {
if(arg0.getTotal()>arg1.getTotal()){return -1;}
if(arg0.getTotal()<arg1.getTotal()){return 1;}
return 0;
}

});
double average = (double) equipementtotal/total;
InstallationsStats stats = new InstallationsStats();
stats.setAverageEquipmentsPerInstallation(average);
stats.setCountByActivity(listCount);
stats.setInstallationWithMaxEquipments(liste.get(k));
stats.setTotalCount(total);
return stats;
}
}
2 changes: 1 addition & 1 deletion src/main/java/nosql/workshop/services/MongoDB.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class MongoDB {
*/
public Jongo getJongo() throws UnknownHostException {
String givenUri = System.getenv("MONGOLAB_URI");
String uri = givenUri == null ? "mongodb://localhost:27017/nosql-workshop" : givenUri;
String uri = givenUri == null ? "mongodb://localhost:27017/mydb" : givenUri;
MongoClientURI mongoClientURI = new MongoClientURI(uri);
MongoClient mongoClient = new MongoClient(mongoClientURI);
DB db = mongoClient.getDB(mongoClientURI.getDatabase());
Expand Down