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

Collapse All | Expand All

(-)src/org/eclipse/update/internal/ui/wizards/ReviewPage.java (-32 / +134 lines)
Lines 13-23 Link Here
13
import java.lang.reflect.InvocationTargetException;
13
import java.lang.reflect.InvocationTargetException;
14
import java.net.URL;
14
import java.net.URL;
15
import java.util.ArrayList;
15
import java.util.ArrayList;
16
import java.util.Arrays;
16
import java.util.Collection;
17
import java.util.Collection;
17
import java.util.HashMap;
18
import java.util.HashSet;
18
import java.util.HashSet;
19
import java.util.Iterator;
19
import java.util.Iterator;
20
import java.util.Map;
20
import java.util.List;
21
import java.util.Set;
21
import java.util.Set;
22
22
23
import org.eclipse.core.runtime.CoreException;
23
import org.eclipse.core.runtime.CoreException;
Lines 64-69 Link Here
64
import org.eclipse.update.core.IFeature;
64
import org.eclipse.update.core.IFeature;
65
import org.eclipse.update.core.IFeatureReference;
65
import org.eclipse.update.core.IFeatureReference;
66
import org.eclipse.update.core.IImport;
66
import org.eclipse.update.core.IImport;
67
import org.eclipse.update.core.IIncludedFeatureReference;
68
import org.eclipse.update.core.IPluginEntry;
67
import org.eclipse.update.core.ISiteFeatureReference;
69
import org.eclipse.update.core.ISiteFeatureReference;
68
import org.eclipse.update.core.IURLEntry;
70
import org.eclipse.update.core.IURLEntry;
69
import org.eclipse.update.core.Utilities;
71
import org.eclipse.update.core.Utilities;
Lines 1113-1119 Link Here
1113
		setValidationStatus(requiredFeaturesResult.getStatus());
1115
		setValidationStatus(requiredFeaturesResult.getStatus());
1114
		Set requiredFeatures = requiredFeaturesResult.getRequiredFeatures();
1116
		Set requiredFeatures = requiredFeaturesResult.getRequiredFeatures();
1115
		problematicFeatures.clear();
1117
		problematicFeatures.clear();
1116
1118
		
1117
		Iterator requiredFeaturesIterator = requiredFeatures.iterator();
1119
		Iterator requiredFeaturesIterator = requiredFeatures.iterator();
1118
		ArrayList toBeInstalled = new ArrayList();
1120
		ArrayList toBeInstalled = new ArrayList();
1119
		
1121
		
