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

View differences:

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&aacute;</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