Java tutorial
/* * Copyright 2013 National Bank of Belgium * * Licensed under the EUPL, Version 1.1 or as soon they will be approved * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. */ package be.nbb.demetra.dotstat; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import ec.tss.tsproviders.DataSource; import ec.tss.tsproviders.db.DbBean; import ec.tss.tsproviders.utils.DataFormat; import ec.tss.tsproviders.utils.IParam; import static ec.tss.tsproviders.utils.Params.*; import ec.tstoolkit.timeseries.TsAggregationType; import ec.tstoolkit.timeseries.simplets.TsFrequency; import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; /** * * @author Philippe Charles */ class FixedDbBean extends DbBean { public FixedDbBean() { this.dbName = X_DBNAME.defaultValue(); this.tableName = X_TABLENAME.defaultValue(); this.dimColumns = X_DIMCOLUMNS.defaultValue(); this.periodColumn = X_PERIODCOLUMN.defaultValue(); this.valueColumn = X_VALUECOLUMN.defaultValue(); this.dataFormat = X_DATAFORMAT.defaultValue(); this.versionColumn = X_VERSIONCOLUMN.defaultValue(); this.frequency = X_FREQUENCY.defaultValue(); this.aggregationType = X_AGGREGATION_TYPE.defaultValue(); } public FixedDbBean(@Nonnull DataSource id) { this.dbName = X_DBNAME.get(id); this.tableName = X_TABLENAME.get(id); this.dimColumns = X_DIMCOLUMNS.get(id); this.periodColumn = X_PERIODCOLUMN.get(id); this.valueColumn = X_VALUECOLUMN.get(id); this.dataFormat = X_DATAFORMAT.get(id); this.versionColumn = X_VERSIONCOLUMN.get(id); this.frequency = X_FREQUENCY.get(id); this.aggregationType = X_AGGREGATION_TYPE.get(id); } //<editor-fold defaultstate="collapsed" desc="Getters/Setters"> public String getDbName() { return dbName; } public void setDbName(String dbName) { this.dbName = dbName; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } public String getDimColumns() { return dimColumns; } public void setDimColumns(String dimColumns) { this.dimColumns = dimColumns; } public String getPeriodColumn() { return periodColumn; } public void setPeriodColumn(String periodColumn) { this.periodColumn = periodColumn; } public String getValueColumn() { return valueColumn; } public void setValueColumn(String valueColumn) { this.valueColumn = valueColumn; } public DataFormat getDataFormat() { return dataFormat; } public void setDataFormat(DataFormat dataFormat) { this.dataFormat = dataFormat; } public String getVersionColumn() { return versionColumn; } public void setVersionColumn(String versionColumn) { this.versionColumn = versionColumn; } public TsFrequency getFrequency() { return frequency; } public void setFrequency(TsFrequency frequency) { this.frequency = frequency; if (frequency == TsFrequency.Undefined) { aggregationType = TsAggregationType.None; } } public TsAggregationType getAggregationType() { return aggregationType; } public void setAggregationType(TsAggregationType aggregationType) { if (frequency != TsFrequency.Undefined) { this.aggregationType = aggregationType; } } //</editor-fold> @Override public DataSource toDataSource(String providerName, String version) { DataSource.Builder builder = DataSource.builder(providerName, version); X_DBNAME.set(builder, dbName); X_TABLENAME.set(builder, tableName); X_DIMCOLUMNS.set(builder, dimColumns); X_PERIODCOLUMN.set(builder, periodColumn); X_VALUECOLUMN.set(builder, valueColumn); X_DATAFORMAT.set(builder, dataFormat); X_VERSIONCOLUMN.set(builder, versionColumn); X_FREQUENCY.set(builder, frequency); X_AGGREGATION_TYPE.set(builder, aggregationType); return builder.build(); } @Override public String[] getDimArray() { return getDimArray(dimColumns); } static final Splitter DIM_ARRAY_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings(); static String[] getDimArray(String dimColumns) { return Iterables.toArray(DIM_ARRAY_SPLITTER.split(dimColumns), String.class); } @Nonnull public static String[] getDimArray(@Nonnull DataSource dataSource) { return getDimArray(X_DIMCOLUMNS.get(dataSource)); } public static class BulkBean extends FixedDbBean { public static final IParam<DataSource, Long> X_CACHE_TTL = onLong( TimeUnit.MILLISECONDS.convert(5, TimeUnit.MINUTES), "cacheTtl"); public static final IParam<DataSource, Integer> X_CACHE_DEPTH = onInteger(1, "cacheDepth"); // protected long cacheTtl; protected int cacheDepth; public BulkBean() { super(); this.cacheTtl = X_CACHE_TTL.defaultValue(); this.cacheDepth = X_CACHE_DEPTH.defaultValue(); } public BulkBean(@Nonnull DataSource id) { super(id); this.cacheTtl = X_CACHE_TTL.get(id); this.cacheDepth = X_CACHE_DEPTH.get(id); } //<editor-fold defaultstate="collapsed" desc="Getters/Setters"> public long getCacheTtl() { return cacheTtl; } public void setCacheTtl(long cacheTtl) { this.cacheTtl = cacheTtl >= 0 ? cacheTtl : 0; } public int getCacheDepth() { return cacheDepth; } public void setCacheDepth(int cacheDepth) { this.cacheDepth = cacheDepth >= 0 ? cacheDepth : 0; } //</editor-fold> @Override public DataSource toDataSource(String providerName, String version) { DataSource.Builder builder = DataSource.builder(providerName, version); X_DBNAME.set(builder, dbName); X_TABLENAME.set(builder, tableName); X_DIMCOLUMNS.set(builder, dimColumns); X_PERIODCOLUMN.set(builder, periodColumn); X_VALUECOLUMN.set(builder, valueColumn); X_DATAFORMAT.set(builder, dataFormat); X_VERSIONCOLUMN.set(builder, versionColumn); X_FREQUENCY.set(builder, frequency); X_AGGREGATION_TYPE.set(builder, aggregationType); X_CACHE_TTL.set(builder, cacheTtl); X_CACHE_DEPTH.set(builder, cacheDepth); return builder.build(); } } }