/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.start.validators.internal; import java.io.File; import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import de.rcenvironment.core.configuration.ConfigurationService; import de.rcenvironment.core.start.common.validation.api.InstanceValidationResult; import de.rcenvironment.core.start.common.validation.api.InstanceValidationResultFactory; import de.rcenvironment.core.start.common.validation.spi.DefaultInstanceValidator; import de.rcenvironment.core.utils.common.StringUtils; import de.rcenvironment.core.utils.common.TempFileService; import de.rcenvironment.core.utils.common.TempFileServiceAccess; /** * Validates that the instance's managed temp directory provided by TempFileService can actually be written to. This is simply tested by * requesting a temporary file, and checking if it was successfully created. * * @author Robert Mischke */ public class TempDirectoryWritableValidator extends DefaultInstanceValidator { private ConfigurationService configurationService; private final Log log = LogFactory.getLog(getClass()); @Override public InstanceValidationResult validate() { final String validationDisplayName = "RCE temp directory"; TempFileService tempFileService = TempFileServiceAccess.getInstance(); log.debug("Initializing temp file service and creating a test file"); File tempFile; try { tempFile = tempFileService.createTempFileFromPattern("check.*.tmp"); boolean canRead = tempFile.canRead(); // Clean up test file. Even if we are not allowed to read the file, we are still able to delete it, since this depends on the // granted permissions wrt. the parent directory. tempFileService.disposeManagedTempDirOrFile(tempFile); if (canRead) { // all ok, no error return InstanceValidationResultFactory.createResultForPassed(validationDisplayName); } else { // unlikely case, but that's what validation is for... log.error("Creating a temporary test file succeeded, but was not readable afterwards; " + "a validation error will be generated"); } } catch (IOException e) { log.error("Error creating a temporary test file; a validation error will be generated", e); } String errorMessage = StringUtils.format(Messages.failedToCreateTempFile, configurationService.getParentTempDirectoryRoot().getAbsolutePath()); return InstanceValidationResultFactory.createResultForFailureWhichRequiresInstanceShutdown( validationDisplayName, errorMessage); } protected void bindConfigurationService(ConfigurationService configIn) { configurationService = configIn; } }