2020-06-01 16:00:23 +02:00
|
|
|
package org.gcube.datacatalogue.ckanutillibrary.server;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
2020-06-03 16:29:47 +02:00
|
|
|
import org.gcube.datacatalogue.ckanutillibrary.shared.LandingPages;
|
2020-06-01 16:00:23 +02:00
|
|
|
import org.gcube.datacatalogue.ckanutillibrary.shared.ResourceBean;
|
|
|
|
import org.gcube.datacatalogue.ckanutillibrary.shared.RolesCkanGroupOrOrg;
|
|
|
|
|
|
|
|
import eu.trentorise.opendata.jackan.model.CkanDataset;
|
|
|
|
import eu.trentorise.opendata.jackan.model.CkanGroup;
|
|
|
|
import eu.trentorise.opendata.jackan.model.CkanLicense;
|
|
|
|
import eu.trentorise.opendata.jackan.model.CkanOrganization;
|
|
|
|
|
2020-06-01 17:12:28 +02:00
|
|
|
// TODO: Auto-generated Javadoc
|
|
|
|
/**
|
|
|
|
* The Interface DataCatalogue.
|
|
|
|
*
|
|
|
|
* @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy)
|
|
|
|
* Jun 1, 2020
|
|
|
|
*/
|
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();
|
|
|
|
|
|
|
|
/**
|
2020-06-01 17:12:28 +02:00
|
|
|
* Return the manage product property.
|
|
|
|
*
|
2020-06-01 16:00:23 +02:00
|
|
|
* @return the manage product property
|
|
|
|
*/
|
|
|
|
boolean isManageProductEnabled();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
* @param datasetId the dataset id
|
|
|
|
* @param apiKey the api key
|
|
|
|
* @return the dataset
|
2020-06-01 16:00:23 +02:00
|
|
|
*/
|
|
|
|
CkanDataset getDataset(String datasetId, String apiKey);
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The method returns the role the user has in the organizations he/she belongs to (it uses the db, so it is much faster)
|
|
|
|
* @param username
|
|
|
|
* @param apiKey
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
Map<String, Map<CkanOrganization, RolesCkanGroupOrOrg>> getUserRoleByOrganization(String username);
|
2020-06-03 14:39:41 +02:00
|
|
|
|
|
|
|
|
2020-06-03 16:29:47 +02:00
|
|
|
/**
|
|
|
|
* Retrieve the list of organizations ids
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
List<String> getOrganizationsIds();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve the list of organizations names
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
List<String> getOrganizationsNames();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve the organization with this name
|
|
|
|
*/
|
2020-08-27 14:37:19 +02:00
|
|
|
CkanOrganization getOrganizationByIdOrName(String name);
|
2020-06-03 14:39:41 +02:00
|
|
|
|
2020-06-03 16:29:47 +02:00
|
|
|
/**
|
|
|
|
* Returns the list of organizations to whom the user belongs (with any role)
|
|
|
|
* @param username
|
|
|
|
* @return a list of organizations
|
|
|
|
*/
|
|
|
|
List<CkanOrganization> getOrganizationsByUser(String username);
|
2020-06-03 14:39:41 +02:00
|
|
|
|
|
|
|
/**
|
2020-06-03 16:29:47 +02:00
|
|
|
* Returns the list of organizations' names to whom the user belongs (with any role)
|
|
|
|
* @param username
|
|
|
|
* @return a list of organizations
|
|
|
|
*/
|
|
|
|
List<String> getOrganizationsNamesByUser(String username);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Given the username and the organization name the method retrieves the role of the user (i.e. his/her 'capacity')
|
|
|
|
* @param username
|
|
|
|
* @param orgName
|
|
|
|
* @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);
|
|
|
|
|
|
|
|
|
2020-08-27 14:37:19 +02:00
|
|
|
/**
|
|
|
|
* **************************************************************************
|
2020-06-03 16:29:47 +02:00
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* WRITE OPERATIONS
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
2020-08-27 14:37:19 +02:00
|
|
|
* **************************************************************************.
|
|
|
|
*
|
|
|
|
* @param username the username
|
|
|
|
* @param title the title
|
|
|
|
* @param name the name
|
|
|
|
* @param organizationNameOrId the organization name or id
|
|
|
|
* @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
|
|
|
|
* @param resources the resources
|
|
|
|
* @param setPublic the set public
|
|
|
|
* @param setSearchable the set searchable
|
|
|
|
* @param authorizationToken the authorization token
|
|
|
|
* @return the string
|
|
|
|
* @throws Exception the exception
|
|
|
|
*/
|
2020-06-03 14:39:41 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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
|
|
|
*
|
|
|
|
* @param username the username
|
2020-06-03 14:39:41 +02:00
|
|
|
* @param title the title
|
|
|
|
* @param name (unique identifier)
|
|
|
|
* @param organizationNameOrId the organization name or id
|
|
|
|
* @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
|
2020-06-03 14:39:41 +02:00
|
|
|
* @param resources the resources
|
2020-06-03 16:29:47 +02:00
|
|
|
* @param setPublic (manage visibility: Admin role is needed)
|
|
|
|
* @param setSearchable set the item as searchable or not
|
2020-06-03 14:39:41 +02:00
|
|
|
* @return the id of the dataset on success, null otherwise
|
|
|
|
* @throws Exception the exception
|
|
|
|
*/
|
2020-06-03 16:29:47 +02:00
|
|
|
String createCKanDatasetMultipleCustomFields(String username, String title, String name, String organizationNameOrId,
|
|
|
|
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) throws Exception;
|
2020-06-03 14:39:41 +02: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 productId the product id
|
|
|
|
* @param customFieldsToChange the custom fields to change
|
|
|
|
* @param removeOld the remove old
|
|
|
|
* @return true, if successful
|
|
|
|
*/
|
|
|
|
boolean patchProductCustomFields(String productId, Map<String, List<String>> customFieldsToChange,
|
|
|
|
boolean removeOld);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add a resource described by the bean to the dataset id into
|
|
|
|
* resource.datasetId
|
|
|
|
*
|
|
|
|
* @param resource the resource
|
|
|
|
* @return String the id of the resource on success, null otherwise
|
|
|
|
* @throws Exception the exception
|
|
|
|
*/
|
|
|
|
String addResourceToDataset(ResourceBean resource) throws Exception;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Remove the resource with id resourceId from the dataset in which it is.
|
|
|
|
*
|
|
|
|
* @param resourceId the resource id
|
|
|
|
* @return true on success, false otherwise.
|
|
|
|
*/
|
|
|
|
boolean deleteResourceFromDataset(String resourceId);
|
|
|
|
|
2020-06-03 16:29:47 +02:00
|
|
|
/**
|
|
|
|
* Returns the main landing pages for this catalogue (i.e. type, orgs, groups and items pages)
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
LandingPages getLandingPages() throws Exception;
|
|
|
|
|
|
|
|
|
2020-06-01 16:00:23 +02:00
|
|
|
}
|