/*
 * V8_1_To_V8_2.java
 *
 * Created on December 19, 2007, 3:12 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package siprp.update.updates;

import com.evolute.utils.Singleton;
import com.evolute.utils.db.DBManager;
import com.evolute.utils.db.Executer;

/**
 *
 * @author fpalma
 */
public class V8_9_To_V9_0
		implements siprp.update.Update
{
	
	public V8_9_To_V9_0()
	{
	}
	
	public String []listChanges()
	{
		return new String[]{
		                    "Criar tabela 'posto_de_trabalho'",
		                    "Criar tabela 'legislacao'",
		                    "Criar tabela relacional 'posto_de_trabalho_estabelecimento'",
		                    "Criar tabela relacional 'legislacao_estabelecimento'",
		                    "Criar tabela 'medida'",
		                    "Criar tabela 'risco'",
		                    "Criar tabela 'medida'",
		                    "Criar tabela relacional 'risco_medida'",
		                    "Criar tabela 'image'",
		                    "Adicionar logotipo a empresa"
		                    };
	}
	
	public double getStartVersion()
	{
		return 8.9;
	}
	
	public double getEndVersion()
	{
		return 9.0;
	}
	
	public void doUpdate()
		throws Exception
	{
		DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER );
		Executer executer = dbm.getSharedExecuter();
		com.evolute.utils.sql.Update update = 
			new com.evolute.utils.sql.Update(
				"create table email_plano_de_actuacao(" +
					"id serial PRIMARY KEY," +
					"description varchar(255) NOT NULL," +
					"estabelecimento_id int4 REFERENCES estabelecimentos(id)" +
				");" +
				"create table posto_de_trabalho(" +
					"id serial PRIMARY KEY," +
					"description varchar(1024) NOT NULL" +
				");" +
				"create table legislacao(" +
					"id serial PRIMARY KEY," +
					"parent_id int4 REFERENCES legislacao(id)," +
					"description varchar(8192) NOT NULL" +
				");" +
				"create table posto_de_trabalho_estabelecimento(" +
					"posto_de_trabalho_id int4 REFERENCES posto_de_trabalho(id) NOT NULL," +
					"estabelecimento_id int4 REFERENCES estabelecimentos(id) NOT NULL," +
					"CONSTRAINT posto_de_trabalho_estabelecimento_pkey PRIMARY KEY(posto_de_trabalho_id, estabelecimento_id)" +
				");" +
				"create table legislacao_estabelecimento(" +
					"legislacao_id int4 REFERENCES legislacao(id) NOT NULL," +
					"estabelecimento_id int4 REFERENCES estabelecimentos(id) NOT NULL," +
					"CONSTRAINT legislacao_estabelecimento_pkey PRIMARY KEY(legislacao_id, estabelecimento_id)" +
				");" +
				"create table risco(" +
					"id serial PRIMARY KEY," +
					"description varchar(255) NOT NULL," +
					"value int4 NOT NULL" +
				");" +
				"create table medida(" +
					"id serial PRIMARY KEY," +
					"description varchar(255) NOT NULL" +
				");" +
				"create table risco_medida(" +
					"risco_id int4 REFERENCES risco(id) NOT NULL," +
					"medida_id int4 REFERENCES medida(id) NOT NULL," +
					"CONSTRAINT risco_medida_pkey PRIMARY KEY(risco_id, medida_id)" +
				");" +
				"create table image(" +
					"id serial PRIMARY KEY," +
					"name varchar(255) NOT NULL," +
					"image_data bytea NOT NULL" +
				");" +
				"alter table empresas add column empresa_logo_id int4 REFERENCES image(id);"
		);
		executer.executeQuery( update );
	}
	
	public String toString()
	{
		return "v" + getStartVersion() + " para v" + getEndVersion();
	}
}
