Commit 180f54e51c502cde63d5d3d0b01c472219e7d684

Authored by Antoine Duquenoy
1 parent fb2a766e

Spring : ajouts mineurs

* Ajout de l'architecture des capteurs dans le fichier d'expérimentation YAML
* On ne peut maintenant sélectionner que de noeuds de même architecture pour une expérience
* Ajout du nom du répertoire où se trouve le fichier à compiler
* Vérification des fichiers pour avertir si un fichier est déjà nommé de la même manière lors de l'upload d'un nouveau fichier
* Passage de l'application sur le port 80
PFE06/src/main/java/com/PFE/ServerManager/MainController.java
@@ -3,6 +3,7 @@ package com.PFE.ServerManager; @@ -3,6 +3,7 @@ package com.PFE.ServerManager;
3 import org.springframework.beans.factory.annotation.Autowired; 3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.http.HttpEntity; 4 import org.springframework.http.HttpEntity;
5 import org.springframework.http.HttpStatus; 5 import org.springframework.http.HttpStatus;
  6 +import org.springframework.http.ResponseEntity;
6 import org.springframework.stereotype.Controller; 7 import org.springframework.stereotype.Controller;
7 import org.springframework.web.bind.annotation.*; 8 import org.springframework.web.bind.annotation.*;
8 import org.springframework.web.multipart.MultipartFile; 9 import org.springframework.web.multipart.MultipartFile;
@@ -169,8 +170,10 @@ public class MainController { @@ -169,8 +170,10 @@ public class MainController {
169 } 170 }
170 171
171 @RequestMapping(value = "/file", method = RequestMethod.POST) 172 @RequestMapping(value = "/file", method = RequestMethod.POST)
172 - @ResponseStatus(value = HttpStatus.OK)  
173 - public void submit(@RequestParam MultipartFile file) { 173 + public ResponseEntity submit(@RequestParam MultipartFile file) {
  174 + if(findFile(file.getOriginalFilename()) != null) {
  175 + return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
  176 + }
174 177
175 Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 178 Authentication auth = SecurityContextHolder.getContext().getAuthentication();
176 Customer customer = customerRepository.findByEmail(auth.getName()); 179 Customer customer = customerRepository.findByEmail(auth.getName());
@@ -203,6 +206,7 @@ public class MainController { @@ -203,6 +206,7 @@ public class MainController {
203 catch(IOException e) { 206 catch(IOException e) {
204 } 207 }
205 } 208 }
  209 + return new ResponseEntity<String>(HttpStatus.OK);
206 } 210 }
207 211
208 @RequestMapping(value = "/updatenodes", method = RequestMethod.POST) 212 @RequestMapping(value = "/updatenodes", method = RequestMethod.POST)
@@ -262,8 +266,26 @@ public class MainController { @@ -262,8 +266,26 @@ public class MainController {
262 return modelAndView; 266 return modelAndView;
263 } 267 }
264 268
  269 +
  270 + public static String findFile(String filename) {
  271 + File dir = new File("files");
  272 + if(dir.isDirectory()){
  273 + String s[] = dir.list();
  274 + for(int i = 0; i < s.length; i++) {
  275 + File dirTemp = new File("files/" + s[i]);
  276 + if(dirTemp.isDirectory()) {
  277 + if(dirTemp.list()[0].equals(filename)) {
  278 + return s[i];
  279 + }
  280 + }
  281 + }
  282 + }
  283 + return null;
  284 + }
  285 +
  286 +
265 @PostMapping(path="/savemaj") 287 @PostMapping(path="/savemaj")
266 - public String saveMaj(@RequestParam String name, @RequestParam String date, @RequestParam String time, @RequestParam String nodes, @RequestParam String file){ 288 + public String saveMaj(@RequestParam String name, @RequestParam String date, @RequestParam String time, @RequestParam String nodes, @RequestParam String file, @RequestParam String arch){
267 Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 289 Authentication auth = SecurityContextHolder.getContext().getAuthentication();
268 Customer customer = customerRepository.findByEmail(auth.getName()); 290 Customer customer = customerRepository.findByEmail(auth.getName());
269 291
@@ -273,6 +295,8 @@ public class MainController { @@ -273,6 +295,8 @@ public class MainController {
273 update_c.setNodes(nodes); 295 update_c.setNodes(nodes);
274 update_c.setFile(file); 296 update_c.setFile(file);
275 update_c.setTime(time); 297 update_c.setTime(time);
  298 + update_c.setArch(arch);
  299 + update_c.setDir(findFile(update_c.getFile()));
276 300
277 updateRepository.save(update_c); // ajouter la mise a jour dans la table 301 updateRepository.save(update_c); // ajouter la mise a jour dans la table
278 302
@@ -283,36 +307,6 @@ public class MainController { @@ -283,36 +307,6 @@ public class MainController {
283 return "redirect:/update"; 307 return "redirect:/update";
284 } 308 }
285 309
286 - /*  
287 - @PostMapping(path="/runmaj")  
288 - public String runMaj(@RequestParam String name, @RequestParam String date, @RequestParam String nodes, @RequestParam String file){  
289 - Authentication auth = SecurityContextHolder.getContext().getAuthentication();  
290 - Customer customer = customerRepository.findByEmail(auth.getName());  
291 -  
292 - Update update_c = new Update();  
293 - update_c.setUpdate(name);  
294 - update_c.setDate(date);  
295 - update_c.setNodes(nodes);  
296 - update_c.setFile(file);  
297 -  
298 - Map<String, Object> data = new HashMap<String, Object>();  
299 - data.put("name", update_c.getUpdate());  
300 - data.put("date", update_c.getDate());  
301 - data.put("file", update_c.getFile());  
302 - data.put("nodes", update_c.getNodes().split(";"));  
303 - Yaml yaml = new Yaml();  
304 - FileWriter writer = null;  
305 - try {  
306 - writer = new FileWriter("toflash/" + customer.getEmail().split("@")[0] + "_" + update_c.getUpdate() + ".yml");  
307 - } catch (IOException e) {  
308 - e.printStackTrace();  
309 - }  
310 - yaml.dump(data, writer);  
311 -  
312 - return "redirect:/update";  
313 - }  
314 -*/  
315 -  
316 @PostMapping(path="/startsavedmaj") 310 @PostMapping(path="/startsavedmaj")
317 @ResponseStatus(value = HttpStatus.OK) 311 @ResponseStatus(value = HttpStatus.OK)
318 public void startSavedMaj(@RequestParam String majname){ 312 public void startSavedMaj(@RequestParam String majname){
@@ -337,6 +331,8 @@ public class MainController { @@ -337,6 +331,8 @@ public class MainController {
337 data.put("date", update.getDate()); 331 data.put("date", update.getDate());
338 data.put("time", update.getTime()); 332 data.put("time", update.getTime());
339 data.put("file", update.getFile()); 333 data.put("file", update.getFile());
  334 + data.put("dir", update.getDir());
  335 + data.put("arch", update.getArch());
340 data.put("nodes", update.getNodes().split(";")); 336 data.put("nodes", update.getNodes().split(";"));
341 Yaml yaml = new Yaml(); 337 Yaml yaml = new Yaml();
342 FileWriter writer = null; 338 FileWriter writer = null;
PFE06/src/main/java/com/PFE/ServerManager/Update.java
@@ -22,6 +22,12 @@ public class Update { @@ -22,6 +22,12 @@ public class Update {
22 @Column(name = "file") 22 @Column(name = "file")
23 private String file; 23 private String file;
24 24
  25 + @Column(name = "dir")
  26 + private String dir;
  27 +
  28 + @Column(name = "arch")
  29 + private String arch;
  30 +
25 @Column(name = "nodes") 31 @Column(name = "nodes")
26 private String nodes; 32 private String nodes;
27 33
@@ -58,4 +64,14 @@ public class Update { @@ -58,4 +64,14 @@ public class Update {
58 this.file = file; 64 this.file = file;
59 } 65 }
60 public String getFile() { return file; } 66 public String getFile() { return file; }
  67 +
  68 + public void setDir(String dir) {
  69 + this.dir = dir;
  70 + }
  71 + public String getDir() { return dir; }
  72 +
  73 + public void setArch(String arch) {
  74 + this.arch = arch;
  75 + }
  76 + public String getArch() { return arch; }
61 } 77 }
PFE06/src/main/resources/application.properties
@@ -12,9 +12,6 @@ spring.jpa.hibernate.ddl-auto=create-drop @@ -12,9 +12,6 @@ spring.jpa.hibernate.ddl-auto=create-drop
12 spring.datasource.url=jdbc:postgresql://localhost:5432/sql_only 12 spring.datasource.url=jdbc:postgresql://localhost:5432/sql_only
13 spring.datasource.username=postgres 13 spring.datasource.username=postgres
14 spring.datasource.password=glopglop 14 spring.datasource.password=glopglop
15 -#spring.datasource.url=jdbc:postgresql://localhost:5432/sql_only  
16 -#spring.datasource.username=postgres  
17 -#spring.datasource.password=glopglop  
18 15
19 # montre les communications JPA avec la BDD 16 # montre les communications JPA avec la BDD
20 spring.jpa.show-sql = true 17 spring.jpa.show-sql = true
@@ -24,4 +21,5 @@ spring.datasource.initialization-mode=always @@ -24,4 +21,5 @@ spring.datasource.initialization-mode=always
24 21
25 server.tomcat.max-http-post-size=80000000 22 server.tomcat.max-http-post-size=80000000
26 spring.servlet.multipart.max-file-size=80MB 23 spring.servlet.multipart.max-file-size=80MB
27 -spring.servlet.multipart.max-request-size=80MB  
28 \ No newline at end of file 24 \ No newline at end of file
  25 +spring.servlet.multipart.max-request-size=80MB
  26 +server.port=80
29 \ No newline at end of file 27 \ No newline at end of file
PFE06/src/main/resources/static/js/update.js
@@ -100,22 +100,30 @@ $(document).ready(function() { @@ -100,22 +100,30 @@ $(document).ready(function() {
100 } ); 100 } );
101 101
102 var nodeSet = new Set(); 102 var nodeSet = new Set();
  103 + var arch = "";
  104 + var first = true;
103 105
104 tableNodes.on('select', function (e, dt, type, indexes) { 106 tableNodes.on('select', function (e, dt, type, indexes) {
105 var rowData = tableNodes.rows(indexes).data().toArray()[0]; 107 var rowData = tableNodes.rows(indexes).data().toArray()[0];
106 - console.log(rowData);  
107 nodeSet.add(rowData[3] + "@" + rowData[1]); 108 nodeSet.add(rowData[3] + "@" + rowData[1]);
108 - console.log(nodeSet); 109 + var lastArch = arch;
  110 + arch = rowData[2];
  111 + if(first != true && lastArch != arch)
  112 + {
  113 + alert("Veuillez choisir la même architecture");
  114 + tableNodes.rows().deselect();
  115 + nodeSet.clear();
  116 + first = true;
  117 + }
  118 + first = false;
109 } ); 119 } );
110 120
111 tableNodes.on('deselect', function (e, dt, type, indexes) { 121 tableNodes.on('deselect', function (e, dt, type, indexes) {
112 var rowData = tableNodes.rows(indexes).data().toArray()[0]; 122 var rowData = tableNodes.rows(indexes).data().toArray()[0];
113 nodeSet.delete(rowData[3] + "@" + rowData[1]); 123 nodeSet.delete(rowData[3] + "@" + rowData[1]);
114 - console.log(nodeSet);  
115 } ); 124 } );
116 125
117 var sendInfoMaj = function(action) { 126 var sendInfoMaj = function(action) {
118 - console.log(action);  
119 var form = document.createElement('form'); 127 var form = document.createElement('form');
120 form.setAttribute('action', action); 128 form.setAttribute('action', action);
121 form.setAttribute('method', 'post'); 129 form.setAttribute('method', 'post');
@@ -183,6 +191,12 @@ $(document).ready(function() { @@ -183,6 +191,12 @@ $(document).ready(function() {
183 inputvar5.setAttribute('value', majTime); 191 inputvar5.setAttribute('value', majTime);
184 form.appendChild(inputvar5); 192 form.appendChild(inputvar5);
185 193
  194 + var inputvar6 = document.createElement('input');
  195 + inputvar6.setAttribute('type', 'hidden');
  196 + inputvar6.setAttribute('name', 'arch');
  197 + inputvar6.setAttribute('value', arch);
  198 + form.appendChild(inputvar6);
  199 +
186 document.body.appendChild(form); 200 document.body.appendChild(form);
187 form.submit(); 201 form.submit();
188 } 202 }
PFE06/src/main/resources/static/js/upload.js
@@ -73,19 +73,32 @@ $(document).ready(function() { @@ -73,19 +73,32 @@ $(document).ready(function() {
73 request.upload.onloadend = function(e) { 73 request.upload.onloadend = function(e) {
74 fileProgress.style.width = 100 + "%" 74 fileProgress.style.width = 100 + "%"
75 fileProgress.innerHTML = "100%"; 75 fileProgress.innerHTML = "100%";
76 - var modalButton = document.getElementById("modal-button");  
77 -  
78 - modalButton.addEventListener('click', function(e) {  
79 - location.reload();  
80 - })  
81 -  
82 - modalContent.innerHTML = "Upload terminé !";  
83 - modalTitle.innerHTML = "Félicitations";  
84 - $("#warningFilesNumber").modal()  
85 } 76 }
86 77
87 request.onreadystatechange = function() { 78 request.onreadystatechange = function() {
88 if(this.readyState === XMLHttpRequest.DONE && this.status === 200) { 79 if(this.readyState === XMLHttpRequest.DONE && this.status === 200) {
  80 + var modalButton = document.getElementById("modal-button");
  81 +
  82 + modalButton.addEventListener('click', function(e) {
  83 + location.reload();
  84 + })
  85 +
  86 + modalContent.innerHTML = "Upload terminé !";
  87 + modalTitle.innerHTML = "Félicitations";
  88 + $("#warningFilesNumber").modal()
  89 + formData = new FormData();
  90 + }
  91 +
  92 + if(this.readyState === XMLHttpRequest.DONE && this.status === 500) {
  93 + var modalButton = document.getElementById("modal-button");
  94 +
  95 + modalButton.addEventListener('click', function(e) {
  96 + location.reload();
  97 + })
  98 +
  99 + modalContent.innerHTML = "Un fichier du même nom existe déjà, veuillez le renommer";
  100 + modalTitle.innerHTML = "Erreur";
  101 + $("#warningFilesNumber").modal();
89 formData = new FormData(); 102 formData = new FormData();
90 } 103 }
91 } 104 }
PFE06/src/main/resources/templates/update.html
@@ -179,6 +179,7 @@ nodes: @@ -179,6 +179,7 @@ nodes:
179 </div> 179 </div>
180 </tbody> 180 </tbody>
181 </table> 181 </table>
  182 +
182 <div class="form-team"> 183 <div class="form-team">
183 <input type="text" class="form-control" id="majName" placeholder="Nom de la mise à jour" name="update" style="margin-top:20px;"> 184 <input type="text" class="form-control" id="majName" placeholder="Nom de la mise à jour" name="update" style="margin-top:20px;">
184 </div> 185 </div>
@@ -188,7 +189,7 @@ nodes: @@ -188,7 +189,7 @@ nodes:
188 <input type="datetime-local" class="form-control" id="majDate" placeholder="Date de la mise à jour" name="date"> 189 <input type="datetime-local" class="form-control" id="majDate" placeholder="Date de la mise à jour" name="date">
189 </div> 190 </div>
190 <br/> 191 <br/>
191 - <p>Durée de l'expérimentation</p> 192 + <p>Durée de l'expérimentation (hh:mm)</p>
192 <div class="form-team"> 193 <div class="form-team">
193 <input type="time" class="form-control" id="majTime" placeholder="Durée" name="time"> 194 <input type="time" class="form-control" id="majTime" placeholder="Durée" name="time">
194 </div> 195 </div>
PFE06/toflash/pfe_test.yml deleted
@@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
1 -date: 2019-02-07T01:33  
2 -file: pfelogo.png  
3 -nodes: [a@a]  
4 -exp_id: 8  
5 -name: test  
6 -time: 00:15