Added method update item [#26640]

This commit is contained in:
Francesco Mangiacrapa 2024-02-08 15:00:19 +01:00
parent b17fb3765a
commit c4629e78be
8 changed files with 128 additions and 28 deletions

View File

@ -4,6 +4,12 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v1.4.0-SNAPSHOT] - 2024-02-08
**Enhancements**
- Added method update item [#26640]
## [v1.3.0] - 2023-02-06
**Enhancements**

View File

@ -6,13 +6,13 @@
<parent>
<artifactId>maven-parent</artifactId>
<groupId>org.gcube.tools</groupId>
<version>1.1.0</version>
<version>1.2.0</version>
<relativePath />
</parent>
<groupId>org.gcube.datacatalogue</groupId>
<artifactId>catalogue-util-library</artifactId>
<version>1.3.0</version>
<version>1.4.0-SNAPSHOT</version>
<name>Ckan utility library</name>
<description>
Utility library to retrieve users information, organizations information and so on from the ckan d4science datacatalogue

View File

@ -331,6 +331,36 @@ public interface DataCatalogue {
String description, String licenseId, List<String> tags, Map<String, List<String>> customFieldsMultiple,
List<ResourceBean> resources, boolean setPublic, boolean setSearchable, boolean socialPost)
throws Exception;
/**
* Update ckan dataset multiple custom fields.
*
* @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
* @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
*/
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;
/**
* Add a resource described by the bean to the dataset id into

View File

@ -866,7 +866,7 @@ public class DataCatalogueImpl implements DataCatalogue {
// in order to avoid errors, the username is always converted
String ckanUsername = CatalogueUtilMethods.fromUsernameToCKanUsername(username);
LOG.debug("username: "+username + " converted to ckanUsername: "+ckanUsername);
LOG.debug("username: " + username + " converted to ckanUsername: " + ckanUsername);
// check in the hashmap first
if (apiKeysMap.containsKey(ckanUsername)) {
@ -1305,7 +1305,7 @@ public class DataCatalogueImpl implements DataCatalogue {
if (jsonValueDataset != null) {
CkanDataset toCkanDataset = MarshUnmarshCkanObject.toCkanDataset(jsonValueDataset, METHOD.TO_READ);
LOG.info("Dataset with name " + toCkanDataset.getName() + " has been created correctly");
LOG.info("Dataset with name " + toCkanDataset.getName() + " has been correctly created");
return toCkanDataset.getId();
}
} catch (Exception e) {
@ -1320,6 +1320,57 @@ public class DataCatalogueImpl implements DataCatalogue {
return null;
}
@Override
public 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 {
LOG.info("Called updateCkanDatasetMultipleCustomFields");
// checks (minimum)
checkNotNull(username);
// checkNotNull(organizationNameOrId);
// checkArgument(!organizationNameOrId.isEmpty());
checkArgument(!(title == null && name == null || title.isEmpty() && name.isEmpty()),
"Name and Title cannot be empty/null at the same time!");
GcubeContext gcubeContext = null;
try {
gcubeContext = GCubeUtils.detectAndSetTheOrgNameContext(organizationName, username, true);
String toPassOrganizationToGcat = null; // Not needed to pass this information to gCat, never.
// String ckanUsername = getUserFromApiKey(apiKey).getName();
LOG.debug("The visibility parameter passed is (isPublic): " + setPublic);
CkanDataset dataset = CKANConveter.toCkanDataset(ckanCaller, username, title, name,
toPassOrganizationToGcat, author, authorMail, maintainer, maintainerMail, version, description,
licenseId, tags, null, customFieldsMultiple, resources, setPublic, setSearchable);
LOG.debug("The isPriv property into dataset is: " + dataset.isPriv());
// trying to create by gCat
String jsonValueDataset = MarshUnmarshCkanObject.toJsonValueDataset(dataset, METHOD.TO_CREATE);
LOG.info("Serialized dataset to update is: " + jsonValueDataset);
jsonValueDataset = gCatCaller.updateDataset(name, jsonValueDataset);
LOG.debug("Updated dataset is: " + jsonValueDataset);
if (jsonValueDataset != null) {
CkanDataset toCkanDataset = MarshUnmarshCkanObject.toCkanDataset(jsonValueDataset, METHOD.TO_READ);
LOG.info("Dataset with name " + toCkanDataset.getName() + " has been correctly updated");
return toCkanDataset.getId();
}
} catch (Exception e) {
LOG.error("Error on updating the dataset: ", e);
throw e;
} finally {
if (gcubeContext != null)
GCubeUtils.revertToSourceContext(gcubeContext);
}
return null;
}
/**
* Refresh dataset.
*

View File

@ -68,8 +68,10 @@ public class CKANConveter {
String ckanUsername = CatalogueUtilMethods.fromUsernameToCKanUsername(username);
String nameToUse = name;
if(nameToUse == null)
//Applying normalize function if and only if the paramenter 'name' is null
if(nameToUse == null) {
nameToUse = CatalogueUtilMethods.fromProductTitleToName(title);
}
LOG.debug("Name of the dataset is going to be " + nameToUse + ". Title is going to be " + title);

View File

@ -27,9 +27,16 @@ public class ContextTest {
protected static Properties properties;
protected static final String PROPERTIES_FILENAME = "token.properties";
public static final String ROOT = "/gcube";
public static final String VO = ROOT + "/devsec";
public static final String VRE = VO + "/devVRE";
// public static final String ROOT = "/gcube";
// public static final String VO = ROOT + "/devsec";
// public static final String VRE = VO + "/devVRE";
public static final String ROOT = "/d4science.research-infrastructures.eu";
public static final String VO = ROOT + "/D4OS";
public static final String VRE = VO + "/Blue-Cloud2026Project";
public static final String scope = VRE;
static {
properties = new Properties();

View File

@ -14,8 +14,6 @@ import org.gcube.datacatalogue.utillibrary.server.cms.CatalogueContentModeratorS
import org.gcube.datacatalogue.utillibrary.shared.ItemStatus;
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset;
import org.gcube.gcat.client.Item;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.LoggerFactory;
/**

View File

@ -7,7 +7,6 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.datacatalogue.utillibrary.ckan.MarshUnmarshCkanObject;
import org.gcube.datacatalogue.utillibrary.ckan.MarshUnmarshCkanObject.METHOD;
@ -28,12 +27,12 @@ import org.slf4j.LoggerFactory;
*
* @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy) Jun 1, 2020
*/
public class TestDataCatalogueLib {
public class TestDataCatalogueLib extends ContextTest{
private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(TestDataCatalogueLib.class);
private DataCatalogueFactory factory;
private String scope = "/gcube/devsec/devVRE";
//private String scope = "/gcube/devsec/devVRE";
// private String scope = "/gcube";
// private String scope = "/pred4s/preprod/preVRE";
// private String scope =
@ -42,7 +41,7 @@ public class TestDataCatalogueLib {
// "/d4science.research-infrastructures.eu/gCubeApps/BiodiversityLab";
// private String testUser = "costantino_perciante";
private String testUser = "francesco.mangiacrapa";
private String authorizationToken = "";
//private String authorizationToken = "";
String subjectId = "aa_father4";
String objectId = "bb_son4";
String productName = "adatasetcreatedbycatalogue-util-library-873805063";
@ -52,7 +51,7 @@ public class TestDataCatalogueLib {
*
* @throws Exception the exception
*/
// @Before
@Before
public void before() throws Exception {
factory = DataCatalogueFactory.getFactory();
}
@ -124,10 +123,17 @@ public class TestDataCatalogueLib {
*/
//@Test
public void getDataset() throws Exception {
String datasetname = "blue-cloud_2026_-_a_federated_european_fair_and_open_research_ecosystem_for_oceans_seas_coastal_and";
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String username = testUser;
CkanDataset dataset = instance.getDataset("my_first_restful_transaction_model_private", username);
CkanDataset dataset = instance.getDataset(datasetname, username);
LOG.debug("Got dataset: " + dataset.getName() + ", with id: " + dataset.getId());
LOG.debug("Got getAuthor: " + dataset.getAuthor());
LOG.debug("Got getAuthorEmail: " + dataset.getAuthorEmail());
LOG.debug("Got getMantainer: " + dataset.getMaintainer());
LOG.debug("Got getMaintainerEmail: " + dataset.getMaintainerEmail());
}
/**
@ -236,8 +242,8 @@ public class TestDataCatalogueLib {
try {
ScopeProvider.instance.set(scope);
SecurityTokenProvider.instance.set(authorizationToken);
// ScopeProvider.instance.set(scope);
// SecurityTokenProvider.instance.set(authorizationToken);
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String licenseId = instance.getLicenses().get(0).getId();
@ -282,8 +288,8 @@ public class TestDataCatalogueLib {
// @Test
public void createGroup() throws Exception {
ScopeProvider.instance.set(scope);
SecurityTokenProvider.instance.set(authorizationToken);
// ScopeProvider.instance.set(scope);
// SecurityTokenProvider.instance.set(authorizationToken);
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
int random = new Random().nextInt();
@ -296,8 +302,8 @@ public class TestDataCatalogueLib {
// @Test
public void addResource() throws Exception {
ScopeProvider.instance.set(scope);
SecurityTokenProvider.instance.set(authorizationToken);
// ScopeProvider.instance.set(scope);
// SecurityTokenProvider.instance.set(authorizationToken);
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
CkanDataset dataset = instance.getDataset(productName, testUser);
@ -312,8 +318,8 @@ public class TestDataCatalogueLib {
// @Test
public void deleteResource() throws Exception {
ScopeProvider.instance.set(scope);
SecurityTokenProvider.instance.set(authorizationToken);
// ScopeProvider.instance.set(scope);
// SecurityTokenProvider.instance.set(authorizationToken);
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String resourceId = "ce7295cf-47db-4faf-901f-4fec2d3fae7a";
@ -325,8 +331,8 @@ public class TestDataCatalogueLib {
// @Test
public void patchFieldsForDataset() throws Exception {
ScopeProvider.instance.set(scope);
SecurityTokenProvider.instance.set(authorizationToken);
// ScopeProvider.instance.set(scope);
// SecurityTokenProvider.instance.set(authorizationToken);
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
Map<String, String> customFieldsToChange = new HashMap<String, String>();
@ -337,8 +343,8 @@ public class TestDataCatalogueLib {
// @Test
public void getUrlProduct() throws Exception {
ScopeProvider.instance.set(scope);
SecurityTokenProvider.instance.set(authorizationToken);
// ScopeProvider.instance.set(scope);
// SecurityTokenProvider.instance.set(authorizationToken);
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String datasetName = productName;