1 package net.logAnalyzer.gui;
2
3 import java.util.Hashtable;
4
5 import javax.swing.Icon;
6 import javax.swing.JPanel;
7
8 /***
9 * This class is a template for views components based on a
10 * {@link javax.swing.JPanel}.
11 *
12 * @author Karim REFEYTON
13 * @version 0.1
14 */
15 public abstract class LAView extends JPanel {
16 /***
17 * Index of the first messageLabel selected in the view.
18 */
19 private int currentFirstMessageIndex = -1;
20
21 /***
22 * Index of the last messageLabel selected in the view.
23 */
24 private int currentLastMessageIndex = -1;
25
26 /***
27 * Container.
28 */
29 private LAViewContainer viewContainer;
30
31 /***
32 * View definition.
33 */
34 private ViewDefinition definition;
35
36 /***
37 * View attributes.
38 */
39 private Hashtable attributes;
40
41 /***
42 * Creates a new view with the specified attributes.
43 *
44 * @param attributes
45 * View attributes.
46 */
47 public LAView(ViewDefinition definition, Hashtable attributes) {
48 this.definition = definition;
49 this.attributes = attributes;
50 }
51
52 /***
53 * Returns a view attribute from the specified key.
54 *
55 * @param key
56 * Attribute key.
57 * @return Attribute value.
58 */
59 protected Object getAttribute(String key) {
60 return attributes.get(key);
61 }
62
63 /***
64 * Returns the view attributes.
65 *
66 * @return Attributes.
67 */
68 protected Hashtable getAttributes() {
69 return attributes;
70 }
71
72 /***
73 * Returns the view icon.
74 *
75 * @return View icon.
76 */
77 public abstract Icon getIcon();
78
79 /***
80 * Returns the view label.
81 */
82 public String getLabel() {
83 return definition.getLabel();
84 }
85
86 /***
87 * Returns the view name.
88 *
89 * @see java.awt.Component#getName()
90 */
91 public String getName() {
92 return definition.getName();
93 }
94
95 /***
96 * Returns the view title.
97 *
98 * @return View title.
99 */
100 public abstract String getTitle();
101
102 /***
103 * Sets the view container.
104 *
105 * @param viewContainer
106 * Container.
107 */
108 public final void setViewContainer(LAViewContainer viewContainer) {
109 this.viewContainer = viewContainer;
110 addComponents();
111 this.viewContainer.viewModified();
112 }
113
114 /***
115 * Gets the view container.
116 *
117 * @return View container.
118 */
119 public final LAViewContainer getViewContainer() {
120 return this.viewContainer;
121 }
122
123 /***
124 * Adds view components. Called by
125 * {@link #setViewContainer(LAViewContainer)}.
126 */
127 protected abstract void addComponents();
128
129 /***
130 * Changes the current messages selection. Calls
131 * {@link #setCurrentMessage(int, int, int, int)}
132 *
133 * @param firstIndex
134 * First messageLabel index.
135 * @param lastIndex
136 * Last messageLabel index.
137 */
138 protected final void setCurrentMessage(int firstIndex, int lastIndex) {
139 if (currentFirstMessageIndex != firstIndex
140 || currentLastMessageIndex != lastIndex) {
141 int oldFirstIndex = currentFirstMessageIndex;
142 int oldLastIndex = currentLastMessageIndex;
143 currentFirstMessageIndex = firstIndex;
144 currentLastMessageIndex = lastIndex;
145 setCurrentMessage(oldFirstIndex, oldLastIndex,
146 currentFirstMessageIndex, currentLastMessageIndex);
147 }
148 }
149
150 /***
151 * Sets current messageLabel.
152 *
153 * @param oldFirstIndex
154 * Old first selected messageLabel index.
155 * @param oldLastIndex
156 * Old last selected messageLabel index.
157 * @param newFirstIndex
158 * New first selected messageLabel index.
159 * @param newLastIndex
160 * New last selected messageLabel index.
161 */
162 protected abstract void setCurrentMessage(int oldFirstIndex,
163 int oldLastIndex, int newFirstIndex, int newLastIndex);
164
165 /***
166 * Used to notify listeners when the current messages selection is changed.
167 *
168 * @param firstIndex
169 * First messageLabel index.
170 * @param lastIndex
171 * Last messageLabel index.
172 */
173 public void messageChangedNotify(int firstIndex, int lastIndex) {
174 if (currentFirstMessageIndex != firstIndex
175 || currentLastMessageIndex != lastIndex) {
176 currentFirstMessageIndex = firstIndex;
177 currentLastMessageIndex = lastIndex;
178 this.viewContainer.messageChanged(currentFirstMessageIndex,
179 currentLastMessageIndex);
180 }
181 }
182
183 public JPanel getQuickBarComponent(){
184 return null;
185 }
186 }