use of org.phoebus.util.time.TimeRelativeInterval in project phoebus by ControlSystemStudio.
the class Controller method doUpdate.
private void doUpdate() {
try {
// Skip updates while nobody is watching
if (window_is_iconized || suppress_redraws)
return;
// Check if anything changed, which also updates formulas.
// When scrolling, need to update even when nothing changed to 'scroll'.
final TimeRelativeInterval span = model.getTimerange();
final boolean scrolling = !span.isEndAbsolute();
if (model.updateItemsAndCheckForNewSamples() || scrolling)
plot.redrawTraces();
} catch (Throwable ex) {
logger.log(Level.WARNING, "Error in Plot refresh timer", ex);
}
}
use of org.phoebus.util.time.TimeRelativeInterval in project phoebus by ControlSystemStudio.
the class XMLPersistence method write.
/**
* Write XML formatted Model content.
* @param model Model to write
* @param out {@link OutputStream}
* @throws Exception on error
*/
public static void write(final Model model, final OutputStream out) throws Exception {
final XMLStreamWriter base = XMLOutputFactory.newInstance().createXMLStreamWriter(out, XMLUtil.ENCODING);
final XMLStreamWriter writer = new IndentingXMLStreamWriter(base);
writer.writeStartDocument(XMLUtil.ENCODING, "1.0");
writer.writeStartElement(TAG_DATABROWSER);
{
writer.writeStartElement(TAG_TITLE);
writer.writeCharacters(model.getTitle().orElse(""));
writer.writeEndElement();
if (!model.shouldSaveChanges()) {
writer.writeStartElement(TAG_SAVE_CHANGES);
writer.writeCharacters(Boolean.FALSE.toString());
writer.writeEndElement();
}
// Visibility of toolbar and legend
if (model.isLegendVisible()) {
writer.writeStartElement(TAG_SHOW_LEGEND);
writer.writeCharacters(Boolean.TRUE.toString());
writer.writeEndElement();
}
if (model.isToolbarVisible()) {
writer.writeStartElement(TAG_SHOW_TOOLBAR);
writer.writeCharacters(Boolean.TRUE.toString());
writer.writeEndElement();
}
// Time axis
if (model.isGridVisible()) {
writer.writeStartElement(TAG_GRID);
writer.writeCharacters(Boolean.TRUE.toString());
writer.writeEndElement();
}
writer.writeStartElement(TAG_UPDATE_PERIOD);
writer.writeCharacters(Double.toString(model.getUpdatePeriod()));
writer.writeEndElement();
writer.writeStartElement(TAG_SCROLL_STEP);
writer.writeCharacters(Long.toString(model.getScrollStep().getSeconds()));
writer.writeEndElement();
final TimeRelativeInterval span = model.getTimerange();
writer.writeStartElement(TAG_SCROLL);
writer.writeCharacters(Boolean.toString(!span.isEndAbsolute()));
writer.writeEndElement();
final TimeInterval interval = span.toAbsoluteInterval();
if (span.isEndAbsolute()) {
writer.writeStartElement(TAG_START);
writer.writeCharacters(TimestampFormats.MILLI_FORMAT.format(interval.getStart()));
writer.writeEndElement();
writer.writeStartElement(TAG_END);
writer.writeCharacters(TimestampFormats.MILLI_FORMAT.format(interval.getEnd()));
writer.writeEndElement();
} else {
writer.writeStartElement(TAG_START);
writer.writeCharacters(TimeWarp.formatAsLegacy(span.getRelativeStart().get()));
writer.writeEndElement();
writer.writeStartElement(TAG_END);
writer.writeCharacters(TimeParser.NOW);
writer.writeEndElement();
}
writer.writeStartElement(TAG_ARCHIVE_RESCALE);
writer.writeCharacters(model.getArchiveRescale().name());
writer.writeEndElement();
writeColor(writer, TAG_FOREGROUND, model.getPlotForeground());
writeColor(writer, TAG_BACKGROUND, model.getPlotBackground());
writeFont(writer, TAG_TITLE_FONT, model.getTitleFont());
writeFont(writer, TAG_LABEL_FONT, model.getLabelFont());
writeFont(writer, TAG_SCALE_FONT, model.getScaleFont());
writeFont(writer, TAG_LEGEND_FONT, model.getLegendFont());
// Value axes
writer.writeStartElement(TAG_AXES);
for (AxisConfig axis : model.getAxes()) axis.write(writer);
writer.writeEndElement();
// Annotations
writer.writeStartElement(TAG_ANNOTATIONS);
for (AnnotationInfo annotation : model.getAnnotations()) annotation.write(writer);
writer.writeEndElement();
// PVs (Formulas)
writer.writeStartElement(TAG_PVLIST);
for (ModelItem item : model.getItems()) item.write(writer);
writer.writeEndElement();
}
writer.writeEndElement();
writer.writeEndDocument();
}
use of org.phoebus.util.time.TimeRelativeInterval in project phoebus by ControlSystemStudio.
the class AdvancedSearchViewController method initialize.
@FXML
public void initialize() {
searchTitle.textProperty().bindBidirectional(this.searchParameters.titleProperty());
searchText.textProperty().bindBidirectional(this.searchParameters.textProperty());
searchAuthor.textProperty().bindBidirectional(this.searchParameters.authorProperty());
levelSelector.valueProperty().bindBidirectional(this.searchParameters.levelProperty());
searchTags.textProperty().bindBidirectional(this.searchParameters.tagsProperty());
searchLogbooks.textProperty().bindBidirectional(this.searchParameters.logbooksProperty());
startTime.textProperty().bindBidirectional(this.searchParameters.startTimeProperty());
endTime.textProperty().bindBidirectional(this.searchParameters.endTimeProperty());
searchParameters.addListener((observable, oldValue, newValue) -> {
updateControls(newValue);
});
levelLabel.setText(LogbookUIPreferences.level_field_name);
advancedSearchPane.minWidthProperty().set(0);
advancedSearchPane.maxWidthProperty().set(0);
VBox timeBox = new VBox();
TimeRelativeIntervalPane timeSelectionPane = new TimeRelativeIntervalPane(TEMPORAL_AMOUNTS_AND_NOW);
// TODO needs to be initialized from the values in the search parameters
TimeRelativeInterval initial = TimeRelativeInterval.of(java.time.Duration.ofHours(8), java.time.Duration.ZERO);
timeSelectionPane.setInterval(initial);
HBox hbox = new HBox();
hbox.setSpacing(5);
hbox.setAlignment(Pos.CENTER_RIGHT);
Button apply = new Button();
apply.setText(Messages.Apply);
apply.setPrefWidth(80);
apply.setOnAction((event) -> {
Platform.runLater(() -> {
TimeRelativeInterval interval = timeSelectionPane.getInterval();
if (interval.isStartAbsolute()) {
searchParameters.startTimeProperty().setValue(TimestampFormats.MILLI_FORMAT.format(interval.getAbsoluteStart().get()));
} else {
searchParameters.startTimeProperty().setValue(TimeParser.format(interval.getRelativeStart().get()));
}
if (interval.isEndAbsolute()) {
searchParameters.endTimeProperty().setValue(TimestampFormats.MILLI_FORMAT.format(interval.getAbsoluteEnd().get()));
} else {
searchParameters.endTimeProperty().setValue(TimeParser.format(interval.getRelativeEnd().get()));
}
if (timeSearchPopover.isShowing())
timeSearchPopover.hide();
});
});
Button cancel = new Button();
cancel.setText("Cancel");
cancel.setPrefWidth(80);
cancel.setOnAction((event) -> {
if (timeSearchPopover.isShowing())
timeSearchPopover.hide();
});
hbox.getChildren().addAll(apply, cancel);
timeBox.getChildren().addAll(timeSelectionPane, hbox);
timeSearchPopover = new PopOver(timeBox);
startTime.focusedProperty().addListener((ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) -> {
if (newPropertyValue) {
timeSearchPopover.show(timePane);
} else if (timeSearchPopover.isShowing()) {
timeSearchPopover.hide();
}
});
endTime.focusedProperty().addListener((ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) -> {
if (newPropertyValue) {
timeSearchPopover.show(timePane);
} else if (timeSearchPopover.isShowing()) {
timeSearchPopover.hide();
}
});
FXMLLoader logbookSelectionLoader = new FXMLLoader();
logbookSelectionLoader.setLocation(this.getClass().getResource("ListSelection.fxml"));
try {
logbookSelectionLoader.load();
logbookController = logbookSelectionLoader.getController();
logbookController.setOnApply((List<String> t) -> {
Platform.runLater(() -> {
if (t.isEmpty()) {
searchParameters.logbooksProperty().setValue(null);
} else {
searchParameters.logbooksProperty().setValue(t.stream().collect(Collectors.joining(",")));
}
if (logbookSearchPopover.isShowing())
logbookSearchPopover.hide();
});
return true;
});
logbookController.setOnCancel((List<String> t) -> {
if (logbookSearchPopover.isShowing())
logbookSearchPopover.hide();
return true;
});
logbookSearchPopover = new PopOver(logbookSelectionLoader.getRoot());
} catch (IOException e) {
logger.log(Level.WARNING, "failed to open logbook search dialog", e);
}
FXMLLoader tagSelectionLoader = new FXMLLoader();
tagSelectionLoader.setLocation(this.getClass().getResource("ListSelection.fxml"));
try {
tagSelectionLoader.load();
tagController = tagSelectionLoader.getController();
tagController.setOnApply((List<String> t) -> {
Platform.runLater(() -> {
if (t.isEmpty()) {
// searchParameters.remove(Keys.TAGS);
} else {
String tagsValue = t.stream().collect(Collectors.joining(","));
// searchParameters.put(Keys.TAGS, tagsValue);
searchParameters.tagsProperty().setValue(tagsValue);
}
if (tagSearchPopover.isShowing())
tagSearchPopover.hide();
});
return true;
});
tagController.setOnCancel((List<String> t) -> {
if (tagSearchPopover.isShowing())
tagSearchPopover.hide();
return true;
});
tagSearchPopover = new PopOver(tagSelectionLoader.getRoot());
} catch (IOException e) {
logger.log(Level.WARNING, "failed to open tag search dialog", e);
}
searchTags.setOnMouseClicked(mouseEvent -> {
if (tagSearchPopover.isShowing()) {
tagSearchPopover.hide();
} else {
tagNames = logClient.listTags().stream().map(Tag::getName).sorted().collect(Collectors.toList());
tagController.setAvailable(tagNames);
tagSearchPopover.show(searchTags);
}
});
searchLogbooks.setOnMouseClicked(mouseEvent -> {
if (logbookSearchPopover.isShowing()) {
logbookSearchPopover.hide();
} else {
logbookNames = logClient.listLogbooks().stream().map(Logbook::getName).sorted().collect(Collectors.toList());
logbookController.setAvailable(logbookNames);
logbookSearchPopover.show(searchLogbooks);
}
});
List<String> levelList = logClient.listLevels().stream().collect(Collectors.toList());
levelSelector.getItems().add("");
levelSelector.getItems().addAll(levelList);
}
use of org.phoebus.util.time.TimeRelativeInterval in project phoebus by ControlSystemStudio.
the class AdvancedSearchViewController method initialize.
@FXML
public void initialize() {
advancedSearchPane.minWidthProperty().set(0);
advancedSearchPane.maxWidthProperty().set(0);
VBox timeBox = new VBox();
TimeRelativeIntervalPane timeSelectionPane = new TimeRelativeIntervalPane(TEMPORAL_AMOUNTS_AND_NOW);
// TODO needs to be initialized from the values in the search parameters
TimeRelativeInterval initial = TimeRelativeInterval.of(java.time.Duration.ofHours(8), java.time.Duration.ZERO);
timeSelectionPane.setInterval(initial);
HBox hbox = new HBox();
hbox.setSpacing(5);
hbox.setAlignment(Pos.CENTER_RIGHT);
Button apply = new Button();
apply.setText("Apply");
apply.setPrefWidth(80);
apply.setOnAction((event) -> {
Platform.runLater(() -> {
TimeRelativeInterval interval = timeSelectionPane.getInterval();
if (interval.isStartAbsolute()) {
searchParameters.put(Keys.STARTTIME, TimestampFormats.MILLI_FORMAT.format(interval.getAbsoluteStart().get()));
} else {
searchParameters.put(Keys.STARTTIME, TimeParser.format(interval.getRelativeStart().get()));
}
if (interval.isEndAbsolute()) {
searchParameters.put(Keys.ENDTIME, TimestampFormats.MILLI_FORMAT.format(interval.getAbsoluteEnd().get()));
} else {
searchParameters.put(Keys.ENDTIME, TimeParser.format(interval.getRelativeEnd().get()));
}
if (timeSearchPopover.isShowing())
timeSearchPopover.hide();
});
});
Button cancel = new Button();
cancel.setText("Cancel");
cancel.setPrefWidth(80);
cancel.setOnAction((event) -> {
if (timeSearchPopover.isShowing())
timeSearchPopover.hide();
});
hbox.getChildren().addAll(apply, cancel);
timeBox.getChildren().addAll(timeSelectionPane, hbox);
timeSearchPopover = new PopOver(timeBox);
startTime.focusedProperty().addListener((ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) -> {
if (newPropertyValue) {
timeSearchPopover.show(timePane);
} else if (timeSearchPopover.isShowing()) {
timeSearchPopover.hide();
}
});
endTime.focusedProperty().addListener((ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) -> {
if (newPropertyValue) {
timeSearchPopover.show(timePane);
} else if (timeSearchPopover.isShowing()) {
timeSearchPopover.hide();
}
});
searchPV.textProperty().addListener((observable, oldValue, newValue) -> {
searchParameters.put(Keys.PV, newValue);
});
searchSeverity.textProperty().addListener((observable, oldValue, newValue) -> {
searchParameters.put(Keys.SEVERITY, newValue);
});
searchMessage.textProperty().addListener((observable, oldValue, newValue) -> {
searchParameters.put(Keys.MESSAGE, newValue);
});
searchCurrentSeverity.textProperty().addListener((observable, oldValue, newValue) -> {
searchParameters.put(Keys.CURRENTSEVERITY, newValue);
});
searchCurrentMessage.textProperty().addListener((observable, oldValue, newValue) -> {
searchParameters.put(Keys.CURRENTMESSAGE, newValue);
});
searchUser.textProperty().addListener((observable, oldValue, newValue) -> {
searchParameters.put(Keys.USER, newValue);
});
searchHost.textProperty().addListener((observable, oldValue, newValue) -> {
searchParameters.put(Keys.HOST, newValue);
});
searchCommand.textProperty().addListener((observable, oldValue, newValue) -> {
searchParameters.put(Keys.COMMAND, newValue);
});
}
use of org.phoebus.util.time.TimeRelativeInterval in project phoebus by ControlSystemStudio.
the class LogEntryCalenderViewController method initialize.
@FXML
public void initialize() {
resize.setText("<");
agenda = new Agenda();
agenda.setEditAppointmentCallback(new Callback<Agenda.Appointment, Void>() {
@Override
public Void call(Appointment appointment) {
return null;
}
});
agenda.setActionCallback((appointment) -> {
// show detailed view
try {
if (map != null) {
final Stage dialog = new Stage();
dialog.initModality(Modality.NONE);
logEntryControl = new LogEntryControl();
logEntryControl.setLog(map.get(appointment));
Scene dialogScene = new Scene(logEntryControl, 300, 200);
dialog.setScene(dialogScene);
dialog.show();
}
} catch (Exception e) {
logger.log(Level.WARNING, "Failed to show details for : " + appointment.getSummary(), e);
}
return null;
});
agenda.allowDraggingProperty().set(false);
agenda.allowResizeProperty().set(false);
appointmentGroupMap = agenda.appointmentGroups().stream().collect(Collectors.toMap(AppointmentGroup::getDescription, Function.identity()));
try {
String styleSheetResource = LogbookUiPreferences.calendar_view_item_stylesheet;
agenda.getStylesheets().add(this.getClass().getResource(styleSheetResource).toString());
} catch (Exception e) {
logger.log(Level.WARNING, "Failed to set css style", e);
}
AnchorPane.setTopAnchor(agenda, 6.0);
AnchorPane.setBottomAnchor(agenda, 6.0);
AnchorPane.setLeftAnchor(agenda, 6.0);
AnchorPane.setRightAnchor(agenda, 6.0);
agendaPane.getChildren().add(agenda);
searchParameters = FXCollections.<Keys, String>observableHashMap();
searchParameters.put(Keys.SEARCH, "*");
searchParameters.put(Keys.STARTTIME, TimeParser.format(java.time.Duration.ofHours(8)));
searchParameters.put(Keys.ENDTIME, TimeParser.format(java.time.Duration.ZERO));
advancedSearchViewController.setSearchParameters(searchParameters);
searchParameters.addListener(new MapChangeListener<Keys, String>() {
@Override
public void onChanged(Change<? extends Keys, ? extends String> change) {
Platform.runLater(() -> {
query.setText(searchParameters.entrySet().stream().sorted(Map.Entry.comparingByKey()).map((e) -> {
return e.getKey().getName().trim() + "=" + e.getValue().trim();
}).collect(Collectors.joining("&")));
});
}
});
query.setText(searchParameters.entrySet().stream().sorted(Map.Entry.comparingByKey()).map((e) -> {
return e.getKey().getName().trim() + "=" + e.getValue().trim();
}).collect(Collectors.joining("&")));
VBox timeBox = new VBox();
TimeRelativeIntervalPane timeSelectionPane = new TimeRelativeIntervalPane(TEMPORAL_AMOUNTS_AND_NOW);
// TODO needs to be initialized from the values in the search parameters
TimeRelativeInterval initial = TimeRelativeInterval.of(java.time.Duration.ofHours(8), java.time.Duration.ZERO);
timeSelectionPane.setInterval(initial);
HBox hbox = new HBox();
hbox.setSpacing(5);
hbox.setAlignment(Pos.CENTER_RIGHT);
Button apply = new Button();
apply.setText("Apply");
apply.setPrefWidth(80);
apply.setOnAction((event) -> {
Platform.runLater(() -> {
TimeRelativeInterval interval = timeSelectionPane.getInterval();
if (interval.isStartAbsolute()) {
searchParameters.put(Keys.STARTTIME, TimestampFormats.MILLI_FORMAT.format(interval.getAbsoluteStart().get()));
} else {
searchParameters.put(Keys.STARTTIME, TimeParser.format(interval.getRelativeStart().get()));
}
if (interval.isEndAbsolute()) {
searchParameters.put(Keys.ENDTIME, TimestampFormats.MILLI_FORMAT.format(interval.getAbsoluteEnd().get()));
} else {
searchParameters.put(Keys.ENDTIME, TimeParser.format(interval.getRelativeEnd().get()));
}
});
});
Button cancel = new Button();
cancel.setText("Cancel");
cancel.setPrefWidth(80);
hbox.getChildren().addAll(apply, cancel);
timeBox.getChildren().addAll(timeSelectionPane, hbox);
// Bind ENTER key press to search
query.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.ENTER) {
search();
}
});
}
Aggregations