Tony CHEMIT pushed to branch develop-5.x at ultreiaio / ird-observe Commits: 005c946b by Tony CHEMIT at 2017-06-13T11:24:54+02:00 Add charset option to h2 restore sql command (See #729) - - - - - 1 changed file: - entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java Changes: ===================================== entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java ===================================== --- a/entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java +++ b/entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java @@ -24,8 +24,24 @@ package fr.ird.observe; import com.google.common.collect.ImmutableSet; import fr.ird.observe.entities.Entities; -import fr.ird.observe.entities.migration.ObserveMigrationConfigurationProvider; import fr.ird.observe.entities.migration.ObserveMigrationEngine; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.EnumSet; +import java.util.LinkedHashSet; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import java.util.zip.GZIPInputStream; +import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; @@ -43,17 +59,6 @@ import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTables; import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTablesFactory; import org.nuiton.util.StringUtil; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.EnumSet; -import java.util.LinkedHashSet; -import java.util.Objects; -import java.util.Set; -import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.Stream; - public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext implements TopiaMetadataModelSupport { /** @@ -61,9 +66,9 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat */ private static final Log log = LogFactory.getLog(ObserveTopiaApplicationContext.class); - public static final String MIGRATION_SERVICE_NAME = "migration"; + static final String MIGRATION_SERVICE_NAME = "migration"; - public static final String SQL_BATCH_SERVICE_NAME = "sqlBatch"; + static final String SQL_BATCH_SERVICE_NAME = "sqlBatch"; private static final String CREATE_SCHEMA_SCRIPT = "CREATE SCHEMA OBSERVE_COMMON;\n" @@ -78,19 +83,17 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat protected boolean open; protected final String authenticationToken; - protected final TopiaMetadataModelSupport topiaMetadataModelSupport; - protected final TopiaSqlTablesFactory topiaSqlTablesFactory; - protected final ObserveMigrationConfigurationProvider observeMigrationConfigurationProvider; - protected TopiaSqlTables tripSeineTables; - protected TopiaSqlTables tripLonglineTables; - protected TopiaSqlTables referentialTables; + private final TopiaMetadataModelSupport topiaMetadataModelSupport; + private final TopiaSqlTablesFactory topiaSqlTablesFactory; + private TopiaSqlTables tripSeineTables; + private TopiaSqlTables tripLonglineTables; + private TopiaSqlTables referentialTables; public ObserveTopiaApplicationContext(ObserveTopiaConfiguration topiaConfiguration) { super(topiaConfiguration); this.authenticationToken = UUID.randomUUID().toString(); this.topiaMetadataModelSupport = new TopiaMetadataModelSupportImpl("fr.ird.observe", "Observe"); this.topiaSqlTablesFactory = new TopiaSqlTablesFactory(getMetadataModel(), this); - this.observeMigrationConfigurationProvider = ObserveMigrationConfigurationProvider.get(); } @Override @@ -146,8 +149,8 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat try (ObserveTopiaPersistenceContext topiaPersistenceContext = newPersistenceContext()) { String sql = Stream.concat(Entities.REFERENCE_ENTITIES_LIST.stream(), Entities.DATA_ENTITIES_LIST.stream()) - .map(entity -> String.format(INSERT_LAST_UPDATE_PATTERN, entity.ordinal(), entity.getContract().getCanonicalName())) - .collect(Collectors.joining("\n")); + .map(entity -> String.format(INSERT_LAST_UPDATE_PATTERN, entity.ordinal(), entity.getContract().getCanonicalName())) + .collect(Collectors.joining("\n")); topiaPersistenceContext.getSqlSupport().executeSql(sql); topiaPersistenceContext.commit(); @@ -170,7 +173,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat } - protected void executeSqlStatements0(byte... content) throws IOException { + private void executeSqlStatements0(byte... content) throws IOException { if (getConfiguration().isH2Configuration()) { @@ -178,7 +181,32 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat log.info(String.format("Restore script size: %s to h2 from file : %s", StringUtil.convertMemory(content.length), tempFile.toString())); try { Files.write(tempFile, content); - JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(configuration); + JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(configuration) { + @Override + public void restore(File file) throws FileNotFoundException { + String options = ""; + InputStream in = null; + try { + in = new BufferedInputStream(new FileInputStream(file)); + in.mark(2); + // read header to see if is compressed file + int b = in.read(); + // redundant cast : int magic = ((int) in.read() << 8) | b; + int magic = in.read() << 8 | b; + in.reset(); + if (magic == GZIPInputStream.GZIP_MAGIC) { + options += " COMPRESSION GZIP"; + } + in.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + IOUtils.closeQuietly(in); + } + options += " CHARSET 'UTF8'"; + runUpdate("RUNSCRIPT FROM '" + file.getAbsolutePath() + "'" + options); + } + }; jdbcH2Helper.restore(tempFile.toFile()); } finally { Files.delete(tempFile); @@ -462,8 +490,8 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat private static class TripReplicateTablesPredicate implements TopiaSqlTablesFactory.TopiaSqlTablesPredicate { - protected final Set<TopiaMetadataEntity> dones = new LinkedHashSet<>(); - protected final Set<String> sectionsHolders = ImmutableSet.of( + final Set<TopiaMetadataEntity> dones = new LinkedHashSet<>(); + final Set<String> sectionsHolders = ImmutableSet.of( ObserveEntityEnum.CatchLongline.name(), ObserveEntityEnum.Tdr.name() ); View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/005c946b96e9373eece221e2ed57... --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/005c946b96e9373eece221e2ed57... You're receiving this email because of your account on gitlab.com.