Revision: 506 http://cishell.svn.sourceforge.net/cishell/?rev=506&view=rev Author: mwlinnem Date: 2007-08-30 14:19:53 -0700 (Thu, 30 Aug 2007) Log Message: ----------- Fixed error I made while refactoring, and fixed the missing edge bug. Removed Paths: ------------- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/converter/graph/ConverterGraph.java Deleted: 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 20:39:55 UTC (rev 505) +++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/converter/graph/ConverterGraph.java 2007-08-30 21:19:53 UTC (rev 506) @@ -1,452 +0,0 @@ -package org.cishell.testing.convertertester.core.converter.graph; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeSet; -import java.util.concurrent.ConcurrentHashMap; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.service.log.LogService; - -public class ConverterGraph { - prefuse.data.Graph converterGraph; - Map inDataToConverters; - Map fileExtensionTestConverters; - Map fileExtensionCompareConverters; - Converter[] converters; - BundleContext bContext; - private LogService log; - private static final String testOutData = "prefuse.data.Graph"; - - public ConverterGraph(ServiceReference[] converterRefs, - BundleContext bContext, LogService log) { - this.bContext = bContext; - this.log = log; - - this.converters = createConverters(converterRefs); - - inDataToConverters = - new HashMap();//<String, List<Convertere>>(); - fileExtensionTestConverters = - new ConcurrentHashMap();//<String, List<ConverterPath>>(); - fileExtensionCompareConverters = - new ConcurrentHashMap();//<String, ConverterPath>(); - - associateConverters(this.converters, this.inDataToConverters); - createConverterPaths(this.inDataToConverters, this.fileExtensionTestConverters, this.fileExtensionCompareConverters); - - } - - private Converter[] createConverters(ServiceReference[] convRefs) { - List converters = new ArrayList(); - - for (int ii = 0; ii < convRefs.length; ii++) { - converters.add(new Converter(this.bContext, convRefs[ii])); - } - - return (Converter[]) converters.toArray(new Converter[0]); - } - - 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); - hm.put(s, l); - } - else{ - ((List)hm.get(s)).add(c); - } - } - } - - private void createConverterPaths(Map algorithms, Map testPaths, - Map comparePaths){ - String[] keySet = new String[algorithms.keySet().size()]; - keySet = (String[])algorithms.keySet().toArray(keySet); - for(int i = 0; i < keySet.length; i++){ - String s = keySet[i]; - if(s.startsWith("file-ext")){ - - - ConverterPath test = new ConverterPath(this.bContext, this.log); - - test.setInData(s); - - createPaths((List)algorithms.get(s), test, s); - - } - } - - } - - private ConverterPath createPaths(List algorithms, ConverterPath path, String dataType){ - List cs = removeReferences(algorithms, path); - - addCompareCycle(path); - - if(path.getInData().equals(path.getOutData())){ - addTestCycle(path); - return path; - } - while(!cs.isEmpty()){ - ConverterPath p = new ConverterPath(path, this.bContext); - p.add((Converter) cs.get(0)); - cs.remove(0); - createPaths((List)this.inDataToConverters.get(p.getOutData()), p, p.getOutData()); - - } - return null; - } - - private void addTestCycle(ConverterPath cp){ - String firstOutData, lastInData; - firstOutData = ((Converter) cp.getPath().get(0)).getOutData(); - lastInData = ((Converter)cp.getPath().get(cp.getPath().size()-1)).getInData(); - if(firstOutData.equals(lastInData)){ - addTestPath(cp); - } - } - - private void addCompareCycle(ConverterPath cp){ - if(cp.getOutData() != null){ - if(cp.getOutData().equals(ConverterGraph.testOutData)){ - String key = cp.getInData() + " " + ((Converter) cp.getPath().get(0)).getOutData(); - //System.out.println(key); - if(this.fileExtensionCompareConverters.get(key) == null){ - - - this.fileExtensionCompareConverters.put(key, new ConverterPath(cp, this.bContext)); - } - else { - ConverterPath tempPath = (ConverterPath)this.fileExtensionCompareConverters.get(key); - int pathSize = tempPath.getPath().size(); - if(pathSize > cp.getPath().size()){ - - this.fileExtensionCompareConverters.put(key, new ConverterPath(cp, this.bContext)); - } - } - } - } - } - - private static List removeReferences(List al, ConverterPath cp){ - List cs = new ArrayList(al); - cs.removeAll(cp.getPath()); - List forbidden = new ArrayList(); - for(int i = 0; i < cs.size(); i++){ - Converter c = (Converter) cs.get(i); - String outData = c.getOutData(); - if(outData.startsWith("file-ext") && (!outData.equals(cp.getInData()))){ - - forbidden.add(c); - } - } - cs.removeAll(forbidden); - return cs; - } - - private void addTestPath(ConverterPath p){ - String key = p.getInData(); - key += " "; - key += ((Converter)p.getPath().get(0)).getOutData(); - if(this.fileExtensionTestConverters.get(key) == null){ - - List paths = new ArrayList(); - paths.add(p); - this.fileExtensionTestConverters.put(key, paths); - - } - else{ - - ((List)this.fileExtensionTestConverters.get(key)).add(p); - - } - } - - - public String printTestConverterPath(String s){ - StringBuffer sb = new StringBuffer(); - List al = (List)this.fileExtensionTestConverters.get(s); - for(int i = 0; i < al.size(); i++){ - ConverterPath cp = (ConverterPath)al.get(i); - sb.append(cp.toString()); - } - sb.trimToSize(); - return sb.toString(); - } - - public String printTestConverterPaths(){ - StringBuffer sb = new StringBuffer(); - String[] keySet = new String[this.fileExtensionTestConverters.keySet().size()]; - keySet = (String[])this.fileExtensionTestConverters.keySet().toArray(keySet); - for(int i = 0; i < keySet.length; i++){ - String s = keySet[i]; - sb.append(printTestConverterPath(s)); - } - sb.trimToSize(); - return sb.toString(); - } - - - public String printComparisonConverterPath(String s){ - return this.fileExtensionCompareConverters.get(s).toString(); - } - - public String printComparisonConverterPaths(){ - StringBuffer sb = new StringBuffer(); - String[] keySet = new String[this.fileExtensionCompareConverters.keySet().size()]; - keySet = (String[])this.fileExtensionCompareConverters.keySet().toArray(keySet); - for(int i = 0; i < keySet.length; i++){ - String s = keySet[i]; - //System.out.println(s); - sb.append(printComparisonConverterPath(s)); - } - sb.trimToSize(); - return sb.toString(); - } - - - public String toString(){ - StringBuffer str = new StringBuffer(); - 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.inDataToConverters.get(s); - for(int j = 0; j < al.size(); j++){ - Converter c = (Converter)al.get(j); - str.append("\t" + c.getUniqueName() + "\r\n"); - } - } - str.append("Test Paths:\r\n"); - str.append(printTestConverterPaths()); - str.append("Comparison Paths:\r\n"); - str.append(printComparisonConverterPaths()); - str.trimToSize(); - return str.toString(); - } - - public ConverterPath[] getTestPath(String s){ - return (ConverterPath[])((List)this.fileExtensionTestConverters.get(s)).toArray(new ConverterPath[0]); - } - - public ConverterPath[][] getTestPaths(){ - ConverterPath[][] paths = new ConverterPath[this.fileExtensionTestConverters.keySet().size()][]; - String[] fileExtensions = (String[])this.fileExtensionTestConverters.keySet().toArray(new String[0]); - for(int i = 0; i < fileExtensions.length; i++){ - paths[i] = (getTestPath(fileExtensions[i])); - } - //this line may be busted - return paths; - } - - public ConverterPath getComparePath(String s){ - return (ConverterPath)this.fileExtensionCompareConverters.get(s); - } - - - public ConverterPath[] getComparePaths(){ - String[] fileExtensions = (String[])this.fileExtensionCompareConverters.keySet().toArray(new String[0]); - List graphs = new ArrayList(); - for(int i = 0; i < fileExtensions.length; i++){ - graphs.add(getComparePath(fileExtensions[i])); - } - return (ConverterPath[])graphs.toArray(new ConverterPath[0]); - } - - public Map getCompareMap(){ - return this.fileExtensionCompareConverters; - } - - public Map getTestMap(){ - return this.fileExtensionTestConverters; - } - - public Converter[] getAllConverters() { - return this.converters; - } - - public File asNWB() { - - Map nodes = assembleNodesSet(); - TreeSet edges = assembleEdges(nodes); - - 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; - } - - private void writeNodeHeader(BufferedWriter bw, int numNodes) throws IOException{ - bw.flush(); - bw.write("*Nodes " + numNodes + "\r\nid*int label*string\r\n"); - - } - - 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.write(nodes.get(keySet[i]) + " \"" + keySet[i]+"\"\r\n"); - } - - bw.flush(); - - } - - private void writeEdgeHeader(BufferedWriter bw, int numEdges) throws IOException{ - bw.flush(); - bw.write("*DirectedEdges " + numEdges + "\r\nsource*int target*int\r\n"); - } - - - private void writeEdges(BufferedWriter bw, TreeSet edges) throws IOException{ - writeEdgeHeader(bw,edges.size()); - - String[] edgeArray = new String[edges.size()]; - edgeArray = (String[])edges.toArray(edgeArray); - - for(int i = 0; i < edgeArray.length; i++){ - bw.write(edgeArray[i]+"\r\n"); - } - - bw.flush(); - } - - private Map assembleNodesSet(){ - - Map nodesToInt = new ConcurrentHashMap(); - - //create a set of all the in_data, out_data, and algorithm names - - 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]; - //add the name of the converter to our list of node names - nodeNameList.add(c.getShortName()); - } - } - - 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 nodeNameToInt){ - TreeSet edges = new TreeSet(); - - - 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]; - - /* - * 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; - } - - private File getTempFile(){ - File tempFile; - - String tempPath = System.getProperty("java.io.tmpdir"); - File tempDir = new File(tempPath+File.separator+"temp"); - if(!tempDir.exists()) - tempDir.mkdir(); - try{ - tempFile = File.createTempFile("NWB-Session-", ".nwb", tempDir); - - }catch (IOException e){ - - tempFile = new File (tempPath+File.separator+"nwbTemp"+File.separator+"temp.nwb"); - - } - return tempFile; - } -} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |