Merge pull request 'edit_facility_26115' (!6) from edit_facility_26115 into master
Reviewed-on: #6
This commit is contained in:
commit
82a3306369
|
@ -4,6 +4,15 @@
|
||||||
All notable changes to this project will be documented in this file.
|
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).
|
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]
|
||||||
|
- Added method deleteDataset [#26793]
|
||||||
|
- Added method getListExtrasAsHashMap - D4Science model compliant
|
||||||
|
|
||||||
|
|
||||||
## [v1.3.0] - 2023-02-06
|
## [v1.3.0] - 2023-02-06
|
||||||
|
|
||||||
**Enhancements**
|
**Enhancements**
|
||||||
|
|
4
pom.xml
4
pom.xml
|
@ -6,13 +6,13 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>maven-parent</artifactId>
|
<artifactId>maven-parent</artifactId>
|
||||||
<groupId>org.gcube.tools</groupId>
|
<groupId>org.gcube.tools</groupId>
|
||||||
<version>1.1.0</version>
|
<version>1.2.0</version>
|
||||||
<relativePath />
|
<relativePath />
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<groupId>org.gcube.datacatalogue</groupId>
|
<groupId>org.gcube.datacatalogue</groupId>
|
||||||
<artifactId>catalogue-util-library</artifactId>
|
<artifactId>catalogue-util-library</artifactId>
|
||||||
<version>1.3.0</version>
|
<version>1.4.0-SNAPSHOT</version>
|
||||||
<name>Ckan utility library</name>
|
<name>Ckan utility library</name>
|
||||||
<description>
|
<description>
|
||||||
Utility library to retrieve users information, organizations information and so on from the ckan d4science datacatalogue
|
Utility library to retrieve users information, organizations information and so on from the ckan d4science datacatalogue
|
||||||
|
|
|
@ -10,6 +10,7 @@ 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.CkanGroup;
|
||||||
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanLicense;
|
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanLicense;
|
||||||
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanOrganization;
|
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanOrganization;
|
||||||
|
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanResource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Interface DataCatalogue.
|
* The Interface DataCatalogue.
|
||||||
|
@ -332,6 +333,35 @@ public interface DataCatalogue {
|
||||||
List<ResourceBean> resources, boolean setPublic, boolean setSearchable, boolean socialPost)
|
List<ResourceBean> resources, boolean setPublic, boolean setSearchable, boolean socialPost)
|
||||||
throws Exception;
|
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
|
* Add a resource described by the bean to the dataset id into
|
||||||
* resource.datasetId
|
* resource.datasetId
|
||||||
|
@ -344,6 +374,19 @@ public interface DataCatalogue {
|
||||||
*/
|
*/
|
||||||
String addResourceToDataset(ResourceBean resourceBean, String organizationName, String username) throws Exception;
|
String addResourceToDataset(ResourceBean resourceBean, String organizationName, String username) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the resource.
|
||||||
|
*
|
||||||
|
* @param resourceBean the resource bean
|
||||||
|
* @param datasetId the dataset id
|
||||||
|
* @param organizationName the organization name
|
||||||
|
* @param username the username
|
||||||
|
* @return the ckan resource
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
CkanResource addResource(ResourceBean resourceBean, String datasetId, String organizationName, String username)
|
||||||
|
throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the resource with id resourceId from dataset in which it is.
|
* Remove the resource with id resourceId from dataset in which it is.
|
||||||
*
|
*
|
||||||
|
@ -419,6 +462,15 @@ public interface DataCatalogue {
|
||||||
*/
|
*/
|
||||||
String refreshDataset(String datasetName) throws Exception;
|
String refreshDataset(String datasetName) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete dataset.
|
||||||
|
*
|
||||||
|
* @param datasetName the dataset name
|
||||||
|
* @return true, if successful
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
boolean deleteDataset(String datasetName) throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Patch a product with product id productId by using the couples in
|
* Patch a product with product id productId by using the couples in
|
||||||
* customFieldsToChange. NOTE: only the specified custom fields will be changed.
|
* customFieldsToChange. NOTE: only the specified custom fields will be changed.
|
||||||
|
|
|
@ -866,7 +866,7 @@ public class DataCatalogueImpl implements DataCatalogue {
|
||||||
|
|
||||||
// in order to avoid errors, the username is always converted
|
// in order to avoid errors, the username is always converted
|
||||||
String ckanUsername = CatalogueUtilMethods.fromUsernameToCKanUsername(username);
|
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
|
// check in the hashmap first
|
||||||
if (apiKeysMap.containsKey(ckanUsername)) {
|
if (apiKeysMap.containsKey(ckanUsername)) {
|
||||||
|
@ -1305,7 +1305,7 @@ public class DataCatalogueImpl implements DataCatalogue {
|
||||||
|
|
||||||
if (jsonValueDataset != null) {
|
if (jsonValueDataset != null) {
|
||||||
CkanDataset toCkanDataset = MarshUnmarshCkanObject.toCkanDataset(jsonValueDataset, METHOD.TO_READ);
|
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();
|
return toCkanDataset.getId();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -1320,6 +1320,80 @@ public class DataCatalogueImpl implements DataCatalogue {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
@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.
|
* Refresh dataset.
|
||||||
*
|
*
|
||||||
|
@ -1360,6 +1434,32 @@ public class DataCatalogueImpl implements DataCatalogue {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete dataset.
|
||||||
|
*
|
||||||
|
* @param datasetName the dataset name
|
||||||
|
* @return true, if successful
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean deleteDataset(String datasetName) throws Exception {
|
||||||
|
LOG.info("Called deleteDataset");
|
||||||
|
|
||||||
|
checkNotNull(datasetName);
|
||||||
|
boolean deleted = false;
|
||||||
|
try {
|
||||||
|
|
||||||
|
gCatCaller.deleteItem(datasetName, true);
|
||||||
|
deleted = true;
|
||||||
|
LOG.info("Deleted the dataset: {} ", datasetName);
|
||||||
|
return deleted;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Error on deleting the dataset: ", e);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Patch fields for dataset.
|
* Patch fields for dataset.
|
||||||
*
|
*
|
||||||
|
@ -1462,22 +1562,47 @@ public class DataCatalogueImpl implements DataCatalogue {
|
||||||
throws Exception {
|
throws Exception {
|
||||||
LOG.info("Called addResourceToDataset by this bean " + resourceBean);
|
LOG.info("Called addResourceToDataset by this bean " + resourceBean);
|
||||||
|
|
||||||
|
CkanResource resource = createResource(resourceBean, organizationName, username);
|
||||||
|
if (resource != null)
|
||||||
|
return resource.getId();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the resource to dataset.
|
||||||
|
*
|
||||||
|
* @param resourceBean the resource bean
|
||||||
|
* @param datasetId the dataset id
|
||||||
|
* @param organizationName the organization name
|
||||||
|
* @param username the username
|
||||||
|
* @return the string
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CkanResource addResource(ResourceBean resourceBean, String datasetId, String organizationName,
|
||||||
|
String username) throws Exception {
|
||||||
|
LOG.info("Called addResource by this bean " + resourceBean.getName() + ", datasetId: " + datasetId);
|
||||||
|
|
||||||
|
resourceBean.setDatasetId(datasetId);
|
||||||
|
return createResource(resourceBean, organizationName, username);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the resource.
|
||||||
|
*
|
||||||
|
* @param resourceBean the resource bean
|
||||||
|
* @param organizationName the organization name
|
||||||
|
* @param username the username
|
||||||
|
* @return the ckan resource
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
private CkanResource createResource(ResourceBean resourceBean, String organizationName, String username)
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
// checks
|
// checks
|
||||||
checkNotNull(resourceBean);
|
checkNotNull(resourceBean);
|
||||||
checkNotNull(resourceBean.getUrl());
|
checkNotNull(resourceBean.getUrl());
|
||||||
|
|
||||||
// Commented since #21259
|
|
||||||
/*
|
|
||||||
* boolean isAccessibleURL = false; try { isAccessibleURL =
|
|
||||||
* CatalogueUtilMethods.resourceExists(resourceBean.getUrl()); } catch
|
|
||||||
* (Exception e) { throw new Exception("It seems the resource at this url " +
|
|
||||||
* resourceBean.getUrl()+" is not reachable. Error: "+e.getMessage()); }
|
|
||||||
*
|
|
||||||
* if(!isAccessibleURL){ throw new
|
|
||||||
* Exception("It seems there is no resource at this url " +
|
|
||||||
* resourceBean.getUrl()); }
|
|
||||||
*/
|
|
||||||
|
|
||||||
GcubeContext gcubeContext = null;
|
GcubeContext gcubeContext = null;
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -1496,7 +1621,7 @@ public class DataCatalogueImpl implements DataCatalogue {
|
||||||
if (createdRes != null) {
|
if (createdRes != null) {
|
||||||
LOG.info("Resource with id: " + createdRes.getId() + ", name: " + createdRes.getName()
|
LOG.info("Resource with id: " + createdRes.getId() + ", name: " + createdRes.getName()
|
||||||
+ " added correclty");
|
+ " added correclty");
|
||||||
return createdRes.getId();
|
return createdRes;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.error("Unable to add the resource " + resourceBean, e);
|
LOG.error("Unable to add the resource " + resourceBean, e);
|
||||||
|
@ -1507,6 +1632,7 @@ public class DataCatalogueImpl implements DataCatalogue {
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1533,7 +1659,17 @@ public class DataCatalogueImpl implements DataCatalogue {
|
||||||
|
|
||||||
GcubeContext gcubeContext = null;
|
GcubeContext gcubeContext = null;
|
||||||
try {
|
try {
|
||||||
CkanResource theResource = ckanCaller.getResource(resourceId);
|
CkanResource theResource = null;
|
||||||
|
// Using CKAN API KEY TO READ THE RESOURCE
|
||||||
|
if (username != null && !username.isEmpty()) {
|
||||||
|
LOG.info("username found. Calling the " + ExtendCkanClient.class.getSimpleName());
|
||||||
|
String apiKey = getApiKeyFromUsername(username);
|
||||||
|
ExtendCkanClient client = new ExtendCkanClient(CKAN_CATALOGUE_URL, apiKey);
|
||||||
|
theResource = client.getResource(resourceId);
|
||||||
|
} else {
|
||||||
|
// GUEST MODE - NO API
|
||||||
|
theResource = ckanCaller.getResource(resourceId);
|
||||||
|
}
|
||||||
|
|
||||||
CkanDataset theDataset = getDataset(theResource.getPackageId(), username);
|
CkanDataset theDataset = getDataset(theResource.getPackageId(), username);
|
||||||
|
|
||||||
|
|
|
@ -68,8 +68,10 @@ public class CKANConveter {
|
||||||
String ckanUsername = CatalogueUtilMethods.fromUsernameToCKanUsername(username);
|
String ckanUsername = CatalogueUtilMethods.fromUsernameToCKanUsername(username);
|
||||||
|
|
||||||
String nameToUse = name;
|
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);
|
nameToUse = CatalogueUtilMethods.fromProductTitleToName(title);
|
||||||
|
}
|
||||||
|
|
||||||
LOG.debug("Name of the dataset is going to be " + nameToUse + ". Title is going to be " + title);
|
LOG.debug("Name of the dataset is going to be " + nameToUse + ". Title is going to be " + title);
|
||||||
|
|
||||||
|
|
|
@ -30,17 +30,15 @@ import org.gcube.com.fasterxml.jackson.annotation.JsonAnySetter;
|
||||||
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore;
|
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import org.gcube.com.fasterxml.jackson.annotation.JsonProperty;
|
import org.gcube.com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Ckan Dataset, which in turn holds Ckan Resources.
|
* A Ckan Dataset, which in turn holds Ckan Resources.
|
||||||
*
|
*
|
||||||
* In Ckan terminology it is also known as 'package'.
|
* In Ckan terminology it is also known as 'package'.
|
||||||
*
|
*
|
||||||
* {@link CkanDatasetBase} holds fields that can be sent when
|
* {@link CkanDatasetBase} holds fields that can be sent when <a href=
|
||||||
* <a href="http://docs.ckan.org/en/latest/api/index.html?#ckan.logic.action.create.package_create" target="_blank">creating
|
* "http://docs.ckan.org/en/latest/api/index.html?#ckan.logic.action.create.package_create"
|
||||||
* a dataset,</a>, while {@link CkanDataset} holds more fields that can be
|
* target="_blank">creating a dataset,</a>, while {@link CkanDataset} holds more
|
||||||
* returned with searches.
|
* fields that can be returned with searches.
|
||||||
*
|
*
|
||||||
* This class initializes nothing to fully preserve all we get from ckan. In
|
* This class initializes nothing to fully preserve all we get from ckan. In
|
||||||
* practice, all fields of retrieved resources can be null except maybe
|
* practice, all fields of retrieved resources can be null except maybe
|
||||||
|
@ -51,148 +49,148 @@ import org.gcube.com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
*/
|
*/
|
||||||
public class CkanDatasetBase {
|
public class CkanDatasetBase {
|
||||||
|
|
||||||
private String author;
|
private String author;
|
||||||
private String authorEmail;
|
private String authorEmail;
|
||||||
private List<CkanPair> extras;
|
private List<CkanPair> extras;
|
||||||
private List<CkanGroup> groups;
|
private List<CkanGroup> groups;
|
||||||
private String id;
|
private String id;
|
||||||
private String licenseId;
|
private String licenseId;
|
||||||
private String maintainer;
|
private String maintainer;
|
||||||
private String maintainerEmail;
|
private String maintainerEmail;
|
||||||
private String name;
|
private String name;
|
||||||
private String notes;
|
private String notes;
|
||||||
private String ownerOrg;
|
private String ownerOrg;
|
||||||
private List<CkanDatasetRelationship> relationshipsAsObject;
|
private List<CkanDatasetRelationship> relationshipsAsObject;
|
||||||
private List<CkanDatasetRelationship> relationshipsAsSubject;
|
private List<CkanDatasetRelationship> relationshipsAsSubject;
|
||||||
private List<CkanResource> resources;
|
private List<CkanResource> resources;
|
||||||
private CkanState state;
|
private CkanState state;
|
||||||
private List<CkanTag> tags;
|
private List<CkanTag> tags;
|
||||||
private String title;
|
private String title;
|
||||||
private String type;
|
private String type;
|
||||||
private String url;
|
private String url;
|
||||||
private String version;
|
private String version;
|
||||||
|
|
||||||
private Boolean priv;
|
|
||||||
|
|
||||||
/**
|
private Boolean priv;
|
||||||
* Custom CKAN instances might sometimes gift us with properties that don't
|
|
||||||
* end up in extras. They will end up here.
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
private Map<String, Object> others;
|
|
||||||
|
|
||||||
public CkanDatasetBase() {
|
/**
|
||||||
}
|
* Custom CKAN instances might sometimes gift us with properties that don't end
|
||||||
|
* up in extras. They will end up here.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
private Map<String, Object> others;
|
||||||
|
|
||||||
/**
|
public CkanDatasetBase() {
|
||||||
* Constructor with the minimal set of attributes required to successfully
|
}
|
||||||
* create a dataset on the server.
|
|
||||||
*
|
|
||||||
* @param name the dataset name (contains no spaces and has dashes as
|
|
||||||
* separators, i.e. "limestone-pavement-orders")
|
|
||||||
*/
|
|
||||||
public CkanDatasetBase(String name) {
|
|
||||||
this();
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CKAN instances might have
|
* Constructor with the minimal set of attributes required to successfully
|
||||||
* <a href="http://docs.ckan.org/en/latest/extensions/adding-custom-fields.html">
|
* create a dataset on the server.
|
||||||
* custom data schemas</a> that force presence of custom properties among
|
*
|
||||||
* 'regular' ones. In this case, they go to 'others' field. Note that to
|
* @param name the dataset name (contains no spaces and has dashes as
|
||||||
* further complicate things there is also an {@link #getExtras() extras}
|
* separators, i.e. "limestone-pavement-orders")
|
||||||
* field.
|
*/
|
||||||
*
|
public CkanDatasetBase(String name) {
|
||||||
* @see #putOthers(java.lang.String, java.lang.Object)
|
this();
|
||||||
*/
|
this.name = name;
|
||||||
@JsonAnyGetter
|
}
|
||||||
@Nullable
|
|
||||||
public Map<String, Object> getOthers() {
|
|
||||||
return others;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #getOthers()
|
* CKAN instances might have <a href=
|
||||||
* @see #putOthers(java.lang.String, java.lang.Object)
|
* "http://docs.ckan.org/en/latest/extensions/adding-custom-fields.html"> custom
|
||||||
*/
|
* data schemas</a> that force presence of custom properties among 'regular'
|
||||||
public void setOthers(@Nullable Map<String, Object> others) {
|
* ones. In this case, they go to 'others' field. Note that to further
|
||||||
this.others = others;
|
* complicate things there is also an {@link #getExtras() extras} field.
|
||||||
}
|
*
|
||||||
|
* @see #putOthers(java.lang.String, java.lang.Object)
|
||||||
|
*/
|
||||||
|
@JsonAnyGetter
|
||||||
|
@Nullable
|
||||||
|
public Map<String, Object> getOthers() {
|
||||||
|
return others;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See {@link #getOthers()}
|
* @see #getOthers()
|
||||||
*
|
* @see #putOthers(java.lang.String, java.lang.Object)
|
||||||
* @see #setOthers(java.util.Map)
|
*/
|
||||||
*/
|
public void setOthers(@Nullable Map<String, Object> others) {
|
||||||
@JsonAnySetter
|
this.others = others;
|
||||||
public void putOthers(String name, Object value) {
|
}
|
||||||
if (others == null) {
|
|
||||||
others = new HashMap<>();
|
|
||||||
}
|
|
||||||
others.put(name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAuthor() {
|
/**
|
||||||
return author;
|
* See {@link #getOthers()}
|
||||||
}
|
*
|
||||||
|
* @see #setOthers(java.util.Map)
|
||||||
|
*/
|
||||||
|
@JsonAnySetter
|
||||||
|
public void putOthers(String name, Object value) {
|
||||||
|
if (others == null) {
|
||||||
|
others = new HashMap<>();
|
||||||
|
}
|
||||||
|
others.put(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
public void setAuthor(String author) {
|
public String getAuthor() {
|
||||||
this.author = author;
|
return author;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAuthorEmail() {
|
public void setAuthor(String author) {
|
||||||
return authorEmail;
|
this.author = author;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAuthorEmail(String authorEmail) {
|
public String getAuthorEmail() {
|
||||||
this.authorEmail = authorEmail;
|
return authorEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void setAuthorEmail(String authorEmail) {
|
||||||
* Notice that if the dataset was obtained with a
|
this.authorEmail = authorEmail;
|
||||||
* {@link eu.trentorise.opendata.jackan.CkanClient#getDataset(java.lang.String)} call, the returned group
|
}
|
||||||
* won't have all the params you would get with a
|
|
||||||
* {@link eu.trentorise.opendata.jackan.CkanClient#getGroup(java.lang.String)} call.
|
|
||||||
*/
|
|
||||||
public List<CkanGroup> getGroups() {
|
|
||||||
return groups;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGroups(List<CkanGroup> groups) {
|
/**
|
||||||
this.groups = groups;
|
* Notice that if the dataset was obtained with a
|
||||||
}
|
* {@link eu.trentorise.opendata.jackan.CkanClient#getDataset(java.lang.String)}
|
||||||
|
* call, the returned group won't have all the params you would get with a
|
||||||
|
* {@link eu.trentorise.opendata.jackan.CkanClient#getGroup(java.lang.String)}
|
||||||
|
* call.
|
||||||
|
*/
|
||||||
|
public List<CkanGroup> getGroups() {
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
public void setGroups(List<CkanGroup> groups) {
|
||||||
* Adds CkanGroups
|
this.groups = groups;
|
||||||
*
|
}
|
||||||
* @param ckanGroups The CkanGroups elements
|
|
||||||
*
|
|
||||||
* @since 0.4.3
|
|
||||||
*/
|
|
||||||
public void addGroups(CkanGroup... ckanGroups) {
|
|
||||||
if (this.groups == null) {
|
|
||||||
this.groups = new ArrayList<>(ckanGroups.length);
|
|
||||||
}
|
|
||||||
Collections.addAll(this.groups, ckanGroups);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regular place where to put custom metadata. See also
|
* Adds CkanGroups
|
||||||
* {@link #getOthers()}. Note also extras can be in CkanDataset but not in
|
*
|
||||||
* CkanResource.
|
* @param ckanGroups The CkanGroups elements
|
||||||
*/
|
*
|
||||||
public List<CkanPair> getExtras() {
|
* @since 0.4.3
|
||||||
return extras;
|
*/
|
||||||
}
|
public void addGroups(CkanGroup... ckanGroups) {
|
||||||
|
if (this.groups == null) {
|
||||||
|
this.groups = new ArrayList<>(ckanGroups.length);
|
||||||
|
}
|
||||||
|
Collections.addAll(this.groups, ckanGroups);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See {@link #getExtras()}
|
* Regular place where to put custom metadata. See also {@link #getOthers()}.
|
||||||
*/
|
* Note also extras can be in CkanDataset but not in CkanResource.
|
||||||
public void setExtras(List<CkanPair> extras) {
|
*/
|
||||||
this.extras = extras;
|
public List<CkanPair> getExtras() {
|
||||||
}
|
return extras;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See {@link #getExtras()}
|
||||||
|
*/
|
||||||
|
public void setExtras(List<CkanPair> extras) {
|
||||||
|
this.extras = extras;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Always returns a non-null map (which might be empty)
|
* Always returns a non-null map (which might be empty)
|
||||||
*/
|
*/
|
||||||
|
@ -207,285 +205,306 @@ public class CkanDatasetBase {
|
||||||
return hm;
|
return hm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds CkanExtras
|
* Always returns a non-null map (which might be empty)
|
||||||
*
|
*
|
||||||
* @param extras The CkanExtra elements
|
* added by Francesco Mangiacrapa at ISTI-CNR
|
||||||
*
|
*
|
||||||
* @since 0.4.3
|
* The D4Science model accepts extra fields with multiple keys
|
||||||
*/
|
*/
|
||||||
public void addExtras(CkanPair... extras) {
|
@JsonIgnore
|
||||||
if (this.extras == null) {
|
public Map<String, List<String>> getListExtrasAsHashMap() {
|
||||||
this.extras = new ArrayList<>(extras.length);
|
HashMap<String, List<String>> hm = new HashMap<>();
|
||||||
}
|
if (extras != null) {
|
||||||
Collections.addAll(this.extras, extras);
|
for (CkanPair cp : extras) {
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
List<String> list = hm.get(cp.getKey());
|
||||||
* Returns the alphanumerical id, i.e.
|
if (list == null)
|
||||||
* "c4577b8f-5603-4098-917e-da03e8ddf461"
|
list = new ArrayList<String>();
|
||||||
*/
|
|
||||||
public String getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
list.add(cp.getValue());
|
||||||
* Sets the alphanumerical id, i.e. "c4577b8f-5603-4098-917e-da03e8ddf461"
|
hm.put(cp.getKey(), list);
|
||||||
*/
|
}
|
||||||
public void setId(String id) {
|
}
|
||||||
this.id = id;
|
return hm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The license id (i.e. 'cc-zero')
|
* Adds CkanExtras
|
||||||
*/
|
*
|
||||||
public String getLicenseId() {
|
* @param extras The CkanExtra elements
|
||||||
return licenseId;
|
*
|
||||||
}
|
* @since 0.4.3
|
||||||
|
*/
|
||||||
|
public void addExtras(CkanPair... extras) {
|
||||||
|
if (this.extras == null) {
|
||||||
|
this.extras = new ArrayList<>(extras.length);
|
||||||
|
}
|
||||||
|
Collections.addAll(this.extras, extras);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The license id (i.e. 'cc-zero')
|
* Returns the alphanumerical id, i.e. "c4577b8f-5603-4098-917e-da03e8ddf461"
|
||||||
*/
|
*/
|
||||||
public void setLicenseId(String licenseId) {
|
public String getId() {
|
||||||
this.licenseId = licenseId;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMaintainer() {
|
/**
|
||||||
return maintainer;
|
* Sets the alphanumerical id, i.e. "c4577b8f-5603-4098-917e-da03e8ddf461"
|
||||||
}
|
*/
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
public void setMaintainer(String maintainer) {
|
/**
|
||||||
this.maintainer = maintainer;
|
* The license id (i.e. 'cc-zero')
|
||||||
}
|
*/
|
||||||
|
public String getLicenseId() {
|
||||||
|
return licenseId;
|
||||||
|
}
|
||||||
|
|
||||||
public String getMaintainerEmail() {
|
/**
|
||||||
return maintainerEmail;
|
* The license id (i.e. 'cc-zero')
|
||||||
}
|
*/
|
||||||
|
public void setLicenseId(String licenseId) {
|
||||||
|
this.licenseId = licenseId;
|
||||||
|
}
|
||||||
|
|
||||||
public void setMaintainerEmail(String maintainerEmail) {
|
public String getMaintainer() {
|
||||||
this.maintainerEmail = maintainerEmail;
|
return maintainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void setMaintainer(String maintainer) {
|
||||||
* The dataset name (contains no spaces and has dashes as separators, i.e.
|
this.maintainer = maintainer;
|
||||||
* "limestone-pavement-orders")
|
}
|
||||||
*/
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
public String getMaintainerEmail() {
|
||||||
* The dataset name. Name must not contain spaces and have dashes as
|
return maintainerEmail;
|
||||||
* separators, i.e. "limestone-pavement-orders"
|
}
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
public void setMaintainerEmail(String maintainerEmail) {
|
||||||
* A description of the dataset. See also
|
this.maintainerEmail = maintainerEmail;
|
||||||
* {@link CkanDataset#getNotesRendered()} Note CkanResource has instead a
|
}
|
||||||
* field called {@link CkanResourceBase#getDescription() description}.
|
|
||||||
*/
|
|
||||||
public String getNotes() {
|
|
||||||
return notes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A description of the dataset. See also
|
* The dataset name (contains no spaces and has dashes as separators, i.e.
|
||||||
* {@link CkanDataset#getNotesRendered()} Note CkanResource has instead a
|
* "limestone-pavement-orders")
|
||||||
* field called {@link CkanResourceBase#getDescription() description}.
|
*/
|
||||||
*/
|
public String getName() {
|
||||||
public void setNotes(String notes) {
|
return name;
|
||||||
this.notes = notes;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The owner organization alphanunmerical id, like
|
* The dataset name. Name must not contain spaces and have dashes as separators,
|
||||||
* "b112ed55-01b7-4ca4-8385-f66d6168efcc".
|
* i.e. "limestone-pavement-orders"
|
||||||
*/
|
*
|
||||||
public String getOwnerOrg() {
|
*/
|
||||||
return ownerOrg;
|
public void setName(String name) {
|
||||||
}
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The owner organization alphanunmerical id, like
|
* A description of the dataset. See also {@link CkanDataset#getNotesRendered()}
|
||||||
* "b112ed55-01b7-4ca4-8385-f66d6168efcc".
|
* Note CkanResource has instead a field called
|
||||||
*/
|
* {@link CkanResourceBase#getDescription() description}.
|
||||||
public void setOwnerOrg(String ownerOrg) {
|
*/
|
||||||
this.ownerOrg = ownerOrg;
|
public String getNotes() {
|
||||||
}
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
public List<CkanDatasetRelationship> getRelationshipsAsObject() {
|
/**
|
||||||
return relationshipsAsObject;
|
* A description of the dataset. See also {@link CkanDataset#getNotesRendered()}
|
||||||
}
|
* Note CkanResource has instead a field called
|
||||||
|
* {@link CkanResourceBase#getDescription() description}.
|
||||||
|
*/
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
public void setRelationshipsAsObject(List<CkanDatasetRelationship> relationshipsAsObject) {
|
/**
|
||||||
this.relationshipsAsObject = relationshipsAsObject;
|
* The owner organization alphanunmerical id, like
|
||||||
}
|
* "b112ed55-01b7-4ca4-8385-f66d6168efcc".
|
||||||
|
*/
|
||||||
|
public String getOwnerOrg() {
|
||||||
|
return ownerOrg;
|
||||||
|
}
|
||||||
|
|
||||||
public List<CkanDatasetRelationship> getRelationshipsAsSubject() {
|
/**
|
||||||
return relationshipsAsSubject;
|
* The owner organization alphanunmerical id, like
|
||||||
}
|
* "b112ed55-01b7-4ca4-8385-f66d6168efcc".
|
||||||
|
*/
|
||||||
|
public void setOwnerOrg(String ownerOrg) {
|
||||||
|
this.ownerOrg = ownerOrg;
|
||||||
|
}
|
||||||
|
|
||||||
public void setRelationshipsAsSubject(List<CkanDatasetRelationship> relationshipsAsSubject) {
|
public List<CkanDatasetRelationship> getRelationshipsAsObject() {
|
||||||
this.relationshipsAsSubject = relationshipsAsSubject;
|
return relationshipsAsObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CkanResource> getResources() {
|
public void setRelationshipsAsObject(List<CkanDatasetRelationship> relationshipsAsObject) {
|
||||||
return this.resources;
|
this.relationshipsAsObject = relationshipsAsObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setResources(List<CkanResource> resources) {
|
public List<CkanDatasetRelationship> getRelationshipsAsSubject() {
|
||||||
this.resources = resources;
|
return relationshipsAsSubject;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void setRelationshipsAsSubject(List<CkanDatasetRelationship> relationshipsAsSubject) {
|
||||||
* Adds CkanResources
|
this.relationshipsAsSubject = relationshipsAsSubject;
|
||||||
*
|
}
|
||||||
* @param resources The CkanResources elements
|
|
||||||
*
|
|
||||||
* @since 0.4.3
|
|
||||||
*/
|
|
||||||
public void addCkanResources(CkanResource... resources) {
|
|
||||||
if (this.resources == null) {
|
|
||||||
this.resources = new ArrayList<>(resources.length);
|
|
||||||
}
|
|
||||||
Collections.addAll(this.resources, resources);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
public List<CkanResource> getResources() {
|
||||||
* The current state of the dataset, e.g. 'active' or 'deleted', only active
|
return this.resources;
|
||||||
* datasets show up in search results and other lists of datasets, this
|
}
|
||||||
* parameter will be ignored if you are not authorized to change the state
|
|
||||||
* of the dataset (optional, default: 'active')
|
|
||||||
*/
|
|
||||||
public CkanState getState() {
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
public void setResources(List<CkanResource> resources) {
|
||||||
* The current state of the dataset, e.g. 'active' or 'deleted', only active
|
this.resources = resources;
|
||||||
* datasets show up in search results and other lists of datasets, this
|
}
|
||||||
* parameter will be ignored if you are not authorized to change the state
|
|
||||||
* of the dataset (optional, default: 'active')
|
|
||||||
*/
|
|
||||||
public void setState(CkanState state) {
|
|
||||||
this.state = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<CkanTag> getTags() {
|
/**
|
||||||
return tags;
|
* Adds CkanResources
|
||||||
}
|
*
|
||||||
|
* @param resources The CkanResources elements
|
||||||
|
*
|
||||||
|
* @since 0.4.3
|
||||||
|
*/
|
||||||
|
public void addCkanResources(CkanResource... resources) {
|
||||||
|
if (this.resources == null) {
|
||||||
|
this.resources = new ArrayList<>(resources.length);
|
||||||
|
}
|
||||||
|
Collections.addAll(this.resources, resources);
|
||||||
|
}
|
||||||
|
|
||||||
public void setTags(List<CkanTag> tags) {
|
/**
|
||||||
this.tags = tags;
|
* The current state of the dataset, e.g. 'active' or 'deleted', only active
|
||||||
}
|
* datasets show up in search results and other lists of datasets, this
|
||||||
|
* parameter will be ignored if you are not authorized to change the state of
|
||||||
|
* the dataset (optional, default: 'active')
|
||||||
|
*/
|
||||||
|
public CkanState getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds CkanTag
|
* The current state of the dataset, e.g. 'active' or 'deleted', only active
|
||||||
*
|
* datasets show up in search results and other lists of datasets, this
|
||||||
* @param tags The CkanTags elements
|
* parameter will be ignored if you are not authorized to change the state of
|
||||||
*
|
* the dataset (optional, default: 'active')
|
||||||
* @since 0.4.3
|
*/
|
||||||
*/
|
public void setState(CkanState state) {
|
||||||
public void addTags(CkanTag... tags) {
|
this.state = state;
|
||||||
if (this.tags == null) {
|
}
|
||||||
this.tags = new ArrayList<>(tags.length);
|
|
||||||
}
|
|
||||||
Collections.addAll(this.tags, tags);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
public List<CkanTag> getTags() {
|
||||||
* The title, like "Hospitals of Trento"
|
return tags;
|
||||||
*/
|
}
|
||||||
public String getTitle() {
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
public void setTags(List<CkanTag> tags) {
|
||||||
* The title, like "Hospitals of Trento"
|
this.tags = tags;
|
||||||
*/
|
}
|
||||||
public void setTitle(String title) {
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type of the dataset (optional), IDatasetForm plugins associate
|
* Adds CkanTag
|
||||||
* themselves with different dataset types and provide custom dataset
|
*
|
||||||
* handling behaviour for these types
|
* @param tags The CkanTags elements
|
||||||
*/
|
*
|
||||||
public String getType() {
|
* @since 0.4.3
|
||||||
return type;
|
*/
|
||||||
}
|
public void addTags(CkanTag... tags) {
|
||||||
|
if (this.tags == null) {
|
||||||
|
this.tags = new ArrayList<>(tags.length);
|
||||||
|
}
|
||||||
|
Collections.addAll(this.tags, tags);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type of the dataset (optional), IDatasetForm plugins associate
|
* The title, like "Hospitals of Trento"
|
||||||
* themselves with different dataset types and provide custom dataset
|
*/
|
||||||
* handling behaviour for these types
|
public String getTitle() {
|
||||||
*/
|
return title;
|
||||||
public void setType(String type) {
|
}
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should be the landing page on original data provider website describing
|
* The title, like "Hospitals of Trento"
|
||||||
* the dataset.
|
*/
|
||||||
*/
|
public void setTitle(String title) {
|
||||||
public String getUrl() {
|
this.title = title;
|
||||||
return url;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should be the landing page on original data provider website describing
|
* The type of the dataset (optional), IDatasetForm plugins associate themselves
|
||||||
* the dataset.
|
* with different dataset types and provide custom dataset handling behaviour
|
||||||
*/
|
* for these types
|
||||||
public void setUrl(String url) {
|
*/
|
||||||
this.url = url;
|
public String getType() {
|
||||||
}
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
public String getVersion() {
|
/**
|
||||||
return version;
|
* The type of the dataset (optional), IDatasetForm plugins associate themselves
|
||||||
}
|
* with different dataset types and provide custom dataset handling behaviour
|
||||||
|
* for these types
|
||||||
|
*/
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
public void setVersion(String version) {
|
/**
|
||||||
this.version = version;
|
* Should be the landing page on original data provider website describing the
|
||||||
}
|
* dataset.
|
||||||
|
*/
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the id if non-empty, the name otherwise
|
* Should be the landing page on original data provider website describing the
|
||||||
*/
|
* dataset.
|
||||||
@Nullable
|
*/
|
||||||
public String idOrName() {
|
public void setUrl(String url) {
|
||||||
return isNotEmpty(getId()) ? getId() : getName();
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public String getVersion() {
|
||||||
* Returns the name if non-empty, the id otherwise
|
return version;
|
||||||
*/
|
}
|
||||||
@Nullable
|
|
||||||
public String nameOrId() {
|
|
||||||
|
|
||||||
return isNotEmpty(getName()) ? getName() : getId();
|
public void setVersion(String version) {
|
||||||
}
|
this.version = version;
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Actually it is named "private" in the CKAN API. Appears in dataset
|
|
||||||
* searches.
|
|
||||||
*/
|
|
||||||
@JsonProperty("private")
|
|
||||||
public Boolean isPriv() {
|
|
||||||
return priv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Actually it is named "private" in the CKAN API. Appears in dataset
|
* Returns the id if non-empty, the name otherwise
|
||||||
* searches.
|
*/
|
||||||
*/
|
@Nullable
|
||||||
public void setPriv(Boolean priv) {
|
public String idOrName() {
|
||||||
this.priv = priv;
|
return isNotEmpty(getId()) ? getId() : getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name if non-empty, the id otherwise
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public String nameOrId() {
|
||||||
|
|
||||||
|
return isNotEmpty(getName()) ? getName() : getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Actually it is named "private" in the CKAN API. Appears in dataset searches.
|
||||||
|
*/
|
||||||
|
@JsonProperty("private")
|
||||||
|
public Boolean isPriv() {
|
||||||
|
return priv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Actually it is named "private" in the CKAN API. Appears in dataset searches.
|
||||||
|
*/
|
||||||
|
public void setPriv(Boolean priv) {
|
||||||
|
this.priv = priv;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@ -537,7 +556,5 @@ public class CkanDatasetBase {
|
||||||
builder.append("]");
|
builder.append("]");
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -27,9 +27,16 @@ public class ContextTest {
|
||||||
protected static Properties properties;
|
protected static Properties properties;
|
||||||
protected static final String PROPERTIES_FILENAME = "token.properties";
|
protected static final String PROPERTIES_FILENAME = "token.properties";
|
||||||
|
|
||||||
public static final String ROOT = "/gcube";
|
// public static final String ROOT = "/gcube";
|
||||||
public static final String VO = ROOT + "/devsec";
|
// public static final String VO = ROOT + "/devsec";
|
||||||
public static final String VRE = VO + "/devVRE";
|
// 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 {
|
static {
|
||||||
properties = new Properties();
|
properties = new Properties();
|
||||||
|
|
|
@ -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.ItemStatus;
|
||||||
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset;
|
import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset;
|
||||||
import org.gcube.gcat.client.Item;
|
import org.gcube.gcat.client.Item;
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,7 +7,6 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
import org.gcube.datacatalogue.utillibrary.ckan.MarshUnmarshCkanObject;
|
import org.gcube.datacatalogue.utillibrary.ckan.MarshUnmarshCkanObject;
|
||||||
import org.gcube.datacatalogue.utillibrary.ckan.MarshUnmarshCkanObject.METHOD;
|
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
|
* @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 static final org.slf4j.Logger LOG = LoggerFactory.getLogger(TestDataCatalogueLib.class);
|
||||||
|
|
||||||
private DataCatalogueFactory factory;
|
private DataCatalogueFactory factory;
|
||||||
private String scope = "/gcube/devsec/devVRE";
|
//private String scope = "/gcube/devsec/devVRE";
|
||||||
// private String scope = "/gcube";
|
// private String scope = "/gcube";
|
||||||
// private String scope = "/pred4s/preprod/preVRE";
|
// private String scope = "/pred4s/preprod/preVRE";
|
||||||
// private String scope =
|
// private String scope =
|
||||||
|
@ -42,7 +41,7 @@ public class TestDataCatalogueLib {
|
||||||
// "/d4science.research-infrastructures.eu/gCubeApps/BiodiversityLab";
|
// "/d4science.research-infrastructures.eu/gCubeApps/BiodiversityLab";
|
||||||
// private String testUser = "costantino_perciante";
|
// private String testUser = "costantino_perciante";
|
||||||
private String testUser = "francesco.mangiacrapa";
|
private String testUser = "francesco.mangiacrapa";
|
||||||
private String authorizationToken = "";
|
//private String authorizationToken = "";
|
||||||
String subjectId = "aa_father4";
|
String subjectId = "aa_father4";
|
||||||
String objectId = "bb_son4";
|
String objectId = "bb_son4";
|
||||||
String productName = "adatasetcreatedbycatalogue-util-library-873805063";
|
String productName = "adatasetcreatedbycatalogue-util-library-873805063";
|
||||||
|
@ -52,7 +51,7 @@ public class TestDataCatalogueLib {
|
||||||
*
|
*
|
||||||
* @throws Exception the exception
|
* @throws Exception the exception
|
||||||
*/
|
*/
|
||||||
// @Before
|
@Before
|
||||||
public void before() throws Exception {
|
public void before() throws Exception {
|
||||||
factory = DataCatalogueFactory.getFactory();
|
factory = DataCatalogueFactory.getFactory();
|
||||||
}
|
}
|
||||||
|
@ -124,10 +123,17 @@ public class TestDataCatalogueLib {
|
||||||
*/
|
*/
|
||||||
//@Test
|
//@Test
|
||||||
public void getDataset() throws Exception {
|
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);
|
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
||||||
String username = testUser;
|
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 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 {
|
try {
|
||||||
|
|
||||||
ScopeProvider.instance.set(scope);
|
// ScopeProvider.instance.set(scope);
|
||||||
SecurityTokenProvider.instance.set(authorizationToken);
|
// SecurityTokenProvider.instance.set(authorizationToken);
|
||||||
|
|
||||||
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
||||||
String licenseId = instance.getLicenses().get(0).getId();
|
String licenseId = instance.getLicenses().get(0).getId();
|
||||||
|
@ -282,8 +288,8 @@ public class TestDataCatalogueLib {
|
||||||
// @Test
|
// @Test
|
||||||
public void createGroup() throws Exception {
|
public void createGroup() throws Exception {
|
||||||
|
|
||||||
ScopeProvider.instance.set(scope);
|
// ScopeProvider.instance.set(scope);
|
||||||
SecurityTokenProvider.instance.set(authorizationToken);
|
// SecurityTokenProvider.instance.set(authorizationToken);
|
||||||
|
|
||||||
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
||||||
int random = new Random().nextInt();
|
int random = new Random().nextInt();
|
||||||
|
@ -296,8 +302,8 @@ public class TestDataCatalogueLib {
|
||||||
// @Test
|
// @Test
|
||||||
public void addResource() throws Exception {
|
public void addResource() throws Exception {
|
||||||
|
|
||||||
ScopeProvider.instance.set(scope);
|
// ScopeProvider.instance.set(scope);
|
||||||
SecurityTokenProvider.instance.set(authorizationToken);
|
// SecurityTokenProvider.instance.set(authorizationToken);
|
||||||
|
|
||||||
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
||||||
CkanDataset dataset = instance.getDataset(productName, testUser);
|
CkanDataset dataset = instance.getDataset(productName, testUser);
|
||||||
|
@ -312,8 +318,8 @@ public class TestDataCatalogueLib {
|
||||||
// @Test
|
// @Test
|
||||||
public void deleteResource() throws Exception {
|
public void deleteResource() throws Exception {
|
||||||
|
|
||||||
ScopeProvider.instance.set(scope);
|
// ScopeProvider.instance.set(scope);
|
||||||
SecurityTokenProvider.instance.set(authorizationToken);
|
// SecurityTokenProvider.instance.set(authorizationToken);
|
||||||
|
|
||||||
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
||||||
String resourceId = "ce7295cf-47db-4faf-901f-4fec2d3fae7a";
|
String resourceId = "ce7295cf-47db-4faf-901f-4fec2d3fae7a";
|
||||||
|
@ -325,8 +331,8 @@ public class TestDataCatalogueLib {
|
||||||
// @Test
|
// @Test
|
||||||
public void patchFieldsForDataset() throws Exception {
|
public void patchFieldsForDataset() throws Exception {
|
||||||
|
|
||||||
ScopeProvider.instance.set(scope);
|
// ScopeProvider.instance.set(scope);
|
||||||
SecurityTokenProvider.instance.set(authorizationToken);
|
// SecurityTokenProvider.instance.set(authorizationToken);
|
||||||
|
|
||||||
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
||||||
Map<String, String> customFieldsToChange = new HashMap<String, String>();
|
Map<String, String> customFieldsToChange = new HashMap<String, String>();
|
||||||
|
@ -337,8 +343,8 @@ public class TestDataCatalogueLib {
|
||||||
// @Test
|
// @Test
|
||||||
public void getUrlProduct() throws Exception {
|
public void getUrlProduct() throws Exception {
|
||||||
|
|
||||||
ScopeProvider.instance.set(scope);
|
// ScopeProvider.instance.set(scope);
|
||||||
SecurityTokenProvider.instance.set(authorizationToken);
|
// SecurityTokenProvider.instance.set(authorizationToken);
|
||||||
|
|
||||||
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
|
||||||
String datasetName = productName;
|
String datasetName = productName;
|
||||||
|
|
Loading…
Reference in New Issue