package org.jtheque.movies.persistence;
/*
* Copyright JTheque (Baptiste Wicht)
*
* 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.
*/
import org.jtheque.collections.DaoCollections;
import org.jtheque.movies.persistence.dao.able.IDaoCategories;
import org.jtheque.movies.persistence.dao.able.IDaoMovies;
import org.jtheque.schemas.DefaultSchema;
import org.jtheque.utils.bean.Version;
/**
* The database schema for the Movies Module.
*
* @author Baptiste Wicht
*/
public final class MoviesSchema extends DefaultSchema {
/**
* Construct a new MoviesSchema.
*/
public MoviesSchema() {
super(Version.get("1.2"), "Movies-Schema", "PrimaryUtils-Schema");
}
@Override
public void install() {
createDataTables();
createReferentialIntegrityConstraints();
}
@Override
public void update(Version from) {
String fromVersion = from.getVersion();
if ("1.0".equals(fromVersion) || "1.1".equals(fromVersion)) {
if ("1.0".equals(fromVersion)) {
createReferentialIntegrityConstraints();
}
correctUnicityConstraints();
addInformationColumns();
}
}
/**
* Correct the unicity constraints.
*/
private void correctUnicityConstraints() {
alterTable(IDaoMovies.TABLE, "DROP CONSTRAINT CONSTRAINT_INDEX_3F");
alterTable(IDaoMovies.TABLE, "ADD CONSTRAINT UNIQUE_FILE UNIQUE(FILE)");
}
/**
* Add the informations column.
*/
private void addInformationColumns() {
alterTable(IDaoMovies.TABLE, "ADD DURATION BIGINT");
alterTable(IDaoMovies.TABLE, "ADD RESOLUTION VARCHAR(11)");
alterTable(IDaoMovies.TABLE, "ADD IMAGE VARCHAR(150)");
alterTable(IDaoCategories.TABLE, "ADD THE_PARENT_FK INT");
alterTable(IDaoCategories.TABLE, "ADD FOREIGN KEY (THE_PARENT_FK) REFERENCES " + IDaoCategories.TABLE + " (ID) ON UPDATE SET NULL");
}
/**
* Create the data tables.
*/
private void createDataTables() {
createTable(IDaoMovies.MOVIES_CATEGORIES_TABLE, "THE_MOVIE_FK INT NOT NULL, THE_CATEGORY_FK INT NOT NULL");
createTable(IDaoCategories.TABLE, "ID INT IDENTITY PRIMARY KEY, TITLE VARCHAR(100) NOT NULL UNIQUE, THE_PARENT_FK INT, THE_COLLECTION_FK INT NOT NULL");
createTable(IDaoMovies.TABLE, "ID INT IDENTITY PRIMARY KEY, TITLE VARCHAR(100) NOT NULL, NOTE INT NULL, FILE VARCHAR(200) NOT NULL UNIQUE, DURATION BIGINT, RESOLUTION VARCHAR(11), IMAGE VARCHAR(150), THE_COLLECTION_FK INT NOT NULL");
updateTable(IDaoMovies.TABLE, "CREATE INDEX MOVIES_IDX ON {} (ID)");
updateTable(IDaoCategories.TABLE, "CREATE INDEX MOVIE_CATEGORIES_IDX ON {} (ID)");
}
/**
* Create the constraints to maintain a referential integrity in the database.
*/
private void createReferentialIntegrityConstraints() {
alterTable(IDaoMovies.MOVIES_CATEGORIES_TABLE, "ADD FOREIGN KEY (THE_MOVIE_FK) REFERENCES " + IDaoMovies.TABLE + "(ID) ON UPDATE SET NULL");
alterTable(IDaoMovies.MOVIES_CATEGORIES_TABLE, "ADD FOREIGN KEY (THE_CATEGORY_FK) REFERENCES " + IDaoCategories.TABLE + " (ID) ON UPDATE SET NULL");
alterTable(IDaoCategories.TABLE, "ADD FOREIGN KEY (THE_COLLECTION_FK) REFERENCES " + DaoCollections.TABLE + " (ID) ON UPDATE SET NULL");
alterTable(IDaoMovies.TABLE, "ADD FOREIGN KEY (THE_COLLECTION_FK) REFERENCES " + DaoCollections.TABLE + " (ID) ON UPDATE SET NULL");
alterTable(IDaoCategories.TABLE, "ADD FOREIGN KEY (THE_PARENT_FK) REFERENCES " + IDaoCategories.TABLE + " (ID) ON UPDATE SET NULL");
}
}