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