Implemented the PATCH method, see [#24985]

This commit is contained in:
Francesco Mangiacrapa 2023-04-18 10:35:23 +02:00
parent 4e93560cd1
commit c47b361a0c
26 changed files with 1627 additions and 1127 deletions

View File

@ -1,5 +1,9 @@
# Changelog for org.gcube.application.geoportal-service
## [v1.1.0-SNAPSHOT]
- Implemented the PATCH method, see [#24985]
## [v1.0.14]
- Just integrating the new facilities, see [#24791]

View File

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.gcube.application</groupId>
<artifactId>geoportal-service</artifactId>
<version>1.0.14</version>
<version>1.1.0-SNAPSHOT</version>
<name>Geoportal Service</name>
<packaging>war</packaging>

View File

@ -1,7 +1,10 @@
package org.gcube.application.geoportal.service;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import lombok.extern.slf4j.Slf4j;
import java.util.Collections;
import java.util.Map;
import javax.ws.rs.ApplicationPath;
import org.gcube.application.cms.caches.Engine;
import org.gcube.application.cms.implementations.ImplementationProvider;
import org.gcube.application.cms.implementations.ProjectAccess;
@ -9,20 +12,23 @@ import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.application.geoportal.service.engine.mongo.UCDManagerI;
import org.gcube.application.geoportal.service.engine.providers.*;
import org.gcube.application.geoportal.service.engine.providers.ConfigurationCache;
import org.gcube.application.geoportal.service.engine.providers.MongoClientProvider;
import org.gcube.application.geoportal.service.engine.providers.PluginManager;
import org.gcube.application.geoportal.service.engine.providers.ProjectAccessProvider;
import org.gcube.application.geoportal.service.engine.providers.StorageClientProvider;
import org.gcube.application.geoportal.service.engine.providers.ucd.ProfileMap;
import org.gcube.application.geoportal.service.engine.providers.ucd.SingleISResourceUCDProvider;
import org.gcube.application.geoportal.service.engine.providers.ucd.UCDManager;
import org.gcube.application.geoportal.service.model.internal.db.Mongo;
import org.gcube.application.geoportal.service.rest.DocsGenerator;
import org.gcube.application.geoportal.service.rest.Plugins;
import org.gcube.application.geoportal.service.rest.ProfiledDocuments;
import org.gcube.application.geoportal.service.rest.UseCaseDescriptors;
import org.glassfish.jersey.server.ResourceConfig;
import javax.ws.rs.ApplicationPath;
import java.util.Collections;
import java.util.Map;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import lombok.extern.slf4j.Slf4j;
@ApplicationPath(InterfaceConstants.APPLICATION_PATH)
@Slf4j

View File

@ -1,6 +1,14 @@
package org.gcube.application.geoportal.service;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.ext.Provider;
import org.gcube.common.authorization.library.provider.AccessTokenProvider;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.authorization.utils.manager.SecretManager;
@ -9,9 +17,7 @@ import org.gcube.common.authorization.utils.secret.GCubeSecret;
import org.gcube.common.authorization.utils.secret.JWTSecret;
import org.gcube.common.authorization.utils.secret.Secret;
import javax.ws.rs.container.*;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
import lombok.extern.slf4j.Slf4j;
@Provider
@PreMatching

View File

@ -1,12 +1,10 @@
package org.gcube.application.geoportal.service.engine.mongo;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.FindOneAndReplaceOptions;
import com.mongodb.client.model.FindOneAndUpdateOptions;
import com.mongodb.client.model.ReturnDocument;
import lombok.extern.slf4j.Slf4j;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Sorts.ascending;
import static com.mongodb.client.model.Sorts.descending;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.gcube.application.cms.implementations.ImplementationProvider;
@ -14,9 +12,12 @@ import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.service.model.internal.db.Mongo;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Sorts.ascending;
import static com.mongodb.client.model.Sorts.descending;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.FindOneAndReplaceOptions;
import com.mongodb.client.model.ReturnDocument;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class MongoManager {

View File

@ -1,8 +1,15 @@
package org.gcube.application.geoportal.service.engine.mongo;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.io.IOException;
import org.bson.Document;
import org.gcube.application.cms.implementations.faults.*;
import org.gcube.application.cms.implementations.faults.DeletionException;
import org.gcube.application.cms.implementations.faults.InvalidLockException;
import org.gcube.application.cms.implementations.faults.InvalidUserRoleException;
import org.gcube.application.cms.implementations.faults.ProjectLockedException;
import org.gcube.application.cms.implementations.faults.ProjectNotFoundException;
import org.gcube.application.cms.implementations.faults.RegistrationException;
import org.gcube.application.cms.implementations.faults.UnauthorizedAccess;
import org.gcube.application.cms.plugins.faults.EventException;
import org.gcube.application.cms.plugins.faults.InsufficientPrivileges;
import org.gcube.application.cms.plugins.faults.StepException;
@ -14,44 +21,280 @@ import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonProcessingException;
/**
* The Interface MongoManagerI.
*
* @author Fabio Sinibaldi
* @author maintainer: Francesco Mangiacrapa at ISTI-CNR
* francesco.mangiacrapa@isti.cnr.it
*
* Apr 18, 2023
* @param <T> the generic type
*/
public interface MongoManagerI<T> {
// create
// create
/**
* Register new.
*
* @param toRegister the to register
* @return the t
* @throws IOException Signals that an I/O exception has occurred.
* @throws StepException the step exception
* @throws EventException the event exception
* @throws InvalidUserRoleException the invalid user role exception
*/
public T registerNew(Document toRegister)
throws IOException, StepException, EventException, InvalidUserRoleException;
public T registerNew(Document toRegister) throws IOException, StepException, EventException, InvalidUserRoleException;
/**
* Update.
*
* @param id the id
* @param toSetDocument the to set document
* @return the t
* @throws IOException Signals that an I/O exception has occurred.
* @throws StepException the step exception
* @throws EventException the event exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws InvalidLockException the invalid lock exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws UnauthorizedAccess the unauthorized access
*/
// update
public T update(String id, Document toSetDocument)
throws IOException, StepException, EventException, ProjectLockedException, ProjectNotFoundException,
InvalidLockException, InvalidUserRoleException, UnauthorizedAccess;
// update
public T update(String id,Document toSetDocument) throws IOException, StepException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess;
/**
* Patch.
*
* @param id the id
* @param toSet the to set
* @return the t
* @throws IOException Signals that an I/O exception has occurred.
* @throws EventException the event exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws InvalidLockException the invalid lock exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws UnauthorizedAccess the unauthorized access
*/
// patch
public T patch(String id, Document toSet) throws IOException, EventException, ProjectLockedException,
ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess;
public T setRelation(String id,String relation, String targetUCD, String targetId) throws IOException, StepException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess, RegistrationException, ConfigurationException;
public T deleteRelation(String id,String relation, String targetUCD, String targetId) throws IOException, StepException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess, RegistrationException, ConfigurationException;
/**
* Sets the relation.
*
* @param id the id
* @param relation the relation
* @param targetUCD the target UCD
* @param targetId the target id
* @return the t
* @throws IOException Signals that an I/O exception has occurred.
* @throws StepException the step exception
* @throws EventException the event exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws InvalidLockException the invalid lock exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws UnauthorizedAccess the unauthorized access
* @throws RegistrationException the registration exception
* @throws ConfigurationException the configuration exception
*/
public T setRelation(String id, String relation, String targetUCD, String targetId) throws IOException,
StepException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException,
InvalidUserRoleException, UnauthorizedAccess, RegistrationException, ConfigurationException;
/**
* Delete relation.
*
* @param id the id
* @param relation the relation
* @param targetUCD the target UCD
* @param targetId the target id
* @return the t
* @throws IOException Signals that an I/O exception has occurred.
* @throws StepException the step exception
* @throws EventException the event exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws InvalidLockException the invalid lock exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws UnauthorizedAccess the unauthorized access
* @throws RegistrationException the registration exception
* @throws ConfigurationException the configuration exception
*/
public T deleteRelation(String id, String relation, String targetUCD, String targetId) throws IOException,
StepException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException,
InvalidUserRoleException, UnauthorizedAccess, RegistrationException, ConfigurationException;
// delete
// delete
/**
* Delete.
*
* @param id the id
* @param force the force
* @throws DeletionException the deletion exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws UnauthorizedAccess the unauthorized access
* @throws JsonProcessingException the json processing exception
* @throws InvalidLockException the invalid lock exception
*/
public void delete(String id, boolean force)
throws DeletionException, InvalidUserRoleException, ProjectLockedException, ProjectNotFoundException,
UnauthorizedAccess, JsonProcessingException, InvalidLockException;
public void delete(String id,boolean force) throws DeletionException, InvalidUserRoleException, ProjectLockedException, ProjectNotFoundException, UnauthorizedAccess, JsonProcessingException, InvalidLockException;
// get By ID
// get By ID
/**
* Gets the by ID.
*
* @param id the id
* @return the by ID
* @throws IOException Signals that an I/O exception has occurred.
* @throws ProjectNotFoundException the project not found exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws UnauthorizedAccess the unauthorized access
*/
public T getByID(String id)
throws IOException, ProjectNotFoundException, InvalidUserRoleException, UnauthorizedAccess;
public T getByID(String id) throws IOException, ProjectNotFoundException, InvalidUserRoleException, UnauthorizedAccess;
// query
// query
/**
* Query.
*
* @param request the request
* @return the iterable
* @throws InvalidUserRoleException the invalid user role exception
*/
public Iterable<Document> query(QueryRequest request) throws InvalidUserRoleException;
public Iterable<Document> query(QueryRequest request) throws InvalidUserRoleException;
public Iterable<T> filter(QueryRequest request) throws InvalidUserRoleException;
/**
* Filter.
*
* @param request the request
* @return the iterable
* @throws InvalidUserRoleException the invalid user role exception
*/
public Iterable<T> filter(QueryRequest request) throws InvalidUserRoleException;
public T performStep(String id, String step, Document options) throws IOException, StepException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess, ConfigurationException, InsufficientPrivileges;
/**
* Perform step.
*
* @param id the id
* @param step the step
* @param options the options
* @return the t
* @throws IOException Signals that an I/O exception has occurred.
* @throws StepException the step exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws InvalidLockException the invalid lock exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws UnauthorizedAccess the unauthorized access
* @throws ConfigurationException the configuration exception
* @throws InsufficientPrivileges the insufficient privileges
*/
public T performStep(String id, String step, Document options)
throws IOException, StepException, ProjectLockedException, ProjectNotFoundException, InvalidLockException,
InvalidUserRoleException, UnauthorizedAccess, ConfigurationException, InsufficientPrivileges;
public T registerFileSet(String id, RegisterFileSetRequest request) throws ConfigurationException, StorageHubException, StorageException, StepException, JsonProcessingException, DeletionException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess;
public T deleteFileSet(String id, String destination, Boolean force) throws ConfigurationException, StorageHubException, StorageException, StepException, JsonProcessingException, DeletionException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess;
/**
* Register file set.
*
* @param id the id
* @param request the request
* @return the t
* @throws ConfigurationException the configuration exception
* @throws StorageHubException the storage hub exception
* @throws StorageException the storage exception
* @throws StepException the step exception
* @throws JsonProcessingException the json processing exception
* @throws DeletionException the deletion exception
* @throws EventException the event exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws InvalidLockException the invalid lock exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws UnauthorizedAccess the unauthorized access
*/
public T registerFileSet(String id, RegisterFileSetRequest request)
throws ConfigurationException, StorageHubException, StorageException, StepException,
JsonProcessingException, DeletionException, EventException, ProjectLockedException,
ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess;
public T forceUnlock(String id) throws InvalidUserRoleException, ProjectNotFoundException, UnauthorizedAccess, JsonProcessingException, InvalidLockException;
public T setAccessPolicy(String id, Access access) throws InvalidUserRoleException, ProjectLockedException, ProjectNotFoundException, UnauthorizedAccess, JsonProcessingException, InvalidLockException, EventException;
/**
* Delete file set.
*
* @param id the id
* @param destination the destination
* @param force the force
* @return the t
* @throws ConfigurationException the configuration exception
* @throws StorageHubException the storage hub exception
* @throws StorageException the storage exception
* @throws StepException the step exception
* @throws JsonProcessingException the json processing exception
* @throws DeletionException the deletion exception
* @throws EventException the event exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws InvalidLockException the invalid lock exception
* @throws InvalidUserRoleException the invalid user role exception
* @throws UnauthorizedAccess the unauthorized access
*/
public T deleteFileSet(String id, String destination, Boolean force)
throws ConfigurationException, StorageHubException, StorageException, StepException,
JsonProcessingException, DeletionException, EventException, ProjectLockedException,
ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess;
/**
* Force unlock.
*
* @param id the id
* @return the t
* @throws InvalidUserRoleException the invalid user role exception
* @throws ProjectNotFoundException the project not found exception
* @throws UnauthorizedAccess the unauthorized access
* @throws JsonProcessingException the json processing exception
* @throws InvalidLockException the invalid lock exception
*/
public T forceUnlock(String id) throws InvalidUserRoleException, ProjectNotFoundException, UnauthorizedAccess,
JsonProcessingException, InvalidLockException;
/**
* Sets the access policy.
*
* @param id the id
* @param access the access
* @return the t
* @throws InvalidUserRoleException the invalid user role exception
* @throws ProjectLockedException the project locked exception
* @throws ProjectNotFoundException the project not found exception
* @throws UnauthorizedAccess the unauthorized access
* @throws JsonProcessingException the json processing exception
* @throws InvalidLockException the invalid lock exception
* @throws EventException the event exception
*/
public T setAccessPolicy(String id, Access access) throws InvalidUserRoleException, ProjectLockedException,
ProjectNotFoundException, UnauthorizedAccess, JsonProcessingException, InvalidLockException, EventException;
/**
* Gets the configuration.
*
* @return the configuration
* @throws ConfigurationException the configuration exception
*/
public Configuration getConfiguration() throws ConfigurationException;
public Configuration getConfiguration()throws ConfigurationException;
}

View File

@ -1,9 +1,9 @@
package org.gcube.application.geoportal.service.engine.mongo;
import org.gcube.application.cms.implementations.faults.RegistrationException;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.cms.implementations.faults.RegistrationException;
public interface UCDManagerI {

View File

@ -1,24 +1,26 @@
package org.gcube.application.geoportal.service.engine.mongo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.mongodb.client.FindIterable;
import com.mongodb.client.model.FindOneAndReplaceOptions;
import com.mongodb.client.model.ReturnDocument;
import lombok.extern.slf4j.Slf4j;
import java.util.NoSuchElementException;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
import javax.ws.rs.WebApplicationException;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.gcube.application.cms.implementations.faults.RegistrationException;
import org.gcube.application.cms.implementations.utils.UserUtils;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.utils.ContextUtils;
import org.gcube.application.cms.implementations.faults.RegistrationException;
import javax.ws.rs.WebApplicationException;
import java.util.NoSuchElementException;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.mongodb.client.FindIterable;
import com.mongodb.client.model.FindOneAndReplaceOptions;
import com.mongodb.client.model.ReturnDocument;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UCDMongoManager extends MongoManager implements UCDManagerI{

View File

@ -1,7 +1,9 @@
package org.gcube.application.geoportal.service.engine.providers;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAmount;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.caches.TimedMap;
import org.gcube.application.cms.implementations.utils.UserUtils;
@ -9,10 +11,8 @@ import org.gcube.application.geoportal.common.model.configuration.Configuration;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAmount;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ConfigurationCache extends AbstractScopedMap<ConfigurationCache.ConfigurationMap> {

View File

@ -1,6 +1,8 @@
package org.gcube.application.geoportal.service.engine.providers;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Map;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.implementations.ISInterface;
import org.gcube.application.cms.implementations.ImplementationProvider;
@ -10,8 +12,7 @@ import org.gcube.application.geoportal.service.ServiceConstants;
import org.gcube.application.geoportal.service.model.internal.db.Mongo;
import org.gcube.common.resources.gcore.ServiceEndpoint;
import java.util.List;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MongoClientProvider extends AbstractScopedMap<Mongo> {

View File

@ -1,16 +1,21 @@
package org.gcube.application.geoportal.service.engine.providers;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.plugins.*;
import org.gcube.application.cms.plugins.InitializablePlugin;
import org.gcube.application.cms.plugins.LifecycleManager;
import org.gcube.application.cms.plugins.Plugin;
import org.gcube.application.cms.plugins.PluginManagerInterface;
import org.gcube.application.cms.plugins.PluginsReflections;
import org.gcube.application.cms.plugins.faults.InitializationException;
import org.gcube.application.cms.plugins.faults.PluginExecutionException;
import org.gcube.application.cms.plugins.faults.ShutDownException;
import org.gcube.application.cms.plugins.reports.InitializationReport;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import java.util.HashMap;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class PluginManager extends AbstractScopedMap<PluginManager.PluginMap> implements PluginManagerInterface {

View File

@ -1,6 +1,8 @@
package org.gcube.application.geoportal.service.engine.providers;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import org.gcube.application.cms.implementations.ProjectAccess;
import org.gcube.application.cms.implementations.faults.InvalidUserRoleException;
@ -14,8 +16,7 @@ import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager;
import java.util.ArrayList;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ProjectAccessImpl implements ProjectAccess {

View File

@ -1,10 +1,11 @@
package org.gcube.application.geoportal.service.engine.providers;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class StorageClientProvider extends AbstractScopedMap<StorageUtils> {

View File

@ -1,16 +1,18 @@
package org.gcube.application.geoportal.service.engine.providers.ucd;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.utils.Files;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LocalFolderProfileMapCache extends AbstractScopedMap<ProfileMap> {

View File

@ -1,9 +1,10 @@
package org.gcube.application.geoportal.service.engine.providers.ucd;
import lombok.AllArgsConstructor;
import java.util.HashMap;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import java.util.HashMap;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class ProfileMap extends HashMap<String, UseCaseDescriptor> {

View File

@ -1,7 +1,27 @@
package org.gcube.application.geoportal.service.engine.providers.ucd;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.caches.ObjectManager;
import org.gcube.application.cms.implementations.ISInterface;
@ -14,22 +34,14 @@ import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDes
import org.gcube.common.resources.gcore.GenericResource;
import org.gcube.common.storagehub.client.dsl.FolderContainer;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.*;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
/**
* Retrieves available UCDs from a single Generic Resource

View File

@ -1,23 +1,7 @@
package org.gcube.application.geoportal.service.engine.providers.ucd;
import com.mongodb.MongoServerException;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.caches.Engine;
import org.gcube.application.cms.caches.ObjectManager;
import org.gcube.application.cms.implementations.ImplementationProvider;
import org.gcube.application.cms.implementations.utils.UserUtils;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.utils.ContextUtils;
import org.gcube.application.geoportal.service.engine.mongo.UCDManagerI;
import org.gcube.application.geoportal.service.engine.mongo.UCDMongoManager;
import org.gcube.application.cms.implementations.faults.RegistrationException;
import static java.lang.Thread.sleep;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
@ -25,7 +9,25 @@ import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import static java.lang.Thread.sleep;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.caches.Engine;
import org.gcube.application.cms.caches.ObjectManager;
import org.gcube.application.cms.implementations.ImplementationProvider;
import org.gcube.application.cms.implementations.faults.RegistrationException;
import org.gcube.application.cms.implementations.utils.UserUtils;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.service.engine.mongo.UCDManagerI;
import org.gcube.application.geoportal.service.engine.mongo.UCDMongoManager;
import com.mongodb.MongoServerException;
import lombok.extern.slf4j.Slf4j;
/**
* Provider of UCDManagerI (this)

View File

@ -1,11 +1,11 @@
package org.gcube.application.geoportal.service.model.internal.db;
import java.util.ArrayList;
import org.gcube.application.geoportal.service.model.internal.db.PostgisTable.Field;
import org.gcube.application.geoportal.service.model.internal.db.PostgisTable.FieldType;
import org.gcube.application.geoportal.service.model.internal.db.PostgisTable.GeometryType;
import java.util.ArrayList;
public class DBConstants {
public static enum TYPE{

View File

@ -1,13 +1,15 @@
package org.gcube.application.geoportal.service.model.internal.db;
import org.gcube.application.geoportal.common.model.configuration.MongoConnection;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.geoportal.common.model.configuration.MongoConnection;
@Slf4j
@ToString

View File

@ -1,10 +1,5 @@
package org.gcube.application.geoportal.service.model.internal.db;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.geoportal.common.model.legacy.BBOX;
import org.gcube.application.cms.implementations.faults.DataParsingException;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DecimalFormat;
@ -16,6 +11,17 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.gcube.application.cms.implementations.faults.DataParsingException;
import org.gcube.application.geoportal.common.model.legacy.BBOX;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RequiredArgsConstructor
@Getter

View File

@ -1,6 +1,8 @@
package org.gcube.application.geoportal.service.rest;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
@ -8,9 +10,8 @@ import javax.ws.rs.Path;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import lombok.extern.slf4j.Slf4j;
@Path("docs")
@Slf4j

View File

@ -1,18 +1,20 @@
package org.gcube.application.geoportal.service.rest;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.plugins.faults.InsufficientPrivileges;
import org.gcube.application.cms.plugins.faults.UnrecognizedStepException;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response.Status;
import org.gcube.application.cms.implementations.faults.InvalidLockException;
import org.gcube.application.cms.implementations.faults.InvalidUserRoleException;
import org.gcube.application.cms.implementations.faults.ProjectLockedException;
import org.gcube.application.cms.implementations.faults.ProjectNotFoundException;
import org.gcube.application.cms.plugins.faults.InsufficientPrivileges;
import org.gcube.application.cms.plugins.faults.UnrecognizedStepException;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response.Status;
import java.util.ArrayList;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class GuardedMethod<T> {

View File

@ -1,21 +1,28 @@
package org.gcube.application.geoportal.service.rest;
import com.webcohesion.enunciate.metadata.rs.RequestHeader;
import com.webcohesion.enunciate.metadata.rs.RequestHeaders;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.gcube.application.cms.implementations.ImplementationProvider;
import org.gcube.application.cms.plugins.Plugin;
import org.gcube.application.geoportal.common.model.plugins.PluginDescriptor;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.service.engine.providers.PluginManager;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.webcohesion.enunciate.metadata.rs.RequestHeader;
import com.webcohesion.enunciate.metadata.rs.RequestHeaders;
import lombok.extern.slf4j.Slf4j;
@Path(InterfaceConstants.Methods.PLUGINS)
@Slf4j

View File

@ -1,16 +1,24 @@
package org.gcube.application.geoportal.service.rest;
import com.webcohesion.enunciate.metadata.rs.RequestHeader;
import com.webcohesion.enunciate.metadata.rs.RequestHeaders;
import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import org.bson.Document;
import org.gcube.application.cms.implementations.ImplementationProvider;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.configuration.Configuration;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.access.Access;
import org.gcube.application.geoportal.common.model.document.relationships.Relationship;
import org.gcube.application.geoportal.common.model.document.relationships.RelationshipNavigationObject;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
@ -19,11 +27,12 @@ import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager;
import org.gcube.application.geoportal.service.engine.providers.ConfigurationCache;
import org.gcube.application.geoportal.service.engine.providers.ProjectAccessImpl;
import org.gcube.application.geoportal.service.http.PATCH;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;
import com.webcohesion.enunciate.metadata.rs.RequestHeader;
import com.webcohesion.enunciate.metadata.rs.RequestHeaders;
import lombok.extern.slf4j.Slf4j;
@Path(InterfaceConstants.Methods.PROJECTS+"/{"+InterfaceConstants.Parameters.UCID +"}")
@Slf4j
@ -88,6 +97,20 @@ public class ProfiledDocuments {
}
}.execute().getResult();
}
@PATCH
@Path("{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Project patch(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String documentId, Document d) {
return new GuardedMethod<Project>() {
@Override
protected Project run() throws Exception, WebApplicationException {
log.info("Patching Project ({}, ID {})",manager.getUseCaseDescriptor().getId(),documentId);
return manager.patch(documentId,d);
}
}.execute().getResult();
}
@DELETE

View File

@ -1,17 +1,29 @@
package org.gcube.application.geoportal.service.rest;
import com.webcohesion.enunciate.metadata.rs.RequestHeader;
import com.webcohesion.enunciate.metadata.rs.RequestHeaders;
import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.gcube.application.cms.implementations.ImplementationProvider;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.service.engine.mongo.UCDManagerI;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.webcohesion.enunciate.metadata.rs.RequestHeader;
import com.webcohesion.enunciate.metadata.rs.RequestHeaders;
import lombok.extern.slf4j.Slf4j;
@Path(InterfaceConstants.Methods.UCD)
@Slf4j