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    }