Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.utils / src / main / java / org / gvsig / utils / extensionPointsOld / package.html @ 40561

History | View | Annotate | Download (5.3 KB)

1
<!--
2

3
    gvSIG. Desktop Geographic Information System.
4

5
    Copyright (C) 2007-2013 gvSIG Association.
6

7
    This program is free software; you can redistribute it and/or
8
    modify it under the terms of the GNU General Public License
9
    as published by the Free Software Foundation; either version 3
10
    of the License, or (at your option) any later version.
11

12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
    MA  02110-1301, USA.
21

22
    For any additional information, do not hesitate to contact us
23
    at info AT gvsig.com, or visit our website www.gvsig.com.
24

25
-->
26
<html>
27
<body>
28
<p>
29
Este paquete expone un mecanismo para registro de clases.
30
</p>
31
<p>
32
Permite registrar clases o factorias de clases que luego pueden ser
33
recuperadas para construir instancias.
34
</p>
35
<p>
36
La finalidad de este registro es el manejo de puntos de extension a una
37
aplicacion. Una aplicacion declara o registra con un nombre los puntos de 
38
extension que va a tener. Cada punto de extension puede tener registradas una
39
o mas extensiones. Cuando se quiere a?adir una extension a la aplicacion, se
40
registra la clase o factoria que gestiona esa extension para el punto de extension
41
que se desee. 
42
</p>
43
<p>
44
Veamos esto con un ejemplo.
45
</p>
46
<p>
47
Supongamos que queremos a?adir un punto de extension a la aplicacion gvSIG, que
48
permita asignar un mecanismo de presentacion de la informacion asociada a la
49
herramienta de "informacion" especializada segun el tipo de tema sobre el que se
50
esta trabajando.
51
</p>
52
<p>
53
Lo primero que tendriamos que hacer es darle un nombre al punto de extension.
54
Lo llamaremos "InfoByPoint". Para esto, la aplicacion que valla a utilizar
55
las extensiones que se registren en este punto deberia hacer lo siguiente:
56
</p>
57
<pre>
58
  ExtensionPoint infoByPoint = new ExtensionPoint("InfoByPoint","Registra las distintas extensiones que se pueden a?adir al 'InfoByPoint'");
59
  ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
60
  
61
  extensionPoints.put(infoByPoint);
62
</pre>
63
<p>
64
Con esto creamos un punto de extension de nombre "InfoByPoint", recogemos la 
65
instancia del registro de extensiones e insertamos el nuevo punto de extenstion
66
en el.<br>
67
Normalmente esta operacion, en el contexto de gvSIG, se realizaria en la
68
inicializacion de la extension de andami en la que vallamos a a?adir
69
la herramienta de informacion.
70
</p>
71
<p>
72
Las extensiones a registrar en el "InfoByPoint" podrian consistir un un 
73
JPanel que gestione la presentacion a usar para el tema.
74
</p>
75
<p>
76
Luego, desde la parte de la aplicacion que necesite a?adir nueva funcionalidad
77
en este punto de extension, se deberia a?adir la extension. Por ejemplo
78
en la extension de andami de WMS, se podria a?adir a "InfoByPoint" la posibilidad
79
de usar una forma especial de presentacion. Podria hacerse:
80
</p>
81
<pre>
82
    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
83
    extensionPoints.add("InfoByPoint","WMS",PanelQueGestionaLaExtension);
84
</pre>
85
<p>
86
Donde "PanelQueGestionaLaExtension" sera el JPanel que gestiona la extension para 
87
"InfoByPoint" de WMS.
88
</p>
89
<p>
90
Si quieran acceder a la extension de nombre "WMS"
91
se haria:
92
</p>
93
<pre>
94
    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
95
    ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint");
96
    Object ext = infoByPoint.create("WMS");
97
</pre>
98
<p>
99
Y esto nos devolberia un objeto JPanel que gestiona la extension "WMS"
100
para el "InfoByPoint".
101
</p>
102
<p>
103
Si quisiesemos recorrer las distintas extensiones de ese punto podriamos
104
hacerlo asi:
105
</p>
106
<pre>
107
    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
108
    ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint");
109
    Iterator infoByPoint =infoByPoint.keySet().iterator();
110
    while( i.hasNext() ) {
111
      String nombre = (String)i.next();
112
      ...
113
      // Y para crear los JPanel asociados a la extension...
114
      Object panel = infoByPoint.create(nombre);
115
      ...
116
    }
117
</pre>  
118
<p>
119
Ademas de registrar clases en un punto de extension, se pueden registrar
120
instancias que implementen el interface de IExtensionBuilder. En este caso, 
121
cuando se invoque al metodo "create" del punto de extension, en lugar
122
de crear una instancia, como no tiene la clase, este invocara al metodo
123
create del objeto que ha sido registrado.
124
</p>
125

    
126
<p>
127
Podemos encontrar un ejemplo de esto en la extension de JDBC para el 
128
catalogo. Como no existe una capa especifica para las capas JDBC, en lugar
129
de registrar en el punto de extension una clase "capa JDBC", se registra
130
una clase que implementa el interface IExtensionBuilder, que en su
131
metodo create construye una capa vectorial y la inicializa de la forma
132
apropiada para funcionar con la fuente de datos de JDBC.
133
</p>
134
<p>
135
Hay que tener en cuenta que para un punto de extension dado, deberia ser
136
trasparente que se registren en el clases o instancias que contruyen las clases.
137
E incluso que es posible mezclar en un punto de extension los dos
138
mecanismos, como es el caso del catalogo.
139
</p>
140
</body>
141
</html>