All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dpfmanager.shell.interfaces.gui.fragment.TaskFragment Maven / Gradle / Ivy

/**
 * 

TaskFragment.java

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; or, * at your choice, under the terms of the Mozilla Public License, v. 2.0. SPDX GPL-3.0+ or MPL-2.0+. *

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 and the Mozilla Public License for more details.

*

You should have received a copy of the GNU General Public License and the Mozilla Public * License along with this program. If not, see http://www.gnu.org/licenses/ * and at http://mozilla.org/MPL/2.0 .

NB: for the * © statement, include Easy Innova SL or other company/Person contributing the code.

© * 2015 Easy Innova, SL

* * @author Adria Llorens * @version 1.0 * @since 23/7/2015 */ package dpfmanager.shell.interfaces.gui.fragment; import dpfmanager.shell.core.config.BasicConfig; import dpfmanager.shell.core.config.GuiConfig; import dpfmanager.shell.core.messages.ArrayMessage; import dpfmanager.shell.core.messages.ShowMessage; import dpfmanager.shell.core.messages.UiMessage; import dpfmanager.shell.core.util.NodeUtil; import dpfmanager.shell.modules.database.tables.Jobs; import dpfmanager.shell.modules.messages.messages.LogMessage; import dpfmanager.shell.modules.threading.messages.ThreadsMessage; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.ProgressBar; import javafx.scene.control.ProgressIndicator; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import org.apache.logging.log4j.Level; import org.jacpfx.api.annotations.Resource; import org.jacpfx.api.annotations.fragment.Fragment; import org.jacpfx.api.fragment.Scope; import org.jacpfx.rcp.context.Context; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit; /** * Created by Adria Llorens on 18/04/2016. */ @Fragment(id = GuiConfig.FRAGMENT_TASK, viewLocation = "/fxml/fragments/task.fxml", scope = Scope.PROTOTYPE) public class TaskFragment { @Resource private Context context; @FXML private AnchorPane task; @FXML private Label inputLabel; @FXML private Label timeLabel; @FXML private Label originLabel; @FXML private ImageView taskImage; @FXML private ImageView resumePauseImage; @FXML private ImageView cancelImage; @FXML private ProgressBar progress; @FXML private HBox mainHbox; @FXML private VBox mainVbox; @FXML private ProgressIndicator loadingPause; @FXML private ProgressIndicator loadingCancel; private Jobs job; private Jobs lastJob; private int myPid; private String type; private String path; private boolean isPause; private final double opacity = 0.7; public void init(Jobs newJob, int pid) { job = newJob; myPid = pid; if (job.getState() == 2) { // Done job showDoneJob(); } else if (job.getState() == 1) { // Running job showRunningJob(); } else if (job.getState() == 0){ // Pending job showPendingJob(); } else if (job.getState() == 4){ // Paused job showPausedJob(); } NodeUtil.hideNode(loadingCancel); NodeUtil.hideNode(loadingPause); // Hide actions if not my job if (job.getPid() != myPid){ NodeUtil.hideNode(cancelImage); NodeUtil.hideNode(resumePauseImage); } // Common isPause = true; progress.setProgress(job.getProgress()); inputLabel.setText(getReadableInput(job.getInput())); originLabel.setText("Task from " + getReadableOrigin(job.getOrigin())); cancelImage.setImage(new Image("images/cancel.png")); resumePauseImage.setImage(new Image("images/pause.png")); bindWidth(); } public void updateJob(Jobs updatedJob) { lastJob = job; job = updatedJob; if (lastJob.getState() != 2 && job.getState() == 2) { // From other to done showDoneJob(); } else if (lastJob.getState() == 0 && job.getState() != 0) { // From pending to other mainVbox.setOpacity(1.0); NodeUtil.showNode(resumePauseImage); } // Paused opacity if (lastJob.getState() != 4 && job.getState() == 4){ // From other to paused timeLabel.setText("Paused"); mainVbox.setOpacity(opacity); progress.setProgress(job.getProgress()); } else if (lastJob.getState() == 4 && job.getState() != 4){ // From paused to other mainVbox.setOpacity(1.0); } // Default running job if (job.getState() == 1) { timeLabel.setText(getReadableData(System.currentTimeMillis() - job.getInit())); progress.setProgress(job.getProgress()); } // Hide actions if not my job if (job.getPid() != myPid){ NodeUtil.hideNode(cancelImage); NodeUtil.hideNode(resumePauseImage); } } private void showDoneJob(){ getReportsInfo(); NodeUtil.hideNode(resumePauseImage); NodeUtil.hideNode(cancelImage); if (!type.isEmpty()) { taskImage.setImage(new Image("images/formats/" + type + ".png")); timeLabel.setText(getReadableData(job.getFinish() - job.getInit())); NodeUtil.showNode(taskImage); } else { NodeUtil.hideNode(taskImage); } progress.setProgress(job.getProgress()); progress.getStyleClass().remove("blue-bar"); progress.getStyleClass().add("green-bar"); } private void showRunningJob(){ NodeUtil.showNode(cancelImage); NodeUtil.showNode(resumePauseImage); NodeUtil.hideNode(taskImage); timeLabel.setText("0:00"); } private void showPendingJob(){ timeLabel.setText("Pending"); mainVbox.setOpacity(opacity); NodeUtil.showNode(cancelImage); NodeUtil.hideNode(resumePauseImage); NodeUtil.hideNode(taskImage); } private void showPausedJob(){ hideLoadingPause(); hideLoadingCancel(); NodeUtil.hideNode(taskImage); mainVbox.setOpacity(opacity); timeLabel.setText("Paused"); } private String getReadableOrigin(String origin){ if (origin.equals("CMD")){ return "command line"; } else if (origin.equals("GUI")){ return "graphical interface"; } else if (origin.equals("SERVER")){ return "server"; } else { return "unknown"; } } private String getReadableData(Long millis) { return String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))); } private String getReadableInput(String input){ return input; } private void getReportsInfo() { String filefolder = job.getOutput(); String htmlPath = filefolder + "report.html"; String xmlPath = filefolder + "summary.xml"; String jsonPath = filefolder + "summary.json"; String pdfPath = filefolder + "report.pdf"; type = ""; path = ""; if (exists(htmlPath)) { type = "html"; path = htmlPath; } else if (exists(xmlPath)) { type = "xml"; path = xmlPath; } else if (exists(jsonPath)) { type = "json"; path = jsonPath; } else if (exists(pdfPath)) { type = "pdf"; path = pdfPath; } } @FXML private void showReport() { // Show check ArrayMessage am = new ArrayMessage(); am.add(GuiConfig.PERSPECTIVE_SHOW, new UiMessage()); am.add(GuiConfig.PERSPECTIVE_SHOW + "." + GuiConfig.COMPONENT_SHOW, new ShowMessage(type, path)); context.send(GuiConfig.PERSPECTIVE_SHOW, am); } @FXML private void resumePause() { if (isPause) { // Pause check showLoadingPause(); mainVbox.setOpacity(opacity); resumePauseImage.setImage(new Image("images/resume.png")); context.send(BasicConfig.MODULE_THREADING, new ThreadsMessage(ThreadsMessage.Type.PAUSE, job.getId(), true)); } else { // Resume check mainVbox.setOpacity(1.0); resumePauseImage.setImage(new Image("images/pause.png")); context.send(BasicConfig.MODULE_THREADING, new ThreadsMessage(ThreadsMessage.Type.RESUME, job.getId(), true)); } isPause = !isPause; } @FXML private void cancel() { showLoadingCancel(); if (!loadingPause.isVisible()) { NodeUtil.hideNode(resumePauseImage); context.send(BasicConfig.MODULE_MESSAGE, new LogMessage(getClass(), Level.DEBUG, "Cancelled check: "+job.getInput())); context.send(BasicConfig.MODULE_THREADING, new ThreadsMessage(ThreadsMessage.Type.CANCEL, job.getId(), true)); } } public void finishPause(){ if (!loadingCancel.isVisible()) { hideLoadingPause(); } else { NodeUtil.hideNode(loadingPause); cancel(); } } /** * Show / Hide loadings */ private void showLoadingPause() { NodeUtil.showNode(loadingPause); NodeUtil.hideNode(resumePauseImage); } private void hideLoadingPause() { NodeUtil.hideNode(loadingPause); NodeUtil.showNode(resumePauseImage); } private void showLoadingCancel() { NodeUtil.showNode(loadingCancel); NodeUtil.hideNode(cancelImage); } private void hideLoadingCancel(){ NodeUtil.hideNode(loadingCancel); NodeUtil.showNode(cancelImage); } private boolean exists(String path) { return new File(path).exists(); } private void bindWidth() { progress.prefWidthProperty().bind(mainHbox.widthProperty()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy