1 25 package classycle.dependency; 26 27 import classycle.graph.AtomicVertex; 28 import classycle.graph.PathsFinder; 29 import classycle.graph.VertexCondition; 30 import classycle.util.StringPattern; 31 32 35 public class DependencyStatement implements Statement 36 { 37 private static final String IDOF 38 = DependencyDefinitionParser.INDEPENDENT_OF_KEY_WORD; 39 private static final String DIDOF 40 = DependencyDefinitionParser.DIRECTLY_INDEPENDENT_OF_KEY_WORD; 41 private static final String CHECK 42 = DependencyDefinitionParser.CHECK_KEY_WORD + ' '; 43 private final StringPattern[] _startSets; 44 private final StringPattern[] _finalSets; 45 private final boolean _directPathsOnly; 46 private final VertexCondition[] _startConditions; 47 private final VertexCondition[] _finalConditions; 48 private final SetDefinitionRepository _repository; 49 private final ResultRenderer _renderer; 50 51 public DependencyStatement(StringPattern[] startSets, 52 StringPattern[] finalSets, 53 boolean directPathsOnly, 54 SetDefinitionRepository repository, 55 ResultRenderer renderer) 56 { 57 _startSets = startSets; 58 _finalSets = finalSets; 59 _directPathsOnly = directPathsOnly; 60 _repository = repository; 61 _renderer = renderer; 62 _startConditions = createVertexConditions(startSets); 63 _finalConditions = createVertexConditions(finalSets); 64 } 65 66 private VertexCondition[] createVertexConditions(StringPattern[] patterns) 67 { 68 VertexCondition[] fromSets = new VertexCondition[patterns.length]; 69 for (int i = 0; i < fromSets.length; i++) 70 { 71 fromSets[i] = new PatternVertexCondition(patterns[i]); 72 } 73 return fromSets; 74 } 75 76 public Result execute(AtomicVertex[] graph) 77 { 78 ResultContainer result = new ResultContainer(); 79 for (int i = 0; i < _startConditions.length; i++) 80 { 81 for (int j = 0; j < _finalConditions.length; j++) 82 { 83 PathsFinder finder = new PathsFinder(_startConditions[i], 84 _finalConditions[j], 85 _renderer.onlyShortestPaths(), 86 _directPathsOnly); 87 result.add(new DependencyResult(_startSets[i], _finalSets[j], 88 toString(i, j), finder.findPaths(graph))); 89 } 90 } 91 return result; 92 } 93 94 private String toString(int i, int j) 95 { 96 StringBuffer buffer = new StringBuffer (CHECK); 97 buffer.append(_repository.toString(_startSets[i])).append(' ') 98 .append(getKeyWord()).append(' ') 99 .append(_repository.toString(_finalSets[j])); 100 return new String (buffer); 101 } 102 103 public String toString() 104 { 105 StringBuffer buffer = new StringBuffer (CHECK); 106 for (int i = 0; i < _startSets.length; i++) 107 { 108 buffer.append(_repository.toString(_startSets[i])).append(' '); 109 } 110 buffer.append(getKeyWord()).append(' '); 111 for (int i = 0; i < _finalSets.length; i++) 112 { 113 buffer.append(_repository.toString(_finalSets[i])).append(' '); 114 } 115 116 return new String (buffer.substring(0, buffer.length() - 1)); 117 } 118 119 private String getKeyWord() 120 { 121 return _directPathsOnly ? DIDOF : IDOF; 122 } 123 124 } 125 | Popular Tags |