public class Item implements Comparable<Item> {
private Package latestPackage;
private Package installedPackage;
- private Item parent;
+ private Item parent = null;
private ArrayList<Item> children;
private CheckState checkState= CheckState.UNCHECKED;
private InstallState installState = InstallState.INSTALL;
* @param CHECKED is true, this package is selected by tree view.
*/
public void setCheckState(CheckState state) {
+
this.checkState = state;
}
return true;
}
- private boolean isChildrenAllInstallState() {
- for (Item item : getChildren()) {
- if (item.getInstallState() != InstallState.INSTALL) {
- return false;
- }
- }
- return true;
- }
-
- private boolean isChildrenAllUpdateState() {
- for (Item item : getChildren()) {
- if (item.getInstallState() != InstallState.UPDATE) {
- return false;
- }
- }
- return true;
- }
-
- private boolean isChildrenAllUninstallState() {
- for (Item item : getChildren()) {
- if (item.getInstallState() != InstallState.UNINSTALL) {
- return false;
- }
- }
- return true;
- }
-
public String getInstallStateMessage() {
if (hasChildren() || getParent() == null) {
return "";
}
public String toString() {
- return getPackageName();
+ if (getParent() == null) {
+ return getPackageName();
+ } else {
+ return getParent() + "/" + getPackageName();
+ }
+ }
+
+ public int hashCode() {
+ if (getParent() == null) {
+ return getPackageName().hashCode();
+ } else {
+ return (getParent() + "/" + getPackageName()).hashCode();
+ }
}
@Override
if (e.getElement() instanceof Item) {
Item item = (Item) e.getElement();
+
if (item.getPackageName().equals(Config.SDK_NAME)) {
checkboxTreeViewer.setSubtreeChecked(item, !e.getChecked());
setCheckbox(item, e.getChecked());
}
}
}
+
+ protected List<Item> getLeafItemsToCheck(Item item) {
+ List<Item> leafItemsToCheck = new ArrayList<Item>();
+
+ if (item.hasChildren()) {
+ for (Item childItem : item.getChildren()) {
+ leafItemsToCheck.addAll(getLeafItemsToCheck(childItem));
+ }
+ } else {
+ for (Item i : getItems()) {
+ if (item.getPackageName().equals(i.getPackageName())) {
+ leafItemsToCheck.add(i);
+ }
+ }
+ }
+
+ return leafItemsToCheck;
+ }
protected void setCheckbox(Item item, boolean checked) {
if (item == null) {
return;
} else {
- setChildCheckbox(checkboxTreeViewer, item, checked);
+ List<Item> leafItemsToCheck = getLeafItemsToCheck(item);
- if (item.getParent() != null) {
- setParentCheckbox(item.getParent());
+ for (Item i : leafItemsToCheck) {
+ setCheckState(i, checked);
+ setParentCheckbox(i.getParent());
}
+
+// setChildCheckbox(checkboxTreeViewer, item, checked);
+//
+// if (item.getParent() != null) {
+// for (Item i : getItems()) {
+// if (i.getPackageName().equalsIgnoreCase(item.getPackageName())) {
+// setParentCheckbox(i.getParent());
+// }
+// }
+// }
changeCheckboxStatus(items);
}
private void setChildCheckbox(CheckboxTreeViewer checkboxTreeViewer,
Item selectedItem, boolean checked) {
if (!selectedItem.hasChildren()) {
- setCheckState(selectedItem, checked);
+ for (Item i : getItems()) {
+ if (i.getPackageName().equalsIgnoreCase(selectedItem.getPackageName())) {
+ setCheckState(i, checked);
+ }
+ }
} else {
for (Item item : selectedItem.getChildren()) {
setChildCheckbox(checkboxTreeViewer, item, checked);
}
- setCheckStateByChildren(selectedItem);
+ for (Item i : getItems()) {
+ if (i.getPackageName().equalsIgnoreCase(selectedItem.getPackageName())) {
+ setCheckStateByChildren(i);
+ }
+ }
}
}
if (parentItem == null) {
return;
}
-
setCheckStateByChildren(parentItem);
if (parentItem.getParent() != null) {
private void makeRelation(List<Item> treeItems) {
// set relation of items.
+ List<Item> addedItems = new ArrayList<Item>();
for (Item item : treeItems) {
- setRelationOfItem(item, treeItems);
+ setRelationOfItem(item, treeItems, addedItems);
}
-
+ treeItems.addAll(addedItems);
+
Collections.sort(treeItems);
}
}
}
- private void setRelationOfItem(Item parentItem, List<Item> compareList) {
+ private void setRelationOfItem(Item parentItem, List<Item> compareList, List<Item> addedList) {
Package packageOfParentItem = parentItem.getPackage();
Collection<String> theChildPackage = packageOfParentItem.getDependentPackageNames();
for (Item treeItem : compareList) {
String packageNameOfTreeItem = treeItem.getPackageName();
- if (packageNameOfTreeItem.equalsIgnoreCase(childPackage)) {
- parentItem.addChildItem(treeItem);
- treeItem.setParent(parentItem);
- break;
+ if (packageNameOfTreeItem.equalsIgnoreCase(childPackage)) {
+ if (treeItem.getParent() != null) {
+ Item childItem = new Item(treeItem.getLatestPackage(), treeItem.getInstalledPackage(), treeItem.getInstallState());
+
+ parentItem.addChildItem(childItem);
+ childItem.setParent(parentItem);
+
+ addedList.add(childItem);
+ } else {
+ parentItem.addChildItem(treeItem);
+ treeItem.setParent(parentItem);
+ }
}
}
}