Open Source Repository

Home /spring/spring-jdbc-3.0.5 | Repository Home



org/springframework/jdbc/support/incrementer/AbstractColumnMaxValueIncrementer.java
/*
 * Copyright 2002-2008 the original author or authors.
 *
 * 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.
 */

package org.springframework.jdbc.support.incrementer;

import javax.sql.DataSource;

import org.springframework.util.Assert;

/**
 * Abstract base class for {@link DataFieldMaxValueIncrementer} implementations that use
 * a column in a custom sequence table. Subclasses need to provide the specific handling
 * of that table in their {@link #getNextKey()} implementation..
 *
 @author Juergen Hoeller
 @since 2.5.3
 */
public abstract class AbstractColumnMaxValueIncrementer extends AbstractDataFieldMaxValueIncrementer {

  /** The name of the column for this sequence */
  private String columnName;

  /** The number of keys buffered in a cache */
  private int cacheSize = 1;


  /**
   * Default constructor for bean property style usage.
   @see #setDataSource
   @see #setIncrementerName
   @see #setColumnName
   */
  public AbstractColumnMaxValueIncrementer() {
  }

  /**
   * Convenience constructor.
   @param dataSource the DataSource to use
   @param incrementerName the name of the sequence/table to use
   @param columnName the name of the column in the sequence table to use
   */
  public AbstractColumnMaxValueIncrementer(DataSource dataSource, String incrementerName, String columnName) {
    super(dataSource, incrementerName);
    Assert.notNull(columnName, "Column name must not be null");
    this.columnName = columnName;
  }


  /**
   * Set the name of the column in the sequence table.
   */
  public void setColumnName(String columnName) {
    this.columnName = columnName;
  }

  /**
   * Return the name of the column in the sequence table.
   */
  public String getColumnName() {
    return this.columnName;
  }

  /**
   * Set the number of buffered keys.
   */
  public void setCacheSize(int cacheSize) {
    this.cacheSize = cacheSize;
  }

  /**
   * Return the number of buffered keys.
   */
  public int getCacheSize() {
    return this.cacheSize;
  }

  @Override
  public void afterPropertiesSet() {
    super.afterPropertiesSet();
    if (this.columnName == null) {
      throw new IllegalArgumentException("Property 'columnName' is required");
    }
  }

}