svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.installer / org.gvsig.installer.lib / org.gvsig.installer.lib.api / src / main / java / org / gvsig / installer / lib / api / InstallerManager.java @ 40560
History | View | Annotate | Download (13.5 KB)
1 | 40560 | jjdelcerro | /**
|
---|---|---|---|
2 | * gvSIG. Desktop Geographic Information System.
|
||
3 | 40435 | jjdelcerro | *
|
4 | 40560 | jjdelcerro | * Copyright (C) 2007-2013 gvSIG Association.
|
5 | *
|
||
6 | 40435 | jjdelcerro | * This program is free software; you can redistribute it and/or
|
7 | * modify it under the terms of the GNU General Public License
|
||
8 | 40560 | jjdelcerro | * as published by the Free Software Foundation; either version 3
|
9 | 40435 | jjdelcerro | * of the License, or (at your option) any later version.
|
10 | 40560 | jjdelcerro | *
|
11 | 40435 | jjdelcerro | * This program is distributed in the hope that it will be useful,
|
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
14 | * GNU General Public License for more details.
|
||
15 | 40560 | jjdelcerro | *
|
16 | 40435 | jjdelcerro | * You should have received a copy of the GNU General Public License
|
17 | * along with this program; if not, write to the Free Software
|
||
18 | 40560 | jjdelcerro | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19 | 40435 | jjdelcerro | * MA 02110-1301, USA.
|
20 | 40560 | jjdelcerro | *
|
21 | * For any additional information, do not hesitate to contact us
|
||
22 | * at info AT gvsig.com, or visit our website www.gvsig.com.
|
||
23 | 40435 | jjdelcerro | */
|
24 | /*
|
||
25 | * AUTHORS (In addition to CIT):
|
||
26 | * 2010 {Prodevelop} {Task}
|
||
27 | */
|
||
28 | |||
29 | package org.gvsig.installer.lib.api; |
||
30 | |||
31 | import java.io.File; |
||
32 | import java.io.IOException; |
||
33 | import java.io.InputStream; |
||
34 | import java.net.URL; |
||
35 | import java.text.MessageFormat; |
||
36 | import java.util.List; |
||
37 | |||
38 | import org.gvsig.installer.lib.api.creation.MakePackageService; |
||
39 | import org.gvsig.installer.lib.api.creation.MakePluginPackageService; |
||
40 | import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException; |
||
41 | import org.gvsig.installer.lib.api.execution.InstallPackageService; |
||
42 | import org.gvsig.installer.lib.api.execution.InstallPackageServiceException; |
||
43 | import org.gvsig.tools.exception.BaseException; |
||
44 | import org.gvsig.tools.service.Manager; |
||
45 | |||
46 | /**
|
||
47 | * <p>
|
||
48 | * This manager is used to register and create the services that are used to
|
||
49 | * manage the creation and the execution of installers. An installer is a file
|
||
50 | * called <b>bundle</b> that is composed of a set <b>packages</b>.
|
||
51 | * </p>
|
||
52 | * <p>
|
||
53 | * A package has some information that is defined by the {@link PackageInfo}
|
||
54 | * class and is composed of a set of attributes. One of these attributes, the
|
||
55 | * type, denotes if the package is a plugin, theme, translation, etc.
|
||
56 | * </p>
|
||
57 | * <p>
|
||
58 | * In practice a bundle is just a compressed zip file that has a compressed zip
|
||
59 | * file for every package to install. The structure of a bundle file with two
|
||
60 | * packages of type plugin could be:
|
||
61 | * </p>
|
||
62 | *
|
||
63 | * <pre>
|
||
64 | * - bundle (compressed file)
|
||
65 | * - org.gvsig.plugin1-1_0_0-23 (compressed file)
|
||
66 | * - org.gvsig.plugin1
|
||
67 | * - package.info
|
||
68 | * - org.gvsig.plugin2-2_0_1-35 (compressed file)
|
||
69 | * - org.gvsig.plugin1
|
||
70 | * - package.info
|
||
71 | * </pre>
|
||
72 | * <p>
|
||
73 | * <b>bundle</b> is the compressed file that contains a zip entry for every
|
||
74 | * package to install. The name of the zip entry follows next pattern:
|
||
75 | * </p>
|
||
76 | *
|
||
77 | * <pre>
|
||
78 | * [package code]-[version]-[build]
|
||
79 | * </pre>
|
||
80 | * <p>
|
||
81 | * Every zip entry contains a main folder inside that contains all the package
|
||
82 | * files that are used in the installation process. Depending of the type of
|
||
83 | * packages, the information inside this folder can be different, but all the
|
||
84 | * types of packages have to have the <b>package.info</b>file that has all the
|
||
85 | * package information. To see the <b>package.info</b> description see
|
||
86 | * {@link PackageInfo}.
|
||
87 | * <p>
|
||
88 | * </p>
|
||
89 | * The services that offers this managers are basically two: the creation of
|
||
90 | * bundles for just one package of plugin type and a service for the
|
||
91 | * installation of packages from a bundle. </p>
|
||
92 | *
|
||
93 | * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodrá</a>
|
||
94 | */
|
||
95 | public interface InstallerManager extends Manager { |
||
96 | |||
97 | public static final String PACKAGE_INDEX_EXTENSION = ".gvspki"; |
||
98 | public static final String PACKAGE_SET_EXTENSION = ".gvspks"; |
||
99 | public static final String PACKAGE_EXTENSION = ".gvspkg"; |
||
100 | |||
101 | /**
|
||
102 | * Package state default values.
|
||
103 | */
|
||
104 | public static interface STATE { |
||
105 | |||
106 | static final String DEVEL = "devel"; |
||
107 | static final String TESTING = "testing"; |
||
108 | static final String PILOT = "pilot"; |
||
109 | static final String PROTOTYPE = "prototype"; |
||
110 | static final String ALPHA = "alpha"; |
||
111 | static final String BETA = "beta"; |
||
112 | static final String RC = "RC"; |
||
113 | static final String FINAL = "final"; |
||
114 | } |
||
115 | |||
116 | /**
|
||
117 | * Supported operating system default values.
|
||
118 | */
|
||
119 | public static interface OS { |
||
120 | |||
121 | static final String ALL = "all"; |
||
122 | static final String LINUX = "lin"; |
||
123 | static final String WINDOWS = "win"; |
||
124 | static final String OSX_10_4 = "osx_10_4"; |
||
125 | static final String OSX_10_5 = "osx_10_5"; |
||
126 | static final String OSX_10_6 = "osx_10_6"; |
||
127 | } |
||
128 | |||
129 | /**
|
||
130 | * Supported architecture default values.
|
||
131 | */
|
||
132 | public static interface ARCH { |
||
133 | |||
134 | static final String ALL = "all"; |
||
135 | static final String X86 = "x86"; |
||
136 | static final String X86_64 = "x86_64"; |
||
137 | } |
||
138 | |||
139 | /**
|
||
140 | * Supported Java virtual machine version default values.
|
||
141 | */
|
||
142 | public static interface JVM { |
||
143 | |||
144 | static final String J1_5 = "j1_5"; |
||
145 | static final String J1_6 = "j1_6"; |
||
146 | } |
||
147 | |||
148 | /**
|
||
149 | * Fields into the bundle file name message format.
|
||
150 | *
|
||
151 | * @see InstallerManager#getPackageSetNameFormat()
|
||
152 | * @see InstallerManager#setPackageSetNameFormat(String)
|
||
153 | */
|
||
154 | public static interface PACKAGE_FILE_NAME_FIELDS { |
||
155 | |||
156 | static final int GVSIG_VERSION = 0; |
||
157 | static final int NAME = 1; |
||
158 | static final int VERSION = 2; |
||
159 | static final int BUILD = 3; |
||
160 | static final int STATE = 4; |
||
161 | static final int OS = 5; |
||
162 | static final int ARCH = 6; |
||
163 | static final int JVM = 7; |
||
164 | } |
||
165 | |||
166 | /**
|
||
167 | * It registers a class that implements the service for the creation of
|
||
168 | * bundle that contains inside a package of type plugin. The registered
|
||
169 | * class have to implement the {@link MakePluginPackageService} interface.
|
||
170 | *
|
||
171 | * @param clazz
|
||
172 | * class that implements the {@link MakePluginPackageService}
|
||
173 | * interface.
|
||
174 | */
|
||
175 | public void registerMakePluginPackageService( |
||
176 | Class<? extends MakePluginPackageService> clazz); |
||
177 | |||
178 | // /**
|
||
179 | // * It creates and returns an object that is used to create a bundle that
|
||
180 | // * contains inside a package of type plugin. All the parameters are set
|
||
181 | // * using the {@link MakePluginPackageService} interface. *
|
||
182 | // *
|
||
183 | // * @return an object that is used to create a plugin installer
|
||
184 | // * @throws MakePluginPackageServiceException
|
||
185 | // * when there is a problem creating the service
|
||
186 | // */
|
||
187 | // public MakePluginPackageService getMakePluginPackageService(
|
||
188 | // File pluginsDirectory) throws MakePluginPackageServiceException;
|
||
189 | |||
190 | /**
|
||
191 | * It creates and returns an object that is used to create a bundle that
|
||
192 | * contains inside a package of type plugin. All the parameters are set
|
||
193 | * using the {@link MakePluginPackageService} interface. *
|
||
194 | *
|
||
195 | * @return an object that is used to create a plugin installer
|
||
196 | * @throws MakePluginPackageServiceException
|
||
197 | * @throws MakePluginPackageServiceException
|
||
198 | * when there is a problem creating the service
|
||
199 | */
|
||
200 | public MakePluginPackageService getMakePluginPackageService()
|
||
201 | throws MakePluginPackageServiceException;
|
||
202 | |||
203 | /**
|
||
204 | * Returns a list of package infos for the already installed plugins.
|
||
205 | *
|
||
206 | * @param pluginsDirectory
|
||
207 | * where to look for the installed plugins
|
||
208 | * @return the list of package infos for the already installed plugins
|
||
209 | * @throws MakePluginPackageServiceException
|
||
210 | * if there is an error loading the information of the installed
|
||
211 | * plugins
|
||
212 | */
|
||
213 | public PackageInfo[] getInstalledPackages(File pluginsDirectory) |
||
214 | throws MakePluginPackageServiceException;
|
||
215 | |||
216 | /**
|
||
217 | * Returns a list of package infos for the already installed plugins.
|
||
218 | *
|
||
219 | * @return the list of package infos for the already installed plugins
|
||
220 | * @throws MakePluginPackageServiceException
|
||
221 | * if there is an error loading the information of the installed
|
||
222 | * plugins
|
||
223 | */
|
||
224 | public PackageInfo[] getInstalledPackages() |
||
225 | throws MakePluginPackageServiceException;
|
||
226 | |||
227 | /**
|
||
228 | * Returns the package bundle file name format.
|
||
229 | * <p>
|
||
230 | * The string has to use a suitable {@link MessageFormat} format, and the
|
||
231 | * available field numbers are the ones defined in the
|
||
232 | * BUNDLE_FILE_NAME_FIELDS interface.
|
||
233 | * </p>
|
||
234 | *
|
||
235 | * @return the package bundle file name format.
|
||
236 | */
|
||
237 | public String getPackageSetNameFormat(); |
||
238 | |||
239 | /**
|
||
240 | * Sets the package bundle file name format.
|
||
241 | *
|
||
242 | * @see InstallerManager#getPackageSetNameFormat()
|
||
243 | * @param packageBundleNameFormat
|
||
244 | * the package bundle file name format.
|
||
245 | */
|
||
246 | public void setPackageSetNameFormat(String packageBundleNameFormat); |
||
247 | |||
248 | /**
|
||
249 | * Returns the name of the package set file for a given package info.
|
||
250 | *
|
||
251 | * @param info
|
||
252 | * of the plugin
|
||
253 | * @return the name of the package set file
|
||
254 | */
|
||
255 | public String getPackageSetFileName(PackageInfo info); |
||
256 | |||
257 | /**
|
||
258 | * Returns the name of the package file for a given package info.
|
||
259 | *
|
||
260 | * @param info
|
||
261 | * of the plugin
|
||
262 | * @return the name of the package file
|
||
263 | */
|
||
264 | public String getPackageFileName(PackageInfo info); |
||
265 | |||
266 | /**
|
||
267 | * Returns the name of the package index file for a given package info.
|
||
268 | *
|
||
269 | * @param info
|
||
270 | * of the plugin
|
||
271 | * @return the name of the package index file
|
||
272 | */
|
||
273 | public String getPackageIndexFileName(PackageInfo info); |
||
274 | |||
275 | /**
|
||
276 | * It registers a class that implements the service for the installation of
|
||
277 | * a package that is inside a bundle. This class has to implement the
|
||
278 | * {@link InstallPackageService} interface.
|
||
279 | *
|
||
280 | * @param clazz
|
||
281 | * class that implements the {@link InstallPackageService}
|
||
282 | * interface.
|
||
283 | */
|
||
284 | public void registerInstallPackageService( |
||
285 | Class<? extends InstallPackageService> clazz); |
||
286 | |||
287 | /**
|
||
288 | * It creates and returns an object that is used to install a package in
|
||
289 | * gvSIG. All the parameters are set using the {@link InstallPackageService}
|
||
290 | * interface.
|
||
291 | *
|
||
292 | * @return an object that is used to install the package.
|
||
293 | * @throws InstallPackageServiceException
|
||
294 | * when there is a problem creating the service.
|
||
295 | */
|
||
296 | public InstallPackageService getInstallPackageService()
|
||
297 | throws InstallPackageServiceException;
|
||
298 | |||
299 | /**
|
||
300 | * Returns the default extensions of the package files.
|
||
301 | *
|
||
302 | * @return the default extensions of the package files
|
||
303 | */
|
||
304 | public String getDefaultPackageFileExtension(); |
||
305 | |||
306 | /**
|
||
307 | * Returns the default extensions of the package set files.
|
||
308 | *
|
||
309 | * @return the default extensions of the package set files
|
||
310 | */
|
||
311 | public String getDefaultPackageSetFileExtension(); |
||
312 | |||
313 | /**
|
||
314 | * Returns the default extensions of the index set files.
|
||
315 | *
|
||
316 | * @return the default extensions of the index set files
|
||
317 | */
|
||
318 | public String getDefaultIndexSetFileExtension(); |
||
319 | |||
320 | /**
|
||
321 | * Return the OS code of the system
|
||
322 | *
|
||
323 | * @return os code of the system
|
||
324 | */
|
||
325 | public String getOperatingSystem(); |
||
326 | |||
327 | /**
|
||
328 | * Returns the Architecture code of the system
|
||
329 | *
|
||
330 | * @return architecture code of the system
|
||
331 | */
|
||
332 | public String getArchitecture(); |
||
333 | |||
334 | /**
|
||
335 | * Create a empty dependency object.
|
||
336 | *
|
||
337 | * @return the dependency
|
||
338 | */
|
||
339 | public Dependency createDependency();
|
||
340 | |||
341 | /**
|
||
342 | * Create a dependency instance with the data of the package.
|
||
343 | *
|
||
344 | * @param packageInfo
|
||
345 | * @return a dependency of the package
|
||
346 | */
|
||
347 | public Dependency createDependency(PackageInfo packageInfo);
|
||
348 | |||
349 | /**
|
||
350 | * Create a dependencies calculator.
|
||
351 | *
|
||
352 | * @return the dependencias calculator
|
||
353 | */
|
||
354 | public DependenciesCalculator createDependenciesCalculator(
|
||
355 | InstallPackageService installService); |
||
356 | |||
357 | /**
|
||
358 | * Create a version instance
|
||
359 | *
|
||
360 | * @return the version
|
||
361 | */
|
||
362 | public Version createVersion();
|
||
363 | |||
364 | public PackageInfo createPackageInfo();
|
||
365 | |||
366 | /**
|
||
367 | * Create a PackageInfo and load contents from the specified InputStream using the
|
||
368 | * default reader.
|
||
369 | *
|
||
370 | * @param packegeinfo as URL
|
||
371 | * @return the created packageInfo
|
||
372 | * @throws IOException
|
||
373 | * @throws BaseException
|
||
374 | */
|
||
375 | public PackageInfo createPackageInfo(InputStream packegeinfo) throws BaseException; |
||
376 | |||
377 | public PackageInfoWriter getDefaultPackageInfoWriter();
|
||
378 | |||
379 | public PackageInfoReader getDefaultPackageInfoReader();
|
||
380 | |||
381 | public MakePackageService createMakePackage(File packageFolder, |
||
382 | PackageInfo packageInfo); |
||
383 | |||
384 | public void setDownloadBaseURL(URL url); |
||
385 | |||
386 | public URL getDownloadBaseURL(); |
||
387 | |||
388 | public void setVersion(Version version); |
||
389 | |||
390 | public Version getVersionEx();
|
||
391 | |||
392 | |||
393 | /**
|
||
394 | *
|
||
395 | * @param version
|
||
396 | * @deprecated Use {@link #setVersion(Version)}
|
||
397 | */
|
||
398 | public void setVersion(String version); |
||
399 | |||
400 | /**
|
||
401 | *
|
||
402 | * @return
|
||
403 | * @deprecated Use {@link #getVersionEx()}
|
||
404 | */
|
||
405 | public String getVersion(); |
||
406 | |||
407 | /**
|
||
408 | * Gets a List of all the folders where there might be addons folders
|
||
409 | * (addons repositories).
|
||
410 | *
|
||
411 | * @return list of repositories paths
|
||
412 | */
|
||
413 | public List<File> getLocalAddonRepositories(); |
||
414 | |||
415 | /**
|
||
416 | * Adds an addon repository path to the manager list.
|
||
417 | *
|
||
418 | * @param path
|
||
419 | * of the repository
|
||
420 | */
|
||
421 | public void addLocalAddonRepository(File path); |
||
422 | |||
423 | /**
|
||
424 | * Gets a List of all the addon folders. An addon folder is a folder inside
|
||
425 | * any addon repository with a package.info file inside. (addons
|
||
426 | * repositories).
|
||
427 | *
|
||
428 | * @return list of addon paths folders.
|
||
429 | */
|
||
430 | public List<File> getAddonFolders(); |
||
431 | |||
432 | /**
|
||
433 | * Gets the folder of the addon with the code provided, or null if not
|
||
434 | * found.
|
||
435 | *
|
||
436 | * @param code
|
||
437 | * of the addon
|
||
438 | *
|
||
439 | * @return File of the folder of the addon.
|
||
440 | */
|
||
441 | public File getAddonFolder(String code); |
||
442 | |||
443 | /**
|
||
444 | * The local addons folder where normally all addons are installed.
|
||
445 | *
|
||
446 | * @param defaultAddonsRepository
|
||
447 | */
|
||
448 | public void setDefaultLocalAddonRepository(File defaultAddonsRepository); |
||
449 | |||
450 | /**
|
||
451 | * The local addons folder where normally all addons are installed.
|
||
452 | *
|
||
453 | * @return default addons repository folder.
|
||
454 | */
|
||
455 | public File getDefaultLocalAddonRepository(); |
||
456 | |||
457 | public List<byte[]> getPublicKeys(); |
||
458 | |||
459 | // public PackageInfoFiles getPackageInfoFiles(PackageInfo packageInfo);
|
||
460 | |||
461 | public boolean hasProviderToThisPackage(PackageInfo packageInfo); |
||
462 | } |