From: <jde...@us...> - 2011-04-25 06:10:53
|
Revision: 14863 http://pcgen.svn.sourceforge.net/pcgen/?rev=14863&view=rev Author: jdempsey Date: 2011-04-25 06:10:46 +0000 (Mon, 25 Apr 2011) Log Message: ----------- Fix bug: Could not save character - should ask for a new location Issue#: CODE-555 Modified Paths: -------------- sandbox/uisync/code/src/java/pcgen/gui2/PCGenActionMap.java sandbox/uisync/code/src/java/pcgen/gui2/PCGenFrame.java sandbox/uisync/code/src/java/pcgen/system/CharacterManager.java Modified: sandbox/uisync/code/src/java/pcgen/gui2/PCGenActionMap.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/PCGenActionMap.java 2011-04-25 04:02:10 UTC (rev 14862) +++ sandbox/uisync/code/src/java/pcgen/gui2/PCGenActionMap.java 2011-04-25 06:10:46 UTC (rev 14863) @@ -28,6 +28,8 @@ import javax.swing.ActionMap; import javax.swing.JOptionPane; +import org.apache.commons.lang.StringUtils; + import pcgen.cdom.content.Sponsor; import pcgen.core.Globals; import pcgen.core.facade.AbilityFacade; @@ -485,7 +487,18 @@ @Override public void actionPerformed(ActionEvent e) { - CharacterManager.saveCharacter(frame.getSelectedCharacterRef().getReference()); + final CharacterFacade pc = frame.getSelectedCharacterRef().getReference(); + if (pc == null) + { + return; + } + + File file = pc.getFileRef().getReference(); + if (StringUtils.isBlank(file.getName()) + || !CharacterManager.saveCharacter(pc)) + { + frame.showSaveCharacterChooser(pc); + } } public void referenceChanged(ReferenceEvent<CharacterFacade> e) Modified: sandbox/uisync/code/src/java/pcgen/gui2/PCGenFrame.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/PCGenFrame.java 2011-04-25 04:02:10 UTC (rev 14862) +++ sandbox/uisync/code/src/java/pcgen/gui2/PCGenFrame.java 2011-04-25 06:10:46 UTC (rev 14863) @@ -440,7 +440,7 @@ chooser.setCurrentDirectory(new File(parentPath)); File file = character.getFileRef().getReference(); File prevFile = file; - if (file == null) + if (file == null || StringUtils.isEmpty(file.getName())) { file = new File(parentPath, character.getNameRef().getReference() + Constants.s_PCGEN_CHARACTER_EXTENSION); @@ -465,7 +465,7 @@ { delegate.showErrorMessage(Constants.s_APPNAME, "You cannot overwrite a directory with a character."); - return false; + return showSaveCharacterChooser(character); } if (file.exists() && (prevFile == null || !file.getName().equals( @@ -478,13 +478,16 @@ if (!overwrite) { - return false; + return showSaveCharacterChooser(character); } } character.setFile(file); context.setProperty(PCGenSettings.PCG_SAVE_PATH, file.getParent()); - CharacterManager.saveCharacter(character); + if (!CharacterManager.saveCharacter(character)) + { + return showSaveCharacterChooser(character); + } return true; } return false; Modified: sandbox/uisync/code/src/java/pcgen/system/CharacterManager.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/system/CharacterManager.java 2011-04-25 04:02:10 UTC (rev 14862) +++ sandbox/uisync/code/src/java/pcgen/system/CharacterManager.java 2011-04-25 06:10:46 UTC (rev 14863) @@ -27,6 +27,7 @@ import java.util.List; import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.StringUtils; import pcgen.cdom.base.Constants; import pcgen.core.Campaign; @@ -190,10 +191,15 @@ * This is expected to be called before a character is to * be removed from the list of open characters. * @param character the character to be saved + * @return true if the save succeeded, false if not */ - public static void saveCharacter(CharacterFacade character) + public static boolean saveCharacter(CharacterFacade character) { File file = character.getFileRef().getReference(); + if (StringUtils.isBlank(file.getName())) + { + return false; + } if (character instanceof CharacterFacadeImpl) { @@ -204,15 +210,18 @@ } catch (NullPointerException e) { + Logging.errorPrint("Could not save " + character.getNameRef().getReference(), e); delegate.showErrorMessage(Constants.s_APPNAME, "Could not save " + character.getNameRef().getReference()); - Logging.errorPrint("Could not save " + character.getNameRef().getReference(), e); + return false; } catch (IOException e) { + Logging.errorPrint("Could not save " + character.getNameRef().getReference(), e); delegate.showErrorMessage(Constants.s_APPNAME, - "Could not save " + character.getNameRef().getReference()); - Logging.errorPrint("Could not save " + character.getNameRef().getReference(), e); + "Could not save " + character.getNameRef().getReference() + + " due to the error:\n" + e.getMessage()); + return false; } } else @@ -220,9 +229,11 @@ Logging.errorPrint("Could not save " + character.getNameRef().getReference() + " due to unexpected class of character: " + character.getClass().getCanonicalName()); + return false; } addRecentCharacterFile(file); + return true; } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |