Parcourir la source

feat: Ajout Zone Geo + fix petites chaines cassant substring

Martin Passard il y a 7 ans
Parent
commit
00fbca81a0
5 fichiers modifiés avec 110 ajouts et 35 suppressions
  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;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -179,6 +180,37 @@ public class ISP implements AffichableSurIRC {
 	public CoveredAreas[] getCoveredAreas() {
 		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) {
+		json = json.getJSONObject("ispformat");
 		CoveredAreas [] res=null;
 		try {
+			
 			JSONArray ja = json.getJSONArray("coveredAreas");
+		
 			res = new CoveredAreas [ja.length()];
 			for(int i=0;i<ja.length();i++) {
 				JSONObject jo = ja.getJSONObject(i);
@@ -239,6 +242,8 @@ public class ISPDAO {
 			}
 			return res;
 		}catch(JSONException jo) {
+			System.err.println("erreur GetCoveredAreas pour "+getName(json));
+			jo.printStackTrace(System.err);
 			return null;
 		}
 		

+ 29 - 4
src/main/Bot.java

@@ -6,6 +6,7 @@ import java.util.List;
 
 import org.jibble.pircbot.PircBot;
 
+import data.CoveredAreas;
 import data.ISP;
 import data.ISPDAO;
 import verif_saisie.EntierPositifNonVide;
@@ -27,7 +28,7 @@ public class Bot extends PircBot {
 			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);
 		}
 
@@ -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);
 		}
 
@@ -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,
 			String login, String hostname, String message) {
 
@@ -175,7 +187,20 @@ public class Bot extends PircBot {
 				Cache c = Cache.getInstance();
 				ISP i = c.getISPWithName(s);
 				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 {
 					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.List;
 
+import data.CoveredAreas;
 import data.ISP;
 import data.ISPDAO;
 
@@ -13,11 +14,11 @@ public class Cache implements AffichableSurIRC {
 	 * 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.
 	 */
-	
+
 	public static volatile Cache instance = null;
 	private Date lastCacheUpdate;
 	private List<ISP> cache;
-	
+
 	private Cache() {
 		ISPDAO idao = ISPDAO.getInstance();
 		try {
@@ -28,8 +29,8 @@ public class Cache implements AffichableSurIRC {
 			e.printStackTrace();
 		}
 	}
-	
-	
+
+
 	public  Date getLastCacheUpdate() {
 		return lastCacheUpdate;
 	}
@@ -44,14 +45,14 @@ public class Cache implements AffichableSurIRC {
 			synchronized (ISPDAO.class) {
 				if(Cache.instance == null) {
 					Cache.instance = new Cache();
-					
-					
+
+
 				}
 			}
 		}
 		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.
 	 * @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();
 		return true;
 	}
-	
+
 	public int size() {
 		return cache.size();
 	}
@@ -79,7 +80,7 @@ public class Cache implements AffichableSurIRC {
 	public List<ISP> getListe(){
 		return cache;
 	}
-	
+
 	public int getMemberCountInFede() {
 		int i = 0;
 		for(ISP isp : getListe()) {
@@ -89,7 +90,7 @@ public class Cache implements AffichableSurIRC {
 		}
 		return i;
 	}
-	
+
 	public int getSubscribersCountInFede() {
 		int i = 0;
 		for(ISP isp : getListe()) {
@@ -99,7 +100,7 @@ public class Cache implements AffichableSurIRC {
 		}
 		return i;
 	}
-	
+
 	public int getMemberCountOutFede() {
 		int i = 0;
 		for(ISP isp : getListe()) {
@@ -109,7 +110,7 @@ public class Cache implements AffichableSurIRC {
 		}
 		return i;
 	}
-	
+
 	public int getSubscribersCountOutFede() {
 		int i = 0;
 		for(ISP isp : getListe()) {
@@ -119,7 +120,7 @@ public class Cache implements AffichableSurIRC {
 		}
 		return i;
 	}
-	
+
 	public String getSubscribersPercents(int val) {
 		NumberFormat nf = NumberFormat.getInstance();
 		nf.setMaximumFractionDigits(2);
@@ -128,7 +129,7 @@ public class Cache implements AffichableSurIRC {
 		Double nbSubscribers = 0.0+getSubscribersCountInFede();
 		return nf.format((val2/nbSubscribers)*100)+" %";
 	}
-	
+
 	public String getMembersPercents(int val) {
 		NumberFormat nf = NumberFormat.getInstance();
 		nf.setMaximumFractionDigits(2);
@@ -137,9 +138,9 @@ public class Cache implements AffichableSurIRC {
 		Double nbMembers = 0.0+getMemberCountInFede();
 		return nf.format((val2/nbMembers)*100)+" %";
 	}
-	
-	
-	
+
+
+
 	/**
 	 * 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
@@ -156,11 +157,11 @@ public class Cache implements AffichableSurIRC {
 				}
 			}
 			return count;
-			
+
 		}
-			
+
 	}
-	
+
 	public ISP getISPWithName(String s) {
 		for(ISP i : cache) {
 			if(i.getShortestName().equalsIgnoreCase(s) || i.getName().equalsIgnoreCase(s)) {
@@ -169,11 +170,11 @@ public class Cache implements AffichableSurIRC {
 		}
 		return null;
 	}
-	
+
 	public String toString() {
 		return "Cache de "+cache.size()+" FAI";
 	}
-	
+
 	public List<String> toStringIRC() {
 		List<String> liste = new LinkedList<String>();
 		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");
 		return liste;
 	}
-	
-	
+
+
 	public ISP getISPWithGeoZone(String s) {
+
 		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;
-		
+
 	}
-	
-	
+
+
 }

+ 1 - 1
src/main/Main.java

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