All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.ikasan.dashboard.ui.general.component.ReplayDialog Maven / Gradle / Ivy
package org.ikasan.dashboard.ui.general.component;
import com.vaadin.componentfactory.Tooltip;
import com.vaadin.flow.component.*;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.dialog.GeneratedVaadinDialog;
import com.vaadin.flow.component.formlayout.FormLayout;
import com.vaadin.flow.component.html.H3;
import com.vaadin.flow.component.html.Image;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.i18n.I18NProvider;
import com.vaadin.flow.server.StreamResource;
import com.vaadin.flow.server.VaadinService;
import org.ikasan.dashboard.ui.search.model.replay.ReplayAuditEventImpl;
import org.ikasan.dashboard.ui.search.model.replay.ReplayAuditImpl;
import org.ikasan.dashboard.ui.search.model.replay.ReplayDialogDto;
import org.ikasan.dashboard.ui.util.DateFormatter;
import org.ikasan.dashboard.ui.util.VaadinThreadFactory;
import org.ikasan.rest.client.ReplayFailException;
import org.ikasan.solr.model.IkasanSolrDocument;
import org.ikasan.spec.module.client.ReplayService;
import org.ikasan.spec.persistence.BatchInsert;
import org.ikasan.spec.replay.ReplayAuditEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.vaadin.olli.FileDownloadWrapper;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class ReplayDialog extends AbstractEntityViewDialog
{
Logger logger = LoggerFactory.getLogger(ReplayDialog.class);
private IkasanSolrDocument replayEvent;
private TextField moduleNameTf;
private TextField flowNameTf;
private TextField eventIdTf;
private TextField dateTimeTf;
private StreamResource streamResource;
private FileDownloadWrapper buttonWrapper;
private Button downloadButton;
private Tooltip downloadButtonTooltip;
private ReplayService replayRestService;
private BatchInsert replayAuditService;
private DateFormatter dateFormatter;
public ReplayDialog(ReplayService replayRestService, BatchInsert replayAuditService,
DateFormatter dateFormatter)
{
this.replayRestService = replayRestService;
if(this.replayRestService == null)
{
throw new IllegalArgumentException("replayRestService cannot be null!");
}
this.replayAuditService = replayAuditService;
if(this.replayAuditService == null)
{
throw new IllegalArgumentException("solrGeneralService cannot be null!");
}
this.dateFormatter = dateFormatter;
if(this.dateFormatter == null)
{
throw new IllegalArgumentException("dateFormatter cannot be null!");
}
moduleNameTf = new TextField(getTranslation("text-field.module-name", UI.getCurrent().getLocale(), null));
flowNameTf = new TextField(getTranslation("text-field.flow-name", UI.getCurrent().getLocale(), null));
eventIdTf = new TextField(getTranslation("text-field.event-id", UI.getCurrent().getLocale(), null));
dateTimeTf = new TextField(getTranslation("text-field.date-time", UI.getCurrent().getLocale(), null));
}
@Override
public Component getEntityDetailsLayout()
{
Image replayImage = new Image("/frontend/images/replay-service.png", "");
replayImage.setHeight("70px");
H3 replayLabel = new H3(getTranslation("label.replay-event-details", UI.getCurrent().getLocale()));
HorizontalLayout headerLayout = new HorizontalLayout();
headerLayout.setSpacing(true);
headerLayout.add(replayImage, replayLabel);
FormLayout formLayout = new FormLayout();
moduleNameTf.setReadOnly(true);
formLayout.add(moduleNameTf);
flowNameTf.setReadOnly(true);
formLayout.add(flowNameTf);
eventIdTf.setReadOnly(true);
formLayout.add(eventIdTf);
dateTimeTf.setReadOnly(true);
formLayout.add(dateTimeTf);
formLayout.setSizeFull();
downloadButton = new TableButton(VaadinIcon.DOWNLOAD.create());
downloadButtonTooltip = TooltipHelper.getTooltipForComponentTopLeft(downloadButton, getTranslation("tooltip.download-replay-event", UI.getCurrent().getLocale()));
this.streamResource = new StreamResource("replay.txt"
, () -> new ByteArrayInputStream(super.aceEditor.getValue().getBytes()));
buttonWrapper = new FileDownloadWrapper(this.streamResource);
buttonWrapper.wrapComponent(downloadButton);
Button replayButton = new Button(getTranslation("button.replay", UI.getCurrent().getLocale(), null));
replayButton.addClickListener((ComponentEventListener>) buttonClickEvent ->
{
final UI current = UI.getCurrent();
final I18NProvider i18NProvider = VaadinService.getCurrent().getInstantiator().getI18NProvider();
ReplayDialogDto replayDialogDto = new ReplayDialogDto();
ReplayCommentsDialog replayCommentsDialog = new ReplayCommentsDialog(replayDialogDto);
replayCommentsDialog.open();
replayCommentsDialog.addOpenedChangeListener((ComponentEventListener>) dialogOpenedChangeEvent ->
{
if(!dialogOpenedChangeEvent.isOpened() && replayCommentsDialog.isSaved())
{
ProgressIndicatorDialog progressIndicatorDialog = new ProgressIndicatorDialog(true);
progressIndicatorDialog.open(current.getTranslation("message.replaying-event"
, UI.getCurrent().getLocale()), null);
Executor executor = Executors.newSingleThreadExecutor(new VaadinThreadFactory("ReplayDialog"));
executor.execute(() -> {
try
{
List replayAuditEvents = new ArrayList<>();
ReplayAuditEvent replayAuditEvent;
boolean result = false;
String errorMessage = "";
try {
result = this.replayRestService.replay(replayDialogDto.getTargetServer(), replayDialogDto.getAuthenticationUser(),
replayDialogDto.getPassword(), this.replayEvent.getModuleName(), this.replayEvent.getFlowName(), this.replayEvent.getPayloadRaw());
}
catch (ReplayFailException e) {
errorMessage = e.getMessage();
}
replayAuditEvent = new ReplayAuditEventImpl();
replayAuditEvent.setId(this.replayEvent.getId());
replayAuditEvent.setReplayAudit(new ReplayAuditImpl(replayDialogDto.getUser(),
replayDialogDto.getReplayReason(), replayDialogDto.getTargetServer(), System.currentTimeMillis()));
if(result)
{
replayAuditEvent.setResultMessage(String.format(i18NProvider.getTranslation("message.replay-audit-success"
, current.getLocale()), replayEvent.getId()));
}
else
{
replayAuditEvent.setResultMessage(String.format(i18NProvider.getTranslation("message.replay-audit-failure"
, current.getLocale()) + " " + errorMessage, replayEvent.getId()));
}
replayAuditEvent.setSuccess(result);
replayAuditEvent.setTimestamp(System.currentTimeMillis());
replayAuditEvents.add(replayAuditEvent);
String finalErrorMessage = errorMessage;
current.access(() ->
{
progressIndicatorDialog.close();
if(!finalErrorMessage.isEmpty()) {
NotificationHelper.showUserNotification(finalErrorMessage);
}
else {
NotificationHelper.showUserNotification(i18NProvider.getTranslation("message.replay-complete"
, current.getLocale()) + " " + finalErrorMessage);
}
});
this.replayAuditService.insert(replayAuditEvents);
}
catch(Exception e)
{
e.printStackTrace();
current.access(() ->
{
progressIndicatorDialog.close();
NotificationHelper.showUserNotification(i18NProvider.getTranslation("message.replay-error"
, current.getLocale()));
});
}
});
}
});
});
Button newWindowButton = new TableButton(VaadinIcon.EXTERNAL_LINK.create());
newWindowButton.addClickListener(buttonClickEvent -> {
EntityContentsViewDialog entityContentsViewDialog = new EntityContentsViewDialog("Replay " + replayEvent.getEventId());
entityContentsViewDialog.populate(this.replayEvent);
});
HorizontalLayout buttonLayout = new HorizontalLayout();
buttonLayout.add(super.select, buttonWrapper, downloadButtonTooltip, newWindowButton);
buttonLayout.setVerticalComponentAlignment(FlexComponent.Alignment.START, super.select);
buttonLayout.setVerticalComponentAlignment(FlexComponent.Alignment.END, buttonWrapper, newWindowButton);
VerticalLayout layout = new VerticalLayout();
layout.add(headerLayout, formLayout, buttonLayout, replayButton);
layout.setHorizontalComponentAlignment(FlexComponent.Alignment.END, buttonLayout, downloadButtonTooltip);
layout.setHorizontalComponentAlignment(FlexComponent.Alignment.CENTER, replayButton);
return layout;
}
@Override
public void populate(IkasanSolrDocument replayEvent)
{
super.title.setText("Replay " + replayEvent.getEventId());
this.replayEvent = replayEvent;
this.moduleNameTf.setValue(replayEvent.getModuleName());
this.flowNameTf.setValue(replayEvent.getFlowName());
this.eventIdTf.setValue(replayEvent.getEventId());
this.dateTimeTf.setValue(this.dateFormatter.getFormattedDate(replayEvent.getTimestamp()));
super.open(replayEvent.getEvent());
}
@Override
protected void onAttach(AttachEvent attachEvent)
{
this.downloadButtonTooltip.attachToComponent(downloadButton);
}
}