/*
* Copyright (C) 2011 apurv
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package nescent.phylogeoref.writer;
import de.micromata.opengis.kml.v_2_2_0.Document;
import de.micromata.opengis.kml.v_2_2_0.Folder;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import nescent.phylogeoref.reader.PhylogenyMould;
import nescent.phylogeoref.writer.utility.KmlUtility;
import org.forester.phylogeny.Phylogeny;
import org.forester.phylogeny.PhylogenyNode;
import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
/**
* Paints a dynamic kml file with animations.
* @author apurv
*/
public class HierarchicalKmlPainter extends KmlPainter{
private HashMap<PhylogenyNode,Folder> folderMap; //Contains the mapping from the node to the kml folder corresponding to it.
public HierarchicalKmlPainter(Phylogeny phylogeny, Map mouldMap, Document document) {
super(phylogeny, (HashMap) mouldMap, document);
folderMap = new HashMap<PhylogenyNode, Folder>();
}
@Override
public void paintPhylogeny() {
for( PhylogenyNodeIterator it = phylogeny.iteratorPreorder(); it.hasNext();) {
PhylogenyNode node = it.next();
//If the node is an external node, we'll draw it later.
if(node.isExternal()){
continue;
}
Folder folder = null;
if(node.isRoot()){
Integer id = node.getNodeId();
folder = KmlUtility.createFolder(document, node.getNodeName()+" HTU-"+id.toString(), "Root Node");
String name = node.getNodeName();
PhylogenyMould mould = mouldMap.get(name);
KmlUtility.createHTUPlacemark(folder, node, mould);
drawEdges(folder, node);
folderMap.put(node, folder);
}else{
PhylogenyNode parentNode = node.getParent();
Folder parentFolder = folderMap.get(parentNode);
String name = node.getNodeName();
Integer id = node.getNodeId();
Folder childFolder = KmlUtility.createFolder(parentFolder, name+" HTU-"+id.toString(), name);
PhylogenyMould mould = mouldMap.get(name);
KmlUtility.createHTUPlacemark(childFolder, node, mould);
drawEdges(childFolder, node);
folderMap.put(node, childFolder);
}
}
putExternalNodes();
}
}