KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > classycle > dependency > DependencyStatement


1 /*
2  * Copyright (c) 2003-2006, Franz-Josef Elmer, All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * - Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  * - Redistributions in binary form must reproduce the above copyright notice,
10  * this list of conditions and the following disclaimer in the documentation
11  * and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
14  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
15  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
22  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
23  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */

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 /**
33  * @author Franz-Josef Elmer
34  */

35 public class DependencyStatement implements Statement
36 {
37   private static final String JavaDoc IDOF
38       = DependencyDefinitionParser.INDEPENDENT_OF_KEY_WORD;
39   private static final String JavaDoc DIDOF
40       = DependencyDefinitionParser.DIRECTLY_INDEPENDENT_OF_KEY_WORD;
41   private static final String JavaDoc 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 JavaDoc toString(int i, int j)
95   {
96     StringBuffer JavaDoc buffer = new StringBuffer JavaDoc(CHECK);
97     buffer.append(_repository.toString(_startSets[i])).append(' ')
98           .append(getKeyWord()).append(' ')
99           .append(_repository.toString(_finalSets[j]));
100     return new String JavaDoc(buffer);
101   }
102   
103   public String JavaDoc toString()
104   {
105     StringBuffer JavaDoc buffer = new StringBuffer JavaDoc(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 JavaDoc(buffer.substring(0, buffer.length() - 1));
117   }
118
119   private String JavaDoc getKeyWord()
120   {
121     return _directPathsOnly ? DIDOF : IDOF;
122   }
123
124 }
125
Popular Tags