From: <pat...@us...> - 2009-10-12 17:37:23
|
Revision: 959 http://cishell.svn.sourceforge.net/cishell/?rev=959&view=rev Author: pataphil Date: 2009-10-12 17:37:06 +0000 (Mon, 12 Oct 2009) Log Message: ----------- * Improved "View" functionality so CSV-compatible data types (both file-based and in-memory) are viewed in Excel after conversion. * Also significantly refactored code. Modified Paths: -------------- trunk/clients/gui/org.cishell.reference.gui.persistence/.classpath trunk/clients/gui/org.cishell.reference.gui.persistence/META-INF/MANIFEST.MF trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/FileUtil.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveFactory.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileViewFactory.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/FileViewWith.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/FileViewWithFactory.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/ViewWithDataChooser.java Added Paths: ----------- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/FileViewer.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertDataForViewingException.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertDataToFileAndPrepareForViewingException.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertInMemoryDataToTextFileException.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/FileViewingException.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/NoProgramFoundException.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/PrepareTextFileForViewingException.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/UserCanceledDataViewSelectionException.java Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/.classpath =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/.classpath 2009-10-12 16:29:06 UTC (rev 958) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/.classpath 2009-10-12 17:37:06 UTC (rev 959) @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/j2sdk1.4.2_19"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="output" path="bin"/> </classpath> Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/META-INF/MANIFEST.MF =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/META-INF/MANIFEST.MF 2009-10-12 16:29:06 UTC (rev 958) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/META-INF/MANIFEST.MF 2009-10-12 17:37:06 UTC (rev 959) @@ -13,6 +13,7 @@ org.cishell.reference.service.metatype, org.cishell.service.conversion;version="1.0.0", org.cishell.service.guibuilder;version="1.0.0", + org.cishell.utilities, org.osgi.framework;version="1.3.0", org.osgi.service.cm;version="1.2.0", org.osgi.service.component;version="1.0.0", Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/FileUtil.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/FileUtil.java 2009-10-12 16:29:06 UTC (rev 958) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/FileUtil.java 2009-10-12 17:37:06 UTC (rev 959) @@ -6,10 +6,9 @@ import org.osgi.service.log.LogService; public class FileUtil { - private static int uniqueIntForTempFile = 1; - public static File getTempFile(String fileName, String extension, LogService logger){ + public static File getTempFile(String fileName, String extension, LogService logger) { File tempFile; if (fileName == null || fileName.equals("")) { Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveFactory.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveFactory.java 2009-10-12 16:29:06 UTC (rev 958) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveFactory.java 2009-10-12 17:37:06 UTC (rev 959) @@ -1,48 +1,44 @@ package org.cishell.reference.gui.persistence.save; -import java.io.File; import java.util.Dictionary; import org.cishell.framework.CIShellContext; import org.cishell.framework.LocalCIShellContext; import org.cishell.framework.algorithm.Algorithm; import org.cishell.framework.algorithm.AlgorithmFactory; -import org.cishell.framework.algorithm.DataValidator; import org.cishell.framework.data.Data; -import org.cishell.service.conversion.Converter; -import org.cishell.service.conversion.DataConversionService; import org.osgi.service.component.ComponentContext; -import org.osgi.service.metatype.MetaTypeProvider; /** * Create a Save object * * TODO: Should also support if we can convert to file, but have * no final file:X->file-ext:* converter. - * - * @author bmarkine * */ public class SaveFactory implements AlgorithmFactory { - private CIShellContext context; + private CIShellContext ciShellContext; /** * Create a local CIShell context - * @param ctxt The current CIShell context + * @param componentContext The current CIShell context */ - protected void activate(ComponentContext ctxt) { - context = new LocalCIShellContext(ctxt.getBundleContext()); + protected void activate(ComponentContext componentContext) { + ciShellContext = + new LocalCIShellContext(componentContext.getBundleContext()); } /** * Create a Save algorithm * @param data The data objects to save * @param parameters The parameters for the algorithm - * @param context Reference to services provided by CIShell + * @param ciShellContext Reference to services provided by CIShell * @return An instance of the Save algorithm */ - public Algorithm createAlgorithm(Data[] data, Dictionary parameters, CIShellContext context) { - this.context = context; - return new Save(data, parameters, context); + public Algorithm createAlgorithm(Data[] data, + Dictionary parameters, + CIShellContext ciShellContext) { + this.ciShellContext = ciShellContext; + return new Save(data, parameters, ciShellContext); } } \ No newline at end of file Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java 2009-10-12 16:29:06 UTC (rev 958) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java 2009-10-12 17:37:06 UTC (rev 959) @@ -1,295 +1,47 @@ package org.cishell.reference.gui.persistence.view; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.channels.FileChannel; import java.util.Dictionary; import org.cishell.framework.CIShellContext; import org.cishell.framework.algorithm.Algorithm; import org.cishell.framework.algorithm.AlgorithmExecutionException; import org.cishell.framework.data.Data; -import org.cishell.framework.data.DataProperty; -import org.cishell.reference.gui.persistence.FileUtil; +import org.cishell.reference.gui.persistence.view.core.FileViewer; import org.cishell.service.conversion.ConversionException; -import org.cishell.service.conversion.Converter; import org.cishell.service.conversion.DataConversionService; -import org.eclipse.swt.program.Program; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.osgi.service.log.LogService; -/* - * @author Weixia(Bonnie) Huang (hu...@in...) - */ public class FileView implements Algorithm { - public static final String ANY_FILE_EXTENSION_FILTER = "file-ext:*"; - private static final String CSV_FILE_EXT = "file-ext:csv"; - private static final String CSV_MIME_TYPE = "file:text/csv"; - public static final String FILE_EXTENSION_PREFIX = "file-ext:"; - public static final String ANY_TEXT_MIME_TYPE = "file:text/"; - private Data[] data; - private CIShellContext context; + private Data[] dataToView; + private CIShellContext ciShellContext; private DataConversionService conversionManager; - private LogService logger; - private Program program; - private File tempFile; - public FileView(Data[] data, Dictionary parameters, CIShellContext context) { - this.data = data; - this.context = context; + this.dataToView = data; + this.ciShellContext = context; this.conversionManager = (DataConversionService) context .getService(DataConversionService.class.getName()); - - this.logger = (LogService) context.getService(LogService.class.getName()); } - // Show the contents of a file to the user + // Show the contents of a file to the user. public Data[] execute() throws AlgorithmExecutionException { try { - boolean lastSaveSuccessful = false; - boolean isCSVFile = false; - String format; - - // For each data item we want to view... - for (int i = 0; i < data.length; i++) { - Object theData = data[i].getData(); - format = data[i].getFormat(); - String label = (String) data[i].getMetadata().get( - DataProperty.LABEL); - - // If it is a text file... - if (theData instanceof File - || format.startsWith(ANY_TEXT_MIME_TYPE) - || format.startsWith(FILE_EXTENSION_PREFIX)) { - - // If it is a CSV text file... - if (format.startsWith(CSV_MIME_TYPE) - || format.startsWith(CSV_FILE_EXT)) { - // Prepare to open it like a CSV file - tempFile = getTempFileCSV(); - isCSVFile = true; - } else { - // Prepare to open it like a normal text file - String fileName = FileUtil.extractFileName(label); - String extension = FileUtil.extractExtension(format); - tempFile = FileUtil.getTempFile(fileName, extension, - logger); - } - - // Copy out data into the temp file we just created. - copy((File) data[i].getData(), tempFile); - lastSaveSuccessful = true; - - } else { - /* The data item is in an in-memory format, and must be - * converted to a file format before the user can see it. - */ - final Converter[] convertersCSV = - conversionManager.findConverters(data[i], CSV_FILE_EXT); - - // If the data item can be converted to a CSV file, do so. - if (convertersCSV.length == 1) { - Data newDataCSV = convertersCSV[0].convert(data[i]); - tempFile = getTempFileCSV(); - isCSVFile = true; - copy((File) newDataCSV.getData(), tempFile); - lastSaveSuccessful = true; - - } else if (convertersCSV.length > 1) { - Data newDataCSV = convertersCSV[0].convert(data[i]); - for (int j = 1; j < convertersCSV.length; j++) { - newDataCSV = convertersCSV[j].convert(newDataCSV); - } - tempFile = getTempFileCSV(); - isCSVFile = true; - copy((File) newDataCSV.getData(), tempFile); - lastSaveSuccessful = true; - } else { // it cannot be converted to a .csv - - // try to convert it to any other file format - - final Converter[] converters = - conversionManager.findConverters( - data[i], ANY_FILE_EXTENSION_FILTER); - - // if it can't be converted to any file format... - if (converters.length < 1) { - // throw an error - throw new AlgorithmExecutionException( - "No valid converters for data type: " - + data[i].getData().getClass() - .getName() - + ". Please install a plugin that will save the data type to a file"); - } else if (converters.length == 1) { // if there is only - // file format - // it can be - // converted to - // go ahead and convert the data item to that format - Data newData = converters[0].convert(data[i]); - - String fileName = FileUtil.extractFileName(label); - String extension = FileUtil - .extractExtension(newData.getFormat()); - tempFile = FileUtil.getTempFile(fileName, - extension, logger); - copy((File) newData.getData(), tempFile); - lastSaveSuccessful = true; - } else { - // there is more than one format that the data - // item could be converted to - // let the user choose - // (get some eclipse UI stuff that we need to open - // the data viewer) - - Display display; - IWorkbenchWindow[] windows; - final Shell parentShell; - - windows = PlatformUI.getWorkbench() - .getWorkbenchWindows(); - if (windows.length == 0) { - throw new AlgorithmExecutionException( - "Cannot get workbench window."); - } - parentShell = windows[0].getShell(); - display = PlatformUI.getWorkbench().getDisplay(); - - // (open the data viewer, which lets the user choose - // which format they want to see the data item in.) - - if (!parentShell.isDisposed()) { - DataViewer dataViewer = new DataViewer( - parentShell, data[i], converters); - display.syncExec(dataViewer); - lastSaveSuccessful = dataViewer.isSaved; - tempFile = dataViewer.outputFile; - } - } - } - } - - // If it's a CSV file - if (isCSVFile) {// TC181 - // prepare to open the file with the default csv program - Display.getDefault().syncExec(new Runnable() { - public void run() { - program = Program.findProgram("csv"); - } - }); - } else { - // Prepare to open it with the standard text editor. - Display.getDefault().syncExec( - new Runnable() { - public void run() { - program = Program.findProgram("txt"); - } - } - ); - } - - // If we can't find any program to open the file... - if (program == null) { - throw new AlgorithmExecutionException( - "No valid text viewer for the .txt file. " - + "The file is located at: " - + tempFile.getAbsolutePath() - + ". Unable to open default text viewer. " - + "File is located at: " - + tempFile.getAbsolutePath()); - } else { - // We found a program to open the file. Open it. - if (lastSaveSuccessful == true) { - Display.getDefault().syncExec( - new Runnable() { - public void run() { - program.execute(tempFile.getAbsolutePath()); - } - } - ); - } - } + for (int ii = 0; ii < this.dataToView.length; ii++) { + FileViewer.viewDataFile(this.dataToView[ii], + this.ciShellContext, + this.conversionManager); } return null; - } catch (ConversionException e) { + } catch (ConversionException conversionException) { + String exceptionMessage = "Error: Unable to view data:\n " + + conversionException.getMessage(); + throw new AlgorithmExecutionException( - "Error: Unable to view data:\n " + e.getMessage(), e); - } catch (Throwable e) { - throw new AlgorithmExecutionException(e); + exceptionMessage, conversionException); + } catch (Throwable thrownObject) { + throw new AlgorithmExecutionException(thrownObject); } } - - public File getTempFileCSV() { - 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("xxx-Session-", ".csv", tempDir); - - } catch (IOException e) { - logger.log(LogService.LOG_ERROR, e.toString(), e); - tempFile = new File(tempPath + File.separator + "temp" - + File.separator + "temp.csv"); - - } - return tempFile; - } - - public static boolean copy(File in, File out) - throws AlgorithmExecutionException { - try { - FileInputStream fis = new FileInputStream(in); - FileOutputStream fos = new FileOutputStream(out); - - FileChannel readableChannel = fis.getChannel(); - FileChannel writableChannel = fos.getChannel(); - - writableChannel.truncate(0); - writableChannel.transferFrom(readableChannel, 0, readableChannel - .size()); - fis.close(); - fos.close(); - return true; - } catch (IOException ioe) { - throw new AlgorithmExecutionException("IOException during copy", - ioe); - } - } - - final class DataViewer implements Runnable { - public static final String VIEW_DIALOG_TITLE = "View"; - private Shell shell; - private boolean isSaved; - private File outputFile; - private Data data; - private Converter[] converters; - - - DataViewer(Shell parentShell, Data data, Converter[] converters) { - this.shell = parentShell; - this.data = data; - this.converters = converters; - } - - - public void run() { - // Lots of persisters found, return the chooser - ViewDataChooser vdc = new ViewDataChooser( - VIEW_DIALOG_TITLE, shell, data, converters, context, logger); - vdc.open(); - isSaved = vdc.isSaved(); - outputFile = vdc.outputFile; - } - } } \ No newline at end of file Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileViewFactory.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileViewFactory.java 2009-10-12 16:29:06 UTC (rev 958) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileViewFactory.java 2009-10-12 17:37:06 UTC (rev 959) @@ -6,14 +6,12 @@ import org.cishell.framework.algorithm.Algorithm; import org.cishell.framework.algorithm.AlgorithmFactory; import org.cishell.framework.data.Data; -import org.osgi.service.component.ComponentContext; -import org.osgi.service.metatype.MetaTypeProvider; -//import org.osgi.service.metatype.MetaTypeService; public class FileViewFactory implements AlgorithmFactory { - - public Algorithm createAlgorithm(Data[] data, Dictionary parameters, CIShellContext context) { - return new FileView(data, parameters, context); + public Algorithm createAlgorithm(Data[] data, + Dictionary parameters, + CIShellContext ciShellContext) { + return new FileView(data, parameters, ciShellContext); } } \ No newline at end of file Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java 2009-10-12 16:29:06 UTC (rev 958) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java 2009-10-12 17:37:06 UTC (rev 959) @@ -1,51 +1,50 @@ package org.cishell.reference.gui.persistence.view; -import java.io.File; - import org.cishell.framework.CIShellContext; -import org.cishell.framework.algorithm.AlgorithmExecutionException; import org.cishell.framework.data.Data; -import org.cishell.framework.data.DataProperty; -import org.cishell.reference.gui.persistence.FileUtil; import org.cishell.reference.gui.persistence.save.SaveDataChooser; -import org.cishell.service.conversion.ConversionException; import org.cishell.service.conversion.Converter; import org.eclipse.swt.widgets.Shell; import org.osgi.service.log.LogService; -/* - * @author Weixia(Bonnie) Huang (hu...@in...) - * - */ +// TODO: Refactor this class. public class ViewDataChooser extends SaveDataChooser { - boolean isSaved = false; - LogService logger; - Data theData; - File outputFile; + /*private boolean isSaved = false; + private LogService logger; + private Data theData; + private File outputFile;*/ + private Converter selectedConverter = null; - public ViewDataChooser(String title, Shell parent, - Data data, Converter[] converters, CIShellContext context, LogService logger){ - super (data, parent, converters, title, context); + public ViewDataChooser(String title, + Shell parent, + Data data, + Converter[] converters, + CIShellContext ciShellContext, + LogService logger){ + super (data, parent, converters, title, ciShellContext); - this.theData = data; - this.logger = logger; + /*this.theData = data; + this.logger = logger;*/ } - + //TODO: replace this stuff with convertToFile -- specifically, just ahve this return the darn selected format. protected void selectionMade(int selectedIndex) { getShell().setVisible(false); - final Converter converter = converterArray[selectedIndex]; + this.selectedConverter = converterArray[selectedIndex]; + close(true); + /*final Converter selectedConverter = converterArray[selectedIndex]; try { - Data newData = converter.convert(theData); + Data newData = selectedConverter.convert(theData); String label = (String) newData.getMetadata().get(DataProperty.LABEL); String fileName = FileUtil.extractFileName(label); String extension = FileUtil.extractExtension(newData.getFormat()); File tempFile = FileUtil.getTempFile(fileName, extension, logger); try { - isSaved = FileView.copy((File)newData.getData(), tempFile); - } catch (AlgorithmExecutionException e) { - logger.log(LogService.LOG_ERROR, "Error copying view for view:\n " + e.getMessage(), e); + FileUtilities.copyFile((File)newData.getData(), tempFile); + isSaved = true; + } catch (FileCopyingException fileCopyingException) { + logger.log(LogService.LOG_ERROR, "Error copying view for view:\n " + fileCopyingException.getMessage(), fileCopyingException); return; } @@ -54,12 +53,18 @@ } catch (ConversionException e) { logger.log(LogService.LOG_ERROR, "Error: Unable to view data:\n " + e.getMessage(), e); return; - } + }*/ } - public boolean isSaved(){ - return isSaved; + public Converter getSelectedConverter() { + return this.selectedConverter; } - + /*public boolean isSaved(){ + return this.isSaved; + } + + public File getOutputFile() { + return this.outputFile; + }*/ } Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/FileViewer.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/FileViewer.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/FileViewer.java 2009-10-12 17:37:06 UTC (rev 959) @@ -0,0 +1,488 @@ +package org.cishell.reference.gui.persistence.view.core; + +import java.io.File; +import java.io.IOException; + +import org.cishell.framework.CIShellContext; +import org.cishell.framework.data.Data; +import org.cishell.framework.data.DataProperty; +import org.cishell.reference.gui.persistence.FileUtil; +import org.cishell.reference.gui.persistence.view.ViewDataChooser; +import org.cishell.reference.gui.persistence.view.core.exceptiontypes.ConvertDataForViewingException; +import org.cishell.reference.gui.persistence.view.core.exceptiontypes.FileViewingException; +import org.cishell.reference.gui.persistence.view.core.exceptiontypes.NoProgramFoundException; +import org.cishell.reference.gui.persistence.view.core.exceptiontypes.UserCanceledDataViewSelectionException; +import org.cishell.service.conversion.ConversionException; +import org.cishell.service.conversion.Converter; +import org.cishell.service.conversion.DataConversionService; +import org.cishell.utilities.FileCopyingException; +import org.cishell.utilities.FileUtilities; +import org.eclipse.swt.program.Program; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.osgi.service.log.LogService; + +public class FileViewer { + public static final String FILE_EXTENSION_MIME_TYPE_PREFIX = "file-ext:"; + public static final String ANY_FILE_EXTENSION_FILTER = "file-ext:*"; + public static final String FILE_EXTENSION_PREFIX = "file-ext:"; + public static final String ANY_MIME_TYPE = "file:"; + public static final String CSV_FILE_EXT = "file-ext:csv"; + public static final String CSV_MIME_TYPE = "file:text/csv"; + public static final String TEMPORARY_CSV_FILE_NAME = "xxx-Session-"; + public static final String CSV_FILE_EXTENSION = "csv"; + public static final String ANY_FILE_FORMAT_PATTERN = + "(file:.*)|(file-ext:.*)"; + + public static void viewDataFile(Data data, + CIShellContext ciShellContext, + DataConversionService conversionManager) + throws ConversionException, FileViewingException { + viewDataFileWithProgram(data, null, ciShellContext, conversionManager); + } + + public static void viewDataFileWithProgram( + Data data, + String customFileExtension, + CIShellContext ciShellContext, + DataConversionService converterManager) + throws FileViewingException { + FileWithExtension fileWithExtension = + convertDataForViewing(data, ciShellContext, converterManager); + viewFileWithExtension(fileWithExtension, customFileExtension); + } + + private static FileWithExtension convertDataForViewing( + Data data, + CIShellContext ciShellContext, + DataConversionService converterManager) + throws FileViewingException { + try { + String dataFormat = data.getFormat(); + + if (isCSVFormat(data)) { + /* + * The data is already a CSV file, so it just needs to + * be copied. + */ + try { + File csvFileForViewing = + FileUtilities.createTemporaryFileCopy( + (File)data.getData(), + TEMPORARY_CSV_FILE_NAME, + CSV_FILE_EXTENSION); + + return new FileWithExtension( + csvFileForViewing, CSV_FILE_EXTENSION); + } catch (FileCopyingException csvFileCopyingException) { + throw new ConvertDataForViewingException( + csvFileCopyingException); + } + } else if (dataIsCSVCompatible(data, converterManager)) { + /* + * The data is either a CSV file already or CSV-convertible. + * This needs to be handled specially so data that can be + * viewed in Excel gets viewed in Excel. + */ + File preparedFileForViewing = prepareFileForViewing( + data, CSV_FILE_EXTENSION, converterManager); + + return new FileWithExtension( + preparedFileForViewing, CSV_FILE_EXTENSION); + } else if (dataIsFile(data, dataFormat)) { + /* + * The data is already a text-based file, so it just needs to + * be copied to a temporary file for viewing in the default + * text-viewing program. + */ + return new FileWithExtension( + prepareTextFileForViewing(data), "txt"); + } else if (convertersExist( + data, ANY_FILE_EXTENSION_FILTER, converterManager)) { + /* + * The data is an another type, but it can be converted to a + * text-based file type for viewing in the default + * text-viewing program. + */ + return new FileWithExtension( + convertDataToTextFile( + data, converterManager, ciShellContext), + "txt"); + } else { + String exceptionMessage = + "No converters exist for the data \"" + + data.getMetadata().get(DataProperty.LABEL) + + "\"."; + + throw new ConvertDataForViewingException(exceptionMessage); + } + } catch (ConvertDataForViewingException + convertDataForViewingException) { + String exceptionMessage = + "There was a problem when preparing the data \"" + + data.getMetadata().get(DataProperty.LABEL) + + "\" for viewing."; + + throw new FileViewingException( + exceptionMessage, convertDataForViewingException); + } + } + + private static void viewFileWithExtension( + FileWithExtension fileWithExtension, String customFileExtension) + throws FileViewingException { + try { + final Program program = selectProgramForFileExtension( + fileWithExtension.fileExtension, customFileExtension); + + executeProgramWithFile(program, fileWithExtension.file); + } catch (NoProgramFoundException noProgramFoundException) { + String exceptionMessage = + "Could not view the file \"" + + fileWithExtension.file.getAbsolutePath() + + "\" because no viewing program could be found for it."; + + throw new FileViewingException( + exceptionMessage, noProgramFoundException); + } + } + + private static boolean isCSVFormat(Data data) { + String dataFormat = data.getFormat(); + + if (dataFormat.startsWith(CSV_MIME_TYPE) || + dataFormat.startsWith(CSV_FILE_EXT)) { + return true; + } else { + return false; + } + } + + /*private static boolean dataIsCSVCompatibleFile( + Data data, + DataConversionService converterManager) { + return convertersExist(data, CSV_FILE_EXT, converterManager); + }*/ + + private static boolean dataIsCSVCompatible( + Data data, + DataConversionService converterManager) { + if (isCSVFormat(data) || + convertersExist(data, CSV_FILE_EXT, converterManager)) { + return true; + } else { + return false; + } + } + + private static boolean dataIsFile(Data data, String dataFormat) { + if (data.getData() instanceof File || + dataFormat.startsWith(ANY_MIME_TYPE) || + dataFormat.startsWith(FILE_EXTENSION_PREFIX)) { + return true; + } else { + return false; + } + } + + private static boolean convertersExist( + Data data, + String targetFormat, + DataConversionService conversionManager) { + final Converter[] converters = + conversionManager.findConverters(data, targetFormat); + + if (converters.length > 0) { + return true; + } else { + return false; + } + } + + private static File prepareFileForViewing( + Data originalData, + String fileExtension, + DataConversionService converterManager) + throws ConvertDataForViewingException { + String dataLabel = + (String)originalData.getMetadata().get(DataProperty.LABEL); + + try { + String fileExtensionMimeType = + FILE_EXTENSION_MIME_TYPE_PREFIX + fileExtension; + File convertedFile = convertToFile( + originalData, fileExtensionMimeType, converterManager); + String fileName = FileUtil.extractFileName(dataLabel); + + return FileUtilities.createTemporaryFileCopy( + convertedFile, fileName, fileExtension); + } catch (ConversionException convertingDataToFileException) { + String exceptionMessage = + "A ConversionException occurred when converting the data \"" + + dataLabel + + "\" to " + fileExtension + "."; + + throw new ConvertDataForViewingException( + exceptionMessage, convertingDataToFileException); + } catch (FileCopyingException temporaryFileCopyingException) { + String exceptionMessage = + "A FileCopyingException occurred when converting the data \"" + + dataLabel + + "\" to " + fileExtension + "."; + + throw new ConvertDataForViewingException( + exceptionMessage, temporaryFileCopyingException); + } + } + + private static File prepareTextFileForViewing(Data originalData) + throws ConvertDataForViewingException { + String dataLabel = + (String)originalData.getMetadata().get(DataProperty.LABEL); + String dataFormat = originalData.getFormat(); + String fileName = FileUtil.extractFileName(dataLabel); + String fileExtension = FileUtil.extractExtension(dataFormat); + + try { + File fileToView = FileUtilities. + createTemporaryFileInDefaultTemporaryDirectory( + fileName, fileExtension); + FileUtilities.copyFile((File)originalData.getData(), fileToView); + + return fileToView; + } catch (IOException temporaryFileCreationException) { + String exceptionMessage = + "An IOException occurred when creating the temporary file \"" + + fileName + "." + fileExtension + + "\" for viewing the data \"" + dataLabel + "\"."; + + throw new ConvertDataForViewingException( + exceptionMessage, temporaryFileCreationException); + } catch (FileCopyingException fileCopyingException) { + throw new ConvertDataForViewingException(fileCopyingException); + } + } + + private static File convertDataToTextFile( + Data originalData, + DataConversionService converterManager, + CIShellContext ciShellContext) + throws ConvertDataForViewingException { + final Converter[] converters = converterManager.findConverters( + originalData, ANY_FILE_EXTENSION_FILTER); + + if (converters.length == 1) { + /* + * There is just one converter, so transparently do + * the conversion. + */ + try { + return convertToFile( + originalData, converters[0]); + } + catch (ConversionException + convertDataToFileAndPrepareForViewingException) { + String exceptionMessage = + "A ConversionException occurred when converting the " + + "data \"" + + originalData.getMetadata().get(DataProperty.LABEL) + + "\" to a file format."; + + throw new ConvertDataForViewingException( + exceptionMessage, + convertDataToFileAndPrepareForViewingException); + } + } else { + /* + * There are several converters available, so the user will + * need to select how the dataToView is to be converted. + */ + try { + return convertDataBasedOffUserChosenConverter( + originalData, converters, ciShellContext); + } catch (ConversionException conversionException) { + String exceptionMessage = + "A ConversionException occurred when converting the " + + "data \"" + + originalData.getMetadata().get(DataProperty.LABEL) + + "\"."; + + throw new ConvertDataForViewingException( + exceptionMessage, conversionException); + } catch (UserCanceledDataViewSelectionException + userCanceledDataViewSelectionException) { + String exceptionMessage = + "A UserCanceledDataViewSelectionException occurred " + + "when the user did not choose a converter for the " + + "data \"" + + originalData.getMetadata().get(DataProperty.LABEL) + + "\"."; + + throw new ConvertDataForViewingException( + exceptionMessage, userCanceledDataViewSelectionException); + } + } + } + + private static Program selectProgramForFileExtension( + final String fileExtension, final String customFileExtension) + throws NoProgramFoundException { + String chosenFileExtension = null; + + if ((customFileExtension == null) || customFileExtension.equals("")) { + chosenFileExtension = fileExtension; + } else { + chosenFileExtension = customFileExtension; + } + + final Program[] programHolder = new Program[1]; + + Display.getDefault().syncExec(new Runnable() { + public void run() { + programHolder[0] = + Program.findProgram(fileExtension); + } + }); + + Program program = programHolder[0]; + + if (program != null) { + return program; + } else { + String exceptionMessage = + "You do not have a valid viewer for the ." + + chosenFileExtension + + "file installed."; + + throw new NoProgramFoundException(exceptionMessage); + } + } + + private static void executeProgramWithFile(final Program program, + final File file) { + Display.getDefault().syncExec(new Runnable() { + public void run() { + program.execute( + file.getAbsolutePath()); + } + }); + } + + private static File convertToFile(Data data, + String targetFormat, + DataConversionService conversionManager) + throws ConversionException { + if (targetFormat.matches(ANY_FILE_FORMAT_PATTERN)) { + Converter[] converters = + conversionManager.findConverters(data, targetFormat); + + return convertToFile(data, converters[0]); + } else { + String exceptionMessage = + "The target format for conversion (\"" + + targetFormat + + "\") is not valid."; + + throw new ConversionException(exceptionMessage); + } + } + + + private static File convertToFile(Data data, Converter converter) + throws ConversionException { + Data newData = converter.convert(data); + return (File)newData.getData(); + } + + private static File convertDataBasedOffUserChosenConverter( + Data originalData, + Converter[] converters, + CIShellContext ciShellContext) + throws ConversionException, + UserCanceledDataViewSelectionException { + /* + * Open the dataToView viewer, which lets the user choose + * which format he/she wants to see the data item in. + */ + DataViewer dataViewer = new DataViewer( + originalData, converters, ciShellContext); + + if (dataViewer.selectedConverter != null) { + return convertToFile(originalData, dataViewer.selectedConverter); + } else { + String exceptionMessage = + "The user cancelled the selection of a converter for the " + + "data \"" + + originalData.getMetadata().get(DataProperty.LABEL) + + "\"."; + + throw new UserCanceledDataViewSelectionException( + exceptionMessage); + } + } + + private final static class DataViewer implements Runnable { + public static final String VIEW_DIALOG_TITLE = "View"; + private Shell shellWindow; + /*private boolean isSaved; + private File outputFile;*/ + private Converter selectedConverter; + private Data data; + private Converter[] converters; + private CIShellContext ciShellContext; + private LogService logger; + + public DataViewer(Data data, + Converter[] converters, + CIShellContext ciShellContext) { + this(data, + converters, + ciShellContext, + (LogService)ciShellContext.getService( + LogService.class.getName())); + } + + public DataViewer(Data data, + Converter[] converters, + CIShellContext ciShellContext, + LogService logger) { + IWorkbenchWindow[] windows = + PlatformUI.getWorkbench().getWorkbenchWindows(); + this.shellWindow = windows[0].getShell(); + this.data = data; + this.converters = converters; + this.ciShellContext = ciShellContext; + this.logger = logger; + + Display display = PlatformUI.getWorkbench().getDisplay(); + display.syncExec(this); + } + + public void run() { + // Lots of persisters found, return the chooser. + ViewDataChooser viewDataChooser = new ViewDataChooser( + VIEW_DIALOG_TITLE, + this.shellWindow, + this.data, + this.converters, + this.ciShellContext, + this.logger); + viewDataChooser.open(); + /*isSaved = viewDataChooser.isSaved(); + outputFile = viewDataChooser.getOutputFile();*/ + this.selectedConverter = viewDataChooser.getSelectedConverter(); + } + } + + private static class FileWithExtension { + public final File file; + public final String fileExtension; + + public FileWithExtension(File file, String fileExtension) { + this.file = file; + this.fileExtension = fileExtension; + } + } +} \ No newline at end of file Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertDataForViewingException.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertDataForViewingException.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertDataForViewingException.java 2009-10-12 17:37:06 UTC (rev 959) @@ -0,0 +1,21 @@ +package org.cishell.reference.gui.persistence.view.core.exceptiontypes; + +public class ConvertDataForViewingException extends Exception { + private static final long serialVersionUID = 1L; + + public ConvertDataForViewingException() { + super(); + } + + public ConvertDataForViewingException(String arg0) { + super(arg0); + } + + public ConvertDataForViewingException(Throwable arg0) { + super(arg0); + } + + public ConvertDataForViewingException(String arg0, Throwable arg1) { + super(arg0, arg1); + } +} \ No newline at end of file Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertDataToFileAndPrepareForViewingException.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertDataToFileAndPrepareForViewingException.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertDataToFileAndPrepareForViewingException.java 2009-10-12 17:37:06 UTC (rev 959) @@ -0,0 +1,22 @@ +package org.cishell.reference.gui.persistence.view.core.exceptiontypes; + +public class ConvertDataToFileAndPrepareForViewingException extends Exception { + private static final long serialVersionUID = 1L; + + public ConvertDataToFileAndPrepareForViewingException() { + super(); + } + + public ConvertDataToFileAndPrepareForViewingException(String arg0) { + super(arg0); + } + + public ConvertDataToFileAndPrepareForViewingException(Throwable arg0) { + super(arg0); + } + + public ConvertDataToFileAndPrepareForViewingException( + String arg0, Throwable arg1) { + super(arg0, arg1); + } +} \ No newline at end of file Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertInMemoryDataToTextFileException.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertInMemoryDataToTextFileException.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/ConvertInMemoryDataToTextFileException.java 2009-10-12 17:37:06 UTC (rev 959) @@ -0,0 +1,21 @@ +package org.cishell.reference.gui.persistence.view.core.exceptiontypes; + +public class ConvertInMemoryDataToTextFileException extends Exception { + private static final long serialVersionUID = 1L; + + public ConvertInMemoryDataToTextFileException() { + super(); + } + + public ConvertInMemoryDataToTextFileException(String arg0) { + super(arg0); + } + + public ConvertInMemoryDataToTextFileException(Throwable arg0) { + super(arg0); + } + + public ConvertInMemoryDataToTextFileException(String arg0, Throwable arg1) { + super(arg0, arg1); + } +} \ No newline at end of file Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/FileViewingException.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/FileViewingException.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/FileViewingException.java 2009-10-12 17:37:06 UTC (rev 959) @@ -0,0 +1,21 @@ +package org.cishell.reference.gui.persistence.view.core.exceptiontypes; + +public class FileViewingException extends Exception { + private static final long serialVersionUID = 1L; + + public FileViewingException() { + super(); + } + + public FileViewingException(String arg0) { + super(arg0); + } + + public FileViewingException(Throwable arg0) { + super(arg0); + } + + public FileViewingException(String arg0, Throwable arg1) { + super(arg0, arg1); + } +} \ No newline at end of file Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/NoProgramFoundException.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/NoProgramFoundException.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/NoProgramFoundException.java 2009-10-12 17:37:06 UTC (rev 959) @@ -0,0 +1,21 @@ +package org.cishell.reference.gui.persistence.view.core.exceptiontypes; + +public class NoProgramFoundException extends Exception { + private static final long serialVersionUID = 1L; + + public NoProgramFoundException() { + super(); + } + + public NoProgramFoundException(String arg0) { + super(arg0); + } + + public NoProgramFoundException(Throwable arg0) { + super(arg0); + } + + public NoProgramFoundException(String arg0, Throwable arg1) { + super(arg0, arg1); + } +} Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/PrepareTextFileForViewingException.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/PrepareTextFileForViewingException.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/PrepareTextFileForViewingException.java 2009-10-12 17:37:06 UTC (rev 959) @@ -0,0 +1,21 @@ +package org.cishell.reference.gui.persistence.view.core.exceptiontypes; + +public class PrepareTextFileForViewingException extends Exception { + private static final long serialVersionUID = 1L; + + public PrepareTextFileForViewingException() { + super(); + } + + public PrepareTextFileForViewingException(String arg0) { + super(arg0); + } + + public PrepareTextFileForViewingException(Throwable arg0) { + super(arg0); + } + + public PrepareTextFileForViewingException(String arg0, Throwable arg1) { + super(arg0, arg1); + } +} \ No newline at end of file Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/UserCanceledDataViewSelectionException.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/UserCanceledDataViewSelectionException.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/core/exceptiontypes/UserCanceledDataViewSelectionException.java 2009-10-12 17:37:06 UTC (rev 959) @@ -0,0 +1,21 @@ +package org.cishell.reference.gui.persistence.view.core.exceptiontypes; + +public class UserCanceledDataViewSelectionException extends Exception { + private static final long serialVersionUID = 1L; + + public UserCanceledDataViewSelectionException() { + super(); + } + + public UserCanceledDataViewSelectionException(String arg0) { + super(arg0); + } + + public UserCanceledDataViewSelectionException(Throwable arg0) { + super(arg0); + } + + public UserCanceledDataViewSelectionException(String arg0, Throwable arg1) { + super(arg0, arg1); + } +} \ No newline at end of file Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/FileViewWith.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/FileViewWith.java 2009-10-12 16:29:06 UTC (rev 958) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/FileViewWith.java 2009-10-12 17:37:06 UTC (rev 959) @@ -26,20 +26,22 @@ * @author Felix Terkhorn (ter...@gm...), Weixia Huang (hu...@in...) */ public class FileViewWith implements Algorithm { - Data[] data; - Dictionary parameters; - CIShellContext context; - DataConversionService conversionManager; - static GUIBuilderService guiBuilder; - LogService logger; - Program program; - Program programTwo; - Program programThree; - Program programFour; //TC181 - File tempFile; + public static final String VIEW_WITH_PARAMETER_KEY = "viewWith"; + + private Data[] dataToView; + private Dictionary parameters; + private CIShellContext context; + private DataConversionService conversionManager; + private static GUIBuilderService guiBuilder; + private LogService logger; + private Program textProgram; + private Program wordProgram; + private Program webBrowserProgram; + private Program spreadsheetProgram; + private File temporaryFile; public FileViewWith(Data[] data, Dictionary parameters, CIShellContext context) { - this.data = data; + this.dataToView = data; this.parameters = parameters; this.context = context; @@ -50,150 +52,192 @@ guiBuilder = (GUIBuilderService)context.getService(GUIBuilderService.class.getName()); } + public File getTempFile(){ File tempFile; String tempPath = System.getProperty("java.io.tmpdir"); - File tempDir = new File(tempPath+File.separator+"temp"); - if(!tempDir.exists()) + File tempDir = new File(tempPath + File.separator + "temp"); + + if (!tempDir.exists()) { tempDir.mkdir(); - try{ + } + + try { tempFile = File.createTempFile("xxx-Session-", ".txt", tempDir); - }catch (IOException e){ - logger.log(LogService.LOG_ERROR, e.toString(), e); - tempFile = new File (tempPath+File.separator+"temp"+File.separator+"temp.txt"); + } catch (IOException ioException) { + logger.log( + LogService.LOG_ERROR, ioException.toString(), ioException); + + String separator = File.separator; + String temporaryFileName = + tempPath + separator + "temp" + separator + "temp.txt"; + tempFile = new File(temporaryFileName); } + return tempFile; } public Data[] execute() throws AlgorithmExecutionException { - boolean lastSaveSuccessful = false; + // TODO: Refactor this code so it and FileView use the same code. + boolean temporaryFileWasCreated = false; String format; - String viewWith = (String) parameters.get("viewWith"); + String viewWithType = (String)parameters.get(VIEW_WITH_PARAMETER_KEY); Display display; IWorkbenchWindow[] windows; final Shell parentShell; windows = PlatformUI.getWorkbench().getWorkbenchWindows(); - if (windows.length == 0){ + + if (windows.length == 0) { return null; } + parentShell = windows[0].getShell(); display = PlatformUI.getWorkbench().getDisplay(); - tempFile = getTempFile(); + temporaryFile = getTempFile(); - for (int i = 0; i < data.length; i++){ - Object theData = data[i].getData(); - format = data[i].getFormat(); + for (int ii = 0; ii < this.dataToView.length; ii++){ + Data data = this.dataToView[ii]; + Object theData = data.getData(); + format = data.getFormat(); + if (theData instanceof File || format.startsWith("file:text/") || format.startsWith("file-ext:")){ - copy((File)data[i].getData(), tempFile); - lastSaveSuccessful = true; - }else{ - final Converter[] converters = conversionManager.findConverters(data[i], "file-ext:*"); + copy((File)data.getData(), temporaryFile); + temporaryFileWasCreated = true; + } else { + final Converter[] converters = + conversionManager.findConverters(data, "file-ext:*"); - if (converters.length < 1) { - guiBuilder.showError("No Converters", - "No valid converters for data type: " + - data[i].getData().getClass().getName(), - "Please install a plugin that will save the data type to a file"); - } - else if (converters.length == 1){ - //If length=1, use the unique path to save it directly - //and bring the text editor. + if (converters.length == 1) { + /* + * If length is 1, use the unique path to save it directly + * and bring the text editor. + */ + try { - Data newData = converters[0].convert(data[i]); - copy((File)newData.getData(), tempFile); - lastSaveSuccessful = true; - } catch (ConversionException e) { - this.logger.log(LogService.LOG_WARNING, "Warning: Unable to convert to target save format (" + e.getMessage() + "). Will attempt to use other available converters.", e); + Data newData = converters[0].convert(data); + copy((File)newData.getData(), temporaryFile); + temporaryFileWasCreated = true; + } catch (ConversionException conversionException) { + String warningMessage = + "Warning: Unable to convert to target save " + + "format (" + conversionException.getMessage() + + "). Will attempt to use other " + + "available converters."; + this.logger.log(LogService.LOG_WARNING, + warningMessage, + conversionException); } - } - else { + } else if (converters.length > 1) { if (!parentShell.isDisposed()) { try { - DataViewer dataViewer = new DataViewer(parentShell, data[i], converters); - display.syncExec(dataViewer); + DataViewer dataViewer = + new DataViewer(parentShell, data, converters); + display.syncExec(dataViewer); - lastSaveSuccessful = dataViewer.isSaved; - tempFile = dataViewer.theFile; - } catch (Throwable e1) { - throw new AlgorithmExecutionException(e1); + temporaryFileWasCreated = dataViewer.isSaved; + temporaryFile = dataViewer.theFile; + } catch (Throwable thrownObject) { + throw new AlgorithmExecutionException( + thrownObject); } } } + else { + String errorMessage = + "No valid converters for data type: " + + data.getData().getClass().getName(); + String errorDetail = + "Please install a plugin that will save the " + + "data type to a file"; + guiBuilder.showError( + "No Converters", errorMessage, errorDetail); + } } - + //TODO: holy code duplication, batman! Display.getDefault().syncExec(new Runnable() { public void run() { - program = Program.findProgram("txt"); + textProgram = Program.findProgram("txt"); }}); Display.getDefault().syncExec(new Runnable() { public void run() { - programTwo = Program.findProgram("doc"); + wordProgram = Program.findProgram("doc"); }}); Display.getDefault().syncExec(new Runnable() { public void run() { - programThree = Program.findProgram("htm"); + webBrowserProgram = Program.findProgram("htm"); }}); - //TC181 + Display.getDefault().syncExec(new Runnable() { public void run() { - programFour = Program.findProgram("csv"); + spreadsheetProgram = Program.findProgram("csv"); }}); - //TC181 - if (program == null && programTwo == null && programThree == null && programThree == null) { - guiBuilder.showError("No Viewers for TXT, DOC, or HTM", - "No valid viewers for .txt, .doc, or .htm files. " + - "The file is located at: "+tempFile.getAbsolutePath(), - "Unable to open default text viewer. File is located at: "+ - tempFile.getAbsolutePath()); + if ((textProgram == null) && + (wordProgram == null) && + (webBrowserProgram == null) && + (webBrowserProgram == null)) { + String errorTitle = "No Viewers for TXT, DOC, or HTM"; + String errorMessage = + "No valid viewers for .txt, .doc, or .htm files. " + + "The file is located at: " + temporaryFile.getAbsolutePath(); + String errorDetail = + "Unable to open default text viewer. " + + "File is located at: " + + temporaryFile.getAbsolutePath(); + guiBuilder.showError( + errorTitle, errorMessage, errorDetail); } else { - if (lastSaveSuccessful == true) { - if (viewWith.equals("txt")) { + if (temporaryFileWasCreated) { + final String filePath = temporaryFile.getAbsolutePath(); + + //TODO: . . . I already said "holy code duplication batman!", didn't I? + if (viewWithType.equals("txt")) { Display.getDefault().syncExec(new Runnable() { public void run() { - program.execute(tempFile.getAbsolutePath()); - }}); - } else if (viewWith.equals("doc")) { + textProgram.execute(filePath); + } + }); + } else if (viewWithType.equals("doc")) { Display.getDefault().syncExec(new Runnable() { public void run() { - programTwo.execute(tempFile.getAbsolutePath()); - }}); - } el... [truncated message content] |