|
From: <bea...@us...> - 2006-10-19 16:21:47
|
Revision: 300
http://svn.sourceforge.net/cishell/?rev=300&view=rev
Author: bearsfan
Date: 2006-10-19 09:21:36 -0700 (Thu, 19 Oct 2006)
Log Message:
-----------
Removed duplicate converter chains and documented the conversion service implementation.
Modified Paths:
--------------
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/DataConversionServiceImpl.java
===================================================================
--- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-17 21:35:00 UTC (rev 299)
+++ trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-19 16:21:36 UTC (rev 300)
@@ -49,6 +49,12 @@
import edu.uci.ics.jung.io.GraphMLFile;
import edu.uci.ics.jung.utils.UserDataContainer;
+/**
+ * Builds converter chains from one data type to another
+ *
+ * @author Bruce Herr, Ben Markines
+ *
+ */
public class DataConversionServiceImpl implements DataConversionService, AlgorithmProperty, ServiceListener {
public final static String SERVICE_LIST = "SERVICE_LIST";
@@ -57,6 +63,12 @@
private Map dataTypeToVertex;
private Graph graph;
+ /**
+ * Set up to listen for service requests and initial set up of the graph
+ *
+ * @param bContext Current bundle context
+ * @param ciContext Current CIShell context
+ */
public DataConversionServiceImpl(BundleContext bContext, CIShellContext ciContext) {
this.bContext = bContext;
this.ciContext = ciContext;
@@ -77,7 +89,7 @@
}
/**
- * Assemble the directed graph of converters
+ * Assemble the directed graph of converters. Currently unweighted
*
*/
private void assembleGraph() {
@@ -110,9 +122,12 @@
throw new RuntimeException(e);
}
}
-
+
/**
- * @see org.cishell.service.conversion.DataConversionService#findConverters(java.lang.String, java.lang.String)
+ * Get the converter chains for incoming and outgoing format
+ *
+ * @param inFormat The format to convert from
+ * @param outFormat The format to convert to
*/
public Converter[] findConverters(String inFormat, String outFormat) {
//saveGraph();
@@ -133,6 +148,14 @@
return new Converter[0];
}
+ /**
+ * If the final format is of type file-ext, then append the final converter to the
+ * converter list
+ *
+ * @param converters Current converter chain
+ * @param outFormat Final data type
+ * @return The edited converter chain
+ */
private Converter[] addFinalStepConversions(Converter[] converters, String outFormat) {
Collection newConverters = new HashSet();
@@ -177,6 +200,13 @@
return (Converter[]) newConverters.toArray(new Converter[0]);
}
+ /**
+ * Build the converter chains
+ * @param inFormat The original data type
+ * @param outFormat The target data type
+ * @return Converter chains
+ * @see org.cishell.service.conversion.DataConversionService#findConverters(java.lang.String, java.lang.String)
+ */
private Converter[] getConverters(String inFormat, String outFormat) {
String inFilter = "(&(" + ALGORITHM_TYPE + "=" + TYPE_CONVERTER + ")"
+ "("+IN_DATA+"="+inFormat+") " + "("+OUT_DATA+"=*)" +
@@ -233,6 +263,12 @@
return (Converter[]) converterList.toArray(new Converter[0]);
}
+ /**
+ * Get the shortest converter path. This returns a single converter path
+ * @param inType The source data type
+ * @param outType The target data type
+ * @return Single converter path
+ */
private Converter getConverter(String inType, String outType) {
Vertex srcVertex = (Vertex)dataTypeToVertex.get(inType);
Vertex tgtVertex = (Vertex)dataTypeToVertex.get(outType);
@@ -266,6 +302,10 @@
}
/**
+ * Builds the converter chains using data as the source
+ * @param data The source data to convert from
+ * @param outFormat the final data type
+ * @return Converter chains
* @see org.cishell.service.conversion.DataConversionService#findConverters(org.cishell.framework.data.Data, java.lang.String)
*/
public Converter[] findConverters(Data data, String outFormat) {
@@ -291,13 +331,40 @@
while (iter.hasNext()) {
Class c = (Class) iter.next();
converters = findConverters(c.getName(), outFormat);
- set.addAll(new HashSet(Arrays.asList(converters)));
+ //this is a bit of a hack to remove the duplicate converters
+ addUniqueConverters(set, 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
+ */
protected Collection getClassesFor(Class clazz) {
Set classes = new HashSet();
@@ -321,6 +388,10 @@
}
/**
+ * Convert the Data to a format
+ * @param inDM Data type to convert
+ * @param outFormat The data type to convert
+ * @return The final data type
* @see org.cishell.service.conversion.DataConversionService#convert(org.cishell.framework.data.Data, java.lang.String)
*/
public Data convert(Data inDM, String outFormat) {
@@ -338,7 +409,10 @@
return inDM;
}
-
+ /**
+ * Change service reference in the graph
+ * @param event The service that changed
+ */
public void serviceChanged(ServiceEvent event) {
ServiceReference inServiceRef = event.getServiceReference();
@@ -357,6 +431,12 @@
}
}
+ /**
+ * Remove a service reference in the graph
+ * @param srcDataType The source data type of the serviceReference to remove
+ * @param tgtDataType The target data type of the serviceReference to remove
+ * @param serviceReference The serviceReference to remove
+ */
private void removeServiceReference(String srcDataType, String tgtDataType, ServiceReference serviceReference) {
if (srcDataType != null && tgtDataType != null) {
Vertex srcVertex = (Vertex) dataTypeToVertex.get(srcDataType);
@@ -388,6 +468,12 @@
}
}
+ /**
+ * Add service reference to the graph
+ * @param srcDataType The source data type
+ * @param tgtDataType The target data type
+ * @param serviceReference The service reference to add
+ */
private void addServiceReference(String srcDataType, String tgtDataType, ServiceReference serviceReference) {
if (srcDataType != null && srcDataType.length() > 0
&& tgtDataType != null && tgtDataType.length() > 0) {
@@ -412,6 +498,12 @@
}
}
+ /**
+ * Get the vertex in the graph given a data type. Creates a new vertex
+ * if one does not exist
+ * @param dataType Datatype representing the node
+ * @return The vertex
+ */
private Vertex getVertex(String dataType) {
Vertex vertex = (SparseVertex)dataTypeToVertex.get(dataType);
if (vertex== null) {
@@ -424,6 +516,10 @@
return vertex;
}
+ /**
+ * Save the current converter graph to the user's home directory
+ *
+ */
private void saveGraph() {
GraphMLFile writer = new GraphMLFile();
Graph g = (Graph)graph.copy();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|