-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsamp.java
More file actions
158 lines (133 loc) · 5.56 KB
/
samp.java
File metadata and controls
158 lines (133 loc) · 5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import java.util.*;
import java.io.*;
import java.net.*;
// Interface for trackable entities
interface Trackable {
String getId();
String getName();
Map<String, Object> getStatus();
}
// Base class for shared train properties
class TrainBase {
protected String id;
protected String name;
public TrainBase(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
// Train class that extends TrainBase and implements Trackable
class Train extends TrainBase implements Trackable {
public Train(String id, String name) {
super(id, name);
}
@Override
public Map<String, Object> getStatus() {
return TrainTracker.getTrainStatus(this.id);
}
}
// TrainTracker class for handling train tracking logic
class TrainTracker {
public static Map<String, Object> getTrainStatus(String trainNo) {
String url = "https://rappid.in/apis/train.php?train_no=" + trainNo;
try {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return parseJSON(response.toString());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static Map<String, Object> parseJSON(String json) {
Map<String, Object> result = new HashMap<>();
if (json.contains("\"success\":true")) {
result.put("success", true);
result.put("train_name", extractValue(json, "train_name"));
result.put("message", extractValue(json, "message"));
result.put("updated_time", extractValue(json, "updated_time"));
String dataSection = extractArray(json, "data");
List<Map<String, String>> stations = parseArray(dataSection);
result.put("data", stations);
} else {
result.put("success", false);
}
return result;
}
private static String extractValue(String json, String key) {
int start = json.indexOf("\"" + key + "\":\"") + key.length() + 4;
int end = json.indexOf("\"", start);
return json.substring(start, end);
}
private static String extractArray(String json, String key) {
int start = json.indexOf("\"" + key + "\":[") + key.length() + 3;
int end = json.indexOf("]", start) + 1;
return json.substring(start, end);
}
private static List<Map<String, String>> parseArray(String array) {
List<Map<String, String>> list = new ArrayList<>();
String[] items = array.split("\\},\\{");
for (String item : items) {
Map<String, String> map = new HashMap<>();
String[] fields = item.replaceAll("[\\[\\]\\{\\}]", "").split(",");
for (String field : fields) {
String[] keyValue = field.split(":");
if (keyValue.length == 2) {
String key = keyValue[0].replace("\"", "").trim();
String value = keyValue[1].replace("\"", "").trim();
map.put(key, value);
}
}
list.add(map);
}
return list;
}
}
// Main class for program execution
public class samp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Welcome to Train Tracking System");
System.out.print("Enter Train Number to Track: ");
String trainId = scanner.nextLine();
Train train = new Train(trainId, "Unknown Train");
Map<String, Object> trainStatus = train.getStatus();
if (trainStatus != null && (boolean) trainStatus.get("success")) {
String trainName = (String) trainStatus.get("train_name");
String message = (String) trainStatus.get("message");
String updatedTime = (String) trainStatus.get("updated_time");
System.out.println("\nTracking Train: " + trainName);
System.out.println(message);
System.out.println("Last Updated: " + updatedTime);
List<Map<String, String>> stations = (List<Map<String, String>>) trainStatus.get("data");
System.out.println("\nStation Details:");
System.out.printf("%-20s %-10s %-10s %-10s %-10s %-10s%n", "Station Name", "Distance", "Timing", "Delay", "Platform", "Halt");
for (Map<String, String> station : stations) {
System.out.printf("%-20s %-10s %-10s %-10s %-10s %-10s%n",
station.get("station_name"),
station.getOrDefault("distance", "N/A"),
station.getOrDefault("timing", "N/A"),
station.getOrDefault("delay", "N/A"),
station.getOrDefault("platform", "N/A"),
station.getOrDefault("halt", "N/A"));
}
} else {
System.out.println("Error fetching train status. Please try again later.");
}
scanner.close();
}
}