diff --git a/cube-manager-api/config/profile.xml b/cube-manager-api/config/profile.xml
index 7322a2b..5ab41e7 100644
--- a/cube-manager-api/config/profile.xml
+++ b/cube-manager-api/config/profile.xml
@@ -11,15 +11,15 @@
Module that declares the interface of the cube manager
cube-manager-api
- 3.5.0-SNAPSHOT
+ 3.5.2-SNAPSHOT
org.gcube.data.analysis.tabulardata
cube-manager-api
- 3.5.0-SNAPSHOT
+ 3.5.2-SNAPSHOT
library
- cube-manager-api-3.5.0-SNAPSHOT.jar
+ cube-manager-api-3.5.2-SNAPSHOT.jar
diff --git a/cube-manager-api/distro/README b/cube-manager-api/distro/README
index 50ed72a..e39f0fc 100644
--- a/cube-manager-api/distro/README
+++ b/cube-manager-api/distro/README
@@ -12,7 +12,7 @@ Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo".
Version and Release Date
------------------------
-v. 3.5.0-SNAPSHOT (2013-10-21)
+v. 3.5.2-SNAPSHOT (2013-10-21)
Description
-----------
diff --git a/cube-manager-api/pom.xml b/cube-manager-api/pom.xml
index e3ae86f..3bc88a6 100644
--- a/cube-manager-api/pom.xml
+++ b/cube-manager-api/pom.xml
@@ -4,7 +4,7 @@
org.gcube.data.analysis.tabulardata
cube-manager-parent
- 3.5.1-SNAPSHOT
+ 3.5.2-SNAPSHOT
cube-manager-api
Cube Manager API
diff --git a/cube-manager-api/src/main/java/org/gcube/data/analysis/tabulardata/cube/CubeManager.java b/cube-manager-api/src/main/java/org/gcube/data/analysis/tabulardata/cube/CubeManager.java
index 01ded58..461e6c4 100644
--- a/cube-manager-api/src/main/java/org/gcube/data/analysis/tabulardata/cube/CubeManager.java
+++ b/cube-manager-api/src/main/java/org/gcube/data/analysis/tabulardata/cube/CubeManager.java
@@ -38,11 +38,13 @@ public interface CubeManager {
public Collection
getTables(TableType tableType);
+ public Table getTimeTable(PeriodType periodType) throws NoSuchTableException;
+
public Table getTable(TableId id) throws NoSuchTableException;
public void removeTable(TableId id) throws NoSuchTableException;
- public Table createTimeCodelist(PeriodType periodType);
+ //public Table createTimeCodelist(PeriodType periodType);
public Table removeValidations(TableId id) throws NoSuchTableException;
@@ -51,5 +53,7 @@ public interface CubeManager {
public Table addValidations(TableId id, ValidationsMetadata tableValidationMetadata, Column ... validationColumns ) throws NoSuchTableException;
public Table addValidations(TableId id, Column ... validationColumns ) throws NoSuchTableException;
+
+ public Table exchangeColumnPosition(TableId tableId, ColumnLocalId columnId, int newPosition ) throws NoSuchTableException;
}
diff --git a/cube-manager-data/config/profile.xml b/cube-manager-data/config/profile.xml
index 4849740..c1c5403 100644
--- a/cube-manager-data/config/profile.xml
+++ b/cube-manager-data/config/profile.xml
@@ -11,15 +11,15 @@
Cube Manager module that handles management of TD tables on a PostgreSQL DB backend.
cube-manager-data
- 3.5.0-SNAPSHOT
+ 3.5.2-SNAPSHOT
org.gcube.data.analysis.tabulardata
cube-manager-data
- 3.5.0-SNAPSHOT
+ 3.5.2-SNAPSHOT
library
- cube-manager-data-3.5.0-SNAPSHOT.jar
+ cube-manager-data-3.5.2-SNAPSHOT.jar
diff --git a/cube-manager-data/distro/README b/cube-manager-data/distro/README
index a78d243..4123360 100644
--- a/cube-manager-data/distro/README
+++ b/cube-manager-data/distro/README
@@ -12,7 +12,7 @@ Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo".
Version and Release Date
------------------------
-v. 3.5.0-SNAPSHOT (2013-10-21)
+v. 3.5.2-SNAPSHOT (2013-10-21)
Description
-----------
diff --git a/cube-manager-data/pom.xml b/cube-manager-data/pom.xml
index e5892dc..1367676 100644
--- a/cube-manager-data/pom.xml
+++ b/cube-manager-data/pom.xml
@@ -4,7 +4,7 @@
org.gcube.data.analysis.tabulardata
cube-manager-parent
- 3.5.1-SNAPSHOT
+ 3.5.2-SNAPSHOT
cube-manager-data
Cube Manager Data
diff --git a/cube-manager-data/src/main/java/org/gcube/data/analysis/tabulardata/cube/data/SQLDatabaseWrangler.java b/cube-manager-data/src/main/java/org/gcube/data/analysis/tabulardata/cube/data/SQLDatabaseWrangler.java
index 049086b..efa8832 100644
--- a/cube-manager-data/src/main/java/org/gcube/data/analysis/tabulardata/cube/data/SQLDatabaseWrangler.java
+++ b/cube-manager-data/src/main/java/org/gcube/data/analysis/tabulardata/cube/data/SQLDatabaseWrangler.java
@@ -149,12 +149,16 @@ public class SQLDatabaseWrangler implements DatabaseWrangler {
else
data = "WITH NO DATA";
- sb.append(String.format("CREATE %1$s TABLE %2$s AS TABLE %3$s %4$s;", unlogged, newTableName, tableToCloneName,
+ sb.append(String.format("CREATE %1$s TABLE %2$s WITHOUT OIDS AS TABLE %3$s %4$s;", unlogged, newTableName, tableToCloneName,
data));
- sb.append(String.format("CREATE SEQUENCE %1$s_id_seq OWNED BY %1$s.id;", newTableName));
- sb.append(String.format("SELECT setval('%1$s_id_seq', max(id) ) FROM %2$s;", newTableName, tableToCloneName));
+ sb.append(String.format("CREATE SEQUENCE %1$s_id_seq;", newTableName));
+ if (withData)
+ sb.append(String.format("SELECT setval('%1$s_id_seq', max(id) ) FROM %2$s;", newTableName, tableToCloneName));
+ else
+ sb.append(String.format("SELECT setval('%1$s_id_seq', 1 );", newTableName));
sb.append(String.format("ALTER TABLE %1$s ALTER id SET NOT NULL;", newTableName));
sb.append(String.format("ALTER TABLE %1$s ALTER id SET DEFAULT nextval('%1$s_id_seq');", newTableName));
+ log.debug("executing creation queries: "+sb.toString());
return sb.toString();
}
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/count_estimate.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/count_estimate.sql
new file mode 100644
index 0000000..5a19055
--- /dev/null
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/count_estimate.sql
@@ -0,0 +1,15 @@
+CREATE OR REPLACE FUNCTION count_estimate(query text) RETURNS integer AS
+$$
+DECLARE
+ rec record;
+ rows integer;
+BEGIN
+ FOR rec IN EXECUTE 'EXPLAIN ' || query LOOP
+ rows := substring(rec."QUERY PLAN" FROM ' rows=([[:digit:]]+)');
+ EXIT WHEN rows IS NOT NULL;
+ END LOOP;
+
+ RETURN rows;
+END
+$$
+LANGUAGE plpgsql;
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/get_century_id.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/get_century_id.sql
new file mode 100644
index 0000000..df8c5aa
--- /dev/null
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/get_century_id.sql
@@ -0,0 +1,3 @@
+CREATE OR REPLACE FUNCTION get_century_id(timestamp with time zone) RETURNS integer as $$
+ SELECT to_char($1, 'CC')::integer;
+$$ LANGUAGE SQL;
\ No newline at end of file
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/get_decade_id.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/get_decade_id.sql
new file mode 100644
index 0000000..3454deb
--- /dev/null
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/get_decade_id.sql
@@ -0,0 +1,5 @@
+CREATE OR REPLACE FUNCTION get_decade_id(timestamp with time zone) RETURNS integer as $$
+ SELECT substring(to_char($1,'YYYY') FROM '\d\d\d')::integer;
+$$ LANGUAGE SQL;
+
+
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/is_valid_date.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/is_valid_date.sql
index 00b15f3..41f60df 100644
--- a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/is_valid_date.sql
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/is_valid_date.sql
@@ -2,8 +2,6 @@ CREATE OR REPLACE FUNCTION is_valid_date(date_value anyelement) RETURNS boolean
DECLARE
tmp date;
BEGIN
- IF date_value IS NULL THEN return false;
- END IF;
tmp := CAST(date_value AS date);
return true;
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/is_valid_regexp.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/is_valid_regexp.sql
new file mode 100644
index 0000000..379730e
--- /dev/null
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/is_valid_regexp.sql
@@ -0,0 +1,3 @@
+CREATE OR REPLACE FUNCTION is_valid_regexp(anyelement, text) RETURNS boolean AS $$
+ select $1::text~$2
+$$ LANGUAGE SQL
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/normalize_century.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/normalize_century.sql
new file mode 100644
index 0000000..b3d453e
--- /dev/null
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/normalize_century.sql
@@ -0,0 +1,3 @@
+CREATE OR REPLACE FUNCTION normalize_century(timestamp with time zone) RETURNS text as $$
+ SELECT to_char($1, 'CC');
+$$ LANGUAGE SQL;
\ No newline at end of file
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/normalize_decade.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/normalize_decade.sql
new file mode 100644
index 0000000..162c5fc
--- /dev/null
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/normalize_decade.sql
@@ -0,0 +1,3 @@
+CREATE OR REPLACE FUNCTION normalize_decade(timestamp with time zone) RETURNS text as $$
+ SELECT substring(to_char($1,'YYYY') FROM '\d\d\d');
+$$ LANGUAGE SQL;
\ No newline at end of file
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/to_iso_century.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/to_iso_century.sql
new file mode 100644
index 0000000..d50afe8
--- /dev/null
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/to_iso_century.sql
@@ -0,0 +1,3 @@
+CREATE OR REPLACE FUNCTION to_iso_year(anyelement) RETURNS timestamp with time zone as $$
+ SELECT ($1::text || '01-01-01')::timestamp with time zone;
+$$ LANGUAGE SQL;
\ No newline at end of file
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/to_iso_decade.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/to_iso_decade.sql
new file mode 100644
index 0000000..22181d8
--- /dev/null
+++ b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/to_iso_decade.sql
@@ -0,0 +1,3 @@
+CREATE OR REPLACE FUNCTION to_iso_decade(anyelement) RETURNS timestamp with time zone as $$
+ SELECT ($1::text || '0-01-01')::timestamp with time zone;
+$$ LANGUAGE SQL;
\ No newline at end of file
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_day_dimension.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_day_dimension.sql
deleted file mode 100644
index c630483..0000000
--- a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_day_dimension.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-CREATE OR REPLACE FUNCTION update_gregorian_day_dimension() RETURNS trigger as $$
- DECLARE
- tmp_day date;
- BEGIN
- IF is_valid_date(NEW.day_code) THEN
- NEW.day_code := normalize_day(NEW.day_code);
- tmp_day := DATE(NEW.day_code);
- NEW.the_day = tmp_day;
- NEW.week_of_iso_year := EXTRACT(WEEK FROM tmp_day);
- NEW.month_of_year := EXTRACT(MONTH FROM tmp_day);
- NEW.quarter_of_year := EXTRACT(QUARTER FROM tmp_day);
- NEW.year := EXTRACT(YEAR FROM tmp_day);
- NEW.iso_year := EXTRACT(ISOYEAR FROM tmp_day);
- NEW.decade := EXTRACT(DECADE FROM tmp_day);
- RETURN NEW;
- ELSE
- RAISE EXCEPTION '% is not a valid ISO8601 day code', quote_literal(tmp_day);
- END IF;
-
- END
-$$ LANGUAGE plpgsql;
\ No newline at end of file
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_month_dimension.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_month_dimension.sql
deleted file mode 100644
index 3b0d9bb..0000000
--- a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_month_dimension.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-CREATE OR REPLACE FUNCTION update_gregorian_month_dimension() RETURNS trigger as $$
- DECLARE
- tmp_day date;
- BEGIN
- IF (is_valid_month(NEW.month_code)) THEN
- NEW.month_code := normalize_month(NEW.month_code);
- tmp_day := DATE(NEW.month_code || '-01');
- NEW.month_of_year := EXTRACT(MONTH FROM tmp_day);
- NEW.quarter_of_year := EXTRACT(QUARTER FROM tmp_day);
- NEW.year := EXTRACT(YEAR FROM tmp_day);
- NEW.decade := EXTRACT(DECADE FROM tmp_day);
- RETURN NEW;
- ELSE
- RAISE EXCEPTION '% is not a valid ISO8601 month code', quote_literal(month_code);
- END IF;
-
- END
-$$ LANGUAGE plpgsql;
\ No newline at end of file
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_quarter_dimension.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_quarter_dimension.sql
deleted file mode 100644
index b3aa634..0000000
--- a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_quarter_dimension.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-CREATE OR REPLACE FUNCTION update_gregorian_quarter_dimension() RETURNS trigger as $$
- DECLARE
- tmp_date date;
- BEGIN
- IF is_valid_quarter(NEW.quarter_code) THEN
- NEW.quarter_code := normalize_quarter(NEW.quarter_code);
- NEW.quarter_of_year := SUBSTRING(SUBSTRING(NEW.quarter_code FROM 'Q[0-9]') FROM '[1-4]$');
- RAISE NOTICE 'Evaluated Quearter of year: %',NEW.quarter_of_year;
- NEW.year := SUBSTRING(NEW.quarter_code FROM 'Q([1-4])$') AS integer;
- RAISE NOTICE 'Evaluated year: %',NEW.year;
- tmp_date := NEW.year || '-01-01';
- NEW.decade := EXTRACT(DECADE FROM tmp_date);
- RETURN NEW;
- ELSE
- RAISE EXCEPTION '% is not a valid quarter code', quote_literal(NEW.quarter_code);
- END IF;
-
- END
-$$ LANGUAGE plpgsql;
\ No newline at end of file
diff --git a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_year_dimension.sql b/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_year_dimension.sql
deleted file mode 100644
index c076771..0000000
--- a/cube-manager-data/src/main/resources/org/gcube/data/analysis/tabulardata/sql/update_gregorian_year_dimension.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-CREATE OR REPLACE FUNCTION update_gregorian_year_dimension() RETURNS trigger as $$
- DECLARE
- tmp_date date;
- BEGIN
- IF is_valid_year(NEW.year_code) THEN
- NEW.year_code := normalize_year(NEW.year_code);
- tmp_date := NEW.year_code || '-01-01';
- NEW.year := EXTRACT(YEAR FROM tmp_date);
- NEW.decade := EXTRACT(DECADE FROM tmp_date);
- RETURN NEW;
- ELSE
- RAISE EXCEPTION '%s is not a valid ISO8601 year code', quote_literal(year_code);
- END IF;
-
- END
-$$ LANGUAGE plpgsql;
\ No newline at end of file
diff --git a/cube-manager-metadata/config/profile.xml b/cube-manager-metadata/config/profile.xml
index 3446348..3a44f5f 100644
--- a/cube-manager-metadata/config/profile.xml
+++ b/cube-manager-metadata/config/profile.xml
@@ -11,15 +11,15 @@
Cube Manager module that manages the table and column metadata and their persistence on a backend.
cube-manager-metadata
- 3.5.0-SNAPSHOT
+ 3.5.2-SNAPSHOT
org.gcube.data.analysis.tabulardata
cube-manager-metadata
- 3.5.0-SNAPSHOT
+ 3.5.2-SNAPSHOT
library
- cube-manager-metadata-3.5.0-SNAPSHOT.jar
+ cube-manager-metadata-3.5.2-SNAPSHOT.jar
diff --git a/cube-manager-metadata/distro/README b/cube-manager-metadata/distro/README
index fda3f25..813264e 100644
--- a/cube-manager-metadata/distro/README
+++ b/cube-manager-metadata/distro/README
@@ -12,7 +12,7 @@ Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo".
Version and Release Date
------------------------
-v. 3.5.0-SNAPSHOT (2013-10-21)
+v. 3.5.2-SNAPSHOT (2013-10-21)
Description
-----------
diff --git a/cube-manager-metadata/pom.xml b/cube-manager-metadata/pom.xml
index 0ee1f1f..4ae56d5 100644
--- a/cube-manager-metadata/pom.xml
+++ b/cube-manager-metadata/pom.xml
@@ -4,7 +4,7 @@
org.gcube.data.analysis.tabulardata
cube-manager-parent
- 3.5.1-SNAPSHOT
+ 3.5.2-SNAPSHOT
cube-manager-metadata
Cube Manager Metadata
diff --git a/cube-manager-metadata/src/main/java/org/gcube/data/analysis/tabulardata/cube/metadata/ISEntityManagerProvider.java b/cube-manager-metadata/src/main/java/org/gcube/data/analysis/tabulardata/cube/metadata/ISEntityManagerProvider.java
index c3e765d..035f4d6 100644
--- a/cube-manager-metadata/src/main/java/org/gcube/data/analysis/tabulardata/cube/metadata/ISEntityManagerProvider.java
+++ b/cube-manager-metadata/src/main/java/org/gcube/data/analysis/tabulardata/cube/metadata/ISEntityManagerProvider.java
@@ -1,8 +1,8 @@
package org.gcube.data.analysis.tabulardata.cube.metadata;
import java.util.Map;
+
import javax.inject.Singleton;
-import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
@@ -20,7 +20,7 @@ public class ISEntityManagerProvider {
private DatabaseProvider dbProvider;
- private EntityManager em;
+ private EntityManagerFactory emf;
public ISEntityManagerProvider(DatabaseEndpointIdentifier metaDBEndpointId,
DatabaseProvider dbProvider) {
@@ -28,8 +28,8 @@ public class ISEntityManagerProvider {
this.dbProvider = dbProvider;
}
- public EntityManager get() {
- if (em == null) {
+ public EntityManagerFactory get() {
+ if (!isInitialized()){
DatabaseEndpoint dbDescriptor = dbProvider.get(metaDBEndpointId);
// Retrieve driver from properties
@@ -60,22 +60,18 @@ public class ISEntityManagerProvider {
properties.put("eclipselink.ddl-generation", "create-tables");
// properties.put("eclipselink.ddl-generation","create-or-extend-tables");
// properties.put("eclipselink.ddl-generation","drop-and-create-tables");
- EntityManagerFactory emf = Persistence.createEntityManagerFactory("default", properties);
-
- em = emf.createEntityManager();
+ emf = Persistence.createEntityManagerFactory("default", properties);
}
- return em;
+ return emf;
+ }
- }
-
public void close(){
- em.flush();
- em.close();
- em = null;
+ emf.close();
+ emf = null;
}
-
+
public boolean isInitialized(){
- return em!=null;
+ return emf!=null;
}
-
+
}
diff --git a/cube-manager-metadata/src/main/java/org/gcube/data/analysis/tabulardata/cube/metadata/JPACubeMetadataWrangler.java b/cube-manager-metadata/src/main/java/org/gcube/data/analysis/tabulardata/cube/metadata/JPACubeMetadataWrangler.java
index a951a42..ce23dc8 100644
--- a/cube-manager-metadata/src/main/java/org/gcube/data/analysis/tabulardata/cube/metadata/JPACubeMetadataWrangler.java
+++ b/cube-manager-metadata/src/main/java/org/gcube/data/analysis/tabulardata/cube/metadata/JPACubeMetadataWrangler.java
@@ -6,6 +6,7 @@ import javax.enterprise.inject.Default;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;
@@ -28,7 +29,7 @@ public class JPACubeMetadataWrangler implements CubeMetadataWrangler {
Logger log = LoggerFactory.getLogger(JPACubeMetadataWrangler.class);
- EntityManager em = null;
+ EntityManagerFactory emf = null;
ISEntityManagerProvider emp;
@@ -49,73 +50,102 @@ public class JPACubeMetadataWrangler implements CubeMetadataWrangler {
public synchronized Table save(Table table, boolean overwrite) {
TableConsistencyChecker.checkTableConsistency(table);
JPATable jpaTable = null;
+ EntityManager em = getEntityManagerFactory().createEntityManager();
+ try{
+ if (overwrite)
+ try {
+ jpaTable = JPATableFactory.updateJPATable(getJPATableById(table.getId().getValue(), em), table);
+ } catch (NoSuchTableException e) {
+ log.warn("the table with id {} is not persisted, cannot overwrite ",table.getId().getValue());
+ }
- if (overwrite)
- try {
- jpaTable = JPATableFactory.updateJPATable(getJPATableById(table.getId().getValue()), table);
- } catch (NoSuchTableException e) {
- log.warn("the table with id {} is not persisted, cannot overwrite ",table.getId().getValue());
- }
-
- if (jpaTable==null)
- jpaTable = JPATableFactory.createJPATable(table);
-
- persistEntity(jpaTable);
- return TableFactory.createTable(jpaTable);
+ if (jpaTable==null)
+ jpaTable = JPATableFactory.createJPATable(table);
+
+ persistEntity(jpaTable, em);
+ return TableFactory.createTable(jpaTable);
+ }finally{
+ em.close();
+ }
}
private void initializeIfNot() {
- if (em == null)
- em = emp.get();
+ if (emf == null)
+ emf = emp.get();
}
@Override
public synchronized Table get(TableId id) throws NoSuchTableException {
- return TableFactory.createTable(getJPATableById(id.getValue()));
+ EntityManager em = getEntityManagerFactory().createEntityManager();
+ try{
+ return TableFactory.createTable(getJPATableById(id.getValue(), em));
+ }finally{
+ em.close();
+ }
}
@Override
public Table getTableByName(String name) throws NoSuchTableException {
- return TableFactory.createTable(getJPATableByTableName(name));
+ EntityManager em = getEntityManagerFactory().createEntityManager();
+ try{
+ return TableFactory.createTable(getJPATableByTableName(name, em));
+ }finally{
+ em.close();
+ }
}
@Override
public synchronized List getAll() {
- return Lists.transform(getAllJPATables(), new Function() {
+ EntityManager em = getEntityManagerFactory().createEntityManager();
+ try{
+ return Lists.transform(getAllJPATables(em), new Function() {
- @Override
- public Table apply(JPATable input) {
- return TableFactory.createTable(input);
- }
+ @Override
+ public Table apply(JPATable input) {
+ return TableFactory.createTable(input);
+ }
- });
+ });
+ }finally{
+ em.close();
+ }
}
@Override
public synchronized List getAll(TableType tableType) {
- return Lists.transform(getAllJPATablesByType(tableType), new Function() {
+ EntityManager em = getEntityManagerFactory().createEntityManager();
+ try{
+ return Lists.transform(getAllJPATablesByType(tableType, em), new Function() {
- @Override
- public Table apply(JPATable input) {
- return TableFactory.createTable(input);
- }
+ @Override
+ public Table apply(JPATable input) {
+ return TableFactory.createTable(input);
+ }
- });
+ });
+ }finally{
+ em.close();
+ }
}
@Override
public synchronized void remove(TableId id) throws NoSuchTableException {
- removeEntity(getJPATableById(id.getValue()));
+ EntityManager em = getEntityManagerFactory().createEntityManager();
+ try{
+ removeEntity(getJPATableById(id.getValue(), em), em);
+ }finally{
+ em.close();
+ }
}
- private JPATable getJPATableById(long id) throws NoSuchTableException {
- JPATable table = getEntityManager().find(JPATable.class, id);
+ private JPATable getJPATableById(long id, EntityManager em) throws NoSuchTableException {
+ JPATable table = em.find(JPATable.class, id);
if (table==null)throw new NoSuchTableException(id);
return table;
}
- private JPATable getJPATableByTableName(String name) throws NoSuchTableException {
- TypedQuery query = getEntityManager().createNamedQuery("Table.findByName", JPATable.class);
+ private JPATable getJPATableByTableName(String name, EntityManager em) throws NoSuchTableException {
+ TypedQuery query = em.createNamedQuery("Table.findByName", JPATable.class);
query.setParameter("Name", name);
try{
return query.getSingleResult();
@@ -123,27 +153,28 @@ public class JPACubeMetadataWrangler implements CubeMetadataWrangler {
throw new NoSuchTableException(name);
}
}
-
- private List getAllJPATables() {
- TypedQuery query = getEntityManager().createNamedQuery("Table.findAll", JPATable.class);
+
+ private List getAllJPATables(EntityManager em) {
+ TypedQuery query = em.createNamedQuery("Table.findAll", JPATable.class);
return query.getResultList();
+
}
- private List getAllJPATablesByType(TableType tableType) {
- TypedQuery query = getEntityManager().createNamedQuery("Table.findAllByType", JPATable.class);
+ private List getAllJPATablesByType(TableType tableType, EntityManager em ) {
+ TypedQuery query = em.createNamedQuery("Table.findAllByType", JPATable.class);
query.setParameter("TableType", tableType);
return query.getResultList();
+
}
- private void persistEntity(JPATable entity) {
+ private void persistEntity(JPATable entity, EntityManager em) {
try{
- getEntityManager().getTransaction().begin();
-
+ em.getTransaction().begin();
if (!em.contains(entity))
- getEntityManager().persist(entity);
- else getEntityManager().merge(entity);
- getEntityManager().flush();
- getEntityManager().getTransaction().commit();
+ em.persist(entity);
+ else em.merge(entity);
+ em.flush();
+ em.getTransaction().commit();
}catch(Throwable t){
log.warn("DB error",t);
em.getTransaction().rollback();
@@ -159,16 +190,16 @@ public class JPACubeMetadataWrangler implements CubeMetadataWrangler {
// log.debug("Updated entity: " + entity);
// }
- private void removeEntity(Object entity) {
- getEntityManager().getTransaction().begin();
- getEntityManager().remove(entity);
- getEntityManager().flush();
- getEntityManager().getTransaction().commit();
+ private void removeEntity(Object entity, EntityManager em) {
+ em.getTransaction().begin();
+ em.remove(entity);
+ em.flush();
+ em.getTransaction().commit();
}
- private EntityManager getEntityManager() {
+ private EntityManagerFactory getEntityManagerFactory() {
initializeIfNot();
- return em;
+ return emf;
}
}
diff --git a/cube-manager-metadata/src/test/java/org/gcube/data/analysis/tabulardata/cube/metadata/config/TestDatabaseProvider.java b/cube-manager-metadata/src/test/java/org/gcube/data/analysis/tabulardata/cube/metadata/config/TestDatabaseProvider.java
index 816aa90..8dd92b0 100644
--- a/cube-manager-metadata/src/test/java/org/gcube/data/analysis/tabulardata/cube/metadata/config/TestDatabaseProvider.java
+++ b/cube-manager-metadata/src/test/java/org/gcube/data/analysis/tabulardata/cube/metadata/config/TestDatabaseProvider.java
@@ -51,21 +51,21 @@ public class TestDatabaseProvider implements DatabaseProvider {
properties.add(new DatabaseProperty("eclipselink.ddl-generation", "drop-and-create-tables"));
return new DatabaseEndpoint("Metadata-Admin", "Metadata-Admin",
- "jdbc:postgresql://node7.d.d4science.research-infrastructures.eu:5432/tabularmetadata", new Credential("tabulardataadmin", "gcube2010"), properties);
+ "jdbc:postgresql://localhost:5432/tabularmetadata", new Credential("tabulardataadmin", "gcube2010"), properties);
}
private static DatabaseEndpoint createDataUserEndpoint() {
Collection properties = new ArrayList();
properties.add(new DatabaseProperty("driver", "org.postgresql.Driver"));
return new DatabaseEndpoint("Data-User", "test description",
- "jdbc:postgresql://node7.d.d4science.research-infrastructures.eu:5432/tabulardata", new Credential("tabulardataadmin", "gcube2010"), properties);
+ "jdbc:postgresql://localhost:5432/tabulardata", new Credential("tabulardataadmin", "gcube2010"), properties);
}
private static DatabaseEndpoint createDataAdminEndpoint() {
Collection properties = new ArrayList();
properties.add(new DatabaseProperty("driver", "org.postgresql.Driver"));
return new DatabaseEndpoint("Data-Admin", "test description",
- "jdbc:postgresql://node7.d.d4science.research-infrastructures.eu:5432/tabulardata", new Credential("tabulardataadmin", "gcube2010"), properties);
+ "jdbc:postgresql://localhost:5432/tabulardata", new Credential("tabulardataadmin", "gcube2010"), properties);
}
@Override
diff --git a/cube-manager/config/profile.xml b/cube-manager/config/profile.xml
index d58b953..44a58b7 100644
--- a/cube-manager/config/profile.xml
+++ b/cube-manager/config/profile.xml
@@ -11,15 +11,15 @@
Component of Tabular Data that manages table creation/deletion on DB backend and keeps a hold of created tables and their structure and metadata.
cube-manager
- 3.5.0-SNAPSHOT
+ 3.5.2-SNAPSHOT
org.gcube.data.analysis.tabulardata
cube-manager
- 3.5.0-SNAPSHOT
+ 3.5.2-SNAPSHOT
library
- cube-manager-3.5.0-SNAPSHOT.jar
+ cube-manager-3.5.2-SNAPSHOT.jar
diff --git a/cube-manager/distro/README b/cube-manager/distro/README
index c318647..96be710 100644
--- a/cube-manager/distro/README
+++ b/cube-manager/distro/README
@@ -12,7 +12,7 @@ Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo".
Version and Release Date
------------------------
-v. 3.5.0-SNAPSHOT (2013-10-21)
+v. 3.5.2-SNAPSHOT (2013-10-21)
Description
-----------
diff --git a/cube-manager/pom.xml b/cube-manager/pom.xml
index 53d22e8..215306c 100644
--- a/cube-manager/pom.xml
+++ b/cube-manager/pom.xml
@@ -4,7 +4,7 @@
org.gcube.data.analysis.tabulardata
cube-manager-parent
- 3.5.1-SNAPSHOT
+ 3.5.2-SNAPSHOT
cube-manager
Cube Manager
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/DefaultCubeManager.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/DefaultCubeManager.java
index fd727fb..c6b6c52 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/DefaultCubeManager.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/DefaultCubeManager.java
@@ -3,6 +3,7 @@ package org.gcube.data.analysis.tabulardata.cube;
import java.util.ArrayList;
import java.util.Collection;
+import javax.enterprise.event.Event;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
@@ -10,6 +11,7 @@ import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton;
+import org.gcube.data.analysis.tabulardata.cube.events.TableRemovedEvent;
import org.gcube.data.analysis.tabulardata.cube.exceptions.NoSuchTableException;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -39,6 +41,9 @@ public class DefaultCubeManager implements CubeManager {
//private static Logger log = LoggerFactory.getLogger(DefaultCubeManager.class);
+
+ private Event tableRemovedEvent;
+
private Provider codelistCreatorProvider;
private Provider datasetCreatorProvider;
private Provider hclCreatorProvider;
@@ -58,7 +63,8 @@ public class DefaultCubeManager implements CubeManager {
@Named("ViewTable") Instance tempTableCreatorProvider,
@Named("GenericTable") Instance genericTableCreatorProvider,
@Named("ViewTable") Instance viewTableCreatorProvider,
- TableMetaCreatorProvider tableMetaCreatorProvider, TimeCodelistCreator timeCreator) {
+ TableMetaCreatorProvider tableMetaCreatorProvider, TimeCodelistCreator timeCreator,
+ Event tableRemovedEvent) {
super();
this.tableManager = tableManager;
@@ -70,6 +76,7 @@ public class DefaultCubeManager implements CubeManager {
this.viewTableCreatorProvider = viewTableCreatorProvider;
this.defaultTableMetaCreatorProvider = tableMetaCreatorProvider;
this.timeCodelistCreator = timeCreator;
+ this.tableRemovedEvent = tableRemovedEvent;
}
@@ -113,6 +120,7 @@ public class DefaultCubeManager implements CubeManager {
@Override
public void removeTable(TableId id) throws NoSuchTableException {
tableManager.remove(id);
+ tableRemovedEvent.fire(new TableRemovedEvent(id));
}
@@ -122,7 +130,7 @@ public class DefaultCubeManager implements CubeManager {
}
@Override
- public Table createTimeCodelist(PeriodType periodType) {
+ public Table getTimeTable(PeriodType periodType) {
Table resultTable = timeCodelistCreator.getTable(periodType);
return resultTable;
}
@@ -182,4 +190,16 @@ public class DefaultCubeManager implements CubeManager {
}
+ @Override
+ public Table exchangeColumnPosition(TableId id, ColumnLocalId columnId,
+ int position) throws NoSuchTableException {
+ Table table = tableManager.get(id);
+ Column colToMove = table.getColumnById(columnId);
+ table.getColumns().remove(colToMove);
+ table.getColumns().add(position, colToMove);
+ tableManager.save(table, true);
+ return table;
+ }
+
+
}
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/events/TableCreationEvent.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/events/TableCreationEvent.java
new file mode 100644
index 0000000..8c223fe
--- /dev/null
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/events/TableCreationEvent.java
@@ -0,0 +1,24 @@
+package org.gcube.data.analysis.tabulardata.cube.events;
+
+import java.io.Serializable;
+
+import org.gcube.data.analysis.tabulardata.model.table.Table;
+
+public class TableCreationEvent implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ Table table;
+
+ public TableCreationEvent(Table table) {
+ super();
+ this.table = table;
+ }
+
+ public Table getTable() {
+ return table;
+ }
+
+}
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/events/TableRemovedEvent.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/events/TableRemovedEvent.java
new file mode 100644
index 0000000..a7795b3
--- /dev/null
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/events/TableRemovedEvent.java
@@ -0,0 +1,24 @@
+package org.gcube.data.analysis.tabulardata.cube.events;
+
+import java.io.Serializable;
+
+import org.gcube.data.analysis.tabulardata.model.table.TableId;
+
+public class TableRemovedEvent implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ TableId tableId;
+
+ public TableRemovedEvent(TableId tableId) {
+ super();
+ this.tableId = tableId;
+ }
+
+ public TableId getTableId() {
+ return tableId;
+ }
+
+}
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/DefaultTableCreator.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/DefaultTableCreator.java
index 83ddc87..ed8e006 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/DefaultTableCreator.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/DefaultTableCreator.java
@@ -8,26 +8,37 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import javax.enterprise.event.Event;
+
import org.apache.commons.lang.RandomStringUtils;
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.exceptions.NoSuchTableException;
import org.gcube.data.analysis.tabulardata.cube.exceptions.TableCreationException;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.model.column.Column;
import org.gcube.data.analysis.tabulardata.model.column.factories.IdColumnFactory;
import org.gcube.data.analysis.tabulardata.model.column.type.IdColumnType;
+import org.gcube.data.analysis.tabulardata.model.column.type.TimeDimensionColumnType;
import org.gcube.data.analysis.tabulardata.model.datatype.DataType;
import org.gcube.data.analysis.tabulardata.model.idioms.ColumnHasName;
import org.gcube.data.analysis.tabulardata.model.metadata.column.ColumnMetadata;
+import org.gcube.data.analysis.tabulardata.model.metadata.column.PeriodTypeMetadata;
import org.gcube.data.analysis.tabulardata.model.metadata.table.TableMetadata;
import org.gcube.data.analysis.tabulardata.model.table.Table;
import org.gcube.data.analysis.tabulardata.model.table.TableType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
public abstract class DefaultTableCreator implements TableCreator {
+
+ Event tableCreatedEvent;
+
+ private static Logger logger = LoggerFactory.getLogger(DefaultTableCreator.class);
protected DatabaseWrangler dbWrangler;
protected CubeMetadataWrangler mdWrangler;
@@ -47,12 +58,13 @@ public abstract class DefaultTableCreator implements TableCreator {
private TableType tableType;
public DefaultTableCreator(DatabaseWrangler dbWrangler, CubeMetadataWrangler mdWrangler, TableManager tableManager,
- TableType tableType) {
+ TableType tableType, Event tableCreatedEvent) {
super();
this.dbWrangler = dbWrangler;
this.mdWrangler = mdWrangler;
this.tableManager = tableManager;
this.tableType = tableType;
+ this.tableCreatedEvent = tableCreatedEvent;
}
@Override
@@ -243,11 +255,16 @@ public abstract class DefaultTableCreator implements TableCreator {
cloneMetadata(tableToClone, newTable);
}
+
+
// Register codelist on metadata DB
- return mdWrangler.save(newTable, false);
+ Table createdTable = mdWrangler.save(newTable, false);
+ tableCreatedEvent.fire(new TableCreationEvent(createdTable));
+ return createdTable;
}catch(TableCreationException tce){
throw tce;
}catch (Exception e) {
+ e.printStackTrace();
throw new TableCreationException(e.getMessage());
}finally{
resetTableCreator();
@@ -275,6 +292,8 @@ public abstract class DefaultTableCreator implements TableCreator {
for (Column column : getAllColumnsExceptId()) {
if (column.hasRelationship()) {
try {
+ if (column.getColumnType() instanceof TimeDimensionColumnType && column.contains(PeriodTypeMetadata.class) )
+ continue;
Table targetTable = tableManager.get(column.getRelationship().getTargetTableId());
targetTable.getColumnById(column.getRelationship().getTargetColumnId());
} catch (NoSuchTableException e) {
@@ -308,6 +327,7 @@ public abstract class DefaultTableCreator implements TableCreator {
protected void cloneMetadata(Table sourceTable, Table destTable) {
for (TableMetadata m : sourceTable.getAllMetadata()) {
+ logger.info("source metadata : "+m);
if (m.isInheritable())
destTable.setMetadata(m);
}
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/codelist/CodelistCreator.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/codelist/CodelistCreator.java
index 00ad8d3..3d24053 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/codelist/CodelistCreator.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/codelist/CodelistCreator.java
@@ -3,7 +3,10 @@ package org.gcube.data.analysis.tabulardata.cube.tablemanagers.codelist;
import java.util.Collection;
import java.util.List;
+import javax.enterprise.event.Event;
+
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.DefaultTableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -19,8 +22,8 @@ import com.google.common.collect.Lists;
public class CodelistCreator extends DefaultTableCreator {
- public CodelistCreator(DatabaseWrangler dw, CubeMetadataWrangler cmw, TableManager tm) {
- super(dw, cmw, tm, new CodelistTableType());
+ public CodelistCreator(DatabaseWrangler dw, CubeMetadataWrangler cmw, TableManager tm, Event tableCreatedEvent) {
+ super(dw, cmw, tm, new CodelistTableType(), tableCreatedEvent);
}
private static List indexedColumnTypes = Lists.newArrayList(new IdColumnType(), new CodeColumnType(),
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/codelist/CodelistCreatorProvider.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/codelist/CodelistCreatorProvider.java
index 8330acc..0ba4266 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/codelist/CodelistCreatorProvider.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/codelist/CodelistCreatorProvider.java
@@ -1,14 +1,17 @@
package org.gcube.data.analysis.tabulardata.cube.tablemanagers.codelist;
+import javax.enterprise.event.Event;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
+import org.gcube.data.analysis.tabulardata.model.table.Table;
public class CodelistCreatorProvider implements Provider {
@@ -16,21 +19,24 @@ public class CodelistCreatorProvider implements Provider {
private DatabaseWrangler dw;
private CubeMetadataWrangler cmw;
private TableManager tm;
-
+ private Event tableCreatedEvent;
+
+
@Inject
public CodelistCreatorProvider(DatabaseWrangler dw,
- CubeMetadataWrangler cmw, TableManager tm) {
+ CubeMetadataWrangler cmw, TableManager tm, Event tableCreatedEvent) {
super();
this.dw = dw;
this.cmw = cmw;
this.tm=tm;
+ this.tableCreatedEvent = tableCreatedEvent;
}
@Produces
@Named("Codelist")
@Override
public TableCreator get() {
- return new CodelistCreator(dw, cmw, tm);
+ return new CodelistCreator(dw, cmw, tm, this.tableCreatedEvent);
}
}
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/dataset/DatasetCreator.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/dataset/DatasetCreator.java
index 5ec8af1..0bd44b0 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/dataset/DatasetCreator.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/dataset/DatasetCreator.java
@@ -3,7 +3,10 @@ package org.gcube.data.analysis.tabulardata.cube.tablemanagers.dataset;
import java.util.Collection;
import java.util.List;
+import javax.enterprise.event.Event;
+
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.DefaultTableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -11,14 +14,15 @@ import org.gcube.data.analysis.tabulardata.model.column.Column;
import org.gcube.data.analysis.tabulardata.model.column.ColumnType;
import org.gcube.data.analysis.tabulardata.model.column.type.DimensionColumnType;
import org.gcube.data.analysis.tabulardata.model.column.type.IdColumnType;
+import org.gcube.data.analysis.tabulardata.model.table.Table;
import org.gcube.data.analysis.tabulardata.model.table.type.DatasetTableType;
import com.google.common.collect.Lists;
public class DatasetCreator extends DefaultTableCreator {
- public DatasetCreator(DatabaseWrangler dbWrangler, CubeMetadataWrangler cmWrangler, TableManager tableManager) {
- super(dbWrangler, cmWrangler, tableManager, new DatasetTableType());
+ public DatasetCreator(DatabaseWrangler dbWrangler, CubeMetadataWrangler cmWrangler, TableManager tableManager, Event tableCreatedEvent) {
+ super(dbWrangler, cmWrangler, tableManager, new DatasetTableType(), tableCreatedEvent);
}
private static List indexedColumnTypes = Lists.newArrayList(new IdColumnType(), new DimensionColumnType());
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/dataset/DatasetCreatorProvider.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/dataset/DatasetCreatorProvider.java
index 9075a2e..77432ce 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/dataset/DatasetCreatorProvider.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/dataset/DatasetCreatorProvider.java
@@ -1,11 +1,13 @@
package org.gcube.data.analysis.tabulardata.cube.tablemanagers.dataset;
+import javax.enterprise.event.Event;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -18,19 +20,22 @@ public class DatasetCreatorProvider implements Provider {
private TableManager tableManager;
+ private Event tableCreatedEvent;
+
@Inject
public DatasetCreatorProvider(DatabaseWrangler dbWrangler,
- CubeMetadataWrangler mdWrangler, TableManager tableManager) {
+ CubeMetadataWrangler mdWrangler, TableManager tableManager, Event tableCreatedEvent) {
this.dbWrangler = dbWrangler;
this.mdWrangler = mdWrangler;
this.tableManager = tableManager;
+ this.tableCreatedEvent = tableCreatedEvent;
}
@Produces
@Named("Dataset")
@Override
public TableCreator get() {
- return new DatasetCreator(dbWrangler, mdWrangler, tableManager);
+ return new DatasetCreator(dbWrangler, mdWrangler, tableManager, tableCreatedEvent);
}
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/generic/GenericTableCreator.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/generic/GenericTableCreator.java
index 3ed31e3..c484b4a 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/generic/GenericTableCreator.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/generic/GenericTableCreator.java
@@ -3,7 +3,10 @@ package org.gcube.data.analysis.tabulardata.cube.tablemanagers.generic;
import java.util.Collection;
import java.util.List;
+import javax.enterprise.event.Event;
+
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.DefaultTableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -16,8 +19,8 @@ import com.google.common.collect.Lists;
public class GenericTableCreator extends DefaultTableCreator {
- public GenericTableCreator(DatabaseWrangler dw, CubeMetadataWrangler cmw, TableManager tm) {
- super(dw, cmw, tm, new GenericTableType());
+ public GenericTableCreator(DatabaseWrangler dw, CubeMetadataWrangler cmw, TableManager tm, Event tableCreatedEvent) {
+ super(dw, cmw, tm, new GenericTableType(), tableCreatedEvent);
}
private static List indexedColumnTypes = Lists.newArrayList((ColumnType)new IdColumnType());
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/generic/GenericTableCreatorProvider.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/generic/GenericTableCreatorProvider.java
index 7ae2358..e0a98d8 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/generic/GenericTableCreatorProvider.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/generic/GenericTableCreatorProvider.java
@@ -1,11 +1,13 @@
package org.gcube.data.analysis.tabulardata.cube.tablemanagers.generic;
+import javax.enterprise.event.Event;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -17,20 +19,23 @@ public class GenericTableCreatorProvider implements Provider {
private CubeMetadataWrangler mdWrangler;
private TableManager tableManager;
+
+ private Event tableCreatedEvent;
@Inject
public GenericTableCreatorProvider(DatabaseWrangler dbWrangler, CubeMetadataWrangler mdWrangler,
- TableManager tableManager) {
+ TableManager tableManager, Event tableCreatedEvent) {
this.dbWrangler = dbWrangler;
this.mdWrangler = mdWrangler;
this.tableManager = tableManager;
+ this.tableCreatedEvent = tableCreatedEvent;
}
@Produces
@Named("GenericTable")
@Override
public TableCreator get() {
- return new GenericTableCreator(dbWrangler, mdWrangler, tableManager);
+ return new GenericTableCreator(dbWrangler, mdWrangler, tableManager, this.tableCreatedEvent);
}
}
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/hcl/HCLCreator.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/hcl/HCLCreator.java
index a836587..965117f 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/hcl/HCLCreator.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/hcl/HCLCreator.java
@@ -4,7 +4,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import javax.enterprise.event.Event;
+
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.DefaultTableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -15,8 +18,8 @@ import org.gcube.data.analysis.tabulardata.model.table.type.HierarchicalCodelist
public class HCLCreator extends DefaultTableCreator {
- public HCLCreator(DatabaseWrangler dbWrangler, CubeMetadataWrangler cmWrangler, TableManager tableManager) {
- super(dbWrangler, cmWrangler, tableManager, new HierarchicalCodelistTableType());
+ public HCLCreator(DatabaseWrangler dbWrangler, CubeMetadataWrangler cmWrangler, TableManager tableManager, Event tableCreatedEvent) {
+ super(dbWrangler, cmWrangler, tableManager, new HierarchicalCodelistTableType(), tableCreatedEvent);
}
private static List indexedColumnTypes = new ArrayList();
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/hcl/HCLCreatorProvider.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/hcl/HCLCreatorProvider.java
index a95ed65..d14739d 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/hcl/HCLCreatorProvider.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/hcl/HCLCreatorProvider.java
@@ -1,14 +1,17 @@
package org.gcube.data.analysis.tabulardata.cube.tablemanagers.hcl;
+import javax.enterprise.event.Event;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
+import org.gcube.data.analysis.tabulardata.model.table.Table;
public class HCLCreatorProvider implements Provider{
@@ -17,22 +20,25 @@ public class HCLCreatorProvider implements Provider{
private CubeMetadataWrangler hclMetadataWrangler;
private TableManager tableManager;
+
+ private Event tableCreatedEvent;
@Inject
public HCLCreatorProvider(DatabaseWrangler dbWrangler,
CubeMetadataWrangler hclMetadataWrangler,
- TableManager tableManager) {
+ TableManager tableManager, Event tableCreatedEvent) {
super();
this.dbWrangler = dbWrangler;
this.hclMetadataWrangler = hclMetadataWrangler;
this.tableManager= tableManager;
+ this.tableCreatedEvent = tableCreatedEvent;
}
@Produces
@Named("HCL")
@Override
public TableCreator get() {
- return new HCLCreator(dbWrangler, hclMetadataWrangler, tableManager);
+ return new HCLCreator(dbWrangler, hclMetadataWrangler, tableManager, tableCreatedEvent);
}
}
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/view/ViewTableCreator.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/view/ViewTableCreator.java
index c046ed0..97af38e 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/view/ViewTableCreator.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/view/ViewTableCreator.java
@@ -3,7 +3,10 @@ package org.gcube.data.analysis.tabulardata.cube.tablemanagers.view;
import java.util.Collection;
import java.util.List;
+import javax.enterprise.event.Event;
+
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.DefaultTableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -17,8 +20,8 @@ import com.google.common.collect.Lists;
public class ViewTableCreator extends DefaultTableCreator {
- public ViewTableCreator(DatabaseWrangler dw, CubeMetadataWrangler cmw, TableManager tm) {
- super(dw, cmw, tm, new DatasetViewTableType());
+ public ViewTableCreator(DatabaseWrangler dw, CubeMetadataWrangler cmw, TableManager tm, Event tableCreatedEvent) {
+ super(dw, cmw, tm, new DatasetViewTableType(), tableCreatedEvent);
}
private static List indexedColumnTypes = Lists.newArrayList(new IdColumnType(),
diff --git a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/view/ViewTableCreatorProvider.java b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/view/ViewTableCreatorProvider.java
index f28cc2c..f841454 100644
--- a/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/view/ViewTableCreatorProvider.java
+++ b/cube-manager/src/main/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/view/ViewTableCreatorProvider.java
@@ -1,11 +1,13 @@
package org.gcube.data.analysis.tabulardata.cube.tablemanagers.view;
+import javax.enterprise.event.Event;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import org.gcube.data.analysis.tabulardata.cube.data.DatabaseWrangler;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
import org.gcube.data.analysis.tabulardata.cube.metadata.CubeMetadataWrangler;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableCreator;
import org.gcube.data.analysis.tabulardata.cube.tablemanagers.TableManager;
@@ -15,20 +17,21 @@ public class ViewTableCreatorProvider implements Provider {
private DatabaseWrangler dbWrangler;
private CubeMetadataWrangler mdWrangler;
private TableManager tableManager;
-
+ private Event tableCreatedEvent;
@Inject
public ViewTableCreatorProvider(DatabaseWrangler dbWrangler, CubeMetadataWrangler mdWrangler,
- TableManager tableManager) {
+ TableManager tableManager, Event tableCreatedEvent) {
this.dbWrangler = dbWrangler;
this.mdWrangler = mdWrangler;
this.tableManager = tableManager;
+ this.tableCreatedEvent = tableCreatedEvent;
}
@Produces
@Named("ViewTable")
@Override
public TableCreator get() {
- return new ViewTableCreator(dbWrangler, mdWrangler, tableManager);
+ return new ViewTableCreator(dbWrangler, mdWrangler, tableManager, tableCreatedEvent);
}
}
diff --git a/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/CodelistTests.java b/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/CodelistTests.java
index b7b0707..02d0ac5 100644
--- a/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/CodelistTests.java
+++ b/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/CodelistTests.java
@@ -49,6 +49,9 @@ public class CodelistTests {
@Inject @Named("Dataset")
Instance datasetCreatorProvider;
+
+ @Inject @Named("Hierarchical")
+ Instance hInstance;
@BeforeClass
public static void setUp() throws Exception {
diff --git a/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/CubeManagerTest.java b/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/CubeManagerTest.java
index 8186d6e..c35df24 100644
--- a/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/CubeManagerTest.java
+++ b/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/CubeManagerTest.java
@@ -1,13 +1,9 @@
package org.gcube.data.analysis.tabulardata.cube.tablemanagers;
-import java.io.StringReader;
-import java.io.StringWriter;
import java.util.Collection;
import java.util.Collections;
import javax.inject.Inject;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
import org.gcube.data.analysis.tabulardata.cube.CubeManager;
import org.gcube.data.analysis.tabulardata.model.column.Column;
@@ -29,7 +25,6 @@ import org.gcube.data.analysis.tabulardata.model.metadata.common.Validation;
import org.gcube.data.analysis.tabulardata.model.metadata.common.ValidationsMetadata;
import org.gcube.data.analysis.tabulardata.model.relationship.ImmutableColumnRelationship;
import org.gcube.data.analysis.tabulardata.model.table.Table;
-import org.gcube.data.analysis.tabulardata.model.table.TableId;
import org.gcube.data.analysis.tabulardata.model.table.type.CodelistTableType;
import org.gcube.data.analysis.tabulardata.model.table.type.DatasetTableType;
import org.gcube.data.analysis.tabulardata.model.table.type.DatasetViewTableType;
@@ -44,7 +39,7 @@ public class CubeManagerTest {
@Inject
CubeManager cm;
-
+
@Test
public void addValidationColumns(){
Table table = cm.createTable(new GenericTableType()).create();
@@ -125,4 +120,24 @@ public class CubeManagerTest {
cm.removeTable(dataset.getId());
}
+ @Test
+ public void excangeColumns(){
+ TableCreator originCreator = cm.createTable(new CodelistTableType());
+
+ Column col = new CodeNameColumnFactory().create("en");
+ originCreator.addColumn(new CodeColumnFactory().createDefault());
+ originCreator.addColumn(col);
+ originCreator.addColumn(new CodeNameColumnFactory().create("it"));
+ originCreator.addColumn(new AnnotationColumnFactory().create(new ImmutableLocalizedText("My Annotation on species", "en")));
+
+ Table t =originCreator.create();
+ System.out.println(t);
+
+ Table newTable = cm.exchangeColumnPosition(t.getId(), col.getLocalId(), 0);
+ System.out.println(newTable);
+
+ }
+
+
+
}
diff --git a/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/ReadEvent.java b/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/ReadEvent.java
new file mode 100644
index 0000000..a608b79
--- /dev/null
+++ b/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/tablemanagers/ReadEvent.java
@@ -0,0 +1,14 @@
+package org.gcube.data.analysis.tabulardata.cube.tablemanagers;
+
+import javax.enterprise.event.Observes;
+import javax.inject.Singleton;
+import org.gcube.data.analysis.tabulardata.cube.events.TableCreationEvent;
+
+@Singleton
+public class ReadEvent {
+
+ public void created(@Observes TableCreationEvent tableCreatedEvent){
+ System.out.println("received event for table "+tableCreatedEvent.getTable().getId());
+
+ }
+}
diff --git a/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/time/CodelistCreatorTests.java b/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/time/CodelistCreatorTests.java
index 6ff1b25..076835a 100644
--- a/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/time/CodelistCreatorTests.java
+++ b/cube-manager/src/test/java/org/gcube/data/analysis/tabulardata/cube/time/CodelistCreatorTests.java
@@ -38,7 +38,7 @@ public class CodelistCreatorTests {
}
public Table createTableForPeriodType(PeriodType periodType) {
- Table table = cubeManager.createTimeCodelist(periodType);
+ Table table = cubeManager.getTimeTable(periodType);
Assert.assertNotNull(table);
return table;
}
diff --git a/pom.xml b/pom.xml
index 83d721d..b16ab82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.gcube.data.analysis.tabulardata
cube-manager-parent
- 3.5.1-SNAPSHOT
+ 3.5.2-SNAPSHOT
pom