Copied read ProjectEdit and ProjectView DTOs from Data-Viewer
This commit is contained in:
commit
5d2f69f50a
|
@ -0,0 +1,38 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry including="**/*.java" kind="src" output="target/classes" path="src/main/java">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="test" value="true"/>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
<attribute name="test" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="output" path="target/classes"/>
|
||||||
|
</classpath>
|
|
@ -0,0 +1 @@
|
||||||
|
/target/
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>geoportal-data-mapper_no_git</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
|
@ -0,0 +1,6 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding//src/main/java=UTF-8
|
||||||
|
encoding//src/main/resources=UTF-8
|
||||||
|
encoding//src/test/java=UTF-8
|
||||||
|
encoding//src/test/resources=UTF-8
|
||||||
|
encoding/<project>=UTF-8
|
|
@ -0,0 +1,8 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.release=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.8
|
|
@ -0,0 +1,4 @@
|
||||||
|
activeProfiles=
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
resolveWorkspaceProjects=true
|
||||||
|
version=1
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
## [v1.0.0-SNAPSHOT] - 2022-11-30
|
||||||
|
|
||||||
|
- First release
|
|
@ -0,0 +1,311 @@
|
||||||
|
#European Union Public Licence V.1.1
|
||||||
|
|
||||||
|
##*EUPL © the European Community 2007*
|
||||||
|
|
||||||
|
|
||||||
|
This **European Union Public Licence** (the **“EUPL”**) applies to the Work or Software
|
||||||
|
(as defined below) which is provided under the terms of this Licence. Any use of
|
||||||
|
the Work, other than as authorised under this Licence is prohibited (to the
|
||||||
|
extent such use is covered by a right of the copyright holder of the Work).
|
||||||
|
|
||||||
|
The Original Work is provided under the terms of this Licence when the Licensor
|
||||||
|
(as defined below) has placed the following notice immediately following the
|
||||||
|
copyright notice for the Original Work:
|
||||||
|
|
||||||
|
**Licensed under the EUPL V.1.1**
|
||||||
|
|
||||||
|
or has expressed by any other mean his willingness to license under the EUPL.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##1. Definitions
|
||||||
|
|
||||||
|
In this Licence, the following terms have the following meaning:
|
||||||
|
|
||||||
|
- The Licence: this Licence.
|
||||||
|
|
||||||
|
- The Original Work or the Software: the software distributed and/or
|
||||||
|
communicated by the Licensor under this Licence, available as Source Code and
|
||||||
|
also as Executable Code as the case may be.
|
||||||
|
|
||||||
|
- Derivative Works: the works or software that could be created by the Licensee,
|
||||||
|
based upon the Original Work or modifications thereof. This Licence does not
|
||||||
|
define the extent of modification or dependence on the Original Work required
|
||||||
|
in order to classify a work as a Derivative Work; this extent is determined by
|
||||||
|
copyright law applicable in the country mentioned in Article 15.
|
||||||
|
|
||||||
|
- The Work: the Original Work and/or its Derivative Works.
|
||||||
|
|
||||||
|
- The Source Code: the human-readable form of the Work which is the most
|
||||||
|
convenient for people to study and modify.
|
||||||
|
|
||||||
|
- The Executable Code: any code which has generally been compiled and which is
|
||||||
|
meant to be interpreted by a computer as a program.
|
||||||
|
|
||||||
|
- The Licensor: the natural or legal person that distributes and/or communicates
|
||||||
|
the Work under the Licence.
|
||||||
|
|
||||||
|
- Contributor(s): any natural or legal person who modifies the Work under the
|
||||||
|
Licence, or otherwise contributes to the creation of a Derivative Work.
|
||||||
|
|
||||||
|
- The Licensee or “You”: any natural or legal person who makes any usage of the
|
||||||
|
Software under the terms of the Licence.
|
||||||
|
|
||||||
|
- Distribution and/or Communication: any act of selling, giving, lending,
|
||||||
|
renting, distributing, communicating, transmitting, or otherwise making
|
||||||
|
available, on-line or off-line, copies of the Work or providing access to its
|
||||||
|
essential functionalities at the disposal of any other natural or legal
|
||||||
|
person.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##2. Scope of the rights granted by the Licence
|
||||||
|
|
||||||
|
The Licensor hereby grants You a world-wide, royalty-free, non-exclusive,
|
||||||
|
sub-licensable licence to do the following, for the duration of copyright vested
|
||||||
|
in the Original Work:
|
||||||
|
|
||||||
|
- use the Work in any circumstance and for all usage, reproduce the Work, modify
|
||||||
|
- the Original Work, and make Derivative Works based upon the Work, communicate
|
||||||
|
- to the public, including the right to make available or display the Work or
|
||||||
|
- copies thereof to the public and perform publicly, as the case may be, the
|
||||||
|
- Work, distribute the Work or copies thereof, lend and rent the Work or copies
|
||||||
|
- thereof, sub-license rights in the Work or copies thereof.
|
||||||
|
|
||||||
|
Those rights can be exercised on any media, supports and formats, whether now
|
||||||
|
known or later invented, as far as the applicable law permits so.
|
||||||
|
|
||||||
|
In the countries where moral rights apply, the Licensor waives his right to
|
||||||
|
exercise his moral right to the extent allowed by law in order to make effective
|
||||||
|
the licence of the economic rights here above listed.
|
||||||
|
|
||||||
|
The Licensor grants to the Licensee royalty-free, non exclusive usage rights to
|
||||||
|
any patents held by the Licensor, to the extent necessary to make use of the
|
||||||
|
rights granted on the Work under this Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##3. Communication of the Source Code
|
||||||
|
|
||||||
|
The Licensor may provide the Work either in its Source Code form, or as
|
||||||
|
Executable Code. If the Work is provided as Executable Code, the Licensor
|
||||||
|
provides in addition a machine-readable copy of the Source Code of the Work
|
||||||
|
along with each copy of the Work that the Licensor distributes or indicates, in
|
||||||
|
a notice following the copyright notice attached to the Work, a repository where
|
||||||
|
the Source Code is easily and freely accessible for as long as the Licensor
|
||||||
|
continues to distribute and/or communicate the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##4. Limitations on copyright
|
||||||
|
|
||||||
|
Nothing in this Licence is intended to deprive the Licensee of the benefits from
|
||||||
|
any exception or limitation to the exclusive rights of the rights owners in the
|
||||||
|
Original Work or Software, of the exhaustion of those rights or of other
|
||||||
|
applicable limitations thereto.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##5. Obligations of the Licensee
|
||||||
|
|
||||||
|
The grant of the rights mentioned above is subject to some restrictions and
|
||||||
|
obligations imposed on the Licensee. Those obligations are the following:
|
||||||
|
|
||||||
|
Attribution right: the Licensee shall keep intact all copyright, patent or
|
||||||
|
trademarks notices and all notices that refer to the Licence and to the
|
||||||
|
disclaimer of warranties. The Licensee must include a copy of such notices and a
|
||||||
|
copy of the Licence with every copy of the Work he/she distributes and/or
|
||||||
|
communicates. The Licensee must cause any Derivative Work to carry prominent
|
||||||
|
notices stating that the Work has been modified and the date of modification.
|
||||||
|
|
||||||
|
Copyleft clause: If the Licensee distributes and/or communicates copies of the
|
||||||
|
Original Works or Derivative Works based upon the Original Work, this
|
||||||
|
Distribution and/or Communication will be done under the terms of this Licence
|
||||||
|
or of a later version of this Licence unless the Original Work is expressly
|
||||||
|
distributed only under this version of the Licence. The Licensee (becoming
|
||||||
|
Licensor) cannot offer or impose any additional terms or conditions on the Work
|
||||||
|
or Derivative Work that alter or restrict the terms of the Licence.
|
||||||
|
|
||||||
|
Compatibility clause: If the Licensee Distributes and/or Communicates Derivative
|
||||||
|
Works or copies thereof based upon both the Original Work and another work
|
||||||
|
licensed under a Compatible Licence, this Distribution and/or Communication can
|
||||||
|
be done under the terms of this Compatible Licence. For the sake of this clause,
|
||||||
|
“Compatible Licence” refers to the licences listed in the appendix attached to
|
||||||
|
this Licence. Should the Licensee’s obligations under the Compatible Licence
|
||||||
|
conflict with his/her obligations under this Licence, the obligations of the
|
||||||
|
Compatible Licence shall prevail.
|
||||||
|
|
||||||
|
Provision of Source Code: When distributing and/or communicating copies of the
|
||||||
|
Work, the Licensee will provide a machine-readable copy of the Source Code or
|
||||||
|
indicate a repository where this Source will be easily and freely available for
|
||||||
|
as long as the Licensee continues to distribute and/or communicate the Work.
|
||||||
|
|
||||||
|
Legal Protection: This Licence does not grant permission to use the trade names,
|
||||||
|
trademarks, service marks, or names of the Licensor, except as required for
|
||||||
|
reasonable and customary use in describing the origin of the Work and
|
||||||
|
reproducing the content of the copyright notice.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##6. Chain of Authorship
|
||||||
|
|
||||||
|
The original Licensor warrants that the copyright in the Original Work granted
|
||||||
|
hereunder is owned by him/her or licensed to him/her and that he/she has the
|
||||||
|
power and authority to grant the Licence.
|
||||||
|
|
||||||
|
Each Contributor warrants that the copyright in the modifications he/she brings
|
||||||
|
to the Work are owned by him/her or licensed to him/her and that he/she has the
|
||||||
|
power and authority to grant the Licence.
|
||||||
|
|
||||||
|
Each time You accept the Licence, the original Licensor and subsequent
|
||||||
|
Contributors grant You a licence to their contributions to the Work, under the
|
||||||
|
terms of this Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##7. Disclaimer of Warranty
|
||||||
|
|
||||||
|
The Work is a work in progress, which is continuously improved by numerous
|
||||||
|
contributors. It is not a finished work and may therefore contain defects or
|
||||||
|
“bugs” inherent to this type of software development.
|
||||||
|
|
||||||
|
For the above reason, the Work is provided under the Licence on an “as is” basis
|
||||||
|
and without warranties of any kind concerning the Work, including without
|
||||||
|
limitation merchantability, fitness for a particular purpose, absence of defects
|
||||||
|
or errors, accuracy, non-infringement of intellectual property rights other than
|
||||||
|
copyright as stated in Article 6 of this Licence.
|
||||||
|
|
||||||
|
This disclaimer of warranty is an essential part of the Licence and a condition
|
||||||
|
for the grant of any rights to the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##8. Disclaimer of Liability
|
||||||
|
|
||||||
|
Except in the cases of wilful misconduct or damages directly caused to natural
|
||||||
|
persons, the Licensor will in no event be liable for any direct or indirect,
|
||||||
|
material or moral, damages of any kind, arising out of the Licence or of the use
|
||||||
|
of the Work, including without limitation, damages for loss of goodwill, work
|
||||||
|
stoppage, computer failure or malfunction, loss of data or any commercial
|
||||||
|
damage, even if the Licensor has been advised of the possibility of such
|
||||||
|
damage. However, the Licensor will be liable under statutory product liability
|
||||||
|
laws as far such laws apply to the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##9. Additional agreements
|
||||||
|
|
||||||
|
While distributing the Original Work or Derivative Works, You may choose to
|
||||||
|
conclude an additional agreement to offer, and charge a fee for, acceptance of
|
||||||
|
support, warranty, indemnity, or other liability obligations and/or services
|
||||||
|
consistent with this Licence. However, in accepting such obligations, You may
|
||||||
|
act only on your own behalf and on your sole responsibility, not on behalf of
|
||||||
|
the original Licensor or any other Contributor, and only if You agree to
|
||||||
|
indemnify, defend, and hold each Contributor harmless for any liability incurred
|
||||||
|
by, or claims asserted against such Contributor by the fact You have accepted
|
||||||
|
any such warranty or additional liability.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##10. Acceptance of the Licence
|
||||||
|
|
||||||
|
The provisions of this Licence can be accepted by clicking on an icon “I agree”
|
||||||
|
placed under the bottom of a window displaying the text of this Licence or by
|
||||||
|
affirming consent in any other similar way, in accordance with the rules of
|
||||||
|
applicable law. Clicking on that icon indicates your clear and irrevocable
|
||||||
|
acceptance of this Licence and all of its terms and conditions.
|
||||||
|
|
||||||
|
Similarly, you irrevocably accept this Licence and all of its terms and
|
||||||
|
conditions by exercising any rights granted to You by Article 2 of this Licence,
|
||||||
|
such as the use of the Work, the creation by You of a Derivative Work or the
|
||||||
|
Distribution and/or Communication by You of the Work or copies thereof.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##11. Information to the public
|
||||||
|
|
||||||
|
In case of any Distribution and/or Communication of the Work by means of
|
||||||
|
electronic communication by You (for example, by offering to download the Work
|
||||||
|
from a remote location) the distribution channel or media (for example, a
|
||||||
|
website) must at least provide to the public the information requested by the
|
||||||
|
applicable law regarding the Licensor, the Licence and the way it may be
|
||||||
|
accessible, concluded, stored and reproduced by the Licensee.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##12. Termination of the Licence
|
||||||
|
|
||||||
|
The Licence and the rights granted hereunder will terminate automatically upon
|
||||||
|
any breach by the Licensee of the terms of the Licence.
|
||||||
|
|
||||||
|
Such a termination will not terminate the licences of any person who has
|
||||||
|
received the Work from the Licensee under the Licence, provided such persons
|
||||||
|
remain in full compliance with the Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##13. Miscellaneous
|
||||||
|
|
||||||
|
Without prejudice of Article 9 above, the Licence represents the complete
|
||||||
|
agreement between the Parties as to the Work licensed hereunder.
|
||||||
|
|
||||||
|
If any provision of the Licence is invalid or unenforceable under applicable
|
||||||
|
law, this will not affect the validity or enforceability of the Licence as a
|
||||||
|
whole. Such provision will be construed and/or reformed so as necessary to make
|
||||||
|
it valid and enforceable.
|
||||||
|
|
||||||
|
The European Commission may publish other linguistic versions and/or new
|
||||||
|
versions of this Licence, so far this is required and reasonable, without
|
||||||
|
reducing the scope of the rights granted by the Licence. New versions of the
|
||||||
|
Licence will be published with a unique version number.
|
||||||
|
|
||||||
|
All linguistic versions of this Licence, approved by the European Commission,
|
||||||
|
have identical value. Parties can take advantage of the linguistic version of
|
||||||
|
their choice.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##14. Jurisdiction
|
||||||
|
|
||||||
|
Any litigation resulting from the interpretation of this License, arising
|
||||||
|
between the European Commission, as a Licensor, and any Licensee, will be
|
||||||
|
subject to the jurisdiction of the Court of Justice of the European Communities,
|
||||||
|
as laid down in article 238 of the Treaty establishing the European Community.
|
||||||
|
|
||||||
|
Any litigation arising between Parties, other than the European Commission, and
|
||||||
|
resulting from the interpretation of this License, will be subject to the
|
||||||
|
exclusive jurisdiction of the competent court where the Licensor resides or
|
||||||
|
conducts its primary business.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##15. Applicable Law
|
||||||
|
|
||||||
|
This Licence shall be governed by the law of the European Union country where
|
||||||
|
the Licensor resides or has his registered office.
|
||||||
|
|
||||||
|
This licence shall be governed by the Belgian law if:
|
||||||
|
|
||||||
|
- a litigation arises between the European Commission, as a Licensor, and any
|
||||||
|
- Licensee; the Licensor, other than the European Commission, has no residence
|
||||||
|
- or registered office inside a European Union country.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
##Appendix
|
||||||
|
|
||||||
|
|
||||||
|
**“Compatible Licences”** according to article 5 EUPL are:
|
||||||
|
|
||||||
|
|
||||||
|
- GNU General Public License (GNU GPL) v. 2
|
||||||
|
|
||||||
|
- Open Software License (OSL) v. 2.1, v. 3.0
|
||||||
|
|
||||||
|
- Common Public License v. 1.0
|
||||||
|
|
||||||
|
- Eclipse Public License v. 1.0
|
||||||
|
|
||||||
|
- Cecill v. 2.0
|
|
@ -0,0 +1,55 @@
|
||||||
|
# GeoPortal Data Mapper
|
||||||
|
|
||||||
|
GeoPortal Data Mapper is a common library used by GUI Data-Entry/Data-Viewer components developed for the D4Science Geoportal service
|
||||||
|
|
||||||
|
## Built With
|
||||||
|
|
||||||
|
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
||||||
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
## Change log
|
||||||
|
|
||||||
|
See the [Releases](https://code-repo.d4science.org/gCubeSystem/geoportal-data-mapper/releases)
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
* **Francesco Mangiacrapa** ([ORCID](https://orcid.org/0000-0002-6528-664X)) Computer Scientist at [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
|
||||||
|
|
||||||
|
|
||||||
|
## About the gCube Framework
|
||||||
|
This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an
|
||||||
|
open-source software toolkit used for building and operating Hybrid Data
|
||||||
|
Infrastructures enabling the dynamic deployment of Virtual Research Environments
|
||||||
|
by favouring the realisation of reuse oriented policies.
|
||||||
|
|
||||||
|
The projects leading to this software have received funding from a series of European Union programmes including:
|
||||||
|
|
||||||
|
- the Sixth Framework Programme for Research and Technological Development
|
||||||
|
- DILIGENT (grant no. 004260).
|
||||||
|
- the Seventh Framework Programme for research, technological development and demonstration
|
||||||
|
- D4Science (grant no. 212488);
|
||||||
|
- D4Science-II (grant no.239019);
|
||||||
|
- ENVRI (grant no. 283465);
|
||||||
|
- EUBrazilOpenBio (grant no. 288754);
|
||||||
|
- iMarine(grant no. 283644).
|
||||||
|
- the H2020 research and innovation programme
|
||||||
|
- BlueBRIDGE (grant no. 675680);
|
||||||
|
- EGIEngage (grant no. 654142);
|
||||||
|
- ENVRIplus (grant no. 654182);
|
||||||
|
- PARTHENOS (grant no. 654119);
|
||||||
|
- SoBigData (grant no. 654024);
|
||||||
|
- DESIRA (grant no. 818194);
|
||||||
|
- ARIADNEplus (grant no. 823914);
|
||||||
|
- RISIS2 (grant no. 824091);
|
||||||
|
- PerformFish (grant no. 727610);
|
||||||
|
- AGINFRAplus (grant no. 731001).
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<assembly
|
||||||
|
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||||
|
<id>servicearchive</id>
|
||||||
|
<formats>
|
||||||
|
<format>tar.gz</format>
|
||||||
|
</formats>
|
||||||
|
<baseDirectory>/</baseDirectory>
|
||||||
|
<fileSets>
|
||||||
|
<fileSet>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<useDefaultExcludes>true</useDefaultExcludes>
|
||||||
|
<includes>
|
||||||
|
<include>README.md</include>
|
||||||
|
<include>LICENSE.md</include>
|
||||||
|
<include>profile.xml</include>
|
||||||
|
<include>CHANGELOG.md</include>
|
||||||
|
</includes>
|
||||||
|
<fileMode>755</fileMode>
|
||||||
|
<filtered>true</filtered>
|
||||||
|
</fileSet>
|
||||||
|
</fileSets>
|
||||||
|
<files>
|
||||||
|
<file>
|
||||||
|
<source>target/${build.finalName}.${project.packaging}</source>
|
||||||
|
<outputDirectory>/${artifactId}</outputDirectory>
|
||||||
|
</file>
|
||||||
|
</files>
|
||||||
|
</assembly>
|
|
@ -0,0 +1,183 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<artifactId>maven-parent</artifactId>
|
||||||
|
<groupId>org.gcube.tools</groupId>
|
||||||
|
<version>1.1.0</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<groupId>org.gcube.application</groupId>
|
||||||
|
<artifactId>geoportal-data-mapper</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<scm>
|
||||||
|
<connection>scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git</connection>
|
||||||
|
<developerConnection>scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git</developerConnection>
|
||||||
|
<url>https://code-repo.d4science.org/gCubeSystem/${project.artifactId}</url>
|
||||||
|
</scm>
|
||||||
|
|
||||||
|
<developers>
|
||||||
|
<developer>
|
||||||
|
<name>Francesco Mangiacrapa</name>
|
||||||
|
<email>francesco.mangiacrapa@isti.cnr.it</email>
|
||||||
|
<organization>CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"</organization>
|
||||||
|
<roles>
|
||||||
|
<role>architect</role>
|
||||||
|
<role>developer</role>
|
||||||
|
</roles>
|
||||||
|
</developer>
|
||||||
|
</developers>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<!-- <guava.version>18.0</guava.version> -->
|
||||||
|
<junit.version>4.11</junit.version>
|
||||||
|
<gson.version>2.6.2</gson.version>
|
||||||
|
<gwt.version>2.9.0</gwt.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.distribution</groupId>
|
||||||
|
<artifactId>maven-portal-bom</artifactId>
|
||||||
|
<version>3.7.0-SNAPSHOT</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.gwt</groupId>
|
||||||
|
<artifactId>gwt-user</artifactId>
|
||||||
|
<version>${gwt.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.widgets</groupId>
|
||||||
|
<artifactId>metadata-profile-form-builder-widget</artifactId>
|
||||||
|
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<!-- does not remove these exclusions, there are conflict with jackson
|
||||||
|
2.7 used by geo-json dependency -->
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-core</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>de.grundid.opendatalab</groupId>
|
||||||
|
<artifactId>geojson-jackson</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.application</groupId>
|
||||||
|
<artifactId>geoportal-data-common</artifactId>
|
||||||
|
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>${gson.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.liferay.portal</groupId>
|
||||||
|
<artifactId>portal-service</artifactId>
|
||||||
|
<!-- <version>6.2.5</version> -->
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- LOGGER -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-log4j12</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<!-- DO NOT REMOVE THIS -->
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/java</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.*</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.*</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<!-- <finalName>${artifactId}</finalName> -->
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<skipTests>true</skipTests>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<descriptors>
|
||||||
|
<descriptor>descriptor.xml</descriptor>
|
||||||
|
</descriptors>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>servicearchive</id>
|
||||||
|
<phase>install</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<ID></ID>
|
||||||
|
<Type>Portlet</Type>
|
||||||
|
<Profile>
|
||||||
|
<Description>${project.description}</Description>
|
||||||
|
<Class>Application</Class>
|
||||||
|
<Name>${project.artifactId}</Name>
|
||||||
|
<Version>1.0.0</Version>
|
||||||
|
<Packages>
|
||||||
|
<Software>
|
||||||
|
<Name>${project.artifactId}</Name>
|
||||||
|
<Description>${project.description}</Description>
|
||||||
|
<MavenCoordinates>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>${project.artifactId}</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</MavenCoordinates>
|
||||||
|
<Files>
|
||||||
|
<File>${project.build.finalName}.${project.packaging}</File>
|
||||||
|
</Files>
|
||||||
|
</Software>
|
||||||
|
</Packages>
|
||||||
|
</Profile>
|
||||||
|
</Resource>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module rename-to='geoportaldatamapper'>
|
||||||
|
<!-- Inherit the core Web Toolkit stuff. -->
|
||||||
|
<inherits name='com.google.gwt.user.User' />
|
||||||
|
|
||||||
|
<!-- Specify the paths for translatable code -->
|
||||||
|
<source path='client' />
|
||||||
|
<source path='shared' />
|
||||||
|
|
||||||
|
</module>
|
|
@ -0,0 +1,68 @@
|
||||||
|
package org.gcube.application.geoportaldatamapper;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.GcubeProfileDV;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
||||||
|
|
||||||
|
public class GcubeProfilesMetadataForUCD implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -8953445402356442872L;
|
||||||
|
private String profileID;
|
||||||
|
private GcubeProfileDV gcubeProfile;
|
||||||
|
private List<MetaDataProfileBean> listMetadataProfileBean;
|
||||||
|
|
||||||
|
public GcubeProfilesMetadataForUCD() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public GcubeProfilesMetadataForUCD(String profileID, GcubeProfileDV gcubeProfile,
|
||||||
|
List<MetaDataProfileBean> listMetadataProfileBean) {
|
||||||
|
|
||||||
|
this.profileID = profileID;
|
||||||
|
this.gcubeProfile = gcubeProfile;
|
||||||
|
this.listMetadataProfileBean = listMetadataProfileBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProfileID() {
|
||||||
|
return profileID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GcubeProfileDV getGcubeProfile() {
|
||||||
|
return gcubeProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MetaDataProfileBean> getListMetadataProfileBean() {
|
||||||
|
return listMetadataProfileBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProfileID(String profileID) {
|
||||||
|
this.profileID = profileID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGcubeProfile(GcubeProfileDV gcubeProfile) {
|
||||||
|
this.gcubeProfile = gcubeProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setListMetadataProfileBean(List<MetaDataProfileBean> listMetadataProfileBean) {
|
||||||
|
this.listMetadataProfileBean = listMetadataProfileBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append("GcubeProfilesMetadataForUCD [profileID=");
|
||||||
|
builder.append(profileID);
|
||||||
|
builder.append(", gcubeProfile=");
|
||||||
|
builder.append(gcubeProfile);
|
||||||
|
builder.append(", listMetadataProfileBean=");
|
||||||
|
builder.append(listMetadataProfileBean);
|
||||||
|
builder.append("]");
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,162 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.gcube.application.geoportaldatamapper;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
|
||||||
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
||||||
|
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.ConfigurationDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.GcubeProfileDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_CONFIGURATION_TYPE;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclarationDV;
|
||||||
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.server.MetadataProfileFormBuilderServiceImpl;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
|
import com.google.common.cache.CacheLoader;
|
||||||
|
import com.google.common.cache.LoadingCache;
|
||||||
|
import com.google.common.cache.RemovalListener;
|
||||||
|
import com.google.common.cache.RemovalNotification;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class GcubeProfilesPerUCDIdCache.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Oct 12, 2022
|
||||||
|
*/
|
||||||
|
public class GcubeProfilesPerUCDIdCache {
|
||||||
|
|
||||||
|
private static Logger LOG = LoggerFactory.getLogger(GcubeProfilesPerUCDIdCache.class);
|
||||||
|
|
||||||
|
private static LoadingCache<String, LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>>> gCubeProfilesPerProfileIDCache;
|
||||||
|
|
||||||
|
static {
|
||||||
|
|
||||||
|
CacheLoader<String, LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>>> loader = new CacheLoader<String, LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>>>() {
|
||||||
|
@Override
|
||||||
|
public LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>> load(String scope) throws Exception {
|
||||||
|
LOG.info("Loading the cache for scope: " + scope);
|
||||||
|
return loadGcubeProfilesForUCDIdInTheScope(scope);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
RemovalListener<String, LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>>> removalListener = new RemovalListener<String, LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>>>() {
|
||||||
|
public void onRemoval(
|
||||||
|
RemovalNotification<String, LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>>> removal) {
|
||||||
|
LOG.info(GcubeProfilesPerUCDIdCache.class.getSimpleName() + " cache expired");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
gCubeProfilesPerProfileIDCache = CacheBuilder.newBuilder().maximumSize(1000)
|
||||||
|
.expireAfterWrite(30, TimeUnit.MINUTES).removalListener(removalListener).build(loader);
|
||||||
|
|
||||||
|
LOG.info("cache instancied");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the.
|
||||||
|
*
|
||||||
|
* @param scope the scope
|
||||||
|
* @return the geonetwork instance
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>> get(String scope) throws Exception {
|
||||||
|
LOG.info("GcubeProfilesPerUCDIdCache get - called in the scope: " + scope);
|
||||||
|
LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>> map = gCubeProfilesPerProfileIDCache.get(scope);
|
||||||
|
LOG.info("GcubeProfilesPerUCDIdCache returning map null? " + (map==null));
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load geonetwork instance.
|
||||||
|
*
|
||||||
|
* @param scope the scope
|
||||||
|
* @return the linked hash map
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
private static LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>> loadGcubeProfilesForUCDIdInTheScope(
|
||||||
|
String scope) throws Exception {
|
||||||
|
LOG.info("loadGcubeProfilesForUCDIdInTheScope called in the scope: " + scope);
|
||||||
|
|
||||||
|
LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>> linkedMap_UCDId_gCubeProfiles = new LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>>();
|
||||||
|
try {
|
||||||
|
ScopeProvider.instance.set(scope);
|
||||||
|
UseCaseDescriptorCaller clientUCD = GeoportalClientCaller.useCaseDescriptors();
|
||||||
|
List<UseCaseDescriptor> listUCDs = clientUCD.getList();
|
||||||
|
LOG.debug("listUCDs: " + listUCDs);
|
||||||
|
|
||||||
|
for (UseCaseDescriptor ucd : listUCDs) {
|
||||||
|
|
||||||
|
LOG.info("Loaded UCD for ID: " + ucd.getId());
|
||||||
|
String profileID = ucd.getId();
|
||||||
|
GEOPORTAL_DATA_HANDLER theHandler = GEOPORTAL_DATA_HANDLER.geoportal_data_entry;
|
||||||
|
List<HandlerDeclaration> handlers = ucd.getHandlersByType(theHandler.getType());
|
||||||
|
|
||||||
|
if (handlers.size() == 0) {
|
||||||
|
LOG.warn("No handler " + theHandler + "found into UCD " + ucd.getId() + ", continue...");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loading Handler gcube_profiles
|
||||||
|
HandlerDeclaration dataEntryHandler = handlers.get(0);
|
||||||
|
HandlerDeclarationDV handlerGcubeProfiles = ConvertToDataValueObjectModel
|
||||||
|
.toHandlerDeclarationDV(dataEntryHandler, ucd, GEOPORTAL_CONFIGURATION_TYPE.gcube_profiles);
|
||||||
|
|
||||||
|
LOG.debug("Handler " + GEOPORTAL_CONFIGURATION_TYPE.gcube_profiles + " for PROFILE_ID: " + ucd.getId());
|
||||||
|
LOG.debug("" + handlerGcubeProfiles);
|
||||||
|
|
||||||
|
ConfigurationDV<?> config = handlerGcubeProfiles.getConfiguration();
|
||||||
|
// List of gCube Profiles defined in the UCD
|
||||||
|
List<GcubeProfileDV> listGcubeProfiles = (List<GcubeProfileDV>) config.getConfiguration();
|
||||||
|
LOG.debug("List of GcubeProfileDV are: " + listGcubeProfiles);
|
||||||
|
|
||||||
|
List<GcubeProfilesMetadataForUCD> listProfilesBean = new ArrayList<GcubeProfilesMetadataForUCD>();
|
||||||
|
// Loading Metadata Profile from IS
|
||||||
|
MetadataProfileFormBuilderServiceImpl metaProfileBUilder = new MetadataProfileFormBuilderServiceImpl();
|
||||||
|
|
||||||
|
for (GcubeProfileDV gcubeProfileDV : listGcubeProfiles) {
|
||||||
|
ScopeProvider.instance.set(scope);
|
||||||
|
GcubeProfilesMetadataForUCD gCubeProfileMetadataForUCD = new GcubeProfilesMetadataForUCD();
|
||||||
|
List<MetaDataProfileBean> listProfiles = metaProfileBUilder.getProfilesInTheScopeForName(scope,
|
||||||
|
gcubeProfileDV.getGcubeSecondaryType(), gcubeProfileDV.getGcubeName());
|
||||||
|
|
||||||
|
String key = gcubeProfileDV.getGcubeSecondaryType() + gcubeProfileDV.getGcubeName();
|
||||||
|
LOG.debug("for key: " + key + " readi profiles: " + listGcubeProfiles);
|
||||||
|
gCubeProfileMetadataForUCD.setGcubeProfile(gcubeProfileDV);
|
||||||
|
gCubeProfileMetadataForUCD.setListMetadataProfileBean(listProfiles);
|
||||||
|
listProfilesBean.add(gCubeProfileMetadataForUCD);
|
||||||
|
|
||||||
|
}
|
||||||
|
linkedMap_UCDId_gCubeProfiles.put(ucd.getId(), listProfilesBean);
|
||||||
|
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
|
for (String key : linkedMap_UCDId_gCubeProfiles.keySet()) {
|
||||||
|
LOG.debug("For key '" + key + "' got profiles: " + linkedMap_UCDId_gCubeProfiles.get(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
String erroMsg = "Error occurred on preloadgCubeProfilesForUCDs: ";
|
||||||
|
LOG.error(erroMsg, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.info("GcubeProfilesPerUCDIdCache loaded with " + linkedMap_UCDId_gCubeProfiles.size() + " item/s");
|
||||||
|
return linkedMap_UCDId_gCubeProfiles;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,966 @@
|
||||||
|
package org.gcube.application.geoportaldatamapper;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import org.bson.Document;
|
||||||
|
import org.gcube.application.geoportal.client.utils.Serialization;
|
||||||
|
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.ConvertToDataValueObjectModel;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.access.GeportalCheckAccessPolicy;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.serdes.Payload;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.FilePathDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.GcubeProfileDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GCubeSDIViewerLayerDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.innerobject.BBOXDV;
|
||||||
|
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.ProjectDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_CONFIGURATION_TYPE;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.SectionView;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.SubDocumentView;
|
||||||
|
import org.gcube.application.geoportaldatamapper.shared.MetaDataProfileBeanExt;
|
||||||
|
import org.gcube.application.geoportaldatamapper.shared.ProjectEdit;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class Geoportal_JSON_Mapper.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Nov 30, 2022
|
||||||
|
*/
|
||||||
|
public class Geoportal_JSON_Mapper {
|
||||||
|
|
||||||
|
public static final String _PAYLOADS = "_payloads";
|
||||||
|
|
||||||
|
public static final String _MATERIALIZATIONS = "_materializations";
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(Geoportal_JSON_Mapper.class);
|
||||||
|
|
||||||
|
public static final String FILESET = "fileset";
|
||||||
|
|
||||||
|
public static final String _OGC_LINKS = "_ogcLinks";
|
||||||
|
|
||||||
|
public static final String _BBOX = "_bbox";
|
||||||
|
|
||||||
|
public static final String _TYPE = "_type";
|
||||||
|
|
||||||
|
public static final String JSON_$_POINTER = "$";
|
||||||
|
|
||||||
|
public static final String _THEDOCUMENT = "_theDocument";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load project edit.
|
||||||
|
*
|
||||||
|
* @param theProjectDV the the project DV
|
||||||
|
* @param scope the scope
|
||||||
|
* @param username the username
|
||||||
|
* @return the project edit
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static ProjectEdit loadProjectEdit(ProjectDV theProjectDV, String scope, String username) throws Exception {
|
||||||
|
LOG.debug("loadProjectEdit called");
|
||||||
|
|
||||||
|
String theWholeProjectAsJSON = theProjectDV.getTheDocument().getDocumentAsJSON();
|
||||||
|
|
||||||
|
LOG.debug("theProjectDV as JSON: " + theWholeProjectAsJSON);
|
||||||
|
LOG.trace("theProjectDV as MAP: " + theProjectDV.getTheDocument().getDocumentAsMap());
|
||||||
|
|
||||||
|
ProjectEdit projectEdit = new ProjectEdit();
|
||||||
|
projectEdit.setTheProjectDV(theProjectDV);
|
||||||
|
|
||||||
|
LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>> linkedMap_UCDId_gCubeProfiles = GcubeProfilesPerUCDIdCache
|
||||||
|
.get(scope);
|
||||||
|
|
||||||
|
// NO UCD defined, applying default
|
||||||
|
if (linkedMap_UCDId_gCubeProfiles.size() == 0) {
|
||||||
|
LOG.warn("No " + GEOPORTAL_CONFIGURATION_TYPE.gcube_profiles + " found in the UCD");
|
||||||
|
LOG.info("Applying default business logic to display the project");
|
||||||
|
SectionView sectionView = new SectionView();
|
||||||
|
sectionView.setSectionTitle("Document");
|
||||||
|
Document sectionDoc = Document.parse(theProjectDV.getTheDocument().getDocumentAsJSON());
|
||||||
|
|
||||||
|
// Creating one Project with one SectionView and SubDocumentView
|
||||||
|
String wholeSectionDoc = sectionDoc.toJson();
|
||||||
|
|
||||||
|
List<FilesetDV> listFiles = new ArrayList<FilesetDV>();
|
||||||
|
|
||||||
|
// Reading Fileset _payloads
|
||||||
|
String filesetJSONPath = String.format("%s.%s", JSON_$_POINTER, FILESET);
|
||||||
|
List<Payload> listPayloads = readPayloadsForFileset(filesetJSONPath, wholeSectionDoc);
|
||||||
|
FilesetDV filesetDV = new FilesetDV();
|
||||||
|
filesetDV.setName(FILESET);
|
||||||
|
for (Payload payload : listPayloads) {
|
||||||
|
PayloadDV payloadDV = ConvertToDataValueObjectModel.toPayloadDV(payload);
|
||||||
|
filesetDV.addPayloadDV(payloadDV);
|
||||||
|
listFiles.add(filesetDV);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<GcubeProfilesMetadataForUCD> listProfilesBean = linkedMap_UCDId_gCubeProfiles
|
||||||
|
.get(theProjectDV.getProfileID());
|
||||||
|
|
||||||
|
com.jayway.jsonpath.Configuration configuration = com.jayway.jsonpath.Configuration.builder()
|
||||||
|
.jsonProvider(new JsonOrgJsonProvider()).build();
|
||||||
|
|
||||||
|
List<MetaDataProfileBeanExt> listOfProfilesBeanExt = new ArrayList<MetaDataProfileBeanExt>();
|
||||||
|
|
||||||
|
// Reading the Project according to list of Profile defined in the UCD
|
||||||
|
for (GcubeProfilesMetadataForUCD gcubeProfileMetaForUCD : listProfilesBean) {
|
||||||
|
|
||||||
|
GcubeProfileDV gcubeProfileDV = gcubeProfileMetaForUCD.getGcubeProfile();
|
||||||
|
LOG.debug("\n\n##### Creating the section: " + gcubeProfileDV.getSectionTitle());
|
||||||
|
LOG.debug("\n\nThe profile is: " + gcubeProfileDV);
|
||||||
|
// Building JSON/section full PATH and section name
|
||||||
|
String sectionJSONPath = "";
|
||||||
|
String parentPathFromProfile = gcubeProfileDV.getParentName() == null ? "" : gcubeProfileDV.getParentName();
|
||||||
|
String theSectionName = gcubeProfileDV.getSectionName();
|
||||||
|
|
||||||
|
if (theSectionName.compareTo(JSON_$_POINTER) == 0 || theSectionName.compareTo(JSON_$_POINTER + ".") == 0) {
|
||||||
|
sectionJSONPath = JSON_$_POINTER;
|
||||||
|
theSectionName = "";
|
||||||
|
} else {
|
||||||
|
sectionJSONPath = String.format("%s%s",
|
||||||
|
parentPathFromProfile.endsWith(".") ? parentPathFromProfile : parentPathFromProfile + ".",
|
||||||
|
theSectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("The sectionJSONPath is: " + sectionJSONPath);
|
||||||
|
|
||||||
|
JsonPath theSectionJsonPath = null;
|
||||||
|
Object data = null;
|
||||||
|
try {
|
||||||
|
theSectionJsonPath = JsonPath.compile(sectionJSONPath);
|
||||||
|
data = theSectionJsonPath.read(theWholeProjectAsJSON, configuration);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Error on searching the section " + sectionJSONPath + " in the JSON Project: "
|
||||||
|
+ theWholeProjectAsJSON);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("Data is instace of: " + data.getClass());
|
||||||
|
LOG.debug("data to string: " + data.toString());
|
||||||
|
|
||||||
|
// Splitting the General Document in bson.Document according to list of
|
||||||
|
// GcubeProfiles
|
||||||
|
List<Document> listBSONDocument = new ArrayList<Document>();
|
||||||
|
if (data instanceof org.json.JSONObject) {
|
||||||
|
String jsonString = data.toString();
|
||||||
|
LOG.debug("the JSON to string: " + jsonString);
|
||||||
|
Document sectionDoc = Document.parse(jsonString);
|
||||||
|
listBSONDocument.add(sectionDoc);
|
||||||
|
|
||||||
|
} else if (data instanceof org.json.JSONArray) {
|
||||||
|
org.json.JSONArray dataArray = (org.json.JSONArray) data;
|
||||||
|
for (int i = 0; i < dataArray.length(); i++) {
|
||||||
|
String jsonString = dataArray.get(i).toString();
|
||||||
|
LOG.debug("the array " + i + " JSON to string: " + jsonString);
|
||||||
|
Document sectionDoc = Document.parse(jsonString);
|
||||||
|
listBSONDocument.add(sectionDoc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("Result for " + gcubeProfileDV.getSectionName() + " is: " + listBSONDocument);
|
||||||
|
List<MetaDataProfileBean> theProfileBeans = gcubeProfileMetaForUCD.getListMetadataProfileBean();
|
||||||
|
MetaDataProfileBean theProfileBean = theProfileBeans.get(0);
|
||||||
|
|
||||||
|
// For each bson.Document filling the MetaDataProfileBean and its file
|
||||||
|
for (int i = 0; i < listBSONDocument.size(); i++) {
|
||||||
|
|
||||||
|
LOG.trace("DOCUMENT number " + i + " of the section: " + theProfileBean.getTitle());
|
||||||
|
MetaDataProfileBeanExt theProfileBeanExt = new MetaDataProfileBeanExt();
|
||||||
|
theProfileBeanExt.setCategories(theProfileBean.getCategories());
|
||||||
|
theProfileBeanExt.setTitle(theProfileBean.getTitle());
|
||||||
|
theProfileBeanExt.setType(theProfileBean.getType());
|
||||||
|
|
||||||
|
Document fromSectionDoc = listBSONDocument.get(i);
|
||||||
|
LOG.debug("\n\nNew section DOC for index " + i + " is: "
|
||||||
|
+ new JSONObject(fromSectionDoc.toJson()).toString(2));
|
||||||
|
// Creating the corresponding MetaDataProfileBeanExt for each section
|
||||||
|
|
||||||
|
// Reading policy and license statically
|
||||||
|
// eg. "_access":{"_policy":"OPEN","_license":"CC0-1.0"}}
|
||||||
|
Document docAccess = null;
|
||||||
|
Access access = null;
|
||||||
|
try {
|
||||||
|
docAccess = fromSectionDoc.get("_access", Document.class);
|
||||||
|
LOG.trace("docAccess is: " + docAccess);
|
||||||
|
access = new Access();
|
||||||
|
access.setPolicy(AccessPolicy.valueOf(docAccess.getString("_policy")));
|
||||||
|
access.setLicense(docAccess.getString("_license"));
|
||||||
|
// Access. access.get("_policy");
|
||||||
|
// access.get("_license");
|
||||||
|
System.out.println("access is: " + access);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("No " + AccessPolicy.class.getSimpleName() + "found in the section "
|
||||||
|
+ fromSectionDoc.toJson());
|
||||||
|
LOG.debug("No AccessPolicy.class.getSimpleName(): ", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<MetadataFieldWrapper> cloneListOfMFW = cloneList(theProfileBean.getMetadataFields());
|
||||||
|
|
||||||
|
for (MetadataFieldWrapper metadataField : cloneListOfMFW) {
|
||||||
|
|
||||||
|
String theFieldName = metadataField.getFieldId() != null ? metadataField.getFieldId()
|
||||||
|
: metadataField.getFieldName();
|
||||||
|
LOG.debug("reading theFieldName: " + theFieldName);
|
||||||
|
Object theOBJFieldValue = fromSectionDoc.get(theFieldName);
|
||||||
|
metadataField.setCurrentValue(theOBJFieldValue + "");
|
||||||
|
|
||||||
|
if (access != null) {
|
||||||
|
if (theFieldName.equalsIgnoreCase("policy")) {
|
||||||
|
metadataField.setCurrentValue(access.getPolicy().name());
|
||||||
|
} else if (theFieldName.equalsIgnoreCase("licenseID")) {
|
||||||
|
metadataField.setCurrentValue(access.getLicense());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
theProfileBeanExt.setMetadataFields(new ArrayList<MetadataFieldWrapper>(cloneListOfMFW));
|
||||||
|
LOG.debug("Metadata fields are: " + theProfileBeanExt.getMetadataFields());
|
||||||
|
|
||||||
|
// Reading filePaths
|
||||||
|
List<FilePathDV> filePaths = gcubeProfileDV.getFilePaths();
|
||||||
|
|
||||||
|
// READING fileset* field ACCORDING TO filePaths OF THE 'gcubeProfiles' CONFIG
|
||||||
|
if (filePaths != null) {
|
||||||
|
String fromSectionDocJSON = fromSectionDoc.toJson();
|
||||||
|
List<FilesetDV> listFiles = new ArrayList<FilesetDV>();
|
||||||
|
// List<GCubeSDIViewerLayerDV> listLayers = new ArrayList<GCubeSDIViewerLayerDV>();
|
||||||
|
for (FilePathDV filePath : filePaths) {
|
||||||
|
|
||||||
|
// Reading Fileset _payloads
|
||||||
|
String filesetJSONPath = String.format("%s.%s", JSON_$_POINTER, filePath.getFieldName());
|
||||||
|
List<Payload> listPayloads = readPayloadsForFileset(filesetJSONPath, fromSectionDocJSON);
|
||||||
|
FilesetDV filesetDV = new FilesetDV();
|
||||||
|
filesetDV.setName(filePath.getGcubeProfileFieldName());
|
||||||
|
for (Payload payload : listPayloads) {
|
||||||
|
PayloadDV payloadDV = ConvertToDataValueObjectModel.toPayloadDV(payload);
|
||||||
|
filesetDV.addPayloadDV(payloadDV);
|
||||||
|
}
|
||||||
|
|
||||||
|
listFiles.add(filesetDV);
|
||||||
|
}
|
||||||
|
|
||||||
|
theProfileBeanExt.setListFileset(listFiles);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.trace("\nputting theProfileBeanExt: " + theProfileBeanExt);
|
||||||
|
listOfProfilesBeanExt.add(theProfileBeanExt);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
projectEdit.setTheProfileBeans(listOfProfilesBeanExt);
|
||||||
|
|
||||||
|
LOG.info("returning ProjectEdit with " + projectEdit.getTheProfileBeans().size() + " profile beans");
|
||||||
|
|
||||||
|
return projectEdit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clone list.
|
||||||
|
*
|
||||||
|
* @param list the list
|
||||||
|
* @return the list
|
||||||
|
*/
|
||||||
|
public static List<MetadataFieldWrapper> cloneList(List<MetadataFieldWrapper> list) {
|
||||||
|
List<MetadataFieldWrapper> listCloned = new ArrayList<MetadataFieldWrapper>(list.size());
|
||||||
|
|
||||||
|
Function<MetadataFieldWrapper, MetadataFieldWrapper> cloneWrapper = (mfw) -> {
|
||||||
|
|
||||||
|
MetadataFieldWrapper newMfw = new MetadataFieldWrapper();
|
||||||
|
newMfw.setAsGroup(mfw.getAsGroup());
|
||||||
|
newMfw.setAsTag(mfw.getAsTag());
|
||||||
|
newMfw.setCurrentValue(mfw.getCurrentValue());
|
||||||
|
newMfw.setDefaultValue(mfw.getDefaultValue());
|
||||||
|
newMfw.setFieldId(mfw.getFieldId());
|
||||||
|
newMfw.setFieldName(mfw.getFieldName());
|
||||||
|
newMfw.setFieldNameFromCategory(mfw.getFieldNameFromCategory());
|
||||||
|
newMfw.setMandatory(mfw.getMandatory());
|
||||||
|
newMfw.setMaxOccurs(mfw.getMaxOccurs());
|
||||||
|
newMfw.setMultiSelection(mfw.isMultiSelection());
|
||||||
|
newMfw.setNote(mfw.getNote());
|
||||||
|
newMfw.setOwnerCategory(mfw.getOwnerCategory());
|
||||||
|
newMfw.setType(mfw.getType());
|
||||||
|
newMfw.setValidator(mfw.getValidator());
|
||||||
|
newMfw.setVocabulary(mfw.getVocabulary());
|
||||||
|
|
||||||
|
return newMfw;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
for (MetadataFieldWrapper item : list) {
|
||||||
|
MetadataFieldWrapper cloned = cloneWrapper.apply(item);
|
||||||
|
listCloned.add(cloned);
|
||||||
|
}
|
||||||
|
return listCloned;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load project view.
|
||||||
|
*
|
||||||
|
* @param theProjectDV the the project DV
|
||||||
|
* @param scope the scope
|
||||||
|
* @param username the username
|
||||||
|
* @return the project view
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static ProjectView loadProjectView(ProjectDV theProjectDV, String scope, String username) throws Exception {
|
||||||
|
|
||||||
|
String theWholeProjectAsJSON = theProjectDV.getTheDocument().getDocumentAsJSON();
|
||||||
|
|
||||||
|
LOG.debug("theProjectDV as JSON: " + theWholeProjectAsJSON);
|
||||||
|
LOG.debug("theProjectDV as MAP: " + theProjectDV.getTheDocument().getDocumentAsMap());
|
||||||
|
|
||||||
|
ProjectView projectView = new ProjectView();
|
||||||
|
projectView.setTheProjectDV(theProjectDV);
|
||||||
|
|
||||||
|
LinkedHashMap<String, List<GcubeProfilesMetadataForUCD>> linkedMap_UCDId_gCubeProfiles = GcubeProfilesPerUCDIdCache
|
||||||
|
.get(scope);
|
||||||
|
|
||||||
|
// NO UCD defined, applying default
|
||||||
|
if (linkedMap_UCDId_gCubeProfiles.size() == 0) {
|
||||||
|
LOG.warn("No " + GEOPORTAL_CONFIGURATION_TYPE.gcube_profiles + " found in the UCD");
|
||||||
|
LOG.info("Applying default business logic to display the project");
|
||||||
|
SectionView sectionView = new SectionView();
|
||||||
|
sectionView.setSectionTitle("Document");
|
||||||
|
SubDocumentView subDocumentView = new SubDocumentView();
|
||||||
|
|
||||||
|
Document sectionDoc = Document.parse(theProjectDV.getTheDocument().getDocumentAsJSON());
|
||||||
|
boolean isAccessibleSection = isAccessibleSectionAccordingToPolicy(sectionDoc, JSON_$_POINTER, username);
|
||||||
|
|
||||||
|
// If is accessible
|
||||||
|
if (isAccessibleSection) {
|
||||||
|
|
||||||
|
// Creating one Project with one SectionView and SubDocumentView
|
||||||
|
String wholeSectionDoc = sectionDoc.toJson();
|
||||||
|
subDocumentView.setMetadataAsJSON(wholeSectionDoc);
|
||||||
|
|
||||||
|
List<FilesetDV> listFiles = new ArrayList<FilesetDV>();
|
||||||
|
List<FilesetDV> listImages = new ArrayList<FilesetDV>();
|
||||||
|
List<GCubeSDIViewerLayerDV> listLayers = new ArrayList<GCubeSDIViewerLayerDV>();
|
||||||
|
|
||||||
|
// Reading Fileset _payloads
|
||||||
|
String filesetJSONPath = String.format("%s.%s", JSON_$_POINTER, FILESET);
|
||||||
|
List<Payload> listPayloads = readPayloadsForFileset(filesetJSONPath, wholeSectionDoc);
|
||||||
|
FilesetDV filesetDV = new FilesetDV();
|
||||||
|
filesetDV.setName(FILESET);
|
||||||
|
for (Payload payload : listPayloads) {
|
||||||
|
PayloadDV payloadDV = ConvertToDataValueObjectModel.toPayloadDV(payload);
|
||||||
|
filesetDV.addPayloadDV(payloadDV);
|
||||||
|
boolean isImage = ImageDetector.isImage(payload.getMimetype());
|
||||||
|
|
||||||
|
if (isImage) {
|
||||||
|
listImages.add(filesetDV);
|
||||||
|
} else {
|
||||||
|
listFiles.add(filesetDV);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
subDocumentView.setListImages(listImages);
|
||||||
|
subDocumentView.setListFiles(listFiles);
|
||||||
|
|
||||||
|
// Reading Fileset _materializations / layers
|
||||||
|
listLayers = readGcubeSDILayersForFileset(filesetJSONPath, wholeSectionDoc);
|
||||||
|
|
||||||
|
subDocumentView.setListLayers(listLayers);
|
||||||
|
sectionView.addSubDocument(subDocumentView);
|
||||||
|
projectView.addSectionView(sectionView);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
List<GcubeProfilesMetadataForUCD> listProfilesBean = linkedMap_UCDId_gCubeProfiles
|
||||||
|
.get(theProjectDV.getProfileID());
|
||||||
|
|
||||||
|
com.jayway.jsonpath.Configuration configuration = com.jayway.jsonpath.Configuration.builder()
|
||||||
|
.jsonProvider(new JsonOrgJsonProvider()).build();
|
||||||
|
|
||||||
|
// Reading the Project according to list of Profile defined in the UCD
|
||||||
|
for (GcubeProfilesMetadataForUCD gcubeProfileMetaForUCD : listProfilesBean) {
|
||||||
|
|
||||||
|
GcubeProfileDV gcubeProfileDV = gcubeProfileMetaForUCD.getGcubeProfile();
|
||||||
|
SectionView sectionView = new SectionView();
|
||||||
|
sectionView.setSectionTitle(gcubeProfileDV.getSectionTitle());
|
||||||
|
LOG.debug("\n\nThe profile is: " + gcubeProfileDV);
|
||||||
|
// Building JSON/section full PATH and section name
|
||||||
|
String sectionJSONPath = "";
|
||||||
|
String parentPathFromProfile = gcubeProfileDV.getParentName() == null ? "" : gcubeProfileDV.getParentName();
|
||||||
|
String theSectionName = gcubeProfileDV.getSectionName();
|
||||||
|
|
||||||
|
if (theSectionName.compareTo(JSON_$_POINTER) == 0 || theSectionName.compareTo(JSON_$_POINTER + ".") == 0) {
|
||||||
|
sectionJSONPath = JSON_$_POINTER;
|
||||||
|
theSectionName = "";
|
||||||
|
} else {
|
||||||
|
sectionJSONPath = String.format("%s%s",
|
||||||
|
parentPathFromProfile.endsWith(".") ? parentPathFromProfile : parentPathFromProfile + ".",
|
||||||
|
theSectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("The sectionJSONPath is: " + sectionJSONPath);
|
||||||
|
|
||||||
|
JsonPath theSectionJsonPath = null;
|
||||||
|
Object data = null;
|
||||||
|
try {
|
||||||
|
theSectionJsonPath = JsonPath.compile(sectionJSONPath);
|
||||||
|
data = theSectionJsonPath.read(theWholeProjectAsJSON, configuration);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Error on searching the section " + sectionJSONPath + " in the JSON Project: "
|
||||||
|
+ theWholeProjectAsJSON);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("Data is instace of: " + data.getClass());
|
||||||
|
LOG.debug("data to string: " + data.toString());
|
||||||
|
|
||||||
|
// Splitting the General Document in bson.Document according to list of
|
||||||
|
// GcubeProfiles
|
||||||
|
List<Document> listBSONDocument = new ArrayList<Document>();
|
||||||
|
if (data instanceof org.json.JSONObject) {
|
||||||
|
String jsonString = data.toString();
|
||||||
|
LOG.debug("the JSON to string: " + jsonString);
|
||||||
|
Document sectionDoc = Document.parse(jsonString);
|
||||||
|
boolean isAccessibleSection = isAccessibleSectionAccordingToPolicy(sectionDoc, sectionJSONPath,
|
||||||
|
username);
|
||||||
|
if (isAccessibleSection) {
|
||||||
|
listBSONDocument.add(sectionDoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (data instanceof org.json.JSONArray) {
|
||||||
|
org.json.JSONArray dataArray = (org.json.JSONArray) data;
|
||||||
|
for (int i = 0; i < dataArray.length(); i++) {
|
||||||
|
String jsonString = dataArray.get(i).toString();
|
||||||
|
LOG.debug("the array " + i + " JSON to string: " + jsonString);
|
||||||
|
Document sectionDoc = Document.parse(jsonString);
|
||||||
|
boolean isAccessibleSection = isAccessibleSectionAccordingToPolicy(sectionDoc, sectionJSONPath,
|
||||||
|
username);
|
||||||
|
if (isAccessibleSection) {
|
||||||
|
listBSONDocument.add(sectionDoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("Result for " + gcubeProfileDV.getSectionName() + " is: " + listBSONDocument);
|
||||||
|
List<MetaDataProfileBean> theProfileBeans = gcubeProfileMetaForUCD.getListMetadataProfileBean();
|
||||||
|
MetaDataProfileBean theProfileBean = theProfileBeans.get(0);
|
||||||
|
|
||||||
|
// For each bson.Document creating the SubDocumentView
|
||||||
|
for (int i = 0; i < listBSONDocument.size(); i++) {
|
||||||
|
Document fromSectionDoc = listBSONDocument.get(i);
|
||||||
|
SubDocumentView subDocumentView = new SubDocumentView();
|
||||||
|
Document toSectionDoc = new Document();
|
||||||
|
// Filling the SubDocumentView metadata with the metadataField.getFieldName()
|
||||||
|
// read from the Profile
|
||||||
|
for (MetadataFieldWrapper metadataField : theProfileBean.getMetadataFields()) {
|
||||||
|
|
||||||
|
String theFieldName = metadataField.getFieldId() != null ? metadataField.getFieldId()
|
||||||
|
: metadataField.getFieldName();
|
||||||
|
LOG.debug("reading theFieldName: " + theFieldName);
|
||||||
|
Object theOBJFieldValue = fromSectionDoc.get(theFieldName);
|
||||||
|
|
||||||
|
// NB: Using ALWAYS THE metadataField.getFieldName() as LABEL
|
||||||
|
toSectionDoc = sanitizeDocumentValue(toSectionDoc, metadataField.getFieldName(), theOBJFieldValue);
|
||||||
|
|
||||||
|
}
|
||||||
|
String subToJSON = toSectionDoc.toJson();
|
||||||
|
LOG.debug("theSubSetionDoc is: " + subToJSON);
|
||||||
|
subDocumentView.setMetadataAsJSON(toSectionDoc.toJson());
|
||||||
|
|
||||||
|
// Reading filePaths
|
||||||
|
List<FilePathDV> filePaths = gcubeProfileDV.getFilePaths();
|
||||||
|
|
||||||
|
// READING fileset* field ACCORDING TO filePaths OF THE 'gcubeProfiles' CONFIG
|
||||||
|
if (filePaths != null) {
|
||||||
|
String fromSectionDocJSON = fromSectionDoc.toJson();
|
||||||
|
List<FilesetDV> listFiles = new ArrayList<FilesetDV>();
|
||||||
|
List<FilesetDV> listImages = new ArrayList<FilesetDV>();
|
||||||
|
List<GCubeSDIViewerLayerDV> listLayers = new ArrayList<GCubeSDIViewerLayerDV>();
|
||||||
|
for (FilePathDV filePath : filePaths) {
|
||||||
|
|
||||||
|
// Reading Fileset _payloads
|
||||||
|
String filesetJSONPath = String.format("%s.%s", JSON_$_POINTER, filePath.getFieldName());
|
||||||
|
List<Payload> listPayloads = readPayloadsForFileset(filesetJSONPath, fromSectionDocJSON);
|
||||||
|
FilesetDV filesetDV = new FilesetDV();
|
||||||
|
filesetDV.setName(filePath.getGcubeProfileFieldName());
|
||||||
|
for (Payload payload : listPayloads) {
|
||||||
|
PayloadDV payloadDV = ConvertToDataValueObjectModel.toPayloadDV(payload);
|
||||||
|
filesetDV.addPayloadDV(payloadDV);
|
||||||
|
boolean isImage = ImageDetector.isImage(payload.getMimetype());
|
||||||
|
|
||||||
|
if (isImage) {
|
||||||
|
listImages.add(filesetDV);
|
||||||
|
} else {
|
||||||
|
listFiles.add(filesetDV);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reading Fileset _materializations
|
||||||
|
listLayers = readGcubeSDILayersForFileset(filesetJSONPath, fromSectionDocJSON);
|
||||||
|
|
||||||
|
}
|
||||||
|
subDocumentView.setListFiles(listFiles);
|
||||||
|
subDocumentView.setListImages(listImages);
|
||||||
|
subDocumentView.setListLayers(listLayers);
|
||||||
|
}
|
||||||
|
|
||||||
|
sectionView.addSubDocument(subDocumentView);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
projectView.addSectionView(sectionView);
|
||||||
|
}
|
||||||
|
|
||||||
|
return projectView;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read payloads for fileset.
|
||||||
|
*
|
||||||
|
* @param filesetJSONPath the fileset JSON path
|
||||||
|
* @param sectionJSONDocument the section JSON document
|
||||||
|
* @return the list
|
||||||
|
*/
|
||||||
|
public static List<Payload> readPayloadsForFileset(String filesetJSONPath, String sectionJSONDocument) {
|
||||||
|
LOG.debug("readPayloadsForFileset called");
|
||||||
|
|
||||||
|
List<Payload> listPayloads = new ArrayList<Payload>();
|
||||||
|
String _payloadsJSONPath = String.format("%s.%s", filesetJSONPath, _PAYLOADS);
|
||||||
|
try {
|
||||||
|
com.jayway.jsonpath.Configuration configuration = com.jayway.jsonpath.Configuration.builder()
|
||||||
|
.jsonProvider(new JsonOrgJsonProvider()).build();
|
||||||
|
|
||||||
|
LOG.info("Reading sectionPath at {} into section document {}", _payloadsJSONPath, sectionJSONDocument);
|
||||||
|
JsonPath theSectionPolycJsonPath = JsonPath.compile(_payloadsJSONPath);
|
||||||
|
Object _payloads = theSectionPolycJsonPath.read(sectionJSONDocument, configuration).toString();
|
||||||
|
|
||||||
|
if (_payloads instanceof String) {
|
||||||
|
String toStringPayloads = (String) _payloads;
|
||||||
|
LOG.trace("The _payloads is a String {}", toStringPayloads);
|
||||||
|
JSONArray jsonArray = new JSONArray(toStringPayloads);
|
||||||
|
for (int i = 0; i < jsonArray.length(); i++) {
|
||||||
|
Payload payload = Serialization.read(jsonArray.getJSONObject(i).toString(), Payload.class);
|
||||||
|
listPayloads.add(payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.info("returning list of payloads {}", listPayloads);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Error on reading the JSON Path " + _payloadsJSONPath + " in the doc " + sectionJSONDocument, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return listPayloads;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read images for fileset.
|
||||||
|
*
|
||||||
|
* @param parentJSONPath the parent JSON path
|
||||||
|
* @param sectionJSONDocument the section JSON document
|
||||||
|
* @param limitToFirstOneFound the limit to first one found
|
||||||
|
* @return the list
|
||||||
|
*/
|
||||||
|
public static List<PayloadDV> readImagesForFileset(String parentJSONPath, String sectionJSONDocument,
|
||||||
|
boolean limitToFirstOneFound) {
|
||||||
|
LOG.debug("readImagesForFileset called");
|
||||||
|
|
||||||
|
List<PayloadDV> listImages = new ArrayList<PayloadDV>();
|
||||||
|
com.jayway.jsonpath.Configuration config = com.jayway.jsonpath.Configuration.builder()
|
||||||
|
.jsonProvider(new JsonOrgJsonProvider()).build();
|
||||||
|
// Reading Fileset _payloads
|
||||||
|
String filesetJSONPath = String.format("%s.%s", parentJSONPath, _PAYLOADS);
|
||||||
|
LOG.info("Reading sectionPath {} into section document {}", filesetJSONPath, sectionJSONDocument);
|
||||||
|
JsonPath theSectionPolycJsonPath = JsonPath.compile(filesetJSONPath);
|
||||||
|
Object _filesets = theSectionPolycJsonPath.read(sectionJSONDocument, config);
|
||||||
|
|
||||||
|
List<Payload> payloads = new ArrayList<Payload>();
|
||||||
|
List<Payload> listPayloads = null;
|
||||||
|
try {
|
||||||
|
listPayloads = recursiveFetchingPayloads(config, _filesets, payloads);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Error occurred on fetching the payloads: ", e);
|
||||||
|
}
|
||||||
|
if (listPayloads != null) {
|
||||||
|
for (Payload payload : listPayloads) {
|
||||||
|
boolean isImage = ImageDetector.isImage(payload.getMimetype());
|
||||||
|
if (isImage) {
|
||||||
|
PayloadDV payloadDV = ConvertToDataValueObjectModel.toPayloadDV(payload);
|
||||||
|
listImages.add(payloadDV);
|
||||||
|
if (limitToFirstOneFound && listImages.size() == 1)
|
||||||
|
return listImages;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("readImagesForFileset returning listOfImages: " + listImages);
|
||||||
|
return listImages;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read gcube SDI layers for fileset.
|
||||||
|
*
|
||||||
|
* @param materializationParentJSONPath the materialization parent JSON path
|
||||||
|
* @param sectionJSONDocument the section JSON document
|
||||||
|
* @return the list
|
||||||
|
*/
|
||||||
|
public static List<GCubeSDIViewerLayerDV> readGcubeSDILayersForFileset(String materializationParentJSONPath,
|
||||||
|
String sectionJSONDocument) {
|
||||||
|
LOG.debug("readGcubeSDILayersForFileset called");
|
||||||
|
|
||||||
|
List<GCubeSDIViewerLayerDV> listSDILayers = new ArrayList<GCubeSDIViewerLayerDV>();
|
||||||
|
String _materializationsJSONPath = String.format("%s.%s", materializationParentJSONPath, _MATERIALIZATIONS);
|
||||||
|
|
||||||
|
try {
|
||||||
|
com.jayway.jsonpath.Configuration configurationJSONSmart = com.jayway.jsonpath.Configuration.builder()
|
||||||
|
.jsonProvider(new JsonOrgJsonProvider()).build();
|
||||||
|
|
||||||
|
LOG.info("Reading sectionPath {} into section document {}", _materializationsJSONPath, sectionJSONDocument);
|
||||||
|
JsonPath theSectionPolycJsonPath = JsonPath.compile(_materializationsJSONPath);
|
||||||
|
Object _materializations = theSectionPolycJsonPath.read(sectionJSONDocument, configurationJSONSmart);
|
||||||
|
|
||||||
|
LOG.trace("_materializations.class(): " + _materializations.getClass());
|
||||||
|
|
||||||
|
listSDILayers = recursiveFetchingLayers(configurationJSONSmart, _materializations, listSDILayers);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Error on reading the JSON Path " + _materializationsJSONPath + " in the doc "
|
||||||
|
+ sectionJSONDocument, e);
|
||||||
|
}
|
||||||
|
LOG.info("returning list of layers {}", listSDILayers);
|
||||||
|
return listSDILayers;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursive fetching layers.
|
||||||
|
*
|
||||||
|
* @param config the config
|
||||||
|
* @param objectJSON the object JSON
|
||||||
|
* @param listSDILayers the list SDI layers
|
||||||
|
* @return the list
|
||||||
|
* @throws JSONException the JSON exception
|
||||||
|
*/
|
||||||
|
private static List<GCubeSDIViewerLayerDV> recursiveFetchingLayers(com.jayway.jsonpath.Configuration config,
|
||||||
|
Object objectJSON, List<GCubeSDIViewerLayerDV> listSDILayers) throws JSONException {
|
||||||
|
|
||||||
|
if (objectJSON == null)
|
||||||
|
return listSDILayers;
|
||||||
|
|
||||||
|
if (objectJSON instanceof JSONArray) {
|
||||||
|
JSONArray theJsonArray = (JSONArray) objectJSON;
|
||||||
|
LOG.trace("jsonArray: " + theJsonArray.toString(3));
|
||||||
|
|
||||||
|
for (int i = 0; i < theJsonArray.length(); i++) {
|
||||||
|
recursiveFetchingLayers(config, theJsonArray.get(i), listSDILayers);
|
||||||
|
}
|
||||||
|
} else if (objectJSON instanceof JSONObject) {
|
||||||
|
JSONObject theJsonObject = (JSONObject) objectJSON;
|
||||||
|
LOG.trace("theJSONObject: " + theJsonObject.toString(3));
|
||||||
|
GCubeSDIViewerLayerDV gsdiLayer = converLayer(config, theJsonObject);
|
||||||
|
listSDILayers.add(gsdiLayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return listSDILayers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursive fetching payloads.
|
||||||
|
*
|
||||||
|
* @param config the config
|
||||||
|
* @param objectJSON the object JSON
|
||||||
|
* @param payloads the payloads
|
||||||
|
* @return the list
|
||||||
|
* @throws JSONException the JSON exception
|
||||||
|
*/
|
||||||
|
public static List<Payload> recursiveFetchingPayloads(com.jayway.jsonpath.Configuration config, Object objectJSON,
|
||||||
|
List<Payload> payloads) throws JSONException {
|
||||||
|
LOG.debug("recursiveFetchingPayloads called");
|
||||||
|
|
||||||
|
if (objectJSON == null)
|
||||||
|
return payloads;
|
||||||
|
|
||||||
|
if (objectJSON instanceof JSONArray) {
|
||||||
|
JSONArray theJsonArray = (JSONArray) objectJSON;
|
||||||
|
LOG.trace("jsonArray: " + theJsonArray.toString(3));
|
||||||
|
|
||||||
|
for (int i = 0; i < theJsonArray.length(); i++) {
|
||||||
|
payloads = recursiveFetchingPayloads(config, theJsonArray.get(i), payloads);
|
||||||
|
}
|
||||||
|
} else if (objectJSON instanceof JSONObject) {
|
||||||
|
JSONObject toStringPayloads = (JSONObject) objectJSON;
|
||||||
|
LOG.trace("The _payloads is a String {}", toStringPayloads.toString(3));
|
||||||
|
Payload payload;
|
||||||
|
try {
|
||||||
|
payload = Serialization.read(toStringPayloads.toString(), Payload.class);
|
||||||
|
payloads.add(payload);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Error on converting the JSON Boject " + toStringPayloads + "as "
|
||||||
|
+ Payload.class.getSimpleName() + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return payloads;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Conver layer.
|
||||||
|
*
|
||||||
|
* @param config the config
|
||||||
|
* @param thJsonObject the th json object
|
||||||
|
* @return the g cube SDI viewer layer DV
|
||||||
|
*/
|
||||||
|
// TODO THIS PART SHOULD BE REVISITED/OPTIMIZED
|
||||||
|
private static GCubeSDIViewerLayerDV converLayer(com.jayway.jsonpath.Configuration config,
|
||||||
|
JSONObject thJsonObject) {
|
||||||
|
LOG.debug("converLayer called for " + thJsonObject);
|
||||||
|
|
||||||
|
GCubeSDIViewerLayerDV gsdiLayer = new GCubeSDIViewerLayerDV();
|
||||||
|
try {
|
||||||
|
String theType = thJsonObject.getString(_TYPE);
|
||||||
|
gsdiLayer.setType(theType);
|
||||||
|
LOG.debug(_TYPE + " is: " + theType);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("No " + _TYPE + " found", e);
|
||||||
|
}
|
||||||
|
String toSerializeJSONOBJ = thJsonObject.toString();
|
||||||
|
String jsonPath = null;
|
||||||
|
try {
|
||||||
|
jsonPath = String.format("%s.%s", JSON_$_POINTER, _BBOX);
|
||||||
|
HashMap<String, Object> bbox = JsonPath.using(config).parse(toSerializeJSONOBJ).read(jsonPath,
|
||||||
|
HashMap.class);
|
||||||
|
BBOXDV bboxDV = new BBOXDV(bbox);
|
||||||
|
gsdiLayer.setBbox(bboxDV);
|
||||||
|
LOG.debug(_BBOX + " is: " + bboxDV);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn(jsonPath + " error: ", e);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
jsonPath = String.format("%s.%s", JSON_$_POINTER, _OGC_LINKS);
|
||||||
|
String jsonString = JsonPath.using(config).parse(toSerializeJSONOBJ).read(jsonPath).toString();
|
||||||
|
Gson gson = new Gson();
|
||||||
|
HashMap<String, String> map = gson.fromJson(jsonString, HashMap.class);
|
||||||
|
gsdiLayer.setOgcLinks(map);
|
||||||
|
LOG.debug(_OGC_LINKS + " are: " + map);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn(jsonPath + " error: ", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
String wmsLink = gsdiLayer.getWMSLink();
|
||||||
|
if (wmsLink != null) {
|
||||||
|
String layerName = URLParserUtil.extractValueOfParameterFromURL("layers", wmsLink);
|
||||||
|
gsdiLayer.setLayerName(layerName);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn(jsonPath + " error: ", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("converLayer returning: " + gsdiLayer);
|
||||||
|
return gsdiLayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if is accessible section according to policy.
|
||||||
|
*
|
||||||
|
* @param section the section
|
||||||
|
* @param sectionJSONPath the section JSON path
|
||||||
|
* @param myLogin the my login
|
||||||
|
* @return true, if is accessible section according to policy
|
||||||
|
*/
|
||||||
|
private static boolean isAccessibleSectionAccordingToPolicy(Document section, String sectionJSONPath,
|
||||||
|
String myLogin) {
|
||||||
|
LOG.debug("isAccessibleSectionAccordingToPolicy called");
|
||||||
|
boolean isAccessible = true;
|
||||||
|
|
||||||
|
// Skipping the root, going to check the access_policy of subsections
|
||||||
|
if (sectionJSONPath.compareTo(JSON_$_POINTER) != 0) {
|
||||||
|
isAccessible = checkAccessPolicy(section.toJson(), myLogin);
|
||||||
|
}
|
||||||
|
|
||||||
|
return isAccessible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check access policy.
|
||||||
|
*
|
||||||
|
* @param sectionDocumentJSON the section document JSON
|
||||||
|
* @param myLogin the my login
|
||||||
|
* @return true, if successful
|
||||||
|
*/
|
||||||
|
private static boolean checkAccessPolicy(String sectionDocumentJSON, String myLogin) {
|
||||||
|
LOG.debug("checkAccessPolicy called");
|
||||||
|
// CHECKING THE POLICY
|
||||||
|
String accessPolicyPath = JSON_$_POINTER + "._access._policy";
|
||||||
|
boolean isAccessible = true;
|
||||||
|
try {
|
||||||
|
com.jayway.jsonpath.Configuration configuration = com.jayway.jsonpath.Configuration.builder()
|
||||||
|
.jsonProvider(new JsonOrgJsonProvider()).build();
|
||||||
|
|
||||||
|
LOG.info("Reading access policy at {} into section document {}", accessPolicyPath, sectionDocumentJSON);
|
||||||
|
JsonPath theSectionPolycJsonPath = JsonPath.compile(accessPolicyPath);
|
||||||
|
String _policy = theSectionPolycJsonPath.read(sectionDocumentJSON, configuration).toString();
|
||||||
|
LOG.info("The section {} has policy {}", accessPolicyPath, _policy);
|
||||||
|
isAccessible = GeportalCheckAccessPolicy.isAccessible(_policy, myLogin);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error(accessPolicyPath + " not found. Check OK");
|
||||||
|
}
|
||||||
|
LOG.info("Is the section {} accessible? {}", sectionDocumentJSON, isAccessible);
|
||||||
|
return isAccessible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sanitize document value.
|
||||||
|
*
|
||||||
|
* @param toDoc the to doc
|
||||||
|
* @param fieldLabel the field label
|
||||||
|
* @param theObjectFieldValue the the object field value
|
||||||
|
* @return the document
|
||||||
|
*/
|
||||||
|
private static Document sanitizeDocumentValue(Document toDoc, String fieldLabel, Object theObjectFieldValue) {
|
||||||
|
|
||||||
|
if (theObjectFieldValue != null) {
|
||||||
|
if (theObjectFieldValue instanceof String) {
|
||||||
|
String toString = (String) theObjectFieldValue;
|
||||||
|
if (toString != null && !toString.isEmpty()) {
|
||||||
|
toDoc.append(fieldLabel, theObjectFieldValue);
|
||||||
|
} else {
|
||||||
|
LOG.debug("Skipping String field " + fieldLabel + " its value is null or empty");
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (theObjectFieldValue instanceof ArrayList) {
|
||||||
|
ArrayList toArrayList = (ArrayList) theObjectFieldValue;
|
||||||
|
if (toArrayList != null && !toArrayList.isEmpty()) {
|
||||||
|
toDoc.append(fieldLabel, theObjectFieldValue);
|
||||||
|
} else {
|
||||||
|
LOG.debug("Skipping ArrayList field " + fieldLabel + " its value is null or empty");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toDoc.append(fieldLabel, theObjectFieldValue);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LOG.debug("Skipping field " + fieldLabel + " its value is null or empty");
|
||||||
|
}
|
||||||
|
|
||||||
|
return toDoc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pretty print JSON.
|
||||||
|
*
|
||||||
|
* @param jsonString the json string
|
||||||
|
* @return the string
|
||||||
|
*/
|
||||||
|
private static String prettyPrintJSON(String jsonString) {
|
||||||
|
|
||||||
|
Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||||
|
JsonObject jsonObject = new JsonParser().parse(jsonString).getAsJsonObject();
|
||||||
|
return gson.toJson(jsonObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pretty print project view.
|
||||||
|
*
|
||||||
|
* @param projectView the project view
|
||||||
|
*/
|
||||||
|
public static void prettyPrintProjectView(ProjectView projectView) {
|
||||||
|
|
||||||
|
for (SectionView section : projectView.getListSections()) {
|
||||||
|
System.out.println("\n\n###### Section Title: " + section.getSectionTitle() + " ######");
|
||||||
|
int i = 1;
|
||||||
|
for (SubDocumentView subDocument : section.getListSubDocuments()) {
|
||||||
|
System.out.println("## " + SubDocumentView.class.getSimpleName() + " n." + i);
|
||||||
|
System.out.println("***** Metadata");
|
||||||
|
System.out.println(prettyPrintJSON(subDocument.getMetadataAsJSON()));
|
||||||
|
System.out.println("***** Files");
|
||||||
|
if (subDocument.getListFiles() != null) {
|
||||||
|
for (FilesetDV filesetDV : subDocument.getListFiles()) {
|
||||||
|
System.out.println("******* File Fileset name: " + filesetDV.getName());
|
||||||
|
for (PayloadDV payload : filesetDV.getListPayload()) {
|
||||||
|
System.out.println("********* Payload: " + payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("***** Images");
|
||||||
|
if (subDocument.getListImages() != null) {
|
||||||
|
for (FilesetDV filesetDV : subDocument.getListImages()) {
|
||||||
|
System.out.println("******* Image Fileset name: " + filesetDV.getName());
|
||||||
|
for (PayloadDV payload : filesetDV.getListPayload()) {
|
||||||
|
System.out.println("********* Payload: " + payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("***** Layers");
|
||||||
|
if (subDocument.getListLayers() != null) {
|
||||||
|
for (GCubeSDIViewerLayerDV layer : subDocument.getListLayers()) {
|
||||||
|
System.out.println("******* Layer type: " + layer.getType());
|
||||||
|
System.out.println("******* Layer: " + layer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pretty print project view.
|
||||||
|
*
|
||||||
|
* @param projectEdit the project edit
|
||||||
|
*/
|
||||||
|
public static void prettyPrintProjectEdit(ProjectEdit projectEdit) {
|
||||||
|
|
||||||
|
for (MetaDataProfileBeanExt mpb : projectEdit.getTheProfileBeans()) {
|
||||||
|
System.out.println("\n\n###### Title: " + mpb.getTitle() + " - Type: " + mpb.getType() + " ######");
|
||||||
|
int i = 1;
|
||||||
|
for (MetadataFieldWrapper fieldWrapper : mpb.getMetadataFields()) {
|
||||||
|
System.out.println("## " + MetadataFieldWrapper.class.getSimpleName() + " n." + i);
|
||||||
|
System.out.println("***** Metadata");
|
||||||
|
// System.out.println(mfw);
|
||||||
|
System.out.println("\tfieldId: " + fieldWrapper.getFieldId() + ", fieldName: "
|
||||||
|
+ fieldWrapper.getFieldName() + ", CurrentValue: " + fieldWrapper.getCurrentValue());
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
i = 1;
|
||||||
|
System.out.println("***** Files");
|
||||||
|
for (FilesetDV fileSet : mpb.getListFileset()) {
|
||||||
|
System.out.println(
|
||||||
|
"## " + FilesetDV.class.getSimpleName() + " n." + i + " has name: " + fileSet.getName());
|
||||||
|
|
||||||
|
if (fileSet.getListPayload() != null) {
|
||||||
|
int j = 0;
|
||||||
|
for (PayloadDV payload : fileSet.getListPayload()) {
|
||||||
|
System.out.println("\t" + ++j + ") " + payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package org.gcube.application.geoportaldatamapper;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ImageDetector {
|
||||||
|
|
||||||
|
public static enum COMMON_IMAGES_FORMAT {
|
||||||
|
gif, png, jpeg, jpg, bmp, tif, tiff, svg, avif, webp
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class ImageDetector.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Oct 18, 2022
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the names.
|
||||||
|
*
|
||||||
|
* @param e the e
|
||||||
|
* @return the names
|
||||||
|
*/
|
||||||
|
private static String[] getNames(Class<? extends Enum<?>> e) {
|
||||||
|
return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> listFormatImages;
|
||||||
|
|
||||||
|
static {
|
||||||
|
|
||||||
|
String[] arrayImgs = ImageDetector.getNames(COMMON_IMAGES_FORMAT.class);
|
||||||
|
listFormatImages = Arrays.asList(arrayImgs);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if is image.
|
||||||
|
*
|
||||||
|
* @param mimeType the mime type
|
||||||
|
* @return true, if is image
|
||||||
|
*/
|
||||||
|
public static boolean isImage(String mimeType) {
|
||||||
|
if (mimeType == null || mimeType.isEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
String inputImageFormat = mimeType.replaceAll("image/", "");
|
||||||
|
|
||||||
|
return listFormatImages.contains(inputImageFormat);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package org.gcube.application.geoportaldatamapper;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLDecoder;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class URLUtil.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
||||||
|
*
|
||||||
|
* Oct 29, 2020
|
||||||
|
*/
|
||||||
|
public class URLParserUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the parameter to query string.
|
||||||
|
*
|
||||||
|
* @param key the key
|
||||||
|
* @param value the value
|
||||||
|
* @param prefixAmpersand the prefix ampersand
|
||||||
|
* @param suffixAmpersand the suffix ampersand
|
||||||
|
* @return the string
|
||||||
|
*/
|
||||||
|
public static String addParameterToQueryString(String key, String value, boolean prefixAmpersand,
|
||||||
|
boolean suffixAmpersand) {
|
||||||
|
|
||||||
|
String queryParameter = "";
|
||||||
|
|
||||||
|
if (prefixAmpersand)
|
||||||
|
queryParameter += "&";
|
||||||
|
|
||||||
|
queryParameter += key + "=" + value;
|
||||||
|
|
||||||
|
if (suffixAmpersand)
|
||||||
|
queryParameter += "&";
|
||||||
|
|
||||||
|
return queryParameter;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract value of parameter from URL.
|
||||||
|
*
|
||||||
|
* @param paramName the param name
|
||||||
|
* @param url the url
|
||||||
|
* @return the string
|
||||||
|
*/
|
||||||
|
public static String extractValueOfParameterFromURL(String paramName, String url) {
|
||||||
|
int index = url.toLowerCase().indexOf(paramName.toLowerCase() + "="); // ADDING CHAR "=" IN TAIL TO BE SURE THAT
|
||||||
|
// IT
|
||||||
|
// IS A PARAMETER
|
||||||
|
String value = "";
|
||||||
|
if (index > -1) {
|
||||||
|
|
||||||
|
int start = index + paramName.length() + 1; // add +1 for char '='
|
||||||
|
String sub = url.substring(start, url.length());
|
||||||
|
int indexOfSeparator = sub.indexOf("&");
|
||||||
|
int end = indexOfSeparator != -1 ? indexOfSeparator : sub.length();
|
||||||
|
value = sub.substring(0, end);
|
||||||
|
} else
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Split query.
|
||||||
|
*
|
||||||
|
* @param url the url
|
||||||
|
* @return the map
|
||||||
|
* @throws UnsupportedEncodingException the unsupported encoding exception
|
||||||
|
*/
|
||||||
|
public static Map<String, List<String>> splitQuery(URL url) throws UnsupportedEncodingException {
|
||||||
|
final Map<String, List<String>> query_pairs = new LinkedHashMap<String, List<String>>();
|
||||||
|
final String[] pairs = url.getQuery().split("&");
|
||||||
|
for (String pair : pairs) {
|
||||||
|
final int idx = pair.indexOf("=");
|
||||||
|
final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair;
|
||||||
|
if (!query_pairs.containsKey(key)) {
|
||||||
|
query_pairs.put(key, new LinkedList<String>());
|
||||||
|
}
|
||||||
|
final String value = idx > 0 && pair.length() > idx + 1
|
||||||
|
? URLDecoder.decode(pair.substring(idx + 1), "UTF-8")
|
||||||
|
: null;
|
||||||
|
query_pairs.get(key).add(value);
|
||||||
|
}
|
||||||
|
return query_pairs;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,131 @@
|
||||||
|
package org.gcube.application.geoportaldatamapper.shared;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.innerobject.FilesetDV;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.innerobject.PayloadDV;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.CategoryWrapper;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
||||||
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class MetaDataProfileBeanExt.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Nov 23, 2022
|
||||||
|
*/
|
||||||
|
public class MetaDataProfileBeanExt extends MetaDataProfileBean implements Cloneable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 2518128223147908835L;
|
||||||
|
private List<FilesetDV> listFileset = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new meta data profile bean ext.
|
||||||
|
*/
|
||||||
|
public MetaDataProfileBeanExt() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new meta data profile bean ext.
|
||||||
|
*
|
||||||
|
* @param type the type
|
||||||
|
* @param title the title
|
||||||
|
* @param metadataFields the metadata fields
|
||||||
|
* @param categories the categories
|
||||||
|
*/
|
||||||
|
public MetaDataProfileBeanExt(String type, String title, List<MetadataFieldWrapper> metadataFields,
|
||||||
|
List<CategoryWrapper> categories) {
|
||||||
|
super(type, title, metadataFields, categories);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list fileset.
|
||||||
|
*
|
||||||
|
* @return the list fileset
|
||||||
|
*/
|
||||||
|
public List<FilesetDV> getListFileset() {
|
||||||
|
if (listFileset == null)
|
||||||
|
listFileset = new ArrayList<FilesetDV>();
|
||||||
|
return listFileset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the list fileset.
|
||||||
|
*
|
||||||
|
* @param listFileset the new list fileset
|
||||||
|
*/
|
||||||
|
public void setListFileset(List<FilesetDV> listFileset) {
|
||||||
|
this.listFileset = listFileset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected MetaDataProfileBeanExt clone() throws CloneNotSupportedException {
|
||||||
|
|
||||||
|
MetaDataProfileBeanExt clonedMDPBE = new MetaDataProfileBeanExt();
|
||||||
|
clonedMDPBE.setTitle(this.getTitle());
|
||||||
|
clonedMDPBE.setType(this.getType());
|
||||||
|
ArrayList<FilesetDV> newListFileset = new ArrayList<FilesetDV>();
|
||||||
|
for (FilesetDV filesetDV : this.getListFileset()) {
|
||||||
|
FilesetDV newFileset = new FilesetDV();
|
||||||
|
for (PayloadDV payloadDV : filesetDV.getListPayload()) {
|
||||||
|
PayloadDV newPayloadDV = new PayloadDV();
|
||||||
|
newPayloadDV.setLink(payloadDV.getLink());
|
||||||
|
newPayloadDV.setMimetype(payloadDV.getMimetype());
|
||||||
|
newPayloadDV.setName(payloadDV.getName());
|
||||||
|
newPayloadDV.setStorageID(payloadDV.getStorageID());
|
||||||
|
newFileset.addPayloadDV(newPayloadDV);
|
||||||
|
}
|
||||||
|
|
||||||
|
newListFileset.add(newFileset);
|
||||||
|
}
|
||||||
|
clonedMDPBE.setListFileset(newListFileset);
|
||||||
|
|
||||||
|
ArrayList<MetadataFieldWrapper> newListMetadataFieldWrapper = new ArrayList<MetadataFieldWrapper>();
|
||||||
|
|
||||||
|
for (MetadataFieldWrapper mfw : this.getMetadataFields()) {
|
||||||
|
MetadataFieldWrapper newMfw = new MetadataFieldWrapper();
|
||||||
|
newMfw.setAsGroup(mfw.getAsGroup());
|
||||||
|
newMfw.setAsTag(mfw.getAsTag());
|
||||||
|
newMfw.setCurrentValue(mfw.getCurrentValue());
|
||||||
|
newMfw.setDefaultValue(mfw.getDefaultValue());
|
||||||
|
newMfw.setFieldId(mfw.getFieldId());
|
||||||
|
newMfw.setFieldName(mfw.getFieldName());
|
||||||
|
newMfw.setFieldNameFromCategory(mfw.getFieldNameFromCategory());
|
||||||
|
newMfw.setMandatory(mfw.getMandatory());
|
||||||
|
newMfw.setMaxOccurs(mfw.getMaxOccurs());
|
||||||
|
newMfw.setMultiSelection(mfw.isMultiSelection());
|
||||||
|
newMfw.setNote(mfw.getNote());
|
||||||
|
newMfw.setOwnerCategory(mfw.getOwnerCategory());
|
||||||
|
newMfw.setType(mfw.getType());
|
||||||
|
newMfw.setValidator(mfw.getValidator());
|
||||||
|
newMfw.setVocabulary(mfw.getVocabulary());
|
||||||
|
|
||||||
|
newListMetadataFieldWrapper.add(newMfw);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
clonedMDPBE.setMetadataFields(newListMetadataFieldWrapper);
|
||||||
|
|
||||||
|
return clonedMDPBE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append("MetaDataProfileBeanExt [getType()=");
|
||||||
|
builder.append(getType());
|
||||||
|
builder.append(", getTitle()=");
|
||||||
|
builder.append(getTitle());
|
||||||
|
builder.append(", getMetadataFields()=");
|
||||||
|
builder.append(getMetadataFields());
|
||||||
|
builder.append("]");
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
package org.gcube.application.geoportaldatamapper.shared;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
||||||
|
|
||||||
|
public class ProjectEdit implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 2885327516680245601L;
|
||||||
|
|
||||||
|
private ProjectDV theProjectDV;
|
||||||
|
|
||||||
|
private List<MetaDataProfileBeanExt> theProfileBeans;
|
||||||
|
|
||||||
|
public ProjectEdit() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProjectDV getTheProjectDV() {
|
||||||
|
return theProjectDV;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MetaDataProfileBeanExt> getTheProfileBeans() {
|
||||||
|
return theProfileBeans;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTheProjectDV(ProjectDV theProjectDV) {
|
||||||
|
this.theProjectDV = theProjectDV;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTheProfileBeans(List<MetaDataProfileBeanExt> theProfileBeans) {
|
||||||
|
this.theProfileBeans = theProfileBeans;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append("ProjectEdit [theProjectDV=");
|
||||||
|
builder.append(theProjectDV);
|
||||||
|
builder.append(", theProfileBeans=");
|
||||||
|
builder.append(theProfileBeans);
|
||||||
|
builder.append("]");
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module rename-to='geoportaldatamapper'>
|
||||||
|
<!-- Inherit the core Web Toolkit stuff. -->
|
||||||
|
<inherits name='com.google.gwt.user.User' />
|
||||||
|
|
||||||
|
<!-- Specify the paths for translatable code -->
|
||||||
|
<source path='client' />
|
||||||
|
<source path='shared' />
|
||||||
|
|
||||||
|
</module>
|
|
@ -0,0 +1,129 @@
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
|
||||||
|
import org.gcube.application.geoportalcommon.ProjectDVBuilder;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
||||||
|
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.authorization.library.provider.SecurityTokenProvider;
|
||||||
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class Geoportal_DataMapper_Tests.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Sep 9, 2022
|
||||||
|
*/
|
||||||
|
public class Geoportal_DataMapper_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;
|
||||||
|
private ProjectsCaller clientProjects;
|
||||||
|
|
||||||
|
private static String PROFILE_ID = "profiledConcessioni";
|
||||||
|
private static String PROJECT_ID = "6384aaac308f5c28c5ee0888";
|
||||||
|
|
||||||
|
private static String USERNAME = "francesco.mangiacrapa";
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the client.
|
||||||
|
*
|
||||||
|
* @return the client
|
||||||
|
*/
|
||||||
|
@Before
|
||||||
|
public void getClient() {
|
||||||
|
readContextSettings();
|
||||||
|
// assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
clientUCD = GeoportalClientCaller.useCaseDescriptors();
|
||||||
|
clientProjects = GeoportalClientCaller.projects();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadProjectEdit() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
Project theProject = clientProjects.getProjectByID(PROFILE_ID, PROJECT_ID);
|
||||||
|
ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
|
||||||
|
projectBuilder.relationships(true);
|
||||||
|
ProjectDV theProjectDV = ConvertToDataValueObjectModel.toProjectDV(theProject, projectBuilder);
|
||||||
|
ProjectEdit projectEdit = Geoportal_JSON_Mapper.loadProjectEdit(theProjectDV, CONTEXT, USERNAME);
|
||||||
|
Geoportal_JSON_Mapper.prettyPrintProjectEdit(projectEdit);
|
||||||
|
|
||||||
|
// ProjectView projectView = Geoportal_JSON_Mapper.loadProjectView(theProjectDV, CONTEXT, USERNAME);
|
||||||
|
// Geoportal_JSON_Mapper.prettyPrintProjectView(projectView);
|
||||||
|
System.out.println("\n\n testReadProjectEdit terminated!!!");
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Error");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test
|
||||||
|
public void testReadProjectView() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
Project theProject = clientProjects.getProjectByID(PROFILE_ID, PROJECT_ID);
|
||||||
|
ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
|
||||||
|
projectBuilder.relationships(true);
|
||||||
|
|
||||||
|
System.out.println("project json: " + theProject.getTheDocument().toJson());
|
||||||
|
|
||||||
|
ProjectDV theProjectDV = ConvertToDataValueObjectModel.toProjectDV(theProject, projectBuilder);
|
||||||
|
ProjectView projectView = Geoportal_JSON_Mapper.loadProjectView(theProjectDV, CONTEXT, USERNAME);
|
||||||
|
Geoportal_JSON_Mapper.prettyPrintProjectView(projectView);
|
||||||
|
|
||||||
|
// ProjectView projectView = Geoportal_JSON_Mapper.loadProjectView(theProjectDV, CONTEXT, USERNAME);
|
||||||
|
// Geoportal_JSON_Mapper.prettyPrintProjectView(projectView);
|
||||||
|
System.out.println("\n\n testReadProjectView terminated!!!");
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Error");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
/gcube_config.properties
|
Loading…
Reference in New Issue