/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.build.indexer; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Map.Entry; /** * Represents a word of the full text index. */ public class Word { /** * The word text. */ String name; /** * The pages map. */ HashMap<Page, Weight> pages = new HashMap<Page, Weight>(); private ArrayList<Weight> weightList; Word(String name) { this.name = name; } /** * Add a page to this word. * * @param page the page * @param weight the weight of this word in this page */ void addPage(Page page, int weight) { Weight w = pages.get(page); if (w == null) { w = new Weight(); w.page = page; pages.put(page, w); } w.value += weight; page.relations++; } public String toString() { return name + ":" + pages; } /** * Add all data of the other word to this word. * * @param other the other word */ void addAll(Word other) { for (Entry<Page, Weight> entry : other.pages.entrySet()) { Page p = entry.getKey(); Weight w = entry.getValue(); addPage(p, w.value); } } ArrayList<Weight> getSortedWeights() { if (weightList == null) { weightList = new ArrayList<Weight>(pages.values()); Collections.sort(weightList, new Comparator<Weight>() { public int compare(Weight w0, Weight w1) { return w0.value < w1.value ? 1 : w0.value == w1.value ? 0 : -1; } }); } return weightList; } }