// Copyright 2004, FreeHEP.
package hep.graphics.heprep1.adapter;
import java.util.*;
import hep.graphics.heprep.HepRep;
import hep.graphics.heprep.HepRepAction;
import hep.graphics.heprep.HepRepAttributeAdapter;
import hep.graphics.heprep.HepRepInstance;
import hep.graphics.heprep.HepRepInstanceTree;
import hep.graphics.heprep.HepRepIterator;
import hep.graphics.heprep.HepRepSelectFilter;
import hep.graphics.heprep.HepRepTreeID;
import hep.graphics.heprep.HepRepType;
import hep.graphics.heprep.HepRepTypeTree;
import hep.graphics.heprep.ref.DefaultHepRepIterator;
import hep.graphics.heprep.util.HashMapList;
import hep.graphics.heprep.util.MapList;
import hep.graphics.heprep.xml.XMLHepRepReader;
/**
*
* @author Mark Donszelmann
* @version $Id: HepRepAdapter.java 8584 2006-08-10 23:06:37Z duns $
*/
public class HepRepAdapter implements HepRep {
private MapList/*<TreeID, HepRepInstanceTrees>*/ instanceTrees = new HashMapList();
private MapList/*<TreeID, HepRepTypeTrees>*/ typeTrees = new HashMapList();
private HepRepAdapterFactory factory;
List/*<String>*/ layerOrder;
/**
* Wrapper for HepRep
* @param heprep1 top-level heprep1
*/
public HepRepAdapter(hep.graphics.heprep1.HepRep heprep1) {
this.factory = HepRepAdapterFactory.getFactory();
try {
XMLHepRepReader.readDefaults();
} catch(Exception e) {
System.err.println("Warning: unable to read HepRep default attributes from XML");
}
// add trees
HepRepTreeID id = factory.createHepRepTreeID("Types", "1.0");
HepRepTypeTree typeTree = factory.createHepRepTypeTree(id);
typeTrees.put(id, typeTree);
HepRepType rootType = factory.createHepRepType(heprep1, null);
typeTree.addType(rootType);
HepRepInstanceTree instanceTree = factory.createHepRepInstanceTree("Instances", "1.0", id);
instanceTrees.put(factory.createHepRepTreeID(instanceTree.getName(), instanceTree.getVersion()), instanceTree);
HepRepInstance rootInstance = factory.createHepRepInstance(heprep1, null, rootType);
instanceTree.addInstance(rootInstance);
for (Enumeration e=heprep1.getTypes(); e.hasMoreElements(); ) {
rootType.addType(factory.createHepRepType((hep.graphics.heprep1.HepRepType)e.nextElement(), rootType, rootInstance));
}
}
public void addLayer(String layer) {
throw new UnsupportedOperationException();
}
public List/*<String>*/ getLayerOrder() {
if (layerOrder == null) {
final Set/*<String>*/ set = new HashSet();
// find all the layers
HepRepIterator iterator = new DefaultHepRepIterator(getInstanceTreeList());
iterator.addHepRepAttributeListener("Layer", new HepRepAttributeAdapter() {
public void setAttribute(HepRepInstance instance, String key, String value, String lowerCaseValue, int showLabel) {
set.add(value);
}
});
while (iterator.hasNext()) {
iterator.nextInstance();
}
// Sort them into a list
layerOrder = new ArrayList(set);
Collections.sort(layerOrder, new NumericalComparator());
}
return layerOrder;
}
public void addTypeTree(HepRepTypeTree typeTree) {
throw new UnsupportedOperationException();
}
public void removeTypeTree(HepRepTypeTree typeTree) {
throw new UnsupportedOperationException();
}
/**
* @deprecated use getTypeTreeList()
*/
public Set/*<HepRepTypeTree>*/ getTypeTrees() {
return typeTrees.valueSet();
}
public List/*<HepRepTypeTree>*/ getTypeTreeList() {
return typeTrees.valueList();
}
public HepRepTypeTree getTypeTree(String name, String version) {
return (HepRepTypeTree)typeTrees.get(factory.createHepRepTreeID(name, version));
}
public void addInstanceTree(HepRepInstanceTree instanceTree) {
throw new UnsupportedOperationException();
}
public void overlayInstanceTree(HepRepInstanceTree instanceTree) {
throw new UnsupportedOperationException();
}
public void removeInstanceTree(HepRepInstanceTree instanceTree) {
throw new UnsupportedOperationException();
}
/**
* @deprecated use getInstanceTreeList()
*/
public Set/*<HepRepInstanceTree>*/ getInstanceTrees() {
return instanceTrees.valueSet();
}
public List/*<HepRepInstanceTree>*/ getInstanceTreeList() {
return instanceTrees.valueList();
}
public HepRepInstanceTree getInstanceTreeTop(String name, String version) {
return (HepRepInstanceTree)instanceTrees.get(factory.createHepRepTreeID(name, version));
}
public HepRepInstanceTree getInstances(String name, String version, String[] typeNames) {
// FIXME FREEHEP-364
return getInstanceTreeTop(name, version);
}
public HepRepInstanceTree getInstancesAfterAction(String name, String version, String[] typeNames, HepRepAction[] actions, boolean getPoints, boolean getDrawAtts, boolean getNonDrawAtts, String[] invertAtts) {
// FIXME FREEHEP-365
return getInstanceTreeTop(name, version);
}
public String checkForException() {
return "Not Implemented";
}
public HepRep copy() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
public HepRep copy(HepRepSelectFilter filter) throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
}