tikhomirov@287: /* tikhomirov@287: * Copyright (c) 2011 TMate Software Ltd tikhomirov@287: * tikhomirov@287: * This program is free software; you can redistribute it and/or modify tikhomirov@287: * it under the terms of the GNU General Public License as published by tikhomirov@287: * the Free Software Foundation; version 2 of the License. tikhomirov@287: * tikhomirov@287: * This program is distributed in the hope that it will be useful, tikhomirov@287: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@287: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@287: * GNU General Public License for more details. tikhomirov@287: * tikhomirov@287: * For information on how to redistribute this software under tikhomirov@287: * the terms of a license other than GNU General Public License tikhomirov@287: * contact TMate Software at support@hg4j.com tikhomirov@287: */ tikhomirov@287: package org.tmatesoft.hg.util; tikhomirov@287: tikhomirov@287: import java.io.File; tikhomirov@287: import java.io.FileInputStream; tikhomirov@287: import java.io.FileNotFoundException; tikhomirov@287: import java.io.IOException; tikhomirov@287: import java.nio.ByteBuffer; tikhomirov@287: import java.nio.channels.ReadableByteChannel; tikhomirov@287: tikhomirov@295: import org.tmatesoft.hg.internal.StreamLogFacility; tikhomirov@295: tikhomirov@287: /** tikhomirov@287: * tikhomirov@287: * @author Artem Tikhomirov tikhomirov@287: * @author TMate Software Ltd. tikhomirov@287: */ tikhomirov@287: public class RegularFileInfo implements FileInfo { tikhomirov@287: private File file; tikhomirov@287: tikhomirov@287: public RegularFileInfo() { tikhomirov@287: } tikhomirov@287: tikhomirov@287: public void init(File f) { tikhomirov@287: file = f; tikhomirov@287: } tikhomirov@287: tikhomirov@287: public boolean exists() { tikhomirov@287: return file.canRead() && file.isFile(); tikhomirov@287: } tikhomirov@287: tikhomirov@287: public int lastModified() { tikhomirov@287: return (int) (file.lastModified() / 1000); tikhomirov@287: } tikhomirov@287: tikhomirov@287: public long length() { tikhomirov@287: return file.length(); tikhomirov@287: } tikhomirov@287: tikhomirov@287: public ReadableByteChannel newInputChannel() { tikhomirov@287: try { tikhomirov@287: return new FileInputStream(file).getChannel(); tikhomirov@287: } catch (FileNotFoundException ex) { tikhomirov@295: StreamLogFacility.newDefault().debug(getClass(), ex, null); tikhomirov@287: // shall not happen, provided this class is used correctly tikhomirov@287: return new ReadableByteChannel() { tikhomirov@287: tikhomirov@287: public boolean isOpen() { tikhomirov@287: return true; tikhomirov@287: } tikhomirov@287: tikhomirov@287: public void close() throws IOException { tikhomirov@287: } tikhomirov@287: tikhomirov@287: public int read(ByteBuffer dst) throws IOException { tikhomirov@287: // EOF right away tikhomirov@287: return -1; tikhomirov@287: } tikhomirov@287: }; tikhomirov@287: } tikhomirov@287: } tikhomirov@287: tikhomirov@287: }