Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / org.gvsig.installer / org.gvsig.installer.lib / org.gvsig.installer.lib.impl / src / main / java / org / gvsig / installer / lib / impl / DefaultInstallerManager.java @ 37829

History | View | Annotate | Download (11.7 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * 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
 * 
16
 * 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
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22

    
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2010 {Prodevelop}   {Task}
26
 */
27

    
28
package org.gvsig.installer.lib.impl;
29

    
30
import java.io.File;
31
import java.net.URL;
32
import java.text.MessageFormat;
33
import java.util.ArrayList;
34
import java.util.List;
35

    
36
import org.gvsig.installer.lib.api.DependenciesCalculator;
37
import org.gvsig.installer.lib.api.Dependency;
38
import org.gvsig.installer.lib.api.InstallerManager;
39
import org.gvsig.installer.lib.api.PackageInfo;
40
import org.gvsig.installer.lib.api.PackageInfoReader;
41
import org.gvsig.installer.lib.api.PackageInfoWriter;
42
import org.gvsig.installer.lib.api.Version;
43
import org.gvsig.installer.lib.api.creation.MakePackageService;
44
import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
45
import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
46
import org.gvsig.installer.lib.api.execution.InstallPackageService;
47
import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
48
import org.gvsig.installer.lib.impl.creation.DefaultMakePackageService;
49
import org.gvsig.installer.lib.impl.info.InstallerInfoFileReader;
50
import org.gvsig.installer.lib.impl.info.InstallerInfoFileWriter;
51
import org.gvsig.tools.ToolsLocator;
52
import org.gvsig.tools.dynobject.DynObject;
53
import org.gvsig.tools.extensionpoint.ExtensionPoint;
54
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
55
import org.gvsig.tools.service.AbstractManager;
56
import org.gvsig.tools.service.Service;
57
import org.gvsig.tools.service.ServiceException;
58

    
59
/**
60
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
61
 */
62
public class DefaultInstallerManager extends AbstractManager implements
63
                InstallerManager {
64

    
65
        private static final String INSTALLER_MANAGER_EXTENSION_POINT = "InstallerManagerExtensionPoint";
66
        private static final String INSTALLER_CREATION_SERVICE_NAME = "InstallerCreationService";
67
        private static final String INSTALLER_EXECUTION_SERVICE_NAME = "InstallerExecutionService";
68
        private ExtensionPointManager extensionPoints = ToolsLocator
69
                        .getExtensionPointManager();
70

    
71
        private String packageSetNameFormat = "gvSIG-desktop-{0}-{1}-{2}-{4}-{5}-{6}-{7}.gvspks";
72
        private String packageNameFormat = "gvSIG-desktop-{0}-{1}-{2}-{4}-{5}-{6}-{7}.gvspkg";
73
        private String packageIndexNameFormat = "gvSIG-desktop-{0}-{1}-{2}-{4}-{5}-{6}-{7}.gvspki";
74

    
75
        private URL BaseDownloadURL = null;
76
        private String version = null;
77
        private List<File> repositoriesPathsList = null;
78
        private File defaultAddonRepository = null;
79

    
80
        public DefaultInstallerManager() {
81
                super(new DefaultInstallerProviderManager());
82
                repositoriesPathsList = new ArrayList<File>();
83
        }
84

    
85
        public String getPackageSetNameFormat() {
86
                return packageSetNameFormat;
87
        }
88

    
89
        public void setPackageSetNameFormat(String packageSetNameFormat) {
90
                this.packageSetNameFormat = packageSetNameFormat;
91
        }
92

    
93
        public String getPackageNameFormat() {
94
                return packageNameFormat;
95
        }
96

    
97
        public void setPackageNameFormat(String packageNameFormat) {
98
                this.packageNameFormat = packageNameFormat;
99
        }
100

    
101
        public String getPackageIndexNameFormat() {
102
                return packageIndexNameFormat;
103
        }
104

    
105
        public void setPackageIndexNameFormat(String packageIndexNameFormat) {
106
                this.packageIndexNameFormat = packageIndexNameFormat;
107
        }
108

    
109
        // public MakePluginPackageService getMakePluginPackageService(
110
        // File pluginsDirectory) throws MakePluginPackageServiceException {
111
        // ExtensionPoint ep = extensionPoints
112
        // .add(INSTALLER_MANAGER_EXTENSION_POINT);
113
        // try {
114
        // Object[] args = new Object[] { this, pluginsDirectory };
115
        // return (MakePluginPackageService) ep.create(
116
        // INSTALLER_CREATION_SERVICE_NAME, args);
117
        // } catch (Exception e) {
118
        // throw new MakePluginPackageServiceException(
119
        // "Exception creating the installer service to create installers",
120
        // e);
121
        // }
122
        // }
123

    
124
        public MakePluginPackageService getMakePluginPackageService()
125
                        throws MakePluginPackageServiceException {
126
                ExtensionPoint ep = extensionPoints
127
                                .add(INSTALLER_MANAGER_EXTENSION_POINT);
128
                try {
129
                        Object[] args = new Object[] { this };
130
                        return (MakePluginPackageService) ep.create(
131
                                        INSTALLER_CREATION_SERVICE_NAME, args);
132
                } catch (Exception e) {
133
                        throw new MakePluginPackageServiceException(
134
                                        "Exception creating the installer service to create installers",
135
                                        e);
136
                }
137
        }
138

    
139
        public class InstallerCreationException extends
140
                        InstallPackageServiceException {
141

    
142
                private static final long serialVersionUID = 759329820705535873L;
143

    
144
                private static final String message = "Error creating the installer service to install plugins";
145

    
146
                private static final String KEY = "_Error_creating_the_installer_service_to_install_plugins";
147

    
148
                public InstallerCreationException(Exception e) {
149
                        super(message, e, KEY, serialVersionUID);
150
                }
151

    
152
        }
153

    
154
        public InstallPackageService getInstallPackageService()
155
                        throws InstallPackageServiceException {
156
                ExtensionPoint ep = extensionPoints
157
                                .add(INSTALLER_MANAGER_EXTENSION_POINT);
158
                try {
159
                        Object[] args = new Object[1];
160
                        args[0] = this;
161
                        return (InstallPackageService) ep.create(
162
                                        INSTALLER_EXECUTION_SERVICE_NAME, args);
163
                } catch (Exception e) {
164
                        throw new InstallerCreationException(e);
165
                }
166
        }
167

    
168
        public void registerMakePluginPackageService(
169
                        Class<? extends MakePluginPackageService> clazz) {
170
                ExtensionPoint extensionPoint = extensionPoints.add(
171
                                INSTALLER_MANAGER_EXTENSION_POINT, "");
172
                extensionPoint.append(INSTALLER_CREATION_SERVICE_NAME, "", clazz);
173
        }
174

    
175
        public void registerInstallPackageService(
176
                        Class<? extends InstallPackageService> clazz) {
177
                ExtensionPoint extensionPoint = extensionPoints.add(
178
                                INSTALLER_MANAGER_EXTENSION_POINT, "");
179
                extensionPoint.append(INSTALLER_EXECUTION_SERVICE_NAME, "", clazz);
180
        }
181

    
182
        public Service getService(DynObject parameters) throws ServiceException {
183
                return null;
184
        }
185

    
186
        public String getPackageSetFileName(PackageInfo info) {
187
                Object[] parameters = getPackageNameFormatParameters(info);
188
                return MessageFormat.format(getPackageSetNameFormat(), parameters);
189
        }
190

    
191
        public String getPackageFileName(PackageInfo info) {
192
                Object[] parameters = getPackageNameFormatParameters(info);
193
                return MessageFormat.format(getPackageNameFormat(), parameters);
194
        }
195

    
196
        public String getPackageIndexFileName(PackageInfo info) {
197
                Object[] parameters = getPackageNameFormatParameters(info);
198
                return MessageFormat.format(getPackageIndexNameFormat(), parameters);
199
        }
200

    
201
        private Object[] getPackageNameFormatParameters(PackageInfo info) {
202
                Object[] parameters = new Object[8];
203
                parameters[PACKAGE_FILE_NAME_FIELDS.GVSIG_VERSION] = info
204
                                .getGvSIGVersion();
205
                parameters[PACKAGE_FILE_NAME_FIELDS.NAME] = info.getCode();
206
                parameters[PACKAGE_FILE_NAME_FIELDS.VERSION] = info.getVersion();
207
                parameters[PACKAGE_FILE_NAME_FIELDS.BUILD] = info.getBuild();
208
                parameters[PACKAGE_FILE_NAME_FIELDS.STATE] = info.getState();
209
                parameters[PACKAGE_FILE_NAME_FIELDS.OS] = info.getOperatingSystem();
210
                parameters[PACKAGE_FILE_NAME_FIELDS.ARCH] = info.getArchitecture();
211
                parameters[PACKAGE_FILE_NAME_FIELDS.JVM] = info.getJavaVM();
212
                return parameters;
213
        }
214

    
215
        public PackageInfo[] getInstalledPackages(File pluginsDirectory)
216
                        throws MakePluginPackageServiceException {
217
                MakePluginPackageService service = getMakePluginPackageService();
218
                return service.getInstalledPackages();
219
        }
220

    
221
        public PackageInfo[] getInstalledPackages()
222
                        throws MakePluginPackageServiceException {
223
                MakePluginPackageService service = getMakePluginPackageService();
224
                return service.getInstalledPackages();
225
        }
226

    
227
        public String getDefaultPackageFileExtension() {
228
                return "gvspkg";
229
        }
230

    
231
        public String getDefaultPackageSetFileExtension() {
232
                return "gvspks";
233
        }
234

    
235
        public String getDefaultIndexSetFileExtension() {
236
                return "gvspki";
237
        }
238

    
239
        public String getOperatingSystem() {
240
                String osname = System.getProperty("os.name");
241
                if (osname.toLowerCase().startsWith("linux")) {
242
                        return InstallerManager.OS.LINUX;
243
                }
244
                if (osname.toLowerCase().startsWith("window")) {
245
                        return InstallerManager.OS.WINDOWS;
246
                }
247
                return osname;
248
        }
249

    
250
        public String getArchitecture() {
251
                String osarch = System.getProperty("os.arch");
252
                if (osarch.toLowerCase().startsWith("i386")) {
253
                        return InstallerManager.ARCH.X86;
254
                }
255
                if (osarch.toLowerCase().startsWith("x86")) {
256
                        return InstallerManager.ARCH.X86;
257
                }
258
                if (osarch.toLowerCase().startsWith("amd64")) {
259
                        return InstallerManager.ARCH.X86_64;
260
                }
261
                return osarch;
262
        }
263

    
264
        public Dependency createDependency(PackageInfo packageInfo) {
265
                return new DefaultDependency(packageInfo);
266
        }
267

    
268
        public Dependency createDependency() {
269
                return new DefaultDependency();
270
        }
271

    
272
        public DependenciesCalculator createDependenciesCalculator(
273
                        InstallPackageService installService) {
274
                return new DefaultDependenciesCalculator(installService);
275
        }
276

    
277
        public Version createVersion() {
278
                return new DefaultVersion();
279
        }
280

    
281
        public PackageInfoReader getDefaultPackageInfoReader() {
282
                return new InstallerInfoFileReader();
283
        }
284

    
285
        public PackageInfoWriter getDefaultPackageInfoWriter() {
286
                return new InstallerInfoFileWriter();
287
        }
288

    
289
        public MakePackageService createMakePackage(File packageFolder,
290
                        PackageInfo packageInfo) {
291
                return new DefaultMakePackageService(this, packageFolder, packageInfo);
292
        }
293

    
294
        public PackageInfo createPackageInfo() {
295
                return new DefaultPackageInfo();
296
        }
297

    
298
        public URL getDownloadBaseURL() {
299
                return this.BaseDownloadURL;
300
        }
301

    
302
        public String getVersion() {
303
                return this.version;
304
        }
305

    
306
        public void setDownloadBaseURL(URL url) {
307
                this.BaseDownloadURL = url;
308
        }
309

    
310
        public void setVersion(String version) {
311
                this.version = version;
312
        }
313

    
314
        public void addLocalAddonRepository(File path) {
315
                if (path.isDirectory() && path.exists()) {
316
                        repositoriesPathsList.add(path);
317
                }
318
        }
319

    
320
        public List<File> getLocalAddonRepositories() {
321
                return repositoriesPathsList;
322
        }
323

    
324
        public List<File> getAddonFolders() {
325
                List<File> addonFoldersList = new ArrayList<File>();
326

    
327
                // Para cada directorio en repositoriesPathsList
328
                for (int i = 0; i < repositoriesPathsList.size(); i++) {
329
                        File repoPath = repositoriesPathsList.get(i);
330
                        if (repoPath.isDirectory() && repoPath.exists()) {
331
                                File[] folderRepoList = repoPath.listFiles();
332

    
333
                                // recorrer los directorios que haya dentro
334
                                for (int j = 0; j < folderRepoList.length; j++) {
335
                                        File addonFolder = folderRepoList[j];
336
                                        if (addonFolder.isDirectory()) {
337
                                                File[] fileList = addonFolder.listFiles();
338

    
339
                                                for (int k = 0; k < fileList.length; k++) {
340
                                                        File file = fileList[k];
341
                                                        // si tiene un package.info dentro
342
                                                        if (file.getName().equals("package.info")) {
343
                                                                addonFoldersList.add(addonFolder);
344
                                                                break;
345
                                                        }
346
                                                }
347
                                        }
348

    
349
                                }
350
                        }
351
                }
352

    
353
                return addonFoldersList;
354
        }
355

    
356
        public File getAddonFolder(String code) {
357
                List<File> pluginPaths = this.getAddonFolders();
358
                for (int i = 0; i < pluginPaths.size(); i++) {
359
                        if (pluginPaths.get(i).getName().equals(code)) {
360
                                return pluginPaths.get(i);
361
                        }
362
                }
363
                return null;
364
        }
365

    
366
        public File getDefaultLocalAddonRepository() {
367
                return defaultAddonRepository;
368
        }
369

    
370
        public void setDefaultLocalAddonRepository(File defaultAddonsRepository) {
371
                this.defaultAddonRepository = defaultAddonsRepository;
372
        }
373

    
374
}