/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.datamanagement.stateful; import java.io.File; import java.io.IOException; import java.io.Serializable; import java.util.Collection; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.communication.common.ResolvableNodeId; import de.rcenvironment.core.datamodel.types.api.DirectoryReferenceTD; import de.rcenvironment.core.datamodel.types.api.FileReferenceTD; import de.rcenvironment.core.utils.common.TempFileService; import de.rcenvironment.core.utils.common.TempFileServiceAccess; /** * A mock {@link StatefulComponentDataManagementService} that creates local temporary files and uses their absolute paths as references. * Useful for testing wrappers without a full data management backend. * * @author Robert Mischke */ public class TempFileMockComponentDataManagementService implements StatefulComponentDataManagementService { private static Log log = LogFactory.getLog(TempFileMockComponentDataManagementService.class); private TempFileService tempFileService = TempFileServiceAccess.getInstance(); // method does not make sense in this context, because this method implementation is only // intended to work locally @Override public void copyReferenceToLocalFile(String reference, File targetFile, Collection<ResolvableNodeId> platforms) throws IOException { // false = do not preserve timestamp FileUtils.copyFile(new File(reference), targetFile, false); } // method does not make sense in this context, because this method implementation is only // intended to work locally @Override public void copyReferenceToLocalFile(String reference, File targetFile, ResolvableNodeId platform) throws IOException { // false = do not preserve timestamp FileUtils.copyFile(new File(reference), targetFile, false); } @Override public String retrieveStringFromReference(String reference, InstanceNodeSessionId nodeId) throws IOException { return FileUtils.readFileToString(new File(reference)); } @Override public String createTaggedReferenceFromLocalFile(File file, String filename) throws IOException { // copy the file to a temporary file to take an immutable snapshot File tmpFile = tempFileService.createTempFileFromPattern("DMMock-" + file.getName() + "-*.tmp"); // tmpFile.deleteOnExit(); // false = do not preserve timestamp FileUtils.copyFile(file, tmpFile, false); String reference = tmpFile.getAbsolutePath(); if (log.isTraceEnabled()) { log.trace("Created reference " + reference + " for local file " + file.getAbsolutePath()); } return reference; } @Override public String createTaggedReferenceFromString(String object) throws IOException { // copy the file to a temporary file to take an immutable snapshot File tmpFile = tempFileService.createTempFileFromPattern("DMMock-*.tmp"); FileUtils.writeStringToFile(tmpFile, object); String reference = tmpFile.getAbsolutePath(); if (log.isTraceEnabled()) { log.trace("Created reference " + reference + " for String"); } return reference; } @Override public void addHistoryDataPoint(Serializable historyData, String userInfoText) throws IOException { // not supported, calls are silently ignored } @Override public FileReferenceTD createFileReferenceTDFromLocalFile(File file, String filename) throws IOException { // not supported, return null return null; } @Override public DirectoryReferenceTD createDirectoryReferenceTDFromLocalDirectory(File dir, String dirname) throws IOException { // not supported, return null return null; } @Override public void copyFileReferenceTDToLocalFile(FileReferenceTD fileReference, File targetFile, InstanceNodeSessionId node) throws IOException { // not supported, calls are silently ignored } @Override public void copyDirectoryReferenceTDToLocalDirectory(DirectoryReferenceTD dirReference, File targetDir, InstanceNodeSessionId node) throws IOException { // not supported, calls are silently ignored } }