Revision 41775

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java
43 43
import org.gvsig.andami.firewall.DefaultFirewallConfiguration;
44 44
import org.gvsig.andami.firewall.FirewallConfiguration;
45 45
import org.gvsig.andami.plugins.ExclusiveUIExtension;
46
import org.gvsig.andami.plugins.Extension;
46 47
import org.gvsig.andami.plugins.IExtension;
47 48
import org.gvsig.andami.plugins.PluginClassLoader;
48 49
import org.gvsig.installer.lib.api.PackageInfo;
......
139 140
    }
140 141

  
141 142
    public PluginServices getPlugin(Object obj) {
143
        if ( obj instanceof Extension ) {
144
            return ((Extension)obj).getPlugin();
145
        }
142 146
        if ( obj instanceof IExtension ) {
143 147
            Class<? extends IExtension> klass = (Class<? extends IExtension>) obj.getClass();
144 148
            return this.getPlugin(klass);
......
251 255
        if ( !(Launcher.getAndamiConfig() == null || Launcher.getAndamiConfig().getPluginsDirectory() == null) ) {
252 256
            folderPath = Launcher.getAndamiConfig().getPluginsDirectory();
253 257
        }
254
        
258

  
255 259
        this.pluginsFolders = new ArrayList<File>();
256
        
260

  
257 261
        folder = new File(this.getApplicationFolder(), folderPath);
258 262
        if( !folder.exists() ) {
259 263
            try {
......
263 267
            }
264 268
        }
265 269
        this.pluginsFolders.add(folder);
266
        
270

  
267 271
        folder = new File(this.getApplicationHomeFolder(), "installation");
268 272
        folder = new File(folder, folderPath);
269 273
        if( !folder.exists() ) {
......
274 278
            }
275 279
        }
276 280
        this.pluginsFolders.add(folder);
277
        
281

  
278 282
        return this.pluginsFolders;
279 283
    }
280 284

  
......
325 329
    public File getApplicationI18nFolder() {
326 330
        return new File(this.getApplicationFolder(), "i18n");
327 331
    }
328
    
332

  
329 333
    public FirewallConfiguration getFirewallConfiguration() {
330 334
        return new DefaultFirewallConfiguration();
331 335
    }
......
335 339
        Version version = pinfo.getVersion();
336 340
        return version;
337 341
    }
338
    
