Revision: 503 http://cishell.svn.sourceforge.net/cishell/?rev=503&view=rev Author: mwlinnem Date: 2007-08-30 13:38:58 -0700 (Thu, 30 Aug 2007) Log Message: ----------- Cleaned up and commented some methods while hunting for missing edge bug in Converter Graph. Modified Paths: -------------- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/converter/graph/ConverterGraph.java Modified: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/converter/graph/ConverterGraph.java =================================================================== --- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/converter/graph/ConverterGraph.java 2007-08-30 19:24:13 UTC (rev 502) +++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/converter/graph/ConverterGraph.java 2007-08-30 20:38:58 UTC (rev 503) @@ -17,7 +17,7 @@ public class ConverterGraph { prefuse.data.Graph converterGraph; - Map inDataToAlgorithm; + Map inDataToConverters; Map fileExtensionTestConverters; Map fileExtensionCompareConverters; Converter[] converters; @@ -25,18 +25,22 @@ private LogService log; private static final String testOutData = "prefuse.data.Graph"; - public ConverterGraph(ServiceReference[] converterRefs, BundleContext bContext, LogService log) { + public ConverterGraph(ServiceReference[] converterRefs, + BundleContext bContext, LogService log) { this.bContext = bContext; this.log = log; this.converters = createConverters(converterRefs); - inDataToAlgorithm = new HashMap();//<String, List<Convertere>>(); - fileExtensionTestConverters = new ConcurrentHashMap();//<String, List<ConverterPath>>(); - fileExtensionCompareConverters = new ConcurrentHashMap();//<String, ConverterPath>(); + inDataToConverters = + new HashMap();//<String, List<Convertere>>(); + fileExtensionTestConverters = + new ConcurrentHashMap();//<String, List<ConverterPath>>(); + fileExtensionCompareConverters = + new ConcurrentHashMap();//<String, ConverterPath>(); - associateAlgorithms(this.converters, this.inDataToAlgorithm); - createConverterPaths(this.inDataToAlgorithm, this.fileExtensionTestConverters, this.fileExtensionCompareConverters); + associateConverters(this.converters, this.inDataToConverters); + createConverterPaths(this.inDataToConverters, this.fileExtensionTestConverters, this.fileExtensionCompareConverters); } @@ -50,10 +54,12 @@ return (Converter[]) converters.toArray(new Converter[0]); } - private void associateAlgorithms(Converter[] cs, Map hm){ + private void associateConverters(Converter[] cs, Map hm){ for (int i = 0; i < cs.length; i++){ Converter c = cs[i]; + String s = c.getInData(); + if(hm.get(s) == null){ List l = new ArrayList(); l.add(c); @@ -98,7 +104,7 @@ ConverterPath p = new ConverterPath(path, this.bContext); p.add((Converter) cs.get(0)); cs.remove(0); - createPaths((List)this.inDataToAlgorithm.get(p.getOutData()), p, p.getOutData()); + createPaths((List)this.inDataToConverters.get(p.getOutData()), p, p.getOutData()); } return null; @@ -214,12 +220,12 @@ public String toString(){ StringBuffer str = new StringBuffer(); - String[] keySet = new String[this.inDataToAlgorithm.keySet().size()]; - keySet = (String[])this.inDataToAlgorithm.keySet().toArray(keySet); + String[] keySet = new String[this.inDataToConverters.keySet().size()]; + keySet = (String[])this.inDataToConverters.keySet().toArray(keySet); for(int i = 0; i < keySet.length; i++){ String s = keySet[i]; str.append(s + "\r\n"); - List al = (List)this.inDataToAlgorithm.get(s); + List al = (List)this.inDataToConverters.get(s); for(int j = 0; j < al.size(); j++){ Converter c = (Converter)al.get(j); str.append("\t" + c.getUniqueName() + "\r\n"); @@ -274,19 +280,25 @@ } public File asNWB() { - File f = getTempFile(); + Map nodes = assembleNodesSet(); - TreeSet output = assembleEdges(nodes); - try{ - FileWriter out = new FileWriter(f); - BufferedWriter bw = new BufferedWriter(out); + TreeSet edges = assembleEdges(nodes); - writeNodes(bw,nodes); - writeEdges(bw,output); - } - catch(IOException ex){ + File f = getTempFile(); + try { + BufferedWriter writer = + new BufferedWriter(new FileWriter(f)); + + writeNodes(writer,nodes); + writeEdges(writer,edges); + + } catch(IOException e) { System.out.println("Blurt!"); + this.log.log(LogService.LOG_ERROR, + "IOException while creating converter graph file", + e); } + return f; } @@ -298,13 +310,16 @@ private void writeNodes(BufferedWriter bw, Map nodes) throws IOException{ writeNodeHeader(bw, nodes.size()); + String[] keySet = new String[nodes.keySet().size()]; + keySet = (String[])nodes.keySet().toArray(keySet); for(int i = 0; i < keySet.length; i++){ - bw.flush(); bw.write(nodes.get(keySet[i]) + " \"" + keySet[i]+"\"\r\n"); } + bw.flush(); + } private void writeEdgeHeader(BufferedWriter bw, int numEdges) throws IOException{ @@ -320,9 +335,10 @@ edgeArray = (String[])edges.toArray(edgeArray); for(int i = 0; i < edgeArray.length; i++){ - bw.flush(); bw.write(edgeArray[i]+"\r\n"); } + + bw.flush(); } private Map assembleNodesSet(){ @@ -330,54 +346,89 @@ Map nodesToInt = new ConcurrentHashMap(); //create a set of all the in_data, out_data, and algorithm names - String[] keySet = new String[this.inDataToAlgorithm.keySet().size()]; - keySet = (String[])this.inDataToAlgorithm.keySet().toArray(keySet); - TreeSet nodeNames = new TreeSet(); - for(int i = 0; i < keySet.length; i++){ - String s = keySet[i]; - nodeNames.add(s); - List paths = (List)this.inDataToAlgorithm.get(s); - Converter[] convs = new Converter[paths.size()]; - convs = (Converter[])paths.toArray(convs); + + String[] inDatas = new String[this.inDataToConverters.keySet().size()]; + inDatas = (String[])this.inDataToConverters.keySet().toArray(inDatas); + + TreeSet nodeNameList = new TreeSet(); + + //for each unique in_data... + for(int i = 0; i < inDatas.length; i++){ + String inData = inDatas[i]; + //add the in_data string to our list of node names + nodeNameList.add(inData); + + List convsList = (List)this.inDataToConverters.get(inData); + Converter[] convs = new Converter[convsList.size()]; + convs = (Converter[])convsList.toArray(convs); + + //for each converter associated with each in_data... for(int j = 0; j < convs.length; j++){ Converter c = convs[j]; - nodeNames.add(c.getUniqueName()); + //add the name of the converter to our list of node names + nodeNameList.add(c.getShortName()); } } - String[] names = new String[nodeNames.size()]; - names = (String[])nodeNames.toArray(names); + String[] names = new String[nodeNameList.size()]; + names = (String[])nodeNameList.toArray(names); + //for each node name in our list of node names ... for(int i = 0; i < names.length; i++){ + //associate that name with a unique integer in our map nodesToInt.put(names[i], new Integer(i+1)); } + //return our map of nodes to unique integers return nodesToInt; } - private TreeSet assembleEdges(Map m){ + private TreeSet assembleEdges(Map nodeNameToInt){ TreeSet edges = new TreeSet(); - String[] keySet = new String[m.size()]; - keySet = (String[])m.keySet().toArray(keySet); - for(int i = 0; i < keySet.length; i++){ - String s = keySet[i]; - List paths = (List)this.inDataToAlgorithm.get(s); - if(paths != null){ - Converter[] convs = new Converter[paths.size()]; - convs = (Converter[])paths.toArray(convs); + + + String[] nodeNames = new String[nodeNameToInt.size()]; + nodeNames = (String[])nodeNameToInt.keySet().toArray(nodeNames); + //for each node name in our list of node names... + for(int i = 0; i < nodeNames.length; i++){ + String nodeName = nodeNames[i]; - for(int j = 0; j < convs.length; j++){ - String output1 = m.get(s).toString() + " "; - String output2 = convs[j].getUniqueName(); - output1 += m.get(output2).toString(); - output2 = m.get(output2).toString() + " " + m.get(convs[j].getOutData()); - edges.add(output1); - edges.add(output2); + /* + * check to see if that node name is associated with a list of + * converters. + * + * (Node names are either the names of in_data formats or the + * names of converters) + */ + List converterList = (List)this.inDataToConverters.get(nodeName); + + //if our node name is associated with a list of converters... + if(converterList != null) { + //(then our node name must be the name of an in_data format) + Converter[] convs = new Converter[converterList.size()]; + convs = (Converter[])converterList.toArray(convs); + + //for each converter... + for(int j = 0; j < convs.length; j++){ + String convName = convs[j].getShortName(); + + String nodeNumber = nodeNameToInt.get(nodeName).toString(); + String convNumber = nodeNameToInt.get(convName).toString(); + + //add an edge from our original node to this converter + String edge1 = nodeNumber + " " + convNumber; + edges.add(edge1); + //and add an edge from this converter to our original node + String edge2 = convNumber + " " + nodeNumber; + edges.add(edge2); + + } } - } } + + //return our set of edges return edges; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |