View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  
20  package org.apache.myfaces.tobago.internal.component;
21  
22  import org.apache.myfaces.tobago.component.Visual;
23  import org.apache.myfaces.tobago.model.TreeDataModel;
24  import org.apache.myfaces.tobago.model.TreePath;
25  import org.apache.myfaces.tobago.util.ComponentUtils;
26  
27  import javax.faces.component.UIData;
28  import javax.faces.context.FacesContext;
29  import java.io.IOException;
30  import java.util.List;
31  
32  /**
33   * Base class for tree node.
34   */
35  public abstract class AbstractUITreeNodeBase extends AbstractUIColumnBase implements Visual {
36  
37    @Override
38    public void encodeBegin(final FacesContext facesContext) throws IOException {
39      final TreeDataModel model = ComponentUtils.findAncestor(this, AbstractUIData.class).getTreeDataModel();
40      model.setRowClientId(getClientId(facesContext));
41  
42      super.encodeBegin(facesContext);
43    }
44  
45    /**
46     * Returns the level of the tree node inside of the virtual tree. The root node has level 0.
47     * The children of the root note have level 1, and so on.
48     */
49    public int getLevel() {
50      final TreeDataModel model = ComponentUtils.findAncestor(this, AbstractUIData.class).getTreeDataModel();
51      return model.getLevel();
52    }
53  
54    public List<Boolean> getJunctions() {
55      final TreeDataModel model = ComponentUtils.findAncestor(this, AbstractUIData.class).getTreeDataModel();
56      return model.getJunctions();
57    }
58  
59    public boolean isFolder() {
60      final TreeDataModel model = ComponentUtils.findAncestor(this, AbstractUIData.class).getTreeDataModel();
61      return model.isFolder();
62    }
63  
64    public TreePath getPath() {
65      final TreeDataModel model = ComponentUtils.findAncestor(this, AbstractUIData.class).getTreeDataModel();
66      return model.getPath();
67    }
68  
69    public String nodeStateId(final FacesContext facesContext) {
70      final String clientId = getClientId(facesContext);
71      final UIData data = ComponentUtils.findAncestor(this, UIData.class);
72      final String dataId = data.getClientId(facesContext);
73      return clientId.substring(dataId.length() + 1);
74    }
75  }