/**
* Copyright (C) 2008-2010, Squale Project - http://www.squale.org
*
* This file is part of Squale.
*
* Squale is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or any later version.
*
* Squale 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 Lesser General Public License
* along with Squale. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Cr�� le 26 sept. 05, par M400832.
*/
package org.squale.squalix.tools.compiling.utility;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Classe "utilitaire" requise pour les tests de compilation.
*
* @author M400832
* @version 1.0
*/
public class FileManager
{
/**
* Constante ".".
*/
private static final String DOT = ".";
/**
* Saut de ligne;
*/
private static final String NEW_LINE = "\n";
/**
* Cette m�thode retourne une liste de tous les fichiers se terminant par une extension donn�e, au sein d'une
* arborescence donn�e.
*
* @param pDir arborescence � parcourir.
* @param pExt extension � "matcher".
* @return la liste des fichiers se terminant par l'extension demand�e dans l'arborescence demand�e.
*/
public static ArrayList checkFileNumber( final String pDir, final String pExt )
{
/* liste contenant les fichiers correspondant � l'extension cherch�e */
ArrayList list = new ArrayList();
/* On v�rifie que le r�pertoire existe */
File dir = new File( pDir );
if ( dir.isDirectory() )
{
/* On r�cup�re la liste des fichiers / dossiers */
File foundFiles[] = dir.listFiles();
/* variable utilis�e pour stocker l'extension du fichier */
String fileExt;
int i = 0;
/* tant qu'il y a ds fichiers / dossiers */
while ( i < foundFiles.length )
{
/* dossier */
if ( foundFiles[i].isDirectory() )
{
/* r�cursion : on ajoute la liste r�cup�r�e */
list.addAll( FileManager.checkFileNumber( foundFiles[i].getAbsolutePath(), pExt ) );
/* fichier */
}
else
{
/* nom du fichier */
fileExt = foundFiles[i].getName();
/* si le fichier contient au moins un "." */
if ( fileExt.lastIndexOf( DOT ) > 0 )
{
/*
* on r�cup�re la cha�ne entre le dernier "." et la fin du nom du fichier
*/
fileExt = fileExt.substring( fileExt.lastIndexOf( DOT ), fileExt.length() );
}
/* si c'est un .i */
if ( pExt.equals( fileExt ) )
{
/* on ajoute son chemin � la liste */
list.add( foundFiles[i].getAbsolutePath() );
}
}
/* on progresse dans la liste des fichiers */
i++;
}
}
return list;
}
/**
* Cette m�thode supprime les fichiers dont les chemins sont stock�s dans la liste pass�e en param�tre.
*
* @param pList liste de chemins de fichiers � supprimer.
*/
public static void removeFiles( final ArrayList pList )
{
File iFile;
Iterator it = pList.iterator();
/* tant qu'il y a des fichiers dans la liste */
while ( null != it && it.hasNext() )
{
/*
* on construit un nouveau descripteur et on supprime le fichier.
*/
iFile = new File( (String) ( it.next() ) );
iFile.delete();
}
iFile = null;
}
/**
* Cette m�thode copie le fichier d'un emplacement � un autre.
*
* @param pSource r�pertoire source.
* @param pTarget r�pertoire de destination.
* @throws Exception IOException.
*/
public static void copyFile( final File pSource, final File pTarget )
throws Exception
{
StringBuffer sbw = new StringBuffer();
/* cr�ation d'un buffer de lecture du fichier */
FileReader fr = new FileReader( pSource );
BufferedReader br = new BufferedReader( fr );
String myLine = "";
while ( null != ( myLine = br.readLine() ) )
{
sbw.append( myLine );
sbw.append( NEW_LINE );
}
/* filewriter : on �crit le buffer dans le fichier */
FileWriter fw = new FileWriter( pTarget );
BufferedWriter bw = new BufferedWriter( fw );
bw.write( sbw.toString() );
/* on ferme les flux */
bw.close();
br.close();
/* m�nage */
bw = null;
br = null;
fw = null;
fr = null;
sbw = null;
}
}