1*9a1eeea9SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*9a1eeea9SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*9a1eeea9SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*9a1eeea9SAndrew Rist * distributed with this work for additional information 6*9a1eeea9SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*9a1eeea9SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*9a1eeea9SAndrew Rist * "License"); you may not use this file except in compliance 9*9a1eeea9SAndrew Rist * with the License. You may obtain a copy of the License at 10*9a1eeea9SAndrew Rist * 11*9a1eeea9SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*9a1eeea9SAndrew Rist * 13*9a1eeea9SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*9a1eeea9SAndrew Rist * software distributed under the License is distributed on an 15*9a1eeea9SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9a1eeea9SAndrew Rist * KIND, either express or implied. See the License for the 17*9a1eeea9SAndrew Rist * specific language governing permissions and limitations 18*9a1eeea9SAndrew Rist * under the License. 19*9a1eeea9SAndrew Rist * 20*9a1eeea9SAndrew Rist *************************************************************/ 21*9a1eeea9SAndrew Rist 22*9a1eeea9SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir package org.openoffice.setup.SetupData; 25cdf0e10cSrcweir 26cdf0e10cSrcweir import org.openoffice.setup.InstallData; 27cdf0e10cSrcweir import org.openoffice.setup.Util.ModuleCtrl; 28cdf0e10cSrcweir import java.util.Enumeration; 29cdf0e10cSrcweir import javax.swing.tree.DefaultMutableTreeNode; 30cdf0e10cSrcweir import javax.swing.tree.TreeNode; 31cdf0e10cSrcweir 32cdf0e10cSrcweir public class DisplayPackageDescription { 33cdf0e10cSrcweir 34cdf0e10cSrcweir private PackageDescription data; 35cdf0e10cSrcweir private int size = 0; 36cdf0e10cSrcweir DisplayPackageDescription(PackageDescription data)37cdf0e10cSrcweir public DisplayPackageDescription(PackageDescription data) { 38cdf0e10cSrcweir this.data = data; 39cdf0e10cSrcweir // Setting default module settings for modules, that are not hidden 40cdf0e10cSrcweir ModuleCtrl.setDefaultModuleSettings(data); 41cdf0e10cSrcweir // The size is set dynamically, when a module is selected. 42cdf0e10cSrcweir // This is better for the nodes, which have a changing size. 43cdf0e10cSrcweir } 44cdf0e10cSrcweir getDescription()45cdf0e10cSrcweir public String getDescription() { 46cdf0e10cSrcweir return data.getDescription(); 47cdf0e10cSrcweir } 48cdf0e10cSrcweir getSize()49cdf0e10cSrcweir public int getSize() { 50cdf0e10cSrcweir return size; // using local size 51cdf0e10cSrcweir } 52cdf0e10cSrcweir getState()53cdf0e10cSrcweir public int getState() { 54cdf0e10cSrcweir return data.getSelectionState(); 55cdf0e10cSrcweir } 56cdf0e10cSrcweir getSize(TreeNode peerNode)57cdf0e10cSrcweir private int getSize(TreeNode peerNode) { 58cdf0e10cSrcweir // return peerNode.isLeaf() ? data.getAccumulatedSize() : data.getSize(); 59cdf0e10cSrcweir // using size from PackageDescription, which is pkgSize (and that is defined in xpd file) 60cdf0e10cSrcweir return data.getSize(); 61cdf0e10cSrcweir } 62cdf0e10cSrcweir setState(TreeNode node, int newState)63cdf0e10cSrcweir public void setState(TreeNode node, int newState) { 64cdf0e10cSrcweir if ((data.getSelectionState() != PackageDescription.IGNORE) && data.isOptional()) { 65cdf0e10cSrcweir data.setSelectionState(newState); 66cdf0e10cSrcweir } 67cdf0e10cSrcweir 68cdf0e10cSrcweir if (!node.isLeaf()) { 69cdf0e10cSrcweir size = data.getSize(); // -> that is the value defined in xpd file 70cdf0e10cSrcweir 71cdf0e10cSrcweir for (Enumeration e = node.children(); e.hasMoreElements();) { 72cdf0e10cSrcweir TreeNode child = (TreeNode)e.nextElement(); 73cdf0e10cSrcweir DisplayPackageDescription childInfo = getInfo(child); 74cdf0e10cSrcweir 75cdf0e10cSrcweir childInfo.setState(child, newState); 76cdf0e10cSrcweir 77cdf0e10cSrcweir if (childInfo.isSelected()) { 78cdf0e10cSrcweir size += childInfo.getSize(child); 79cdf0e10cSrcweir } 80cdf0e10cSrcweir } 81cdf0e10cSrcweir } else if (isSelected()) { 82cdf0e10cSrcweir size = data.getSize(); // -> that is the value defined in xpd file 83cdf0e10cSrcweir } 84cdf0e10cSrcweir } 85cdf0e10cSrcweir toggleState(TreeNode node)86cdf0e10cSrcweir public void toggleState(TreeNode node) { 87cdf0e10cSrcweir 88cdf0e10cSrcweir int state = data.getSelectionState(); 89cdf0e10cSrcweir 90cdf0e10cSrcweir if (state != PackageDescription.IGNORE) { 91cdf0e10cSrcweir 92cdf0e10cSrcweir if (state == PackageDescription.REMOVE) { 93cdf0e10cSrcweir setState(node, PackageDescription.DONT_REMOVE); 94cdf0e10cSrcweir } else if ((state == PackageDescription.DONT_REMOVE) || (state == PackageDescription.REMOVE_SOME)) { 95cdf0e10cSrcweir setState(node, PackageDescription.REMOVE ); 96cdf0e10cSrcweir } else if ((state == PackageDescription.DONT_INSTALL) || (state == PackageDescription.INSTALL_SOME)) { 97cdf0e10cSrcweir setState(node, PackageDescription.INSTALL); 98cdf0e10cSrcweir } else { 99cdf0e10cSrcweir setState(node, PackageDescription.DONT_INSTALL); 100cdf0e10cSrcweir } 101cdf0e10cSrcweir 102cdf0e10cSrcweir if (!node.isLeaf()) { 103cdf0e10cSrcweir updateState(node); 104cdf0e10cSrcweir } 105cdf0e10cSrcweir 106cdf0e10cSrcweir try { 107cdf0e10cSrcweir TreeNode parent = node.getParent(); 108cdf0e10cSrcweir DisplayPackageDescription parentInfo = getInfo(parent); 109cdf0e10cSrcweir 110cdf0e10cSrcweir parentInfo.updateState(parent); 111cdf0e10cSrcweir try { 112cdf0e10cSrcweir TreeNode grandpa = parent.getParent(); 113cdf0e10cSrcweir DisplayPackageDescription grandpaInfo = getInfo(grandpa); 114cdf0e10cSrcweir 115cdf0e10cSrcweir grandpaInfo.updateState(grandpa); 116cdf0e10cSrcweir } catch (java.lang.IllegalArgumentException e) { 117cdf0e10cSrcweir /* ignore */ 118cdf0e10cSrcweir } 119cdf0e10cSrcweir 120cdf0e10cSrcweir } catch (java.lang.IllegalArgumentException e) { 121cdf0e10cSrcweir /* ignore */ 122cdf0e10cSrcweir } 123cdf0e10cSrcweir } 124cdf0e10cSrcweir } 125cdf0e10cSrcweir updateState(TreeNode node)126cdf0e10cSrcweir public void updateState(TreeNode node) 127cdf0e10cSrcweir { 128cdf0e10cSrcweir int state = PackageDescription.DONT_KNOW; 129cdf0e10cSrcweir InstallData installdata = InstallData.getInstance(); 130cdf0e10cSrcweir size = data.getSize(); // -> that is the value defined in xpd file 131cdf0e10cSrcweir 132cdf0e10cSrcweir for (Enumeration e = node.children(); e.hasMoreElements();) { 133cdf0e10cSrcweir TreeNode child = (TreeNode) e.nextElement(); 134cdf0e10cSrcweir DisplayPackageDescription childInfo = getInfo(child); 135cdf0e10cSrcweir 136cdf0e10cSrcweir int childState = childInfo.getState(); 137cdf0e10cSrcweir 138cdf0e10cSrcweir if ((state == PackageDescription.DONT_KNOW) || (state == PackageDescription.IGNORE)) { 139cdf0e10cSrcweir state = childState; 140cdf0e10cSrcweir } else if ((state != childState) && (childState != PackageDescription.IGNORE)) { 141cdf0e10cSrcweir if ( installdata.isUninstallationMode() ) { 142cdf0e10cSrcweir state = PackageDescription.REMOVE_SOME; 143cdf0e10cSrcweir } else { 144cdf0e10cSrcweir state = PackageDescription.INSTALL_SOME; 145cdf0e10cSrcweir } 146cdf0e10cSrcweir } 147cdf0e10cSrcweir if (childInfo.isSelected()) { 148cdf0e10cSrcweir size += childInfo.getSize(child); 149cdf0e10cSrcweir } 150cdf0e10cSrcweir } 151cdf0e10cSrcweir 152cdf0e10cSrcweir data.setSelectionState(state); 153cdf0e10cSrcweir 154cdf0e10cSrcweir } 155cdf0e10cSrcweir updateSize(TreeNode node)156cdf0e10cSrcweir public void updateSize(TreeNode node) 157cdf0e10cSrcweir { 158cdf0e10cSrcweir size = data.getSize(); // -> that is the value defined in xpd file 159cdf0e10cSrcweir 160cdf0e10cSrcweir for (Enumeration e = node.children(); e.hasMoreElements();) { 161cdf0e10cSrcweir TreeNode child = (TreeNode) e.nextElement(); 162cdf0e10cSrcweir DisplayPackageDescription childInfo = getInfo(child); 163cdf0e10cSrcweir if (childInfo.isSelected()) { 164cdf0e10cSrcweir size += childInfo.getSize(child); 165cdf0e10cSrcweir } 166cdf0e10cSrcweir } 167cdf0e10cSrcweir } 168cdf0e10cSrcweir toString()169cdf0e10cSrcweir public String toString() { 170cdf0e10cSrcweir return data.getName(); 171cdf0e10cSrcweir } 172cdf0e10cSrcweir is(Object o)173cdf0e10cSrcweir static public boolean is(Object o) { 174cdf0e10cSrcweir return (o != null) 175cdf0e10cSrcweir && (o.getClass().getName().equals("org.openoffice.setup.SetupData.DisplayPackageDescription")); 176cdf0e10cSrcweir } 177cdf0e10cSrcweir isSelected()178cdf0e10cSrcweir public boolean isSelected() { 179cdf0e10cSrcweir int state = data.getSelectionState(); 180cdf0e10cSrcweir return (state == PackageDescription.INSTALL) || (state == PackageDescription.INSTALL_SOME) 181cdf0e10cSrcweir || (state == PackageDescription.REMOVE) || (state == PackageDescription.REMOVE_SOME); 182cdf0e10cSrcweir } 183cdf0e10cSrcweir getInfo(TreeNode node)184cdf0e10cSrcweir private DisplayPackageDescription getInfo(TreeNode node) throws java.lang.IllegalArgumentException { 185cdf0e10cSrcweir if (node == null) { 186cdf0e10cSrcweir throw new java.lang.IllegalArgumentException(); 187cdf0e10cSrcweir } 188cdf0e10cSrcweir 189cdf0e10cSrcweir DisplayPackageDescription info = (DisplayPackageDescription)((DefaultMutableTreeNode)node).getUserObject(); 190cdf0e10cSrcweir if ((info != null) && is(info)) { 191cdf0e10cSrcweir return info; 192cdf0e10cSrcweir } else { 193cdf0e10cSrcweir throw new java.lang.IllegalArgumentException(); 194cdf0e10cSrcweir } 195cdf0e10cSrcweir } 196cdf0e10cSrcweir } 197