Lines 1161-1167 Link Here
1161
		if (!toBeInstalled.isEmpty()) {
1163
		if (!toBeInstalled.isEmpty()) {
1162
			Iterator toBeInstalledIterator = toBeInstalled.iterator();
1164
			Iterator toBeInstalledIterator = toBeInstalled.iterator();
1163
			while (toBeInstalledIterator.hasNext()) {
1165
			while (toBeInstalledIterator.hasNext()) {
1164
				treeViewer.setChecked(toBeInstalledIterator.next(), true);			
1166
				IInstallFeatureOperation current = (IInstallFeatureOperation)toBeInstalledIterator.next();
1167
				treeViewer.setChecked(current, true);			
1165
			}
1168
			}
1166
			return selectRequiredFeatures();
1169
			return selectRequiredFeatures();
1167
		} else {
1170
		} else {
Lines 1274-1280 Link Here
1274
	 * Update status in the wizard status area
1277
	 * Update status in the wizard status area
1275
	 */
1278
	 */
1276
	private void updateWizardMessage() {
1279
	private void updateWizardMessage() {
1277
		if (true) return;
1280
		
1278
		if (validationStatus == null) {
1281
		if (validationStatus == null) {
1279
			lastDisplayedStatus=null;
1282
			lastDisplayedStatus=null;
1280
			setErrorMessage(null);
1283
			setErrorMessage(null);
Lines 1448-1491 Link Here
1448
			}
1451
			}
1449
	}
1452
	}
1450
1453
1451
	public boolean isFeatureGood(IImport requiredFeature,
1454
	
1452
			IInstallFeatureOperation feature) {
1455
	public boolean isFeatureGood(IImport requiredFeature, IFeature feature) {
1456
		return isFeatureGood(requiredFeature, feature, new ArrayList());
1457
	}
1458
	
1459
	public boolean isFeatureGood(IImport requiredFeature, IFeature feature, List visitedFeatures) {
1453
1460
1454
		if (!requiredFeature.getVersionedIdentifier().getIdentifier().equals(
1461
		if (requiredFeature.getKind() == IImport.KIND_FEATURE) { 
1455
				feature.getFeature().getVersionedIdentifier().getIdentifier())) {
1462
			if ((!requiredFeature.getVersionedIdentifier().getIdentifier().equals(
1463
					feature.getVersionedIdentifier().getIdentifier()))) {
1464
				IIncludedFeatureReference[] iifr = null;
1465
				try {
1466
					iifr = feature.getIncludedFeatureReferences();
1467
				} catch (CoreException e) {
1468
					UpdateUI.logException(e);
1469
					//	if we can not get included features then they can not satisfy requirement, so just ignore them
1470
					return false;
1471
				}
1472
				if (iifr == null) {
1473
					return false;
1474
				}
1475
				
1476
				for(int i = 0; i < iifr.length; i++) {
1477
					IFeature current;
1478
					try {
1479
						current = iifr[i].getFeature(new NullProgressMonitor());
1480
					} catch (CoreException e) {
1481
						// if we can not get feature then it can not satisfy requirement, so just ignore it
1482
						UpdateUI.logException(e);
1483
						continue;
1484
					}
1485
					if (!visitedFeatures.contains(current)) {
1486
						visitedFeatures.add(current);
1487
						if (isFeatureGood(requiredFeature, current, visitedFeatures)) {
1488
							return true;
1489
						}
1490
					}
1491
				}
1492
				
1493
				return false;
1494
			}
1495
1496
			int rule = (requiredFeature.getRule() != IImport.RULE_NONE) ? requiredFeature.getRule() : IImport.RULE_COMPATIBLE;
1497
1498
			switch (rule) {
1499
			case IImport.RULE_PERFECT: return feature.getVersionedIdentifier().getVersion().isPerfect(
1500
								requiredFeature.getVersionedIdentifier()
1501
								.getVersion());
1502
			case IImport.RULE_EQUIVALENT:
1503
						return feature.getVersionedIdentifier().getVersion()
1504
						.isEquivalentTo(
1505
								requiredFeature.getVersionedIdentifier()
1506
								.getVersion());
1507
			case IImport.RULE_COMPATIBLE:
1508
				return feature.getVersionedIdentifier().getVersion()
1509
						.isCompatibleWith(
1510
								requiredFeature.getVersionedIdentifier()
1511
								.getVersion());
1512
			case IImport.RULE_GREATER_OR_EQUAL:
1513
						return feature.getVersionedIdentifier().getVersion()
1514
						.isGreaterOrEqualTo(
1515
								requiredFeature.getVersionedIdentifier()
1516
								.getVersion());
1517
			}
1518
1519
			return false;
1520
		} else {
1521
			if ((requiredFeature.getKind() == IImport.KIND_PLUGIN)) { 
1522
				return checkIfFeatureHasPlugin( requiredFeature, feature);
1523
			}
1524
			return false;
1525
		}
1526
	}
1527
	
1528
	private boolean checkIfFeatureHasPlugin(IImport requiredFeature, IFeature feature)  {
1529
		
1530
		IPluginEntry[] plugins = feature.getPluginEntries();
1531
		try {			
1532
			List includedPlugins = getPluginEntriesFromIncludedFeatures(feature, new ArrayList(), new ArrayList());
1533
			includedPlugins.addAll(Arrays.asList(plugins));
1534
			plugins = (IPluginEntry[])includedPlugins.toArray( new IPluginEntry[includedPlugins.size()]);
1535
		} catch( CoreException ce) {
1536
			UpdateUI.logException(ce);
1537
			// ignore this plugins can not sutisfy requirement anyways
1538
		}
1539
		if (plugins == null) {
1456
			return false;
1540
			return false;
1457
		}
1541
		}
1542
		
1543
		for(int i = 0; i < plugins.length; i++) {
1544
			if (isMatch(plugins[i].getVersionedIdentifier(), requiredFeature.getVersionedIdentifier(), requiredFeature.getIdRule())) {
1545
				return true;
1546
			}
1547
		}
1548
		
1549
		return false;
1550
	}
1458
1551
1459
		int rule = (requiredFeature.getRule() != IImport.RULE_NONE) ? requiredFeature
1552
	private List getPluginEntriesFromIncludedFeatures(IFeature feature, List plugins, List visitedFeatures) throws CoreException {
1460
				.getRule()
1553
		IIncludedFeatureReference[] iifr = feature.getIncludedFeatureReferences();
1461
				: IImport.RULE_COMPATIBLE;
1554
		for(int i = 0; i < iifr.length; i++) {
1555
			IFeature current = iifr[i].getFeature(new NullProgressMonitor());
1556
			if (!visitedFeatures.contains(current)) {
1557
				IPluginEntry[] pluginEntries = current.getPluginEntries();
1558
				plugins.addAll(Arrays.asList(pluginEntries));
1559
				visitedFeatures.add(current);
1560
				getPluginEntriesFromIncludedFeatures(current, plugins, visitedFeatures);
1561
			}
1562
		}
1563
		
1564
		return plugins;
1565
	}
1462
1566
1567
	// vid1 = feature
1568
	// vid2 = requiredFeature
1569
	private boolean isMatch( VersionedIdentifier vid1, VersionedIdentifier vid2, int rule) {
1570
		
1571
		if (!vid1.getIdentifier().equals(vid2.getIdentifier())) {
1572
			return false;
1573
		}
1574
		if ( vid2.getVersion().getMajorComponent() == 0 && vid2.getVersion().getMinorComponent() == 0 && vid2.getVersion().getServiceComponent() == 0 ) {
1575
			//version is ignored
1576
			return true;
1577
		}
1463
		switch (rule) {
1578
		switch (rule) {
1464
		case IImport.RULE_PERFECT:
1579
		case IImport.RULE_PERFECT:
1465
			return feature.getFeature().getVersionedIdentifier().getVersion()
1580
			return vid2.getVersion().isPerfect(vid1.getVersion());
1466
					.isPerfect(
1467
							requiredFeature.getVersionedIdentifier()
1468
									.getVersion());
1469
		case IImport.RULE_EQUIVALENT:
1581
		case IImport.RULE_EQUIVALENT:
1470
			return feature.getFeature().getVersionedIdentifier().getVersion()
1582
			return vid2.getVersion().isEquivalentTo(vid1.getVersion());
1471
					.isEquivalentTo(
1472
							requiredFeature.getVersionedIdentifier()
1473
									.getVersion());
1474
		case IImport.RULE_COMPATIBLE:
1583
		case IImport.RULE_COMPATIBLE:
1475
			return feature.getFeature().getVersionedIdentifier().getVersion()
1584
			return vid2.getVersion().isCompatibleWith(vid1.getVersion());
1476
					.isCompatibleWith(
1477
							requiredFeature.getVersionedIdentifier()
1478
									.getVersion());
1479
		case IImport.RULE_GREATER_OR_EQUAL:
1585
		case IImport.RULE_GREATER_OR_EQUAL:
1480
			return feature.getFeature().getVersionedIdentifier().getVersion()
1586
			return vid2.getVersion().isGreaterOrEqualTo(vid1.getVersion());
1481
					.isGreaterOrEqualTo(
1482
							requiredFeature.getVersionedIdentifier()
1483
									.getVersion());
1484
		}
1587
		}
1485
1486
		return false;
1588
		return false;
1487
	}
1589
	}
1488
1590
1591
1489
	public boolean isFeatureBetter(IInstallFeatureOperation feature,
1592
	public boolean isFeatureBetter(IInstallFeatureOperation feature,
1490
			IInstallFeatureOperation currentFeatureSelected) {
1593
			IInstallFeatureOperation currentFeatureSelected) {
1491
1594
Lines 1502-1510 Link Here
1502
			IImport requiredFeature, IInstallFeatureOperation feature,
1605
			IImport requiredFeature, IInstallFeatureOperation feature,
1503
			IInstallFeatureOperation currentFeatureSelected) {
1606
			IInstallFeatureOperation currentFeatureSelected) {
1504
1607
1505
		if (isFeatureGood(requiredFeature, feature)
1608
		if (isFeatureGood(requiredFeature, feature.getFeature()) && isFeatureBetter(feature, currentFeatureSelected)) {
1506
				&& isFeatureBetter(feature, currentFeatureSelected)) {
1609
				return feature;
1507
			return feature;
1508
		} else {
1610
		} else {
1509
			return currentFeatureSelected;
1611
			return currentFeatureSelected;
1510
		}
1612
		}
(-)src/org/eclipse/update/internal/core/UpdateManagerUtils.java (-1 / +4 lines)
Lines 621-627 Link Here
621
	 */
621
	 */
622
	public static int getMatchingRule(String rule) {
622
	public static int getMatchingRule(String rule) {
623
		if (rule == null)
623
		if (rule == null)
624
			return IImport.RULE_PERFECT;
624
			return IImport.RULE_COMPATIBLE;
625
		int ruleInt = ((Integer) table.get(rule)).intValue();
625
		int ruleInt = ((Integer) table.get(rule)).intValue();
626
		if (ruleInt == IImport.RULE_NONE)
626
		if (ruleInt == IImport.RULE_NONE)
627
			return IImport.RULE_PERFECT;
627
			return IImport.RULE_PERFECT;
Lines 635-640 Link Here
635
	 * @since 2.0.2
635
	 * @since 2.0.2
636
	 */
636
	 */
637
	public static int getMatchingIdRule(String rule) {
637
	public static int getMatchingIdRule(String rule) {
638
		
639
		if (rule == null)
640
			return IImport.RULE_COMPATIBLE;
638
		if (rule!=null && rule.equalsIgnoreCase("prefix")) //$NON-NLS-1$
641
		if (rule!=null && rule.equalsIgnoreCase("prefix")) //$NON-NLS-1$
639
			return IImport.RULE_PREFIX;
642
			return IImport.RULE_PREFIX;
640
		return IImport.RULE_PERFECT;
643
		return IImport.RULE_PERFECT;
(-)src/org/eclipse/update/internal/operations/InstallOperation.java (+20 lines)
Lines 26-31 Link Here
26
public class InstallOperation
26
public class InstallOperation
27
	extends FeatureOperation
27
	extends FeatureOperation
28
	implements IInstallFeatureOperation {
28
	implements IInstallFeatureOperation {
29
	
30
	public boolean equals(Object arg) {
31
		if (arg == null) {
32
			return false;
33
		}
34
		
35
		if (!(arg instanceof InstallOperation)) {
36
			return false;
37
		}
38
		
39
		InstallOperation io = (InstallOperation)arg;
40
		
41
		return io.getFeature().getVersionedIdentifier().equals(this.getFeature().getVersionedIdentifier());
42
	}
43
44
	public int hashCode() {
45
		// TODO Auto-generated method stub
46
		return super.getFeature().hashCode();
47
	}
48
29
	private IFeatureReference[] optionalFeatures;
49
	private IFeatureReference[] optionalFeatures;
30
	private IFeature[] unconfiguredOptionalFeatures;
50
	private IFeature[] unconfiguredOptionalFeatures;
31
	private IVerificationListener verifier;
51
	private IVerificationListener verifier;

Return to bug 138802