/
LandingViewModel.java
125 lines (111 loc) · 4.52 KB
/
LandingViewModel.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/**
* Copyright (c) 2014 Richard Warburton (richard.warburton@gmail.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
**/
package com.insightfullogic.honest_profiler.delivery.javafx.landing;
import com.insightfullogic.honest_profiler.core.Conductor;
import com.insightfullogic.honest_profiler.core.MachineListener;
import com.insightfullogic.honest_profiler.core.ProfileListener;
import com.insightfullogic.honest_profiler.core.sources.VirtualMachine;
import com.insightfullogic.honest_profiler.delivery.javafx.WindowViewModel;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import org.slf4j.Logger;
import java.io.File;
import java.io.IOException;
import static com.insightfullogic.honest_profiler.delivery.javafx.WindowViewModel.Window.Profile;
public class LandingViewModel implements MachineListener {
@FXML
private VBox landingView;
@FXML
private Button monitor;
private final ToggleGroup toggleMachines;
private final Logger logger;
private final Conductor conductor;
private final WindowViewModel windowModel;
private final ProfileListener profileListener;
public LandingViewModel(
final Logger logger,
final Conductor conductor,
final WindowViewModel windowModel,
final ProfileListener profileListener) {
this.logger = logger;
this.conductor = conductor;
this.windowModel = windowModel;
this.profileListener = profileListener;
toggleMachines = new ToggleGroup();
}
@FXML
private void initialize() {
toggleMachines.selectedToggleProperty()
.addListener((of, from, to) -> {
monitor.setDisable(to == null);
});
}
public void open(ActionEvent actionEvent) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open a log file");
File file = fileChooser.showOpenDialog(null);
if (file != null) {
windowModel.display(Profile);
try {
conductor.consumeFile(file, null, profileListener);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}
public void monitor(ActionEvent actionEvent) {
windowModel.display(Profile);
MachineButton selectedButton = (MachineButton) toggleMachines.getSelectedToggle();
File logFile = selectedButton.getJvm().getLogSource();
try {
conductor.pipeFile(logFile, null, profileListener);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
@Override
public void onNewMachine(VirtualMachine machine) {
Platform.runLater(() -> {
ObservableList<Node> children = landingView.getChildren();
MachineButton button = new MachineButton(machine);
button.setToggleGroup(toggleMachines);
children.add(button);
});
}
@Override
public void onClosedMachine(VirtualMachine machine) {
Platform.runLater(() -> {
String id = machine.getId();
ObservableList<Node> children = landingView.getChildren();
children.removeIf(node -> {
return id.equals(node.getId());
});
});
}
}