00001 /* 00002 * OpenMobileIS - a free Java(TM) Framework for mobile applications Java(TM) 00003 * Copyright (C) 2004-2005 Philippe Delrieu 00004 * All rights reserved. 00005 * Contact: openmobileis@e-care.fr 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the Free Software 00019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00020 * USA 00021 * 00022 * Author : Philippe Delrieu 00023 * 00024 * Modifications : 00025 * 2004 Creation P.Delrieu 00026 * 2004 Modified by Romain Beaugrand 00027 * 00028 */ 00029 package org.openmobileis.database.fastobjectdb.db.query.soda; 00030 00031 import org.openmobileis.database.fastobjectdb.FODBStringIndexDescriptor; 00032 import org.openmobileis.database.fastobjectdb.db.exception.FODBException; 00033 import org.openmobileis.database.fastobjectdb.db.index.FODBIndex; 00034 import org.openmobileis.database.fastobjectdb.db.index.FODBIntIndex; 00035 import org.openmobileis.database.fastobjectdb.db.index.FODBLongIndex; 00036 import org.openmobileis.database.fastobjectdb.db.index.FODBStringIndex; 00037 00044 public final class FODBSodaIndexPath { 00045 private FODBIndex index; 00046 private SodaIndexComparator comparator; 00050 public FODBSodaIndexPath(FODBIndex index) { 00051 super(); 00052 this.index = index; 00053 if (index instanceof FODBStringIndex) { 00054 FODBStringIndexDescriptor descr = (FODBStringIndexDescriptor)index.getIndexDescriptor(); 00055 comparator = new SodaStringIndexComparator(descr.isCaseSensitive()); 00056 } else if (index instanceof FODBIntIndex) { 00057 comparator = new SodaIntIndexComparator(); 00058 } else if (index instanceof FODBLongIndex) { 00059 comparator = new SodaLongIndexComparator(); 00060 } 00061 } 00062 SodaIndexComparator getIndexComparator() { 00063 return comparator; 00064 } 00065 00066 void mergeIndexComporator(SodaIndexComparator index) { 00067 comparator.mergeIndexComporator(index); 00068 } 00069 00070 public String getIndexMember() { 00071 return this.index.getIndexDescriptor().getMemberName(); 00072 } 00073 00074 public boolean setOperand(Object ope) { 00075 if (comparator != null) { 00076 return comparator.setOperand(ope); 00077 } 00078 return false; 00079 } 00080 public long[] execute() throws FODBException { 00081 return index.query(comparator); 00082 } 00083 00084 public boolean addComparator(int comp) { 00085 if (comparator != null) { 00086 return comparator.addComparator(comp); 00087 } 00088 return false; 00089 00090 } 00091 00092 }