root / tags / v2_0_0_Build_2047 / extensions / org.gvsig.installer / org.gvsig.installer / org.gvsig.installer.lib / org.gvsig.installer.lib.impl / src / main / java / org / gvsig / installer / lib / impl / creation / DefaultMakePluginPackageService.java @ 38358
History | View | Annotate | Download (13.9 KB)
1 | 32269 | jpiera | /* gvSIG. Geographic Information System of the Valencian Government
|
---|---|---|---|
2 | 32285 | jpiera | *
|
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 | 32269 | jpiera | |
23 | /*
|
||
24 | 32285 | jpiera | * AUTHORS (In addition to CIT):
|
25 | * 2010 {Prodevelop} {Task}
|
||
26 | */
|
||
27 | |||
28 | 32269 | jpiera | package org.gvsig.installer.lib.impl.creation; |
29 | |||
30 | 32411 | jpiera | import java.io.BufferedReader; |
31 | 32296 | jpiera | import java.io.ByteArrayInputStream; |
32 | 32269 | jpiera | import java.io.File; |
33 | 32285 | jpiera | import java.io.FileInputStream; |
34 | 32290 | jpiera | import java.io.FileOutputStream; |
35 | 32411 | jpiera | import java.io.FileReader; |
36 | 32290 | jpiera | import java.io.IOException; |
37 | import java.io.InputStream; |
||
38 | 34974 | nfrancisco | import java.io.InputStreamReader; |
39 | 32269 | jpiera | import java.io.OutputStream; |
40 | 34974 | nfrancisco | import java.net.URL; |
41 | import java.net.URLConnection; |
||
42 | 32411 | jpiera | import java.util.ArrayList; |
43 | import java.util.List; |
||
44 | 32269 | jpiera | |
45 | 33686 | cordinyana | import org.gvsig.installer.lib.api.InstallerManager; |
46 | 32562 | jpiera | import org.gvsig.installer.lib.api.PackageInfo; |
47 | import org.gvsig.installer.lib.api.creation.MakePluginPackageService; |
||
48 | import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException; |
||
49 | import org.gvsig.installer.lib.impl.DefaultPackageInfo; |
||
50 | 35486 | nfrancisco | import org.gvsig.installer.lib.impl.utils.DeleteFile; |
51 | 32627 | jpiera | import org.gvsig.installer.lib.spi.InstallPackageProviderServices; |
52 | 32498 | jpiera | import org.gvsig.installer.lib.spi.InstallerProviderLocator; |
53 | 32400 | jpiera | import org.gvsig.tools.service.Manager; |
54 | 37822 | nfrancisco | import org.slf4j.Logger; |
55 | import org.slf4j.LoggerFactory; |
||
56 | 32269 | jpiera | |
57 | /**
|
||
58 | * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodrá</a>
|
||
59 | */
|
||
60 | 33686 | cordinyana | public class DefaultMakePluginPackageService implements |
61 | 34160 | cordinyana | MakePluginPackageService { |
62 | 32562 | jpiera | |
63 | 34160 | cordinyana | private static final Logger LOG = LoggerFactory |
64 | .getLogger(DefaultMakePluginPackageService.class); |
||
65 | 34019 | cordinyana | |
66 | 34160 | cordinyana | public static final String ANT_FILE_NAME = "install.xml"; |
67 | public static final String COPIED_FILES_DIRECTORY_NAME = "files"; |
||
68 | private static final Logger logger = org.slf4j.LoggerFactory |
||
69 | .getLogger(DefaultMakePluginPackageService.class); |
||
70 | private final InstallerManager manager; |
||
71 | 32562 | jpiera | |
72 | 34160 | cordinyana | private List<PackageInfo> installerInfos = null; |
73 | 32562 | jpiera | |
74 | 34160 | cordinyana | protected String antScript = null; |
75 | private InstallPackageProviderServices installerProviderServices = null; |
||
76 | 32269 | jpiera | |
77 | 37822 | nfrancisco | public DefaultMakePluginPackageService(InstallerManager manager)
|
78 | throws MakePluginPackageServiceException {
|
||
79 | 34160 | cordinyana | super();
|
80 | this.manager = manager;
|
||
81 | 37822 | nfrancisco | this.installerInfos = new ArrayList<PackageInfo>(); |
82 | this.installerProviderServices = InstallerProviderLocator
|
||
83 | 34160 | cordinyana | .getProviderManager().createInstallerProviderServices(); |
84 | 37822 | nfrancisco | initialize(); |
85 | 34160 | cordinyana | } |
86 | 32290 | jpiera | |
87 | 37822 | nfrancisco | private void initialize() throws MakePluginPackageServiceException { |
88 | |||
89 | List<File> addonFolders = manager.getAddonFolders(); |
||
90 | |||
91 | if (addonFolders == null) { |
||
92 | 34160 | cordinyana | throw new MakePluginPackageServiceException( |
93 | 37822 | nfrancisco | "The addonFolders list is null");
|
94 | 34160 | cordinyana | } |
95 | 37822 | nfrancisco | // else if (addonFolders.size() <= 0) {
|
96 | // LOG.info("The addonFolders list is empty");
|
||
97 | // }
|
||
98 | else {
|
||
99 | // Read all the installed plugins
|
||
100 | for (int i = 0; i < addonFolders.size(); i++) { |
||
101 | File pluginDirectoryFile = addonFolders.get(i);
|
||
102 | 34947 | cordinyana | |
103 | 37822 | nfrancisco | if (!pluginDirectoryFile.exists()) {
|
104 | pluginDirectoryFile.mkdirs(); |
||
105 | LOG.info("Plugins folder created: {}", pluginDirectoryFile);
|
||
106 | } |
||
107 | 32562 | jpiera | |
108 | 34160 | cordinyana | DefaultPackageInfo packageInfo = new DefaultPackageInfo();
|
109 | 32562 | jpiera | |
110 | 34160 | cordinyana | installerProviderServices.readPackageInfo(new File( |
111 | pluginDirectoryFile.getAbsolutePath()), packageInfo); |
||
112 | 32597 | jpiera | |
113 | 34160 | cordinyana | // Checks if the ant file exists
|
114 | File antFile = getAntFile(pluginDirectoryFile);
|
||
115 | if (antFile.exists()) {
|
||
116 | try {
|
||
117 | 34974 | nfrancisco | packageInfo.setAntScript(readFileAsString(antFile |
118 | 34160 | cordinyana | .getAbsolutePath())); |
119 | } catch (IOException e) { |
||
120 | logger.error("Not possible to read the ant file");
|
||
121 | } |
||
122 | } |
||
123 | 32597 | jpiera | |
124 | 34160 | cordinyana | // Checks if there are files to copy
|
125 | File copiedFilesDirectory = getCopiedFilesDirectory(pluginDirectoryFile);
|
||
126 | if (copiedFilesDirectory.exists()) {
|
||
127 | loadCopiedFiles(copiedFilesDirectory, copiedFilesDirectory, |
||
128 | packageInfo); |
||
129 | } |
||
130 | 32597 | jpiera | |
131 | 34160 | cordinyana | installerInfos.add(packageInfo); |
132 | } |
||
133 | } |
||
134 | } |
||
135 | 32597 | jpiera | |
136 | 34160 | cordinyana | private void loadCopiedFiles(File file, File filesDirectory, |
137 | PackageInfo packageInfo) throws MakePluginPackageServiceException {
|
||
138 | if (file.isDirectory()) {
|
||
139 | File[] files = file.listFiles(); |
||
140 | for (int i = 0; i < files.length; i++) { |
||
141 | loadCopiedFiles(files[i], filesDirectory, packageInfo); |
||
142 | } |
||
143 | } else {
|
||
144 | 37599 | nfrancisco | // Removing the plugin prefix
|
145 | 32597 | jpiera | |
146 | 37599 | nfrancisco | String pluginFileName = file.getAbsolutePath().substring(
|
147 | filesDirectory.getAbsolutePath().length(), |
||
148 | file.getAbsolutePath().length()); |
||
149 | 32597 | jpiera | |
150 | 37822 | nfrancisco | File pluginFile = new File(System.getProperty("user.dir") |
151 | 37599 | nfrancisco | + pluginFileName); |
152 | |||
153 | packageInfo.getFilesToCopy().add(pluginFile); |
||
154 | 34160 | cordinyana | } |
155 | } |
||
156 | 32562 | jpiera | |
157 | 34160 | cordinyana | public void createPackageSet(PackageInfo packageInfo, |
158 | OutputStream packageStream)
|
||
159 | throws MakePluginPackageServiceException {
|
||
160 | 32562 | jpiera | |
161 | 34160 | cordinyana | LOG.debug("Creating a package set of the package info: \n{0}",
|
162 | packageInfo); |
||
163 | 34019 | cordinyana | |
164 | 34160 | cordinyana | String pluginFileName = manager.getPackageFileName(packageInfo);
|
165 | installerProviderServices.compressPackageSet( |
||
166 | getAbsolutePluginPackageDirectory(packageInfo), pluginFileName, |
||
167 | packageStream); |
||
168 | } |
||
169 | 34005 | cordinyana | |
170 | 37822 | nfrancisco | public void preparePackage(PackageInfo packageInfo, File originalPluginDir) |
171 | 37599 | nfrancisco | throws MakePluginPackageServiceException {
|
172 | 32285 | jpiera | |
173 | 37599 | nfrancisco | LOG.debug("Preparing a package set of the package info: \n{0}",
|
174 | packageInfo); |
||
175 | 37822 | nfrancisco | |
176 | 37599 | nfrancisco | // Write the package.info file
|
177 | 37829 | nfrancisco | writePackageInfo(packageInfo); |
178 | 32423 | jpiera | |
179 | 37599 | nfrancisco | if (packageInfo.getAntScript() != null) { |
180 | // Create the ant file
|
||
181 | writeAntFile(packageInfo); |
||
182 | |||
183 | // Copy the selected files
|
||
184 | writeSelectedFiles(packageInfo); |
||
185 | } |
||
186 | } |
||
187 | |||
188 | 34160 | cordinyana | public void createPackage(PackageInfo packageInfo, |
189 | OutputStream packageStream)
|
||
190 | throws MakePluginPackageServiceException {
|
||
191 | 34019 | cordinyana | |
192 | 37829 | nfrancisco | LOG.debug("Creating package of the package info: \n{0}", packageInfo);
|
193 | installerProviderServices.compressPackage( |
||
194 | getAbsolutePluginPackageDirectory(packageInfo), packageStream); |
||
195 | 34160 | cordinyana | } |
196 | 32562 | jpiera | |
197 | 37599 | nfrancisco | public void createPackageIndex(PackageInfo packageInfo, |
198 | OutputStream packageStream)
|
||
199 | throws MakePluginPackageServiceException {
|
||
200 | LOG.debug("Creating package index of the package info: \n{0}",
|
||
201 | packageInfo); |
||
202 | 34444 | cordinyana | |
203 | 37599 | nfrancisco | installerProviderServices.compressPackageIndex( |
204 | getAbsolutePluginPackageDirectory(packageInfo), packageStream); |
||
205 | } |
||
206 | 34444 | cordinyana | |
207 | 34160 | cordinyana | private void writePackageInfo(PackageInfo packageInfo) |
208 | throws MakePluginPackageServiceException {
|
||
209 | 37822 | nfrancisco | // conseguir directorio destino
|
210 | 34160 | cordinyana | writePackageInfo(packageInfo, |
211 | getAbsolutePluginPackageDirectory(packageInfo)); |
||
212 | } |
||
213 | 32562 | jpiera | |
214 | 34160 | cordinyana | public void writePackageInfo(PackageInfo packageInfo, File folder) |
215 | throws MakePluginPackageServiceException {
|
||
216 | installerProviderServices.writePackageInfo(folder, packageInfo); |
||
217 | } |
||
218 | 33697 | cordinyana | |
219 | 37599 | nfrancisco | public void writePackageInfoForIndex(PackageInfo packageInfo, File folder) |
220 | throws MakePluginPackageServiceException {
|
||
221 | installerProviderServices.writePackageInfoForIndex(folder, packageInfo); |
||
222 | } |
||
223 | 34444 | cordinyana | |
224 | 37599 | nfrancisco | private void createInstallDirInPluginDir(PackageInfo packageInfo) |
225 | throws MakePluginPackageServiceException {
|
||
226 | File pluginDirectory;
|
||
227 | pluginDirectory = getAbsolutePluginPackageDirectory(packageInfo); |
||
228 | File installdir = new File(pluginDirectory, "install"); |
||
229 | installdir.mkdir(); |
||
230 | 34974 | nfrancisco | |
231 | 37599 | nfrancisco | } |
232 | |||
233 | 34160 | cordinyana | private void writeAntFile(PackageInfo packageInfo) |
234 | throws MakePluginPackageServiceException {
|
||
235 | try {
|
||
236 | 37599 | nfrancisco | createInstallDirInPluginDir(packageInfo); |
237 | 34160 | cordinyana | ByteArrayInputStream in = new ByteArrayInputStream(packageInfo |
238 | .getAntScript().getBytes()); |
||
239 | OutputStream out = new FileOutputStream( |
||
240 | getAbsoluteAntFile(packageInfo)); |
||
241 | 32562 | jpiera | |
242 | 34160 | cordinyana | // Copy the bits from instream to outstream
|
243 | byte[] buf = new byte[1024]; |
||
244 | int len;
|
||
245 | while ((len = in.read(buf)) > 0) { |
||
246 | out.write(buf, 0, len);
|
||
247 | } |
||
248 | in.close(); |
||
249 | out.close(); |
||
250 | } catch (IOException e) { |
||
251 | throw new MakePluginPackageServiceException( |
||
252 | "Exception writing the ant file");
|
||
253 | } |
||
254 | 32285 | jpiera | |
255 | 34160 | cordinyana | } |
256 | 32296 | jpiera | |
257 | 37599 | nfrancisco | private void writeSelectedFiles(PackageInfo packageInfo) |
258 | throws MakePluginPackageServiceException {
|
||
259 | try {
|
||
260 | createInstallDirInPluginDir(packageInfo); |
||
261 | String copiedFilesDirectoryName = getAbsoulteCopiedFilesDirectoryName(packageInfo);
|
||
262 | 32597 | jpiera | |
263 | 37599 | nfrancisco | // Deleting the previous files folder
|
264 | File copiedFilesDirectoryfile = new File(copiedFilesDirectoryName); |
||
265 | deleteDirectory(copiedFilesDirectoryfile); |
||
266 | 32296 | jpiera | |
267 | 37599 | nfrancisco | // It works if the plugins directory is in the folder
|
268 | // "gvSIG/extensiones"
|
||
269 | 37822 | nfrancisco | String applicationDirectory = System.getProperty("user.dir"); |
270 | 32562 | jpiera | |
271 | 37599 | nfrancisco | List<File> files = packageInfo.getFilesToCopy(); |
272 | 32290 | jpiera | |
273 | 37599 | nfrancisco | for (int i = 0; i < files.size(); i++) { |
274 | String sourceFile = files.get(i).getAbsolutePath();
|
||
275 | 32597 | jpiera | |
276 | 37599 | nfrancisco | // Create the final path
|
277 | String destFile = sourceFile.substring(applicationDirectory
|
||
278 | .length(), sourceFile.length()); |
||
279 | destFile = copiedFilesDirectoryName + destFile; |
||
280 | 32597 | jpiera | |
281 | 37599 | nfrancisco | // Copy the files
|
282 | copy(new File(sourceFile), new File(destFile)); |
||
283 | } |
||
284 | } catch (IOException e) { |
||
285 | throw new MakePluginPackageServiceException( |
||
286 | "Exception copying the files", e);
|
||
287 | } |
||
288 | } |
||
289 | 35486 | nfrancisco | |
290 | 34160 | cordinyana | static public boolean deleteDirectory(File path) { |
291 | if (path.exists()) {
|
||
292 | File[] files = path.listFiles(); |
||
293 | for (int i = 0; i < files.length; i++) { |
||
294 | if (files[i].isDirectory()) {
|
||
295 | deleteDirectory(files[i]); |
||
296 | } else {
|
||
297 | files[i].delete(); |
||
298 | } |
||
299 | } |
||
300 | } |
||
301 | return (path.delete());
|
||
302 | } |
||
303 | 32423 | jpiera | |
304 | 37822 | nfrancisco | private void copy(File sourceLocation, File targetLocation) |
305 | throws IOException { |
||
306 | 34160 | cordinyana | if (sourceLocation.isDirectory()) {
|
307 | if (!targetLocation.exists()) {
|
||
308 | targetLocation.mkdir(); |
||
309 | } |
||
310 | 32290 | jpiera | |
311 | 34160 | cordinyana | String[] children = sourceLocation.list(); |
312 | for (int i = 0; i < children.length; i++) { |
||
313 | copy(new File(sourceLocation, children[i]), new File( |
||
314 | targetLocation, children[i])); |
||
315 | } |
||
316 | } else {
|
||
317 | targetLocation.getParentFile().mkdirs(); |
||
318 | 32423 | jpiera | |
319 | 34160 | cordinyana | InputStream in = new FileInputStream(sourceLocation); |
320 | OutputStream out = new FileOutputStream(targetLocation); |
||
321 | 32411 | jpiera | |
322 | 34160 | cordinyana | // Copy the bits from instream to outstream
|
323 | byte[] buf = new byte[1024]; |
||
324 | int len;
|
||
325 | while ((len = in.read(buf)) > 0) { |
||
326 | out.write(buf, 0, len);
|
||
327 | } |
||
328 | in.close(); |
||
329 | out.close(); |
||
330 | } |
||
331 | } |
||
332 | 32411 | jpiera | |
333 | 34160 | cordinyana | private File getCopiedFilesDirectory(File pluginDirectory) |
334 | throws MakePluginPackageServiceException {
|
||
335 | 37599 | nfrancisco | return new File(pluginDirectory.getAbsolutePath() + File.separator |
336 | + "install" + File.separator + COPIED_FILES_DIRECTORY_NAME); |
||
337 | 34160 | cordinyana | } |
338 | 32290 | jpiera | |
339 | 34160 | cordinyana | private String getAbsoulteCopiedFilesDirectoryName(PackageInfo packageInfo) |
340 | throws MakePluginPackageServiceException {
|
||
341 | return getAbsolutePluginPackageDirectory(packageInfo).getAbsolutePath()
|
||
342 | 37599 | nfrancisco | + File.separator + "install" + File.separator |
343 | + COPIED_FILES_DIRECTORY_NAME; |
||
344 | 34160 | cordinyana | } |
345 | 32290 | jpiera | |
346 | 34160 | cordinyana | private File getAntFile(File pluginDirectory) |
347 | throws MakePluginPackageServiceException {
|
||
348 | 37599 | nfrancisco | return new File(pluginDirectory.getAbsolutePath() + File.separator |
349 | + "install" + File.separator + ANT_FILE_NAME); |
||
350 | 34160 | cordinyana | } |
351 | 32290 | jpiera | |
352 | 34160 | cordinyana | private File getAbsoluteAntFile(PackageInfo packageInfo) |
353 | throws MakePluginPackageServiceException {
|
||
354 | 37829 | nfrancisco | String destinationFilePath = manager.getDefaultLocalAddonRepository()
|
355 | 37822 | nfrancisco | .getAbsolutePath() |
356 | + File.separator + packageInfo.getCode();
|
||
357 | 38238 | jjdelcerro | return new File(destinationFilePath + File.separator + "install" + File.separator + ANT_FILE_NAME); |
358 | 34160 | cordinyana | } |
359 | 32290 | jpiera | |
360 | 34160 | cordinyana | private File getAbsolutePluginPackageDirectory(PackageInfo packageInfo) |
361 | throws MakePluginPackageServiceException {
|
||
362 | 37829 | nfrancisco | String destinationFilePath = manager.getDefaultLocalAddonRepository()
|
363 | 37822 | nfrancisco | .getAbsolutePath() |
364 | + File.separator + packageInfo.getCode();
|
||
365 | return new File(destinationFilePath); |
||
366 | 34160 | cordinyana | } |
367 | 32269 | jpiera | |
368 | 34160 | cordinyana | public Manager getManager() {
|
369 | return this.manager; |
||
370 | } |
||
371 | 32597 | jpiera | |
372 | 34160 | cordinyana | public PackageInfo getPluginPackageInfo(int index) { |
373 | if (index >= installerInfos.size()) {
|
||
374 | return null; |
||
375 | } |
||
376 | return installerInfos.get(index);
|
||
377 | } |
||
378 | 32290 | jpiera | |
379 | 34160 | cordinyana | public PackageInfo getPluginPackageInfo(String code) { |
380 | for (int i = 0; i < getPluginPackageCount(); i++) { |
||
381 | if (installerInfos.get(i).getCode() != null |
||
382 | && installerInfos.get(i).getCode().equals(code)) { |
||
383 | return installerInfos.get(i);
|
||
384 | } |
||
385 | } |
||
386 | 34230 | cordinyana | PackageInfo info = new DefaultPackageInfo();
|
387 | info.setCode(code); |
||
388 | return info;
|
||
389 | 34160 | cordinyana | } |
390 | 32423 | jpiera | |
391 | 34160 | cordinyana | public int getPluginPackageCount() { |
392 | return installerInfos.size();
|
||
393 | } |
||
394 | 32597 | jpiera | |
395 | 34160 | cordinyana | public String getDefaultAntScript() |
396 | throws MakePluginPackageServiceException {
|
||
397 | try {
|
||
398 | 37599 | nfrancisco | URL resource = getClass().getResource(ANT_FILE_NAME);
|
399 | return readUrlAsString(resource);
|
||
400 | 34160 | cordinyana | } catch (IOException e) { |
401 | throw new MakePluginPackageServiceException( |
||
402 | "Impossible to read the default ant file", e);
|
||
403 | } |
||
404 | } |
||
405 | 32269 | jpiera | |
406 | 37599 | nfrancisco | private String readUrlAsString(URL url) throws java.io.IOException { |
407 | URLConnection urlConnection = url.openConnection();
|
||
408 | InputStream inputStream = urlConnection.getInputStream();
|
||
409 | BufferedReader bufferedReader = new BufferedReader( |
||
410 | new InputStreamReader(inputStream)); |
||
411 | StringBuffer fileData = new StringBuffer(1000); |
||
412 | String line = bufferedReader.readLine();
|
||
413 | while (line != null) { |
||
414 | fileData.append(line + "\n");
|
||
415 | line = bufferedReader.readLine(); |
||
416 | } |
||
417 | bufferedReader.close(); |
||
418 | return fileData.toString();
|
||
419 | } |
||
420 | 32290 | jpiera | |
421 | 37599 | nfrancisco | private String readFileAsString(String filePath) throws java.io.IOException { |
422 | StringBuffer fileData = new StringBuffer(1000); |
||
423 | BufferedReader reader = new BufferedReader(new FileReader(filePath)); |
||
424 | char[] buf = new char[1024]; |
||
425 | int numRead = 0; |
||
426 | while ((numRead = reader.read(buf)) != -1) { |
||
427 | String readData = String.valueOf(buf, 0, numRead); |
||
428 | fileData.append(readData); |
||
429 | buf = new char[1024]; |
||
430 | } |
||
431 | reader.close(); |
||
432 | return fileData.toString();
|
||
433 | } |
||
434 | 34974 | nfrancisco | |
435 | 34160 | cordinyana | public PackageInfo[] getInstalledPackages() |
436 | throws MakePluginPackageServiceException {
|
||
437 | return installerInfos.toArray(new PackageInfo[installerInfos.size()]); |
||
438 | } |
||
439 | 34444 | cordinyana | |
440 | 37599 | nfrancisco | public File getPluginFolder(PackageInfo packageInfo) |
441 | throws MakePluginPackageServiceException {
|
||
442 | return getAbsolutePluginPackageDirectory(packageInfo);
|
||
443 | } |
||
444 | 35486 | nfrancisco | |
445 | 37599 | nfrancisco | public boolean deleteDir(File folder) { |
446 | DeleteFile file = new DeleteFile();
|
||
447 | return file.delete(folder);
|
||
448 | } |
||
449 | |||
450 | 32269 | jpiera | } |