1   /*
2    *  MutableWordImpl.java
3    *
4    *  Copyright (c) 1998-2005, The University of Sheffield.
5    *
6    *  This file is part of GATE (see http://gate.ac.uk/), and is free
7    *  software, licenced under the GNU Library General Public License,
8    *  Version 2, June 1991 (in the distribution as file licence.html,
9    *  and also available at http://gate.ac.uk/gate/licence.html).
10   *
11   *  Kalina Bontcheva, 21/February/2003
12   *
13   *  $Id: MutableWordImpl.java,v 1.7 2005/01/11 13:51:36 ian Exp $
14   */
15  
16  package gate.lexicon;
17  
18  import java.io.Serializable;
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import gate.util.Out;
23  
24  public class MutableWordImpl implements MutableWord, Serializable {
25    private String lemma = "";
26    private List senseList = new ArrayList();
27    static final long serialVersionUID = -2448794632943663270L;
28  
29  
30    public MutableWordImpl(String newLemma) {
31      this.lemma = newLemma;
32    }
33  
34    public LexKBWordSense addSense(MutableLexKBSynset wordSynset) {
35      return addSense(senseList.size(), wordSynset);
36    }
37  
38    public LexKBWordSense addSense(int index, MutableLexKBSynset wordSynset) {
39      MutableLexKBSynset newSynset = wordSynset;
40      if (newSynset == null)
41        throw new RuntimeException("A valid synset must be provided!");
42      MutableLexKBWordSense newSense = new MutableLexKBWordSenseImpl(
43          this, newSynset, index, newSynset.getWordSenses().size());
44      senseList.add(index, newSense);
45      newSynset.addWordSense(newSense);
46      return newSense;
47    }
48  
49    public List getWordSenses() {
50      return senseList;
51    }
52  
53    public String getLemma() {
54      return lemma;
55    }
56  
57    public int getSenseCount() {
58      return senseList.size();
59    }
60  
61    public void removeSenses() {
62      //doing back to front, so no need to shift the numbers of the other senses,
63      //as they are all getting removed anyway
64      for (int i= senseList.size()-1; i >=0; i--) {
65        LexKBWordSense theSense = (LexKBWordSense) senseList.get(i);
66        removeSense(theSense);
67      }
68    }
69  
70    public void removeSense(LexKBWordSense theSense) {
71      if (! (theSense instanceof MutableLexKBWordSense)) {
72        Out.prln("Could not remove sense: " + theSense
73                 + "because it is not mutable");
74        return;
75      }
76      LexKBSynset theSynset = ((MutableLexKBWordSense)theSense).getSynset();
77      if (! (theSynset instanceof MutableLexKBSynset)) {
78        Out.prln("Could not remove sense: " + theSense
79                 + "because it is not mutable");
80        return;
81      }
82      ((MutableLexKBSynset)theSynset).removeSense(theSense);
83  
84      for (int i=theSense.getSenseNumber() + 1; i < senseList.size(); i++) {
85        LexKBWordSense nextSense = (LexKBWordSense) senseList.get(i);
86        if (! (nextSense instanceof MutableLexKBWordSense))
87          continue;
88        //decrease the sense number by 1
89        ((MutableLexKBWordSense)nextSense).setSenseNumber(
90            nextSense.getSenseNumber()-1);
91      }
92      senseList.remove(theSense);
93    }
94  }
95