package org.beanfuse.db.sequence; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.util.Iterator; import java.util.List; import javax.sql.DataSource; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.Options; import org.apache.commons.cli.PosixParser; import org.beanfuse.db.sequence.impl.DefaultSequenceNamePattern; import org.beanfuse.db.sequence.impl.OracleTableSequenceDao; import org.beanfuse.db.util.DataSourceUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TableSequenceAdjustMain { public static void main(String args[]) throws Exception { Logger logger = LoggerFactory.getLogger(TableSequenceAdjustMain.class); boolean update = false; boolean remove = false; CommandLineParser parser = new PosixParser(); Options options = new Options(); options.addOption("update", false, "update sequence according to table "); options.addOption("drop", false, "remove sequence"); CommandLine cmd = parser.parse(options, args); update = cmd.hasOption("update"); remove = cmd.hasOption("drop"); List datasourceNames = DataSourceUtil.getDataSourceNames(); String dialect = null; PrintStream ps = System.out; if (datasourceNames.size() < 1) { logger.info("without any database config"); return; } else if (datasourceNames.size() > 1) { ps.println("select db from " + datasourceNames + ":"); while (null == dialect || !datasourceNames.contains(dialect)) { if (null != dialect) { ps.println("incorrect! select db from " + datasourceNames + ":"); } BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); dialect = br.readLine(); } } else { dialect = (String) datasourceNames.iterator().next(); } DataSource datasource = DataSourceUtil.getDataSource(dialect); OracleTableSequenceDao tableSequenceDao = new OracleTableSequenceDao(); tableSequenceDao.setDataSource(datasource); tableSequenceDao.setRelation(new DefaultSequenceNamePattern()); List sequences = tableSequenceDao.getInconsistent(); info(sequences); if (update) { adjust(tableSequenceDao, sequences); } if (remove) { drop(tableSequenceDao, sequences); } } public static void drop(TableSequenceDao tableSequenceDao, List sequences) { PrintStream ps = System.out; if (!sequences.isEmpty()) { ps.println("start drop ..."); } for (Iterator iter = sequences.iterator(); iter.hasNext();) { TableSequence seq = (TableSequence) iter.next(); if (null == seq.getTableName()) { tableSequenceDao.drop(seq.getSeqName()); ps.println("drop sequence " + seq.getSeqName()); } } } public static void adjust(TableSequenceDao tableSequenceDao, List sequences) { PrintStream ps = System.out; if (!sequences.isEmpty()) { ps.println("start adjust ..."); } for (Iterator iter = sequences.iterator(); iter.hasNext();) { TableSequence seq = (TableSequence) iter.next(); if (null != seq.getTableName()) { ps.println("adjust sequence " + seq.getSeqName() + " with lastnumber " + tableSequenceDao.adjust(seq)); } } ps.println("finish adjust"); } public static void info(List sequences) { PrintStream ps = System.out; if (sequences.isEmpty()) { ps.println("without any inconsistent sequence"); } else { ps.println("find inconsistent sequence " + sequences.size()); ps.println("sequence_name(lastnumber) table_name(max id)"); } for (Iterator iter = sequences.iterator(); iter.hasNext();) { TableSequence seq = (TableSequence) iter.next(); ps.println(seq); } } }