View Javadoc

1   /*
2    *  File: DefaultHierarchicalTableViewState.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    * All rights reserved. This program and the accompanying materials
7    * are made available under the terms of the Common Public License v1.0
8    * which accompanies this distribution, and is available at
9    * http://www.eclipse.org/legal/cpl-v10.html
10   */
11  package de.jaret.util.ui.table.model;
12  
13  import java.util.HashMap;
14  import java.util.List;
15  import java.util.Map;
16  import java.util.Vector;
17  
18  /***
19   * Default implementation of a hierarchical view state.
20   * 
21   * @author Peter Kliem
22   * @version $Id: DefaultHierarchicalTableViewState.java 179 2007-01-07 17:37:50Z olk $
23   */
24  public class DefaultHierarchicalTableViewState extends DefaultTableViewState implements IHierarchicalTableViewState {
25      /*** listener list. */
26      protected List<IHierarchicalTableViewStateListener> _listeners;
27  
28      /*** map holding the node expanded states. */
29      protected Map<ITableNode, Boolean> _expandedStatesMap = new HashMap<ITableNode, Boolean>();
30  
31      /***
32       * {@inheritDoc}
33       */
34      public boolean isExpanded(ITableNode node) {
35          Boolean state = _expandedStatesMap.get(node);
36          return !(state == null || !state.booleanValue());
37      }
38  
39      /***
40       * {@inheritDoc}
41       */
42      public void setExpanded(ITableNode node, boolean expanded) {
43          boolean state = isExpanded(node);
44          if (state != expanded) {
45              _expandedStatesMap.put(node, expanded);
46              if (expanded) {
47                  fireNodeExpanded(node);
48              } else {
49                  fireNodeFolded(node);
50              }
51          }
52      }
53  
54      /***
55       * {@inheritDoc}
56       */
57      public void setExpandedRecursive(ITableNode node, boolean expanded) {
58          if (node.getChildren().size() > 0) {
59              setExpanded(node, expanded);
60              for (ITableNode child : node.getChildren()) {
61                  setExpandedRecursive(child, expanded);
62              }
63          }
64      }
65  
66      /***
67       * {@inheritDoc}
68       */
69      public synchronized void addHierarchicalViewstateListener(IHierarchicalTableViewStateListener htvsListener) {
70          if (_listeners == null) {
71              _listeners = new Vector<IHierarchicalTableViewStateListener>();
72          }
73          _listeners.add(htvsListener);
74      }
75  
76      /***
77       * {@inheritDoc}
78       */
79      public void remHierarchicalViewStateListener(IHierarchicalTableViewStateListener htvsListener) {
80          if (_listeners != null) {
81              _listeners.remove(htvsListener);
82          }
83      }
84  
85      /***
86       * Inform listeners about a node expansion.
87       * 
88       * @param node expanded node
89       */
90      protected void fireNodeExpanded(ITableNode node) {
91          if (_listeners != null) {
92              for (IHierarchicalTableViewStateListener listener : _listeners) {
93                  listener.nodeExpanded(node);
94              }
95          }
96      }
97  
98      /***
99       * Infor listeners about a folded node.
100      * 
101      * @param node node that has been folded
102      */
103     protected void fireNodeFolded(ITableNode node) {
104         if (_listeners != null) {
105             for (IHierarchicalTableViewStateListener listener : _listeners) {
106                 listener.nodeFolded(node);
107             }
108         }
109     }
110 }