Browse Source

Lots of stuff

Martin Passard 7 years ago
parent
commit
a4fe6b1802
7 changed files with 166 additions and 63 deletions
  1. 10 1
      src/IRC/Server.java
  2. 20 10
      src/data/ISP.java
  3. 78 38
      src/data/ISPDAO.java
  4. 42 12
      src/data/ISPdata.java
  5. 3 1
      src/data/TestDAO.java
  6. 12 0
      src/main/Bot.java
  7. 1 1
      src/main/Main.java

+ 10 - 1
src/IRC/Server.java

@@ -4,7 +4,11 @@ public class Server {
 	private String address;
 	private int port;
 	private String chan;
+	private Type t;
 	
+	private enum Type{
+		IRC,AUTRE;
+	}
 	
 	public Server(String address, int port, String chan) {
 		super();
@@ -16,11 +20,13 @@ public class Server {
 	public Server(String gen) {
 		
 		if(gen.substring(0, 7).equals("irc://")) {
+			this.t=Type.IRC;
 			this.port = getSrvPort(gen);
 			this.address = getSrvAddr(gen);
 			this.chan = getSrvChan(gen);
 		}else {
-			throw new IllegalArgumentException("Le serveur "+gen+" n'est pas un serveur IRC valide");
+			this.t=Type.AUTRE;
+			this.address=gen;
 		}
 		
 		
@@ -83,6 +89,9 @@ public class Server {
 		this.chan = chan;
 	}
 
+	public boolean isIRC() {
+		return this.t.equals(Type.IRC);
+	}
 	
 	
 	

+ 20 - 10
src/data/ISP.java

@@ -7,12 +7,13 @@ public class ISP {
 	private String name;
 	private int id;
 	private boolean isFFDNMember;
-	private Date date_added;
-	private Date last_update;
+	private String date_added;
+	private String last_update;
 	private ISPdata data;
 	
 	
-	public ISP(String name, int id, boolean isFFDNMember, Date date_added, Date last_update, ISPdata data) {
+	
+	public ISP(String name, int id, boolean isFFDNMember, String date_added, String last_update, ISPdata data) {
 		super();
 		this.name = name;
 		this.id = id;
@@ -51,19 +52,28 @@ public class ISP {
 	public void setFFDNMember(boolean isFFDNMember) {
 		this.isFFDNMember = isFFDNMember;
 	}
-	public Date getDate_added() {
+
+	
+	public String getDate_added() {
 		return date_added;
 	}
-	public void setDate_added(Date date_added) {
+
+
+	public void setDate_added(String date_added) {
 		this.date_added = date_added;
 	}
-	public Date getLast_update() {
+
+
+	public String getLast_update() {
 		return last_update;
 	}
-	public void setLast_update(Date last_update) {
+
+
+	public void setLast_update(String last_update) {
 		this.last_update = last_update;
 	}
-	
+
+
 	public int getMembersCount() {
 		return data.getMembersCount();
 	}
@@ -74,8 +84,8 @@ public class ISP {
 	
 	public String toString() {
 		String res="";
-		res+=name+" : \n";
-		res+="Est membre: "+isFFDNMember()+" \n";
+		res+=name+" : ";
+		res+="Est membre: "+isFFDNMember()+" ";
 		res+="Nombre de membres: "+getMembersCount()+" Nombre d'abonnements:"+getSubscribersCount(); 
 		return res;
 	}

+ 78 - 38
src/data/ISPDAO.java

@@ -1,11 +1,20 @@
 package data;
 
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.Authenticator;
+import java.net.InetSocketAddress;
+import java.net.MalformedURLException;
+import java.net.PasswordAuthentication;
+import java.net.Proxy;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
+import java.util.Scanner;
+
+import javax.net.ssl.HttpsURLConnection;
 
 import org.json.JSONObject;
 
@@ -22,7 +31,7 @@ public class ISPDAO {
 	private ISPDAO() {
 
 	}
-	
+
 	public final static ISPDAO getInstance() {
 		if (ISPDAO.instance == null) {
 			synchronized (ISPDAO.class) {
@@ -34,42 +43,59 @@ public class ISPDAO {
 		return ISPDAO.instance;
 	}
 
-	/**
-	 * @param urlToRead URL the method will transform into a String
-	 * @return	String that the server Respond with the URL specified or null in case of an error
-	 * 
-	 */
-	public static String getHTML(String urlToRead) {
-		try {
-			StringBuilder result = new StringBuilder();
-			URL url = new URL(urlToRead);
-			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-			conn.setRequestMethod("GET");
-			BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
-			String line;
-			while ((line = rd.readLine()) != null) {
-				result.append(line);
-			}
-			rd.close();
-			
-			return result.toString();
-		}catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
+	private String executeGet(String https_url) {
+		return executeGet(https_url, "", 443);
+	}
+	
+	@SuppressWarnings("resource")
+	private String executeGet(final String https_url, final String proxyName, final int port) {
+	    String ret = "";
+
+	    URL url;
+	    Scanner s=null;
+	    try {
+
+	        HttpsURLConnection con;
+	        url = new URL(https_url);
+
+	        if (proxyName.isEmpty()) {  
+	            con = (HttpsURLConnection) url.openConnection();
+	        } else {                
+	            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyName, port));
+	            con = (HttpsURLConnection) url.openConnection(proxy);
+	            Authenticator authenticator = new Authenticator() {
+	                public PasswordAuthentication getPasswordAuthentication() {
+	                        return (new PasswordAuthentication(null, null));
+	                    }
+	                };
+	            Authenticator.setDefault(authenticator);
+	        }
+
+	        InputStream is = (InputStream) con.getContent();
+	        s = new java.util.Scanner(is).useDelimiter("\\A");
+	        ret+= s.hasNext() ? s.next() : "";
+	      
+
+	    } catch (MalformedURLException e) {
+	        e.printStackTrace();
+	    } catch (IOException e) {
+	        e.printStackTrace();
+	    }
+	    if(s!=null) {
+	    	s.close();
+	    }
+	    return ret;
 	}
 
 
 
-	
-
 
 	/**
 	 * 
 	 * @return List of ISPs constructed.
 	 */
 	public List<ISP> getISPs() throws Exception{
-		String jsonInfo = getHTML(dbAdress+"?per_page=0");
+		String jsonInfo = executeGet(dbAdress+"?per_page=0");
 		JSONObject allISPCount = new JSONObject(jsonInfo);
 		int nbItems = allISPCount.getInt("total_items");
 		ArrayList<ISP> ar = new ArrayList<>(nbItems);
@@ -86,17 +112,31 @@ public class ISPDAO {
 
 
 	public ISP getISP(int number) {
-		String json = getHTML(dbAdress+number);
+		String json = executeGet(dbAdress+number+'/');
+		System.out.println(json);
 		JSONObject jsonObj = new JSONObject(json);
-		ISPData =
-		
-		String name =
-		
-
-		return null;
+		String name = jsonObj.getJSONObject("ispformat").getString("name");
+		int id = jsonObj.getInt("id");
+		boolean member = jsonObj.getBoolean("is_ffdn_member");
+		ISPdata ispData = new ISPdata(jsonObj.getJSONObject("ispformat"));
+		String date_added = jsonObj.getString("date_added");
+		String last_update = jsonObj.getString("last_update");
+		ISP isp = new ISP(name, id, member, date_added, last_update, ispData);
+		return isp;
 
 	}
 
-
+	/**
+	 *TODO : implements this in Isp
+	 * @param date String correspondant a une date au format aaaa-mm-jj ou aaaa-mm
+	 * @return	Date correspondant
+	 */
+	private Date getDate(String date) {
+		Calendar c = Calendar.getInstance();
+		c.clear();
+		c.set(Integer.parseInt(date.substring(0, 4)), Integer.parseInt(date.substring(5,7))-1, Integer.parseInt(date.substring(8))); // le -1 est présent ici car Janvier correspond à 0 
+		Date d = c.getTime();
+		return d;
+	}
 
 }

+ 42 - 12
src/data/ISPdata.java

@@ -1,43 +1,59 @@
 package data;
 
-import java.util.Iterator;
-
 import org.json.JSONArray;
+import org.json.JSONException;
 import org.json.JSONObject;
 
 import IRC.Server;
 
 public class ISPdata {
 
-	private ISP ISP;
 	private String website;
 	private String description;
 	private Server [] ircChan;
 	private int progressStatus;
 	private int membersCount;
 	private int subscribersCount;
-	
+	private String email;
+	private String creationDate;
+	private String joinDate;
 	
 	
 	
 
-	public ISPdata(data.ISP ISP, String website, String description, Server[] chatrooms, int progressStatus,
-			int membersCount, int subscribersCount) {
+	public ISPdata(String website, String description, Server[] chatrooms, int progressStatus,
+			int membersCount, int subscribersCount, String email, String creationDate, String joinDate) {
 		super();
-		this.ISP = ISP;
 		this.website = website;
 		this.description = description;
 		this.ircChan = chatrooms;
 		this.progressStatus = progressStatus;
 		this.membersCount = membersCount;
 		this.subscribersCount = subscribersCount;
+		this.email=email;
+		this.creationDate = creationDate;
+		this.joinDate = joinDate;
 	}
 	
-	public ISPdata(ISP isp, JSONObject jo){
-		this.ISP = ISP;
+	public ISPdata(JSONObject jo){
 		this.website = jo.getString("website");
-		isp.setName(jo.getString("name"));
-		JSONArray chatrooms = jo.getJSONArray("chatrooms");
+		JSONArray chatroomsJSON = jo.getJSONArray("chatrooms");
+		Server [] chatrooms = new Server[chatroomsJSON.length()];
+		for(int i = 0; i<chatroomsJSON.length(); ++i) {
+			String servaddr = chatroomsJSON.getString(i);
+			chatrooms[i] = new Server(servaddr);
+					
+		}
+		this.progressStatus = jo.getInt("progressStatus");
+		this.membersCount = jo.getInt("memberCount");
+		this.subscribersCount = jo.getInt("subscriberCount");
+		try {
+		this.joinDate = jo.getString("ffdnMemberSince");
+		}catch (JSONException joe) {
+			this.joinDate = "?";
+		}
+		this.creationDate = jo.getString("creationDate");
+		
 	}
 
 	public String getWebsite() {
@@ -49,10 +65,16 @@ public class ISPdata {
 		return description;
 	}
 
-	public String[] getChatrooms() {
+	
+
+
+	public Server[] getIrcChan() {
 		return ircChan;
 	}
 
+	public String getEmail() {
+		return email;
+	}
 
 	public int getProgressStatus() {
 		return progressStatus;
@@ -66,6 +88,14 @@ public class ISPdata {
 	public int getSubscribersCount() {
 		return subscribersCount;
 	}
+
+	public String getCreationDate() {
+		return creationDate;
+	}
+
+	public String getJoinDate() {
+		return joinDate;
+	}
 	
 	
 }

+ 3 - 1
src/data/TestDAO.java

@@ -6,8 +6,10 @@ public class TestDAO {
 		// TODO Auto-generated constructor stub
 	}
 
-	public static void main(String[] args) {
+	public static void main(String[] args) throws Exception {
 		ISPDAO dao = ISPDAO.getInstance();
+		ISP i = dao.getISP(1);
+		System.out.println(i);
 		
 
 	}

+ 12 - 0
src/main/Bot.java

@@ -2,10 +2,15 @@ package main;
 
 import org.jibble.pircbot.PircBot;
 
+import data.ISPDAO;
+
 public class Bot extends PircBot {
 
+	private ISPDAO idao;
+	
 	public Bot() {
 		this.setName("UneFede2");
+		idao = ISPDAO.getInstance();
 	}
 
 	public void onMessage(String channel, String sender,
@@ -14,5 +19,12 @@ public class Bot extends PircBot {
 			String time = new java.util.Date().toString();
 			sendMessage(channel, sender + ": The time is now " + time);
 		}
+		
+		if (message.contains("+info")) {
+			
+			String res="";
+			int  id = Integer.parseInt(message.substring(message.indexOf(' ')+1));
+			sendMessage(channel,idao.getISP(id).toString());
+		}
 	}
 }

+ 1 - 1
src/main/Main.java

@@ -6,7 +6,7 @@ public class Main {
 	
 	public static final String SERVER = "irc.geeknode.net";
 	public static final int PORT = 6667;
-	public static final String[] CHANNELS = { "#marmat" };
+	public static final String[] CHANNELS = { "#marmat", "#ffdn" };
 	
 	public static void main(String[] args) throws Exception {
 		try {