Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.57 KB | None | 0 0
  1. package rmi;
  2. import java.io.*;
  3. import java.rmi.*;
  4.  
  5. public interface IMBroker extends Remote {
  6.     //public String viewOrder(int tableNumber);
  7.     //public void changeOrderStatus(int tableNumber);
  8.     //public void foodIsReady(int tableNumber);
  9.     public String helloWorld() throws RemoteException;
  10. }
  11.  
  12.  
  13. package domain.mediator;
  14.  
  15. import java.rmi.RemoteException;
  16. import java.rmi.server.UnicastRemoteObject;
  17. import java.sql.ResultSet;
  18. import java.sql.SQLException;
  19. import java.text.DateFormat;
  20. import java.text.SimpleDateFormat;
  21. import java.util.ArrayList;
  22. import java.util.Calendar;
  23. import java.util.Date;
  24. import java.util.Observable;
  25. import java.util.Observer;
  26.  
  27. import rmi.MyRemote;
  28.  
  29. import acquaintance.AErrorDialog;
  30. import acquaintance.AIReservation;
  31.  
  32. import foundation.*;
  33. import domain.entity.*;
  34.  
  35. public class MBroker extends UnicastRemoteObject implements IMBroker {
  36.  
  37.     RestaurantCity rc;
  38.     FConnection con;
  39.     Food[] foodList;
  40.     FReader reader;
  41.     FWriter writer;
  42.    
  43.     //Kalder den rigtige constructor
  44.     public MBroker() throws RemoteException {
  45.         this(new FConnection());
  46.     }
  47.    
  48.     //constructor, skaber forbindelse til databasen (foundation)
  49.     public MBroker(FConnection con) throws RemoteException {
  50.         rc = new RestaurantCity();
  51.         this.con = con;
  52.         reader = con.getReader();
  53.         writer = con.getWriter();  
  54.     }
  55.     public MBroker(FConnection con, RestaurantCity rc) throws RemoteException{
  56.         this.con = con;
  57.         this.rc = rc;
  58.         reader = con.getReader();
  59.         writer = con.getWriter();
  60.     }
  61.     public FConnection getFConnection(){
  62.         return con;
  63.     }
  64.     public RestaurantCity getRestaurantCity(){
  65.         return rc;
  66.     }
  67.    
  68.     //Brugsmønster B01 "opret bestilling"
  69.     public void makeOrder(int tableNumber, Food[] foods, String comment) {
  70.         //Kalder først metoden i RC
  71.         rc.makeOrder(tableNumber, foods, comment);
  72.        
  73.         //Opretter en unix epoch date dato til databasen
  74.         String date = Long.toString(System.currentTimeMillis());
  75.        
  76.         //Kommaseparerer retterne
  77.         String str = new String();
  78.         for(Food mad : foods){
  79.             str += "," + mad.getID();
  80.         }
  81.        
  82.         //Tilføjer til databasen.
  83.         try {
  84.             writer.executeUpdate("INSERT INTO orders (tablenumber, food, comment, date) VALUES ('" + tableNumber + "','" + str.substring(1) + "','" + comment + "','" + date +"')");
  85.         } catch (SQLException e) {
  86.             new AErrorDialog(e.getMessage());
  87.         }
  88.     }
  89.    
  90.     //brugsmønster B12 - se bestilling
  91.     public String viewOrder(int tableNumber){
  92.         return rc.viewOrder(tableNumber);
  93.     }
  94.        
  95.     //Brugsmønster B04 - betaling
  96.     public String pay(int tableno) {
  97.         String kvit = rc.pay(tableno);
  98.         return kvit;
  99.     }
  100.    
  101.     //Undersøger om et bord er betalt
  102.     public boolean getPaymentStatus(int tableNumber){
  103.         return rc.getPaymentStatus(tableNumber);
  104.     }
  105.    
  106.     //Returnerer alle retter (bruges internt i Actioner eller Broker
  107.     public Food[] getFoods(){
  108.         ArrayList<Food> foodArray = new ArrayList<Food>();
  109.              try {
  110.                  //Henter alle retter
  111.                  ResultSet rs = reader.executeQuery("SELECT * FROM food ORDER BY id ASC");
  112.                  while (rs.next()){    
  113.                      Food food = null;
  114.                      int foodId = rs.getInt(1);
  115.                      String name = rs.getString("navn");
  116.                      double price = Double.parseDouble(rs.getString("pris"));
  117.                      int slags = Integer.parseInt(rs.getString("slags"));
  118.                      
  119.                      //Afhængigt af slagsen (typen, kategorien), laves det rigtige objekt.
  120.                      if(slags == 0){
  121.                          food = new Beverage(foodId, name, price);}
  122.                      if(slags == 1){
  123.                          food = new Appetizer(foodId, name, price);}
  124.                      if(slags == 2){
  125.                          food = new Maindish(foodId, name, price);}
  126.                      if(slags == 3){
  127.                          food = new Dessert(foodId, name, price);}
  128.                      if(slags == 4){
  129.                          food = new Accessory(foodId, name, price);}
  130.  
  131.                      foodArray.add(food);
  132.                 }
  133.                                        
  134.              }
  135.              catch(Exception e) {
  136.                     new AErrorDialog("Exception: " + e.getMessage());
  137.              }
  138.              
  139.              //Laver arraylisten om til et array og returnerer det.
  140.              foodList = foodArray.toArray(new Food[0]);
  141.              return foodList;
  142.              
  143.     }
  144.  
  145.     //Brugsmønster B06 - opret reservation (denne med password)
  146.     public void makeReservation(int phoneno, Date reservationDate,int numberOfPersons, String password) {
  147.         Reservation reservation = rc.makeReservation(phoneno, reservationDate, numberOfPersons, password);
  148.        
  149.         //Parser datoen
  150.         DateFormat df = new SimpleDateFormat("HH:mm dd/MM-yyyy");
  151.         String timeDate = df.format(reservationDate);
  152.        
  153.         int reservationID = reservation.getReservationID();
  154.         try {
  155.         //Indsætter i tabellen    
  156.         writer.executeUpdate("INSERT INTO reservations (Telefonnummer, Dato, AntalPersoner, Password, ReservationsID)" +
  157.                 "VALUES ('"+phoneno+"','"+timeDate+"','"+numberOfPersons+"','"+password+"','"+reservationID+"')");
  158.         }
  159.         catch(Exception e) {
  160.             new AErrorDialog(e.getMessage());
  161.         }
  162.     }
  163.    
  164.     //Brugsmønster B06 - opret reservation (læs kommentarer ovenover)
  165.     public void makeReservation(int phoneno, Date reservationDate,int numberOfPersons){
  166.         Reservation reservation = rc.makeReservation(phoneno, reservationDate, numberOfPersons);
  167.        
  168.         DateFormat df = new SimpleDateFormat("HH:mm dd/MM-yyyy");
  169.        
  170.         String timeDate = df.format(reservationDate);
  171.         int reservationID = reservation.getReservationID();
  172.         try {
  173.             // reservations (id, telefonnummer, dato, antalpersoner, password, reservationid)
  174.    
  175.             writer.executeUpdate("INSERT INTO reservations (telefonnummer, dato, antalPersoner, reservationsID)" +
  176.             "VALUES ('"+phoneno+"','"+timeDate+"','"+numberOfPersons+"','"+reservationID+"')");
  177.             }
  178.         catch(Exception e) {
  179.             new AErrorDialog(e.getMessage());
  180.         }
  181.     }
  182.    
  183.     //Fjerner reservation fra databasen. Bruges ved "tildel reservation"
  184.     public void removeReservation(int reservationID){
  185.         try{
  186.         writer.executeUpdate("DELETE FROM reservations WHERE reservationsID='"+reservationID+"'");
  187.         }
  188.         catch(Exception e) {
  189.             new AErrorDialog(e.getMessage());
  190.         }
  191.     }
  192.    
  193.     //Henter alle reservationer fra databasen
  194.     public Reservation[] getReservations(){
  195.         ArrayList<Reservation> reservationsArray = new ArrayList<Reservation>();
  196.         try{
  197.             ResultSet rs = reader.executeQuery("SELECT * FROM reservations ORDER BY id ASC");
  198.              while (rs.next()){    
  199.                 Reservation reservation = null;
  200.                 int phoneno = Integer.parseInt(rs.getString("telefonnummer"));
  201.                 DateFormat df = new SimpleDateFormat("HH:mm dd/MM-yyyy");
  202.                 Date timeDate = df.parse(rs.getString("dato"));
  203.                 int numberOfPersons = Integer.parseInt(rs.getString("antalPersoner"));
  204.                 String password = rs.getString("password");
  205.                 int reservationID = Integer.parseInt(rs.getString("reservationsID"));
  206.                
  207.                 //Opretter reservationen med de hentede data og sætter det korrekte ID.
  208.                 reservation = new Reservation(phoneno, timeDate, numberOfPersons, password);
  209.                 reservation.setReservationID(reservationID);
  210.                 reservationsArray.add(reservation);
  211.              }
  212.         }
  213.         catch(Exception e) {
  214.             new AErrorDialog(e.getMessage());
  215.         }
  216.         //Returnerer det som et rigtigt array (fra ArrayList)
  217.          return reservationsArray.toArray(new Reservation[0]);
  218.     }
  219.    
  220.     //Undersøger om bordet er optaget
  221.     public boolean getTableAvailabillity(int tableNumber){
  222.         return rc.getTableAvailabillity(tableNumber);
  223.     }
  224.    
  225.     //Sætter et bord til optaget, med reservationsID
  226.     public void assignTable(int tableNumber, int reservationID){
  227.         rc.assignTable(tableNumber, reservationID);
  228.     }
  229.    
  230.     //Sætter et bord til optaget
  231.     public void assignTable(int tableNumber){
  232.         rc.assignTable(tableNumber);
  233.     }
  234.    
  235.     //Sætter et bord klar
  236.     public void clearTable(int tableNumber){
  237.         rc.clearTable(tableNumber);
  238.     }
  239.  
  240.     //Tilføjer Observers til RC
  241.     public void addTableObserver(Observer o) {
  242.         rc.addObserver(o);     
  243.     }
  244.    
  245.     //Ændrer den interne ordre status
  246.     public void changeOrderStatus(int tableNumber){
  247.         rc.changeOrderStatus(tableNumber);
  248.     }
  249.    
  250.     //Fjerner en ordre
  251.     public void removeOrder(int tableNumber){
  252.         rc.removeOrder(tableNumber);
  253.     }
  254.    
  255.     //Sætter maden klar. B13
  256.     public void foodIsReady(int tableNumber){
  257.         rc.foodIsReady(tableNumber);
  258.     }
  259.     public String seeDoneOrders(int tableno){
  260.         return rc.seeDoneOrders(tableno);
  261.     }
  262.    
  263.     //Brugsmønster 08 - Analyse af ordre
  264.     public double[][] makeOrderAnalysis() {
  265.  
  266.        
  267.         ResultSet rs;
  268.    
  269.         try {
  270.             //Lav en dato så vi kun henter tom. 2009
  271.             DateFormat df1 = new SimpleDateFormat("dd/MM-yyyy");
  272.             Date dato = df1.parse("31/05-2009");
  273.             Calendar kalendar = Calendar.getInstance();
  274.             kalendar.setTime(dato);
  275.             String strTime = Long.toString(kalendar.getTimeInMillis());        
  276.            
  277.             //Henter alle ordre fra databasen, og lægger det ind i "ordre"
  278.             rs = reader.executeQuery("SELECT food, date FROM orders WHERE date < "+ strTime);
  279.             ArrayList<String[]> ordre = new ArrayList<String[]>();
  280.            
  281.             while (rs.next()) {
  282.                 String date = rs.getString("date");
  283.                 String food = rs.getString("food");
  284.                 String[] tmpArray = {date,food};
  285.                 ordre.add(tmpArray);
  286.             }
  287.             //Henter alle foods, som bruges til at bestemme slags mad
  288.             Food[] allFoods = getFoods();
  289.            
  290.             //Array til at gemme antal retter ([5] = år, [28] = dage)
  291.             int[][] data = new int[5][28];
  292.            
  293.             //Gennemløber alle ordre
  294.             for (String[] singleOrder : ordre) {
  295.                 //Finder dag og år pr. ordre
  296.                 String time = singleOrder[0];
  297.                 String food = singleOrder[1];
  298.                 Calendar kalender = Calendar.getInstance();
  299.                 kalender.setTimeInMillis(Long.parseLong(time));
  300.                 DateFormat df = new SimpleDateFormat("dd");
  301.                 DateFormat fd = new SimpleDateFormat("yyyy");
  302.                 int day = Integer.parseInt(df.format(kalender.getTime()));
  303.                 int year = Integer.parseInt(fd.format(kalender.getTime()));
  304.                
  305.                 //Tæller antal gyldige retter i ordren
  306.                 int dishes = 0;
  307.                 String[] mad = food.split(",");
  308.                 for (String strFoodID : mad) {
  309.                     int foodId = Integer.parseInt(strFoodID)-1;
  310.                     if (allFoods[foodId].getCategory() > 0 && allFoods[foodId].getCategory() < 4) {;
  311.                         dishes++;
  312.                     }
  313.                 }
  314.                 data[Math.abs(2005-year)][day-1] += dishes;
  315.                
  316.             }
  317.            
  318.             //Gør resultat arrays klar
  319.             double[] sampleMean = new double[28];
  320.             double[] sampleVarians = new double[28];
  321.             double konfidensTop[] = new double[28];
  322.             for (int i = 0; i < 28; i++) {
  323.                 sampleMean[i] = 0;
  324.                 sampleVarians[i] = 0;
  325.                 konfidensTop[i] = 0;
  326.             }
  327.            
  328.             //Udregner sample mean
  329.             for (int y = 0; y < data.length; y++) {
  330.                 for (int d = 0; d < data[y].length; d++) {
  331.                     sampleMean[d] += (1/(Double.parseDouble(Integer.toString(data.length))))*data[y][d];
  332.                 }
  333.             }  
  334.            
  335.             //Udregner varians
  336.             for (int y = 0; y < data.length; y++) {
  337.                 for (int d = 0; d < data[y].length; d++) {
  338.                     sampleVarians[d] += (1/(Double.parseDouble(Integer.toString(data.length))-1))*Math.pow((data[y][d]-sampleMean[d]),2);
  339.                 }
  340.             }  
  341.            
  342.             //Beregner konfidensintervallet  alpha er 0.05
  343.             double z = 1.96;
  344.             double n = data.length;
  345.  
  346.             for (int m = 0; m < sampleVarians.length; m++) {
  347.                 konfidensTop[m] = sampleMean[m]+(Math.sqrt(sampleVarians[m])/Math.sqrt(n))*z;
  348.             }
  349.            
  350.             //Returnerer output
  351.             double[][] output = {sampleMean, konfidensTop};
  352.             return output;
  353.            
  354.         } catch (Exception e) {
  355.             new AErrorDialog(e.getMessage());
  356.             return null;
  357.         }
  358.     }
  359.  
  360.     public void changeOrderstatus(int tableNumber) throws RemoteException {
  361.         // TODO Auto-generated method stub
  362.        
  363.     }
  364.  
  365.     public MBroker getBroker() throws RemoteException {
  366.         // TODO Auto-generated method stub
  367.         return null;
  368.     }
  369.  
  370.     public String Hej() throws RemoteException {
  371.         // TODO Auto-generated method stub
  372.         return null;
  373.     }
  374.    
  375.     public String helloWorld() throws RemoteException {
  376.         String str = "Hello world";
  377.         System.out.println(str);
  378.         return str;
  379.     }
  380. }
  381.  
  382.  
  383. package rmi;
  384.  
  385.  
  386. import java.rmi.registry.LocateRegistry;
  387. import java.rmi.registry.Registry;
  388. import java.util.Observer;
  389.  
  390. public class Client {
  391.  
  392.     public Client() {
  393.     }
  394.    
  395.     public void Hej() {
  396.         try {
  397.             Registry registry = LocateRegistry.getRegistry(9999);
  398.             MyRemote stub = (MyRemote) registry.lookup("dej");
  399.            
  400.             String response = stub.Hej();
  401.             System.out.println("response: " + response);
  402.         } catch (Exception e) {
  403.             System.err.println("Client exception: " + e.toString());
  404.             e.printStackTrace();
  405.         }
  406.     }
  407.     public IMBroker getBroker() {
  408.         try {
  409.             Registry registry = LocateRegistry.getRegistry(9999);
  410.            
  411.             IMBroker response = (IMBroker) registry.lookup("dej");
  412.             System.out.println(response.helloWorld());
  413.             return response;
  414.         } catch (Exception e) {
  415.             System.err.println("Client exception: " + e.toString());
  416.             e.printStackTrace();
  417.             return null;
  418.         }
  419.     }
  420.  
  421.     public String viewOrder(int tableNumber){
  422.         String response = null;
  423.         /*try {
  424.             Registry registry = LocateRegistry.getRegistry(1099);
  425.             MyRemote stub = (MyRemote) registry.lookup("yello");
  426.        
  427.             response = stub.viewOrder(tableNumber);
  428.             System.out.println("response: " + response);
  429.         } catch (Exception e) {
  430.             System.err.println("Client exception: " + e.toString());
  431.             e.printStackTrace();
  432.         }*/
  433.     return response;
  434.     }
  435.     public void foodIsReady(int tableNumber){
  436.         /*
  437.         try {
  438.             Registry registry = LocateRegistry.getRegistry(1099);
  439.             MyRemote stub = (MyRemote) registry.lookup("yello");
  440.        
  441.             stub.foodIsReady(tableNumber);
  442.  
  443.         } catch (Exception e) {
  444.             System.err.println("Client exception: " + e.toString());
  445.             e.printStackTrace();
  446.         }*/
  447.     }
  448.     public void changeOrderstatus(int tableNumber){
  449.         /*
  450.         try {
  451.             Registry registry = LocateRegistry.getRegistry(1099);
  452.             MyRemote stub = (MyRemote) registry.lookup("yello");
  453.        
  454.             stub.changeOrderstatus(tableNumber);
  455.  
  456.         } catch (Exception e) {
  457.             System.err.println("Client exception: " + e.toString());
  458.             e.printStackTrace();
  459.         }*/
  460.     }
  461.     public void addTableObserver(Observer o){
  462.         /*
  463.         try {
  464.             Registry registry = LocateRegistry.getRegistry(1099);
  465.             MyRemote stub = (MyRemote) registry.lookup("yello");
  466.        
  467.             stub.addTableObserver(o);
  468.  
  469.         } catch (Exception e) {
  470.             System.err.println("Client exception: " + e.toString());
  471.             e.printStackTrace();
  472.         }*/
  473.     }
  474. }
  475.  
  476.  
  477.  
  478. package rmi;
  479.  
  480. import java.rmi.*;
  481. import java.rmi.registry.LocateRegistry;
  482. import java.rmi.registry.Registry;
  483. import java.util.Observer;
  484. import java.rmi.server.UnicastRemoteObject;
  485.  
  486. import domain.mediator.MBroker;
  487.  
  488. public class Server implements MyRemote {
  489.     MBroker broker;
  490.  
  491.  
  492.     public Server(MBroker broker) throws RemoteException{
  493.         this.broker = broker;
  494.     }
  495.     public String viewOrder(int tableNumber){
  496.         return broker.viewOrder(tableNumber);
  497.     }
  498.  
  499.     public void foodIsReady(int tableNumber){
  500.         broker.foodIsReady(tableNumber);
  501.     }
  502.  
  503.     public void changeOrderstatus(int tableNumber){
  504.         broker.changeOrderStatus(tableNumber);
  505.     }
  506.  
  507.     public void addTableObserver(Observer o) throws RemoteException {
  508.         broker.addTableObserver(o);
  509.     }
  510.     public String Hej(){
  511.         return "HEJ";
  512.     }
  513.     public MBroker getBroker(){
  514.         return broker;
  515.        
  516.     }
  517.    
  518.         public void go(){
  519.             try {
  520.                 Server obj = new Server(broker);
  521.                 MyRemote stub = (MyRemote) UnicastRemoteObject.exportObject(obj, 0);
  522.  
  523.                 // Bind the remote object's stub in the registry
  524.                 //Registry registry = LocateRegistry.getRegistry();
  525.                 Registry registry = LocateRegistry.createRegistry(9999);
  526.                 registry.rebind("dej", broker);
  527.                
  528.                 System.err.println("Server ready");
  529.             } catch (Exception e) {
  530.                 System.err.println("Server exception: " + e.toString());
  531.                 e.printStackTrace();
  532.             }
  533.     }
  534. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement