/*
* @(#)XInputDirectoryImpl.java - implementation for files
*
* Copyright (c) 2004-2005 by roehrist, All Rights Reserved.
*
* This file is part of ProjectX, a free Java based demux utility.
* By the authors, ProjectX is intended for educational purposes only,
* as a non-commercial test project.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package net.sourceforge.dvb.projectx.xinput.file;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import net.sourceforge.dvb.projectx.xinput.DirType;
import net.sourceforge.dvb.projectx.xinput.XInputDirectoryIF;
import net.sourceforge.dvb.projectx.xinput.XInputFile;
import net.sourceforge.dvb.projectx.common.Common;
import net.sourceforge.dvb.projectx.common.Keys;
public class XInputDirectoryImpl implements XInputDirectoryIF {
private DirType dirType = null;
private File file = null;
private String testMsg = null;
/**
* Mustn't be used
*
* @throws UnsupportedOperationException
* Because it mustn't be used!
*/
private XInputDirectoryImpl() {
throw new UnsupportedOperationException("Usage is not allowed!");
}
/**
* Create a XInputDirectory of type DirType.FILE_DIR.
*
* @param aFile
* Directory data to use
* @throws IllegalArgumentException
* If aFile is not a directory
*/
public XInputDirectoryImpl(File aFile) {
if (aFile.exists() && aFile.isDirectory()) {
dirType = DirType.FILE_DIR;
file = aFile;
} else {
throw new IllegalArgumentException("aFile is not a directory!");
}
}
/**
* Create a XInputDirectory of type DirType.FILE_DIR.
*
* @param aFileIdentifier
* Directory name
* @throws IllegalArgumentException
* If aFile is not a directory
*/
public XInputDirectoryImpl(String aFileIdentifier) {
File f = new File(aFileIdentifier);
if (f.exists() && f.isDirectory()) {
dirType = DirType.FILE_DIR;
file = f;
} else {
throw new IllegalArgumentException("'" + aFileIdentifier + "' is not a directory!");
}
}
/**
* Get String representation of the object.
*
* @return String representation of the object
*/
public String toString() {
return file.getAbsolutePath();
}
/**
* Get path of directory
*
* @return Path of directory
*/
public String getDirectory() {
return file.getParent();
}
/**
* Get password for the ftp server
*
* @return Password for the ftp server
* @throws IllegalStateException
* If file type of object is not DirType.FTP_DIR
*/
public String getPassword() {
return "";
}
/**
* Get name or ip address of the ftp server
*
* @return Name or ip address of the ftp server
* @throws IllegalStateException
* If file type of object is not DirType.FTP_DIR
*/
public String getServer() {
return "";
}
/**
* Get port of the ftp server
*
* @return port of the ftp server
* @throws IllegalStateException
* If file type of object is not DirType.FTP_DIR
*/
public String getPort() {
return "";
}
/**
* Get user for the ftp server
*
* @return User for the ftp server
* @throws IllegalStateException
* If file type of object is not DirType.FTP_DIR
*/
public String getUser() {
return "";
}
/**
* Get log of communication with ftp server.
*
* @return Log of communication with ftp server
* @throws IllegalStateException
* If file type of object is not DirType.FTP_DIR
*/
public String getLog() {
return "";
}
/**
* Get files in the directory.
*
* @return files in the directory
*/
public XInputFile[] getFiles() {
ArrayList list = new ArrayList();
class MyFileFilter implements FileFilter {
public boolean accept(File pathname) {
return pathname.isFile();
}
}
File[] files = file.listFiles(new MyFileFilter());
for (int i = 0; i < files.length; i++)
list.add(files[i]);
if (Common.getSettings().getBooleanProperty(Keys.KEY_InputDirectoriesDepth))
getDirectories(file, list); // depth 1
XInputFile[] xInputFiles = new XInputFile[list.size()];
for (int i = 0; i < xInputFiles.length; i++) {
xInputFiles[i] = new XInputFile((File) list.get(i));
}
return xInputFiles;
}
/**
*
*/
private void getDirectories(File dir, ArrayList list)
{
class MyFileFilter implements FileFilter {
public boolean accept(File pathname)
{
return pathname.isFile();
}
}
class MyDirFilter implements FileFilter {
public boolean accept(File pathname)
{
return pathname.isDirectory();
}
}
File[] dirs = dir.listFiles(new MyDirFilter());
File[] files;
for (int i = 0; i < dirs.length; i++)
{
files = dirs[i].listFiles(new MyFileFilter());
for (int j = 0; j < files.length; j++)
list.add(files[j]);
getDirectories(dirs[i], list); // depth 2
}
}
/**
* Test if directory data is valid.
*
* @return Test successful or not
*/
public boolean test() {
boolean b = false;
b = (file.exists() && file.isDirectory()) ? true : false;
testMsg = b ? "Test succeeded" : "Test failed";
return b;
}
/**
* Get result message after test().
*
* @return result message after test()
*/
public String getTestMsg() {
return testMsg;
}
/**
* @return Type of XInputDirectory
*/
public DirType getDirType() {
return dirType;
}
}