From: <bh...@us...> - 2006-10-13 20:25:24
|
Revision: 275 http://svn.sourceforge.net/cishell/?rev=275&view=rev Author: bh2 Date: 2006-10-13 13:25:17 -0700 (Fri, 13 Oct 2006) Log Message: ----------- made file-ext:* not show up on the conversion graph Modified Paths: -------------- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/ConverterImpl.java trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/ConverterImpl.java =================================================================== --- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/ConverterImpl.java 2006-10-13 17:22:41 UTC (rev 274) +++ trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/ConverterImpl.java 2006-10-13 20:25:17 UTC (rev 275) @@ -128,7 +128,8 @@ ServiceReference[] otherServiceReference = ((Converter)o).getConverterChain(); if (refs.length == otherServiceReference.length) { for (int i = 0; i < otherServiceReference.length; i++) { - if (refs[i].getProperty(Constants.SERVICE_ID).equals(otherServiceReference[i].getProperty(Constants.SERVICE_ID))) { + if (refs[i].getProperty(Constants.SERVICE_ID).equals( + otherServiceReference[i].getProperty(Constants.SERVICE_ID))) { equals = true; } else { equals = false; Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java =================================================================== --- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-13 17:22:41 UTC (rev 274) +++ trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-13 20:25:17 UTC (rev 275) @@ -53,7 +53,6 @@ private BundleContext bContext; private CIShellContext ciContext; - private Map dataTypeToVertex; private Graph graph; @@ -62,9 +61,11 @@ this.ciContext = ciContext; String filter = "(&("+ALGORITHM_TYPE+"="+TYPE_CONVERTER+")" + - "("+IN_DATA+"=*) " + - "("+OUT_DATA+"=*)" + - "(!("+REMOTE+"=*)))"; + "("+IN_DATA+"=*) " + + "("+OUT_DATA+"=*)" + + "(!("+REMOTE+"=*))" + + "(!("+IN_DATA+"=file-ext:*))" + + "(!("+OUT_DATA+"=file-ext:*)))"; try { this.bContext.addServiceListener(this, filter); @@ -81,13 +82,15 @@ private void assembleGraph() { graph = new DirectedSparseGraph(); - dataTypeToVertex = new Hashtable(); + dataTypeToVertex = new Hashtable(); try { String filter = "(&("+ALGORITHM_TYPE+"="+TYPE_CONVERTER+")" + "("+IN_DATA+"=*) " + "("+OUT_DATA+"=*)" + - "(!("+REMOTE+"=*)))"; + "(!("+REMOTE+"=*))" + + "(!("+IN_DATA+"=file-ext:*))" + + "(!("+OUT_DATA+"=file-ext:*)))"; ServiceReference[] refs = bContext.getServiceReferences( AlgorithmFactory.class.getName(), filter); @@ -108,28 +111,75 @@ } /** - * TODO: Only provides a direct conversion, need to improve - * * @see org.cishell.service.conversion.DataConversionService#findConverters(java.lang.String, java.lang.String) */ public Converter[] findConverters(String inFormat, String outFormat) { - //saveGraph(); + saveGraph(); if (inFormat != null && inFormat.length() > 0 && outFormat != null && outFormat.length() > 0) { - return getConverters(inFormat, outFormat); + Converter[] converters = null; + + if (outFormat.startsWith("file-ext:")) { + converters = getConverters(inFormat, "file:*"); + converters = addFinalStepConversions(converters, outFormat); + } else { + converters = getConverters(inFormat, outFormat); + } + + return converters; } return new Converter[0]; } + + private Converter[] addFinalStepConversions(Converter[] converters, String outFormat) { + Collection newConverters = new HashSet(); + + Set formats = new HashSet(); + for (int i=0; i < converters.length; i++) { + String format = (String) converters[i].getProperties().get(OUT_DATA); + + if (!formats.contains(format)) { + String filter = "(&("+ALGORITHM_TYPE+"="+TYPE_CONVERTER+")" + + "(!("+REMOTE+"=*))" + + "("+IN_DATA+"="+format+")" + + "("+OUT_DATA+"="+outFormat+"))"; + + try { + ServiceReference[] refs = bContext.getServiceReferences( + AlgorithmFactory.class.getName(), filter); + + if (refs != null && refs.length > 0) { + for (int j=0; j < refs.length; j++) { + List chain = new ArrayList(Arrays.asList( + converters[i].getConverterChain())); + chain.add(refs[i]); + + ServiceReference[] newChain = (ServiceReference[]) + chain.toArray(new ServiceReference[0]); + + newConverters.add(new ConverterImpl(bContext, ciContext, newChain)); + } + + formats.add(format); + } + } catch (InvalidSyntaxException e) { + e.printStackTrace(); + } + } + } + + return (Converter[]) newConverters.toArray(new Converter[0]); + } private Converter[] getConverters(String inFormat, String outFormat) { String inFilter = "(&(" + ALGORITHM_TYPE + "=" + TYPE_CONVERTER + ")" + "(" + IN_DATA + "=" + inFormat + ") " + "(" + OUT_DATA - + "=*)" + "(!(" + REMOTE + "=*)))"; + + "=*)" + "(!("+IN_DATA+"=file-ext:*))" + "(!(" + REMOTE + "=*)))"; String outFilter = "(&(" + ALGORITHM_TYPE + "=" + TYPE_CONVERTER + ")" + "(" + IN_DATA + "=*) " + "(" + OUT_DATA + "=" + outFormat - + ")" + "(!(" + REMOTE + "=*)))"; + + ")" + "(!("+OUT_DATA+"=file-ext:*))" + "(!(" + REMOTE + "=*)))"; try { ServiceReference[] inRefs = bContext.getServiceReferences( @@ -162,7 +212,6 @@ return (Converter[]) converterList.toArray(new Converter[0]); } } catch (InvalidSyntaxException e) { - // TODO Auto-generated catch block e.printStackTrace(); } return new Converter[0]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bea...@us...> - 2006-10-19 19:23:03
|
Revision: 303 http://svn.sourceforge.net/cishell/?rev=303&view=rev Author: bearsfan Date: 2006-10-19 12:22:57 -0700 (Thu, 19 Oct 2006) Log Message: ----------- Removed duplicate converter chains revised. Now does it correctly by overwriting the hashcode method as well as the equals method. Unique coverter chains are now detected through the Hashset Modified Paths: -------------- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/ConverterImpl.java trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/ConverterImpl.java =================================================================== --- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/ConverterImpl.java 2006-10-19 17:47:11 UTC (rev 302) +++ trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/ConverterImpl.java 2006-10-19 19:22:57 UTC (rev 303) @@ -33,7 +33,7 @@ * * @author Bruce Herr (bh...@bh...) */ -public class ConverterImpl implements Converter, AlgorithmFactory, AlgorithmProperty, Comparable { +public class ConverterImpl implements Converter, AlgorithmFactory, AlgorithmProperty { private ServiceReference[] refs; private BundleContext bContext; private Dictionary props; @@ -121,6 +121,18 @@ public MetaTypeProvider createParameters(Data[] dm) { return null; } + + public int hashCode() { + return toString().hashCode(); + } + + public String toString() { + String str =""; + for (int j = 0; j < refs.length; ++j) { + str += refs[j].getProperty(Constants.SERVICE_ID) + " " + refs[j].getProperty(Constants.SERVICE_PID) + "-> "; + } + return str; + } public boolean equals(Object o) { boolean equals = false; @@ -171,8 +183,4 @@ return dm; } } - - public int compareTo(Object o) { - return equals(o) ? 0 : 1; - } } Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java =================================================================== --- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-19 17:47:11 UTC (rev 302) +++ trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-19 19:22:57 UTC (rev 303) @@ -130,7 +130,7 @@ * @param outFormat The format to convert to */ public Converter[] findConverters(String inFormat, String outFormat) { - //saveGraph(); + saveGraph(); if (inFormat != null && inFormat.length() > 0 && outFormat != null && outFormat.length() > 0) { @@ -325,42 +325,19 @@ converters = findConverters(format, outFormat); set.addAll(new HashSet(Arrays.asList(converters))); } - if (!(data.getData() instanceof File) && data.getData() != null) { Iterator iter = getClassesFor(data.getData().getClass()).iterator(); while (iter.hasNext()) { Class c = (Class) iter.next(); converters = findConverters(c.getName(), outFormat); - //this is a bit of a hack to remove the duplicate converters - addUniqueConverters(set, converters); - //set.addAll(new HashSet(Arrays.asList(converters))); + set.addAll(new HashSet(Arrays.asList(converters))); } } - + return (Converter[]) set.toArray(new Converter[0]); } - + /** - * Only add the unique converters to the 'Converter set' - * @param set The set of unique converters - * @param converters List of potential converters - */ - private void addUniqueConverters(Set set, Converter[] converters) { - for (int i = 0; i < converters.length; ++i) { - boolean uniqueConverter = true; - for (Iterator iter = set.iterator(); iter.hasNext();) { - if (iter.next().equals(converters[i])) { - uniqueConverter = false; - break; - } - } - if (uniqueConverter) { - set.add(converters[i]); - } - } - } - - /** * Get all the classes implemented and extended * @param clazz The class to query * @return Interfaces and base classes This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |