Revision 37822 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/creation/DefaultMakePluginPackageService.java
DefaultMakePluginPackageService.java | ||
---|---|---|
40 | 40 |
import java.net.URL; |
41 | 41 |
import java.net.URLConnection; |
42 | 42 |
import java.util.ArrayList; |
43 |
import java.util.HashMap; |
|
44 | 43 |
import java.util.List; |
45 |
import java.util.Map; |
|
46 | 44 |
|
47 |
import org.slf4j.Logger; |
|
48 |
import org.slf4j.LoggerFactory; |
|
49 |
|
|
50 | 45 |
import org.gvsig.installer.lib.api.InstallerManager; |
51 | 46 |
import org.gvsig.installer.lib.api.PackageInfo; |
52 | 47 |
import org.gvsig.installer.lib.api.creation.MakePluginPackageService; |
... | ... | |
56 | 51 |
import org.gvsig.installer.lib.spi.InstallPackageProviderServices; |
57 | 52 |
import org.gvsig.installer.lib.spi.InstallerProviderLocator; |
58 | 53 |
import org.gvsig.tools.service.Manager; |
54 |
import org.slf4j.Logger; |
|
55 |
import org.slf4j.LoggerFactory; |
|
59 | 56 |
|
60 | 57 |
/** |
61 | 58 |
* @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodrá</a> |
... | ... | |
68 | 65 |
|
69 | 66 |
public static final String ANT_FILE_NAME = "install.xml"; |
70 | 67 |
public static final String COPIED_FILES_DIRECTORY_NAME = "files"; |
71 |
private File pluginsDirectory; |
|
72 | 68 |
private static final Logger logger = org.slf4j.LoggerFactory |
73 | 69 |
.getLogger(DefaultMakePluginPackageService.class); |
74 | 70 |
private final InstallerManager manager; |
71 |
private File tempDir; |
|
75 | 72 |
|
76 | 73 |
private List<PackageInfo> installerInfos = null; |
77 |
private Map<PackageInfo, String> directories = null; |
|
78 | 74 |
|
79 | 75 |
protected String antScript = null; |
80 | 76 |
private InstallPackageProviderServices installerProviderServices = null; |
81 | 77 |
|
82 |
public DefaultMakePluginPackageService(InstallerManager manager,
|
|
83 |
File pluginsDirectory) throws MakePluginPackageServiceException {
|
|
78 |
public DefaultMakePluginPackageService(InstallerManager manager)
|
|
79 |
throws MakePluginPackageServiceException { |
|
84 | 80 |
super(); |
85 | 81 |
this.manager = manager; |
86 |
installerInfos = new ArrayList<PackageInfo>(); |
|
87 |
directories = new HashMap<PackageInfo, String>(); |
|
88 |
installerProviderServices = InstallerProviderLocator |
|
82 |
this.installerInfos = new ArrayList<PackageInfo>(); |
|
83 |
this.installerProviderServices = InstallerProviderLocator |
|
89 | 84 |
.getProviderManager().createInstallerProviderServices(); |
90 |
initialize(pluginsDirectory);
|
|
85 |
initialize(); |
|
91 | 86 |
} |
92 | 87 |
|
93 |
private void initialize(File pluginsDirectory) |
|
94 |
throws MakePluginPackageServiceException { |
|
95 |
if (!pluginsDirectory.exists()) { |
|
96 |
pluginsDirectory.mkdirs(); |
|
97 |
LOG.info("Plugins folder created: {}", pluginsDirectory); |
|
98 |
} else if (!pluginsDirectory.isDirectory()) { |
|
88 |
private void initialize() throws MakePluginPackageServiceException { |
|
89 |
|
|
90 |
List<File> addonFolders = manager.getAddonFolders(); |
|
91 |
|
|
92 |
if (addonFolders == null) { |
|
99 | 93 |
throw new MakePluginPackageServiceException( |
100 |
"The plugins directory exists and not is a directory");
|
|
94 |
"The addonFolders list is null");
|
|
101 | 95 |
} |
96 |
// else if (addonFolders.size() <= 0) { |
|
97 |
// LOG.info("The addonFolders list is empty"); |
|
98 |
// } |
|
99 |
else { |
|
100 |
// Read all the installed plugins |
|
101 |
for (int i = 0; i < addonFolders.size(); i++) { |
|
102 |
File pluginDirectoryFile = addonFolders.get(i); |
|
102 | 103 |
|
103 |
this.pluginsDirectory = pluginsDirectory; |
|
104 |
if (!pluginDirectoryFile.exists()) { |
|
105 |
pluginDirectoryFile.mkdirs(); |
|
106 |
LOG.info("Plugins folder created: {}", pluginDirectoryFile); |
|
107 |
} |
|
104 | 108 |
|
105 |
// Read all the installed plugins |
|
106 |
String[] plugins = pluginsDirectory.list(); |
|
107 |
|
|
108 |
if (plugins != null) { |
|
109 |
for (int i = 0; i < plugins.length; i++) { |
|
110 |
String pluginDirectoryName = plugins[i]; |
|
111 |
File pluginDirectoryFile = getAbsolutePluginPackageDirectory(pluginDirectoryName); |
|
112 | 109 |
DefaultPackageInfo packageInfo = new DefaultPackageInfo(); |
113 | 110 |
|
114 | 111 |
installerProviderServices.readPackageInfo(new File( |
... | ... | |
133 | 130 |
} |
134 | 131 |
|
135 | 132 |
installerInfos.add(packageInfo); |
136 |
directories.put(packageInfo, pluginDirectoryName); |
|
137 | 133 |
} |
138 | 134 |
} |
139 | 135 |
} |
... | ... | |
152 | 148 |
filesDirectory.getAbsolutePath().length(), |
153 | 149 |
file.getAbsolutePath().length()); |
154 | 150 |
|
155 |
// Adding the root directory |
|
156 |
File pluginFile = new File(pluginsDirectory.getParentFile() |
|
157 |
.getParentFile().getAbsolutePath() |
|
151 |
File pluginFile = new File(System.getProperty("user.dir") |
|
158 | 152 |
+ pluginFileName); |
159 | 153 |
|
160 | 154 |
packageInfo.getFilesToCopy().add(pluginFile); |
... | ... | |
174 | 168 |
packageStream); |
175 | 169 |
} |
176 | 170 |
|
177 |
public void preparePackage(PackageInfo packageInfo) |
|
171 |
public void preparePackage(PackageInfo packageInfo, File originalPluginDir)
|
|
178 | 172 |
throws MakePluginPackageServiceException { |
179 | 173 |
|
180 | 174 |
LOG.debug("Preparing a package set of the package info: \n{0}", |
181 | 175 |
packageInfo); |
176 |
|
|
177 |
tempDir = new File(manager.getDefaultAddonRepository() |
|
178 |
.getAbsolutePath() |
|
179 |
+ File.separator + "temp"); |
|
180 |
File destinationPluginDir = new File(tempDir.getAbsolutePath() |
|
181 |
+ File.separator + packageInfo.getCode()); |
|
182 |
|
|
183 |
// TODO: create copy of original plugin? |
|
184 |
try { |
|
185 |
copy(originalPluginDir, destinationPluginDir); |
|
186 |
} catch (IOException e) { |
|
187 |
throw new MakePluginPackageServiceException( |
|
188 |
"Exception copying the files", e); |
|
189 |
} |
|
190 |
|
|
182 | 191 |
// Write the package.info file |
183 |
writePackageInfo(packageInfo); |
|
192 |
writePackageInfo(packageInfo, new File(tempDir.getAbsolutePath() |
|
193 |
+ File.separator + packageInfo.getCode())); |
|
184 | 194 |
|
185 | 195 |
if (packageInfo.getAntScript() != null) { |
186 | 196 |
// Create the ant file |
... | ... | |
196 | 206 |
throws MakePluginPackageServiceException { |
197 | 207 |
LOG.debug("Creating package of the package info: \n{0}", packageInfo); |
198 | 208 |
|
199 |
installerProviderServices.compressPackage( |
|
200 |
getAbsolutePluginPackageDirectory(packageInfo), packageStream); |
|
209 |
// installerProviderServices.compressPackage( |
|
210 |
// getAbsolutePluginPackageDirectory(packageInfo), packageStream); |
|
211 |
|
|
212 |
File pluginPackagePath = new File(tempDir.getAbsolutePath() |
|
213 |
+ File.separator + packageInfo.getCode()); |
|
214 |
installerProviderServices.compressPackage(pluginPackagePath, |
|
215 |
packageStream); |
|
216 |
|
|
217 |
// TODO: delete dir? si code diferente? si modificado? |
|
218 |
deleteDir(tempDir); |
|
201 | 219 |
} |
202 | 220 |
|
203 | 221 |
public void createPackageIndex(PackageInfo packageInfo, |
... | ... | |
212 | 230 |
|
213 | 231 |
private void writePackageInfo(PackageInfo packageInfo) |
214 | 232 |
throws MakePluginPackageServiceException { |
233 |
// conseguir directorio destino |
|
215 | 234 |
writePackageInfo(packageInfo, |
216 | 235 |
getAbsolutePluginPackageDirectory(packageInfo)); |
217 | 236 |
} |
... | ... | |
271 | 290 |
|
272 | 291 |
// It works if the plugins directory is in the folder |
273 | 292 |
// "gvSIG/extensiones" |
274 |
String applicationDirectory = pluginsDirectory.getParentFile() |
|
275 |
.getParent(); |
|
293 |
String applicationDirectory = System.getProperty("user.dir"); |
|
276 | 294 |
|
277 | 295 |
List<File> files = packageInfo.getFilesToCopy(); |
278 | 296 |
|
... | ... | |
307 | 325 |
return (path.delete()); |
308 | 326 |
} |
309 | 327 |
|
310 |
void copy(File sourceLocation, File targetLocation) throws IOException { |
|
328 |
private void copy(File sourceLocation, File targetLocation) |
|
329 |
throws IOException { |
|
311 | 330 |
if (sourceLocation.isDirectory()) { |
312 | 331 |
if (!targetLocation.exists()) { |
313 | 332 |
targetLocation.mkdir(); |
... | ... | |
335 | 354 |
} |
336 | 355 |
} |
337 | 356 |
|
338 |
private String getPluginPackageDirectory(PackageInfo packageInfo) { |
|
339 |
return directories.get(packageInfo); |
|
340 |
} |
|
341 |
|
|
342 |
// private String getCopiedFilesDirectoryName(PackageInfo packageInfo) |
|
343 |
// throws MakePluginPackageServiceException { |
|
344 |
// return getPluginPackageDirectory(packageInfo) + File.separator + |
|
345 |
// "install" + File.separator |
|
346 |
// + COPIED_FILES_DIRECTORY_NAME; |
|
347 |
// } |
|
348 |
|
|
349 | 357 |
private File getCopiedFilesDirectory(File pluginDirectory) |
350 | 358 |
throws MakePluginPackageServiceException { |
351 | 359 |
return new File(pluginDirectory.getAbsolutePath() + File.separator |
... | ... | |
359 | 367 |
+ COPIED_FILES_DIRECTORY_NAME; |
360 | 368 |
} |
361 | 369 |
|
362 |
private String getAntFileName(PackageInfo packageInfo) |
|
363 |
throws MakePluginPackageServiceException { |
|
364 |
return getPluginPackageDirectory(packageInfo) + File.separator |
|
365 |
+ "install" + File.separator + ANT_FILE_NAME; |
|
366 |
} |
|
367 |
|
|
368 | 370 |
private File getAntFile(File pluginDirectory) |
369 | 371 |
throws MakePluginPackageServiceException { |
370 | 372 |
return new File(pluginDirectory.getAbsolutePath() + File.separator |
... | ... | |
373 | 375 |
|
374 | 376 |
private File getAbsoluteAntFile(PackageInfo packageInfo) |
375 | 377 |
throws MakePluginPackageServiceException { |
376 |
return new File(pluginsDirectory.getAbsolutePath() + File.separator |
|
377 |
+ getAntFileName(packageInfo)); |
|
378 |
String destinationFilePath = manager.getDefaultAddonRepository() |
|
379 |
.getAbsolutePath() |
|
380 |
+ File.separator + packageInfo.getCode(); |
|
381 |
return new File(destinationFilePath + File.separator + ANT_FILE_NAME); |
|
378 | 382 |
} |
379 | 383 |
|
380 | 384 |
private File getAbsolutePluginPackageDirectory(PackageInfo packageInfo) |
381 | 385 |
throws MakePluginPackageServiceException { |
382 |
|
|
383 |
return new File(pluginsDirectory.getAbsolutePath() + File.separator |
|
384 |
+ getPluginPackageDirectory(packageInfo)); |
|
386 |
String destinationFilePath = manager.getDefaultAddonRepository() |
|
387 |
.getAbsolutePath() |
|
388 |
+ File.separator + packageInfo.getCode(); |
|
389 |
return new File(destinationFilePath); |
|
385 | 390 |
} |
386 | 391 |
|
387 |
private File getAbsolutePluginPackageDirectory(String pluginDirectory) |
|
388 |
throws MakePluginPackageServiceException { |
|
389 |
return new File(pluginsDirectory.getAbsolutePath() + File.separator |
|
390 |
+ pluginDirectory); |
|
391 |
} |
|
392 |
|
|
393 | 392 |
public Manager getManager() { |
394 | 393 |
return this.manager; |
395 | 394 |
} |
... | ... | |
457 | 456 |
return fileData.toString(); |
458 | 457 |
} |
459 | 458 |
|
460 |
public File getPluginsDirectory() { |
|
461 |
return pluginsDirectory; |
|
462 |
} |
|
463 |
|
|
464 | 459 |
public PackageInfo[] getInstalledPackages() |
465 | 460 |
throws MakePluginPackageServiceException { |
466 | 461 |
return installerInfos.toArray(new PackageInfo[installerInfos.size()]); |
Also available in: Unified diff