task_24166 #11
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry including="**/*.java" kind="src" output="target/geoportal-data-entry-app-3.0.0/WEB-INF/classes" path="src/main/java">
|
<classpathentry including="**/*.java" kind="src" output="target/geoportal-data-entry-app-3.2.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="optional" value="true"/>
|
<attribute name="optional" value="true"/>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
@ -31,5 +31,5 @@
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="output" path="target/geoportal-data-entry-app-3.0.0/WEB-INF/classes"/>
|
<classpathentry kind="output" path="target/geoportal-data-entry-app-3.2.0-SNAPSHOT/WEB-INF/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
jarsExcludedFromWebInfLib=
|
jarsExcludedFromWebInfLib=
|
||||||
lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-entry-app/target/geoportal-data-entry-app-3.0.0
|
lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-entry-app/target/geoportal-data-entry-app-3.2.0-SNAPSHOT
|
||||||
warSrcDir=src/main/webapp
|
warSrcDir=src/main/webapp
|
||||||
warSrcDirIsOutput=false
|
warSrcDirIsOutput=false
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,8 +69,92 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<wb-module deploy-name="geoportal-data-entry-app-3.0.0">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<wb-module deploy-name="geoportal-data-entry-app-3.2.0-SNAPSHOT">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,7 +225,49 @@
|
||||||
|
|
||||||
|
|
||||||
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -212,7 +338,49 @@
|
||||||
|
|
||||||
|
|
||||||
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -283,7 +451,49 @@
|
||||||
|
|
||||||
|
|
||||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -306,10 +516,49 @@
|
||||||
|
|
||||||
|
|
||||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
|
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
|
||||||
<dependent-module archiveName="geoportal-data-common-2.0.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/geoportal-data-common/geoportal-data-common">
|
|
||||||
<dependency-type>uses</dependency-type>
|
|
||||||
</dependent-module>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -380,7 +629,49 @@
|
||||||
|
|
||||||
|
|
||||||
<property name="context-root" value="geoportal-data-entry-app"/>
|
<property name="context-root" value="geoportal-data-entry-app"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -451,7 +742,49 @@
|
||||||
|
|
||||||
|
|
||||||
<property name="java-output-path" value="/geoportal-data-entry-app/target/geoportal-data-entry-app-2.0.0-SNAPSHOT/WEB-INF/classes"/>
|
<property name="java-output-path" value="/geoportal-data-entry-app/target/geoportal-data-entry-app-2.0.0-SNAPSHOT/WEB-INF/classes"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -522,7 +855,49 @@
|
||||||
|
|
||||||
|
|
||||||
</wb-module>
|
</wb-module>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
31
CHANGELOG.md
31
CHANGELOG.md
|
@ -4,6 +4,36 @@
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [v3.2.0-SNAPSHOT] - 2022-05-11
|
||||||
|
|
||||||
|
- Implemented the Update facility [#24166]
|
||||||
|
- Integrated with the geoportal-data-mapper library [#24244]
|
||||||
|
- Integrated the Geoportal Data-Viewer Widget [#25015]
|
||||||
|
- Passed to Geoportal_Resolver service [#25031]
|
||||||
|
- Provided the "View Document" and "View As JSON" facilities
|
||||||
|
- DELETE relation" operation allowed only in DRAFT phase [#25104]
|
||||||
|
|
||||||
|
## [v3.1.0] - 2023-03-06
|
||||||
|
|
||||||
|
#### Enhancements
|
||||||
|
|
||||||
|
- [#24569] The Edit operation is available only in the "DRAFT" phase
|
||||||
|
- [#24571] The "Create Relation" operation is available only in the "DRAFT" phase
|
||||||
|
|
||||||
|
## [v3.0.2] - 2023-02-02
|
||||||
|
|
||||||
|
#### Fixes
|
||||||
|
|
||||||
|
- [#24520] Added parameter "force=true" to Delete Project
|
||||||
|
- [#24475] Propagated the Access Policy in the fileset
|
||||||
|
|
||||||
|
## [v3.0.1] - 2023-01-19
|
||||||
|
|
||||||
|
#### Fixes
|
||||||
|
|
||||||
|
- [#24281] Fixed filtering selection label
|
||||||
|
- [#24049] Fixed "Show on Map" facility vs Chrome browser
|
||||||
|
- [#24432] Fixing serialization issue using LinkedHashMap<String, String> instead of LinkedHashMap<String, Object>
|
||||||
|
|
||||||
## [v3.0.0] - 2022-11-09
|
## [v3.0.0] - 2022-11-09
|
||||||
|
|
||||||
|
@ -20,6 +50,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
- [#23926] Integrated a Post Creation Action in the UCD and manage it
|
- [#23926] Integrated a Post Creation Action in the UCD and manage it
|
||||||
- [#24136] Integrated the temporal dimension on the front-end side
|
- [#24136] Integrated the temporal dimension on the front-end side
|
||||||
|
|
||||||
|
|
||||||
## [v2.2.1] - 2022-06-29
|
## [v2.2.1] - 2022-06-29
|
||||||
|
|
||||||
#### Enhancements
|
#### Enhancements
|
||||||
|
|
12
README.md
12
README.md
|
@ -9,14 +9,22 @@ The GeoPortal Data Entry App is an application to build the web forms for data e
|
||||||
|
|
||||||
**Uses**
|
**Uses**
|
||||||
|
|
||||||
* GWT v.2.9.0. [GWT](http://www.gwtproject.org) is licensed under [Apache License 2.0](http://www.gwtproject.org/terms.html)
|
* GWT v.2.10.0. [GWT](http://www.gwtproject.org) is licensed under [Apache License 2.0](http://www.gwtproject.org/terms.html)
|
||||||
* GWT-Bootstrap v.2.3.2.0. [GWT-Bootstrap](https://github.com/gwtbootstrap) is licensed under [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0)
|
* GWT-Bootstrap v.2.3.2.0. [GWT-Bootstrap](https://github.com/gwtbootstrap) is licensed under [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
* pretty-print-json v.1.1. [pretty-print-json](https://github.com/center-key/pretty-print-json) is licensed under [MIT](https://github.com/center-key/pretty-print-json/blob/main/LICENSE.txt)
|
* pretty-print-json v.1.1. [pretty-print-json](https://github.com/center-key/pretty-print-json) is licensed under [MIT](https://github.com/center-key/pretty-print-json/blob/main/LICENSE.txt)
|
||||||
* jsoneditor v.9.5.5. [jsoneditor](https://github.com/josdejong/jsoneditor) is licensed under [Apache License 2.0](https://github.com/josdejong/jsoneditor/blob/master/LICENSE)
|
* jsoneditor v.9.5.5. [jsoneditor](https://github.com/josdejong/jsoneditor) is licensed under [Apache License 2.0](https://github.com/josdejong/jsoneditor/blob/master/LICENSE)
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
<img src="https://gcube.wiki.gcube-system.org/images_gcube/8/8e/GeoPortalDataEntry_Architecture.png" style="max-width:800px;" alt="GeoPortal Data-Entry - Architecture" />
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
N/A
|
D4GNA Use Case - 3 Phase Lifecycle
|
||||||
|
|
||||||
|
<img src="https://gcube.wiki.gcube-system.org/images_gcube/4/46/D4GNA_Workflow_Phases_and_Operations.png" style="max-width:800px;" alt="GeoPortal Data-Entry - Workflow & Phases & Operations" />
|
||||||
|
|
||||||
|
Geoportal Service Documentation is available at [gCube CMS Suite](https://geoportal.d4science.org/geoportal-service/docs/index.html)
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
58
pom.xml
58
pom.xml
|
@ -14,7 +14,7 @@
|
||||||
<groupId>org.gcube.portlets.user</groupId>
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
<artifactId>geoportal-data-entry-app</artifactId>
|
<artifactId>geoportal-data-entry-app</artifactId>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<version>3.0.0</version>
|
<version>3.2.0-SNAPSHOT</version>
|
||||||
<name>GeoPortal Data Entry App</name>
|
<name>GeoPortal Data Entry App</name>
|
||||||
<description>The GeoPortal Data Entry App is an application to build the web forms for data entries needed to create projects/documents (based on UCD) in the D4Science Geoportal service</description>
|
<description>The GeoPortal Data Entry App is an application to build the web forms for data entries needed to create projects/documents (based on UCD) in the D4Science Geoportal service</description>
|
||||||
<scm>
|
<scm>
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<!-- Convenience property to set the GWT version -->
|
<!-- Convenience property to set the GWT version -->
|
||||||
<gwt.version>2.9.0</gwt.version>
|
<gwt.version>2.10.0</gwt.version>
|
||||||
<!-- GWT needs at least java 1.6 -->
|
<!-- GWT needs at least java 1.6 -->
|
||||||
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
|
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.distribution</groupId>
|
<groupId>org.gcube.distribution</groupId>
|
||||||
<artifactId>maven-portal-bom</artifactId>
|
<artifactId>maven-portal-bom</artifactId>
|
||||||
<version>3.6.4</version>
|
<version>3.8.0-SNAPSHOT</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@ -68,22 +68,6 @@
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- needed to compile with gwt > 2.7 -->
|
|
||||||
<!-- <dependency> -->
|
|
||||||
<!-- <groupId>xml-apis</groupId> -->
|
|
||||||
<!-- <artifactId>xml-apis</artifactId> -->
|
|
||||||
<!-- <version>1.4.01</version> -->
|
|
||||||
<!-- <scope>provided</scope> -->
|
|
||||||
<!-- </dependency> -->
|
|
||||||
|
|
||||||
<!-- ASM required for GWT 2.9 -->
|
|
||||||
<!-- <dependency> -->
|
|
||||||
<!-- <groupId>org.ow2.asm</groupId> -->
|
|
||||||
<!-- <artifactId>asm</artifactId> -->
|
|
||||||
<!-- <scope>provided</scope> -->
|
|
||||||
<!-- <version>7.1</version> -->
|
|
||||||
<!-- </dependency> -->
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.gwt</groupId>
|
<groupId>com.google.gwt</groupId>
|
||||||
<artifactId>gwt-servlet</artifactId>
|
<artifactId>gwt-servlet</artifactId>
|
||||||
|
@ -107,6 +91,21 @@
|
||||||
<artifactId>gwt-bootstrap</artifactId>
|
<artifactId>gwt-bootstrap</artifactId>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.widgets</groupId>
|
||||||
|
<artifactId>geoportal-data-viewer-widget</artifactId>
|
||||||
|
<version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.application</groupId>
|
||||||
|
<artifactId>geoportal-data-mapper</artifactId>
|
||||||
|
<version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.portlets.widgets</groupId>
|
<groupId>org.gcube.portlets.widgets</groupId>
|
||||||
<artifactId>metadata-profile-form-builder-widget</artifactId>
|
<artifactId>metadata-profile-form-builder-widget</artifactId>
|
||||||
|
@ -129,12 +128,6 @@
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.portlets.widgets</groupId>
|
|
||||||
<artifactId>openlayer-basic-widgets</artifactId>
|
|
||||||
<version>[1.0.0, 2.0.0-SNAPSHOT)</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
<!-- FWS -->
|
<!-- FWS -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.common</groupId>
|
<groupId>org.gcube.common</groupId>
|
||||||
|
@ -161,12 +154,6 @@
|
||||||
<version>[1.0.0, 2.0.0-SNAPSHOT)</version>
|
<version>[1.0.0, 2.0.0-SNAPSHOT)</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.json</groupId>
|
|
||||||
<artifactId>json</artifactId>
|
|
||||||
<version>20140107</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.application</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-data-common</artifactId>
|
<artifactId>geoportal-data-common</artifactId>
|
||||||
|
@ -237,6 +224,8 @@
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- TESTS -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
|
@ -249,6 +238,13 @@
|
||||||
<artifactId>guava</artifactId>
|
<artifactId>guava</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.4</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -13,9 +13,17 @@
|
||||||
<inherits name="com.google.gwt.json.JSON" />
|
<inherits name="com.google.gwt.json.JSON" />
|
||||||
|
|
||||||
<inherits
|
<inherits
|
||||||
name='org.gcube.portlets.widgets.mpformbuilder.MetadataProfileFormBuilder' />
|
name='org.gcube.application.geoportalcommon.GeoportalDataCommon' />
|
||||||
|
|
||||||
<inherits name='org.gcube.application.geoportalcommon.GeoportalDataCommon' />
|
<inherits
|
||||||
|
name='org.gcube.application.geoportaldatamapper.GeoportalDataMapper' />
|
||||||
|
|
||||||
|
<inherits
|
||||||
|
name='org.gcube.portlets.widgets.gdvw.geoportal_data_viewer_widget' />
|
||||||
|
|
||||||
|
|
||||||
|
<inherits
|
||||||
|
name='org.gcube.portlets.widgets.mpformbuilder.MetadataProfileFormBuilder' />
|
||||||
|
|
||||||
|
|
||||||
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
|
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.gcube.portlets.user.geoportaldataentry.client;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.WORKFLOW_PHASE;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclarationDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclarationDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
||||||
|
@ -44,10 +45,28 @@ public class ConstantsGeoPortalDataEntryApp {
|
||||||
public static final RootPanel ROOT_PANEL_DIV_PORTLET = RootPanel.get(ConstantsGeoPortalDataEntryApp.DIV_PORTLET_ID);
|
public static final RootPanel ROOT_PANEL_DIV_PORTLET = RootPanel.get(ConstantsGeoPortalDataEntryApp.DIV_PORTLET_ID);
|
||||||
|
|
||||||
public static final String CSS_CLASS_GEOPORTAL_LOADERS_CENTER = "geoportal-loaders-center";
|
public static final String CSS_CLASS_GEOPORTAL_LOADERS_CENTER = "geoportal-loaders-center";
|
||||||
|
|
||||||
public static final String WORKFLOW_ACTION_POST_CREATION_ACTION_ID = "post_creation_action";
|
public static final String WORKFLOW_ACTION_POST_CREATION_ACTION_ID = "post_creation_action";
|
||||||
|
|
||||||
public static final DateTimeFormat DATE_TIME_FORMAT = DateTimeFormat.getFormat("dd MMMM yyyy");
|
public static final DateTimeFormat DATE_TIME_FORMAT = DateTimeFormat.getFormat("dd MMMM yyyy");
|
||||||
|
|
||||||
|
public static final String SHOW_ON_MAP_NOT_AVAILABLE_IN_DRAFT = "The 'Show on Map' facility is not available in DRAFT phase";
|
||||||
|
|
||||||
|
public static final String ALERT_MESSAGE_PROJECT_NOT_EDITABLE = "A Project can only be updated in "
|
||||||
|
+ WORKFLOW_PHASE.DRAFT.name()
|
||||||
|
+ " phase. You need to perform the step 'Reject' or 'UnPublish' to take back the project in "
|
||||||
|
+ WORKFLOW_PHASE.DRAFT.name() + " phase.";
|
||||||
|
|
||||||
|
public static final String ALERT_MESSAGE_CREATE_RELATION_FORBIDDEN = "The Create Relation operation can be performed only in "
|
||||||
|
+ WORKFLOW_PHASE.DRAFT.name()
|
||||||
|
+ " phase. You need to perform the step 'Reject' or 'UnPublish' to take back the project in "
|
||||||
|
+ WORKFLOW_PHASE.DRAFT.name() + " phase.";
|
||||||
|
|
||||||
|
|
||||||
|
public static final String ALERT_MESSAGE_DELETE_RELATION_FORBIDDEN = "The Delete Relation operation can be performed only in "
|
||||||
|
+ WORKFLOW_PHASE.DRAFT.name()
|
||||||
|
+ " phase. You need to perform the step 'Reject' or 'UnPublish' to take back the project in "
|
||||||
|
+ WORKFLOW_PHASE.DRAFT.name() + " phase.";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Enum ACTION_PERFORMED_ON_ITEM.
|
* The Enum ACTION_PERFORMED_ON_ITEM.
|
||||||
|
|
|
@ -15,14 +15,19 @@ import org.gcube.application.geoportalcommon.shared.config.RoleRights;
|
||||||
import org.gcube.application.geoportalcommon.shared.config.RoleRights.OPERATION_TYPE;
|
import org.gcube.application.geoportalcommon.shared.config.RoleRights.OPERATION_TYPE;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.WORKFLOW_PHASE;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.config.GcubeProfileDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.GcubeProfileDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.innerobject.FilesetDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.innerobject.PayloadDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.LifecycleInformationDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.LifecycleInformationDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclarationDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclarationDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
|
||||||
|
import org.gcube.application.geoportaldatamapper.shared.MetaDataProfileBeanExt;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ACTION_PERFORMED_ON_ITEM;
|
import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ACTION_PERFORMED_ON_ITEM;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalClientCaches.CacheSearchingFilterParametersFromConfig;
|
import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalClientCaches.CacheSearchingFilterParametersFromConfig;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.ClickItemEvent;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.ClickItemEvent;
|
||||||
|
@ -39,6 +44,7 @@ import org.gcube.portlets.user.geoportaldataentry.client.events.OperationPerform
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.OperationPerformedOnItemEventHandler;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.OperationPerformedOnItemEventHandler;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.RelationActionHandler;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.RelationActionHandler;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.RelationActionHandlerEvent;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.RelationActionHandlerEvent;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.events.RelationActionHandlerEvent.RELACTION_ACTION_TYPE;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsEvent;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsEvent;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsHandler;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsHandler;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.TreeItemEvent;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.TreeItemEvent;
|
||||||
|
@ -51,6 +57,7 @@ import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaRecordsPaginate
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.ModalWindow;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.ModalWindow;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.edit.EditModeRecord;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.edit.EditModeRecord;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.edit.UpdateRecord;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.form.GeonaDataEntryMainForm;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.form.GeonaDataEntryMainForm;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.report.LifecycleInformationPanel;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.report.LifecycleInformationPanel;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.report.ReportTemplateToHTML;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.report.ReportTemplateToHTML;
|
||||||
|
@ -61,23 +68,30 @@ import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil.HTML_TAG;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil.HTML_TAG;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.ModalConfirm;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.ModalConfirm;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.NewBrowserWindow;
|
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GNADataEntryExtendedConfigProfile;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GNADataEntryExtendedConfigProfile;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GeoportalISConfig;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GeoportalISConfig;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.Tree_Node;
|
import org.gcube.portlets.user.geoportaldataentry.shared.Tree_Node;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.UserRights;
|
import org.gcube.portlets.user.geoportaldataentry.shared.UserRights;
|
||||||
|
import org.gcube.portlets.widgets.gdvw.client.GeoportalDataViewerWidget;
|
||||||
|
import org.gcube.portlets.widgets.gdvw.client.project.ProjectViewer;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderServiceAsync;
|
import org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderServiceAsync;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm;
|
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm.OPERATION;
|
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm.OPERATION;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.DataTypeWrapper;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FilePath;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploadedRemote;
|
||||||
|
|
||||||
import com.github.gwtbootstrap.client.ui.Alert;
|
import com.github.gwtbootstrap.client.ui.Alert;
|
||||||
import com.github.gwtbootstrap.client.ui.Button;
|
import com.github.gwtbootstrap.client.ui.Button;
|
||||||
import com.github.gwtbootstrap.client.ui.Modal;
|
import com.github.gwtbootstrap.client.ui.Modal;
|
||||||
import com.github.gwtbootstrap.client.ui.constants.AlertType;
|
import com.github.gwtbootstrap.client.ui.constants.AlertType;
|
||||||
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
|
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
|
||||||
|
import com.github.gwtbootstrap.client.ui.constants.LabelType;
|
||||||
import com.google.gwt.core.client.EntryPoint;
|
import com.google.gwt.core.client.EntryPoint;
|
||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
import com.google.gwt.core.client.Scheduler;
|
import com.google.gwt.core.client.Scheduler;
|
||||||
|
@ -91,6 +105,7 @@ import com.google.gwt.event.logical.shared.ResizeHandler;
|
||||||
import com.google.gwt.event.shared.HandlerManager;
|
import com.google.gwt.event.shared.HandlerManager;
|
||||||
import com.google.gwt.user.client.Window;
|
import com.google.gwt.user.client.Window;
|
||||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwt.user.client.ui.Anchor;
|
||||||
import com.google.gwt.user.client.ui.HTML;
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
import com.google.gwt.user.client.ui.Image;
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
@ -193,7 +208,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Throwable caught) {
|
public void onFailure(Throwable caught) {
|
||||||
String errorMsg = "Sorry, an error occurrend when loading configurations. Please, contact the support";
|
String errorMsg = "Sorry, an error occurred when loading configurations. Please, contact the support";
|
||||||
Alert alert = new Alert(errorMsg, AlertType.ERROR);
|
Alert alert = new Alert(errorMsg, AlertType.ERROR);
|
||||||
alert.setClose(false);
|
alert.setClose(false);
|
||||||
try {
|
try {
|
||||||
|
@ -224,7 +239,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Throwable caught) {
|
public void onFailure(Throwable caught) {
|
||||||
String errorMsg = "Sorry, an error occurrend on istancing the application. Please, contact the support";
|
String errorMsg = "Sorry, an error occurred on istancing the application. Please, contact the support";
|
||||||
Alert alert = new Alert(errorMsg, AlertType.ERROR);
|
Alert alert = new Alert(errorMsg, AlertType.ERROR);
|
||||||
alert.setClose(false);
|
alert.setClose(false);
|
||||||
try {
|
try {
|
||||||
|
@ -305,7 +320,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Throwable caught) {
|
public void onFailure(Throwable caught) {
|
||||||
String errorMsg = "Sorry, an error occurrend on loading configurations. Please, contact the support";
|
String errorMsg = "Sorry, an error occurred on loading configurations. Please, contact the support";
|
||||||
Alert alert = new Alert(errorMsg, AlertType.ERROR);
|
Alert alert = new Alert(errorMsg, AlertType.ERROR);
|
||||||
alert.setClose(false);
|
alert.setClose(false);
|
||||||
try {
|
try {
|
||||||
|
@ -380,18 +395,18 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createNewDataEntyFor(String profileID, HandlerDeclarationDV handlerDeclarationDV,
|
private <T extends MetaDataProfileBean> void createNewDataEntyFor(String profileID,
|
||||||
List<GcubeProfileDV> listGPs) {
|
HandlerDeclarationDV handlerDeclarationDV, List<GcubeProfileDV> listGPs) {
|
||||||
dataEntryProjectCreated = true;
|
dataEntryProjectCreated = true;
|
||||||
mainTabPanel.setLoaderVisible("Loading...", true);
|
mainTabPanel.setLoaderVisible("Loading...", true);
|
||||||
// orderedCards.clear();
|
// orderedCards.clear();
|
||||||
resetUI();
|
resetUI();
|
||||||
mainTabPanel.setPageHeader(handlerDeclarationDV);
|
mainTabPanel.setPageHeader(handlerDeclarationDV);
|
||||||
|
|
||||||
//TODO AVOIDING THE CACHE
|
// TODO AVOIDING THE CACHE
|
||||||
//TODO I NEED TO CHECK WHY THE BY USING THE CACHE THE WEB-FORM IS FULL (EQUAL TO PREVIOUS ONE) AND NOT RESET PERFORMED
|
// TODO I NEED TO CHECK WHY THE BY USING THE CACHE THE WEB-FORM IS FULL (EQUAL
|
||||||
|
// TO PREVIOUS ONE) AND NOT RESET PERFORMED
|
||||||
|
|
||||||
// List<GeoNaFormCardModel> cardsPerIT = geoportalCaches.getGcubeProfilePerItemType(handlerDeclarationDV.getItemType());
|
// List<GeoNaFormCardModel> cardsPerIT = geoportalCaches.getGcubeProfilePerItemType(handlerDeclarationDV.getItemType());
|
||||||
// if (cardsPerIT != null) {
|
// if (cardsPerIT != null) {
|
||||||
// GWT.log("Profiles/Cards per Item Type are: " + cardsPerIT);
|
// GWT.log("Profiles/Cards per Item Type are: " + cardsPerIT);
|
||||||
|
@ -410,10 +425,18 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
final int order = i;
|
final int order = i;
|
||||||
GWT.log("calling getProfilesInTheScope for secondaryType: " + gcubeProfile.getGcubeSecondaryType()
|
GWT.log("calling getProfilesInTheScope for secondaryType: " + gcubeProfile.getGcubeSecondaryType()
|
||||||
+ ", name: " + gcubeProfile.getGcubeName());
|
+ ", name: " + gcubeProfile.getGcubeName());
|
||||||
|
|
||||||
MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScopeForName(
|
MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScopeForName(
|
||||||
geoportalISConfigs.getScope(), gcubeProfile.getGcubeSecondaryType(), gcubeProfile.getGcubeName(),
|
geoportalISConfigs.getScope(), gcubeProfile.getGcubeSecondaryType(), gcubeProfile.getGcubeName(),
|
||||||
new AsyncCallback<List<MetaDataProfileBean>>() {
|
new AsyncCallback<List<MetaDataProfileBean>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
mainTabPanel.setLoaderVisible("Loading...", false);
|
||||||
|
Window.alert(caught.getMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(List<MetaDataProfileBean> result) {
|
public void onSuccess(List<MetaDataProfileBean> result) {
|
||||||
|
|
||||||
|
@ -427,7 +450,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
GWT.log("Building form card for type: " + theMetaType);
|
GWT.log("Building form card for type: " + theMetaType);
|
||||||
|
|
||||||
GeoNaFormCardModel geonaForm = buildNewFormCardModelFromProfile(gcubeProfile, order,
|
GeoNaFormCardModel geonaForm = buildNewFormCardModelFromProfile(gcubeProfile, order,
|
||||||
metaDataProfileBean, OPERATION.UPDATE);
|
metaDataProfileBean, OPERATION.UPDATE, appManagerBus);
|
||||||
|
|
||||||
treemapOrderedGNAProfiles.put(order, geonaForm);
|
treemapOrderedGNAProfiles.put(order, geonaForm);
|
||||||
}
|
}
|
||||||
|
@ -437,19 +460,14 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
// ordered values
|
// ordered values
|
||||||
Collection<GeoNaFormCardModel> gnaCardsModels = treemapOrderedGNAProfiles.values();
|
Collection<GeoNaFormCardModel> gnaCardsModels = treemapOrderedGNAProfiles.values();
|
||||||
GWT.log("TreeMap values: " + gnaCardsModels);
|
GWT.log("TreeMap values: " + gnaCardsModels);
|
||||||
List<GeoNaFormCardModel> listGNAFormCardModel = new ArrayList<GeoNaFormCardModel>(gnaCardsModels);
|
List<GeoNaFormCardModel> listGNAFormCardModel = new ArrayList<GeoNaFormCardModel>(
|
||||||
|
gnaCardsModels);
|
||||||
geoportalCaches.putGcubeProfilePerItemType(handlerDeclarationDV.getItemType(),
|
geoportalCaches.putGcubeProfilePerItemType(handlerDeclarationDV.getItemType(),
|
||||||
listGNAFormCardModel);
|
listGNAFormCardModel);
|
||||||
// orderedCards.addAll(new ArrayList<GeoNaFormCardModel>(gnaCardsModels));
|
// orderedCards.addAll(new ArrayList<GeoNaFormCardModel>(gnaCardsModels));
|
||||||
buildNewCards(profileID, handlerDeclarationDV.getItemType(),
|
buildNewCards(profileID, handlerDeclarationDV.getItemType(), listGNAFormCardModel);
|
||||||
listGNAFormCardModel);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(Throwable caught) {
|
|
||||||
mainTabPanel.setLoaderVisible("Loading...", false);
|
|
||||||
Window.alert(caught.getMessage());
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -493,8 +511,8 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
mainTabPanel.setLoaderVisible("Loading...", true);
|
mainTabPanel.setLoaderVisible("Loading...", true);
|
||||||
geoNaMainForm.setVisibleFormActions(true);
|
geoNaMainForm.setVisibleFormActions(true);
|
||||||
resetUI();
|
resetUI();
|
||||||
//geoNaMainForm.removeTree(treeItemPanel);
|
// geoNaMainForm.removeTree(treeItemPanel);
|
||||||
|
|
||||||
geoNaMainForm.enableButtonSave(true);
|
geoNaMainForm.enableButtonSave(true);
|
||||||
mainTabPanel.setLoaderVisible("", false);
|
mainTabPanel.setLoaderVisible("", false);
|
||||||
|
|
||||||
|
@ -606,7 +624,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
savedMap.put(result.getProjectID(), saveGeonaDataFormsEvent.getTreeNode());
|
savedMap.put(result.getProjectID(), saveGeonaDataFormsEvent.getTreeNode());
|
||||||
|
|
||||||
LifecycleInformationPanel lip = new LifecycleInformationPanel(result.getProjectID(),
|
LifecycleInformationPanel lip = new LifecycleInformationPanel(result.getProjectID(),
|
||||||
result.getProfileID(), result.getProjectAsJSON(), lcDV, true);
|
result.getProfileID(), result.getProjectAsJSON(), lcDV, false);
|
||||||
|
|
||||||
modalContainerPanel.add(lip);
|
modalContainerPanel.add(lip);
|
||||||
|
|
||||||
|
@ -774,10 +792,10 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
public void onGetList(GetListOfRecordsEvent getListOfRecordsEvent) {
|
public void onGetList(GetListOfRecordsEvent getListOfRecordsEvent) {
|
||||||
GWT.log("Fired: " + getListOfRecordsEvent);
|
GWT.log("Fired: " + getListOfRecordsEvent);
|
||||||
SearchingFilter searchingFilter = getListOfRecordsEvent.getSearchingFilter();
|
SearchingFilter searchingFilter = getListOfRecordsEvent.getSearchingFilter();
|
||||||
|
|
||||||
|
CacheSearchingFilterParametersFromConfig seachingFilterParameters = geoportalCaches
|
||||||
CacheSearchingFilterParametersFromConfig seachingFilterParameters =
|
.getFilterParametersForProfileId(getListOfRecordsEvent.getProfileID(),
|
||||||
geoportalCaches.getFilterParametersForProfileId(getListOfRecordsEvent.getProfileID(), GEOPORTAL_DATA_HANDLER.geoportal_data_list);
|
GEOPORTAL_DATA_HANDLER.geoportal_data_list);
|
||||||
|
|
||||||
// CacheSearchingFilterParametersFromConfig seachingFilterParameters = geoportalCaches
|
// CacheSearchingFilterParametersFromConfig seachingFilterParameters = geoportalCaches
|
||||||
// .getFilterParametersForProfileId(getListOfRecordsEvent.getProfileID());
|
// .getFilterParametersForProfileId(getListOfRecordsEvent.getProfileID());
|
||||||
|
@ -863,6 +881,20 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
switch (createRelationHE.getRelactionActionType()) {
|
switch (createRelationHE.getRelactionActionType()) {
|
||||||
case DELETE: {
|
case DELETE: {
|
||||||
|
|
||||||
|
GcubeUserRole myRole = myRights.getRoleRights().getUserRole();
|
||||||
|
|
||||||
|
// TODO REMOVE THIS IF AFTER ADDING ALL THE OPERATIONS IN THE IS
|
||||||
|
// OPERATIONS/RIGHTS CONFIGURATION
|
||||||
|
if (!myRole.equals(GcubeUserRole.DATA_MANAGER) && !myRole.equals(GcubeUserRole.DATA_EDITOR)) {
|
||||||
|
String action = RELACTION_ACTION_TYPE.DELETE + " Relation";
|
||||||
|
|
||||||
|
String msg = "You are not authorized to perform the action: " + action;
|
||||||
|
ModalWindow modalW = new ModalWindow(new Image(Images.ICONS.accessDenied()),
|
||||||
|
"Forbidden: " + action, msg, AlertType.WARNING);
|
||||||
|
modalW.show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (createRelationHE.getFromProject() == null || createRelationHE.getToProject() == null) {
|
if (createRelationHE.getFromProject() == null || createRelationHE.getToProject() == null) {
|
||||||
DialogInform di = new DialogInform(null, "No selection", "You must select a Project");
|
DialogInform di = new DialogInform(null, "No selection", "You must select a Project");
|
||||||
di.center();
|
di.center();
|
||||||
|
@ -1195,56 +1227,70 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
modalContainerPanel.remove(loader);
|
modalContainerPanel.remove(loader);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
String stepString = wActionOnItem.getAction().getCallSteps().length==1?"Step":"Steps";
|
String stepString = wActionOnItem.getAction().getCallSteps().length == 1
|
||||||
|
? "Step"
|
||||||
|
: "Steps";
|
||||||
|
|
||||||
String stepsToString = "";
|
String stepsToString = "";
|
||||||
for (String step : wActionOnItem.getAction().getCallSteps()) {
|
for (String step : wActionOnItem.getAction().getCallSteps()) {
|
||||||
stepsToString+=step+", ";
|
stepsToString += step + ", ";
|
||||||
}
|
}
|
||||||
|
|
||||||
Alert alert = new Alert(
|
Alert alert = new Alert(
|
||||||
stepString +" "+ stepsToString
|
stepString + " " + stepsToString + "performed correclty!");
|
||||||
+ "performed correclty!");
|
|
||||||
alert.setType(AlertType.INFO);
|
alert.setType(AlertType.INFO);
|
||||||
alert.setClose(false);
|
alert.setClose(false);
|
||||||
modal.add(alert);
|
modal.add(alert);
|
||||||
|
|
||||||
GeoportalDataEntryServiceAsync.Util.getInstance().getResultDocumentFoProjectByID(result.getProfileID(), result.getId(), new AsyncCallback<ResultDocumentDV>() {
|
|
||||||
|
|
||||||
@Override
|
GeoportalDataEntryServiceAsync.Util.getInstance()
|
||||||
public void onFailure(Throwable caught) {
|
.getResultDocumentFoProjectByID(result.getProfileID(),
|
||||||
// TODO Auto-generated method stub
|
result.getId(), new AsyncCallback<ResultDocumentDV>() {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(ResultDocumentDV theResultDocument) {
|
public void onFailure(Throwable caught) {
|
||||||
VerticalPanel vp = new VerticalPanel();
|
// TODO Auto-generated method stub
|
||||||
vp.getElement().getStyle().setMarginTop(20, Unit.PX);
|
|
||||||
vp.add(new Label("Check outcome in the Publication Report"));
|
|
||||||
Button buttonShowPublicationReport = new Button(
|
|
||||||
"Show Publication Report");
|
|
||||||
buttonShowPublicationReport.setType(ButtonType.INFO);
|
|
||||||
buttonShowPublicationReport.addClickHandler(new ClickHandler() {
|
|
||||||
|
|
||||||
@Override
|
}
|
||||||
public void onClick(ClickEvent event) {
|
|
||||||
modal.hide();
|
|
||||||
appManagerBus.fireEvent(new OperationOnItemEvent<DocumentDV>(
|
|
||||||
Arrays.asList(theResultDocument),
|
|
||||||
OPERATION_ON_ITEM.VIEW_REPORT));
|
|
||||||
|
|
||||||
}
|
@Override
|
||||||
});
|
public void onSuccess(
|
||||||
buttonShowPublicationReport.getElement().getStyle().setMarginTop(10, Unit.PX);
|
ResultDocumentDV theResultDocument) {
|
||||||
buttonShowPublicationReport.getElement().getStyle().setMarginBottom(20, Unit.PX);
|
VerticalPanel vp = new VerticalPanel();
|
||||||
vp.add(buttonShowPublicationReport);
|
vp.getElement().getStyle().setMarginTop(20,
|
||||||
|
Unit.PX);
|
||||||
|
vp.add(new Label(
|
||||||
|
"Check outcome in the Publication Report"));
|
||||||
|
Button buttonShowPublicationReport = new Button(
|
||||||
|
"Show Publication Report");
|
||||||
|
buttonShowPublicationReport
|
||||||
|
.setType(ButtonType.INFO);
|
||||||
|
buttonShowPublicationReport
|
||||||
|
.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
modal.add(vp);
|
@Override
|
||||||
|
public void onClick(
|
||||||
}
|
ClickEvent event) {
|
||||||
});
|
modal.hide();
|
||||||
|
appManagerBus.fireEvent(
|
||||||
|
new OperationOnItemEvent<DocumentDV>(
|
||||||
|
Arrays.asList(
|
||||||
|
theResultDocument),
|
||||||
|
OPERATION_ON_ITEM.VIEW_REPORT));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonShowPublicationReport.getElement()
|
||||||
|
.getStyle().setMarginTop(10, Unit.PX);
|
||||||
|
buttonShowPublicationReport.getElement()
|
||||||
|
.getStyle()
|
||||||
|
.setMarginBottom(20, Unit.PX);
|
||||||
|
vp.add(buttonShowPublicationReport);
|
||||||
|
|
||||||
|
modal.add(vp);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
appManagerBus.fireEvent(new GetListOfRecordsEvent(false,
|
appManagerBus.fireEvent(new GetListOfRecordsEvent(false,
|
||||||
resultDocumentDV.getProfileID(),
|
resultDocumentDV.getProfileID(),
|
||||||
|
@ -1398,32 +1444,72 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
case VIEW_ON_MAP: {
|
case VIEW_ON_MAP: {
|
||||||
|
|
||||||
final Modal modal = new Modal(true, true);
|
final Modal modal = new Modal(true, true);
|
||||||
|
modal.setTitle("Show on Map the Project...");
|
||||||
modal.setCloseVisible(true);
|
modal.setCloseVisible(true);
|
||||||
|
if (resultDocumentDV.getLifecycleInfo() != null) {
|
||||||
|
String phase = resultDocumentDV.getLifecycleInfo().getPhase();
|
||||||
|
// IF the project is not in DRAFT phase, showing an alert and no Update Mode
|
||||||
|
// will
|
||||||
|
// be activated
|
||||||
|
if (phase != null && phase.compareToIgnoreCase(WORKFLOW_PHASE.DRAFT.getLabel()) == 0) {
|
||||||
|
|
||||||
|
Alert alert = new Alert(
|
||||||
|
ConstantsGeoPortalDataEntryApp.SHOW_ON_MAP_NOT_AVAILABLE_IN_DRAFT);
|
||||||
|
alert.setType(AlertType.WARNING);
|
||||||
|
alert.setClose(false);
|
||||||
|
modal.add(alert);
|
||||||
|
modal.show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final HorizontalPanel hpGetLink = new HorizontalPanel();
|
final HorizontalPanel hpGetLink = new HorizontalPanel();
|
||||||
final LoaderIcon lc = new LoaderIcon("Just moment getting link...");
|
final LoaderIcon lc = new LoaderIcon("Just moment getting link...");
|
||||||
hpGetLink.add(lc);
|
hpGetLink.add(lc);
|
||||||
modal.add(hpGetLink);
|
modal.add(hpGetLink);
|
||||||
|
|
||||||
final NewBrowserWindow newBrowserWindow = NewBrowserWindow.open("", "_blank", "");
|
|
||||||
|
|
||||||
GeoportalDataEntryServiceAsync.Util.getInstance().getLinksFor(resultDocumentDV.getId(),
|
GeoportalDataEntryServiceAsync.Util.getInstance().getLinksFor(resultDocumentDV.getId(),
|
||||||
resultDocumentDV.getProfileID(), new AsyncCallback<GeoportalItemReferences>() {
|
resultDocumentDV.getProfileID(), new AsyncCallback<GeoportalItemReferences>() {
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Throwable caught) {
|
public void onFailure(Throwable caught) {
|
||||||
hpGetLink.clear();
|
try {
|
||||||
|
hpGetLink.setVisible(false);
|
||||||
|
modal.remove(hpGetLink);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO: handle exception
|
||||||
|
}
|
||||||
Alert alert = new Alert(caught.getMessage(), AlertType.ERROR);
|
Alert alert = new Alert(caught.getMessage(), AlertType.ERROR);
|
||||||
alert.setClose(false);
|
alert.setClose(false);
|
||||||
hpGetLink.add(alert);
|
hpGetLink.add(alert);
|
||||||
newBrowserWindow.close();
|
// newBrowserWindow.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(GeoportalItemReferences result) {
|
public void onSuccess(GeoportalItemReferences result) {
|
||||||
|
try {
|
||||||
|
hpGetLink.setVisible(false);
|
||||||
|
modal.remove(hpGetLink);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO: handle exception
|
||||||
|
}
|
||||||
String theURL = result.getRestrictedLink().getShortURL() != null
|
String theURL = result.getRestrictedLink().getShortURL() != null
|
||||||
? result.getRestrictedLink().getShortURL()
|
? result.getRestrictedLink().getShortURL()
|
||||||
: result.getRestrictedLink().getCompleteURL();
|
: result.getRestrictedLink().getCompleteURL();
|
||||||
newBrowserWindow.setUrl(theURL);
|
// newBrowserWindow.setUrl(theURL);
|
||||||
modal.hide();
|
|
||||||
|
Anchor anchor = new Anchor(theURL);
|
||||||
|
anchor.setHref(theURL);
|
||||||
|
anchor.setTarget("_blank");
|
||||||
|
anchor.setTitle(
|
||||||
|
"Show on Map the project with id: " + resultDocumentDV.getId());
|
||||||
|
com.github.gwtbootstrap.client.ui.Label label = new com.github.gwtbootstrap.client.ui.Label(
|
||||||
|
"Go to Map by clicking the link");
|
||||||
|
label.setType(LabelType.SUCCESS);
|
||||||
|
|
||||||
|
modal.add(label);
|
||||||
|
modal.add(new HTML("<br>"));
|
||||||
|
modal.add(anchor);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1472,23 +1558,76 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
}
|
}
|
||||||
|
|
||||||
case EDIT_PROJECT: {
|
case EDIT_PROJECT: {
|
||||||
|
|
||||||
final Modal modal3 = new Modal(true, true);
|
final Modal modal3 = new Modal(true, true);
|
||||||
modal3.setTitle(
|
modal3.setTitle(
|
||||||
"<span style='font-size:20px;'>Edit: <span style='color:#555; font-size:20px;'>"
|
"<span style='font-size:20px;'>Update Project with id: <span style='color:#555; font-size:20px;'>"
|
||||||
+ resultDocumentDV.getId() + "</span></span>");
|
+ resultDocumentDV.getId() + "</span></span>");
|
||||||
modal3.setWidth(950);
|
// modal3.setWidth(950);
|
||||||
modal3.setHeight("700px");
|
// modal3.setHeight("700px");
|
||||||
modal3.setCloseVisible(true);
|
modal3.setCloseVisible(true);
|
||||||
((Element) modal3.getElement().getChildNodes().getItem(1))
|
((Element) modal3.getElement().getChildNodes().getItem(1)).addClassName("modal-body-edit");
|
||||||
.addClassName("modal-body-custom");
|
int height = Window.getClientHeight() * 70 / 100;
|
||||||
EditModeRecord emr = new EditModeRecord(appManagerBus, resultDocumentDV);
|
|
||||||
modal3.add(emr);
|
int width = Window.getClientWidth() * 70 / 100;
|
||||||
|
modal3.setWidth(width);
|
||||||
|
modal3.setHeight(height + "px");
|
||||||
|
|
||||||
|
// #24569
|
||||||
|
boolean isNotInDRAFT = false;
|
||||||
|
|
||||||
|
if (resultDocumentDV.getLifecycleInfo() != null) {
|
||||||
|
String phase = resultDocumentDV.getLifecycleInfo().getPhase();
|
||||||
|
// IF the project is not in DRAFT phase, showing an alert and no Update Mode
|
||||||
|
// will
|
||||||
|
// be activated
|
||||||
|
if (phase != null && phase.compareToIgnoreCase(WORKFLOW_PHASE.DRAFT.getLabel()) != 0) {
|
||||||
|
|
||||||
|
Alert alert = new Alert(
|
||||||
|
ConstantsGeoPortalDataEntryApp.ALERT_MESSAGE_PROJECT_NOT_EDITABLE);
|
||||||
|
alert.setType(AlertType.WARNING);
|
||||||
|
alert.setClose(false);
|
||||||
|
modal3.add(alert);
|
||||||
|
|
||||||
|
isNotInDRAFT = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateRecord ur = new UpdateRecord(appManagerBus, resultDocumentDV.getProfileID(),
|
||||||
|
resultDocumentDV.getId(), width, height);
|
||||||
|
|
||||||
|
if (isNotInDRAFT) {
|
||||||
|
ur.noUpdateMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
modal3.add(ur);
|
||||||
modal3.show();
|
modal3.show();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CREATE_RELATION: {
|
case CREATE_RELATION: {
|
||||||
|
|
||||||
mainTabPanel.showCreateRelationPanel(true, resultDocumentDV);
|
// #24571
|
||||||
|
boolean isNotInDRAFT = false;
|
||||||
|
|
||||||
|
if (resultDocumentDV.getLifecycleInfo() != null) {
|
||||||
|
String phase = resultDocumentDV.getLifecycleInfo().getPhase();
|
||||||
|
// IF the project is not in DRAFT, showing an alert and the no Update Mode will
|
||||||
|
// be activated
|
||||||
|
if (phase != null && phase.compareToIgnoreCase(WORKFLOW_PHASE.DRAFT.getLabel()) != 0) {
|
||||||
|
|
||||||
|
String msg = ConstantsGeoPortalDataEntryApp.ALERT_MESSAGE_CREATE_RELATION_FORBIDDEN;
|
||||||
|
ModalWindow modalW = new ModalWindow(new Image(Images.ICONS.accessDenied()),
|
||||||
|
"Forbidden: " + action, msg, AlertType.WARNING);
|
||||||
|
modalW.show();
|
||||||
|
|
||||||
|
isNotInDRAFT = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allowing the Create Relation only in DRAFT phase
|
||||||
|
if (!isNotInDRAFT) {
|
||||||
|
mainTabPanel.showCreateRelationPanel(true, resultDocumentDV);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1500,6 +1639,79 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// It is the show document
|
||||||
|
case VIEW_PROJECT_AS_DOCUMENT: {
|
||||||
|
GWT.log("VIEW VIEW_PROJECT_AS_DOCUMENT fired");
|
||||||
|
|
||||||
|
final Modal modal = new Modal(true, true);
|
||||||
|
modal.setCloseVisible(true);
|
||||||
|
final int height = Window.getClientHeight() * 70 / 100;
|
||||||
|
int width = Window.getClientWidth() * 70 / 100;
|
||||||
|
modal.setMaxHeigth("none");
|
||||||
|
modal.setWidth(width);
|
||||||
|
modal.setHeight(height + "px");
|
||||||
|
modal.setTitle(
|
||||||
|
"<span style='font-size:20px;'>View Document for Project ID: <span style='color:#555; font-size:20px;'>"
|
||||||
|
+ resultDocumentDV.getId() + "</span></span>");
|
||||||
|
final HorizontalPanel hp = new HorizontalPanel();
|
||||||
|
final LoaderIcon lc = new LoaderIcon("Loading Project... please wait");
|
||||||
|
hp.add(lc);
|
||||||
|
modal.add(hp);
|
||||||
|
GeoportalDataEntryServiceAsync.Util.getInstance().getProjectView(
|
||||||
|
resultDocumentDV.getProfileID(), resultDocumentDV.getProjectID(),
|
||||||
|
new AsyncCallback<ProjectView>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
hp.clear();
|
||||||
|
modal.setTitle("Error :-(");
|
||||||
|
Alert alert = new Alert(
|
||||||
|
"Sorry, I cannot show the Project with id '"
|
||||||
|
+ resultDocumentDV.getId()
|
||||||
|
+ "' Refresh an try again. Error: " + caught.getMessage(),
|
||||||
|
AlertType.ERROR);
|
||||||
|
alert.setClose(false);
|
||||||
|
hp.add(alert);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(ProjectView result) {
|
||||||
|
hp.clear();
|
||||||
|
GeoportalDataViewerWidget wid = new GeoportalDataViewerWidget();
|
||||||
|
ProjectViewer viewer = wid.getProjectViewer(result);
|
||||||
|
viewer.setTocContentVisible(true);
|
||||||
|
viewer.setHeight((height - 80) + "px");
|
||||||
|
modal.add(viewer);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
modal.show();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case VIEW_PROJECT_AS_JSON: {
|
||||||
|
GWT.log("VIEW VIEW_PROJECT_AS_JSON fired");
|
||||||
|
|
||||||
|
final Modal modal = new Modal(true, true);
|
||||||
|
modal.setCloseVisible(true);
|
||||||
|
final int height = Window.getClientHeight() * 70 / 100;
|
||||||
|
int width = Window.getClientWidth() * 70 / 100;
|
||||||
|
modal.setMaxHeigth("none");
|
||||||
|
modal.setWidth(width);
|
||||||
|
modal.setHeight(height + "px");
|
||||||
|
modal.setTitle(
|
||||||
|
"<span style='font-size:20px;'>View as JSON for Project ID: <span style='color:#555; font-size:20px;'>"
|
||||||
|
+ resultDocumentDV.getId() + "</span></span>");
|
||||||
|
|
||||||
|
EditModeRecord editMode = new EditModeRecord(appManagerBus, resultDocumentDV, height);
|
||||||
|
modal.add(editMode);
|
||||||
|
modal.show();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case DELETE_PROJECT: {
|
case DELETE_PROJECT: {
|
||||||
|
|
||||||
String htmlMsg = "Going to delete the project with:";
|
String htmlMsg = "Going to delete the project with:";
|
||||||
|
@ -1536,7 +1748,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Throwable caught) {
|
public void onFailure(Throwable caught) {
|
||||||
hp.clear();
|
hp.clear();
|
||||||
modal.setTitle("Error");
|
modal.setTitle("Error :-(");
|
||||||
Alert alert = new Alert(
|
Alert alert = new Alert(
|
||||||
"Sorry, I cannot delete the Project with id '"
|
"Sorry, I cannot delete the Project with id '"
|
||||||
+ resultDocumentDV.getId()
|
+ resultDocumentDV.getId()
|
||||||
|
@ -1610,7 +1822,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
NodeItem theRootNode = (NodeItem) root.getWidget();
|
NodeItem theRootNode = (NodeItem) root.getWidget();
|
||||||
GeoNaFormCardModel nodeCard = theRootNode.getGeoNaFormCardModel();
|
GeoNaFormCardModel nodeCard = theRootNode.getGeoNaFormCardModel();
|
||||||
GeoNaFormCardModel newNodeFormCard = buildNewFormCardModelFromProfile(nodeCard.getGcubeProfile(), -1,
|
GeoNaFormCardModel newNodeFormCard = buildNewFormCardModelFromProfile(nodeCard.getGcubeProfile(), -1,
|
||||||
nodeCard.getMetadataProfileBean(), OPERATION.UPDATE);
|
nodeCard.getMetadataProfileBean(), OPERATION.UPDATE, appManagerBus);
|
||||||
|
|
||||||
// create a new node with the same data as the root node
|
// create a new node with the same data as the root node
|
||||||
boolean canBeDuplicated = newNodeFormCard.getFormCard().isInternalRepeatibleForm();
|
boolean canBeDuplicated = newNodeFormCard.getFormCard().isInternalRepeatibleForm();
|
||||||
|
@ -1704,4 +1916,91 @@ public class GeoPortalDataEntryApp implements EntryPoint {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds the new form card model from profile.
|
||||||
|
*
|
||||||
|
* @param gcubeProfile the gcube profile
|
||||||
|
* @param order the order
|
||||||
|
* @param metaDataProfileBean the meta data profile bean
|
||||||
|
* @param operation the operation
|
||||||
|
* @param appManagerBus the app manager bus
|
||||||
|
* @return the geo na form card model
|
||||||
|
*/
|
||||||
|
public static <T extends MetaDataProfileBean> GeoNaFormCardModel buildNewFormCardModelFromProfile(
|
||||||
|
GcubeProfileDV gcubeProfile, int order, T metaDataProfileBean, OPERATION operation,
|
||||||
|
HandlerManager appManagerBus) {
|
||||||
|
|
||||||
|
// Managing Forms Repeatability
|
||||||
|
int minOccurs = gcubeProfile.getMinOccurs();
|
||||||
|
minOccurs = minOccurs <= 0 ? 0 : minOccurs;
|
||||||
|
int maxOccurs = gcubeProfile.getMaxOccurs();
|
||||||
|
maxOccurs = maxOccurs <= 0 ? Integer.MAX_VALUE : maxOccurs;
|
||||||
|
|
||||||
|
// TODO MUST BE MANAGED MIN_OCCURS
|
||||||
|
ProjectFormCard cct = new ProjectFormCard(gcubeProfile.getSectionName(), gcubeProfile.getSectionTitle(), order,
|
||||||
|
maxOccurs > 1, minOccurs, maxOccurs);
|
||||||
|
|
||||||
|
List<FilesetDV> fileset = null;
|
||||||
|
if (metaDataProfileBean instanceof MetaDataProfileBeanExt) {
|
||||||
|
MetaDataProfileBeanExt metaDataProfileBeanExt = (MetaDataProfileBeanExt) metaDataProfileBean;
|
||||||
|
fileset = metaDataProfileBeanExt.getListFileset();
|
||||||
|
}
|
||||||
|
|
||||||
|
GeoNaFormCardModel geoNaFormCardModel = new GeoNaFormCardModel(metaDataProfileBean, null, cct, gcubeProfile);
|
||||||
|
|
||||||
|
// In case of UPDATE operation, the fields of kind File will be not mandatory.
|
||||||
|
if (operation != null && operation.equals(OPERATION.UPDATE)) {
|
||||||
|
List<MetadataFieldWrapper> fields = geoNaFormCardModel.getMetadataProfileBean().getMetadataFields();
|
||||||
|
for (MetadataFieldWrapper metadataFieldWrapper : fields) {
|
||||||
|
if (metadataFieldWrapper.getMandatory()
|
||||||
|
&& metadataFieldWrapper.getType().equals(DataTypeWrapper.File)) {
|
||||||
|
metadataFieldWrapper.setMandatory(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateMetadataForm baseForm = null;
|
||||||
|
if (fileset == null) {
|
||||||
|
GWT.log("Instancing CreateMetadataForm without files");
|
||||||
|
baseForm = new CreateMetadataForm(Arrays.asList(geoNaFormCardModel.getMetadataProfileBean()), appManagerBus,
|
||||||
|
operation);
|
||||||
|
} else {
|
||||||
|
GWT.log("Instancing CreateMetadataForm with files");
|
||||||
|
List<? extends FileUploaded> files = toListFileUploadedRemote(fileset);
|
||||||
|
GWT.log("files are: " + files);
|
||||||
|
baseForm = new CreateMetadataForm(Arrays.asList(geoNaFormCardModel.getMetadataProfileBean()), appManagerBus,
|
||||||
|
operation, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
geoNaFormCardModel.setMetadataForm(baseForm);
|
||||||
|
|
||||||
|
return geoNaFormCardModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<? extends FileUploaded> toListFileUploadedRemote(List<FilesetDV> fileset) {
|
||||||
|
|
||||||
|
if (fileset == null || fileset.size() == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
List<FileUploadedRemote> fileUploaded = new ArrayList<FileUploadedRemote>();
|
||||||
|
|
||||||
|
for (FilesetDV filesetDV : fileset) {
|
||||||
|
GWT.log("filesetDV fieldName: " + filesetDV.getFilesetFieldName() + " profile: "
|
||||||
|
+ filesetDV.getGcubeProfileFieldName());
|
||||||
|
|
||||||
|
for (PayloadDV payload : filesetDV.getListPayload()) {
|
||||||
|
FileUploadedRemote fu = new FileUploadedRemote();
|
||||||
|
fu.setFileName(payload.getName());
|
||||||
|
fu.setUrl(payload.getLink());
|
||||||
|
fu.setMimeType(payload.getMimetype());
|
||||||
|
// adding FilePath according to spefic file registred in the UCD
|
||||||
|
FilePath filePath = new FilePath(filesetDV.getGcubeProfileFieldName(), filesetDV.getFilesetFieldName());
|
||||||
|
fu.setFilePath(filePath);
|
||||||
|
fileUploaded.add(fu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fileUploaded;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,11 +7,14 @@ import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
|
||||||
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
|
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.config.ActionDefinitionDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.ActionDefinitionDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.FilePathDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.LifecycleInformationDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.LifecycleInformationDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalReferenceDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalReferenceDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
|
||||||
|
import org.gcube.application.geoportaldatamapper.shared.ProjectEdit;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GNADataEntryExtendedConfigProfile;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GNADataEntryExtendedConfigProfile;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
||||||
|
@ -31,6 +34,15 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
|
||||||
@RemoteServiceRelativePath("geoportaldataentryservice")
|
@RemoteServiceRelativePath("geoportaldataentryservice")
|
||||||
public interface GeoportalDataEntryService extends RemoteService {
|
public interface GeoportalDataEntryService extends RemoteService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save geona data forms.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @param tree_Node the tree node
|
||||||
|
* @param stepsOnPostCreation the steps on post creation
|
||||||
|
* @return the commit report
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
CommitReport saveGeonaDataForms(String profileID, Tree_Node<GeoNaFormDataObject> tree_Node,
|
CommitReport saveGeonaDataForms(String profileID, Tree_Node<GeoNaFormDataObject> tree_Node,
|
||||||
List<String> stepsOnPostCreation) throws Exception;
|
List<String> stepsOnPostCreation) throws Exception;
|
||||||
|
|
||||||
|
@ -184,7 +196,7 @@ public interface GeoportalDataEntryService extends RemoteService {
|
||||||
* @param id the id
|
* @param id the id
|
||||||
* @param toProfileID the to profile ID
|
* @param toProfileID the to profile ID
|
||||||
* @param toProjectID the to project ID
|
* @param toProjectID the to project ID
|
||||||
* @return
|
* @return the result document DV
|
||||||
* @throws Exception the exception
|
* @throws Exception the exception
|
||||||
*/
|
*/
|
||||||
ResultDocumentDV deleteRelationship(String fromProfileID, String fromProjectID, String id, String toProfileID,
|
ResultDocumentDV deleteRelationship(String fromProfileID, String fromProjectID, String id, String toProfileID,
|
||||||
|
@ -199,4 +211,30 @@ public interface GeoportalDataEntryService extends RemoteService {
|
||||||
*/
|
*/
|
||||||
TemporalReferenceDV temporalReferenceForProject(String profileID, String projectID);
|
TemporalReferenceDV temporalReferenceForProject(String profileID, String projectID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the project edit.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @param projectID the project ID
|
||||||
|
* @return the project edit
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
ProjectEdit getProjectEdit(String profileID, String projectID) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update geportal data form.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @param projectID the project ID
|
||||||
|
* @param section the section
|
||||||
|
* @param sectionPath the section path
|
||||||
|
* @param listFilePaths the list file paths
|
||||||
|
* @return the commit report
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
CommitReport updateGeportalDataForm(String profileID, String projectID, GeoNaFormDataObject section,
|
||||||
|
String sectionPath, List<FilePathDV> listFilePaths) throws Exception;
|
||||||
|
|
||||||
|
ProjectView getProjectView(String profileID, String projectID) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,11 +7,14 @@ import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
|
||||||
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
|
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.config.ActionDefinitionDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.ActionDefinitionDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.FilePathDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.LifecycleInformationDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.LifecycleInformationDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalReferenceDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalReferenceDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
|
||||||
|
import org.gcube.application.geoportaldatamapper.shared.ProjectEdit;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GNADataEntryExtendedConfigProfile;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GNADataEntryExtendedConfigProfile;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
||||||
|
@ -50,6 +53,9 @@ public interface GeoportalDataEntryServiceAsync {
|
||||||
|
|
||||||
void saveGeonaDataForms(String profileID, Tree_Node<GeoNaFormDataObject> tree_Node,
|
void saveGeonaDataForms(String profileID, Tree_Node<GeoNaFormDataObject> tree_Node,
|
||||||
List<String> stepsOnPostCreation, AsyncCallback<CommitReport> callback);
|
List<String> stepsOnPostCreation, AsyncCallback<CommitReport> callback);
|
||||||
|
|
||||||
|
void updateGeportalDataForm(String profileID, String projectID, GeoNaFormDataObject section,
|
||||||
|
String sectionPath, List<FilePathDV> listFilePaths, AsyncCallback<CommitReport> callback);
|
||||||
|
|
||||||
void getGeonaInitConfig(AsyncCallback<GeoportalISConfig> callback);
|
void getGeonaInitConfig(AsyncCallback<GeoportalISConfig> callback);
|
||||||
|
|
||||||
|
@ -88,4 +94,8 @@ public interface GeoportalDataEntryServiceAsync {
|
||||||
|
|
||||||
void temporalReferenceForProject(String profileID, String projectID, AsyncCallback<TemporalReferenceDV> callback);
|
void temporalReferenceForProject(String profileID, String projectID, AsyncCallback<TemporalReferenceDV> callback);
|
||||||
|
|
||||||
|
void getProjectEdit(String profileID, String projectID, AsyncCallback<ProjectEdit> callback);
|
||||||
|
|
||||||
|
void getProjectView(String profileID, String projectID, AsyncCallback<ProjectView> callback);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ import org.gcube.application.geoportalcommon.shared.guipresentation.Header;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp;
|
import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalClientCaches.CacheSearchingFilterParametersFromConfig;
|
import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalClientCaches.CacheSearchingFilterParametersFromConfig;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.CreateNewProjectEvent;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.CreateNewProjectEvent;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.GetListOfRecordsEvent;
|
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.OperationOnItemEvent;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.OperationOnItemEvent;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.form.GeonaDataEntryMainForm;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.form.GeonaDataEntryMainForm;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.projects.ListOfProjectTablePanel;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.projects.ListOfProjectTablePanel;
|
||||||
|
@ -99,6 +98,12 @@ public class GeonaMainTabPanel extends Composite {
|
||||||
@UiField
|
@UiField
|
||||||
Tab tabGetListOfProjects;
|
Tab tabGetListOfProjects;
|
||||||
|
|
||||||
|
@UiField
|
||||||
|
NavLink navViewAsDocument;
|
||||||
|
|
||||||
|
@UiField
|
||||||
|
NavLink navViewAsJSON;
|
||||||
|
|
||||||
@UiField
|
@UiField
|
||||||
NavLink navShowOnMap;
|
NavLink navShowOnMap;
|
||||||
|
|
||||||
|
@ -245,6 +250,36 @@ public class GeonaMainTabPanel extends Composite {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
navViewAsDocument.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
List<DocumentDV> listDocuments = null;
|
||||||
|
if (grpw != null && grpw.getSelectItems() != null) {
|
||||||
|
listDocuments = grpw.getSelectItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
appManagerBus.fireEvent(new OperationOnItemEvent<DocumentDV>(listDocuments,
|
||||||
|
OPERATION_ON_ITEM.VIEW_PROJECT_AS_DOCUMENT));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
navViewAsJSON.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
List<DocumentDV> listDocuments = null;
|
||||||
|
if (grpw != null && grpw.getSelectItems() != null) {
|
||||||
|
listDocuments = grpw.getSelectItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
appManagerBus.fireEvent(
|
||||||
|
new OperationOnItemEvent<DocumentDV>(listDocuments, OPERATION_ON_ITEM.VIEW_PROJECT_AS_JSON));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
navShowReport.addClickHandler(new ClickHandler() {
|
navShowReport.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -457,20 +492,8 @@ public class GeonaMainTabPanel extends Composite {
|
||||||
GEOPORTAL_DATA_HANDLER.geoportal_data_list);
|
GEOPORTAL_DATA_HANDLER.geoportal_data_list);
|
||||||
|
|
||||||
if (dataListHandler != null) {
|
if (dataListHandler != null) {
|
||||||
|
|
||||||
NavLink link = new NavLink(ucd.getName());
|
|
||||||
link.addClickHandler(new ClickHandler() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(ClickEvent event) {
|
|
||||||
|
|
||||||
appManagerBus.fireEvent(new GetListOfRecordsEvent(false, ucd.getProfileID(),
|
|
||||||
getCurrentProjectsSearchingFilter(), true));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
ucdProjectTypesForListingDataView.add(ucd);
|
ucdProjectTypesForListingDataView.add(ucd);
|
||||||
|
listOfProjectTablePanel.addProjectType(ucd);
|
||||||
listOfProjectTablePanel.addProjectType(link);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,8 @@
|
||||||
<g:HTMLPanel ui:field="introGNA">
|
<g:HTMLPanel ui:field="introGNA">
|
||||||
<b:Hero ui:field="introGNAHero">
|
<b:Hero ui:field="introGNAHero">
|
||||||
<b:Heading size="2" ui:field="welcomeTitle">Welcome
|
<b:Heading size="2" ui:field="welcomeTitle">Welcome
|
||||||
to GeoPortal Data Entry</b:Heading>
|
to GeoPortal Data
|
||||||
|
Entry</b:Heading>
|
||||||
<b:Paragraph ui:field="welcomeDescription"></b:Paragraph>
|
<b:Paragraph ui:field="welcomeDescription"></b:Paragraph>
|
||||||
<b:Paragraph>select "Create New Project"</b:Paragraph>
|
<b:Paragraph>select "Create New Project"</b:Paragraph>
|
||||||
</b:Hero>
|
</b:Hero>
|
||||||
|
@ -99,12 +100,18 @@
|
||||||
<g:FlowPanel>
|
<g:FlowPanel>
|
||||||
<g:FlowPanel addStyleNames="move-sticky">
|
<g:FlowPanel addStyleNames="move-sticky">
|
||||||
<b:NavPills>
|
<b:NavPills>
|
||||||
|
<b:NavLink ui:field="navViewAsDocument"
|
||||||
|
title="View Document" icon="FILE">View Document</b:NavLink>
|
||||||
|
<b:NavLink ui:field="navViewAsJSON"
|
||||||
|
title="View Document as JSON" icon="CODE">View as JSON</b:NavLink>
|
||||||
|
<b:Divider addStyleNames="{style.divider-border-right}" />
|
||||||
<b:NavLink ui:field="navShowOnMap" title="Show on Map"
|
<b:NavLink ui:field="navShowOnMap" title="Show on Map"
|
||||||
icon="MAP_MARKER">Show on Map</b:NavLink>
|
icon="MAP_MARKER">Show on Map</b:NavLink>
|
||||||
|
<b:Divider addStyleNames="{style.divider-border-right}" />
|
||||||
<b:NavLink ui:field="navShowReport"
|
<b:NavLink ui:field="navShowReport"
|
||||||
title="Show Publication Report" icon="FILE_TEXT_ALT">Publication Report</b:NavLink>
|
title="Show Publication Report" icon="FILE_TEXT_ALT">Publication Report</b:NavLink>
|
||||||
<b:NavLink ui:field="navEditMode" title="Edit"
|
<b:NavLink ui:field="navEditMode" title="Edit"
|
||||||
icon="PENCIL">Edit</b:NavLink>
|
icon="PENCIL">Update</b:NavLink>
|
||||||
<b:NavLink ui:field="navDelete" title="Delete Project"
|
<b:NavLink ui:field="navDelete" title="Delete Project"
|
||||||
icon="TRASH">Delete Project</b:NavLink>
|
icon="TRASH">Delete Project</b:NavLink>
|
||||||
<b:Divider addStyleNames="{style.divider-border-right}" />
|
<b:Divider addStyleNames="{style.divider-border-right}" />
|
||||||
|
|
|
@ -38,7 +38,8 @@ public class ActionListPanel extends Composite {
|
||||||
private List<ActionDefinitionDV> listActionDefinition;
|
private List<ActionDefinitionDV> listActionDefinition;
|
||||||
private HandlerManager appManagerBus;
|
private HandlerManager appManagerBus;
|
||||||
|
|
||||||
public ActionListPanel(HandlerManager appManagerBus,String projectName, String profileID, List<ActionDefinitionDV> listActionDef) {
|
public ActionListPanel(HandlerManager appManagerBus, String projectName, String profileID,
|
||||||
|
List<ActionDefinitionDV> listActionDef) {
|
||||||
initWidget(uiBinder.createAndBindUi(this));
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
GWT.log("Adding list of actions: " + listActionDef);
|
GWT.log("Adding list of actions: " + listActionDef);
|
||||||
this.appManagerBus = appManagerBus;
|
this.appManagerBus = appManagerBus;
|
||||||
|
@ -60,7 +61,7 @@ public class ActionListPanel extends Composite {
|
||||||
private void initActions(List<ActionDefinitionDV> listActionDef) {
|
private void initActions(List<ActionDefinitionDV> listActionDef) {
|
||||||
|
|
||||||
if (listActionDef.size() > 0) {
|
if (listActionDef.size() > 0) {
|
||||||
//actionListBasePanel.setVisible(true);
|
// actionListBasePanel.setVisible(true);
|
||||||
|
|
||||||
ButtonGroup buttonGroup = new ButtonGroup();
|
ButtonGroup buttonGroup = new ButtonGroup();
|
||||||
buttonGroup.getElement().addClassName("actions-button-group");
|
buttonGroup.getElement().addClassName("actions-button-group");
|
||||||
|
@ -68,22 +69,24 @@ public class ActionListPanel extends Composite {
|
||||||
mapPhaseListButtons = new LinkedHashMap<String, List<ActionDefButton>>();
|
mapPhaseListButtons = new LinkedHashMap<String, List<ActionDefButton>>();
|
||||||
|
|
||||||
for (ActionDefinitionDV actionDefinitionDV : listActionDef) {
|
for (ActionDefinitionDV actionDefinitionDV : listActionDef) {
|
||||||
|
|
||||||
//skipping the special workflow action
|
// skipping the special workflow action
|
||||||
if(actionDefinitionDV.getId().equals(ConstantsGeoPortalDataEntryApp.WORKFLOW_ACTION_POST_CREATION_ACTION_ID)) {
|
if (actionDefinitionDV.getId()
|
||||||
|
.equals(ConstantsGeoPortalDataEntryApp.WORKFLOW_ACTION_POST_CREATION_ACTION_ID)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Button butt = new Button();
|
Button butt = new Button();
|
||||||
butt.setText(actionDefinitionDV.getTitle());
|
butt.setText(actionDefinitionDV.getTitle());
|
||||||
butt.setTitle(actionDefinitionDV.getDescription());
|
butt.setTitle(actionDefinitionDV.getDescription());
|
||||||
butt.setType(ButtonType.LINK);
|
butt.setType(ButtonType.INFO);
|
||||||
butt.addClickHandler(new ClickHandler() {
|
butt.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(ClickEvent event) {
|
public void onClick(ClickEvent event) {
|
||||||
|
|
||||||
appManagerBus.fireEvent(new WorkflowActionOnSelectedItemEvent<ResultDocumentDV>(actionDefinitionDV));
|
appManagerBus
|
||||||
|
.fireEvent(new WorkflowActionOnSelectedItemEvent<ResultDocumentDV>(actionDefinitionDV));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -110,9 +113,9 @@ public class ActionListPanel extends Composite {
|
||||||
|
|
||||||
public <T> void showActionsOnSelected(List<T> listSelected, GcubeUserRole userRole) {
|
public <T> void showActionsOnSelected(List<T> listSelected, GcubeUserRole userRole) {
|
||||||
setAllActionsVisible(false);
|
setAllActionsVisible(false);
|
||||||
|
|
||||||
if (listSelected.size() == 1) {
|
if (listSelected.size() == 1) {
|
||||||
|
|
||||||
for (T item : listSelected) {
|
for (T item : listSelected) {
|
||||||
|
|
||||||
if (item instanceof ResultDocumentDV) {
|
if (item instanceof ResultDocumentDV) {
|
||||||
|
@ -120,20 +123,25 @@ public class ActionListPanel extends Composite {
|
||||||
String itemPhase = ((ResultDocumentDV) item).getLifecycleInfo().getPhase();
|
String itemPhase = ((ResultDocumentDV) item).getLifecycleInfo().getPhase();
|
||||||
|
|
||||||
List<ActionDefButton> listButtons = mapPhaseListButtons.get(itemPhase);
|
List<ActionDefButton> listButtons = mapPhaseListButtons.get(itemPhase);
|
||||||
for (ActionDefButton actionDefButton : listButtons) {
|
|
||||||
|
if (listButtons != null) {
|
||||||
Set<String> roles = actionDefButton.getActionDefinitionDV().getRoles();
|
|
||||||
|
for (ActionDefButton actionDefButton : listButtons) {
|
||||||
//No role/s defined means enable the action by default
|
|
||||||
if(roles.isEmpty()) {
|
Set<String> roles = actionDefButton.getActionDefinitionDV().getRoles();
|
||||||
actionDefButton.getButton().setVisible(true);
|
|
||||||
actionListBasePanel.setVisible(true);
|
// No role/s defined means enable the action by default
|
||||||
}else {
|
if (roles.isEmpty()) {
|
||||||
//Checking if the userRole is matching the role defined in the ActionDefinition
|
|
||||||
boolean isRoleIntoActionDef= roles.stream().anyMatch(userRole.getName()::equalsIgnoreCase);
|
|
||||||
if(isRoleIntoActionDef) {
|
|
||||||
actionDefButton.getButton().setVisible(true);
|
actionDefButton.getButton().setVisible(true);
|
||||||
actionListBasePanel.setVisible(true);
|
actionListBasePanel.setVisible(true);
|
||||||
|
} else {
|
||||||
|
// Checking if the userRole is matching the role defined in the ActionDefinition
|
||||||
|
boolean isRoleIntoActionDef = roles.stream()
|
||||||
|
.anyMatch(userRole.getName()::equalsIgnoreCase);
|
||||||
|
if (isRoleIntoActionDef) {
|
||||||
|
actionDefButton.getButton().setVisible(true);
|
||||||
|
actionListBasePanel.setVisible(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,13 +152,19 @@ public class ActionListPanel extends Composite {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setAllActionsVisible(boolean bool) {
|
private void setAllActionsVisible(boolean bool) {
|
||||||
Iterator<List<ActionDefButton>> collIterator = mapPhaseListButtons.values().iterator();
|
|
||||||
while (collIterator.hasNext()) {
|
|
||||||
List<ActionDefButton> listButton = collIterator.next();
|
|
||||||
for (ActionDefButton actionDefButton : listButton) {
|
|
||||||
actionDefButton.getButton().setVisible(bool);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (mapPhaseListButtons != null && mapPhaseListButtons.values().size() > 0) {
|
||||||
|
|
||||||
|
Iterator<List<ActionDefButton>> collIterator = mapPhaseListButtons.values().iterator();
|
||||||
|
if (collIterator != null) {
|
||||||
|
while (collIterator.hasNext()) {
|
||||||
|
List<ActionDefButton> listButton = collIterator.next();
|
||||||
|
for (ActionDefButton actionDefButton : listButton) {
|
||||||
|
actionDefButton.getButton().setVisible(bool);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,9 @@ import org.gcube.portlets.user.geoportaldataentry.client.ProjectFormCard;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm;
|
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
||||||
|
|
||||||
public class GeoNaFormCardModel {
|
public class GeoNaFormCardModel<T extends MetaDataProfileBean> {
|
||||||
|
|
||||||
private MetaDataProfileBean metadataProfileBean;
|
private T metadataProfileBean;
|
||||||
private CreateMetadataForm metadataForm;
|
private CreateMetadataForm metadataForm;
|
||||||
private ProjectFormCard formCard; // matching with metadata profile
|
private ProjectFormCard formCard; // matching with metadata profile
|
||||||
private GcubeProfileDV gcubeProfile;
|
private GcubeProfileDV gcubeProfile;
|
||||||
|
@ -16,8 +16,8 @@ public class GeoNaFormCardModel {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public GeoNaFormCardModel(MetaDataProfileBean metadataProfileBean, CreateMetadataForm metadataForm,
|
public GeoNaFormCardModel(T metadataProfileBean, CreateMetadataForm metadataForm, ProjectFormCard formCard,
|
||||||
ProjectFormCard formCard, GcubeProfileDV gcubeProfile) {
|
GcubeProfileDV gcubeProfile) {
|
||||||
super();
|
super();
|
||||||
this.metadataProfileBean = metadataProfileBean;
|
this.metadataProfileBean = metadataProfileBean;
|
||||||
this.metadataForm = metadataForm;
|
this.metadataForm = metadataForm;
|
||||||
|
@ -25,11 +25,11 @@ public class GeoNaFormCardModel {
|
||||||
this.gcubeProfile = gcubeProfile;
|
this.gcubeProfile = gcubeProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MetaDataProfileBean getMetadataProfileBean() {
|
public T getMetadataProfileBean() {
|
||||||
return metadataProfileBean;
|
return metadataProfileBean;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMetadataProfileBean(MetaDataProfileBean metadataProfileBean) {
|
public void setMetadataProfileBean(T metadataProfileBean) {
|
||||||
this.metadataProfileBean = metadataProfileBean;
|
this.metadataProfileBean = metadataProfileBean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,10 @@ import org.gcube.portlets.user.geoportaldataentry.client.ui.edit.jseditor.JSONEd
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.DialogInform;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.DialogInform;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
||||||
|
|
||||||
|
import com.github.gwtbootstrap.client.ui.Alert;
|
||||||
import com.github.gwtbootstrap.client.ui.Button;
|
import com.github.gwtbootstrap.client.ui.Button;
|
||||||
import com.github.gwtbootstrap.client.ui.Tab;
|
import com.github.gwtbootstrap.client.ui.Tab;
|
||||||
|
import com.github.gwtbootstrap.client.ui.constants.AlertType;
|
||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
import com.google.gwt.core.client.Scheduler;
|
import com.google.gwt.core.client.Scheduler;
|
||||||
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
|
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
|
||||||
|
@ -27,11 +29,11 @@ import com.google.gwt.uibinder.client.UiBinder;
|
||||||
import com.google.gwt.uibinder.client.UiField;
|
import com.google.gwt.uibinder.client.UiField;
|
||||||
import com.google.gwt.user.client.Random;
|
import com.google.gwt.user.client.Random;
|
||||||
import com.google.gwt.user.client.Timer;
|
import com.google.gwt.user.client.Timer;
|
||||||
import com.google.gwt.user.client.Window;
|
|
||||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
import com.google.gwt.user.client.ui.Composite;
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
import com.google.gwt.user.client.ui.FlowPanel;
|
import com.google.gwt.user.client.ui.FlowPanel;
|
||||||
import com.google.gwt.user.client.ui.HTMLPanel;
|
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
import com.google.gwt.user.client.ui.Widget;
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,6 +70,8 @@ public class EditModeRecord extends Composite {
|
||||||
|
|
||||||
private final HandlerManager editorManagerBus = new HandlerManager(null);
|
private final HandlerManager editorManagerBus = new HandlerManager(null);
|
||||||
|
|
||||||
|
private int modalHeight;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Interface EditModeRecordUiBinder.
|
* The Interface EditModeRecordUiBinder.
|
||||||
*
|
*
|
||||||
|
@ -78,12 +82,14 @@ public class EditModeRecord extends Composite {
|
||||||
interface EditModeRecordUiBinder extends UiBinder<Widget, EditModeRecord> {
|
interface EditModeRecordUiBinder extends UiBinder<Widget, EditModeRecord> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public EditModeRecord(HandlerManager appManagerBus, ResultDocumentDV selectedProject) {
|
public EditModeRecord(HandlerManager appManagerBus, ResultDocumentDV selectedProject, int modalHeight) {
|
||||||
initWidget(uiBinder.createAndBindUi(this));
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
|
this.modalHeight = modalHeight;
|
||||||
this.selectedProject = selectedProject;
|
this.selectedProject = selectedProject;
|
||||||
this.appManagerBus = appManagerBus;
|
this.appManagerBus = appManagerBus;
|
||||||
this.filesUpdatePanel.setHeight("490px");
|
this.filesUpdatePanel.setHeight((modalHeight - 50) + "px");
|
||||||
// filesUpdatePanel.getElement().getStyle().setProperty("maxHeight", "550px");
|
// filesUpdatePanel.getElement().modalHeight().setProperty("maxHeight",
|
||||||
|
// "550px");
|
||||||
|
|
||||||
// TODO Must be instanceUpdateFilesetEditor
|
// TODO Must be instanceUpdateFilesetEditor
|
||||||
tabUploadFiles.asWidget().getElement().getStyle().setVisibility(Visibility.HIDDEN);
|
tabUploadFiles.asWidget().getElement().getStyle().setVisibility(Visibility.HIDDEN);
|
||||||
|
@ -114,12 +120,21 @@ public class EditModeRecord extends Composite {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void noUpdateMode() {
|
||||||
|
buttonJSONUpdate.setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
private void instanceJSONEditor() {
|
private void instanceJSONEditor() {
|
||||||
|
|
||||||
rawUpdatePanel.clear();
|
rawUpdatePanel.clear();
|
||||||
|
|
||||||
|
final HorizontalPanel hpLoader = new HorizontalPanel();
|
||||||
|
final LoaderIcon lc = new LoaderIcon("Loading Project... please wait");
|
||||||
|
hpLoader.add(lc);
|
||||||
|
rawUpdatePanel.add(hpLoader);
|
||||||
final FlowPanel fp = new FlowPanel();
|
final FlowPanel fp = new FlowPanel();
|
||||||
fp.getElement().setId("jsoneditor" + Random.nextInt());
|
fp.getElement().setId("jsoneditor" + Random.nextInt());
|
||||||
fp.setHeight("410px");
|
fp.setHeight((modalHeight - 160) + "px");
|
||||||
rawUpdatePanel.add(fp);
|
rawUpdatePanel.add(fp);
|
||||||
|
|
||||||
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
||||||
|
@ -130,6 +145,7 @@ public class EditModeRecord extends Composite {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(String jsonData) {
|
public void onSuccess(String jsonData) {
|
||||||
|
hpLoader.clear();
|
||||||
GWT.log("Instance JSON Editor with: " + jsonData);
|
GWT.log("Instance JSON Editor with: " + jsonData);
|
||||||
jsEditor = JSONEditorWrapper.init(fp.getElement().getId());
|
jsEditor = JSONEditorWrapper.init(fp.getElement().getId());
|
||||||
jsEditor.setName(selectedProject.getId());
|
jsEditor.setName(selectedProject.getId());
|
||||||
|
@ -148,7 +164,13 @@ public class EditModeRecord extends Composite {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Throwable caught) {
|
public void onFailure(Throwable caught) {
|
||||||
Window.alert(caught.getMessage());
|
rawUpdatePanel.clear();
|
||||||
|
Alert alert = new Alert(
|
||||||
|
"Sorry, I cannot show the source Project with id '" + selectedProject.getId()
|
||||||
|
+ "' Refresh an try again. Error: " + caught.getMessage(),
|
||||||
|
AlertType.ERROR);
|
||||||
|
alert.setClose(false);
|
||||||
|
rawUpdatePanel.add(alert);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -21,13 +21,13 @@
|
||||||
<g:HTMLPanel>
|
<g:HTMLPanel>
|
||||||
|
|
||||||
<b:TabPanel tabPosition="left" ui:field="tabPanel">
|
<b:TabPanel tabPosition="left" ui:field="tabPanel">
|
||||||
<b:Tab icon="PENCIL" active="true" heading="Edit the Project"
|
<b:Tab icon="CODE" active="true" heading="Project"
|
||||||
ui:field="tabRawUpdate">
|
ui:field="tabRawUpdate">
|
||||||
<b:Heading size="3">Source Project Editor</b:Heading>
|
<b:Heading size="3">Source Project as JSON</b:Heading>
|
||||||
<b:Label type="INFO">You can update the project by editing
|
<b:Label type="INFO" visible="false">You can update the project by editing
|
||||||
the
|
the
|
||||||
model data displayed in the following editor.</b:Label>
|
model data displayed in the following editor.</b:Label>
|
||||||
<g:HTML addStyleNames="{style.info-panel}">
|
<g:HTML visible="false" addStyleNames="{style.info-panel}">
|
||||||
<p style='color: #585858'>
|
<p style='color: #585858'>
|
||||||
Be careful not to change the
|
Be careful not to change the
|
||||||
keys (e.g. nome, introduzione,
|
keys (e.g. nome, introduzione,
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
</g:FlowPanel>
|
</g:FlowPanel>
|
||||||
<b:Button icon="SAVE" type="INFO"
|
<b:Button icon="SAVE" type="INFO"
|
||||||
addStyleNames="{style.button-save-style}"
|
addStyleNames="{style.button-save-style}"
|
||||||
ui:field="buttonJSONUpdate">UPDATE</b:Button>
|
ui:field="buttonJSONUpdate" visible="false">UPDATE</b:Button>
|
||||||
</b:Tab>
|
</b:Tab>
|
||||||
<b:Tab icon="UPLOAD_ALT" heading="Manage File/s"
|
<b:Tab icon="UPLOAD_ALT" heading="Manage File/s"
|
||||||
ui:field="tabUploadFiles">
|
ui:field="tabUploadFiles">
|
||||||
|
|
|
@ -1,550 +0,0 @@
|
||||||
//package org.gcube.portlets.user.geoportaldataentry.client.ui.edit;
|
|
||||||
//
|
|
||||||
//import java.util.ArrayList;
|
|
||||||
//import java.util.Collection;
|
|
||||||
//import java.util.HashMap;
|
|
||||||
//import java.util.List;
|
|
||||||
//import java.util.Map;
|
|
||||||
//
|
|
||||||
//import org.gcube.application.geoportalcommon.shared.products.BaseConcessioneDV;
|
|
||||||
//import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
|
|
||||||
//import org.gcube.application.geoportalcommon.shared.products.content.WorkspaceContentDV;
|
|
||||||
//import org.gcube.application.geoportalcommon.shared.products.model.AbstractRelazioneScavoDV;
|
|
||||||
//import org.gcube.application.geoportalcommon.shared.products.model.LayerConcessioneDV;
|
|
||||||
//import org.gcube.application.geoportalcommon.shared.products.model.RelazioneScavoDV;
|
|
||||||
//import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV;
|
|
||||||
//import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryServiceAsync;
|
|
||||||
//import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.DialogInform;
|
|
||||||
//import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.ModalConfirm;
|
|
||||||
//import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.StringUtil;
|
|
||||||
//import org.gcube.portlets.widgets.mpformbuilder.client.form.MetaDataField;
|
|
||||||
//import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm.OPERATION;
|
|
||||||
//import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.MetaDataFieldSkeleton;
|
|
||||||
//import org.gcube.portlets.widgets.mpformbuilder.client.ui.upload.DialogUpload;
|
|
||||||
//import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean;
|
|
||||||
//import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.DataTypeWrapper;
|
|
||||||
//import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper;
|
|
||||||
//import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded;
|
|
||||||
//
|
|
||||||
//import com.github.gwtbootstrap.client.ui.Button;
|
|
||||||
//import com.github.gwtbootstrap.client.ui.ControlGroup;
|
|
||||||
//import com.github.gwtbootstrap.client.ui.Controls;
|
|
||||||
//import com.github.gwtbootstrap.client.ui.Label;
|
|
||||||
//import com.github.gwtbootstrap.client.ui.ListBox;
|
|
||||||
//import com.github.gwtbootstrap.client.ui.constants.IconType;
|
|
||||||
//import com.github.gwtbootstrap.client.ui.constants.LabelType;
|
|
||||||
//import com.google.gwt.core.client.GWT;
|
|
||||||
//import com.google.gwt.dom.client.Document;
|
|
||||||
//import com.google.gwt.dom.client.Style.Unit;
|
|
||||||
//import com.google.gwt.event.dom.client.ChangeEvent;
|
|
||||||
//import com.google.gwt.event.dom.client.ChangeHandler;
|
|
||||||
//import com.google.gwt.event.dom.client.ClickEvent;
|
|
||||||
//import com.google.gwt.event.dom.client.ClickHandler;
|
|
||||||
//import com.google.gwt.event.dom.client.DomEvent;
|
|
||||||
//import com.google.gwt.event.shared.HandlerManager;
|
|
||||||
//import com.google.gwt.uibinder.client.UiBinder;
|
|
||||||
//import com.google.gwt.uibinder.client.UiField;
|
|
||||||
//import com.google.gwt.user.client.Window;
|
|
||||||
//import com.google.gwt.user.client.rpc.AsyncCallback;
|
|
||||||
//import com.google.gwt.user.client.ui.Composite;
|
|
||||||
//import com.google.gwt.user.client.ui.FlexTable;
|
|
||||||
//import com.google.gwt.user.client.ui.HTML;
|
|
||||||
//import com.google.gwt.user.client.ui.HTMLPanel;
|
|
||||||
//import com.google.gwt.user.client.ui.Widget;
|
|
||||||
//
|
|
||||||
///**
|
|
||||||
// * The Class UpdateFileset.
|
|
||||||
// *
|
|
||||||
// * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
|
||||||
// *
|
|
||||||
// * Sep 27, 2021
|
|
||||||
// */
|
|
||||||
//public class UpdateFileset extends Composite {
|
|
||||||
//
|
|
||||||
// private static final String SECTION_PIANTE = "piante";
|
|
||||||
//
|
|
||||||
// private static final String SECTION_POSIZIONAMENTO_SCAVO = "posizionamentoScavo";
|
|
||||||
//
|
|
||||||
// private static final String SECTION_RELAZIONE = "relazione";
|
|
||||||
//
|
|
||||||
// private static final String SECTION_IMMAGINI = "immagini";
|
|
||||||
//
|
|
||||||
// private static final String SECTION_ABSTRACT_RELAZIONE = "abstract_relazione";
|
|
||||||
//
|
|
||||||
// private static final String _FORM_WIDTH_FIELDS_SIZE = "730px";
|
|
||||||
//
|
|
||||||
// private static UpdateFilesetUiBinder uiBinder = GWT.create(UpdateFilesetUiBinder.class);
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * The Interface UpdateFilesetUiBinder.
|
|
||||||
// *
|
|
||||||
// * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
|
||||||
// *
|
|
||||||
// * Sep 27, 2021
|
|
||||||
// */
|
|
||||||
// interface UpdateFilesetUiBinder extends UiBinder<Widget, UpdateFileset> {
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @UiField
|
|
||||||
// ListBox listBoxPaths;
|
|
||||||
//
|
|
||||||
// @UiField
|
|
||||||
// ControlGroup cgSelectFile;
|
|
||||||
//
|
|
||||||
// @UiField
|
|
||||||
// Controls controlsContent;
|
|
||||||
//
|
|
||||||
// @UiField
|
|
||||||
// HTMLPanel uploadFileContainer;
|
|
||||||
//
|
|
||||||
// @UiField
|
|
||||||
// Button buttonUpdate;
|
|
||||||
//
|
|
||||||
// private List<String> listFileSetPaths;
|
|
||||||
//
|
|
||||||
// private boolean placeholderListBoxPaths = true;
|
|
||||||
//
|
|
||||||
// private BaseConcessioneDV selectedConcessione;
|
|
||||||
//
|
|
||||||
// private ConcessioneDV fullConcessione;
|
|
||||||
//
|
|
||||||
// private boolean placeholderListBoxIndex = true;
|
|
||||||
//
|
|
||||||
// private HandlerManager uiBus = new HandlerManager(null);
|
|
||||||
//
|
|
||||||
// private MetaDataField fieldUploadWidget;
|
|
||||||
//
|
|
||||||
// private Integer pathIndex = null;
|
|
||||||
//
|
|
||||||
// private Map<Integer, WorkspaceContentDV> mapForCCUploading = null;
|
|
||||||
//
|
|
||||||
// private Map<Integer, List<WorkspaceContentDV>> mapWSContentListBox = null;
|
|
||||||
//
|
|
||||||
// private HandlerManager editorManagerBus;
|
|
||||||
//
|
|
||||||
// private String profileID;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * Instantiates a new update fileset.
|
|
||||||
// *
|
|
||||||
// * @param editorManagerBus the editor manager bus
|
|
||||||
// * @param selectedConcessione the selected concessione
|
|
||||||
// * @param recordType the record type
|
|
||||||
// * @param listFileSetPaths the list file set paths
|
|
||||||
// */
|
|
||||||
// public UpdateFileset(HandlerManager editorManagerBus, BaseConcessioneDV selectedConcessione, String profileID, List<String> listFileSetPaths) {
|
|
||||||
// initWidget(uiBinder.createAndBindUi(this));
|
|
||||||
// this.editorManagerBus = editorManagerBus;
|
|
||||||
// this.selectedConcessione = selectedConcessione;
|
|
||||||
// this.profileID = profileID;
|
|
||||||
// this.listFileSetPaths = listFileSetPaths;
|
|
||||||
// listBoxPaths.addItem("Select a section...");
|
|
||||||
// for (String path : listFileSetPaths) {
|
|
||||||
// listBoxPaths.addItem(path);
|
|
||||||
// }
|
|
||||||
// listBoxPaths.setWidth(_FORM_WIDTH_FIELDS_SIZE);
|
|
||||||
//
|
|
||||||
// // add handler on select
|
|
||||||
// listBoxPaths.addChangeHandler(new ChangeHandler() {
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onChange(ChangeEvent event) {
|
|
||||||
// GWT.log("Profile type selection changed...");
|
|
||||||
// cgSelectFile.setVisible(false);
|
|
||||||
//
|
|
||||||
// if (placeholderListBoxPaths) {
|
|
||||||
// listBoxPaths.removeItem(0); // this is the placeholder, removing it once
|
|
||||||
// placeholderListBoxPaths = false;
|
|
||||||
// }
|
|
||||||
// showUploadFileGUI();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Window.alert("This part must be revisited");
|
|
||||||
//
|
|
||||||
//// GeoPortalDataEntryApp.geoportalDataEntryService.getRecord(selectedConcessione.getItemId(), recordType,
|
|
||||||
//// new AsyncCallback<ConcessioneDV>() {
|
|
||||||
////
|
|
||||||
//// @Override
|
|
||||||
//// public void onSuccess(ConcessioneDV theRecord) {
|
|
||||||
//// fullConcessione = theRecord;
|
|
||||||
//// }
|
|
||||||
////
|
|
||||||
//// @Override
|
|
||||||
//// public void onFailure(Throwable caught) {
|
|
||||||
//// Window.alert(caught.getMessage());
|
|
||||||
//// }
|
|
||||||
//// });
|
|
||||||
//
|
|
||||||
// buttonUpdate.addClickHandler(new ClickHandler() {
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onClick(ClickEvent event) {
|
|
||||||
//
|
|
||||||
// String errorMsg = checkValidUpload();
|
|
||||||
// if (errorMsg == null) {
|
|
||||||
// List<FileUploaded> listFilesUploaded = new ArrayList<FileUploaded>();
|
|
||||||
// List<MetaDataFieldSkeleton> listMetaDataFieldSkeleton = fieldUploadWidget.getListOfMetadataFields();
|
|
||||||
// for (MetaDataFieldSkeleton field : listMetaDataFieldSkeleton) {
|
|
||||||
// DialogUpload dUpload = (DialogUpload) field.getHolder();
|
|
||||||
// // adding it only if exists
|
|
||||||
// if (dUpload.getFileUploadingState() != null)
|
|
||||||
// listFilesUploaded.add(dUpload.getFileUploadingState().getFile());
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// GenericDatasetBean gdb = new GenericDatasetBean();
|
|
||||||
// gdb.setFilesUploaded(listFilesUploaded);
|
|
||||||
// // adding it only if exists
|
|
||||||
//
|
|
||||||
// GWT.log("Section selected: " + listBoxPaths.getSelectedItemText());
|
|
||||||
// GWT.log("Content index selected: " + pathIndex);
|
|
||||||
// GWT.log("FileUploaded selected: " + gdb.getFilesUploaded());
|
|
||||||
//
|
|
||||||
// List<WorkspaceContentDV> listCurrentContent = new ArrayList<WorkspaceContentDV>();
|
|
||||||
// if (mapForCCUploading != null) {
|
|
||||||
// Collection<WorkspaceContentDV> currentContent = mapForCCUploading.values();
|
|
||||||
// if (currentContent != null)
|
|
||||||
// listCurrentContent.addAll(currentContent);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// String htmlMsg = "Going to update the section " + listBoxPaths.getSelectedItemText() + ":";
|
|
||||||
// htmlMsg += "<ul>";
|
|
||||||
// htmlMsg += "<li>keeping " + listCurrentContent.size() + " current file/s </li>";
|
|
||||||
// htmlMsg += "<li>uploading " + listFilesUploaded.size() + " new file/s </li>";
|
|
||||||
// htmlMsg += "</ul>";
|
|
||||||
// htmlMsg += "<br>";
|
|
||||||
// htmlMsg += "This operation cannot be undone. Would you like to proceed?";
|
|
||||||
//
|
|
||||||
// GWT.log(htmlMsg);
|
|
||||||
//
|
|
||||||
// final ModalConfirm dialogConfirm = new ModalConfirm(null, "Update Confirm?", htmlMsg);
|
|
||||||
// dialogConfirm.getElement().getStyle().setZIndex(100000);
|
|
||||||
// dialogConfirm.getYesButton().addClickHandler(new ClickHandler() {
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onClick(ClickEvent event) {
|
|
||||||
// dialogConfirm.hide();
|
|
||||||
// buttonUpdate.setEnabled(false);
|
|
||||||
//
|
|
||||||
// final DialogInform dialogInf = new DialogInform(null, "Updating Project...", "");
|
|
||||||
// dialogInf.setZIndex(100000);
|
|
||||||
// dialogInf.showLoader("Updating file/s for project: "+fullConcessione.getNome());
|
|
||||||
// //dialogInf.setWidth("400px");
|
|
||||||
//
|
|
||||||
// GeoportalDataEntryServiceAsync.Util.getInstance().updateSectionForRecord(
|
|
||||||
// fullConcessione.getItemId(), fullConcessione.getRecordType(),
|
|
||||||
// listBoxPaths.getSelectedItemText(), pathIndex, listCurrentContent, gdb,
|
|
||||||
// new AsyncCallback<ConcessioneDV>() {
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onFailure(Throwable caught) {
|
|
||||||
// dialogInf.hideLoader();
|
|
||||||
// dialogInf.setMsg(
|
|
||||||
// "Sorry error occurred during project update. Error reported: "
|
|
||||||
// + caught.getMessage());
|
|
||||||
// buttonUpdate.setEnabled(true);
|
|
||||||
// showUploadFileGUI();
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onSuccess(ConcessioneDV result) {
|
|
||||||
// dialogInf.hideLoader();
|
|
||||||
// dialogInf.setText("Project updated!");
|
|
||||||
// dialogInf.setMsg(result.getNome() + " updated correclty");
|
|
||||||
// dialogInf.center();
|
|
||||||
// fullConcessione = result;
|
|
||||||
// GWT.log("new concessione: "+fullConcessione);
|
|
||||||
// buttonUpdate.setEnabled(true);
|
|
||||||
// showUploadFileGUI();
|
|
||||||
//
|
|
||||||
// Window.alert("updateSectionForRecord must be revisited");
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// editorManagerBus.fireEvent(
|
|
||||||
// new OperationPerformedOnItemEvent<ConcessioneDV>(Arrays.asList(fullConcessione), ACTION_PERFORMED_ON_ITEM.UPDATED_PROJECT));
|
|
||||||
//
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// dialogInf.center();
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// dialogConfirm.show();
|
|
||||||
//
|
|
||||||
// } else {
|
|
||||||
// Window.alert(errorMsg);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * Show upload file GUI.
|
|
||||||
// */
|
|
||||||
// private void showUploadFileGUI() {
|
|
||||||
// uploadFileContainer.setVisible(true);
|
|
||||||
// buttonUpdate.setVisible(false);
|
|
||||||
// uploadFileContainer.clear();
|
|
||||||
// controlsContent.clear();
|
|
||||||
// placeholderListBoxIndex = true;
|
|
||||||
// fieldUploadWidget = null;
|
|
||||||
// pathIndex = null;
|
|
||||||
// mapForCCUploading = null;
|
|
||||||
// mapWSContentListBox = null;
|
|
||||||
//
|
|
||||||
//// listBoxIndex.clear();
|
|
||||||
// cgSelectFile.setVisible(true);
|
|
||||||
//
|
|
||||||
// ListBox listBoxContentIndex = new ListBox();
|
|
||||||
// listBoxContentIndex.setWidth(_FORM_WIDTH_FIELDS_SIZE);
|
|
||||||
// listBoxContentIndex.addItem("Select a content...");
|
|
||||||
// String section = null;
|
|
||||||
// Integer posizIndex = 0;
|
|
||||||
// if (listBoxPaths.getSelectedItemText().contains(SECTION_ABSTRACT_RELAZIONE)) {
|
|
||||||
// section = SECTION_ABSTRACT_RELAZIONE;
|
|
||||||
// AbstractRelazioneScavoDV ar = fullConcessione.getAbstractRelazioneScavo();
|
|
||||||
//
|
|
||||||
// if (ar == null) {
|
|
||||||
// showMessage(SECTION_ABSTRACT_RELAZIONE + " NOT AVAILABLE", LabelType.WARNING);
|
|
||||||
//// pathIndex = 0;
|
|
||||||
//// showNewFileUpload();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// fillListBoxToBeReplaced(listBoxContentIndex, section, posizIndex, ar.getTitolo(),
|
|
||||||
// ar.getListWsContent());
|
|
||||||
//
|
|
||||||
// } else if (listBoxPaths.getSelectedItemText().contains(SECTION_IMMAGINI)) {
|
|
||||||
// section = SECTION_IMMAGINI;
|
|
||||||
// List<UploadedImageDV> listImmagini = fullConcessione.getImmaginiRappresentative();
|
|
||||||
// if (listImmagini == null || listImmagini.isEmpty()) {
|
|
||||||
// showMessage(SECTION_IMMAGINI + " NOT AVAILABLE", LabelType.WARNING);
|
|
||||||
//// pathIndex = 0;
|
|
||||||
//// showNewFileUpload();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// for (UploadedImageDV uploadedImageDV : listImmagini) {
|
|
||||||
// fillListBoxToBeReplaced(listBoxContentIndex, section, posizIndex, StringUtil.ellipsize(uploadedImageDV.getDidascalia(),30),
|
|
||||||
// uploadedImageDV.getListWsContent());
|
|
||||||
// posizIndex++;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// } else if (listBoxPaths.getSelectedItemText().contains(SECTION_RELAZIONE)) {
|
|
||||||
// section = SECTION_RELAZIONE;
|
|
||||||
// RelazioneScavoDV relazioneScavo = fullConcessione.getRelazioneScavo();
|
|
||||||
// if (relazioneScavo == null) {
|
|
||||||
// showMessage(SECTION_RELAZIONE + " NOT AVAILABLE", LabelType.WARNING);
|
|
||||||
//// pathIndex = 0;
|
|
||||||
//// showNewFileUpload();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// fillListBoxToBeReplaced(listBoxContentIndex, section, posizIndex, relazioneScavo.getTitolo(),
|
|
||||||
// relazioneScavo.getListWsContent());
|
|
||||||
//
|
|
||||||
// } else if (listBoxPaths.getSelectedItemText().contains(SECTION_POSIZIONAMENTO_SCAVO)) {
|
|
||||||
// section = SECTION_POSIZIONAMENTO_SCAVO;
|
|
||||||
// LayerConcessioneDV posiz = fullConcessione.getPosizionamentoScavo();
|
|
||||||
// if (posiz == null) {
|
|
||||||
// showMessage(SECTION_POSIZIONAMENTO_SCAVO + " NOT AVAILABLE", LabelType.WARNING);
|
|
||||||
//// pathIndex = 0;
|
|
||||||
//// showNewFileUpload();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// fillListBoxToBeReplaced(listBoxContentIndex, section, posizIndex, posiz.getTitolo(),
|
|
||||||
// posiz.getListWsContent());
|
|
||||||
//
|
|
||||||
// } else if (listBoxPaths.getSelectedItemText().contains(SECTION_PIANTE)) {
|
|
||||||
// section = SECTION_PIANTE;
|
|
||||||
// List<LayerConcessioneDV> piante = fullConcessione.getPianteFineScavo();
|
|
||||||
// if (piante == null || piante.isEmpty()) {
|
|
||||||
// showMessage(SECTION_PIANTE + " NOT AVAILABLE", LabelType.WARNING);
|
|
||||||
//// pathIndex = 0;
|
|
||||||
//// showNewFileUpload();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// for (LayerConcessioneDV lcDV : piante) {
|
|
||||||
// fillListBoxToBeReplaced(listBoxContentIndex, SECTION_PIANTE, posizIndex, lcDV.getTitolo(),
|
|
||||||
// lcDV.getListWsContent());
|
|
||||||
// posizIndex++;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// controlsContent.add(listBoxContentIndex);
|
|
||||||
//
|
|
||||||
// if (listBoxContentIndex.getItemCount() == 2) {
|
|
||||||
// // listBoxContentIndex.setSelectedIndex(1);
|
|
||||||
// listBoxContentIndex.setSelectedValue(listBoxContentIndex.getItemText(1));
|
|
||||||
//
|
|
||||||
// DomEvent.fireNativeEvent(Document.get().createChangeEvent(), listBoxContentIndex);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// private void fillListBoxToBeReplaced(ListBox listBoxContentIndex, String section, int posizIndex, String title,
|
|
||||||
// List<WorkspaceContentDV> listWSC) {
|
|
||||||
// GWT.log("fillListBoxToBeReplaced called, posizIndex: "+posizIndex+", listWSC: "+listWSC);
|
|
||||||
//
|
|
||||||
// if(mapWSContentListBox==null) {
|
|
||||||
// mapWSContentListBox = new HashMap<Integer, List<WorkspaceContentDV>>();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// listBoxContentIndex.addItem(title, posizIndex + "");
|
|
||||||
// mapWSContentListBox.put(posizIndex, listWSC);
|
|
||||||
//
|
|
||||||
// // adding handler once
|
|
||||||
// if (posizIndex == 0) {
|
|
||||||
//
|
|
||||||
// listBoxContentIndex.addChangeHandler(new ChangeHandler() {
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onChange(ChangeEvent event) {
|
|
||||||
// GWT.log("listBoxContentIndex changed, value: "+listBoxContentIndex.getSelectedValue());
|
|
||||||
//
|
|
||||||
// if (placeholderListBoxIndex) {
|
|
||||||
// listBoxContentIndex.removeItem(0); // this is the placeholder, removing it once
|
|
||||||
// placeholderListBoxIndex = false;
|
|
||||||
// }
|
|
||||||
// int selectedIndex = listBoxContentIndex.getSelectedIndex();
|
|
||||||
// GWT.log("selected index: "+selectedIndex);
|
|
||||||
// List<WorkspaceContentDV> theListWC = mapWSContentListBox.get(selectedIndex);
|
|
||||||
//
|
|
||||||
// if (theListWC == null || theListWC.isEmpty()) {
|
|
||||||
// uploadFileContainer.clear();
|
|
||||||
// showMessage(section + " does not contain file!", LabelType.WARNING);
|
|
||||||
// pathIndex = posizIndex;
|
|
||||||
// showNewFileUpload();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// showFileBrowseInteraction(selectedIndex, mapWSContentListBox.get(selectedIndex));
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
////
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// private void showFileBrowseInteraction(int pathContentIndex, List<WorkspaceContentDV> listWSC) {
|
|
||||||
// uploadFileContainer.clear();
|
|
||||||
// pathIndex = pathContentIndex;
|
|
||||||
// GWT.log("showing pathContentIndex: "+pathContentIndex);
|
|
||||||
// GWT.log("showing ws content: "+listWSC);
|
|
||||||
//
|
|
||||||
// // map for current content uploading
|
|
||||||
// mapForCCUploading = new HashMap<Integer, WorkspaceContentDV>(listWSC.size());
|
|
||||||
// int index = 0;
|
|
||||||
// for (WorkspaceContentDV workspaceContentDV : listWSC) {
|
|
||||||
// workspaceContentDV.setCliendId(index);
|
|
||||||
// mapForCCUploading.put(index, workspaceContentDV);
|
|
||||||
// index++;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (listWSC.size() > 0) {
|
|
||||||
// FlexTable table = new FlexTable();
|
|
||||||
// table.addStyleName("table-current-content");
|
|
||||||
// table.setHTML(0, 0, "<span style='color:rgb(155, 80, 78); font-weight:bold;'>Current content:</span>");
|
|
||||||
// table.setHTML(1, 0, "<span style='color:rgb(155, 80, 78);'>Filename</span>");
|
|
||||||
// table.setHTML(1, 1, "<span style='color:rgb(155, 80, 78);'>MimeType<span>");
|
|
||||||
// table.setHTML(1, 2, "<span style='color:rgb(155, 80, 78);'>Link</span>");
|
|
||||||
//
|
|
||||||
// int i = 2;
|
|
||||||
// for (final WorkspaceContentDV wsContent : listWSC) {
|
|
||||||
// table.setHTML(i, 0, wsContent.getName());
|
|
||||||
// table.setHTML(i, 1, wsContent.getMimetype());
|
|
||||||
// String link = "<a target=\"_blank\" href=" + wsContent.getLink() + ">View</a>";
|
|
||||||
// table.setHTML(i, 2, link);
|
|
||||||
//
|
|
||||||
// final int rowIndexToRem = i;
|
|
||||||
// Button buttonRemoveFile = new Button();
|
|
||||||
// buttonRemoveFile.setIcon(IconType.TRASH);
|
|
||||||
// buttonRemoveFile.setTitle("Remove this file");
|
|
||||||
// buttonRemoveFile.addClickHandler(new ClickHandler() {
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onClick(ClickEvent event) {
|
|
||||||
// mapForCCUploading.remove(wsContent.getCliendId());
|
|
||||||
// table.getRowFormatter().getElement(rowIndexToRem).setAttribute("hidden", "hidden");
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// table.setWidget(i, 3, buttonRemoveFile);
|
|
||||||
// i++;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// uploadFileContainer.add(table);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// showNewFileUpload();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// private void showNewFileUpload() {
|
|
||||||
//
|
|
||||||
// HTML label = new HTML();
|
|
||||||
// label.getElement().getStyle().setMarginTop(10, Unit.PX);
|
|
||||||
// label.getElement().getStyle().setMarginBottom(10, Unit.PX);
|
|
||||||
// label.setHTML("<b>Add new file/s:</b>");
|
|
||||||
// uploadFileContainer.add(label);
|
|
||||||
// // mDU = new MultipleDilaogUpload();
|
|
||||||
//
|
|
||||||
// MetadataFieldWrapper uploadField = new MetadataFieldWrapper();
|
|
||||||
// uploadField.setFieldName("File");
|
|
||||||
// uploadField.setMandatory(false);
|
|
||||||
// uploadField.setType(DataTypeWrapper.File);
|
|
||||||
// uploadField.setMaxOccurs(1000);
|
|
||||||
//
|
|
||||||
// try {
|
|
||||||
// fieldUploadWidget = new MetaDataField(uploadField, uiBus, OPERATION.NEW);
|
|
||||||
// uploadFileContainer.add(fieldUploadWidget);
|
|
||||||
//
|
|
||||||
// buttonUpdate.setVisible(true);
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * Test if profile data are valid.
|
|
||||||
// *
|
|
||||||
// * @return the string
|
|
||||||
// */
|
|
||||||
// private String checkValidUpload() {
|
|
||||||
//
|
|
||||||
// if (fieldUploadWidget == null)
|
|
||||||
// return "No file uploaded";
|
|
||||||
//
|
|
||||||
// for (MetaDataFieldSkeleton field : fieldUploadWidget.getListOfMetadataFields()) {
|
|
||||||
//
|
|
||||||
// field.removeError();
|
|
||||||
//
|
|
||||||
// String error = field.isFieldValueValid();
|
|
||||||
// if (error != null) {
|
|
||||||
// field.showError();
|
|
||||||
// String errorMsg = field.getFieldNameOriginal() + " is not valid. Suggestion: " + error;
|
|
||||||
// return errorMsg;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// private void showMessage(String txt, LabelType type) {
|
|
||||||
// Label l = new Label();
|
|
||||||
// l.setType(type);
|
|
||||||
// l.setText(txt);
|
|
||||||
// uploadFileContainer.add(l);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//}
|
|
|
@ -1,50 +0,0 @@
|
||||||
<!-- <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
|
||||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
|
|
||||||
xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
|
||||||
xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
|
|
||||||
<ui:style>
|
|
||||||
.important {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button-save-style {
|
|
||||||
margin-top: 10px;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.max-height-500 {
|
|
||||||
max-height: 450px;
|
|
||||||
}
|
|
||||||
</ui:style>
|
|
||||||
<g:HTMLPanel>
|
|
||||||
<g:ScrollPanel addStyleNames="{style.max-height-500}">
|
|
||||||
<b:Form type="INLINE">
|
|
||||||
<b:Fieldset addStyleNames="form-fieldset-edit">
|
|
||||||
<b:ControlGroup>
|
|
||||||
<b:ControlLabel>Section</b:ControlLabel>
|
|
||||||
<b:Controls>
|
|
||||||
<b:ListBox ui:field="listBoxPaths"></b:ListBox>
|
|
||||||
</b:Controls>
|
|
||||||
</b:ControlGroup>
|
|
||||||
<b:ControlGroup ui:field="cgSelectFile"
|
|
||||||
visible="false">
|
|
||||||
<b:ControlLabel>Manage the content of</b:ControlLabel>
|
|
||||||
<b:Controls ui:field="controlsContent">
|
|
||||||
<b:ListBox ui:field="listBoxIndex"
|
|
||||||
addStyleNames="{style.width-500}"></b:ListBox>
|
|
||||||
</b:Controls>
|
|
||||||
</b:ControlGroup>
|
|
||||||
<b:ControlGroup>
|
|
||||||
<g:ScrollPanel>
|
|
||||||
<g:HTMLPanel ui:field="uploadFileContainer"
|
|
||||||
addStyleNames="upload-file-container"></g:HTMLPanel>
|
|
||||||
</g:ScrollPanel>
|
|
||||||
</b:ControlGroup>
|
|
||||||
</b:Fieldset>
|
|
||||||
</b:Form>
|
|
||||||
</g:ScrollPanel>
|
|
||||||
<b:Button icon="SAVE" type="INFO"
|
|
||||||
addStyleNames="{style.button-save-style}" ui:field="buttonUpdate"
|
|
||||||
visible="false">UPDATE</b:Button>
|
|
||||||
</g:HTMLPanel>
|
|
||||||
</ui:UiBinder> -->
|
|
|
@ -0,0 +1,383 @@
|
||||||
|
package org.gcube.portlets.user.geoportaldataentry.client.ui.edit;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.FilePathDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.GcubeProfileDV;
|
||||||
|
import org.gcube.application.geoportaldatamapper.shared.MetaDataProfileBeanExt;
|
||||||
|
import org.gcube.application.geoportaldatamapper.shared.ProjectEdit;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ACTION_PERFORMED_ON_ITEM;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalDataEntryApp;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryServiceAsync;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.events.OperationPerformedOnItemEvent;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.report.ReportTemplateToHTML;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm.OPERATION;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.GenericFormEvents.GenericFormEventsListener;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean;
|
||||||
|
|
||||||
|
import com.github.gwtbootstrap.client.ui.Alert;
|
||||||
|
import com.github.gwtbootstrap.client.ui.Button;
|
||||||
|
import com.github.gwtbootstrap.client.ui.ControlGroup;
|
||||||
|
import com.github.gwtbootstrap.client.ui.ListBox;
|
||||||
|
import com.github.gwtbootstrap.client.ui.Modal;
|
||||||
|
import com.github.gwtbootstrap.client.ui.constants.AlertType;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.dom.client.Element;
|
||||||
|
import com.google.gwt.dom.client.NodeList;
|
||||||
|
import com.google.gwt.event.dom.client.ChangeEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ChangeHandler;
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.event.shared.HandlerManager;
|
||||||
|
import com.google.gwt.uibinder.client.UiBinder;
|
||||||
|
import com.google.gwt.uibinder.client.UiField;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.FlowPanel;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||||
|
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
public class UpdateRecord extends Composite {
|
||||||
|
|
||||||
|
private static UpdateRecordUiBinder uiBinder = GWT.create(UpdateRecordUiBinder.class);
|
||||||
|
|
||||||
|
interface UpdateRecordUiBinder extends UiBinder<Widget, UpdateRecord> {
|
||||||
|
}
|
||||||
|
|
||||||
|
@UiField
|
||||||
|
ListBox listBoxSections;
|
||||||
|
|
||||||
|
@UiField
|
||||||
|
ScrollPanel scrollSectionContent;
|
||||||
|
|
||||||
|
@UiField
|
||||||
|
HTMLPanel htmlPanelContainer;
|
||||||
|
|
||||||
|
@UiField
|
||||||
|
HTMLPanel alertHTMLPanel;
|
||||||
|
|
||||||
|
@UiField
|
||||||
|
ControlGroup controlsControlGroup;
|
||||||
|
|
||||||
|
@UiField
|
||||||
|
Button buttonUpdate;
|
||||||
|
|
||||||
|
public static final String PLACEHOLDER_LIST_BOX = "Select section...";
|
||||||
|
|
||||||
|
private LoaderIcon loaderProjectSections = new LoaderIcon("Loading Project sections... please wait");
|
||||||
|
|
||||||
|
private GeoNaFormCardModel currentCardSelected;
|
||||||
|
|
||||||
|
private String profileID;
|
||||||
|
|
||||||
|
private String projectID;
|
||||||
|
|
||||||
|
private HashMap<String, List<FilePathDV>> sectionPathFilePaths = new HashMap<>();
|
||||||
|
|
||||||
|
private MetadataFormCardEventHandler formCardEventHandler = new MetadataFormCardEventHandler();
|
||||||
|
|
||||||
|
private ProjectEdit projectEditDTO;
|
||||||
|
|
||||||
|
private HandlerManager appManagerBus;
|
||||||
|
|
||||||
|
public UpdateRecord(HandlerManager appManagerBus, String profileID, String projectID, int modalWidth, int modalHeight) {
|
||||||
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
|
this.appManagerBus = appManagerBus;
|
||||||
|
this.profileID = profileID;
|
||||||
|
this.projectID = projectID;
|
||||||
|
setUpdateButtonEnabled(false);
|
||||||
|
|
||||||
|
htmlPanelContainer.setVisible(false);
|
||||||
|
|
||||||
|
alertHTMLPanel.add(loaderProjectSections);
|
||||||
|
|
||||||
|
scrollSectionContent.setHeight((modalHeight-350)+"px");
|
||||||
|
|
||||||
|
listBoxSections.setWidth((modalWidth-50)+"px");
|
||||||
|
|
||||||
|
GeoportalDataEntryServiceAsync.Util.getInstance().getProjectEdit(profileID, projectID,
|
||||||
|
new AsyncCallback<ProjectEdit>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(ProjectEdit result) {
|
||||||
|
projectEditDTO = result;
|
||||||
|
htmlPanelContainer.setVisible(true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
alertHTMLPanel.remove(loaderProjectSections);
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
listBoxSections.addItem(PLACEHOLDER_LIST_BOX, PLACEHOLDER_LIST_BOX);
|
||||||
|
listBoxSections.getElement().getElementsByTagName("option").getItem(0).setAttribute("disabled",
|
||||||
|
"disabled");
|
||||||
|
listBoxSections.setSelectedValue(PLACEHOLDER_LIST_BOX);
|
||||||
|
|
||||||
|
int sectionArray = 0;
|
||||||
|
|
||||||
|
for (final MetaDataProfileBeanExt profileBean : result.getTheProfileBeans()) {
|
||||||
|
|
||||||
|
GcubeProfileDV profileDV = profileBean.getGcubeProfileDV();
|
||||||
|
|
||||||
|
String sectionPath = profileDV.getParentName() != null ? profileDV.getParentName() : "";
|
||||||
|
|
||||||
|
sectionPath += profileDV.getSectionName();
|
||||||
|
|
||||||
|
// increment section stored as array
|
||||||
|
if (profileDV.getMaxOccurs() == 0 || profileDV.getMaxOccurs() > 1) {
|
||||||
|
sectionPath += "[" + sectionArray + "]";
|
||||||
|
sectionArray++;
|
||||||
|
} else {
|
||||||
|
sectionArray = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<FilePathDV> filePaths = profileDV.getFilePaths();
|
||||||
|
|
||||||
|
if (filePaths != null)
|
||||||
|
sectionPathFilePaths.put(sectionPath, filePaths);
|
||||||
|
|
||||||
|
GWT.log("Adding type: " + profileBean.getType() + ", in the section path: " + sectionPath);
|
||||||
|
|
||||||
|
listBoxSections.addItem(profileBean.getType(), sectionPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
listBoxSections.addChangeHandler(new ChangeHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onChange(ChangeEvent event) {
|
||||||
|
setUpdateButtonEnabled(false);
|
||||||
|
|
||||||
|
// -1 because the first element is the PLACEHOLDER "Select section..."
|
||||||
|
int selectedIndex = listBoxSections.getSelectedIndex() - 1;
|
||||||
|
|
||||||
|
MetaDataProfileBeanExt selectedBean = result.getTheProfileBeans()
|
||||||
|
.get(selectedIndex);
|
||||||
|
GWT.log("Change handler fired " + selectedBean);
|
||||||
|
controlsControlGroup.setVisible(true);
|
||||||
|
scrollSectionContent.clear();
|
||||||
|
|
||||||
|
GcubeProfileDV gcubeProfile = selectedBean.getGcubeProfileDV();
|
||||||
|
|
||||||
|
currentCardSelected = GeoPortalDataEntryApp.buildNewFormCardModelFromProfile(
|
||||||
|
gcubeProfile, 1, selectedBean, OPERATION.UPDATE, appManagerBus);
|
||||||
|
|
||||||
|
currentCardSelected.getMetadataForm().addListener(formCardEventHandler);
|
||||||
|
|
||||||
|
scrollSectionContent.add(currentCardSelected.getMetadataForm());
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
projectEditDTO = null;
|
||||||
|
htmlPanelContainer.setVisible(true);
|
||||||
|
alertHTMLPanel.remove(loaderProjectSections);
|
||||||
|
|
||||||
|
String errorMsg = caught.getMessage();
|
||||||
|
Alert alert = new Alert(errorMsg, AlertType.ERROR);
|
||||||
|
alert.setClose(false);
|
||||||
|
try {
|
||||||
|
alertHTMLPanel.remove(loaderProjectSections);
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
alertHTMLPanel.add(alert);
|
||||||
|
Window.alert(errorMsg);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
bindEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUpdateButtonEnabled(boolean bool) {
|
||||||
|
buttonUpdate.setEnabled(bool);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bindEvents() {
|
||||||
|
|
||||||
|
buttonUpdate.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
|
||||||
|
alertHTMLPanel.clear();
|
||||||
|
boolean isFormValid = currentCardSelected.getMetadataForm().isFormDataValid();
|
||||||
|
|
||||||
|
if (!isFormValid) {
|
||||||
|
Alert alert = new Alert("Error/s detected, please check your data entry...", AlertType.WARNING);
|
||||||
|
alert.setClose(true);
|
||||||
|
alertHTMLPanel.add(alert);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GeoNaFormDataObject gfdo = new GeoNaFormDataObject(
|
||||||
|
Arrays.asList(currentCardSelected.getMetadataForm().getFormDataBean()),
|
||||||
|
currentCardSelected.getGcubeProfile());
|
||||||
|
|
||||||
|
String sectionPath = listBoxSections.getSelectedValue();
|
||||||
|
|
||||||
|
GWT.log("sectionPath is: " + sectionPath);
|
||||||
|
|
||||||
|
List<FilePathDV> listFilePaths = sectionPathFilePaths.get(sectionPath);
|
||||||
|
|
||||||
|
final Modal modal = new Modal(true, true);
|
||||||
|
DocumentDV theDocument = projectEditDTO.getTheProjectDV().getTheDocument();
|
||||||
|
|
||||||
|
modal.setTitle("Updating...");
|
||||||
|
|
||||||
|
final FlowPanel panelContainer = new FlowPanel();
|
||||||
|
|
||||||
|
LoaderIcon loader = new LoaderIcon("Operation in progress... please wait");
|
||||||
|
modal.add(loader);
|
||||||
|
String htmlMsg = "Updating the section <b>"+listBoxSections.getSelectedItemText()+"</b> of the project with:";
|
||||||
|
htmlMsg += "<ul>";
|
||||||
|
htmlMsg += "<li>id: " + projectID + "</li>";
|
||||||
|
htmlMsg += "<li>" + theDocument.getFirstEntryOfMap().getKey() + ": "
|
||||||
|
+ theDocument.getFirstEntryOfMap().getValue() + "</li>";
|
||||||
|
htmlMsg += "</ul>";
|
||||||
|
htmlMsg += "<br>";
|
||||||
|
panelContainer.add(new HTML(htmlMsg));
|
||||||
|
panelContainer.add(loader);
|
||||||
|
panelContainer.add(new HTML("<br><br>"));
|
||||||
|
|
||||||
|
modal.add(panelContainer);
|
||||||
|
// modal3.setWidth(950);
|
||||||
|
// modal3.setHeight("700px");
|
||||||
|
modal.setCloseVisible(false);
|
||||||
|
|
||||||
|
GeoportalDataEntryServiceAsync.Util.getInstance().updateGeportalDataForm(profileID, projectID, gfdo,
|
||||||
|
sectionPath, listFilePaths, new AsyncCallback<CommitReport>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
modal.setCloseVisible(true);
|
||||||
|
modal.setTitle("Error :-(");
|
||||||
|
panelContainer.clear();
|
||||||
|
String errorMsg = "Sorry, an error occurred when updating the project with id: "+projectID+". Please, try again. If the problem persists, please contact the support";
|
||||||
|
Alert alert = new Alert(errorMsg, AlertType.ERROR);
|
||||||
|
alert.setClose(false);
|
||||||
|
modal.add(alert);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(CommitReport result) {
|
||||||
|
modal.setCloseVisible(true);
|
||||||
|
modal.setTitle("Project updated!");
|
||||||
|
panelContainer.clear();
|
||||||
|
Alert alert = new Alert();
|
||||||
|
alert.setClose(false);
|
||||||
|
alert.setType(AlertType.SUCCESS);
|
||||||
|
String htmlMsg = "The project with:";
|
||||||
|
htmlMsg += "<ul>";
|
||||||
|
htmlMsg += "<li>id: " + projectID + "</li>";
|
||||||
|
htmlMsg += "<li>" + theDocument.getFirstEntryOfMap().getKey() + ": "
|
||||||
|
+ theDocument.getFirstEntryOfMap().getValue() + "</li>";
|
||||||
|
htmlMsg += "</ul>";
|
||||||
|
htmlMsg += "<br>";
|
||||||
|
htmlMsg += "has been updated successfully!";
|
||||||
|
alert.setHTML(htmlMsg);
|
||||||
|
|
||||||
|
ReportTemplateToHTML rtth2 = new ReportTemplateToHTML("Project", result.getProjectAsJSON(),
|
||||||
|
false, false);
|
||||||
|
rtth2.showAsJSON(false);
|
||||||
|
|
||||||
|
panelContainer.add(alert);
|
||||||
|
panelContainer.add(rtth2);
|
||||||
|
|
||||||
|
appManagerBus.fireEvent(new OperationPerformedOnItemEvent<ResultDocumentDV>(
|
||||||
|
profileID, null, ACTION_PERFORMED_ON_ITEM.UPDATED_PROJECT));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
modal.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void noUpdateMode() {
|
||||||
|
buttonUpdate.setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class MetadataFormCardEventHandler.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
||||||
|
*
|
||||||
|
* Oct 12, 2020
|
||||||
|
*/
|
||||||
|
private class MetadataFormCardEventHandler implements GenericFormEventsListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On form data valid.
|
||||||
|
*
|
||||||
|
* @param genericDatasetBean the generic dataset bean
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onFormDataValid(GenericDatasetBean genericDatasetBean) {
|
||||||
|
setUpdateButtonEnabled(true);
|
||||||
|
//Disabling option not selected
|
||||||
|
int selectedIndex = listBoxSections.getSelectedIndex();
|
||||||
|
NodeList<Element> elementOption = listBoxSections.getElement().getElementsByTagName("option");
|
||||||
|
for (int i = 0; i < listBoxSections.getItemCount(); i++) {
|
||||||
|
if (i != selectedIndex) {
|
||||||
|
elementOption.getItem(i).setAttribute("disabled", "disabled");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On form data edit.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onFormDataEdit() {
|
||||||
|
setUpdateButtonEnabled(false);
|
||||||
|
NodeList<Element> elementOption = listBoxSections.getElement().getElementsByTagName("option");
|
||||||
|
//i==0 is the PLACEHOLDER
|
||||||
|
for (int i = 1; i < listBoxSections.getItemCount(); i++) {
|
||||||
|
elementOption.getItem(i).removeAttribute("disabled");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On form aborted.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onFormAborted() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On validation error.
|
||||||
|
*
|
||||||
|
* @param throwable the throwable
|
||||||
|
* @param errorMsg the error msg
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onValidationError(Throwable throwable, String errorMsg) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
|
||||||
|
xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
||||||
|
xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
|
||||||
|
<ui:style>
|
||||||
|
.important {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-save-style {
|
||||||
|
margin-top: 10px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.max-height-500 {
|
||||||
|
max-height: 450px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.margin-top-10 {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-operation {
|
||||||
|
font-size: 12px;
|
||||||
|
color: gray;
|
||||||
|
}
|
||||||
|
</ui:style>
|
||||||
|
<g:HTMLPanel>
|
||||||
|
<g:HTMLPanel ui:field="alertHTMLPanel">
|
||||||
|
</g:HTMLPanel>
|
||||||
|
<g:HTMLPanel ui:field="htmlPanelContainer">
|
||||||
|
<b:Form type="INLINE">
|
||||||
|
<b:Fieldset addStyleNames="form-fieldset-edit">
|
||||||
|
<b:ControlGroup>
|
||||||
|
<b:Label type="INFO">Select the section of the document you want
|
||||||
|
to update...</b:Label>
|
||||||
|
<b:Controls>
|
||||||
|
<b:ListBox ui:field="listBoxSections"></b:ListBox>
|
||||||
|
</b:Controls>
|
||||||
|
</b:ControlGroup>
|
||||||
|
<b:ControlGroup ui:field="controlsControlGroup"
|
||||||
|
visible="false">
|
||||||
|
<b:Label type="INFO">Manage the content of</b:Label>
|
||||||
|
<b:Controls>
|
||||||
|
<g:ScrollPanel ui:field="scrollSectionContent"></g:ScrollPanel>
|
||||||
|
</b:Controls>
|
||||||
|
</b:ControlGroup>
|
||||||
|
<b:ControlGroup>
|
||||||
|
<g:ScrollPanel>
|
||||||
|
<g:HTMLPanel ui:field="uploadFileContainer"
|
||||||
|
addStyleNames="upload-file-container"></g:HTMLPanel>
|
||||||
|
</g:ScrollPanel>
|
||||||
|
</b:ControlGroup>
|
||||||
|
</b:Fieldset>
|
||||||
|
</b:Form>
|
||||||
|
</g:HTMLPanel>
|
||||||
|
<g:HTMLPanel>
|
||||||
|
<g:HTMLPanel addStyleNames="{style.info-operation}">
|
||||||
|
To update the document:
|
||||||
|
"Select the Section you wish to update, update the metadata and/or
|
||||||
|
the
|
||||||
|
file/s and then confirm by clicking on "Create".
|
||||||
|
Finally select
|
||||||
|
"Update".
|
||||||
|
</g:HTMLPanel>
|
||||||
|
<b:Button icon="SAVE" type="INFO"
|
||||||
|
addStyleNames="{style.button-save-style}" ui:field="buttonUpdate">UPDATE</b:Button>
|
||||||
|
</g:HTMLPanel>
|
||||||
|
|
||||||
|
</g:HTMLPanel>
|
||||||
|
</ui:UiBinder>
|
|
@ -203,15 +203,16 @@ public class ListOfProjectTablePanel extends Composite {
|
||||||
alertSearchFor.setText(searchForFields.get(0).getDisplayName());
|
alertSearchFor.setText(searchForFields.get(0).getDisplayName());
|
||||||
alertSortBy.setText(toLabelFilter((sortByFields.get(0)), SearchingFilter.ORDER.ASC));
|
alertSortBy.setText(toLabelFilter((sortByFields.get(0)), SearchingFilter.ORDER.ASC));
|
||||||
|
|
||||||
for (ItemFieldDV record_FIELD : searchForFields) {
|
for (final ItemFieldDV record_FIELD : searchForFields) {
|
||||||
|
|
||||||
NavLink nav = new NavLink(record_FIELD.getDisplayName());
|
final NavLink navSearch = new NavLink(record_FIELD.getDisplayName());
|
||||||
dropdownSearchFor.add(nav);
|
dropdownSearchFor.add(navSearch);
|
||||||
|
|
||||||
nav.addClickHandler(new ClickHandler() {
|
navSearch.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(ClickEvent event) {
|
public void onClick(ClickEvent event) {
|
||||||
|
GWT.log("Search for: " + record_FIELD.getDisplayName());
|
||||||
alertSearchFor.setText(record_FIELD.getDisplayName());
|
alertSearchFor.setText(record_FIELD.getDisplayName());
|
||||||
|
|
||||||
if (searchField.getText().length() >= MIN_LENGHT_SERCHING_STRING) {
|
if (searchField.getText().length() >= MIN_LENGHT_SERCHING_STRING) {
|
||||||
|
@ -313,22 +314,22 @@ public class ListOfProjectTablePanel extends Composite {
|
||||||
this.ucdProjectTypesForListingDataView = ucdProjectTypesForListingDataView;
|
this.ucdProjectTypesForListingDataView = ucdProjectTypesForListingDataView;
|
||||||
|
|
||||||
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
|
|
||||||
//noProjectSelectionMessage.setVisible(true);
|
// noProjectSelectionMessage.setVisible(true);
|
||||||
// SELECTION on the first item
|
// Selecting directly the unique UCD type.
|
||||||
if (ucdProjectTypesForListingDataView.size() > 0) {
|
if (ucdProjectTypesForListingDataView.size() == 1) {
|
||||||
//noProjectSelectionMessage.setVisible(false);
|
// noProjectSelectionMessage.setVisible(false);
|
||||||
UseCaseDescriptorDV singleUCD = ucdProjectTypesForListingDataView.get(0);
|
UseCaseDescriptorDV singleUCD = ucdProjectTypesForListingDataView.get(0);
|
||||||
alertProjectType.setText(singleUCD.getName());
|
alertProjectType.setText(singleUCD.getName());
|
||||||
// setFilteringParameters(displayFields, sortByFields, searchForFields,
|
// setFilteringParameters(displayFields, sortByFields, searchForFields,
|
||||||
// currentSearchingFilter);
|
// currentSearchingFilter);
|
||||||
appManagerBus.fireEvent(
|
appManagerBus.fireEvent(new GetListOfRecordsEvent(true, singleUCD.getProfileID(),
|
||||||
new GetListOfRecordsEvent(true, singleUCD.getProfileID(), getCurrentSearchingFilter(), true));
|
getCurrentSearchingFilter(), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -449,12 +450,19 @@ public class ListOfProjectTablePanel extends Composite {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void addProjectType(final UseCaseDescriptorDV ucd) {
|
||||||
* Adds the project type.
|
|
||||||
*
|
NavLink link = new NavLink(ucd.getName());
|
||||||
* @param link the link
|
link.addClickHandler(new ClickHandler() {
|
||||||
*/
|
|
||||||
public void addProjectType(NavLink link) {
|
@Override
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
alertProjectType.setText(ucd.getName());
|
||||||
|
appManagerBus
|
||||||
|
.fireEvent(new GetListOfRecordsEvent(false, ucd.getProfileID(), builtSearchingFilter(), true));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
ddProjectType.add(link);
|
ddProjectType.add(link);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,17 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportalcommon.shared.config.OPERATION_ON_ITEM;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.WORKFLOW_PHASE;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.RelationshipDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.RelationshipDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalReferenceDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalReferenceDV;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryServiceAsync;
|
import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryServiceAsync;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.CloseCreateRelationGUIEvent;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.CloseCreateRelationGUIEvent;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.events.RelationActionHandlerEvent;
|
import org.gcube.portlets.user.geoportaldataentry.client.events.RelationActionHandlerEvent;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.resource.Images;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.ModalWindow;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.report.ReportTemplateToHTML;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.report.ReportTemplateToHTML;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
||||||
|
@ -17,6 +22,7 @@ import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
||||||
import com.github.gwtbootstrap.client.ui.Button;
|
import com.github.gwtbootstrap.client.ui.Button;
|
||||||
import com.github.gwtbootstrap.client.ui.Label;
|
import com.github.gwtbootstrap.client.ui.Label;
|
||||||
import com.github.gwtbootstrap.client.ui.Modal;
|
import com.github.gwtbootstrap.client.ui.Modal;
|
||||||
|
import com.github.gwtbootstrap.client.ui.constants.AlertType;
|
||||||
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
|
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
|
||||||
import com.github.gwtbootstrap.client.ui.constants.IconSize;
|
import com.github.gwtbootstrap.client.ui.constants.IconSize;
|
||||||
import com.github.gwtbootstrap.client.ui.constants.IconType;
|
import com.github.gwtbootstrap.client.ui.constants.IconType;
|
||||||
|
@ -35,6 +41,7 @@ import com.google.gwt.user.client.ui.FlexTable;
|
||||||
import com.google.gwt.user.client.ui.FlowPanel;
|
import com.google.gwt.user.client.ui.FlowPanel;
|
||||||
import com.google.gwt.user.client.ui.HTML;
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
import com.google.gwt.user.client.ui.HTMLPanel;
|
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
import com.google.gwt.user.client.ui.Widget;
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
public class ViewRelationshipPanel extends Composite {
|
public class ViewRelationshipPanel extends Composite {
|
||||||
|
@ -170,18 +177,40 @@ public class ViewRelationshipPanel extends Composite {
|
||||||
Label label = new Label();
|
Label label = new Label();
|
||||||
label.setType(LabelType.INFO);
|
label.setType(LabelType.INFO);
|
||||||
label.setText(relationDV.getRelationshipName());
|
label.setText(relationDV.getRelationshipName());
|
||||||
|
|
||||||
FlowPanel panelContainer = new FlowPanel();
|
FlowPanel panelContainer = new FlowPanel();
|
||||||
Button deleteRelation = new Button("", IconType.TRASH);
|
Button deleteRelation = new Button("", IconType.TRASH);
|
||||||
deleteRelation.setTitle("Delete this releation");
|
deleteRelation.setTitle("Delete this relation");
|
||||||
deleteRelation.setType(ButtonType.LINK);
|
deleteRelation.setType(ButtonType.LINK);
|
||||||
deleteRelation.addClickHandler(new ClickHandler() {
|
deleteRelation.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(ClickEvent event) {
|
public void onClick(ClickEvent event) {
|
||||||
ResultDocumentDV toProject = mapOfTargetProjectForId.get(relationDV.getTargetUCD());
|
|
||||||
appManagerBus.fireEvent(
|
// #24571
|
||||||
new RelationActionHandlerEvent(project, relationDV.getRelationshipName(), toProject));
|
boolean isNotInDRAFT = false;
|
||||||
|
|
||||||
|
if (fromTheProject.getLifecycleInfo() != null) {
|
||||||
|
String phase = fromTheProject.getLifecycleInfo().getPhase();
|
||||||
|
// IF the project is not in DRAFT, showing an alert and the no Update Mode will
|
||||||
|
// be activated
|
||||||
|
if (phase != null && phase.compareToIgnoreCase(WORKFLOW_PHASE.DRAFT.getLabel()) != 0) {
|
||||||
|
|
||||||
|
String msg = ConstantsGeoPortalDataEntryApp.ALERT_MESSAGE_DELETE_RELATION_FORBIDDEN;
|
||||||
|
ModalWindow modalW = new ModalWindow(new Image(Images.ICONS.accessDenied()),
|
||||||
|
"Forbidden: " + OPERATION_ON_ITEM.DELETE_RELATION, msg, AlertType.WARNING);
|
||||||
|
modalW.show();
|
||||||
|
|
||||||
|
isNotInDRAFT = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//If the project is in DRAFT, going to delete the releation after confirm
|
||||||
|
if(!isNotInDRAFT) {
|
||||||
|
ResultDocumentDV toProject = mapOfTargetProjectForId.get(relationDV.getTargetUCD());
|
||||||
|
appManagerBus.fireEvent(
|
||||||
|
new RelationActionHandlerEvent(project, relationDV.getRelationshipName(), toProject));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -143,6 +143,9 @@ public class ItemsTable<T extends DocumentDV> extends AbstractItemsCellTable<T>
|
||||||
String key = itemField.getJsonFields().get(0)
|
String key = itemField.getJsonFields().get(0)
|
||||||
.replace(ConstantsGeoPortalDataEntryApp.DEFAULT_DOCUMENT_PROJECTION_NAME + ".", "");
|
.replace(ConstantsGeoPortalDataEntryApp.DEFAULT_DOCUMENT_PROJECTION_NAME + ".", "");
|
||||||
Object value = documentDV.getDocumentAsMap().get(key);
|
Object value = documentDV.getDocumentAsMap().get(key);
|
||||||
|
if(value==null)
|
||||||
|
return "";
|
||||||
|
|
||||||
return value.toString();
|
return value.toString();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
GWT.log("Error e: " + e);
|
GWT.log("Error e: " + e);
|
||||||
|
@ -164,6 +167,9 @@ public class ItemsTable<T extends DocumentDV> extends AbstractItemsCellTable<T>
|
||||||
.replace(ConstantsGeoPortalDataEntryApp.DEFAULT_DOCUMENT_PROJECTION_NAME + ".", "");
|
.replace(ConstantsGeoPortalDataEntryApp.DEFAULT_DOCUMENT_PROJECTION_NAME + ".", "");
|
||||||
Object value = documentDV.getDocumentAsMap().get(key);
|
Object value = documentDV.getDocumentAsMap().get(key);
|
||||||
// GWT.log("key: "+key+" is instance of: "+value.getClass());
|
// GWT.log("key: "+key+" is instance of: "+value.getClass());
|
||||||
|
|
||||||
|
if(value==null)
|
||||||
|
return;
|
||||||
|
|
||||||
if (value instanceof ArrayList) {
|
if (value instanceof ArrayList) {
|
||||||
ArrayList<Object> arrayValues = (ArrayList<Object>) value;
|
ArrayList<Object> arrayValues = (ArrayList<Object>) value;
|
||||||
|
|
|
@ -56,28 +56,6 @@ public class TreeItemPanel {
|
||||||
root = new TreeItem(rootNode);
|
root = new TreeItem(rootNode);
|
||||||
|
|
||||||
treeItemParents.put(JSON_ROOT_PATH, Arrays.asList(root));
|
treeItemParents.put(JSON_ROOT_PATH, Arrays.asList(root));
|
||||||
|
|
||||||
/*
|
|
||||||
for (GeoNaFormCardModel geoNaFormCardModel : gnaCardsModels) {
|
|
||||||
|
|
||||||
GcubeProfileDV profile = geoNaFormCardModel.getGcubeProfile();
|
|
||||||
String parentName = profile.getParentName();
|
|
||||||
|
|
||||||
if (profile.getSectionName().compareTo("relazioneScavo") == 0) {
|
|
||||||
profile.setParentName(JSON_ROOT_PATH + "abstractRelazione");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (profile.getSectionName().compareTo("posizionamentoScavo") == 0) {
|
|
||||||
profile.setParentName(JSON_ROOT_PATH + "immaginiRappresentative");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (profile.getSectionName().compareTo("pianteFineScavo") == 0) {
|
|
||||||
profile.setParentName(JSON_ROOT_PATH + "immaginiRappresentative.posizionamentoScavo");
|
|
||||||
}
|
|
||||||
|
|
||||||
GWT.log(" print tree parentName: " + parentName + " name: " + profile.getSectionName() + " title: "
|
|
||||||
+ profile.getSectionTitle());
|
|
||||||
}*/
|
|
||||||
|
|
||||||
for (GeoNaFormCardModel geoNaFormCardModel : gnaCardsModels) {
|
for (GeoNaFormCardModel geoNaFormCardModel : gnaCardsModels) {
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class FormDataObjectToJSON {
|
||||||
|
|
||||||
// the root, instancing new json document
|
// the root, instancing new json document
|
||||||
if (tree_Node.isRoot()) {
|
if (tree_Node.isRoot()) {
|
||||||
theRootDocument = JSONObjecOrdered.instance();
|
theRootDocument = JSONObjectOrdered.instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
Configuration configuration = Configuration.builder().jsonProvider(new JsonOrgJsonProvider()).build();
|
Configuration configuration = Configuration.builder().jsonProvider(new JsonOrgJsonProvider()).build();
|
||||||
|
@ -55,7 +55,7 @@ public class FormDataObjectToJSON {
|
||||||
for (Tree_Node<GeoNaFormDataObject> treeNodeChild : tree_Node.getChildren()) {
|
for (Tree_Node<GeoNaFormDataObject> treeNodeChild : tree_Node.getChildren()) {
|
||||||
|
|
||||||
GeoNaFormDataObject gnaFO = treeNodeChild.getData();
|
GeoNaFormDataObject gnaFO = treeNodeChild.getData();
|
||||||
|
|
||||||
// Reading data and profile
|
// Reading data and profile
|
||||||
List<GenericDatasetBean> listGDB = gnaFO.getListGDB();
|
List<GenericDatasetBean> listGDB = gnaFO.getListGDB();
|
||||||
GcubeProfileDV profile = gnaFO.getGcubeProfileDV();
|
GcubeProfileDV profile = gnaFO.getGcubeProfileDV();
|
||||||
|
@ -161,9 +161,9 @@ public class FormDataObjectToJSON {
|
||||||
* @return the JSON object
|
* @return the JSON object
|
||||||
* @throws JSONException the JSON exception
|
* @throws JSONException the JSON exception
|
||||||
*/
|
*/
|
||||||
private JSONObject genericDatasetBeanToJSON(GenericDatasetBean gdb) throws JSONException {
|
protected JSONObject genericDatasetBeanToJSON(GenericDatasetBean gdb) throws JSONException {
|
||||||
|
|
||||||
JSONObject sectJSONObject = JSONObjecOrdered.instance();
|
JSONObject sectJSONObject = JSONObjectOrdered.instance();
|
||||||
|
|
||||||
LinkedHashMap<String, List<String>> mapFields = gdb.getFormDataEntryFields();
|
LinkedHashMap<String, List<String>> mapFields = gdb.getFormDataEntryFields();
|
||||||
LOG.debug("Map ordered: " + mapFields);
|
LOG.debug("Map ordered: " + mapFields);
|
||||||
|
@ -180,7 +180,9 @@ public class FormDataObjectToJSON {
|
||||||
// value is a list
|
// value is a list
|
||||||
JSONArray array = new JSONArray();
|
JSONArray array = new JSONArray();
|
||||||
for (String value : listValues) {
|
for (String value : listValues) {
|
||||||
array.put(value);
|
if(value!=null && !value.isEmpty()) {
|
||||||
|
array.put(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sectJSONObject.put(key, array);
|
sectJSONObject.put(key, array);
|
||||||
|
@ -237,6 +239,7 @@ public class FormDataObjectToJSON {
|
||||||
}
|
}
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class JSONObjecOrdered.
|
* The Class JSONObjecOrdered.
|
||||||
|
@ -245,7 +248,7 @@ public class FormDataObjectToJSON {
|
||||||
*
|
*
|
||||||
* Mar 10, 2022
|
* Mar 10, 2022
|
||||||
*/
|
*/
|
||||||
public static class JSONObjecOrdered {
|
public static class JSONObjectOrdered {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instance.
|
* Instance.
|
||||||
|
|
|
@ -5,23 +5,33 @@ import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import java.util.stream.StreamSupport;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.gcube.application.geoportal.client.utils.Serialization;
|
import org.gcube.application.geoportal.client.utils.Serialization;
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.access.Access;
|
||||||
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
|
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
|
||||||
import org.gcube.application.geoportal.common.model.rest.TempFile;
|
import org.gcube.application.geoportal.common.model.rest.TempFile;
|
||||||
import org.gcube.application.geoportal.common.model.useCaseDescriptor.RelationshipDefinition;
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.RelationshipDefinition;
|
||||||
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
||||||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||||
|
import org.gcube.application.geoportalcommon.ConvertToDataServiceModel;
|
||||||
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
|
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
|
||||||
import org.gcube.application.geoportalcommon.GeoportalCommon;
|
import org.gcube.application.geoportalcommon.GeoportalCommon;
|
||||||
import org.gcube.application.geoportalcommon.ProjectDVBuilder;
|
import org.gcube.application.geoportalcommon.ProjectDVBuilder;
|
||||||
|
@ -29,7 +39,6 @@ import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
|
||||||
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
|
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
|
||||||
import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller;
|
import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller;
|
||||||
import org.gcube.application.geoportalcommon.shared.GNADataEntryConfigProfile;
|
import org.gcube.application.geoportalcommon.shared.GNADataEntryConfigProfile;
|
||||||
import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
|
|
||||||
import org.gcube.application.geoportalcommon.shared.GeoportalItemReferences;
|
import org.gcube.application.geoportalcommon.shared.GeoportalItemReferences;
|
||||||
import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
|
import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
|
||||||
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
|
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
|
||||||
|
@ -49,10 +58,15 @@ import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalRe
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
|
||||||
|
import org.gcube.application.geoportaldatamapper.Geoportal_JSON_Mapper;
|
||||||
|
import org.gcube.application.geoportaldatamapper.shared.ProjectEdit;
|
||||||
import org.gcube.common.portal.PortalContext;
|
import org.gcube.common.portal.PortalContext;
|
||||||
import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException;
|
import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryService;
|
import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryService;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.client.ProjectFormCard;
|
import org.gcube.portlets.user.geoportaldataentry.client.ProjectFormCard;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.json.JsonMerge;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.json.JsonMerge.MERGE_OPTION;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GNADataEntryExtendedConfigProfile;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GNADataEntryExtendedConfigProfile;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
||||||
|
@ -61,6 +75,7 @@ import org.gcube.portlets.user.geoportaldataentry.shared.Tree_Node;
|
||||||
import org.gcube.portlets.user.geoportaldataentry.shared.UserRights;
|
import org.gcube.portlets.user.geoportaldataentry.shared.UserRights;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean;
|
import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded;
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploadedRemote;
|
||||||
import org.gcube.vomanagement.usermanagement.RoleManager;
|
import org.gcube.vomanagement.usermanagement.RoleManager;
|
||||||
import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault;
|
import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault;
|
||||||
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
|
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
|
||||||
|
@ -71,7 +86,14 @@ import org.json.JSONObject;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gwt.user.client.Random;
|
||||||
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
|
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
|
||||||
|
import com.jayway.jsonpath.Configuration;
|
||||||
|
import com.jayway.jsonpath.DocumentContext;
|
||||||
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import com.jayway.jsonpath.spi.json.GsonJsonProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The server side implementation of the RPC service.
|
* The server side implementation of the RPC service.
|
||||||
|
@ -209,6 +231,187 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update geportal data form.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @param projectID the project ID
|
||||||
|
* @param section the section
|
||||||
|
* @param sectionPath the section path
|
||||||
|
* @param listFilePaths the list file paths
|
||||||
|
* @return the commit report
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CommitReport updateGeportalDataForm(String profileID, String projectID, GeoNaFormDataObject section,
|
||||||
|
String sectionPath, List<FilePathDV> listFilePaths) throws Exception {
|
||||||
|
LOG.info("updateGeonaDataForm called for profileID {}", profileID);
|
||||||
|
LOG.info("and sectionPath {}", sectionPath);
|
||||||
|
LOG.info("and listFilePaths {}", listFilePaths);
|
||||||
|
|
||||||
|
ProjectsCaller client = null;
|
||||||
|
Project currentProject = null;
|
||||||
|
JSONObject updatedSectionObject = null;
|
||||||
|
Configuration configurationGson = null;
|
||||||
|
GenericDatasetBean sectionBean = null;
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (projectID == null)
|
||||||
|
throw new Exception("projectID is null");
|
||||||
|
|
||||||
|
if (profileID == null)
|
||||||
|
throw new Exception("profileID is null");
|
||||||
|
|
||||||
|
if (section == null || section.getListGDB() == null || section.getListGDB().get(0) == null)
|
||||||
|
throw new Exception("Input error. The section is null");
|
||||||
|
|
||||||
|
sectionBean = section.getListGDB().get(0);
|
||||||
|
|
||||||
|
// Converter
|
||||||
|
FormDataObjectToJSON metadataConverter = new FormDataObjectToJSON();
|
||||||
|
// JSON Section to update converted as JSONObject
|
||||||
|
updatedSectionObject = metadataConverter.genericDatasetBeanToJSON(sectionBean);
|
||||||
|
LOG.info("Input Json Section (to update): {}", updatedSectionObject.toString());
|
||||||
|
|
||||||
|
configurationGson = Configuration.builder().jsonProvider(new GsonJsonProvider()).build();
|
||||||
|
// Type type = new TypeToken<Set<LinkedTreeMap<String, Object>>>() {}.getType();
|
||||||
|
// Set<LinkedTreeMap<String, Object>> myMap = gson.fromJson(json, type);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Error on converting form data: ", e);
|
||||||
|
throw new Exception(
|
||||||
|
"Error occurred on converting data, try again or contact the support. Error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean errorOccurred = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
client = GeoportalClientCaller.projects();
|
||||||
|
SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
|
||||||
|
currentProject = client.getProjectByID(profileID, projectID);
|
||||||
|
Document currentDoc = currentProject.getTheDocument();
|
||||||
|
|
||||||
|
// Source Project
|
||||||
|
String theDocumentJson = currentDoc.toJson();
|
||||||
|
LOG.debug("Source document: {}", theDocumentJson);
|
||||||
|
|
||||||
|
// If the section path is the Root document, passed as "$.", fixing as "$"
|
||||||
|
if (sectionPath.compareTo(FormDataObjectToJSON.JSON_$_POINTER + ".") == 0)
|
||||||
|
sectionPath = FormDataObjectToJSON.JSON_$_POINTER;
|
||||||
|
|
||||||
|
com.google.gson.JsonObject targetSectionJObject = JsonPath.parse(theDocumentJson, configurationGson)
|
||||||
|
.read(sectionPath);
|
||||||
|
LOG.debug("Current Section path {} in the Document is {}", sectionPath, targetSectionJObject.toString());
|
||||||
|
String srcJ = updatedSectionObject.toString();
|
||||||
|
String trgJ = targetSectionJObject.toString();
|
||||||
|
LOG.debug("Merging src {} in the target: {}", srcJ, trgJ);
|
||||||
|
String mergedDoc = JsonMerge.merge(srcJ, trgJ, MERGE_OPTION.REPLACE);
|
||||||
|
LOG.debug("mergedDoc: {}", mergedDoc);
|
||||||
|
|
||||||
|
String newDocJson;
|
||||||
|
// If Updating path is first level of the root
|
||||||
|
if (sectionPath.equals(FormDataObjectToJSON.JSON_$_POINTER)) {
|
||||||
|
// The merged DOC is the root Document, no action required
|
||||||
|
newDocJson = mergedDoc;
|
||||||
|
} else {
|
||||||
|
// If the merged DOC is a child of the root Document, setting it as child of the
|
||||||
|
// Document in the proper section
|
||||||
|
Gson gson = new Gson();
|
||||||
|
JsonObject gsonOject = gson.fromJson(mergedDoc, JsonObject.class);
|
||||||
|
// Putting the merged section into Document
|
||||||
|
DocumentContext newContextDocJson = JsonPath.parse(theDocumentJson, configurationGson).set(sectionPath,
|
||||||
|
gsonOject);
|
||||||
|
newDocJson = newContextDocJson.json().toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Document updatedDocument = Serialization.read(newDocJson.toString(), Document.class);
|
||||||
|
LOG.info("New document is: {}", updatedDocument.toJson());
|
||||||
|
|
||||||
|
Project updatedProject = client.updateProject(profileID, projectID, updatedDocument);
|
||||||
|
// Project project = client.getProjectByID(profileID, projectID);
|
||||||
|
LOG.debug("Medatata Updated with document: {}", updatedProject.getTheDocument());
|
||||||
|
|
||||||
|
SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
|
||||||
|
|
||||||
|
if (listFilePaths != null) {
|
||||||
|
|
||||||
|
// Collecting new files
|
||||||
|
List<? extends FileUploaded> filesUploaded = sectionBean.getFilesUploaded();
|
||||||
|
Map<String, FileSetDataObject> mapFilesToRegistrer = null;
|
||||||
|
if (filesUploaded != null && !filesUploaded.isEmpty()) {
|
||||||
|
mapFilesToRegistrer = collectFiles(currentProject, sectionPath, section.getGcubeProfileDV(),
|
||||||
|
filesUploaded);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cleaning all the fileset path of the section (defined in the UCD)
|
||||||
|
for (FilePathDV filePath : listFilePaths) {
|
||||||
|
|
||||||
|
String filesetFieldName = filePath.getFieldName();
|
||||||
|
String filesetPath = sectionPath + "." + filesetFieldName;
|
||||||
|
// // Replacing $.abc with $..abc
|
||||||
|
// filesetPath = filesetPath.replaceFirst("\\.", "..");
|
||||||
|
LOG.info("Going to delete fileset path: {}", filesetPath);
|
||||||
|
try {
|
||||||
|
client.deleteFileset(profileID, projectID, filesetPath, true, true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Error deleting the fileset path {} for the project {}", filesetPath, projectID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Registering fileset in the section according to mapFilesToRegistrer
|
||||||
|
if (mapFilesToRegistrer != null && mapFilesToRegistrer.size()>0) {
|
||||||
|
LOG.info("Cluster of fileset per fieldDefinition is: " + mapFilesToRegistrer);
|
||||||
|
String theJSONDocument = currentProject.getTheDocument().toJson();
|
||||||
|
MongoServiceUtil mongoService = new MongoServiceUtil();
|
||||||
|
|
||||||
|
for (String fieldDefinition : mapFilesToRegistrer.keySet()) {
|
||||||
|
FileSetDataObject uploadedFileset = mapFilesToRegistrer.get(fieldDefinition);
|
||||||
|
LOG.info("Uploading fileset: " + uploadedFileset);
|
||||||
|
File[] fileset = uploadedFileset.getFileset();
|
||||||
|
FilePathDV filePath = uploadedFileset.getFilePathDV();
|
||||||
|
Access access = ConvertToDataServiceModel.getAccessFromDocumentSection(theJSONDocument,
|
||||||
|
sectionPath);
|
||||||
|
|
||||||
|
LOG.info("Going to register fileset: " + Arrays.asList(fileset).toString());
|
||||||
|
mongoService.registerFileSet(currentProject.getProfileID(), currentProject, sectionPath,
|
||||||
|
filePath.getFieldName(), filePath.getFieldDefinition(), access, fileset);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.info("Project with id " + currentProject.getId() + " updated correclty");
|
||||||
|
ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
|
||||||
|
// Reading again the project to be sure
|
||||||
|
updatedProject = client.getProjectByID(profileID, projectID);
|
||||||
|
ProjectDV toProjectDV = ConvertToDataValueObjectModel.toProjectDV(updatedProject, projectBuilder);
|
||||||
|
String newDocumentString = toProjectDV.getTheDocument().getDocumentAsJSON();
|
||||||
|
LOG.info("Got Document: {} ", newDocumentString);
|
||||||
|
return new CommitReport(projectID, profileID, newDocumentString, null);
|
||||||
|
} catch (Exception e) {
|
||||||
|
errorOccurred = true;
|
||||||
|
LOG.error("Error on updating data: ", e);
|
||||||
|
throw new Exception("Error occurred on updating data, try again or contact the support. Error: "
|
||||||
|
+ e.getMessage() + ". Tried to revert the project to the previous version");
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
// If an error occurs on updating, the previous version of the document will be
|
||||||
|
// restored
|
||||||
|
if (errorOccurred && currentProject != null) {
|
||||||
|
Document currentDocument = currentProject.getTheDocument();
|
||||||
|
try {
|
||||||
|
Project updatedProject = client.updateProject(profileID, projectID, currentDocument);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Silent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recursive upload fileset.
|
* Recursive upload fileset.
|
||||||
*
|
*
|
||||||
|
@ -234,6 +437,8 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
sectionJSONPathIndexer = new HashMap<String, Integer>();
|
sectionJSONPathIndexer = new HashMap<String, Integer>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String theJSONDocument = theProject.getTheDocument().toJson();
|
||||||
|
|
||||||
for (Tree_Node<GeoNaFormDataObject> treeNodeChild_GNA_DO : tree_Node.getChildren()) {
|
for (Tree_Node<GeoNaFormDataObject> treeNodeChild_GNA_DO : tree_Node.getChildren()) {
|
||||||
LOG.debug("Going to upload the files of tree node: " + treeNodeChild_GNA_DO);
|
LOG.debug("Going to upload the files of tree node: " + treeNodeChild_GNA_DO);
|
||||||
|
|
||||||
|
@ -326,20 +531,25 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
File[] fileset = uploadedFileset.getFileset();
|
File[] fileset = uploadedFileset.getFileset();
|
||||||
FilePathDV filePath = uploadedFileset.getFilePathDV();
|
FilePathDV filePath = uploadedFileset.getFilePathDV();
|
||||||
|
|
||||||
|
Access access;
|
||||||
// If the maxOccurs is not 1
|
// If the maxOccurs is not 1
|
||||||
if (profile.getMaxOccurs() == 0 || profile.getMaxOccurs() > 1) {
|
if (profile.getMaxOccurs() == 0 || profile.getMaxOccurs() > 1) {
|
||||||
LOG.info("The gCube Profile with the section " + sectionJSONPath
|
LOG.info("The gCube Profile with the section " + sectionJSONPath
|
||||||
+ " has maxOccurs > 1 need to manage it as array, going to add the array index");
|
+ " has maxOccurs > 1 need to manage it as array, going to add the array index");
|
||||||
String arraySectionJSONPAth = String.format("%s[%d]", sectionJSONPath, jpcV);
|
String arraySectionJSONPAth = String.format("%s[%d]", sectionJSONPath, jpcV);
|
||||||
LOG.debug("registering the fileset in the array section: " + sectionJSONPath);
|
LOG.debug("registering the fileset in the array section: " + sectionJSONPath);
|
||||||
|
|
||||||
|
access = ConvertToDataServiceModel.getAccessFromDocumentSection(theJSONDocument,
|
||||||
|
arraySectionJSONPAth);
|
||||||
mongoService.registerFileSet(profileID, theProject, arraySectionJSONPAth,
|
mongoService.registerFileSet(profileID, theProject, arraySectionJSONPAth,
|
||||||
filePath.getFieldName(), filePath.getFieldDefinition(), fileset);
|
filePath.getFieldName(), filePath.getFieldDefinition(), access, fileset);
|
||||||
} else {
|
} else {
|
||||||
LOG.info("The gCube Profile with the section " + sectionJSONPath + " has maxOccurs = 1");
|
LOG.info("The gCube Profile with the section " + sectionJSONPath + " has maxOccurs = 1");
|
||||||
LOG.debug("registering the fileset in the section: " + sectionJSONPath);
|
LOG.debug("registering the fileset in the section: " + sectionJSONPath);
|
||||||
|
access = ConvertToDataServiceModel.getAccessFromDocumentSection(theJSONDocument,
|
||||||
|
sectionJSONPath);
|
||||||
mongoService.registerFileSet(profileID, theProject, sectionJSONPath, filePath.getFieldName(),
|
mongoService.registerFileSet(profileID, theProject, sectionJSONPath, filePath.getFieldName(),
|
||||||
filePath.getFieldDefinition(), fileset);
|
filePath.getFieldDefinition(), access, fileset);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -354,6 +564,176 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collect files.
|
||||||
|
*
|
||||||
|
* @param theProject the the project
|
||||||
|
* @param sectionJSONPath the section JSON path
|
||||||
|
* @param gcubeProfile the gcube profile
|
||||||
|
* @param files the files
|
||||||
|
* @return the map of files that must be registered
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
protected Map<String, FileSetDataObject> collectFiles(Project theProject, String sectionJSONPath,
|
||||||
|
GcubeProfileDV gcubeProfile, List<? extends FileUploaded> files) throws Exception {
|
||||||
|
LOG.debug("collectFiles called [projectID: " + theProject.getId() + "], [sectionJSONPath: " + sectionJSONPath
|
||||||
|
+ "], [files: " + files + "]");
|
||||||
|
|
||||||
|
Map<String, FileSetDataObject> collectFilesetPerFieldDef = new HashMap<String, FileSetDataObject>();
|
||||||
|
if (files.size() > 0) {
|
||||||
|
// Iterating on the files upload for the section
|
||||||
|
for (int i = 0; i < files.size(); i++) {
|
||||||
|
FileUploaded file = files.get(i);
|
||||||
|
String formFieldName = file.getFilePath().getFormFieldLabel();
|
||||||
|
LOG.debug("Uploading file: " + file.getFileName() + ", from formFieldName: " + formFieldName);
|
||||||
|
FilePathDV filePath = retrieveFilePathForGcubeProfileFieldName(formFieldName, gcubeProfile);
|
||||||
|
LOG.info("Found {} for the form fieldName {}", filePath, formFieldName);
|
||||||
|
if (filePath == null) {
|
||||||
|
String error = "It is not possible to register the file " + formFieldName
|
||||||
|
+ ", missing configuration in the filePaths config of: " + gcubeProfile;
|
||||||
|
throw new Exception(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collecting Fileset per Field Definition
|
||||||
|
FileSetDataObject collFieldDef = collectFilesetPerFieldDef.get(filePath.getFieldDefinition());
|
||||||
|
if (collFieldDef == null) {
|
||||||
|
collFieldDef = new FileSetDataObject();
|
||||||
|
collFieldDef.setFilePathDV(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
File tempDir = Files.createTempDirectory("GEOPORTAL_REPLACE_FILES_").toFile();
|
||||||
|
String tmpDirPath = tempDir.getAbsolutePath();
|
||||||
|
File input;
|
||||||
|
File output;
|
||||||
|
if (file instanceof FileUploadedRemote) {
|
||||||
|
FileUploadedRemote remote = (FileUploadedRemote) file;
|
||||||
|
LOG.info("Uploaded file is remote: " + remote.getUrl());
|
||||||
|
InputStream in = new URL(remote.getUrl()).openStream();
|
||||||
|
String fileName = (remote.getFileName() == null || remote.getFileName().isEmpty())
|
||||||
|
? "file_" + Random.nextInt()
|
||||||
|
: remote.getFileName();
|
||||||
|
output = new File(tmpDirPath, fileName);
|
||||||
|
Path outputAbsolutePath = Paths.get(output.getAbsolutePath());
|
||||||
|
Files.copy(in, outputAbsolutePath, StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
LOG.info("Remote file: " + remote.getUrl() + ", copied to new file: " + output.getName());
|
||||||
|
} else {
|
||||||
|
LOG.info("Uploaded file is local: " + file.getTempSystemPath());
|
||||||
|
input = new File(file.getTempSystemPath());
|
||||||
|
output = new File(tmpDirPath, file.getFileName());
|
||||||
|
copyContent(input, output);
|
||||||
|
LOG.info(
|
||||||
|
"Temp file: " + file.getTempSystemPath() + ", copied to new file: " + output.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
collFieldDef.addFile(output);
|
||||||
|
tempDir.deleteOnExit();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Skipping file: " + file.getFileName() + ". Error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
collectFilesetPerFieldDef.put(filePath.getFieldDefinition(), collFieldDef);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return collectFilesetPerFieldDef;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace files.
|
||||||
|
*
|
||||||
|
* @param theProject the the project
|
||||||
|
* @param sectionJSONPath the section JSON path
|
||||||
|
* @param gcubeProfile the gcube profile
|
||||||
|
* @param files the files
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
protected void replaceFiles(Project theProject, String sectionJSONPath, GcubeProfileDV gcubeProfile,
|
||||||
|
List<? extends FileUploaded> files) throws Exception {
|
||||||
|
LOG.debug("replaceFiles called [projectID: " + theProject.getId() + "], [sectionJSONPath: " + sectionJSONPath
|
||||||
|
+ "], [files: " + files + "]");
|
||||||
|
|
||||||
|
Map<String, FileSetDataObject> collectFilesetPerFieldDef = new HashMap<String, FileSetDataObject>();
|
||||||
|
if (files.size() > 0) {
|
||||||
|
// Iterating on the files upload for the section
|
||||||
|
for (int i = 0; i < files.size(); i++) {
|
||||||
|
FileUploaded file = files.get(i);
|
||||||
|
String formFieldName = file.getFilePath().getFormFieldLabel();
|
||||||
|
LOG.debug("Uploading file: " + file.getFileName() + ", from formFieldName: " + formFieldName);
|
||||||
|
FilePathDV filePath = retrieveFilePathForGcubeProfileFieldName(formFieldName, gcubeProfile);
|
||||||
|
LOG.info("Found {} for the form fieldName {}", filePath, formFieldName);
|
||||||
|
if (filePath == null) {
|
||||||
|
String error = "It is not possible to register the file " + formFieldName
|
||||||
|
+ ", missing configuration in the filePaths config of: " + gcubeProfile;
|
||||||
|
throw new Exception(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collecting Fileset per Field Definition
|
||||||
|
FileSetDataObject collFieldDef = collectFilesetPerFieldDef.get(filePath.getFieldDefinition());
|
||||||
|
if (collFieldDef == null) {
|
||||||
|
collFieldDef = new FileSetDataObject();
|
||||||
|
collFieldDef.setFilePathDV(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
File tempDir = Files.createTempDirectory("GEOPORTAL_REPLACE_FILES_").toFile();
|
||||||
|
String tmpDirPath = tempDir.getAbsolutePath();
|
||||||
|
File input;
|
||||||
|
File output;
|
||||||
|
if (file instanceof FileUploadedRemote) {
|
||||||
|
FileUploadedRemote remote = (FileUploadedRemote) file;
|
||||||
|
LOG.info("Uploaded file is remote: " + remote.getUrl());
|
||||||
|
InputStream in = new URL(remote.getUrl()).openStream();
|
||||||
|
String fileName = (remote.getFileName() == null || remote.getFileName().isEmpty())
|
||||||
|
? "file_" + Random.nextInt()
|
||||||
|
: remote.getFileName();
|
||||||
|
output = new File(tmpDirPath, fileName);
|
||||||
|
Path outputAbsolutePath = Paths.get(output.getAbsolutePath());
|
||||||
|
Files.copy(in, outputAbsolutePath, StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
LOG.info("Remote file: " + remote.getUrl() + ", copied to new file: " + output.getName());
|
||||||
|
} else {
|
||||||
|
LOG.info("Uploaded file is local: " + file.getTempSystemPath());
|
||||||
|
input = new File(file.getTempSystemPath());
|
||||||
|
output = new File(tmpDirPath, file.getFileName());
|
||||||
|
copyContent(input, output);
|
||||||
|
LOG.info(
|
||||||
|
"Temp file: " + file.getTempSystemPath() + ", copied to new file: " + output.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
collFieldDef.addFile(output);
|
||||||
|
tempDir.deleteOnExit();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Skipping file: " + file.getFileName() + ". Error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
collectFilesetPerFieldDef.put(filePath.getFieldDefinition(), collFieldDef);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.info("Cluster of fileset per fieldDefinition is: " + collectFilesetPerFieldDef);
|
||||||
|
String theJSONDocument = theProject.getTheDocument().toJson();
|
||||||
|
MongoServiceUtil mongoService = new MongoServiceUtil();
|
||||||
|
|
||||||
|
for (String fieldDefinition : collectFilesetPerFieldDef.keySet()) {
|
||||||
|
FileSetDataObject uploadedFileset = collectFilesetPerFieldDef.get(fieldDefinition);
|
||||||
|
LOG.info("Uploading fileset: " + uploadedFileset);
|
||||||
|
File[] fileset = uploadedFileset.getFileset();
|
||||||
|
FilePathDV filePath = uploadedFileset.getFilePathDV();
|
||||||
|
Access access = ConvertToDataServiceModel.getAccessFromDocumentSection(theJSONDocument, sectionJSONPath);
|
||||||
|
|
||||||
|
LOG.info("Going to register files: " + Arrays.asList(fileset).toString());
|
||||||
|
mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath,
|
||||||
|
filePath.getFieldName(), filePath.getFieldDefinition(), access, fileset);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the temp file on storage.
|
* Creates the temp file on storage.
|
||||||
*
|
*
|
||||||
|
@ -473,12 +853,11 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
public GeoportalItemReferences getLinksFor(String itemId, String profileID) throws Exception {
|
public GeoportalItemReferences getLinksFor(String itemId, String profileID) throws Exception {
|
||||||
LOG.info("getLinksFor called");
|
LOG.info("getLinksFor called");
|
||||||
|
|
||||||
SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
|
String scope = SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
|
||||||
GNADataViewerConfigProfile grViewerProfile = SessionUtil
|
//GNADataViewerConfigProfile grViewerProfile = SessionUtil.getGeportalViewerResourceProfile(getThreadLocalRequest());
|
||||||
.getGeportalViewerResourceProfile(getThreadLocalRequest());
|
GeoportalCommon gc = new GeoportalCommon();
|
||||||
GeoportalCommon gc = new GeoportalCommon(grViewerProfile);
|
|
||||||
GeoportalItemReferences item = new GeoportalItemReferences(itemId, profileID);
|
GeoportalItemReferences item = new GeoportalItemReferences(itemId, profileID);
|
||||||
item = gc.getPublicLinksFor(item, false);
|
item = gc.getPublicLinksFor(scope, item, true);
|
||||||
LOG.info("Returning: " + item);
|
LOG.info("Returning: " + item);
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
@ -505,33 +884,67 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
ProjectsCaller client = GeoportalClientCaller.projects();
|
ProjectsCaller client = GeoportalClientCaller.projects();
|
||||||
SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
|
SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
|
||||||
|
|
||||||
Integer totalProjectForProfile = SessionUtil.getTotalDocumentForProfileID(getThreadLocalRequest(),
|
ResultSetPaginatedData searchedData = new ResultSetPaginatedData();
|
||||||
theProfileID);
|
|
||||||
|
// If reloadFromService = true, loads the document from the service
|
||||||
|
Integer totalProjectForProfile = null;
|
||||||
|
|
||||||
|
// Loading total documents from the session
|
||||||
|
if (!reloadFromService) {
|
||||||
|
totalProjectForProfile = SessionUtil.getTotalDocumentForProfileID(getThreadLocalRequest(),
|
||||||
|
theProfileID);
|
||||||
|
}
|
||||||
|
|
||||||
if (totalProjectForProfile == null) {
|
if (totalProjectForProfile == null) {
|
||||||
totalProjectForProfile = client.getTotalDocument(theProfileID);
|
totalProjectForProfile = client.getTotalDocument(theProfileID);
|
||||||
SessionUtil.setTotalDocumentForProfileID(getThreadLocalRequest(), theProfileID, totalProjectForProfile);
|
SessionUtil.setTotalDocumentForProfileID(getThreadLocalRequest(), theProfileID, totalProjectForProfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
searchedData.setTotalItems(totalProjectForProfile);
|
||||||
LOG.info("Total Docs read from config: " + totalProjectForProfile);
|
LOG.info("Total Docs read from config: " + totalProjectForProfile);
|
||||||
|
|
||||||
Iterator<Project> projects = client.queryOnMongo(theProfileID, totalProjectForProfile, start, limit,
|
// Saving client PROJECTION
|
||||||
filter);
|
LinkedHashMap<String, Object> originalProjection = filter.getProjection();
|
||||||
|
int totalItems = totalProjectForProfile;
|
||||||
|
// PERFORMING FIRST QUERY FOR IDS IF AND ONLY IF WHERE CONDITIONS IN THE QUERY.
|
||||||
|
// SEARCHING FACILITY IS ENACTING.
|
||||||
|
if (filter.getConditions() != null) {
|
||||||
|
|
||||||
ResultSetPaginatedData searchedData = new ResultSetPaginatedData(start, limit, false);
|
// Setting PROJECTION ONLY FOR PROEJCT ID
|
||||||
searchedData.setTotalItems(totalProjectForProfile);
|
LinkedHashMap<String, Object> projectionForIDs = new LinkedHashMap<String, Object>();
|
||||||
|
projectionForIDs.put(Project.ID, 1);
|
||||||
|
filter.setProjection(projectionForIDs);
|
||||||
|
|
||||||
|
// FIRST QUERY TO RETRIEVE IDs
|
||||||
|
// LIMIT IS NULL MEANS THAT IT IS EQUAL TO NUMBER TOTAL OF DOCUMENTS
|
||||||
|
// Calculating always the size starting from 0
|
||||||
|
final Iterator<Project> projectsIDs = client.queryOnMongo(theProfileID, totalProjectForProfile, 0, null,
|
||||||
|
filter);
|
||||||
|
|
||||||
|
// Getting the Project IDs from the Iterable
|
||||||
|
Iterable<Project> itP = () -> projectsIDs;
|
||||||
|
Stream<Project> targetStream = StreamSupport.stream(itP.spliterator(), false);
|
||||||
|
List<String> listProjectIDs = targetStream.map(Project::getId).collect(Collectors.toList());
|
||||||
|
totalItems = listProjectIDs.size();
|
||||||
|
searchedData.setTotalItems(totalItems);
|
||||||
|
LOG.info("Total Docs read from query per ID: " + totalItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOW PERFORMING THE (REAL) SECOND QUERY FROM CLIENT
|
||||||
|
// SETTING ORIGINAL PROJECTION FROM CLIENT
|
||||||
|
filter.setProjection(originalProjection);
|
||||||
|
// LIMIT IS FROM CLIENT
|
||||||
|
Iterator<Project> projects = client.queryOnMongo(theProfileID, totalItems, start, limit, filter);
|
||||||
|
|
||||||
|
searchedData.setClientStartIndex(start);
|
||||||
|
searchedData.setLimit(limit);
|
||||||
|
searchedData.setServerSearchFinished(false);
|
||||||
|
|
||||||
List<ResultDocumentDV> toReturnList = ConvertToDataValueObjectModel.toListResultDocument(projects);
|
List<ResultDocumentDV> toReturnList = ConvertToDataValueObjectModel.toListResultDocument(projects);
|
||||||
|
|
||||||
searchedData.setData(toReturnList);
|
searchedData.setData(toReturnList);
|
||||||
|
|
||||||
// TODO BUGGY WORKAROUND. BLOCKED BY #22487 IT MUST BE REMOVE AFTER THE QUERY
|
LOG.info(
|
||||||
// COUNT
|
"Total Docs page size returned:" + toReturnList.size() + ", start: " + start + ", limit: " + limit);
|
||||||
// AND LIST.SIZE BY QUERY WILL BE AVAILABLE IN THE SERVICE
|
|
||||||
if (filter.getConditions() != null) {
|
|
||||||
int totalItems = toReturnList.size();
|
|
||||||
searchedData.setTotalItems(totalItems);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (totalProjectForProfile == limit || totalProjectForProfile == 0) {
|
if (totalProjectForProfile == limit || totalProjectForProfile == 0) {
|
||||||
LOG.debug("Page completed returning " + totalProjectForProfile + " projects");
|
LOG.debug("Page completed returning " + totalProjectForProfile + " projects");
|
||||||
|
@ -578,7 +991,7 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
ProjectsCaller client = GeoportalClientCaller.projects();
|
ProjectsCaller client = GeoportalClientCaller.projects();
|
||||||
SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
|
SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
|
||||||
|
|
||||||
client.deleteProject(profileID, projectID, false);
|
client.deleteProject(profileID, projectID, true);
|
||||||
// Updating count of Documents in session per profileID
|
// Updating count of Documents in session per profileID
|
||||||
Integer totalProjectForProfile = client.getTotalDocument(profileID);
|
Integer totalProjectForProfile = client.getTotalDocument(profileID);
|
||||||
SessionUtil.setTotalDocumentForProfileID(getThreadLocalRequest(), profileID, totalProjectForProfile);
|
SessionUtil.setTotalDocumentForProfileID(getThreadLocalRequest(), profileID, totalProjectForProfile);
|
||||||
|
@ -1097,6 +1510,84 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the project edit.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @param projectID the project ID
|
||||||
|
* @return the project edit
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ProjectEdit getProjectEdit(String profileID, String projectID) throws Exception {
|
||||||
|
LOG.info("getProjectEdit called for profileID: {}, and projectID: {}", profileID, projectID);
|
||||||
|
try {
|
||||||
|
PortalContext pContext = PortalContext.getConfiguration();
|
||||||
|
GCubeUser user = pContext.getCurrentUser(this.getThreadLocalRequest());
|
||||||
|
String scope = SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
|
||||||
|
|
||||||
|
ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
||||||
|
Project theProject = clientProjects.getProjectByID(profileID, projectID);
|
||||||
|
ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
|
||||||
|
projectBuilder.relationships(true);
|
||||||
|
ProjectDV theProjectDV = ConvertToDataValueObjectModel.toProjectDV(theProject, projectBuilder);
|
||||||
|
|
||||||
|
ProjectEdit projectEdit = Geoportal_JSON_Mapper.loadProjectEdit(theProjectDV, scope, user.getUsername());
|
||||||
|
|
||||||
|
if (LOG.isDebugEnabled() || !SessionUtil.isIntoPortal()) {
|
||||||
|
Geoportal_JSON_Mapper.prettyPrintProjectEdit(projectEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.info(ProjectEdit.class.getSimpleName() + " returing not null: " + (projectEdit != null));
|
||||||
|
return projectEdit;
|
||||||
|
} catch (Exception e) {
|
||||||
|
String erroMsg = "Error occurred on reading " + ProjectEdit.class.getSimpleName() + " DTO for id: "
|
||||||
|
+ projectID;
|
||||||
|
LOG.warn(erroMsg, e);
|
||||||
|
throw new Exception(
|
||||||
|
erroMsg + ". Error: " + e.getMessage() + ". Refresh and try again or contact the support");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the project view.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @param projectID the project ID
|
||||||
|
* @return the project view
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ProjectView getProjectView(String profileID, String projectID) throws Exception {
|
||||||
|
LOG.info("getProjectEdit called for profileID: {}, and projectID: {}", profileID, projectID);
|
||||||
|
try {
|
||||||
|
PortalContext pContext = PortalContext.getConfiguration();
|
||||||
|
GCubeUser user = pContext.getCurrentUser(this.getThreadLocalRequest());
|
||||||
|
String scope = SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
|
||||||
|
|
||||||
|
ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
||||||
|
Project theProject = clientProjects.getProjectByID(profileID, projectID);
|
||||||
|
ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
|
||||||
|
projectBuilder.relationships(true);
|
||||||
|
ProjectDV theProjectDV = ConvertToDataValueObjectModel.toProjectDV(theProject, projectBuilder);
|
||||||
|
|
||||||
|
ProjectView projectView = Geoportal_JSON_Mapper.loadProjectView(theProjectDV, scope, user.getUsername());
|
||||||
|
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
|
Geoportal_JSON_Mapper.prettyPrintProjectView(projectView);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.info(ProjectView.class.getSimpleName() + " returing not null: " + (projectView != null));
|
||||||
|
return projectView;
|
||||||
|
} catch (Exception e) {
|
||||||
|
String erroMsg = "Error occurred on reading " + ProjectView.class.getSimpleName() + " DTO for id: "
|
||||||
|
+ projectID;
|
||||||
|
LOG.warn(erroMsg, e);
|
||||||
|
throw new Exception(
|
||||||
|
erroMsg + ". Error: " + e.getMessage() + ". Refresh and try again or contact the support");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pretty print client data entry map.
|
* Pretty print client data entry map.
|
||||||
*
|
*
|
||||||
|
@ -1117,9 +1608,9 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
for (String keyEntry : map.keySet()) {
|
for (String keyEntry : map.keySet()) {
|
||||||
LOG.debug("\t " + keyEntry + ": " + map.get(keyEntry));
|
LOG.debug("\t " + keyEntry + ": " + map.get(keyEntry));
|
||||||
}
|
}
|
||||||
for (FileUploaded fup : gbd.getFilesUploaded()) {
|
// for (FileUploaded fup : gbd.getFilesUploaded()) {
|
||||||
LOG.debug("\t " + fup);
|
// LOG.debug("\t " + fup);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,9 @@ import static org.gcube.application.geoportal.client.plugins.GeoportalAbstractPl
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
import java.rmi.RemoteException;
|
import java.rmi.RemoteException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -15,6 +17,7 @@ import org.bson.Document;
|
||||||
import org.gcube.application.geoportal.client.utils.Serialization;
|
import org.gcube.application.geoportal.client.utils.Serialization;
|
||||||
import org.gcube.application.geoportal.common.faults.InvalidRequestException;
|
import org.gcube.application.geoportal.common.faults.InvalidRequestException;
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.access.Access;
|
||||||
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
|
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
|
||||||
import org.gcube.application.geoportal.common.model.rest.TempFile;
|
import org.gcube.application.geoportal.common.model.rest.TempFile;
|
||||||
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
|
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
|
||||||
|
@ -24,6 +27,7 @@ import org.gcube.application.geoportal.common.utils.FileSets;
|
||||||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||||
import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException;
|
import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded;
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploadedRemote;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -42,16 +46,35 @@ public class MongoServiceUtil {
|
||||||
|
|
||||||
UseCaseDescriptorsI client = null;
|
UseCaseDescriptorsI client = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use case descriptors client.
|
||||||
|
*
|
||||||
|
* @return the use case descriptors I
|
||||||
|
*/
|
||||||
public UseCaseDescriptorsI useCaseDescriptorsClient() {
|
public UseCaseDescriptorsI useCaseDescriptorsClient() {
|
||||||
LOG.debug("useCaseDescriptorsClient called");
|
LOG.debug("useCaseDescriptorsClient called");
|
||||||
return useCaseDescriptors().build();
|
return useCaseDescriptors().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the projects client.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @return the projects client
|
||||||
|
*/
|
||||||
public Projects<Project> getProjectsClient(String profileID) {
|
public Projects<Project> getProjectsClient(String profileID) {
|
||||||
LOG.debug("getProjectsClient called for profileID: " + profileID);
|
LOG.debug("getProjectsClient called for profileID: " + profileID);
|
||||||
return projects(profileID).build();
|
return projects(profileID).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the new.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @param jsonDocument the json document
|
||||||
|
* @return the project
|
||||||
|
* @throws RemoteException the remote exception
|
||||||
|
*/
|
||||||
public Project createNew(String profileID, String jsonDocument) throws RemoteException {
|
public Project createNew(String profileID, String jsonDocument) throws RemoteException {
|
||||||
LOG.debug("createNew called for profileID: " + profileID);
|
LOG.debug("createNew called for profileID: " + profileID);
|
||||||
Document myDocument = Document.parse(jsonDocument);
|
Document myDocument = Document.parse(jsonDocument);
|
||||||
|
@ -62,16 +85,38 @@ public class MongoServiceUtil {
|
||||||
return project;
|
return project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register file set.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @param project the project
|
||||||
|
* @param parentPath the parent path
|
||||||
|
* @param fieldName the field name
|
||||||
|
* @param fieldDefinition the field definition
|
||||||
|
* @param access the access
|
||||||
|
* @param files the files
|
||||||
|
* @throws RemoteException the remote exception
|
||||||
|
* @throws FileNotFoundException the file not found exception
|
||||||
|
* @throws JsonProcessingException the json processing exception
|
||||||
|
* @throws InvalidRequestException the invalid request exception
|
||||||
|
*/
|
||||||
public void registerFileSet(String profileID, Project project, String parentPath, String fieldName,
|
public void registerFileSet(String profileID, Project project, String parentPath, String fieldName,
|
||||||
String fieldDefinition, File... files)
|
String fieldDefinition, Access access, File... files)
|
||||||
throws RemoteException, FileNotFoundException, JsonProcessingException, InvalidRequestException {
|
throws RemoteException, FileNotFoundException, JsonProcessingException, InvalidRequestException {
|
||||||
LOG.debug("registerFileSet called for profileID: " + profileID);
|
LOG.info("registerFileSet called for profileID: " + profileID);
|
||||||
|
LOG.info("and for parentPath: " + parentPath);
|
||||||
|
LOG.info("and for fieldName: " + fieldName);
|
||||||
|
LOG.info("and for fieldDefinition: " + fieldDefinition);
|
||||||
|
LOG.info("and for access: " + access);
|
||||||
|
|
||||||
Projects<Project> client = getProjectsClient(profileID);
|
Projects<Project> client = getProjectsClient(profileID);
|
||||||
// Prepare request
|
// Prepare request
|
||||||
RegisterFileSetRequest fsRequest = FileSets.prepareRequest(new StorageUtils(), parentPath, fieldName,
|
RegisterFileSetRequest fsRequest = FileSets.prepareRequest(new StorageUtils(), parentPath, fieldName,
|
||||||
fieldDefinition, files);
|
fieldDefinition, files);
|
||||||
|
fsRequest.setToSetAccess(access);
|
||||||
|
|
||||||
project = client.registerFileSet(project.getId(), fsRequest);
|
project = client.registerFileSet(project.getId(), fsRequest);
|
||||||
|
|
||||||
LOG.trace("Resulting Project : " + project);
|
LOG.trace("Resulting Project : " + project);
|
||||||
LOG.debug("Resulting Project as JSON: " + Serialization.write(project));
|
LOG.debug("Resulting Project as JSON: " + Serialization.write(project));
|
||||||
}
|
}
|
||||||
|
@ -135,32 +180,31 @@ public class MongoServiceUtil {
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
|
||||||
// * To tem files from WSC.
|
/**
|
||||||
// *
|
* To temp file from remote.
|
||||||
// * @param listFiles the list files
|
*
|
||||||
// * @return the list
|
* @param file the file
|
||||||
// */
|
* @return the temp file
|
||||||
// public List<TempFile> toTemFilesFromWSC(List<WorkspaceContentDV> listFiles) {
|
*/
|
||||||
// LOG.debug("toTemFilesFromWSC called");
|
public TempFile toTempFileFromRemote(FileUploadedRemote file) {
|
||||||
// if (listFiles == null || listFiles.isEmpty())
|
LOG.debug("toTemFilesFromRemote called");
|
||||||
// return null;
|
if (file == null)
|
||||||
//
|
return null;
|
||||||
// // Building TempFile
|
|
||||||
// List<TempFile> files = new ArrayList<TempFile>(listFiles.size());
|
// Building TempFile
|
||||||
// for (WorkspaceContentDV fileUploaded : listFiles) {
|
TempFile storageTempFile = null;
|
||||||
// InputStream is;
|
try {
|
||||||
// try {
|
InputStream is = new URL(file.getUrl()).openStream();
|
||||||
// is = new URL(fileUploaded.getLink()).openStream();
|
// Creating TempFile
|
||||||
// // Creating TempFile
|
storageTempFile = createTempFileOnStorage(is, file.getFileName());
|
||||||
// TempFile storageTempFile = createTempFileOnStorage(is, fileUploaded.getName());
|
} catch (IOException e) {
|
||||||
// files.add(storageTempFile);
|
LOG.error("Error on creating temp file from URL: " + file.getUrl(), e);
|
||||||
// } catch (IOException e) {
|
}
|
||||||
// LOG.error("Error on creating temp file from URL: " + fileUploaded.getLink(), e);
|
|
||||||
// }
|
return storageTempFile;
|
||||||
// }
|
}
|
||||||
// return files;
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To JSON.
|
* To JSON.
|
||||||
|
|
|
@ -12,9 +12,7 @@ import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||||
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
|
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
|
||||||
import org.gcube.application.geoportalcommon.GeoportalCommon;
|
|
||||||
import org.gcube.application.geoportalcommon.shared.GNADataEntryConfigProfile;
|
import org.gcube.application.geoportalcommon.shared.GNADataEntryConfigProfile;
|
||||||
import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
|
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.RelationshipDefinitionDV;
|
||||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
|
@ -43,7 +41,7 @@ public class SessionUtil {
|
||||||
|
|
||||||
private static final String GNA_DATAENTRY_CONFIG_PROFILE = "GNA_DATAENTRY_CONFIG_PROFILE";
|
private static final String GNA_DATAENTRY_CONFIG_PROFILE = "GNA_DATAENTRY_CONFIG_PROFILE";
|
||||||
private static final String LATEST_RESULT_SET_SORTED = "LATEST_RESULT_SET_SORTED";
|
private static final String LATEST_RESULT_SET_SORTED = "LATEST_RESULT_SET_SORTED";
|
||||||
private static final String GEONA_DATAVIEWER_PROFILE = "GEONA_DATAVIEWER_PROFILE";
|
//private static final String GEONA_DATAVIEWER_PROFILE = "GEONA_DATAVIEWER_PROFILE";
|
||||||
private static final String LIST_OF_CONCESSIONI = "LIST_OF_CONCESSIONI";
|
private static final String LIST_OF_CONCESSIONI = "LIST_OF_CONCESSIONI";
|
||||||
|
|
||||||
private static final String LIST_OF_RELATIONSHIP_DEFINITION = "LIST_OF_RELATIONSHIP_DEFINITION";
|
private static final String LIST_OF_RELATIONSHIP_DEFINITION = "LIST_OF_RELATIONSHIP_DEFINITION";
|
||||||
|
@ -232,28 +230,28 @@ public class SessionUtil {
|
||||||
return listOfConcessioni;
|
return listOfConcessioni;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* Gets the geportal viewer resource profile.
|
// * Gets the geportal viewer resource profile.
|
||||||
*
|
// *
|
||||||
* @param httpServletRequest the http servlet request
|
// * @param httpServletRequest the http servlet request
|
||||||
* @return the geportal viewer resource profile
|
// * @return the geportal viewer resource profile
|
||||||
* @throws Exception the exception
|
// * @throws Exception the exception
|
||||||
*/
|
// */
|
||||||
public static GNADataViewerConfigProfile getGeportalViewerResourceProfile(HttpServletRequest httpServletRequest)
|
// public static GNADataViewerConfigProfile getGeportalViewerResourceProfile(HttpServletRequest httpServletRequest)
|
||||||
throws Exception {
|
// throws Exception {
|
||||||
HttpSession session = httpServletRequest.getSession();
|
// HttpSession session = httpServletRequest.getSession();
|
||||||
GNADataViewerConfigProfile geoNaDataViewerProfile = (GNADataViewerConfigProfile) session
|
// GNADataViewerConfigProfile geoNaDataViewerProfile = (GNADataViewerConfigProfile) session
|
||||||
.getAttribute(GEONA_DATAVIEWER_PROFILE);
|
// .getAttribute(GEONA_DATAVIEWER_PROFILE);
|
||||||
|
//
|
||||||
if (geoNaDataViewerProfile == null) {
|
// if (geoNaDataViewerProfile == null) {
|
||||||
GeoportalCommon gc = new GeoportalCommon();
|
// GeoportalCommon gc = new GeoportalCommon();
|
||||||
geoNaDataViewerProfile = gc.readGNADataViewerConfig(null);
|
// geoNaDataViewerProfile = gc.readGNADataViewerConfig(null);
|
||||||
session.setAttribute(GEONA_DATAVIEWER_PROFILE, geoNaDataViewerProfile);
|
// session.setAttribute(GEONA_DATAVIEWER_PROFILE, geoNaDataViewerProfile);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return geoNaDataViewerProfile;
|
// return geoNaDataViewerProfile;
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the latest result set sorted.
|
* Gets the latest result set sorted.
|
||||||
|
|
|
@ -0,0 +1,328 @@
|
||||||
|
package org.gcube.portlets.user.geoportaldataentry.server.json;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides methods to merge two json of any nested level into a
|
||||||
|
* single json.
|
||||||
|
*
|
||||||
|
* copied from: https://github.com/hemantsonu20/json-merge
|
||||||
|
*
|
||||||
|
* @maintainer updated by Francesco Mangiacrapa at ISTI-CNR
|
||||||
|
* francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Apr 21, 2023
|
||||||
|
*/
|
||||||
|
public class JsonMerge {
|
||||||
|
|
||||||
|
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Enum MERGE_OPTION.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Apr 21, 2023
|
||||||
|
*/
|
||||||
|
public static enum MERGE_OPTION {
|
||||||
|
MERGE, REPLACE
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to merge two json objects into single json object.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* It merges two json of any nested level into a single json following below
|
||||||
|
* logic.
|
||||||
|
* </p>
|
||||||
|
* <ul>
|
||||||
|
* <li>When keys are different, both keys with there values will be copied at
|
||||||
|
* same level.</li>
|
||||||
|
* <li>
|
||||||
|
* <p>
|
||||||
|
* When keys are same at some level, following table denotes what value will be
|
||||||
|
* used.
|
||||||
|
* </p>
|
||||||
|
* <table border="1" summary="">
|
||||||
|
* <thead>
|
||||||
|
* <tr>
|
||||||
|
* <th align="left">Src / Target</th>
|
||||||
|
* <th align="left">JSON Value</th>
|
||||||
|
* <th align="left">JSON Array</th>
|
||||||
|
* <th align="left">JSON Object</th>
|
||||||
|
* </tr>
|
||||||
|
* </thead> <tbody>
|
||||||
|
* <tr>
|
||||||
|
* <td align="left">JSON Value<sup>1</sup></td>
|
||||||
|
* <td align="left">Src</td>
|
||||||
|
* <td align="left">Src</td>
|
||||||
|
* <td align="left">Src</td>
|
||||||
|
* </tr>
|
||||||
|
* <tr>
|
||||||
|
* <td align="left">JSON Array</td>
|
||||||
|
* <td align="left">Src<sup>2</sup></td>
|
||||||
|
* <td align="left">Merge</td>
|
||||||
|
* <td align="left">Src</td>
|
||||||
|
* </tr>
|
||||||
|
* <tr>
|
||||||
|
* <td align="left">JSON Object</td>
|
||||||
|
* <td align="left">Src</td>
|
||||||
|
* <td align="left">Src</td>
|
||||||
|
* <td align="left">Merge<sup>3</sup></td>
|
||||||
|
* </tr>
|
||||||
|
* </tbody>
|
||||||
|
* </table>
|
||||||
|
* <ul>
|
||||||
|
* <li><sup><strong>1</strong></sup> Json Value denotes boolean, number or
|
||||||
|
* string value in json.</li>
|
||||||
|
* <li><sup><strong>2</strong></sup> Src denotes <code>Src</code> value will be
|
||||||
|
* copied.</li>
|
||||||
|
* <li><sup><strong>3</strong></sup> Merge denotes both <code>Src</code> and
|
||||||
|
* <code>Target</code> values will be merged.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* <h2>Examples</h2>
|
||||||
|
* <h3>Example 1</h3>
|
||||||
|
* <p>
|
||||||
|
* <strong>Source Json</strong>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* {@code
|
||||||
|
* {
|
||||||
|
* "name": "json-merge-src"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
* <p>
|
||||||
|
* <strong>Target Json</strong>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* {@code
|
||||||
|
* {
|
||||||
|
* "name": "json-merge-target"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
* <p>
|
||||||
|
* <strong>Output</strong>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* {@code
|
||||||
|
* {
|
||||||
|
* "name": "json-merge-src"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <h3>Example 2</h3>
|
||||||
|
* <p>
|
||||||
|
* <strong>Source Json</strong>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* {@code
|
||||||
|
* {
|
||||||
|
* "level1": {
|
||||||
|
* "key1": "SrcValue1"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
* <p>
|
||||||
|
* <strong>Target Json</strong>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* {@code
|
||||||
|
* {
|
||||||
|
* "level1": {
|
||||||
|
* "key1": "targetValue1",
|
||||||
|
* "level2": {
|
||||||
|
* "key2": "value2"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
* <p>
|
||||||
|
* <strong>Output</strong>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* {@code
|
||||||
|
* {
|
||||||
|
* "level1": {
|
||||||
|
* "key1": "SrcValue1",
|
||||||
|
* "level2": {
|
||||||
|
* "key2": "value2"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param srcJsonStr source json string
|
||||||
|
* @param targetJsonStr target json string
|
||||||
|
* @param option the option
|
||||||
|
* @return merged json as a string
|
||||||
|
*/
|
||||||
|
public static String merge(String srcJsonStr, String targetJsonStr, MERGE_OPTION option) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (option == null)
|
||||||
|
option = MERGE_OPTION.MERGE;
|
||||||
|
|
||||||
|
JsonNode srcNode = OBJECT_MAPPER.readTree(srcJsonStr);
|
||||||
|
JsonNode targetNode = OBJECT_MAPPER.readTree(targetJsonStr);
|
||||||
|
JsonNode result = merge(srcNode, targetNode, option);
|
||||||
|
return OBJECT_MAPPER.writeValueAsString(result);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new JsonMergeException("Unable to merge json", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merge.
|
||||||
|
*
|
||||||
|
* @param srcNode the src node
|
||||||
|
* @param targetNode the target node
|
||||||
|
* @param option the option
|
||||||
|
* @return the json node
|
||||||
|
*/
|
||||||
|
public static JsonNode merge(JsonNode srcNode, JsonNode targetNode, MERGE_OPTION option) {
|
||||||
|
|
||||||
|
if (option == null)
|
||||||
|
option = MERGE_OPTION.MERGE;
|
||||||
|
|
||||||
|
// if both nodes are object node, merged object node is returned
|
||||||
|
if (srcNode.isObject() && targetNode.isObject()) {
|
||||||
|
return merge((ObjectNode) srcNode, (ObjectNode) targetNode, option);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if both nodes are array node, merged array node is returned
|
||||||
|
if (srcNode.isArray() && targetNode.isArray()) {
|
||||||
|
return mergeArray((ArrayNode) srcNode, (ArrayNode) targetNode, option);
|
||||||
|
}
|
||||||
|
|
||||||
|
// special case when src node is null
|
||||||
|
if (srcNode.isNull()) {
|
||||||
|
return targetNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return srcNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merge.
|
||||||
|
*
|
||||||
|
* @param srcNode the src node
|
||||||
|
* @param targetNode the target node
|
||||||
|
* @param option the option
|
||||||
|
* @return the object node
|
||||||
|
*/
|
||||||
|
public static ObjectNode merge(ObjectNode srcNode, ObjectNode targetNode, MERGE_OPTION option) {
|
||||||
|
|
||||||
|
ObjectNode result = OBJECT_MAPPER.createObjectNode();
|
||||||
|
|
||||||
|
Iterator<Map.Entry<String, JsonNode>> srcItr = srcNode.fields();
|
||||||
|
while (srcItr.hasNext()) {
|
||||||
|
|
||||||
|
Map.Entry<String, JsonNode> entry = srcItr.next();
|
||||||
|
|
||||||
|
// check key in src json exists in target json or not at same level
|
||||||
|
if (targetNode.has(entry.getKey())) {
|
||||||
|
result.set(entry.getKey(), merge(entry.getValue(), targetNode.get(entry.getKey()), option));
|
||||||
|
} else {
|
||||||
|
// if key in src json doesn't exist in target json, just copy the same in result
|
||||||
|
result.set(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy fields from target json into result which were missing in src json
|
||||||
|
Iterator<Map.Entry<String, JsonNode>> targetItr = targetNode.fields();
|
||||||
|
while (targetItr.hasNext()) {
|
||||||
|
Map.Entry<String, JsonNode> entry = targetItr.next();
|
||||||
|
if (!result.has(entry.getKey())) {
|
||||||
|
result.set(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merge.
|
||||||
|
*
|
||||||
|
* @param srcNode the src node
|
||||||
|
* @param targetNode the target node
|
||||||
|
* @param option the option
|
||||||
|
* @return the array node
|
||||||
|
*/
|
||||||
|
public static ArrayNode mergeArray(ArrayNode srcNode, ArrayNode targetNode, MERGE_OPTION option) {
|
||||||
|
ArrayNode result = OBJECT_MAPPER.createArrayNode();
|
||||||
|
|
||||||
|
switch (option) {
|
||||||
|
case REPLACE:
|
||||||
|
//Replacing source json value as result
|
||||||
|
return result.addAll(srcNode);
|
||||||
|
//return result.addAll(srcNode).addAll(targetNode);
|
||||||
|
default:
|
||||||
|
return mergeSet(srcNode, targetNode);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added by Francesco Mangiacrapa Merge set.
|
||||||
|
*
|
||||||
|
* @param srcNode the src node
|
||||||
|
* @param targetNode the target node
|
||||||
|
* @return the array node
|
||||||
|
*/
|
||||||
|
public static ArrayNode mergeSet(ArrayNode srcNode, ArrayNode targetNode) {
|
||||||
|
ArrayNode result = OBJECT_MAPPER.createArrayNode();
|
||||||
|
|
||||||
|
HashSet<JsonNode> set = new HashSet<>();
|
||||||
|
|
||||||
|
set = toHashSet(set, srcNode);
|
||||||
|
set = toHashSet(set, targetNode);
|
||||||
|
|
||||||
|
Iterator<JsonNode> itr = set.iterator();
|
||||||
|
while (itr != null && itr.hasNext()) {
|
||||||
|
JsonNode arrayValue = itr.next();
|
||||||
|
result.add(arrayValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To hash set.
|
||||||
|
*
|
||||||
|
* @param set the set
|
||||||
|
* @param srcNode the src node
|
||||||
|
* @return the hash set
|
||||||
|
*/
|
||||||
|
public static HashSet<JsonNode> toHashSet(HashSet<JsonNode> set, ArrayNode srcNode) {
|
||||||
|
if (srcNode != null) {
|
||||||
|
Iterator<JsonNode> itr = srcNode.elements();
|
||||||
|
while (itr != null && itr.hasNext()) {
|
||||||
|
JsonNode arrayValue = itr.next();
|
||||||
|
set.add(arrayValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package org.gcube.portlets.user.geoportaldataentry.server.json;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception to be thrown in case of any error occured while merging two json.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class JsonMergeException extends RuntimeException {
|
||||||
|
|
||||||
|
public JsonMergeException() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonMergeException(String msg) {
|
||||||
|
super(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonMergeException(String msg, Throwable th) {
|
||||||
|
super(msg, th);
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,28 +12,31 @@
|
||||||
|
|
||||||
<inherits name="com.google.gwt.json.JSON" />
|
<inherits name="com.google.gwt.json.JSON" />
|
||||||
|
|
||||||
|
<inherits
|
||||||
|
name='org.gcube.application.geoportalcommon.GeoportalDataCommon' />
|
||||||
|
|
||||||
|
<inherits
|
||||||
|
name='org.gcube.application.geoportaldatamapper.GeoportalDataMapper' />
|
||||||
|
|
||||||
|
<inherits
|
||||||
|
name='org.gcube.portlets.widgets.gdvw.geoportal_data_viewer_widget' />
|
||||||
|
|
||||||
|
|
||||||
<inherits
|
<inherits
|
||||||
name='org.gcube.portlets.widgets.mpformbuilder.MetadataProfileFormBuilder' />
|
name='org.gcube.portlets.widgets.mpformbuilder.MetadataProfileFormBuilder' />
|
||||||
|
|
||||||
<inherits name='org.gcube.application.geoportalcommon.GeoportalDataCommon' />
|
|
||||||
|
|
||||||
<!-- Inherit the default GWT style sheet. You can change -->
|
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
|
||||||
<!-- the theme of your GWT application by uncommenting -->
|
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
|
||||||
<!-- any one of the following lines. -->
|
|
||||||
<!--<inherits name='com.google.gwt.user.theme.standard.Standard' /> -->
|
|
||||||
|
|
||||||
<inherits name='org.gcube.portlets.widgets.mpformbuilder.MetadataProfileFormBuilder' />
|
|
||||||
|
|
||||||
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
|
<!-- Other module inherits -->
|
||||||
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
|
|
||||||
|
|
||||||
<!-- Other module inherits -->
|
<!-- Specify the app entry point class. -->
|
||||||
|
<entry-point
|
||||||
|
class='org.gcube.portlets.user.geoportaldataentry.client.GeoPortalDataEntryApp' />
|
||||||
|
|
||||||
<!-- Specify the app entry point class. -->
|
<!-- Specify the paths for translatable code -->
|
||||||
<entry-point class='org.gcube.portlets.user.geoportaldataentry.client.GeoPortalDataEntryApp' />
|
<source path='client' />
|
||||||
|
<source path='shared' />
|
||||||
<!-- Specify the paths for translatable code -->
|
|
||||||
<source path='client' />
|
|
||||||
<source path='shared' />
|
|
||||||
|
|
||||||
</module>
|
</module>
|
||||||
|
|
|
@ -100,6 +100,9 @@ h1 {
|
||||||
max-height: 700px !important;
|
max-height: 700px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.modal-body-edit {
|
||||||
|
max-height: none !important;
|
||||||
|
}
|
||||||
.disable-div {
|
.disable-div {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
@ -110,12 +113,16 @@ h1 {
|
||||||
padding: 10px !important;
|
padding: 10px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.gna-dataentry-form-fieldset fieldset {
|
.form-fieldset-edit .control-group {
|
||||||
margin: 10px !important;
|
margin-bottom: 15px !important;
|
||||||
border: 1px groove #ddd !important;
|
|
||||||
padding: 10px !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form-fieldset-edit .control-group > span {
|
||||||
|
padding-top: 3px !important;
|
||||||
|
padding-bottom: 3px !important;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
.table-current-content {
|
.table-current-content {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: #efefef !important;
|
background-color: #efefef !important;
|
||||||
|
@ -270,4 +277,42 @@ h1 {
|
||||||
|
|
||||||
.no_modal_body_max_height .modal-body {
|
.no_modal_body_max_height .modal-body {
|
||||||
max-height: 90% !important;
|
max-height: 90% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** OVERRDING legend-style into 'metadata-profile-form-builder-widget' */
|
||||||
|
|
||||||
|
.legend-style {
|
||||||
|
width: auto !important;
|
||||||
|
padding-left: 10px !important;
|
||||||
|
padding-top: 0px !important;
|
||||||
|
padding-right: 10px !important;
|
||||||
|
margin-bottom: 0px !important;
|
||||||
|
border-bottom: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legend-style small {
|
||||||
|
display: block;
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** END OVERRDING legend-style into 'metadata-profile-form-builder-widget' */
|
||||||
|
|
||||||
|
|
||||||
|
/** OVERRDING legend-style into 'metadata-profile-form-builder-widget' */
|
||||||
|
|
||||||
|
.legend-style {
|
||||||
|
width: auto !important;
|
||||||
|
padding-left: 10px !important;
|
||||||
|
padding-top: 0px !important;
|
||||||
|
padding-right: 10px !important;
|
||||||
|
margin-bottom: 0px !important;
|
||||||
|
border-bottom: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legend-style small {
|
||||||
|
display: block;
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** END OVERRDING legend-style into 'metadata-profile-form-builder-widget' */
|
|
@ -0,0 +1,231 @@
|
||||||
|
package org.gcube.application;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import javax.ws.rs.WebApplicationException;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.access.Access;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.access.AccessPolicy;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller;
|
||||||
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.MongoServiceUtil;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploadedRemote;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.Random;
|
||||||
|
|
||||||
|
public class Service_Tests {
|
||||||
|
|
||||||
|
private static final String GCUBE_CONFIG_PROPERTIES_FILENAME = "gcube_config.properties";
|
||||||
|
// APP Working Directory + /src/test/resources must be the location of
|
||||||
|
// gcube_config.properties
|
||||||
|
private static String gcube_config_path = String.format("%s/%s",
|
||||||
|
System.getProperty("user.dir") + "/src/test/resources", GCUBE_CONFIG_PROPERTIES_FILENAME);
|
||||||
|
private static String CONTEXT;
|
||||||
|
private static String TOKEN;
|
||||||
|
|
||||||
|
private UseCaseDescriptorCaller clientUCD = null;
|
||||||
|
private ProjectsCaller clientPrj = null;
|
||||||
|
|
||||||
|
private static String PROFILE_ID = "profiledConcessioni";
|
||||||
|
private static String PROJECT_ID = "644a66e944aad51c80409a3b";
|
||||||
|
|
||||||
|
private static String MY_LOGIN = "francesco.mangiacrapa";
|
||||||
|
|
||||||
|
public static final String JSON_$_POINTER = "$";
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(Service_Tests.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read context settings.
|
||||||
|
*/
|
||||||
|
public static void readContextSettings() {
|
||||||
|
|
||||||
|
try (InputStream input = new FileInputStream(gcube_config_path)) {
|
||||||
|
|
||||||
|
Properties prop = new Properties();
|
||||||
|
|
||||||
|
// load a properties file
|
||||||
|
prop.load(input);
|
||||||
|
|
||||||
|
CONTEXT = prop.getProperty("CONTEXT");
|
||||||
|
TOKEN = prop.getProperty("TOKEN");
|
||||||
|
// get the property value and print it out
|
||||||
|
System.out.println("CONTEXT: " + CONTEXT);
|
||||||
|
System.out.println("TOKEN: " + TOKEN);
|
||||||
|
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Before
|
||||||
|
public void init() {
|
||||||
|
readContextSettings();
|
||||||
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
clientPrj = GeoportalClientCaller.projects();
|
||||||
|
clientUCD = GeoportalClientCaller.useCaseDescriptors();
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test
|
||||||
|
public void deleteFileSet_ServiceTest() throws Exception {
|
||||||
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
|
||||||
|
boolean ignore_errors = false;
|
||||||
|
String path = "$.abstractRelazione.filesetIta";
|
||||||
|
|
||||||
|
Project doc = clientPrj.getProjectByID(PROFILE_ID, PROJECT_ID);
|
||||||
|
|
||||||
|
// JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
|
||||||
|
// List<String> matchingPaths = wrapper.getMatchingPaths(path);
|
||||||
|
//
|
||||||
|
// LOG.info("matchingPaths is: " + matchingPaths);
|
||||||
|
//
|
||||||
|
// String error = null;
|
||||||
|
// if (matchingPaths.isEmpty()) {
|
||||||
|
// error = "No Registered FileSet found at " + path;
|
||||||
|
// if (!ignore_errors) {
|
||||||
|
// throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (matchingPaths.size() > 1 && !ignore_errors) {
|
||||||
|
// error = "Multiple Fileset (" + matchingPaths.size() + ") matching " + path;
|
||||||
|
// if (!ignore_errors)
|
||||||
|
// throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (error != null && ignore_errors) {
|
||||||
|
// LOG.info("Error detected {}. Ignoring it and returning input doc", error);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// List<Object> listPath = wrapper.getByPath(path);
|
||||||
|
// LOG.info("List path: " + listPath);
|
||||||
|
// RegisteredFileSet fs = Serialization.convert(listPath.get(0), RegisteredFileSet.class);
|
||||||
|
// LOG.info("Going to delete {}", fs);
|
||||||
|
|
||||||
|
LOG.info("Going to delete {}", path);
|
||||||
|
Project newDoc = clientPrj.deleteFileset(PROFILE_ID, PROJECT_ID, path, true, true);
|
||||||
|
LOG.info("newDoc {}", newDoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test
|
||||||
|
public void registerFileSet() throws Exception {
|
||||||
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
|
||||||
|
Project theProject = clientPrj.getProjectByID(PROFILE_ID, PROJECT_ID);
|
||||||
|
|
||||||
|
MongoServiceUtil mongoService = new MongoServiceUtil();
|
||||||
|
|
||||||
|
Access access = new Access();
|
||||||
|
access.setLicense("CC-BY");
|
||||||
|
access.setPolicy(AccessPolicy.OPEN);
|
||||||
|
|
||||||
|
String sectionJSONPath = "$.abstractRelazione";
|
||||||
|
String fieldName = "filesetIta";
|
||||||
|
String fieldDefinition = "$.abstractRelazione._children[?(@.filesetIta)]";
|
||||||
|
|
||||||
|
String theFileName = "Application_Profile_for_CSW_2.0-2.pdf";
|
||||||
|
String theFileURL = "https://data.dev.d4science.org/shub/E_bnN2aDJZZUMySy9peE9ScEVLNVFNWjBOZWx0cXQ2UUFkQ2E3Rjc1S29EelJIMEJGbDRoczBnbHVPWHczZTNQTw==";
|
||||||
|
|
||||||
|
FileUploadedRemote file = new FileUploadedRemote();
|
||||||
|
file.setUrl(theFileURL);
|
||||||
|
file.setFileName(theFileName);
|
||||||
|
|
||||||
|
File input = null;
|
||||||
|
File output = null;
|
||||||
|
try {
|
||||||
|
File tempDir = Files.createTempDirectory("GEOPORTAL_REPLACE_FILES_").toFile();
|
||||||
|
String tmpDirPath = tempDir.getAbsolutePath();
|
||||||
|
if (file instanceof FileUploadedRemote) {
|
||||||
|
FileUploadedRemote remote = (FileUploadedRemote) file;
|
||||||
|
LOG.info("Uploaded file is remote: " + remote.getUrl());
|
||||||
|
InputStream in = new URL(remote.getUrl()).openStream();
|
||||||
|
String fileName = (remote.getFileName() == null || remote.getFileName().isEmpty())
|
||||||
|
? "file_" + Random.nextInt()
|
||||||
|
: remote.getFileName();
|
||||||
|
LOG.info("the fileName is: " + fileName);
|
||||||
|
output = new File(tmpDirPath, fileName);
|
||||||
|
Path outputAbsolutePath = Paths.get(output.getAbsolutePath());
|
||||||
|
Files.copy(in, outputAbsolutePath, StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
LOG.info("Remote file: " + remote.getUrl() + ", copied to new file: " + output.getName());
|
||||||
|
} else {
|
||||||
|
LOG.info("Uploaded file is local: " + file.getTempSystemPath());
|
||||||
|
input = new File(file.getTempSystemPath());
|
||||||
|
output = new File(tmpDirPath, file.getFileName());
|
||||||
|
copyContent(input, output);
|
||||||
|
LOG.info("Temp file: " + file.getTempSystemPath() + ", copied to new file: " + output.getName());
|
||||||
|
}
|
||||||
|
//tempDir.deleteOnExit();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Skipping file: " + file.getFileName() + ". Error: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
|
||||||
|
File fileset = output;
|
||||||
|
LOG.info("final fileName is: " + fileset.getName());
|
||||||
|
mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath, fieldName, fieldDefinition, access, fileset);
|
||||||
|
|
||||||
|
LOG.info("registerFileSet: finished!");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy content.
|
||||||
|
*
|
||||||
|
* @param a the a
|
||||||
|
* @param b the b
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static void copyContent(File a, File b) throws Exception {
|
||||||
|
FileInputStream in = new FileInputStream(a);
|
||||||
|
FileOutputStream out = new FileOutputStream(b);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
int n;
|
||||||
|
|
||||||
|
// read() function to read the
|
||||||
|
// byte of data
|
||||||
|
while ((n = in.read()) != -1) {
|
||||||
|
// write() function to write
|
||||||
|
// the byte of data
|
||||||
|
out.write(n);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (in != null) {
|
||||||
|
|
||||||
|
// close() function to close the
|
||||||
|
// stream
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
// close() function to close
|
||||||
|
// the stream
|
||||||
|
if (out != null) {
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOG.debug("File Copied");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,15 +1,34 @@
|
||||||
package org.gcube.portlets.user.geoportaldataentry;
|
package org.gcube.portlets.user.geoportaldataentry;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import javax.ws.rs.WebApplicationException;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.gcube.application.geoportal.client.utils.Serialization;
|
import org.gcube.application.geoportal.client.utils.Serialization;
|
||||||
|
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.access.Access;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.access.AccessPolicy;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
|
||||||
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
|
||||||
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
||||||
|
import org.gcube.application.geoportalcommon.ConvertToDataServiceModel;
|
||||||
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
|
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
|
||||||
import org.gcube.application.geoportalcommon.ProjectDVBuilder;
|
import org.gcube.application.geoportalcommon.ProjectDVBuilder;
|
||||||
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
|
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
|
||||||
|
@ -31,10 +50,18 @@ import org.gcube.application.geoportalcommon.shared.geoportal.view.SectionView;
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.view.SubDocumentView;
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.SubDocumentView;
|
||||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.FileSetDataObject;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.FormDataObjectToJSON;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.FormDataObjectToJSON.JSONObjectOrdered;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.MongoServiceUtil;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.json.JsonMerge;
|
||||||
|
import org.gcube.portlets.user.geoportaldataentry.server.json.JsonMerge.MERGE_OPTION;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.server.MetadataProfileFormBuilderServiceImpl;
|
import org.gcube.portlets.widgets.mpformbuilder.server.MetadataProfileFormBuilderServiceImpl;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
||||||
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper;
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploadedRemote;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -44,18 +71,28 @@ import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
|
import com.google.gwt.user.client.Random;
|
||||||
|
import com.jayway.jsonpath.Configuration;
|
||||||
|
import com.jayway.jsonpath.DocumentContext;
|
||||||
import com.jayway.jsonpath.JsonPath;
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import com.jayway.jsonpath.spi.json.GsonJsonProvider;
|
||||||
import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider;
|
import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider;
|
||||||
|
|
||||||
public class Complex_Tests {
|
public class Complex_Tests {
|
||||||
|
|
||||||
|
private static final String GCUBE_CONFIG_PROPERTIES_FILENAME = "gcube_config.properties";
|
||||||
|
// APP Working Directory + /src/test/resources must be the location of
|
||||||
|
// gcube_config.properties
|
||||||
|
private static String gcube_config_path = String.format("%s/%s",
|
||||||
|
System.getProperty("user.dir") + "/src/test/resources", GCUBE_CONFIG_PROPERTIES_FILENAME);
|
||||||
|
private static String CONTEXT;
|
||||||
|
private static String TOKEN;
|
||||||
|
|
||||||
private UseCaseDescriptorCaller clientUCD = null;
|
private UseCaseDescriptorCaller clientUCD = null;
|
||||||
private ProjectsCaller clientPrj = null;
|
private ProjectsCaller clientPrj = null;
|
||||||
private static String CONTEXT = "/gcube/devsec/devVRE";
|
|
||||||
private static String TOKEN = ""; // devVRE
|
|
||||||
private static String PROFILE_ID = "profiledConcessioni";
|
|
||||||
|
|
||||||
private static String PROJECT_ID = "632c633155e2947b0278c999";
|
private static String PROFILE_ID = "profiledConcessioni";
|
||||||
|
private static String PROJECT_ID = "644a66e944aad51c80409a3b";
|
||||||
|
|
||||||
private static String MY_LOGIN = "francesco.mangiacrapa";
|
private static String MY_LOGIN = "francesco.mangiacrapa";
|
||||||
|
|
||||||
|
@ -94,15 +131,149 @@ public class Complex_Tests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Before
|
/**
|
||||||
|
* Read context settings.
|
||||||
|
*/
|
||||||
|
public static void readContextSettings() {
|
||||||
|
|
||||||
|
try (InputStream input = new FileInputStream(gcube_config_path)) {
|
||||||
|
|
||||||
|
Properties prop = new Properties();
|
||||||
|
|
||||||
|
// load a properties file
|
||||||
|
prop.load(input);
|
||||||
|
|
||||||
|
CONTEXT = prop.getProperty("CONTEXT");
|
||||||
|
TOKEN = prop.getProperty("TOKEN");
|
||||||
|
// get the property value and print it out
|
||||||
|
System.out.println("CONTEXT: " + CONTEXT);
|
||||||
|
System.out.println("TOKEN: " + TOKEN);
|
||||||
|
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
public void init() {
|
public void init() {
|
||||||
|
readContextSettings();
|
||||||
ScopeProvider.instance.set(CONTEXT);
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
SecurityTokenProvider.instance.set(TOKEN);
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
clientPrj = GeoportalClientCaller.projects();
|
clientPrj = GeoportalClientCaller.projects();
|
||||||
clientUCD = GeoportalClientCaller.useCaseDescriptors();
|
clientUCD = GeoportalClientCaller.useCaseDescriptors();
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Before
|
// @Test
|
||||||
|
public void testSectionPathInnerParse() throws Exception {
|
||||||
|
String sectionPath = "$.abstractRelazione";
|
||||||
|
|
||||||
|
String profileID = "profiledConcessioni";
|
||||||
|
String projectID = "6425598a8593b215a1281e1c";
|
||||||
|
|
||||||
|
Configuration configurationGSON = Configuration.builder().jsonProvider(new GsonJsonProvider()).build();
|
||||||
|
|
||||||
|
ProjectsCaller client = GeoportalClientCaller.projects();
|
||||||
|
|
||||||
|
Project proejct = client.getProjectByID(profileID, projectID);
|
||||||
|
|
||||||
|
String jsonSourceProject = proejct.getTheDocument().toJson();
|
||||||
|
|
||||||
|
// If the section path is the Root document, passed as "$.", fixing as "$"
|
||||||
|
if (sectionPath.compareTo(FormDataObjectToJSON.JSON_$_POINTER + ".") == 0)
|
||||||
|
sectionPath = FormDataObjectToJSON.JSON_$_POINTER;
|
||||||
|
|
||||||
|
LOG.info("theString: {}", jsonSourceProject);
|
||||||
|
com.google.gson.JsonObject currentSectionJObject = JsonPath.parse(jsonSourceProject, configurationGSON)
|
||||||
|
.read(sectionPath);
|
||||||
|
LOG.info("currentSectionJObject: {}", currentSectionJObject.toString());
|
||||||
|
LOG.info("sourceSectionObject: {}", currentSectionJObject.toString());
|
||||||
|
|
||||||
|
JSONObject targetSectionJObject = new JSONObjectOrdered().instance();
|
||||||
|
targetSectionJObject.put("abstractIta", "Prova REJECT 1");
|
||||||
|
targetSectionJObject.put("titolo", "Prova REJECT abstract relazione di scavo 1");
|
||||||
|
LOG.info("targetSectionJObject: {}", targetSectionJObject.toString());
|
||||||
|
|
||||||
|
String mergedDoc = JsonMerge.merge(targetSectionJObject.toString(), currentSectionJObject.toString(),
|
||||||
|
MERGE_OPTION.REPLACE);
|
||||||
|
LOG.info("output: {}", mergedDoc);
|
||||||
|
|
||||||
|
String newDocJson;
|
||||||
|
// Updating path is first level of the root
|
||||||
|
if (sectionPath.equals(FormDataObjectToJSON.JSON_$_POINTER)) {
|
||||||
|
// The merged DOC is the root Document
|
||||||
|
newDocJson = mergedDoc;
|
||||||
|
} else {
|
||||||
|
// The merged DOC is a child of the root Document
|
||||||
|
Gson gson = new Gson();
|
||||||
|
JsonObject gsonOject = gson.fromJson(mergedDoc, JsonObject.class);
|
||||||
|
// Putting the merged section into Document
|
||||||
|
DocumentContext newContextDocJson = JsonPath.parse(jsonSourceProject, configurationGSON).set(sectionPath,
|
||||||
|
gsonOject);
|
||||||
|
newDocJson = newContextDocJson.json().toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Document updatedDocument = Serialization.read(newDocJson.toString(), Document.class);
|
||||||
|
LOG.info("New document is: {}", updatedDocument.toJson());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Test
|
||||||
|
public void testSectionPathRootParse() throws Exception {
|
||||||
|
String sectionPath = "$.";
|
||||||
|
|
||||||
|
String profileID = "profiledConcessioni";
|
||||||
|
String projectID = "6425598a8593b215a1281e1c";
|
||||||
|
|
||||||
|
Configuration configurationGSON = Configuration.builder().jsonProvider(new GsonJsonProvider()).build();
|
||||||
|
|
||||||
|
ProjectsCaller client = GeoportalClientCaller.projects();
|
||||||
|
|
||||||
|
Project proejct = client.getProjectByID(profileID, projectID);
|
||||||
|
|
||||||
|
String jsonSourceProject = proejct.getTheDocument().toJson();
|
||||||
|
|
||||||
|
// If the section path is the Root document, passed as "$.", fixing as "$"
|
||||||
|
if (sectionPath.compareTo(FormDataObjectToJSON.JSON_$_POINTER + ".") == 0)
|
||||||
|
sectionPath = FormDataObjectToJSON.JSON_$_POINTER;
|
||||||
|
|
||||||
|
LOG.info("theString: {}", jsonSourceProject);
|
||||||
|
com.google.gson.JsonObject currentSectionJObject = JsonPath.parse(jsonSourceProject, configurationGSON)
|
||||||
|
.read(sectionPath);
|
||||||
|
LOG.info("currentSectionJObject: {}", currentSectionJObject.toString());
|
||||||
|
LOG.info("sourceSectionObject: {}", currentSectionJObject.toString());
|
||||||
|
|
||||||
|
JSONObject targetSectionJObject = new JSONObjectOrdered().instance();
|
||||||
|
targetSectionJObject.put("nome", proejct.getTheDocument().get("nome") + " 1");
|
||||||
|
targetSectionJObject.put("titolo", proejct.getTheDocument().get("introduzione") + " 1");
|
||||||
|
LOG.info("targetSectionJObject: {}", targetSectionJObject.toString());
|
||||||
|
|
||||||
|
// JSONObject mergedSection = FormDataObjectToJSON.deepMerge(sourceSectionObject,
|
||||||
|
// targetSectionJObject);
|
||||||
|
|
||||||
|
String output = JsonMerge.merge(targetSectionJObject.toString(), currentSectionJObject.toString(),
|
||||||
|
MERGE_OPTION.REPLACE);
|
||||||
|
LOG.info("output: {}", output);
|
||||||
|
|
||||||
|
Gson gson = new Gson();
|
||||||
|
JsonObject gsonOject = gson.fromJson(output, JsonObject.class);
|
||||||
|
|
||||||
|
// Putting the merged section into Document
|
||||||
|
DocumentContext newContextDocJson = JsonPath.parse(jsonSourceProject, configurationGSON).set(sectionPath,
|
||||||
|
gsonOject);
|
||||||
|
// DocumentContext newDocument = JsonPath.parse(jsonSourceProject,
|
||||||
|
// configurationGSON).set(sectionPath, new JSONObject(output));
|
||||||
|
// String newDocJson = JsonPath.parse(jsonSourceProject).set(sectionPath, new
|
||||||
|
// JSONObject(output)).jsonString();
|
||||||
|
String newDocJson = newContextDocJson.json().toString();
|
||||||
|
LOG.info("Going to call updateProject with document: {}", newDocJson);
|
||||||
|
|
||||||
|
Document updatedDocument = Serialization.read(newDocJson.toString(), Document.class);
|
||||||
|
LOG.info("New document is: {}", updatedDocument.toJson());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Before
|
||||||
public void preloadgCubeProfilesForUCDs() {
|
public void preloadgCubeProfilesForUCDs() {
|
||||||
LOG.debug("preloadgCubeProfilesForUCDs called");
|
LOG.debug("preloadgCubeProfilesForUCDs called");
|
||||||
try {
|
try {
|
||||||
|
@ -164,6 +335,145 @@ public class Complex_Tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
//@Test
|
||||||
|
public void deleteFileSet_ServiceTest() throws Exception {
|
||||||
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
|
||||||
|
boolean ignore_errors = false;
|
||||||
|
String path = "$.abstractRelazione.filesetIta";
|
||||||
|
|
||||||
|
Project doc = clientPrj.getProjectByID(PROFILE_ID, PROJECT_ID);
|
||||||
|
|
||||||
|
JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
|
||||||
|
List<String> matchingPaths = wrapper.getMatchingPaths(path);
|
||||||
|
|
||||||
|
LOG.info("matchingPaths is: " + matchingPaths);
|
||||||
|
|
||||||
|
String error = null;
|
||||||
|
if (matchingPaths.isEmpty()) {
|
||||||
|
error = "No Registered FileSet found at " + path;
|
||||||
|
if (!ignore_errors) {
|
||||||
|
throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (matchingPaths.size() > 1 && !ignore_errors) {
|
||||||
|
error = "Multiple Fileset (" + matchingPaths.size() + ") matching " + path;
|
||||||
|
if (!ignore_errors)
|
||||||
|
throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error != null && ignore_errors) {
|
||||||
|
LOG.info("Error detected {}. Ignoring it and returning input doc", error);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Object> listPath = wrapper.getByPath(path);
|
||||||
|
LOG.info("List path: "+listPath);
|
||||||
|
// RegisteredFileSet fs = Serialization.convert(listPath.get(0), RegisteredFileSet.class);
|
||||||
|
// LOG.info("Going to delete {}", fs);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test
|
||||||
|
public void registerFileSet() throws Exception {
|
||||||
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
|
||||||
|
Project theProject = clientPrj.getProjectByID(PROFILE_ID, PROJECT_ID);
|
||||||
|
|
||||||
|
MongoServiceUtil mongoService = new MongoServiceUtil();
|
||||||
|
|
||||||
|
Access access = new Access();
|
||||||
|
access.setLicense("CC-BY");
|
||||||
|
access.setPolicy(AccessPolicy.OPEN);
|
||||||
|
|
||||||
|
String sectionJSONPath = "$.abstractRelazione";
|
||||||
|
String fieldName = "filesetIta";
|
||||||
|
String fieldDefinition = "$.abstractRelazione._children[?(@.filesetIta)]";
|
||||||
|
|
||||||
|
String theFileName = "Application_Profile_for_CSW_2.0-2.pdf";
|
||||||
|
String theFileURL = "https://data.dev.d4science.org/shub/E_bnN2aDJZZUMySy9peE9ScEVLNVFNWjBOZWx0cXQ2UUFkQ2E3Rjc1S29EelJIMEJGbDRoczBnbHVPWHczZTNQTw==";
|
||||||
|
|
||||||
|
FileUploadedRemote file = new FileUploadedRemote();
|
||||||
|
file.setUrl(theFileURL);
|
||||||
|
file.setFileName(theFileName);
|
||||||
|
|
||||||
|
File input = null;
|
||||||
|
File output = null;
|
||||||
|
try {
|
||||||
|
File tempDir = Files.createTempDirectory("GEOPORTAL_REPLACE_FILES_").toFile();
|
||||||
|
String tmpDirPath = tempDir.getAbsolutePath();
|
||||||
|
if (file instanceof FileUploadedRemote) {
|
||||||
|
FileUploadedRemote remote = (FileUploadedRemote) file;
|
||||||
|
LOG.info("Uploaded file is remote: " + remote.getUrl());
|
||||||
|
InputStream in = new URL(remote.getUrl()).openStream();
|
||||||
|
String fileName = (remote.getFileName() == null || remote.getFileName().isEmpty())
|
||||||
|
? "file_" + Random.nextInt()
|
||||||
|
: remote.getFileName();
|
||||||
|
LOG.info("the fileName is: " + fileName);
|
||||||
|
output = new File(tmpDirPath, fileName);
|
||||||
|
Path outputAbsolutePath = Paths.get(output.getAbsolutePath());
|
||||||
|
Files.copy(in, outputAbsolutePath, StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
LOG.info("Remote file: " + remote.getUrl() + ", copied to new file: " + output.getName());
|
||||||
|
} else {
|
||||||
|
LOG.info("Uploaded file is local: " + file.getTempSystemPath());
|
||||||
|
input = new File(file.getTempSystemPath());
|
||||||
|
output = new File(tmpDirPath, file.getFileName());
|
||||||
|
copyContent(input, output);
|
||||||
|
LOG.info("Temp file: " + file.getTempSystemPath() + ", copied to new file: " + output.getName());
|
||||||
|
}
|
||||||
|
// tempDir.deleteOnExit();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Skipping file: " + file.getFileName() + ". Error: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
|
||||||
|
File fileset = output;
|
||||||
|
LOG.info("the fileName is: " + fileset.getName());
|
||||||
|
|
||||||
|
mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath, fieldName, fieldDefinition,
|
||||||
|
access, fileset);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy content.
|
||||||
|
*
|
||||||
|
* @param a the a
|
||||||
|
* @param b the b
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static void copyContent(File a, File b) throws Exception {
|
||||||
|
FileInputStream in = new FileInputStream(a);
|
||||||
|
FileOutputStream out = new FileOutputStream(b);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
int n;
|
||||||
|
|
||||||
|
// read() function to read the
|
||||||
|
// byte of data
|
||||||
|
while ((n = in.read()) != -1) {
|
||||||
|
// write() function to write
|
||||||
|
// the byte of data
|
||||||
|
out.write(n);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (in != null) {
|
||||||
|
|
||||||
|
// close() function to close the
|
||||||
|
// stream
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
// close() function to close
|
||||||
|
// the stream
|
||||||
|
if (out != null) {
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOG.debug("File Copied");
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Test
|
||||||
public void testReadProjectForUCDDataEntry() {
|
public void testReadProjectForUCDDataEntry() {
|
||||||
ScopeProvider.instance.set(CONTEXT);
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
SecurityTokenProvider.instance.set(TOKEN);
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
@ -295,7 +605,7 @@ public class Complex_Tests {
|
||||||
String filesetJSONPath = String.format("%s.%s", JSON_$_POINTER, filePath.getFieldName());
|
String filesetJSONPath = String.format("%s.%s", JSON_$_POINTER, filePath.getFieldName());
|
||||||
List<Payload> listPayloads = readPayloadsForFileset(filesetJSONPath, fromSectionDocJSON);
|
List<Payload> listPayloads = readPayloadsForFileset(filesetJSONPath, fromSectionDocJSON);
|
||||||
FilesetDV filesetDV = new FilesetDV();
|
FilesetDV filesetDV = new FilesetDV();
|
||||||
filesetDV.setName(filePath.getGcubeProfileFieldName());
|
filesetDV.setGcubeProfileFieldName(filePath.getGcubeProfileFieldName());
|
||||||
for (Payload payload : listPayloads) {
|
for (Payload payload : listPayloads) {
|
||||||
PayloadDV payloadDV = ConvertToDataValueObjectModel.toPayloadDV(payload);
|
PayloadDV payloadDV = ConvertToDataValueObjectModel.toPayloadDV(payload);
|
||||||
filesetDV.addPayloadDV(payloadDV);
|
filesetDV.addPayloadDV(payloadDV);
|
||||||
|
@ -330,7 +640,7 @@ public class Complex_Tests {
|
||||||
System.out.println("***** Files");
|
System.out.println("***** Files");
|
||||||
if (subDocument.getListFiles() != null) {
|
if (subDocument.getListFiles() != null) {
|
||||||
for (FilesetDV filesetDV : subDocument.getListFiles()) {
|
for (FilesetDV filesetDV : subDocument.getListFiles()) {
|
||||||
System.out.println("******* File Fileset name: " + filesetDV.getName());
|
System.out.println("******* File Fileset name: " + filesetDV.getGcubeProfileFieldName());
|
||||||
for (PayloadDV payload : filesetDV.getListPayload()) {
|
for (PayloadDV payload : filesetDV.getListPayload()) {
|
||||||
System.out.println("********* Payload: " + payload);
|
System.out.println("********* Payload: " + payload);
|
||||||
}
|
}
|
||||||
|
@ -339,7 +649,7 @@ public class Complex_Tests {
|
||||||
System.out.println("***** Images");
|
System.out.println("***** Images");
|
||||||
if (subDocument.getListImages() != null) {
|
if (subDocument.getListImages() != null) {
|
||||||
for (FilesetDV filesetDV : subDocument.getListImages()) {
|
for (FilesetDV filesetDV : subDocument.getListImages()) {
|
||||||
System.out.println("******* Image Fileset name: " + filesetDV.getName());
|
System.out.println("******* Image Fileset name: " + filesetDV.getGcubeProfileFieldName());
|
||||||
for (PayloadDV payload : filesetDV.getListPayload()) {
|
for (PayloadDV payload : filesetDV.getListPayload()) {
|
||||||
System.out.println("********* Payload: " + payload);
|
System.out.println("********* Payload: " + payload);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,3 +13,4 @@
|
||||||
/ISTI.gcubekey
|
/ISTI.gcubekey
|
||||||
/d4science.research-infrastructures.eu.gcubekey
|
/d4science.research-infrastructures.eu.gcubekey
|
||||||
/howto.txt
|
/howto.txt
|
||||||
|
/gcube_config.properties
|
||||||
|
|
Loading…
Reference in New Issue