View Javadoc

1   /*
2    *  File: HierarchicalViewStateImpl.java 
3    *  Copyright (c) 2004-2007  Peter Kliem (Peter.Kliem@jaret.de)
4    *  A commercial license is available, see http://www.jaret.de.
5    *
6    *  This program is free software; you can redistribute it and/or modify
7    *  it under the terms of the GNU General Public License as published by
8    *  the Free Software Foundation; either version 2 of the License, or
9    *  (at your option) any later version.
10   *
11   *  This program is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   *  GNU General Public License for more details.
15   *
16   *  You should have received a copy of the GNU General Public License
17   *  along with this program; if not, write to the Free Software
18   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19   */
20  package de.jaret.util.ui.timebars.model;
21  
22  import java.util.ArrayList;
23  import java.util.HashMap;
24  import java.util.List;
25  import java.util.Map;
26  
27  /**
28   * Default implementation of a HIerarchicalViewState based on a map, not supporting paths to nodes.
29   * 
30   * @author Peter Kliem
31   * @version $Id: HierarchicalViewStateImpl.java 800 2008-12-27 22:27:33Z kliem $
32   */
33  
34  public class HierarchicalViewStateImpl implements HierarchicalViewState {
35      /** listener list. */
36      protected List<HierarchicalViewStateListener> _listenerList;
37  
38      /** Map holding the state for each node. */
39      protected Map<TimeBarNode, Boolean> _stateMap = new HashMap<TimeBarNode, Boolean>();
40  
41      /**
42       * {@inheritDoc}
43       */
44      public boolean isExpanded(TimeBarNode node) {
45          Boolean state = _stateMap.get(node);
46          if (state == null) {
47              return false;
48          }
49          return state.booleanValue();
50      }
51  
52      /**
53       * {@inheritDoc}
54       */
55      public void setExpanded(TimeBarNode node, boolean expanded) {
56          Boolean oldState = _stateMap.get(node);
57          Boolean state = Boolean.valueOf(expanded);
58          _stateMap.put(node, state);
59          if (expanded) {
60              if (oldState == null || !oldState.booleanValue()) {
61                  fireNodeExpanded(node);
62              }
63          } else {
64              if (oldState != null && oldState.booleanValue()) {
65                  fireNodeFolded(node);
66              }
67          }
68      }
69  
70      /**
71       * {@inheritDoc}
72       */
73      public void setExpandedRecursive(TimeBarNode node, boolean expanded) {
74          if (node.getChildren().size() > 0) {
75              setExpanded(node, expanded);
76              for (TimeBarNode child : node.getChildren()) {
77                  setExpandedRecursive(child, expanded);
78              }
79          }
80      }
81  
82      /**
83       * {@inheritDoc}
84       */
85      public void addHierarchicalViewstateListener(HierarchicalViewStateListener hvsListener) {
86          if (_listenerList == null) {
87              _listenerList = new ArrayList<HierarchicalViewStateListener>();
88          }
89          _listenerList.add(hvsListener);
90      }
91  
92      /**
93       * {@inheritDoc}
94       */
95      public void remHierarchicalViewStateListener(HierarchicalViewStateListener hvsListener) {
96          if (_listenerList != null) {
97              _listenerList.remove(hvsListener);
98          }
99      }
100 
101     /**
102      * Inform listeners that a node has been expanded.
103      * 
104      * @param node expanded node
105      */
106     private void fireNodeExpanded(TimeBarNode node) {
107         if (_listenerList != null) {
108             for (HierarchicalViewStateListener hvsl : _listenerList) {
109                 hvsl.nodeExpanded(node);
110             }
111         }
112     }
113 
114     /**
115      * Inform listeners that a node has been collapsed.
116      * 
117      * @param node collapsed node
118      */
119     private void fireNodeFolded(TimeBarNode node) {
120         if (_listenerList != null) {
121             for (HierarchicalViewStateListener hvsl : _listenerList) {
122                 hvsl.nodeFolded(node);
123             }
124         }
125     }
126 
127 }