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. |