Changeset 51

Show
Ignore:
Timestamp:
02/22/10 15:54:12 (2 years ago)
Author:
ke
Message:

Added methods for recomputing the layer information of a tree or subtree.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • kahina/trunk/src/org/kahina/data/tree/KahinaDbTree.java

    r50 r51  
    164164                        throw new KahinaException("SQL error.", e); 
    165165                } 
     166                computeAndStoreLayerInformation(child); 
     167        } 
     168         
     169        private void computeAndStoreLayerInformation(int child) 
     170        { 
    166171                int layer = decider.decideOnLayer(child, this); 
    167                 int virtualParent = parent
     172                int virtualParent = getParent(child)
    168173                while (getLayer(virtualParent) > layer) 
    169174                { 
     
    183188 
    184189        @Override 
     190        public void setLayerDecider(LayerDecider decider) 
     191        { 
     192                super.setLayerDecider(decider); 
     193                recomputeLayers(); 
     194        } 
     195 
     196        public void recomputeLayers() 
     197        { 
     198                recomputeLayers(getRootID()); 
     199        } 
     200 
     201        public void recomputeLayers(int nodeID) 
     202        { 
     203                computeAndStoreLayerInformation(nodeID); 
     204                for (int childID : getChildren(nodeID)) 
     205                { 
     206                        recomputeLayers(childID); 
     207                } 
     208        } 
     209 
     210        @Override 
    185211        public int getParent(int nodeID) 
    186212        { 
     
    270296                { 
    271297                        // usually only the case for the root of a partial tree 
    272                         List<Integer> frontLine = getRealChildren(nodeID); 
     298                        List<Integer> frontLine = getChildren(nodeID); 
    273299                        for (int i = 0; i < frontLine.size();) 
    274300                        { 
     
    277303                                { 
    278304                                        frontLine.remove(i); 
    279                                         frontLine.addAll(i, getRealChildren(child)); 
     305                                        frontLine.addAll(i, getChildren(child)); 
    280306                                } else 
    281307                                { 
     
    289315        } 
    290316 
    291         private List<Integer> getRealChildren(int nodeID) 
     317        private List<Integer> getChildren(int nodeID) 
    292318        { 
    293319                try 
     
    329355        protected void collectLeaves(int nodeID, List<Integer> leaves) 
    330356        { 
    331                 List<Integer> children = getRealChildren(nodeID); 
     357                List<Integer> children = getChildren(nodeID); 
    332358                if (children.isEmpty()) 
    333359                { 
  • kahina/trunk/src/org/kahina/data/tree/KahinaTree.java

    r50 r51  
    3434                primaryModel = this; 
    3535                rootID = -1; 
     36        } 
     37         
     38        public LayerDecider getLayerDecider() 
     39        { 
     40                return decider; 
     41        } 
     42         
     43        public void setLayerDecider(LayerDecider decider) 
     44        { 
     45                this.decider = decider; 
    3646        } 
    3747