catalogue-util-library/src/main/java/org/gcube/datacatalogue/utillibrary/server/DataCatalogue.java

514 lines
16 KiB
Java
Raw Normal View History

package org.gcube.datacatalogue.utillibrary.server;
2020-06-01 16:00:23 +02:00
import java.util.List;
import java.util.Map;
import org.gcube.datacatalogue.utillibrary.shared.LandingPages;
import org.gcube.datacatalogue.utillibrary.shared.ResourceBean;
import org.gcube.datacatalogue.utillibrary.shared.RolesCkanGroupOrOrg;
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset;
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanGroup;
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanLicense;
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanOrganization;
2024-02-12 16:12:08 +01:00
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanResource;
2020-06-01 17:12:28 +02:00
/**
* The Interface DataCatalogue.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
2021-03-02 14:40:38 +01:00
* Feb 12, 2021
2020-06-01 17:12:28 +02:00
*/
2020-06-01 16:00:23 +02:00
public interface DataCatalogue {
/**
2020-06-01 17:12:28 +02:00
* Finds the id associated to the chosen license.
*
* @param chosenLicense the chosen license
2020-06-01 16:00:23 +02:00
* @return the id on success, null otherwise
*/
String findLicenseIdByLicenseTitle(String chosenLicense);
/**
* Given the id or the name of the dataset it returns its current url by
* contacting the uri resolver. If no uri resolver is available, an url that is
* not guaranteed to be long term valid will be generated. Information are not
* encrypted.
2020-06-01 17:12:28 +02:00
*
* @param datasetIdOrName the dataset id or name
2020-06-01 16:00:23 +02:00
* @return The url of the dataset on success, null otherwise
*/
String getUnencryptedUrlFromDatasetIdOrName(String datasetIdOrName);
/**
* Create a dataset with those information.
2020-06-01 17:12:28 +02:00
*
* @param nameOrId the name or id
2020-06-01 16:00:23 +02:00
* @return the id of the dataset on success, null otherwise
*/
/**
* Checks if a product with such name already exists. Please remember that the
* name is unique.
*
* @param nameOrId the name or the id of the dataset to check
* @return
*/
boolean existProductWithNameOrId(String nameOrId);
/**
* Get the list of licenses' titles.
*
* @return the list of licenses' titles
*/
List<String> getLicenseTitles();
/**
2020-06-01 17:12:28 +02:00
* Retrieve ckan licenses.
*
* @return the licenses
2020-06-01 16:00:23 +02:00
*/
List<CkanLicense> getLicenses();
/**
2020-06-01 17:12:28 +02:00
* Retrieve the url of the uri resolver for this catalogue instance/scope.
*
* @return the uri resolver url
2020-06-01 16:00:23 +02:00
*/
String getUriResolverUrl();
/**
* Return the manage product property (used in the GRSF[-ADMIN] contexts).
2020-06-01 17:12:28 +02:00
*
2020-06-01 16:00:23 +02:00
* @return the manage product property
*/
boolean isManageProductEnabled();
/**
* Checks if is moderation enabled.
*
* @param reloadConfig the reload config from service
* @return true, if is moderation enabled
*/
boolean isModerationEnabled(boolean reloadConfig);
2020-06-01 16:00:23 +02:00
/**
* Return the catalogue portlet for this context(i.e. scope)
2020-06-01 17:12:28 +02:00
*
* @return the portlet url
2020-06-01 16:00:23 +02:00
*/
String getPortletUrl();
/**
* Return the ckan catalogue url in this scope.
*
* @return the catalogue url
*/
String getCatalogueUrl();
/**
2020-06-01 17:12:28 +02:00
* Returns the list of groups to whom the user belongs (with any role).
*
* @param username the username
2020-06-01 16:00:23 +02:00
* @return a list of groups
*/
List<CkanGroup> getGroupsByUser(String username);
/**
2020-06-01 17:12:28 +02:00
* Retrieve a ckan dataset given its id.
*
2021-02-17 12:09:02 +01:00
* @param datasetIdOrName the dataset id or name
2021-03-02 14:40:38 +01:00
* @param username the username
2020-06-01 17:12:28 +02:00
* @return the dataset
2020-06-01 16:00:23 +02:00
*/
2021-02-17 12:09:02 +01:00
CkanDataset getDataset(String datasetIdOrName, String username);
2020-06-01 16:00:23 +02:00
2020-06-01 17:12:28 +02:00
/**
* Gets the user role by group.
*
* @param username the username
* @return the user role by group
*/
Map<String, Map<CkanGroup, RolesCkanGroupOrOrg>> getUserRoleByGroup(String username);
2021-02-11 16:09:17 +01:00
2020-06-01 17:12:28 +02:00
/**
2021-02-11 16:09:17 +01:00
* The method returns the role the user has in the organizations he/she belongs
* to (it uses the db, so it is much faster).
2020-08-28 15:29:42 +02:00
*
* @param username the username
* @return the user role by organization
2020-06-01 17:12:28 +02:00
*/
Map<String, Map<CkanOrganization, RolesCkanGroupOrOrg>> getUserRoleByOrganization(String username);
2021-02-11 16:09:17 +01:00
2020-06-03 16:29:47 +02:00
/**
2020-08-28 15:29:42 +02:00
* Retrieve the list of organizations ids.
*
* @return the organizations ids
2020-06-03 16:29:47 +02:00
*/
List<String> getOrganizationsIds();
/**
2020-08-28 15:29:42 +02:00
* Retrieve the list of organizations names.
*
* @return the organizations names
2020-06-03 16:29:47 +02:00
*/
List<String> getOrganizationsNames();
/**
2020-08-28 15:29:42 +02:00
* Retrieve the organization with this name.
*
* @param name the name
* @return the organization by id or name
2020-06-03 16:29:47 +02:00
*/
2020-08-27 14:37:19 +02:00
CkanOrganization getOrganizationByIdOrName(String name);
2021-02-11 16:09:17 +01:00
2020-06-03 16:29:47 +02:00
/**
2020-08-28 15:29:42 +02:00
* Returns the list of organizations to whom the user belongs (with any role).
*
* @param username the username
2020-06-03 16:29:47 +02:00
* @return a list of organizations
*/
List<CkanOrganization> getOrganizationsByUser(String username);
2021-02-11 16:09:17 +01:00
2020-06-03 14:39:41 +02:00
/**
2021-02-11 16:09:17 +01:00
* Returns the list of organizations' names to whom the user belongs (with any
* role).
2020-08-28 15:29:42 +02:00
*
* @param username the username
2020-06-03 16:29:47 +02:00
* @return a list of organizations
*/
List<String> getOrganizationsNamesByUser(String username);
/**
* Returns a group given its name.
*
* @param nameOrId the name or id
* @return return a {@link CkanGroup} or null if no group with this name exists
*/
CkanGroup getGroupByName(String nameOrId);
2020-06-03 16:29:47 +02:00
/**
2021-02-11 16:09:17 +01:00
* Given the username and the organization name the method retrieves the role of
* the user (i.e. his/her 'capacity')
2020-08-28 15:29:42 +02:00
*
* @param username the username
2021-02-11 16:09:17 +01:00
* @param orgName the org name
2020-06-03 16:29:47 +02:00
* @return the capacity of the user into this organization or null
2020-06-03 14:39:41 +02:00
*/
2020-06-03 16:29:47 +02:00
String getRoleOfUserInOrganization(String username, String orgName);
2021-02-11 16:09:17 +01:00
/**
* Check if the user is valid by checking if its API_KEY is present into DB.
*
* @param username the username
* @return true, if successful
*/
boolean checkValidUser(String username);
2021-02-11 16:09:17 +01:00
2021-02-09 12:55:58 +01:00
/**
2021-02-11 16:09:17 +01:00
* Check if this role is present for this user in the organization. If he/she is
* not present we need to add it with the given role.
*
2021-03-02 14:40:38 +01:00
* @param username the username
* @param organizationName the organization name
* @param correspondentRoleToCheck the correspondent role to check
2021-02-09 12:55:58 +01:00
* @return true if the role can be set, false if it cannot
*/
2021-02-11 16:09:17 +01:00
boolean checkRoleIntoOrganization(String username, String organizationName,
RolesCkanGroupOrOrg correspondentRoleToCheck);
2021-02-09 12:55:58 +01:00
/**
2021-02-11 16:09:17 +01:00
* Check if this role is present for this user in the group. If he/she is not
* present we need to add it with the given role.
*
2021-03-02 14:40:38 +01:00
* @param username the username
* @param groupName the group name
* @param correspondentRoleToCheck the correspondent role to check
2021-02-09 12:55:58 +01:00
* @return true if the role can be set, false if it cannot
*/
boolean checkRoleIntoGroup(String username, String groupName, RolesCkanGroupOrOrg correspondentRoleToCheck);
2021-02-11 16:09:17 +01:00
2021-02-09 12:55:58 +01:00
/**
2021-02-11 16:09:17 +01:00
* Returns the main landing pages for this catalogue (i.e. type, orgs, groups
* and items pages)
2021-02-09 12:55:58 +01:00
*
* @return the landing pages
* @throws Exception the exception
*/
LandingPages getLandingPages() throws Exception;
2021-02-11 16:09:17 +01:00
/**
* Returns a Map with key 'capacity' and as value a list of users with that
* capacity into the group groupNameOrTitle.
*
* @param groupNameOrTitle the group name or title
* @return the roles and users group
2021-02-11 16:09:17 +01:00
*/
Map<RolesCkanGroupOrOrg, List<String>> getRolesAndUsersGroup(String groupNameOrTitle);
2020-06-03 16:29:47 +02:00
2021-02-11 16:09:17 +01:00
/**
* Get the parent groups of this group.
*
* @param groupName the group name
2021-03-02 14:40:38 +01:00
* @param apiKey the api key
2021-02-11 16:09:17 +01:00
* @return the group parent, if any
*/
List<CkanGroup> getParentGroups(String groupName, String apiKey);
2021-02-11 16:09:17 +01:00
/**
* Retrieve the organization with this name.
*
* @param name the name
* @return the organization by name
2021-02-11 16:09:17 +01:00
*/
CkanOrganization getOrganizationByName(String name);
2020-08-27 14:37:19 +02:00
/**
* Check if the users of the current context need to be alerted from a post
* creation or not. Default is false.
2020-06-03 16:29:47 +02:00
*
* @return a boolean value
*/
boolean isNotificationToUsersEnabled();
/**
* ***************************************************************************
2020-06-03 16:29:47 +02:00
*
*
* WRITE OPERATIONS
*
*
* ***************************************************************************.
*
2021-03-02 14:40:38 +01:00
* @param username the username
* @param title the title
* @param name the name
* @param organizationName the organization name
* @param author the author
* @param authorMail the author mail
* @param maintainer the maintainer
* @param maintainerMail the maintainer mail
* @param version the version
* @param description the description
* @param licenseId the license id
* @param tags the tags
* @param customFieldsMultiple the custom fields multiple
2021-03-02 14:40:38 +01:00
* @param resources the resources
* @param setPublic the set public
* @param setSearchable the set searchable
* @param socialPost the social post
* @return the string
* @throws Exception the exception
*/
/**
* Create a dataset with those information. The method allows to have multiple
* values for the same custom field key. NOTE: unfortunately java doesn't
* support overload in java interface methods (that's way I cannot use the same
* name for the method)
2020-06-03 16:29:47 +02:00
*
2021-02-11 16:09:17 +01:00
* @param username the username
* @param title the title
2020-06-03 14:39:41 +02:00
* @param name (unique identifier)
2021-02-11 16:09:17 +01:00
* @param organizationName the organization name
* @param author the author
* @param authorMail the author mail
* @param maintainer the maintainer
* @param maintainerMail the maintainer mail
* @param version the version
* @param description the description
* @param licenseId the license id
* @param tags the tags
2020-06-03 16:29:47 +02:00
* @param customFieldsMultiple the custom fields multiple
2021-02-11 16:09:17 +01:00
* @param resources the resources
* @param setPublic (manage visibility: Admin role is needed)
* @param setSearchable set the item as searchable or not
* @param socialPost send the social post or not
2020-06-03 14:39:41 +02:00
* @return the id of the dataset on success, null otherwise
* @throws Exception the exception
*/
2021-02-11 16:09:17 +01:00
String createCkanDatasetMultipleCustomFields(String username, String title, String name, String organizationName,
2020-06-03 16:29:47 +02:00
String author, String authorMail, String maintainer, String maintainerMail, long version,
String description, String licenseId, List<String> tags, Map<String, List<String>> customFieldsMultiple,
2021-02-11 16:09:17 +01:00
List<ResourceBean> resources, boolean setPublic, boolean setSearchable, boolean socialPost)
throws Exception;
2024-02-08 15:00:19 +01:00
/**
* Update ckan dataset multiple custom fields.
*
2024-02-19 15:59:28 +01:00
* @param username the username
* @param title the title
* @param name the name
* @param organizationName the organization name
* @param author the author
* @param authorMail the author mail
* @param maintainer the maintainer
* @param maintainerMail the maintainer mail
* @param version the version
* @param description the description
* @param licenseId the license id
* @param tags the tags
2024-02-08 15:00:19 +01:00
* @param customFieldsMultiple the custom fields multiple
2024-02-19 15:59:28 +01:00
* @param resources the resources
* @param setPublic the set public
* @param setSearchable the set searchable
* @param socialPost the social post
2024-02-08 15:00:19 +01:00
* @return the string
* @throws Exception the exception
*/
String updateCkanDatasetMultipleCustomFields(String username, String title, String name, String organizationName,
String author, String authorMail, String maintainer, String maintainerMail, long version,
String description, String licenseId, List<String> tags, Map<String, List<String>> customFieldsMultiple,
List<ResourceBean> resources, boolean setPublic, boolean setSearchable, boolean socialPost)
throws Exception;
2020-06-03 14:39:41 +02:00
/**
* Add a resource described by the bean to the dataset id into
* resource.datasetId
*
2021-03-02 14:40:38 +01:00
* @param resourceBean the resource bean
* @param organizationName the organization name
2021-03-02 14:40:38 +01:00
* @param username the username
2020-06-03 14:39:41 +02:00
* @return String the id of the resource on success, null otherwise
* @throws Exception the exception
2020-06-03 14:39:41 +02:00
*/
String addResourceToDataset(ResourceBean resourceBean, String organizationName, String username) throws Exception;
2024-02-19 15:59:28 +01:00
2024-02-12 16:12:08 +01:00
/**
* Adds the resource.
*
2024-02-19 15:59:28 +01:00
* @param resourceBean the resource bean
* @param datasetId the dataset id
2024-02-12 16:12:08 +01:00
* @param organizationName the organization name
2024-02-19 15:59:28 +01:00
* @param username the username
2024-02-12 16:12:08 +01:00
* @return the ckan resource
* @throws Exception the exception
*/
2024-02-19 15:59:28 +01:00
CkanResource addResource(ResourceBean resourceBean, String datasetId, String organizationName, String username)
throws Exception;
2020-06-03 14:39:41 +02:00
/**
2020-08-28 12:07:54 +02:00
* Remove the resource with id resourceId from dataset in which it is.
2020-06-03 14:39:41 +02:00
*
* @param resourceId the resource id
* @param username the username
2020-06-03 14:39:41 +02:00
* @return true on success, false otherwise.
2020-08-28 12:07:54 +02:00
* @throws Exception the exception
2020-06-03 14:39:41 +02:00
*/
boolean deleteResourceFromDataset(String resourceId, String username) throws Exception;
2020-06-03 14:39:41 +02:00
2020-08-27 17:25:56 +02:00
/**
* Create a CkanGroup.
2020-08-28 15:29:42 +02:00
*
2021-02-11 16:09:17 +01:00
* @param nameOrId a unique id for the group
* @param title a title for the group
2020-08-27 17:25:56 +02:00
* @param description a description for the group
* @return the created CkanGroup on success, null otherwise
2020-08-28 15:29:42 +02:00
* @throws Exception the exception
2020-08-27 17:25:56 +02:00
*/
CkanGroup createGroup(String nameOrId, String title, String description) throws Exception;
2020-06-03 16:29:47 +02:00
2020-08-28 15:29:42 +02:00
/**
* Sets the searchable field for dataset.
*
2021-02-11 16:09:17 +01:00
* @param datasetId the dataset id
2020-08-28 15:29:42 +02:00
* @param searchable the searchable
* @return true, if successful
* @throws Exception the exception
*/
boolean setSearchableFieldForDataset(String datasetId, boolean searchable) throws Exception;
/**
* Patch the fields for dataset passed.
2020-08-28 15:29:42 +02:00
*
* @param datasetId the dataset id
* @param mapFields the map fields
* @return true, if successful
* @throws Exception the exception
*/
boolean patchFieldsForDataset(String datasetId, Map<String, String> mapFields) throws Exception;
2021-02-11 16:09:17 +01:00
/**
* Assign dataset to group.
*
* @param groupNameOrId the group name or id
* @param datasetNameOrId the dataset name or id
* @return true, if successful
*/
boolean assignDatasetToGroup(String groupNameOrId, String datasetNameOrId);
2021-03-02 14:40:38 +01:00
2021-02-17 12:09:02 +01:00
/**
2021-03-02 14:40:38 +01:00
* Patch a product with product id productId by using the couples in
* customFieldsToChange. NOTE: only the specified custom fields will be changed.
* If a custom field with a given key already exists, and removeOld is set to
* false, the new values are added at the end of the list. Otherwise they are
* lost.
2021-02-17 12:09:02 +01:00
*
2021-03-02 14:40:38 +01:00
* @param productId the product id
* @param username the username
2021-02-17 12:09:02 +01:00
* @param customFieldsToChange the custom fields to change
2021-03-02 14:40:38 +01:00
* @param removeOld the remove old
2021-02-17 12:09:02 +01:00
* @return true, if successful
*/
boolean patchProductCustomFields(String productId, String username, Map<String, List<String>> customFieldsToChange,
boolean removeOld);
2020-06-03 16:29:47 +02:00
/**
* Refresh dataset.
*
* @param datasetName the dataset name
* @return the string
* @throws Exception the exception
*/
String refreshDataset(String datasetName) throws Exception;
2024-02-19 15:59:28 +01:00
/**
* Delete dataset.
*
* @param datasetName the dataset name
* @return true, if successful
* @throws Exception the exception
*/
boolean deleteDataset(String datasetName) throws Exception;
2021-03-02 14:40:38 +01:00
/**
* Patch a product with product id productId by using the couples in
* customFieldsToChange. NOTE: only the specified custom fields will be changed.
* If a custom field with a given key already exists, and removeOld is set to
* false, the new values are added at the end of the list. Otherwise they are
* lost.
*
* @param username the username
* @param sourceOrganization the source organization
* @param currentRole the current role
2021-03-02 14:40:38 +01:00
* @return true, if successful
*/
// boolean patchProductCustomFields(String productId, Map<String, List<String>> customFieldsToChange,
// boolean removeOld);
/**
* ********************************************************************************
*
*
* MANAGEMENT OPERATIONS
*
*
* ********************************************************************************.
*
2021-03-02 14:40:38 +01:00
* @param username the username
* @param sourceOrganization the source organization
2021-03-02 14:40:38 +01:00
* @param currentRole the current role
*/
/**
* Check if the user identified by username has to be registered in other
* organizations with some role.
*
* @param username
* @param sourceOrganization
* @param currentRole
*/
void assignRolesOtherOrganization(String username, String sourceOrganization, RolesCkanGroupOrOrg currentRole);
2020-06-01 16:00:23 +02:00
}