Changeset b3776e1


Ignore:
Timestamp:
Jul 15, 2010, 9:38:00 PM (8 years ago)
Author:
Michael Seifert <mseifert@…>
Branches:
master
Children:
618ba61
Parents:
f851f4a
Message:

Added wildcard support for normalization in FullTextIndex?;

Fixed a bugs that caused unsigned bytes to be parsed as negative values

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

Legend:

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

    rf851f4a rb3776e1  
    407407                        public void mouseClicked(MouseEvent e) {
    408408                                if (e.isPopupTrigger()) {
     409                                        int clickedRow = replayTable.rowAtPoint(e.getPoint());
     410                                        replayTable.getSelectionModel().setSelectionInterval(clickedRow, clickedRow);
    409411                                        replayTablePopup.show(e.getComponent(), e.getX(), e.getY());
    410412                                }
     
    413415                        @Override
    414416                        public void mousePressed(MouseEvent e) {
    415                                 int clickedRow = replayTable.rowAtPoint(e.getPoint());
    416                                 replayTable.getSelectionModel().setSelectionInterval(clickedRow, clickedRow);
    417417                                if (e.isPopupTrigger()) {
     418                                        int clickedRow = replayTable.rowAtPoint(e.getPoint());
     419                                        replayTable.getSelectionModel().setSelectionInterval(clickedRow, clickedRow);
    418420                                        replayTablePopup.show(e.getComponent(), e.getX(), e.getY());
    419421                                }
  • src/main/java/de/erichseifert/warp/io/search/indices/FullTextIndex.java

    rf851f4a rb3776e1  
    2323
    2424import java.util.HashSet;
     25import java.util.LinkedList;
     26import java.util.List;
     27import java.util.Map;
    2528import java.util.Set;
     29import java.util.regex.Matcher;
     30import java.util.regex.Pattern;
    2631
    2732import de.erichseifert.warp.io.search.IndexedProperty;
     
    4146 */
    4247public class FullTextIndex extends AbstractIndex {
    43         private String splitPattern;
     48        private static final String WILDCARD = "*";
     49        private static final String WILDCARD_REGEX = "\\*";
     50        private static final String splitPattern = "\\b";
    4451
    4552        /**
     
    5158        public FullTextIndex(ReplayIndexer indexer, IndexedProperty property) {
    5259                super(indexer, property);
    53                 splitPattern = "\\W+";
    5460        }
    5561
     
    6167         * @return Normalized string.
    6268         */
    63         private String[] normalize(String str) {
     69        private List<String> normalize(String str, boolean keepWildcard) {
     70                LinkedList<String> results = new LinkedList<String>();
    6471                str = str.toLowerCase();
    65                 return str.split(splitPattern);
     72                String[] splitQuery = str.split(splitPattern);
     73                String wildcard = "";
     74                Pattern wordPattern = Pattern.compile("\\w+");
     75                for (String queryPart : splitQuery) {
     76                        Matcher matcher = wordPattern.matcher(queryPart);
     77                        if (matcher.matches()) {
     78                                results.add(queryPart+WILDCARD);
     79                                wildcard = "";
     80                        }
     81                        else if (keepWildcard) {
     82                                if (queryPart.endsWith(WILDCARD)) {
     83                                        wildcard = WILDCARD;
     84                                }
     85                                else if (queryPart.startsWith(WILDCARD)) {
     86                                         results.add(results.pop()+WILDCARD);
     87                                }
     88                        }
     89                }
     90                return results;
    6691        }
    6792
     
    7297                }
    7398                Object value = getValue(node);
    74                 String[] normalizedValue = normalize(value.toString());
     99                List<String> normalizedValue = normalize(value.toString(), false);
    75100                for (String part : normalizedValue) {
    76101                        put(part, node);
     
    93118
    94119                Object value = getValue(node);
    95                 String[] normalizedValue = normalize(value.toString());
     120                List<String> normalizedValue = normalize(value.toString(), false);
    96121                for (String part : normalizedValue) {
    97122                        if (contains(part)) {
     
    102127        }
    103128
    104         /**
    105          * Returns the regular expression used to normalize the search values.
    106          * @return
    107          */
    108         public String getSplitPattern() {
    109                 return splitPattern;
    110         }
    111 
    112         /**
    113          * Sets the regular expression used to normalize the search values.
    114          * @param splitPattern Split pattern to be set.
    115          */
    116         public void setSplitPattern(String splitPattern) {
    117                 this.splitPattern = splitPattern;
    118         }
    119 
    120129        @Override
    121130        public Set<Node> search(Object query, Range range) {
    122131                Set<Node> results = new HashSet<Node>();
    123                 String[] normalizedValue = normalize(query.toString());
     132                String queryString = query.toString();
     133                List<String> normalizedValue = normalize(queryString, true);
    124134                for (String part : normalizedValue) {
    125                         Set<Node> partResults = get(part);
    126                         if (partResults != null) {
    127                                 results.addAll(partResults);
     135                        if (part.contains(WILDCARD)) {
     136                                String queryRegex = part.replaceAll(WILDCARD_REGEX, ".*?");
     137                                Pattern regexPattern = Pattern.compile(queryRegex);
     138                                for (Map.Entry<Object, Set<Node>> entry : entrySet()) {
     139                                        String value = (String) entry.getKey();
     140                                        Set<Node> partResults = entry.getValue();
     141                                        Matcher matcher = regexPattern.matcher(value);
     142                                        if (matcher.matches()) {
     143                                                results.addAll(partResults);
     144                                        }
     145                                }
     146                        }
     147                        else {
     148                                Set<Node> partResults = get(part);
     149                                if (partResults != null) {
     150                                        results.addAll(partResults);
     151                                }
    128152                        }
    129153                }
  • src/main/java/de/erichseifert/warp/replays/sc2replay/SC2ReplayDetail.java

    rf851f4a rb3776e1  
    5151                        src.position(src.position()+4);
    5252
    53                         int nicknameLength = src.get()/2;
     53                        int nicknameLength = (src.get() & 0xFF)/2;
    5454                        nickname = ReplayUtil.getString(src, nicknameLength);
    5555
     
    158158                src.position(src.position()+9);
    159159
    160                 int minimapFilenameLength = src.get()/2;
     160                int minimapFilenameLength = (src.get() & 0xFF)/2;
    161161                String minimapFilename = ReplayUtil.getString(src, minimapFilenameLength);
    162162
  • src/main/java/de/erichseifert/warp/util/ReplayUtil.java

    rf851f4a rb3776e1  
    4747         */
    4848        public static String getString(ByteBuffer src) {
    49                 int length = src.get();
     49                int length = src.get() & 0xFF;
    5050                return getString(src, length);
    5151        }
Note: See TracChangeset for help on using the changeset viewer.