View Javadoc
1   /*
2    * $Source$
3    * $Revision$
4    *
5    * Copyright (C) 2007 Tim Pizey
6    *
7    * Part of Melati (http://melati.org), a framework for the rapid
8    * development of clean, maintainable web applications.
9    *
10   * Melati is free software; Permission is granted to copy, distribute
11   * and/or modify this software under the terms either:
12   *
13   * a) the GNU General Public License as published by the Free Software
14   *    Foundation; either version 2 of the License, or (at your option)
15   *    any later version,
16   *
17   *    or
18   *
19   * b) any version of the Melati Software License, as published
20   *    at http://melati.org
21   *
22   * You should have received a copy of the GNU General Public License and
23   * the Melati Software License along with this program;
24   * if not, write to the Free Software Foundation, Inc.,
25   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26   * GNU General Public License and visit http://melati.org to obtain the
27   * Melati Software License.
28   *
29   * Feel free to contact the Developers of Melati (http://melati.org),
30   * if you would like to work out a different arrangement than the options
31   * outlined here.  It is our intention to allow Melati to be used by as
32   * wide an audience as possible.
33   *
34   * This program is distributed in the hope that it will be useful,
35   * but WITHOUT ANY WARRANTY; without even the implied warranty of
36   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37   * GNU General Public License for more details.
38   *
39   * Contact details for copyright holder:
40   *
41   *     Tim Pizey <timp At paneris.org>
42   *     http://paneris.org/~timp
43   */
44  package org.melati.poem;
45  
46  import java.util.Comparator;
47  import java.util.Enumeration;
48  import java.util.NoSuchElementException;
49  import java.util.SortedMap;
50  
51  /**
52   * @author timp
53   * @since 8 Jun 2007
54   *
55   */
56  public class TableSortedMap<P extends Persistent> extends TableMap<P> 
57      implements SortedMap<Integer, P> {
58  
59    /**
60     * Constructor for setter injection.
61     */
62    public TableSortedMap() {
63    }
64  
65    /**
66     * Constructor for constructor injection.
67     * @param t
68     */
69    public TableSortedMap(Table<P> t) {
70      super(t);
71    }
72  
73    /**
74     * We use native ordering. 
75     */
76    @Override
77    public Comparator<Integer> comparator() {
78      return null;
79    }
80  
81    @Override
82    public Integer firstKey() {
83      if(table.cachedCount((String)null).count() == 0) 
84        throw new NoSuchElementException();
85      try { 
86        table.getObject(0);
87        return new Integer(0);
88      } catch (NoSuchRowPoemException e) { 
89        Persistent p = table.firstSelection(null);
90        return p.troid();
91      }
92    }
93  
94    /** 
95     * {@inheritDoc}
96     * 
97     * NOTE first attempt using table.getMostRecentTroid() does not take 
98     * account of deletion as mostRecentTroid is never decremented 
99     * @see java.util.SortedMap#lastKey()
100    */
101   @Override
102   public Integer lastKey() {
103     if(table.cachedCount((String)null).count() == 0) 
104       throw new NoSuchElementException();
105     Enumeration<P> them  = table.selection(null, table.getDatabase().getDbms().getQuotedName("id") + " DESC", false);
106     return them.nextElement().troid();
107   }
108 
109   @Override
110   public SortedMap<Integer, P> subMap(Integer fromKey, Integer toKey) {
111     throw new UnsupportedOperationException();
112   }
113 
114   @Override
115   public SortedMap<Integer, P> headMap(Integer toKey) {
116     throw new UnsupportedOperationException();
117   }
118 
119   @Override
120   public SortedMap<Integer, P> tailMap(Integer arg0) {
121     throw new UnsupportedOperationException();
122   }
123 
124 }