001    /*
002     * The MIT License
003     *
004     * Copyright (c) 2012, Ninja Squad
005     *
006     * Permission is hereby granted, free of charge, to any person obtaining a copy
007     * of this software and associated documentation files (the "Software"), to deal
008     * in the Software without restriction, including without limitation the rights
009     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
010     * copies of the Software, and to permit persons to whom the Software is
011     * furnished to do so, subject to the following conditions:
012     *
013     * The above copyright notice and this permission notice shall be included in
014     * all copies or substantial portions of the Software.
015     *
016     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
017     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
018     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
019     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
020     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
021     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
022     * THE SOFTWARE.
023     */
024    
025    package com.ninja_squad.dbsetup;
026    
027    import java.util.List;
028    
029    import javax.annotation.Nonnull;
030    
031    import com.ninja_squad.dbsetup.operation.CompositeOperation;
032    import com.ninja_squad.dbsetup.operation.DeleteAll;
033    import com.ninja_squad.dbsetup.operation.Insert;
034    import com.ninja_squad.dbsetup.operation.Operation;
035    import com.ninja_squad.dbsetup.operation.SqlOperation;
036    import com.ninja_squad.dbsetup.operation.Truncate;
037    
038    /**
039     * A static factory class for operations. Static import of this class can help make the code more readable.
040     * @author JB Nizet
041     */
042    public final class Operations {
043        private Operations() {
044        }
045    
046        /**
047         * Creates a <code>delete from table</code> operation.
048         * @param table the table to delete all from
049         * @see DeleteAll
050         */
051        public static DeleteAll deleteAllFrom(@Nonnull String table) {
052            return DeleteAll.from(table);
053        }
054    
055        /**
056         * Creates a sequence of <code>delete from table</code> operations.
057         * @param tables the tables to delete all from
058         * @see DeleteAll
059         */
060        public static Operation deleteAllFrom(@Nonnull String... tables) {
061            return DeleteAll.from(tables);
062        }
063    
064        /**
065         * Creates a sequence of <code>delete from ...</code> operations.
066         * @param tables the tables to delete all from
067         * @see DeleteAll
068         */
069        public static Operation deleteAllFrom(@Nonnull List<String> tables) {
070            return DeleteAll.from(tables);
071        }
072    
073        /**
074         * Creates a <code>truncate table ...</code> operation.
075         * @param table the table to truncate
076         * @see Truncate
077         */
078        public static Truncate truncate(@Nonnull String table) {
079            return Truncate.table(table);
080        }
081    
082        /**
083         * Creates a sequence of <code>truncate table ...</code> operations.
084         * @param tables the tables to truncate
085         * @see Truncate
086         */
087        public static Operation truncate(@Nonnull String... tables) {
088            return Truncate.tables(tables);
089        }
090    
091        /**
092         * Creates a sequence of <code>truncate table ...</code> operations.
093         * @param tables the tables to truncate
094         * @see Truncate
095         */
096        public static Operation truncate(@Nonnull List<String> tables) {
097            return Truncate.tables(tables);
098        }
099    
100        /**
101         * Creates a SQL operation.
102         * @param sqlStatement the SQL statement to execute (using {@link java.sql.Statement#executeUpdate(String)})
103         * @see SqlOperation
104         */
105        public static SqlOperation sql(@Nonnull String sqlStatement) {
106            return SqlOperation.of(sqlStatement);
107        }
108    
109        /**
110         * Creates a sequence of SQL operations.
111         * @param sqlStatements the SQL statements to execute (using {@link java.sql.Statement#executeUpdate(String)})
112         * @see SqlOperation
113         */
114        public static Operation sql(@Nonnull String... sqlStatements) {
115            return SqlOperation.of(sqlStatements);
116        }
117    
118        /**
119         * Creates a sequence of SQL operations.
120         * @param sqlStatements the SQL statements to execute (using {@link java.sql.Statement#executeUpdate(String)})
121         * @see SqlOperation
122         */
123        public static Operation sql(@Nonnull List<String> sqlStatements) {
124            return SqlOperation.of(sqlStatements);
125        }
126    
127        /**
128         * Creates a builder for a sequence of insert operations.
129         * @param table the table to insert into
130         * @see Insert
131         */
132        public static Insert.Builder insertInto(@Nonnull String table) {
133            return Insert.into(table);
134        }
135    
136        /**
137         * Creates a sequence of operations.
138         * @param operations the operations to put in a sequence
139         * @see CompositeOperation
140         */
141        public static Operation sequenceOf(@Nonnull Operation... operations) {
142            return CompositeOperation.sequenceOf(operations);
143        }
144    
145        /**
146         * Creates a sequence of operations.
147         * @param operations the operations to put in a sequence
148         * @see CompositeOperation
149         */
150        public static Operation sequenceOf(@Nonnull List<? extends Operation> operations) {
151            return CompositeOperation.sequenceOf(operations);
152        }
153    }