Améliorations du code + Du mode debug
This commit is contained in:
116
src/fr/monlouyan/bakefile/Rule.java
Normal file
116
src/fr/monlouyan/bakefile/Rule.java
Normal file
@@ -0,0 +1,116 @@
|
||||
package fr.monlouyan.bakefile;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Représente une règle dans un fichier Bakefile
|
||||
* Dernière modification : 04/02/2025
|
||||
*
|
||||
* @author Moncef STITI, Yanis HAMOUDI
|
||||
* @version 1.0
|
||||
* @date 04/02/2025
|
||||
*/
|
||||
public class Rule {
|
||||
/**
|
||||
* Nom de la règle
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* Liste des dépendances de la règle
|
||||
*/
|
||||
private List<String> dependencies;
|
||||
|
||||
/**
|
||||
* Liste des commandes de la règle (actions à exécuter)
|
||||
*/
|
||||
private List<String> commands;
|
||||
|
||||
/**
|
||||
* Indique si la règle est une règle phony
|
||||
*/
|
||||
private boolean isPhony;
|
||||
|
||||
/**
|
||||
* Constructeur de la classe Rule
|
||||
* @param name Nom de la règle
|
||||
* @param dependencies Liste des dépendances de la règle
|
||||
* @param commands Liste des commandes de la règle à exécuter
|
||||
* @param isPhony Si la règle est une règle phony ou non
|
||||
*/
|
||||
public Rule(String name, List<String> dependencies, List<String> commands, boolean isPhony) {
|
||||
this.name = name;
|
||||
this.dependencies = dependencies;
|
||||
this.commands = commands;
|
||||
this.isPhony = isPhony;
|
||||
}
|
||||
|
||||
/**
|
||||
* Permet de récupérer le nom de la règle
|
||||
* @return Le nom de la règle
|
||||
*/
|
||||
public String getName() { return name; }
|
||||
|
||||
/**
|
||||
* Permet de récupérer les dépendances de la règle
|
||||
* @return La liste des dépendances de la règle
|
||||
*/
|
||||
public List<String> getDependencies() { return dependencies; }
|
||||
|
||||
/**
|
||||
* Permet de récupérer les commandes de la règle
|
||||
* @return La liste des commandes de la règle
|
||||
*/
|
||||
public List<String> getCommands() { return commands; }
|
||||
|
||||
/**
|
||||
* Permet de savoir si la règle est une règle phony
|
||||
* @return true si la règle est une règle phony, false sinon
|
||||
*/
|
||||
public boolean isPhony() { return isPhony; }
|
||||
|
||||
/**
|
||||
* Permet de savoir si la règle est vide (sans dépendances ni commandes)
|
||||
* @return true si la règle est vide, false sinon
|
||||
*/
|
||||
public boolean isEmpty() { return dependencies.isEmpty() && commands.isEmpty(); }
|
||||
|
||||
/**
|
||||
* Détermine si la règle doit être mise à jour.
|
||||
* Une règle doit être mise à jour si l'un de ses fichiers de sortie est plus ancien qu'un de ses fichiers de dépendance.
|
||||
* De plus, les règles phony sont toujours mises à jour.
|
||||
*
|
||||
* @return true si la règle doit être mise à jour, false sinon.
|
||||
*/
|
||||
public boolean needsUpdate() {
|
||||
if (BakeCLI.isDebug()){
|
||||
System.out.println("Debug : Checking if rule " + name + " needs update");
|
||||
}
|
||||
|
||||
if (isPhony) {
|
||||
if (BakeCLI.isDebug()) {
|
||||
System.out.println("Debug : Rule " + name + " is phony, always needs update");
|
||||
}
|
||||
return true; // Les règles phony sont toujours mises à jour
|
||||
}
|
||||
|
||||
File targetFile = new File(name);
|
||||
|
||||
if (BakeCLI.isDebug()){
|
||||
System.out.println("Debug : Checking if target file " + name + " exist and is up to date");
|
||||
}
|
||||
long targetTimestamp = targetFile.exists() ? TimestampManager.getTimestamp(targetFile) : 0;
|
||||
|
||||
for (String dependency : dependencies) {
|
||||
File depFile = new File(dependency);
|
||||
if (depFile.exists() && TimestampManager.getTimestamp(depFile) > targetTimestamp) {
|
||||
if (BakeCLI.isDebug()) {
|
||||
System.out.println("Debug : Dependency " + dependency + " is newer than target file " + name + ", needs update");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user