/** * Prépare l'environnement d'exécution de l'analyse : * * <ul> * <li>Création du dossier destination des résultats du parsing * <li>Création du fichier config.pcf * </ul> * * @exception Exception si un probleme d'initialisation apparait */ protected void initialize() throws Exception { // On récupère la configuration du module McCabe, personnalisée // avec les paramètres du projet mConfiguration = McCabeConfiguration.build( mProject, McCabeMessages.getString("configuration.file"), getData()); try { // On tente de le créer si il n'existe pas mConfiguration.getErrorLogger().getParentFile().mkdirs(); mErrorWriter = new BufferedWriter(new FileWriter(mConfiguration.getErrorLogger())); } catch (IOException ioe) { // On log l'erreur LOGGER.warn( "Erreur sur le fichier de log des erreurs : " + mConfiguration.getErrorLogger().getAbsolutePath()); LOGGER.warn(ioe); } File workspace = mConfiguration.getWorkspace(); if (!workspace.exists() || !workspace.isDirectory() || !workspace.canWrite() || !workspace.canRead()) { // On va vérifier que le workspace est disponible throw new Exception(McCabeMessages.getString("exception.no_workspace")); } // On crée le fichier de description de l'analyse dans le workspace McCabePCFFile pcfFile = new McCabePCFFile(mConfiguration, getData()); createProjectConfigurationFile(pcfFile); // On crée une instance de persisteur et du template utilisant la session déjà ouverte setParser(); setPersistor(); LOGGER.info( McCabeMessages.getString("logs.initialized") + mProject.getParent().getName() + " - " + mProject.getName()); }
/** * Création du fichier de configuration McCabe Ce fichier de configuration contient la liste des * fichiers * * @param pFile fichier * @throws Exception si erreur */ protected void createProjectConfigurationFile(McCabePCFFile pFile) throws Exception { pFile.build(); // On copie le PCF sous le nom <projet>.pcf si le nombre de fichiers .pcf dans le workspace // est < 10 File backupDir = new File( mConfiguration.getWorkspace() + File.separator + McCabeMessages.getString("pcf.log.dir")); backupDir.mkdirs(); File[] backupDirFiles = backupDir.listFiles(); if (backupDirFiles != null) { // On tri selon le nom du fichier décroissant pour ne pas écraser les fichiers qui porte sur // le // même projet. List files = Arrays.asList(backupDirFiles); Collections.sort(files); Collections.reverse(files); // On renomme tous les fichiers avec l'extension ext+1 String fileName; String newFileName; File backUpFile = null; int ext; for (int i = 0; i < files.size(); i++) { fileName = ((File) files.get(i)).getName(); // Si un fichier porte l'extension max, on le supprime if (fileName.matches(".*\\." + (McCabeConfiguration.MAX_PCF_SAVED - 1))) { ((File) files.get(i)).delete(); } else { ext = 0; // On récupère l'extension int lastDot = fileName.lastIndexOf("."); if (lastDot > 0) { try { ext = Integer.parseInt(fileName.substring(lastDot + 1)) + 1; // On renomme le fichier newFileName = fileName.substring(0, lastDot + 1) + ext; ((File) files.get(i)) .renameTo( new File( backupDirFiles[i].getParentFile().getAbsoluteFile() + File.separator + newFileName)); } catch (NumberFormatException nbfe) { // On renommera le fichier avec l'extension 1 (pour ne pas écraser celui // qui existe) backUpFile = (File) files.get(i); } } } } // On copie le fichier pcf dans le répertoire de sauvegarde String backupName = backupDir.getAbsolutePath() + File.separator + mProject.getName() + ".pcf"; // On renomme le fichier extension.1 si il existe if (backUpFile != null) { backUpFile.renameTo(new File(backUpFile.getAbsolutePath() + ".1")); } FileUtility.copyFile(pFile.getPcfFile(), new File(backupName)); } }