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 |
} |