| /* |
| * $Id$ |
| * |
| * Copyright 2001-2004 The Apache Software Foundation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * This is an alternative to the separate Search* classes in this package. |
| */ |
| |
| package org.apache.artimus.article; |
| |
| |
| import java.util.Collection; |
| |
| import org.apache.scaffold.model.ModelBeanBase; |
| import org.apache.scaffold.model.ModelException; |
| import org.apache.scaffold.model.ModelResult; |
| import org.apache.scaffold.model.ModelResultBase; |
| |
| import org.apache.artimus.lang.Messages; |
| import org.apache.artimus.sql.Data; |
| import org.apache.artimus.search.Engine; |
| |
| |
| /** |
| * Search queries. |
| * @author Ted Husted |
| * @version $Rev$ $Date$ |
| */ |
| public class Search extends ModelForm { |
| |
| |
| // ------------------------------------------------------------ Public Methods |
| |
| |
| /** |
| * Execute model for this bean, and return outcome in ModelResult. |
| * @exception Collects and returns any Exceptions |
| * @returns Null on success, or a collection of Exceptions |
| */ |
| public ModelResult execute(Object source, Object target) |
| throws ModelException { |
| |
| Collection result = select(target); |
| if (result==null) { |
| // :TODO: Throw specific exception and catch in helper |
| throw new ModelException(Messages.INVALID_QUERY_EXCEPTION); |
| } |
| return new ModelResultBase(result); |
| |
| } |
| |
| |
| /** |
| * Select <code>key</code> record. |
| * :TODO: Separate object for each if. |
| * @returns Number of records selected. |
| */ |
| public Collection select(Object target) throws ModelException { |
| |
| String key = getKey(); |
| String column = getColumn(); |
| |
| try { |
| |
| // -- SEARCH ALL --- must be first |
| if (("".equals(key))) { |
| return Data.articleSearchCurrent( |
| target); |
| } |
| |
| // -- SELECT ARTICLE -- must be second |
| if ((column==null) || |
| ("".equals(column)) || |
| ("key".equals(column)) || |
| ("article".equals(column))) { |
| return Data.articleSelect(getKeyInt(), |
| target); |
| } |
| |
| // -- SEARCH LAST --- |
| if (("last".equals(column))) { |
| return Data.articleSearchLast(getKeyInt(), |
| target); |
| } |
| |
| // -- SEARCH HOURS -- |
| if ("hours".equals(column)) { |
| return Data.articleSearchHours(getKeyInt(), |
| target); |
| } |
| |
| // -- SEARCH TITLE -- |
| if ("title".equals(column)) { |
| return Engine.articleSearchTitle(getKey(), |
| target); |
| } |
| |
| |
| // -- SEARCH AUTHOR -- |
| if ("author".equals(column)) { |
| return Engine.articleSearchCreator(getKey(), |
| target); |
| } |
| |
| // -- SEARCH CONTENT -- |
| if ("content".equals(column)) { |
| return Engine.articleSearchContent(getKey(), |
| target); |
| } |
| } |
| catch (Exception e) { |
| throw new ModelException(Messages.SELECT_EXCEPTION,e); |
| } |
| |
| return null; |
| } |
| |
| } |