mirror of https://github.com/apache/lucene.git
Initial commit of a system of retrieving Torque-persisted objects from Document objects.
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@150760 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
57ad807bd9
commit
01bb49e1a4
|
@ -0,0 +1,94 @@
|
||||||
|
package search;
|
||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
* The Apache Software License, Version 1.1
|
||||||
|
*
|
||||||
|
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||||
|
* reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. The end-user documentation included with the redistribution,
|
||||||
|
* if any, must include the following acknowledgment:
|
||||||
|
* "This product includes software developed by the
|
||||||
|
* Apache Software Foundation (http://www.apache.org/)."
|
||||||
|
* Alternately, this acknowledgment may appear in the software itself,
|
||||||
|
* if and wherever such third-party acknowledgments normally appear.
|
||||||
|
*
|
||||||
|
* 4. The names "Apache" and "Apache Software Foundation" and
|
||||||
|
* "Apache Lucene" must not be used to endorse or promote products
|
||||||
|
* derived from this software without prior written permission. For
|
||||||
|
* written permission, please contact apache@apache.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "Apache",
|
||||||
|
* "Apache Lucene", nor may "Apache" appear in their name, without
|
||||||
|
* prior written permission of the Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||||
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many
|
||||||
|
* individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
* information on the Apache Software Foundation, please see
|
||||||
|
* <http://www.apache.org/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.torque.pool.DBConnection;
|
||||||
|
import org.apache.torque.util.Criteria;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An interface to shield clients from knowledge of the underlying persistence
|
||||||
|
* implementation.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:kelvin@relevanz.com">Kelvin Tan</a>
|
||||||
|
*/
|
||||||
|
public interface Broker
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns a list of objects given the Criteria.
|
||||||
|
*/
|
||||||
|
List doSelect(Criteria crit) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of objects given the Criteria.
|
||||||
|
*/
|
||||||
|
List doSelect(Criteria crit, DBConnection dbCon) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience method to obtain a single object via this broker.
|
||||||
|
*/
|
||||||
|
Object getSingleObject(Criteria crit) throws ObjectNotFoundException, Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an object using it's primary keys.
|
||||||
|
*/
|
||||||
|
Object retrieveByPK(String[] pk) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an object using it's primary key.
|
||||||
|
*/
|
||||||
|
Object retrieveByPK(String pk) throws Exception;
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
package search;
|
||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
* The Apache Software License, Version 1.1
|
||||||
|
*
|
||||||
|
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||||
|
* reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. The end-user documentation included with the redistribution,
|
||||||
|
* if any, must include the following acknowledgment:
|
||||||
|
* "This product includes software developed by the
|
||||||
|
* Apache Software Foundation (http://www.apache.org/)."
|
||||||
|
* Alternately, this acknowledgment may appear in the software itself,
|
||||||
|
* if and wherever such third-party acknowledgments normally appear.
|
||||||
|
*
|
||||||
|
* 4. The names "Apache" and "Apache Software Foundation" and
|
||||||
|
* "Apache Lucene" must not be used to endorse or promote products
|
||||||
|
* derived from this software without prior written permission. For
|
||||||
|
* written permission, please contact apache@apache.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "Apache",
|
||||||
|
* "Apache Lucene", nor may "Apache" appear in their name, without
|
||||||
|
* prior written permission of the Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||||
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many
|
||||||
|
* individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
* information on the Apache Software Foundation, please see
|
||||||
|
* <http://www.apache.org/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory class to obtain broker objects.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:kelvin@relevanz.com">Kelvin Tan</a>
|
||||||
|
*/
|
||||||
|
public abstract class BrokerFactory
|
||||||
|
{
|
||||||
|
public static Broker getBroker(Class bObj)
|
||||||
|
{
|
||||||
|
return new TorqueBroker(bObj);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
package search;
|
||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
* The Apache Software License, Version 1.1
|
||||||
|
*
|
||||||
|
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||||
|
* reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. The end-user documentation included with the redistribution,
|
||||||
|
* if any, must include the following acknowledgment:
|
||||||
|
* "This product includes software developed by the
|
||||||
|
* Apache Software Foundation (http://www.apache.org/)."
|
||||||
|
* Alternately, this acknowledgment may appear in the software itself,
|
||||||
|
* if and wherever such third-party acknowledgments normally appear.
|
||||||
|
*
|
||||||
|
* 4. The names "Apache" and "Apache Software Foundation" and
|
||||||
|
* "Apache Lucene" must not be used to endorse or promote products
|
||||||
|
* derived from this software without prior written permission. For
|
||||||
|
* written permission, please contact apache@apache.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "Apache",
|
||||||
|
* "Apache Lucene", nor may "Apache" appear in their name, without
|
||||||
|
* prior written permission of the Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||||
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many
|
||||||
|
* individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
* information on the Apache Software Foundation, please see
|
||||||
|
* <http://www.apache.org/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Thrown when a broker cannot be instantiated.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:kelvin@relevanz.com">Kelvin Tan</a>
|
||||||
|
*/
|
||||||
|
public class NoSuchBrokerException extends RuntimeException
|
||||||
|
{
|
||||||
|
|
||||||
|
/** Creates new GroupNotFoundException */
|
||||||
|
public NoSuchBrokerException(String message)
|
||||||
|
{
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
package search;
|
||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
* The Apache Software License, Version 1.1
|
||||||
|
*
|
||||||
|
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||||
|
* reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. The end-user documentation included with the redistribution,
|
||||||
|
* if any, must include the following acknowledgment:
|
||||||
|
* "This product includes software developed by the
|
||||||
|
* Apache Software Foundation (http://www.apache.org/)."
|
||||||
|
* Alternately, this acknowledgment may appear in the software itself,
|
||||||
|
* if and wherever such third-party acknowledgments normally appear.
|
||||||
|
*
|
||||||
|
* 4. The names "Apache" and "Apache Software Foundation" and
|
||||||
|
* "Apache Lucene" must not be used to endorse or promote products
|
||||||
|
* derived from this software without prior written permission. For
|
||||||
|
* written permission, please contact apache@apache.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "Apache",
|
||||||
|
* "Apache Lucene", nor may "Apache" appear in their name, without
|
||||||
|
* prior written permission of the Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||||
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many
|
||||||
|
* individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
* information on the Apache Software Foundation, please see
|
||||||
|
* <http://www.apache.org/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.torque.util.Criteria;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Thrown when a Torque-persisted object can't be found when it is expected.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:soonping@relevanz.com">Phang Soon-Ping</a>
|
||||||
|
*/
|
||||||
|
public class ObjectNotFoundException extends Exception
|
||||||
|
{
|
||||||
|
public ObjectNotFoundException(Class objectClass, String objectId)
|
||||||
|
{
|
||||||
|
super(generateMessage(objectClass, objectId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectNotFoundException(Criteria crit)
|
||||||
|
{
|
||||||
|
super("Criteria :'" + crit.toString() + "' did not result in any object "
|
||||||
|
+ " when one was expected.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String generateMessage(Class c, String id)
|
||||||
|
{
|
||||||
|
String cName = c.getName();
|
||||||
|
int lastDot = cName.lastIndexOf('.');
|
||||||
|
if (lastDot < 0)
|
||||||
|
{
|
||||||
|
return cName + " with id " + id + " not found.";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return cName.substring(lastDot + 1) + " with ID \"" + id + "\" not found.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,216 @@
|
||||||
|
package search;
|
||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
* The Apache Software License, Version 1.1
|
||||||
|
*
|
||||||
|
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||||
|
* reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. The end-user documentation included with the redistribution,
|
||||||
|
* if any, must include the following acknowledgment:
|
||||||
|
* "This product includes software developed by the
|
||||||
|
* Apache Software Foundation (http://www.apache.org/)."
|
||||||
|
* Alternately, this acknowledgment may appear in the software itself,
|
||||||
|
* if and wherever such third-party acknowledgments normally appear.
|
||||||
|
*
|
||||||
|
* 4. The names "Apache" and "Apache Software Foundation" and
|
||||||
|
* "Apache Lucene" must not be used to endorse or promote products
|
||||||
|
* derived from this software without prior written permission. For
|
||||||
|
* written permission, please contact apache@apache.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "Apache",
|
||||||
|
* "Apache Lucene", nor may "Apache" appear in their name, without
|
||||||
|
* prior written permission of the Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||||
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many
|
||||||
|
* individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
* information on the Apache Software Foundation, please see
|
||||||
|
* <http://www.apache.org/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.log4j.Category;
|
||||||
|
import org.apache.lucene.document.Document;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory class to materialize the objects which
|
||||||
|
* are search results.
|
||||||
|
*/
|
||||||
|
public abstract class SearchResultFactory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Name of method for objects which don't have a broker, but which need to
|
||||||
|
* be initialized somehow.
|
||||||
|
*/
|
||||||
|
public static final String INIT_OBJECT_METHOD = "initializeObject";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Arguments for INIT_OBJECT_METHOD.
|
||||||
|
*/
|
||||||
|
public static final Class[] INIT_OBJECT_METHOD_ARGS = new Class[]{String.class};
|
||||||
|
|
||||||
|
public static final Class[] SEARCH_RESULT_WRAPPER_CTOR_ARGS
|
||||||
|
= new Class[]{Object.class};
|
||||||
|
|
||||||
|
private static Category cat = Category.getInstance(SearchResultFactory.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Materializes the object represented by the
|
||||||
|
* {@link org.apache.lucene.document.Document}.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Objects which need to be returned via this method (essentially
|
||||||
|
* any object which implements
|
||||||
|
* {@link com.marketingbright.core.services.search.SearchResult},
|
||||||
|
* must either have an associated broker, or a no-arg ctor and
|
||||||
|
* INIT_OBJECT_METHOD with INIT_OBJECT_METHOD_ARGS.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public static Object getDocAsObject(Document doc) throws Exception
|
||||||
|
{
|
||||||
|
Class clazz = Class.forName(doc.get(DataSource.OBJECT_CLASS));
|
||||||
|
String id = doc.get(DataSource.OBJECT_IDENTIFIER);
|
||||||
|
Object o = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Broker broker = BrokerFactory.getBroker(clazz);
|
||||||
|
// assume it's a two-part compound pk if there's a comma
|
||||||
|
int indexOfComma = id.indexOf(',');
|
||||||
|
if (indexOfComma != -1)
|
||||||
|
{
|
||||||
|
String[] pks = new String[2];
|
||||||
|
pks[0] = id.substring(0, indexOfComma);
|
||||||
|
pks[1] = id.substring(indexOfComma + 1);
|
||||||
|
o = broker.retrieveByPK(pks);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
o = broker.retrieveByPK(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (NoSuchBrokerException nsbe)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Some objects don't have brokers or peers, this offers an
|
||||||
|
* alternative.
|
||||||
|
*/
|
||||||
|
o = clazz.newInstance();
|
||||||
|
invokeMethod(o, INIT_OBJECT_METHOD,
|
||||||
|
INIT_OBJECT_METHOD_ARGS, new Object[]{id});
|
||||||
|
}
|
||||||
|
String searchResultClassname = null;
|
||||||
|
searchResultClassname = doc.get(DataSource.SEARCH_RESULT_CLASSNAME);
|
||||||
|
return generateObject(searchResultClassname,
|
||||||
|
SEARCH_RESULT_WRAPPER_CTOR_ARGS,
|
||||||
|
new Object[]{o});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method to invoke an object's method.
|
||||||
|
* @param o Object to invoke the method on.
|
||||||
|
* @param methodname Name of the method to invoke.
|
||||||
|
* @param parameter Method parameters.
|
||||||
|
* @param args Arguments the method requires.
|
||||||
|
* @return Object returned by the method.
|
||||||
|
*/
|
||||||
|
private static Object invokeMethod(Object o, String methodname,
|
||||||
|
Class[] parameter, Object[] args)
|
||||||
|
{
|
||||||
|
Class c = o.getClass();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Method m = c.getMethod(methodname, parameter);
|
||||||
|
return m.invoke(o, args);
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodException nsme)
|
||||||
|
{
|
||||||
|
cat.error(nsme.getMessage() + " This method doesn't exist..", nsme);
|
||||||
|
}
|
||||||
|
catch (IllegalAccessException iae)
|
||||||
|
{
|
||||||
|
cat.error("No access to " + iae.getMessage() + ".", iae);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException ite)
|
||||||
|
{
|
||||||
|
cat.error("Trouble invoking " + ite.getMessage(), ite);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method to return an object based on its class name.
|
||||||
|
*
|
||||||
|
* @param type Class name of object to be generated
|
||||||
|
* @param clazz Class array of parameters.
|
||||||
|
* @param args Object array of arguments.
|
||||||
|
* @return Object
|
||||||
|
*/
|
||||||
|
public static Object generateObject(String className,
|
||||||
|
Class[] clazz,
|
||||||
|
Object[] args)
|
||||||
|
{
|
||||||
|
Object o = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Class c = Class.forName(className);
|
||||||
|
Constructor con = c.getConstructor(clazz);
|
||||||
|
if (con != null)
|
||||||
|
{
|
||||||
|
o = con.newInstance(args);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new InstantiationException("Constructor with arguments:" + clazz.toString() + " non-existent.");
|
||||||
|
}
|
||||||
|
catch (ClassNotFoundException cnfe)
|
||||||
|
{
|
||||||
|
cat.error(cnfe.getMessage() + " No class named '" + className + "' was found.", cnfe);
|
||||||
|
}
|
||||||
|
catch (InstantiationException ie)
|
||||||
|
{
|
||||||
|
cat.error(ie.getMessage() + " Class named '" + className + "' could not be instantiated.", ie);
|
||||||
|
}
|
||||||
|
catch (IllegalAccessException iae)
|
||||||
|
{
|
||||||
|
cat.error(iae.getMessage() + " No access to class named '" + className + "'.", iae);
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodException nsme)
|
||||||
|
{
|
||||||
|
cat.error(nsme.getMessage() + " No method in class named '" + className + "'.", nsme);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException ite)
|
||||||
|
{
|
||||||
|
cat.error(ite.getMessage() + " in class named '" + className + "'.", ite);
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,203 @@
|
||||||
|
package search;
|
||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
* The Apache Software License, Version 1.1
|
||||||
|
*
|
||||||
|
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||||
|
* reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. The end-user documentation included with the redistribution,
|
||||||
|
* if any, must include the following acknowledgment:
|
||||||
|
* "This product includes software developed by the
|
||||||
|
* Apache Software Foundation (http://www.apache.org/)."
|
||||||
|
* Alternately, this acknowledgment may appear in the software itself,
|
||||||
|
* if and wherever such third-party acknowledgments normally appear.
|
||||||
|
*
|
||||||
|
* 4. The names "Apache" and "Apache Software Foundation" and
|
||||||
|
* "Apache Lucene" must not be used to endorse or promote products
|
||||||
|
* derived from this software without prior written permission. For
|
||||||
|
* written permission, please contact apache@apache.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "Apache",
|
||||||
|
* "Apache Lucene", nor may "Apache" appear in their name, without
|
||||||
|
* prior written permission of the Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||||
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many
|
||||||
|
* individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
* information on the Apache Software Foundation, please see
|
||||||
|
* <http://www.apache.org/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import org.apache.log4j.Category;
|
||||||
|
import org.apache.torque.om.ComboKey;
|
||||||
|
import org.apache.torque.om.ObjectKey;
|
||||||
|
import org.apache.torque.om.StringKey;
|
||||||
|
import org.apache.torque.pool.DBConnection;
|
||||||
|
import org.apache.torque.util.Criteria;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Torque implementation of the Broker interface.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:soonping@relevanz.com">Phang Soon-Ping</a>
|
||||||
|
*/
|
||||||
|
public class TorqueBroker implements Broker
|
||||||
|
{
|
||||||
|
protected static Map classMap = new Hashtable();
|
||||||
|
private static Category cat = Category.getInstance(TorqueBroker.class);
|
||||||
|
private static final String PEER_SUFFIX = "Peer";
|
||||||
|
|
||||||
|
protected Object peer;
|
||||||
|
|
||||||
|
public TorqueBroker(Class bObj) throws NoSuchBrokerException
|
||||||
|
{
|
||||||
|
String className = bObj.getName();
|
||||||
|
peer = classMap.get(bObj);
|
||||||
|
if (peer == null)
|
||||||
|
{
|
||||||
|
String peerClassName = className + PEER_SUFFIX;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
peer = Class.forName(peerClassName).newInstance();
|
||||||
|
classMap.put(bObj, peer);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new NoSuchBrokerException("Unable to obtain a broker for "
|
||||||
|
+ bObj.getName() + '.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized List doSelect(Criteria crit) throws Exception
|
||||||
|
{
|
||||||
|
return (List) invokeMethod(
|
||||||
|
peer,
|
||||||
|
"doSelect",
|
||||||
|
new Class[]{Criteria.class},
|
||||||
|
new Object[]{crit}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized List doSelect(Criteria crit, DBConnection dbCon)
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
return (List) invokeMethod(
|
||||||
|
peer,
|
||||||
|
"doSelect",
|
||||||
|
new Class[]{Criteria.class, DBConnection.class},
|
||||||
|
new Object[]{crit, dbCon}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized Object getSingleObject(Criteria crit)
|
||||||
|
throws ObjectNotFoundException, Exception
|
||||||
|
{
|
||||||
|
List matchingObjects = doSelect(crit);
|
||||||
|
if (!matchingObjects.isEmpty())
|
||||||
|
{
|
||||||
|
return matchingObjects.get(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new ObjectNotFoundException(crit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized Object retrieveByPK(String[] pk) throws Exception
|
||||||
|
{
|
||||||
|
ObjectKey oKey = null;
|
||||||
|
if (pk.length > 1)
|
||||||
|
{
|
||||||
|
StringKey[] strKeys = new StringKey[pk.length];
|
||||||
|
for (int i = 0; i < pk.length; i++)
|
||||||
|
{
|
||||||
|
strKeys[i] = new StringKey(pk[i]);
|
||||||
|
}
|
||||||
|
oKey = new ComboKey(strKeys);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oKey = new StringKey(pk[0]);
|
||||||
|
}
|
||||||
|
return invokeMethod(
|
||||||
|
peer,
|
||||||
|
"retrieveByPK",
|
||||||
|
new Class[]{ObjectKey.class},
|
||||||
|
new Object[]{oKey});
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized Object retrieveByPK(String pk) throws Exception
|
||||||
|
{
|
||||||
|
ObjectKey oKey = new StringKey(pk);
|
||||||
|
return invokeMethod(
|
||||||
|
peer,
|
||||||
|
"retrieveByPK",
|
||||||
|
new Class[]{ObjectKey.class},
|
||||||
|
new Object[]{oKey});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method to invoke an object's method.
|
||||||
|
* @param o Object to invoke the method on.
|
||||||
|
* @param methodname Name of the method to invoke.
|
||||||
|
* @param parameter Method parameters.
|
||||||
|
* @param args Arguments the method requires.
|
||||||
|
* @return Object returned by the method.
|
||||||
|
*/
|
||||||
|
private static Object invokeMethod(Object o, String methodname,
|
||||||
|
Class[] parameter, Object[] args)
|
||||||
|
{
|
||||||
|
Class c = o.getClass();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Method m = c.getMethod(methodname, parameter);
|
||||||
|
return m.invoke(o, args);
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodException nsme)
|
||||||
|
{
|
||||||
|
cat.error(nsme.getMessage() + " This method doesn't exist..", nsme);
|
||||||
|
}
|
||||||
|
catch (IllegalAccessException iae)
|
||||||
|
{
|
||||||
|
cat.error("No access to " + iae.getMessage() + ".", iae);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException ite)
|
||||||
|
{
|
||||||
|
cat.error("Trouble invoking " + ite.getMessage(), ite);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue