From: <jde...@us...> - 2012-10-10 11:35:08
|
Revision: 17725 http://pcgen.svn.sourceforge.net/pcgen/?rev=17725&view=rev Author: jdempsey Date: 2012-10-10 11:34:58 +0000 (Wed, 10 Oct 2012) Log Message: ----------- Fix bug: Corrupted Master during saving / closing process Issue#: CODE-1739 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui2/PCGenFrame.java Trunk/pcgen/code/src/java/pcgen/gui2/facade/CompanionSupportFacadeImpl.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java Trunk/pcgen/code/src/java/pcgen/system/CharacterManager.java Modified: Trunk/pcgen/code/src/java/pcgen/gui2/PCGenFrame.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui2/PCGenFrame.java 2012-10-10 03:10:18 UTC (rev 17724) +++ Trunk/pcgen/code/src/java/pcgen/gui2/PCGenFrame.java 2012-10-10 11:34:58 UTC (rev 17725) @@ -651,8 +651,7 @@ public boolean saveCharacter(CharacterFacade character) { - File file = character.getFileRef().getReference(); - if (StringUtils.isBlank(file.getName()) || !CharacterManager.saveCharacter(character)) + if (!CharacterManager.characterFilenameValid(character)) { return showSaveCharacterChooser(character); } @@ -676,7 +675,8 @@ List<CompanionFacade> tobeSaved = new ArrayList<CompanionFacade>(); for (CompanionFacade comp : character.getCompanionSupport().getCompanions()) { - if (StringUtils.isEmpty(comp.getFileRef().getReference().getName())) + if (StringUtils.isEmpty(comp.getFileRef().getReference().getName()) + && CharacterManager.getCharacterMatching(comp) != null) { tobeSaved.add(comp); } Modified: Trunk/pcgen/code/src/java/pcgen/gui2/facade/CompanionSupportFacadeImpl.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui2/facade/CompanionSupportFacadeImpl.java 2012-10-10 03:10:18 UTC (rev 17724) +++ Trunk/pcgen/code/src/java/pcgen/gui2/facade/CompanionSupportFacadeImpl.java 2012-10-10 11:34:58 UTC (rev 17725) @@ -26,6 +26,8 @@ import java.util.List; import java.util.Map; +import org.apache.commons.lang.StringUtils; + import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.Constants; import pcgen.cdom.list.CompanionList; @@ -296,9 +298,10 @@ compFacadeImpl.postLevellingUpdates(); // Update the master with the new companion + File compFile = compFacadeImpl.getFileRef().getReference(); + String compFilename = StringUtils.isEmpty(compFile.getPath()) ? "" : compFile.getAbsolutePath(); Follower follower = - new Follower(compFacadeImpl.getFileRef().getReference() - .getAbsolutePath(), compFacadeImpl.getNameRef() + new Follower(compFilename, compFacadeImpl.getNameRef() .getReference(), compList); follower.setRace(compRace); theCharacter.addFollower(follower); Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2012-10-10 03:10:18 UTC (rev 17724) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2012-10-10 11:34:58 UTC (rev 17725) @@ -36,6 +36,8 @@ import java.util.StringTokenizer; import java.util.TreeSet; +import org.apache.commons.lang.StringUtils; + import pcgen.base.lang.StringUtil; import pcgen.base.util.FixedStringList; import pcgen.base.util.NamedValue; @@ -1512,9 +1514,12 @@ buffer.append(follower.getUsedHD()); buffer.append('|'); buffer.append(TAG_FILE).append(':'); - buffer.append(EntityEncoder.encode(FileHelper.findRelativePath( - new File(thePC.getFileName()), new File( - follower.getFileName())))); + if (StringUtils.isNotEmpty(follower.getFileName())) + { + buffer.append(EntityEncoder.encode(FileHelper + .findRelativePath(new File(thePC.getFileName()), + new File(follower.getFileName())))); + } buffer.append(LINE_SEP); } } Modified: Trunk/pcgen/code/src/java/pcgen/system/CharacterManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/system/CharacterManager.java 2012-10-10 03:10:18 UTC (rev 17724) +++ Trunk/pcgen/code/src/java/pcgen/system/CharacterManager.java 2012-10-10 11:34:58 UTC (rev 17725) @@ -337,6 +337,28 @@ } /** + * Check if the character's filename is ready to be saved to. + * @param character The character to be checked. + * @return true if the file can be written to, false otherwise. + */ + public static boolean characterFilenameValid(CharacterFacade character) + { + if (character.getFileRef().getReference() == null + || StringUtils.isEmpty(character.getFileRef().getReference() + .getName())) + { + return false; + } + + File file = character.getFileRef().getReference(); + if (StringUtils.isBlank(file.getName())) + { + return false; + } + return !file.isDirectory() && (!file.exists() || file.canWrite()); + } + + /** * Saves this character to the character's file specified * by character.getFileRef().getReference() * This is expected to be called before a character is to This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |