/******************************************************************************* * Copyright (c) 2016 Weasis Team and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nicolas Roduit - initial API and implementation *******************************************************************************/ package org.weasis.core.api.media.data; import java.io.File; import java.nio.file.Paths; import java.util.Objects; import java.util.Optional; import org.weasis.core.api.util.FileUtil; public class FileCache { private final MediaReader reader; private volatile File originalTempFile; private volatile File transformedFile; private volatile boolean requireTransformation; public FileCache(MediaReader reader) { this.reader = Objects.requireNonNull(reader); this.requireTransformation = false; } public boolean isLocalFile() { return reader.getUri().getScheme().startsWith("file"); //$NON-NLS-1$ } public boolean isElementInMemory() { return reader.getUri().getScheme().startsWith("data"); //$NON-NLS-1$ } public Optional<File> getOriginalFile() { File originalFile = null; if (originalTempFile != null) { originalFile = originalTempFile; } else if (isLocalFile()) { originalFile = Paths.get(reader.getUri()).toFile(); } return Optional.ofNullable(originalFile); } public File getFinalFile() { if (transformedFile != null) { return transformedFile; } return getOriginalFile().get(); } public File getOriginalTempFile() { return originalTempFile; } public void setOriginalTempFile(File downloadedFile) { this.originalTempFile = downloadedFile; } public File getTransformedFile() { return transformedFile; } public void setTransformedFile(File transformedFile) { this.transformedFile = transformedFile; } public boolean isRequireTransformation() { return requireTransformation; } public void setRequireTransformation(boolean requireTransformation) { this.requireTransformation = requireTransformation; } public long getLength() { Optional<File> f = getOriginalFile(); if (f.isPresent()) { return f.get().length(); } return 0L; } public long getLastModified() { Optional<File> f = getOriginalFile(); if (f.isPresent()) { return f.get().lastModified(); } return 0L; } public void dispose() { FileUtil.delete(originalTempFile); FileUtil.delete(transformedFile); } }