exo2: Fix and simplify the introspection.
[Project_POO.git] / exo3 / Main.java
1 import java.lang.reflect.Field;
2 import java.lang.reflect.Method;
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.InvocationTargetException;
5 import java.util.Scanner;
6 import java.io.IOException;
7
8 class Main {
9
10 private static void main_orig(String[] args) {
11 Entiers integer = new Entiers(5);
12
13 integer.inserer(1);
14
15 integer.afficher();
16
17 integer.inserer(12);
18
19 integer.afficher();
20
21 integer.inserer(3);
22
23 integer.afficher();
24
25 integer.inserer(0);
26
27 integer.inserer(1);
28
29 integer.afficher();
30
31 integer.supprimer(12);
32
33 integer.afficher();
34 System.out.println("Current size " + integer.getCurrentSize());
35
36 integer.supprimer(1);
37
38 integer.afficher();
39 System.out.println("Current size " + integer.getCurrentSize());
40
41 }
42
43 private static void main_A(String[] args) {
44 if (args.length == 0) {
45 System.out.println("Please run with java Main <class name to inspect>");
46 System.exit(-1);
47 }
48 String className = args[0];
49
50 Class cl = null;
51 try {
52 cl = Class.forName(className);
53 }
54 catch (ClassNotFoundException e) {
55 System.out.println("Entered class name do not exist.");
56 System.exit(-1);
57 }
58
59 Field[] fields = cl.getFields();
60 Method[] methods = cl.getMethods();
61
62 for (int i = 0; i < fields.length; i++) {
63 System.out.println(fields[i]);
64 }
65
66 for (int i = 0; i < methods.length; i++) {
67 System.out.println(methods[i]);
68 }
69 }
70
71 /**
72 * The main() function
73 * @param String[] args main() function arguments array
74 */
75 public static void main(String[] args) {
76 String name = Entiers.class.getName();
77 Class cl = null;
78 Entiers o = null;
79 try {
80 cl = Class.forName(name);
81 o = new Entiers(100);
82 }
83 catch (ClassNotFoundException e) {
84 System.out.println("Class name do not exist.");
85 System.exit(-1);
86 }
87
88 Scanner uInput = null;
89 try {
90 uInput = new Scanner(System.in);
91 System.out.println("Saisir le nom de la methode à invoquer:");
92 String method = uInput.next();
93 //TODO: one can build the input list from the method arguments list and types
94 System.out.println("Saisir l'argument entier paramètre de la méthode:");
95 int integer = uInput.nextInt();
96 Method m = cl.getMethod(method, new Class[]{Integer.class});
97 m.invoke(o, integer);
98 }
99 catch (Exception e) {
100 System.out.println("Erreur:");
101 e.printStackTrace();
102 }
103 finally {
104 try {
105 Method mDisplay = cl.getMethod("afficher");
106 mDisplay.invoke(o);
107 }
108 catch (NoSuchMethodException e) {
109 e.printStackTrace();
110 }
111 catch (IllegalAccessException e) {
112 e.printStackTrace();
113 }
114 catch (InvocationTargetException e) {
115 e.printStackTrace();
116 }
117 uInput.close();
118 }
119 }
120 }