Changeset 0a10c36


Ignore:
Timestamp:
Jun 15, 2010, 8:28:23 PM (10 years ago)
Author:
Michael Seifert <mseifert@…>
Branches:
master
Children:
4e5eb1c
Parents:
63329fa
Message:

Added menu entry for filing bug reports;

Merged information of ReplayDataChangeListener? in ReplayChangeEvent?;

Added statistics to ReplayStorage?;

Fixed bug: Added supported version for SC2Replay_v2

Location:
src/main
Files:
4 added
9 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/de/erichseifert/warp/ReplayDataChangeListener.java

    r63329fa r0a10c36  
    3030         * This method is invoked when a replay was added or removed from the
    3131         * data model.
    32          * @param descriptorOld Old descriptor.
    33          * @param descriptorNew New descriptor.
     32         * @param evt Event.
    3433         */
    35         void replaysAvailable(ReplayDescriptor descriptorOld, ReplayDescriptor descriptorNew);
     34        void replayChanged(ReplayChangeEvent evt);
    3635}
  • src/main/java/de/erichseifert/warp/WARP.java

    r63329fa r0a10c36  
    7474                                elementsProcessed++;
    7575
    76                                 if (replay != null) {
    77                                         fireReplayInfoChanged(null, replay.getDescriptor());
    78                                 }
    7976                                listener.progressUpdated(elementsProcessed, replayFiles.size());
    8077                        }
     
    9188        public WARP() {
    9289                listeners = new HashSet<ReplayDataChangeListener>();
     90
    9391
    9492                ReplayStorage serStorage = new SerializingStorage();
     
    180178         */
    181179        protected void fireReplayInfoChanged(ReplayDescriptor descriptorOld, ReplayDescriptor descriptorNew) {
     180                ReplayChangeEvent evt = new ReplayChangeEvent(storage, descriptorOld, descriptorNew);
    182181                for (ReplayDataChangeListener listener : listeners) {
    183                         listener.replaysAvailable(descriptorOld, descriptorNew);
     182                        listener.replayChanged(evt);
    184183                }
    185184        }
  • src/main/java/de/erichseifert/warp/gui/ReplayParserGUI.java

    r63329fa r0a10c36  
    2424import java.awt.BorderLayout;
    2525import java.awt.Component;
     26import java.awt.Desktop;
    2627import java.awt.Dimension;
    2728import java.awt.Font;
     
    3132import java.awt.event.ActionListener;
    3233import java.io.File;
     34import java.io.IOException;
     35import java.net.URI;
     36import java.net.URISyntaxException;
    3337import java.sql.Date;
    3438import java.text.DateFormat;
     
    6569import de.erichseifert.warp.ProgressListener;
    6670import de.erichseifert.warp.Replay;
     71import de.erichseifert.warp.ReplayChangeEvent;
    6772import de.erichseifert.warp.ReplayDataChangeListener;
    6873import de.erichseifert.warp.ReplayDescriptor;
    6974import de.erichseifert.warp.WARP;
     75import de.erichseifert.warp.ReplayChangeEvent.EventType;
    7076import de.erichseifert.warp.gui.ReplayRowFilter.FilterMode;
    7177import de.erichseifert.warp.gui.renderers.sc2replay.SC2ReplayRenderer;
     
    149155                exitAction.putValue(Action.NAME, "Exit");
    150156
     157                Action submitBugAction = new AbstractAction() {
     158                        @Override
     159                        public void actionPerformed(ActionEvent e) {
     160                                try {
     161                                        URI warpProjectPage = new URI("http://trac.erichseifert.de/warp");
     162                                        Desktop.getDesktop().browse(warpProjectPage);
     163                                } catch (URISyntaxException e1) {
     164                                        // TODO Auto-generated catch block
     165                                        e1.printStackTrace();
     166                                } catch (IOException e2) {
     167                                        // TODO Auto-generated catch block
     168                                        e2.printStackTrace();
     169                                }
     170                        }
     171                };
     172                submitBugAction.putValue(Action.NAME, "Submit a bug...");
     173
    151174                Action aboutAction = new AbstractAction() {
    152175                        @Override
     
    169192                JMenu helpMenu = new JMenu("Help");
    170193                menuBar.add(helpMenu);
     194                helpMenu.add(submitBugAction);
     195                helpMenu.addSeparator();
    171196                helpMenu.add(aboutAction);
     197                if (!Desktop.isDesktopSupported() || !Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
     198                        submitBugAction.setEnabled(false);
     199                }
    172200
    173201                // Tool bar
     
    285313
    286314        @Override
    287         public void replaysAvailable(ReplayDescriptor descriptorOld, ReplayDescriptor descriptorNew) {
    288                 if (descriptorOld == null && descriptorNew == null) {
    289                         return;
    290                 }
    291 
    292                 // A replay has been added
    293                 if (descriptorOld == null) {
    294                         replayTableModel.addRow(descriptorToRow(descriptorNew));
    295                 } // A replay has been deleted
    296                 else if (descriptorNew == null) {
     315        public void replayChanged(ReplayChangeEvent evt) {
     316                if (evt.getType() == EventType.ADD) {
     317                        replayTableModel.addRow(descriptorToRow(evt.getDescriptorNew()));
     318                } else if (evt.getType() == EventType.REMOVE) {
    297319                        for (int i = 0; i < replayTableModel.getRowCount(); i++) {
    298320                                File replayFile = (File) replayTableModel.getValueAt(i, 0);
    299                                 if (replayFile == descriptorOld.getFile()) {
     321                                if (replayFile == evt.getDescriptorOld().getFile()) {
    300322                                        replayTableModel.removeRow(i);
    301323                                        break;
  • src/main/java/de/erichseifert/warp/io/BufferedStorage.java

    r63329fa r0a10c36  
    3030
    3131import de.erichseifert.warp.Replay;
     32import de.erichseifert.warp.ReplayDataChangeListener;
    3233import de.erichseifert.warp.ReplayDescriptor;
     34import de.erichseifert.warp.io.statistics.Statistics;
    3335
    3436/**
     
    131133                return storage.contains(replayFile);
    132134        }
     135
     136        @Override
     137        public void addReplayDataChangeListener(ReplayDataChangeListener listener) {
     138                storage.addReplayDataChangeListener(listener);
     139        }
     140
     141        @Override
     142        public void removeReplayDataChangeListener(ReplayDataChangeListener listener) {
     143                storage.removeReplayDataChangeListener(listener);
     144        }
     145
     146        @Override
     147        public Statistics getStatistics() {
     148                return storage.getStatistics();
     149        }
    133150}
  • src/main/java/de/erichseifert/warp/io/MemoryStorage.java

    r63329fa r0a10c36  
    3232import de.erichseifert.warp.Replay;
    3333import de.erichseifert.warp.ReplayDescriptor;
     34import de.erichseifert.warp.io.statistics.Statistics;
    3435
    3536/**
    3637 * Class that stores loaded replays in the memory.
    3738 */
    38 public class MemoryStorage implements ReplayStorage {
     39public class MemoryStorage  extends AbstractReplayStorage {
    3940        private final Map<String, Replay> cache;
    4041
     
    7172                        cache.put(replay.getDescriptor().getFile().getAbsolutePath(), replay);
    7273                }
     74                super.save(replays);
    7375        }
    7476
     
    7880                        cache.remove(replay.getDescriptor().getFile().getAbsolutePath());
    7981                }
     82                super.delete(replays);
    8083        }
    8184
     
    8992                return cache.containsValue(replayFile);
    9093        }
     94
     95        @Override
     96        public Statistics getStatistics() {
     97                // TODO Auto-generated method stub
     98                return null;
     99        }
    91100}
  • src/main/java/de/erichseifert/warp/io/ReplayStorage.java

    r63329fa r0a10c36  
    2727
    2828import de.erichseifert.warp.Replay;
     29import de.erichseifert.warp.ReplayDataChangeListener;
    2930import de.erichseifert.warp.ReplayDescriptor;
     31import de.erichseifert.warp.io.statistics.Statistics;
    3032
    3133/**
     
    6567        int size();
    6668
     69        Statistics getStatistics();
     70
    6771        /**
    6872         * Returns, whether the specified replay has already been stored or not.
     
    7175         */
    7276        boolean contains(File replayFile);
     77
     78        void addReplayDataChangeListener(ReplayDataChangeListener listener);
     79        void removeReplayDataChangeListener(ReplayDataChangeListener listener);
    7380}
  • src/main/java/de/erichseifert/warp/io/SerializingStorage.java

    r63329fa r0a10c36  
    3838import de.erichseifert.warp.Replay;
    3939import de.erichseifert.warp.ReplayDescriptor;
     40import de.erichseifert.warp.io.statistics.SC2Statistics;
     41import de.erichseifert.warp.io.statistics.Statistics;
    4042import de.erichseifert.warp.util.FileUtil;
    4143
     
    4446 * retrieve them.
    4547 */
    46 public class SerializingStorage implements ReplayStorage {
     48public class SerializingStorage extends AbstractReplayStorage {
    4749        private static final String STORAGE_PATH_DEFAULT = "data";
    4850        private static final String DESCRIPTOR_FILE_NAME = ".descriptors";
     51        private static final String STATISTICS_FILE_NAME = ".statistics";
    4952
    5053        private Map<String, ReplayDescriptor> descriptorsByPath;
     54        private Statistics statistics;
    5155        private File storageDir;
    5256        private File descriptorFile;
     57        private File statisticsFile;
    5358
    5459        /**
     
    6974                storageDir = new File(storagePath);
    7075                descriptorFile = new File(storagePath+File.separator+DESCRIPTOR_FILE_NAME);
     76                statisticsFile = new File(storagePath+File.separator+STATISTICS_FILE_NAME);
    7177        }
    7278
     
    140146        }
    141147
     148        private void initStatistics() {
     149                if (statistics != null) {
     150                        return;
     151                }
     152
     153                if (statisticsFile.exists()) {
     154                        statistics = (Statistics) deserialize(statisticsFile.getAbsolutePath());
     155                }
     156                else {
     157                        // FIXME: Type of statistics should be retrieved by a factory
     158                        statistics = new SC2Statistics();
     159                }
     160
     161                addReplayDataChangeListener(statistics);
     162        }
     163
    142164        // FIXME: Throw exception
    143165        @Override
     
    147169                }
    148170                initDescriptorCache();
     171                initStatistics();
    149172
    150173                // Save replays
     
    160183                // Serialize replay descriptors
    161184                serialize(descriptorsByPath, descriptorFile.getAbsolutePath());
     185
     186                // Serialize statistics
     187                serialize(statistics, statisticsFile.getAbsolutePath());
     188
     189                super.save(replays);
    162190        }
    163191
     
    165193        public boolean contains(File replayFile) {
    166194                initDescriptorCache();
    167                 ReplayDescriptor descriptor = descriptorsByPath.get(replayFile.getAbsolutePath());
    168                 if (descriptor == null) {
    169                         return false;
    170                 }
    171                 return true;
     195                if (descriptorsByPath.containsKey(replayFile.getAbsolutePath())) {
     196                        return true;
     197                }
     198                return false;
    172199        }
    173200
     
    181208        public void delete(Replay... replays) {
    182209                initDescriptorCache();
     210                initStatistics();
    183211
    184212                for (Replay replay : replays) {
     
    192220                // Serialize replay descriptors
    193221                serialize(descriptorsByPath, descriptorFile.getAbsolutePath());
     222
     223                // Serialize statistics
     224                serialize(statistics, statisticsFile.getAbsolutePath());
     225
     226                super.delete(replays);
    194227        }
    195228
     
    243276                return storageDir.getAbsolutePath()+File.separator+FileUtil.fileHash(targetFile);
    244277        }
     278
     279        @Override
     280        public Statistics getStatistics() {
     281                initStatistics();
     282                return statistics;
     283        }
    245284}
  • src/main/java/de/erichseifert/warp/replays/sc2replay/SC2Replay_v2.java

    r63329fa r0a10c36  
    5757                addVersionSupport(SC2Replay_v2.class, "0.15.0.15449");
    5858                addVersionSupport(SC2Replay_v2.class, "0.16.0.15580");
     59                addVersionSupport(SC2Replay_v2.class, "0.17.0.15623");
    5960        }
    6061
  • src/main/resources/help/about.html

    r63329fa r0a10c36  
    66  <body>
    77    <h1>About WARP</h1>
    8     <p>This a snapshot of WARP 0.5. <br />
     8    <p>This a snapshot of WARP 0.6. <br />
    99    Keep up to date and visit the project page at <a href="http://trac.erichseifert.de/warp">http://trac.erichseifert.de/warp</a> for the newest version.</p>
    1010    <h1>Credits</h1>
Note: See TracChangeset for help on using the changeset viewer.