From: <pat...@us...> - 2011-03-02 21:54:28
|
Revision: 1233 http://cishell.svn.sourceforge.net/cishell/?rev=1233&view=rev Author: pataphil Date: 2011-03-02 21:54:21 +0000 (Wed, 02 Mar 2011) Log Message: ----------- * Fixed a bug when trying to parse out a file extension from a file name. Modified Paths: -------------- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java trunk/core/org.cishell.framework/src/org/cishell/app/service/filesaver/AbstractFileSaverService.java trunk/core/org.cishell.framework/src/org/cishell/app/service/filesaver/FileSaverService.java trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/filesaver/SaveAsController.java Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java 2011-03-01 20:14:29 UTC (rev 1232) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java 2011-03-02 21:54:21 UTC (rev 1233) @@ -12,7 +12,6 @@ import org.osgi.service.log.LogService; public class Save implements Algorithm { - public static final String ANY_FILE_EXTENSION = "file-ext:*"; public static final String SAVE_DIALOG_TITLE = "Save"; private Data data; @@ -30,7 +29,7 @@ } public Data[] execute() throws AlgorithmExecutionException { - tryToSave(this.data, ANY_FILE_EXTENSION); + tryToSave(this.data, FileSaverService.ANY_FILE_EXTENSION); return null; } @@ -67,7 +66,8 @@ String logMessage = String.format( "Error occurred while converting data to saved format:\n %s", e.getMessage()); this.logger.log(LogService.LOG_ERROR, logMessage, e); - throw new AlgorithmExecutionException(e.getMessage(), e); +// throw new AlgorithmExecutionException(e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); } } } \ No newline at end of file Modified: trunk/core/org.cishell.framework/src/org/cishell/app/service/filesaver/AbstractFileSaverService.java =================================================================== --- trunk/core/org.cishell.framework/src/org/cishell/app/service/filesaver/AbstractFileSaverService.java 2011-03-01 20:14:29 UTC (rev 1232) +++ trunk/core/org.cishell.framework/src/org/cishell/app/service/filesaver/AbstractFileSaverService.java 2011-03-02 21:54:21 UTC (rev 1233) @@ -1,13 +1,32 @@ package org.cishell.app.service.filesaver; import java.io.File; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; +import java.util.Dictionary; +import java.util.HashSet; import org.cishell.framework.data.Data; +import org.cishell.framework.data.DataProperty; import org.cishell.service.conversion.ConversionException; import org.cishell.service.conversion.Converter; public abstract class AbstractFileSaverService implements FileSaverService { + public static final Collection<Character> INVALID_FILENAME_CHARACTERS = + Collections.unmodifiableSet(new HashSet<Character>(Arrays.asList( + new Character('\\'), + new Character('/'), + new Character(':'), + new Character('*'), + new Character('?'), + new Character('"'), + new Character('<'), + new Character('>'), + new Character('|'), + new Character('%')))); + public static final char FILENAME_CHARACTER_REPLACEMENT = '#'; + private Collection<FileSaveListener> listeners; public void registerListener(FileSaveListener listener) { @@ -23,11 +42,17 @@ } public File promptForTargetFile(Data datum) throws FileSaveException { - return promptForTargetFile((File) datum.getData()); + Object dataObject = datum.getData(); + + if (dataObject instanceof File) { + return promptForTargetFile((File) datum.getData()); + } else { + return promptForTargetFile(suggestFileName(datum)); + } } public File promptForTargetFile(File outputFile) throws FileSaveException { - return promptForTargetFile(outputFile.getAbsolutePath()); // TODO getName? + return promptForTargetFile(outputFile.getName()); } public File save(Data sourceDatum) throws FileSaveException { @@ -77,4 +102,36 @@ throw new FileSaveException(e.getMessage(), e); } } + + public String suggestFileName(Data datum) { + return replaceInvalidFilenameCharacters(getLabel(datum)); + } + + private static String getLabel(Data datum) { + Dictionary<String, Object> metadata = datum.getMetadata(); + Object labelObject = metadata.get(DataProperty.LABEL); + + if (labelObject != null) { + return labelObject.toString(); + } else { + Object shortLabelObject = metadata.get(DataProperty.SHORT_LABEL); + + if (shortLabelObject != null) { + return shortLabelObject.toString(); + } else { + return datum.toString(); + } + } + } + + private static String replaceInvalidFilenameCharacters(String fileName) { + String cleanedFilename = fileName; + + for (Character invalidCharacter : INVALID_FILENAME_CHARACTERS) { + cleanedFilename = + cleanedFilename.replace(invalidCharacter, FILENAME_CHARACTER_REPLACEMENT); + } + + return cleanedFilename; + } } \ No newline at end of file Modified: trunk/core/org.cishell.framework/src/org/cishell/app/service/filesaver/FileSaverService.java =================================================================== --- trunk/core/org.cishell.framework/src/org/cishell/app/service/filesaver/FileSaverService.java 2011-03-01 20:14:29 UTC (rev 1232) +++ trunk/core/org.cishell.framework/src/org/cishell/app/service/filesaver/FileSaverService.java 2011-03-02 21:54:21 UTC (rev 1233) @@ -10,6 +10,8 @@ * Then FileSaverServiceImpl extends the abstract class. */ public interface FileSaverService { + public static final String ANY_FILE_EXTENSION = "file-ext:*"; + public void registerListener(FileSaveListener listener); public void unregisterListener(FileSaveListener listener); @@ -37,4 +39,6 @@ public Data save(Converter converter, Data sourceDatum) throws FileSaveException; public Data save( Converter converter, Data sourceDatum, File targetFile) throws FileSaveException; + + public String suggestFileName(Data datum); } \ No newline at end of file Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/filesaver/SaveAsController.java =================================================================== --- trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/filesaver/SaveAsController.java 2011-03-01 20:14:29 UTC (rev 1232) +++ trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/filesaver/SaveAsController.java 2011-03-02 21:54:21 UTC (rev 1233) @@ -28,7 +28,7 @@ } public File open(String fileName) { - String fileExtension = getFileExtension(fileName).substring(1); + String fileExtension = getFileExtension(fileName); return open(fileName, fileExtension); } @@ -95,7 +95,7 @@ int periodPosition = filePath.lastIndexOf("."); if ((periodPosition != -1) && ((periodPosition + 1) < filePath.length())) { - return filePath.substring(periodPosition); + return filePath.substring(periodPosition + 1); } else { return ""; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |