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 tags, Map> customFields, List 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> 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 getLicenseTitles(); /** * Retrieve ckan licenses. * * @return the licenses */ List 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 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 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> 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> getUserRoleByOrganization(String username); }