From ee230b9250b12be496eb9de3f600692263222cc1 Mon Sep 17 00:00:00 2001 From: Sarah F Date: Fri, 14 Apr 2017 20:54:33 +0000 Subject: [PATCH 1/2] Updated Cloud Storage Access to contain actual text of container name --- .../edu/harvard/iq/dataverse/DatasetPage.java | 16 ++++++++++++++++ .../iq/dataverse/dataaccess/DataAccess.java | 13 ++++++------- .../iq/dataverse/dataaccess/DataFileIO.java | 10 ++++++++++ .../iq/dataverse/dataaccess/SwiftAccessIO.java | 12 ++++++++---- src/main/webapp/filesFragment.xhtml | 3 +-- 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 882c4e30c8d..bfa2d84a53e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -1,6 +1,7 @@ package edu.harvard.iq.dataverse; import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean; +import edu.harvard.iq.dataverse.dataaccess.SwiftAccessIO; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.providers.builtin.BuiltinUserServiceBean; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; @@ -350,6 +351,21 @@ public String getDataverseSiteUrl() { public void setDataverseSiteUrl(String dataverseSiteUrl) { this.dataverseSiteUrl = dataverseSiteUrl; } + + public String getSwiftContainerName(){ + String swiftContainerName = null; + String swiftFolderPathSeparator = "_"; + if (persistentId != null) { + dataset = datasetService.findByGlobalId(persistentId); + String authorityNoSlashes = dataset.getAuthority().replace(dataset.getDoiSeparator(), swiftFolderPathSeparator); + swiftContainerName = dataset.getProtocol() + swiftFolderPathSeparator + authorityNoSlashes.replace(".", swiftFolderPathSeparator) + + swiftFolderPathSeparator + dataset.getIdentifier(); + logger.info("Swift container name: " + swiftContainerName); + } + + return swiftContainerName; + } + public DataFile getSelectedDownloadFile() { return selectedDownloadFile; diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/DataAccess.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/DataAccess.java index e0b3d6c649e..2fbb768e674 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/DataAccess.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/DataAccess.java @@ -37,7 +37,6 @@ public DataAccess() { // set by the user in glassfish-setup.sh if DEFFAULT_STORAGE_DRIVER_IDENTIFIER = swift public static final String DEFAULT_STORAGE_DRIVER_IDENTIFIER = System.getProperty("dataverse.files.storage-driver-id"); public static String swiftFileUri; - public static String swiftContainerUri; // The getDataFileIO() methods initialize DataFileIO objects for // datafiles that are already saved using one of the supported Dataverse @@ -118,11 +117,11 @@ public static String getSwiftFileURI(StoredObject fileObject) throws IOException return fileUri; } - public static String getSwiftContainerURI(StoredObject fileObject) throws IOException { - String containerUri; - containerUri = getSwiftFileURI(fileObject); - containerUri = containerUri.substring(0, containerUri.lastIndexOf('/')); - return containerUri; - } + // public static String getSwiftContainer(StoredObject fileObject) throws IOException { + // String containerUri; + // containerUri = getSwiftFileURI(fileObject); + // containerUri = containerUri.substring(0, containerUri.lastIndexOf('/')); + // return containerUri; + // } } \ No newline at end of file diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/DataFileIO.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/DataFileIO.java index e17b46526a1..31e1deab3a6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/DataFileIO.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/DataFileIO.java @@ -120,6 +120,8 @@ public DataFileIO(DataFile dataFile, DataAccessRequest req) { private String varHeader; private String errorMessage; + //private String swiftContainerName; + private Boolean isLocalFile = false; private Boolean isRemoteAccess = false; private Boolean isHttpAccess = false; @@ -271,6 +273,10 @@ public String getRemoteUrl() { return remoteUrl; } + // public String getSwiftContainerName(){ + // return swiftContainerName; + // } + public GetMethod getHTTPMethod() { return method; } @@ -356,6 +362,10 @@ public void setRemoteUrl(String u) { remoteUrl = u; } + // public void setSwiftContainerName(String u){ + // swiftContainerName = u; + // } + public void setHTTPMethod(GetMethod hm) { method = hm; } diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/SwiftAccessIO.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/SwiftAccessIO.java index 7c8385adf5d..cda61271921 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/SwiftAccessIO.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/SwiftAccessIO.java @@ -275,9 +275,12 @@ private StoredObject initializeSwiftFileObject(boolean writeAccess) throws IOExc //swiftFolderPath = this.getDataFile().getOwner().getDisplayName(); String swiftFolderPathSeparator = "_"; - swiftFolderPath = this.getDataFile().getOwner().getAuthority().replace(this.getDataFile().getOwner().getDoiSeparator(), swiftFolderPathSeparator) + + String authorityNoSlashes = this.getDataFile().getOwner().getAuthority().replace(this.getDataFile().getOwner().getDoiSeparator(), swiftFolderPathSeparator); + swiftFolderPath = this.getDataFile().getOwner().getProtocol() + swiftFolderPathSeparator + + authorityNoSlashes.replace(".", swiftFolderPathSeparator) + swiftFolderPathSeparator + this.getDataFile().getOwner().getIdentifier(); swiftFileName = storageIdentifier; + //setSwiftContainerName(swiftFolderPath); //swiftFileName = this.getDataFile().getDisplayName(); //Storage Identifier is now updated after the object is uploaded on Swift. this.getDataFile().setStorageIdentifier("swift://"+swiftEndPoint+":"+swiftFolderPath+":"+swiftFileName); @@ -324,9 +327,7 @@ private StoredObject initializeSwiftFileObject(boolean writeAccess) throws IOExc setRemoteUrl(DataAccess.getSwiftFileURI(fileObject)); logger.info(DataAccess.swiftFileUri + " success"); - //shows contents of container for public containers - DataAccess.swiftContainerUri = DataAccess.getSwiftContainerURI(fileObject); - logger.info(DataAccess.swiftContainerUri + " success"); + if (!writeAccess && !fileObject.exists()) { throw new IOException("SwiftAccessIO: File object " + swiftFileName + " does not exist (Dataverse datafile id: " + this.getDataFile().getId()); @@ -368,6 +369,8 @@ Account authenticateWithSwift(String swiftEndPoint) throws IOException { String swiftEndPointSecretKey = p.getProperty("swift.password." + swiftEndPoint); String swiftEndPointTenantName = p.getProperty("swift.tenant." + swiftEndPoint); String swiftEndPointAuthMethod = p.getProperty("swift.auth_type." + swiftEndPoint); + String swiftEndPointUrl = p.getProperty("swift.swift_endpoint." + swiftEndPoint); + String swiftEndPointTenantId = p.getProperty("swift.tenant_id." + swiftEndPoint); if (swiftEndPointAuthUrl == null || swiftEndPointUsername == null || swiftEndPointSecretKey == null || "".equals(swiftEndPointAuthUrl) || "".equals(swiftEndPointUsername) || "".equals(swiftEndPointSecretKey)) { @@ -390,6 +393,7 @@ Account authenticateWithSwift(String swiftEndPoint) throws IOException { if (swiftEndPointAuthMethod.equals("keystone")) { account = new AccountFactory() .setTenantName(swiftEndPointTenantName) + // .setTenantId(swiftEndPointTenantId) .setUsername(swiftEndPointUsername) .setPassword(swiftEndPointSecretKey) .setAuthUrl(swiftEndPointAuthUrl) diff --git a/src/main/webapp/filesFragment.xhtml b/src/main/webapp/filesFragment.xhtml index d71fcb9dcbf..f8b01453e7d 100644 --- a/src/main/webapp/filesFragment.xhtml +++ b/src/main/webapp/filesFragment.xhtml @@ -55,8 +55,7 @@
- - + From 6d5dc7ffb5f15cbc8fddae092e74211a4dcef721 Mon Sep 17 00:00:00 2001 From: Sarah F Date: Fri, 21 Apr 2017 15:23:50 +0000 Subject: [PATCH 2/2] Merged updates and Updated Cloud Storage Access to contain actual text of container name --- .../harvard/iq/dataverse/dataaccess/SwiftAccessIO.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/SwiftAccessIO.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/SwiftAccessIO.java index cda61271921..2a25b70b83c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/SwiftAccessIO.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/SwiftAccessIO.java @@ -313,7 +313,14 @@ private StoredObject initializeSwiftFileObject(boolean writeAccess) throws IOExc if (!dataContainer.exists()) { if (writeAccess) { dataContainer.create(); - //dataContainer.makePublic(); + try { + dataContainer.makePublic(); + } + catch (Exception ex) { + ex.printStackTrace(); + throw new IOException("Failed to make container public"); + } + } else { // This is a fatal condition - it has to exist, if we were to // read an existing object! @@ -322,6 +329,7 @@ private StoredObject initializeSwiftFileObject(boolean writeAccess) throws IOExc } StoredObject fileObject = dataContainer.getObject(swiftFileName); + dataContainer.makePublic(); //set public //file download url for public files DataAccess.swiftFileUri = DataAccess.getSwiftFileURI(fileObject); setRemoteUrl(DataAccess.getSwiftFileURI(fileObject));