001 package biz.hammurapi.sql; 002 003 import java.sql.Connection; 004 import java.sql.SQLException; 005 import java.text.MessageFormat; 006 007 /** 008 * Generates identities by executing specified SQL statement 009 * @author Pavel Vlasov 010 * 011 */ 012 public class GenericIdentityGenerator implements IdentityGenerator { 013 014 015 private boolean invariant; 016 private MessageFormat mf; 017 private Object[] args=new Object[] {null}; 018 private String sql; 019 020 /** 021 * Constructor 022 * @param pattern - SQL statement pattern. {0} stands for table name. 023 */ 024 public GenericIdentityGenerator(String pattern) { 025 invariant = pattern.indexOf("{0}")==-1; 026 if (invariant) { 027 this.sql=pattern; 028 } else { 029 mf=new MessageFormat(pattern); 030 } 031 } 032 033 public int generate(Connection con, String name) throws SQLException { 034 String esql; 035 if (invariant) { 036 esql=this.sql; 037 } else { 038 esql=mf.format(args, new StringBuffer(), null).toString(); 039 } 040 041 return new SQLProcessor(con, null).projectSingleInt(esql, null); 042 } 043 044 }