342

  
339 343
}
trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/Extension.java
46 46
public abstract class Extension implements IExtension, IExtensionQueryByAction, IExtensionExecuteWithArgs  {
47 47

  
48 48
	private static Logger logger = LoggerFactory.getLogger(Extension.class);
49

  
50
	private PluginServices plugin = null;
51

  
49 52
	/*
50 53
	 *  (non-Javadoc)
51 54
	 * @see com.iver.andami.plugins.IExtension#terminate()
......
76 79
	public IExtensionStatus getStatus(IExtension extension) {
77 80
		return extension.getStatus();
78 81
	}
79
	
82

  
80 83
	public String getText(String msg) {
81 84
	    return PluginsLocator.getManager().getText(this, msg);
82 85
	}
83
	
84
	public PluginServices  getPlugin() {
85
		return PluginsLocator.getManager().getPlugin(this.getClass());
86

  
87
	public final void setPlugin(PluginServices plugin) {
88
		if (this.plugin != null){
89
			throw new IllegalStateException();
90
		}
91
		this.plugin = plugin;
86 92
	}
87 93

  
94
	public final PluginServices getPlugin() {
95
		if (this.plugin == null){
96
			return PluginsLocator.getManager().getPlugin(this.getClass());
97
		}
98
		return this.plugin;
99
	}
100

  
88 101
	public boolean isEnabled(String action) {
89 102
		return isEnabled();
90 103
	}
91
	
104

  
92 105
	public boolean isVisible(String action) {
93 106
		return isVisible();
94 107
	}
95
	
108

  
96 109
	public boolean canQueryByAction() {
97 110
		return false;
98 111
	}
......
102 115
			logger.info("calling execute with args in a extension that not support ("+this.getClass().getSimpleName()+").");
103 116
		}
104 117
		execute(command);
105
	}	
118
	}
106 119

  
107 120
}
108 121

  
trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java
184 184
 * Andami's launching class. This is the class used to create the Andami's
185 185
 * plugin environment.<br>
186 186
 * </p>
187
 * 
187
 *
188 188
 * <p>
189 189
 * <b>Syntax:</b> <br>
190 190
 * java [-Xmx512M (for 512MB of RAM)] [-classpath={a colon-separated(unix) or
......
193 193
 * PATH_TO_APPLICATION_HOME_DIRECTORY PATH_TO_APPLICATION_PLUGINS_DIRECTORY
194 194
 * [{list of additional custom application arguments separated by spaces}]
195 195
 * </p>
196
 * 
197
 * 
196
 *
197
 *
198 198
 * @author $author$
199 199
 * @version $Revision: 40305 $
200 200
 */
201 201
public class Launcher {
202 202

  
203 203
	public static abstract class MapWithAlias<Item> extends HashMap<String, Item> {
204
		private HashMap<String, String> aliases = new HashMap<String, String>();  
205
		
204
		private HashMap<String, String> aliases = new HashMap<String, String>();
205

  
206 206
		public abstract String[] getAliases(Item item);
207
		
207

  
208 208
		public boolean isAlias(String key) {
209 209
			return aliases.get(key)!=null ;
210 210
		}
......
220 220
			}
221 221
			return null;
222 222
		}
223
		
224
		public Item get(Object key) { 
223

  
224
		public Item get(Object key) {
225 225
			Item item = super.get(key);
226 226
			if( item != null ) {
227 227
				return item;
......
232 232
			}
233 233
			return null;
234 234
		}
235
		
235

  
236 236
		public boolean containsKey(Object key) {
237 237
			boolean contains = super.containsKey(key);
238 238
			if( contains ) {
......
241 241
			String alias = aliases.get(key);
242 242
			return super.containsKey(alias);
243 243
		}
244
		
244

  
245 245
		public Item put(String key, Item value) {
246 246
			super.put(key, value);
247 247
			String[] aliases = getAliases(value);
......
253 253
			}
254 254
			return value;
255 255
		}
256
		
256

  
257 257
		public void putAll(Map<? extends String, ? extends Item> m) {
258 258
			Iterator<?> it = m.entrySet().iterator();
259 259
			while( it.hasNext() ) {
......
261 261
				this.put(x.getKey(), x.getValue());
262 262
			}
263 263
		}
264
		
264

  
265 265
		public Item remove(Object key) {
266 266
			Item item = super.get(key);
267 267
			if( item == null ) {
......
279 279
				return item;
280 280
			}
281 281
			// Rebuild the alias list
282
			this.aliases = new HashMap<String, String>();  
282
			this.aliases = new HashMap<String, String>();
283 283
			Iterator<java.util.Map.Entry<String, Item>> it = this.entrySet().iterator();
284 284
			while(it.hasNext()) {
285 285
				java.util.Map.Entry<String, Item> entry = it.next();
......
294 294

  
295 295
			return item;
296 296
		}
297
		
297

  
298 298
	}
299
	
299

  
300 300
	public static class PluginsConfig extends MapWithAlias<org.gvsig.andami.plugins.config.generate.PluginConfig>  {
301
		
301

  
302 302
		public String[] getAliases(
303 303
				org.gvsig.andami.plugins.config.generate.PluginConfig item) {
304 304
			return getAlternativeNames(item);
......
315 315
			}
316 316
			return r;
317 317
		}
318
		
318

  
319 319
	}
320
	
320

  
321 321
	public static class PluginsServices extends MapWithAlias<org.gvsig.andami.PluginServices>  {
322 322

  
323 323
		public String[] getAliases(org.gvsig.andami.PluginServices item) {
324 324
			return item.getAlternativeNames();
325 325
		}
326 326
	}
327
	
327

  
328 328
	protected static Logger logger = LoggerFactory.getLogger(Launcher.class
329 329
			.getName());
330 330
	protected static Preferences prefs = Preferences.userRoot().node(
......
333 333
	protected static MultiSplashWindow splashWindow;
334 334
	protected static String appName;
335 335
	protected static Locale locale;
336
	protected static PluginsConfig pluginsConfig = new PluginsConfig();      
336
	protected static PluginsConfig pluginsConfig = new PluginsConfig();
337 337
	protected static PluginsServices pluginsServices = new PluginsServices();
338 338
	protected static MDIFrame frame;
339 339
	protected static HashMap<Class<? extends IExtension>, ExtensionDecorator> classesExtensions = new HashMap<Class<? extends IExtension>, ExtensionDecorator>();
......
349 349
	protected static ListBaseException launcherrors = null;
350 350

  
351 351
	protected static Theme theme = null;
352
	
352

  
353 353
	private List<String> deprecatedPluginNames = null;
354 354

  
355 355
	private static final class ProxyAuth extends Authenticator {
......
373 373
		}
374 374
		return launcherInstance;
375 375
	}
376
	
376

  
377 377
	public static void main(String[] args) throws Exception {
378 378
		Launcher launcher = getInstance();
379 379
		boolean install = false;
......
430 430
	private String translate(String msg) {
431 431
		return PluginServices.getText(Launcher.class,msg);
432 432
	}
433
	
433

  
434 434
	private List<String> getDeprecatedPluginNames() {
435 435
		if( deprecatedPluginNames == null ) {
436 436
			String[] ss = new String[] {
......
444 444
		}
445 445
		return deprecatedPluginNames;
446 446
	}
447
	
447

  
448 448
	public void doMain(String[] args) throws Exception {
449 449

  
450 450
		if (args.length < 1) {
......
470 470
			public void refresh() {
471 471
			}
472 472
		});
473
        
473

  
474 474
        new DefaultLibrariesInitializer().fullInitialize(true);
475 475
        InstallerLocator.getInstallerManager().setDownloadBaseURL(
476 476
            new URL("http://downloads.gvsig.org/download/gvsig-desktop/"));
......
496 496
					ex);
497 497
		}
498 498
                UIManager.put("Desktop.background", theme.getBackgroundColor());
499
                
500
                
499

  
500

  
501 501
		// Mostrar la ventana de inicio
502 502
		Frame f = new Frame();
503 503
		splashWindow = new MultiSplashWindow(f, theme, 27);
......
518 518
		splashWindow.process(translate("SplashWindow.initialize_install_manager"));
519 519
                initializeInstallerManager();
520 520

  
521
                
521

  
522 522
                InstallerManager installerManager = InstallerLocator.getInstallerManager();
523 523
                PackageInfo[] installedPackages = null;
524 524
                try {
......
530 530
                logger_info(getInformation(installedPackages));
531 531
                saveEnvironInformation(installedPackages);
532 532

  
533
                
533

  
534 534
                // Se leen los config.xml de los plugins
535 535
		splashWindow.process(translate("SplashWindow.load_plugins_configuration"));
536 536
		try {
......
542 542

  
543 543
		splashWindow.process(translate("SplashWindow.check_incompatible_plugins"));
544 544
		fixIncompatiblePlugins(installedPackages);
545
		
546
                
545

  
546

  
547 547
		// Se configura el classloader del plugin
548 548
		splashWindow.process(translate("SplashWindow.setup_plugins_configuration"));
549 549
		try {
......
552 552
		} catch (Throwable ex) {
553 553
			this.addError("Can't initialize plugin's classloaders  ", ex);
554 554
		}
555
                
555

  
556 556
                initializeIdentityManagement(new File(andamiConfig.getPluginsDirectory()).getAbsoluteFile());
557 557

  
558 558
		// Initialize libraries
......
632 632

  
633 633
		message(translate("SplashWindow.initializing_server_data_persistence"));
634 634
		ServerDataPersistence.registerPersistence();
635
		
635

  
636 636
		// Se instalan las etiquetas de las extensiones de los plugins
637 637
		message(translate("SplashWindow.installing_extensions_labels"));
638 638
		SwingUtilities.invokeAndWait(new Runnable() {
......
662 662
                            }
663 663
			}
664 664
		});
665
		
665

  
666 666
		// Se ejecuta el postInitialize
667 667
		message(translate("SplashWindow.post_initializing_extensions"));
668 668
		SwingUtilities.invokeAndWait(new Runnable() {
......
670 670
				postInitializeExtensions();
671 671
			}
672 672
		});
