Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.installer / org.gvsig.installer.lib / org.gvsig.installer.lib.impl / src / main / java / org / gvsig / installer / lib / impl / creation / DefaultMakePackageService.java @ 40560

History | View | Annotate | Download (6.64 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.installer.lib.impl.creation;
25

    
26
import java.io.BufferedReader;
27
import java.io.ByteArrayInputStream;
28
import java.io.File;
29
import java.io.FileOutputStream;
30
import java.io.IOException;
31
import java.io.InputStream;
32
import java.io.InputStreamReader;
33
import java.io.OutputStream;
34
import java.net.URL;
35
import java.net.URLConnection;
36

    
37
import org.slf4j.Logger;
38
import org.slf4j.LoggerFactory;
39

    
40
import org.gvsig.installer.lib.api.InstallerManager;
41
import org.gvsig.installer.lib.api.PackageInfo;
42
import org.gvsig.installer.lib.api.creation.MakePackageService;
43
import org.gvsig.installer.lib.api.creation.MakePackageServiceException;
44
import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
45
import org.gvsig.installer.lib.spi.InstallPackageProviderServices;
46
import org.gvsig.installer.lib.spi.InstallerProviderLocator;
47
import org.gvsig.tools.service.Manager;
48

    
49
/**
50
 * @author gvSIG Team
51
 * @version $Id$
52
 * 
53
 */
54
public class DefaultMakePackageService implements MakePackageService {
55

    
56
        private static final Logger LOG = LoggerFactory
57
                        .getLogger(DefaultMakePackageService.class);
58

    
59
        public static final String COPIED_FILES_DIRECTORY_NAME = "files";
60

    
61
        private final InstallerManager manager;
62
        protected File packageFolder;
63

    
64
        protected String antScript = null;
65
        private InstallPackageProviderServices installerProviderServices = null;
66

    
67
        private PackageInfo packageInfo;
68

    
69
        public DefaultMakePackageService(InstallerManager manager,
70
                        File packageFolder, PackageInfo packageInfo) {
71
                super();
72
                this.manager = manager;
73
                this.packageFolder = packageFolder;
74
                this.packageInfo = packageInfo;
75
                installerProviderServices = InstallerProviderLocator
76
                                .getProviderManager().createInstallerProviderServices();
77
        }
78

    
79
        public Manager getManager() {
80
                return this.manager;
81
        }
82

    
83
        public void preparePackage() throws MakePackageServiceException {
84

    
85
                LOG.debug("Preparing a package set of the package info: \n{0}",
86
                                packageInfo);
87

    
88
                if (packageInfo.getAntScript() != null) {
89
                        // Create the ant file
90
                        writeAntFile(packageInfo);
91
                }
92
        }
93

    
94
        public void createPackageSet(OutputStream packageStream)
95
                        throws MakePackageServiceException {
96

    
97
                LOG.debug("Creating a package set of the package info: \n{0}",
98
                                packageInfo);
99

    
100
                installerProviderServices.writePackageInfo(this.packageFolder,
101
                                this.packageInfo);
102
                String pluginFileName = manager.getPackageFileName(packageInfo);
103
                installerProviderServices.compressPackageSet(this.packageFolder,
104
                                pluginFileName, packageStream);
105
        }
106

    
107
        public void createPackageIndexSet(URL downloadurl,
108
                        OutputStream packageStream) throws MakePackageServiceException {
109

    
110
                LOG.debug("Creating a package set of the package info: \n{0}",
111
                                packageInfo);
112

    
113
                try {
114
                        PackageInfo infoIndex = (PackageInfo) packageInfo.clone();
115
                        infoIndex.setDownloadURL(downloadurl);
116
                        installerProviderServices.writePackageInfo(this.packageFolder,
117
                                        this.packageInfo);
118

    
119
                        String pluginFileName = manager.getPackageFileName(packageInfo);
120
                        installerProviderServices.compressPackageSet(this.packageFolder,
121
                                        pluginFileName, packageStream);
122
                } catch (Exception e) {
123
                        throw new MakePackageServiceException(e);
124
                }
125
        }
126

    
127
        public void createPackage(OutputStream packageStream)
128
                        throws MakePackageServiceException {
129
                LOG.debug("Creating package of the package info: \n{0}", packageInfo);
130

    
131
                installerProviderServices.writePackageInfo(this.packageFolder,
132
                                this.packageInfo);
133
                installerProviderServices.compressPackage(this.packageFolder,
134
                                packageStream);
135
        }
136

    
137
        public void createPackageIndex(URL downloadurl, OutputStream packageStream)
138
                        throws MakePackageServiceException {
139
                LOG.debug("Creating package index of the package info: \n{0}",
140
                                packageInfo);
141

    
142
                try {
143
                        PackageInfo infoIndex = (PackageInfo) packageInfo.clone();
144
                        infoIndex.setDownloadURL(downloadurl);
145
                        installerProviderServices.writePackageInfo(this.packageFolder,
146
                                        infoIndex);
147
                        installerProviderServices.compressPackageIndex(this.packageFolder,
148
                                        packageStream);
149
                } catch (Exception e) {
150
                        throw new MakePackageServiceException(e);
151
                }
152
        }
153

    
154
        protected void createInstallFolderInPackageFolder() {
155
                File installdir = new File(this.packageFolder, "install");
156
                installdir.mkdir();
157
        }
158

    
159
        private void writeAntFile(PackageInfo packageInfo)
160
                        throws MakePluginPackageServiceException {
161
                try {
162
                        createInstallFolderInPackageFolder();
163
                        ByteArrayInputStream in = new ByteArrayInputStream(packageInfo
164
                                        .getAntScript().getBytes());
165
                        OutputStream out = new FileOutputStream(getAntFile());
166

    
167
                        // Copy the bits from instream to outstream
168
                        byte[] buf = new byte[1024];
169
                        int len;
170
                        while ((len = in.read(buf)) > 0) {
171
                                out.write(buf, 0, len);
172
                        }
173
                        in.close();
174
                        out.close();
175
                } catch (IOException e) {
176
                        throw new MakePluginPackageServiceException(
177
                                        "Exception writing the ant file");
178
                }
179

    
180
        }
181

    
182
        private File getAntFile() {
183
                return new File(this.packageFolder.getAbsolutePath() + File.separator
184
                                + "install" + File.separator + ANT_FILE_NAME);
185
        }
186

    
187
        public String getDefaultAntScript()
188
                        throws MakePluginPackageServiceException {
189
                try {
190
                        URL resource = getClass().getResource(ANT_FILE_NAME);
191
                        return readUrlAsString(resource);
192
                } catch (IOException e) {
193
                        throw new MakePluginPackageServiceException(
194
                                        "Impossible to read the default ant file", e);
195
                }
196
        }
197

    
198
        private String readUrlAsString(URL url) throws java.io.IOException {
199
                URLConnection urlConnection = url.openConnection();
200
                InputStream inputStream = urlConnection.getInputStream();
201
                BufferedReader bufferedReader = new BufferedReader(
202
                                new InputStreamReader(inputStream));
203
                StringBuffer fileData = new StringBuffer(1000);
204
                String line = bufferedReader.readLine();
205
                while (line != null) {
206
                        fileData.append(line + "\n");
207
                        line = bufferedReader.readLine();
208
                }
209
                bufferedReader.close();
210
                return fileData.toString();
211
        }
212

    
213
}