Statistics
| Revision:

root / trunk / libraries / libIverUtiles / src / com / iver / utiles / extensionPoints / ExtensionPoint.java @ 4676

History | View | Annotate | Download (4.96 KB)

1 4320 jjdelcerro
package com.iver.utiles.extensionPoints;
2
3
import java.lang.reflect.InvocationTargetException;
4
import java.util.LinkedHashMap;
5 4676 jorpiell
import java.util.Map;
6 4320 jjdelcerro
7
8
/**
9
 * Esta clase permite registrar extensiones para un punto de extension.
10
 * <br>
11
 * <br>
12
 * La clase se comporta como un Map que mantiene el orden de insercion
13
 * de los elementos, para que puedan ser recorridos en ese orden.
14
 * <br>
15
 * Ademas de registrar las extensiones para un punto de extension, presenta
16
 * metodos para facilitar la creacion de la extension.
17
 * <br>
18
 * A la hora de registrar una extension, mediante el petodo <i>put</i>,
19
 * podremos suministrarle una clase o una instancia que implemente el
20
 * interface IExtensionBuilder. Si le suministramos una clase, cuando
21
 * queramos crear la extension mediante el metodo <i>create</i>, se creara
22
 * una instancia de la clase y se retornara. Si lo que se suministro fue
23
 * una instancia que implementa el interface IExtensionBuilder, se invocara
24
 * al metodo <i>create</i> de esta para crear la extension.
25
 * <br>
26
 * @author jjdelcerro
27
 *
28
 */
29
public class ExtensionPoint extends LinkedHashMap {
30
31
        private static final long serialVersionUID = -5908427725588553371L;
32
33
        private String name;
34
        private String description;
35
36
        /**
37
         * Construye un punto de extension.
38
         * <br>
39
         * @param extensionPointName Nombre del punto de extension.
40
         */
41 4676 jorpiell
        public ExtensionPoint(String extensionPointName) {
42 4320 jjdelcerro
                this.name = extensionPointName;
43
        }
44
45
        /**
46
         * Construye un punto de extension.
47
         * <br>
48
         * @param extensionPointName Nombre del punto de extension
49
         * @param description Descripcion del punto de extension
50
         */
51 4676 jorpiell
        public ExtensionPoint(String extensionPointName, String description) {
52 4320 jjdelcerro
                this.name = extensionPointName;
53
                this.description = description;
54
        }
55
56
        /**
57
         * Retorna el nombre de punto de extension.
58
         * <br>
59
         * @return Nombre del punto de extension
60
         */
61
        public String getName() {
62
                return this.name;
63
        }
64
65
        /**
66
         * Retorna la descripcion asociada al punto de extension.
67
         * <br>
68
         * @return descripcion del punto de extension
69
         */
70 4325 jmvivo
        public String getDescription() {
71 4320 jjdelcerro
                return this.description;
72
        }
73
74
        /**
75
         * Asocia una descripcion al punto de extension.
76
         * <br>
77
         *
78
         * @param description
79
         */
80
        public void setDescripcion(String description) {
81
                this.description = description;
82
        }
83
84
        /**
85
         * Crea una extension.
86
         * <br>
87
         * Dado un nombre de extension asociada a este punto de extension, crea
88
         * el objeto registrado para manejar la extension.
89
         * <br>
90
         * Si el objeto registrado para esa extension implementa el interface
91
         * <i>IExtensionBuilder</i>, se invoca al metodo create para crear la instancia
92
         * de la extension.
93
         * <br>
94
         * Si no implementa este interface, debera ser una clase, y se creara una
95
         * instancia de esa clase.
96
         * <br>
97
         * @param name Nombre de la extension a crear.
98
         * @return La instancia creada de la extension.
99
         *
100
         * @throws InstantiationException
101
         * @throws IllegalAccessException
102
         */
103
        public Object create(String name) throws InstantiationException, IllegalAccessException {
104
                Object extension = this.get(name);
105
106
                if( extension instanceof IExtensionBuilder ) {
107
                        return ((IExtensionBuilder)extension).create();
108
                }
109
                return ExtensionBuilder.create((Class) extension);
110
        }
111
112
        /**
113
         * Crea una extension.
114
         * <br>
115
         * Dado un nombre de extension asociada a este punto de extension, crea
116
         * el objeto registrado para manejar la extension.
117
         * <br>
118
         * A la hora de crear la instanacia de la extension, le pasara los parametros
119
         * indicados en <i>args</i>.
120
         * <br>
121
         * Debido a que los argumentos se pasan como un array de objetos, no es posible
122
         * pasar al constructor de la extension parametros de tipos basicos como <i>int</i>
123
         * o <i>long</i>. Se deberan pasar como objetos y existir un constructor de la clase
124
         * que los pueda recibir de esta manera.
125
         * <br>
126
         * @param name Nombre de la extension a crear.
127
         * @param args Array de objetos a pasar como parametros en la construccion de la instancia de la extension.
128
         * @return La instancia creada de la extension.
129
         *
130
         * @throws SecurityException
131
         * @throws NoSuchMethodException
132
         * @throws IllegalArgumentException
133
         * @throws InstantiationException
134
         * @throws IllegalAccessException
135
         * @throws InvocationTargetException
136
         */
137
        public Object create(String name, Object [] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
138
                Object extension = this.get(name);
139
140
                if( extension instanceof IExtensionBuilder ) {
141
                        return ((IExtensionBuilder)extension).create(args);
142
                }
143
                return ExtensionBuilder.create((Class) extension, args);
144 4676 jorpiell
        }
145
146
        public Object create(String name, Map args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
147
                Object extension = this.get(name);
148
149
                if( extension instanceof IExtensionBuilder ) {
150
                        return ((IExtensionBuilder)extension).create(args);
151
                }
152
                return ExtensionBuilder.create((Class) extension, args);
153 4320 jjdelcerro
        }
154
}