Statistics
| Revision:

svn-gvsig-desktop / 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 @ 37489

History | View | Annotate | Download (10.2 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

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

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

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

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

    
75
    private String packageNameFormat =
76
        "gvSIG-desktop-{0}-{1}-{2}-{4}-{5}-{6}-{7}.gvspkg";
77

    
78
    private String packageIndexNameFormat =
79
        "gvSIG-desktop-{0}-{1}-{2}-{4}-{5}-{6}-{7}.gvspki";
80

    
81
    private URL BaseDownloadURL = null;
82
    private String version = null;
83

    
84
    public DefaultInstallerManager() {
85
        super(new DefaultInstallerProviderManager());
86
    }
87

    
88
    public String getPackageSetNameFormat() {
89
        return packageSetNameFormat;
90
    }
91

    
92
    public void setPackageSetNameFormat(String packageSetNameFormat) {
93
        this.packageSetNameFormat = packageSetNameFormat;
94
    }
95

    
96
    public String getPackageNameFormat() {
97
        return packageNameFormat;
98
    }
99

    
100
    public void setPackageNameFormat(String packageNameFormat) {
101
        this.packageNameFormat = packageNameFormat;
102
    }
103

    
104
    public String getPackageIndexNameFormat() {
105
        return packageIndexNameFormat;
106
    }
107

    
108
    public void setPackageIndexNameFormat(String packageIndexNameFormat) {
109
        this.packageIndexNameFormat = packageIndexNameFormat;
110
    }
111

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

    
127
    public class InstallerCreationException extends
128
        InstallPackageServiceException {
129

    
130
        private static final long serialVersionUID = 759329820705535873L;
131

    
132
        private static final String message =
133
            "Error creating the installer service to install plugins";
134

    
135
        private static final String KEY =
136
            "_Error_creating_the_installer_service_to_install_plugins";
137

    
138
        public InstallerCreationException(Exception e) {
139
            super(message, e, KEY, serialVersionUID);
140
        }
141

    
142
    }
143

    
144
    public InstallPackageService getInstallPackageService()
145
        throws InstallPackageServiceException {
146
        ExtensionPoint ep =
147
            extensionPoints.add(INSTALLER_MANAGER_EXTENSION_POINT);
148
        try {
149
            Object[] args = new Object[1];
150
            args[0] = this;
151
            return (InstallPackageService) ep.create(
152
                INSTALLER_EXECUTION_SERVICE_NAME, args);
153
        } catch (Exception e) {
154
            throw new InstallerCreationException(e);
155
        }
156
    }
157

    
158
    public void registerMakePluginPackageService(
159
        Class<? extends MakePluginPackageService> clazz) {
160
        ExtensionPoint extensionPoint =
161
            extensionPoints.add(INSTALLER_MANAGER_EXTENSION_POINT, "");
162
        extensionPoint.append(INSTALLER_CREATION_SERVICE_NAME, "", clazz);
163
    }
164

    
165
    public void registerInstallPackageService(
166
        Class<? extends InstallPackageService> clazz) {
167
        ExtensionPoint extensionPoint =
168
            extensionPoints.add(INSTALLER_MANAGER_EXTENSION_POINT, "");
169
        extensionPoint.append(INSTALLER_EXECUTION_SERVICE_NAME, "", clazz);
170
    }
171

    
172
    public Service getService(DynObject parameters) throws ServiceException {
173
        return null;
174
    }
175

    
176
    public String getPackageSetFileName(PackageInfo info) {
177
        Object[] parameters = getPackageNameFormatParameters(info);
178
        return MessageFormat.format(getPackageSetNameFormat(), parameters);
179
    }
180

    
181
    public String getPackageFileName(PackageInfo info) {
182
        Object[] parameters = getPackageNameFormatParameters(info);
183
        return MessageFormat.format(getPackageNameFormat(), parameters);
184
    }
185

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

    
191
    private Object[] getPackageNameFormatParameters(PackageInfo info) {
192
        Object[] parameters = new Object[8];
193
        parameters[PACKAGE_FILE_NAME_FIELDS.GVSIG_VERSION] =
194
            info.getGvSIGVersion();
195
        parameters[PACKAGE_FILE_NAME_FIELDS.NAME] = info.getCode();
196
        parameters[PACKAGE_FILE_NAME_FIELDS.VERSION] = info.getVersion();
197
        parameters[PACKAGE_FILE_NAME_FIELDS.BUILD] = info.getBuild();
198
        parameters[PACKAGE_FILE_NAME_FIELDS.STATE] = info.getState();
199
        parameters[PACKAGE_FILE_NAME_FIELDS.OS] = info.getOperatingSystem();
200
        parameters[PACKAGE_FILE_NAME_FIELDS.ARCH] = info.getArchitecture();
201
        parameters[PACKAGE_FILE_NAME_FIELDS.JVM] = info.getJavaVM();
202
        return parameters;
203
    }
204

    
205
    public PackageInfo[] getInstalledPackages(File pluginsDirectory)
206
        throws MakePluginPackageServiceException {
207
        MakePluginPackageService service =
208
            getMakePluginPackageService(pluginsDirectory);
209
        return service.getInstalledPackages();
210
    }
211

    
212
    public String getDefaultPackageFileExtension() {
213
        return "gvspkg";
214
    }
215

    
216
    public String getDefaultPackageSetFileExtension() {
217
        return "gvspks";
218
    }
219

    
220
    public String getOperatingSystem() {
221
        String osname = System.getProperty("os.name");
222
        if (osname.toLowerCase().startsWith("linux")) {
223
            return InstallerManager.OS.LINUX;
224
        }
225
        if (osname.toLowerCase().startsWith("window")) {
226
            return InstallerManager.OS.WINDOWS;
227
        }
228
        return osname;
229
    }
230

    
231
    public String getArchitecture() {
232
        String osarch = System.getProperty("os.arch");
233
        if (osarch.toLowerCase().startsWith("i386")) {
234
            return InstallerManager.ARCH.X86;
235
        }
236
        if (osarch.toLowerCase().startsWith("x86")) {
237
            return InstallerManager.ARCH.X86;
238
        }
239
        if (osarch.toLowerCase().startsWith("amd64")) {
240
            return InstallerManager.ARCH.X86_64;
241
        }
242
        return osarch;
243
    }
244

    
245
    public Dependency createDependency(PackageInfo packageInfo) {
246
        return new DefaultDependency(packageInfo);
247
    }
248

    
249
    public Dependency createDependency() {
250
        return new DefaultDependency();
251
    }
252

    
253
    public DependenciesCalculator createDependenciesCalculator(
254
        InstallPackageService installService) {
255
        return new DefaultDependenciesCalculator(installService);
256
    }
257

    
258
    public Version createVersion() {
259
        return new DefaultVersion();
260
    }
261

    
262
    public PackageInfoReader getDefaultPackageInfoReader() {
263
        return new InstallerInfoFileReader();
264
    }
265

    
266
    public PackageInfoWriter getDefaultPackageInfoWriter() {
267
        return new InstallerInfoFileWriter();
268
    }
269

    
270
    public MakePackageService createMakePackage(File packageFolder,
271
        PackageInfo packageInfo) {
272
        return new DefaultMakePackageService(this, packageFolder, packageInfo);
273
    }
274

    
275
    public PackageInfo createPackageInfo() {
276
        return new DefaultPackageInfo();
277
    }
278

    
279
    public URL getDownloadBaseURL() {
280
        return this.BaseDownloadURL;
281
    }
282

    
283
    public String getVersion() {
284
        return this.version;
285
    }
286

    
287
    public void setDownloadBaseURL(URL url) {
288
        this.BaseDownloadURL = url;
289
    }
290

    
291
    public void setVersion(String version) {
292
        this.version = version;
293
    }
294

    
295
}