root / tags / v1_0_2_Build_916 / libraries / libIverUtiles / src / com / iver / utiles / extensionPoints / package.html @ 12327
History | View | Annotate | Download (4.36 KB)
1 | 4643 | jjdelcerro | <html>
|
---|---|---|---|
2 | <body>
|
||
3 | 4933 | jjdelcerro | <p>
|
4 | 4676 | jorpiell | Este paquete expone un mecanismo para registro de clases. |
5 | 4933 | jjdelcerro | </p>
|
6 | <p>
|
||
7 | 4643 | jjdelcerro | Permite registrar clases o factorias de clases que luego pueden ser |
8 | recuperadas para construir instancias. |
||
9 | 4933 | jjdelcerro | </p>
|
10 | <p>
|
||
11 | 4643 | jjdelcerro | La finalidad de este registro es el manejo de puntos de extension a una |
12 | aplicacion. Una aplicacion declara o registra con un nombre los puntos de |
||
13 | extension que va a tener. Cada punto de extension puede tener registradas una |
||
14 | o mas extensiones. Cuando se quiere a?adir una extension a la aplicacion, se |
||
15 | registra la clase o factoria que gestiona esa extension para el punto de extension |
||
16 | que se desee. |
||
17 | 4933 | jjdelcerro | </p>
|
18 | <p>
|
||
19 | 4643 | jjdelcerro | Veamos esto con un ejemplo. |
20 | 4933 | jjdelcerro | </p>
|
21 | <p>
|
||
22 | 4643 | jjdelcerro | Supongamos que queremos a?adir un punto de extension a la aplicacion gvSIG, que |
23 | permita asignar un mecanismo de presentacion de la informacion asociada a la |
||
24 | herramienta de "informacion" especializada segun el tipo de tema sobre el que se |
||
25 | esta trabajando. |
||
26 | 4933 | jjdelcerro | </p>
|
27 | <p>
|
||
28 | 4643 | jjdelcerro | Lo primero que tendriamos que hacer es darle un nombre al punto de extension. |
29 | 4933 | jjdelcerro | Lo llamaremos "InfoByPoint". Para esto, la aplicacion que valla a utilizar |
30 | 4643 | jjdelcerro | las extensiones que se registren en este punto deberia hacer lo siguiente: |
31 | 4933 | jjdelcerro | </p>
|
32 | 4929 | vacevedo | <pre>
|
33 | 4643 | jjdelcerro | ExtensionPoint infoByPoint = new ExtensionPoint("InfoByPoint","Registra las distintas extensiones que se pueden a?adir al 'InfoByPoint'"); |
34 | ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
||
35 | |||
36 | extensionPoints.put(infoByPoint); |
||
37 | 4929 | vacevedo | </pre>
|
38 | 4933 | jjdelcerro | <p>
|
39 | 4643 | jjdelcerro | Con esto creamos un punto de extension de nombre "InfoByPoint", recogemos la |
40 | instancia del registro de extensiones e insertamos el nuevo punto de extenstion |
||
41 | 4933 | jjdelcerro | en el.<br>
|
42 | Normalmente esta operacion, en el contexto de gvSIG, se realizaria en la |
||
43 | inicializacion de la extension de andami en la que vallamos a a?adir |
||
44 | la herramienta de informacion. |
||
45 | </p>
|
||
46 | <p>
|
||
47 | Las extensiones a registrar en el "InfoByPoint" podrian consistir un un |
||
48 | JPanel que gestione la presentacion a usar para el tema. |
||
49 | </p>
|
||
50 | <p>
|
||
51 | Luego, desde la parte de la aplicacion que necesite a?adir nueva funcionalidad |
||
52 | en este punto de extension, se deberia a?adir la extension. Por ejemplo |
||
53 | en la extension de andami de WMS, se podria a?adir a "InfoByPoint" la posibilidad |
||
54 | de usar una forma especial de presentacion. Podria hacerse: |
||
55 | </p>
|
||
56 | <pre>
|
||
57 | ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
||
58 | extensionPoints.add("InfoByPoint","WMS",PanelQueGestionaLaExtension); |
||
59 | </pre>
|
||
60 | <p>
|
||
61 | Donde "PanelQueGestionaLaExtension" sera el JPanel que gestiona la extension para |
||
62 | "InfoByPoint" de WMS. |
||
63 | </p>
|
||
64 | <p>
|
||
65 | Si quieran acceder a la extension de nombre "WMS" |
||
66 | 4643 | jjdelcerro | se haria: |
67 | 4933 | jjdelcerro | </p>
|
68 | 4929 | vacevedo | <pre>
|
69 | 4933 | jjdelcerro | ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
70 | 4643 | jjdelcerro | ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint"); |
71 | 4933 | jjdelcerro | Object ext = infoByPoint.create("WMS"); |
72 | 4929 | vacevedo | </pre>
|
73 | 4933 | jjdelcerro | <p>
|
74 | Y esto nos devolberia un objeto JPanel que gestiona la extension "WMS" |
||
75 | para el "InfoByPoint". |
||
76 | </p>
|
||
77 | <p>
|
||
78 | Si quisiesemos recorrer las distintas extensiones de ese punto podriamos |
||
79 | hacerlo asi: |
||
80 | </p>
|
||
81 | 4929 | vacevedo | <pre>
|
82 | 4933 | jjdelcerro | ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
83 | 4643 | jjdelcerro | ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint"); |
84 | 4933 | jjdelcerro | Iterator infoByPoint =infoByPoint.keySet().iterator(); |
85 | while( i.hasNext() ) { |
||
86 | String nombre = (String)i.next(); |
||
87 | ... |
||
88 | // Y para crear los JPanel asociados a la extension... |
||
89 | Object panel = infoByPoint.create(nombre); |
||
90 | ... |
||
91 | } |
||
92 | 4929 | vacevedo | </pre>
|
93 | 4933 | jjdelcerro | <p>
|
94 | Ademas de registrar clases en un punto de extension, se pueden registrar |
||
95 | instancias que implementen el interface de IExtensionBuilder. En este caso, |
||
96 | cuando se invoque al metodo "create" del punto de extension, en lugar |
||
97 | de crear una instancia, como no tiene la clase, este invocara al metodo |
||
98 | create del objeto que ha sido registrado. |
||
99 | </p>
|
||
100 | 4643 | jjdelcerro | |
101 | 4933 | jjdelcerro | <p>
|
102 | Podemos encontrar un ejemplo de esto en la extension de JDBC para el |
||
103 | catalogo. Como no existe una capa especifica para las capas JDBC, en lugar |
||
104 | de registrar en el punto de extension una clase "capa JDBC", se registra |
||
105 | una clase que implementa el interface IExtensionBuilder, que en su |
||
106 | metodo create construye una capa vectorial y la inicializa de la forma |
||
107 | apropiada para funcionar con la fuente de datos de JDBC. |
||
108 | </p>
|
||
109 | <p>
|
||
110 | Hay que tener en cuenta que para un punto de extension dado, deberia ser |
||
111 | trasparente que se registren en el clases o instancias que contruyen las clases. |
||
112 | E incluso que es posible mezclar en un punto de extension los dos |
||
113 | mecanismos, como es el caso del catalogo. |
||
114 | </p>
|
||
115 | 4643 | jjdelcerro | </body>
|
116 | </html> |