root / trunk / libraries / libIverUtiles / src / com / iver / utiles / extensionPoints / ExtensionPoint.java @ 4676
History | View | Annotate | Download (4.96 KB)
1 |
package com.iver.utiles.extensionPoints; |
---|---|
2 |
|
3 |
import java.lang.reflect.InvocationTargetException; |
4 |
import java.util.LinkedHashMap; |
5 |
import java.util.Map; |
6 |
|
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 |
public ExtensionPoint(String extensionPointName) { |
42 |
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 |
public ExtensionPoint(String extensionPointName, String description) { |
52 |
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 |
public String getDescription() { |
71 |
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 |
} |
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 |
} |
154 |
} |