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 |
} |