package act.inject.param;
/*-
* #%L
* ACT Framework
* %%
* Copyright (C) 2014 - 2017 ActFramework
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import act.cli.tree.TreeNode;
import act.cli.view.CliView;
import java.util.*;
class ParamTreeNode implements TreeNode {
private ParamKey key;
private String leafVal;
private Map<String, ParamTreeNode> map;
private List<ParamTreeNode> list;
private ParamTreeNode(ParamKey path) {
this.key = path;
}
@Override
public String id() {
return key.toString();
}
@Override
public String label() {
return id();
}
@Override
public List<TreeNode> children() {
List<TreeNode> list = new ArrayList<TreeNode>();
if (isList()) {
list.addAll(this.list);
} else if (isMap()) {
list.addAll(map.values());
}
return list;
}
@Override
public String toString() {
return id();
}
String debug() {
return CliView.TREE.render(this, null, null);
}
ParamKey key() {
return key;
}
boolean isLeaf() {
return null != leafVal;
}
String value() {
return leafVal;
}
boolean isMap() {
return null != map;
}
Set<String> mapKeys() {
return map.keySet();
}
Collection<ParamTreeNode> mapValues() {
return map.values();
}
ParamTreeNode child(String name) {
return map.get(name);
}
boolean isList() {
return null != list;
}
List<ParamTreeNode> list() {
return list;
}
void addListItem(ParamTreeNode item) {
list.add(item);
}
void addChild(String key, ParamTreeNode child) {
map.put(key, child);
}
static ParamTreeNode leaf(ParamKey key, String value) {
ParamTreeNode node = new ParamTreeNode(key);
node.leafVal = value;
return node;
}
static ParamTreeNode map(ParamKey key) {
ParamTreeNode node = new ParamTreeNode(key);
node.map = new HashMap<String, ParamTreeNode>();
return node;
}
static ParamTreeNode list(ParamKey key) {
ParamTreeNode node = new ParamTreeNode(key);
node.list = new ArrayList<ParamTreeNode>();
return node;
}
}