BioInfWeb - JPhyloIO / Source code / Show File - TreeNetworkDataAdapterImpl.java

JPhyloIO subversion repository

sventon subversion web client - http://www.sventon.org
[show recent changes]
 
  Help
Rev: HEAD (1550) - https://secure.bioinfweb.info/Code/svn/JPhyloIO / trunk / demo / info.bioinfweb.jphyloio.demo.tree / src / info / bioinfweb / jphyloio / demo / tree / TreeNetworkDataAdapterImpl.java
Show File - TreeNetworkDataAdapterImpl.java  [show properties]
spinner
/*
 * JPhyloIO - Event based parsing and stream writing of multiple sequence alignment and tree formats. 
 * Copyright (C) 2015-2016  Ben Stöver, Sarah Wiechers
 * <http://bioinfweb.info/JPhyloIO>
 * 
 * This file is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
10   * 
11   * This file 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 Lesser General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Lesser General Public License
17   * along with this program. If not, see <http://www.gnu.org/licenses/>.
18   */
19  package info.bioinfweb.jphyloio.demo.tree;
20 
21 
22  import java.util.ArrayList;
23  import java.util.List;
24 
25  import javax.swing.tree.DefaultTreeModel;
26  import javax.swing.tree.TreeNode;
27 
28  import info.bioinfweb.jphyloio.ReadWriteParameterMap;
29  import info.bioinfweb.jphyloio.dataadapters.ObjectListDataAdapter;
30  import info.bioinfweb.jphyloio.dataadapters.TreeNetworkDataAdapter;
31  import info.bioinfweb.jphyloio.dataadapters.implementations.NoSetsTreeNetworkDataAdapter;
32  import info.bioinfweb.jphyloio.events.EdgeEvent;
33  import info.bioinfweb.jphyloio.events.LabeledIDEvent;
34  import info.bioinfweb.jphyloio.events.NodeEvent;
35  import info.bioinfweb.jphyloio.events.type.EventContentType;
36 
37 
38 
39  public class TreeNetworkDataAdapterImpl extends NoSetsTreeNetworkDataAdapter implements TreeNetworkDataAdapter {
40      public static final String TREE_ID = "tree";
41      public static final String NODE_ID_PREFIX = "node";
42      public static final String EDGE_ID_PREFIX = "edge";
43      
44      
45      private ObjectListDataAdapter<NodeEvent> nodeList;
46      private ObjectListDataAdapter<EdgeEvent> edgeList;
47      
48      
49      public TreeNetworkDataAdapterImpl(DefaultTreeModel model) {
50          super();
51          
52          List<TreeNode> nodes = new ArrayList<TreeNode>();
53          addSubtreeToList((TreeNode)model.getRoot(), nodes);
54          
55          nodeList = new NodeEdgeListDataAdapter<NodeEvent>(nodes, NODE_ID_PREFIX) {
56              @Override
57              protected NodeEvent createEvent(String id, int index, TreeNode node) {
58                  return new NodeEvent(id, node.toString(), null, node.getParent() == null);  // Note that this implementation will always specify a node label, even if none is present, the label will be stored as "" in formats that support it.
59              }
60          };
61          
62          edgeList = new NodeEdgeListDataAdapter<EdgeEvent>(nodes, EDGE_ID_PREFIX) {
63              @Override
64              protected EdgeEvent createEvent(String id, int index, TreeNode node) {
65                  String sourceID = null;
66                  if (node.getParent() != null) {
67                      sourceID = NODE_ID_PREFIX + getNodes().indexOf(node.getParent());  // For large trees, a node to index map could be used here instead for performance reasons.
68                  }
69                  return new EdgeEvent(id, null, sourceID, id.replace(EDGE_ID_PREFIX, NODE_ID_PREFIX), Double.NaN);
70              }
71          };
72      }
73      
74      
75      private void addSubtreeToList(TreeNode root, List<TreeNode> list) {
76          list.add(root);
77          for (int i = 0; i < root.getChildCount(); i++) {
78              addSubtreeToList(root.getChildAt(i), list);
79          }
80      }
81      
82      
83      @Override
84      public LabeledIDEvent getStartEvent(ReadWriteParameterMap parameters) {
85          return new LabeledIDEvent(EventContentType.TREE, TREE_ID, null);  
86          // Since this application supports only one tree at a time, a static ID may be used.
87      }
88      
89 
90      @Override
91      public boolean isTree(ReadWriteParameterMap parameters) {
92          return true;
93      }
94 
95      
96      @Override
97      public ObjectListDataAdapter<NodeEvent> getNodes(ReadWriteParameterMap parameters) {
98          return nodeList;
99      }
100      
101 
102      @Override
103      public ObjectListDataAdapter<EdgeEvent> getEdges(ReadWriteParameterMap parameters) {
104          return edgeList;
105      }
106  }


feed icon

sventon 2.5.1

Valid XHTML 1.0 Strict   CSS ist valide!
JPhyloIO icon
bioinfweb RSS feed JPhyloIO on ResearchGate bioinfweb on twitter JPhyloIO on GitHub

JPhyloIO poster ECCB 2016 Conference poster at ECCB Sep 2016

bioinfweb - Biology & Informatics Website