From 2d9c9976970e1c5ad9a301e5b5690002425c18dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Sim=C3=A3o?= Date: Wed, 25 Mar 2009 13:55:12 +0000 Subject: [PATCH] git-svn-id: https://svn.coded.pt/svn/SIPRP@991 bb69d46d-e84e-40c8-a05a-06db0d633741 --- .../companydataloaders/SIPRPDataLoader.java | 22 ++-- .../src/siprp/update/UpdateList.java | 3 +- .../siprp/update/updates/V11_0_To_V11_1.java | 120 ++++++++++++++++++ .../V11_0_To_V11_1_Assinatura_Catarina.png | Bin 0 -> 3247 bytes .../V11_0_To_V11_1_Assinatura_Sonia.png | Bin 0 -> 8975 bytes 5 files changed, 133 insertions(+), 12 deletions(-) create mode 100644 trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1.java create mode 100644 trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1_Assinatura_Catarina.png create mode 100644 trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1_Assinatura_Sonia.png diff --git a/trunk/SIPRPSoft/src/siprp/companydataloaders/SIPRPDataLoader.java b/trunk/SIPRPSoft/src/siprp/companydataloaders/SIPRPDataLoader.java index 3c248043..65a5d791 100644 --- a/trunk/SIPRPSoft/src/siprp/companydataloaders/SIPRPDataLoader.java +++ b/trunk/SIPRPSoft/src/siprp/companydataloaders/SIPRPDataLoader.java @@ -100,21 +100,13 @@ public class SIPRPDataLoader implements CompanyDataLoader // Singleton.setInstance( SingletonConstants.LOCAL_DB_NAME, "siprp_local_3" ); // Singleton.setInstance( SingletonConstants.LOCAL_DRIVER_NAME, "org.postgresql.Driver" ); - Singleton.setInstance( SingletonConstants.LOCAL_USER, "postgres" ); - Singleton.setInstance( SingletonConstants.LOCAL_PASSWORD, "Typein" ); - Singleton.setInstance( SingletonConstants.LOCAL_URL_PREFIX, "jdbc:postgresql://" ); - Singleton.setInstance( SingletonConstants.LOCAL_URL, "10.158.2.2:5432" ); - Singleton.setInstance( SingletonConstants.LOCAL_DB_NAME, "siprp_local" ); - Singleton.setInstance( SingletonConstants.LOCAL_DRIVER_NAME, "org.postgresql.Driver" ); -// // Singleton.setInstance( SingletonConstants.LOCAL_USER, "postgres" ); // Singleton.setInstance( SingletonConstants.LOCAL_PASSWORD, "Typein" ); // Singleton.setInstance( SingletonConstants.LOCAL_URL_PREFIX, "jdbc:postgresql://" ); -// Singleton.setInstance( SingletonConstants.LOCAL_URL, "dbserver:5432" ); +// Singleton.setInstance( SingletonConstants.LOCAL_URL, "10.158.2.2:5432" ); // Singleton.setInstance( SingletonConstants.LOCAL_DB_NAME, "siprp_local" ); // Singleton.setInstance( SingletonConstants.LOCAL_DRIVER_NAME, "org.postgresql.Driver" ); - -// +// // Singleton.setInstance( SingletonConstants.LOCAL_USER, "postgres" ); // Singleton.setInstance( SingletonConstants.LOCAL_PASSWORD, "Typein" ); // Singleton.setInstance( SingletonConstants.LOCAL_URL_PREFIX, "jdbc:postgresql://" ); @@ -122,6 +114,7 @@ public class SIPRPDataLoader implements CompanyDataLoader // Singleton.setInstance( SingletonConstants.LOCAL_DB_NAME, "siprp_local" ); // Singleton.setInstance( SingletonConstants.LOCAL_DRIVER_NAME, "org.postgresql.Driver" ); +// // Singleton.setInstance( SingletonConstants.LOCAL_USER, "postgres" ); // Singleton.setInstance( SingletonConstants.LOCAL_PASSWORD, "Typein" ); // Singleton.setInstance( SingletonConstants.LOCAL_URL_PREFIX, "jdbc:postgresql://" ); @@ -139,10 +132,17 @@ public class SIPRPDataLoader implements CompanyDataLoader // Singleton.setInstance( SingletonConstants.LOCAL_USER, "postgres" ); // Singleton.setInstance( SingletonConstants.LOCAL_PASSWORD, "Typein" ); // Singleton.setInstance( SingletonConstants.LOCAL_URL_PREFIX, "jdbc:postgresql://" ); -// Singleton.setInstance( SingletonConstants.LOCAL_URL, "localhost:5432" ); +// Singleton.setInstance( SingletonConstants.LOCAL_URL, "dbserver:5432" ); // Singleton.setInstance( SingletonConstants.LOCAL_DB_NAME, "siprp_local" ); // Singleton.setInstance( SingletonConstants.LOCAL_DRIVER_NAME, "org.postgresql.Driver" ); + Singleton.setInstance( SingletonConstants.LOCAL_USER, "postgres" ); + Singleton.setInstance( SingletonConstants.LOCAL_PASSWORD, "Typein" ); + Singleton.setInstance( SingletonConstants.LOCAL_URL_PREFIX, "jdbc:postgresql://" ); + Singleton.setInstance( SingletonConstants.LOCAL_URL, "localhost:5432" ); + Singleton.setInstance( SingletonConstants.LOCAL_DB_NAME, "siprp_local3" ); + Singleton.setInstance( SingletonConstants.LOCAL_DRIVER_NAME, "org.postgresql.Driver" ); + // Singleton.setInstance( SingletonConstants.LOCAL_USER, "postgres" ); // Singleton.setInstance( SingletonConstants.LOCAL_PASSWORD, "Typein" ); // Singleton.setInstance( SingletonConstants.LOCAL_URL_PREFIX, "jdbc:postgresql://" ); diff --git a/trunk/SIPRPSoft/src/siprp/update/UpdateList.java b/trunk/SIPRPSoft/src/siprp/update/UpdateList.java index 0f5679d7..e189651a 100644 --- a/trunk/SIPRPSoft/src/siprp/update/UpdateList.java +++ b/trunk/SIPRPSoft/src/siprp/update/UpdateList.java @@ -21,6 +21,7 @@ import siprp.update.updates.V10_6_To_V10_7; import siprp.update.updates.V10_7_To_V10_8; import siprp.update.updates.V10_8_To_V10_9; import siprp.update.updates.V10_9_To_V11_0; +import siprp.update.updates.V11_0_To_V11_1; import siprp.update.updates.V6_1_To_V7_0; import siprp.update.updates.V7_0_To_V7_2; import siprp.update.updates.V7_2_To_V7_4; @@ -88,7 +89,7 @@ public class UpdateList new V10_3_To_V10_4(), new V10_4_To_V10_5(), new V10_5_To_V10_6(), new V10_6_To_V10_7(), new V10_7_To_V10_8(), new V10_8_To_V10_9(), - new V10_9_To_V11_0() + new V10_9_To_V11_0(), new V11_0_To_V11_1() }; protected static Executer EXECUTER; diff --git a/trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1.java b/trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1.java new file mode 100644 index 00000000..87527fa8 --- /dev/null +++ b/trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1.java @@ -0,0 +1,120 @@ +package siprp.update.updates; + +import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; +import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; +import static com.evolute.utils.strings.UnicodeLatin1Map.oacute; +import static com.evolute.utils.strings.UnicodeLatin1Map.uacute; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; + +import javax.imageio.ImageIO; + +import com.evolute.utils.Singleton; +import com.evolute.utils.arrays.Virtual2DArray; +import com.evolute.utils.db.DBManager; +import com.evolute.utils.db.Executer; +import com.evolute.utils.sql.Assignment; +import com.evolute.utils.sql.BlobUpdate; +import com.evolute.utils.sql.Field; +import com.evolute.utils.sql.Insert; +import com.evolute.utils.sql.Select2; +import com.evolute.utils.sql.Update; + +public class V11_0_To_V11_1 implements siprp.update.Update +{ + + public V11_0_To_V11_1() + { + } + + public String []listChanges() + { + return new String[]{ + "A actualizar informacao dos tecnicos de higiene e seguranca" + }; + } + + public double getStartVersion() + { + return 11.0; + } + + public double getEndVersion() + { + return 11.1; + } + + public void doUpdate() throws Exception + { + DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER ); + Executer executer = dbm.getSharedExecuter(); + + Update update = new Update( + "alter table image alter column image_data drop not null; " + ); + executer.executeQuery( update ); + + Integer assSoniaID = null; + Integer assCatarinaID = null; + String assSonia = "Assinatura(Sonia Filipa Dias Campos)"; + String assCatarina = "Assinatura(Catarina Leonardo)"; + BufferedImage assSoniaImage = ImageIO.read( getClass().getClassLoader().getResourceAsStream( "siprp/update/updates/V11_0_To_V11_1_Assinatura_Sonia.png" ) ); + BufferedImage assCatarinaImage = ImageIO.read( getClass().getClassLoader().getResourceAsStream( "siprp/update/updates/V11_0_To_V11_1_Assinatura_Catarina.png" ) ); + ByteArrayOutputStream assSoniaBytesStream = new ByteArrayOutputStream(); + ByteArrayOutputStream assCatarinaBytesStream = new ByteArrayOutputStream(); + ImageIO.write( assSoniaImage, "PNG", assSoniaBytesStream ); + ImageIO.write( assCatarinaImage, "PNG", assCatarinaBytesStream ); + if( assSoniaImage == null || assSoniaBytesStream.size() == 0 ) + { + throw new Exception("Erro ao ler assinatura: " + assSonia ); + } + if( assCatarinaImage == null || assCatarinaBytesStream.size() == 0 ) + { + throw new Exception("Erro ao ler assinatura: " + assCatarina ); + } + Insert insertQuery = new Insert( "image", new Assignment[]{ + new Assignment(new Field("name"),assSonia) + } ); + Virtual2DArray array = executer.executeQuery( insertQuery ); + insertQuery = new Insert( "image", new Assignment[]{ + new Assignment(new Field("name"), assCatarina) + } ); + executer.executeQuery( insertQuery ); + Select2 selectQuery = new Select2(new String[]{"image"},null,null,new String[]{"id"},new Field("name").isEqual( assSonia ),null,null,null,null); + array = executer.executeQuery( selectQuery ); + if( array.columnLength() == 1 ) + { + assSoniaID = (Integer) array.get( 0, 0 ); + } + selectQuery = new Select2(new String[]{"image"},null,null,new String[]{"id"},new Field("name").isEqual( assCatarina ),null,null,null,null); + array = executer.executeQuery( selectQuery ); + if( array.columnLength() == 1 ) + { + assCatarinaID = (Integer) array.get( 0, 0 ); + } + if( assSoniaID == null ) + { + throw new Exception("Erro ao inserir assinatura: " + assSonia ); + } + if( assCatarinaID == null ) + { + throw new Exception("Erro ao inserir assinatura: " + assCatarina ); + } + BlobUpdate blobUpdate = new BlobUpdate("image","image_data",assSoniaBytesStream.toByteArray(),new Field("id").isEqual( assSoniaID ) ); + executer.executeQuery( blobUpdate ); + blobUpdate = new BlobUpdate("image","image_data",assCatarinaBytesStream.toByteArray(),new Field("id").isEqual( assCatarinaID ) ); + executer.executeQuery( blobUpdate ); + update = new Update( + "update marcacoes_tecnicos_hst set cap='0601/6505/02', formacao='Ergonomia', assinatura=" + assSoniaID + " where id = 2; " + + "update marcacoes_tecnicos_hst set cap='0310/1156/02', formacao='Sa"+uacute+"de Ambiental, P"+oacute+"s Gradua"+ccedil+atilde+"o em Higiene e Seguran"+ccedil+"a do Trabalho e Mestrado em Ergonomia na Seguran"+ccedil+"a do Trabalho', assinatura=" + assCatarinaID + " where id = 1; " + ); + executer.executeQuery( update ); + } + + public String toString() + { + return "v" + getStartVersion() + " para v" + getEndVersion(); + } + +} diff --git a/trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1_Assinatura_Catarina.png b/trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1_Assinatura_Catarina.png new file mode 100644 index 0000000000000000000000000000000000000000..506cb2b910a482a8d24d94d0549b53bad6ea352c GIT binary patch literal 3247 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 literal 0 HcmV?d00001 diff --git a/trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1_Assinatura_Sonia.png b/trunk/SIPRPSoft/src/siprp/update/updates/V11_0_To_V11_1_Assinatura_Sonia.png new file mode 100644 index 0000000000000000000000000000000000000000..0db7ac3330acec1fe6a0ff472f3c867a38554ea0 GIT binary patch literal 8975 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