EMMA Coverage Report (generated Mon Nov 29 14:43:38 PST 2010)
[all classes][com.jeantessier.dependency]

COVERAGE SUMMARY FOR SOURCE FILE [TransitiveClosureEngine.java]

nameclass, %method, %block, %line, %
TransitiveClosureEngine.java100% (1/1)100% (10/10)100% (160/160)100% (38/38)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TransitiveClosureEngine100% (1/1)100% (10/10)100% (160/160)100% (38/38)
TransitiveClosureEngine (Collection, SelectionCriteria, SelectionCriteria, Cl... 100% (1/1)100% (10/10)100% (2/2)
TransitiveClosureEngine (NodeFactory, Collection, SelectionCriteria, Selectio... 100% (1/1)100% (43/43)100% (11/11)
computeAllLayers (): void 100% (1/1)100% (8/8)100% (3/3)
computeLayers (long): void 100% (1/1)100% (18/18)100% (3/3)
computeNextLayer (): void 100% (1/1)100% (30/30)100% (7/7)
gatherResults (ClosureSelector): void 100% (1/1)100% (19/19)100% (4/4)
getFactory (): NodeFactory 100% (1/1)100% (3/3)100% (1/1)
getLayer (int): Collection 100% (1/1)100% (6/6)100% (1/1)
getNbLayers (): int 100% (1/1)100% (4/4)100% (1/1)
init (Collection, SelectionCriteria): void 100% (1/1)100% (19/19)100% (5/5)

1/*
2 *  Copyright (c) 2001-2009, Jean Tessier
3 *  All rights reserved.
4 *  
5 *  Redistribution and use in source and binary forms, with or without
6 *  modification, are permitted provided that the following conditions
7 *  are met:
8 *  
9 *      * Redistributions of source code must retain the above copyright
10 *        notice, this list of conditions and the following disclaimer.
11 *  
12 *      * Redistributions in binary form must reproduce the above copyright
13 *        notice, this list of conditions and the following disclaimer in the
14 *        documentation and/or other materials provided with the distribution.
15 *  
16 *      * Neither the name of Jean Tessier nor the names of his contributors
17 *        may be used to endorse or promote products derived from this software
18 *        without specific prior written permission.
19 *  
20 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 *  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
24 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32 
33package com.jeantessier.dependency;
34 
35import java.util.*;
36 
37public class TransitiveClosureEngine {
38    private NodeFactory factory;
39    private ClosureLayerSelector layerSelector;
40    private ClosureStopSelector stopSelector;
41    
42    private Collection<Node> coverage = new HashSet<Node>();
43    private LinkedList<Collection<? extends Node>> selections = new LinkedList<Collection<? extends Node>>();
44    private LinkedList<Collection<? extends Node>> layers = new LinkedList<Collection<? extends Node>>();
45    
46    public TransitiveClosureEngine(Collection<? extends Node> packages, SelectionCriteria startCriteria, SelectionCriteria stopCriteria, ClosureLayerSelector layerSelector) {
47        this(new NodeFactory(), packages, startCriteria, stopCriteria, layerSelector);
48    }
49    
50    public TransitiveClosureEngine(NodeFactory factory, Collection<? extends Node> packages, SelectionCriteria startCriteria, SelectionCriteria stopCriteria, ClosureLayerSelector layerSelector) {
51        this.factory = factory;
52        
53        this.layerSelector = layerSelector;
54        this.layerSelector.setFactory(factory);
55        this.layerSelector.setCoverage(coverage);
56 
57        this.stopSelector = new ClosureStopSelector(stopCriteria);
58        
59        init(packages, startCriteria);
60    }
61 
62    private void init(Collection<? extends Node> packages, SelectionCriteria startCriteria) {
63        ClosureStartSelector startSelector = new ClosureStartSelector(factory, startCriteria);
64        startSelector.traverseNodes(packages);
65        stopSelector.traverseNodes(startSelector.getCopiedNodes());
66        gatherResults(startSelector);
67    }
68 
69    public NodeFactory getFactory() {
70        return factory;
71    }
72 
73    public int getNbLayers() {
74        return layers.size();
75    }
76    
77    public Collection getLayer(int i) {
78        return layers.get(i);
79    }
80 
81    public void computeAllLayers() {
82        while (!stopSelector.isDone()) {
83            computeNextLayer();
84        }
85    }
86 
87    public void computeLayers(long nbLayers) {
88        for (long i=0; !stopSelector.isDone() && i<nbLayers; i++) {
89            computeNextLayer();
90        }
91    }
92 
93    public void computeNextLayer() {
94        if (!stopSelector.isDone()) {
95            layerSelector.reset();
96            layerSelector.traverseNodes(selections.getLast());
97 
98            stopSelector.traverseNodes(layerSelector.getCopiedNodes());
99            if (!layerSelector.getCopiedNodes().isEmpty()) {
100                gatherResults(layerSelector);
101            }
102        }
103    }
104 
105    private void gatherResults(ClosureSelector selector) {
106        coverage.addAll(selector.getSelectedNodes());
107        selections.add(selector.getSelectedNodes());
108        layers.add(selector.getCopiedNodes());
109    }
110}

[all classes][com.jeantessier.dependency]
EMMA 2.0.5312 (C) Vladimir Roubtsov