Compare commits
No commits in common. "5cfffd201ae7ffd7f2de751327bf98302085803f" and "86c1fed26327361155ac251a848ca2db5c5a1fbe" have entirely different histories.
5cfffd201a
...
86c1fed263
|
@ -2,10 +2,5 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
|
|
||||||
# Changelog for org.gcube.spatial.data.gcube-sdi-suite
|
# Changelog for org.gcube.spatial.data.gcube-sdi-suite
|
||||||
|
|
||||||
## [v1.0.1] - 2021-12-07
|
|
||||||
- Introduced cms-plugin-framework
|
|
||||||
- Introduced concessioni use case
|
|
||||||
- Fixed internal group ids
|
|
||||||
|
|
||||||
## [v1.0.0] - 2021-2-11
|
## [v1.0.0] - 2021-2-11
|
||||||
- First release
|
First release
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms-plugin-framework
|
|
||||||
|
|
||||||
## [v1.0.0] 2021-09-20
|
|
||||||
- First release
|
|
|
@ -1,26 +0,0 @@
|
||||||
# Acknowledgments
|
|
||||||
|
|
||||||
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](https://cordis.europa.eu/project/id/004260) (grant no. 004260).
|
|
||||||
- the Seventh Framework Programme for research, technological development and demonstration
|
|
||||||
- [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488);
|
|
||||||
- [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019);
|
|
||||||
- [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465);
|
|
||||||
- [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644);
|
|
||||||
- [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754).
|
|
||||||
- the H2020 research and innovation programme
|
|
||||||
- [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024);
|
|
||||||
- [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119);
|
|
||||||
- [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142);
|
|
||||||
- [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182);
|
|
||||||
- [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680);
|
|
||||||
- [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610);
|
|
||||||
- [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001);
|
|
||||||
- [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194);
|
|
||||||
- [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914);
|
|
||||||
- [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091);
|
|
||||||
- [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650);
|
|
||||||
- [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409);
|
|
||||||
- [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042);
|
|
|
@ -1,312 +0,0 @@
|
||||||
# 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
|
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
CMS - Plugin Framework
|
|
||||||
--------------------------------------------------
|
|
||||||
|
|
||||||
CMS Plugin Framework is a library containing the definition of Java interfaces that plugins should implement
|
|
||||||
|
|
||||||
## Built with
|
|
||||||
* [gCube SDI] (https://gcube.wiki.gcube-system.org/gcube/) - The gCube SDI
|
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
|
||||||
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
|
||||||
* [JAX-RS](https://github.com/eclipse-ee4j/jaxrs-api) - Java™ API for RESTful Web Services
|
|
||||||
* [Jersey](https://jersey.github.io/) - JAX-RS runtime
|
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal).
|
|
||||||
|
|
||||||
## Change log
|
|
||||||
|
|
||||||
See [CHANGELOG.md](CHANGELOG.md).
|
|
||||||
|
|
||||||
## 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);
|
|
||||||
- iMarine(grant no. 283644);
|
|
||||||
- EUBrazilOpenBio (grant no. 288754).
|
|
||||||
- the H2020 research and innovation programme
|
|
||||||
- SoBigData (grant no. 654024);
|
|
||||||
- PARTHENOS (grant no. 654119);
|
|
||||||
- EGIEngage (grant no. 654142);
|
|
||||||
- ENVRIplus (grant no. 654182);
|
|
||||||
- BlueBRIDGE (grant no. 675680);
|
|
||||||
- PerformFish (grant no. 727610);
|
|
||||||
- AGINFRAplus (grant no. 731001);
|
|
||||||
- DESIRA (grant no. 818194);
|
|
||||||
- ARIADNEplus (grant no. 823914);
|
|
||||||
- RISIS2 (grant no. 824091);
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<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>
|
|
||||||
<artifactId>cms-plugin-framework</artifactId>
|
|
||||||
<version>1.0.0</version>
|
|
||||||
|
|
||||||
<parent>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
|
||||||
<version>1.0.1</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<gitBaseUrl>https://code-repo.d4science.org/gCubeSystem</gitBaseUrl>
|
|
||||||
<sis.version>1.0</sis.version>
|
|
||||||
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<scm>
|
|
||||||
<connection>scm:git:${gitBaseUrl}/gcube-cms-suite</connection>
|
|
||||||
<developerConnection>scm:git:${gitBaseUrl}/gcube-cms-suite</developerConnection>
|
|
||||||
<url>${gitBaseUrl}/gcube-cms-suite</url>
|
|
||||||
</scm>
|
|
||||||
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>geoportal-common</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.projectlombok</groupId>
|
|
||||||
<artifactId>lombok</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
|
@ -1,28 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins;
|
|
||||||
|
|
||||||
import org.gcube.application.cms.plugins.faults.InitializationException;
|
|
||||||
import org.gcube.application.cms.plugins.faults.ShutDownException;
|
|
||||||
import org.gcube.application.cms.plugins.reports.InitializationReport;
|
|
||||||
|
|
||||||
public interface InitializablePlugin extends Plugin{
|
|
||||||
/**
|
|
||||||
* To be called once per context
|
|
||||||
* @return
|
|
||||||
* @throws InitializationException
|
|
||||||
*/
|
|
||||||
|
|
||||||
public InitializationReport initInContext()throws InitializationException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* To be called for static initialization
|
|
||||||
* @return
|
|
||||||
* @throws InitializationException
|
|
||||||
*/
|
|
||||||
public InitializationReport init()throws InitializationException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* To be called at application shutdown
|
|
||||||
* @throws ShutDownException
|
|
||||||
*/
|
|
||||||
public void shutdown() throws ShutDownException;
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins;
|
|
||||||
|
|
||||||
import org.gcube.application.cms.plugins.faults.StepException;
|
|
||||||
import org.gcube.application.cms.plugins.reports.ExecutionReport;
|
|
||||||
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
|
||||||
|
|
||||||
public interface LifecycleManager extends InitializablePlugin{
|
|
||||||
|
|
||||||
// Lifecycle operations
|
|
||||||
|
|
||||||
public ExecutionReport performStep(StepExecutionRequest request)throws StepException;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins;
|
|
||||||
|
|
||||||
import org.gcube.application.cms.plugins.model.PluginDescriptor;
|
|
||||||
|
|
||||||
public interface Plugin {
|
|
||||||
|
|
||||||
public PluginDescriptor getDescriptor();
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins.faults;
|
|
||||||
|
|
||||||
public class InitializationException extends Exception{
|
|
||||||
|
|
||||||
public InitializationException() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public InitializationException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public InitializationException(String message, Throwable cause) {
|
|
||||||
super(message, cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
public InitializationException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
public InitializationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
|
|
||||||
super(message, cause, enableSuppression, writableStackTrace);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins.faults;
|
|
||||||
|
|
||||||
public class ShutDownException extends Exception {
|
|
||||||
|
|
||||||
public ShutDownException() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public ShutDownException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ShutDownException(String message, Throwable cause) {
|
|
||||||
super(message, cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ShutDownException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ShutDownException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
|
|
||||||
super(message, cause, enableSuppression, writableStackTrace);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins.faults;
|
|
||||||
|
|
||||||
public class StepException extends Exception {
|
|
||||||
|
|
||||||
public StepException() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public StepException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StepException(String message, Throwable cause) {
|
|
||||||
super(message, cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StepException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StepException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
|
|
||||||
super(message, cause, enableSuppression, writableStackTrace);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins.model;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ComparableVersion;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
public class PluginDescriptor {
|
|
||||||
|
|
||||||
public static class BaseTypes{
|
|
||||||
public static final String LIFECYCLE_MANAGER="LifecycleManagement";
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private String id;
|
|
||||||
@NonNull
|
|
||||||
private String type;
|
|
||||||
private String label;
|
|
||||||
private String description;
|
|
||||||
private ComparableVersion version;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins.reports;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class ExecutionReport extends Report{
|
|
||||||
|
|
||||||
StepExecutionRequest request;
|
|
||||||
|
|
||||||
ProfiledDocument result;
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins.reports;
|
|
||||||
|
|
||||||
public class InitializationReport {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins.reports;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class Report {
|
|
||||||
|
|
||||||
public static enum Status {
|
|
||||||
ERROR,WARNING,OK
|
|
||||||
}
|
|
||||||
|
|
||||||
private Status status;
|
|
||||||
private List<String> messages;
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package org.gcube.application.cms.plugins.requests;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
|
||||||
import org.gcube.application.geoportal.common.model.profile.Profile;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class StepExecutionRequest {
|
|
||||||
|
|
||||||
public static class Steps{
|
|
||||||
public static final String ON_INIT_DOCUMENT="@@@INIT_DOCUMENT@@";
|
|
||||||
public static final String ON_UPDATE_DOCUMENT="@@@UPDATE_DOCUMENT@@";
|
|
||||||
public static final String ON_DELETE_DOCUMENT="@@@DELETE_DOCUMENT@@";
|
|
||||||
|
|
||||||
public static final String ON_MATERIALIZE_DOCUMENT="@@@MATERIALIZE_DOCUMENT@@";
|
|
||||||
public static final String ON_DEMATERIALIZE_DOCUMENT="@@@DEMATERIALIZE_DOCUMENT@@";
|
|
||||||
|
|
||||||
public static final String ON_INDEX_DOCUMENT="@@@INDEX_DOCUMENT@@";
|
|
||||||
public static final String ON_DEINDEX_DOCUMENT="@@@DEINDEX_DOCUMENT@@";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Profile profile;
|
|
||||||
ProfiledDocument document;
|
|
||||||
String step;
|
|
||||||
Document callParameters;
|
|
||||||
}
|
|
|
@ -1,8 +1,5 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.cms-test-commons
|
# Changelog for org.gcube.application.cms.cms-test-commons
|
||||||
## [v1.0.1] - 2021-09-11
|
|
||||||
- Introduced profiled documents
|
|
||||||
|
|
||||||
## [v1.0.0] - 2021-09-11
|
## [v1.0.0] - 2021-09-11
|
||||||
- First release
|
First release
|
|
@ -5,14 +5,14 @@
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>cms-test-commons</artifactId>
|
<artifactId>cms-test-commons</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.0</version>
|
||||||
<name>CMS Test Commons</name>
|
<name>CMS Test Commons</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,21 +49,10 @@
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-common</artifactId>
|
<artifactId>geoportal-common</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.reflections</groupId>
|
|
||||||
<artifactId>reflections</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>cms-plugin-framework</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ch.qos.logback</groupId>
|
<groupId>ch.qos.logback</groupId>
|
||||||
<artifactId>logback-classic</artifactId>
|
<artifactId>logback-classic</artifactId>
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
package org.gcube.application.cms.tests;
|
|
||||||
|
|
||||||
import ch.qos.logback.core.net.SyslogOutputStream;
|
|
||||||
import org.gcube.application.cms.plugins.InitializablePlugin;
|
|
||||||
import org.gcube.application.cms.plugins.Plugin;
|
|
||||||
import org.gcube.application.cms.plugins.faults.InitializationException;
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.reflections.Reflections;
|
|
||||||
import org.reflections.util.ConfigurationBuilder;
|
|
||||||
import org.reflections.util.FilterBuilder;
|
|
||||||
|
|
||||||
import java.rmi.ServerError;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ServiceLoader;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
|
|
||||||
public class BasicPluginTest {
|
|
||||||
|
|
||||||
static List<Plugin> plugins;
|
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void checkPluginRegistration() {
|
|
||||||
|
|
||||||
|
|
||||||
Reflections reflections = new Reflections(
|
|
||||||
new ConfigurationBuilder()
|
|
||||||
.forPackage("org.gcube.application.cms")
|
|
||||||
.filterInputsBy(new FilterBuilder().includePackage("org.gcube.application.cms")));
|
|
||||||
|
|
||||||
reflections.getSubTypesOf(Plugin.class).iterator().forEachRemaining(pluginClass->{
|
|
||||||
if(!pluginClass.isInterface()){
|
|
||||||
try {
|
|
||||||
Plugin plugin = pluginClass.newInstance();
|
|
||||||
plugins.add(plugin);
|
|
||||||
}catch (Throwable t){
|
|
||||||
t.printStackTrace(System.err);
|
|
||||||
Assert.fail("Unable to Load "+pluginClass);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
Assert.assertFalse(plugins.isEmpty());
|
|
||||||
System.out.println("Plugin Loading OK");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void basicChecks(){
|
|
||||||
plugins.forEach(p->{
|
|
||||||
System.out.println("INIT Plugin "+p.getClass());
|
|
||||||
Assert.assertNotNull(p.getDescriptor());
|
|
||||||
Assert.assertNotNull(p.getDescriptor().getId());
|
|
||||||
Assert.assertNotNull(p.getDescriptor().getType());
|
|
||||||
Assert.assertNotNull(p.getDescriptor().getVersion());
|
|
||||||
if(p instanceof InitializablePlugin){
|
|
||||||
InitializablePlugin ip=(InitializablePlugin)p;
|
|
||||||
try {
|
|
||||||
ip.init();
|
|
||||||
} catch (InitializationException e) {
|
|
||||||
e.printStackTrace(System.err);
|
|
||||||
Assert.fail("Unable to Init "+p.getDescriptor().getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,20 +1,33 @@
|
||||||
package org.gcube.application.cms.tests.model.concessioni;
|
package org.gcube.application.cms.tests.model;
|
||||||
|
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
|
import sun.misc.IOUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLDecoder;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.jar.JarEntry;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class TestConcessioniFilters {
|
public class TestFilters {
|
||||||
|
|
||||||
public static final HashMap<String,String> filters=new HashMap<>();
|
public static final HashMap<String,String> filters=new HashMap<>();
|
||||||
|
|
||||||
static{
|
static{
|
||||||
|
|
||||||
for(File f:new File(TestConcessioniModel.getBaseFolder(),"filters").listFiles()){
|
for(File f:new File(TestModel.getBaseFolder(),"filters").listFiles()){
|
||||||
try {
|
try {
|
||||||
filters.put(f.getName(), Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()));
|
filters.put(f.getName(), Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
|
@ -1,4 +1,4 @@
|
||||||
package org.gcube.application.cms.tests.model.concessioni;
|
package org.gcube.application.cms.tests.model;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
@ -8,7 +8,7 @@ import java.util.Arrays;
|
||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.*;
|
import org.gcube.application.geoportal.common.model.legacy.*;
|
||||||
|
|
||||||
public class TestConcessioniModel {
|
public class TestModel {
|
||||||
|
|
||||||
public static File getBaseFolder(){
|
public static File getBaseFolder(){
|
||||||
File toReturn =new File("../test-data/concessioni");
|
File toReturn =new File("../test-data/concessioni");
|
|
@ -1,19 +1,21 @@
|
||||||
package org.gcube.application.cms.tests.model.concessioni;
|
package org.gcube.application.cms.tests.model;
|
||||||
|
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
|
import sun.misc.IOUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class TestConcessioniQueries {
|
public class TestQueries {
|
||||||
|
|
||||||
public static final HashMap<String,String> queries =new HashMap<>();
|
public static final HashMap<String,String> queries =new HashMap<>();
|
||||||
|
|
||||||
static{
|
static{
|
||||||
|
|
||||||
for(File f:new File(TestConcessioniModel.getBaseFolder(),"queries").listFiles()){
|
for(File f:new File(TestModel.getBaseFolder(),"queries").listFiles()){
|
||||||
try {
|
try {
|
||||||
queries.put(f.getName(), Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()));
|
queries.put(f.getName(), Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
|
@ -1,6 +0,0 @@
|
||||||
package org.gcube.application.cms.commons.model;
|
|
||||||
|
|
||||||
public class Serialization {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,7 +1,7 @@
|
||||||
package org.gcube.application.cms.commons.model.concessioni;
|
package org.gcube.application.cms.commons.model.concessioni;
|
||||||
|
|
||||||
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniFilters;
|
import org.gcube.application.cms.tests.model.TestFilters;
|
||||||
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
|
import org.gcube.application.cms.tests.model.TestModel;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -11,14 +11,14 @@ public class Models {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void checkFilters(){
|
public void checkFilters(){
|
||||||
assertTrue(TestConcessioniFilters.filters.size()>0);
|
assertTrue(TestFilters.filters.size()>0);
|
||||||
TestConcessioniFilters.filters.keySet().forEach(f -> {
|
TestFilters.filters.keySet().forEach(f -> {
|
||||||
System.out.println(f);});
|
System.out.println(f);});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void checkConcessione(){
|
public void checkConcessione(){
|
||||||
Concessione c= TestConcessioniModel.prepareConcessione(3,5);
|
Concessione c= TestModel.prepareConcessione(3,5);
|
||||||
assertTrue(c.getPianteFineScavo().size()==3);
|
assertTrue(c.getPianteFineScavo().size()==3);
|
||||||
assertTrue(c.getImmaginiRappresentative().size()==5);
|
assertTrue(c.getImmaginiRappresentative().size()==5);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package org.gcube.application.cms.commons.model.concessioni;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
|
import org.gcube.application.cms.tests.model.TestModel;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths;
|
import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
|
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
|
||||||
|
@ -17,8 +17,8 @@ public class PathsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void embeddedPaths() {
|
public void embeddedPaths() {
|
||||||
Concessione c= TestConcessioniModel.prepareConcessione();
|
Concessione c= TestModel.prepareConcessione();
|
||||||
c= TestConcessioniModel.setIds(c);
|
c=TestModel.setIds(c);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,10 @@ package org.gcube.application.cms.commons.model.concessioni;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
|
import org.gcube.application.cms.tests.model.TestModel;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.AccessPolicy;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||||
import org.gcube.application.geoportal.common.model.profile.Profile;
|
import org.gcube.application.geoportal.common.model.profile.Profile;
|
||||||
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -17,8 +17,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
|
|
||||||
public class SerializationTest {
|
public class SerializationTest {
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,30 +35,24 @@ public class SerializationTest {
|
||||||
@Test
|
@Test
|
||||||
public void readProfile() throws JsonProcessingException, IOException {
|
public void readProfile() throws JsonProcessingException, IOException {
|
||||||
|
|
||||||
Profile concessione=mapper.readerFor(Profile.class).readValue(new File(TestConcessioniModel.getBaseFolder(),"ProfileConcessioni.json"));
|
Profile concessione=mapper.readerFor(Profile.class).readValue(new File(TestModel.getBaseFolder(),"ProfileConcessioni.json"));
|
||||||
|
|
||||||
System.out.println("Profile is "+mapper.writeValueAsString(concessione));
|
System.out.println("Profile is "+mapper.writeValueAsString(concessione));
|
||||||
|
|
||||||
//Assert.assertTrue(concessione .getFields().size()>0);
|
Assert.assertTrue(concessione.getFields().size()>0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void readConcessione() throws JsonProcessingException, IOException {
|
public void readConcessione() throws JsonProcessingException, IOException {
|
||||||
Concessione concessione=mapper.readerFor(Concessione.class).readValue(new File(TestConcessioniModel.getBaseFolder(),"Concessione.json"));
|
Concessione concessione=mapper.readerFor(Concessione.class).readValue(new File(TestModel.getBaseFolder(),"Concessione.json"));
|
||||||
System.out.println("Concessione is "+concessione.toString());
|
System.out.println("Concessione is "+concessione.toString());
|
||||||
|
|
||||||
concessione.getRelazioneScavo().setPolicy(AccessPolicy.EMBARGOED);
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,concessione.getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
concessione=mapper.readerFor(Concessione.class).readValue(mapper.writeValueAsString(concessione));
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,concessione.getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void generic() throws JsonProcessingException, IOException {
|
public void generic() throws JsonProcessingException, IOException {
|
||||||
Concessione conc= TestConcessioniModel.prepareConcessione();
|
Concessione conc= TestModel.prepareConcessione();
|
||||||
conc.validate();
|
conc.validate();
|
||||||
full(conc);
|
full(conc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.concessioni-lifecycle
|
|
||||||
|
|
||||||
This library contains custom extensions for the support of GNA "concessioni" use case
|
|
||||||
|
|
||||||
## [v1.0.0] - 2021-12-15
|
|
||||||
- First release
|
|
|
@ -1,26 +0,0 @@
|
||||||
# Acknowledgments
|
|
||||||
|
|
||||||
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](https://cordis.europa.eu/project/id/004260) (grant no. 004260).
|
|
||||||
- the Seventh Framework Programme for research, technological development and demonstration
|
|
||||||
- [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488);
|
|
||||||
- [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019);
|
|
||||||
- [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465);
|
|
||||||
- [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644);
|
|
||||||
- [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754).
|
|
||||||
- the H2020 research and innovation programme
|
|
||||||
- [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024);
|
|
||||||
- [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119);
|
|
||||||
- [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142);
|
|
||||||
- [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182);
|
|
||||||
- [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680);
|
|
||||||
- [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610);
|
|
||||||
- [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001);
|
|
||||||
- [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194);
|
|
||||||
- [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914);
|
|
||||||
- [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091);
|
|
||||||
- [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650);
|
|
||||||
- [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409);
|
|
||||||
- [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042);
|
|
|
@ -1,312 +0,0 @@
|
||||||
# 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
|
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
gCube CMS Suite
|
|
||||||
--------------------------------------------------
|
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
|
||||||
|
|
||||||
## Built with
|
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
|
||||||
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
|
||||||
* [JAX-RS](https://github.com/eclipse-ee4j/jaxrs-api) - Java™ API for RESTful Web Services
|
|
||||||
* [Jersey](https://jersey.github.io/) - JAX-RS runtime
|
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
|
||||||
|
|
||||||
See [CHANGELOG.md](CHANGELOG.md).
|
|
||||||
|
|
||||||
## 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);
|
|
||||||
- iMarine(grant no. 283644);
|
|
||||||
- EUBrazilOpenBio (grant no. 288754).
|
|
||||||
- the H2020 research and innovation programme
|
|
||||||
- SoBigData (grant no. 654024);
|
|
||||||
- PARTHENOS (grant no. 654119);
|
|
||||||
- EGIEngage (grant no. 654142);
|
|
||||||
- ENVRIplus (grant no. 654182);
|
|
||||||
- BlueBRIDGE (grant no. 675680);
|
|
||||||
- PerformFish (grant no. 727610);
|
|
||||||
- AGINFRAplus (grant no. 731001);
|
|
||||||
- DESIRA (grant no. 818194);
|
|
||||||
- ARIADNEplus (grant no. 823914);
|
|
||||||
- RISIS2 (grant no. 824091);
|
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<artifactId>concessioni-lifecycle</artifactId>
|
|
||||||
<version>1.0.0</version>
|
|
||||||
<name>GNA Concessioni Lifecycle</name>
|
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
|
||||||
<version>1.0.1</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<gitBaseUrl>https://code-repo.d4science.org/gCubeSystem</gitBaseUrl>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<scm>
|
|
||||||
<connection>scm:git:${gitBaseUrl}/gcube-cms-suite</connection>
|
|
||||||
<developerConnection>scm:git:${gitBaseUrl}/gcube-cms-suite</developerConnection>
|
|
||||||
<url>${gitBaseUrl}/gcube-cms-suite</url>
|
|
||||||
</scm>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>cms-plugin-framework</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>cms-test-commons</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>concessioni-model</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
</project>
|
|
|
@ -1,102 +0,0 @@
|
||||||
package org.gcube.application.cms.concessioni.plugins;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.gcube.application.cms.custom.gna.concessioni.model.ProfiledConcessione;
|
|
||||||
import org.gcube.application.cms.plugins.LifecycleManager;
|
|
||||||
import org.gcube.application.cms.plugins.faults.InitializationException;
|
|
||||||
import org.gcube.application.cms.plugins.faults.ShutDownException;
|
|
||||||
import org.gcube.application.cms.plugins.faults.StepException;
|
|
||||||
import org.gcube.application.cms.plugins.model.PluginDescriptor;
|
|
||||||
import org.gcube.application.cms.plugins.reports.ExecutionReport;
|
|
||||||
import org.gcube.application.cms.plugins.reports.InitializationReport;
|
|
||||||
import org.gcube.application.cms.plugins.reports.Report;
|
|
||||||
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ComparableVersion;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
|
||||||
import org.gcube.application.geoportal.common.utils.JSONPathWrapper;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class ConcessioniLifeCycleManager implements LifecycleManager {
|
|
||||||
|
|
||||||
private static final PluginDescriptor DESCRIPTOR=new PluginDescriptor("GNA-CONCESSIONI-LC", PluginDescriptor.BaseTypes.LIFECYCLE_MANAGER);
|
|
||||||
static {
|
|
||||||
DESCRIPTOR.setDescription("GNA Concessioni. This plugin supports custom lifecycle management for the GNA Concessioni UseCase.");
|
|
||||||
DESCRIPTOR.setVersion(new ComparableVersion("1.0.0"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InitializationReport initInContext() throws InitializationException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InitializationReport init() throws InitializationException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void shutdown() throws ShutDownException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ExecutionReport performStep(StepExecutionRequest request) throws StepException {
|
|
||||||
log.info("Serving Request {}",request);
|
|
||||||
ExecutionReport report=new ExecutionReport();
|
|
||||||
report.setRequest(request);
|
|
||||||
report.setStatus(Report.Status.OK);
|
|
||||||
try {
|
|
||||||
switch (request.getStep()) {
|
|
||||||
case StepExecutionRequest.Steps.ON_INIT_DOCUMENT:
|
|
||||||
// Set Defaults as for on update
|
|
||||||
case StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT: {
|
|
||||||
ProfiledDocument doc = request.getDocument();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_MATERIALIZE_DOCUMENT: {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_DEMATERIALIZE_DOCUMENT: {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_DEINDEX_DOCUMENT: {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_INDEX_DOCUMENT: {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_DELETE_DOCUMENT: {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
throw new StepException("Invalid Step " + request.getStep());
|
|
||||||
}
|
|
||||||
}catch (StepException e){
|
|
||||||
throw e;
|
|
||||||
}catch (Throwable t){
|
|
||||||
log.error("Unable to perform step "+request.getStep(),t);
|
|
||||||
report.setStatus(Report.Status.ERROR);
|
|
||||||
report.getMessages().add("Unable to execute Step "+request.getStep()+". Error was "+t.getMessage());
|
|
||||||
}
|
|
||||||
return report;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PluginDescriptor getDescriptor() {
|
|
||||||
return DESCRIPTOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// STATIC ROUTINES
|
|
||||||
|
|
||||||
private static final ProfiledDocument setDefaults(ProfiledDocument document){
|
|
||||||
ProfiledConcessione c =(ProfiledConcessione) document;
|
|
||||||
c.setDefaults();
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
package org.gcube.application.cms.concessioni.plugins;
|
|
||||||
|
|
||||||
import org.gcube.application.cms.tests.BasicPluginTest;
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class Tests extends BasicPluginTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testLoad(){
|
|
||||||
Assert.assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.concessioni-model
|
|
||||||
|
|
||||||
This library contains custom BEANS for the support of GNA "concessioni" use case
|
|
||||||
|
|
||||||
## [v1.0.0-SNAPSHOT] - 2021-12-15
|
|
||||||
- First release
|
|
|
@ -1,26 +0,0 @@
|
||||||
# Acknowledgments
|
|
||||||
|
|
||||||
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](https://cordis.europa.eu/project/id/004260) (grant no. 004260).
|
|
||||||
- the Seventh Framework Programme for research, technological development and demonstration
|
|
||||||
- [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488);
|
|
||||||
- [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019);
|
|
||||||
- [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465);
|
|
||||||
- [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644);
|
|
||||||
- [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754).
|
|
||||||
- the H2020 research and innovation programme
|
|
||||||
- [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024);
|
|
||||||
- [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119);
|
|
||||||
- [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142);
|
|
||||||
- [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182);
|
|
||||||
- [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680);
|
|
||||||
- [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610);
|
|
||||||
- [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001);
|
|
||||||
- [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194);
|
|
||||||
- [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914);
|
|
||||||
- [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091);
|
|
||||||
- [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650);
|
|
||||||
- [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409);
|
|
||||||
- [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042);
|
|
|
@ -1,312 +0,0 @@
|
||||||
# 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
|
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
gCube CMS Suite
|
|
||||||
--------------------------------------------------
|
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
|
||||||
|
|
||||||
## Built with
|
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
|
||||||
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
|
||||||
* [JAX-RS](https://github.com/eclipse-ee4j/jaxrs-api) - Java™ API for RESTful Web Services
|
|
||||||
* [Jersey](https://jersey.github.io/) - JAX-RS runtime
|
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
|
||||||
|
|
||||||
See [CHANGELOG.md](CHANGELOG.md).
|
|
||||||
|
|
||||||
## 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);
|
|
||||||
- iMarine(grant no. 283644);
|
|
||||||
- EUBrazilOpenBio (grant no. 288754).
|
|
||||||
- the H2020 research and innovation programme
|
|
||||||
- SoBigData (grant no. 654024);
|
|
||||||
- PARTHENOS (grant no. 654119);
|
|
||||||
- EGIEngage (grant no. 654142);
|
|
||||||
- ENVRIplus (grant no. 654182);
|
|
||||||
- BlueBRIDGE (grant no. 675680);
|
|
||||||
- PerformFish (grant no. 727610);
|
|
||||||
- AGINFRAplus (grant no. 731001);
|
|
||||||
- DESIRA (grant no. 818194);
|
|
||||||
- ARIADNEplus (grant no. 823914);
|
|
||||||
- RISIS2 (grant no. 824091);
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>concessioni-model</artifactId>
|
|
||||||
<version>1.0.0</version>
|
|
||||||
<name>GNA Concessioni Model</name>
|
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
|
||||||
<version>1.0.1</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<gitBaseUrl>https://code-repo.d4science.org/gCubeSystem</gitBaseUrl>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<scm>
|
|
||||||
<connection>scm:git:${gitBaseUrl}/gcube-cms-suite</connection>
|
|
||||||
<developerConnection>scm:git:${gitBaseUrl}/gcube-cms-suite</developerConnection>
|
|
||||||
<url>${gitBaseUrl}/gcube-cms-suite</url>
|
|
||||||
</scm>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>geoportal-common</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>cms-test-commons</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
|
@ -1,7 +0,0 @@
|
||||||
package org.gcube.application.cms.custom.gna.concessioni.model;
|
|
||||||
|
|
||||||
public interface DefaultLogicHolder {
|
|
||||||
|
|
||||||
public void setDefaults();
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
package org.gcube.application.cms.custom.gna.concessioni.model;
|
|
||||||
|
|
||||||
import org.bson.Document;
|
|
||||||
|
|
||||||
public class DocumentedRelazioneScavo extends Document implements DefaultLogicHolder{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setDefaults() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,118 +0,0 @@
|
||||||
package org.gcube.application.cms.custom.gna.concessioni.model;
|
|
||||||
|
|
||||||
import org.bson.BsonDocument;
|
|
||||||
import org.bson.BsonString;
|
|
||||||
import org.bson.BsonValue;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.Access;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.AccessPolicy;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.RegisteredFileSet;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.AbstractRelazione;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.report.Check;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.report.ConstraintCheck;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
|
||||||
public class ProfiledConcessione extends ProfiledDocument {
|
|
||||||
|
|
||||||
public static final String NOME="nome";
|
|
||||||
//Introduzione (descrizione del progetto)
|
|
||||||
public final static String INTRODUZIONE = "introduzione";
|
|
||||||
//Descrizione del contenuto
|
|
||||||
public final static String DSCRIZIONE_CONTENUTO ="descrizioneContenuto";
|
|
||||||
//Autori
|
|
||||||
public final static String AUTHORS= "authors";
|
|
||||||
//Soggetto che materialmente invia i dati.
|
|
||||||
public final static String CONTRIBUTORE ="contributore";
|
|
||||||
|
|
||||||
//Indicare il nome del titolare/i dei dati contenuti nel dataset e/o per sue specifiche parti.
|
|
||||||
public final static String TITOLARI="titolari";
|
|
||||||
|
|
||||||
public final static String RESPONSABILE="responsabile";
|
|
||||||
public final static String EDITORS ="editore";
|
|
||||||
|
|
||||||
public final static String FONTI_FINANZIAMENTO="fontiFinanziamento";
|
|
||||||
//Research Excavation; Archaeology (valori di default)
|
|
||||||
public final static String SOGGETTO="soggetto";
|
|
||||||
|
|
||||||
//Referenze bibliografiche, DOI (se esistenti) di risorse correlate all’indagine in oggetto
|
|
||||||
public final static String RISORSE_CORRELATE="risorseCorrelate";
|
|
||||||
|
|
||||||
public final static String DATA_INZIO_PROGETTO="dataInizioProgetto";
|
|
||||||
public final static String DATA_FINE_PROGETTO="dataFineProgetto";
|
|
||||||
|
|
||||||
public final static String TITOLARE_LICENZA="titolareLicenza";
|
|
||||||
public final static String TITOLARE_COPYRIGHT="titolareCopyright";
|
|
||||||
|
|
||||||
public final static String PAROLE_CHIAVE_LIBERE="paroleChiaveLibere";
|
|
||||||
public final static String PAREOLE_CHIAVE_ICCD="paroleChiaveICCD";
|
|
||||||
|
|
||||||
public final static String RELAZIONE_SCAVO="relazioneScavo";
|
|
||||||
public final static String ABSTRACT_RELAZIONE ="abstractRelazione";
|
|
||||||
public final static String IMMAGINI_RAPPRESENTATIVE="immaginiRappresentative";
|
|
||||||
public final static String POSIZIONAMENTO_SCAVO = "posizionamentoScavo";
|
|
||||||
public final static String PIANTE_FINE_SCAVO = "pianteFineScavo";
|
|
||||||
public final static String GENERIC_CONTENT= "genericContent";
|
|
||||||
|
|
||||||
public static class Sections{
|
|
||||||
public static final String TITOLO="titolo";
|
|
||||||
}
|
|
||||||
public static class Relazione{
|
|
||||||
|
|
||||||
public static final String RESPONSABILI= "responsabili";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setDefaults() {
|
|
||||||
Document doc=this.getTheDocument();
|
|
||||||
doc.putIfAbsent(SOGGETTO,new String[]{"Research Excavation","Archaeology"});
|
|
||||||
|
|
||||||
doc.putIfAbsent(DSCRIZIONE_CONTENUTO,"Relazione di fine scavo e relativo abstract; selezione di immagini rappresentative;"
|
|
||||||
+ " posizionamento topografico dell'area indagata, pianta di fine scavo.");
|
|
||||||
|
|
||||||
// Super Section
|
|
||||||
this.getInfo().getAccess().setLicense(
|
|
||||||
ConstraintCheck.defaultFor(getInfo().getAccess().getLicense(), "CC0-1.0").evaluate());
|
|
||||||
|
|
||||||
|
|
||||||
//RELAZIONE
|
|
||||||
doc.putIfAbsent(RELAZIONE_SCAVO,new RegisteredFileSet());
|
|
||||||
Document rel=doc.get(RELAZIONE_SCAVO,Document.class);
|
|
||||||
rel.putIfAbsent(Sections.TITOLO,doc.getString(NOME)+" relazione di scavo");
|
|
||||||
rel.putIfAbsent(SOGGETTO,doc.get(SOGGETTO));
|
|
||||||
rel.putIfAbsent(RegisteredFileSet.CREATION_INFO,this.getInfo().getCreationInfo());
|
|
||||||
rel.putIfAbsent(RegisteredFileSet.ACCESS,this.getInfo().getAccess());
|
|
||||||
Access relAccess=rel.get(RegisteredFileSet.ACCESS,Access.class);
|
|
||||||
relAccess.setLicense(ConstraintCheck.defaultFor(relAccess.getLicense(),"CC-BY-4.0").evaluate());
|
|
||||||
relAccess.setPolicy(ConstraintCheck.defaultFor(relAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
|
||||||
|
|
||||||
//ABSTRACT Relazione
|
|
||||||
doc.putIfAbsent(ABSTRACT_RELAZIONE,new RegisteredFileSet());
|
|
||||||
Document abs=doc.get(ABSTRACT_RELAZIONE,Document.class);
|
|
||||||
abs.putIfAbsent(Sections.TITOLO,doc.getString(NOME)+" abstract relazione di scavo");
|
|
||||||
abs.putIfAbsent(RegisteredFileSet.CREATION_INFO,this.getInfo().getCreationInfo());
|
|
||||||
abs.putIfAbsent(RegisteredFileSet.ACCESS,this.getInfo().getAccess());
|
|
||||||
Access absAccess=rel.get(RegisteredFileSet.ACCESS,Access.class);
|
|
||||||
absAccess.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate());
|
|
||||||
absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
|
||||||
|
|
||||||
//IMMAGINI RAPPRESENTATIVE
|
|
||||||
|
|
||||||
|
|
||||||
// if(doc.containsKey(IMMAGINI_RAPPRESENTATIVE)) {
|
|
||||||
// for (BsonValue bsonValue : doc.toBsonDocument(null, null).
|
|
||||||
// getArray(IMMAGINI_RAPPRESENTATIVE)) {
|
|
||||||
// BsonDocument imgDocument = bsonValue.asDocument();
|
|
||||||
// imgDocument.putIfAbsent(SOGGETTO,new BsonString(doc.getString(SOGGETTO));
|
|
||||||
// imgDocument.putIfAbsent(RegisteredFileSet.CREATION_INFO,new BsonDocument(this.getInfo().getCreationInfo());
|
|
||||||
// imgDocument.putIfAbsent(RegisteredFileSet.ACCESS,this.getInfo().getAccess());
|
|
||||||
// Access absAccess=rel.get(RegisteredFileSet.ACCESS,Access.class);
|
|
||||||
// absAccess.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate());
|
|
||||||
// absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,28 +2,26 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-client
|
# Changelog for org.gcube.application.geoportal-client
|
||||||
|
|
||||||
## [v1.0.6] - 2021-09-20
|
|
||||||
- Changed artifact dependencies
|
|
||||||
- Default Profiled Documents client
|
|
||||||
|
|
||||||
## [v1.0.5] - 2021-09-20
|
## [v1.0.5] - 2021-09-20
|
||||||
- Refactored repositories
|
Refactored repositories
|
||||||
|
|
||||||
## [v1.0.4-SNAPSHOT] - 2020-11-11
|
## [v1.0.4-SNAPSHOT] - 2020-11-11
|
||||||
- Serialization utils
|
Serialization utils
|
||||||
- Queries & Filters support
|
Queries & Filters support
|
||||||
- Test Reports
|
Test Reports
|
||||||
- UseCases
|
UseCases
|
||||||
- Fixes #21897
|
Fixes #21897
|
||||||
|
|
||||||
## [v1.0.3] - 2020-11-11
|
## [v1.0.3] - 2020-11-11
|
||||||
- Stateful Concessioni Manager client over mongo
|
Stateful Concessioni Manager client over mongo
|
||||||
|
|
||||||
## [v1.0.2] - 2020-11-11
|
## [v1.0.2] - 2020-11-11
|
||||||
- Fixed dulicate dependency declaration
|
Fixed dulicate dependency declaration
|
||||||
|
|
||||||
## [v1.0.1] - 2020-11-11
|
## [v1.0.1] - 2020-11-11
|
||||||
-Excluded common-calls 1.2.0
|
Excluded common-calls 1.2.0
|
||||||
|
|
||||||
|
|
||||||
## [v1.0.0] - 2020-11-11
|
## [v1.0.0] - 2020-11-11
|
||||||
- First release
|
|
||||||
|
First release
|
|
@ -4,14 +4,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.gcube.application</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-client</artifactId>
|
<artifactId>geoportal-client</artifactId>
|
||||||
<version>1.0.6</version>
|
<version>1.0.5</version>
|
||||||
<name>Geoportal Client</name>
|
<name>Geoportal Client</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-common</artifactId>
|
<artifactId>geoportal-common</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
package org.gcube.application.geoportal.client;
|
|
||||||
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.Configuration;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
|
||||||
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
|
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
public class DefaultProfiledConcessioni implements MongoConcessioni {
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Concessione createNew(Concessione c) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteById(String id) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteById(String id, Boolean force) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Concessione getById(String id) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterator<Concessione> getList() throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Concessione publish(String id) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Concessione registerFileSet(String id, AddSectionToConcessioneRequest request) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Concessione cleanFileSet(String id, String path) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Concessione update(String id, String jsonUpdate) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Concessione replace(Concessione replacement) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unPublish(String id) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Configuration getCurrentConfiguration() throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterator<Concessione> search(String filter) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterator<Concessione> query(QueryRequest request) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String queryForJSON(QueryRequest request) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> Iterator<T> queryForType(QueryRequest request, Class<T> clazz) throws Exception {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,62 +0,0 @@
|
||||||
package org.gcube.application.geoportal.client;
|
|
||||||
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.Configuration;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
|
||||||
import org.gcube.application.geoportal.common.rest.ProfiledDocumentsI;
|
|
||||||
import org.gcube.common.clients.delegates.ProxyDelegate;
|
|
||||||
|
|
||||||
import javax.ws.rs.client.WebTarget;
|
|
||||||
import java.rmi.RemoteException;
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class DefaultProfiledDocuments implements ProfiledDocumentsI<ProfiledDocument> {
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private final ProxyDelegate<WebTarget> delegate;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument createNew(Document toCreate) throws RemoteException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteById(String id) throws RemoteException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteById(String id, Boolean force) throws RemoteException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument getById(String id) throws RemoteException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Configuration getConfiguration() throws RemoteException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterator<ProfiledDocument> query(QueryRequest request) throws RemoteException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String querForJSON(QueryRequest request) throws RemoteException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument performStep(String id, String step, Document request) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
package org.gcube.application.geoportal.client;
|
||||||
|
|
||||||
|
import java.rmi.RemoteException;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import javax.ws.rs.client.WebTarget;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportal.common.model.project.Project;
|
||||||
|
import org.gcube.application.geoportal.common.rest.ProjectsI;
|
||||||
|
import org.gcube.common.clients.Call;
|
||||||
|
import org.gcube.common.clients.delegates.ProxyDelegate;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class DefaultProjects implements ProjectsI{
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private final ProxyDelegate<WebTarget> delegate;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteById(String profileId, String projectId) throws RemoteException {
|
||||||
|
deleteById(profileId,projectId,false);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void deleteById(String profileId, String projectId,Boolean force) throws RemoteException {
|
||||||
|
// Call<WebTarget,String> call= new Call<WebTarget, String>() {
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public String call(WebTarget endpoint) throws Exception {
|
||||||
|
// endpoint.path(profileId).path(projectId).request(MediaType.APPLICATION_JSON).delete();
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// try{
|
||||||
|
// delegate.make(call);
|
||||||
|
// }catch(Exception e) {
|
||||||
|
//// throw new RemoteException(e);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<Project> getAll() throws RemoteException {
|
||||||
|
Call<WebTarget,Iterator<Project>> call=new Call<WebTarget,Iterator<Project>>(){
|
||||||
|
@Override
|
||||||
|
public Iterator<Project> call(WebTarget endpoint) throws Exception {
|
||||||
|
throw new Exception("Client method not ready");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
try{
|
||||||
|
return delegate.make(call);
|
||||||
|
}catch(Exception e) {
|
||||||
|
throw new RemoteException(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<Project> getByFilter(String filter) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<Project> getByFilter(String filter, String profileId) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Project getById(String profileId, String id) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<Project> getByProfile(String profileId) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Project registrNew(String profileId, String jsonDocument) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Project update(String profileId, String projectId, String jsonDocument) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,14 +6,14 @@ import javax.xml.transform.dom.DOMResult;
|
||||||
import javax.xml.ws.EndpointReference;
|
import javax.xml.ws.EndpointReference;
|
||||||
|
|
||||||
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
||||||
import org.gcube.application.geoportal.common.rest.ProfiledDocumentsI;
|
import org.gcube.application.geoportal.common.rest.ProjectsI;
|
||||||
import org.gcube.common.calls.jaxrs.GcubeService;
|
import org.gcube.common.calls.jaxrs.GcubeService;
|
||||||
import org.gcube.common.calls.jaxrs.TargetFactory;
|
import org.gcube.common.calls.jaxrs.TargetFactory;
|
||||||
import org.gcube.common.clients.config.ProxyConfig;
|
import org.gcube.common.clients.config.ProxyConfig;
|
||||||
import org.gcube.common.clients.delegates.ProxyDelegate;
|
import org.gcube.common.clients.delegates.ProxyDelegate;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
public class ProjectsPlugin extends GeoportalAbstractPlugin<WebTarget, ProfiledDocumentsI>{
|
public class ProjectsPlugin extends GeoportalAbstractPlugin<WebTarget, ProjectsI>{
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,8 +22,8 @@ public class ProjectsPlugin extends GeoportalAbstractPlugin<WebTarget, ProfiledD
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProfiledDocumentsI newProxy(ProxyDelegate<WebTarget> delegate) {
|
public ProjectsI newProxy(ProxyDelegate<WebTarget> delegate) {
|
||||||
return new DefaultProfiledDocuments(delegate);
|
return new DefaultProjects(delegate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.gcube.application.geoportal.common.rest.TempFile;
|
||||||
public interface ConcessioniManagerI extends MongoConcessioni{
|
public interface ConcessioniManagerI extends MongoConcessioni{
|
||||||
|
|
||||||
|
|
||||||
public Concessione getCurrent();
|
|
||||||
public Concessione addImmagineRappresentativa(UploadedImage toAdd,TempFile f) throws Exception;
|
public Concessione addImmagineRappresentativa(UploadedImage toAdd,TempFile f) throws Exception;
|
||||||
public Concessione addPiantaFineScavo(LayerConcessione toAdd,TempFile...files)throws Exception;
|
public Concessione addPiantaFineScavo(LayerConcessione toAdd,TempFile...files)throws Exception;
|
||||||
public Concessione setPosizionamento(LayerConcessione toSet,TempFile...files)throws Exception;
|
public Concessione setPosizionamento(LayerConcessione toSet,TempFile...files)throws Exception;
|
||||||
|
|
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.ws.rs.client.WebTarget;
|
import javax.ws.rs.client.WebTarget;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import org.gcube.application.geoportal.client.DefaultMongoConcessioni;
|
import org.gcube.application.geoportal.client.DefaultMongoConcessioni;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.*;
|
import org.gcube.application.geoportal.common.model.legacy.*;
|
||||||
import org.gcube.application.geoportal.common.utils.FileSets;
|
import org.gcube.application.geoportal.common.utils.FileSets;
|
||||||
|
@ -22,98 +21,97 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements
|
||||||
super(delegate);
|
super(delegate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Getter
|
private Concessione currentC=null;
|
||||||
private Concessione current =null;
|
|
||||||
private StorageUtils storage=new StorageUtils();
|
private StorageUtils storage=new StorageUtils();
|
||||||
|
|
||||||
|
|
||||||
// Override methods to handle state
|
// Override methods to handle state
|
||||||
@Override
|
@Override
|
||||||
public Concessione createNew(Concessione c) throws Exception {
|
public Concessione createNew(Concessione c) throws Exception {
|
||||||
current =super.createNew(c);
|
currentC=super.createNew(c);
|
||||||
return current;
|
return currentC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Concessione getById(String id) throws Exception {
|
public Concessione getById(String id) throws Exception {
|
||||||
current = super.getById(id);
|
currentC= super.getById(id);
|
||||||
return current;
|
return currentC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Concessione publish() throws Exception {
|
public Concessione publish() throws Exception {
|
||||||
if(current ==null) throw new Exception("Invalid operation : current Concessione is null.");
|
if(currentC==null) throw new Exception("Invalid operation : current Concessione is null.");
|
||||||
current =super.publish(current.getMongo_id());
|
currentC=super.publish(currentC.getMongo_id());
|
||||||
return current;
|
return currentC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete() throws Exception {
|
public void delete() throws Exception {
|
||||||
if(current ==null) throw new Exception("Invalid operation : current Concessione is null.");
|
if(currentC==null) throw new Exception("Invalid operation : current Concessione is null.");
|
||||||
super.deleteById(current.getMongo_id());
|
super.deleteById(currentC.getMongo_id());
|
||||||
current =null;
|
currentC=null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Concessione addImmagineRappresentativa(UploadedImage toAdd, TempFile f) throws Exception {
|
public Concessione addImmagineRappresentativa(UploadedImage toAdd, TempFile f) throws Exception {
|
||||||
if(current ==null) throw new Exception("Invalid operation : current Concessione is null.");
|
if(currentC==null) throw new Exception("Invalid operation : current Concessione is null.");
|
||||||
if(current.getImmaginiRappresentative()==null) current.setImmaginiRappresentative(new ArrayList<UploadedImage>());
|
if(currentC.getImmaginiRappresentative()==null) currentC.setImmaginiRappresentative(new ArrayList<UploadedImage>());
|
||||||
current.getImmaginiRappresentative().add(toAdd);
|
currentC.getImmaginiRappresentative().add(toAdd);
|
||||||
current =replace(current);
|
currentC=replace(currentC);
|
||||||
|
|
||||||
|
|
||||||
current =super.registerFileSet(current.getMongo_id(),
|
currentC=super.registerFileSet(currentC.getMongo_id(),
|
||||||
FileSets.build(Paths.imgByIndex(current.getImmaginiRappresentative().size()-1),f).getTheRequest());
|
FileSets.build(Paths.imgByIndex(currentC.getImmaginiRappresentative().size()-1),f).getTheRequest());
|
||||||
return current;
|
return currentC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Concessione addPiantaFineScavo(LayerConcessione toAdd, TempFile... files) throws Exception {
|
public Concessione addPiantaFineScavo(LayerConcessione toAdd, TempFile... files) throws Exception {
|
||||||
if(current ==null) throw new Exception("Invalid operation : current Concessione is null.");
|
if(currentC==null) throw new Exception("Invalid operation : current Concessione is null.");
|
||||||
if(current.getPianteFineScavo()==null) current.setPianteFineScavo(new ArrayList<>());
|
if(currentC.getPianteFineScavo()==null) currentC.setPianteFineScavo(new ArrayList<>());
|
||||||
current.getPianteFineScavo().add(toAdd);
|
currentC.getPianteFineScavo().add(toAdd);
|
||||||
current =replace(current);
|
currentC=replace(currentC);
|
||||||
|
|
||||||
|
|
||||||
current =super.registerFileSet(current.getMongo_id(),
|
currentC=super.registerFileSet(currentC.getMongo_id(),
|
||||||
FileSets.build(Paths.piantaByIndex(current.getPianteFineScavo().size()-1),files).getTheRequest());
|
FileSets.build(Paths.piantaByIndex(currentC.getPianteFineScavo().size()-1),files).getTheRequest());
|
||||||
return current;
|
return currentC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Concessione setPosizionamento(LayerConcessione toSet, TempFile... files) throws Exception {
|
public Concessione setPosizionamento(LayerConcessione toSet, TempFile... files) throws Exception {
|
||||||
if(current ==null) throw new Exception("Invalid operation : current Concessione is null.");
|
if(currentC==null) throw new Exception("Invalid operation : current Concessione is null.");
|
||||||
current.setPosizionamentoScavo(toSet);
|
currentC.setPosizionamentoScavo(toSet);
|
||||||
current =replace(current);
|
currentC=replace(currentC);
|
||||||
|
|
||||||
|
|
||||||
current =super.registerFileSet(current.getMongo_id(),
|
currentC=super.registerFileSet(currentC.getMongo_id(),
|
||||||
FileSets.build(Paths.POSIZIONAMENTO,files).getTheRequest());
|
FileSets.build(Paths.POSIZIONAMENTO,files).getTheRequest());
|
||||||
return current;
|
return currentC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Concessione setRelazioneScavo(RelazioneScavo toSet, TempFile... files) throws Exception {
|
public Concessione setRelazioneScavo(RelazioneScavo toSet, TempFile... files) throws Exception {
|
||||||
if(current ==null) throw new Exception("Invalid operation : current Concessione is null.");
|
if(currentC==null) throw new Exception("Invalid operation : current Concessione is null.");
|
||||||
current.setRelazioneScavo(toSet);
|
currentC.setRelazioneScavo(toSet);
|
||||||
current =replace(current);
|
currentC=replace(currentC);
|
||||||
|
|
||||||
|
|
||||||
current =super.registerFileSet(current.getMongo_id(),
|
currentC=super.registerFileSet(currentC.getMongo_id(),
|
||||||
FileSets.build(Paths.RELAZIONE,files).getTheRequest());
|
FileSets.build(Paths.RELAZIONE,files).getTheRequest());
|
||||||
return current;
|
return currentC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Concessione setAbstractRelazioneScavo(AbstractRelazione toSet, TempFile... files) throws Exception {
|
public Concessione setAbstractRelazioneScavo(AbstractRelazione toSet, TempFile... files) throws Exception {
|
||||||
if(current ==null) throw new Exception("Invalid operation : current Concessione is null.");
|
if(currentC==null) throw new Exception("Invalid operation : current Concessione is null.");
|
||||||
current.setAbstractRelazione(toSet);
|
currentC.setAbstractRelazione(toSet);
|
||||||
current =replace(current);
|
currentC=replace(currentC);
|
||||||
|
|
||||||
current =super.registerFileSet(current.getMongo_id(),
|
currentC=super.registerFileSet(currentC.getMongo_id(),
|
||||||
FileSets.build(Paths.ABSTRACT_RELAZIONE,files).getTheRequest());
|
FileSets.build(Paths.ABSTRACT_RELAZIONE,files).getTheRequest());
|
||||||
return current;
|
return currentC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ package org.gcube.application.geoportal;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.gcube.application.cms.tests.TokenSetter;
|
import org.gcube.application.cms.tests.TokenSetter;
|
||||||
|
import org.gcube.application.cms.tests.model.TestModel;
|
||||||
import org.gcube.application.geoportal.common.rest.TempFile;
|
import org.gcube.application.geoportal.common.rest.TempFile;
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||||
|
|
|
@ -7,8 +7,7 @@ public class BasicVreTests {
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void setScope(){
|
public static void setScope(){
|
||||||
// TokenSetter.set("/pred4s/preprod/preVRE");
|
// TokenSetter.set("/gcube/devNext/NextNext");
|
||||||
// TokenSetter.set("/d4science.research-infrastructures.eu/D4OS/GeoNA-Prototype");
|
|
||||||
TokenSetter.set("/gcube/devsec/devVRE");
|
TokenSetter.set("/gcube/devsec/devVRE");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,13 @@ import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
|
||||||
|
import org.gcube.application.cms.tests.model.TestModel;
|
||||||
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
|
|
||||||
import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI;
|
import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI;
|
||||||
import org.gcube.application.geoportal.client.utils.Serialization;
|
import org.gcube.application.geoportal.client.utils.Serialization;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.*;
|
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||||
|
import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor;
|
||||||
|
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
|
||||||
|
import org.gcube.application.geoportal.common.model.legacy.UploadedImage;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus;
|
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus;
|
||||||
import org.gcube.application.geoportal.common.rest.TempFile;
|
import org.gcube.application.geoportal.common.rest.TempFile;
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
|
@ -29,66 +31,55 @@ public class StatefulClientTests extends BasicVreTests{
|
||||||
StorageUtils storage=new StorageUtils();
|
StorageUtils storage=new StorageUtils();
|
||||||
|
|
||||||
|
|
||||||
Concessione toRegister= TestConcessioniModel.prepareEmptyConcessione();
|
Concessione toRegister= TestModel.prepareEmptyConcessione();
|
||||||
toRegister.setNome("Mock module");
|
toRegister.setNome("Mock module");
|
||||||
manager.createNew(toRegister);
|
manager.createNew(toRegister);
|
||||||
|
|
||||||
|
Concessione source=TestModel.prepareConcessione();
|
||||||
|
|
||||||
|
|
||||||
Concessione source=TestConcessioniModel.prepareConcessione();
|
|
||||||
|
|
||||||
|
|
||||||
UploadedImage toRegisterImg= source.getImmaginiRappresentative().get(0);
|
UploadedImage toRegisterImg= source.getImmaginiRappresentative().get(0);
|
||||||
|
|
||||||
// TEMP Files are hosted in INFRASTRUCTURE's VOLATILE AREA
|
// TEMP Files are hosted in INFRASTRUCTURE's VOLATILE AREA
|
||||||
TempFile toUpload=storage.putOntoStorage(
|
TempFile toUpload=storage.putOntoStorage(
|
||||||
new File(TestConcessioniModel.getBaseFolder(),"immagine1.png"), "immagine.png");
|
new File(TestModel.getBaseFolder(),"immagine.png"), "immagine.png");
|
||||||
|
|
||||||
manager.addImmagineRappresentativa(toRegisterImg, toUpload);
|
manager.addImmagineRappresentativa(toRegisterImg, toUpload);
|
||||||
|
|
||||||
|
|
||||||
//Alternative Method
|
//Alternative Method
|
||||||
InputStreamDescriptor isDesc=
|
InputStreamDescriptor isDesc=
|
||||||
new InputStreamDescriptor(new FileInputStream(new File(TestConcessioniModel.getBaseFolder(),
|
new InputStreamDescriptor(new FileInputStream(new File(TestModel.getBaseFolder(),
|
||||||
"immagine1.png")), "San Mauro_drone totale.JPG");
|
"immagine.png")), "San Mauro_drone totale.JPG");
|
||||||
manager.addImmagineRappresentativa(toRegisterImg, isDesc);
|
manager.addImmagineRappresentativa(toRegisterImg, isDesc);
|
||||||
|
|
||||||
source.getRelazioneScavo().setPolicy(AccessPolicy.EMBARGOED);
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,source.getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
//Relazione
|
//Relazione
|
||||||
manager.setRelazioneScavo(source.getRelazioneScavo(),
|
manager.setRelazioneScavo(source.getRelazioneScavo(),
|
||||||
storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf"), "relazione_it.pdf"),
|
storage.putOntoStorage(new File(TestModel.getBaseFolder(),"relazione.pdf"), "relazione_it.pdf"),
|
||||||
storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf"), "relazione_en.pdf"));
|
storage.putOntoStorage(new File(TestModel.getBaseFolder(),"relazione.pdf"), "relazione_en.pdf"));
|
||||||
assertEquals(AccessPolicy.EMBARGOED,manager.getCurrent().getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
//Abstract
|
//Abstract
|
||||||
manager.setAbstractRelazioneScavo(
|
manager.setAbstractRelazioneScavo(
|
||||||
source.getAbstractRelazione(),
|
source.getAbstractRelazione(),
|
||||||
storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf"), "abstract_relazione_it.pdf"),
|
storage.putOntoStorage(new File(TestModel.getBaseFolder(),"relazione.pdf"), "abstract_relazione_it.pdf"),
|
||||||
storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf"), "abstract_relazione_en.pdf"));
|
storage.putOntoStorage(new File(TestModel.getBaseFolder(),"relazione.pdf"), "abstract_relazione_en.pdf"));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Posizionamento scavo
|
// Posizionamento scavo
|
||||||
|
|
||||||
manager.setPosizionamento(source.getPosizionamentoScavo(),
|
manager.setPosizionamento(source.getPosizionamentoScavo(),
|
||||||
storage.putOntoStorage(
|
storage.putOntoStorage(
|
||||||
new File(TestConcessioniModel.getBaseFolder(),"pos.shp"),"pos.shp"));
|
new File(TestModel.getBaseFolder(),"pos.shp"),"pos.shp"));
|
||||||
|
|
||||||
// Piante
|
// Piante
|
||||||
manager.addPiantaFineScavo(source.getPianteFineScavo().get(0),
|
manager.addPiantaFineScavo(source.getPianteFineScavo().get(0),
|
||||||
storage.putOntoStorage(
|
storage.putOntoStorage(
|
||||||
new File(TestConcessioniModel.getBaseFolder(),"pianta.shp"),"pianta.shp"));
|
new File(TestModel.getBaseFolder(),"pianta.shp"),"pianta.shp"));
|
||||||
// new File("/Users/fabioisti/Documents/invio_08_05/Montalto di Castro (VT)_Vulci_Indagini non invasive_Doc. paragr._Va/CONSEGNA_WGS84")
|
// new File("/Users/fabioisti/Documents/invio_08_05/Montalto di Castro (VT)_Vulci_Indagini non invasive_Doc. paragr._Va/CONSEGNA_WGS84")
|
||||||
// .listFiles((file,name)->{return name.startsWith("Mag_anomalies_WGS84");})));
|
// .listFiles((file,name)->{return name.startsWith("Mag_anomalies_WGS84");})));
|
||||||
|
|
||||||
|
return manager.publish();
|
||||||
|
|
||||||
Concessione toReturn=manager.publish();
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,toReturn.getRelazioneScavo().getPolicy());
|
|
||||||
return toReturn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,7 +110,7 @@ public class StatefulClientTests extends BasicVreTests{
|
||||||
ConcessioniManagerI manager=statefulMongoConcessioni().build();
|
ConcessioniManagerI manager=statefulMongoConcessioni().build();
|
||||||
StorageUtils storage=new StorageUtils();
|
StorageUtils storage=new StorageUtils();
|
||||||
|
|
||||||
manager.createNew(TestConcessioniModel.prepareEmptyConcessione());
|
manager.createNew(TestModel.prepareEmptyConcessione());
|
||||||
|
|
||||||
manager.delete();
|
manager.delete();
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,17 +11,14 @@ import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.gcube.application.cms.tests.model.TestFilters;
|
||||||
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniFilters;
|
import org.gcube.application.cms.tests.model.TestModel;
|
||||||
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
|
import org.gcube.application.cms.tests.model.TestQueries;
|
||||||
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniQueries;
|
|
||||||
import org.gcube.application.geoportal.client.utils.Queries;
|
import org.gcube.application.geoportal.client.utils.Queries;
|
||||||
import org.gcube.application.geoportal.client.utils.Serialization;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.*;
|
import org.gcube.application.geoportal.common.model.legacy.*;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths;
|
import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus;
|
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus;
|
||||||
import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest;
|
import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest;
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
|
||||||
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
|
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
|
||||||
import org.gcube.application.geoportal.common.utils.FileSets;
|
import org.gcube.application.geoportal.common.utils.FileSets;
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
|
@ -40,28 +37,22 @@ public class StatelessClientTests extends BasicVreTests{
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void searches() throws Exception {
|
public void searches() throws Exception {
|
||||||
TestConcessioniFilters.filters.forEach((k, v)->{
|
TestFilters.filters.forEach((k,v)->{
|
||||||
try {
|
try {
|
||||||
System.out.println("Count for " + k + "\t" + count(client.search(v)));
|
System.out.println("Count for " + k + "\t" + count(client.search(v)));
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void query() throws Exception {
|
public void query() throws Exception {
|
||||||
|
|
||||||
System.out.println("FRA "+ count(client.query(
|
|
||||||
Queries.parse(TestConcessioniQueries.queries.get("emptyresult.json")))));
|
|
||||||
|
|
||||||
// No Transformation
|
// No Transformation
|
||||||
System.out.print("First Registered \t");
|
System.out.print("First Registered \t");
|
||||||
Iterator<Concessione> queriedDocuments=client.query(
|
Iterator<Concessione> queriedDocuments=client.query(
|
||||||
Queries.parse(TestConcessioniQueries.queries.get("firstRegistered.json")));
|
Queries.parse(TestQueries.queries.get("firstRegistered.json")));
|
||||||
// Expected one result
|
// Expected one result
|
||||||
assertTrue(count(queriedDocuments)==1);
|
assertTrue(count(queriedDocuments)==1);
|
||||||
|
|
||||||
|
@ -70,7 +61,7 @@ public class StatelessClientTests extends BasicVreTests{
|
||||||
System.out.print("Last Registered \t");
|
System.out.print("Last Registered \t");
|
||||||
// Expected one result
|
// Expected one result
|
||||||
queriedDocuments=client.query(
|
queriedDocuments=client.query(
|
||||||
Queries.parse(TestConcessioniQueries.queries.get("lastRegistered.json")));
|
Queries.parse(TestQueries.queries.get("lastRegistered.json")));
|
||||||
assertTrue(count(queriedDocuments)==1);
|
assertTrue(count(queriedDocuments)==1);
|
||||||
|
|
||||||
queriedDocuments.forEachRemaining((Concessione c)->{System.out.println(c.getNome());});
|
queriedDocuments.forEachRemaining((Concessione c)->{System.out.println(c.getNome());});
|
||||||
|
@ -79,11 +70,11 @@ public class StatelessClientTests extends BasicVreTests{
|
||||||
// Transformations
|
// Transformations
|
||||||
System.out.println(
|
System.out.println(
|
||||||
client.queryForJSON(
|
client.queryForJSON(
|
||||||
Queries.parse(TestConcessioniQueries.queries.get("lastNameRegisteredByFabio.json"))));
|
Queries.parse(TestQueries.queries.get("lastNameRegisteredByFabio.json"))));
|
||||||
|
|
||||||
System.out.println(
|
System.out.println(
|
||||||
client.queryForJSON(
|
client.queryForJSON(
|
||||||
Queries.parse(TestConcessioniQueries.queries.get("publicationWarningMessages.json"))));
|
Queries.parse(TestQueries.queries.get("publicationWarningMessages.json"))));
|
||||||
|
|
||||||
// String query=Files.readFileAsString(filterFile.getAbsolutePath(), Charset.defaultCharset());
|
// String query=Files.readFileAsString(filterFile.getAbsolutePath(), Charset.defaultCharset());
|
||||||
// System.out.println("Count for "+filterFile.getName()+"\t"+ count(client.search(query)));
|
// System.out.println("Count for "+filterFile.getName()+"\t"+ count(client.search(query)));
|
||||||
|
@ -100,14 +91,14 @@ public class StatelessClientTests extends BasicVreTests{
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreateNew() throws Exception {
|
public void testCreateNew() throws Exception {
|
||||||
Concessione c= client.createNew(TestConcessioniModel.prepareEmptyConcessione());
|
Concessione c= client.createNew(TestModel.prepareEmptyConcessione());
|
||||||
assertNotNull(c);
|
assertNotNull(c);
|
||||||
assertNotNull(c.getMongo_id());
|
assertNotNull(c.getMongo_id());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReplace() throws Exception {
|
public void testReplace() throws Exception {
|
||||||
Concessione testObject= client.createNew(TestConcessioniModel.prepareEmptyConcessione());
|
Concessione testObject= client.createNew(TestModel.prepareEmptyConcessione());
|
||||||
String title="My new shiny Title";
|
String title="My new shiny Title";
|
||||||
testObject.setNome(title);
|
testObject.setNome(title);
|
||||||
Concessione c1=client.replace(testObject);
|
Concessione c1=client.replace(testObject);
|
||||||
|
@ -116,11 +107,11 @@ public class StatelessClientTests extends BasicVreTests{
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUploadFileSet() throws Exception {
|
public void testUploadFileSet() throws Exception {
|
||||||
Concessione testObject= client.createNew(TestConcessioniModel.prepareConcessione());
|
Concessione testObject= client.createNew(TestModel.prepareConcessione());
|
||||||
AddSectionToConcessioneRequest request=
|
AddSectionToConcessioneRequest request=
|
||||||
// FileSets.prepareRequest(new StorageUtils(),Paths.RELAZIONE,new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf"));
|
// FileSets.prepareRequest(new StorageUtils(),Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf"));
|
||||||
FileSets.build(Paths.ABSTRACT_RELAZIONE).add(
|
FileSets.build(Paths.ABSTRACT_RELAZIONE).add(
|
||||||
new StorageUtils().putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf"),"San Mauro_drone totale.JPG"))
|
new StorageUtils().putOntoStorage(new File(TestModel.getBaseFolder(),"relazione.pdf"),"San Mauro_drone totale.JPG"))
|
||||||
.getTheRequest();
|
.getTheRequest();
|
||||||
|
|
||||||
testObject= client.registerFileSet(testObject.getMongo_id(), request);
|
testObject= client.registerFileSet(testObject.getMongo_id(), request);
|
||||||
|
@ -133,13 +124,13 @@ public class StatelessClientTests extends BasicVreTests{
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeleteById() throws Exception {
|
public void testDeleteById() throws Exception {
|
||||||
Concessione c= client.createNew(TestConcessioniModel.prepareEmptyConcessione());
|
Concessione c= client.createNew(TestModel.prepareEmptyConcessione());
|
||||||
client.deleteById(c.getMongo_id());
|
client.deleteById(c.getMongo_id());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPublish() throws Exception {
|
public void testPublsh() throws Exception {
|
||||||
Concessione c=prepare();
|
Concessione c=prepare();
|
||||||
|
|
||||||
assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED));
|
assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED));
|
||||||
|
@ -180,46 +171,34 @@ public class StatelessClientTests extends BasicVreTests{
|
||||||
|
|
||||||
private Concessione prepare() throws Exception {
|
private Concessione prepare() throws Exception {
|
||||||
int numImgs=1;
|
int numImgs=1;
|
||||||
Concessione c= client.createNew(TestConcessioniModel.prepareConcessione(1,numImgs));
|
Concessione c= client.createNew(TestModel.prepareConcessione(1,numImgs));
|
||||||
StorageUtils storage = new StorageUtils();
|
StorageUtils storage = new StorageUtils();
|
||||||
|
|
||||||
c.getRelazioneScavo().setPolicy(AccessPolicy.EMBARGOED);
|
|
||||||
String mongoId=c.getMongo_id();
|
String mongoId=c.getMongo_id();
|
||||||
c=client.update(mongoId, Serialization.write(c));
|
|
||||||
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
client.registerFileSet(mongoId,
|
||||||
|
FileSets.prepareRequest(storage,Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf")));
|
||||||
|
|
||||||
c=client.registerFileSet(mongoId,
|
client.registerFileSet(mongoId,
|
||||||
FileSets.prepareRequest(storage,Paths.RELAZIONE,new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf")));
|
FileSets.prepareRequest(storage,Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf")));
|
||||||
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
c=client.registerFileSet(mongoId,
|
|
||||||
FileSets.prepareRequest(storage,Paths.ABSTRACT_RELAZIONE,new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf")));
|
|
||||||
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
for(int i=0;i<numImgs;i++)
|
for(int i=0;i<numImgs;i++)
|
||||||
c=client.registerFileSet(mongoId,
|
client.registerFileSet(mongoId,
|
||||||
FileSets.build(Paths.imgByIndex(i)).
|
FileSets.build(Paths.imgByIndex(i)).
|
||||||
add(storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),"immagine"+(i+1)+".png"),
|
add(storage.putOntoStorage(new File(TestModel.getBaseFolder(),"immagine"+(i+1)+".png"),
|
||||||
i+"San Mauro_drone totale.JPG")).getTheRequest());
|
i+"San Mauro_drone totale.JPG")).getTheRequest());
|
||||||
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
c=client.registerFileSet(mongoId,
|
client.registerFileSet(mongoId,
|
||||||
FileSets.prepareRequest(storage,Paths.POSIZIONAMENTO,new File(TestConcessioniModel.getBaseFolder(),"pos.shp")));
|
FileSets.prepareRequest(storage,Paths.POSIZIONAMENTO,new File(TestModel.getBaseFolder(),"pos.shp")));
|
||||||
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
client.registerFileSet(mongoId,
|
||||||
|
FileSets.prepareRequest(storage,Paths.piantaByIndex(0),new File(TestModel.getBaseFolder(),"pianta.shp")));
|
||||||
|
|
||||||
c=client.registerFileSet(mongoId,
|
|
||||||
FileSets.prepareRequest(storage,Paths.piantaByIndex(0),new File(TestConcessioniModel.getBaseFolder(),"pianta.shp")));
|
|
||||||
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
c=client.publish(mongoId);
|
c=client.publish(mongoId);
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,44 +2,40 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-common
|
# Changelog for org.gcube.application.geoportal-common
|
||||||
|
|
||||||
# [v1.0.8] - 2021-11-10
|
|
||||||
- Fixes [#22369](https://support.d4science.org/issues/22369)
|
|
||||||
- Fixes [#22338](https://support.d4science.org/issues/22338)
|
|
||||||
- Profiled Documents
|
|
||||||
- Changed group id
|
|
||||||
|
|
||||||
|
|
||||||
# [v1.0.7] - 2021-09-20
|
# [v1.0.7] - 2021-09-20
|
||||||
- Refactored repositories
|
Refactored repositories
|
||||||
|
|
||||||
# [v1.0.6-SNAPSHOT] - 2021-08-3
|
# [v1.0.6-SNAPSHOT] - 2021-08-3
|
||||||
- Forced Deletion
|
Forced Deletion
|
||||||
- Search & query
|
Search & query
|
||||||
- Clean Fileset
|
Clean Fileset
|
||||||
- Interfaces return iterator instead of iterable
|
Interfaces return iterator instead of iterable
|
||||||
- Name in WorkspaceContent (https://support.d4science.org/issues/22032)
|
Name in WorkspaceContent (https://support.d4science.org/issues/22032)
|
||||||
- Section AbstractRelazione (https://support.d4science.org/issues/22031)
|
Section AbstractRelazione (https://support.d4science.org/issues/22031)
|
||||||
|
|
||||||
# [v1.0.5] - 2020-12-9
|
# [v1.0.5] - 2020-12-9
|
||||||
- Mongo Id in record
|
Mongo Id in record
|
||||||
- Mongo Concessioni interface
|
Mongo Concessioni interface
|
||||||
- Added Files.fixFileNAme
|
Added Files.fixFileNAme
|
||||||
- ValidationReport as field
|
ValidationReport as field
|
||||||
- Updated Model (#20357)
|
Updated Model (#20357)
|
||||||
|
|
||||||
|
|
||||||
# [v1.0.4-SNAPSHOT] - 2020-12-9
|
# [v1.0.4-SNAPSHOT] - 2020-12-9
|
||||||
- Projects Rest Interface
|
Projects Rest Interface
|
||||||
- TempFile support
|
TempFile support
|
||||||
|
|
||||||
# [v1.0.3] - 2020-12-4
|
# [v1.0.3] - 2020-12-4
|
||||||
- Project model update
|
Project model update
|
||||||
|
|
||||||
|
|
||||||
# [v1.0.2-SNAPSHOT] - 2020-12-4
|
# [v1.0.2-SNAPSHOT] - 2020-12-4
|
||||||
- Model update
|
Model update
|
||||||
|
|
||||||
## [v1.0.1] - 2020-11-11
|
## [v1.0.1] - 2020-11-11
|
||||||
- Model update
|
|
||||||
|
Model update
|
||||||
|
|
||||||
## [v1.0.0] - 2020-11-11
|
## [v1.0.0] - 2020-11-11
|
||||||
- First release
|
|
||||||
|
First release
|
|
@ -2,15 +2,16 @@
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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">
|
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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-common</artifactId>
|
<artifactId>geoportal-common</artifactId>
|
||||||
<version>1.0.8</version>
|
<version>1.0.7</version>
|
||||||
<name>Geoportal Common</name>
|
<name>Geoportal Common</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -41,11 +42,6 @@
|
||||||
<artifactId>authorization-client</artifactId>
|
<artifactId>authorization-client</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.jayway.jsonpath</groupId>
|
|
||||||
<artifactId>json-path</artifactId>
|
|
||||||
<version>2.4.0</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- TEST -->
|
<!-- TEST -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class Access {
|
|
||||||
|
|
||||||
public static final String POLICY="policy";
|
|
||||||
public static final String LICENSE="license";
|
|
||||||
|
|
||||||
private AccessPolicy policy;
|
|
||||||
private String license;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
public enum AccessPolicy {
|
|
||||||
|
|
||||||
OPEN,RESTRICTED,EMBARGOED;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class AccountingInfo {
|
|
||||||
|
|
||||||
public static final String USER="user";
|
|
||||||
public static final String CONTEXT="context";
|
|
||||||
public static final String INSTANT="instant";
|
|
||||||
|
|
||||||
private User user;
|
|
||||||
private Context context;
|
|
||||||
private LocalDateTime instant;
|
|
||||||
}
|
|
|
@ -1,840 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
import java.math.BigInteger;
|
|
||||||
import java.util.ArrayDeque;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Deque;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Generic implementation of version comparison.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* Features:
|
|
||||||
* <ul>
|
|
||||||
* <li>mixing of '<code>-</code>' (hyphen) and '<code>.</code>' (dot) separators,</li>
|
|
||||||
* <li>transition between characters and digits also constitutes a separator:
|
|
||||||
* <code>1.0alpha1 => [1, 0, alpha, 1]</code></li>
|
|
||||||
* <li>unlimited number of version components,</li>
|
|
||||||
* <li>version components in the text can be digits or strings,</li>
|
|
||||||
* <li>strings are checked for well-known qualifiers and the qualifier ordering is used for version ordering.
|
|
||||||
* Well-known qualifiers (case insensitive) are:<ul>
|
|
||||||
* <li><code>alpha</code> or <code>a</code></li>
|
|
||||||
* <li><code>beta</code> or <code>b</code></li>
|
|
||||||
* <li><code>milestone</code> or <code>m</code></li>
|
|
||||||
* <li><code>rc</code> or <code>cr</code></li>
|
|
||||||
* <li><code>snapshot</code></li>
|
|
||||||
* <li><code>(the empty string)</code> or <code>ga</code> or <code>final</code></li>
|
|
||||||
* <li><code>sp</code></li>
|
|
||||||
* </ul>
|
|
||||||
* Unknown qualifiers are considered after known qualifiers, with lexical order (always case insensitive),
|
|
||||||
* </li>
|
|
||||||
* <li>a hyphen usually precedes a qualifier, and is always less important than something preceded with a dot.</li>
|
|
||||||
* </ul>
|
|
||||||
*
|
|
||||||
* @see <a href="https://cwiki.apache.org/confluence/display/MAVENOLD/Versioning">"Versioning" on Maven Wiki</a>
|
|
||||||
* @author <a href="mailto:kenney@apache.org">Kenney Westerhof</a>
|
|
||||||
* @author <a href="mailto:hboutemy@apache.org">Hervé Boutemy</a>
|
|
||||||
*/
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class ComparableVersion
|
|
||||||
implements Comparable<ComparableVersion>
|
|
||||||
{
|
|
||||||
private static final int MAX_INTITEM_LENGTH = 9;
|
|
||||||
|
|
||||||
private static final int MAX_LONGITEM_LENGTH = 18;
|
|
||||||
|
|
||||||
private String value;
|
|
||||||
|
|
||||||
private String canonical;
|
|
||||||
|
|
||||||
private ListItem items;
|
|
||||||
|
|
||||||
private interface Item
|
|
||||||
{
|
|
||||||
int INT_ITEM = 3;
|
|
||||||
int LONG_ITEM = 4;
|
|
||||||
int BIGINTEGER_ITEM = 0;
|
|
||||||
int STRING_ITEM = 1;
|
|
||||||
int LIST_ITEM = 2;
|
|
||||||
|
|
||||||
int compareTo( Item item );
|
|
||||||
|
|
||||||
int getType();
|
|
||||||
|
|
||||||
boolean isNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a numeric item in the version item list that can be represented with an int.
|
|
||||||
*/
|
|
||||||
private static class IntItem
|
|
||||||
implements Item
|
|
||||||
{
|
|
||||||
private final int value;
|
|
||||||
|
|
||||||
public static final IntItem ZERO = new IntItem();
|
|
||||||
|
|
||||||
private IntItem()
|
|
||||||
{
|
|
||||||
this.value = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
IntItem( String str )
|
|
||||||
{
|
|
||||||
this.value = Integer.parseInt( str );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getType()
|
|
||||||
{
|
|
||||||
return INT_ITEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isNull()
|
|
||||||
{
|
|
||||||
return value == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo( Item item )
|
|
||||||
{
|
|
||||||
if ( item == null )
|
|
||||||
{
|
|
||||||
return ( value == 0 ) ? 0 : 1; // 1.0 == 1, 1.1 > 1
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ( item.getType() )
|
|
||||||
{
|
|
||||||
case INT_ITEM:
|
|
||||||
int itemValue = ( (IntItem) item ).value;
|
|
||||||
return Integer.compare( value, itemValue );
|
|
||||||
case LONG_ITEM:
|
|
||||||
case BIGINTEGER_ITEM:
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
case STRING_ITEM:
|
|
||||||
return 1; // 1.1 > 1-sp
|
|
||||||
|
|
||||||
case LIST_ITEM:
|
|
||||||
return 1; // 1.1 > 1-1
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException( "invalid item: " + item.getClass() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals( Object o )
|
|
||||||
{
|
|
||||||
if ( this == o )
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ( o == null || getClass() != o.getClass() )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
IntItem intItem = (IntItem) o;
|
|
||||||
|
|
||||||
return value == intItem.value;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode()
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return Integer.toString( value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a numeric item in the version item list that can be represented with a long.
|
|
||||||
*/
|
|
||||||
private static class LongItem
|
|
||||||
implements Item
|
|
||||||
{
|
|
||||||
private final long value;
|
|
||||||
|
|
||||||
LongItem( String str )
|
|
||||||
{
|
|
||||||
this.value = Long.parseLong( str );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getType()
|
|
||||||
{
|
|
||||||
return LONG_ITEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isNull()
|
|
||||||
{
|
|
||||||
return value == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo( Item item )
|
|
||||||
{
|
|
||||||
if ( item == null )
|
|
||||||
{
|
|
||||||
return ( value == 0 ) ? 0 : 1; // 1.0 == 1, 1.1 > 1
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ( item.getType() )
|
|
||||||
{
|
|
||||||
case INT_ITEM:
|
|
||||||
return 1;
|
|
||||||
case LONG_ITEM:
|
|
||||||
long itemValue = ( (LongItem) item ).value;
|
|
||||||
return Long.compare( value, itemValue );
|
|
||||||
case BIGINTEGER_ITEM:
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
case STRING_ITEM:
|
|
||||||
return 1; // 1.1 > 1-sp
|
|
||||||
|
|
||||||
case LIST_ITEM:
|
|
||||||
return 1; // 1.1 > 1-1
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException( "invalid item: " + item.getClass() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals( Object o )
|
|
||||||
{
|
|
||||||
if ( this == o )
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ( o == null || getClass() != o.getClass() )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
LongItem longItem = (LongItem) o;
|
|
||||||
|
|
||||||
return value == longItem.value;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode()
|
|
||||||
{
|
|
||||||
return (int) ( value ^ ( value >>> 32 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return Long.toString( value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a numeric item in the version item list.
|
|
||||||
*/
|
|
||||||
private static class BigIntegerItem
|
|
||||||
implements Item
|
|
||||||
{
|
|
||||||
private final BigInteger value;
|
|
||||||
|
|
||||||
BigIntegerItem( String str )
|
|
||||||
{
|
|
||||||
this.value = new BigInteger( str );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getType()
|
|
||||||
{
|
|
||||||
return BIGINTEGER_ITEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isNull()
|
|
||||||
{
|
|
||||||
return BigInteger.ZERO.equals( value );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo( Item item )
|
|
||||||
{
|
|
||||||
if ( item == null )
|
|
||||||
{
|
|
||||||
return BigInteger.ZERO.equals( value ) ? 0 : 1; // 1.0 == 1, 1.1 > 1
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ( item.getType() )
|
|
||||||
{
|
|
||||||
case INT_ITEM:
|
|
||||||
case LONG_ITEM:
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
case BIGINTEGER_ITEM:
|
|
||||||
return value.compareTo( ( (BigIntegerItem) item ).value );
|
|
||||||
|
|
||||||
case STRING_ITEM:
|
|
||||||
return 1; // 1.1 > 1-sp
|
|
||||||
|
|
||||||
case LIST_ITEM:
|
|
||||||
return 1; // 1.1 > 1-1
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException( "invalid item: " + item.getClass() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals( Object o )
|
|
||||||
{
|
|
||||||
if ( this == o )
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ( o == null || getClass() != o.getClass() )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
BigIntegerItem that = (BigIntegerItem) o;
|
|
||||||
|
|
||||||
return value.equals( that.value );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode()
|
|
||||||
{
|
|
||||||
return value.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return value.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a string in the version item list, usually a qualifier.
|
|
||||||
*/
|
|
||||||
private static class StringItem
|
|
||||||
implements Item
|
|
||||||
{
|
|
||||||
private static final List<String> QUALIFIERS =
|
|
||||||
Arrays.asList( "alpha", "beta", "milestone", "rc", "snapshot", "", "sp" );
|
|
||||||
|
|
||||||
private static final Properties ALIASES = new Properties();
|
|
||||||
static
|
|
||||||
{
|
|
||||||
ALIASES.put( "ga", "" );
|
|
||||||
ALIASES.put( "final", "" );
|
|
||||||
ALIASES.put( "release", "" );
|
|
||||||
ALIASES.put( "cr", "rc" );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A comparable value for the empty-string qualifier. This one is used to determine if a given qualifier makes
|
|
||||||
* the version older than one without a qualifier, or more recent.
|
|
||||||
*/
|
|
||||||
private static final String RELEASE_VERSION_INDEX = String.valueOf( QUALIFIERS.indexOf( "" ) );
|
|
||||||
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
StringItem( String value, boolean followedByDigit )
|
|
||||||
{
|
|
||||||
if ( followedByDigit && value.length() == 1 )
|
|
||||||
{
|
|
||||||
// a1 = alpha-1, b1 = beta-1, m1 = milestone-1
|
|
||||||
switch ( value.charAt( 0 ) )
|
|
||||||
{
|
|
||||||
case 'a':
|
|
||||||
value = "alpha";
|
|
||||||
break;
|
|
||||||
case 'b':
|
|
||||||
value = "beta";
|
|
||||||
break;
|
|
||||||
case 'm':
|
|
||||||
value = "milestone";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.value = ALIASES.getProperty( value , value );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getType()
|
|
||||||
{
|
|
||||||
return STRING_ITEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isNull()
|
|
||||||
{
|
|
||||||
return ( comparableQualifier( value ).compareTo( RELEASE_VERSION_INDEX ) == 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a comparable value for a qualifier.
|
|
||||||
*
|
|
||||||
* This method takes into account the ordering of known qualifiers then unknown qualifiers with lexical
|
|
||||||
* ordering.
|
|
||||||
*
|
|
||||||
* just returning an Integer with the index here is faster, but requires a lot of if/then/else to check for -1
|
|
||||||
* or QUALIFIERS.size and then resort to lexical ordering. Most comparisons are decided by the first character,
|
|
||||||
* so this is still fast. If more characters are needed then it requires a lexical sort anyway.
|
|
||||||
*
|
|
||||||
* @param qualifier
|
|
||||||
* @return an equivalent value that can be used with lexical comparison
|
|
||||||
*/
|
|
||||||
public static String comparableQualifier( String qualifier )
|
|
||||||
{
|
|
||||||
int i = QUALIFIERS.indexOf( qualifier );
|
|
||||||
|
|
||||||
return i == -1 ? ( QUALIFIERS.size() + "-" + qualifier ) : String.valueOf( i );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo( Item item )
|
|
||||||
{
|
|
||||||
if ( item == null )
|
|
||||||
{
|
|
||||||
// 1-rc < 1, 1-ga > 1
|
|
||||||
return comparableQualifier( value ).compareTo( RELEASE_VERSION_INDEX );
|
|
||||||
}
|
|
||||||
switch ( item.getType() )
|
|
||||||
{
|
|
||||||
case INT_ITEM:
|
|
||||||
case LONG_ITEM:
|
|
||||||
case BIGINTEGER_ITEM:
|
|
||||||
return -1; // 1.any < 1.1 ?
|
|
||||||
|
|
||||||
case STRING_ITEM:
|
|
||||||
return comparableQualifier( value ).compareTo( comparableQualifier( ( (StringItem) item ).value ) );
|
|
||||||
|
|
||||||
case LIST_ITEM:
|
|
||||||
return -1; // 1.any < 1-1
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException( "invalid item: " + item.getClass() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals( Object o )
|
|
||||||
{
|
|
||||||
if ( this == o )
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ( o == null || getClass() != o.getClass() )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
StringItem that = (StringItem) o;
|
|
||||||
|
|
||||||
return value.equals( that.value );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode()
|
|
||||||
{
|
|
||||||
return value.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a version list item. This class is used both for the global item list and for sub-lists (which start
|
|
||||||
* with '-(number)' in the version specification).
|
|
||||||
*/
|
|
||||||
private static class ListItem
|
|
||||||
extends ArrayList<Item>
|
|
||||||
implements Item
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public int getType()
|
|
||||||
{
|
|
||||||
return LIST_ITEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isNull()
|
|
||||||
{
|
|
||||||
return ( size() == 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
void normalize()
|
|
||||||
{
|
|
||||||
for ( int i = size() - 1; i >= 0; i-- )
|
|
||||||
{
|
|
||||||
Item lastItem = get( i );
|
|
||||||
|
|
||||||
if ( lastItem.isNull() )
|
|
||||||
{
|
|
||||||
// remove null trailing items: 0, "", empty list
|
|
||||||
remove( i );
|
|
||||||
}
|
|
||||||
else if ( !( lastItem instanceof ListItem ) )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo( Item item )
|
|
||||||
{
|
|
||||||
if ( item == null )
|
|
||||||
{
|
|
||||||
if ( size() == 0 )
|
|
||||||
{
|
|
||||||
return 0; // 1-0 = 1- (normalize) = 1
|
|
||||||
}
|
|
||||||
// Compare the entire list of items with null - not just the first one, MNG-6964
|
|
||||||
for ( Item i : this )
|
|
||||||
{
|
|
||||||
int result = i.compareTo( null );
|
|
||||||
if ( result != 0 )
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
switch ( item.getType() )
|
|
||||||
{
|
|
||||||
case INT_ITEM:
|
|
||||||
case LONG_ITEM:
|
|
||||||
case BIGINTEGER_ITEM:
|
|
||||||
return -1; // 1-1 < 1.0.x
|
|
||||||
|
|
||||||
case STRING_ITEM:
|
|
||||||
return 1; // 1-1 > 1-sp
|
|
||||||
|
|
||||||
case LIST_ITEM:
|
|
||||||
Iterator<Item> left = iterator();
|
|
||||||
Iterator<Item> right = ( (ListItem) item ).iterator();
|
|
||||||
|
|
||||||
while ( left.hasNext() || right.hasNext() )
|
|
||||||
{
|
|
||||||
Item l = left.hasNext() ? left.next() : null;
|
|
||||||
Item r = right.hasNext() ? right.next() : null;
|
|
||||||
|
|
||||||
// if this is shorter, then invert the compare and mul with -1
|
|
||||||
int result = l == null ? ( r == null ? 0 : -1 * r.compareTo( l ) ) : l.compareTo( r );
|
|
||||||
|
|
||||||
if ( result != 0 )
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException( "invalid item: " + item.getClass() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
StringBuilder buffer = new StringBuilder();
|
|
||||||
for ( Item item : this )
|
|
||||||
{
|
|
||||||
if ( buffer.length() > 0 )
|
|
||||||
{
|
|
||||||
buffer.append( ( item instanceof ListItem ) ? '-' : '.' );
|
|
||||||
}
|
|
||||||
buffer.append( item );
|
|
||||||
}
|
|
||||||
return buffer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the contents in the same format that is used when you call toString() on a List.
|
|
||||||
*/
|
|
||||||
private String toListString()
|
|
||||||
{
|
|
||||||
StringBuilder buffer = new StringBuilder();
|
|
||||||
buffer.append( "[" );
|
|
||||||
for ( Item item : this )
|
|
||||||
{
|
|
||||||
if ( buffer.length() > 1 )
|
|
||||||
{
|
|
||||||
buffer.append( ", " );
|
|
||||||
}
|
|
||||||
if ( item instanceof ListItem )
|
|
||||||
{
|
|
||||||
buffer.append( ( (ListItem ) item ).toListString() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buffer.append( item );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buffer.append( "]" );
|
|
||||||
return buffer.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ComparableVersion( String version )
|
|
||||||
{
|
|
||||||
parseVersion( version );
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings( "checkstyle:innerassignment" )
|
|
||||||
public final void parseVersion( String version )
|
|
||||||
{
|
|
||||||
this.value = version;
|
|
||||||
|
|
||||||
items = new ListItem();
|
|
||||||
|
|
||||||
version = version.toLowerCase( Locale.ENGLISH );
|
|
||||||
|
|
||||||
ListItem list = items;
|
|
||||||
|
|
||||||
Deque<Item> stack = new ArrayDeque<>();
|
|
||||||
stack.push( list );
|
|
||||||
|
|
||||||
boolean isDigit = false;
|
|
||||||
|
|
||||||
int startIndex = 0;
|
|
||||||
|
|
||||||
for ( int i = 0; i < version.length(); i++ )
|
|
||||||
{
|
|
||||||
char c = version.charAt( i );
|
|
||||||
|
|
||||||
if ( c == '.' )
|
|
||||||
{
|
|
||||||
if ( i == startIndex )
|
|
||||||
{
|
|
||||||
list.add( IntItem.ZERO );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
list.add( parseItem( isDigit, version.substring( startIndex, i ) ) );
|
|
||||||
}
|
|
||||||
startIndex = i + 1;
|
|
||||||
}
|
|
||||||
else if ( c == '-' )
|
|
||||||
{
|
|
||||||
if ( i == startIndex )
|
|
||||||
{
|
|
||||||
list.add( IntItem.ZERO );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
list.add( parseItem( isDigit, version.substring( startIndex, i ) ) );
|
|
||||||
}
|
|
||||||
startIndex = i + 1;
|
|
||||||
|
|
||||||
list.add( list = new ListItem() );
|
|
||||||
stack.push( list );
|
|
||||||
}
|
|
||||||
else if ( Character.isDigit( c ) )
|
|
||||||
{
|
|
||||||
if ( !isDigit && i > startIndex )
|
|
||||||
{
|
|
||||||
list.add( new StringItem( version.substring( startIndex, i ), true ) );
|
|
||||||
startIndex = i;
|
|
||||||
|
|
||||||
list.add( list = new ListItem() );
|
|
||||||
stack.push( list );
|
|
||||||
}
|
|
||||||
|
|
||||||
isDigit = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDigit && i > startIndex )
|
|
||||||
{
|
|
||||||
list.add( parseItem( true, version.substring( startIndex, i ) ) );
|
|
||||||
startIndex = i;
|
|
||||||
|
|
||||||
list.add( list = new ListItem() );
|
|
||||||
stack.push( list );
|
|
||||||
}
|
|
||||||
|
|
||||||
isDigit = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( version.length() > startIndex )
|
|
||||||
{
|
|
||||||
list.add( parseItem( isDigit, version.substring( startIndex ) ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
while ( !stack.isEmpty() )
|
|
||||||
{
|
|
||||||
list = (ListItem) stack.pop();
|
|
||||||
list.normalize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Item parseItem( boolean isDigit, String buf )
|
|
||||||
{
|
|
||||||
if ( isDigit )
|
|
||||||
{
|
|
||||||
buf = stripLeadingZeroes( buf );
|
|
||||||
if ( buf.length() <= MAX_INTITEM_LENGTH )
|
|
||||||
{
|
|
||||||
// lower than 2^31
|
|
||||||
return new IntItem( buf );
|
|
||||||
}
|
|
||||||
else if ( buf.length() <= MAX_LONGITEM_LENGTH )
|
|
||||||
{
|
|
||||||
// lower than 2^63
|
|
||||||
return new LongItem( buf );
|
|
||||||
}
|
|
||||||
return new BigIntegerItem( buf );
|
|
||||||
}
|
|
||||||
return new StringItem( buf, false );
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String stripLeadingZeroes( String buf )
|
|
||||||
{
|
|
||||||
if ( buf == null || buf.isEmpty() )
|
|
||||||
{
|
|
||||||
return "0";
|
|
||||||
}
|
|
||||||
for ( int i = 0; i < buf.length(); ++i )
|
|
||||||
{
|
|
||||||
char c = buf.charAt( i );
|
|
||||||
if ( c != '0' )
|
|
||||||
{
|
|
||||||
return buf.substring( i );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo( ComparableVersion o )
|
|
||||||
{
|
|
||||||
return items.compareTo( o.items );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCanonical()
|
|
||||||
{
|
|
||||||
if ( canonical == null )
|
|
||||||
{
|
|
||||||
canonical = items.toString();
|
|
||||||
}
|
|
||||||
return canonical;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals( Object o )
|
|
||||||
{
|
|
||||||
return ( o instanceof ComparableVersion ) && items.equals( ( (ComparableVersion) o ).items );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode()
|
|
||||||
{
|
|
||||||
return items.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
// CHECKSTYLE_OFF: LineLength
|
|
||||||
/**
|
|
||||||
* Main to test version parsing and comparison.
|
|
||||||
* <p>
|
|
||||||
* To check how "1.2.7" compares to "1.2-SNAPSHOT", for example, you can issue
|
|
||||||
* <pre>java -jar ${maven.repo.local}/org/apache/maven/maven-artifact/${maven.version}/maven-artifact-${maven.version}.jar "1.2.7" "1.2-SNAPSHOT"</pre>
|
|
||||||
* command to command line. Result of given command will be something like this:
|
|
||||||
* <pre>
|
|
||||||
* Display parameters as parsed by Maven (in canonical form) and comparison result:
|
|
||||||
* 1. 1.2.7 == 1.2.7
|
|
||||||
* 1.2.7 > 1.2-SNAPSHOT
|
|
||||||
* 2. 1.2-SNAPSHOT == 1.2-snapshot
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @param args the version strings to parse and compare. You can pass arbitrary number of version strings and always
|
|
||||||
* two adjacent will be compared
|
|
||||||
*/
|
|
||||||
// CHECKSTYLE_ON: LineLength
|
|
||||||
public static void main( String... args )
|
|
||||||
{
|
|
||||||
System.out.println( "Display parameters as parsed by Maven (in canonical form and as a list of tokens) and"
|
|
||||||
+ " comparison result:" );
|
|
||||||
if ( args.length == 0 )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ComparableVersion prev = null;
|
|
||||||
int i = 1;
|
|
||||||
for ( String version : args )
|
|
||||||
{
|
|
||||||
ComparableVersion c = new ComparableVersion( version );
|
|
||||||
|
|
||||||
if ( prev != null )
|
|
||||||
{
|
|
||||||
int compare = prev.compareTo( c );
|
|
||||||
System.out.println( " " + prev.toString() + ' '
|
|
||||||
+ ( ( compare == 0 ) ? "==" : ( ( compare < 0 ) ? "<" : ">" ) ) + ' ' + version );
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println( ( i++ ) + ". " + version + " -> " + c.getCanonical()
|
|
||||||
+ "; tokens: " + c.items.toListString() );
|
|
||||||
|
|
||||||
prev = c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class Context {
|
|
||||||
public static final String ID="id";
|
|
||||||
public static final String NAME = "name";
|
|
||||||
|
|
||||||
|
|
||||||
private String id;
|
|
||||||
private String name;
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class LifecycleInformation {
|
|
||||||
|
|
||||||
public static final String PHASE="phase";
|
|
||||||
public static final String LAST_OPERATION_STATUS="lastOperationStatus";
|
|
||||||
public static final String ERROR_MESSAGES="errorMessages";
|
|
||||||
public static final String WARNING_MESSAGES="warningMEssages";
|
|
||||||
public static final String CHILDREN="children";
|
|
||||||
|
|
||||||
public static enum Status{
|
|
||||||
PASSED,ERROR,WARNING
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private String phase;
|
|
||||||
private Status lastOperationStatus;
|
|
||||||
private List<String> errorMessages;
|
|
||||||
private List<String> warningMessages;
|
|
||||||
private List<LifecycleInformation> children;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import com.mongodb.client.model.geojson.GeoJsonObjectType;
|
|
||||||
import lombok.*;
|
|
||||||
import org.bson.Document;
|
|
||||||
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class ProfiledDocument {
|
|
||||||
|
|
||||||
public static final String _ID="_id";
|
|
||||||
public static final String VERSION="version";
|
|
||||||
public static final String INFO="info";
|
|
||||||
public static final String PROFILE_ID="profileID";
|
|
||||||
public static final String PROFILE_VERSION="profileVersion";
|
|
||||||
public static final String LIFECYCLE_INFORMATION="lifecycleInformation";
|
|
||||||
public static final String RELATIONSHIPS="relationships";
|
|
||||||
public static final String SPATIAL_REFERENCE="spatialReference";
|
|
||||||
public static final String TEMPORAL_REFERENCE="temporalReference";
|
|
||||||
public static final String THE_DOCUMENT="theDocument";
|
|
||||||
|
|
||||||
// CORE METADATA
|
|
||||||
|
|
||||||
private String _id;
|
|
||||||
private ComparableVersion version;
|
|
||||||
|
|
||||||
// Publication Info
|
|
||||||
private PublicationInfo info;
|
|
||||||
|
|
||||||
// Profile reference
|
|
||||||
private String profileID;
|
|
||||||
private ComparableVersion profileVersion;
|
|
||||||
|
|
||||||
private LifecycleInformation lifecycleInformation;
|
|
||||||
|
|
||||||
private Relationship[] relationships;
|
|
||||||
|
|
||||||
private GeoJsonObjectType spatialReference;
|
|
||||||
|
|
||||||
private TemporalReference temporalReference;
|
|
||||||
|
|
||||||
private Document theDocument;
|
|
||||||
|
|
||||||
public void setDefaults(){
|
|
||||||
// TODO APPLY DEFAULTS ??
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.AccessPolicy;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class PublicationInfo {
|
|
||||||
|
|
||||||
public static final String CREATION_INFO="creationInfo";
|
|
||||||
public static final String LAST_EDIT_INFO="lastEditInfo";
|
|
||||||
public static final String ACCESS = "access";
|
|
||||||
|
|
||||||
|
|
||||||
private AccountingInfo creationInfo;
|
|
||||||
private AccountingInfo lastEditInfo;
|
|
||||||
private Access access;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class RegisteredFile {
|
|
||||||
|
|
||||||
public static String MIMETYPE="mimetype";
|
|
||||||
public static String STORAGE_ID="storageID";
|
|
||||||
public static String LINK="link";
|
|
||||||
public static String NAME="NAME";
|
|
||||||
|
|
||||||
private String mimetype;
|
|
||||||
private String storageID;
|
|
||||||
private String link;
|
|
||||||
private String name;
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import org.bson.Document;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class RegisteredFileSet {
|
|
||||||
|
|
||||||
public static final String CREATION_INFO="creationInfo";
|
|
||||||
public static final String ACCESS="access";
|
|
||||||
public static final String FOLDER_ID="folderID";
|
|
||||||
public static final String PAYLOADS="payloads";
|
|
||||||
|
|
||||||
private AccountingInfo creationInfo;
|
|
||||||
private Access access;
|
|
||||||
private String folderID;
|
|
||||||
|
|
||||||
private List<RegisteredFile> payloads;
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class Relationship {
|
|
||||||
|
|
||||||
public static final String RELATIONSHIP_NAME="relationshipName";
|
|
||||||
public static final String TARGET_ID="targetID";
|
|
||||||
|
|
||||||
private String relationshipName;
|
|
||||||
private String targetID;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class TemporalReference {
|
|
||||||
|
|
||||||
private String field;
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.document;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@ToString
|
|
||||||
public class User {
|
|
||||||
|
|
||||||
public static final String USERNAME="username";
|
|
||||||
|
|
||||||
|
|
||||||
private String username;
|
|
||||||
|
|
||||||
}
|
|
|
@ -218,7 +218,7 @@ public class Concessione extends Record{
|
||||||
|
|
||||||
validator.setObjectName("Concessione");
|
validator.setObjectName("Concessione");
|
||||||
|
|
||||||
// setPolicy(AccessPolicy.OPEN);
|
setPolicy(AccessPolicy.OPEN);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -258,6 +258,18 @@ public class Concessione extends Record{
|
||||||
validator.addChild(abstractRelazione.validateForInsertion());
|
validator.addChild(abstractRelazione.validateForInsertion());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if(immaginiRappresentative!=null)
|
||||||
|
//
|
||||||
|
// for(UploadedImage img : immaginiRappresentative) {
|
||||||
|
// validator.setDefault(img.getSoggetto(),getSoggetto());
|
||||||
|
// validator.setDefault(img.getCreationTime(),getCreationTime());
|
||||||
|
// validator.setDefault(img.getPolicy(), getPolicy());
|
||||||
|
// validator.setDefault(img.getLicenzaID(), getLicenzaID());
|
||||||
|
//
|
||||||
|
// validator.addChild(img.validateForInsertion());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
|
||||||
if(validator.checkMandatory(posizionamentoScavo, "Posizionamento scavo")) {
|
if(validator.checkMandatory(posizionamentoScavo, "Posizionamento scavo")) {
|
||||||
|
|
||||||
ValidationReport posReport=posizionamentoScavo.validateForInsertion();
|
ValidationReport posReport=posizionamentoScavo.validateForInsertion();
|
||||||
|
@ -270,11 +282,15 @@ public class Concessione extends Record{
|
||||||
for(OtherContent content:genericContent)
|
for(OtherContent content:genericContent)
|
||||||
validator.addChild(content.validateForInsertion());
|
validator.addChild(content.validateForInsertion());
|
||||||
|
|
||||||
if(pianteFineScavo!=null)
|
if(validator.checkMandatory(pianteFineScavo,"Piante fine scavo"))
|
||||||
for(LayerConcessione l:pianteFineScavo) {
|
for(LayerConcessione l:pianteFineScavo) {
|
||||||
validator.addChild(l.validateForInsertion());
|
validator.addChild(l.validateForInsertion());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return validator;
|
return validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,15 +317,15 @@ public class Concessione extends Record{
|
||||||
relazioneScavo.setTitolo(ConstraintCheck.defaultFor(relazioneScavo.getTitolo(),getNome()+" relazione di scavo").evaluate());
|
relazioneScavo.setTitolo(ConstraintCheck.defaultFor(relazioneScavo.getTitolo(),getNome()+" relazione di scavo").evaluate());
|
||||||
relazioneScavo.setSoggetto(ConstraintCheck.defaultFor(relazioneScavo.getSoggetto(),getSoggetto()).evaluate());
|
relazioneScavo.setSoggetto(ConstraintCheck.defaultFor(relazioneScavo.getSoggetto(),getSoggetto()).evaluate());
|
||||||
relazioneScavo.setCreationTime(ConstraintCheck.defaultFor(relazioneScavo.getCreationTime(),getCreationTime()).evaluate());
|
relazioneScavo.setCreationTime(ConstraintCheck.defaultFor(relazioneScavo.getCreationTime(),getCreationTime()).evaluate());
|
||||||
relazioneScavo.setLicenseID(ConstraintCheck.defaultFor(relazioneScavo.getLicenseID(), "CC-BY-4.0").evaluate());
|
relazioneScavo.setLicenseID(ConstraintCheck.defaultFor(getLicenzaID(), "CC-BY-4.0").evaluate());
|
||||||
relazioneScavo.setPolicy(ConstraintCheck.defaultFor(relazioneScavo.getPolicy(),AccessPolicy.OPEN).evaluate());
|
relazioneScavo.setPolicy(getPolicy());
|
||||||
|
|
||||||
|
|
||||||
if(abstractRelazione == null) abstractRelazione = new AbstractRelazione();
|
if(abstractRelazione == null) abstractRelazione = new AbstractRelazione();
|
||||||
abstractRelazione.setTitolo(ConstraintCheck.defaultFor(abstractRelazione.getTitolo(),getNome()+" abstract relazione di scavo").evaluate());
|
abstractRelazione.setTitolo(ConstraintCheck.defaultFor(abstractRelazione.getTitolo(),getNome()+" abstract relazione di scavo").evaluate());
|
||||||
abstractRelazione.setCreationTime(ConstraintCheck.defaultFor(abstractRelazione.getCreationTime(),getCreationTime()).evaluate());
|
abstractRelazione.setCreationTime(ConstraintCheck.defaultFor(abstractRelazione.getCreationTime(),getCreationTime()).evaluate());
|
||||||
abstractRelazione.setLicenseID(ConstraintCheck.defaultFor(abstractRelazione.getLicenseID(), "CC-BY-4.0").evaluate());
|
abstractRelazione.setLicenseID(ConstraintCheck.defaultFor(getLicenzaID(), "CC-BY-4.0").evaluate());
|
||||||
abstractRelazione.setPolicy(ConstraintCheck.defaultFor(abstractRelazione.getPolicy(),AccessPolicy.OPEN).evaluate());
|
abstractRelazione.setPolicy(getPolicy());
|
||||||
|
|
||||||
|
|
||||||
if(immaginiRappresentative!=null)
|
if(immaginiRappresentative!=null)
|
||||||
|
|
|
@ -7,11 +7,9 @@ import java.util.List;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@Slf4j
|
|
||||||
public class ConstraintCheck<T> {
|
public class ConstraintCheck<T> {
|
||||||
|
|
||||||
public static <T> ConstraintCheck<T> defaultFor(T toCheck,T defaultValue){
|
public static <T> ConstraintCheck<T> defaultFor(T toCheck,T defaultValue){
|
||||||
|
@ -57,8 +55,6 @@ public class ConstraintCheck<T> {
|
||||||
T result=theObject;
|
T result=theObject;
|
||||||
if(isError()) {
|
if(isError()) {
|
||||||
result=theDefault;
|
result=theDefault;
|
||||||
log.debug("Applying default {} for current value {}",theDefault,theObject);
|
|
||||||
|
|
||||||
if(theDefault!=null && theDefault instanceof Collection) {
|
if(theDefault!=null && theDefault instanceof Collection) {
|
||||||
Collection defaultCollection=(Collection) theDefault;
|
Collection defaultCollection=(Collection) theDefault;
|
||||||
ArrayList target=new ArrayList(defaultCollection);
|
ArrayList target=new ArrayList(defaultCollection);
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.profile;
|
||||||
|
|
||||||
|
public class DefaultCompiler {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.profile;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class Field {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.profile;
|
||||||
|
|
||||||
|
public class FieldMapping {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,12 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.model.profile;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import org.bson.Document;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class HandlerDeclaration {
|
|
||||||
|
|
||||||
private String id;
|
|
||||||
private String type;
|
|
||||||
private Document configuration;
|
|
||||||
}
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.profile;
|
||||||
|
|
||||||
|
public class IndexDefinition {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.profile;
|
||||||
|
|
||||||
|
public class IsoMapper {
|
||||||
|
|
||||||
|
private String className;
|
||||||
|
|
||||||
|
}
|
|
@ -1,46 +1,24 @@
|
||||||
package org.gcube.application.geoportal.common.model.profile;
|
package org.gcube.application.geoportal.common.model.profile;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.bson.Document;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.AccountingInfo;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ComparableVersion;
|
|
||||||
|
|
||||||
@Data
|
@Getter
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
public class Profile{
|
public class Profile{
|
||||||
|
|
||||||
private String id;
|
|
||||||
private ComparableVersion version;
|
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String description;
|
private String id;
|
||||||
private AccountingInfo creationInfo;
|
private List<Field> fields;
|
||||||
|
|
||||||
private Document schema;
|
private List<DefaultCompiler> defaultCompilers;
|
||||||
|
private List<Validator> validators;
|
||||||
private List<HandlerDeclaration> handlers;
|
private IsoMapper isoMapper;
|
||||||
|
private List<FieldMapping> centroidsMapping;
|
||||||
/**
|
private List<IndexDefinition> indexes;
|
||||||
* Returns map Type -> Handler Declaration
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Map<String,List<HandlerDeclaration>> getHandlersMap(){
|
|
||||||
HashMap<String,List<HandlerDeclaration>> toReturn=new HashMap<>();
|
|
||||||
handlers.forEach(h->{
|
|
||||||
if(!toReturn.containsKey(h.getType()))
|
|
||||||
toReturn.put(h.getType(),new ArrayList<>());
|
|
||||||
toReturn.get(h.getType()).add(h);
|
|
||||||
});
|
|
||||||
return toReturn;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.profile;
|
||||||
|
|
||||||
|
public class Validator {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.project;
|
||||||
|
|
||||||
|
public class Centroid {
|
||||||
|
|
||||||
|
private Double x;
|
||||||
|
private Double y;
|
||||||
|
private Double z;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.project;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportal.common.model.BasicJSONObject;
|
||||||
|
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Project {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project{
|
||||||
|
_id:
|
||||||
|
profile_id:
|
||||||
|
publication :{
|
||||||
|
creation_time:
|
||||||
|
creation_user:
|
||||||
|
last_update_time:
|
||||||
|
last_update_user:
|
||||||
|
version :
|
||||||
|
license :
|
||||||
|
policy :
|
||||||
|
status : VALID,
|
||||||
|
PUBLISHED,INVALID
|
||||||
|
document : {.....}
|
||||||
|
centroid : {
|
||||||
|
x:
|
||||||
|
y:
|
||||||
|
z:}
|
||||||
|
}
|
||||||
|
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String _id;
|
||||||
|
private String profile_id;
|
||||||
|
private Status status;
|
||||||
|
private Object document;
|
||||||
|
private Centroid centroid;
|
||||||
|
private PublicationDetails publication;
|
||||||
|
|
||||||
|
private String json;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.project;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PublicationDetails {
|
||||||
|
|
||||||
|
public static enum Policy{
|
||||||
|
OPEN,RESTRICTED,EMBARGOED;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalDateTime creation_time;
|
||||||
|
private String creation_user;
|
||||||
|
private LocalDateTime last_update_time;
|
||||||
|
private String last_update_user;
|
||||||
|
private String version;
|
||||||
|
private String license;
|
||||||
|
private String policy;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.project;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Status {
|
||||||
|
|
||||||
|
|
||||||
|
private StatusPhase phase;
|
||||||
|
private List<String> messages;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.project;
|
||||||
|
|
||||||
|
public enum StatusPhase {
|
||||||
|
|
||||||
|
DRAFT,
|
||||||
|
UNDER_VALIDATION,
|
||||||
|
INVALID,
|
||||||
|
VALID,
|
||||||
|
UNDER_PUBLICATION,
|
||||||
|
PUBLICATION_ERROR,
|
||||||
|
PUBLISHED
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
package org.gcube.application.geoportal.common.model.project;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ public class InterfaceConstants {
|
||||||
public static final String SECTIONS="sections";
|
public static final String SECTIONS="sections";
|
||||||
public static final String PROJECTS="projects";
|
public static final String PROJECTS="projects";
|
||||||
|
|
||||||
|
|
||||||
public static final String CONCESSIONI="concessioni";
|
public static final String CONCESSIONI="concessioni";
|
||||||
public static final String MONGO_CONCESSIONI="mongo-concessioni";
|
public static final String MONGO_CONCESSIONI="mongo-concessioni";
|
||||||
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.rest;
|
|
||||||
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.Configuration;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
|
||||||
|
|
||||||
import java.rmi.RemoteException;
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
public interface ProfiledDocumentsI<P extends ProfiledDocument> {
|
|
||||||
|
|
||||||
// CRUD
|
|
||||||
public P createNew(Document toCreate)throws RemoteException;
|
|
||||||
public void deleteById(String id) throws RemoteException;
|
|
||||||
public void deleteById(String id,Boolean force) throws RemoteException;
|
|
||||||
public P getById(String id) throws RemoteException;
|
|
||||||
|
|
||||||
// CONFIG
|
|
||||||
public Configuration getConfiguration() throws RemoteException;
|
|
||||||
|
|
||||||
// QUERY
|
|
||||||
public Iterator<P> query (QueryRequest request) throws RemoteException;
|
|
||||||
public String querForJSON(QueryRequest request)throws RemoteException;
|
|
||||||
|
|
||||||
//Execution
|
|
||||||
public P performStep(String id, String step, Document request);
|
|
||||||
}
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package org.gcube.application.geoportal.common.rest;
|
||||||
|
|
||||||
|
import org.gcube.application.geoportal.common.model.project.Project;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
public interface ProjectsI {
|
||||||
|
|
||||||
|
|
||||||
|
public Iterator<Project> getAll() throws Exception;
|
||||||
|
public Iterator<Project> getByProfile(String profileId) throws Exception;
|
||||||
|
public Project getById(String profileId,String id) throws Exception;
|
||||||
|
public Iterator<Project> getByFilter(String filter)throws Exception;
|
||||||
|
public Iterator<Project> getByFilter(String filter, String profileId)throws Exception;
|
||||||
|
public Project registrNew(String profileId, String jsonDocument)throws Exception;
|
||||||
|
public Project update(String profileId, String projectId,String jsonDocument) throws Exception;
|
||||||
|
public void deleteById(String profileId, String projectId)throws Exception;
|
||||||
|
public void deleteById(String profileId, String projectId, Boolean force)throws Exception;
|
||||||
|
}
|
|
@ -85,8 +85,6 @@ public class Files {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String fixFilename(String toFix) {
|
public static String fixFilename(String toFix) {
|
||||||
if(toFix.startsWith("\\."))
|
|
||||||
toFix=toFix.replaceFirst("\\.","_");
|
|
||||||
String extension="";
|
String extension="";
|
||||||
if(toFix.contains(".")) {
|
if(toFix.contains(".")) {
|
||||||
//preserve extension
|
//preserve extension
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.utils;
|
|
||||||
|
|
||||||
import com.jayway.jsonpath.Configuration;
|
|
||||||
import com.jayway.jsonpath.DocumentContext;
|
|
||||||
import com.jayway.jsonpath.JsonPath;
|
|
||||||
import com.jayway.jsonpath.Option;
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class JSONPathWrapper {
|
|
||||||
|
|
||||||
public static Configuration JSON_PATH_ALWAYS_LIST_CONFIG=null;
|
|
||||||
public static Configuration JSON_PATH_PATHS_CONFIGURATION=null;
|
|
||||||
|
|
||||||
static {
|
|
||||||
JSON_PATH_ALWAYS_LIST_CONFIG= Configuration.builder().options(Option.ALWAYS_RETURN_LIST,Option.SUPPRESS_EXCEPTIONS,Option.DEFAULT_PATH_LEAF_TO_NULL).build();
|
|
||||||
JSON_PATH_PATHS_CONFIGURATION = Configuration.builder().options(Option.AS_PATH_LIST,Option.SUPPRESS_EXCEPTIONS,Option.DEFAULT_PATH_LEAF_TO_NULL).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
DocumentContext ctx=null;
|
|
||||||
|
|
||||||
public JSONPathWrapper(String json) {
|
|
||||||
ctx=JsonPath.using(JSON_PATH_ALWAYS_LIST_CONFIG).parse(json);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Object> getByPath(String path){
|
|
||||||
throw new RuntimeException("TO IMPLEMENT");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
package org.gcube.application.geoportal.common.legacy;
|
|
||||||
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.AccessPolicy;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.RelazioneScavo;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.report.ConstraintCheck;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
|
|
||||||
public class DefaultsTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void checkConstraints(){
|
|
||||||
assertEquals(AccessPolicy.OPEN,ConstraintCheck.defaultFor(null,AccessPolicy.OPEN).evaluate());
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,ConstraintCheck.defaultFor(AccessPolicy.EMBARGOED,AccessPolicy.OPEN).evaluate());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void checkDefaults(){
|
|
||||||
|
|
||||||
Concessione c= new Concessione();
|
|
||||||
|
|
||||||
c.setDefaults();
|
|
||||||
c.validate();
|
|
||||||
System.out.println(c.getReport());
|
|
||||||
// Mandatory fields without defaults
|
|
||||||
assertEquals(ValidationReport.ValidationStatus.ERROR,c.getReport().getStatus());
|
|
||||||
|
|
||||||
c=new Concessione();
|
|
||||||
c.setRelazioneScavo(new RelazioneScavo());
|
|
||||||
c.getRelazioneScavo().setPolicy(AccessPolicy.EMBARGOED);
|
|
||||||
c.setPolicy(AccessPolicy.OPEN);
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
|
||||||
c.setDefaults();
|
|
||||||
assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -2,40 +2,36 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-service
|
# Changelog for org.gcube.application.geoportal-service
|
||||||
|
|
||||||
## [v1.0.8] 2021-09-20
|
|
||||||
- Logging
|
|
||||||
- Fixes [#22193](https://support.d4science.org/issues/22193)
|
|
||||||
- Fixes [#22280](https://support.d4science.org/issues/22280)
|
|
||||||
- Fixes [#20755](https://support.d4science.org/issues/20755)
|
|
||||||
- Profiled Documents
|
|
||||||
|
|
||||||
|
|
||||||
## [v1.0.6] 2021-09-20
|
## [v1.0.6] 2021-09-20
|
||||||
- Refactored repositories
|
Refactored repositories
|
||||||
- Fixes #22193
|
Fixes #22193
|
||||||
- Fixes #22217
|
Fixes #22217
|
||||||
|
|
||||||
## [v1.0.5-SNAPSHOT] 2021-07-23
|
## [v1.0.5-SNAPSHOT] 2021-07-23
|
||||||
- Upgrade to gcube-smartgears-bom 2.1.0
|
Upgrade to gcube-smartgears-bom 2.1.0
|
||||||
- Fix register postgis table layer
|
Fix register postgis table layer
|
||||||
- Added PostgisIndexRecordManager
|
Added PostgisIndexRecordManager
|
||||||
|
|
||||||
## [v1.0.4] 2020-11-11
|
## [v1.0.4] 2020-11-11
|
||||||
- Mongo integration with Concessione
|
Mongo integration with Concessione
|
||||||
- Project interface
|
Project interface
|
||||||
- TempFile management
|
TempFile management
|
||||||
- WorkspaceContent and publication for Concessioni-over-mongo
|
WorkspaceContent and publication for Concessioni-over-mongo
|
||||||
|
|
||||||
## [v1.0.3] 2020-11-11
|
## [v1.0.3] 2020-11-11
|
||||||
- Fixed HTTP method
|
Fixed HTTP method
|
||||||
|
|
||||||
## [v1.0.2] 2020-11-11
|
## [v1.0.2] 2020-11-11
|
||||||
- Delete method
|
Delete method
|
||||||
- Excluded upper bound release gCube 5
|
Excluded upper bound release gCube 5
|
||||||
|
|
||||||
|
|
||||||
## [v1.0.1] 2020-11-11
|
## [v1.0.1] 2020-11-11
|
||||||
- Project interface
|
|
||||||
|
Project interface
|
||||||
|
|
||||||
## [v1.0.0] 2020-11-11
|
## [v1.0.0] 2020-11-11
|
||||||
- First release
|
|
||||||
|
First release
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.gcube.application</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-service</artifactId>
|
<artifactId>geoportal-service</artifactId>
|
||||||
<version>1.0.8</version>
|
<version>1.0.6</version>
|
||||||
<name>Geoportal Service</name>
|
<name>Geoportal Service</name>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -83,15 +83,10 @@
|
||||||
|
|
||||||
<!-- INTERNAL LOGIC -->
|
<!-- INTERNAL LOGIC -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-common</artifactId>
|
<artifactId>geoportal-common</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>cms-plugin-framework</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- SDI -->
|
<!-- SDI -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -190,11 +185,6 @@
|
||||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.reflections</groupId>
|
|
||||||
<artifactId>reflections</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- STORAGE -->
|
<!-- STORAGE -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.contentmanagement</groupId>
|
<groupId>org.gcube.contentmanagement</groupId>
|
||||||
|
@ -213,12 +203,6 @@
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
|
||||||
<artifactId>concessioni-lifecycle</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
|
|
|
@ -3,9 +3,8 @@ package org.gcube.application.geoportal.service;
|
||||||
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
|
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
|
||||||
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
||||||
import org.gcube.application.geoportal.service.rest.ConcessioniOverMongo;
|
import org.gcube.application.geoportal.service.rest.ConcessioniOverMongo;
|
||||||
|
import org.gcube.application.geoportal.service.rest.Profiles;
|
||||||
|
import org.gcube.application.geoportal.service.rest.Projects;
|
||||||
import org.gcube.application.geoportal.service.rest.ProfiledDocuments;
|
|
||||||
import org.gcube.application.geoportal.service.rest.Sections;
|
import org.gcube.application.geoportal.service.rest.Sections;
|
||||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||||
import org.glassfish.jersey.server.ResourceConfig;
|
import org.glassfish.jersey.server.ResourceConfig;
|
||||||
|
@ -22,9 +21,9 @@ public class GeoPortalService extends ResourceConfig{
|
||||||
//Register interrfaces
|
//Register interrfaces
|
||||||
// registerClasses(Concessioni.class);
|
// registerClasses(Concessioni.class);
|
||||||
registerClasses(ConcessioniOverMongo.class);
|
registerClasses(ConcessioniOverMongo.class);
|
||||||
registerClasses(ProfiledDocuments.class);
|
registerClasses(Projects.class);
|
||||||
registerClasses(Sections.class);
|
registerClasses(Sections.class);
|
||||||
|
registerClasses(Profiles.class);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ package org.gcube.application.geoportal.service.engine;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.Synchronized;
|
import lombok.Synchronized;
|
||||||
import org.gcube.application.cms.plugins.Plugin;
|
|
||||||
import org.gcube.application.geoportal.service.engine.providers.*;
|
import org.gcube.application.geoportal.service.engine.providers.*;
|
||||||
|
|
||||||
public class ImplementationProvider {
|
public class ImplementationProvider {
|
||||||
|
@ -39,29 +38,25 @@ public class ImplementationProvider {
|
||||||
@Setter
|
@Setter
|
||||||
private ISProvider isProvider=new ISProvider();
|
private ISProvider isProvider=new ISProvider();
|
||||||
|
|
||||||
@Getter
|
// @Getter
|
||||||
@Setter
|
// @Setter
|
||||||
private ProfileMapCache profiles=new ProfileMapCache();
|
// private EMFProvider emfProvider=new ScopedEMFProvider();
|
||||||
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
private PluginManager pluginManager=new PluginManager();
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
private StorageHubProvider sHubProvider=new StorageHubProvider();
|
private StorageHubProvider sHubProvider=new StorageHubProvider();
|
||||||
|
|
||||||
// public void shutdown() {
|
public void shutdown() {
|
||||||
// // Stop JPA
|
// Stop JPA
|
||||||
//// AbstractRecordManager.shutdown();
|
// AbstractRecordManager.shutdown();
|
||||||
//
|
|
||||||
// mongoClientProvider.shutdown();
|
mongoClientProvider.shutdown();
|
||||||
// pluginManager.shutdown();
|
}
|
||||||
// }
|
|
||||||
//
|
public void startup() {
|
||||||
// public void startup() {
|
// AbstractRecordManager.setDefaultProvider(emfProvider);
|
||||||
//// AbstractRecordManager.setDefaultProvider(emfProvider);
|
|
||||||
// pluginManager.init();
|
mongoClientProvider.init();
|
||||||
// mongoClientProvider.init();
|
}
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
package org.gcube.application.geoportal.service.engine.handlers;
|
|
||||||
|
|
||||||
import com.google.protobuf.DescriptorProtos;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.gcube.application.cms.plugins.LifecycleManager;
|
|
||||||
import org.gcube.application.cms.plugins.faults.InitializationException;
|
|
||||||
import org.gcube.application.cms.plugins.faults.ShutDownException;
|
|
||||||
import org.gcube.application.cms.plugins.faults.StepException;
|
|
||||||
import org.gcube.application.cms.plugins.model.PluginDescriptor;
|
|
||||||
import org.gcube.application.cms.plugins.reports.ExecutionReport;
|
|
||||||
import org.gcube.application.cms.plugins.reports.InitializationReport;
|
|
||||||
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.ComparableVersion;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class SimpleLifeCycleManager implements LifecycleManager {
|
|
||||||
|
|
||||||
|
|
||||||
private static final PluginDescriptor DESCRIPTOR=new PluginDescriptor("SIMPLE-LIFECYCLE", "Simple Lifecycle manager");
|
|
||||||
static {
|
|
||||||
DESCRIPTOR.setDescription("Simple Lifecycle Management. This plugin supports a simple publication lifecycle.");
|
|
||||||
DESCRIPTOR.setVersion(new ComparableVersion("1.0.0"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InitializationReport initInContext() throws InitializationException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InitializationReport init() throws InitializationException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void shutdown() throws ShutDownException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ExecutionReport performStep(StepExecutionRequest request) throws StepException {
|
|
||||||
log.info("Received Request ");
|
|
||||||
|
|
||||||
switch(request.getStep()){
|
|
||||||
case StepExecutionRequest.Steps.ON_INIT_DOCUMENT:{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_MATERIALIZE_DOCUMENT:{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_DEMATERIALIZE_DOCUMENT:{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_DEINDEX_DOCUMENT:{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_INDEX_DOCUMENT:{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case StepExecutionRequest.Steps.ON_DELETE_DOCUMENT:{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default : throw new StepException("Invalid Step "+request.getStep());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
throw new StepException("Still to implement");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PluginDescriptor getDescriptor() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -67,7 +67,7 @@ public class SDIManager {
|
||||||
geoserverHostName=new URL(currentGeoserver.getUrl()).getHost();
|
geoserverHostName=new URL(currentGeoserver.getUrl()).getHost();
|
||||||
|
|
||||||
log.debug("Contacting Data Transfer from geoserver {} ",geoserverHostName);
|
log.debug("Contacting Data Transfer from geoserver {} ",geoserverHostName);
|
||||||
dtGeoServer=DataTransferClient.getInstanceByEndpoint("https://"+geoserverHostName);
|
dtGeoServer=DataTransferClient.getInstanceByEndpoint("http://"+geoserverHostName);
|
||||||
if(!currentGeoserver.getReader().existGeoserver())
|
if(!currentGeoserver.getReader().existGeoserver())
|
||||||
throw new Exception("Geoserver not reachable");
|
throw new Exception("Geoserver not reachable");
|
||||||
}catch(Exception e) {
|
}catch(Exception e) {
|
||||||
|
@ -222,7 +222,7 @@ public class SDIManager {
|
||||||
|
|
||||||
RESTLayer l=gsReader.getLayer(workspace, toSetLayerName);
|
RESTLayer l=gsReader.getLayer(workspace, toSetLayerName);
|
||||||
RESTFeatureType f= gsReader.getFeatureType(l);
|
RESTFeatureType f= gsReader.getFeatureType(l);
|
||||||
/*https://geoserver1.dev.d4science.org/geoserver/gna_conc_18/wms?
|
/*http://geoserver1.dev.d4science.org/geoserver/gna_conc_18/wms?
|
||||||
service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_18:pos&
|
service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_18:pos&
|
||||||
styles=&bbox=8.62091913167495,40.62975046683799,8.621178639172953,40.630257904721645&
|
styles=&bbox=8.62091913167495,40.62975046683799,8.621178639172953,40.630257904721645&
|
||||||
width=392&height=768&srs=EPSG:4326&format=application/openlayers */
|
width=392&height=768&srs=EPSG:4326&format=application/openlayers */
|
||||||
|
|
|
@ -24,7 +24,6 @@ import org.gcube.application.geoportal.service.engine.WorkspaceManager.FolderOpt
|
||||||
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
|
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.*;
|
import org.gcube.application.geoportal.service.model.internal.faults.*;
|
||||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||||
import org.gcube.application.geoportal.service.utils.UserUtils;
|
|
||||||
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
import org.gcube.data.transfer.library.faults.RemoteServiceException;
|
import org.gcube.data.transfer.library.faults.RemoteServiceException;
|
||||||
|
@ -34,7 +33,6 @@ import java.io.InputStream;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -50,7 +48,7 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
private static final String collectionName="legacyConcessioni";
|
private static final String collectionName="legacyConcessioni";
|
||||||
//private static final String DB_NAME="gna_dev";
|
private static final String DB_NAME="gna_dev";
|
||||||
|
|
||||||
|
|
||||||
private MongoDatabase db=null;
|
private MongoDatabase db=null;
|
||||||
|
@ -80,46 +78,34 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// *** PUBLIC METHODS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/****************************** PUBLIC METHODS ***********************/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Concessione registerNew(Concessione toRegister) throws IOException {
|
public Concessione registerNew(Concessione toRegister) throws IOException {
|
||||||
log.trace("Going to register {} ",toRegister);
|
log.trace("Registering {} ",toRegister);
|
||||||
toRegister=onUpdate(toRegister);
|
toRegister.setDefaults();
|
||||||
log.trace("Concessione with defaults is {}",toRegister);
|
|
||||||
ObjectId id=insert(asDocument(toRegister), collectionName);
|
ObjectId id=insert(asDocument(toRegister), collectionName);
|
||||||
|
|
||||||
log.trace("Obtained id {}",id);
|
|
||||||
Concessione toReturn=asConcessione(getById(id,collectionName));
|
Concessione toReturn=asConcessione(getById(id,collectionName));
|
||||||
toReturn.setMongo_id(asString(id));
|
toReturn.setMongo_id(asString(id));
|
||||||
|
|
||||||
|
return asConcessione(replace(asDocument(toReturn),collectionName));
|
||||||
toReturn = asConcessione(replace(asDocument(toReturn),collectionName));
|
|
||||||
log.debug("Registered {} ",toReturn);
|
|
||||||
return toReturn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Concessione replace(Concessione toRegister) throws IOException {
|
public Concessione replace(Concessione toRegister) throws IOException {
|
||||||
log.trace("Replacing {} ",toRegister);
|
log.trace("Replacing {} ",toRegister);
|
||||||
toRegister=onUpdate(toRegister);
|
toRegister.setDefaults();
|
||||||
return asConcessione(replace(asDocument(toRegister),collectionName));
|
return asConcessione(replace(asDocument(toRegister),collectionName));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* public Concessione update(String id,String json) throws IOException {
|
public Concessione update(String id,String json) throws IOException {
|
||||||
log.trace("Updating id {} with {} ",id,json);
|
log.trace("Updating id {} with {} ",id,json);
|
||||||
Concessione toReturn=asConcessione(update(asId(id),asDoc(json),collectionName));
|
Concessione toReturn=asConcessione(update(asId(id),asDoc(json),collectionName));
|
||||||
log.debug("Refreshing defaults..");
|
log.debug("Refreshing defaults..");
|
||||||
toReturn.setDefaults();
|
toReturn.setDefaults();
|
||||||
return asConcessione(replace(asDocument(toReturn),collectionName));
|
return asConcessione(replace(asDocument(toReturn),collectionName));
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
public Iterable<Concessione> list(){
|
public Iterable<Concessione> list(){
|
||||||
|
@ -185,7 +171,6 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
delete(asId(id), collectionName);
|
delete(asId(id), collectionName);
|
||||||
}catch(DeletionException e) {
|
}catch(DeletionException e) {
|
||||||
//storing updated - partially deleted
|
//storing updated - partially deleted
|
||||||
concessione=onUpdate(concessione);
|
|
||||||
replace(asDocument(concessione), collectionName);
|
replace(asDocument(concessione), collectionName);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
@ -203,17 +188,15 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
log.debug("Removed from centroids "+toReturn.getMongo_id());
|
log.debug("Removed from centroids "+toReturn.getMongo_id());
|
||||||
toReturn = unpublish(toReturn);
|
toReturn = unpublish(toReturn);
|
||||||
log.debug("Concessione after unpublishing is "+toReturn);
|
log.debug("Concessione after unpublishing is "+toReturn);
|
||||||
toReturn = onUpdate(toReturn);
|
|
||||||
|
|
||||||
return asConcessione(replace(asDocument(toReturn),collectionName));
|
return asConcessione(replace(asDocument(toReturn),collectionName));
|
||||||
}catch(Throwable t){
|
}catch(Throwable t){
|
||||||
throw new DeletionException("Unable to unpublish "+id,t);
|
throw new DeletionException("Unable to unpublish "+id,t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Concessione publish(String id) throws IOException{
|
public Concessione publish(String id) throws JsonProcessingException, IOException, InvalidStateException{
|
||||||
Concessione toReturn=asConcessione(getById(asId(id),collectionName));
|
Concessione toReturn=asConcessione(getById(asId(id),collectionName));
|
||||||
toReturn=onUpdate(toReturn);
|
toReturn.setDefaults();
|
||||||
toReturn.validate();
|
toReturn.validate();
|
||||||
|
|
||||||
// MATERIALIZE LAYERS
|
// MATERIALIZE LAYERS
|
||||||
|
@ -228,6 +211,35 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static Concessione removeContent(Concessione concessione) throws DeletionException {
|
||||||
|
if(concessione.getFolderId()==null) {
|
||||||
|
log.debug("No content for " + concessione.getMongo_id());
|
||||||
|
return concessione;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
log.debug("Removing content for " + concessione.getMongo_id());
|
||||||
|
WorkspaceManager manager = new WorkspaceManager();
|
||||||
|
manager.removeFolderById(concessione.getFolderId());
|
||||||
|
|
||||||
|
//Removing references from Object
|
||||||
|
concessione.setFolderId(null);
|
||||||
|
ArrayList<AssociatedContent> list = new ArrayList<>();
|
||||||
|
list.add(concessione.getPosizionamentoScavo());
|
||||||
|
list.addAll(concessione.getPianteFineScavo());
|
||||||
|
list.addAll(concessione.getImmaginiRappresentative());
|
||||||
|
list.addAll(concessione.getGenericContent());
|
||||||
|
for (AssociatedContent c : list) {
|
||||||
|
c.getActualContent().clear();
|
||||||
|
}
|
||||||
|
return concessione;
|
||||||
|
}catch(Throwable t){
|
||||||
|
throw new DeletionException("Unable to delete from WS ",t);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public Concessione unregisterFileset(String id, String toClearPath) throws Exception {
|
public Concessione unregisterFileset(String id, String toClearPath) throws Exception {
|
||||||
log.info("Clearing Fileset at {} for {} ",toClearPath,id);
|
log.info("Clearing Fileset at {} for {} ",toClearPath,id);
|
||||||
try {
|
try {
|
||||||
|
@ -246,7 +258,8 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
}
|
}
|
||||||
toClearContent.getActualContent().clear();
|
toClearContent.getActualContent().clear();
|
||||||
|
|
||||||
c=onUpdate(c);
|
log.debug("Updating dafults for {} ",c);
|
||||||
|
c.setDefaults();
|
||||||
return asConcessione(replace(asDocument(c),collectionName));
|
return asConcessione(replace(asDocument(c),collectionName));
|
||||||
|
|
||||||
}catch(Exception e) {
|
}catch(Exception e) {
|
||||||
|
@ -275,39 +288,14 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
AssociatedContent section=c.getContentByPath(destinationPath);
|
AssociatedContent section=c.getContentByPath(destinationPath);
|
||||||
log.debug("Found section {} for path {}",section,destinationPath);
|
log.debug("Found section {} for path {}",section,destinationPath);
|
||||||
store(section,files,ws,storage,baseFolder);
|
store(section,files,ws,storage,baseFolder);
|
||||||
|
log.debug("Updating dafults for {} ",c);
|
||||||
c=onUpdate(c);
|
c.setDefaults();
|
||||||
return asConcessione(replace(asDocument(c),collectionName));
|
return asConcessione(replace(asDocument(c),collectionName));
|
||||||
}catch(Exception e) {
|
}catch(Exception e) {
|
||||||
throw new Exception("Unable to save file.",e);
|
throw new Exception("Unable to save file.",e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************** STATIC ROUTINES *******************************/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Sets Accounting data and Defaults
|
|
||||||
*/
|
|
||||||
private static Concessione onUpdate(Concessione c){
|
|
||||||
log.debug("Updating Account data for {} ",c);
|
|
||||||
|
|
||||||
// SET ACCOUNTING
|
|
||||||
c.setLastUpdateTime(LocalDateTime.now());
|
|
||||||
try{
|
|
||||||
c.setLastUpdateUser(UserUtils.getCurrent().getUser().getId());
|
|
||||||
}catch(Throwable t){
|
|
||||||
log.warn("Unable to get User details ",t);
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("Updating defaults for {}",c);
|
|
||||||
// Set Defaults
|
|
||||||
c.setDefaults();
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static Concessione index(Concessione record) {
|
private static Concessione index(Concessione record) {
|
||||||
log.info("Indexing {} ",record.getId());
|
log.info("Indexing {} ",record.getId());
|
||||||
ValidationReport report= new ValidationReport("Index Report ");
|
ValidationReport report= new ValidationReport("Index Report ");
|
||||||
|
@ -412,8 +400,6 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
((LayerConcessione) c).setBbox(null);
|
((LayerConcessione) c).setBbox(null);
|
||||||
((LayerConcessione) c).setWmsLink(null);
|
((LayerConcessione) c).setWmsLink(null);
|
||||||
((LayerConcessione) c).setWorkspace(null);
|
((LayerConcessione) c).setWorkspace(null);
|
||||||
((LayerConcessione) c).setLayerName(null);
|
|
||||||
|
|
||||||
|
|
||||||
//Remove reference to removed content
|
//Remove reference to removed content
|
||||||
c.getActualContent().removeAll(toRemove);
|
c.getActualContent().removeAll(toRemove);
|
||||||
|
@ -481,31 +467,4 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
content.setMongo_id(asString(new ObjectId()));
|
content.setMongo_id(asString(new ObjectId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static Concessione removeContent(Concessione concessione) throws DeletionException {
|
|
||||||
if(concessione.getFolderId()==null) {
|
|
||||||
log.debug("No content for " + concessione.getMongo_id());
|
|
||||||
return concessione;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
log.debug("Removing content for " + concessione.getMongo_id());
|
|
||||||
WorkspaceManager manager = new WorkspaceManager();
|
|
||||||
manager.removeFolderById(concessione.getFolderId());
|
|
||||||
|
|
||||||
//Removing references from Object
|
|
||||||
concessione.setFolderId(null);
|
|
||||||
ArrayList<AssociatedContent> list = new ArrayList<>();
|
|
||||||
list.add(concessione.getPosizionamentoScavo());
|
|
||||||
list.addAll(concessione.getPianteFineScavo());
|
|
||||||
list.addAll(concessione.getImmaginiRappresentative());
|
|
||||||
list.addAll(concessione.getGenericContent());
|
|
||||||
for (AssociatedContent c : list) {
|
|
||||||
c.getActualContent().clear();
|
|
||||||
}
|
|
||||||
return concessione;
|
|
||||||
}catch(Throwable t){
|
|
||||||
throw new DeletionException("Unable to delete from WS ",t);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
package org.gcube.application.geoportal.service.engine.mongo;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.gcube.application.cms.plugins.faults.StepException;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public interface MongoManagerI<T> {
|
|
||||||
|
|
||||||
|
|
||||||
// create
|
|
||||||
|
|
||||||
public T registerNew(Document toRegister) throws IOException, StepException;
|
|
||||||
|
|
||||||
// update
|
|
||||||
public T update(String id,T toSet) throws IOException, StepException;
|
|
||||||
|
|
||||||
// delete
|
|
||||||
|
|
||||||
public void delete(String id,boolean force) throws DeletionException;
|
|
||||||
|
|
||||||
// get By ID
|
|
||||||
|
|
||||||
public T getByID(String id) throws IOException;
|
|
||||||
|
|
||||||
// query
|
|
||||||
|
|
||||||
public Iterable<Document> query(QueryRequest request);
|
|
||||||
public Iterable<T> filter(QueryRequest request);
|
|
||||||
|
|
||||||
// materialize
|
|
||||||
|
|
||||||
public T materialize(String id);
|
|
||||||
|
|
||||||
// dematerialize
|
|
||||||
|
|
||||||
public T dematerialize(String id);
|
|
||||||
// index
|
|
||||||
|
|
||||||
public T index(String id);
|
|
||||||
|
|
||||||
// deIndex
|
|
||||||
public T deIndex(String id);
|
|
||||||
|
|
||||||
public T performStep(String id, String step, Document options);
|
|
||||||
}
|
|
|
@ -1,256 +1,5 @@
|
||||||
package org.gcube.application.geoportal.service.engine.mongo;
|
package org.gcube.application.geoportal.service.engine.mongo;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
public class ProfiledMongoManager {
|
||||||
import com.mongodb.client.MongoDatabase;
|
|
||||||
import lombok.Synchronized;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.bson.types.ObjectId;
|
|
||||||
import org.gcube.application.cms.plugins.LifecycleManager;
|
|
||||||
import org.gcube.application.cms.plugins.faults.StepException;
|
|
||||||
import org.gcube.application.cms.plugins.model.PluginDescriptor;
|
|
||||||
import org.gcube.application.cms.plugins.reports.ExecutionReport;
|
|
||||||
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.*;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport;
|
|
||||||
import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
|
|
||||||
import org.gcube.application.geoportal.common.model.profile.Profile;
|
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
|
||||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
|
||||||
import org.gcube.application.geoportal.service.engine.providers.PluginManager;
|
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
|
|
||||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
|
||||||
import org.gcube.application.geoportal.service.utils.UserUtils;
|
|
||||||
|
|
||||||
import javax.ws.rs.WebApplicationException;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.security.InvalidParameterException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import static org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager.asConcessione;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class ProfiledMongoManager extends MongoManager implements MongoManagerI<ProfiledDocument>{
|
|
||||||
|
|
||||||
|
|
||||||
Profile profile;
|
|
||||||
MongoDatabase db=null;
|
|
||||||
|
|
||||||
LifecycleManager lfManager;
|
|
||||||
|
|
||||||
|
|
||||||
public ProfiledMongoManager(String profileId) throws ConfigurationException {
|
|
||||||
// Check Profile ID
|
|
||||||
log.info("Loading profile ID {} ",profileId);
|
|
||||||
if(profileId==null) throw new InvalidParameterException("Profile ID cannot be null");
|
|
||||||
Map<String,Profile> profiles=ImplementationProvider.get().getProfiles().getObject();
|
|
||||||
if(!profiles.containsKey(profileId)) {
|
|
||||||
log.debug("Asked profile {} not found. Available ones are {} ",profileId,profiles.keySet());
|
|
||||||
throw new WebApplicationException("Profile " + profileId + " not registered", Response.Status.NOT_FOUND);
|
|
||||||
}
|
|
||||||
profile=profiles.get(profileId);
|
|
||||||
log.debug("Loaded Profile {} ",profile);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Getting Lifecycle Manager declaration from Profile
|
|
||||||
List<HandlerDeclaration> handlerDeclarations= profile.getHandlersMap().get(PluginDescriptor.BaseTypes.LIFECYCLE_MANAGER);
|
|
||||||
if(handlerDeclarations==null || handlerDeclarations.isEmpty()) throw new ConfigurationException("No Lifecycle Handler defined for profile ID "+profileId);
|
|
||||||
if(handlerDeclarations.size()>1) throw new ConfigurationException("Too many Lifecycle Handlers defined ("+handlerDeclarations+") in profile ID "+profileId);
|
|
||||||
|
|
||||||
HandlerDeclaration lcHandlerDeclaration=handlerDeclarations.get(0);
|
|
||||||
|
|
||||||
// Loading Lifecycle Manager
|
|
||||||
log.debug("Looking for handler {} ",lcHandlerDeclaration);
|
|
||||||
try{
|
|
||||||
lfManager=(LifecycleManager) ImplementationProvider.get().getPluginManager().getObject().get(lcHandlerDeclaration.getId());
|
|
||||||
if(lfManager==null) throw new ConfigurationException("Unable to find Lifecycle Manager Plugin. ID "+lcHandlerDeclaration.getId());
|
|
||||||
}catch(ClassCastException e){
|
|
||||||
throw new ConfigurationException("Unable to use "+lcHandlerDeclaration.getId()+" as Lifecycle Manager");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Connect to DB
|
|
||||||
String toUseDB=super.client.getConnection().getDatabase();
|
|
||||||
log.info("Connecting to DB {} ",toUseDB);
|
|
||||||
|
|
||||||
// TODO MAP OF DATABASES?
|
|
||||||
db=client.getTheClient().getDatabase(toUseDB);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private ProfiledDocument onUpdate(ProfiledDocument updatedDocument) throws StepException {
|
|
||||||
|
|
||||||
UserUtils.AuthenticatedUser u = UserUtils.getCurrent();
|
|
||||||
updatedDocument.getInfo().setLastEditInfo(u.asInfo());
|
|
||||||
|
|
||||||
return step(updatedDocument,StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT).getResult();
|
|
||||||
}
|
|
||||||
|
|
||||||
private Document asDocument(ProfiledDocument d) throws JsonProcessingException {
|
|
||||||
return Document.parse(Serialization.write(d));
|
|
||||||
}
|
|
||||||
|
|
||||||
private ProfiledDocument asProfiledDocument(Document d) throws IOException {
|
|
||||||
return Serialization.read(d.toJson(),ProfiledDocument.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getCollectionName(){
|
|
||||||
// TODO Profile can directly specify, use ID only as default
|
|
||||||
|
|
||||||
return profile.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MongoDatabase getDatabase(){
|
|
||||||
return db;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument registerNew(Document toRegisterDoc) throws IOException, StepException {
|
|
||||||
log.info("Registering new document in {} ",profile.getId());
|
|
||||||
log.debug("Going to register {}",toRegisterDoc.toJson());
|
|
||||||
|
|
||||||
ProfiledDocument toRegister = new ProfiledDocument();
|
|
||||||
toRegister.setTheDocument(toRegisterDoc);
|
|
||||||
|
|
||||||
|
|
||||||
PublicationInfo pubInfo=new PublicationInfo();
|
|
||||||
pubInfo.setCreationInfo(UserUtils.getCurrent().asInfo());
|
|
||||||
|
|
||||||
// TODO Set Access From Profile
|
|
||||||
Access access=new Access();
|
|
||||||
access.setLicense("");
|
|
||||||
access.setPolicy(AccessPolicy.OPEN);
|
|
||||||
pubInfo.setAccess(access);
|
|
||||||
|
|
||||||
toRegister.setInfo(pubInfo);
|
|
||||||
|
|
||||||
toRegister.setProfileID(profile.getId());
|
|
||||||
toRegister.setProfileVersion(profile.getVersion());
|
|
||||||
toRegister.setVersion(new ComparableVersion("1.0.0"));
|
|
||||||
|
|
||||||
// Apply Lifecycle
|
|
||||||
|
|
||||||
toRegister=step(toRegister,StepExecutionRequest.Steps.ON_INIT_DOCUMENT).getResult();
|
|
||||||
|
|
||||||
log.debug("Going to register {} ",toRegister);
|
|
||||||
|
|
||||||
// Insert object
|
|
||||||
ObjectId id =insert(asDocument(toRegister),getCollectionName());
|
|
||||||
|
|
||||||
log.info("Obtained id {} ",id);
|
|
||||||
return getByID(id.toHexString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument update(String id, ProfiledDocument toSet) throws IOException, StepException {
|
|
||||||
log.trace("Replacing {} ",toSet);
|
|
||||||
toSet=onUpdate(toSet);
|
|
||||||
return asProfiledDocument(replace(asDocument(toSet),getCollectionName()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void delete(String id,boolean force) throws DeletionException {
|
|
||||||
log.debug("Deleting by ID {}, force {}",id,force);
|
|
||||||
try{
|
|
||||||
ProfiledDocument doc =getByID(id);
|
|
||||||
|
|
||||||
// TODO INVOKE LIFECYCLE
|
|
||||||
|
|
||||||
//if(!force&&isPublished(id)) throw new Exception("Cannot delete published documents. Unpublish it or use force = true");
|
|
||||||
|
|
||||||
try{
|
|
||||||
// TODO CHECK PHASE AND STATUS
|
|
||||||
// DEINDEX
|
|
||||||
// DEMATERIALIZE
|
|
||||||
// DELETE CONTENT
|
|
||||||
// DELETE ENTRY
|
|
||||||
throw new DeletionException("IMPLEMENT THIS");
|
|
||||||
// delete(asId(id), getCollectionName());
|
|
||||||
}catch(DeletionException e) {
|
|
||||||
//storing updated - partially deleted
|
|
||||||
// concessione=onUpdate(concessione);
|
|
||||||
// replace(asDocument(concessione), collectionName);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}catch(Throwable t){
|
|
||||||
throw new DeletionException("Unable to delete "+id,t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument getByID(String id) throws IOException {
|
|
||||||
return asProfiledDocument(super.getById(asId(id),getCollectionName()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<Document> query(QueryRequest queryRequest) {
|
|
||||||
log.info("Querying {} ",queryRequest);
|
|
||||||
LinkedBlockingQueue queue=new LinkedBlockingQueue<Concessione>();
|
|
||||||
query(queryRequest,getCollectionName()).forEach(
|
|
||||||
(Consumer<? super Document>) (Document d)->{try{
|
|
||||||
queue.put(d);
|
|
||||||
}catch(Throwable t){log.warn("Unable to translate "+d);}});
|
|
||||||
log.info("Returned {} elements ",queue.size());
|
|
||||||
return queue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<ProfiledDocument> filter(QueryRequest queryRequest) {
|
|
||||||
log.info("Searching concessione for filter {} ",queryRequest);
|
|
||||||
LinkedBlockingQueue queue=new LinkedBlockingQueue<Concessione>();
|
|
||||||
query(queryRequest,getCollectionName()).forEach(
|
|
||||||
(Consumer<? super Document>) (Document d)->{try{
|
|
||||||
queue.put(d);
|
|
||||||
}catch(Throwable t){log.warn("Unable to translate "+d);}});
|
|
||||||
log.info("Returned {} elements ",queue.size());
|
|
||||||
return queue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument materialize(String id) {
|
|
||||||
throw new RuntimeException("TO IMPLEMENT");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument dematerialize(String id) {
|
|
||||||
throw new RuntimeException("TO IMPLEMENT");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument index(String id) {
|
|
||||||
throw new RuntimeException("TO IMPLEMENT");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument deIndex(String id) {
|
|
||||||
throw new RuntimeException("TO IMPLEMENT");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProfiledDocument performStep(String id, String step, Document options) {
|
|
||||||
throw new RuntimeException("TO IMPLEMENT");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private ExecutionReport step(ProfiledDocument theDocument,String step) throws StepException {
|
|
||||||
log.info("[Profile {} ] Invoking Step {} on " ,profile.getId(),step,lfManager.getDescriptor());
|
|
||||||
StepExecutionRequest request=new StepExecutionRequest();
|
|
||||||
request.setDocument(theDocument);
|
|
||||||
request.setProfile(profile);
|
|
||||||
request.setStep(StepExecutionRequest.Steps.ON_INIT_DOCUMENT);
|
|
||||||
log.debug("Requesting Step Execution {} ",request);
|
|
||||||
return lfManager.performStep(request);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue