git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-widgetx-tdx-source@141991 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
commit
b9b698b6fc
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" output="target/tabular-data-widgetx-tdx-source-1.9.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry excluding="**" kind="src" output="target/tabular-data-widgetx-tdx-source-1.9.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="output" path="target/tabular-data-widgetx-tdx-source-1.9.0-SNAPSHOT/WEB-INF/classes"/>
|
||||||
|
</classpath>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>tabular-data-widgetx-tdx-source</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
||||||
|
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||||
|
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
|
@ -0,0 +1,2 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
filesCopiedToWebInfLib=
|
|
@ -0,0 +1,6 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding//src/main/java=UTF-8
|
||||||
|
encoding//src/main/resources=UTF-8
|
||||||
|
encoding//src/test/java=UTF-8
|
||||||
|
encoding//src/test/resources=UTF-8
|
||||||
|
encoding/<project>=UTF-8
|
|
@ -0,0 +1,8 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||||
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.7
|
|
@ -0,0 +1,4 @@
|
||||||
|
activeProfiles=
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
resolveWorkspaceProjects=true
|
||||||
|
version=1
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||||
|
<wb-module deploy-name="tabular-data-widgetx-tdx-source">
|
||||||
|
<wb-resource deploy-path="/" source-path="/src/main/java"/>
|
||||||
|
<wb-resource deploy-path="/" source-path="/src/main/resources"/>
|
||||||
|
</wb-module>
|
||||||
|
</project-modules>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<faceted-project>
|
||||||
|
<installed facet="jst.utility" version="1.0"/>
|
||||||
|
<installed facet="java" version="1.7"/>
|
||||||
|
</faceted-project>
|
|
@ -0,0 +1,2 @@
|
||||||
|
disabled=06target
|
||||||
|
eclipse.preferences.version=1
|
|
@ -0,0 +1 @@
|
||||||
|
${gcube.license}
|
|
@ -0,0 +1,68 @@
|
||||||
|
The gCube System - ${name}
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
${description}
|
||||||
|
|
||||||
|
|
||||||
|
${gcube.description}
|
||||||
|
|
||||||
|
${gcube.funding}
|
||||||
|
|
||||||
|
|
||||||
|
Version
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
${version} (${buildDate})
|
||||||
|
|
||||||
|
Please see the file named "changelog.xml" in this directory for the release notes.
|
||||||
|
|
||||||
|
|
||||||
|
Authors
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
* Giancarlo Panichi (giancarlo.panichi-AT-isti.cnr.it),
|
||||||
|
Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" CNR, Pisa IT
|
||||||
|
|
||||||
|
|
||||||
|
Maintainers
|
||||||
|
-----------
|
||||||
|
|
||||||
|
* Giancarlo Panichi (giancarlo.panichi-AT-isti.cnr.it),
|
||||||
|
Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" CNR, Pisa IT
|
||||||
|
|
||||||
|
|
||||||
|
Download information
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
Source code is available from SVN:
|
||||||
|
${scm.url}
|
||||||
|
|
||||||
|
Binaries can be downloaded from the gCube website:
|
||||||
|
${gcube.website}
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
Installation documentation is available on-line in the gCube Wiki:
|
||||||
|
https://gcube.wiki.gcube-system.org/gcube/index.php/Tabular_Data_Manager
|
||||||
|
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
Documentation is available on-line in the gCube Wiki:
|
||||||
|
https://gcube.wiki.gcube-system.org/gcube/index.php/Tabular_Data_Manager
|
||||||
|
|
||||||
|
|
||||||
|
Support
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
Bugs and support requests can be reported in the gCube issue tracking tool:
|
||||||
|
${gcube.issueTracking}
|
||||||
|
|
||||||
|
|
||||||
|
Licensing
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
This software is licensed under the terms you may find in the file named "LICENSE" in this directory.
|
|
@ -0,0 +1,40 @@
|
||||||
|
<ReleaseNotes>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-10-0" date="2017-02-15">
|
||||||
|
<Change>Updated to new PortalContext [ticket #6548]</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-9-0" date="2016-12-01">
|
||||||
|
<Change>Added fix for support new portal theme</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-8-0" date="2015-07-03">
|
||||||
|
<Change>Added different colors for columns of different type [issue #251]</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-7-0" date="2015-04-30">
|
||||||
|
<Change>Updated in line filter to suppurt soundex, text begin and text
|
||||||
|
end</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-6-0" date="2015-01-31">
|
||||||
|
<Change>Added column ordering</Change>
|
||||||
|
<Change>Updated in line filter</Change>
|
||||||
|
<Change>Updated numeric type to double</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-5-0" date="2014-10-31">
|
||||||
|
<Change>Updated pom dependencies</Change>
|
||||||
|
<Change>Updated Geometry type support</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-4-0" date="2014-09-12">
|
||||||
|
<Change>Updated grid behavior</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-3-0" date="2014-07-04">
|
||||||
|
<Change>Updated grid, now shows single view column</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-2-0" date="2014-06-05">
|
||||||
|
<Change>Added Inline Filter</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-1-0" date="2014-04-04">
|
||||||
|
<Change>Added ColumnDefinitionBuilder</Change>
|
||||||
|
<Change>Fixed QueryOrder</Change>
|
||||||
|
</Changeset>
|
||||||
|
<Changeset component="${groupId}.${artifactId}.1-0-0" date="2014-02-01">
|
||||||
|
<Change>First Release</Change>
|
||||||
|
</Changeset>
|
||||||
|
</ReleaseNotes>
|
|
@ -0,0 +1,32 @@
|
||||||
|
<assembly
|
||||||
|
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||||
|
<id>servicearchive</id>
|
||||||
|
<formats>
|
||||||
|
<format>tar.gz</format>
|
||||||
|
</formats>
|
||||||
|
<baseDirectory>/</baseDirectory>
|
||||||
|
<fileSets>
|
||||||
|
<fileSet>
|
||||||
|
<directory>${distroDirectory}</directory>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<useDefaultExcludes>true</useDefaultExcludes>
|
||||||
|
<includes>
|
||||||
|
<include>README</include>
|
||||||
|
<include>LICENSE</include>
|
||||||
|
<include>changelog.xml</include>
|
||||||
|
<include>profile.xml</include>
|
||||||
|
</includes>
|
||||||
|
<fileMode>755</fileMode>
|
||||||
|
<filtered>true</filtered>
|
||||||
|
</fileSet>
|
||||||
|
</fileSets>
|
||||||
|
<files>
|
||||||
|
<file>
|
||||||
|
<source>target/${build.finalName}.${project.packaging}</source>
|
||||||
|
<outputDirectory>/${artifactId}</outputDirectory>
|
||||||
|
</file>
|
||||||
|
|
||||||
|
</files>
|
||||||
|
</assembly>
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Resource>
|
||||||
|
<ID></ID>
|
||||||
|
<Type>Library</Type>
|
||||||
|
<Profile>
|
||||||
|
<Description>${project.description}</Description>
|
||||||
|
<Class>PortletsUser</Class>
|
||||||
|
<Name>${project.name}</Name>
|
||||||
|
<Version>${version}</Version>
|
||||||
|
<Packages>
|
||||||
|
<Software>
|
||||||
|
<Description>${project.description}</Description>
|
||||||
|
<Name>${project.name}</Name>
|
||||||
|
<Version>${version}</Version>
|
||||||
|
<MavenCoordinates>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>${project.artifactId}</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</MavenCoordinates>
|
||||||
|
<Type>library</Type>
|
||||||
|
<Files>
|
||||||
|
<File>${project.build.finalName}.${project.packaging}</File>
|
||||||
|
</Files>
|
||||||
|
</Software>
|
||||||
|
</Packages>
|
||||||
|
</Profile>
|
||||||
|
</Resource>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,175 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<artifactId>maven-parent</artifactId>
|
||||||
|
<groupId>org.gcube.tools</groupId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<relativePath />
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<!-- POM file generated with GWT webAppCreator -->
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>tabular-data-widgetx-tdx-source</artifactId>
|
||||||
|
<version>1.9.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<name>tabular-data-widgetx-tdx-source</name>
|
||||||
|
<description>tabular-data-widgetx-tdx-source allows access to tabular data service</description>
|
||||||
|
|
||||||
|
<scm>
|
||||||
|
<url>https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-widgetx-tdx-source</url>
|
||||||
|
</scm>
|
||||||
|
|
||||||
|
<developers>
|
||||||
|
<developer>
|
||||||
|
<name>Giancarlo Panichi</name>
|
||||||
|
<email>g.panichi@isti.cnr.it</email>
|
||||||
|
<organization>CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"</organization>
|
||||||
|
<roles>
|
||||||
|
<role>architect</role>
|
||||||
|
<role>developer</role>
|
||||||
|
</roles>
|
||||||
|
</developer>
|
||||||
|
</developers>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
|
||||||
|
<distroDirectory>distro</distroDirectory>
|
||||||
|
<configDirectory>config</configDirectory>
|
||||||
|
|
||||||
|
<!-- Convenience property to set the GWT version -->
|
||||||
|
<gwtVersion>2.5.1</gwtVersion>
|
||||||
|
|
||||||
|
<KEYS>${env.KEYS}</KEYS>
|
||||||
|
|
||||||
|
<!-- GWT needs at least java 1.5 -->
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>localRun</id>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-classic</artifactId>
|
||||||
|
<version>1.0.1</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
<dependencies>
|
||||||
|
<!-- tabular-data-widgetx -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>tabular-data-widgetx</artifactId>
|
||||||
|
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- tabular-data-widget-common-event -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>tabular-data-widget-common-event</artifactId>
|
||||||
|
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Service Client -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.data.analysis.tabulardata</groupId>
|
||||||
|
<artifactId>service-client-impl</artifactId>
|
||||||
|
<version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.json</groupId>
|
||||||
|
<artifactId>json</artifactId>
|
||||||
|
<version>20090211</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- LOGGING -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- JUnit -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.8.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<!-- Generate compiled stuff in the folder used for developing mode -->
|
||||||
|
<outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>2.16</version>
|
||||||
|
<configuration>
|
||||||
|
<skipTests>true</skipTests>
|
||||||
|
</configuration>
|
||||||
|
<!-- TODO check if needed -->
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.surefire</groupId>
|
||||||
|
<artifactId>surefire-junit47</artifactId>
|
||||||
|
<version>2.16</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<version>2.2</version>
|
||||||
|
<configuration>
|
||||||
|
<descriptors>
|
||||||
|
<descriptor>${distroDirectory}/descriptor.xml</descriptor>
|
||||||
|
</descriptors>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>servicearchive</id>
|
||||||
|
<phase>install</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
</build>
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.distribution</groupId>
|
||||||
|
<artifactId>maven-portal-bom</artifactId>
|
||||||
|
<version>LATEST</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
</project>
|
|
@ -0,0 +1,11 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi"
|
||||||
|
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Constants {
|
||||||
|
public static final String TDX_DATASOURCE_FACTORY_ID = "TDXDataSourceFactory";
|
||||||
|
}
|
|
@ -0,0 +1,648 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.commons.webservice.exception.NoSuchTableException;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.column.Column;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.metadata.common.TableDescriptorMetadata;
|
||||||
|
import org.gcube.data.analysis.tabulardata.query.parameters.QueryFilter;
|
||||||
|
import org.gcube.data.analysis.tabulardata.query.parameters.QueryOrder;
|
||||||
|
import org.gcube.data.analysis.tabulardata.query.parameters.QueryOrderDirection;
|
||||||
|
import org.gcube.data.analysis.tabulardata.query.parameters.QueryPage;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.TabularDataService;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.impl.TabularDataServiceFactory;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.tabular.TabularResourceId;
|
||||||
|
import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.RelationshipData;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.filters.FiltersBuilder;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.map.ColumnDefinitionBuilder;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.trservice.TRService;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.DataSourceX;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.DataSourceXException;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.Direction;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.util.TableJSonBuilder;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.util.ServiceCredentials;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.ColumnsReorderingConfig;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.FilterInformation;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.StaticFilterInformation;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.ColumnDefinition;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.ColumnType;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.TableDefinition;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.TableId;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.ValueType;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi" <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TDXDataSource implements DataSourceX {
|
||||||
|
|
||||||
|
private static final int PAGINGDIMENSION = 300;
|
||||||
|
private static final String PRIMARY_KEY_COLUMN = "id";
|
||||||
|
private static final String JSON_ROWS_FIELD = "ROWS";
|
||||||
|
private static final String JSON_TOTAL_LENGTH_FIELD = "total";
|
||||||
|
private static final String JSON_OFFSET_FIELD = "offset";
|
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(TDXDataSource.class);
|
||||||
|
private String dataSourceFactoryId;
|
||||||
|
private String tableName;
|
||||||
|
private TableDefinition tableDefinition;
|
||||||
|
private int tableSize = -1;
|
||||||
|
private TableJSonBuilder jsonBuilder;
|
||||||
|
|
||||||
|
private TabularDataService service;
|
||||||
|
private org.gcube.data.analysis.tabulardata.model.table.TableId serviceTableId;
|
||||||
|
private org.gcube.data.analysis.tabulardata.model.table.Table serviceTable;
|
||||||
|
private long serviceTabularResourceId;
|
||||||
|
private TRService trService;
|
||||||
|
private long tableId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param dataSourceFactoryId
|
||||||
|
* @param tableName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static TDXDataSource createTDDataSource(String dataSourceFactoryId,
|
||||||
|
ServiceCredentials serviceCredentials, String tableName)
|
||||||
|
throws DataSourceXException {
|
||||||
|
TDXDataSource dataSource = new TDXDataSource(dataSourceFactoryId,
|
||||||
|
serviceCredentials, tableName);
|
||||||
|
return dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param dataSourceFactoryId
|
||||||
|
* @param tableIdentifier
|
||||||
|
* @throws DataSourceXException
|
||||||
|
*/
|
||||||
|
public TDXDataSource(String dataSourceFactoryId, ServiceCredentials serviceCredentials,
|
||||||
|
String tableIdentifier) throws DataSourceXException {
|
||||||
|
if (dataSourceFactoryId == null) {
|
||||||
|
logger.error("An error occurred, dataSourceFactoryId is null");
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"An error occurred, dataSourceFactoryId is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tableIdentifier == null) {
|
||||||
|
logger.error("An error occurred, tableName is null");
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"An error occurred, tableName is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dataSourceFactoryId = dataSourceFactoryId;
|
||||||
|
this.tableName = tableIdentifier;
|
||||||
|
|
||||||
|
|
||||||
|
service = TabularDataServiceFactory.getService();
|
||||||
|
|
||||||
|
try {
|
||||||
|
tableId = Long.parseLong(tableIdentifier);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
logger.error("An error occurred, tableName is not a long", e);
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"An error occurred, no tableName is not a long", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
serviceTableId = new org.gcube.data.analysis.tabulardata.model.table.TableId(
|
||||||
|
tableId);
|
||||||
|
|
||||||
|
try {
|
||||||
|
serviceTable = service.getTable(serviceTableId);
|
||||||
|
} catch (NoSuchTableException e) {
|
||||||
|
logger.error("An error occurred, no such table", e);
|
||||||
|
throw new DataSourceXException("An error occurred, no such table",
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// logger.debug("Service Table: " + serviceTable);
|
||||||
|
|
||||||
|
TableDescriptorMetadata tableDesc = null;
|
||||||
|
|
||||||
|
if (serviceTable.contains(TableDescriptorMetadata.class)) {
|
||||||
|
tableDesc = serviceTable.getMetadata(TableDescriptorMetadata.class);
|
||||||
|
if (tableDesc.getRefId() == 0) {
|
||||||
|
logger.error("Error refId=0 for Table:" + serviceTable);
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"Error no valid tabular resource associated with the table:"
|
||||||
|
+ serviceTable.getId());
|
||||||
|
} else {
|
||||||
|
logger.debug("Table " + serviceTable.getId()
|
||||||
|
+ " connect to tabular resource: "
|
||||||
|
+ tableDesc.getRefId());
|
||||||
|
serviceTabularResourceId = tableDesc.getRefId();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
logger.debug("No TableDescriptorMetadata found (Supposed Time Table):"
|
||||||
|
+ tableId);
|
||||||
|
/*
|
||||||
|
* TIME TABLE hasn't tabular resource connected
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* throw new DataSourceXException(
|
||||||
|
* "Error no valid tabular resource associated with the table:" +
|
||||||
|
* serviceTable.getId());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
trService = new TRService();
|
||||||
|
trService.setService(service);
|
||||||
|
TabularResourceId tabularResourceId = new TabularResourceId(
|
||||||
|
serviceTabularResourceId);
|
||||||
|
trService.setTabularResourceId(tabularResourceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDataSourceFactoryId() {
|
||||||
|
return dataSourceFactoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDefinition getTableDefinition() throws DataSourceXException {
|
||||||
|
logger.debug("Retrieving table definition");
|
||||||
|
tableDefinition = extractTableDefinition();
|
||||||
|
return tableDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws DataSourceXException
|
||||||
|
*/
|
||||||
|
protected TableDefinition extractTableDefinition()
|
||||||
|
throws DataSourceXException {
|
||||||
|
List<ColumnDefinition> columns = getColumnDefinitions();
|
||||||
|
|
||||||
|
logger.debug("Creating tableId...");
|
||||||
|
TableId id = new TableId(dataSourceFactoryId, tableName);
|
||||||
|
|
||||||
|
TableDefinition tableDefinition = new TableDefinition(id, tableName,
|
||||||
|
JSON_ROWS_FIELD, JSON_TOTAL_LENGTH_FIELD, JSON_OFFSET_FIELD,
|
||||||
|
columns);
|
||||||
|
|
||||||
|
tableDefinition.setModelKeyColumnId(PRIMARY_KEY_COLUMN);
|
||||||
|
logger.debug("TableDefinition Created");
|
||||||
|
return tableDefinition;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<ColumnDefinition> getColumnDefinitions()
|
||||||
|
throws DataSourceXException {
|
||||||
|
logger.debug("Creating list of columns definition...");
|
||||||
|
List<Column> serviceListColumn = serviceTable.getColumns();
|
||||||
|
ArrayList<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
|
||||||
|
ArrayList<ColumnDefinition> dimensions = new ArrayList<ColumnDefinition>();
|
||||||
|
|
||||||
|
Column serviceColumn;
|
||||||
|
for (int i = 0; i < serviceListColumn.size(); i++) {
|
||||||
|
serviceColumn = serviceListColumn.get(i);
|
||||||
|
ColumnDefinition column = getColumnDefinition(serviceColumn, i);
|
||||||
|
columns.add(column);
|
||||||
|
if (column.getType() == ColumnType.DIMENSION
|
||||||
|
|| column.getType() == ColumnType.TIMEDIMENSION) {
|
||||||
|
dimensions.add(column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < dimensions.size(); i++) {
|
||||||
|
ColumnDefinition dim = dimensions.get(i);
|
||||||
|
RelationshipData rel = dim.getRelationshipData();
|
||||||
|
|
||||||
|
if (rel != null) {
|
||||||
|
String cId = rel.getTargetColumnId();
|
||||||
|
if (cId != null) {
|
||||||
|
for (int j = 0; j < columns.size(); j++) {
|
||||||
|
ColumnDefinition c = columns.get(j);
|
||||||
|
if (c.getColumnLocalId() != null
|
||||||
|
&& (c.getType() == ColumnType.VIEWCOLUMN_OF_DIMENSION || c
|
||||||
|
.getType() == ColumnType.VIEWCOLUMN_OF_TIMEDIMENSION)
|
||||||
|
&& c.getColumnLocalId().compareTo(cId) == 0) {
|
||||||
|
c.setVisible(true);
|
||||||
|
columns.set(j, c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("List of columns definition created");
|
||||||
|
return columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ColumnDefinition getColumnDefinition(Column serviceColumn,
|
||||||
|
int ordinalPosition) throws DataSourceXException {
|
||||||
|
ColumnDefinitionBuilder columnDefinitionBuilder = new ColumnDefinitionBuilder(
|
||||||
|
service, serviceTable, serviceColumn, ordinalPosition);
|
||||||
|
ColumnDefinition columnDefinition = columnDefinitionBuilder.build();
|
||||||
|
|
||||||
|
/* logger.debug("Column Definition:" + columnDefinition); */
|
||||||
|
|
||||||
|
return columnDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ColumnDefinition createPrimaryKeyColumn(
|
||||||
|
List<ColumnDefinition> columns) {
|
||||||
|
List<String> ids = new ArrayList<String>(columns.size());
|
||||||
|
for (ColumnDefinition column : columns)
|
||||||
|
ids.add(column.getId());
|
||||||
|
|
||||||
|
String id = PRIMARY_KEY_COLUMN;
|
||||||
|
for (int i = 0; ids.contains(id); id = PRIMARY_KEY_COLUMN + i++)
|
||||||
|
;
|
||||||
|
|
||||||
|
return new ColumnDefinition(id, id, id, ValueType.INTEGER, -1, false,
|
||||||
|
false,
|
||||||
|
org.gcube.portlets.user.tdwx.shared.model.ColumnType.SYSTEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void retrieveTableSize(int start, int limit,
|
||||||
|
QueryFilter queryFilter) throws DataSourceXException {
|
||||||
|
tableSize = 0;
|
||||||
|
try {
|
||||||
|
tableSize = service.getQueryLenght(serviceTableId, queryFilter);
|
||||||
|
} catch (NoSuchTableException e) {
|
||||||
|
logger.error("An error occurred, tableSize is not recovered", e);
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"An error occurred, tableSize is not recovered", e);
|
||||||
|
}
|
||||||
|
start = Math.max(0, start);
|
||||||
|
start = Math.min(start, tableSize);
|
||||||
|
if (start + limit > tableSize)
|
||||||
|
limit = tableSize - start;
|
||||||
|
logger.debug("checked bounds start: " + start + " limit: " + limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Request from user
|
||||||
|
@Override
|
||||||
|
public String getDataAsJSon(int start, int limit, String sortingColumn,
|
||||||
|
Direction direction, ArrayList<FilterInformation> filters,
|
||||||
|
ArrayList<StaticFilterInformation> staticFilters)
|
||||||
|
throws DataSourceXException {
|
||||||
|
logger.debug("getDataAsJSon start: " + start + " limit: " + limit
|
||||||
|
+ " sortingColumn: " + sortingColumn + " direction: "
|
||||||
|
+ direction + " filters:" + filters.size() + " staticFilters:"
|
||||||
|
+ staticFilters.size());
|
||||||
|
|
||||||
|
TableDefinition tableDefinition = getTableDefinition();
|
||||||
|
logger.debug("Creating queryOrder...");
|
||||||
|
QueryOrder queryOrder = null;
|
||||||
|
if (sortingColumn != null) {
|
||||||
|
if (tableDefinition.getColumns().get(sortingColumn) == null) {
|
||||||
|
logger.error("The specified sorting column \"" + sortingColumn
|
||||||
|
+ "\" don't exists");
|
||||||
|
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"The specified sorting column \"" + sortingColumn
|
||||||
|
+ "\" don't exists");
|
||||||
|
} else {
|
||||||
|
ColumnDefinition columnDefinition = tableDefinition
|
||||||
|
.getColumns().get(sortingColumn);
|
||||||
|
Column column = serviceTable.getColumnByName(columnDefinition
|
||||||
|
.getId());
|
||||||
|
switch (direction) {
|
||||||
|
case ASC:
|
||||||
|
queryOrder = new QueryOrder(column.getLocalId(),
|
||||||
|
QueryOrderDirection.ASCENDING);
|
||||||
|
break;
|
||||||
|
case DESC:
|
||||||
|
queryOrder = new QueryOrder(column.getLocalId(),
|
||||||
|
QueryOrderDirection.DESCENDING);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (tableDefinition.getColumns().get(PRIMARY_KEY_COLUMN) == null) {
|
||||||
|
logger.error("The primary key column \"" + PRIMARY_KEY_COLUMN
|
||||||
|
+ "\" don't exists");
|
||||||
|
} else {
|
||||||
|
ColumnDefinition columnDefinition = tableDefinition
|
||||||
|
.getColumns().get(PRIMARY_KEY_COLUMN);
|
||||||
|
Column column = serviceTable.getColumnByName(columnDefinition
|
||||||
|
.getId());
|
||||||
|
queryOrder = new QueryOrder(column.getLocalId(),
|
||||||
|
QueryOrderDirection.ASCENDING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryFilter queryFilter = null;
|
||||||
|
if ((filters != null && filters.size() > 0)
|
||||||
|
|| (staticFilters != null && staticFilters.size() > 0)) {
|
||||||
|
FiltersBuilder filtersBuilder = new FiltersBuilder(filters,
|
||||||
|
staticFilters, tableDefinition, serviceTable);
|
||||||
|
queryFilter = filtersBuilder.createQueryFilter();
|
||||||
|
}
|
||||||
|
|
||||||
|
retrieveTableSize(start, limit, queryFilter);
|
||||||
|
|
||||||
|
String json = getJSon(start, queryOrder, queryFilter);
|
||||||
|
logger.trace("Returning json");
|
||||||
|
// logger.debug(json);
|
||||||
|
return json;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ArrayList<ColumnDefinition> sort(
|
||||||
|
Collection<ColumnDefinition> columns) {
|
||||||
|
|
||||||
|
ArrayList<ColumnDefinition> lcolumns = new ArrayList<ColumnDefinition>();
|
||||||
|
for (ColumnDefinition column : columns) {
|
||||||
|
lcolumns.add(column);
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(lcolumns, new Comparator<ColumnDefinition>() {
|
||||||
|
@Override
|
||||||
|
public int compare(ColumnDefinition cd1, ColumnDefinition cd2) {
|
||||||
|
int comp = 0;
|
||||||
|
if (cd1.getPosition() == cd2.getPosition()) {
|
||||||
|
comp = 0;
|
||||||
|
} else {
|
||||||
|
if (cd1.getPosition() > cd2.getPosition()) {
|
||||||
|
comp = 1;
|
||||||
|
} else {
|
||||||
|
comp = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return comp;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return lcolumns;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getJSon(int start, QueryOrder queryOrder,
|
||||||
|
QueryFilter queryFilter) throws DataSourceXException {
|
||||||
|
logger.debug("Retrieving JSon");
|
||||||
|
logger.debug("[" + queryOrder + ", " + queryFilter + "]");
|
||||||
|
|
||||||
|
TableDefinition tableDefinition = getTableDefinition();
|
||||||
|
logger.debug("Retrieved table definition");
|
||||||
|
Collection<ColumnDefinition> columns = tableDefinition.getColumns()
|
||||||
|
.values();
|
||||||
|
logger.debug("Retrieved Columns");
|
||||||
|
ArrayList<ColumnDefinition> lcolumns = sort(columns);
|
||||||
|
|
||||||
|
// logger.debug("ColumnDefinition:\n" + lcolumns.toString());
|
||||||
|
|
||||||
|
QueryPage queryPage = new QueryPage(start, PAGINGDIMENSION);
|
||||||
|
logger.debug("Created queryPage");
|
||||||
|
String serviceJson = null;
|
||||||
|
try {
|
||||||
|
if (queryOrder == null && queryFilter == null) {
|
||||||
|
serviceJson = service.queryAsJson(serviceTableId, queryPage);
|
||||||
|
} else {
|
||||||
|
if (queryOrder == null && queryFilter != null) {
|
||||||
|
serviceJson = service.queryAsJson(serviceTableId,
|
||||||
|
queryPage, queryFilter);
|
||||||
|
} else {
|
||||||
|
if (queryOrder != null && queryFilter == null) {
|
||||||
|
serviceJson = service.queryAsJson(serviceTableId,
|
||||||
|
queryPage, queryOrder);
|
||||||
|
} else {
|
||||||
|
if (queryOrder != null && queryFilter != null) {
|
||||||
|
logger.debug("Order & Filter: " + queryOrder + " "
|
||||||
|
+ queryFilter);
|
||||||
|
serviceJson = service.queryAsJson(serviceTableId,
|
||||||
|
queryPage, queryFilter, queryOrder);
|
||||||
|
} else {
|
||||||
|
logger.debug("No queryAsJson valid");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (NoSuchTableException e) {
|
||||||
|
logger.error("An error occurred, no such table", e);
|
||||||
|
throw new DataSourceXException("An error occurred, no such table",
|
||||||
|
e);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
logger.error("An error occurred", e);
|
||||||
|
throw new DataSourceXException("An error occurred", e);
|
||||||
|
}
|
||||||
|
logger.debug("Created serviceJson");
|
||||||
|
// logger.debug(serviceJson);
|
||||||
|
|
||||||
|
return createJson(start, serviceJson, lcolumns);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String createJson(int start, String serviceJson,
|
||||||
|
ArrayList<ColumnDefinition> lcolumns) throws DataSourceXException {
|
||||||
|
TableJSonBuilder json = getBuilder();
|
||||||
|
json.startRows();
|
||||||
|
int id = start;
|
||||||
|
|
||||||
|
JSONArray currentRow = null;
|
||||||
|
int i = -1;
|
||||||
|
int j = -1;
|
||||||
|
int totalRows = -1;
|
||||||
|
String s = null;
|
||||||
|
try {
|
||||||
|
org.json.JSONObject obj = new org.json.JSONObject(serviceJson);
|
||||||
|
org.json.JSONArray rows = obj.getJSONArray("rows");
|
||||||
|
|
||||||
|
totalRows = rows.length();
|
||||||
|
logger.debug("Reading rows from json");
|
||||||
|
for (i = 0; i < totalRows; i++) {
|
||||||
|
|
||||||
|
json.startRow();
|
||||||
|
currentRow = rows.getJSONArray(i);
|
||||||
|
|
||||||
|
j = 0;
|
||||||
|
|
||||||
|
for (ColumnDefinition column : lcolumns) {
|
||||||
|
|
||||||
|
String columnId = column.getId();
|
||||||
|
|
||||||
|
if (currentRow.isNull(j)) {
|
||||||
|
json.addValue(columnId, "");
|
||||||
|
} else {
|
||||||
|
|
||||||
|
switch (column.getValueType()) {
|
||||||
|
case DATE:
|
||||||
|
Long day = currentRow.getLong(j);
|
||||||
|
Date dd = new Date();
|
||||||
|
dd.setTime(day);
|
||||||
|
json.addValue(columnId, day);
|
||||||
|
break;
|
||||||
|
case BOOLEAN:
|
||||||
|
Boolean b = currentRow.getBoolean(j);
|
||||||
|
json.addValue(columnId, b);
|
||||||
|
break;
|
||||||
|
case DOUBLE:
|
||||||
|
Double d = currentRow.getDouble(j);
|
||||||
|
json.addValue(columnId, d);
|
||||||
|
break;
|
||||||
|
case INTEGER:
|
||||||
|
int integ = currentRow.getInt(j);
|
||||||
|
json.addValue(columnId, integ);
|
||||||
|
break;
|
||||||
|
case LONG:
|
||||||
|
Long l = currentRow.getLong(j);
|
||||||
|
json.addValue(columnId, l);
|
||||||
|
break;
|
||||||
|
case STRING:
|
||||||
|
s = currentRow.getString(j);
|
||||||
|
json.addValue(columnId, s);
|
||||||
|
break;
|
||||||
|
case GEOMETRY:
|
||||||
|
s = currentRow.getString(j);
|
||||||
|
json.addValue(columnId, s);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.warn("Unknow value type "
|
||||||
|
+ column.getValueType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
json.endRow();
|
||||||
|
}
|
||||||
|
id += i;
|
||||||
|
|
||||||
|
} catch (JSONException e) {
|
||||||
|
|
||||||
|
logger.error("An error occurred while parsing json document\n"
|
||||||
|
+ "At Row " + i + ",Column " + j + "\nRow Content: "
|
||||||
|
+ currentRow + "\nLenght rows " + totalRows, e);
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"An error occurred, while reading json of service", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
json.endRows();
|
||||||
|
|
||||||
|
json.setTotalLength(tableSize);
|
||||||
|
|
||||||
|
json.setOffset(start);
|
||||||
|
|
||||||
|
json.close();
|
||||||
|
|
||||||
|
logger.trace("produced " + (id - start) + " rows");
|
||||||
|
|
||||||
|
return json.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected TableJSonBuilder getBuilder() throws DataSourceXException {
|
||||||
|
try {
|
||||||
|
if (jsonBuilder == null) {
|
||||||
|
TableDefinition tdef = getTableDefinition();
|
||||||
|
logger.debug("Creating jsonBuilder...");
|
||||||
|
if (tdef != null) {
|
||||||
|
jsonBuilder = new TableJSonBuilder(tdef);
|
||||||
|
} else {
|
||||||
|
logger.error("table definition is null");
|
||||||
|
throw new DataSourceXException("table definition is null");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
jsonBuilder.clean();
|
||||||
|
}
|
||||||
|
return jsonBuilder;
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.debug("Error Creating jsonBuilder: " + e.getMessage());
|
||||||
|
throw new DataSourceXException("Error Creating jsonBuilder: "
|
||||||
|
+ e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getTableSize() throws DataSourceXException {
|
||||||
|
return tableSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() {
|
||||||
|
// The service is stateless there is no need to close
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDefinition setColumnReordering(
|
||||||
|
ColumnsReorderingConfig columnsReorderingConfig)
|
||||||
|
throws DataSourceXException {
|
||||||
|
logger.debug("SetColumnReordering: " + columnsReorderingConfig);
|
||||||
|
|
||||||
|
trService.startChangeSingleColumnPosition(columnsReorderingConfig);
|
||||||
|
|
||||||
|
updateTableAfterOperation();
|
||||||
|
|
||||||
|
logger.debug("Retrieving table definition");
|
||||||
|
tableDefinition = extractTableDefinition();
|
||||||
|
return tableDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateTableAfterOperation() throws DataSourceXException {
|
||||||
|
|
||||||
|
serviceTableId = new org.gcube.data.analysis.tabulardata.model.table.TableId(
|
||||||
|
tableId);
|
||||||
|
|
||||||
|
try {
|
||||||
|
serviceTable = service.getTable(serviceTableId);
|
||||||
|
} catch (NoSuchTableException e) {
|
||||||
|
logger.error("An error occurred, no such table", e);
|
||||||
|
throw new DataSourceXException("An error occurred, no such table",
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// logger.debug("Service Table: " + serviceTable);
|
||||||
|
|
||||||
|
TableDescriptorMetadata tableDesc = null;
|
||||||
|
|
||||||
|
if (serviceTable.contains(TableDescriptorMetadata.class)) {
|
||||||
|
tableDesc = serviceTable.getMetadata(TableDescriptorMetadata.class);
|
||||||
|
if (tableDesc.getRefId() == 0) {
|
||||||
|
logger.debug("Error refId=0 for Table:" + serviceTable);
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"Error no valid tabular resource associated with the table:"
|
||||||
|
+ serviceTable.getId());
|
||||||
|
} else {
|
||||||
|
logger.debug("Table " + serviceTable.getId()
|
||||||
|
+ " connect to tabular resource: "
|
||||||
|
+ tableDesc.getRefId());
|
||||||
|
serviceTabularResourceId = tableDesc.getRefId();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
logger.debug("No TableDescriptorMetadata found (Supposed Time Table):"
|
||||||
|
+ tableId);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TIME TABLE hasn't tabular resource connected
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* throw new DataSourceXException(
|
||||||
|
* "Error no valid tabular resource associated with the table:" +
|
||||||
|
* serviceTable.getId());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
trService.setService(service);
|
||||||
|
TabularResourceId tabularResourceId = new TabularResourceId(
|
||||||
|
serviceTabularResourceId);
|
||||||
|
trService.setTabularResourceId(tabularResourceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "TDXDataSource [serviceTabularResourceId="
|
||||||
|
+ serviceTabularResourceId + ", serviceTableId="
|
||||||
|
+ serviceTableId + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td;
|
||||||
|
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.DataSourceX;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.DataSourceXException;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.DataSourceXFactory;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.util.ServiceCredentials;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.TableId;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi"
|
||||||
|
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TDXDataSourceFactory implements DataSourceXFactory {
|
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(TDXDataSourceFactory.class);
|
||||||
|
private static final String ID=Constants.TDX_DATASOURCE_FACTORY_ID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public String getId() {
|
||||||
|
return ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public DataSourceX openDataSource(ServiceCredentials serviceCredentials, TableId tableId) throws DataSourceXException {
|
||||||
|
logger.debug("openDataSource: "+tableId);
|
||||||
|
String table = tableId.getTableKey();
|
||||||
|
TDXDataSource dataSource = new TDXDataSource(ID,serviceCredentials,table);
|
||||||
|
return dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public void closeDataSource(ServiceCredentials serviceCredentials, DataSourceX dataSource) throws DataSourceXException {
|
||||||
|
logger.debug("closeDataSource: "+dataSource);
|
||||||
|
|
||||||
|
((TDXDataSource)dataSource).close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.exception;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.DataSourceXException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author giancarlo email: <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OperationException extends DataSourceXException {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -8593898774262390757L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
public OperationException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param message
|
||||||
|
* @param cause
|
||||||
|
*/
|
||||||
|
public OperationException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,490 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.filters;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.Expression;
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.composite.comparable.Equals;
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.composite.comparable.GreaterThan;
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.composite.comparable.LessThan;
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.composite.text.Soundex;
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.composite.text.TextBeginsWith;
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.composite.text.TextContains;
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.composite.text.TextEndsWith;
|
||||||
|
import org.gcube.data.analysis.tabulardata.expression.logical.And;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.column.Column;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.column.ColumnLocalId;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.column.ColumnReference;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.DataType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.value.TDBoolean;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.value.TDDate;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.value.TDInteger;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.value.TDNumeric;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.value.TDText;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.table.Table;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.table.TableId;
|
||||||
|
import org.gcube.data.analysis.tabulardata.query.parameters.QueryFilter;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.TDXDataSource;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.map.DataTypeMap;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.DataSourceXException;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.FilterInformation;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.StaticFilterInformation;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.ColumnDefinition;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.TableDefinition;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.ValueType;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi" email: <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FiltersBuilder {
|
||||||
|
|
||||||
|
protected ArrayList<FilterInformation> filters;
|
||||||
|
protected ArrayList<StaticFilterInformation> staticFilters;
|
||||||
|
protected TableDefinition tableDefinition;
|
||||||
|
|
||||||
|
protected Table serviceTable;
|
||||||
|
protected Logger logger = LoggerFactory.getLogger(TDXDataSource.class);
|
||||||
|
|
||||||
|
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param filters
|
||||||
|
* @param tableDefinition
|
||||||
|
*/
|
||||||
|
public FiltersBuilder(ArrayList<FilterInformation> filters,
|
||||||
|
ArrayList<StaticFilterInformation> staticFilters,
|
||||||
|
TableDefinition tableDefinition, Table serviceTable) {
|
||||||
|
this.filters = filters;
|
||||||
|
this.staticFilters = staticFilters;
|
||||||
|
this.tableDefinition = tableDefinition;
|
||||||
|
this.serviceTable = serviceTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws DataSourceXException
|
||||||
|
*/
|
||||||
|
protected Expression createExpression() throws DataSourceXException {
|
||||||
|
try {
|
||||||
|
|
||||||
|
Expression exp = null;
|
||||||
|
|
||||||
|
ArrayList<Expression> andExp = new ArrayList<Expression>();
|
||||||
|
|
||||||
|
if (filters != null) {
|
||||||
|
for (FilterInformation filter : filters) {
|
||||||
|
switch (filter.getFilterType()) {
|
||||||
|
case "string":
|
||||||
|
if (tableDefinition.getColumns().get(
|
||||||
|
filter.getFilterField()) == null) {
|
||||||
|
logger.error("The specified filter column \""
|
||||||
|
+ filter.getFilterField()
|
||||||
|
+ "\" don't exists");
|
||||||
|
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"The specified filter column \""
|
||||||
|
+ filter.getFilterField()
|
||||||
|
+ "\" don't exists");
|
||||||
|
} else {
|
||||||
|
ColumnDefinition columnDefinition = tableDefinition
|
||||||
|
.getColumns().get(filter.getFilterField());
|
||||||
|
Column column = serviceTable
|
||||||
|
.getColumnByName(columnDefinition.getId());
|
||||||
|
Expression ex = getExpressionText(column, filter);
|
||||||
|
if (ex != null) {
|
||||||
|
andExp.add(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "numeric":
|
||||||
|
if (tableDefinition.getColumns().get(
|
||||||
|
filter.getFilterField()) == null) {
|
||||||
|
logger.error("The specified filter column \""
|
||||||
|
+ filter.getFilterField()
|
||||||
|
+ "\" don't exists");
|
||||||
|
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"The specified filter column \""
|
||||||
|
+ filter.getFilterField()
|
||||||
|
+ "\" don't exists");
|
||||||
|
} else {
|
||||||
|
ColumnDefinition columnDefinition = tableDefinition
|
||||||
|
.getColumns().get(filter.getFilterField());
|
||||||
|
Column column = serviceTable
|
||||||
|
.getColumnByName(columnDefinition.getId());
|
||||||
|
|
||||||
|
Expression ex = getExpressionNumeric(column, filter);
|
||||||
|
if (ex != null) {
|
||||||
|
andExp.add(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "boolean":
|
||||||
|
if (tableDefinition.getColumns().get(
|
||||||
|
filter.getFilterField()) == null) {
|
||||||
|
logger.error("The specified filter column \""
|
||||||
|
+ filter.getFilterField()
|
||||||
|
+ "\" don't exists");
|
||||||
|
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"The specified filter column \""
|
||||||
|
+ filter.getFilterField()
|
||||||
|
+ "\" don't exists");
|
||||||
|
} else {
|
||||||
|
ColumnDefinition columnDefinition = tableDefinition
|
||||||
|
.getColumns().get(filter.getFilterField());
|
||||||
|
Column column = serviceTable
|
||||||
|
.getColumnByName(columnDefinition.getId());
|
||||||
|
|
||||||
|
Equals contains = new Equals(new ColumnReference(
|
||||||
|
serviceTable.getId(), column.getLocalId()),
|
||||||
|
new TDBoolean(new Boolean(filter
|
||||||
|
.getFilterValue())));
|
||||||
|
andExp.add(contains);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "date":
|
||||||
|
if (tableDefinition.getColumns().get(
|
||||||
|
filter.getFilterField()) == null) {
|
||||||
|
logger.error("The specified filter column \""
|
||||||
|
+ filter.getFilterField()
|
||||||
|
+ "\" don't exists");
|
||||||
|
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"The specified filter column \""
|
||||||
|
+ filter.getFilterField()
|
||||||
|
+ "\" don't exists");
|
||||||
|
} else {
|
||||||
|
ColumnDefinition columnDefinition = tableDefinition
|
||||||
|
.getColumns().get(filter.getFilterField());
|
||||||
|
Column column = serviceTable
|
||||||
|
.getColumnByName(columnDefinition.getId());
|
||||||
|
Expression ex = getExpressionDate(column, filter);
|
||||||
|
if (ex != null) {
|
||||||
|
andExp.add(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (staticFilters != null) {
|
||||||
|
for (StaticFilterInformation staticFilter : staticFilters) {
|
||||||
|
if (tableDefinition.getColumns().get(
|
||||||
|
staticFilter.getColumnName()) == null) {
|
||||||
|
logger.error("Static Filter not applicable, the specified column \""
|
||||||
|
+ staticFilter.getColumnName()
|
||||||
|
+ "\" don't exists");
|
||||||
|
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"Static Filter not applicable, the specified column \""
|
||||||
|
+ staticFilter.getColumnName()
|
||||||
|
+ "\" don't exists");
|
||||||
|
} else {
|
||||||
|
ColumnDefinition columnDefinition = tableDefinition
|
||||||
|
.getColumns().get(staticFilter.getColumnName());
|
||||||
|
Column column = serviceTable
|
||||||
|
.getColumnById(new ColumnLocalId(
|
||||||
|
columnDefinition.getColumnLocalId()));
|
||||||
|
Expression e = createStaticExpression(staticFilter,
|
||||||
|
serviceTable.getId(), column);
|
||||||
|
if (e != null) {
|
||||||
|
andExp.add(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (andExp.size() > 0) {
|
||||||
|
if (andExp.size() == 1) {
|
||||||
|
exp = andExp.get(0);
|
||||||
|
} else {
|
||||||
|
And andE = new And(andExp);
|
||||||
|
exp = andE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("Filter Expression created: " + exp);
|
||||||
|
|
||||||
|
return exp;
|
||||||
|
|
||||||
|
} catch (Throwable e) {
|
||||||
|
logger.error("Create expression failed. " + e.getLocalizedMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new DataSourceXException("Create expression failed. "
|
||||||
|
+ e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private Expression createStaticExpression(
|
||||||
|
StaticFilterInformation staticFilter, TableId id, Column column)
|
||||||
|
throws DataSourceXException {
|
||||||
|
try {
|
||||||
|
Expression exp = null;
|
||||||
|
DataType dataType = column.getDataType();
|
||||||
|
ValueType valueType = DataTypeMap.getValueType(dataType);
|
||||||
|
switch (valueType) {
|
||||||
|
case BOOLEAN:
|
||||||
|
TDBoolean bool = new TDBoolean(new Boolean(
|
||||||
|
staticFilter.getFilterValue()));
|
||||||
|
exp = new Equals(new ColumnReference(id, column.getLocalId()),
|
||||||
|
bool);
|
||||||
|
break;
|
||||||
|
case DATE:
|
||||||
|
try {
|
||||||
|
Date dd = sdf.parse(staticFilter.getFilterValue());
|
||||||
|
TDDate tdDate = new TDDate(dd);
|
||||||
|
exp = new Equals(new ColumnReference(id,
|
||||||
|
column.getLocalId()), tdDate);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
logger.error("Static Filter has not valid value type: "
|
||||||
|
+ staticFilter);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DOUBLE:
|
||||||
|
TDNumeric doublenum = new TDNumeric(new Double(
|
||||||
|
staticFilter.getFilterValue()));
|
||||||
|
exp = new Equals(new ColumnReference(id, column.getLocalId()),
|
||||||
|
doublenum);
|
||||||
|
break;
|
||||||
|
case INTEGER:
|
||||||
|
TDInteger intnum = new TDInteger(new Integer(
|
||||||
|
staticFilter.getFilterValue()));
|
||||||
|
exp = new Equals(new ColumnReference(id, column.getLocalId()),
|
||||||
|
intnum);
|
||||||
|
break;
|
||||||
|
case LONG:
|
||||||
|
TDInteger longnum = new TDInteger(new Integer(
|
||||||
|
staticFilter.getFilterValue()));
|
||||||
|
exp = new Equals(new ColumnReference(id, column.getLocalId()),
|
||||||
|
longnum);
|
||||||
|
break;
|
||||||
|
case STRING:
|
||||||
|
exp = new TextContains(new ColumnReference(id,
|
||||||
|
column.getLocalId()), new TDText(
|
||||||
|
staticFilter.getFilterValue()));
|
||||||
|
break;
|
||||||
|
case GEOMETRY:
|
||||||
|
exp = new TextContains(new ColumnReference(id,
|
||||||
|
column.getLocalId()), new TDText(
|
||||||
|
staticFilter.getFilterValue()));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return exp;
|
||||||
|
} catch (Throwable e) {
|
||||||
|
logger.error("Create Static Filter expression failed :"
|
||||||
|
+ e.getLocalizedMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"Create Static Filter expression failed :"
|
||||||
|
+ e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Expression getExpressionDate(Column column,
|
||||||
|
FilterInformation filter) throws DataSourceXException {
|
||||||
|
// [{ "filterField":"kqljyp" ,"filterType":"date"
|
||||||
|
// ,"filterComparison":"on" ,"filterValue": "1399370400000" }]
|
||||||
|
Expression exp = null;
|
||||||
|
|
||||||
|
Date dd = new Date();
|
||||||
|
Long day = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
day = new Long(filter.getFilterValue());
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
logger.error("No valid filterValue for date: "
|
||||||
|
+ filter.getFilterValue());
|
||||||
|
throw new DataSourceXException("No valid filter value");
|
||||||
|
}
|
||||||
|
|
||||||
|
dd.setTime(day);
|
||||||
|
TDDate tdDate = new TDDate(dd);
|
||||||
|
|
||||||
|
switch (filter.getFilterComparison()) {
|
||||||
|
case "on":
|
||||||
|
exp = new Equals(new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), tdDate);
|
||||||
|
break;
|
||||||
|
case "after":
|
||||||
|
exp = new GreaterThan(new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), tdDate);
|
||||||
|
break;
|
||||||
|
case "before":
|
||||||
|
exp = new LessThan(new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), tdDate);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Expression getExpressionText(Column column,
|
||||||
|
FilterInformation filter) {
|
||||||
|
Expression exp = null;
|
||||||
|
|
||||||
|
|
||||||
|
String comparison=filter.getFilterComparison();
|
||||||
|
|
||||||
|
if(comparison!=null&& comparison.isEmpty()){
|
||||||
|
return exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(comparison){
|
||||||
|
case "contains":
|
||||||
|
TextContains contains = new TextContains(
|
||||||
|
new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), new TDText(
|
||||||
|
filter.getFilterValue()));
|
||||||
|
exp=contains;
|
||||||
|
break;
|
||||||
|
case "begins":
|
||||||
|
TextBeginsWith begins = new TextBeginsWith(
|
||||||
|
new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), new TDText(
|
||||||
|
filter.getFilterValue()));
|
||||||
|
exp=begins;
|
||||||
|
break;
|
||||||
|
case "ends":
|
||||||
|
TextEndsWith ends = new TextEndsWith(
|
||||||
|
new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), new TDText(
|
||||||
|
filter.getFilterValue()));
|
||||||
|
exp=ends;
|
||||||
|
break;
|
||||||
|
case "soundex":
|
||||||
|
Soundex soundexCol= new Soundex(new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()));
|
||||||
|
Soundex soundexVal= new Soundex(new TDText(
|
||||||
|
filter.getFilterValue()));
|
||||||
|
Equals eq=new Equals(soundexCol, soundexVal);
|
||||||
|
exp=eq;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Expression getExpressionNumeric(Column column,
|
||||||
|
FilterInformation filter) {
|
||||||
|
Expression exp = null;
|
||||||
|
|
||||||
|
ValueType vt = DataTypeMap.getValueType(column.getDataType());
|
||||||
|
|
||||||
|
switch (vt) {
|
||||||
|
case DOUBLE:
|
||||||
|
TDNumeric floatnum = new TDNumeric(new Double(
|
||||||
|
filter.getFilterValue()));
|
||||||
|
if (filter.getFilterComparison().compareTo("eq") == 0) {
|
||||||
|
exp = new Equals(new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), floatnum);
|
||||||
|
} else {
|
||||||
|
if (filter.getFilterComparison().compareTo("gt") == 0) {
|
||||||
|
exp = new GreaterThan(new ColumnReference(
|
||||||
|
serviceTable.getId(), column.getLocalId()),
|
||||||
|
floatnum);
|
||||||
|
} else {
|
||||||
|
if (filter.getFilterComparison().compareTo("lt") == 0) {
|
||||||
|
exp = new LessThan(new ColumnReference(
|
||||||
|
serviceTable.getId(), column.getLocalId()),
|
||||||
|
floatnum);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case INTEGER:
|
||||||
|
TDInteger intnum = new TDInteger(new Integer(
|
||||||
|
filter.getFilterValue()));
|
||||||
|
if (filter.getFilterComparison().compareTo("eq") == 0) {
|
||||||
|
exp = new Equals(new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), intnum);
|
||||||
|
} else {
|
||||||
|
if (filter.getFilterComparison().compareTo("gt") == 0) {
|
||||||
|
exp = new GreaterThan(new ColumnReference(
|
||||||
|
serviceTable.getId(), column.getLocalId()), intnum);
|
||||||
|
} else {
|
||||||
|
if (filter.getFilterComparison().compareTo("lt") == 0) {
|
||||||
|
exp = new LessThan(new ColumnReference(
|
||||||
|
serviceTable.getId(), column.getLocalId()),
|
||||||
|
intnum);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LONG:
|
||||||
|
TDInteger longnum = new TDInteger(new Integer(
|
||||||
|
filter.getFilterValue()));
|
||||||
|
if (filter.getFilterComparison().compareTo("eq") == 0) {
|
||||||
|
exp = new Equals(new ColumnReference(serviceTable.getId(),
|
||||||
|
column.getLocalId()), longnum);
|
||||||
|
} else {
|
||||||
|
if (filter.getFilterComparison().compareTo("gt") == 0) {
|
||||||
|
exp = new GreaterThan(new ColumnReference(
|
||||||
|
serviceTable.getId(), column.getLocalId()), longnum);
|
||||||
|
} else {
|
||||||
|
if (filter.getFilterComparison().compareTo("lt") == 0) {
|
||||||
|
exp = new LessThan(new ColumnReference(
|
||||||
|
serviceTable.getId(), column.getLocalId()),
|
||||||
|
longnum);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws DataSourceXException
|
||||||
|
*/
|
||||||
|
public QueryFilter createQueryFilter() throws DataSourceXException {
|
||||||
|
QueryFilter queryFilter = null;
|
||||||
|
Expression exp = createExpression();
|
||||||
|
if (exp != null) {
|
||||||
|
queryFilter = new QueryFilter(exp);
|
||||||
|
}
|
||||||
|
logger.debug("QueryFilter: " + queryFilter);
|
||||||
|
return queryFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,336 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.map;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.metadata.NoSuchMetadataException;
|
||||||
|
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.datatype.DataType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.metadata.column.DataLocaleMetadata;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.metadata.column.PeriodTypeMetadata;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.metadata.column.ValidationReferencesMetadata;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.metadata.column.ViewColumnMetadata;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.metadata.common.LocalizedText;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.metadata.common.NamesMetadata;
|
||||||
|
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.ColumnRelationship;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.table.Table;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.time.PeriodType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.TabularDataService;
|
||||||
|
import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnTypeCode;
|
||||||
|
import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.RelationshipData;
|
||||||
|
import org.gcube.portlets.user.tdwx.server.datasource.DataSourceXException;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.ColumnDefinition;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class ColumnDefinitionBuilder {
|
||||||
|
private static final String PRIMARY_KEY_COLUMN = "id";
|
||||||
|
|
||||||
|
private Logger logger = LoggerFactory
|
||||||
|
.getLogger(ColumnDefinitionBuilder.class);
|
||||||
|
|
||||||
|
private TabularDataService service;
|
||||||
|
private Table serviceTable;
|
||||||
|
private Column serviceColumn;
|
||||||
|
private String tooltipMessage;
|
||||||
|
private String columnName;
|
||||||
|
private String columnLocalId;
|
||||||
|
private boolean visible;
|
||||||
|
private boolean editable;
|
||||||
|
private org.gcube.portlets.user.tdwx.shared.model.ColumnType type;
|
||||||
|
private String columnLabel;
|
||||||
|
private String locale;
|
||||||
|
private int ordinalPosition;
|
||||||
|
|
||||||
|
private PeriodTypeMetadata periodTypeMetadata;
|
||||||
|
protected PeriodType periodType;
|
||||||
|
|
||||||
|
private RelationshipData relationshipData;
|
||||||
|
|
||||||
|
private String sourceTableDimensionColumnId;
|
||||||
|
private String targetTableColumnId;
|
||||||
|
private long targetTableId;
|
||||||
|
private boolean viewColumn;
|
||||||
|
|
||||||
|
public ColumnDefinitionBuilder(TabularDataService service,
|
||||||
|
Table serviceTable, Column serviceColumn, int ordinalPosition)
|
||||||
|
throws DataSourceXException {
|
||||||
|
|
||||||
|
this.service = service;
|
||||||
|
this.serviceTable = serviceTable;
|
||||||
|
this.serviceColumn = serviceColumn;
|
||||||
|
this.ordinalPosition = ordinalPosition;
|
||||||
|
|
||||||
|
visible = true;
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.USER;
|
||||||
|
editable = true;
|
||||||
|
ColumnType ct = serviceColumn.getColumnType();
|
||||||
|
if (ColumnTypeMap.isIdColumnType(ct)) {
|
||||||
|
columnLabel = PRIMARY_KEY_COLUMN;
|
||||||
|
visible = false;
|
||||||
|
editable = false;
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.COLUMNID;
|
||||||
|
} else {
|
||||||
|
periodTypeMetadata = null;
|
||||||
|
if (serviceColumn.contains(PeriodTypeMetadata.class)) {
|
||||||
|
periodTypeMetadata = serviceColumn
|
||||||
|
.getMetadata(PeriodTypeMetadata.class);
|
||||||
|
periodType = periodTypeMetadata.getType();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ColumnTypeMap.isValidationColumnType(ct)) {
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.VALIDATION;
|
||||||
|
editable = false;
|
||||||
|
} else {
|
||||||
|
if (ColumnTypeMap.isTimeDimensionColumnType(ct)) {
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.TIMEDIMENSION;
|
||||||
|
visible = false;
|
||||||
|
retrieveRelationship();
|
||||||
|
} else {
|
||||||
|
if (ColumnTypeMap.isDimensionColumnType(ct)) {
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.DIMENSION;
|
||||||
|
visible = false;
|
||||||
|
retrieveRelationship();
|
||||||
|
} else {
|
||||||
|
if (ColumnTypeMap.isMeasureColumnType(ct)) {
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.MEASURE;
|
||||||
|
} else {
|
||||||
|
if (ColumnTypeMap.isCodeColumnType(ct)) {
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.CODE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (serviceColumn.contains(ViewColumnMetadata.class)) {
|
||||||
|
|
||||||
|
retrieveViewColumnMetadata();
|
||||||
|
|
||||||
|
visible = false;
|
||||||
|
viewColumn = true;
|
||||||
|
} else {
|
||||||
|
viewColumn = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
NamesMetadata labelsMetadata = null;
|
||||||
|
try {
|
||||||
|
labelsMetadata = serviceColumn.getMetadata(NamesMetadata.class);
|
||||||
|
} catch (NoSuchMetadataException e) {
|
||||||
|
logger.debug("labelMetadata: NoSuchMetadataException "
|
||||||
|
+ e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labelsMetadata == null) {
|
||||||
|
columnLabel = "nolabel";
|
||||||
|
} else {
|
||||||
|
LocalizedText cl = null;
|
||||||
|
cl = labelsMetadata.getTextWithLocale("en");
|
||||||
|
if (cl == null) {
|
||||||
|
columnLabel = "nolabel";
|
||||||
|
logger.debug("ColumnLabel no label in en");
|
||||||
|
} else {
|
||||||
|
columnLabel = cl.getValue();
|
||||||
|
if (columnLabel == null || columnLabel.isEmpty()) {
|
||||||
|
columnLabel = "nolabel";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DataLocaleMetadata dataLocaleMetadata = null;
|
||||||
|
try {
|
||||||
|
dataLocaleMetadata = serviceColumn
|
||||||
|
.getMetadata(DataLocaleMetadata.class);
|
||||||
|
} catch (NoSuchMetadataException e) {
|
||||||
|
logger.debug("DataLocaleMetadata: NoSuchMetadataException "
|
||||||
|
+ e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataLocaleMetadata == null) {
|
||||||
|
logger.debug("No DataLocaleMetadata");
|
||||||
|
locale = "";
|
||||||
|
} else {
|
||||||
|
locale = dataLocaleMetadata.getLocale();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void retrieveViewColumnMetadata() throws DataSourceXException {
|
||||||
|
ViewColumnMetadata viewMetadata = serviceColumn
|
||||||
|
.getMetadata(ViewColumnMetadata.class);
|
||||||
|
// logger.debug("ViewColumnMetadata: " + viewMetadata.toString());
|
||||||
|
|
||||||
|
Column sourceColumn = serviceTable.getColumnById(viewMetadata
|
||||||
|
.getSourceTableDimensionColumnId());
|
||||||
|
if (sourceColumn.getColumnType().getCode()
|
||||||
|
.compareTo(ColumnTypeCode.TIMEDIMENSION.toString()) == 0) {
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.VIEWCOLUMN_OF_TIMEDIMENSION;
|
||||||
|
PeriodTypeMetadata periodTypeMetadataSourceColumn = null;
|
||||||
|
if (sourceColumn.contains(PeriodTypeMetadata.class)) {
|
||||||
|
periodTypeMetadataSourceColumn = sourceColumn
|
||||||
|
.getMetadata(PeriodTypeMetadata.class);
|
||||||
|
|
||||||
|
Table timeTable = service
|
||||||
|
.getTimeTable(periodTypeMetadataSourceColumn.getType());
|
||||||
|
|
||||||
|
if (timeTable == null || timeTable.getId() == null) {
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"Error retrieving Time Table: " + timeTable);
|
||||||
|
}
|
||||||
|
// logger.debug("Time Table Id: " + timeTable.getId());
|
||||||
|
|
||||||
|
Column timeColumn = timeTable
|
||||||
|
.getColumnByName(periodTypeMetadataSourceColumn
|
||||||
|
.getType().getName());
|
||||||
|
|
||||||
|
sourceTableDimensionColumnId = viewMetadata
|
||||||
|
.getSourceTableDimensionColumnId().getValue();
|
||||||
|
|
||||||
|
targetTableColumnId = timeColumn.getLocalId().getValue();
|
||||||
|
|
||||||
|
targetTableId = timeTable.getId().getValue();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
logger.error("Error retrieving Time Table for view column:"
|
||||||
|
+ serviceColumn
|
||||||
|
+ " , source column do not have a PeriodTypeMetadata: "
|
||||||
|
+ sourceColumn);
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"Error retrieving Time Table, source column do not have a PeriodTypeMetadata");
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
type = org.gcube.portlets.user.tdwx.shared.model.ColumnType.VIEWCOLUMN_OF_DIMENSION;
|
||||||
|
sourceTableDimensionColumnId = viewMetadata
|
||||||
|
.getSourceTableDimensionColumnId().getValue();
|
||||||
|
targetTableColumnId = viewMetadata.getTargetTableColumnId()
|
||||||
|
.getValue();
|
||||||
|
targetTableId = viewMetadata.getTargetTableId().getValue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void retrieveRelationship() throws DataSourceXException {
|
||||||
|
if (serviceColumn.getColumnType().getCode()
|
||||||
|
.compareTo(ColumnTypeCode.TIMEDIMENSION.toString()) == 0) {
|
||||||
|
Table timeTable = service
|
||||||
|
.getTimeTable(periodTypeMetadata.getType());
|
||||||
|
if (timeTable == null || timeTable.getId() == null) {
|
||||||
|
throw new DataSourceXException("Error retrieving Time Table: "
|
||||||
|
+ timeTable);
|
||||||
|
}
|
||||||
|
// logger.debug("Time Table Id: " + timeTable.getId());
|
||||||
|
Column timeColumn = timeTable.getColumnByName(periodTypeMetadata
|
||||||
|
.getType().getName());
|
||||||
|
relationshipData = new RelationshipData(timeTable.getId()
|
||||||
|
.getValue(), timeColumn.getLocalId().getValue());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ColumnRelationship rel = serviceColumn.getRelationship();
|
||||||
|
if (rel != null) {
|
||||||
|
relationshipData = new RelationshipData(rel.getTargetTableId()
|
||||||
|
.getValue(), rel.getTargetColumnId().getValue());
|
||||||
|
} else {
|
||||||
|
logger.error("No valid relationship for column: "
|
||||||
|
+ serviceColumn.toString());
|
||||||
|
throw new DataSourceXException(
|
||||||
|
"Column has not valid relationship");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isVisible() {
|
||||||
|
return visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
public org.gcube.portlets.user.tdwx.shared.model.ColumnType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getColumnLabel() {
|
||||||
|
return columnLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getColumnName() {
|
||||||
|
columnName = serviceColumn.getName();
|
||||||
|
return columnName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getColumnLocalId() {
|
||||||
|
columnLocalId = serviceColumn.getLocalId().getValue();
|
||||||
|
return columnLocalId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ValidationReferencesMetadata getValidationReferencesMetadata() {
|
||||||
|
ValidationReferencesMetadata refs = null;
|
||||||
|
try {
|
||||||
|
refs = serviceColumn
|
||||||
|
.getMetadata(ValidationReferencesMetadata.class);
|
||||||
|
} catch (NoSuchMetadataException e) {
|
||||||
|
logger.debug("ValidationReferencesMetadata: NoSuchMetadataException "
|
||||||
|
+ e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return refs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTooltipMessage() {
|
||||||
|
String valids = new String();
|
||||||
|
ValidationsMetadata val = null;
|
||||||
|
try {
|
||||||
|
val = serviceColumn.getMetadata(ValidationsMetadata.class);
|
||||||
|
} catch (NoSuchMetadataException e) {
|
||||||
|
/*
|
||||||
|
* logger.debug("No validatationsMetadata present: " +
|
||||||
|
* e.getLocalizedMessage());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
if (val != null) {
|
||||||
|
List<Validation> listValidationsMetadata = ((ValidationsMetadata) val)
|
||||||
|
.getValidations();
|
||||||
|
for (Validation validation : listValidationsMetadata) {
|
||||||
|
valids.concat(validation.getDescription() + "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tooltipMessage = valids;
|
||||||
|
|
||||||
|
return tooltipMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColumnDefinition build() {
|
||||||
|
ColumnDefinition columnDefinition = new ColumnDefinition(
|
||||||
|
getColumnName(), getColumnLocalId(), getColumnLabel());
|
||||||
|
columnDefinition.setLocale(locale);
|
||||||
|
|
||||||
|
columnDefinition.setRelationshipData(relationshipData);
|
||||||
|
columnDefinition.setViewColumn(viewColumn);
|
||||||
|
columnDefinition.setTargetTableId(targetTableId);
|
||||||
|
columnDefinition.setTargetTableColumnId(targetTableColumnId);
|
||||||
|
columnDefinition
|
||||||
|
.setSourceTableDimensionColumnId(sourceTableDimensionColumnId);
|
||||||
|
|
||||||
|
DataType dataType = serviceColumn.getDataType();
|
||||||
|
columnDefinition.setVisible(visible);
|
||||||
|
columnDefinition.setEditable(editable);
|
||||||
|
columnDefinition.setValueType(DataTypeMap.getValueType(dataType));
|
||||||
|
columnDefinition.setType(getType());
|
||||||
|
columnDefinition.setPosition(ordinalPosition);
|
||||||
|
columnDefinition.setTooltipMessage(getTooltipMessage());
|
||||||
|
columnDefinition.setColumnTypeName(serviceColumn.getColumnType()
|
||||||
|
.getName());
|
||||||
|
columnDefinition.setColumnDataType(serviceColumn.getDataType()
|
||||||
|
.getName());
|
||||||
|
columnDefinition.setWidth(100);
|
||||||
|
return columnDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.map;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.column.ColumnType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.column.type.CodeColumnType;
|
||||||
|
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.column.type.MeasureColumnType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.column.type.TimeDimensionColumnType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.column.type.ValidationColumnType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author giancarlo email: <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ColumnTypeMap {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* public static org.gcube.portlets.user.tdwx.shared.model.ColumnType
|
||||||
|
* map(ColumnType columnType){ if(columnType==null){ return null; }
|
||||||
|
*
|
||||||
|
* if(columnType instanceof AnnotationColumnType){
|
||||||
|
*
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* if(columnType instanceof AttributeColumnType){
|
||||||
|
*
|
||||||
|
* } }
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static boolean isIdColumnType(ColumnType columnType) {
|
||||||
|
if (columnType instanceof IdColumnType) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isMeasureColumnType(ColumnType columnType) {
|
||||||
|
if (columnType instanceof MeasureColumnType) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isCodeColumnType(ColumnType columnType) {
|
||||||
|
if (columnType instanceof CodeColumnType) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isValidationColumnType(ColumnType columnType) {
|
||||||
|
if (columnType instanceof ValidationColumnType) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isDimensionColumnType(ColumnType columnType) {
|
||||||
|
if (columnType instanceof DimensionColumnType) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isTimeDimensionColumnType(ColumnType columnType) {
|
||||||
|
if (columnType instanceof TimeDimensionColumnType) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.map;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.BooleanType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.DataType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.DateType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.GeometryType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.IntegerType;
|
||||||
|
import org.gcube.data.analysis.tabulardata.model.datatype.NumericType;
|
||||||
|
//import org.gcube.data.analysis.tabulardata.model.datatype.TextType;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.model.ValueType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi"
|
||||||
|
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DataTypeMap {
|
||||||
|
|
||||||
|
public static ValueType getValueType(DataType dataType){
|
||||||
|
if( dataType instanceof BooleanType){
|
||||||
|
return ValueType.BOOLEAN;
|
||||||
|
}
|
||||||
|
if( dataType instanceof DateType){
|
||||||
|
return ValueType.DATE;
|
||||||
|
}
|
||||||
|
if( dataType instanceof IntegerType){
|
||||||
|
return ValueType.INTEGER;
|
||||||
|
}
|
||||||
|
if( dataType instanceof GeometryType){
|
||||||
|
return ValueType.GEOMETRY;
|
||||||
|
}
|
||||||
|
if( dataType instanceof NumericType){
|
||||||
|
return ValueType.DOUBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ValueType.STRING;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.opexecution;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constants Parameter Name
|
||||||
|
*
|
||||||
|
* @author giancarlo email: <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OpCostants {
|
||||||
|
|
||||||
|
public static final String PARAMETER_CHANGE_COLUMN_POSITION_POSITION = "position";
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.opexecution;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.commons.webservice.types.operations.OperationExecution;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.TabularDataService;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.exception.OperationException;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.ColumnsReorderingConfig;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation Execution for change single column on grid.
|
||||||
|
* This operation is not supported on TDM beacause ordering of columns on view table
|
||||||
|
* is not allowed.
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi" email: <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OpExecution4ChangeSingleColumnPosition extends OpExecutionBuilder {
|
||||||
|
private static Logger logger = LoggerFactory
|
||||||
|
.getLogger(OpExecution4ChangeSingleColumnPosition.class);
|
||||||
|
|
||||||
|
//private TabularDataService service;
|
||||||
|
private ColumnsReorderingConfig columnsReorderingConfig;
|
||||||
|
|
||||||
|
public OpExecution4ChangeSingleColumnPosition(TabularDataService service,
|
||||||
|
ColumnsReorderingConfig columnsReorderingConfig) {
|
||||||
|
//this.service = service;
|
||||||
|
this.columnsReorderingConfig = columnsReorderingConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void buildOpEx() throws OperationException {
|
||||||
|
logger.debug("ColumnsReorderingConfig :" + columnsReorderingConfig);
|
||||||
|
|
||||||
|
|
||||||
|
OperationExecution invocation = null;
|
||||||
|
/*
|
||||||
|
|
||||||
|
OperationDefinition operationDefinition;
|
||||||
|
|
||||||
|
operationDefinition = OperationDefinitionMap.map(
|
||||||
|
OperationsId.ChangeSingleColumnPosition.toString(), service);
|
||||||
|
|
||||||
|
Map<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
map.put(OpCostants.PARAMETER_CHANGE_COLUMN_POSITION_POSITION, new Integer(columnsReorderingConfig.getColumnIndex()));
|
||||||
|
|
||||||
|
invocation = new OperationExecution(columnsReorderingConfig.getColumnDefinition().getColumnLocalId(),operationDefinition.getOperationId(), map);
|
||||||
|
*/
|
||||||
|
operationExecutionSpec.setOp(invocation);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.opexecution;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.exception.OperationException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract class for build Operation Execution
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi"
|
||||||
|
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract class OpExecutionBuilder {
|
||||||
|
protected OpExecutionSpec operationExecutionSpec;
|
||||||
|
|
||||||
|
public OpExecutionSpec getOperationExecutionSpec(){
|
||||||
|
return operationExecutionSpec;
|
||||||
|
}
|
||||||
|
public void createSpec(){
|
||||||
|
operationExecutionSpec=new OpExecutionSpec();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void buildOpEx() throws OperationException;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.opexecution;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.commons.webservice.types.operations.OperationExecution;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.exception.OperationException;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation Execution Director
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi"
|
||||||
|
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OpExecutionDirector {
|
||||||
|
OpExecutionBuilder operationExecutionBuilder;
|
||||||
|
|
||||||
|
public void setOperationExecutionBuilder(
|
||||||
|
OpExecutionBuilder operationExecutionBuilder) {
|
||||||
|
this.operationExecutionBuilder = operationExecutionBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OperationExecution getOperationExecution() {
|
||||||
|
return operationExecutionBuilder.getOperationExecutionSpec().getOp();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<OperationExecution> getListOperationExecution() {
|
||||||
|
return operationExecutionBuilder.getOperationExecutionSpec().getOps();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void constructOperationExecution() throws OperationException {
|
||||||
|
operationExecutionBuilder.createSpec();
|
||||||
|
operationExecutionBuilder.buildOpEx();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.opexecution;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.commons.webservice.types.operations.OperationExecution;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi"
|
||||||
|
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OpExecutionSpec {
|
||||||
|
private OperationExecution op;
|
||||||
|
private ArrayList<OperationExecution> ops;
|
||||||
|
|
||||||
|
public OperationExecution getOp() {
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOp(OperationExecution op) {
|
||||||
|
this.op = op;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<OperationExecution> getOps() {
|
||||||
|
return ops;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOps(ArrayList<OperationExecution> ops) {
|
||||||
|
this.ops = ops;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.trservice;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.commons.webservice.exception.NoSuchOperationException;
|
||||||
|
import org.gcube.data.analysis.tabulardata.commons.webservice.types.operations.OperationDefinition;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.TabularDataService;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.exception.OperationException;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi" <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OperationDefinitionMap {
|
||||||
|
protected static Logger logger = LoggerFactory
|
||||||
|
.getLogger(OperationDefinitionMap.class);
|
||||||
|
|
||||||
|
public static OperationDefinition map(String op, TabularDataService service)
|
||||||
|
throws OperationException {
|
||||||
|
OperationDefinition operationDefinition = null;
|
||||||
|
logger.debug("Retrieve Capability from Service");
|
||||||
|
try {
|
||||||
|
operationDefinition = service.getCapability(Long.valueOf(op));
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
logger.error("No valid operation type: " + op);
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new OperationException(
|
||||||
|
"No valid operation type: " + op);
|
||||||
|
} catch (NoSuchOperationException e) {
|
||||||
|
logger.error("NoSuchOperationException: " + e.getLocalizedMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new OperationException(
|
||||||
|
"NoSuchOperationException: " + e.getLocalizedMessage());
|
||||||
|
} catch(Throwable e) {
|
||||||
|
logger.error("Error Retrieving Service Capability: " + e.getLocalizedMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new OperationException(
|
||||||
|
"Error Retrieving Service Capability: " + e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return operationDefinition;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
package org.gcube.portlets.user.tdwx.datasource.td.trservice;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.tabulardata.commons.webservice.types.operations.OperationExecution;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.TabularDataService;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.tabular.TabularResource;
|
||||||
|
import org.gcube.data.analysis.tabulardata.service.tabular.TabularResourceId;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.exception.OperationException;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.opexecution.OpExecution4ChangeSingleColumnPosition;
|
||||||
|
import org.gcube.portlets.user.tdwx.datasource.td.opexecution.OpExecutionDirector;
|
||||||
|
import org.gcube.portlets.user.tdwx.shared.ColumnsReorderingConfig;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call operations on service
|
||||||
|
*
|
||||||
|
* @author giancarlo email: <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TRService {
|
||||||
|
// private static final String TABULAR_RESOURCE_IS_FINAL =
|
||||||
|
// "Tabular Resource Is Final";
|
||||||
|
private static final String TABULAR_RESOURCE_IS_LOCKED = "Tabular Resource Is Locked";
|
||||||
|
private static final String SECURITY_EXCEPTION_RIGHTS = "Security exception, you don't have the required rights!";
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory
|
||||||
|
.getLogger(TRService.class);
|
||||||
|
|
||||||
|
private TabularDataService service;
|
||||||
|
private TabularResourceId tabularResourceId;
|
||||||
|
|
||||||
|
public TRService() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public TabularDataService getService() {
|
||||||
|
return service;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setService(TabularDataService service) {
|
||||||
|
this.service = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TabularResourceId getTabularResourceId() {
|
||||||
|
return tabularResourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTabularResourceId(TabularResourceId tabularResourceId) {
|
||||||
|
this.tabularResourceId = tabularResourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startChangeSingleColumnPosition(
|
||||||
|
ColumnsReorderingConfig columnsReorderingConfig)
|
||||||
|
throws OperationException {
|
||||||
|
try {
|
||||||
|
|
||||||
|
TabularResource tabularResource = service
|
||||||
|
.getTabularResource(tabularResourceId);
|
||||||
|
|
||||||
|
if (tabularResource.isLocked()) {
|
||||||
|
logger.error(TABULAR_RESOURCE_IS_LOCKED);
|
||||||
|
throw new OperationException(TABULAR_RESOURCE_IS_LOCKED);
|
||||||
|
}
|
||||||
|
|
||||||
|
OpExecution4ChangeSingleColumnPosition opEx = new OpExecution4ChangeSingleColumnPosition(
|
||||||
|
service, columnsReorderingConfig);
|
||||||
|
OpExecutionDirector director = new OpExecutionDirector();
|
||||||
|
director.setOperationExecutionBuilder(opEx);
|
||||||
|
director.constructOperationExecution();
|
||||||
|
OperationExecution invocation = director.getOperationExecution();
|
||||||
|
|
||||||
|
logger.debug("OperationInvocation: \n" + invocation);
|
||||||
|
|
||||||
|
service.executeSynchMetadataOperation(invocation, tabularResourceId);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
} catch (OperationException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new OperationException(SECURITY_EXCEPTION_RIGHTS);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new OperationException("Error Changing The Column Position: "
|
||||||
|
+ e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue