catalogue-util-library/target/classes/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogue.java

205 lines
5.9 KiB
Java

package org.gcube.datacatalogue.ckanutillibrary.server;
import java.util.List;
import java.util.Map;
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;
// TODO: Auto-generated Javadoc
/**
* The Interface DataCatalogue.
*
* @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy)
* Jun 1, 2020
*/
public interface DataCatalogue {
/**
* Finds the id associated to the chosen license.
*
* @param chosenLicense the chosen license
* @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.
*
* @param datasetIdOrName the dataset id or name
* @return The url of the dataset on success, null otherwise
*/
String getUnencryptedUrlFromDatasetIdOrName(String datasetIdOrName);
/**
* 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)
*
* @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
* @param customFields the custom fields
* @param resources the resources
* @param setPublic (manage visibility: Admin role is needed)
* @return the id of the dataset on success, null otherwise
* @throws Exception the exception
*/
String createCKanDatasetMultipleCustomFields(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>> customFields, List<ResourceBean> resources,
boolean setPublic) throws Exception;
/**
* 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);
/**
* Create a dataset with those information.
*
* @param nameOrId the name or id
* @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();
/**
* Retrieve ckan licenses.
*
* @return the licenses
*/
List<CkanLicense> getLicenses();
/**
* Retrieve the url of the uri resolver for this catalogue instance/scope.
*
* @return the uri resolver url
*/
String getUriResolverUrl();
/**
* Return the manage product property.
*
* @return the manage product property
*/
boolean isManageProductEnabled();
/**
* Return the catalogue portlet for this context(i.e. scope)
*
* @return the portlet url
*/
String getPortletUrl();
/**
* Return the ckan catalogue url in this scope.
*
* @return the catalogue url
*/
String getCatalogueUrl();
/**
* Returns the list of organizations to whom the user belongs (with any role).
*
* @param username the username
* @return a list of organizations
*/
List<CkanOrganization> getOrganizationsByUser(String username);
/**
* Returns the list of groups to whom the user belongs (with any role).
*
* @param username the username
* @return a list of groups
*/
List<CkanGroup> getGroupsByUser(String username);
/**
* Retrieve a ckan dataset given its id.
*
* @param datasetId the dataset id
* @param apiKey the api key
* @return the dataset
*/
CkanDataset getDataset(String datasetId, String apiKey);
/**
* 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);
}