From f75ddd013e1a262102b872b523ed13328f7e8fdb Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 09:18:05 +0200 Subject: [PATCH 01/28] import slf4j-api --- build.gradle | 4 ++++ src/main/java/module-info.java | 1 + 2 files changed, 5 insertions(+) diff --git a/build.gradle b/build.gradle index 3370125e..d84f87da 100644 --- a/build.gradle +++ b/build.gradle @@ -32,6 +32,7 @@ sourceSets.main { } } repositories { + maven { url "https://mvnrepository.com/" } mavenCentral() } @@ -47,8 +48,11 @@ description = 'Modular easy-installer' mainClassName = "$moduleName/ecorp.easy.installer.EasyInstaller" dependencies { + compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' compile 'org.yaml:snakeyaml:1.25' testCompile 'junit:junit:4.12' + + //compile 'org.slf4j:slf4j-log4j1:1.7.5' } // Application Configuration diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index b8c0b624..b8d38194 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -23,6 +23,7 @@ module ecorp.easy.installer { requires javafx.base; requires jdk.crypto.ec; //REQUIRED TO DOWNLOAD OVER HTTPS requires org.yaml.snakeyaml; + requires org.slf4j; opens ecorp.easy.installer to javafx.fxml; opens ecorp.easy.installer.controllers to javafx.fxml; opens ecorp.easy.installer.controllers.subcontrollers to javafx.fxml; -- GitLab From 20b1883cf13978ed8ec448f628882610024bdbea Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 09:26:26 +0200 Subject: [PATCH 02/28] add logback --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index d84f87da..56447ceb 100644 --- a/build.gradle +++ b/build.gradle @@ -48,6 +48,8 @@ description = 'Modular easy-installer' mainClassName = "$moduleName/ecorp.easy.installer.EasyInstaller" dependencies { + compile 'ch.qos.logback:logback-classic:1.2.3' + compile 'ch.qos.logback:logback-core:1.2.3' compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' compile 'org.yaml:snakeyaml:1.25' testCompile 'junit:junit:4.12' -- GitLab From d84258c8dafc70e14a3057f1c8cb73dcc6459df1 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 10:56:27 +0200 Subject: [PATCH 03/28] replace sytem.out.println by logback & slf4j logger --- .../ecorp/easy/installer/EasyInstaller.java | 19 ++++++++------- .../controllers/MainWindowController.java | 23 ++++++++++--------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/EasyInstaller.java b/src/main/java/ecorp/easy/installer/EasyInstaller.java index 2a690fdd..c1e30d14 100644 --- a/src/main/java/ecorp/easy/installer/EasyInstaller.java +++ b/src/main/java/ecorp/easy/installer/EasyInstaller.java @@ -31,29 +31,29 @@ import javafx.scene.Scene; import javafx.scene.text.Font; import javafx.stage.Screen; import javafx.stage.Stage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author Vincent Bourgmayer */ public class EasyInstaller extends Application { + private final static Logger logger = LoggerFactory.getLogger(EasyInstaller.class.getSimpleName()); public final static String FXML_PATH ="/fxml/"; private ResourceBundle i18n; //i18n mean "internationalization" - private MainWindowController controller; @Override public void start(Stage stage) throws Exception { - //four lines below are just for test - System.out.println("OS name: "+OsName); - System.out.println("Java Home: "+JavaHome); - System.out.println("Current working dir: "+Paths.get("").toAbsolutePath().toString()); - System.out.println("ADB folder path: "+AppConstants.getADBFolderPath() ); + + logger.debug("\nOS name = {}\nJava Home = {}\nCurrent working dir = {}\nADB folder path = {}", OsName, JavaHome, Paths.get("").toAbsolutePath().toString(), AppConstants.getADBFolderPath()); Locale currentLocale= Locale.getDefault(); - i18n = ResourceBundle.getBundle("lang.translation", currentLocale); + logger.debug("language = {}, country = {} ", currentLocale.getLanguage(), currentLocale.getCountry()); + //Load main view FXMLLoader loader = new FXMLLoader(getClass().getResource(FXML_PATH+"mainWindow.fxml")); loader.setResources(i18n); @@ -72,7 +72,6 @@ public class EasyInstaller extends Application { double screenWidth= Screen.getPrimary().getVisualBounds().getWidth(); double screenHeight = Screen.getPrimary().getVisualBounds().getHeight(); - System.out.println("Detected screen dimension: "+screenWidth+"x"+screenHeight); if(screenWidth >= 1440.0 && screenHeight >= 1024.0){ stage.setWidth(1440); stage.setHeight(1024); @@ -81,7 +80,7 @@ public class EasyInstaller extends Application { stage.setHeight(screenHeight); } - System.out.println("Stage (=window) dimension: "+stage.getWidth()+"x"+stage.getHeight()); + logger.debug("Detected screen's size = {} x {}\nstage's size = {} x {}", screenWidth, screenHeight, stage.getWidth(), stage.getHeight()); //Display UI stage.show(); } @@ -96,7 +95,7 @@ public class EasyInstaller extends Application { @Override public void stop(){ - System.out.println("Stage is closing"); + logger.info("stage is closing"); // Save file controller.onStop(); } diff --git a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java index 0dbe2a00..ef338292 100644 --- a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java +++ b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java @@ -40,13 +40,15 @@ import javafx.fxml.FXMLLoader; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.control.Button; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Main window Controller class * * @author Vincent Bourgmayer */ public class MainWindowController implements Initializable { - + private final static Logger logger = LoggerFactory.getLogger(MainWindowController.class.getSimpleName()); @FXML AnchorPane root; @FXML Button nextButton; @FXML Label titleLabel; @@ -64,6 +66,7 @@ public class MainWindowController implements Initializable { */ @Override public void initialize(URL url, ResourceBundle rb) { + logger.info("initialize()"); this.i18n = rb; disableNextButton(false); //just for test loadSubScene(); @@ -71,8 +74,8 @@ public class MainWindowController implements Initializable { fontSize.bind(root.widthProperty().add(root.heightProperty()).divide(123.2)); //72 = 1440 (default width): 20 (default font size). 51.2 = 1024 / 20 root.styleProperty().bind( - Bindings.concat("-fx-font-size: ", - fontSize.asString("%.0f")).concat("px;")); + Bindings.concat("-fx-font-size: ", fontSize.asString("%.0f")).concat("px;") + ); } @@ -126,7 +129,7 @@ public class MainWindowController implements Initializable { * Reset the handler for when next button is clicked */ public void resetNextButtonEventHandler(){ - System.out.println("ResetNextButtonEventHandler"); + logger.info("ResetNextButtonEventHandler()"); nextButton.setOnMouseClicked((MouseEvent event)->{ onNextBtnClick(); }); @@ -144,7 +147,7 @@ public class MainWindowController implements Initializable { * Load different group of controls depending of the current step (of whole process) */ public void loadSubScene(){ - System.out.println("loadSubScene("+currentSubRootId+")"); + logger.info("loadSubScene("+currentSubRootId+")"); if(currentSubRootId == null || currentSubRootId.isEmpty()){ currentSubRootId =loadSubUI("1-beforeYouBegin.fxml"); @@ -196,7 +199,7 @@ public class MainWindowController implements Initializable { Platform.exit(); break; default: - System.out.println("Invalid currentSubRootId"); + logger.error("Invalid currentSubRootId"); break; } } @@ -232,7 +235,6 @@ public class MainWindowController implements Initializable { * @return */ public FXMLLoader loadFXML(String fxmlName){ - System.out.println("loadFXML('"+fxmlName+"')"); FXMLLoader loader; try{ loader = new FXMLLoader(getClass().getResource(EasyInstaller.FXML_PATH+fxmlName)); @@ -241,7 +243,7 @@ public class MainWindowController implements Initializable { AbstractSubController ctrl = loader.getController(); if(ctrl != null) ctrl.setParentController(this); }catch(IOException e){ - e.printStackTrace(); + logger.error("fxmlName = {}, error = {}", fxmlName, e.toString()); return null; } return loader; @@ -252,7 +254,6 @@ public class MainWindowController implements Initializable { * @return subRoot. */ public String loadSubUI(String fxmlName){ - System.out.println("loadSubUI("+fxmlName+")"); FXMLLoader loader = loadFXML(fxmlName); Pane subRoot = (Pane) loader.getRoot(); root.getChildren().add(0, subRoot); //adding this element as first subNode, let other element like button to still be clickable on small screen @@ -288,7 +289,7 @@ public class MainWindowController implements Initializable { * It is in charge to close the opened flash or preparation Thread */ public void onStop(){ - System.out.println("onStop"); + logger.debug("onStop()"); if(this.thread != null){ thread.onCancelRequestRecieved(); } @@ -317,7 +318,7 @@ public class MainWindowController implements Initializable { throw new Exception("OS not supported"); //Not Supported OS } }catch(Exception e){ - e.printStackTrace(); + logger.error("url = {}, error = {}", url, e.toString()); } } -- GitLab From 59d80db0e6798242270f655d31607878566ad602 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 16:03:39 +0200 Subject: [PATCH 04/28] add log system in all sucontrollers --- .../DeviceDetectedController.java | 10 +++--- .../subcontrollers/DownloadSrcController.java | 13 +++++--- .../subcontrollers/EAccountController.java | 5 ++- .../subcontrollers/EnableADBController.java | 9 ++++-- .../subcontrollers/FeedbackController.java | 24 ++++++++------ .../subcontrollers/FlashSceneController.java | 32 ++++++++++++------- 6 files changed, 60 insertions(+), 33 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java index f9224427..5ec14b99 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java @@ -26,13 +26,14 @@ import javafx.concurrent.WorkerStateEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author Vincent Bourgmayer */ public class DeviceDetectedController extends AbstractSubController{ - - + private final static Logger logger = LoggerFactory.getLogger(DeviceDetectedController.class.getSimpleName()); @FXML private Button buyNewDevice; @FXML private Button startDetectionButton; @FXML private Label detectionMsg; @@ -55,6 +56,7 @@ public class DeviceDetectedController extends AbstractSubController{ * Start the process of detection */ public void startDetection(){ + logger.info("startDetection()"); startDetectionButton.setManaged(false); startDetectionButton.setVisible(false); buyNewDevice.setVisible(false); @@ -92,7 +94,7 @@ public class DeviceDetectedController extends AbstractSubController{ new Thread(detectorTask).start(); } catch(Exception e){ - e.printStackTrace(); + logger.error("startDetection(), error: {}", e.toString()); //@TODO: handle Too many device Found Exception } } @@ -161,7 +163,7 @@ public class DeviceDetectedController extends AbstractSubController{ throw new Exception("OS not supported"); } }catch(Exception e){ - e.printStackTrace(); + logger.error("goToShop(), error: {}", e.toString()); } } } diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java index 96db6c22..6df60c02 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java @@ -30,6 +30,8 @@ import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.ProgressBar; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * FXML Controller class @@ -37,7 +39,7 @@ import javafx.scene.control.ProgressBar; * @author Vincent Bourgmayer */ public class DownloadSrcController extends AbstractSubController { - + private final static Logger logger = LoggerFactory.getLogger(DownloadSrcController.class.getSimpleName()); @FXML ProgressBar preparationProgressBar; @FXML Label progressLabel; @FXML Label progressTitle; @@ -66,7 +68,8 @@ public class DownloadSrcController extends AbstractSubController { private boolean startNextDownload(){ - System.out.println("taskIterator has next ? "+taskIterator.hasNext()); + logger.info("startNextDownload()"); + logger.debug("taskIterator has next ? {} "+taskIterator.hasNext()); if(taskIterator.hasNext()){ Map.Entry sources = taskIterator.next(); currentTask = new DownloadTask(sources.getKey(), sources.getValue(), i18n); @@ -93,9 +96,9 @@ public class DownloadSrcController extends AbstractSubController { progressLabel.textProperty().unbind(); progressTitle.textProperty().unbind(); preparationProgressBar.progressProperty().unbind(); - this.preparationProgressBar.getStyleClass().add("errorBar"); - System.out.println(eh.getSource().getException().toString()); - this.progressLabel.setText(i18n.getString("download_lbl_downloadError")); + preparationProgressBar.getStyleClass().add("errorBar"); + logger.error("startNextDownload(), error: {}", eh.getSource().getException().toString()); + progressLabel.setText(i18n.getString("download_lbl_downloadError")); restartDownloadBtn.setManaged(true); restartDownloadBtn.setVisible(true); }); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java index f55fde00..e53dba06 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java @@ -30,6 +30,8 @@ import javafx.scene.control.RadioButton; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -37,6 +39,7 @@ import javafx.scene.layout.VBox; * This is the controller for eAccount.fxml */ public class EAccountController extends AbstractSubController{ + private static final Logger logger = LoggerFactory.getLogger(EAccountController.class.getSimpleName()); private static final String MAIL_REGEX="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"; private static final Pattern EMAIL_PATTERN = Pattern.compile(MAIL_REGEX); @@ -80,7 +83,7 @@ public class EAccountController extends AbstractSubController{ public void onCheckMailBtnClick(){ - System.out.println("Check Mail button clicked"); + logger.info("onCheckMailBtnClick"); final String userInput = mailInput.getText(); parentController.disableNextButton(true); if(!radioButton.isSelected()) radioButton.setSelected(true); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java index c5f7ce43..fc07f134 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java @@ -23,6 +23,8 @@ import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -31,7 +33,7 @@ import javafx.scene.image.ImageView; * @author Vincent */ public class EnableADBController extends AbstractSubSteppedController { - + private final static Logger logger = LoggerFactory.getLogger(EnableADBController.class.getSimpleName()); @FXML private Label firstSubStep; @FXML private Label secondSubStep; @FXML private Label thirdSubStep; @@ -52,11 +54,14 @@ public class EnableADBController extends AbstractSubSteppedController { } private void updateImage(){ - System.out.println("currentStepId= "+currentSubStepId); + logger.info("updateImage()"); + logger.debug("currentStepId= {}", currentSubStepId); + Image image; try{ image = new Image(this.parentController.getClass().getResourceAsStream("/images/enableADB"+(currentSubStepId+2)+".png")); }catch(Exception e){ + logger.warn("imageName = {}, error = {}", "/images/enableADB"+(currentSubStepId+2), e.toString()); image = null; } this.enableADBImg.setImage(image); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java index a8b3919b..ceff81a1 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java @@ -30,6 +30,8 @@ import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextArea; import javafx.scene.input.MouseEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -38,7 +40,7 @@ import javafx.scene.input.MouseEvent; * @author Vincent Bourgmayer */ public class FeedbackController extends AbstractSubController { - + private final static Logger logger = LoggerFactory.getLogger(FeedbackController.class.getSimpleName()); private @FXML Button sendAnswerBtn; private @FXML TextArea commentArea; private @FXML Label thanksLabel; @@ -54,10 +56,12 @@ public class FeedbackController extends AbstractSubController { parentController.setNextButtonText("feedback_btn_leave"); Device device = parentController.getDevice(); if(device != null){ - System.out.println("Device not null!"); + logger.debug("setParentController(), ParentController.getDevice() != null"); deviceModel = device.getModel()+", "+device.getDevice(); - }else - System.out.println("device is null"); + }else{ + logger.warn("setParentController(), parentController.getDevice() == null"); + } + } @@ -70,7 +74,7 @@ public class FeedbackController extends AbstractSubController { Button clickedButton = (Button) event.getSource(); if(clickedButton.equals(selectedFeelings)) { - System.out.println("Deselect: "+selectedFeelings.getId()); + logger.debug("onFeelingsSelected(), Deselect: "+selectedFeelings.getId()); selectedFeelings.getStyleClass().remove(SELECTED_STYLE); selectedFeelings = null; } @@ -80,7 +84,7 @@ public class FeedbackController extends AbstractSubController { clickedButton.getStyleClass().add(SELECTED_STYLE); selectedFeelings = clickedButton; - System.out.println("Select:" +selectedFeelings.getId()); + logger.debug("onFeelingsSelected(), select: "+selectedFeelings.getId()); } } @@ -99,19 +103,19 @@ public class FeedbackController extends AbstractSubController { sendAnswerBtn.setVisible(false); thanksLabel.setVisible(true); thanksLabel.setManaged(true); - System.out.println("sending feedback: success"); + logger.debug("onSendBtnClicked(), sending feedback: success"); } else{ //if failure sendAnswerBtn.setText(i18n.getString("feedback_btn_sendTryAgain")); sendAnswerBtn.setDisable(false); - System.out.println("sending feedback: failed"); + logger.error("onSendBtnClicked(), sending feedback: failure"); } }); uploadTask.setOnFailed(eh->{ sendAnswerBtn.setDisable(false); sendAnswerBtn.setText(i18n.getString("feedback_btn_sendTryAgain")); - System.out.println("sending feedback error: "+eh.getSource().getException().toString()); + logger.error("onSendBtnClicked(), sending feedback: failure, error: {}", eh.getSource().getException().toString()); }); new Thread(uploadTask).start(); @@ -133,7 +137,7 @@ public class FeedbackController extends AbstractSubController { out.write("\nComment: \n"+this.commentArea.getText()); } catch (IOException e) { - System.err.println(e); + logger.error("createAnswerFile()\n answerFilePath = {}\n error: {}", answerFilePath, e.toString()); return null; } return answerFilePath; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index 8f27cabe..f38d2252 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -43,6 +43,8 @@ import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.text.TextFlow; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * FXML Controller class @@ -75,7 +77,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement ResourceBundle instructionsImagesBundle; //Give access to image to loads with instructionsKey private FlashThread thread; private Object pauseLock; //lock used for pausing the FlashThread - + private final static Logger logger = LoggerFactory.getLogger(FlashSceneController.class.getSimpleName()); @Override @@ -149,7 +151,8 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ @Override public void onStepStart(DataBundle db) { - System.out.println("onStepStart"); + logger.info("onStepStart()"); + logger.debug(" DataBundle = {}", db.toString()); if(db == null)return; if(timer != null){ @@ -173,6 +176,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement try{ this.instructionImage.setImage(new Image(getClass().getResourceAsStream("/images/"+instructionsImagesBundle.getString(instructionImgName)))); }catch (Exception e) { + logger.warn("onStepStart(), image key = {}, error = {}", instructionImgName, e.toString()); this.instructionImage.setImage(null); } } @@ -221,10 +225,11 @@ public class FlashSceneController extends AbstractSubSteppedController implement * @param db */ private void onLoadStepType(DataBundle db){ + logger.info("onLoadStepType()"); instructionsVBox.setAlignment(Pos.CENTER); parentController.setNextButtonVisible(false); int averageTime = db.getInt("averageTime"); - System.out.println("averageTime is: "+averageTime); + logger.debug("averageTime = {} ", averageTime); if(averageTime > -1){ //Or > 0 ? timer = new TimerTask(averageTime, this); loadStepProgressIndicator.setProgress(0.0); //Reset to prevent showing last value @@ -267,13 +272,15 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ @Override public void onFlashError(DataBundle db) { - System.out.println("onFlashError"); - + logger.warn("onFlashError()"); String errorMsgKey = db.getString("errorMsgKey"); + if(errorMsgKey == null || errorMsgKey.isEmpty() || !i18n.containsKey(errorMsgKey)) errorMsgKey ="script_error_unknown"; stepTitleLabel.setText(i18n.getString(errorMsgKey)); + logger.debug("errorMsgKey = {}", errorMsgKey); + instructionsFlow.setManaged(false); instructionsFlow.setVisible(false); sendLogBtn.setVisible(true); @@ -292,7 +299,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ @Override public void onFlashThreadEnd(DataBundle db) { - System.out.println("onFlashThreadEnd"); + logger.info("onFlashThreadEnd()"); stepTitleLabel.setText("FlashEnd"); } @@ -303,7 +310,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ @Override public void onFlashStop(DataBundle db) { - System.out.println("onFlashStop"); + logger.info("onFlashStop()"); //flashStepTitleLabel.setText("Stopped"); if(timer != null){ timer.cancel(); @@ -359,17 +366,17 @@ public class FlashSceneController extends AbstractSubSteppedController implement if( (Boolean) eh.getSource().getValue() ){ //if success sendLogBtn.setDisable(true); sendLogBtn.setText(i18n.getString("install_btn_sendLogSuccess")); - System.out.println("sending log: success"); + logger.info("sendLogToSupport(), sending log: success"); } else{ sendLogBtn.setText(i18n.getString("install_btn_sendLogAgain")); - System.out.println("sending log: failed"); + logger.warn("sendLogToSupport(), sending log: failure"); } }); uploadTask.setOnFailed(eh->{ sendLogBtn.setText(i18n.getString("install_btn_sendLogAgain")); - System.out.println("sending log error: "+eh.getSource().getException().toString()); + logger.warn("sendLogToSupport(), sending log: failure, error = {}",eh.getSource().getException().toString() ); }); new Thread(uploadTask).start(); @@ -422,7 +429,10 @@ public class FlashSceneController extends AbstractSubSteppedController implement Image img; try{ img = new Image(getClass().getResourceAsStream("/images/"+instructionsImagesBundle.getString(instruction))); - }catch(Exception e){ img = null; } + }catch(Exception e){ + logger.warn("onNextButtonClicked(), image key = {}, error = {}", instruction, e.toString()); + img = null; + } instructionImage.setImage(img); break; -- GitLab From d60b7eef5587cefb61665697505c93130533773c Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 16:15:25 +0200 Subject: [PATCH 05/28] use new logger in models --- .../ecorp/easy/installer/models/Command.java | 18 +++++++++++------- .../java/ecorp/easy/installer/models/Step.java | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/models/Command.java b/src/main/java/ecorp/easy/installer/models/Command.java index 928e8118..976c455e 100644 --- a/src/main/java/ecorp/easy/installer/models/Command.java +++ b/src/main/java/ecorp/easy/installer/models/Command.java @@ -22,6 +22,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Vincent Bourgmayer @@ -34,10 +36,11 @@ public class Command { private String shellOutput; //The shell text output of the execution of the script Process pc; //Process which run the command Step step; //Object which contain data about the command like next step, ... - + private final static Logger logger = LoggerFactory.getLogger(Command.class.getSimpleName()); /** * Constructor for instance in context of FlashThread + * @param runScriptCmd * @param step */ @@ -118,7 +121,7 @@ public class Command { }); } - System.out.println("Splitted command: "+sb.toString()); + logger.debug("getFinalCmd(), Splitted command = {}", sb.toString()); return sb.toString().split(" "); } @@ -129,13 +132,13 @@ public class Command { */ public void execAndReadOutput() throws IOException, InterruptedException{ - System.out.println("execAndReadOutput() : "+this.command); + logger.debug("execAndReadOutput(), command string = {} ", this.command); ProcessBuilder pb = new ProcessBuilder(getFinalCmd()); pb.redirectErrorStream(true); pc= pb.start(); - System.out.println("Process started"); + logger.info("Command's Process started"); InputStream stdout = pc.getInputStream(); InputStreamReader isr = new InputStreamReader (stdout); BufferedReader br = new BufferedReader(isr); @@ -147,12 +150,12 @@ public class Command { line = br.readLine(); if( line != null && !line.equals("null") ){ sb.append("\n\n").append(line); - System.out.println("\n"+line); + logger.debug("\n (debug)"+line); } } this.exitValue = pc.exitValue(); }catch(IOException e){ - System.out.println(e.toString() ); + logger.error("execAndReadOutput(), error = {}", e.toString() ); this.exitValue = -1; } br.close(); @@ -165,7 +168,7 @@ public class Command { } public void cancel(){ - System.out.println("Command.cancel()"); + logger.info("cancel()"); this.cancelled = true; if(pc != null && pc.isAlive()) pc.destroy(); @@ -212,6 +215,7 @@ public class Command { return step.getAfterFail(); } + //@TODO REMOVE! public boolean mustStartNewThread(){ return step.isStartNewThread(); } diff --git a/src/main/java/ecorp/easy/installer/models/Step.java b/src/main/java/ecorp/easy/installer/models/Step.java index ae603dcd..796a39b2 100644 --- a/src/main/java/ecorp/easy/installer/models/Step.java +++ b/src/main/java/ecorp/easy/installer/models/Step.java @@ -24,7 +24,7 @@ import java.util.Map; */ public class Step { private StepUi ui; - private boolean startNewThread = false; //define if a new thread should be started if this command succeeds + private boolean startNewThread = false; //@TODO REMOVE! define if a new thread should be started if this command succeeds private String script; //script's file script private String output; //Key of output to store as common parameter private String afterSuccess; // index of next script if succeed @@ -120,11 +120,12 @@ public class Step { this.ui = ui; } - + //@TODO check before but REMOVE! public boolean isStartNewThread() { return startNewThread; } + //@TODO REMOVE! public void setStartNewThread(boolean startNewThread) { this.startNewThread = startNewThread; } -- GitLab From 861aa20d1250e195dd26641f2094ddc0a69c242b Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 17:17:55 +0200 Subject: [PATCH 06/28] replace logger in threads package --- .../installer/threads/AskAccountTask.java | 6 ++-- .../threads/DeviceDetectionTask.java | 32 +++++++++-------- .../easy/installer/threads/DownloadTask.java | 18 +++++----- .../easy/installer/threads/FlashThread.java | 35 ++++++++++--------- .../easy/installer/threads/ThreadFactory.java | 26 ++++++++------ .../installer/threads/UploadToEcloudTask.java | 6 +++- 6 files changed, 70 insertions(+), 53 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java b/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java index 21a1828f..a943f38c 100644 --- a/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java +++ b/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java @@ -27,12 +27,14 @@ import java.net.http.HttpResponse; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author vincent Bourgmayer */ public class AskAccountTask extends Task{ - + private final static Logger logger = LoggerFactory.getLogger(AskAccountTask.class.getSimpleName()); String email; String sugar; /** @@ -58,7 +60,7 @@ public class AskAccountTask extends Task{ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println(response.body()); + logger.debug("call(), response.body() = {}",response.body() ); return response.body(); } diff --git a/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java b/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java index 435522e8..6ccb7311 100644 --- a/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java @@ -22,6 +22,8 @@ import ecorp.easy.installer.models.Command; import ecorp.easy.installer.models.Device; import javafx.concurrent.Task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -29,6 +31,8 @@ import javafx.concurrent.Task; */ public class DeviceDetectionTask extends Task{ final String CMD_adbDevices = "devices"; + private final static Logger logger = LoggerFactory.getLogger(DeviceDetectionTask.class.getSimpleName()); + @Override protected Device call() throws Exception{ @@ -37,7 +41,7 @@ public class DeviceDetectionTask extends Task{ detectedDevice = runAdbDevicesCmd(AppConstants.getADBFolderPath()+"adb"); if(detectedDevice != null){ - System.out.println("Device found"); + logger.debug("call(), result: Device found"); } return detectedDevice; } @@ -49,7 +53,7 @@ public class DeviceDetectionTask extends Task{ * @throws Exception */ private Device runAdbDevicesCmd(String baseCmdString) throws Exception{ - System.out.println("runADBDevicesCmd()"); + logger.info("runADBDevicesCmd({})", baseCmdString); Command cmd = new Command(baseCmdString); cmd.addParameter("1", CMD_adbDevices); @@ -59,9 +63,9 @@ public class DeviceDetectionTask extends Task{ Device detectedDevice = null; String[] outputs = cmd.getShellOutput().split("\\R"); - System.out.println("raw shell outputs: "+cmd.getShellOutput()); + logger.debug(" raw shell outputs = {} ", cmd.getShellOutput()); if(outputs.length <=1){ - System.out.println("Waiting"); + logger.info(" Waiting"); Thread.sleep(2250); return null; } @@ -74,11 +78,11 @@ public class DeviceDetectionTask extends Task{ } } if(counter > 1){ - System.out.println("Too many devices detected"); + logger.info(" Too many devices detected"); throw new TooManyDevicesException(counter); } if(detectedDevice==null) { - System.out.println("waiting"); + logger.info(" waiting"); Thread.sleep(2250); } return detectedDevice; @@ -92,7 +96,7 @@ public class DeviceDetectionTask extends Task{ * @return the adb's device's id if found else it return empty string */ private Device checkAdbDevicesResult(String resultLine){ - System.out.println("checkAdbDevicesResult("+resultLine+")"); + logger.debug("checkAdbDevicesResult({})", resultLine); boolean deviceFound = false; Device result = null; @@ -101,24 +105,24 @@ public class DeviceDetectionTask extends Task{ //loop over each subString for(String stringPart : datas){ - System.out.println("Current subString : "+stringPart); + logger.debug(" Current subString : "+stringPart); //Detect the line that says that device is found if(!stringPart.isEmpty() && (stringPart.endsWith("device") ||stringPart.endsWith("recovery") ) ){ - System.out.println("Device has been found"); + logger.info(" Device has been found"); deviceFound = true; result = new Device(datas[0]); //get adb id } //Read data and store them in Device object if(deviceFound){ if(stringPart.contains("product:")){ - System.out.println("\"product\" keyword has been found"); + logger.debug(" \"product\" keyword has been found"); result.setName(stringPart.substring("product:".length() )); }else if(stringPart.contains("model:")){ - System.out.println("\"model\" keyword has been found"); - result.setModel(stringPart.substring("model:".length() )); + logger.debug(" \"model\" keyword has been found"); + result.setModel(stringPart.substring("model:".length() )); }else if(stringPart.contains("device:")){ - System.out.println("\"device\" keyword has been found"); - result.setDevice(stringPart.substring("device:".length() )); + logger.debug(" \"device\" keyword has been found"); + result.setDevice(stringPart.substring("device:".length() )); } } } diff --git a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java index 9ea77e47..0d3eb35b 100644 --- a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java @@ -35,12 +35,15 @@ import java.text.DecimalFormat; import java.util.ResourceBundle; import java.util.Scanner; import javafx.concurrent.Task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * this class verify the checksum of a file and download it * @author vincent Bourgmayer */ public class DownloadTask extends Task{ + private final static Logger logger = LoggerFactory.getLogger(DownloadTask.class.getSimpleName()); /** * Constante taille */ @@ -215,7 +218,7 @@ public class DownloadTask extends Task{ * @throws IOException */ private boolean validChecksum( String fileChecksum) throws NoSuchAlgorithmException, IOException{ - System.out.println("ValidChecksum("+fileChecksum+")"); + logger.debug("validChecksum("+fileChecksum+")"); updateMessage(i18n.getString("download_lbl_checkingIntegrity")); //get file containing checksum File sumFile = new File(fileChecksum); @@ -227,9 +230,8 @@ public class DownloadTask extends Task{ } //read content of file containing checksum to extract hash and filename - System.out.println("fileChecksum: "+fileChecksum); String checksumLine = readChecksumFile(fileChecksum); - System.out.println("ChecksumLine : "+checksumLine); + logger.debug(" ChecksumLine = "+checksumLine); String[] splittedLine = checksumLine.split("\\s+"); //get file of the hash @@ -237,7 +239,7 @@ public class DownloadTask extends Task{ File file = new File(AppConstants.getSourcesFolderPath()+splittedLine[1]); if(!file.exists()){ updateMessage(i18n.getString("download_lbl_localFileNotFound")); - System.out.println(splittedLine[1]+" do not exists"); + logger.debug(" "+splittedLine[1]+" do not exists"); return false; } @@ -258,7 +260,7 @@ public class DownloadTask extends Task{ String fileHash = sb.toString(); - System.out.println(fileHash+" vs "+splittedLine[0]); + logger.debug("compare hash: "+fileHash+" vs "+splittedLine[0]); return fileHash.equals(splittedLine[0]); } @@ -287,17 +289,17 @@ public class DownloadTask extends Task{ try{ Thread.sleep(timeout); if(!stop && currentTime == previousTime){ - System.out.println("No updates"); + logger.info("No updates"); //updateProgress & updateMessage are methos of DownloadTask.java updateProgress(-1, 1); updateMessage(i18n.getString("download_lbl_connectionLost")); } }catch(Exception e){ stop = true; - System.out.println("TimeoutThread crashed: "+e.toString()); + logger.error("TimeoutThread crashed: "+e.toString()); } } - System.out.println("timeoutThread is over!"); + logger.debug("timeoutThread is over!"); } //Signal that an amount was increased synchronized private void amountIncreased(){ diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index 6ad3752d..522ad058 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -29,6 +29,8 @@ import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -38,8 +40,8 @@ import java.util.regex.Pattern; public class FlashThread extends Thread implements EasilyCancelable{ final protected static char COMMON_PARAM_IDENTIFIER = '$';//allow to identify when an param of a step is to load from common parameter final protected static Pattern REGEX_FIND_PARAM = Pattern.compile("\\$\\{(.*?)\\}"); - - private final FlashLogger logger; + private final static Logger logger = LoggerFactory.getLogger(FlashThread.class.getSimpleName()); + //private final FlashLogger logger; boolean running = false; boolean cancelled = false; boolean sendIssueLog = false; //if true then the app must write the file for issue. @TODO replace the word "send" by a word more accurate. @@ -66,7 +68,6 @@ public class FlashThread extends Thread implements EasilyCancelable{ this.commands = new HashMap<>(); this.commonParameters = new HashMap<>(); this.firstCommandKey = firstCommandKey; - this.logger = new FlashLogger(controller); this.application = controller; this.pauseLock = pauseLock; this.device = device; @@ -99,13 +100,13 @@ public class FlashThread extends Thread implements EasilyCancelable{ * @return boolean true is success false either */ private boolean handleResult(final Command command){ - System.out.println("FlashThread.handleResult()"); + logger.info("handleResult()"); //read result from command object final int exitValue = command.getExitValue(); final String shellOutput = command.getShellOutput(); - this.logger.writeLine("Shell output: \n``` \n"+shellOutput); - this.logger.writeLine("Exit value: "+exitValue+"\n```"); + logger.debug(" Shell output= {}\nexit value = {}\n", shellOutput, exitValue); + if(command.isSuccess()){ String outputKey = command.getOutputKey(); @@ -114,7 +115,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ final int lastIndex = shellOutput.lastIndexOf("\n"); final int length = shellOutput.length(); final String shellOutputCleaned = shellOutput.substring(lastIndex+1, length); - System.out.println("shell output cleaned : "+shellOutputCleaned); + logger.debug("shell output cleaned : "+shellOutputCleaned); this.commonParameters.put(outputKey.replace("${","").replace("}", ""), shellOutputCleaned); } @@ -124,8 +125,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ if(errorMsgKey == null || errorMsgKey.isEmpty()){ errorMsgKey = "script_error_unknown"; } - logger.write( "Exit value means: "+errorMsgKey ); - System.out.println(errorMsgKey); + logger.warn("Exit value means: "+errorMsgKey ); showError(errorMsgKey); return false; } @@ -158,7 +158,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ * @param sendLog if true, Logger will send data in logger */ synchronized public void cancel(boolean sendLog){ - System.out.println("FlashThread.cancel()"); + logger.info("cancel()"); if(running && commands.containsKey(currentStepCode)){ //@TODO the second part of the test won't work, as we include some "error" steps. So the commands.size isn't good. Command cmd = commands.get(currentStepCode); if(cmd != null) cmd.cancel(); @@ -212,14 +212,16 @@ public class FlashThread extends Thread implements EasilyCancelable{ bundle.putString("stepType", AppConstants.ASK_ACCOUNT_KEY); //@TODO: Tell UI To update Platform.runLater(()->{ - System.out.println("Update UI for"+cmd.getCommand()); + logger.debug("runLater-> Update UI for"+cmd.getCommand()); application.onStepStart(bundle); }); try{ synchronized(pauseLock){ pauseLock.wait(); } - }catch (InterruptedException e) {} //Ignore the issue + }catch (InterruptedException e) { + logger.error("error = "+e.toString()); + } //Ignore the issue //@TODO Find a way to prevent end the run process of this command before to try to run a script //A posibility is to add a (cmd != null) ? cmd.execAndReadOutput : ; in AbsttractThread class and then here: se cmd to null. }else{ @@ -237,7 +239,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ } bundle.putInteger("averageTime", newUIValues.getAverageTime()); Platform.runLater(()->{ - System.out.println("Update UI for"+cmd.getCommand()); + logger.debug("runLater-> Update UI for"+cmd.getCommand()); application.onStepStart(bundle); }); } @@ -263,11 +265,10 @@ public class FlashThread extends Thread implements EasilyCancelable{ */ protected void onErrorRaised(Exception e) { showError("java_error_unknow"); - System.out.println("catched exception "+e.toString()); //send error in log rather that in UI sendIssueLog = true; atLeastOneError = true; - logger.writeLine("Java exception: "+ e.toString()); + logger.error("Java exception: "+ e.toString()); } /** @@ -315,7 +316,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ doBeforeToRunCommand(); if(! cmd.getCommand().contains(AppConstants.ASK_ACCOUNT_KEY)){ //write into logger - this.logger.write("\n\n### Command : "+cmd.getCommand()); + logger.debug("Run(), Command = "+cmd.getCommand()); //run command cmd.execAndReadOutput(); success = handleResult(cmd); @@ -358,7 +359,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ } }); - this.logger.write("\n\nParameters : "+cmd.getParameters().toString()); + logger.debug("updateParameters(), Parameters = "+cmd.getParameters().toString()); } } } diff --git a/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java b/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java index 3c0e062a..ee9df910 100644 --- a/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java +++ b/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java @@ -30,6 +30,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.HashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; /** @@ -40,6 +42,7 @@ import org.yaml.snakeyaml.Yaml; * @author Vincent */ public class ThreadFactory { + private final static Logger logger = LoggerFactory.getLogger(ThreadFactory.class.getSimpleName()); private ProcessMould flashMould; private final HashMap sourcesToDownload; private Device device; @@ -69,15 +72,15 @@ public class ThreadFactory { * @return false if there is an issue or if no flashMould is built */ private boolean loadYAMLFile(){ - System.out.println("loadYAMLFile"); + logger.info("loadYAMLFile()"); + final String modelName = device.getDevice(); //Do not use device.getModel as it doesn't return the expected value + if(modelName == null || modelName.isEmpty()){ + return false; + } + try{ Yaml yaml = new Yaml (); - final String modelName = device.getDevice(); //Do not use device.getModel as it doesn't return the expected value - if(modelName == null || modelName.isEmpty()){ - return false; - } - //load config file InputStream is = getClass().getResourceAsStream(yamlFolderPath+modelName+".yml"); Map yamLContent= (Map)yaml.load(is); @@ -102,7 +105,8 @@ public class ThreadFactory { is.close(); }catch(IOException | NullPointerException e){ - e.printStackTrace(); + logger.error("modelName = {}, error= {}", modelName, e.toString()); + return false; } return true; @@ -113,7 +117,7 @@ public class ThreadFactory { * @param steps Map containing data from YAML */ protected void loadFlashProcess( Map steps){ - System.out.println("loadFlashProcess( ...) "); + logger.info("loadFlashProcess( ... ) "); if(steps == null || steps.isEmpty()){ throw new InvalidParameterException("Flash steps loaded from YAML are invalid"); } @@ -122,7 +126,7 @@ public class ThreadFactory { String scriptExtension = AppConstants.OsName.toLowerCase().contains("windows") ? ".bat" : ".sh"; for(String key: keys){ - System.out.println("Key: "+key); + logger.debug("Key = "+key); Map stepData = (Map) steps.get(key); Step step = new Step(); @@ -148,7 +152,7 @@ public class ThreadFactory { * @param steps Map Loaded from YAML */ protected void loadFlashExtra( Map steps){ - System.out.println("loadFlashExtra(...)"); + logger.info("loadFlashExtra(...)"); if(steps == null || steps.isEmpty()){ throw new InvalidParameterException("Flash steps's extra loaded from YAML are invalid"); } @@ -183,7 +187,7 @@ public class ThreadFactory { * @param sources Map containing steps of preparation */ protected void loadSourcesToDownload( Map sources){ - System.out.println("loadPreparationProcess(...)"); + logger.info("loadSourcesToDownload(...)"); if(sources == null || sources.isEmpty()){ throw new InvalidParameterException("Preparation steps loaded from YAML are invalid"); } diff --git a/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java b/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java index 40468b0b..206072b5 100644 --- a/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java +++ b/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java @@ -25,12 +25,15 @@ import java.net.http.HttpResponse; import java.nio.file.Paths; import java.util.Base64; import javafx.concurrent.Task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * The goal of this task is to push the specified file on ecloud folder * @author vincent Bourgmayer */ public class UploadToEcloudTask extends Task{ + private final static Logger logger = LoggerFactory.getLogger(UploadToEcloudTask.class.getSimpleName()); String URL; String filePath; @@ -41,6 +44,7 @@ public class UploadToEcloudTask extends Task{ @Override protected Boolean call() throws Exception { + logger.info("call(), url = {}, filepath = {}", URL, filePath); File file = new File(filePath); if(!file.exists()) return false; @@ -56,7 +60,7 @@ public class UploadToEcloudTask extends Task{ var httpClient = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build(); var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println("Response code of log's upload : "+response.statusCode()); + logger.debug("Response code of log's upload : "+response.statusCode()); if(response.statusCode()>= 200 && response.statusCode() < 300){ file.delete(); return true; -- GitLab From baed0cc617ea27300a88865620f8ef1cfe10f6c8 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Thu, 11 Jun 2020 11:10:36 +0200 Subject: [PATCH 07/28] temporary comment createLogfile() method in FlashThread --- src/main/java/ecorp/easy/installer/threads/FlashThread.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index 522ad058..109e2f65 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -149,8 +149,9 @@ public class FlashThread extends Thread implements EasilyCancelable{ * Ask logger to create a log file and return its path * @return */ - public String createLogFile(){ - return ((FlashLogger) logger).writeTofile(); + public String createLogFile(){ + //return ((FlashLogger) logger).writeTofile(); + return ""; } /** -- GitLab From 980edb49d1487278884be436c000b77382c7c2e0 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Thu, 11 Jun 2020 18:25:28 +0200 Subject: [PATCH 08/28] change logger name --- src/main/java/ecorp/easy/installer/EasyInstaller.java | 2 +- .../ecorp/easy/installer/controllers/MainWindowController.java | 2 +- .../controllers/subcontrollers/DeviceDetectedController.java | 2 +- .../controllers/subcontrollers/DownloadSrcController.java | 2 +- .../controllers/subcontrollers/EAccountController.java | 2 +- .../controllers/subcontrollers/EnableADBController.java | 2 +- .../controllers/subcontrollers/FeedbackController.java | 2 +- .../controllers/subcontrollers/FlashSceneController.java | 2 +- src/main/java/ecorp/easy/installer/models/Command.java | 2 +- src/main/java/ecorp/easy/installer/threads/AskAccountTask.java | 2 +- .../java/ecorp/easy/installer/threads/DeviceDetectionTask.java | 2 +- src/main/java/ecorp/easy/installer/threads/DownloadTask.java | 2 +- src/main/java/ecorp/easy/installer/threads/FlashThread.java | 2 +- src/main/java/ecorp/easy/installer/threads/ThreadFactory.java | 2 +- .../java/ecorp/easy/installer/threads/UploadToEcloudTask.java | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/EasyInstaller.java b/src/main/java/ecorp/easy/installer/EasyInstaller.java index c1e30d14..ca6305f8 100644 --- a/src/main/java/ecorp/easy/installer/EasyInstaller.java +++ b/src/main/java/ecorp/easy/installer/EasyInstaller.java @@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class EasyInstaller extends Application { - private final static Logger logger = LoggerFactory.getLogger(EasyInstaller.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(EasyInstaller.class); public final static String FXML_PATH ="/fxml/"; private ResourceBundle i18n; //i18n mean "internationalization" private MainWindowController controller; diff --git a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java index ef338292..0238c81d 100644 --- a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java +++ b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java @@ -48,7 +48,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class MainWindowController implements Initializable { - private final static Logger logger = LoggerFactory.getLogger(MainWindowController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(MainWindowController.class); @FXML AnchorPane root; @FXML Button nextButton; @FXML Label titleLabel; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java index 5ec14b99..b6668c55 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class DeviceDetectedController extends AbstractSubController{ - private final static Logger logger = LoggerFactory.getLogger(DeviceDetectedController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(DeviceDetectedController.class); @FXML private Button buyNewDevice; @FXML private Button startDetectionButton; @FXML private Label detectionMsg; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java index 6df60c02..698f80e0 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java @@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class DownloadSrcController extends AbstractSubController { - private final static Logger logger = LoggerFactory.getLogger(DownloadSrcController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(DownloadSrcController.class); @FXML ProgressBar preparationProgressBar; @FXML Label progressLabel; @FXML Label progressTitle; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java index e53dba06..7a7005ed 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java @@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory; * This is the controller for eAccount.fxml */ public class EAccountController extends AbstractSubController{ - private static final Logger logger = LoggerFactory.getLogger(EAccountController.class.getSimpleName()); + private static final Logger logger = LoggerFactory.getLogger(EAccountController.class); private static final String MAIL_REGEX="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"; private static final Pattern EMAIL_PATTERN = Pattern.compile(MAIL_REGEX); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java index fc07f134..44aab4a8 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; * @author Vincent */ public class EnableADBController extends AbstractSubSteppedController { - private final static Logger logger = LoggerFactory.getLogger(EnableADBController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(EnableADBController.class); @FXML private Label firstSubStep; @FXML private Label secondSubStep; @FXML private Label thirdSubStep; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java index ceff81a1..a195d51c 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java @@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class FeedbackController extends AbstractSubController { - private final static Logger logger = LoggerFactory.getLogger(FeedbackController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(FeedbackController.class); private @FXML Button sendAnswerBtn; private @FXML TextArea commentArea; private @FXML Label thanksLabel; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index f38d2252..aa613597 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -77,7 +77,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement ResourceBundle instructionsImagesBundle; //Give access to image to loads with instructionsKey private FlashThread thread; private Object pauseLock; //lock used for pausing the FlashThread - private final static Logger logger = LoggerFactory.getLogger(FlashSceneController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(FlashSceneController.class); @Override diff --git a/src/main/java/ecorp/easy/installer/models/Command.java b/src/main/java/ecorp/easy/installer/models/Command.java index 976c455e..c0f536d3 100644 --- a/src/main/java/ecorp/easy/installer/models/Command.java +++ b/src/main/java/ecorp/easy/installer/models/Command.java @@ -36,7 +36,7 @@ public class Command { private String shellOutput; //The shell text output of the execution of the script Process pc; //Process which run the command Step step; //Object which contain data about the command like next step, ... - private final static Logger logger = LoggerFactory.getLogger(Command.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(Command.class); /** * Constructor for instance in context of FlashThread diff --git a/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java b/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java index a943f38c..dc924598 100644 --- a/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java +++ b/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java @@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory; * @author vincent Bourgmayer */ public class AskAccountTask extends Task{ - private final static Logger logger = LoggerFactory.getLogger(AskAccountTask.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(AskAccountTask.class); String email; String sugar; /** diff --git a/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java b/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java index 6ccb7311..47b913fc 100644 --- a/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java @@ -31,7 +31,7 @@ import org.slf4j.LoggerFactory; */ public class DeviceDetectionTask extends Task{ final String CMD_adbDevices = "devices"; - private final static Logger logger = LoggerFactory.getLogger(DeviceDetectionTask.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(DeviceDetectionTask.class); @Override diff --git a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java index 0d3eb35b..15868620 100644 --- a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java @@ -43,7 +43,7 @@ import org.slf4j.LoggerFactory; * @author vincent Bourgmayer */ public class DownloadTask extends Task{ - private final static Logger logger = LoggerFactory.getLogger(DownloadTask.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(DownloadTask.class); /** * Constante taille */ diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index 109e2f65..d33ac2cf 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory; public class FlashThread extends Thread implements EasilyCancelable{ final protected static char COMMON_PARAM_IDENTIFIER = '$';//allow to identify when an param of a step is to load from common parameter final protected static Pattern REGEX_FIND_PARAM = Pattern.compile("\\$\\{(.*?)\\}"); - private final static Logger logger = LoggerFactory.getLogger(FlashThread.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(FlashThread.class); //private final FlashLogger logger; boolean running = false; boolean cancelled = false; diff --git a/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java b/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java index ee9df910..bf8d4415 100644 --- a/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java +++ b/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java @@ -42,7 +42,7 @@ import org.yaml.snakeyaml.Yaml; * @author Vincent */ public class ThreadFactory { - private final static Logger logger = LoggerFactory.getLogger(ThreadFactory.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(ThreadFactory.class); private ProcessMould flashMould; private final HashMap sourcesToDownload; private Device device; diff --git a/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java b/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java index 206072b5..f46a7cdb 100644 --- a/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java +++ b/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; * @author vincent Bourgmayer */ public class UploadToEcloudTask extends Task{ - private final static Logger logger = LoggerFactory.getLogger(UploadToEcloudTask.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(UploadToEcloudTask.class); String URL; String filePath; -- GitLab From d41e3dba0883f6d5f6177f4a710564efc47c19ad Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Thu, 11 Jun 2020 18:47:44 +0200 Subject: [PATCH 09/28] add basic configuration file for logback --- src/main/resources/logback.xml | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/main/resources/logback.xml diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 00000000..e97a589b --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,43 @@ + + + + + + + myApp.log + + + %date %level [%thread] %logger{10} [%file:%line] %msg%n + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + -- GitLab From 6690e1a489278dcc798b6cc506d365ecca8c6d28 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Fri, 12 Jun 2020 09:58:11 +0200 Subject: [PATCH 10/28] add a propertyDefiner to specify log folder --- .../logger/LogPathPropertyDefiner.java | 22 ++++++++++++ src/main/java/module-info.java | 3 +- src/main/resources/logback.xml | 36 +++++++++---------- 3 files changed, 41 insertions(+), 20 deletions(-) create mode 100644 src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java diff --git a/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java b/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java new file mode 100644 index 00000000..2c4fa438 --- /dev/null +++ b/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java @@ -0,0 +1,22 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package ecorp.easy.installer.logger; + +import ch.qos.logback.core.PropertyDefinerBase; +import ecorp.easy.installer.AppConstants; + +/** + * + * @author vincent + */ +public class LogPathPropertyDefiner extends PropertyDefinerBase{ + + @Override + public String getPropertyValue() { + return AppConstants.getWritableFolder(); + } + +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index b8d38194..420afa7e 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -27,6 +27,7 @@ module ecorp.easy.installer { opens ecorp.easy.installer to javafx.fxml; opens ecorp.easy.installer.controllers to javafx.fxml; opens ecorp.easy.installer.controllers.subcontrollers to javafx.fxml; - + + exports ecorp.easy.installer.logger; exports ecorp.easy.installer; } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index e97a589b..df6cfc02 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -17,27 +17,25 @@ * along with this program. If not, see . */ --> - - - - myApp.log + - - %date %level [%thread] %logger{10} [%file:%line] %msg%n - - + + + ${LOG_PATH}/${bySecond}.log + + %date %level [%thread] %logger{10} [%file:%line] %msg%n + + - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + - - - - + + + + -- GitLab From 5f41ce61e90683774391f1bdcba0d2f391f1c4b1 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Fri, 12 Jun 2020 10:53:14 +0200 Subject: [PATCH 11/28] allow to send logback's file on ecloud instead of previous log file --- .../subcontrollers/FlashSceneController.java | 4 +- .../easy/installer/logger/FlashLogger.java | 91 ------------------- .../logger/LogPathPropertyDefiner.java | 18 +++- .../easy/installer/threads/FlashThread.java | 10 -- src/main/resources/logback.xml | 4 +- 5 files changed, 20 insertions(+), 107 deletions(-) delete mode 100644 src/main/java/ecorp/easy/installer/logger/FlashLogger.java diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index aa613597..b958153f 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -19,6 +19,7 @@ package ecorp.easy.installer.controllers.subcontrollers; import ecorp.easy.installer.AppConstants; import ecorp.easy.installer.controllers.MainWindowController; import ecorp.easy.installer.graphics.FlashGlobalProgressManager; +import ecorp.easy.installer.logger.LogPathPropertyDefiner; import ecorp.easy.installer.models.DataBundle; import ecorp.easy.installer.threads.EasilyCancelable; import ecorp.easy.installer.threads.FlashThread; @@ -83,6 +84,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement @Override public void initialize(URL location, ResourceBundle resources) { super.initialize(location, resources); + logger.debug("Initialize FlashSceneController.java"); sendLogBtn.managedProperty().bind(sendLogBtn.visibleProperty()); loadStepProgressIndicator.managedProperty().bind(loadStepProgressIndicator.visibleProperty()); @@ -358,7 +360,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ public boolean sendLogToSupport(){ if(thread != null){ - String filePath = thread.createLogFile(); + String filePath = LogPathPropertyDefiner.getLogFilePath(); if(filePath != null){ UploadToEcloudTask uploadTask = new UploadToEcloudTask(AppConstants.LOG_STORAGE_URL, filePath); diff --git a/src/main/java/ecorp/easy/installer/logger/FlashLogger.java b/src/main/java/ecorp/easy/installer/logger/FlashLogger.java deleted file mode 100644 index cc16fa15..00000000 --- a/src/main/java/ecorp/easy/installer/logger/FlashLogger.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2019-2020 - ECORP SAS - - * 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 3 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, see . - */ -package ecorp.easy.installer.logger; - -import ecorp.easy.installer.AppConstants; -import ecorp.easy.installer.utils.IFlashHandler; -import java.io.BufferedWriter; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.UUID; -import javafx.application.Platform; - -/** - * - * @author vincent Bourgmayer - */ -public class FlashLogger{ - private final StringBuilder logs; - private final IFlashHandler displayOutput; - - public FlashLogger(IFlashHandler output){ - super(); - this.displayOutput = output; - this.logs = new StringBuilder(); - } - - - public void writeLine(String log) { - this.logs.append(log); - Platform.runLater( () -> { - displayOutput.onLogToDisplayRecieved(log); - }); - } - - /** - * Write all the log content into a file - * @return The absolute path to the file or null if there is an error during writing - */ - public String writeTofile() { - System.out.println("FlashLogger.writeLogToFile()"); - //generate unique file name thanks to UUID: - //https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/UUID.html#randomUUID() - String fileNameToHash=UUID.randomUUID()+".log"; - String logFilePath = AppConstants.getWritableFolder()+fileNameToHash; - try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(logFilePath, true)))) { - out.write(logs.toString()); - } catch (IOException e) { - System.err.println(e); - return null; - } - return logFilePath; - } - - /** - * Write content of log into a file. - * @param logFilePath path to the local file - * @param log the String to write into a file - */ - public void writeTofile(String logFilePath, String log) { - System.out.println("write log to file"); - try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(logFilePath, true)))) { - out.println(log); - } catch (IOException e) { - System.err.println(e); - } - } - - /** - * Write a String in the StringBuilder for specified API - * @param log The text to write in Log - */ - public void write(String log) { - if(log != null && ! log.isEmpty()) - this.logs.append(log); - } -} diff --git a/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java b/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java index 2c4fa438..a3b32c4f 100644 --- a/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java +++ b/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java @@ -7,16 +7,30 @@ package ecorp.easy.installer.logger; import ch.qos.logback.core.PropertyDefinerBase; import ecorp.easy.installer.AppConstants; +import java.util.UUID; /** * * @author vincent */ public class LogPathPropertyDefiner extends PropertyDefinerBase{ - + private static final String logFilePath = AppConstants.getWritableFolder()+UUID.randomUUID()+".log"; + + + /** + * This is access for logback.xml + * @return + */ @Override public String getPropertyValue() { - return AppConstants.getWritableFolder(); + return logFilePath; } + /** + * This is access for FlashSceneController.java + * @return + */ + public static String getLogFilePath(){ + return logFilePath; + } } diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index d33ac2cf..8264be0f 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -17,7 +17,6 @@ package ecorp.easy.installer.threads; import ecorp.easy.installer.AppConstants; -import ecorp.easy.installer.logger.FlashLogger; import ecorp.easy.installer.models.Device; import ecorp.easy.installer.models.Command; import ecorp.easy.installer.models.DataBundle; @@ -144,15 +143,6 @@ public class FlashThread extends Thread implements EasilyCancelable{ application.onFlashError(bundle); }); } - - /** - * Ask logger to create a log file and return its path - * @return - */ - public String createLogFile(){ - //return ((FlashLogger) logger).writeTofile(); - return ""; - } /** * stop the thread diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index df6cfc02..5184c203 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -19,10 +19,8 @@ --> - - - ${LOG_PATH}/${bySecond}.log + ${LOG_PATH} %date %level [%thread] %logger{10} [%file:%line] %msg%n -- GitLab From b4450461e4112ed46f251e17a42fb8cc7b5e9d6a Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Mon, 15 Jun 2020 11:49:48 +0200 Subject: [PATCH 12/28] try fix gitlab-ci error --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 56447ceb..4f6f3bf3 100644 --- a/build.gradle +++ b/build.gradle @@ -48,6 +48,7 @@ description = 'Modular easy-installer' mainClassName = "$moduleName/ecorp.easy.installer.EasyInstaller" dependencies { + compile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1' compile 'ch.qos.logback:logback-classic:1.2.3' compile 'ch.qos.logback:logback-core:1.2.3' compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' -- GitLab From 9145efa8f6cb60d5239ef502d5e2ef8d26b06d1d Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 17 Jun 2020 13:49:56 +0200 Subject: [PATCH 13/28] display log when click on them --- .../subcontrollers/FlashSceneController.java | 12 ++++ .../easy/installer/logger/GUIAppender.java | 55 +++++++++++++++++++ src/main/resources/logback.xml | 2 + 3 files changed, 69 insertions(+) create mode 100644 src/main/java/ecorp/easy/installer/logger/GUIAppender.java diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index b958153f..20389317 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -16,9 +16,11 @@ */ package ecorp.easy.installer.controllers.subcontrollers; +import ch.qos.logback.classic.LoggerContext; import ecorp.easy.installer.AppConstants; import ecorp.easy.installer.controllers.MainWindowController; import ecorp.easy.installer.graphics.FlashGlobalProgressManager; +import ecorp.easy.installer.logger.GUIAppender; import ecorp.easy.installer.logger.LogPathPropertyDefiner; import ecorp.easy.installer.models.DataBundle; import ecorp.easy.installer.threads.EasilyCancelable; @@ -344,13 +346,23 @@ public class FlashSceneController extends AbstractSubSteppedController implement * enable/disable log displaying */ public void showHideLog(){ + ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + GUIAppender appender = (GUIAppender) rootLogger.getAppender("GUI"); + + String text = showHideLogBtn.getText(); if(text.equals(">")){ showHideLogBtn.setText("V"); logScrollPane.setVisible(false); + + logFlow.getChildren().clear(); + appender.setContainer(null); }else{ showHideLogBtn.setText(">"); logScrollPane.setVisible(true); + + logFlow.getChildren().addAll(appender.getLogsList()); + appender.setContainer(logFlow); } } diff --git a/src/main/java/ecorp/easy/installer/logger/GUIAppender.java b/src/main/java/ecorp/easy/installer/logger/GUIAppender.java new file mode 100644 index 00000000..ce5a6f3a --- /dev/null +++ b/src/main/java/ecorp/easy/installer/logger/GUIAppender.java @@ -0,0 +1,55 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package ecorp.easy.installer.logger; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.AppenderBase; +import java.util.ArrayList; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.text.Text; +import javafx.scene.text.TextFlow; + +/** + * + * @author vincent + */ +public class GUIAppender extends AppenderBase{ + private ArrayList logsList= new ArrayList<>(); + private TextFlow container; + + @Override + protected void append(ILoggingEvent e) { + if(logsList.size() > 100){ + logsList.remove(0); + } + Text txt = buildLabel(e); + logsList.add(txt); + + //side effect + displayLog(txt); + } + + public synchronized void setContainer(TextFlow container){ + this.container = container; + } + + + private synchronized void displayLog(Text text){ + if(container != null){ + container.getChildren().add(text); + } + } + private Text buildLabel(ILoggingEvent e){ + Text result = new Text(e.getTimeStamp()+" - "+e.getMessage()+"\n"); + return result; + } + + + public ArrayList getLogsList() { + return logsList; + } +} diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 5184c203..4d2ed5a1 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -31,9 +31,11 @@ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + -- GitLab From b63cab26e8afa7d95d260b1def88bc03c0450d90 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 17 Jun 2020 15:28:38 +0200 Subject: [PATCH 14/28] update log display and logging for FeedbackController.java --- .../controllers/subcontrollers/FeedbackController.java | 4 ++-- src/main/java/ecorp/easy/installer/logger/GUIAppender.java | 3 ++- src/main/resources/logback.xml | 6 +++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java index a195d51c..fbd2ade9 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java @@ -74,7 +74,7 @@ public class FeedbackController extends AbstractSubController { Button clickedButton = (Button) event.getSource(); if(clickedButton.equals(selectedFeelings)) { - logger.debug("onFeelingsSelected(), Deselect: "+selectedFeelings.getId()); + logger.debug("onFeelingsSelected(), Deselect: {}", selectedFeelings.getId()); selectedFeelings.getStyleClass().remove(SELECTED_STYLE); selectedFeelings = null; } @@ -84,7 +84,7 @@ public class FeedbackController extends AbstractSubController { clickedButton.getStyleClass().add(SELECTED_STYLE); selectedFeelings = clickedButton; - logger.debug("onFeelingsSelected(), select: "+selectedFeelings.getId()); + logger.debug("onFeelingsSelected(), select: {}", selectedFeelings.getId()); } } diff --git a/src/main/java/ecorp/easy/installer/logger/GUIAppender.java b/src/main/java/ecorp/easy/installer/logger/GUIAppender.java index ce5a6f3a..9c9f99a5 100644 --- a/src/main/java/ecorp/easy/installer/logger/GUIAppender.java +++ b/src/main/java/ecorp/easy/installer/logger/GUIAppender.java @@ -44,7 +44,8 @@ public class GUIAppender extends AppenderBase{ } } private Text buildLabel(ILoggingEvent e){ - Text result = new Text(e.getTimeStamp()+" - "+e.getMessage()+"\n"); + + Text result = new Text(e.getFormattedMessage()+"\n"); return result; } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 4d2ed5a1..562e2fa2 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -31,7 +31,11 @@ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - + + + %d{HH:mm:ss} [%thread] %logger{36} - %msg%n + + /> -- GitLab From 1ff41a8a5a73ffba3472adb2a704e505e075ac0d Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 09:18:05 +0200 Subject: [PATCH 15/28] import slf4j-api --- build.gradle | 4 ++++ src/main/java/module-info.java | 1 + 2 files changed, 5 insertions(+) diff --git a/build.gradle b/build.gradle index 51ee670a..36fd20f5 100644 --- a/build.gradle +++ b/build.gradle @@ -32,6 +32,7 @@ sourceSets.main { } } repositories { + maven { url "https://mvnrepository.com/" } mavenCentral() } @@ -47,8 +48,11 @@ description = 'Modular easy-installer' mainClassName = "$moduleName/ecorp.easy.installer.EasyInstaller" dependencies { + compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' compile 'org.yaml:snakeyaml:1.25' testCompile 'junit:junit:4.12' + + //compile 'org.slf4j:slf4j-log4j1:1.7.5' } // Application Configuration diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index b8c0b624..b8d38194 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -23,6 +23,7 @@ module ecorp.easy.installer { requires javafx.base; requires jdk.crypto.ec; //REQUIRED TO DOWNLOAD OVER HTTPS requires org.yaml.snakeyaml; + requires org.slf4j; opens ecorp.easy.installer to javafx.fxml; opens ecorp.easy.installer.controllers to javafx.fxml; opens ecorp.easy.installer.controllers.subcontrollers to javafx.fxml; -- GitLab From 514b5075e2ea442a985203152c5ac293176a5ec1 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 09:26:26 +0200 Subject: [PATCH 16/28] add logback --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index 36fd20f5..5fd271c7 100644 --- a/build.gradle +++ b/build.gradle @@ -48,6 +48,8 @@ description = 'Modular easy-installer' mainClassName = "$moduleName/ecorp.easy.installer.EasyInstaller" dependencies { + compile 'ch.qos.logback:logback-classic:1.2.3' + compile 'ch.qos.logback:logback-core:1.2.3' compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' compile 'org.yaml:snakeyaml:1.25' testCompile 'junit:junit:4.12' -- GitLab From 1346fb5bb37af60a56271222683166c71a90b2a1 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 10:56:27 +0200 Subject: [PATCH 17/28] replace sytem.out.println by logback & slf4j logger --- .../ecorp/easy/installer/EasyInstaller.java | 18 ++++++++------- .../controllers/MainWindowController.java | 23 ++++++++++--------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/EasyInstaller.java b/src/main/java/ecorp/easy/installer/EasyInstaller.java index 32bc0bf6..c1e30d14 100644 --- a/src/main/java/ecorp/easy/installer/EasyInstaller.java +++ b/src/main/java/ecorp/easy/installer/EasyInstaller.java @@ -31,29 +31,29 @@ import javafx.scene.Scene; import javafx.scene.text.Font; import javafx.stage.Screen; import javafx.stage.Stage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author Vincent Bourgmayer */ public class EasyInstaller extends Application { + private final static Logger logger = LoggerFactory.getLogger(EasyInstaller.class.getSimpleName()); public final static String FXML_PATH ="/fxml/"; private ResourceBundle i18n; //i18n mean "internationalization" - private MainWindowController controller; @Override public void start(Stage stage) throws Exception { - //four lines below are just for test - System.out.println("OS name: "+OsName); - System.out.println("Java Home: "+JavaHome); - System.out.println("Current working dir: "+Paths.get("").toAbsolutePath().toString()); - System.out.println("ADB folder path: "+AppConstants.getADBFolderPath() ); + + logger.debug("\nOS name = {}\nJava Home = {}\nCurrent working dir = {}\nADB folder path = {}", OsName, JavaHome, Paths.get("").toAbsolutePath().toString(), AppConstants.getADBFolderPath()); Locale currentLocale= Locale.getDefault(); - i18n = ResourceBundle.getBundle("lang.translation", currentLocale); + logger.debug("language = {}, country = {} ", currentLocale.getLanguage(), currentLocale.getCountry()); + //Load main view FXMLLoader loader = new FXMLLoader(getClass().getResource(FXML_PATH+"mainWindow.fxml")); loader.setResources(i18n); @@ -79,6 +79,8 @@ public class EasyInstaller extends Application { stage.setWidth(screenWidth); stage.setHeight(screenHeight); } + + logger.debug("Detected screen's size = {} x {}\nstage's size = {} x {}", screenWidth, screenHeight, stage.getWidth(), stage.getHeight()); //Display UI stage.show(); } @@ -93,7 +95,7 @@ public class EasyInstaller extends Application { @Override public void stop(){ - System.out.println("Stage is closing"); + logger.info("stage is closing"); // Save file controller.onStop(); } diff --git a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java index cf4e6c87..d3a66a71 100644 --- a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java +++ b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java @@ -40,13 +40,15 @@ import javafx.fxml.FXMLLoader; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.control.Button; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Main window Controller class * * @author Vincent Bourgmayer */ public class MainWindowController implements Initializable { - + private final static Logger logger = LoggerFactory.getLogger(MainWindowController.class.getSimpleName()); @FXML AnchorPane root; @FXML Button nextButton; @FXML Label titleLabel; @@ -64,6 +66,7 @@ public class MainWindowController implements Initializable { */ @Override public void initialize(URL url, ResourceBundle rb) { + logger.info("initialize()"); this.i18n = rb; disableNextButton(false); //just for test loadSubScene(); @@ -71,8 +74,8 @@ public class MainWindowController implements Initializable { fontSize.bind(root.widthProperty().add(root.heightProperty()).divide(123.2)); //72 = 1440 (default width): 20 (default font size). 51.2 = 1024 / 20 root.styleProperty().bind( - Bindings.concat("-fx-font-size: ", - fontSize.asString("%.0f")).concat("px;")); + Bindings.concat("-fx-font-size: ", fontSize.asString("%.0f")).concat("px;") + ); } @@ -126,7 +129,7 @@ public class MainWindowController implements Initializable { * Reset the handler for when next button is clicked */ public void resetNextButtonEventHandler(){ - System.out.println("ResetNextButtonEventHandler"); + logger.info("ResetNextButtonEventHandler()"); nextButton.setOnMouseClicked((MouseEvent event)->{ onNextBtnClick(); }); @@ -144,7 +147,7 @@ public class MainWindowController implements Initializable { * Load different group of controls depending of the current step (of whole process) */ public void loadSubScene(){ - System.out.println("loadSubScene("+currentSubRootId+")"); + logger.info("loadSubScene("+currentSubRootId+")"); if(currentSubRootId == null || currentSubRootId.isEmpty()){ currentSubRootId =loadSubUI("1-beforeYouBegin.fxml"); @@ -196,7 +199,7 @@ public class MainWindowController implements Initializable { Platform.exit(); break; default: - System.out.println("Invalid currentSubRootId"); + logger.error("Invalid currentSubRootId"); break; } } @@ -233,7 +236,6 @@ public class MainWindowController implements Initializable { * @return */ public FXMLLoader loadFXML(String fxmlName){ - System.out.println("loadFXML('"+fxmlName+"')"); FXMLLoader loader; try{ loader = new FXMLLoader(getClass().getResource(EasyInstaller.FXML_PATH+fxmlName)); @@ -242,7 +244,7 @@ public class MainWindowController implements Initializable { AbstractSubController ctrl = loader.getController(); if(ctrl != null) ctrl.setParentController(this); }catch(IOException e){ - e.printStackTrace(); + logger.error("fxmlName = {}, error = {}", fxmlName, e.toString()); return null; } return loader; @@ -253,7 +255,6 @@ public class MainWindowController implements Initializable { * @return subRoot. */ public String loadSubUI(String fxmlName){ - System.out.println("loadSubUI("+fxmlName+")"); FXMLLoader loader = loadFXML(fxmlName); Pane subRoot = (Pane) loader.getRoot(); root.getChildren().add(0, subRoot); //adding this element as first subNode, let other element like button to still be clickable on small screen @@ -289,7 +290,7 @@ public class MainWindowController implements Initializable { * It is in charge to close the opened flash or preparation Thread */ public void onStop(){ - System.out.println("onStop"); + logger.debug("onStop()"); if(this.thread != null){ thread.onCancelRequestRecieved(); } @@ -318,7 +319,7 @@ public class MainWindowController implements Initializable { throw new Exception("OS not supported"); //Not Supported OS } }catch(Exception e){ - e.printStackTrace(); + logger.error("url = {}, error = {}", url, e.toString()); } } -- GitLab From e243adf672b70a6b2204d798f4bf7b66de42e1df Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 16:03:39 +0200 Subject: [PATCH 18/28] add log system in all sucontrollers --- .../DeviceDetectedController.java | 10 +++--- .../subcontrollers/DownloadSrcController.java | 13 +++++--- .../subcontrollers/EAccountController.java | 5 ++- .../subcontrollers/EnableADBController.java | 9 ++++-- .../subcontrollers/FeedbackController.java | 24 ++++++++------ .../subcontrollers/FlashSceneController.java | 32 ++++++++++++------- 6 files changed, 60 insertions(+), 33 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java index f9224427..5ec14b99 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java @@ -26,13 +26,14 @@ import javafx.concurrent.WorkerStateEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author Vincent Bourgmayer */ public class DeviceDetectedController extends AbstractSubController{ - - + private final static Logger logger = LoggerFactory.getLogger(DeviceDetectedController.class.getSimpleName()); @FXML private Button buyNewDevice; @FXML private Button startDetectionButton; @FXML private Label detectionMsg; @@ -55,6 +56,7 @@ public class DeviceDetectedController extends AbstractSubController{ * Start the process of detection */ public void startDetection(){ + logger.info("startDetection()"); startDetectionButton.setManaged(false); startDetectionButton.setVisible(false); buyNewDevice.setVisible(false); @@ -92,7 +94,7 @@ public class DeviceDetectedController extends AbstractSubController{ new Thread(detectorTask).start(); } catch(Exception e){ - e.printStackTrace(); + logger.error("startDetection(), error: {}", e.toString()); //@TODO: handle Too many device Found Exception } } @@ -161,7 +163,7 @@ public class DeviceDetectedController extends AbstractSubController{ throw new Exception("OS not supported"); } }catch(Exception e){ - e.printStackTrace(); + logger.error("goToShop(), error: {}", e.toString()); } } } diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java index 96db6c22..6df60c02 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java @@ -30,6 +30,8 @@ import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.ProgressBar; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * FXML Controller class @@ -37,7 +39,7 @@ import javafx.scene.control.ProgressBar; * @author Vincent Bourgmayer */ public class DownloadSrcController extends AbstractSubController { - + private final static Logger logger = LoggerFactory.getLogger(DownloadSrcController.class.getSimpleName()); @FXML ProgressBar preparationProgressBar; @FXML Label progressLabel; @FXML Label progressTitle; @@ -66,7 +68,8 @@ public class DownloadSrcController extends AbstractSubController { private boolean startNextDownload(){ - System.out.println("taskIterator has next ? "+taskIterator.hasNext()); + logger.info("startNextDownload()"); + logger.debug("taskIterator has next ? {} "+taskIterator.hasNext()); if(taskIterator.hasNext()){ Map.Entry sources = taskIterator.next(); currentTask = new DownloadTask(sources.getKey(), sources.getValue(), i18n); @@ -93,9 +96,9 @@ public class DownloadSrcController extends AbstractSubController { progressLabel.textProperty().unbind(); progressTitle.textProperty().unbind(); preparationProgressBar.progressProperty().unbind(); - this.preparationProgressBar.getStyleClass().add("errorBar"); - System.out.println(eh.getSource().getException().toString()); - this.progressLabel.setText(i18n.getString("download_lbl_downloadError")); + preparationProgressBar.getStyleClass().add("errorBar"); + logger.error("startNextDownload(), error: {}", eh.getSource().getException().toString()); + progressLabel.setText(i18n.getString("download_lbl_downloadError")); restartDownloadBtn.setManaged(true); restartDownloadBtn.setVisible(true); }); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java index f55fde00..e53dba06 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java @@ -30,6 +30,8 @@ import javafx.scene.control.RadioButton; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -37,6 +39,7 @@ import javafx.scene.layout.VBox; * This is the controller for eAccount.fxml */ public class EAccountController extends AbstractSubController{ + private static final Logger logger = LoggerFactory.getLogger(EAccountController.class.getSimpleName()); private static final String MAIL_REGEX="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"; private static final Pattern EMAIL_PATTERN = Pattern.compile(MAIL_REGEX); @@ -80,7 +83,7 @@ public class EAccountController extends AbstractSubController{ public void onCheckMailBtnClick(){ - System.out.println("Check Mail button clicked"); + logger.info("onCheckMailBtnClick"); final String userInput = mailInput.getText(); parentController.disableNextButton(true); if(!radioButton.isSelected()) radioButton.setSelected(true); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java index c5f7ce43..fc07f134 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java @@ -23,6 +23,8 @@ import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -31,7 +33,7 @@ import javafx.scene.image.ImageView; * @author Vincent */ public class EnableADBController extends AbstractSubSteppedController { - + private final static Logger logger = LoggerFactory.getLogger(EnableADBController.class.getSimpleName()); @FXML private Label firstSubStep; @FXML private Label secondSubStep; @FXML private Label thirdSubStep; @@ -52,11 +54,14 @@ public class EnableADBController extends AbstractSubSteppedController { } private void updateImage(){ - System.out.println("currentStepId= "+currentSubStepId); + logger.info("updateImage()"); + logger.debug("currentStepId= {}", currentSubStepId); + Image image; try{ image = new Image(this.parentController.getClass().getResourceAsStream("/images/enableADB"+(currentSubStepId+2)+".png")); }catch(Exception e){ + logger.warn("imageName = {}, error = {}", "/images/enableADB"+(currentSubStepId+2), e.toString()); image = null; } this.enableADBImg.setImage(image); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java index a8b3919b..ceff81a1 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java @@ -30,6 +30,8 @@ import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextArea; import javafx.scene.input.MouseEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -38,7 +40,7 @@ import javafx.scene.input.MouseEvent; * @author Vincent Bourgmayer */ public class FeedbackController extends AbstractSubController { - + private final static Logger logger = LoggerFactory.getLogger(FeedbackController.class.getSimpleName()); private @FXML Button sendAnswerBtn; private @FXML TextArea commentArea; private @FXML Label thanksLabel; @@ -54,10 +56,12 @@ public class FeedbackController extends AbstractSubController { parentController.setNextButtonText("feedback_btn_leave"); Device device = parentController.getDevice(); if(device != null){ - System.out.println("Device not null!"); + logger.debug("setParentController(), ParentController.getDevice() != null"); deviceModel = device.getModel()+", "+device.getDevice(); - }else - System.out.println("device is null"); + }else{ + logger.warn("setParentController(), parentController.getDevice() == null"); + } + } @@ -70,7 +74,7 @@ public class FeedbackController extends AbstractSubController { Button clickedButton = (Button) event.getSource(); if(clickedButton.equals(selectedFeelings)) { - System.out.println("Deselect: "+selectedFeelings.getId()); + logger.debug("onFeelingsSelected(), Deselect: "+selectedFeelings.getId()); selectedFeelings.getStyleClass().remove(SELECTED_STYLE); selectedFeelings = null; } @@ -80,7 +84,7 @@ public class FeedbackController extends AbstractSubController { clickedButton.getStyleClass().add(SELECTED_STYLE); selectedFeelings = clickedButton; - System.out.println("Select:" +selectedFeelings.getId()); + logger.debug("onFeelingsSelected(), select: "+selectedFeelings.getId()); } } @@ -99,19 +103,19 @@ public class FeedbackController extends AbstractSubController { sendAnswerBtn.setVisible(false); thanksLabel.setVisible(true); thanksLabel.setManaged(true); - System.out.println("sending feedback: success"); + logger.debug("onSendBtnClicked(), sending feedback: success"); } else{ //if failure sendAnswerBtn.setText(i18n.getString("feedback_btn_sendTryAgain")); sendAnswerBtn.setDisable(false); - System.out.println("sending feedback: failed"); + logger.error("onSendBtnClicked(), sending feedback: failure"); } }); uploadTask.setOnFailed(eh->{ sendAnswerBtn.setDisable(false); sendAnswerBtn.setText(i18n.getString("feedback_btn_sendTryAgain")); - System.out.println("sending feedback error: "+eh.getSource().getException().toString()); + logger.error("onSendBtnClicked(), sending feedback: failure, error: {}", eh.getSource().getException().toString()); }); new Thread(uploadTask).start(); @@ -133,7 +137,7 @@ public class FeedbackController extends AbstractSubController { out.write("\nComment: \n"+this.commentArea.getText()); } catch (IOException e) { - System.err.println(e); + logger.error("createAnswerFile()\n answerFilePath = {}\n error: {}", answerFilePath, e.toString()); return null; } return answerFilePath; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index 5ddb8c28..2adf0cc8 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -44,6 +44,8 @@ import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.text.TextFlow; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * FXML Controller class @@ -76,7 +78,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement ResourceBundle instructionsImagesBundle; //Give access to image to loads with instructionsKey private FlashThread thread; private Object pauseLock; //lock used for pausing the FlashThread - + private final static Logger logger = LoggerFactory.getLogger(FlashSceneController.class.getSimpleName()); @Override @@ -153,7 +155,8 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ @Override public void onStepStart(DataBundle db) { - System.out.println("onStepStart"); + logger.info("onStepStart()"); + logger.debug(" DataBundle = {}", db.toString()); if(db == null)return; if(timer != null){ @@ -177,6 +180,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement try{ this.instructionImage.setImage(new Image(getClass().getResourceAsStream("/images/"+instructionsImagesBundle.getString(instructionImgName)))); }catch (Exception e) { + logger.warn("onStepStart(), image key = {}, error = {}", instructionImgName, e.toString()); this.instructionImage.setImage(null); } } @@ -225,10 +229,11 @@ public class FlashSceneController extends AbstractSubSteppedController implement * @param db */ private void onLoadStepType(DataBundle db){ + logger.info("onLoadStepType()"); instructionsVBox.setAlignment(Pos.CENTER); parentController.setNextButtonVisible(false); int averageTime = db.getInt("averageTime"); - System.out.println("averageTime is: "+averageTime); + logger.debug("averageTime = {} ", averageTime); if(averageTime > -1){ //Or > 0 ? timer = new TimerTask(averageTime, this); loadStepProgressIndicator.setProgress(0.0); //Reset to prevent showing last value @@ -271,13 +276,15 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ @Override public void onFlashError(DataBundle db) { - System.out.println("onFlashError"); - + logger.warn("onFlashError()"); String errorMsgKey = db.getString("errorMsgKey"); + if(errorMsgKey == null || errorMsgKey.isEmpty() || !i18n.containsKey(errorMsgKey)) errorMsgKey ="script_error_unknown"; stepTitleLabel.setText(i18n.getString(errorMsgKey)); + logger.debug("errorMsgKey = {}", errorMsgKey); + instructionsFlow.setManaged(false); instructionsFlow.setVisible(false); sendLogBtn.setVisible(true); @@ -296,7 +303,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ @Override public void onFlashThreadEnd(DataBundle db) { - System.out.println("onFlashThreadEnd"); + logger.info("onFlashThreadEnd()"); stepTitleLabel.setText("FlashEnd"); } @@ -307,7 +314,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ @Override public void onFlashStop(DataBundle db) { - System.out.println("onFlashStop"); + logger.info("onFlashStop()"); //flashStepTitleLabel.setText("Stopped"); if(timer != null){ timer.cancel(); @@ -363,17 +370,17 @@ public class FlashSceneController extends AbstractSubSteppedController implement if( (Boolean) eh.getSource().getValue() ){ //if success sendLogBtn.setDisable(true); sendLogBtn.setText(i18n.getString("install_btn_sendLogSuccess")); - System.out.println("sending log: success"); + logger.info("sendLogToSupport(), sending log: success"); } else{ sendLogBtn.setText(i18n.getString("install_btn_sendLogAgain")); - System.out.println("sending log: failed"); + logger.warn("sendLogToSupport(), sending log: failure"); } }); uploadTask.setOnFailed(eh->{ sendLogBtn.setText(i18n.getString("install_btn_sendLogAgain")); - System.out.println("sending log error: "+eh.getSource().getException().toString()); + logger.warn("sendLogToSupport(), sending log: failure, error = {}",eh.getSource().getException().toString() ); }); new Thread(uploadTask).start(); @@ -426,7 +433,10 @@ public class FlashSceneController extends AbstractSubSteppedController implement Image img; try{ img = new Image(getClass().getResourceAsStream("/images/"+instructionsImagesBundle.getString(instruction))); - }catch(Exception e){ img = null; } + }catch(Exception e){ + logger.warn("onNextButtonClicked(), image key = {}, error = {}", instruction, e.toString()); + img = null; + } instructionImage.setImage(img); break; -- GitLab From 4ec96459d40c53b842928d8d1edbfd686a2b9d82 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 16:15:25 +0200 Subject: [PATCH 19/28] use new logger in models --- .../ecorp/easy/installer/models/Command.java | 17 ++++++++++------- .../java/ecorp/easy/installer/models/Step.java | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/models/Command.java b/src/main/java/ecorp/easy/installer/models/Command.java index 782947be..f823da39 100644 --- a/src/main/java/ecorp/easy/installer/models/Command.java +++ b/src/main/java/ecorp/easy/installer/models/Command.java @@ -22,6 +22,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Vincent Bourgmayer @@ -34,10 +36,11 @@ public class Command { private String shellOutput; //The shell text output of the execution of the script Process pc; //Process which run the command Step step; //Object which contain data about the command like next step, ... - + private final static Logger logger = LoggerFactory.getLogger(Command.class.getSimpleName()); /** * Constructor for instance in context of FlashThread + * @param runScriptCmd * @param step */ @@ -118,7 +121,7 @@ public class Command { }); } - System.out.println("Splitted command: "+sb.toString()); + logger.debug("getFinalCmd(), Splitted command = {}", sb.toString()); return sb.toString().split(" "); } @@ -129,13 +132,13 @@ public class Command { */ public void execAndReadOutput() throws IOException, InterruptedException{ - System.out.println("execAndReadOutput() : "+this.command); + logger.debug("execAndReadOutput(), command string = {} ", this.command); ProcessBuilder pb = new ProcessBuilder(getFinalCmd()); pb.redirectErrorStream(true); pc= pb.start(); - System.out.println("Process started"); + logger.info("Command's Process started"); InputStream stdout = pc.getInputStream(); InputStreamReader isr = new InputStreamReader (stdout); BufferedReader br = new BufferedReader(isr); @@ -147,12 +150,12 @@ public class Command { line = br.readLine(); if( line != null && !line.equals("null") ){ sb.append("\n\n").append(line); - System.out.println("\n"+line); + logger.debug("\n (debug)"+line); } } this.exitValue = pc.exitValue(); }catch(IOException e){ - System.out.println(e.toString() ); + logger.error("execAndReadOutput(), error = {}", e.toString() ); this.exitValue = -1; } br.close(); @@ -165,7 +168,7 @@ public class Command { } public void cancel(){ - System.out.println("Command.cancel()"); + logger.info("cancel()"); this.cancelled = true; if(pc != null && pc.isAlive()) pc.destroy(); diff --git a/src/main/java/ecorp/easy/installer/models/Step.java b/src/main/java/ecorp/easy/installer/models/Step.java index fcff86ae..067200d0 100644 --- a/src/main/java/ecorp/easy/installer/models/Step.java +++ b/src/main/java/ecorp/easy/installer/models/Step.java @@ -24,7 +24,7 @@ import java.util.Map; */ public class Step { private StepUi ui; - private boolean startNewThread = false; //define if a new thread should be started if this command succeeds + private boolean startNewThread = false; //@TODO REMOVE! define if a new thread should be started if this command succeeds private String script; //script's file script private String output; //Key of output to store as common parameter private String afterSuccess; // index of next script if succeed -- GitLab From f6d770e2c9b278cbf12b8435d428663efb7b4a82 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 10 Jun 2020 17:17:55 +0200 Subject: [PATCH 20/28] replace logger in threads package --- .../installer/threads/AskAccountTask.java | 6 ++-- .../threads/DeviceDetectionTask.java | 32 +++++++++-------- .../easy/installer/threads/DownloadTask.java | 18 +++++----- .../easy/installer/threads/FlashThread.java | 35 ++++++++++--------- .../easy/installer/threads/ThreadFactory.java | 26 ++++++++------ .../installer/threads/UploadToEcloudTask.java | 6 +++- 6 files changed, 70 insertions(+), 53 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java b/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java index 21a1828f..a943f38c 100644 --- a/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java +++ b/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java @@ -27,12 +27,14 @@ import java.net.http.HttpResponse; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author vincent Bourgmayer */ public class AskAccountTask extends Task{ - + private final static Logger logger = LoggerFactory.getLogger(AskAccountTask.class.getSimpleName()); String email; String sugar; /** @@ -58,7 +60,7 @@ public class AskAccountTask extends Task{ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println(response.body()); + logger.debug("call(), response.body() = {}",response.body() ); return response.body(); } diff --git a/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java b/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java index 435522e8..6ccb7311 100644 --- a/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java @@ -22,6 +22,8 @@ import ecorp.easy.installer.models.Command; import ecorp.easy.installer.models.Device; import javafx.concurrent.Task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -29,6 +31,8 @@ import javafx.concurrent.Task; */ public class DeviceDetectionTask extends Task{ final String CMD_adbDevices = "devices"; + private final static Logger logger = LoggerFactory.getLogger(DeviceDetectionTask.class.getSimpleName()); + @Override protected Device call() throws Exception{ @@ -37,7 +41,7 @@ public class DeviceDetectionTask extends Task{ detectedDevice = runAdbDevicesCmd(AppConstants.getADBFolderPath()+"adb"); if(detectedDevice != null){ - System.out.println("Device found"); + logger.debug("call(), result: Device found"); } return detectedDevice; } @@ -49,7 +53,7 @@ public class DeviceDetectionTask extends Task{ * @throws Exception */ private Device runAdbDevicesCmd(String baseCmdString) throws Exception{ - System.out.println("runADBDevicesCmd()"); + logger.info("runADBDevicesCmd({})", baseCmdString); Command cmd = new Command(baseCmdString); cmd.addParameter("1", CMD_adbDevices); @@ -59,9 +63,9 @@ public class DeviceDetectionTask extends Task{ Device detectedDevice = null; String[] outputs = cmd.getShellOutput().split("\\R"); - System.out.println("raw shell outputs: "+cmd.getShellOutput()); + logger.debug(" raw shell outputs = {} ", cmd.getShellOutput()); if(outputs.length <=1){ - System.out.println("Waiting"); + logger.info(" Waiting"); Thread.sleep(2250); return null; } @@ -74,11 +78,11 @@ public class DeviceDetectionTask extends Task{ } } if(counter > 1){ - System.out.println("Too many devices detected"); + logger.info(" Too many devices detected"); throw new TooManyDevicesException(counter); } if(detectedDevice==null) { - System.out.println("waiting"); + logger.info(" waiting"); Thread.sleep(2250); } return detectedDevice; @@ -92,7 +96,7 @@ public class DeviceDetectionTask extends Task{ * @return the adb's device's id if found else it return empty string */ private Device checkAdbDevicesResult(String resultLine){ - System.out.println("checkAdbDevicesResult("+resultLine+")"); + logger.debug("checkAdbDevicesResult({})", resultLine); boolean deviceFound = false; Device result = null; @@ -101,24 +105,24 @@ public class DeviceDetectionTask extends Task{ //loop over each subString for(String stringPart : datas){ - System.out.println("Current subString : "+stringPart); + logger.debug(" Current subString : "+stringPart); //Detect the line that says that device is found if(!stringPart.isEmpty() && (stringPart.endsWith("device") ||stringPart.endsWith("recovery") ) ){ - System.out.println("Device has been found"); + logger.info(" Device has been found"); deviceFound = true; result = new Device(datas[0]); //get adb id } //Read data and store them in Device object if(deviceFound){ if(stringPart.contains("product:")){ - System.out.println("\"product\" keyword has been found"); + logger.debug(" \"product\" keyword has been found"); result.setName(stringPart.substring("product:".length() )); }else if(stringPart.contains("model:")){ - System.out.println("\"model\" keyword has been found"); - result.setModel(stringPart.substring("model:".length() )); + logger.debug(" \"model\" keyword has been found"); + result.setModel(stringPart.substring("model:".length() )); }else if(stringPart.contains("device:")){ - System.out.println("\"device\" keyword has been found"); - result.setDevice(stringPart.substring("device:".length() )); + logger.debug(" \"device\" keyword has been found"); + result.setDevice(stringPart.substring("device:".length() )); } } } diff --git a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java index 9ea77e47..0d3eb35b 100644 --- a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java @@ -35,12 +35,15 @@ import java.text.DecimalFormat; import java.util.ResourceBundle; import java.util.Scanner; import javafx.concurrent.Task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * this class verify the checksum of a file and download it * @author vincent Bourgmayer */ public class DownloadTask extends Task{ + private final static Logger logger = LoggerFactory.getLogger(DownloadTask.class.getSimpleName()); /** * Constante taille */ @@ -215,7 +218,7 @@ public class DownloadTask extends Task{ * @throws IOException */ private boolean validChecksum( String fileChecksum) throws NoSuchAlgorithmException, IOException{ - System.out.println("ValidChecksum("+fileChecksum+")"); + logger.debug("validChecksum("+fileChecksum+")"); updateMessage(i18n.getString("download_lbl_checkingIntegrity")); //get file containing checksum File sumFile = new File(fileChecksum); @@ -227,9 +230,8 @@ public class DownloadTask extends Task{ } //read content of file containing checksum to extract hash and filename - System.out.println("fileChecksum: "+fileChecksum); String checksumLine = readChecksumFile(fileChecksum); - System.out.println("ChecksumLine : "+checksumLine); + logger.debug(" ChecksumLine = "+checksumLine); String[] splittedLine = checksumLine.split("\\s+"); //get file of the hash @@ -237,7 +239,7 @@ public class DownloadTask extends Task{ File file = new File(AppConstants.getSourcesFolderPath()+splittedLine[1]); if(!file.exists()){ updateMessage(i18n.getString("download_lbl_localFileNotFound")); - System.out.println(splittedLine[1]+" do not exists"); + logger.debug(" "+splittedLine[1]+" do not exists"); return false; } @@ -258,7 +260,7 @@ public class DownloadTask extends Task{ String fileHash = sb.toString(); - System.out.println(fileHash+" vs "+splittedLine[0]); + logger.debug("compare hash: "+fileHash+" vs "+splittedLine[0]); return fileHash.equals(splittedLine[0]); } @@ -287,17 +289,17 @@ public class DownloadTask extends Task{ try{ Thread.sleep(timeout); if(!stop && currentTime == previousTime){ - System.out.println("No updates"); + logger.info("No updates"); //updateProgress & updateMessage are methos of DownloadTask.java updateProgress(-1, 1); updateMessage(i18n.getString("download_lbl_connectionLost")); } }catch(Exception e){ stop = true; - System.out.println("TimeoutThread crashed: "+e.toString()); + logger.error("TimeoutThread crashed: "+e.toString()); } } - System.out.println("timeoutThread is over!"); + logger.debug("timeoutThread is over!"); } //Signal that an amount was increased synchronized private void amountIncreased(){ diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index 6ad3752d..522ad058 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -29,6 +29,8 @@ import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -38,8 +40,8 @@ import java.util.regex.Pattern; public class FlashThread extends Thread implements EasilyCancelable{ final protected static char COMMON_PARAM_IDENTIFIER = '$';//allow to identify when an param of a step is to load from common parameter final protected static Pattern REGEX_FIND_PARAM = Pattern.compile("\\$\\{(.*?)\\}"); - - private final FlashLogger logger; + private final static Logger logger = LoggerFactory.getLogger(FlashThread.class.getSimpleName()); + //private final FlashLogger logger; boolean running = false; boolean cancelled = false; boolean sendIssueLog = false; //if true then the app must write the file for issue. @TODO replace the word "send" by a word more accurate. @@ -66,7 +68,6 @@ public class FlashThread extends Thread implements EasilyCancelable{ this.commands = new HashMap<>(); this.commonParameters = new HashMap<>(); this.firstCommandKey = firstCommandKey; - this.logger = new FlashLogger(controller); this.application = controller; this.pauseLock = pauseLock; this.device = device; @@ -99,13 +100,13 @@ public class FlashThread extends Thread implements EasilyCancelable{ * @return boolean true is success false either */ private boolean handleResult(final Command command){ - System.out.println("FlashThread.handleResult()"); + logger.info("handleResult()"); //read result from command object final int exitValue = command.getExitValue(); final String shellOutput = command.getShellOutput(); - this.logger.writeLine("Shell output: \n``` \n"+shellOutput); - this.logger.writeLine("Exit value: "+exitValue+"\n```"); + logger.debug(" Shell output= {}\nexit value = {}\n", shellOutput, exitValue); + if(command.isSuccess()){ String outputKey = command.getOutputKey(); @@ -114,7 +115,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ final int lastIndex = shellOutput.lastIndexOf("\n"); final int length = shellOutput.length(); final String shellOutputCleaned = shellOutput.substring(lastIndex+1, length); - System.out.println("shell output cleaned : "+shellOutputCleaned); + logger.debug("shell output cleaned : "+shellOutputCleaned); this.commonParameters.put(outputKey.replace("${","").replace("}", ""), shellOutputCleaned); } @@ -124,8 +125,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ if(errorMsgKey == null || errorMsgKey.isEmpty()){ errorMsgKey = "script_error_unknown"; } - logger.write( "Exit value means: "+errorMsgKey ); - System.out.println(errorMsgKey); + logger.warn("Exit value means: "+errorMsgKey ); showError(errorMsgKey); return false; } @@ -158,7 +158,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ * @param sendLog if true, Logger will send data in logger */ synchronized public void cancel(boolean sendLog){ - System.out.println("FlashThread.cancel()"); + logger.info("cancel()"); if(running && commands.containsKey(currentStepCode)){ //@TODO the second part of the test won't work, as we include some "error" steps. So the commands.size isn't good. Command cmd = commands.get(currentStepCode); if(cmd != null) cmd.cancel(); @@ -212,14 +212,16 @@ public class FlashThread extends Thread implements EasilyCancelable{ bundle.putString("stepType", AppConstants.ASK_ACCOUNT_KEY); //@TODO: Tell UI To update Platform.runLater(()->{ - System.out.println("Update UI for"+cmd.getCommand()); + logger.debug("runLater-> Update UI for"+cmd.getCommand()); application.onStepStart(bundle); }); try{ synchronized(pauseLock){ pauseLock.wait(); } - }catch (InterruptedException e) {} //Ignore the issue + }catch (InterruptedException e) { + logger.error("error = "+e.toString()); + } //Ignore the issue //@TODO Find a way to prevent end the run process of this command before to try to run a script //A posibility is to add a (cmd != null) ? cmd.execAndReadOutput : ; in AbsttractThread class and then here: se cmd to null. }else{ @@ -237,7 +239,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ } bundle.putInteger("averageTime", newUIValues.getAverageTime()); Platform.runLater(()->{ - System.out.println("Update UI for"+cmd.getCommand()); + logger.debug("runLater-> Update UI for"+cmd.getCommand()); application.onStepStart(bundle); }); } @@ -263,11 +265,10 @@ public class FlashThread extends Thread implements EasilyCancelable{ */ protected void onErrorRaised(Exception e) { showError("java_error_unknow"); - System.out.println("catched exception "+e.toString()); //send error in log rather that in UI sendIssueLog = true; atLeastOneError = true; - logger.writeLine("Java exception: "+ e.toString()); + logger.error("Java exception: "+ e.toString()); } /** @@ -315,7 +316,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ doBeforeToRunCommand(); if(! cmd.getCommand().contains(AppConstants.ASK_ACCOUNT_KEY)){ //write into logger - this.logger.write("\n\n### Command : "+cmd.getCommand()); + logger.debug("Run(), Command = "+cmd.getCommand()); //run command cmd.execAndReadOutput(); success = handleResult(cmd); @@ -358,7 +359,7 @@ public class FlashThread extends Thread implements EasilyCancelable{ } }); - this.logger.write("\n\nParameters : "+cmd.getParameters().toString()); + logger.debug("updateParameters(), Parameters = "+cmd.getParameters().toString()); } } } diff --git a/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java b/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java index 3c0e062a..ee9df910 100644 --- a/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java +++ b/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java @@ -30,6 +30,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.HashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; /** @@ -40,6 +42,7 @@ import org.yaml.snakeyaml.Yaml; * @author Vincent */ public class ThreadFactory { + private final static Logger logger = LoggerFactory.getLogger(ThreadFactory.class.getSimpleName()); private ProcessMould flashMould; private final HashMap sourcesToDownload; private Device device; @@ -69,15 +72,15 @@ public class ThreadFactory { * @return false if there is an issue or if no flashMould is built */ private boolean loadYAMLFile(){ - System.out.println("loadYAMLFile"); + logger.info("loadYAMLFile()"); + final String modelName = device.getDevice(); //Do not use device.getModel as it doesn't return the expected value + if(modelName == null || modelName.isEmpty()){ + return false; + } + try{ Yaml yaml = new Yaml (); - final String modelName = device.getDevice(); //Do not use device.getModel as it doesn't return the expected value - if(modelName == null || modelName.isEmpty()){ - return false; - } - //load config file InputStream is = getClass().getResourceAsStream(yamlFolderPath+modelName+".yml"); Map yamLContent= (Map)yaml.load(is); @@ -102,7 +105,8 @@ public class ThreadFactory { is.close(); }catch(IOException | NullPointerException e){ - e.printStackTrace(); + logger.error("modelName = {}, error= {}", modelName, e.toString()); + return false; } return true; @@ -113,7 +117,7 @@ public class ThreadFactory { * @param steps Map containing data from YAML */ protected void loadFlashProcess( Map steps){ - System.out.println("loadFlashProcess( ...) "); + logger.info("loadFlashProcess( ... ) "); if(steps == null || steps.isEmpty()){ throw new InvalidParameterException("Flash steps loaded from YAML are invalid"); } @@ -122,7 +126,7 @@ public class ThreadFactory { String scriptExtension = AppConstants.OsName.toLowerCase().contains("windows") ? ".bat" : ".sh"; for(String key: keys){ - System.out.println("Key: "+key); + logger.debug("Key = "+key); Map stepData = (Map) steps.get(key); Step step = new Step(); @@ -148,7 +152,7 @@ public class ThreadFactory { * @param steps Map Loaded from YAML */ protected void loadFlashExtra( Map steps){ - System.out.println("loadFlashExtra(...)"); + logger.info("loadFlashExtra(...)"); if(steps == null || steps.isEmpty()){ throw new InvalidParameterException("Flash steps's extra loaded from YAML are invalid"); } @@ -183,7 +187,7 @@ public class ThreadFactory { * @param sources Map containing steps of preparation */ protected void loadSourcesToDownload( Map sources){ - System.out.println("loadPreparationProcess(...)"); + logger.info("loadSourcesToDownload(...)"); if(sources == null || sources.isEmpty()){ throw new InvalidParameterException("Preparation steps loaded from YAML are invalid"); } diff --git a/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java b/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java index 40468b0b..206072b5 100644 --- a/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java +++ b/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java @@ -25,12 +25,15 @@ import java.net.http.HttpResponse; import java.nio.file.Paths; import java.util.Base64; import javafx.concurrent.Task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * The goal of this task is to push the specified file on ecloud folder * @author vincent Bourgmayer */ public class UploadToEcloudTask extends Task{ + private final static Logger logger = LoggerFactory.getLogger(UploadToEcloudTask.class.getSimpleName()); String URL; String filePath; @@ -41,6 +44,7 @@ public class UploadToEcloudTask extends Task{ @Override protected Boolean call() throws Exception { + logger.info("call(), url = {}, filepath = {}", URL, filePath); File file = new File(filePath); if(!file.exists()) return false; @@ -56,7 +60,7 @@ public class UploadToEcloudTask extends Task{ var httpClient = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build(); var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println("Response code of log's upload : "+response.statusCode()); + logger.debug("Response code of log's upload : "+response.statusCode()); if(response.statusCode()>= 200 && response.statusCode() < 300){ file.delete(); return true; -- GitLab From 76b7f4f69b8e3a70c353c0c0663805ddea062929 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Thu, 11 Jun 2020 11:10:36 +0200 Subject: [PATCH 21/28] temporary comment createLogfile() method in FlashThread --- src/main/java/ecorp/easy/installer/threads/FlashThread.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index 522ad058..109e2f65 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -149,8 +149,9 @@ public class FlashThread extends Thread implements EasilyCancelable{ * Ask logger to create a log file and return its path * @return */ - public String createLogFile(){ - return ((FlashLogger) logger).writeTofile(); + public String createLogFile(){ + //return ((FlashLogger) logger).writeTofile(); + return ""; } /** -- GitLab From 19dcffec654c5834777504124b12c9b5dfaf9dc1 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Thu, 11 Jun 2020 18:25:28 +0200 Subject: [PATCH 22/28] change logger name --- src/main/java/ecorp/easy/installer/EasyInstaller.java | 2 +- .../ecorp/easy/installer/controllers/MainWindowController.java | 2 +- .../controllers/subcontrollers/DeviceDetectedController.java | 2 +- .../controllers/subcontrollers/DownloadSrcController.java | 2 +- .../controllers/subcontrollers/EAccountController.java | 2 +- .../controllers/subcontrollers/EnableADBController.java | 2 +- .../controllers/subcontrollers/FeedbackController.java | 2 +- .../controllers/subcontrollers/FlashSceneController.java | 2 +- src/main/java/ecorp/easy/installer/models/Command.java | 2 +- src/main/java/ecorp/easy/installer/threads/AskAccountTask.java | 2 +- .../java/ecorp/easy/installer/threads/DeviceDetectionTask.java | 2 +- src/main/java/ecorp/easy/installer/threads/DownloadTask.java | 2 +- src/main/java/ecorp/easy/installer/threads/FlashThread.java | 2 +- src/main/java/ecorp/easy/installer/threads/ThreadFactory.java | 2 +- .../java/ecorp/easy/installer/threads/UploadToEcloudTask.java | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/EasyInstaller.java b/src/main/java/ecorp/easy/installer/EasyInstaller.java index c1e30d14..ca6305f8 100644 --- a/src/main/java/ecorp/easy/installer/EasyInstaller.java +++ b/src/main/java/ecorp/easy/installer/EasyInstaller.java @@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class EasyInstaller extends Application { - private final static Logger logger = LoggerFactory.getLogger(EasyInstaller.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(EasyInstaller.class); public final static String FXML_PATH ="/fxml/"; private ResourceBundle i18n; //i18n mean "internationalization" private MainWindowController controller; diff --git a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java index d3a66a71..9f0eca9c 100644 --- a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java +++ b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java @@ -48,7 +48,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class MainWindowController implements Initializable { - private final static Logger logger = LoggerFactory.getLogger(MainWindowController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(MainWindowController.class); @FXML AnchorPane root; @FXML Button nextButton; @FXML Label titleLabel; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java index 5ec14b99..b6668c55 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class DeviceDetectedController extends AbstractSubController{ - private final static Logger logger = LoggerFactory.getLogger(DeviceDetectedController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(DeviceDetectedController.class); @FXML private Button buyNewDevice; @FXML private Button startDetectionButton; @FXML private Label detectionMsg; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java index 6df60c02..698f80e0 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java @@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class DownloadSrcController extends AbstractSubController { - private final static Logger logger = LoggerFactory.getLogger(DownloadSrcController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(DownloadSrcController.class); @FXML ProgressBar preparationProgressBar; @FXML Label progressLabel; @FXML Label progressTitle; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java index e53dba06..7a7005ed 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java @@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory; * This is the controller for eAccount.fxml */ public class EAccountController extends AbstractSubController{ - private static final Logger logger = LoggerFactory.getLogger(EAccountController.class.getSimpleName()); + private static final Logger logger = LoggerFactory.getLogger(EAccountController.class); private static final String MAIL_REGEX="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"; private static final Pattern EMAIL_PATTERN = Pattern.compile(MAIL_REGEX); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java index fc07f134..44aab4a8 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EnableADBController.java @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; * @author Vincent */ public class EnableADBController extends AbstractSubSteppedController { - private final static Logger logger = LoggerFactory.getLogger(EnableADBController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(EnableADBController.class); @FXML private Label firstSubStep; @FXML private Label secondSubStep; @FXML private Label thirdSubStep; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java index ceff81a1..a195d51c 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java @@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory; * @author Vincent Bourgmayer */ public class FeedbackController extends AbstractSubController { - private final static Logger logger = LoggerFactory.getLogger(FeedbackController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(FeedbackController.class); private @FXML Button sendAnswerBtn; private @FXML TextArea commentArea; private @FXML Label thanksLabel; diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index 2adf0cc8..41fa23b0 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -78,7 +78,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement ResourceBundle instructionsImagesBundle; //Give access to image to loads with instructionsKey private FlashThread thread; private Object pauseLock; //lock used for pausing the FlashThread - private final static Logger logger = LoggerFactory.getLogger(FlashSceneController.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(FlashSceneController.class); @Override diff --git a/src/main/java/ecorp/easy/installer/models/Command.java b/src/main/java/ecorp/easy/installer/models/Command.java index f823da39..5e6cf95c 100644 --- a/src/main/java/ecorp/easy/installer/models/Command.java +++ b/src/main/java/ecorp/easy/installer/models/Command.java @@ -36,7 +36,7 @@ public class Command { private String shellOutput; //The shell text output of the execution of the script Process pc; //Process which run the command Step step; //Object which contain data about the command like next step, ... - private final static Logger logger = LoggerFactory.getLogger(Command.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(Command.class); /** * Constructor for instance in context of FlashThread diff --git a/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java b/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java index a943f38c..dc924598 100644 --- a/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java +++ b/src/main/java/ecorp/easy/installer/threads/AskAccountTask.java @@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory; * @author vincent Bourgmayer */ public class AskAccountTask extends Task{ - private final static Logger logger = LoggerFactory.getLogger(AskAccountTask.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(AskAccountTask.class); String email; String sugar; /** diff --git a/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java b/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java index 6ccb7311..47b913fc 100644 --- a/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DeviceDetectionTask.java @@ -31,7 +31,7 @@ import org.slf4j.LoggerFactory; */ public class DeviceDetectionTask extends Task{ final String CMD_adbDevices = "devices"; - private final static Logger logger = LoggerFactory.getLogger(DeviceDetectionTask.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(DeviceDetectionTask.class); @Override diff --git a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java index 0d3eb35b..15868620 100644 --- a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java @@ -43,7 +43,7 @@ import org.slf4j.LoggerFactory; * @author vincent Bourgmayer */ public class DownloadTask extends Task{ - private final static Logger logger = LoggerFactory.getLogger(DownloadTask.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(DownloadTask.class); /** * Constante taille */ diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index 109e2f65..d33ac2cf 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory; public class FlashThread extends Thread implements EasilyCancelable{ final protected static char COMMON_PARAM_IDENTIFIER = '$';//allow to identify when an param of a step is to load from common parameter final protected static Pattern REGEX_FIND_PARAM = Pattern.compile("\\$\\{(.*?)\\}"); - private final static Logger logger = LoggerFactory.getLogger(FlashThread.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(FlashThread.class); //private final FlashLogger logger; boolean running = false; boolean cancelled = false; diff --git a/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java b/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java index ee9df910..bf8d4415 100644 --- a/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java +++ b/src/main/java/ecorp/easy/installer/threads/ThreadFactory.java @@ -42,7 +42,7 @@ import org.yaml.snakeyaml.Yaml; * @author Vincent */ public class ThreadFactory { - private final static Logger logger = LoggerFactory.getLogger(ThreadFactory.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(ThreadFactory.class); private ProcessMould flashMould; private final HashMap sourcesToDownload; private Device device; diff --git a/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java b/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java index 206072b5..f46a7cdb 100644 --- a/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java +++ b/src/main/java/ecorp/easy/installer/threads/UploadToEcloudTask.java @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; * @author vincent Bourgmayer */ public class UploadToEcloudTask extends Task{ - private final static Logger logger = LoggerFactory.getLogger(UploadToEcloudTask.class.getSimpleName()); + private final static Logger logger = LoggerFactory.getLogger(UploadToEcloudTask.class); String URL; String filePath; -- GitLab From 140d7d00365756ced3189f7ca1fdc6b9f7fee548 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Thu, 11 Jun 2020 18:47:44 +0200 Subject: [PATCH 23/28] add basic configuration file for logback --- src/main/resources/logback.xml | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/main/resources/logback.xml diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 00000000..e97a589b --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,43 @@ + + + + + + + myApp.log + + + %date %level [%thread] %logger{10} [%file:%line] %msg%n + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + -- GitLab From 511955c41b60693831dfe549225dfb9439d2b179 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Fri, 12 Jun 2020 09:58:11 +0200 Subject: [PATCH 24/28] add a propertyDefiner to specify log folder --- .../logger/LogPathPropertyDefiner.java | 22 ++++++++++++ src/main/java/module-info.java | 3 +- src/main/resources/logback.xml | 36 +++++++++---------- 3 files changed, 41 insertions(+), 20 deletions(-) create mode 100644 src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java diff --git a/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java b/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java new file mode 100644 index 00000000..2c4fa438 --- /dev/null +++ b/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java @@ -0,0 +1,22 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package ecorp.easy.installer.logger; + +import ch.qos.logback.core.PropertyDefinerBase; +import ecorp.easy.installer.AppConstants; + +/** + * + * @author vincent + */ +public class LogPathPropertyDefiner extends PropertyDefinerBase{ + + @Override + public String getPropertyValue() { + return AppConstants.getWritableFolder(); + } + +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index b8d38194..420afa7e 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -27,6 +27,7 @@ module ecorp.easy.installer { opens ecorp.easy.installer to javafx.fxml; opens ecorp.easy.installer.controllers to javafx.fxml; opens ecorp.easy.installer.controllers.subcontrollers to javafx.fxml; - + + exports ecorp.easy.installer.logger; exports ecorp.easy.installer; } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index e97a589b..df6cfc02 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -17,27 +17,25 @@ * along with this program. If not, see . */ --> - - - - myApp.log + - - %date %level [%thread] %logger{10} [%file:%line] %msg%n - - + + + ${LOG_PATH}/${bySecond}.log + + %date %level [%thread] %logger{10} [%file:%line] %msg%n + + - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + - - - - + + + + -- GitLab From e0fd2cde441248d72c81e4ce61af1ed88b997e4e Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Fri, 12 Jun 2020 10:53:14 +0200 Subject: [PATCH 25/28] allow to send logback's file on ecloud instead of previous log file --- .../subcontrollers/FlashSceneController.java | 4 +- .../easy/installer/logger/FlashLogger.java | 91 ------------------- .../logger/LogPathPropertyDefiner.java | 18 +++- .../easy/installer/threads/FlashThread.java | 10 -- src/main/resources/logback.xml | 4 +- 5 files changed, 20 insertions(+), 107 deletions(-) delete mode 100644 src/main/java/ecorp/easy/installer/logger/FlashLogger.java diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index 41fa23b0..5346e301 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -20,6 +20,7 @@ import ecorp.easy.installer.AppConstants; import ecorp.easy.installer.controllers.MainWindowController; import ecorp.easy.installer.graphics.FlashGlobalProgressManager; import ecorp.easy.installer.helpers.DeviceHelper; +import ecorp.easy.installer.logger.LogPathPropertyDefiner; import ecorp.easy.installer.models.DataBundle; import ecorp.easy.installer.threads.EasilyCancelable; import ecorp.easy.installer.threads.FlashThread; @@ -84,6 +85,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement @Override public void initialize(URL location, ResourceBundle resources) { super.initialize(location, resources); + logger.debug("Initialize FlashSceneController.java"); sendLogBtn.managedProperty().bind(sendLogBtn.visibleProperty()); loadStepProgressIndicator.managedProperty().bind(loadStepProgressIndicator.visibleProperty()); @@ -362,7 +364,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement */ public boolean sendLogToSupport(){ if(thread != null){ - String filePath = thread.createLogFile(); + String filePath = LogPathPropertyDefiner.getLogFilePath(); if(filePath != null){ UploadToEcloudTask uploadTask = new UploadToEcloudTask(AppConstants.LOG_STORAGE_URL, filePath); diff --git a/src/main/java/ecorp/easy/installer/logger/FlashLogger.java b/src/main/java/ecorp/easy/installer/logger/FlashLogger.java deleted file mode 100644 index cc16fa15..00000000 --- a/src/main/java/ecorp/easy/installer/logger/FlashLogger.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2019-2020 - ECORP SAS - - * 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 3 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, see . - */ -package ecorp.easy.installer.logger; - -import ecorp.easy.installer.AppConstants; -import ecorp.easy.installer.utils.IFlashHandler; -import java.io.BufferedWriter; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.UUID; -import javafx.application.Platform; - -/** - * - * @author vincent Bourgmayer - */ -public class FlashLogger{ - private final StringBuilder logs; - private final IFlashHandler displayOutput; - - public FlashLogger(IFlashHandler output){ - super(); - this.displayOutput = output; - this.logs = new StringBuilder(); - } - - - public void writeLine(String log) { - this.logs.append(log); - Platform.runLater( () -> { - displayOutput.onLogToDisplayRecieved(log); - }); - } - - /** - * Write all the log content into a file - * @return The absolute path to the file or null if there is an error during writing - */ - public String writeTofile() { - System.out.println("FlashLogger.writeLogToFile()"); - //generate unique file name thanks to UUID: - //https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/UUID.html#randomUUID() - String fileNameToHash=UUID.randomUUID()+".log"; - String logFilePath = AppConstants.getWritableFolder()+fileNameToHash; - try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(logFilePath, true)))) { - out.write(logs.toString()); - } catch (IOException e) { - System.err.println(e); - return null; - } - return logFilePath; - } - - /** - * Write content of log into a file. - * @param logFilePath path to the local file - * @param log the String to write into a file - */ - public void writeTofile(String logFilePath, String log) { - System.out.println("write log to file"); - try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(logFilePath, true)))) { - out.println(log); - } catch (IOException e) { - System.err.println(e); - } - } - - /** - * Write a String in the StringBuilder for specified API - * @param log The text to write in Log - */ - public void write(String log) { - if(log != null && ! log.isEmpty()) - this.logs.append(log); - } -} diff --git a/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java b/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java index 2c4fa438..a3b32c4f 100644 --- a/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java +++ b/src/main/java/ecorp/easy/installer/logger/LogPathPropertyDefiner.java @@ -7,16 +7,30 @@ package ecorp.easy.installer.logger; import ch.qos.logback.core.PropertyDefinerBase; import ecorp.easy.installer.AppConstants; +import java.util.UUID; /** * * @author vincent */ public class LogPathPropertyDefiner extends PropertyDefinerBase{ - + private static final String logFilePath = AppConstants.getWritableFolder()+UUID.randomUUID()+".log"; + + + /** + * This is access for logback.xml + * @return + */ @Override public String getPropertyValue() { - return AppConstants.getWritableFolder(); + return logFilePath; } + /** + * This is access for FlashSceneController.java + * @return + */ + public static String getLogFilePath(){ + return logFilePath; + } } diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index d33ac2cf..8264be0f 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -17,7 +17,6 @@ package ecorp.easy.installer.threads; import ecorp.easy.installer.AppConstants; -import ecorp.easy.installer.logger.FlashLogger; import ecorp.easy.installer.models.Device; import ecorp.easy.installer.models.Command; import ecorp.easy.installer.models.DataBundle; @@ -144,15 +143,6 @@ public class FlashThread extends Thread implements EasilyCancelable{ application.onFlashError(bundle); }); } - - /** - * Ask logger to create a log file and return its path - * @return - */ - public String createLogFile(){ - //return ((FlashLogger) logger).writeTofile(); - return ""; - } /** * stop the thread diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index df6cfc02..5184c203 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -19,10 +19,8 @@ --> - - - ${LOG_PATH}/${bySecond}.log + ${LOG_PATH} %date %level [%thread] %logger{10} [%file:%line] %msg%n -- GitLab From cbf2b1c154ee545a00370c140b34bbe9c664043a Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Mon, 15 Jun 2020 11:49:48 +0200 Subject: [PATCH 26/28] try fix gitlab-ci error --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 5fd271c7..ac4696b5 100644 --- a/build.gradle +++ b/build.gradle @@ -48,6 +48,7 @@ description = 'Modular easy-installer' mainClassName = "$moduleName/ecorp.easy.installer.EasyInstaller" dependencies { + compile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1' compile 'ch.qos.logback:logback-classic:1.2.3' compile 'ch.qos.logback:logback-core:1.2.3' compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' -- GitLab From 7d2070e1fa9d506df5fa9222393740e05c195162 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 17 Jun 2020 13:49:56 +0200 Subject: [PATCH 27/28] display log when click on them --- .../subcontrollers/FlashSceneController.java | 12 ++++ .../easy/installer/logger/GUIAppender.java | 55 +++++++++++++++++++ src/main/resources/logback.xml | 2 + 3 files changed, 69 insertions(+) create mode 100644 src/main/java/ecorp/easy/installer/logger/GUIAppender.java diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index 5346e301..bc10744a 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -16,10 +16,12 @@ */ package ecorp.easy.installer.controllers.subcontrollers; +import ch.qos.logback.classic.LoggerContext; import ecorp.easy.installer.AppConstants; import ecorp.easy.installer.controllers.MainWindowController; import ecorp.easy.installer.graphics.FlashGlobalProgressManager; import ecorp.easy.installer.helpers.DeviceHelper; +import ecorp.easy.installer.logger.GUIAppender; import ecorp.easy.installer.logger.LogPathPropertyDefiner; import ecorp.easy.installer.models.DataBundle; import ecorp.easy.installer.threads.EasilyCancelable; @@ -348,13 +350,23 @@ public class FlashSceneController extends AbstractSubSteppedController implement * enable/disable log displaying */ public void showHideLog(){ + ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + GUIAppender appender = (GUIAppender) rootLogger.getAppender("GUI"); + + String text = showHideLogBtn.getText(); if(text.equals(">")){ showHideLogBtn.setText("V"); logScrollPane.setVisible(false); + + logFlow.getChildren().clear(); + appender.setContainer(null); }else{ showHideLogBtn.setText(">"); logScrollPane.setVisible(true); + + logFlow.getChildren().addAll(appender.getLogsList()); + appender.setContainer(logFlow); } } diff --git a/src/main/java/ecorp/easy/installer/logger/GUIAppender.java b/src/main/java/ecorp/easy/installer/logger/GUIAppender.java new file mode 100644 index 00000000..ce5a6f3a --- /dev/null +++ b/src/main/java/ecorp/easy/installer/logger/GUIAppender.java @@ -0,0 +1,55 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package ecorp.easy.installer.logger; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.AppenderBase; +import java.util.ArrayList; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.text.Text; +import javafx.scene.text.TextFlow; + +/** + * + * @author vincent + */ +public class GUIAppender extends AppenderBase{ + private ArrayList logsList= new ArrayList<>(); + private TextFlow container; + + @Override + protected void append(ILoggingEvent e) { + if(logsList.size() > 100){ + logsList.remove(0); + } + Text txt = buildLabel(e); + logsList.add(txt); + + //side effect + displayLog(txt); + } + + public synchronized void setContainer(TextFlow container){ + this.container = container; + } + + + private synchronized void displayLog(Text text){ + if(container != null){ + container.getChildren().add(text); + } + } + private Text buildLabel(ILoggingEvent e){ + Text result = new Text(e.getTimeStamp()+" - "+e.getMessage()+"\n"); + return result; + } + + + public ArrayList getLogsList() { + return logsList; + } +} diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 5184c203..4d2ed5a1 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -31,9 +31,11 @@ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + -- GitLab From e7f500f7aa55018368ab211e1111afa4d32214e5 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Wed, 17 Jun 2020 15:28:38 +0200 Subject: [PATCH 28/28] update log display and logging for FeedbackController.java --- .../controllers/subcontrollers/FeedbackController.java | 4 ++-- src/main/java/ecorp/easy/installer/logger/GUIAppender.java | 3 ++- src/main/resources/logback.xml | 6 +++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java index a195d51c..fbd2ade9 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java @@ -74,7 +74,7 @@ public class FeedbackController extends AbstractSubController { Button clickedButton = (Button) event.getSource(); if(clickedButton.equals(selectedFeelings)) { - logger.debug("onFeelingsSelected(), Deselect: "+selectedFeelings.getId()); + logger.debug("onFeelingsSelected(), Deselect: {}", selectedFeelings.getId()); selectedFeelings.getStyleClass().remove(SELECTED_STYLE); selectedFeelings = null; } @@ -84,7 +84,7 @@ public class FeedbackController extends AbstractSubController { clickedButton.getStyleClass().add(SELECTED_STYLE); selectedFeelings = clickedButton; - logger.debug("onFeelingsSelected(), select: "+selectedFeelings.getId()); + logger.debug("onFeelingsSelected(), select: {}", selectedFeelings.getId()); } } diff --git a/src/main/java/ecorp/easy/installer/logger/GUIAppender.java b/src/main/java/ecorp/easy/installer/logger/GUIAppender.java index ce5a6f3a..9c9f99a5 100644 --- a/src/main/java/ecorp/easy/installer/logger/GUIAppender.java +++ b/src/main/java/ecorp/easy/installer/logger/GUIAppender.java @@ -44,7 +44,8 @@ public class GUIAppender extends AppenderBase{ } } private Text buildLabel(ILoggingEvent e){ - Text result = new Text(e.getTimeStamp()+" - "+e.getMessage()+"\n"); + + Text result = new Text(e.getFormattedMessage()+"\n"); return result; } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 4d2ed5a1..562e2fa2 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -31,7 +31,11 @@ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - + + + %d{HH:mm:ss} [%thread] %logger{36} - %msg%n + + /> -- GitLab