673
		
673

  
674 674
		message(translate("SplashWindow.enable_controls"));
675 675
		SwingUtilities.invokeAndWait(new Runnable() {
676 676
			public void run() {
......
684 684
		});
685 685

  
686 686
		splashWindow.close();
687
		
687

  
688 688
		frame.setCursor(Cursor.DEFAULT_CURSOR);
689 689

  
690 690
		if (launcherrors != null) {
......
692 692
		}
693 693
		org.apache.log4j.Logger.getRootLogger().addAppender(
694 694
				new NotificationAppender());
695
		
695

  
696 696
		/*
697 697
		 * Executes additional tasks required by plugins
698 698
		 */
......
704 704
            PluginsManager pluginmgr = PluginsLocator.getManager();
705 705
            InstallerManager installerManager = InstallerLocator.getInstallerManager();
706 706

  
707
            // 
707
            //
708 708
            // Configure repository of plugins
709 709
            //
710 710
            List<File> folders = pluginmgr.getPluginsFolders();
......
712 712
                installerManager.addLocalAddonRepository(folder, "plugin");
713 713
            }
714 714
            installerManager.setDefaultLocalAddonRepository(folders.get(0), "plugin");
715
            
716
            // 
715

  
716
            //
717 717
            // Configure repository of iconsets
718 718
            //
719 719
            IconThemeManager iconManager = ToolsSwingLocator.getIconThemeManager();
......
728 728
                        installerManager.setDefaultLocalAddonRepository(entry.getFolder(),"iconset");
729 729
                    }
730 730
            }
731
                
731

  
732 732
        }
733 733

  
734 734
	private void message(final String msg) {
......
799 799
		Utilities.cleanUpTempFiles();
800 800

  
801 801
		if( args.length<2 ) {
802
			loadAndamiConfig("gvSIG/extensiones"); // Valor por defecto 
802
			loadAndamiConfig("gvSIG/extensiones"); // Valor por defecto
803 803
		} else {
804 804
			loadAndamiConfig(args[1]);
805 805
		}
......
816 816
	}
817 817

  
818 818
	/**
819
     * 
819
     *
820 820
     */
821 821
	private void configureLookAndFeel() {
822 822
		// Se pone el lookAndFeel
......
850 850
	}
851 851

  
852 852
	/**
853
     * 
853
     *
854 854
     */
855 855
	private void getOrCreateConfigFolder() {
856 856
		// Create application configuration folder
......
901 901
		protected void append(LoggingEvent event) {
902 902
			if (event.getLevel() == org.apache.log4j.Level.ERROR
903 903
					|| event.getLevel() == org.apache.log4j.Level.FATAL) {
904
			    
904

  
905 905
			    Throwable th = null;
906 906
			    ThrowableInformation thi = event.getThrowableInformation();
907 907
			    if (thi != null) {
......
917 917
			// }
918 918
		}
919 919

  
920
		  
920

  
921 921
		@Override
922 922
		public void close() {
923 923
			// TODO Auto-generated method stub
......
938 938
	public static String getApplicationDirectory() {
939 939
		return getApplicationFolder().getAbsolutePath();
940 940
	}
941
	
941

  
942 942
    public static File getApplicationFolder() {
943 943
        // TODO: check if there is a better way to handle this
944 944
        return new File(System.getProperty("user.dir"));
......
946 946

  
947 947
	private void registerIcons() {
948 948
		IconTheme theme = PluginServices.getIconTheme();
949
		ClassLoader loader = Launcher.class.getClassLoader();	
950
		
949
		ClassLoader loader = Launcher.class.getClassLoader();
950

  
951 951
		String[][] icons = {
952 952
				// MultiSplashWindow
953 953
				{ "main", "splash-default" },
......
962 962
			} catch(Exception e) {
963 963
				logger.info("Can't register icon '"+icons[i][0]+"' ("+icons[i][1]+").");
964 964
			}
965
		}		
965
		}
966 966
		theme.setDefaultIcon(loader.getResource("images/main/default-icon.png" ));
967 967
	}
968 968

  
......
978 978
            }
979 979
            return p;
980 980
        }
981
        
981

  
982 982
	/**
983 983
	 * Obtiene la personalizaci�n de los iconos, splash, fondo y el nombre de la
984 984
	 * aplicaci�n.
985
	 * 
985
	 *
986 986
	 * @return Theme
987 987
	 */
988 988
    private Theme getTheme(String pluginsDirectory) {
......
1013 1013
            File[] pluginDirs = pluginsDir.listFiles();
1014 1014
            if ( pluginDirs.length > 0 ) {
1015 1015
                for ( int i = 0; i < pluginDirs.length; i++ ) {
1016
                    File pluginThemeFile = new File(pluginDirs[i], 
1016
                    File pluginThemeFile = new File(pluginDirs[i],
1017 1017
                            "theme" + File.separator + "andami-theme.xml");
1018 1018
                    if ( pluginThemeFile.exists() ) {
1019 1019
                        Theme theme = new Theme(loadProperties(infoFile));
......
1090 1090
	 * Recupera la geometr�a (tama�o, posic�n y estado) de la ventana principal
1091 1091
	 * de Andami. TODO Pendiente de ver como se asigna un pluginServices para el
1092 1092
	 * launcher.
1093
	 * 
1093
	 *
1094 1094
	 * @author LWS
1095 1095
	 */
1096 1096
	private void restoreMDIStatus(XMLEntity xml) {
......
1182 1182

  
1183 1183
	/**
1184 1184
	 * Salva la persistencia de los plugins.
1185
	 * 
1185
	 *
1186 1186
	 * @author LWS
1187 1187
	 */
1188 1188
	private void savePluginPersistence() {
......
1296 1296

  
1297 1297
	/**
1298 1298
	 * DOCUMENT ME!
1299
	 * 
1299
	 *
1300 1300
	 * @throws MDIManagerLoadException
1301 1301
	 */
1302 1302
	private void skinPlugin(String defaultSkin) throws MDIManagerLoadException {
......
1452 1452
							.getClassLoader().loadClass(
1453 1453
									extension.getClassName());
1454 1454
					extensionInstance = extensionClass.newInstance();
1455
					if(extensionInstance instanceof org.gvsig.andami.plugins.Extension){
1456
						((org.gvsig.andami.plugins.Extension)extensionInstance).setPlugin(ps);
1457
					} else {
1458
						logger.warn("The extension "+extensionClass.getName()+" don't extends of Extension.");
1459
					}
1455 1460

  
1456 1461
					// CON DECORATOR
1457 1462
					// ANTES: classesExtensions.put(extensionClass,
......
1551 1556
							menu.setKey(actionInfo.getAccelerator());
1552 1557
							menu.setName(actionInfo.getName());
1553 1558
						}
1554
					} 
1559
					}
1555 1560
					if( menu.getPosition() < 100000000 ) {
1556 1561
						logger.info("Invalid position in menu ("+ menu.getText() + ").");
1557 1562
						menu.setPosition( menu.getPosition() + 1000000000);
......
1614 1619
			}
1615 1620
		}
1616 1621
	}
1617
	
1622

  
1618 1623
	@SuppressWarnings("unchecked")
1619 1624
	private void registerActions() {
1620 1625
		logger.info("registerActions");
......
1631 1636
			logger.info("registerActions of plugin '"+pluginName+"'.");
1632 1637

  
1633 1638
			Extensions extensionConfig = pluginConfig.getExtensions();
1634
			
1635
			
1639

  
1640

  
1636 1641
			Enumeration<SkinExtensionType> extensiones = extensionConfig.enumerateExtension();
1637 1642
			registerActionOfExtensions(actionManager, extensiones, loader);
1638 1643

  
......
1648 1653
					while (menus2.hasMoreElements()) {
1649 1654
						Menu menu = menus2.nextElement();
1650 1655
						if (!menu.getIs_separator() ) {
1651
							if( menu.getName() == null) {   
1656
							if( menu.getName() == null) {
1652 1657
								logger.info("Null name for popmenu '"+menu.getText()+"' in plugin "+ pluginService.getPluginName() );
1653 1658
							} else {
1654 1659
								ActionInfo actionInfo = actionManager.getAction(menu.getName());
......
1665 1670
					}
1666 1671
				}
1667 1672
			}
1668
			
1669 1673

  
1674

  
1670 1675
		}
1671 1676
	}
1672
	
1673 1677

  
1674
	private TreeSet<SortableMenu> getOrderedMenus() { 
1675 1678

  
1679
	private TreeSet<SortableMenu> getOrderedMenus() {
1680

  
1676 1681
		TreeSet<SortableMenu> orderedMenus = new TreeSet<SortableMenu>(
1677 1682
				new MenuComparator());
1678 1683

  
......
1778 1783
			this.loader = loader;
1779 1784
			this.extension = extension;
1780 1785
		}
1781
		
1786

  
1782 1787
		public PluginServices getPlugin() {
1783 1788
			String pluginName = loader.getPluginName();
1784 1789
			return PluginServices.getPluginServices(pluginName);
1785 1790
		}
1786
		
1791

  
1787 1792
		public String getExtensionName() {
1788 1793
			return this.extension.getClassName();
1789 1794
		}
1790
		
1795

  
1791 1796
		public IExtension getExtension() {
1792 1797
			Class<?> extensionClass;
1793 1798
			try {
......
1797 1802
			}
1798 1803
			return PluginServices.getExtension(extensionClass);
1799 1804
		}
1800
		
1805

  
1801 1806
		public String getText() {
1802 1807
			return this.menu.getText();
1803 1808
		}
......
1805 1810
		public long getPosition() {
1806 1811
			return this.menu.getPosition();
1807 1812
		}
1808
		
1813

  
1809 1814
		public String getName() {
1810 1815
			return this.menu.getName();
1811 1816
		}
1812
		
1817

  
1813 1818
		public boolean isParent() {
1814 1819
			return menu.getIs_separator();
1815 1820
		}
1816
		
1821

  
1817 1822
		public String getPluginName() {
1818 1823
			return this.loader.getPluginName();
1819 1824
		}
1820
		
1825

  
1821 1826
		public ActionInfo getAction() {
1822 1827
			ActionInfoManager manager = PluginsLocator.getActionInfoManager();
1823 1828
			return manager.getAction(this.menu.getName());
1824 1829
		}
1825 1830
	}
1826
	
1831

  
1827 1832
	public List<PluginMenuItem> getPluginMenuItems() {
1828 1833
		List<PluginMenuItem> menuItems = new ArrayList<Launcher.PluginMenuItem>();
1829 1834

  
......
1837 1842
		return menuItems;
1838 1843
	}
1839 1844

  
1840
	
1845

  
1841 1846
	/**
1842 1847
	 * Installs the menus, toolbars, actiontools, selectable toolbars and
1843 1848
	 * combos. The order in which they are shown is determined here.
......
2139 2144
			}
2140 2145
		}
2141 2146
	}
2142
        
2147

  
2143 2148
        private URL[] getPluginClasspathURLs(PluginConfig pluginConfig) {
2144 2149
            URL[] urls = null;
2145 2150

  
......
2235 2240

  
2236 2241
                     try {
2237 2242
                         loader = new PluginClassLoader(
2238
                                 urls, 
2239
                                 config.getPluginFolder().getAbsolutePath(), 
2240
                                 Launcher.class.getClassLoader(), 
2243
                                 urls,
2244
                                 config.getPluginFolder().getAbsolutePath(),
2245
                                 Launcher.class.getClassLoader(),
2241 2246
                                 loaders
2242
                         );                         
2247
                         );
2243 2248
                         PluginServices ps = new PluginServices(
2244
                                 loader, 
2249
                                 loader,
2245 2250
                                 PluginsConfig.getAlternativeNames(config)
2246 2251
                         );
2247 2252
                         pluginsServices.put(ps.getPluginName(), ps);
......
2294 2299
			}
2295 2300
		}
2296 2301
	}
2297
	
2302

  
2298 2303
	private void pluginsMessages() {
2299 2304
		Iterator<String> iterator = pluginsOrdered.iterator();
2300 2305
		PluginConfig config;
......
2325 2330
	static String getPluginsDir() {
2326 2331
		return andamiConfig.getPluginsDirectory();
2327 2332
	}
2328
        
2333

  
2329 2334
        static File getPluginFolder(String pluginName) {
2330 2335
            return pluginsConfig.get(pluginName).getPluginFolder();
2331 2336
        }
......
2338 2343
		return frame;
2339 2344
	}
2340 2345

  
2341
        
2346

  
2342 2347
        private void loadPlugins() {
2343 2348
            InstallerManager installerManager = InstallerLocator.getInstallerManager();
2344 2349
            List<File> repositoriesFolders = installerManager.getLocalAddonRepositories("plugin");
......
2730 2735
			if (e2.menu.hasPosition() && !e1.menu.hasPosition()) {
2731 2736
				return Integer.MAX_VALUE;
2732 2737
			}
2733
			
2738

  
2734 2739
			if( e1.menu.getPosition() == e2.menu.getPosition() ) {
2735 2740
				// we don't return 0 unless both objects are the same, otherwise
2736 2741
				// the objects get overwritten in the treemap
......
2740 2745
				return Integer.MAX_VALUE;
2741 2746
			}
2742 2747
    		return Integer.MIN_VALUE;
2743
    		
2748

  
2744 2749
		}
2745 2750
	}
2746 2751

  
......
2756 2761
			menu = menu2;
2757 2762
			this.loader = loader;
2758 2763
		}
2759
		
2764

  
2760 2765
	}
2761 2766

  
2762 2767
	private static class SortableTool {
......
2845 2850
	 * <li>If both tools have the same position (or they don't have a 'position'
2846 2851
	 * attribute), the priority of the extensions where the tool is defined.</li>
2847 2852
	 * </ul>
2848
	 * 
2853
	 *
2849 2854
	 * @author cesar
2850 2855
	 * @version $Revision: 40305 $
2851 2856
	 */
......
2918 2923
	 * Gets the ISO 839 two-characters-long language code matching the provided
2919 2924
	 * language code (which may be an ISO 839-2/T three-characters-long code or
2920 2925
	 * an ISO 839-1 two-characters-long code).
2921
	 * 
2926
	 *
2922 2927
	 * If the provided parameter is already two characters long, it returns the
2923 2928
	 * parameter without any modification.
2924
	 * 
2929
	 *
2925 2930
	 * @param langCode
2926 2931
	 *            A language code representing either an ISO 839-2/T language
2927 2932
	 *            code or an ISO 839-1 code.
......
2972 2977
	/**
2973 2978
	 * Configures the locales (languages and local resources) to be used by the
2974 2979
	 * application.
2975
	 * 
2980
	 *
2976 2981
	 * First it tries to get the locale from the command line parameters, then
2977 2982
	 * the andami-config file is checked.
2978
	 * 
2983
	 *
2979 2984
	 * The locale name is normalized to get a two characters language code as
2980 2985
	 * defined by ISO-639-1 (although ISO-639-2/T three characters codes are
2981 2986
	 * also accepted from the command line or the configuration file).
2982
	 * 
2987
	 *
2983 2988
	 * Finally, the gvsig-i18n library and the default locales for Java and
2984 2989
	 * Swing are configured.
2985
	 * 
2990
	 *
2986 2991
	 */
2987 2992
    private static void configureLocales(String[] args) {
2988 2993
        // Configurar el locale
......
3032 3037
        logger.info("loading resources from classloader "+i18nClassLoader.toString()+".");
3033 3038
        org.gvsig.i18n.Messages.addResourceFamily("text", i18nClassLoader,
3034 3039
                "Andami Launcher");
3035
        
3040

  
3036 3041
         // Finally load the andami own i18n resources
3037 3042
         org.gvsig.i18n.Messages.addResourceFamily("org.gvsig.andami.text",
3038 3043
         "Andami Launcher");
......
3075 3080
            }
3076 3081
            return urls.toArray(new URL[urls.size()]);
3077 3082
        }
3078
        
3083

  
3079 3084
	/**
3080 3085
	 * Gets Home Directory location of the application into users home folder.
3081
	 * 
3086
	 *
3082 3087
	 * May be set from outside the aplication by means of
3083 3088
	 * -DgvSIG.home=C:/data/gvSIG, where gvSIG its the name of the application
3084
	 * 
3089
	 *
3085 3090
	 * @return
3086 3091
	 */
3087 3092
	public static String getAppHomeDir() {
3088 3093
		return appHomeDir;
3089 3094
	}
3090
	
3095

  
3091 3096
    public static File getApplicationHomeFolder() {
3092 3097
        return new File(getAppHomeDir());
3093 3098
    }
......
3096 3101
	 * Sets Home Directory location of the application. May be set from outside
3097 3102
	 * the aplication by means of -DgvSIG.home=C:/data/gvSIG, where gvSIG its
3098 3103
	 * the name of the application
3099
	 * 
3104
	 *
3100 3105
	 * @param appHomeDir
3101 3106
	 */
3102 3107
	public static void setAppHomeDir(String appHomeDir) {
......
3111 3116
	 * this: <br>
3112 3117
	 * <br>
3113 3118
	 * -exclusiveUI={pathToExtensionClass} <br>
3114
	 * 
3119
	 *
3115 3120
	 * @see org.gvsig.andami.plugins.IExtension#isEnabled(IExtension extension)
3116 3121
	 * @see org.gvsig.andami.plugins.IExtension#isVisible(IExtension extension)
3117 3122
	 */
......
3151 3156
	public static void initIconThemes() {
3152 3157
		PluginsManager pluginsManager = PluginsLocator.getManager();
3153 3158
		IconThemeManager iconManager = ToolsSwingLocator.getIconThemeManager();
3154
		
3159

  
3155 3160
		File f = new File(pluginsManager.getApplicationFolder(),"icon-theme");
3156
		if( !f.exists() ) { 
3161
		if( !f.exists() ) {
3157 3162
			try {
3158 3163
				f.mkdir();
3159 3164
			} catch(Exception ex) {
......
3161 3166
			}
3162 3167
		}
3163 3168
		iconManager.getRepository().add(f,"_Global");
3164
		
3169

  
3165 3170
		f = new File(pluginsManager.getApplicationHomeFolder(),"icon-theme");
3166 3171
		if( !f.exists() ) {
3167 3172
			try {
......
3171 3176
			}
3172 3177
		}
3173 3178
		iconManager.getRepository().add(f,"_User");
3174
		
3179

  
3175 3180
		Preferences prefs = Preferences.userRoot().node("gvsig.icontheme");
3176 3181
		String defaultThemeID = prefs.get("default-theme", null);
3177 3182
		if( defaultThemeID != null ) {
......
3184 3189

  
3185 3190
	/**
3186 3191
	 * Manages Andami termination process
3187
	 * 
3192
	 *
3188 3193
	 * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
3189 3194
	 */
3190 3195
	public class TerminationProcess {
......
3294 3299
		/**
3295 3300
		 * Exectutes the terminate method for all the extensions, in the reverse
3296 3301
		 * order they were initialized
3297
		 * 
3302
		 *
3298 3303
		 */
3299 3304
		private void finalizeExtensions() {
3300 3305
			for (int i = extensions.size() - 1; i >= 0; i--) {
......
3364 3369
		/**
3365 3370
		 * Checks if the extensions have some unsaved data, and shows a dialog
3366 3371
		 * to allow saving it. This dialog also allows to don't exit Andami.
3367
		 * 
3372
		 *
3368 3373
		 * @return true if the user confirmed he wishes to exit, false otherwise
3369 3374
		 * @throws Exception
3370 3375
		 */
......
3473 3478

  
3474 3479
	/**
3475 3480
	 * Launch the gvSIG package installer.
3476
	 * 
3481
	 *
3477 3482
	 * @throws Exception
3478 3483
	 *             if there is any error
3479 3484
	 */
......
3500 3505

  
3501 3506
        /*
3502 3507
         * Los parametros que deberian pasarse en el instalador oficial de gvSIG serian:
3503
         * 
3508
         *
3504 3509
         * --install
3505 3510
         * --applicationName=gvSIG
3506 3511
         * --language=es
3507 3512
         * --pluginsFolder=gvSIG/extensiones
3508
         * 
3513
         *
3509 3514
         * Opcionales (casi mejor que dejar los de por defecto y no pasarselos):
3510 3515
         * --installVersion=2.0.0
3511 3516
         * --installURL=http://downloads.gvsig.org/download/gvsig-desktop/dists
3512 3517
         * --installURLFile=gvSIG/extensiones/org.gvsig.installer.app.extension/defaultDownloadsURLs
3513
         * 
3518
         *
3514 3519
         */
3515 3520
        CommandLineParser parser = new PosixParser();
3516 3521
        CommandLine line = null;
......
3556 3561
            if ( !hasAllMandatoryOptions ) {
3557 3562
                System.err.println(Messages.get("usage") + ": Launcher " +
3558 3563
                        "--install "+
3559
                        "[--applicationName=appName] " + 
3564
                        "[--applicationName=appName] " +
3560 3565
                        "[--pluginsFolder=plugins-directory] " +
3561 3566
                        "[--installURLFile=File] " +
3562 3567
                        "[--installURL=URL] " +
......
3571 3576

  
3572 3577
        initializeApp(myArgs, "installer");
3573 3578
        initializeLibraries();
3574
        
3579

  
3575 3580
        AndamiConfig config = getAndamiConfig();
3576 3581
        config.setLocaleLanguage(locale.getLanguage());
3577 3582
        config.setLocaleCountry(locale.getCountry());
3578 3583
        config.setLocaleVariant(locale.getVariant());
3579 3584

  
3580 3585
        initializeInstallerManager();
3581
        
3586

  
3582 3587
        InstallerManager installerManager = InstallerLocator.getInstallerManager();
3583 3588

  
3584 3589
        packageInfo = getPackageInfo(myArgs[1]);
......
3690 3695
        private static final int INFO_APP_THEME = 16;
3691 3696
        private static final int INFO_APP_SKIN = 17;
3692 3697
        private static final int INFO_PACKAGES = 18;
3693
        
3694
        
3698

  
3699

  
3695 3700
        public static String getInformation(PackageInfo[] pkgs) {
3696
            
3697
            String template = "OS\n" 
3701

  
3702
            String template = "OS\n"
3698 3703
                    +"    name    : {"+INFO_OS_NAME+"}\n"
3699 3704
                    +"    arch    : {"+INFO_OS_ARCH+"}\n"
3700 3705
                    +"    version : {"+INFO_OS_VERSION+"} \n"
......
3718 3723
                    +"    Skin                    : {"+INFO_APP_SKIN+"}\n"
3719 3724
                    +"Installed packages\n"
3720 3725
                    +"{"+INFO_PACKAGES+"}";
3721
            
3722 3726

  
3727

  
3723 3728
            String values[] = new String[INFO_PACKAGES+1];
3724
            
3729

  
3725 3730
            PluginsManager pluginmgr = PluginsLocator.getManager();
3726 3731
            LocaleManager localemgr = PluginsLocator.getLocaleManager();
3727
            
3732

  
3728 3733
            Properties props = System.getProperties();
3729 3734

  
3730
            
3735

  
3731 3736
            // OS information
3732 3737
            values[INFO_OS_NAME] = props.getProperty("os.name");
3733 3738
            values[INFO_OS_ARCH] = props.getProperty("os.arch");
3734 3739
            values[INFO_OS_VERSION] = props.getProperty("os.version");
3735
            
3740

  
3736 3741
            if ( values[INFO_OS_NAME].startsWith("Linux") ) {
3737 3742
                try {
3738 3743
                    StringWriter writer = new StringWriter();
3739
            
3744

  
3740 3745
                    String[] command = {"lsb_release", "-a"};
3741 3746
                    Process p = Runtime.getRuntime().exec(command);
3742 3747
                    InputStream is = p.getInputStream();
......
3788 3793
                    writer.write("\n");
3789 3794
                }
3790 3795
                values[INFO_PACKAGES] = writer.toString();
3791
                
3796

  
3792 3797
            } catch (Throwable e) {
3793 3798
                logger.warn("Can't get installed package information.",e);
3794 3799
            }
3795
            
3800

  
3796 3801
            String s = MessageFormat.format(template, values);
3797 3802
            return s;
3798 3803
        }
......
3803 3808
			logger.info(info[i]);
3804 3809
		}
3805 3810
	}
3806
	
3811

  
3807 3812
	private void saveEnvironInformation(PackageInfo[] pkgs) {
3808 3813
		PluginsManager manager = PluginsLocator.getManager();
3809 3814
		File fout = new File( manager.getApplicationHomeFolder(), "gvSIG-environ.info");
......
3816 3821

  
3817 3822
	private void fixIncompatiblePlugins(PackageInfo[] installedPackages) {
3818 3823
		final Set<String> incompatiblePlugins = new HashSet<String>();
3819
		
3824

  
3820 3825
		// Add installed packages to a Map to optimize searchs
3821 3826
		final Map<String, PackageInfo> packages = new HashMap<String, PackageInfo>();
3822 3827
		for( int i=0 ; i<installedPackages.length; i++) {
......
3828 3833
			Entry<String, PluginConfig> entry = it.next();
3829 3834
			PluginConfig pluginConfig = entry.getValue();
3830 3835
			pluginNames.add(entry.getKey());
3831
			
3836

  
3832 3837
			// Locate the package for this plugin.
3833 3838
			// Be care whith alias
3834 3839
			String[] aliases = pluginsConfig.getAliases(pluginConfig);
......
3844 3849
					break;
3845 3850
				}
3846 3851
			}
3847
		
3852

  
3848 3853
			// If package is found verify dependencies
3849 3854
			if( pkg!= null ) {
3850 3855
				Dependencies dependencies = pkg.getDependencies();
......
3878 3883
		if( pluginsToDissable  == null ) {
3879 3884
			return;
3880 3885
		}
3881
		
3886

  
3882 3887
		Iterator<String> it2 = pluginsToDissable.iterator();
3883 3888
		while( it2.hasNext() ) {
3884 3889
			String pluginName = it2.next();
3885 3890
			logger.info("Dissabling plugin '"+pluginName+"' by user action.");
3886 3891
			pluginsConfig.remove(pluginName);
3887
		}		
3892
		}
3888 3893
	}
3889
	
3894

  
3890 3895
	private class DisablePluginsConflictingDialog extends JDialog {
3891
	
3896

  
3892 3897
		public static final int CONTINUE = 0;
3893 3898
		public static final int CLOSE = 1;
3894
		
3899

  
3895 3900
		private DisablePluginsConflictingLayoutPanel contents;
3896 3901
		private int action = 0;
3897 3902
		private List<Item> incompatiblePlugins = null;
3898 3903
		private Map<String, PackageInfo> packages;
3899
		
3904

  
3900 3905
		private class Item {
3901 3906
			private String code;
3902 3907
			private PackageInfo pkg;
......
3922 3927
		DisablePluginsConflictingDialog(Map<String, PackageInfo> packages, Set<String> incompatiblePlugins) {
3923 3928
			super((Frame)null, "",true);
3924 3929
			this.setTitle(translate("_Conflicting_plugins"));
3925
			
3930

  
3926 3931
			this.packages = packages;
3927
			
3932

  
3928 3933
			this.incompatiblePlugins  = new ArrayList<Item>();
3929 3934
			Item item = null;
3930 3935
			Iterator<String> it = incompatiblePlugins.iterator();
......
3936 3941
			}
3937 3942
			initComponents();
3938 3943
		}
3939
		
3944

  
3940 3945
		private void initComponents() {
3941 3946
			this.contents = new DisablePluginsConflictingLayoutPanel();
3942
			
3947

  
3943 3948
			doTranslations();
3944 3949

  
3945 3950
			this.contents.buttonClose.addActionListener( new ActionListener() {
......
3962 3967
	        setLocation((screenSize.width / 2) - (this.getWidth() / 2),
3963 3968
	            (screenSize.height / 2) - (this.getHeight()/ 2));
3964 3969
		}
3965
		
3970

  
3966 3971
		private void doTranslations() {
3967 3972
			DisablePluginsConflictingLayoutPanel c = this.contents;
3968 3973
			c.lblConflict.setText(translate("_Some_of_plugins_installed_conflict_with_each_other"));
......
3972 3977
			c.buttonClose.setText(translate("_Close"));
3973 3978
			c.buttonContinue.setText(translate("_Continue"));
3974 3979
		}
3975
		
3980

  
3976 3981
		private String translate(String msg) {
3977 3982
			return PluginServices.getText(this,msg);
3978 3983
		}
3979
		
3984

  
3980 3985
		private void doClose() {
3981 3986
			this.action = CLOSE;
3982 3987
			this.setVisible(false);
3983 3988
		}
3984
		
3989

  
3985 3990
		private void doContinue() {
3986 3991
			this.action = CONTINUE;
3987 3992
			this.setVisible(false);
3988 3993
		}
3989
		
3994

  
3990 3995
		public int getAction() {
3991 3996
			return this.action;
3992 3997
		}
......
4007 4012
			return values;
4008 4013
		}
4009 4014
	}
4010
        
4011
        
4015

  
4016

  
4012 4017
    private void initializeIdentityManagement(File pluginsFolder) {
4013 4018
        File identityManagementConfigFile = null;
4014 4019
        PluginServices plugin = null;
......
4063 4068
        }
4064 4069
        logger.info("Loaded an identity manager from plugin '"+plugin.getPluginName()+".");
4065 4070
    }
4066
    
4067
    
4071

  
4072

  
4068 4073
}

Also available in: Unified diff