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