moved to Storagehub
This commit is contained in:
parent
a2233d4de1
commit
3519fc2888
|
@ -1,12 +1,23 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||||
<wb-module deploy-name="grsf-publisher-ws">
|
|
||||||
|
<wb-module deploy-name="grsf-publisher-ws-1.12.1-SNAPSHOT">
|
||||||
|
|
||||||
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
||||||
|
|
||||||
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
||||||
|
|
||||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
||||||
<dependent-module archiveName="grsf-common-library-1.0.3-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/grsf-common-library/grsf-common-library">
|
<dependent-module archiveName="storagehub-model-1.1.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/storagehub-model/storagehub-model">
|
||||||
<dependency-type>uses</dependency-type>
|
<dependency-type>uses</dependency-type>
|
||||||
</dependent-module>
|
</dependent-module>
|
||||||
|
<dependent-module archiveName="common-gcube-calls-1.3.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/common-gcube-calls/common-gcube-calls">
|
||||||
|
<dependency-type>uses</dependency-type>
|
||||||
|
</dependent-module>
|
||||||
|
|
||||||
<property name="context-root" value="grsf-publisher-ws"/>
|
<property name="context-root" value="grsf-publisher-ws"/>
|
||||||
|
|
||||||
<property name="java-output-path" value="/grsf-publisher-ws/target/classes"/>
|
<property name="java-output-path" value="/grsf-publisher-ws/target/classes"/>
|
||||||
|
|
||||||
</wb-module>
|
</wb-module>
|
||||||
|
|
||||||
</project-modules>
|
</project-modules>
|
||||||
|
|
|
@ -3,13 +3,14 @@
|
||||||
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.12.1-SNAPSHOT]
|
## [v1.13.0-SNAPSHOT]
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Switched dependency management to gcube-bom 2.0.0
|
- Switched dependency management to gcube-bom 2.0.0
|
||||||
|
- moved to storagehub
|
||||||
|
|
||||||
## [v1.12.0] [r4.24.0] - 2020-06-19
|
## [v1.12.0] - 2020-06-19
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
|
21
pom.xml
21
pom.xml
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
<groupId>org.gcube.data-catalogue</groupId>
|
<groupId>org.gcube.data-catalogue</groupId>
|
||||||
<artifactId>grsf-publisher-ws</artifactId>
|
<artifactId>grsf-publisher-ws</artifactId>
|
||||||
<version>1.12.1-SNAPSHOT</version>
|
<version>1.13.0-SNAPSHOT</version>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<name>grsf-publisher-ws</name>
|
<name>grsf-publisher-ws</name>
|
||||||
<description>Utility library to publish GRSF products on GRSF catalogue.</description>
|
<description>Utility library to publish GRSF products on GRSF catalogue.</description>
|
||||||
|
@ -52,6 +52,11 @@
|
||||||
<artifactId>grsf-common-library</artifactId>
|
<artifactId>grsf-common-library</artifactId>
|
||||||
<version>[1-0-0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
<version>[1-0-0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.common</groupId>
|
||||||
|
<artifactId>storagehub-client-library</artifactId>
|
||||||
|
<version>[1.0.0, 2.0.0-SNAPSHOT)</version>
|
||||||
|
</dependency>
|
||||||
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
|
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jsoup</groupId>
|
<groupId>org.jsoup</groupId>
|
||||||
|
@ -100,12 +105,7 @@
|
||||||
<artifactId>authorization-client</artifactId>
|
<artifactId>authorization-client</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.common</groupId>
|
|
||||||
<artifactId>home-library-jcr</artifactId>
|
|
||||||
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.common</groupId>
|
<groupId>org.gcube.common</groupId>
|
||||||
<artifactId>common-authorization</artifactId>
|
<artifactId>common-authorization</artifactId>
|
||||||
|
@ -157,12 +157,7 @@
|
||||||
<artifactId>common-smartgears</artifactId>
|
<artifactId>common-smartgears</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.common</groupId>
|
|
||||||
<artifactId>home-library</artifactId>
|
|
||||||
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
|
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
|
||||||
<artifactId>jersey-test-framework-provider-jetty</artifactId>
|
<artifactId>jersey-test-framework-provider-jetty</artifactId>
|
||||||
|
|
|
@ -5,7 +5,6 @@ import static org.gcube.resources.discovery.icclient.ICFactory.client;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
|
@ -20,15 +19,11 @@ import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
|
||||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalFile;
|
|
||||||
import org.gcube.common.resources.gcore.utils.XPathHelper;
|
import org.gcube.common.resources.gcore.utils.XPathHelper;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
||||||
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||||
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogue;
|
import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogue;
|
||||||
import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogueFactory;
|
import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogueFactory;
|
||||||
import org.gcube.datacatalogue.common.caches.CacheImpl;
|
import org.gcube.datacatalogue.common.caches.CacheImpl;
|
||||||
|
@ -74,7 +69,6 @@ public abstract class HelperMethods {
|
||||||
public static final String MANAGE_CONTEX_KEY = "ManageVRE";
|
public static final String MANAGE_CONTEX_KEY = "ManageVRE";
|
||||||
public static final String PREVALIDATE_CONTEX_KEY = "PreValidateVRE";
|
public static final String PREVALIDATE_CONTEX_KEY = "PreValidateVRE";
|
||||||
public static final String PUBLIC_CONTEX_KEY = "PublicVRE";
|
public static final String PUBLIC_CONTEX_KEY = "PublicVRE";
|
||||||
private static final String CSV_MIME = "text/csv";
|
|
||||||
private static final String PATH_SEPARATOR = "/";
|
private static final String PATH_SEPARATOR = "/";
|
||||||
|
|
||||||
// caches
|
// caches
|
||||||
|
@ -258,26 +252,17 @@ public abstract class HelperMethods {
|
||||||
* @param csvFile
|
* @param csvFile
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static ExternalFile uploadExternalFile(WorkspaceFolder resourceFormatFolder, String resourceToAttachName, String description, File csvFile) {
|
public static FileContainer uploadExternalFile(FolderContainer resourceFormatFolder, String resourceToAttachName, String description, File csvFile) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
WorkspaceItem existsFile = resourceFormatFolder.find(resourceToAttachName);
|
try (InputStream is= new FileInputStream(csvFile)) {
|
||||||
|
FileContainer fileContainer = resourceFormatFolder.uploadFile(is , resourceToAttachName, description);
|
||||||
if(existsFile == null)
|
return fileContainer;
|
||||||
return resourceFormatFolder.createExternalFileItem(resourceToAttachName, description, CSV_MIME, csvFile);
|
|
||||||
else{
|
|
||||||
InputStream targetStream = new FileInputStream(csvFile);
|
|
||||||
existsFile.updateItem(targetStream);
|
|
||||||
return (ExternalFile)existsFile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (InsufficientPrivilegesException | ItemAlreadyExistException
|
} catch (StorageHubException she) {
|
||||||
| InternalErrorException e) {
|
logger.error("Failed to upload the file into the workspace shared folder for " + resourceToAttachName, she);
|
||||||
logger.error("Failed to upload the file into the workspace shared folder for " + resourceToAttachName, e);
|
} catch (Exception e) {
|
||||||
} catch (FileNotFoundException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (ItemNotFoundException e) {
|
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -291,9 +276,10 @@ public abstract class HelperMethods {
|
||||||
* @param subPath
|
* @param subPath
|
||||||
* @return null if an error occurred
|
* @return null if an error occurred
|
||||||
*/
|
*/
|
||||||
public static WorkspaceFolder createOrGetSubFoldersByPath(WorkspaceFolder folder, String subPath){
|
public static FolderContainer createOrGetSubFoldersByPath(FolderContainer folder, String subPath){
|
||||||
|
|
||||||
|
FolderContainer parentFolder = folder;
|
||||||
|
|
||||||
WorkspaceFolder parentFolder = folder;
|
|
||||||
if(folder == null)
|
if(folder == null)
|
||||||
throw new IllegalArgumentException("Root folder is null!");
|
throw new IllegalArgumentException("Root folder is null!");
|
||||||
|
|
||||||
|
@ -312,8 +298,9 @@ public abstract class HelperMethods {
|
||||||
String[] splittedPaths = subPath.split(PATH_SEPARATOR);
|
String[] splittedPaths = subPath.split(PATH_SEPARATOR);
|
||||||
|
|
||||||
for (String path : splittedPaths) {
|
for (String path : splittedPaths) {
|
||||||
WorkspaceFolder createdFolder = getFolderOrCreate(parentFolder, path, "");
|
|
||||||
logger.debug("Created subfolder with path " + createdFolder.getPath());
|
FolderContainer createdFolder = getFolderOrCreate(parentFolder, path, "");
|
||||||
|
logger.debug("Created subfolder with path " + createdFolder.get().getPath());
|
||||||
parentFolder = createdFolder;
|
parentFolder = createdFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,23 +316,18 @@ public abstract class HelperMethods {
|
||||||
* Get a folder within the catalogue folder or create it if it doesn't exist.
|
* Get a folder within the catalogue folder or create it if it doesn't exist.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static WorkspaceFolder getFolderOrCreate(WorkspaceFolder folder, String relativePath, String descriptionFolder){
|
public static FolderContainer getFolderOrCreate(FolderContainer folder, String relativePath, String descriptionFolder){
|
||||||
WorkspaceFolder result = null;
|
|
||||||
try {
|
FolderContainer result = null;
|
||||||
WorkspaceItem foundFolder = folder.find(relativePath);
|
try {
|
||||||
if(foundFolder != null && foundFolder.isFolder())
|
result = folder.openByRelativePath(relativePath).asFolder();
|
||||||
result = (WorkspaceFolder)foundFolder;
|
|
||||||
|
|
||||||
if(result != null)
|
|
||||||
logger.debug("Folder found with name " + result.getName() + ", it has id " + result.getId());
|
|
||||||
else
|
|
||||||
throw new Exception("There is no folder with name " + relativePath + " under folder " + folder.getName());
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.debug("Probably the folder doesn't exist");
|
logger.debug("Probably the folder doesn't exist");
|
||||||
try{
|
try{
|
||||||
result = folder.createFolder(relativePath, descriptionFolder);
|
result = folder.newFolder(relativePath, descriptionFolder);
|
||||||
} catch (InsufficientPrivilegesException | InternalErrorException | ItemAlreadyExistException e2) {
|
} catch (StorageHubException se) {
|
||||||
logger.error("Failed to get or generate this folder", e2);
|
logger.error("Failed to get or generate this folder", se);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package org.gcube.data_catalogue.grsf_publish_ws.utils.csv;
|
package org.gcube.data_catalogue.grsf_publish_ws.utils.csv;
|
||||||
|
|
||||||
import java.beans.IntrospectionException;
|
|
||||||
import java.beans.PropertyDescriptor;
|
import java.beans.PropertyDescriptor;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
@ -8,18 +7,11 @@ import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
import org.gcube.common.homelibrary.home.HomeLibrary;
|
|
||||||
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
|
||||||
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
|
||||||
import org.gcube.common.homelibrary.home.exceptions.UserNotFoundException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.catalogue.WorkspaceCatalogue;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalFile;
|
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
||||||
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||||
|
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
|
||||||
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.CustomField;
|
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.CustomField;
|
||||||
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.TimeSeries;
|
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.TimeSeries;
|
||||||
import org.gcube.data_catalogue.grsf_publish_ws.json.input.record.Common;
|
import org.gcube.data_catalogue.grsf_publish_ws.json.input.record.Common;
|
||||||
|
@ -42,13 +34,15 @@ public class ManageTimeSeriesThread extends Thread{
|
||||||
|
|
||||||
private static final String PATH_SEPARATOR = "/";
|
private static final String PATH_SEPARATOR = "/";
|
||||||
|
|
||||||
|
private static final String CATALOGUE_FOLDER = ".catalogue";
|
||||||
|
|
||||||
// Logger
|
// Logger
|
||||||
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(ManageTimeSeriesThread.class);
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(ManageTimeSeriesThread.class);
|
||||||
|
|
||||||
// try to attach the source at most CHANCES times ..
|
// try to attach the source at most CHANCES times ..
|
||||||
private static final int CHANCES = 10;
|
private static final int CHANCES = 10;
|
||||||
|
|
||||||
private static CacheInterface<String, WorkspaceCatalogue> vreFolderCache = new CacheImpl<String, WorkspaceCatalogue>(1000 * 60 * 60 * 24);
|
private static CacheInterface<String, FolderContainer> vreFolderCache = new CacheImpl<String, FolderContainer>(1000 * 60 * 60 * 24);
|
||||||
|
|
||||||
private static final int MAX_NAME_CSV_FILE_WITHOUT_MEASURE = 50;
|
private static final int MAX_NAME_CSV_FILE_WITHOUT_MEASURE = 50;
|
||||||
|
|
||||||
|
@ -96,17 +90,7 @@ public class ManageTimeSeriesThread extends Thread{
|
||||||
logger.error("Error was " + e.getMessage());
|
logger.error("Error was " + e.getMessage());
|
||||||
} catch (InvocationTargetException e) {
|
} catch (InvocationTargetException e) {
|
||||||
logger.error("Error was " + e.getMessage());
|
logger.error("Error was " + e.getMessage());
|
||||||
} catch (WorkspaceFolderNotFoundException e) {
|
} catch (StorageHubException e) {
|
||||||
logger.error("Error was " + e.getMessage());
|
|
||||||
} catch (ItemNotFoundException e) {
|
|
||||||
logger.error("Error was " + e.getMessage());
|
|
||||||
} catch (IntrospectionException e) {
|
|
||||||
logger.error("Error was " + e.getMessage());
|
|
||||||
} catch (InternalErrorException e) {
|
|
||||||
logger.error("Error was " + e.getMessage());
|
|
||||||
} catch (HomeNotFoundException e) {
|
|
||||||
logger.error("Error was " + e.getMessage());
|
|
||||||
} catch (UserNotFoundException e) {
|
|
||||||
logger.error("Error was " + e.getMessage());
|
logger.error("Error was " + e.getMessage());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Error was " + e.getMessage());
|
logger.error("Error was " + e.getMessage());
|
||||||
|
@ -130,17 +114,26 @@ public class ManageTimeSeriesThread extends Thread{
|
||||||
if(record == null)
|
if(record == null)
|
||||||
throw new IllegalArgumentException("The given record is null!!");
|
throw new IllegalArgumentException("The given record is null!!");
|
||||||
|
|
||||||
|
StorageHubClient shClient = new StorageHubClient();
|
||||||
|
|
||||||
String token = SecurityTokenProvider.instance.get();
|
String token = SecurityTokenProvider.instance.get();
|
||||||
|
|
||||||
WorkspaceCatalogue catalogueFolder = null;
|
FolderContainer catalogueFolder = null;
|
||||||
|
|
||||||
|
//WorkspaceCatalogue catalogueFolder = null;
|
||||||
if((catalogueFolder = vreFolderCache.get(token)) == null){
|
if((catalogueFolder = vreFolderCache.get(token)) == null){
|
||||||
Workspace ws = HomeLibrary.getHomeManagerFactory().getHomeManager().getHome().getWorkspace();
|
//Workspace ws = HomeLibrary.getHomeManagerFactory().getHomeManager().getHome().getWorkspace();
|
||||||
WorkspaceSharedFolder vreFolder = ws.getVREFolderByScope(ScopeProvider.instance.get());
|
FolderContainer vreFolder = shClient.openVREFolder();
|
||||||
catalogueFolder = vreFolder.getVRECatalogue();
|
try {
|
||||||
|
catalogueFolder = vreFolder.openByRelativePath(CATALOGUE_FOLDER).asFolder();
|
||||||
|
}catch (StorageHubException e) {
|
||||||
|
catalogueFolder = vreFolder.newHiddenFolder(CATALOGUE_FOLDER, "catalogue folder");
|
||||||
|
}
|
||||||
|
|
||||||
vreFolderCache.insert(token, catalogueFolder);
|
vreFolderCache.insert(token, catalogueFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.debug("Catalogue folder in vre has path " + catalogueFolder.getPath());
|
logger.debug("Catalogue folder in vre has path " + catalogueFolder.get().getPath());
|
||||||
|
|
||||||
// the structure under the .catalogue will be as follows:
|
// the structure under the .catalogue will be as follows:
|
||||||
// .catalogue:
|
// .catalogue:
|
||||||
|
@ -167,7 +160,7 @@ public class ManageTimeSeriesThread extends Thread{
|
||||||
// the whole path of the directory is going to be...
|
// the whole path of the directory is going to be...
|
||||||
String csvDirectoryForThisProduct = recordTypeFolderName + PATH_SEPARATOR + firstLetter + PATH_SEPARATOR + replaceIllegalChars(uuidKB, "_") + PATH_SEPARATOR + CSVUtils.CSV_EXTENSION.replace(".", "");
|
String csvDirectoryForThisProduct = recordTypeFolderName + PATH_SEPARATOR + firstLetter + PATH_SEPARATOR + replaceIllegalChars(uuidKB, "_") + PATH_SEPARATOR + CSVUtils.CSV_EXTENSION.replace(".", "");
|
||||||
logger.debug("The path under which the time series are going to be saved is " + csvDirectoryForThisProduct);
|
logger.debug("The path under which the time series are going to be saved is " + csvDirectoryForThisProduct);
|
||||||
WorkspaceFolder csvFolder = HelperMethods.createOrGetSubFoldersByPath(catalogueFolder, csvDirectoryForThisProduct);
|
FolderContainer csvFolder = HelperMethods.createOrGetSubFoldersByPath(catalogueFolder, csvDirectoryForThisProduct);
|
||||||
|
|
||||||
if(csvFolder == null)
|
if(csvFolder == null)
|
||||||
logger.error("Failed to create directory where csv files will be deployed in the workspace!!");
|
logger.error("Failed to create directory where csv files will be deployed in the workspace!!");
|
||||||
|
@ -192,7 +185,7 @@ public class ManageTimeSeriesThread extends Thread{
|
||||||
String resourceToAttachOnCkanDescription = productName;
|
String resourceToAttachOnCkanDescription = productName;
|
||||||
|
|
||||||
CkanResourceBase ckanResource = null;
|
CkanResourceBase ckanResource = null;
|
||||||
ExternalFile createdFileOnWorkspace = null;
|
FileContainer createdFileOnWorkspace = null;
|
||||||
String[] relevantSources = new String[1];
|
String[] relevantSources = new String[1];
|
||||||
File csvFile = CSVUtils.listToCSV(asList, relevantSources);
|
File csvFile = CSVUtils.listToCSV(asList, relevantSources);
|
||||||
if(csvFile != null){
|
if(csvFile != null){
|
||||||
|
@ -212,7 +205,7 @@ public class ManageTimeSeriesThread extends Thread{
|
||||||
+ customAnnotation.key() + CSVUtils.CSV_EXTENSION, resourceToAttachOnCkanDescription, csvFile);
|
+ customAnnotation.key() + CSVUtils.CSV_EXTENSION, resourceToAttachOnCkanDescription, csvFile);
|
||||||
|
|
||||||
if(createdFileOnWorkspace != null){
|
if(createdFileOnWorkspace != null){
|
||||||
String publicUrlToSetOnCkan = createdFileOnWorkspace.getPublicLink(true);
|
String publicUrlToSetOnCkan = createdFileOnWorkspace.getPublicLink().toString();
|
||||||
|
|
||||||
// wait for patching..
|
// wait for patching..
|
||||||
Thread.sleep(1500);
|
Thread.sleep(1500);
|
||||||
|
|
|
@ -13,17 +13,6 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
|
||||||
import org.gcube.common.homelibrary.home.HomeLibrary;
|
|
||||||
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.catalogue.WorkspaceCatalogue;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException;
|
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
|
||||||
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.CustomField;
|
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.CustomField;
|
||||||
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.Group;
|
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.Group;
|
||||||
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.Tag;
|
import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.Tag;
|
||||||
|
@ -238,129 +227,8 @@ public class JTests {
|
||||||
instance.uploadResourceFile(csvFile, datasetName, instance.getApiKeyFromUsername("costantino.perciante"), "random_name.csv", null, null, null);
|
instance.uploadResourceFile(csvFile, datasetName, instance.getApiKeyFromUsername("costantino.perciante"), "random_name.csv", null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Test
|
|
||||||
public void sharedVREFolderWriteTest() throws Exception{
|
|
||||||
|
|
||||||
String token = "";
|
|
||||||
String context = "/gcube/devNext/NextNext";
|
|
||||||
|
|
||||||
ScopeProvider.instance.set(context);
|
|
||||||
SecurityTokenProvider.instance.set(token);
|
|
||||||
|
|
||||||
Workspace ws = HomeLibrary.getHomeManagerFactory().getHomeManager().getHome().getWorkspace();
|
|
||||||
|
|
||||||
// Get a VRE folder by scope
|
|
||||||
WorkspaceSharedFolder vreFolder = ws.getVREFolderByScope(context);
|
|
||||||
|
|
||||||
//Get the VRE Folder catalogue
|
|
||||||
WorkspaceCatalogue catalogueFolder = vreFolder.getVRECatalogue();
|
|
||||||
|
|
||||||
logger.debug("Catalogue folder retrieved " + catalogueFolder.getName());
|
|
||||||
|
|
||||||
// WorkspaceItem stockFolder = catalogueFolder.find("stock");
|
|
||||||
|
|
||||||
// vreFolder.removeChild(stockFolder);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test is
|
|
||||||
* .catalogue:
|
|
||||||
* -test
|
|
||||||
* - a
|
|
||||||
* -aproductwiththisname
|
|
||||||
* - csv
|
|
||||||
* - testfile.csv
|
|
||||||
*/
|
|
||||||
|
|
||||||
String allSubPath = "/test/a/aproductwiththisname/";
|
|
||||||
//WorkspaceFolder lastFolder = createGetSubFoldersByPath(catalogueFolder, allSubPath);
|
|
||||||
// WorkspaceFolder recordFolder = (WorkspaceFolder)getFolderOrCreate(catalogueFolder, "test", "");
|
|
||||||
// String firstLetter = "a";
|
|
||||||
// WorkspaceFolder firstLetterFolder = (WorkspaceFolder)getFolderOrCreate(recordFolder, firstLetter, "");
|
|
||||||
// String folderPath = "aproductwiththisname";
|
|
||||||
// WorkspaceFolder productFolder = (WorkspaceFolder)getFolderOrCreate(firstLetterFolder, folderPath, "");
|
|
||||||
//logger.debug("Test folder created/get..its path is " + lastFolder.getPath());
|
|
||||||
// String ccsvUnderProductFolderName = productFolderName + "/" + "csv";
|
|
||||||
// WorkspaceFolder csvUnderProductFolder = (WorkspaceFolder)getFolderOrCreate(catalogueFolder, ccsvUnderProductFolderName, "");
|
|
||||||
//
|
|
||||||
// logger.debug("FOLDERS created " + csvUnderProductFolder.getPath());
|
|
||||||
// treeCheck(catalogueFolder);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void treeCheck(WorkspaceFolder rootFolder) throws InternalErrorException{
|
|
||||||
List<WorkspaceItem> children = rootFolder.getChildren();
|
|
||||||
for (WorkspaceItem workspaceItem : children) {
|
|
||||||
if(workspaceItem.isFolder()){
|
|
||||||
logger.debug("children folder is " + workspaceItem.getName());
|
|
||||||
treeCheck((WorkspaceFolder)workspaceItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create subfolders in cascade, returning the last created ones
|
|
||||||
* It could be also used for getting them if they already exists
|
|
||||||
* @param folder
|
|
||||||
* @param subPath
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private static WorkspaceFolder createGetSubFoldersByPath(WorkspaceFolder folder, String subPath){
|
|
||||||
|
|
||||||
String pathSeparator = "/";
|
|
||||||
WorkspaceFolder parentFolder = folder;
|
|
||||||
if(folder == null)
|
|
||||||
throw new IllegalArgumentException("Root folder is null!");
|
|
||||||
|
|
||||||
if(subPath == null || subPath.isEmpty())
|
|
||||||
throw new IllegalArgumentException("subPath is null/empty!");
|
|
||||||
|
|
||||||
try{
|
|
||||||
if(subPath.startsWith(pathSeparator))
|
|
||||||
subPath = subPath.replaceFirst(pathSeparator, "");
|
|
||||||
|
|
||||||
if(subPath.endsWith(subPath))
|
|
||||||
subPath = subPath.substring(0, subPath.length() - 1);
|
|
||||||
|
|
||||||
logger.debug("Splitting path " + subPath);
|
|
||||||
|
|
||||||
String[] splittedPaths = subPath.split(pathSeparator);
|
|
||||||
|
|
||||||
for (String path : splittedPaths) {
|
|
||||||
WorkspaceFolder createdFolder = getFolderOrCreate(parentFolder, path, "");
|
|
||||||
logger.debug("Created subfolder with path " + createdFolder.getPath());
|
|
||||||
parentFolder = createdFolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
}catch(Exception e){
|
|
||||||
logger.error("Failed to create the subfolders by path " + subPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
return parentFolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a folder within the catalogue folder or create it if it doesn't exist.
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private static WorkspaceFolder getFolderOrCreate(WorkspaceFolder folder, String relativePath, String descriptionFolder){
|
|
||||||
WorkspaceFolder result = null;
|
|
||||||
try {
|
|
||||||
if(folder.exists(relativePath) && folder.find(relativePath).isFolder())
|
|
||||||
result = (WorkspaceFolder) folder.find(relativePath);
|
|
||||||
if(result != null)
|
|
||||||
logger.debug("Folder found with name " + result.getName() + ", it has id " + result.getId());
|
|
||||||
else
|
|
||||||
throw new Exception("There is no folder with name " + relativePath + " under foler " + folder.getName());
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.debug("Probably the folder doesn't exist", e);
|
|
||||||
try{
|
|
||||||
result = folder.createFolder(relativePath, descriptionFolder);
|
|
||||||
} catch (InsufficientPrivilegesException | InternalErrorException | ItemAlreadyExistException e2) {
|
|
||||||
logger.error("Failed to get or generate this folder", e2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//@Test
|
//@Test
|
||||||
public void GRSFServiceUrl() throws Exception{
|
public void GRSFServiceUrl() throws Exception{
|
||||||
|
|
Loading…
Reference in New Issue