Project

General

Profile

Statistics
| Revision:

root / src / TestApp.java

History | View | Annotate | Download (5.15 KB)

1
import java.io.IOException;
2
import java.net.*;
3
import java.util.Scanner;
4

    
5
import static utils.Utils.BUFFER_SIZE;
6

    
7
//TODO: parse args for reclaim and delete not fully functional
8
//grupo 11
9

    
10
public class TestApp {
11

    
12
    private static String hostname = "localhost";
13
    private static int portNumber;
14
    private static String protocolRequest;
15
    private static String filePath;
16
    private static int replicationDegree;
17

    
18

    
19
    public static void main(String[] args) throws SocketException, UnknownHostException {
20
        mainMenu();
21
        }
22

    
23
    private static void mainMenu() throws SocketException, UnknownHostException {
24

    
25
        System.out.println("1- Backup a file");
26
        System.out.println("2- Restore a file");
27
        System.out.println("0- Exit");
28

    
29

    
30
        Scanner in = new Scanner(System.in);
31
        int option = in.nextInt();
32

    
33
        switch(option){
34
            case 0:
35
                System.out.println("exiting application...");
36
                break;
37
            case 1:
38
                backupMenu();
39
                break;
40
            case 2:
41
                restoreMenu();
42
                break;
43

    
44
        }
45
    }
46

    
47
    private static void restoreMenu() throws SocketException, UnknownHostException {
48
        String[] args = new String[4];
49

    
50
        System.out.println("Please insert the peer port number which you want to send the request");
51

    
52
        Scanner in = new Scanner(System.in);
53
        String portnumber = in.nextLine();
54

    
55
        args[0] = portnumber;
56

    
57
        args[1] = "RESTORE";
58

    
59
        System.out.println("Specify the file name you want to restore ");
60

    
61
        String filename = in.nextLine();
62

    
63
        args[2] = filename;
64

    
65
        if(!parseArgs(args)) return;
66

    
67
        sendRequest(args);
68

    
69

    
70
    }
71

    
72
    private static void backupMenu() throws SocketException, UnknownHostException {
73
        String[] args = new String[4];
74

    
75
        System.out.println("Please insert the peer port number which you want to send the request");
76

    
77
        Scanner in = new Scanner(System.in);
78
        String portnumber = in.nextLine();
79

    
80
        args[0] = portnumber;
81

    
82
        args[1] = "BACKUP";
83

    
84
        System.out.println("Specify the file name you want to backup (must be inside test folder) ");
85

    
86
        String filename = in.nextLine();
87

    
88
        args[2] = filename;
89

    
90
        System.out.println("Now enter the replication degree");
91
        String replicD = in.nextLine();
92

    
93
        args[3] = replicD;
94

    
95
        if(!parseArgs(args)) return;
96

    
97
        sendRequest(args);
98
        
99
    }
100

    
101
    private static void sendRequest(String[] args) throws SocketException, UnknownHostException {
102
        DatagramSocket socket = new DatagramSocket();
103
        byte[] buffer;
104
        String message = "";
105

    
106
        for(int i = 1; i < args.length; i++){
107
            if(i == args.length -1){
108
                message += args[i];
109
                break;
110
            }
111
            message += args[i] + " ";
112
        }
113

    
114
        buffer = message.getBytes();
115

    
116
        InetAddress address = InetAddress.getByName(hostname);
117
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, portNumber);
118

    
119
        try {
120
            socket.send(packet);
121
        } catch (IOException e) {
122
            e.printStackTrace();
123
        }
124

    
125
        buffer = new byte[BUFFER_SIZE];
126
        packet = new DatagramPacket(buffer, buffer.length);
127

    
128
        //
129
        try {
130
            socket.receive(packet);
131
        } catch (IOException e) {
132
            e.printStackTrace();
133
        }
134

    
135
        String answer = new String(packet.getData(), 0, packet.getLength());
136
        System.out.println("Peer said: " + answer);
137
        socket.close();
138

    
139
        //after request sent and done, come back to main menu
140
        mainMenu();
141
    }
142

    
143
    private static boolean parseArgs(String[] args) {
144
        if(args == null || args.length < 3) {
145
            System.out.println("Usage: java TestApp <peer_ap> <sub_protocol> <opnd_1> <opnd_2>");
146
            return false;
147
        }
148
        String[] peer_ap = args[0].split(":");
149

    
150
        if(peer_ap.length == 1) { //user just gave the port number
151
            portNumber = Integer.parseInt(peer_ap[0]);
152
        }
153
        else if(peer_ap.length == 2) {
154
            hostname = peer_ap[0];
155
            portNumber = Integer.parseInt(peer_ap[1]);
156
        }
157
        else {
158
            System.out.println("Usage: java TestApp <peer_ap> <sub_protocol> <opnd_1> <opnd_2>");
159
            return false;
160
        }
161

    
162
        switch(args[1]) {
163
            case "BACKUP":
164
                protocolRequest = "BACKUP";
165
                filePath = args[2];
166
                if(args[3] == null){
167
                    System.out.println("In backup protocol, you have to specify also the replication degree");
168
                    return false;
169
                }
170
                replicationDegree = Integer.parseInt(args[3]);
171
                break;
172
            case "RESTORE":
173
                protocolRequest = "RESTORE";
174
                filePath = args[2];
175
                break;
176
            case "DELETE":
177
                protocolRequest = "DELETE";
178
                filePath = args[2];
179
                break;
180
            case "RECLAIM":
181
                protocolRequest = "RECLAIM";
182
                break;
183
                default: return false;
184
        }
185

    
186

    
187

    
188

    
189
        return true;
190
    }
191

    
192
}
193