Coverage Report - org.apache.commons.scaffold.sql.AccessBase
 
Classes in this File Line Coverage Branch Coverage Complexity
AccessBase
0%
0/62
0%
0/6
3
 
 1  
 /*
 2  
  * Copyright 2001,2004 The Apache Software Foundation.
 3  
  * 
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  * 
 8  
  *      http://www.apache.org/licenses/LICENSE-2.0
 9  
  * 
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 
 17  
 package org.apache.commons.scaffold.sql;
 18  
 
 19  
 
 20  
 import java.sql.SQLException;
 21  
 import java.util.Collection;
 22  
 import java.util.Properties;
 23  
 
 24  
 
 25  
 import org.apache.commons.scaffold.lang.ParameterException;
 26  
 import org.apache.commons.scaffold.lang.PopulateException;
 27  
 import org.apache.commons.scaffold.lang.PropertiesException;
 28  
 import org.apache.commons.scaffold.lang.ResourceException;
 29  
 
 30  
 import org.apache.commons.scaffold.lucene.SearchUtils;
 31  
 import org.apache.commons.scaffold.lucene.Engine;
 32  
 
 33  
 import org.apache.commons.scaffold.sql.StatementUtils;
 34  
 
 35  
 
 36  
 /**
 37  
  * Common data access methods.
 38  
  *
 39  
  * @author Ted Husted
 40  
  * @author OK State DEQ
 41  
  * @version $Revision: 155464 $ $Date: 2005-02-26 13:26:54 +0000 (Sat, 26 Feb 2005) $
 42  
  * @deprecated Use StorageBean instead.
 43  
  */
 44  0
 public class AccessBase {
 45  
 
 46  
 
 47  
     /**
 48  
      * [:TODO: Javadoc]
 49  
      */
 50  0
     public static String KEYS_NEXT = "keys.next";
 51  
 
 52  
     /**
 53  
      * [:TODO: Javadoc]
 54  
      */
 55  0
     public static String KEYS_INC = "keys.inc";
 56  
 
 57  
 
 58  
 
 59  
 // ----------------------------------------------------------- Commands
 60  
 
 61  
     /**
 62  
      * Our command string properties.
 63  
      * Can be loaded from an external properties file at startup.
 64  
      */
 65  
     private static Properties commands;
 66  
 
 67  
 
 68  
     /**
 69  
      * Retrieve command from <code>commands</code> Properties for
 70  
      * <code>key</code>.
 71  
      *
 72  
      * @fixme Could use a merge feature to reuse common substrings,
 73  
      * like table names ["SELECT ${searchFields} FROM ${articleTable}"]
 74  
      */
 75  
     public static final String getCommand(String key)
 76  
             throws PropertiesException {
 77  
 
 78  
             // MissingResourceException ?
 79  0
         if (null==commands) throw new PropertiesException();
 80  
 
 81  0
         return commands.getProperty(key);
 82  
     }
 83  
 
 84  
 
 85  
     /**
 86  
      * Set the Properties file to be used for SQL commands.
 87  
      * This can be called by main or in a servlet.init
 88  
      * method at startup. If called more than once, the
 89  
      * new commands are added to the existing store.
 90  
      * If  keys clash,the last one wins.
 91  
      */
 92  
     public static final void init(Properties _commands) {
 93  
 
 94  0
         if (null==commands) {
 95  0
             commands = _commands;
 96  
         }
 97  
         else {
 98  0
             commands.putAll(_commands);
 99  
         }
 100  0
     }
 101  
 
 102  
 
 103  
 // ================================================================ API
 104  
 
 105  
 
 106  
 
 107  
 // ----------------------------------------------------- Create Methods
 108  
 
 109  
     /**
 110  
      * Lookup command and execute "update" query to create a table,
 111  
      * seed it with data, et cetera.
 112  
      * <p>
 113  
      * @param command Name of command to execute
 114  
      * @exception Resource exception if data access error occurs
 115  
      * @author Ted Husted
 116  
      * @version $Revision: 155464 $ $Date: 2005-02-26 13:26:54 +0000 (Sat, 26 Feb 2005) $
 117  
      */
 118  
     public static final void executeUpdate(String command)
 119  
             throws ResourceException {
 120  
 
 121  
         try {
 122  
 
 123  0
              int result = StatementUtils.executeUpdate(
 124  
                  null,getCommand(command));
 125  
 
 126  
         }
 127  0
         catch (SQLException e) {
 128  0
             throw new ResourceException(e);
 129  0
         }
 130  
 
 131  0
     } // end createTables()
 132  
 
 133  
 
 134  
     /**
 135  
      * Returns next sequential key for given set of keys.
 136  
      * Expects KEYS_NET nd KEYS_INC commands to be defined.
 137  
      *
 138  
      * @return A String representing the allocated key
 139  
      * @exception ResourceException if data access error occurs
 140  
      * @param keyName The name of the key set to use to generate the key
 141  
      */
 142  
     public static final Integer createKey(String keyName)
 143  
             throws ResourceException {
 144  
 
 145  0
         Integer result = null;
 146  
 
 147  
         try {
 148  
 
 149  
                 // createKey is syncronized
 150  0
             result = (Integer) StatementUtils.createKey(
 151  
                 null,
 152  
                 1,
 153  
                 getCommand(KEYS_NEXT),
 154  
                 getCommand(keyName),
 155  
                 getCommand(KEYS_INC)
 156  
             );
 157  
         }
 158  
 
 159  0
         catch (SQLException e) {
 160  0
             throw new ResourceException(e);
 161  0
         }
 162  
 
 163  0
         return result;
 164  
 
 165  
    } // end createKey()
 166  
 
 167  
 
 168  
 
 169  
 // -------------------------------------------------- Retrieval Methods
 170  
 
 171  
 
 172  
     /**
 173  
      * Retrieve entry from data storage.
 174  
      * <P>
 175  
      * <B>NOTE</B> that the key and command parameters to this utility
 176  
      * should have been swapped for consistency with other
 177  
      * methods in this package. But since this class is deprecated,
 178  
      * a fix has not been made.
 179  
      * @return Collection with record or empty collection
 180  
      * @exception ResourceException if SQL error occurs
 181  
      * @param key The primary key of the entry
 182  
      * @param target Bean to hold copy of entry being retrieved
 183  
      * @param command The name of the data access command
 184  
      * collection
 185  
      */
 186  
     public static boolean findElement(
 187  
             Object target,
 188  
             Object key,
 189  
             String command) throws ResourceException {
 190  
 
 191  0
         boolean found = false;
 192  
 
 193  
         try {
 194  
 
 195  0
             found = StatementUtils.getElement(null,target,
 196  
                 getCommand(command),key);
 197  
 
 198  
         }
 199  0
         catch (SQLException e) {
 200  0
             throw new ResourceException(e);
 201  0
         }
 202  
 
 203  0
         return found;
 204  
 
 205  
    } // end findElement
 206  
 
 207  
 
 208  
     /**
 209  
      * Retrieve a collection of beans from data stoarge.
 210  
      * <p>
 211  
      * @return Collection with entry or empty collection
 212  
      * @exception throws PropertiesException, ResourceException
 213  
      * if data access error occurs
 214  
      * @param target Object to use as factory when populating
 215  
      * @param command Name of the data access command
 216  
      * collection
 217  
      */
 218  
     public static final Collection findCollection(Object target,
 219  
         String command) throws ResourceException {
 220  
 
 221  
         try {
 222  
 
 223  0
             return StatementUtils.getCollection(null,
 224  
                 target,getCommand(command));
 225  
 
 226  
         }
 227  0
         catch (SQLException e) {
 228  0
             throw new ResourceException(e);
 229  
         }
 230  
 
 231  
     } // end findCollection
 232  
 
 233  
 
 234  
     /**
 235  
      * Retrieve a collection of beans from data stoarge.
 236  
      * <p>
 237  
      * @return Collection with entry or empty collection
 238  
      * @exception throws PropertiesException, ResourceException
 239  
      * if data access error occurs
 240  
      * @param target Object to use as factory when populating
 241  
      * @param command Name of the data access command
 242  
      * collection
 243  
      * @param parameters An array of parameters to be used with command
 244  
      */
 245  
     public static final Collection findCollection(Object target,
 246  
         String command, Object[] parameters) throws ResourceException {
 247  
 
 248  
         try {
 249  
 
 250  0
             return StatementUtils.getCollection(null,
 251  
                 target,getCommand(command),parameters);
 252  
 
 253  
         }
 254  0
         catch (SQLException e) {
 255  0
             throw new ResourceException(e);
 256  
         }
 257  
 
 258  
     } // end findCollection
 259  
 
 260  
 
 261  
     /**
 262  
      * Retrieve a collection of beans from data stoarge.
 263  
      * <p>
 264  
      * @return Collection with entry or empty collection
 265  
      * @exception throws PropertiesException, ResourceException
 266  
      * if data access error occurs
 267  
      * @param target Object to use as factory when populating
 268  
      * @param command Name of the data access command
 269  
      * collection
 270  
      * @param parameter A String parameter to be used with command
 271  
      */
 272  
     public static final Collection findCollection(Object target,
 273  
         String command, Object parameter) throws ResourceException {
 274  
 
 275  
         try {
 276  
 
 277  0
             return StatementUtils.getCollection(null,
 278  
                 target,getCommand(command),parameter);
 279  
 
 280  
         }
 281  0
         catch (SQLException e) {
 282  0
             throw new ResourceException(e);
 283  
         }
 284  
 
 285  
     } // end findCollection
 286  
 
 287  
 
 288  
     /**
 289  
      * Retrieve a collection of beans from data stoarge.
 290  
      * <p>
 291  
      * @return Collection with entry or empty collection
 292  
      * @exception throws PropertiesException, ResourceException
 293  
      * if data access error occurs
 294  
      * @param target Object to use as factory when populating
 295  
      * @param command Name of the data access command
 296  
      * collection
 297  
      * @param parameter An int parameter to be used with command
 298  
      */
 299  
     public static final Collection findCollection(Object target,
 300  
         String command, int parameter) throws ResourceException {
 301  
 
 302  0
         return findCollection(target,command,new Integer(parameter));
 303  
 
 304  
     } // end findCollection
 305  
 
 306  
 
 307  
     /**
 308  
      * Retrieve a collection of beans from data stoarge.
 309  
      * <p>
 310  
      * @return Collection with entry or empty collection
 311  
      * @exception throws PropertiesException, ResourceException
 312  
      * if data access error occurs
 313  
      * @param target Object to use as factory when populating
 314  
      * @param command Name of the data access command
 315  
      * collection
 316  
      * @param parameter A String parameter to be used with command
 317  
      */
 318  
     public static final Collection findCollectionLike(Object target,
 319  
         String command, String parameter) throws ResourceException {
 320  
 
 321  
         try {
 322  
 
 323  0
             return StatementUtils.getCollection(null,
 324  
                 target,getCommand(command),StatementUtils.like(parameter));
 325  
 
 326  
         }
 327  0
         catch (SQLException e) {
 328  0
             throw new ResourceException(e);
 329  
         }
 330  
 
 331  
     } // end findCollectionLike
 332  
 
 333  
 
 334  
     /**
 335  
      * Select entries from data storage by indexed property..
 336  
      * <p>
 337  
      * @return Collection with record or empty Collection
 338  
      * @param value Term to match
 339  
      * @param property Field to search
 340  
      * @param target Object to use as factory when populating
 341  
      * collection
 342  
      * @exception Throws ParameterException if value is not a search
 343  
      * term for property
 344  
      * @exception Throws PopulateExecption if result cannot be set to
 345  
      * target
 346  
      * @exception throws PropertiesException, ResourceException is SQL, IO, or other
 347  
      * data access error occurs.
 348  
      */
 349  
     public static final Collection findByProperty(
 350  
             Object target,
 351  
             String property,
 352  
             String value) throws ParameterException, PopulateException,
 353  
             ResourceException {
 354  
 
 355  0
          return SearchUtils.getCollection(target,
 356  
             Engine.getHits(
 357  
                 Engine.getQuery(value,property)));
 358  
 
 359  
     } // end findByProperty
 360  
 
 361  
 
 362  
 // -------------------------------------------------------- UD Methods
 363  
 
 364  
     /**
 365  
      * Commit record to storage.
 366  
      * If create is true, entry is created.
 367  
      * Otherwise, an existing entry is updated.
 368  
      * @return 0 if fails
 369  
      * @exception ResourceException if SQL error occurs
 370  
      * @param insert True to insert, false to update.
 371  
      * @insert The name of the insert command
 372  
      * @update The name of the delete command
 373  
      @ @parameters The parameters to use with either command
 374  
      *
 375  
      */
 376  
     public static final int store (
 377  
             boolean isInsert,
 378  
             String insert,
 379  
             String update,
 380  
             Object[] parameters) throws ResourceException {
 381  
 
 382  0
         String command = null;
 383  0
         if (isInsert) {
 384  0
             command = getCommand(insert);
 385  
         }
 386  
         else {
 387  0
             command = getCommand(update);
 388  
         }
 389  
 
 390  0
         int result = 0;
 391  
         try {
 392  
 
 393  0
             result = StatementUtils.executeUpdate(null,command,parameters);
 394  
 
 395  
         }
 396  0
         catch (SQLException e) {
 397  0
             throw new ResourceException(e);
 398  0
         }
 399  
 
 400  0
         return result;
 401  
 
 402  
     } // end store
 403  
 
 404  
 
 405  
     /**
 406  
      * Mark entry for deletion.
 407  
      * Returns copy of entry before update in target parameter.
 408  
      *
 409  
      * @return 0 if fails
 410  
      * @exception ResourceException if SQL or other data-access error occurs
 411  
      * @exception runtime Null Pointer Exception if either parameter is null
 412  
      * @param target Bean to hold copy of record being marked
 413  
      * @param article Primary key of record to mark
 414  
      */
 415  
     public static final int delete(Object target, Integer key, String command)
 416  
             throws ResourceException {
 417  
 
 418  0
         int result = 0;
 419  
 
 420  
         try {
 421  
 
 422  
             // Mark as deleted
 423  0
             result = StatementUtils.executeUpdate(null,
 424  
                 getCommand(command),key);
 425  
         }
 426  
 
 427  0
         catch (SQLException e) {
 428  0
             throw new ResourceException(e);
 429  0
         }
 430  
 
 431  0
         return result;
 432  
 
 433  
     } // end delete
 434  
 
 435  
 
 436  
     /**
 437  
      * Unmark entry for deletion.
 438  
      * Returns copy of restored entry in target parameter.
 439  
      *
 440  
      * @return 0 if fails
 441  
      * @exception ResourceException if data access error occurs
 442  
      * @param target Bean to hold copy of record being unmarked
 443  
      * @param article Primary key of record to unmark
 444  
      */
 445  
     public static final int restore(Object target, Integer key, String command)
 446  
             throws ResourceException {
 447  
 
 448  0
         int result = 0;
 449  
 
 450  
         try {
 451  
 
 452  0
             result = StatementUtils.executeUpdate(null,
 453  
                 getCommand(command),key);
 454  
 
 455  
         }
 456  0
         catch (SQLException e) {
 457  0
             throw new ResourceException(e);
 458  0
         }
 459  
 
 460  0
         return result;
 461  
 
 462  
     } // end restore
 463  
 
 464  
 
 465  
 } // end Access
 466