[vassalengine-svn] SF.net SVN: vassalengine:[3934] VASSAL-src/branches/mkiefte/src
Brought to you by:
rodneykinney,
uckelman
From: <mk...@us...> - 2008-07-30 10:07:39
|
Revision: 3934 http://vassalengine.svn.sourceforge.net/vassalengine/?rev=3934&view=rev Author: mkiefte Date: 2008-07-30 10:07:32 +0000 (Wed, 30 Jul 2008) Log Message: ----------- Merged up to r3933. Modified Paths: -------------- VASSAL-src/branches/mkiefte/src/VASSAL/Info.java VASSAL-src/branches/mkiefte/src/VASSAL/build/AbstractBuildable.java VASSAL-src/branches/mkiefte/src/VASSAL/build/Builder.java VASSAL-src/branches/mkiefte/src/VASSAL/build/GameModule.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/AbstractMetaData.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/BasicLogger.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Chatter.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/DoActionButton.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Documentation.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/EventLog.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/ExtensionElement.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/ExtensionMetaData.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/ExtensionsLoader.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/ExtensionsManager.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/GameState.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/GlobalOptions.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Inventory.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Map.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/ModuleExtension.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/ModuleMetaData.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/MultiActionButton.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/MultiRoll.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/PluginsLoader.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/PredefinedSetup.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/PrivateMap.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/PrototypeDefinition.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/RandomTextButton.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/SaveMetaData.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/SpecialDiceButton.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/SpecialDieFace.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/WizardSupport.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/dice/BonesDiceServer.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/dice/DieServer.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/documentation/AboutScreen.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/documentation/BrowserHelpFile.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/documentation/HelpFile.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/documentation/HelpWindow.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/documentation/Tutorial.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/gamepieceimage/GamePieceImage.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/gamepieceimage/GamePieceLayout.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/gamepieceimage/ImageItem.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/gamepieceimage/NewColorConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/gamepieceimage/StringEnumConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/gamepieceimage/TextItem.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/BoardPicker.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/CounterDetailViewer.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/DeckGlobalKeyCommand.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/DrawPile.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/GlobalMap.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/ImageSaver.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/LOS_Thread.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/LayerControl.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/MapShader.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/PieceMover.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/SelectionHighlighter.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/SetupStack.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/SmallList.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/StackMetrics.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/TextSaver.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/Zoomer.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/Board.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/HexGrid.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/Region.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/SquareGrid.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/ZonedGrid.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/GridNumbering.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/HexGridNumbering.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/RegularGridNumbering.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/SquareGridNumbering.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/Zone.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/ZoneHighlight.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/noteswindow/SecretNote.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/noteswindow/SecretNotesController.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/properties/GlobalProperty.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/properties/IncrementProperty.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/properties/SumProperties.java VASSAL-src/branches/mkiefte/src/VASSAL/build/module/turn/CounterTurnLevel.java VASSAL-src/branches/mkiefte/src/VASSAL/build/widget/BoxWidget.java VASSAL-src/branches/mkiefte/src/VASSAL/build/widget/HtmlChart.java VASSAL-src/branches/mkiefte/src/VASSAL/build/widget/ListWidget.java VASSAL-src/branches/mkiefte/src/VASSAL/build/widget/PanelWidget.java VASSAL-src/branches/mkiefte/src/VASSAL/build/widget/PieceSlot.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/CgiServerStatus.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/Compressor.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/DynamicClient.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/HttpMessageServer.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/HttpRequestWrapper.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/ServerConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/jabber/Interceptor.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/jabber/JabberClient.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/jabber/JabberClientFactory.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/jabber/JabberRoom.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/jabber/PacketProcessor.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/node/LockWatcher.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/node/NodeClient.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/node/NodeHybridClient.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/node/NodePlayer.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/node/Protocol.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/node/Server.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/node/SocketHandler.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/node/StatusReporter.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/AcceptPeerThread.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/ClientTest.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/DirectPeerPool.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/EchoClient.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/IpWatch.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/P2PClient.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/P2PPlayer.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/RoomManager.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/TextClient.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/peer2peer/UnitTest.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/ui/LockableRoomTreeRenderer.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/ui/PrivateMessageAction.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/ui/RoomTreeRenderer.java VASSAL-src/branches/mkiefte/src/VASSAL/chat/ui/ServerStatusView.java VASSAL-src/branches/mkiefte/src/VASSAL/command/Command.java VASSAL-src/branches/mkiefte/src/VASSAL/command/ConditionalCommand.java VASSAL-src/branches/mkiefte/src/VASSAL/command/PlayAudioClipCommand.java VASSAL-src/branches/mkiefte/src/VASSAL/command/RemovePiece.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/AutoConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/ColorConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/ConfigureTree.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/ExtensionTree.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/FileConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/HotKeyConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/IconConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/KeyModifiersConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/ModuleUpdaterDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/PropertiesWindow.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/SavedGameUpdaterDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/SimpleConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/SoundConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/configure/StringEnumConfigurer.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/AreaOfEffect.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/BasicPiece.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/CounterGlobalKeyCommand.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/Deck.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/DragBuffer.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/Embellishment.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/FreeRotator.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/GlobalCommand.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/GlobalHotKey.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/KeySpecifier.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/MovementMarkable.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/NonRectangular.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/PieceCloner.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/PieceDefiner.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/PlaceMarker.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/PlaySound.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/Properties.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/PropertiesPieceFilter.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/PropertySheet.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/ReturnToDeck.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/SendToLocation.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/SpecifiedSideAccess.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/Stack.java VASSAL-src/branches/mkiefte/src/VASSAL/counters/Translate.java VASSAL-src/branches/mkiefte/src/VASSAL/i18n/BundleHelper.java VASSAL-src/branches/mkiefte/src/VASSAL/i18n/Resources.java VASSAL-src/branches/mkiefte/src/VASSAL/i18n/TranslateVassalWindow.java VASSAL-src/branches/mkiefte/src/VASSAL/i18n/TranslateWindow.java VASSAL-src/branches/mkiefte/src/VASSAL/i18n/Translation.java VASSAL-src/branches/mkiefte/src/VASSAL/i18n/VASSAL.properties VASSAL-src/branches/mkiefte/src/VASSAL/i18n/VassalTranslation.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/AbstractLaunchAction.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/BasicModule.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/CommandClient.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/CommandServer.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/Editor.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/EditorWindow.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/ExtensionEditorWindow.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/FirstTimeDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/GameModuleAction.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/LaunchRequest.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/Launcher.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/MacOSXStartUp.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/Main.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/ModuleManager.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/ModuleManagerWindow.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/Player.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/PlayerWindow.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/ShutDownAction.java VASSAL-src/branches/mkiefte/src/VASSAL/launch/StartUp.java VASSAL-src/branches/mkiefte/src/VASSAL/preferences/PositionOption.java VASSAL-src/branches/mkiefte/src/VASSAL/preferences/Prefs.java VASSAL-src/branches/mkiefte/src/VASSAL/preferences/PrefsEditor.java VASSAL-src/branches/mkiefte/src/VASSAL/preferences/ReadOnlyPrefs.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/ArchiveWriter.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/BrowserSupport.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/DataArchive.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/Deobfuscator.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/ErrorLog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/ImprovedAveragingScaleFilter.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/KeyStrokeListener.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/Obfuscator.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/PropertiesEncoder.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/SVGImageUtils.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/SVGRenderer.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/SavedGameUpdater.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/SequenceEncoder.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/TempFileManager.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/UsernameAndPasswordDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/ZipUpdater.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/AbstractOpImpl.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/ImageOp.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/OpIcon.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/RotateScaleOpSVGImpl.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/ScaledImagePainter.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/SourceOpBitmapImpl.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/SourceOpSVGImpl.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/SourceTileOpSVGImpl.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imports/FileFormatException.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imports/ImportAction.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imports/Importer.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imports/adc2/ADC2Module.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imports/adc2/ADC2Utils.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imports/adc2/MapBoard.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imports/adc2/SymbolSet.java Added Paths: ----------- VASSAL-src/branches/mkiefte/src/VASSAL/tools/BugDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/CommunicationErrorDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/ErrorDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/ErrorUtils.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/FileUtils.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/ReadErrorDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/WriteErrorDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/imageop/OpErrorDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/ VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/SimpleVersionTokenizer.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/VassalVersion.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/VassalVersionTokenizer.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/Version.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/VersionFormatException.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/VersionTokenizer.java VASSAL-src/branches/mkiefte/src/images/bug.png Removed Paths: ------------- VASSAL-src/branches/mkiefte/src/VASSAL/tools/ErrorDialog.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/VersionFormatException.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/VersionTokenizer.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/SimpleVersionTokenizer.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/VassalVersion.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/VassalVersionTokenizer.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/Version.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/VersionFormatException.java VASSAL-src/branches/mkiefte/src/VASSAL/tools/version/VersionTokenizer.java Modified: VASSAL-src/branches/mkiefte/src/VASSAL/Info.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/Info.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/Info.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -25,14 +25,15 @@ import java.awt.Toolkit; import java.io.File; -import VASSAL.tools.VersionFormatException; -import VASSAL.tools.VersionTokenizer; +import VASSAL.tools.version.VassalVersionTokenizer; +import VASSAL.tools.version.VersionFormatException; +import VASSAL.tools.version.VersionTokenizer; /** * Class for storing release-related information */ public final class Info { - private static final String VERSION = "3.1.0-svn3721"; //$NON-NLS-1$ + private static final String VERSION = "3.1.0-svn3931"; //$NON-NLS-1$ private static File homeDir; private static final boolean isWindows; @@ -71,8 +72,7 @@ */ @Deprecated public static String getMinorVersion() { -// FIXME: check where this is used. maybe we can deprecate? - final VersionTokenizer tok = new VersionTokenizer(VERSION); + final VersionTokenizer tok = new VassalVersionTokenizer(VERSION); try { return Integer.toString(tok.next()) + "." + Integer.toString(tok.next()); @@ -134,8 +134,8 @@ * the parseable parts of the two <code>String</code>s. */ public static int compareVersions(String v0, String v1) { - final VersionTokenizer tok0 = new VersionTokenizer(v0); - final VersionTokenizer tok1 = new VersionTokenizer(v1); + final VersionTokenizer tok0 = new VassalVersionTokenizer(v0); + final VersionTokenizer tok1 = new VassalVersionTokenizer(v1); try { // find the first token where v0 and v1 differ @@ -147,8 +147,6 @@ } } catch (VersionFormatException e) { - System.err.println("Invalid version format: " + //$NON-NLS-1$ - v0 + ", " + v1); //$NON-NLS-2$ return 0; } Modified: VASSAL-src/branches/mkiefte/src/VASSAL/build/AbstractBuildable.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/build/AbstractBuildable.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/build/AbstractBuildable.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -37,23 +37,23 @@ * handled automatically. */ public abstract class AbstractBuildable implements Buildable, ValidityChecker { - protected List<Buildable> buildComponents = new ArrayList<Buildable>(); + protected List<Buildable> buildComponents = new ArrayList<Buildable>(); - protected ValidityChecker validator; // Sub-classes can set this + protected ValidityChecker validator; // Sub-classes can set this - // reference to perform validity - // checking + // reference to perform validity + // checking - /** - * Build this component by getting all XML attributes of the XML element and - * calling {@link #setAttribute} with the String value of the attribute - */ - public void build(Element e) { - if (e != null) { - NamedNodeMap n = e.getAttributes(); - for (int i = 0; i < n.getLength(); ++i) { - Attr att = (Attr) n.item(i); - setAttribute(att.getName(), att.getValue()); + /** + * Build this component by getting all XML attributes of the XML element and + * calling {@link #setAttribute} with the String value of the attribute + */ + public void build(Element e) { + if (e != null) { + NamedNodeMap n = e.getAttributes(); + for (int i = 0; i < n.getLength(); ++i) { + Attr att = (Attr) n.item(i); + setAttribute(att.getName(), att.getValue()); /* * Save a record of all Attributes for later translation. Need to save @@ -64,55 +64,55 @@ if (this instanceof Translatable) { Localization.getInstance().saveTranslatableAttribute((Translatable) this, att.getName(), att.getValue()); } - } - Builder.build(e, this); - } - } + } + Builder.build(e, this); + } + } - /** - * @return a list of all attribute names for this component - */ - public abstract String[] getAttributeNames(); + /** + * @return a list of all attribute names for this component + */ + public abstract String[] getAttributeNames(); - /** - * Sets an attribute value for this component. The <code>key</code> - * parameter will be one of those listed in {@link #getAttributeNames}. If - * the <code>value</code> parameter is a String, it will be the value - * returned by {@link #getAttributeValueString} for the same - * <code>key</code>. If the implementing class extends - * {@link AbstractConfigurable}, then <code>value</code> will be an - * instance of the corresponding Class listed in - * {@link AbstractConfigurable#getAttributeTypes} - * - * @param key - * the name of the attribute. Will be one of those listed in - * {@link #getAttributeNames} - */ - public abstract void setAttribute(String key, Object value); + /** + * Sets an attribute value for this component. The <code>key</code> + * parameter will be one of those listed in {@link #getAttributeNames}. If + * the <code>value</code> parameter is a String, it will be the value + * returned by {@link #getAttributeValueString} for the same + * <code>key</code>. If the implementing class extends + * {@link AbstractConfigurable}, then <code>value</code> will be an + * instance of the corresponding Class listed in + * {@link AbstractConfigurable#getAttributeTypes} + * + * @param key + * the name of the attribute. Will be one of those listed in + * {@link #getAttributeNames} + */ + public abstract void setAttribute(String key, Object value); - /** - * Return a String representation of the attribute with the given name. When - * initializing a module, this String value will be passed to - * {@link #setAttribute}. - * - * @param key - * the name of the attribute. Will be one of those listed in - * {@link #getAttributeNames} - */ - public abstract String getAttributeValueString(String key); + /** + * Return a String representation of the attribute with the given name. When + * initializing a module, this String value will be passed to + * {@link #setAttribute}. + * + * @param key + * the name of the attribute. Will be one of those listed in + * {@link #getAttributeNames} + */ + public abstract String getAttributeValueString(String key); - /** - * @return all build components that are an instance of the given class + /** + * @return all build components that are an instance of the given class * @deprecated Use {@link #getComponentsOf(Class<T>)} instead. - */ + */ @Deprecated public <T> Enumeration<T> getComponents(Class<T> target) { return Collections.enumeration(getComponentsOf(target)); } - /** - * @return all build components that are an instance of the given class - */ + /** + * @return all build components that are an instance of the given class + */ public <T> List<T> getComponentsOf(Class<T> target) { final ArrayList<T> l = new ArrayList<T>(); for (Buildable b : buildComponents) { @@ -123,100 +123,100 @@ return l; } - /** - * Recursively descend the build tree and return an enumeration of all - * components that are instances of the given class - * - * @param target - * @return + /** + * Recursively descend the build tree and return an enumeration of all + * components that are instances of the given class + * + * @param target + * @return * @deprecated Use {@link #getAllDescendantComponentsOf(Class<T>)} instead. - */ + */ @Deprecated - public <T> Enumeration<T> getAllDescendantComponents(Class<T> target) { - return Collections.enumeration(getAllDescendantComponentsOf(target)); - } + public <T> Enumeration<T> getAllDescendantComponents(Class<T> target) { + return Collections.enumeration(getAllDescendantComponentsOf(target)); + } - /** - * Recursively descend the build tree and return a {@link List} of all - * components that are instances of the given class - * - * @param target - * @return - */ + /** + * Recursively descend the build tree and return a {@link List} of all + * components that are instances of the given class + * + * @param target + * @return + */ public <T> List<T> getAllDescendantComponentsOf(Class<T> target) { - ArrayList<T> l = new ArrayList<T>(); - addComponents(target, l); - return l; + ArrayList<T> l = new ArrayList<T>(); + addComponents(target, l); + return l; } - private <T> void addComponents(Class<T> target, List<T> l) { - if (target.isInstance(this)) { - l.add(target.cast(this)); - } - for (Buildable b : buildComponents) { - if (target.isInstance(b)) { - l.add(target.cast(b)); - } - else if (b instanceof AbstractBuildable) { - ((AbstractBuildable) b).addComponents(target, l); - } - } - } + private <T> void addComponents(Class<T> target, List<T> l) { + if (target.isInstance(this)) { + l.add(target.cast(this)); + } + for (Buildable b : buildComponents) { + if (target.isInstance(b)) { + l.add(target.cast(b)); + } + else if (b instanceof AbstractBuildable) { + ((AbstractBuildable) b).addComponents(target, l); + } + } + } - public org.w3c.dom.Element getBuildElement(org.w3c.dom.Document doc) { - Element el = doc.createElement(getClass().getName()); - String[] names = getAttributeNames(); - for (int i = 0; i < names.length; ++i) { - String val = getAttributeValueString(names[i]); - if (val != null) { - el.setAttribute(names[i], val); - } - } + public org.w3c.dom.Element getBuildElement(org.w3c.dom.Document doc) { + Element el = doc.createElement(getClass().getName()); + String[] names = getAttributeNames(); + for (int i = 0; i < names.length; ++i) { + String val = getAttributeValueString(names[i]); + if (val != null) { + el.setAttribute(names[i], val); + } + } for (Buildable b : getBuildables()) { - el.appendChild(b.getBuildElement(doc)); - } - return el; - } + el.appendChild(b.getBuildElement(doc)); + } + return el; + } - /** - * Add a Buildable object to this object - */ - public void add(Buildable b) { - buildComponents.add(b); - } + /** + * Add a Buildable object to this object + */ + public void add(Buildable b) { + buildComponents.add(b); + } - /** - * Returns an enumeration of Buildable objects which are the direct children - * of this object in the Buildable containment hierarchy. The - * {@link #getBuildElement} method uses these objects to construct the XML - * element from which this object can be built. + /** + * Returns an enumeration of Buildable objects which are the direct children + * of this object in the Buildable containment hierarchy. The + * {@link #getBuildElement} method uses these objects to construct the XML + * element from which this object can be built. * * @deprecated Use {@link #getBuildables()} instead. - */ + */ @Deprecated - public Enumeration<Buildable> getBuildComponents() { - return Collections.enumeration(buildComponents); - } + public Enumeration<Buildable> getBuildComponents() { + return Collections.enumeration(buildComponents); + } - /** - * Returns a Collection of Buildable objects which are the direct children - * of this object in the Buildable containment hierarchy. The - * {@link #getBuildElement} method uses these objects to construct the XML - * element from which this object can be built. - */ + /** + * Returns a Collection of Buildable objects which are the direct children + * of this object in the Buildable containment hierarchy. The + * {@link #getBuildElement} method uses these objects to construct the XML + * element from which this object can be built. + */ public List<Buildable> getBuildables() { return Collections.unmodifiableList(buildComponents); } - public void validate(Buildable target, ValidationReport report) { - if (validator != null) { - validator.validate(target, report); - } - for (Buildable child : buildComponents) { - if (child instanceof ValidityChecker) { - ((ValidityChecker) child).validate(child, report); - } - } - } + public void validate(Buildable target, ValidationReport report) { + if (validator != null) { + validator.validate(target, report); + } + for (Buildable child : buildComponents) { + if (child instanceof ValidityChecker) { + ((ValidityChecker) child).validate(child, report); + } + } + } } Modified: VASSAL-src/branches/mkiefte/src/VASSAL/build/Builder.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/build/Builder.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/build/Builder.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -18,35 +18,37 @@ */ package VASSAL.build; +import java.io.IOException; import java.io.InputStream; -import java.io.IOException; import java.io.StringWriter; import java.io.Writer; -import javax.swing.JOptionPane; +import java.lang.reflect.InvocationTargetException; + import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; -import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; + import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import VASSAL.i18n.Resources; import VASSAL.tools.DataArchive; -import VASSAL.tools.ErrorLog; +import VASSAL.tools.ErrorDialog; +import VASSAL.tools.ErrorUtils; import VASSAL.tools.IOUtils; /** * This class holds static convenience methods for building {@link Buildable} - * objects + * objects. */ public abstract class Builder { /** @@ -62,57 +64,75 @@ * @param parent the parent Buildable instance */ public static void build(Element e, Buildable parent) { - if (e != null) { - for (Node child = e.getFirstChild(); child != null; - child = child.getNextSibling()) { - if (Node.ELEMENT_NODE == child.getNodeType()) { - try { - Buildable b = create((Element) child); - if (parent != null) { + if (e == null) return; + + for (Node child = e.getFirstChild(); child != null; + child = child.getNextSibling()) { + if (Node.ELEMENT_NODE == child.getNodeType()) { + try { + final Buildable b = create((Element) child); + if (parent != null) { b.addTo(parent); parent.add(b); - } } - catch (Throwable err) { - String msg = err.getMessage(); - if (msg == null) { - msg = err.getClass().getName().substring(err.getClass().getName().lastIndexOf(".") + 1); //$NON-NLS-1$ - } - System.err.println(child.toString()); - ErrorLog.log(err); - JOptionPane.showMessageDialog - (null, - Resources.getString("Builder.create_error", //$NON-NLS-1$ - ((Element) child).getTagName(), - GameModule.getGameModule().getDataArchive().getName(), - msg ), - Resources.getString("Builder.error"), //$NON-NLS-1$ - JOptionPane.ERROR_MESSAGE); - } } + catch (IllegalBuildException ex) { + ErrorDialog.bug(ex); + } } } } /** - * Create an instance of a class from an XML element and build it + * Create an instance of a class from an XML element and build it. * * The <code>.class</code> file for the named class may be either * in the System's classpath or else within the {@link DataArchive} - * of the {@link GameModule} + * of the {@link GameModule}. + * + * @throws IllegalBuildException if something goes wrong when loading + * the class or creating an instance of it */ - public static Buildable create(Element e) throws Exception { - Buildable b; - if (GameModule.getGameModule() == null) { - b = (Buildable) Class.forName(e.getTagName()).newInstance(); + public static Buildable create(Element e) throws IllegalBuildException { + final GameModule mod = GameModule.getGameModule(); + final String name = e.getTagName(); + + try { + final Buildable b = (Buildable) (mod == null ? Class.forName(name) : + mod.getDataArchive().loadClass(name)).getConstructor().newInstance(); + b.build(e); + return b; } - else { - b = (Buildable) GameModule - .getGameModule().getDataArchive() - .loadClass(e.getTagName()).newInstance(); + catch (Throwable t) { + // find and rethrow causes which are not bugs + ErrorUtils.throwAncestorOfClass(OutOfMemoryError.class, t); + + if (t instanceof ClassCastException || + t instanceof ClassNotFoundException || + t instanceof IllegalAccessException || + t instanceof IllegalArgumentException || + t instanceof InstantiationException || + t instanceof InvocationTargetException || + t instanceof NoSuchMethodException || + t instanceof SecurityException || + t instanceof ExceptionInInitializerError || + t instanceof LinkageError) { + // one of the standard classloading problems occured + throw new IllegalBuildException(t); + } + else if (t instanceof Error) { + // some unusual problem occurred + throw (Error) t; + } + else if (t instanceof RuntimeException) { + // some unusual problem occurred + throw (RuntimeException) t; + } + else { + // this should never happen + throw new IllegalStateException(t); + } } - b.build(e); - return b; } /** @@ -121,25 +141,22 @@ public static Document createDocument(InputStream in) throws IOException { try { - return DocumentBuilderFactory.newInstance() - .newDocumentBuilder() - .parse(in); + final Document doc = DocumentBuilderFactory.newInstance() + .newDocumentBuilder() + .parse(in); + in.close(); + return doc; } catch (ParserConfigurationException e) { - // FIXME: switch to IOException(Throwable) ctor in Java 1.6 - throw (IOException) new IOException().initCause(e); + ErrorDialog.bug(e); + return null; } catch (SAXException e) { // FIXME: switch to IOException(Throwable) ctor in Java 1.6 throw (IOException) new IOException().initCause(e); } finally { - try { - if (in != null) in.close(); - } - catch (IOException e) { - ErrorLog.log(e); - } + IOUtils.closeQuietly(in); } } @@ -152,8 +169,8 @@ .newDocumentBuilder() .newDocument(); } -// FIXME: shoult catch more specific exceptions here - catch (Exception ex) { + catch (ParserConfigurationException e) { + ErrorDialog.bug(e); return null; } } @@ -161,42 +178,39 @@ /** * Write an XML document to a Writer */ - public static void writeDocument(Document doc, Writer writer) throws IOException { - try { - Source source = new DOMSource(doc); + public static void writeDocument(Document doc, Writer writer) + throws IOException { + final Source source = new DOMSource(doc); - // Prepare the output file - Result result = new StreamResult(writer); + // Prepare the output file + final Result result = new StreamResult(writer); - // Write the DOM document to the file - Transformer xformer = TransformerFactory.newInstance().newTransformer(); + // Write the DOM document to the file + try { + final Transformer xformer = + TransformerFactory.newInstance().newTransformer(); xformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$ xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); //$NON-NLS-1$ //$NON-NLS-2$ xformer.transform(source, result); } + // FIXME: review error message catch (TransformerException e) { // FIXME: switch to IOException(Throwable) ctor in Java 1.6 throw (IOException) new IOException().initCause(e); } - catch (TransformerFactoryConfigurationError e) { - // FIXME: switch to IOException(Throwable) ctor in Java 1.6 - throw (IOException) new IOException().initCause(e); - } } /** * Return the decoded text contents of an Element node */ public static String getText(Element e) { - StringBuilder buffer = new StringBuilder(); - org.w3c.dom.NodeList sub = e.getChildNodes(); + final StringBuilder buffer = new StringBuilder(); + final NodeList sub = e.getChildNodes(); for (int i = 0; i < sub.getLength(); ++i) { - if (sub.item(i).getNodeType() - == Node.TEXT_NODE) { + if (sub.item(i).getNodeType() == Node.TEXT_NODE) { buffer.append(((org.w3c.dom.Text) sub.item(i)).getData()); } - else if (sub.item(i).getNodeType() - == Node.ENTITY_REFERENCE_NODE) { + else if (sub.item(i).getNodeType() == Node.ENTITY_REFERENCE_NODE) { buffer.append(sub.item(i).getFirstChild().toString()); } } @@ -204,16 +218,17 @@ } /** - * @return a String representation of an XML Node + * @return a String representation of an XML document */ public static String toString(Document doc) { - StringWriter w = new StringWriter(); + final StringWriter w = new StringWriter(); try { - writeDocument(doc,w); + writeDocument(doc, w); return w.toString(); } + // FIXME: review error message catch (IOException e) { - ErrorLog.log(e); +// IOErrorDialog.error(e); return ""; //$NON-NLS-1$ } } @@ -239,7 +254,7 @@ for (int i = 0; i < 500000; ++i) { buf.append(" "); //$NON-NLS-1$ if (i % 10000 == 0) { - System.err.println("" + buf.length()); //$NON-NLS-1$ + System.err.println(buf.length()); //$NON-NLS-1$ } } } Modified: VASSAL-src/branches/mkiefte/src/VASSAL/build/GameModule.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/build/GameModule.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/build/GameModule.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -23,6 +23,7 @@ import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -82,11 +83,14 @@ import VASSAL.preferences.Prefs; import VASSAL.tools.ArchiveWriter; import VASSAL.tools.DataArchive; -import VASSAL.tools.ErrorLog; +import VASSAL.tools.ErrorDialog; +import VASSAL.tools.IOUtils; +import VASSAL.tools.ReadErrorDialog; import VASSAL.tools.KeyStrokeListener; import VASSAL.tools.KeyStrokeSource; import VASSAL.tools.MTRandom; import VASSAL.tools.ToolBarComponent; +import VASSAL.tools.WriteErrorDialog; import VASSAL.tools.filechooser.FileChooser; /** @@ -211,19 +215,20 @@ vassalVersionCreated = (String) value; String runningVersion = Info.getVersion(); if (Info.compareVersions(vassalVersionCreated, runningVersion) > 0) { - JOptionPane.showMessageDialog - (null, - Resources.getString("GameModule.version_error", vassalVersionCreated, runningVersion), //$NON-NLS-1$ - Resources.getString("GameModule.version_error_short"), //$NON-NLS-1$ - JOptionPane.ERROR_MESSAGE); + ErrorDialog.warning( + Resources.getString("GameModule.version_error"), + Resources.getString("GameModule.version_error"), + Resources.getString("GameModule.version_error_message", + vassalVersionCreated, runningVersion) + ); } } else if (NEXT_PIECESLOT_ID.equals(name)) { try { nextGpId = Integer.parseInt((String) value); } - catch (Exception e) { - + // FIXME: review error message + catch (NumberFormatException e) { } } else if (DESCRIPTION.equals(name)) { @@ -361,11 +366,11 @@ } public void fireKeyStroke(KeyStroke stroke) { - if (stroke != null) { - for (KeyStrokeListener l : keyStrokeListeners) { - l.keyPressed(stroke); - } - } + if (stroke != null) { + for (KeyStrokeListener l : keyStrokeListeners) { + l.keyPressed(stroke); + } + } } /** @@ -643,12 +648,12 @@ /** * Prompt user to save open game and modules/extensions being edited * @return true if shutDown should proceed, i.e. user did not cancel - * @throws IOException on error while attempting to save */ public boolean shutDown() { boolean cancelled; getGameState().setup(false); cancelled = getGameState().isGameStarted(); + if (!cancelled) { if (getDataArchive() instanceof ArchiveWriter && !buildString().equals(lastSavedConfiguration)) { @@ -668,41 +673,43 @@ } if (!cancelled) { - try { - getPrefs().write(); - } - catch (IOException e) { - ErrorLog.warn(e); - } + Prefs p = null; + // write and close module prefs try { - getPrefs().close(); + p = getPrefs(); + p.write(); + p.close(); } catch (IOException e) { - ErrorLog.warn(e); + WriteErrorDialog.error(e, p.getFile()); } - - try { - Prefs.getGlobalPrefs().write(); + finally { + IOUtils.closeQuietly(p); } - catch (IOException e) { - ErrorLog.warn(e); - } + // write and close global prefs try { - Prefs.getGlobalPrefs().close(); + p = getGlobalPrefs(); + p.write(); + p.close(); } catch (IOException e) { - ErrorLog.warn(e); + WriteErrorDialog.error(e, p.getFile()); } + finally { + IOUtils.closeQuietly(p); + } + // close the module try { - getDataArchive().close(); + archive.close(); } catch (IOException e) { - ErrorLog.warn(e); + ReadErrorDialog.error(e, archive.getName()); } } + return !cancelled; } @@ -743,11 +750,13 @@ } /** - * Set the singleton GameModule and invoke {@link #build} on it + * Set the singleton GameModule and invoke {@link #build} on it. */ public static void init(GameModule module) throws IOException { if (theModule != null) { - throw new IOException(Resources.getString("GameModule.open_error", theModule.getDataArchive().getName())); //$NON-NLS-1$ + throw new UnsupportedOperationException( + Resources.getString("GameModule.open_error", + theModule.getDataArchive().getName())); } else { theModule = module; @@ -768,7 +777,8 @@ * Run through every PieceSlot and generate new gpid's. */ if (getGameModule().nextGpId == 0) { - for (PieceSlot pieceSlot : theModule.getAllDescendantComponentsOf(PieceSlot.class)) { + for (PieceSlot pieceSlot : + theModule.getAllDescendantComponentsOf(PieceSlot.class)) { pieceSlot.updateGpId(); } } @@ -858,33 +868,35 @@ protected void save(boolean saveAs) { vassalVersionCreated = Info.getVersion(); + final ArchiveWriter writer = getArchiveWriter(); + try { - (new ModuleMetaData(this)).save(getArchiveWriter()); + (new ModuleMetaData(this)).save(writer); } catch (IOException e) { - ErrorLog.log(e); + WriteErrorDialog.error(e, writer.getName()); } try { - String save = buildString(); - getArchiveWriter().addFile - (BUILDFILE, - new java.io.ByteArrayInputStream(save.getBytes("UTF-8"))); //$NON-NLS-1$ + final String save = buildString(); + writer.addFile(BUILDFILE, + new ByteArrayInputStream(save.getBytes("UTF-8"))); //$NON-NLS-1$ + if (saveAs) { - getArchiveWriter().saveAs(true); + writer.saveAs(true); } else { - getArchiveWriter().write(true); + writer.write(true); } lastSavedConfiguration = save; } - catch (IOException err) { - ErrorLog.log(err); - JOptionPane.showMessageDialog - (frame, - Resources.getString("GameModule.save_error", err.getMessage()), //$NON-NLS-1$ - Resources.getString("GameModule.save_error_short"), //$NON-NLS-1$ - JOptionPane.ERROR_MESSAGE); + catch (IOException e) { + ErrorDialog.error( + Resources.getString("GameModule.save_error"), + Resources.getString("GameModule.save_error"), + e, + Resources.getString("GameModule.save_error_message") + ); } } Modified: VASSAL-src/branches/mkiefte/src/VASSAL/build/module/AbstractMetaData.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/build/module/AbstractMetaData.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/build/module/AbstractMetaData.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -17,10 +17,11 @@ */ package VASSAL.build.module; +import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Locale; @@ -52,6 +53,7 @@ import VASSAL.i18n.Translation; import VASSAL.tools.ArchiveWriter; import VASSAL.tools.BridgeStream; +import VASSAL.tools.ErrorDialog; import VASSAL.tools.ErrorLog; import VASSAL.tools.IOUtils; @@ -169,22 +171,12 @@ */ public static AbstractMetaData buildMetaData(File file) { // Check the file exists and is a file - if (!file.exists() || !file.isFile()) { - return null; - } + if (!file.exists() || !file.isFile()) return null; - // Check it is a Zip file ZipFile zip = null; try { - try { - zip = new ZipFile(file); - } - catch (ZipException e) { - return null; - } - catch (IOException e) { - return null; - } + // Check it is a Zip file + zip = new ZipFile(file); // Check if it is a Save Game file ZipEntry entry = zip.getEntry(GameState.SAVEFILE_ZIP_ENTRY); @@ -226,13 +218,20 @@ return new ExtensionMetaData(zip); } } + br.close(); } - catch (IOException e) { - } finally { IOUtils.closeQuietly(br); } + + zip.close(); } + catch (ZipException e) { + // Ignore. This (usually) means that the module has no metadata. + } + catch (IOException e) { + ErrorLog.log(e); + } finally { IOUtils.closeQuietly(zip); } @@ -274,7 +273,8 @@ } e = doc.createElement(DATE_SAVED_ELEMENT); - e.appendChild(doc.createTextNode(String.valueOf(System.currentTimeMillis()))); + e.appendChild(doc.createTextNode( + String.valueOf(System.currentTimeMillis()))); root.appendChild(e); if (descriptionAttr != null) { @@ -285,25 +285,27 @@ } catch (ParserConfigurationException ex) { + ErrorDialog.bug(ex); // FIXME: switch to IOException(Throwable) ctor in Java 1.6 throw (IOException) new IOException().initCause(ex); } -// FIXME: could we replace BridgeStream by a pair of Pipe streams? final BridgeStream out = new BridgeStream(); try { - final Transformer xformer = TransformerFactory.newInstance() - .newTransformer(); + final Transformer xformer = + TransformerFactory.newInstance().newTransformer(); xformer.setOutputProperty(OutputKeys.INDENT, "yes"); xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); xformer.transform(new DOMSource(doc), new StreamResult(out)); } catch (TransformerConfigurationException ex) { + ErrorDialog.bug(ex); // FIXME: switch to IOException(Throwable) ctor in Java 1.6 throw (IOException) new IOException().initCause(ex); } catch (TransformerFactoryConfigurationError ex) { + ErrorDialog.bug(ex); // FIXME: switch to IOException(Throwable) ctor in Java 1.6 throw (IOException) new IOException().initCause(ex); } @@ -323,14 +325,16 @@ * @throws IOException */ public void copyModuleMetadata(ArchiveWriter archive) throws IOException { - InputStream in = null; + BufferedInputStream in = null; try { - in = GameModule.getGameModule() - .getDataArchive() - .getFileStream(ModuleMetaData.ZIP_ENTRY_NAME); + in = new BufferedInputStream( + GameModule.getGameModule() + .getDataArchive() + .getFileStream(ModuleMetaData.ZIP_ENTRY_NAME)); archive.addFile(ModuleMetaData.ZIP_ENTRY_NAME, in); + in.close(); } - catch (IOException e) { + catch (FileNotFoundException e) { // No Metatdata in source module, create a fresh copy new ModuleMetaData(GameModule.getGameModule()).save(archive); } @@ -475,7 +479,6 @@ // Track language for localizable attributes language = getAttr(attrs, LANG_ATTR); - } protected String getAttr(Attributes attrs, String qName) { Modified: VASSAL-src/branches/mkiefte/src/VASSAL/build/module/BasicLogger.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/build/module/BasicLogger.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/build/module/BasicLogger.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -56,6 +56,7 @@ import VASSAL.tools.BridgeStream; import VASSAL.tools.KeyStrokeListener; import VASSAL.tools.Obfuscator; +import VASSAL.tools.WriteErrorDialog; import VASSAL.tools.filechooser.FileChooser; import VASSAL.tools.menu.MenuManager; @@ -102,8 +103,12 @@ mod.getGameState().addGameComponent(this); final MenuManager mm = MenuManager.getInstance(); + // FIMXE: setting nmemonic from first letter could cause collisions in + // some languages newLogAction.putValue(Action.MNEMONIC_KEY,(int)Resources.getString("BasicLogger.begin_logfile.shortcut").charAt(0)); mm.addAction("BasicLogger.begin_logfile", newLogAction); + // FIMXE: setting nmemonic from first letter could cause collisions in + // some languages endLogAction.putValue(Action.MNEMONIC_KEY,(int)Resources.getString("BasicLogger.end_logfile.shortcut").charAt(0)); mm.addAction("BasicLogger.end_logfile", endLogAction); @@ -177,24 +182,26 @@ logOutput.clear(); nextInput = 0; nextUndo = -1; - beginningState = GameModule.getGameModule().getGameState().getRestoreCommand(); + beginningState = + GameModule.getGameModule().getGameState().getRestoreCommand(); } else { if (endLogAction.isEnabled()) { - if (JOptionPane.showConfirmDialog(GameModule.getGameModule().getFrame(), Resources.getString("BasicLogger.save_log"), Resources.getString("BasicLogger.unsaved_log"), //$NON-NLS-1$ //$NON-NLS-2$ + if (JOptionPane.showConfirmDialog( + GameModule.getGameModule().getFrame(), + Resources.getString("BasicLogger.save_log"), //$NON-NLS-1$ + Resources.getString("BasicLogger.unsaved_log"), //$NON-NLS-1$ JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { try { write(); } - catch (IOException ex) { - String msg = Resources.getString("BasicLogger.unable_to_write", outputFile.toString()); //$NON-NLS-1$ - if (ex.getMessage() != null) { - msg += ".\n" + ex.getMessage(); //$NON-NLS-1$ - } - JOptionPane.showMessageDialog(GameModule.getGameModule().getFrame(), msg, Resources.getString("BasicLogger.save_failed"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$ + catch (IOException e) { + // BasicLogger is not a lumberjack + WriteErrorDialog.error(e, outputFile); } } } + logInput.clear(); beginningState = null; undoAction.setEnabled(false); @@ -216,7 +223,7 @@ } protected void step() { - Command c = logInput.get(nextInput++); + final Command c = logInput.get(nextInput++); c.execute(); GameModule.getGameModule().sendAndLog(c); stepAction.setEnabled(nextInput < logInput.size()); @@ -390,11 +397,7 @@ outputFile = null; } catch (IOException ex) { - String msg = Resources.getString("BasicLogger.unable_to_write", outputFile.toString()); //$NON-NLS-1$ - if (ex.getMessage() != null) { - msg += ".\n" + ex.getMessage(); //$NON-NLS-1$ - } - JOptionPane.showMessageDialog(GameModule.getGameModule().getFrame(), msg, Resources.getString("BasicLogger.save_failed"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$ + WriteErrorDialog.error(ex, outputFile); } } }; @@ -414,15 +417,18 @@ public LogCommand(Command c, List<Command> logInput, Action stepAction) { if (c instanceof LogCommand) { - throw new RuntimeException(Resources.getString("BasicLogger.cant_log")); //$NON-NLS-1$ + throw new UnsupportedOperationException( + Resources.getString("BasicLogger.cant_log")); //$NON-NLS-1$ } + this.logInput = logInput; this.stepAction = stepAction; logged = c; - Command sub[] = c.getSubCommands(); - for (int i = 0; i < sub.length; ++i) { - append(new LogCommand(sub[i], logInput, stepAction)); + + for (Command sub : c.getSubCommands()) { + append(new LogCommand(sub, logInput, stepAction)); } + logged.stripSubCommands(); } @@ -444,10 +450,9 @@ } protected Command assembleCommand() { - Command c = logged; - Command sub[] = getSubCommands(); - for (int i = 0; i < sub.length; ++i) { - c.append(((LogCommand) sub[i]).assembleCommand()); + final Command c = logged; + for (Command sub : getSubCommands()) { + c.append(((LogCommand) sub).assembleCommand()); } return c; } @@ -456,7 +461,7 @@ private static final long serialVersionUID = 1L; public StepAction() { - URL iconURL = getClass().getResource(STEP_ICON); + final URL iconURL = getClass().getResource(STEP_ICON); if (iconURL != null) { putValue(Action.SMALL_ICON, new ImageIcon(iconURL)); } Modified: VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Chatter.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Chatter.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Chatter.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -327,6 +327,7 @@ } } } + // FIXME: review error message catch (BadLocationException e) { ErrorLog.log(e); } Modified: VASSAL-src/branches/mkiefte/src/VASSAL/build/module/DoActionButton.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/build/module/DoActionButton.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/build/module/DoActionButton.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -266,11 +266,13 @@ } protected String encodeHotkeys() { - SequenceEncoder se = new SequenceEncoder(','); + final SequenceEncoder se = new SequenceEncoder(','); for (KeyStroke key : hotkeys) { se.append(HotKeyConfigurer.encode(key)); } - return "" + se.getValue(); + + final String val = se.getValue(); + return val == null ? "" : val; } protected List<KeyStroke> decodeHotkeys(String s) { Modified: VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Documentation.java =================================================================== --- VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Documentation.java 2008-07-30 03:04:00 UTC (rev 3933) +++ VASSAL-src/branches/mkiefte/src/VASSAL/build/module/Documentation.java 2008-07-30 10:07:32 UTC (rev 3934) @@ -35,7 +35,7 @@ import VASSAL.configure.Configurer; import VASSAL.configure.SingleChildInstance; import VASSAL.i18n.Resources; -import VASSAL.tools.ErrorLog; +import VASSAL.tools.ErrorDialog; import VASSAL.tools.menu.MenuManager; /** @@ -54,18 +54,13 @@ public vo... [truncated message content] |