View | Details | Raw Unified | Return to bug 165674 | Differences between
and this patch

Collapse All | Expand All

(-)model/org/eclipse/rse/ui/internal/model/SystemRegistry.java (-21 / +8 lines)
Lines 39-45 Link Here
39
package org.eclipse.rse.ui.internal.model;
39
package org.eclipse.rse.ui.internal.model;
40
import java.util.ArrayList;
40
import java.util.ArrayList;
41
import java.util.Arrays;
41
import java.util.Arrays;
42
import java.util.Comparator;
43
import java.util.Iterator;
42
import java.util.Iterator;
44
import java.util.List;
43
import java.util.List;
45
import java.util.Vector;
44
import java.util.Vector;
Lines 255-283 Link Here
255
254
256
	/**
255
	/**
257
	 * Private method used by RSEUIPlugin to tell registry all registered subsystem
256
	 * Private method used by RSEUIPlugin to tell registry all registered subsystem
258
	 *  factories. This way, all code can use this registry to access them versus the
257
	 * factories. This way, all code can use this registry to access them versus the
259
	 *  RSEUIPlugin.
258
	 * RSEUIPlugin.
259
	 * 
260
	 * Proxies must be set sorted by priority, then ID in order to get deterministic
261
	 * results for all getSubSystemConfiguration*() queries. 
260
	 */
262
	 */
261
	public void setSubSystemConfigurationProxies(ISubSystemConfigurationProxy[] proxies)
263
	public void setSubSystemConfigurationProxies(ISubSystemConfigurationProxy[] proxies)
262
	{
264
	{
263
		//[165674]: Sort proxies by ID in order to get deterministic results
265
		subsystemConfigurationProxies = proxies;
264
		//on all getSubSystemConfiguration*() queries
266
		//for (int idx=0; idx<proxies.length; idx++)
265
		ISubSystemConfigurationProxy[] newProxies = (ISubSystemConfigurationProxy[])proxies.clone();
267
		// proxies[idx].setLogFile(logFile);
266
		Arrays.sort(newProxies, new Comparator(){
267
			public int compare(Object o1, Object o2) {
268
				ISubSystemConfigurationProxy s1 = (ISubSystemConfigurationProxy)o1;
269
				ISubSystemConfigurationProxy s2 = (ISubSystemConfigurationProxy)o2;
270
				if (s1.getPriority() < s2.getPriority()) {
271
					return -1;
272
				} else if (s1.getPriority() > s2.getPriority()) {
273
					return +1;
274
				}
275
				return s1.getId().compareTo(s2.getId());
276
			}
277
		});
278
		//for (int idx=0; idx<newProxies.length; idx++)
279
		// newProxies[idx].setLogFile(logFile);
280
		subsystemConfigurationProxies = newProxies;
281
	}
268
	}
282
	/**
269
	/**
283
	 * Public method to retrieve list of subsystem factory proxies registered by extension points.
270
	 * Public method to retrieve list of subsystem factory proxies registered by extension points.
(-)src/org/eclipse/rse/internal/core/subsystems/SubSystemConfigurationProxyComparator.java (-8 / +6 lines)
Lines 7-12 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 * Martin Oberhuber (Wind River) - [165674] Sort subsystem configurations by priority then Id
10
 *******************************************************************************/
11
 *******************************************************************************/
11
package org.eclipse.rse.internal.core.subsystems;
12
package org.eclipse.rse.internal.core.subsystems;
12
13
Lines 23-29 Link Here
23
	}
24
	}
24
25
25
	/**
26
	/**
26
	 * Compares priorities of subsystem configuration proxies. 
27
	 * Compares subsystem configuration proxies by Priority, then Id.
27
	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
28
	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
28
	 */
29
	 */
29
	public int compare(Object o1, Object o2) {
30
	public int compare(Object o1, Object o2) {
Lines 36-49 Link Here
36
				return -1;
37
				return -1;
37
			}
38
			}
38
			else if (proxy1.getPriority() > proxy2.getPriority()) {
39
			else if (proxy1.getPriority() > proxy2.getPriority()) {
39
				return 1;
40
				return +1;
41
			} else {
42
				return proxy1.getId().compareTo(proxy2.getId());
40
			}
43
			}
41
			else {
42
				return 0;
43
			}
44
		}
45
		else {
46
			return 0;
47
		}
44
		}
45
		return 0;
48
	}
46
	}
49
}
47
}
(-)src/org/eclipse/rse/core/RSECorePlugin.java (-10 / +10 lines)
Lines 18-30 Link Here
18
 * Martin Oberhuber (Wind River) - [175680] Deprecate obsolete ISystemRegistry methods
18
 * Martin Oberhuber (Wind River) - [175680] Deprecate obsolete ISystemRegistry methods
19
 * Martin Oberhuber (Wind River) - [160293] NPE on startup when only Core feature is installed
19
 * Martin Oberhuber (Wind River) - [160293] NPE on startup when only Core feature is installed
20
 * Uwe Stieber (Wind River) - [192611] RSE Core plugin may fail to initialize because of cyclic code invocation
20
 * Uwe Stieber (Wind River) - [192611] RSE Core plugin may fail to initialize because of cyclic code invocation
21
 * Martin Oberhuber (Wind River) - [165674] Sort subsystem configurations by priority then Id
21
 ********************************************************************************/
22
 ********************************************************************************/
22
package org.eclipse.rse.core;
23
package org.eclipse.rse.core;
23
24
24
import java.net.InetAddress;
25
import java.net.InetAddress;
25
import java.net.UnknownHostException;
26
import java.net.UnknownHostException;
27
import java.util.ArrayList;
26
import java.util.Arrays;
28
import java.util.Arrays;
27
import java.util.Vector;
29
import java.util.List;
28
30
29
import org.eclipse.core.runtime.IConfigurationElement;
31
import org.eclipse.core.runtime.IConfigurationElement;
30
import org.eclipse.core.runtime.IExtensionRegistry;
32
import org.eclipse.core.runtime.IExtensionRegistry;
Lines 282-302 Link Here
282
    	IConfigurationElement[] factoryPlugins = getSubSystemConfigurationPlugins();
284
    	IConfigurationElement[] factoryPlugins = getSubSystemConfigurationPlugins();
283
    	if (factoryPlugins != null)
285
    	if (factoryPlugins != null)
284
    	{
286
    	{
285
          Vector v = new Vector();
287
          List l = new ArrayList();
286
          for (int idx=0; idx<factoryPlugins.length; idx++)
288
          for (int idx=0; idx<factoryPlugins.length; idx++)
287
          {
289
          {
288
             SubSystemConfigurationProxy ssf =
290
             SubSystemConfigurationProxy ssf =
289
               new SubSystemConfigurationProxy(factoryPlugins[idx]);           	
291
               new SubSystemConfigurationProxy(factoryPlugins[idx]);           	
290
          	
292
          	
291
             v.addElement(ssf);
293
             l.add(ssf);
292
          }    	  	
293
          if (v.size() != 0)
294
          {
295
            _subsystemConfigurations = new ISubSystemConfigurationProxy[v.size()];
296
            for (int idx=0; idx<v.size(); idx++)
297
               _subsystemConfigurations[idx] = (ISubSystemConfigurationProxy)v.elementAt(idx);
298
          }
294
          }
299
          Arrays.sort(_subsystemConfigurations, new SubSystemConfigurationProxyComparator());
295
          ISubSystemConfigurationProxy[] newProxies = (ISubSystemConfigurationProxy[])l.toArray(new ISubSystemConfigurationProxy[l.size()]);
296
  		  //[149280][165674]: Sort proxies by priority then ID in order to 
297
          //get deterministic results on all getSubSystemConfiguration*() queries
298
          Arrays.sort(newProxies, new SubSystemConfigurationProxyComparator());
299
          _subsystemConfigurations = newProxies;
300
    	}
300
    	}
301
    	
301
    	
302
    	return _subsystemConfigurations;
302
    	return _subsystemConfigurations;

Return to bug 165674