1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.log4j.chainsaw;
19
20 import org.apache.log4j.rule.Rule;
21
22 import java.beans.PropertyChangeListener;
23 import java.util.List;
24
25
26 /**
27 * To allow pluggable TableModel implementations for Chainsaw, this interface has been factored out.
28 * <p>
29 * This interface is still subject to change.
30 *
31 * @author Paul Smith <psmith@apache.org>
32 * @author Scott Deboy <sdeboy@apache.org>
33 * @author Stephen Pain
34 */
35 public interface EventContainer extends SortTableModel, LoggerNameModel {
36 /**
37 * Adds an EventCountListener, to be notified when the # of events changes
38 *
39 * @param listener
40 */
41 void addEventCountListener(EventCountListener listener);
42
43 void addPropertyChangeListener(PropertyChangeListener l);
44
45 void addPropertyChangeListener(
46 String propertyName, PropertyChangeListener l);
47
48 /**
49 * Adds a NewKeyListener to be notified when unique Key (Property keys)
50 * arrive into this EventContainer
51 *
52 * @param l
53 */
54 void addNewKeyListener(NewKeyListener l);
55
56 /**
57 * Removes a listener from being notified of NewKey events.
58 *
59 * @param l
60 */
61 void removeNewKeyListener(NewKeyListener l);
62
63 /**
64 * Clears the model completely
65 */
66 void clearModel();
67
68 List<LoggingEventWrapper> getMatchingEvents(Rule rule);
69
70 /**
71 * Configures this model to use Cyclic or non-cyclic models.
72 * This method should fire a property Change event if
73 * it involves an actual change in the underlying model.
74 * <p>
75 * This method does nothing if there is no change in proprty.
76 *
77 * @param cyclic
78 */
79 void setCyclic(boolean cyclic);
80
81 /**
82 * If this container is in Cyclic mode, returns the Size of the cyclic buffer,
83 * otherwise this method throws an IllegalStateException, when in unlimited
84 * mode, this method has no meaning.
85 *
86 * @return int size of the cyclic buffer
87 * @throws IllegalStateException if this containers isCyclic() method returns false.
88 */
89 int getMaxSize();
90
91 /**
92 * Locates a row number, starting from startRow, matching the rule provided
93 *
94 * @param rule
95 * @param startRow
96 * @param searchForward
97 */
98 int locate(Rule rule, int startRow, boolean searchForward);
99
100 /**
101 * Returns a copied list of all the event in the model.
102 */
103 List getAllEvents();
104
105 /**
106 * Returns a copied list containing the events in the model with filter applied
107 */
108 List getFilteredEvents();
109
110 /**
111 * Returns the total number of events currently in the model (all, not just filtered)
112 *
113 * @return size
114 */
115 int size();
116
117 /**
118 * Returns the vector representing the row.
119 */
120 LoggingEventWrapper getRow(int row);
121
122 /**
123 * Adds a row to the model.
124 *
125 * @param e event
126 * @return flag representing whether or not the row is being displayed (not filtered)
127 */
128 boolean isAddRow(LoggingEventWrapper e);
129
130 /**
131 * Fire appropriate table update events for the range.
132 */
133 void fireTableEvent(int begin, int end, int count);
134
135 /**
136 * A row was updated
137 *
138 * @param row
139 * @param checkForNewColumns
140 */
141 void fireRowUpdated(int row, boolean checkForNewColumns);
142
143 /**
144 * Allow a forced notification of the EventCountListeners
145 */
146 void notifyCountListeners();
147
148 /**
149 * Force a re-processing of the table layout
150 */
151 void reFilter();
152
153 /**
154 * Sets the RuleMediator in operation
155 *
156 * @param ruleMediator
157 */
158 void setRuleMediator(RuleMediator ruleMediator);
159
160 /**
161 * Returns the index of the LoggingEventWrapper
162 *
163 * @param loggingEventWrapper
164 */
165 int getRowIndex(LoggingEventWrapper loggingEventWrapper);
166
167 /**
168 * Remove property from all events in container
169 *
170 * @param propName the property name to remove
171 */
172 void removePropertyFromEvents(String propName);
173
174 /**
175 * Evaluate all events against the find rule
176 *
177 * @param findRule
178 */
179 int updateEventsWithFindRule(Rule findRule);
180
181 /**
182 * Determine next row with a non-default color
183 *
184 * @param currentRow
185 * @param forward
186 * @return
187 */
188 int findColoredRow(int currentRow, boolean forward);
189
190 /**
191 * Return the visible search match count
192 *
193 * @return
194 */
195 int getSearchMatchCount();
196 }