Changeset 062a7a9


Ignore:
Timestamp:
Jul 17, 2010, 12:42:33 PM (8 years ago)
Author:
Michael Seifert <mseifert@…>
Branches:
master
Children:
a76ff72
Parents:
21cbbb6
Message:

Parsing a new directory causes the old data to be deleted;

Added GUI state for initializing the replay table

Location:
src/main/java/de/erichseifert/warp
Files:
6 edited

Legend:

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

    r21cbbb6 r062a7a9  
    2424import java.io.File;
    2525import java.util.Collection;
    26 import java.util.HashSet;
    2726import java.util.Map;
    2827import java.util.Set;
     
    4948        private static final int walkDepth = 3;
    5049
    51         private final Set<ReplayDataChangeListener> listeners;
    5250        private final ReplayStorage storage;
    5351        private final ReplayParserGUI gui;
     
    9290         */
    9391        public WARP() {
    94                 listeners = new HashSet<ReplayDataChangeListener>();
    95 
    96 
    9792                ReplayStorage serStorage = new SerializingStorage();
    9893                storage = new BufferedStorage(serStorage);
     
    10095                gui = new ReplayParserGUI(this);
    10196                gui.setVisible(true);
     97                gui.setReplays(storage.getDescriptors());
    10298
    103                 for (ReplayDescriptor descriptor : storage.getDescriptors()) {
    104                         fireReplayDataChanged(null, descriptor);
     99                boolean parsingComplete = Settings.getInstance().isParsingComplete();
     100                if (!parsingComplete) {
     101                        gui.resumeParsing();
    105102                }
    106103        }
     
    145142                }
    146143
     144                String oldDir = Settings.getInstance().getReplayDir();
     145                if (!oldDir.equals(dir)) {
     146                        // Clear storage
     147                        storage.clear();
     148                }
     149
    147150                // Store selected directory for the next startup
    148151                Settings.getInstance().setReplayDir(dir.getPath());
     
    180183        public void addDataChangeListener(ReplayDataChangeListener listener) {
    181184                storage.addReplayDataChangeListener(listener);
    182                 listeners.add(listener);
    183185        }
    184186
     
    189191        public void removeDataChangeListener(ReplayDataChangeListener listener) {
    190192                storage.removeReplayDataChangeListener(listener);
    191                 listeners.remove(listener);
    192         }
    193 
    194         /**
    195          * Notifies all listeners that new replay meta data is available.
    196          * @param descriptorOld Descriptor of the old replay.
    197          * @param descriptorNew Descriptor of the new replay.
    198          */
    199         protected void fireReplayDataChanged(ReplayDescriptor descriptorOld, ReplayDescriptor descriptorNew) {
    200                 ReplayChangeEvent evt = new ReplayChangeEvent(storage, descriptorOld, descriptorNew);
    201                 for (ReplayDataChangeListener listener : listeners) {
    202                         listener.replayChanged(evt);
    203                 }
    204193        }
    205194}
  • src/main/java/de/erichseifert/warp/gui/ReplayParserGUI.java

    r21cbbb6 r062a7a9  
    9595public class ReplayParserGUI extends JFrame implements ReplayDataChangeListener, ProgressListener {
    9696        private static enum State {
    97                 PARSING(true, "Parsing replays..."),
    98                 READY(false, "Ready");
     97                PARSING(true, false, "Parsing replays..."),
     98                BUILDING_DB(true, true, "Building up database..."),
     99                READY(false, false, "Ready");
    99100
    100101                private final boolean progressBarNeeded;
     102                private final boolean indeterminate;
    101103                private final String statusMessage;
    102104
    103                 private State(boolean progressBarNeeded, String statusMessage) {
     105                private State(boolean progressBarNeeded, boolean indeterminate, String statusMessage) {
    104106                        this.progressBarNeeded = progressBarNeeded;
     107                        this.indeterminate = indeterminate;
    105108                        this.statusMessage = statusMessage;
    106109                }
     
    108111                public boolean isProgressBarNeeded() {
    109112                        return progressBarNeeded;
     113                }
     114
     115                public boolean isIndeterminate() {
     116                        return indeterminate;
    110117                }
    111118
     
    189196                                        setState(State.PARSING);
    190197                                        File dir = fileChooser.getSelectedFile();
     198                                        replayTableModel.setRowCount(0);
    191199                                        ReplayParserGUI.this.warp.parseDir(dir, ReplayParserGUI.this);
    192200                                        parsedDir = dir;
     
    449457                setSearchEnabled(false);
    450458                setState(State.READY);
    451 
    452                 boolean parsingComplete = Settings.getInstance().isParsingComplete();
    453                 if (!parsingComplete) {
    454                         int userChoice = JOptionPane.showConfirmDialog(this, "The replay parsing process has not been finished yet. Do you want to continue?", "Parsing incomplete", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
    455                         if (userChoice == JOptionPane.YES_OPTION) {
    456                                 setState(State.PARSING);
    457                                 warp.parseDir(parsedDir, this);
    458                         }
    459                 }
    460459        }
    461460
     
    473472                                }
    474473                        }
    475                 }
    476 
    477                 if (replayTableModel.getRowCount() > 0) {
    478                         openAction.setEnabled(false);
    479                         setSearchEnabled(true);
    480                 }
    481                 else {
    482                         setSearchEnabled(false);
    483                         openAction.setEnabled(true);
     474
     475                        if (replayTableModel.getRowCount() == 0) {
     476                                setSearchEnabled(false);
     477                        }
    484478                }
    485479        }
     
    491485                if (elementsProcessed == elementsTotal) {
    492486                        setState(State.READY);
    493                         JOptionPane.showMessageDialog(this, "All replays have been parsed.", "Parsing complete", JOptionPane.INFORMATION_MESSAGE);
     487                        if (replayTableModel.getRowCount() > 0) {
     488                                setSearchEnabled(true);
     489                        }
     490                        JOptionPane.showMessageDialog(this, elementsTotal+" replays have been parsed.", "Parsing complete", JOptionPane.INFORMATION_MESSAGE);
    494491                }
    495492        }
     
    510507                        parsingProgress.setEnabled(false);
    511508                }
     509                parsingProgress.setIndeterminate(state.isIndeterminate());
    512510
    513511                statusMessage.setText(state.getStatusMessage());
     512
     513                // Special cases
     514                if (state == State.PARSING) {
     515                        openAction.setEnabled(false);
     516                }
     517                else {
     518                        openAction.setEnabled(true);
     519                }
    514520        }
    515521
     
    526532                filterField.setEnabled(enabled);
    527533        }
     534
     535        public void setReplays(Set<ReplayDescriptor> descriptors) {
     536                setState(State.BUILDING_DB);
     537                replayTableModel.setRowCount(0);
     538                for (ReplayDescriptor descriptor : descriptors) {
     539                        replayTableModel.addRow(descriptorToRow(descriptor));
     540                }
     541                if (replayTableModel.getRowCount() > 0) {
     542                        setSearchEnabled(true);
     543                }
     544                else {
     545                        setSearchEnabled(false);
     546                }
     547                setState(State.READY);
     548        }
     549
     550        public void resumeParsing() {
     551                JCheckBox rememberDecision = new JCheckBox("Remember my decision");
     552                rememberDecision.setEnabled(false);
     553                Object[] message = new Object[2];
     554                message[0] = "The replay parsing process has not been finished yet. Do you want to continue?";
     555                message[1] = rememberDecision;
     556                int userChoice = JOptionPane.showConfirmDialog(
     557                        this,
     558                        message,
     559                        "Parsing incomplete",
     560                        JOptionPane.YES_NO_OPTION,
     561                        JOptionPane.QUESTION_MESSAGE
     562                );
     563                if (userChoice == JOptionPane.YES_OPTION) {
     564                        setState(State.PARSING);
     565                        warp.parseDir(parsedDir, this);
     566                }
     567        }
    528568}
  • src/main/java/de/erichseifert/warp/io/BufferedStorage.java

    r21cbbb6 r062a7a9  
    161161                return replay;
    162162        }
     163
     164        @Override
     165        public void clear() {
     166                replayBuffer.clear();
     167                storage.clear();
     168        }
    163169}
  • src/main/java/de/erichseifert/warp/io/MemoryStorage.java

    r21cbbb6 r062a7a9  
    125125                return descriptors;
    126126        }
     127
     128        @Override
     129        public void clear() {
     130                cache.clear();
     131        }
    127132}
  • src/main/java/de/erichseifert/warp/io/ReplayStorage.java

    r21cbbb6 r062a7a9  
    8787
    8888        Set<String> getIndexNames();
     89
     90        void clear();
    8991}
  • src/main/java/de/erichseifert/warp/io/SerializingStorage.java

    r21cbbb6 r062a7a9  
    352352                return descriptors;
    353353        }
     354
     355        @Override
     356        public void clear() {
     357                storageDir.delete();
     358                lastSavedReplay = null;
     359                indexer = null;
     360                statistics = null;
     361                if (descriptorsById != null) {
     362                        descriptorsById.clear();
     363                }
     364        }
    354365}
Note: See TracChangeset for help on using the changeset viewer.