Skip to content
Snippets Groups Projects
Commit f199ca7a authored by Esteban Collard's avatar Esteban Collard
Browse files

Ajout projet flopbox + avancement projet

parent 30c8c42f
No related branches found
No related tags found
No related merge requests found
Showing
with 305 additions and 20 deletions
File moved
File moved
bnovierpzda
agentFlopBoxCollardFinard/serveurFTPflopbox/localhost/image1.jpg

36.8 KiB

il en faut peur p
...@@ -22,21 +22,21 @@ import exception.FTPServeurException; ...@@ -22,21 +22,21 @@ import exception.FTPServeurException;
public class FichierDistant extends Fichier { public class FichierDistant extends Fichier {
private String nomServeurFtp; private ServeurFtp serveurFtp;
public FichierDistant(String nom, String chemin, String nomServeurFtp) { public FichierDistant(String nom, String chemin, ServeurFtp serveurFtp) {
super(nom, chemin); super(nom, chemin);
this.nomServeurFtp = nomServeurFtp; this.serveurFtp = serveurFtp;
} }
public FileTime getDateDerniereModification() throws FTPServeurException { public FileTime getDateDerniereModification() throws FTPServeurException {
Map<String, String> map = new HashMap<String, String>(); Map<String, String> map = new HashMap<String, String>();
map.put("username", "anonymous"); map.put("username", this.serveurFtp.getIdentifiant());
map.put("password", "1234"); map.put("password", this.serveurFtp.getPass());
map.put("port", "21"); map.put("port", this.serveurFtp.getPort());
String date = UrlFlopBox.getLastModifFile(this.nomServeurFtp, cheminFichier, map); String date = UrlFlopBox.getLastModifFile(this.serveurFtp.getNomServeurFtp(), cheminFichier+nomFichier, map).split("\n")[1];
String myDate = date.substring(0, 4)+"/"+date.substring(4, 6)+"/"+date.substring(6, 8)+" "+ String myDate = date.substring(0, 4)+"/"+date.substring(4, 6)+"/"+date.substring(6, 8)+" "+
date.substring(8, 10)+":"+date.substring(10, 12)+":"+date.substring(12, 14); date.substring(8, 10)+":"+date.substring(10, 12)+":"+date.substring(12, 14);
......
package passerelleServeurLocal; package passerelleServeurLocal;
import java.util.Map; import java.util.Map;
import exception.FTPServeurException;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import fichier.*; import fichier.*;
...@@ -21,19 +26,23 @@ public class PasserelleServeurLocal { ...@@ -21,19 +26,23 @@ public class PasserelleServeurLocal {
this.dossierLocal = dossierLocal; this.dossierLocal = dossierLocal;
this.mapFichierLocal= new HashMap<String, FichierLocal>(); this.mapFichierLocal= new HashMap<String, FichierLocal>();
this.mapFichierDistant = new HashMap<String, FichierDistant>(); this.mapFichierDistant = new HashMap<String, FichierDistant>();
completeMapFichierLocal(this.dossierLocal,"/");
completeMapFichierDistant("/");
} }
private void completeMapFichierLocal(String nomDossierReel, String nomDossierMap) { private void completeMapFichierLocal(String nomDossierReel, String nomDossierMap) {
File repertoire = new File(nomDossierReel); File repertoire = new File(nomDossierReel);
String liste[] = repertoire.list(); if(!repertoire.exists()) {
repertoire.mkdir();
}
String[] liste = repertoire.list();
for (String nomFichier : liste) { for (String nomFichier : liste) {
File f = new File(nomDossierReel+nomFichier); File f = new File(nomDossierReel+nomFichier);
if(f.isDirectory()) { if(f.isDirectory()) {
completeMapFichierLocal(nomDossierReel+nomFichier+"/", nomDossierMap+nomFichier+"/"); completeMapFichierLocal(nomDossierReel+nomFichier+"/", nomDossierMap+nomFichier+"/");
} }
else { else {
if(this.mapFichierLocal.containsKey(nomDossierMap+nomFichier)) {
this.mapFichierLocal.remove(nomDossierMap+nomFichier);
}
this.mapFichierLocal.put((nomDossierMap+nomFichier), new FichierLocal(nomFichier,nomDossierReel)); this.mapFichierLocal.put((nomDossierMap+nomFichier), new FichierLocal(nomFichier,nomDossierReel));
} }
} }
...@@ -47,15 +56,17 @@ public class PasserelleServeurLocal { ...@@ -47,15 +56,17 @@ public class PasserelleServeurLocal {
header.put("port",this.serveurFtp.getPort()); header.put("port",this.serveurFtp.getPort());
String listFichier = UrlFlopBox.getList(this.serveurFtp.getNomServeurFtp(), nomDossier, header); String listFichier = UrlFlopBox.getList(this.serveurFtp.getNomServeurFtp(), nomDossier, header);
String[] tabFichier = listFichier.split("\n"); String[] tabFichier = listFichier.split("\n");
for(String ligne : tabFichier) { for(int i=1; i<tabFichier.length;i++) {
String nomFichier = getNameFile(ligne); String nomFichier = getNameFile(tabFichier[i]);
if(isDirectory(ligne)) { if(isDirectory(tabFichier[i])) {
completeMapFichierDistant(nomDossier+nomFichier+"/"); completeMapFichierDistant(nomDossier+nomFichier+"/");
} }
else { else {
this.mapFichierDistant.put((nomDossier+nomFichier), new FichierDistant(nomFichier, nomDossier, this.serveurFtp.getNomServeurFtp())); if(this.mapFichierDistant.containsKey(nomDossier+nomFichier)) {
this.mapFichierDistant.remove((nomDossier+nomFichier));
}
this.mapFichierDistant.put((nomDossier+nomFichier), new FichierDistant(nomFichier, nomDossier, this.serveurFtp));
} }
} }
} }
...@@ -68,4 +79,63 @@ public class PasserelleServeurLocal { ...@@ -68,4 +79,63 @@ public class PasserelleServeurLocal {
private boolean isDirectory(String ligneFichier) { private boolean isDirectory(String ligneFichier) {
return ligneFichier.charAt(0)=='d'; return ligneFichier.charAt(0)=='d';
} }
public void check() {
//MAJ list Fichier local et distant
completeMapFichierLocal(this.dossierLocal,"/");
completeMapFichierDistant("/");
System.out.print("map1 = "+this.mapFichierLocal.keySet()+"\n");
System.out.print("map2 = "+this.mapFichierDistant.keySet()+"\n");
for(String nomFichierLocal : this.mapFichierLocal.keySet()) {
if(this.mapFichierDistant.containsKey(nomFichierLocal)) {
try {
System.out.print("nomFichierLocal = "+nomFichierLocal+"\n");
int valComp = this.mapFichierLocal.get(nomFichierLocal).compDateModif(this.mapFichierDistant.get(nomFichierLocal));
if(valComp<0) {
download(nomFichierLocal);
}
else if(valComp>0) {
upload(nomFichierLocal);
}
} catch (FTPServeurException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
upload(nomFichierLocal);
}
}
for(String nomFichierDistant : this.mapFichierDistant.keySet()) {
if(!this.mapFichierLocal.containsKey(nomFichierDistant)) {
download(nomFichierDistant);
}
}
}
private void download(String file) {
file = file.substring(1);
Map<String, String> header = new HashMap<String, String>();
header.put("username",this.serveurFtp.getIdentifiant());
header.put("password",this.serveurFtp.getPass());
header.put("port",this.serveurFtp.getPort());
String fichier = UrlFlopBox.downloadFile(this.serveurFtp.getNomServeurFtp(), file, this.dossierLocal, header);
System.out.print("file = "+file);
}
private void creationDossierPrecedent(String chemin) {
String[] cheminSplit = chemin.split("/");
String cheminTmp = "";
for(int i=0;i<cheminSplit.length-1;i++) {
cheminTmp += cheminSplit[i]+"/";
File f = new File(this.dossierLocal+cheminTmp);
if(!f.exists()) {
f.mkdir();
}
}
}
private void upload(String file) {
System.out.print("upload "+file+"\n");
}
} }
package sr2;
import java.io.File;
import java.io.IOException;
import java.nio.file.attribute.FileTime;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import exception.FTPServeurException;
import fichier.*;
import passerelleServeurLocal.PasserelleServeurLocal;
import serveurFtp.ServeurFtp;
import urlFlopBox.UrlFlopBox;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
// recupération nom serveur
Map<String,String> portServeur = new HashMap<String, String>();
portServeur.put("ftp.ubuntu.com", "21");
portServeur.put("localhost", "8081");
File directoryFlopBox = new File("./serveurFTPflopbox/");
if(!directoryFlopBox.exists()) { directoryFlopBox.mkdir(); }
Map<String,String> loginServeur = new HashMap<String, String>();
loginServeur.put("ftp.ubuntu.com", "anonymous");
loginServeur.put("localhost", "toto");
Map<String,String> passServeur = new HashMap<String, String>();
passServeur.put("ftp.ubuntu.com", "1234");
passServeur.put("localhost", "totoland");
System.out.print("debut"+UrlFlopBox.getListNameServeur()+"fin");
String[] tabNomServeur = UrlFlopBox.getListNameServeur().split("\n")[1].split(" ");
List<ServeurFtp> listServeur = new ArrayList<ServeurFtp>();
List<PasserelleServeurLocal> listPasserelle = new ArrayList<PasserelleServeurLocal>();
for(String nomServeur : tabNomServeur) {
if(portServeur.containsKey(nomServeur) && loginServeur.containsKey(nomServeur) && passServeur.containsKey(nomServeur)) {
ServeurFtp s = new ServeurFtp(nomServeur, portServeur.get(nomServeur), loginServeur.get(nomServeur), passServeur.get(nomServeur));
listServeur.add(s);
listPasserelle.add(new PasserelleServeurLocal(s, "./serveurFTPflopbox/"+nomServeur+"/"));
}
else {
System.out.print("Information connection au serveur "+nomServeur+" inconnu\n");
}
}
while(true) {
for(PasserelleServeurLocal p : listPasserelle) {
p.check();
}
try {
//TimeUnit.MINUTES.sleep(1);
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static String getAdresseFlopBox() {
return "http://localhost:8080/flopbox/";
}
}
package urlFlopBox; package urlFlopBox;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
...@@ -12,6 +15,9 @@ import serveurFtp.ServeurFtp; ...@@ -12,6 +15,9 @@ import serveurFtp.ServeurFtp;
import sr2.App; import sr2.App;
public class UrlFlopBox { public class UrlFlopBox {
private static final int BUFFER_SIZE = 4096;
public static String addServeur(String nomServeurFtp) { public static String addServeur(String nomServeurFtp) {
return sendUrl(nomServeurFtp, "", "POST", null); return sendUrl(nomServeurFtp, "", "POST", null);
} }
...@@ -24,7 +30,7 @@ public class UrlFlopBox { ...@@ -24,7 +30,7 @@ public class UrlFlopBox {
return sendUrl(nomAlias, "", "GET", null); return sendUrl(nomAlias, "", "GET", null);
} }
public static String listNameServeur() { public static String getListNameServeur() {
return sendUrl("", "", "GET", null); return sendUrl("", "", "GET", null);
} }
...@@ -33,17 +39,75 @@ public class UrlFlopBox { ...@@ -33,17 +39,75 @@ public class UrlFlopBox {
} }
public static String getLastModifFile(String nomServeurFtp, String cheminFichier, Map<String, String> header) { public static String getLastModifFile(String nomServeurFtp, String cheminFichier, Map<String, String> header) {
return sendUrl(nomServeurFtp, "/file/modif/"+cheminFichier , "GET", header); return sendUrl(nomServeurFtp, "/file/modif"+cheminFichier , "GET", header);
} }
public static String downloadFile() { public static String downloadFile(String nomServeurFtp, String cheminFichier, String cheminRepertoire, Map<String, String> header) {
return ""; return sendUrlDownload(nomServeurFtp, "/file/"+cheminFichier, cheminRepertoire+cheminFichier , "GET", header);
} }
public static String uploadFile() { public static String uploadFile() {
return ""; return "";
} }
private static String sendUrlDownload(String nomServeurFtp, String action, String fileName, String typeMsg, Map<String, String> header) {
URL url = null;
try {
url = new URL(App.getAdresseFlopBox()+nomServeurFtp+action);
System.out.print("\nurl = "+App.getAdresseFlopBox()+nomServeurFtp+action+"\n");
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection urlCon;
urlCon = (HttpURLConnection) url.openConnection();
if(header!=null) {
for (Map.Entry<String, String> param : header.entrySet()) { /* parametre header de la requete */
urlCon.setRequestProperty(param.getKey(), param.getValue());
}
}
urlCon.setRequestMethod(typeMsg); /* GET POST ... */
InputStream inputStream = urlCon.getInputStream();
creationDossierPrecedent(fileName);
FileOutputStream outputStream = new FileOutputStream(fileName);
int bytesRead = -1;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "500";
}
return "200";
}
private static void creationDossierPrecedent(String chemin) {
String[] cheminSplit = chemin.split("/");
String cheminTmp = "";
for(int i=0;i<cheminSplit.length-1;i++) {
cheminTmp += cheminSplit[i]+"/";
File f = new File(cheminTmp);
if(!f.exists()) {
f.mkdir();
}
}
}
private static String sendUrl(String nomServeurFtp, String action, String typeMsg, Map<String, String> header) { private static String sendUrl(String nomServeurFtp, String action, String typeMsg, Map<String, String> header) {
URL url = null; URL url = null;
String valRet = ""; String valRet = "";
...@@ -71,20 +135,15 @@ public class UrlFlopBox { ...@@ -71,20 +135,15 @@ public class UrlFlopBox {
System.out.println("GET Response Code :: " + responseCode); System.out.println("GET Response Code :: " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream())); BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
String inputLine; String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) { while ((inputLine = in.readLine()) != null) {
valRet += "\n"+inputLine; valRet += "\n"+inputLine;
response.append(inputLine);
} }
in.close(); in.close();
//valRet += " "+response.toString();
System.out.println(response.toString());
return valRet; return valRet;
} catch (IOException e) { } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
return "error"; return "error";
......
File added
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment