From 13300e01b46c7822d94915ffaeac706db106829f Mon Sep 17 00:00:00 2001 From: Notmoo-PC\Notmoo Date: Sat, 17 Jun 2017 15:06:18 +0200 Subject: [PATCH] Clear code + ajout commentaire --- src/main/java/core/ServerApp.java | 18 ------------------ src/main/java/core/dao/DebianDao.java | 12 ------------ src/main/java/core/dao/HibernateDao.java | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------- src/main/java/core/repository/AccessPoint.java | 2 +- src/main/java/core/repository/IJavaBean.java | 11 +++++++++++ src/main/java/core/repository/Location.java | 2 +- src/main/java/core/repository/Map.java | 2 +- src/main/java/core/repository/RssiRecord.java | 2 +- src/main/java/core/repository/TempRssi.java | 2 +- src/main/java/core/service/CalibrationService.java | 3 +++ src/main/java/core/service/MapService.java | 3 +++ src/main/java/core/service/MeasurementService.java | 12 +++++++++++- src/main/java/core/service/PositioningService.java | 12 +++++------- src/main/java/core/utils/HibernateUtil.java | 3 +++ src/main/java/servlet/APCalibrationServlet.java | 2 ++ src/main/java/servlet/APMeasurementServlet.java | 2 ++ src/main/java/servlet/CalibrationServlet.java | 9 ++++++++- src/main/java/servlet/MapByteServlet.java | 2 ++ src/main/java/servlet/MapScaleServlet.java | 2 ++ src/main/java/servlet/PositioningServlet.java | 15 +++++++++++---- src/main/resources/hibernate.cfg.xml | 2 +- 21 files changed, 180 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/core/ServerApp.java delete mode 100644 src/main/java/core/dao/DebianDao.java create mode 100644 src/main/java/core/repository/IJavaBean.java diff --git a/src/main/java/core/ServerApp.java b/src/main/java/core/ServerApp.java deleted file mode 100644 index a027eeb..0000000 --- a/src/main/java/core/ServerApp.java +++ /dev/null @@ -1,18 +0,0 @@ -import core.dao.HibernateDao; -import core.repository.AccessPoint; -import core.repository.Map; - -/** - * Created by Guillaume on 09/05/2017. - */ -public class ServerApp { - public static void main(String args[]){ - HibernateDao dao = new HibernateDao(); - AccessPoint ap = new AccessPoint(); - ap.setMac_addr("aa:aa:aa:aa:aa:aa:aa:aa"); - dao.saveAccessPoint(ap); - - Map map = new Map(); - dao.saveMap(map);/**/ - } -} diff --git a/src/main/java/core/dao/DebianDao.java b/src/main/java/core/dao/DebianDao.java deleted file mode 100644 index dbf8e28..0000000 --- a/src/main/java/core/dao/DebianDao.java +++ /dev/null @@ -1,12 +0,0 @@ -package core.dao; - -/** - * Created by Guillaume on 09/05/2017. - */ -public class DebianDao { - - public String getMacAddr(String ipAddr){ - //TODO - return null; - } -} diff --git a/src/main/java/core/dao/HibernateDao.java b/src/main/java/core/dao/HibernateDao.java index ef6b346..5c6f3b3 100644 --- a/src/main/java/core/dao/HibernateDao.java +++ b/src/main/java/core/dao/HibernateDao.java @@ -12,13 +12,24 @@ import java.util.List; /** + * Dao class handling access to database's data using Hibernate + * * Created by Guillaume on 09/05/2017. */ public class HibernateDao { public HibernateDao () { } - + + /** + * Execute a ITransactionProcess containing an Hibernate transaction, + * and return a callback object containing a list of results filled by + * the transactioin process and a boolean status. + * + * Handle properly Hibernate session's opening and closing, and handle exceptions that can occur. + * @param itp transaction process to run + * @return {@link TransactionCallBack} + */ private TransactionCallBack execTransactionProcess(ITransactionProcess itp) { Session session = HibernateUtil.getSessionFactory().openSession(); TransactionCallBack reply = new TransactionCallBack(); @@ -48,9 +59,18 @@ public class HibernateDao { } return reply; } - private List internal_getData(Class clazz){ + + /** + * Generic method that return a list of objects that + * are contained in the database handled by Hibernate. + * + * @param clazz class of elements requests + * + * @return a list of objects of class {@code clazz} + */ + private List internal_getData(Class clazz){ TransactionCallBack callBack = execTransactionProcess((session)->{ - TransactionCallBack reply = new TransactionCallBack(); + TransactionCallBack reply = new TransactionCallBack(); Query query = session.createQuery("from "+clazz.getSimpleName()); List results = query.list(); for(Object result : results){ @@ -61,6 +81,12 @@ public class HibernateDao { }); return callBack.getResults(); } + + /** + * Generic method that push javabeans to the database using Hibernate. + * @param objs + * @return status, true if the transaction is successful, false otherwise + */ private boolean internal_saveData(Object... objs){ TransactionCallBack callBack = execTransactionProcess((session)->{ TransactionCallBack reply = new TransactionCallBack(); @@ -72,10 +98,21 @@ public class HibernateDao { return callBack!=null && callBack.isStatus(); } - + + /** + * + * @param trs + * @return + */ public boolean saveTempRssi(TempRssi... trs){ return internal_saveData(trs); } + + /** + * + * @param macAddr + * @return + */ public List getTempRssi(String macAddr){ if(macAddr == null) return new ArrayList<>(); @@ -93,13 +130,28 @@ public class HibernateDao { }); return callBack.getResults(); } - + + /** + * + * @param rssis + * @return + */ public boolean saveRssiRecord(RssiRecord... rssis){ return internal_saveData(rssis); } + /** + * + * @return + */ public List getRssiRecord(){ return internal_getData(RssiRecord.class); } + + /** + * + * @param locationID + * @return + */ public List getRssiRecord(Integer locationID){ if(locationID == null) return getRssiRecord(); @@ -117,19 +169,44 @@ public class HibernateDao { }); return callBack.getResults(); } - + + /** + * + * @return + */ public List getLocations(){ return internal_getData(Location.class); } - + + /** + * + * @param aps + * @return + */ public boolean saveAccessPoint (final AccessPoint... aps) { return internal_saveData(aps); } + + /** + * + * @return + */ public List getAccessPoint () { return internal_getData(AccessPoint.class); } - + + /** + * + * @param map + * @return + */ public boolean saveMap(final Map map){return internal_saveData(map);} + + /** + * + * @param mapId + * @return + */ public Map getMap(int mapId){ TransactionCallBack callBack = execTransactionProcess((session)->{ TransactionCallBack reply = new TransactionCallBack(); @@ -145,6 +222,11 @@ public class HibernateDao { return (callBack.getResults().isEmpty()?null:(Map)callBack.getResults().get(0)); } + /** + * + * @param apMacAddress + * @return + */ public List getAccessPoints(String apMacAddress) { TransactionCallBack callBack = execTransactionProcess((session)->{ TransactionCallBack reply = new TransactionCallBack(); @@ -163,7 +245,11 @@ public class HibernateDao { return reply; } - + /** + * + * @param location + * @return + */ public int saveLocation(Location location) { TransactionCallBack callBack = execTransactionProcess((session)->{ TransactionCallBack reply = new TransactionCallBack(); @@ -177,6 +263,12 @@ public class HibernateDao { return (Integer)callBack.results.get(0); return -1; } + + /** + * + * @param Location + * @return + */ public Location getLocation(int Location) { TransactionCallBack callBack = execTransactionProcess((session)->{ TransactionCallBack reply = new TransactionCallBack(); @@ -192,11 +284,19 @@ public class HibernateDao { return (callBack.getResults().isEmpty()?null:(Location)callBack.getResults().get(0)); } - + /** + * This functional interface's purpose is to define a common + * type to give process to internal methods. + */ private interface ITransactionProcess{ TransactionCallBack exec(Session tr); } - + + /** + * Class designed to contains results from transaction process. + * + * @param + */ private class TransactionCallBack{ private boolean status; private List results; diff --git a/src/main/java/core/repository/AccessPoint.java b/src/main/java/core/repository/AccessPoint.java index 527a21e..3567995 100644 --- a/src/main/java/core/repository/AccessPoint.java +++ b/src/main/java/core/repository/AccessPoint.java @@ -8,7 +8,7 @@ import javax.persistence.*; */ @Entity @Table(name ="ACCESS_POINT") -public class AccessPoint implements Serializable{ +public class AccessPoint implements IJavaBean{ @Id @GeneratedValue private int id; diff --git a/src/main/java/core/repository/IJavaBean.java b/src/main/java/core/repository/IJavaBean.java new file mode 100644 index 0000000..99c43f3 --- /dev/null +++ b/src/main/java/core/repository/IJavaBean.java @@ -0,0 +1,11 @@ +package core.repository; + +import java.io.Serializable; + +/** + * Common type shared by all javabeans created for this positioning server + * + * Created by Notmoo on 17/06/2017. + */ +public interface IJavaBean extends Serializable{ +} diff --git a/src/main/java/core/repository/Location.java b/src/main/java/core/repository/Location.java index 970a768..a81076a 100644 --- a/src/main/java/core/repository/Location.java +++ b/src/main/java/core/repository/Location.java @@ -8,7 +8,7 @@ import java.io.Serializable; */ @Entity @Table(name = "LOCATION") -public class Location implements Serializable { +public class Location implements IJavaBean { @Id @GeneratedValue private int id; private Double x, y; diff --git a/src/main/java/core/repository/Map.java b/src/main/java/core/repository/Map.java index 55d55b3..6d07a9e 100644 --- a/src/main/java/core/repository/Map.java +++ b/src/main/java/core/repository/Map.java @@ -8,7 +8,7 @@ import java.io.Serializable; */ @Entity @Table(name = "MAP") -public class Map implements Serializable{ +public class Map implements IJavaBean{ @Id @GeneratedValue private int id; private Double x_topLeft, y_topLeft; diff --git a/src/main/java/core/repository/RssiRecord.java b/src/main/java/core/repository/RssiRecord.java index c96e09e..37972aa 100644 --- a/src/main/java/core/repository/RssiRecord.java +++ b/src/main/java/core/repository/RssiRecord.java @@ -8,7 +8,7 @@ import java.io.Serializable; */ @Entity @Table (name = "RSSI_RECORD") -public class RssiRecord implements Serializable { +public class RssiRecord implements IJavaBean { @Id @GeneratedValue private int id; diff --git a/src/main/java/core/repository/TempRssi.java b/src/main/java/core/repository/TempRssi.java index 6f648bd..0bb3196 100644 --- a/src/main/java/core/repository/TempRssi.java +++ b/src/main/java/core/repository/TempRssi.java @@ -7,7 +7,7 @@ import javax.persistence.*; */ @Entity @Table (name = "TEMP_RSSI") -public class TempRssi { +public class TempRssi implements IJavaBean{ @Id @GeneratedValue private int id; diff --git a/src/main/java/core/service/CalibrationService.java b/src/main/java/core/service/CalibrationService.java index 48170b9..3e2e3a9 100644 --- a/src/main/java/core/service/CalibrationService.java +++ b/src/main/java/core/service/CalibrationService.java @@ -8,6 +8,9 @@ import core.repository.RssiRecord; import java.util.List; /** + * CalibrationService is a service class providing a way to register new calibration datas and new locations, + * that can be used afterwards to compute locations. + * * Created by Guillaume on 09/05/2017. */ public class CalibrationService { diff --git a/src/main/java/core/service/MapService.java b/src/main/java/core/service/MapService.java index 9f0e344..a33abaa 100644 --- a/src/main/java/core/service/MapService.java +++ b/src/main/java/core/service/MapService.java @@ -4,6 +4,9 @@ import core.dao.HibernateDao; import core.repository.Map; /** + * MapService is a service class providing methods to access map data + * stored in the database according to a map id. + * * Created by Guillaume on 29/05/2017. */ public class MapService { diff --git a/src/main/java/core/service/MeasurementService.java b/src/main/java/core/service/MeasurementService.java index ef8473a..c18e3b1 100644 --- a/src/main/java/core/service/MeasurementService.java +++ b/src/main/java/core/service/MeasurementService.java @@ -7,6 +7,10 @@ import core.repository.TempRssi; import java.util.List; /** + * MesaurementService is a service class providing methods to register positioning data. + * One shouldn't use this service to registrer calibration data, as a dedicated service class + * has been made to handle this kind of registrations. + * * Created by Guillaume on 29/05/2017. */ public class MeasurementService { @@ -16,7 +20,13 @@ public class MeasurementService { public MeasurementService(){ dao = new HibernateDao(); } - + + /** + * Register into the database a measured positioning data. + * @param apMacAddr mac address of access point that measured the data + * @param clientMacAddr mac address of client that has been use as base for measurement + * @param val value measured + */ public void registerMeasurement(String apMacAddr, String clientMacAddr, double val){ List aps = dao.getAccessPoints(apMacAddr); diff --git a/src/main/java/core/service/PositioningService.java b/src/main/java/core/service/PositioningService.java index 1d6526d..4aee212 100644 --- a/src/main/java/core/service/PositioningService.java +++ b/src/main/java/core/service/PositioningService.java @@ -1,6 +1,5 @@ package core.service; -import core.dao.DebianDao; import core.dao.HibernateDao; import core.repository.Location; import core.repository.RssiRecord; @@ -10,24 +9,23 @@ import java.util.ArrayList; import java.util.List; /** + * PositioningService is a service class designed to provide methods to compute one's location using measured data. + * + * To register measured data, please use {@link MeasurementService}. To register calibration data, please use {@link CalibrationService} * Created by Guillaume on 09/05/2017. */ public class PositioningService { - private static final double DEFAULT_POSITIONING_PRECISION = 7.5; - private HibernateDao hibDao; - private DebianDao debDao; public PositioningService () { - this.debDao = new DebianDao(); this.hibDao = new HibernateDao(); } - public Location getLocation (String ipAddr) { + public Location getLocation (String macAddr) { //Liste des RSSISample associé à un ap, mesuré pour un client - List clientRssi = hibDao.getTempRssi(debDao.getMacAddr(ipAddr)); + List clientRssi = hibDao.getTempRssi(macAddr); if(clientRssi.size()>=3) { diff --git a/src/main/java/core/utils/HibernateUtil.java b/src/main/java/core/utils/HibernateUtil.java index 56b5f19..d5ac593 100644 --- a/src/main/java/core/utils/HibernateUtil.java +++ b/src/main/java/core/utils/HibernateUtil.java @@ -3,6 +3,9 @@ package core.utils; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; +/** + * Singleton class granting access to Hibernate's session, built from annotations and hibernate config file + */ public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); diff --git a/src/main/java/servlet/APCalibrationServlet.java b/src/main/java/servlet/APCalibrationServlet.java index e052b30..3b67570 100644 --- a/src/main/java/servlet/APCalibrationServlet.java +++ b/src/main/java/servlet/APCalibrationServlet.java @@ -10,6 +10,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** + * Servlet designed to receive registration requests about calibration data. + * * Created by Guillaume on 07/06/2017. */ public class APCalibrationServlet extends HttpServlet { diff --git a/src/main/java/servlet/APMeasurementServlet.java b/src/main/java/servlet/APMeasurementServlet.java index 40676b5..d015404 100644 --- a/src/main/java/servlet/APMeasurementServlet.java +++ b/src/main/java/servlet/APMeasurementServlet.java @@ -9,6 +9,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** + * Servlet designed to receive registration requests about positioning data. + * * Created by Guillaume on 29/05/2017. */ public class APMeasurementServlet extends HttpServlet { diff --git a/src/main/java/servlet/CalibrationServlet.java b/src/main/java/servlet/CalibrationServlet.java index 33d16a6..74dc675 100644 --- a/src/main/java/servlet/CalibrationServlet.java +++ b/src/main/java/servlet/CalibrationServlet.java @@ -14,6 +14,8 @@ import java.net.InetAddress; import java.util.Random; /** + * Servlet handling calibration request coming from clients. + * * Created by Guillaume on 15/05/2017. */ public class CalibrationServlet extends HttpServlet{ @@ -60,10 +62,15 @@ public class CalibrationServlet extends HttpServlet{ execute(servletRequest, servletResponse); } + /** + * Method broadcasting UPD request to AP, request asking fo calibration data. + * @param clientMacAddress mac address of client on which ap's measurement will be based + * @param locationId id of corresponding location in database + */ private void multicastCalibrationRequest(String clientMacAddress, int locationId){ try (DatagramSocket socket = new DatagramSocket(4445)){ - byte[] buf = new byte[256]; + byte[] buf; String dString = "{\"CALIB\": \"" + clientMacAddress + "\", \"SERV\": \"" + Inet4Address.getLocalHost().getHostAddress()+"\", \"LOC_ID\": \""+locationId+"\"}"; buf = dString.getBytes(); diff --git a/src/main/java/servlet/MapByteServlet.java b/src/main/java/servlet/MapByteServlet.java index 7f29b51..d364a68 100644 --- a/src/main/java/servlet/MapByteServlet.java +++ b/src/main/java/servlet/MapByteServlet.java @@ -10,6 +10,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** + * Servlet designed to access to map image bytes. This kind of request is usually sent by clients. + * * Created by Guillaume on 29/05/2017. */ public class MapByteServlet extends HttpServlet { diff --git a/src/main/java/servlet/MapScaleServlet.java b/src/main/java/servlet/MapScaleServlet.java index 0c46f10..95107e9 100644 --- a/src/main/java/servlet/MapScaleServlet.java +++ b/src/main/java/servlet/MapScaleServlet.java @@ -10,6 +10,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** + * Servlet designed to access to map scale, which can be use to convert real-life coordinates to on-screen coordinates. This kind of request is usually sent by clients. + * * Created by Guillaume on 29/05/2017. */ public class MapScaleServlet extends HttpServlet { diff --git a/src/main/java/servlet/PositioningServlet.java b/src/main/java/servlet/PositioningServlet.java index ab51087..1baef75 100644 --- a/src/main/java/servlet/PositioningServlet.java +++ b/src/main/java/servlet/PositioningServlet.java @@ -16,6 +16,8 @@ import java.net.InetAddress; import static java.lang.Thread.sleep; /** + * Servlet handling positioning request coming from clients. + * * Created by Guillaume on 15/05/2017. */ public class PositioningServlet extends HttpServlet{ @@ -30,10 +32,10 @@ public class PositioningServlet extends HttpServlet{ multicastPositioningRequest(clientMacAddr); - Location loc = null; + Location loc; do{ try{ - sleep(500l); + sleep(500L); } catch (InterruptedException e) { e.printStackTrace(); } @@ -56,11 +58,16 @@ public class PositioningServlet extends HttpServlet{ throws ServletException, IOException { service(servletRequest, servletResponse); } - + + /** + * Method broadcasting UPD request to AP, request asking for positioning data. + * + * @param clientMacAddress mac address of client on which ap's measurement will be based + */ private void multicastPositioningRequest(String clientMacAddress){ try (DatagramSocket socket = new DatagramSocket(4445)){ - byte[] buf = new byte[256]; + byte[] buf; String dString = "{\"LOCATE\": \"" + clientMacAddress + "\", \"SERV\": \"" + Inet4Address.getLocalHost().getHostAddress()+"\"}"; buf = dString.getBytes(); diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index c8b81fb..7e15262 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -10,7 +10,7 @@ lo53_user lo53 1 - create + update -- libgit2 0.21.4