Browse Source

feat: Ajout Zone Geo + fix petites chaines cassant substring

Martin Passard 7 years ago
parent
commit
00fbca81a0
5 changed files with 110 additions and 35 deletions
  1. 33 1
      src/data/ISP.java
  2. 5 0
      src/data/ISPDAO.java
  3. 29 4
      src/main/Bot.java
  4. 42 29
      src/main/Cache.java
  5. 1 1
      src/main/Main.java

+ 33 - 1
src/data/ISP.java

@@ -1,5 +1,6 @@
 package data;
 package data;
 
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 
 
@@ -179,6 +180,37 @@ public class ISP implements AffichableSurIRC {
 	public CoveredAreas[] getCoveredAreas() {
 	public CoveredAreas[] getCoveredAreas() {
 		return coveredAreas;
 		return coveredAreas;
 	}
 	}
-
+	
+	/**
+	 * Récupere la zone couverte correspondante au paramètre
+	 * @param name Nom de la zone
+	 * @return	la première Zone correspondante au nom.
+	 */
+	public CoveredAreas getCoveredArea(String name) {
+		for(CoveredAreas ca : coveredAreas) {
+			if(ca.getName().equalsIgnoreCase(name)) {
+				return ca;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	  * Récupere la zone couverte correspondante au paramètre
+	 * @param name Nom de la zone
+	 * @return	toutes les Zones correspondante au nom.
+	 */
+	public List<CoveredAreas> getCoveredAreas(String name){
+		List<CoveredAreas> lca = new ArrayList<>(4);
+		for(CoveredAreas ca : coveredAreas) {
+			if(ca.getName().equalsIgnoreCase(name)) {
+				lca.add(ca);
+			}
+		}
+		return lca;
+		
+	}
+	
+	
 	
 	
 }
 }

+ 5 - 0
src/data/ISPDAO.java

@@ -221,9 +221,12 @@ public class ISPDAO {
 	}
 	}
 	
 	
 	private CoveredAreas [] getCoveredAreas(JSONObject json) {
 	private CoveredAreas [] getCoveredAreas(JSONObject json) {
+		json = json.getJSONObject("ispformat");
 		CoveredAreas [] res=null;
 		CoveredAreas [] res=null;
 		try {
 		try {
+			
 			JSONArray ja = json.getJSONArray("coveredAreas");
 			JSONArray ja = json.getJSONArray("coveredAreas");
+		
 			res = new CoveredAreas [ja.length()];
 			res = new CoveredAreas [ja.length()];
 			for(int i=0;i<ja.length();i++) {
 			for(int i=0;i<ja.length();i++) {
 				JSONObject jo = ja.getJSONObject(i);
 				JSONObject jo = ja.getJSONObject(i);
@@ -239,6 +242,8 @@ public class ISPDAO {
 			}
 			}
 			return res;
 			return res;
 		}catch(JSONException jo) {
 		}catch(JSONException jo) {
+			System.err.println("erreur GetCoveredAreas pour "+getName(json));
+			jo.printStackTrace(System.err);
 			return null;
 			return null;
 		}
 		}
 		
 		

+ 29 - 4
src/main/Bot.java

@@ -6,6 +6,7 @@ import java.util.List;
 
 
 import org.jibble.pircbot.PircBot;
 import org.jibble.pircbot.PircBot;
 
 
+import data.CoveredAreas;
 import data.ISP;
 import data.ISP;
 import data.ISPDAO;
 import data.ISPDAO;
 import verif_saisie.EntierPositifNonVide;
 import verif_saisie.EntierPositifNonVide;
@@ -27,7 +28,7 @@ public class Bot extends PircBot {
 			sendMessage(channel, sender + ": Nous sommes le " + time);
 			sendMessage(channel, sender + ": Nous sommes le " + time);
 		}
 		}
 
 
-		if (message.substring(0, 5).equalsIgnoreCase("+info")) {
+		if (message.length()>6 && message.substring(0, 5).equalsIgnoreCase("+info")) {
 			info(channel,sender,login,hostname,message);
 			info(channel,sender,login,hostname,message);
 		}
 		}
 
 
@@ -36,7 +37,7 @@ public class Bot extends PircBot {
 		}
 		}
 
 
 
 
-		if (message.substring(0, 6).equals("+liste")) {
+		if (message.length()> 6 && message.substring(0, 6).equals("+liste")) {
 			list(channel, sender, login, hostname, message);
 			list(channel, sender, login, hostname, message);
 		}
 		}
 
 
@@ -135,8 +136,19 @@ public class Bot extends PircBot {
 	}
 	}
 
 
 
 
+	public void contact(String channel, String sender,
+			String login, String hostname, String message) {
+		
+		String s = message.substring(message.indexOf(' ')+1);
+		if(!EntierPositifNonVide.verifie(s)) {					// +contact suivi d'un mot
+			
+		}
+		
+		
+	}
 
 
-
+	
+	
 	public void info(String channel, String sender,
 	public void info(String channel, String sender,
 			String login, String hostname, String message) {
 			String login, String hostname, String message) {
 
 
@@ -175,7 +187,20 @@ public class Bot extends PircBot {
 				Cache c = Cache.getInstance();
 				Cache c = Cache.getInstance();
 				ISP i = c.getISPWithName(s);
 				ISP i = c.getISPWithName(s);
 				if(i == null) {
 				if(i == null) {
-					sendMessage(channel, "Le FAI "+s+" est Inconnu, désolé");
+					sendMessage(channel, "Recherche d'une zone "+s);
+					ISP j = c.getISPWithGeoZone(s);
+					if(j == null)
+					sendMessage(channel, "Le FAI "+s+" est Inconnu, désolé. Et aucun FAI n'opère sur une sone dénomée "+s+" ...");
+					else {
+						sendMessage(channel, "Un FAI opère sur la zone "+s+" : ");
+						sendMessage(channel, j.toStringIRC());
+						List<CoveredAreas> cas = j.getCoveredAreas(s);
+						String technos = "";
+						for(CoveredAreas ca: cas) {
+							technos+=ca.getTechnos()+" ";
+						}
+						sendMessage(channel, "Avec pour techno "+technos);
+					}
 				}else {
 				}else {
 					sendMessage(channel, i.toStringIRC());
 					sendMessage(channel, i.toStringIRC());
 				}
 				}

+ 42 - 29
src/main/Cache.java

@@ -5,6 +5,7 @@ import java.util.Date;
 import java.util.LinkedList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 
 
+import data.CoveredAreas;
 import data.ISP;
 import data.ISP;
 import data.ISPDAO;
 import data.ISPDAO;
 
 
@@ -13,11 +14,11 @@ public class Cache implements AffichableSurIRC {
 	 * Cette classe sert de cache pour les infos de DB
 	 * Cette classe sert de cache pour les infos de DB
 	 * Elle implemente le Design Pattern Singleton dans la mesure où cette classe doit être l'unique instance de référence peu importe le Thread l'utilisant, et que le cache est unique.
 	 * Elle implemente le Design Pattern Singleton dans la mesure où cette classe doit être l'unique instance de référence peu importe le Thread l'utilisant, et que le cache est unique.
 	 */
 	 */
-	
+
 	public static volatile Cache instance = null;
 	public static volatile Cache instance = null;
 	private Date lastCacheUpdate;
 	private Date lastCacheUpdate;
 	private List<ISP> cache;
 	private List<ISP> cache;
-	
+
 	private Cache() {
 	private Cache() {
 		ISPDAO idao = ISPDAO.getInstance();
 		ISPDAO idao = ISPDAO.getInstance();
 		try {
 		try {
@@ -28,8 +29,8 @@ public class Cache implements AffichableSurIRC {
 			e.printStackTrace();
 			e.printStackTrace();
 		}
 		}
 	}
 	}
-	
+
-	
+
 	public  Date getLastCacheUpdate() {
 	public  Date getLastCacheUpdate() {
 		return lastCacheUpdate;
 		return lastCacheUpdate;
 	}
 	}
@@ -44,14 +45,14 @@ public class Cache implements AffichableSurIRC {
 			synchronized (ISPDAO.class) {
 			synchronized (ISPDAO.class) {
 				if(Cache.instance == null) {
 				if(Cache.instance == null) {
 					Cache.instance = new Cache();
 					Cache.instance = new Cache();
-					
+
-					
+
 				}
 				}
 			}
 			}
 		}
 		}
 		return Cache.instance;
 		return Cache.instance;
 	}
 	}
-	
+
 	/**
 	/**
 	 * Cette methode vient mettre à jour le cache des FAI. Pour cela, il récupere l'instance du DAO et récupère la liste des ISP. Si tout cse passe correctement, il supprime le cache précédent et le remplace par les nouvelles valeurs. Sinon, il maaintient le cache précédent.
 	 * Cette methode vient mettre à jour le cache des FAI. Pour cela, il récupere l'instance du DAO et récupère la liste des ISP. Si tout cse passe correctement, il supprime le cache précédent et le remplace par les nouvelles valeurs. Sinon, il maaintient le cache précédent.
 	 * @return True si l'operation s'est passée correctement, False sinon et affiche la cause
 	 * @return True si l'operation s'est passée correctement, False sinon et affiche la cause
@@ -71,7 +72,7 @@ public class Cache implements AffichableSurIRC {
 		lastCacheUpdate = new Date();
 		lastCacheUpdate = new Date();
 		return true;
 		return true;
 	}
 	}
-	
+
 	public int size() {
 	public int size() {
 		return cache.size();
 		return cache.size();
 	}
 	}
@@ -79,7 +80,7 @@ public class Cache implements AffichableSurIRC {
 	public List<ISP> getListe(){
 	public List<ISP> getListe(){
 		return cache;
 		return cache;
 	}
 	}
-	
+
 	public int getMemberCountInFede() {
 	public int getMemberCountInFede() {
 		int i = 0;
 		int i = 0;
 		for(ISP isp : getListe()) {
 		for(ISP isp : getListe()) {
@@ -89,7 +90,7 @@ public class Cache implements AffichableSurIRC {
 		}
 		}
 		return i;
 		return i;
 	}
 	}
-	
+
 	public int getSubscribersCountInFede() {
 	public int getSubscribersCountInFede() {
 		int i = 0;
 		int i = 0;
 		for(ISP isp : getListe()) {
 		for(ISP isp : getListe()) {
@@ -99,7 +100,7 @@ public class Cache implements AffichableSurIRC {
 		}
 		}
 		return i;
 		return i;
 	}
 	}
-	
+
 	public int getMemberCountOutFede() {
 	public int getMemberCountOutFede() {
 		int i = 0;
 		int i = 0;
 		for(ISP isp : getListe()) {
 		for(ISP isp : getListe()) {
@@ -109,7 +110,7 @@ public class Cache implements AffichableSurIRC {
 		}
 		}
 		return i;
 		return i;
 	}
 	}
-	
+
 	public int getSubscribersCountOutFede() {
 	public int getSubscribersCountOutFede() {
 		int i = 0;
 		int i = 0;
 		for(ISP isp : getListe()) {
 		for(ISP isp : getListe()) {
@@ -119,7 +120,7 @@ public class Cache implements AffichableSurIRC {
 		}
 		}
 		return i;
 		return i;
 	}
 	}
-	
+
 	public String getSubscribersPercents(int val) {
 	public String getSubscribersPercents(int val) {
 		NumberFormat nf = NumberFormat.getInstance();
 		NumberFormat nf = NumberFormat.getInstance();
 		nf.setMaximumFractionDigits(2);
 		nf.setMaximumFractionDigits(2);
@@ -128,7 +129,7 @@ public class Cache implements AffichableSurIRC {
 		Double nbSubscribers = 0.0+getSubscribersCountInFede();
 		Double nbSubscribers = 0.0+getSubscribersCountInFede();
 		return nf.format((val2/nbSubscribers)*100)+" %";
 		return nf.format((val2/nbSubscribers)*100)+" %";
 	}
 	}
-	
+
 	public String getMembersPercents(int val) {
 	public String getMembersPercents(int val) {
 		NumberFormat nf = NumberFormat.getInstance();
 		NumberFormat nf = NumberFormat.getInstance();
 		nf.setMaximumFractionDigits(2);
 		nf.setMaximumFractionDigits(2);
@@ -137,9 +138,9 @@ public class Cache implements AffichableSurIRC {
 		Double nbMembers = 0.0+getMemberCountInFede();
 		Double nbMembers = 0.0+getMemberCountInFede();
 		return nf.format((val2/nbMembers)*100)+" %";
 		return nf.format((val2/nbMembers)*100)+" %";
 	}
 	}
-	
+
-	
+
-	
+
 	/**
 	/**
 	 * Donne le nombre de FAI de la fédé en parcourant le cache.
 	 * Donne le nombre de FAI de la fédé en parcourant le cache.
 	 * @param ffdn_member Si = null alors on s'en fout, si =true, seuls les FAI de la fédé, si = false, seuls les FAI non membres
 	 * @param ffdn_member Si = null alors on s'en fout, si =true, seuls les FAI de la fédé, si = false, seuls les FAI non membres
@@ -156,11 +157,11 @@ public class Cache implements AffichableSurIRC {
 				}
 				}
 			}
 			}
 			return count;
 			return count;
-			
+
 		}
 		}
-			
+
 	}
 	}
-	
+
 	public ISP getISPWithName(String s) {
 	public ISP getISPWithName(String s) {
 		for(ISP i : cache) {
 		for(ISP i : cache) {
 			if(i.getShortestName().equalsIgnoreCase(s) || i.getName().equalsIgnoreCase(s)) {
 			if(i.getShortestName().equalsIgnoreCase(s) || i.getName().equalsIgnoreCase(s)) {
@@ -169,11 +170,11 @@ public class Cache implements AffichableSurIRC {
 		}
 		}
 		return null;
 		return null;
 	}
 	}
-	
+
 	public String toString() {
 	public String toString() {
 		return "Cache de "+cache.size()+" FAI";
 		return "Cache de "+cache.size()+" FAI";
 	}
 	}
-	
+
 	public List<String> toStringIRC() {
 	public List<String> toStringIRC() {
 		List<String> liste = new LinkedList<String>();
 		List<String> liste = new LinkedList<String>();
 		liste.add("Il y a "+cache.size()+" FAI dont "+getISPCount(Boolean.TRUE)+" dans la fédé");
 		liste.add("Il y a "+cache.size()+" FAI dont "+getISPCount(Boolean.TRUE)+" dans la fédé");
@@ -181,16 +182,28 @@ public class Cache implements AffichableSurIRC {
 		liste.add("Et hors fédé : "+getSubscribersCountOutFede()+" Abonné.e.s et "+getMemberCountOutFede()+" Membres");
 		liste.add("Et hors fédé : "+getSubscribersCountOutFede()+" Abonné.e.s et "+getMemberCountOutFede()+" Membres");
 		return liste;
 		return liste;
 	}
 	}
-	
+
-	
+
 	public ISP getISPWithGeoZone(String s) {
 	public ISP getISPWithGeoZone(String s) {
+
 		for(ISP i: cache) {
 		for(ISP i: cache) {
-			
+			if(Main.isDebug()) {
+				System.out.println("Recherche sur "+i.getBetterName());
+			}
+			if(i.getCoveredAreas()!= null) for(CoveredAreas ca : i.getCoveredAreas()) {
+				if(Main.isDebug()) {
+					ca.getName();
+				}
+				if(s.equalsIgnoreCase(ca.getName())) {
+					return i;
+				}
+			}
+
 		}
 		}
-		
+
 		return null;
 		return null;
-		
+
 	}
 	}
-	
+
-	
+
 }
 }

+ 1 - 1
src/main/Main.java

@@ -10,7 +10,7 @@ public class Main {
 	public static final long TIMEOUT_BEFORE_RECONNECTING = 360;
 	public static final long TIMEOUT_BEFORE_RECONNECTING = 360;
 	public static final Cache cache = Cache.getInstance();
 	public static final Cache cache = Cache.getInstance();
 	public static int failures = 0;
 	public static int failures = 0;
-	private static boolean DEBUG;
+	private static boolean DEBUG=true;
 
 
 	public static void main(String[] args) throws Exception {
 	public static void main(String[] args) throws Exception {