Skip to content

Commit

Permalink
refactor(collection): make logo location non-static IQSS#9662
Browse files Browse the repository at this point in the history
By introducing a new static method ThemeWidgetFragment.getLogoDir
all other places (api.Access, api.Dataverse, UpdateDataverseThemeCommand,
DataverseServiceBean) can use a lookup function from one central place
instead of building the path on their own.

Reducing code duplication also means we can more easily get the location
from a setting, enabling relocation of the data. That is especially
important for container usage.

Also, we can now use ConfigCheckService to detect if the folders we configured
are read/write accessible to us.
  • Loading branch information
poikilotherm committed Aug 22, 2023
1 parent 1db0042 commit 72722e7
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 26 deletions.
11 changes: 1 addition & 10 deletions src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -399,16 +399,7 @@ private File getLogo(Dataverse dataverse) {

DataverseTheme theme = dataverse.getDataverseTheme();
if (theme != null && theme.getLogo() != null && !theme.getLogo().isEmpty()) {
Properties p = System.getProperties();
String domainRoot = p.getProperty("com.sun.aas.instanceRoot");

if (domainRoot != null && !"".equals(domainRoot)) {
return new File (domainRoot + File.separator +
"docroot" + File.separator +
"logos" + File.separator +
dataverse.getLogoOwnerId() + File.separator +
theme.getLogo());
}
return ThemeWidgetFragment.getLogoDir(dataverse.getLogoOwnerId()).resolve(theme.getLogo()).toFile();
}

return null;
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/edu/harvard/iq/dataverse/ThemeWidgetFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@

import edu.harvard.iq.dataverse.engine.command.Command;
import edu.harvard.iq.dataverse.engine.command.impl.UpdateDataverseThemeCommand;
import edu.harvard.iq.dataverse.settings.JvmSettings;
import edu.harvard.iq.dataverse.util.BundleUtil;
import edu.harvard.iq.dataverse.util.JsfHelper;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.logging.Level;
Expand Down Expand Up @@ -49,6 +51,8 @@ public class ThemeWidgetFragment implements java.io.Serializable {
static final String DEFAULT_TEXT_COLOR = "888888";
private static final Logger logger = Logger.getLogger(ThemeWidgetFragment.class.getCanonicalName());

public static final String LOGOS_SUBDIR = "logos";
public static final String LOGOS_TEMP_SUBDIR = LOGOS_SUBDIR + File.separator + "temp";

private File tempDir;
private File uploadedFile;
Expand Down Expand Up @@ -86,12 +90,18 @@ public void setTaglineInput(HtmlInputText taglineInput) {
}



public static Path getLogoDir(String ownerId) {
return Path.of(JvmSettings.DOCROOT_DIRECTORY.lookup(), LOGOS_SUBDIR, ownerId);
}

private void createTempDir() {
private void createTempDir() {
try {
File tempRoot = Files.createDirectories(Paths.get("../docroot/logos/temp")).toFile();
tempDir = Files.createTempDirectory(tempRoot.toPath(),editDv.getId().toString()).toFile();
// Create the temporary space if not yet existing (will silently ignore preexisting)
// Note that the docroot directory is checked within ConfigCheckService for presence and write access.
Path tempRoot = Path.of(JvmSettings.DOCROOT_DIRECTORY.lookup(), LOGOS_TEMP_SUBDIR);
Files.createDirectories(tempRoot);

this.tempDir = Files.createTempDirectory(tempRoot, editDv.getId().toString()).toFile();
} catch (IOException e) {
throw new RuntimeException("Error creating temp directory", e); // improve error handling
}
Expand Down
12 changes: 2 additions & 10 deletions src/main/java/edu/harvard/iq/dataverse/api/Access.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import edu.harvard.iq.dataverse.RoleAssignment;
import edu.harvard.iq.dataverse.UserNotification;
import edu.harvard.iq.dataverse.UserNotificationServiceBean;
import edu.harvard.iq.dataverse.ThemeWidgetFragment;

import static edu.harvard.iq.dataverse.api.Datasets.handleVersion;

Expand Down Expand Up @@ -1196,16 +1197,7 @@ private File getLogo(Dataverse dataverse) {

DataverseTheme theme = dataverse.getDataverseTheme();
if (theme != null && theme.getLogo() != null && !theme.getLogo().equals("")) {
Properties p = System.getProperties();
String domainRoot = p.getProperty("com.sun.aas.instanceRoot");

if (domainRoot != null && !"".equals(domainRoot)) {
return new File (domainRoot + File.separator +
"docroot" + File.separator +
"logos" + File.separator +
dataverse.getLogoOwnerId() + File.separator +
theme.getLogo());
}
return ThemeWidgetFragment.getLogoDir(dataverse.getLogoOwnerId()).resolve(theme.getLogo()).toFile();
}

return null;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java
Original file line number Diff line number Diff line change
Expand Up @@ -976,6 +976,8 @@ public Response listAssignments(@Context ContainerRequestContext crc, @PathParam
*/
// File tempDir;
//
// TODO: Code duplicate in ThemeWidgetFragment. Maybe extract, make static and put some place else?
// Important: at least use JvmSettings.DOCROOT_DIRECTORY and not the hardcoded location!
// private void createTempDir(Dataverse editDv) {
// try {
// File tempRoot = java.nio.file.Files.createDirectories(Paths.get("../docroot/logos/temp")).toFile();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.harvard.iq.dataverse.engine.command.impl;

import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.ThemeWidgetFragment;
import edu.harvard.iq.dataverse.authorization.Permission;
import edu.harvard.iq.dataverse.engine.command.AbstractCommand;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
Expand All @@ -22,7 +23,6 @@
public class UpdateDataverseThemeCommand extends AbstractCommand<Dataverse> {
private final Dataverse editedDv;
private final File uploadedFile;
private final Path logoPath = Paths.get("../docroot/logos");
private String locate;

public UpdateDataverseThemeCommand(Dataverse editedDv, File uploadedFile, DataverseRequest aRequest, String location) {
Expand All @@ -44,7 +44,7 @@ public UpdateDataverseThemeCommand(Dataverse editedDv, File uploadedFile, Datave
public Dataverse execute(CommandContext ctxt) throws CommandException {
// Get current dataverse, so we can delete current logo file if necessary
Dataverse currentDv = ctxt.dataverses().find(editedDv.getId());
File logoFileDir = new File(logoPath.toFile(), editedDv.getId().toString());
File logoFileDir = ThemeWidgetFragment.getLogoDir(editedDv.getId().toString()).toFile();
File currentFile=null;

if (locate.equals("FOOTER")){
Expand Down

0 comments on commit 72722e7

Please sign in to comment.