Guest User

Untitled

a guest
Jun 24th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 34.63 KB | None | 0 0
  1. package ro.oneandone.pccdashboard.client.mvp.monitoredprocessflowphases;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8.  
  9. import net.customware.gwt.dispatch.client.DispatchAsync;
  10. import ro.oneandone.pcc.dashboard.client.dto.DashboardKpiStatus;
  11. import ro.oneandone.pcc.dashboard.client.dto.PairValueDTO;
  12. import ro.oneandone.pcc.dashboard.client.dto.ProcessFlowDTO;
  13. import ro.oneandone.pcc.dashboard.client.dto.ProcessFlowKpiDTO;
  14. import ro.oneandone.pcc.dashboard.client.dto.ProcessFlowKpisDTO;
  15. import ro.oneandone.pcc.dashboard.client.util.DBConstants;
  16. import ro.oneandone.pccdashboard.client.ClientFactory;
  17. import ro.oneandone.pccdashboard.client.PCCDashboard;
  18. import ro.oneandone.pccdashboard.client.Session;
  19. import ro.oneandone.pccdashboard.client.common.CookiesUtils;
  20. import ro.oneandone.pccdashboard.client.common.CookiesUtils.PfFavoriteStatus;
  21. import ro.oneandone.pccdashboard.client.components.TextButton;
  22. import ro.oneandone.pccdashboard.client.components.TextImage;
  23. import ro.oneandone.pccdashboard.client.components.TextLabel;
  24. import ro.oneandone.pccdashboard.client.components.WidgetHasText;
  25. import ro.oneandone.pccdashboard.client.components.advancedtable.AdvancedTreeTable;
  26. import ro.oneandone.pccdashboard.client.components.advancedtable.FiltrableTableColumn;
  27. import ro.oneandone.pccdashboard.client.components.advancedtable.Sortable;
  28. import ro.oneandone.pccdashboard.client.components.advancedtable.SortableTableColumn;
  29. import ro.oneandone.pccdashboard.client.components.advancedtable.SortingType;
  30. import ro.oneandone.pccdashboard.client.components.advancedtable.TableColumn;
  31. import ro.oneandone.pccdashboard.client.components.advancedtable.TreeMetadata;
  32. import ro.oneandone.pccdashboard.client.mvp.AbstractPlace;
  33. import ro.oneandone.pccdashboard.client.mvp.MvpUtils;
  34. import ro.oneandone.pccdashboard.client.mvp.SqlCriteriaUtils;
  35. import ro.oneandone.pccdashboard.client.mvp.policyviolations.PolicyViolationsDetailsPlace;
  36. import ro.oneandone.pccdashboard.client.mvp.processflowkpidetails.ProcessFlowKPIDetailsPlace;
  37. import ro.oneandone.pccdashboard.client.mvp.processflowphasemonitoringdetails.ProcessFlowPhaseMonitoringDetailsPlace;
  38. import ro.oneandone.pccdashboard.client.mvp.processinstancesexceededtargetvalues.ProcessInstancesExceededTargetValuesPlace;
  39. import ro.oneandone.pccdashboard.shared.ExportType;
  40. import ro.oneandone.pccdashboard.shared.criteria.DefaultSqlCriteria;
  41. import ro.oneandone.pccdashboard.shared.criteria.Order;
  42. import ro.oneandone.pccdashboard.shared.criteria.SqlCriteria;
  43. import ro.oneandone.pccdashboard.shared.model.monitoredprocessflowphases.MonitoredProcessFlowPhasesModelConstants;
  44. import ro.oneandone.pccdashboard.shared.model.processflowmetadata.ProcessFlowMetadata;
  45. import ro.oneandone.pccdashboard.shared.rpc.monitoredprocessflowphases.GetRowsCountMonitoredProcessFlowsModel;
  46. import ro.oneandone.pccdashboard.shared.rpc.monitoredprocessflowphases.GetRowsCountMonitoredProcessFlowsModelResult;
  47. import ro.oneandone.pccdashboard.shared.rpc.monitoredprocessflowphases.PaginationMonitoredProcessFlowsModel;
  48. import ro.oneandone.pccdashboard.shared.rpc.monitoredprocessflowphases.RetrieveMonitoredProcessFlowPhasesModel;
  49. import ro.oneandone.pccdashboard.shared.rpc.monitoredprocessflowphases.RetrieveMonitoredProcessFlowPhasesModelResult;
  50. import ro.oneandone.pccdashboard.shared.rpc.monitoredprocessflowphases.RetrieveMonitoredProcessFlowsModelResult;
  51.  
  52. import com.google.gwt.core.client.GWT;
  53. import com.google.gwt.event.dom.client.ClickEvent;
  54. import com.google.gwt.event.dom.client.ClickHandler;
  55. import com.google.gwt.event.dom.client.MouseDownEvent;
  56. import com.google.gwt.event.dom.client.MouseDownHandler;
  57. import com.google.gwt.event.logical.shared.ValueChangeEvent;
  58. import com.google.gwt.event.logical.shared.ValueChangeHandler;
  59. import com.google.gwt.place.shared.Place;
  60. import com.google.gwt.resources.client.ImageResource;
  61. import com.google.gwt.user.client.Window;
  62. import com.google.gwt.user.client.rpc.AsyncCallback;
  63. import com.google.gwt.user.client.rpc.StatusCodeException;
  64. import com.google.gwt.user.client.ui.Button;
  65. import com.google.gwt.user.client.ui.CheckBox;
  66. import com.google.gwt.user.client.ui.HTML;
  67. import com.google.gwt.user.client.ui.HasHorizontalAlignment;
  68. import com.google.gwt.user.client.ui.HorizontalPanel;
  69. import com.google.gwt.user.client.ui.Image;
  70. import com.google.gwt.user.client.ui.Label;
  71. import com.google.gwt.user.client.ui.TextBox;
  72.  
  73. public class MonitoredProcessFlowPhasesAdvancedTable extends AdvancedTreeTable {
  74.    
  75.     private static int COLUMN_INDEX = 1;
  76.  
  77.     private DispatchAsync dispatcher;
  78.     private ClientFactory clientFactory;
  79.     private ProcessFlowDTO model = new ProcessFlowDTO();
  80.     private SqlCriteria sqlCriteria = new DefaultSqlCriteria();
  81.     private List<WidgetHasText[]> rows;
  82.     private TableColumn[][] columns = new TableColumn[3][10];
  83.     private List<ProcessFlowDTO> rowsData;
  84.     private Map<ProcessFlowDTO, ProcessFlowMetadata> processFlowMetadata;
  85.     private List<Long> processFlowsFavorite;
  86.     private final TextBox processFlowName = new TextBox();
  87.     private Map<RetrieveMonitoredProcessFlowPhasesModel, List<WidgetHasText[]>> cacheChilds = new HashMap<RetrieveMonitoredProcessFlowPhasesModel, List<WidgetHasText[]>>();
  88.    
  89.     private Map<Long, Map<String, TextImage>> favoriteRelations = new HashMap<Long, Map<String, TextImage>>();
  90.        
  91.     {
  92.         HorizontalPanel container = new HorizontalPanel();
  93.         Label searchForLabel = new Label("Search for:");
  94.         searchForLabel.setWordWrap(true);
  95.         searchForLabel.setStyleName("search-for-label");
  96.         searchForLabel.setWidth("100%");
  97.         container.add(searchForLabel);
  98.         processFlowName.setWidth("90%");
  99.        
  100.         container.add(processFlowName);
  101.         final Button apply = new Button("Apply");
  102.         apply.addClickHandler(new ClickHandler() {
  103.  
  104.             @Override
  105.             public void onClick(ClickEvent event) {
  106.                 String value = ((TextBox) processFlowName).getText().trim();
  107.                 if (value != null && !"".equals(value.trim())) {
  108.                     model.setName(value);
  109.                 } else {
  110.                     model.setName(null);
  111.                 }
  112.                 fillProcessFlowFavorites();
  113.                 load();
  114.                 sqlCriteria.clearCriterion();
  115.             }
  116.         });
  117.         container.setStyleName("horizontal-panel-monitored-pf");
  118.         container.add(apply);
  119.        
  120.  
  121.         columns[0][0] = new TableColumn(new Label("Monitored process flow's & phases"));
  122.         columns[0][0].setAlign(HasHorizontalAlignment.ALIGN_LEFT);
  123.         columns[0][0].setWidth(21);
  124.         columns[1][0] = new SortableTableColumn(
  125.                 MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_PHASE_IDENTIFIER,
  126.                 "Process flow phase name",
  127.                 MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_NAME_NATIVE_SQL_COLUMN_IDENTIFIER,
  128.                 new Label("Process flow phase name"));     
  129.         columns[1][0].setAlign(HasHorizontalAlignment.ALIGN_LEFT);
  130.         columns[1][0].setWidth(21);
  131.        
  132.         columns[2][0] = new FiltrableTableColumn(
  133.                 MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_PHASE_IDENTIFIER,
  134.                 "Process flow phase name",
  135.                 MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_NAME_NATIVE_SQL_COLUMN_IDENTIFIER,
  136.                 container);
  137.         columns[2][0].setWidth(21);
  138.         CheckBox favorite = new CheckBox();
  139.         favorite.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
  140.  
  141.             @Override
  142.             public void onValueChange(ValueChangeEvent<Boolean> event) {
  143.                 CookiesUtils.setCookie("SHOW_FAVORITES_ONLY", Boolean.toString(event.getValue()));
  144.                 if (event.getValue()) {
  145.                     fillProcessFlowFavorites();
  146.                 } else {
  147.                     processFlowsFavorite = null;
  148.                 }
  149.                 load();
  150.             }
  151.         });
  152.         favorite.setValue(Boolean.valueOf(CookiesUtils.getCookie("SHOW_FAVORITES_ONLY")));
  153.         Image yellowStarImg = new Image(PCCDashboard.RESOURCES.Yellow_star());
  154.         yellowStarImg.setStyleName("yellow-star-table");
  155.         columns[0][1] = new TableColumn("", "", new Label());
  156.         columns[0][1].setAlign(HasHorizontalAlignment.ALIGN_CENTER);
  157.         columns[0][1].setWidth(3);
  158.         columns[1][1] = new FiltrableTableColumn(
  159.                 MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_FAVORITE_IDENTIFIER,
  160.                 MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_FAVORITE_IDENTIFIER,
  161.                 MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_FAVORITE_NATIVE_SQL_COLUMN_IDENTIFIER,
  162.                 favorite);
  163.         columns[1][1].setOnlyImage(true);
  164.         columns[1][1].setWidth(3);
  165.         columns[1][1].setRowSpan(1);
  166.         columns[2][1] = new TableColumn("", "", yellowStarImg);    
  167.         columns[2][1].setWidth(3);
  168.  
  169.         columns[0][2] = new TableColumn(new Label("Process Flow KPI's of last calculation interval"));
  170.         columns[0][2].setColSpan(6);
  171.        
  172.         columns[0][3] = new TableColumn("","", new Label(""));
  173.         columns[0][4] = new TableColumn("","", new Label(""));     
  174.        
  175.         HTML aggregatedHealthStatusHTML = new HTML("Aggregated<br/>Health<br/>Status");    
  176.         columns[1][2] = new TableColumn(
  177.                 MonitoredProcessFlowPhasesModelConstants.AGGREGATED_HEALTH_STATUS_IDENTIFIER,
  178.                 "Aggregated<br/>Health<br/>Status", aggregatedHealthStatusHTML);
  179.         columns[1][2].setWidth(9);
  180.         columns[1][2].setRowSpan(2);
  181.        
  182.  
  183.         columns[1][3] = new TableColumn(
  184.                 MonitoredProcessFlowPhasesModelConstants.STARTED_PROCESS_INSTANCES_IDENTIFIER,
  185.                 "Started PI's", new Label("Started PI's"));
  186.         columns[1][3].setWidth(9);
  187.         columns[1][3].setRowSpan(2);
  188.        
  189.         columns[1][4] = new TableColumn(
  190.                 MonitoredProcessFlowPhasesModelConstants.ACTIVE_PROCESS_INSTANCES_IDENTIFIER,
  191.                 "Active PI's", new Label("Active PI's"));
  192.         columns[1][4].setWidth(9);
  193.         columns[1][4].setRowSpan(2);       
  194.  
  195.         columns[1][5] = new TableColumn(
  196.                 MonitoredProcessFlowPhasesModelConstants.AVERAGE_TIME_OF_FINISHED_PROCESS_INSTANCES_IDENTIFIER,
  197.                 "Avg t. of<br/>finished PI's", new HTML("Avg t. of<br/>finished PI's"));
  198.         columns[1][5].setWidth(9);
  199.         columns[1][5].setRowSpan(2);       
  200.  
  201.         columns[1][6] = new TableColumn(
  202.                 MonitoredProcessFlowPhasesModelConstants.MAX_TIME_OF_FINISHED_PROCESS_INSTANCES_IDENTIFIER,
  203.                 "Max t. of<br/>finished PI's", new HTML("Max t. of<br/>finished PI's"));
  204.         columns[1][6].setWidth(9);
  205.         columns[1][6].setRowSpan(2);       
  206.  
  207.         columns[1][7] = new TableColumn(
  208.                 MonitoredProcessFlowPhasesModelConstants.CANCELLED_PROCESS_INSTANCES_IDENTIFIER,
  209.                 "Cancelled PI's", new Label("Cancelled PI's"));
  210.         columns[1][7].setWidth(9);
  211.         columns[1][7].setRowSpan(2);       
  212.  
  213.         columns[1][8] = new TableColumn(
  214.                 MonitoredProcessFlowPhasesModelConstants.PROCESS_INSTANCES_EXCEEDED_TARGET_LINK,
  215.                 "PI's exceeded target<br/>values",new HTML("PI's exceeded target<br/>values"));
  216.         columns[1][8].setWidth(11);
  217.         columns[1][8].setRowSpan(2);       
  218.  
  219.         columns[1][9] = new TableColumn(
  220.                 MonitoredProcessFlowPhasesModelConstants.POLICY_VIOLATIONS_LINK,
  221.                 "Policy violations", new Label("Policy violations"));
  222.         columns[1][9].setWidth(11);
  223.         columns[1][9].setRowSpan(2);       
  224.  
  225.         columns[0][2].setWidth(columns[1][2].getWidth()+columns[1][3].getWidth()+ columns[1][4].getWidth()+ columns[1][5].getWidth()+ columns[1][6].getWidth()+columns[1][7].getWidth());
  226.         columns[0][3].setWidth(columns[1][8].getWidth());
  227.         columns[0][4].setWidth(columns[1][9].getWidth());
  228.     }
  229.  
  230.     public MonitoredProcessFlowPhasesAdvancedTable() {
  231.         super(true);
  232.         boolean showFavOnly = Boolean.valueOf(CookiesUtils.getCookie("SHOW_FAVORITES_ONLY"));
  233.         if (showFavOnly) {
  234.             this.processFlowsFavorite = CookiesUtils.getProcessFlowsFavorite();
  235.         }
  236.     }
  237.  
  238.     public MonitoredProcessFlowPhasesAdvancedTable(DispatchAsync dispatcher) {
  239.         this.dispatcher = dispatcher;
  240.     }
  241.  
  242.     public DispatchAsync getDispatcher() {
  243.         return dispatcher;
  244.     }
  245.  
  246.     public void setDispatcher(DispatchAsync dispatcher) {
  247.         this.dispatcher = dispatcher;
  248.     }
  249.  
  250.     public ClientFactory getClientFactory() {
  251.         return clientFactory;
  252.     }
  253.  
  254.     public void setClientFactory(ClientFactory clientFactory) {
  255.         this.clientFactory = clientFactory;
  256.     }
  257.  
  258.     @Override
  259.     public void updateRowsCount(final AsyncCallback<Long> completedCallback) {
  260.         if (!this.isWorkOffline()) {
  261.             this.sqlCriteria.clearCriterion();
  262.             SqlCriteriaUtils.toSqlString(this.sqlCriteria, this.model);
  263.             this.sqlCriteria.deactivateOrder();
  264.             this.sqlCriteria.setWithWHERE(false);
  265.             this.sqlCriteria.setStartWithAND(true);
  266.             GetRowsCountMonitoredProcessFlowsModel actionModel = new GetRowsCountMonitoredProcessFlowsModel(
  267.                     this.sqlCriteria.toSqlString());
  268.             actionModel.setShowFavoriteOnly(Boolean.valueOf(CookiesUtils.getCookie("SHOW_FAVORITES_ONLY")));
  269.             actionModel.setWebserviceURLpattern(Session.INSTANCE
  270.                     .getRowCountProcessFlowsInResultsMetadataWebServiceUrlPattern());
  271.             actionModel.setProcessFlowsFavorite(this.processFlowsFavorite);
  272.             this.dispatcher.execute(actionModel, new AsyncCallback<GetRowsCountMonitoredProcessFlowsModelResult>() {
  273.                 public void onFailure(Throwable caught) {
  274.                     if (caught instanceof StatusCodeException && ((StatusCodeException) caught).getStatusCode() == 0) {
  275.                         // just ignore and continue
  276.                     } else {
  277.                         completedCallback.onFailure(caught);
  278.                     }
  279.                 }
  280.  
  281.                 public void onSuccess(GetRowsCountMonitoredProcessFlowsModelResult result) {
  282.                     long count = result.getRowsCount();
  283.                     setTotalRowsCount(count);
  284.                     completedCallback.onSuccess(result.getRowsCount());
  285.                 }
  286.             });
  287.             this.sqlCriteria.activateOrder();
  288.             this.sqlCriteria.setWithWHERE(true);
  289.         }
  290.     }
  291.  
  292.     @Override
  293.     public void getRows() {
  294.         if (!this.isWorkOffline()) {
  295.             this.sqlCriteria.clearCriterion();
  296.             SqlCriteriaUtils.toSqlString(this.sqlCriteria, this.model);
  297.             final Order orderKpiDesc = this.sqlCriteria.get(Order
  298.                     .nothing(MonitoredProcessFlowPhasesModelConstants.KPI_VALUE_DESC_NATIVE_SQL_COLUMN_IDENTIFIER));
  299.             this.sqlCriteria.remove(orderKpiDesc);
  300.             final Order orderCompTime = this.sqlCriteria
  301.                     .get(Order
  302.                             .nothing(MonitoredProcessFlowPhasesModelConstants.COMPUTATION_TIMESTAMP_NATIVE_SQL_COLUMN_IDENTIFIER));
  303.             this.sqlCriteria.remove(orderCompTime);
  304.             this.sqlCriteria.setWithWHERE(false);
  305.             PaginationMonitoredProcessFlowsModel actionModel = new PaginationMonitoredProcessFlowsModel(
  306.                     this.sqlCriteria.toSqlString(), this.getCurrentPageStartRow(), this.getCurrentPageRowsCount());
  307.             actionModel.setShowFavoriteOnly(Boolean.valueOf(CookiesUtils.getCookie("SHOW_FAVORITES_ONLY")));
  308.             actionModel
  309.                     .setWebserviceURLpattern(Session.INSTANCE.getProcessFlowsInResultsMetadataWebServiceUrlPattern());
  310.             actionModel.setProcessFlowsFavorite(this.processFlowsFavorite);
  311.             actionModel.setProcessFlowMetadata(processFlowMetadata);
  312.             this.dispatcher.execute(actionModel, new AsyncCallback<RetrieveMonitoredProcessFlowsModelResult>() {
  313.                 public void onFailure(Throwable caught) {
  314.                     if (caught instanceof StatusCodeException && ((StatusCodeException) caught).getStatusCode() == 0) {
  315.                         // just ignore and continue
  316.                     } else {
  317.                         showError("Can not get table rows data from the server.");
  318.                     }
  319.                 }
  320.  
  321.                 public void onSuccess(RetrieveMonitoredProcessFlowsModelResult result) {
  322.                     List<ProcessFlowDTO> rowsData = result.getProcessFlows();
  323.                     processFlowMetadata = result.getProcessFlowMetadata();                 
  324.                     int columnsCount = columns[COLUMN_INDEX].length;
  325.                     rows = new ArrayList<WidgetHasText[]>(rowsData.size());
  326.                     MonitoredProcessFlowPhasesAdvancedTable.this.rowsData = rowsData;
  327.                     int row = 0;
  328.                     for (ProcessFlowDTO flow : rowsData) {
  329.                         rows.add(new WidgetHasText[columnsCount]);
  330.                         ProcessFlowMetadata processFlowMetadata = MonitoredProcessFlowPhasesAdvancedTable.this.processFlowMetadata
  331.                                 .get(flow);
  332.                         for (int col = 0; col < columnsCount; col++) {
  333.                             String columnName = columns[COLUMN_INDEX][col].getName();
  334.                             if (row < rowsData.size()) {
  335.                                 rows.get(row)[col] = getValue(flow, columnName, processFlowMetadata);
  336.                             } else {
  337.                                 rows.get(row)[col] = new TextLabel("");
  338.                             }
  339.                         }
  340.                         row++;
  341.                     }
  342.                     setPageRows(rows);
  343.                     redrawRows();
  344.                     getColumnGrid().setSize(getGrid().getElement().getClientWidth() + "px", "100%");
  345.                 }
  346.             });
  347.             this.sqlCriteria.add(orderKpiDesc);
  348.             this.sqlCriteria.add(orderCompTime);
  349.             this.sqlCriteria.setWithWHERE(true);
  350.         } else {
  351.            
  352.         }
  353.     }
  354.  
  355.     @Override
  356.     public void onSortColumn(Sortable tableColumn) {
  357.         this.sqlCriteria.remove(Order.nothing(tableColumn.getSqlNativeColumnIdentifier()));
  358.         if (tableColumn.getSortingType() == SortingType.ASC) {
  359.             this.sqlCriteria.add(Order.asc(tableColumn.getSqlNativeColumnIdentifier()));
  360.         } else if (tableColumn.getSortingType() == SortingType.DESC) {
  361.             this.sqlCriteria.add(Order.desc(tableColumn.getSqlNativeColumnIdentifier()));
  362.         }
  363.     }
  364.  
  365.     private WidgetHasText getValue(final ProcessFlowDTO model, String columnName, final ProcessFlowMetadata processFlowMetadata) {
  366.         if (columnName.equals(MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_PHASE_IDENTIFIER)) {
  367.             TextLabel pfLabel = create(model.getName() + " - v." + model.getVersion(), processFlowMetadata, "pointerCursor");
  368.             pfLabel.addClickHandler(new ClickHandler() {
  369.                
  370.                 @Override
  371.                 public void onClick(ClickEvent event) {
  372.                     Window.open(processFlowMetadata.getSignaviolink(), model.getName(), "");
  373.                 }
  374.             });
  375.             return pfLabel;
  376.         } else if (columnName.equals(MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_VERSION_IDENTIFIER)) {
  377.             return create(model.getVersion(), processFlowMetadata);
  378.         } else if (columnName.equals(MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_FAVORITE_IDENTIFIER)) {
  379.             Long pfId = processFlowMetadata.getId();
  380.             TextImage result = createFavorite(pfId.toString());
  381.             Map<String, TextImage> map = favoriteRelations.get(pfId);
  382.             if(map == null) {
  383.                 map = new HashMap<String, TextImage>();
  384.                 favoriteRelations.put(pfId, map);
  385.             }
  386.             map.put(pfId.toString(), result);
  387.           return result;
  388.         }
  389.         return new TextLabel("");
  390.     }
  391.  
  392.     public TextButton getPFPMD(final ProcessFlowKpiDTO model) {
  393.         TextButton result = new TextButton("PFP MD");
  394.         result.setStyleName("navigation-button");
  395.        
  396.         MvpUtils.disableBrowserContextMenu(result);
  397.        
  398.         result.addClickHandler(new ClickHandler() {
  399.             @Override
  400.             public void onClick(ClickEvent event) {
  401.                 Place place = new ProcessFlowPhaseMonitoringDetailsPlace(model.getProcessFlowPhase(), model
  402.                         .getProcessFlowName(), model.getProcessFlowId(), model.getSource(), model.getPfVersion());
  403.                 MonitoredProcessFlowPhasesAdvancedTable.this.clientFactory.getPlaceController().goTo(place);
  404.             }
  405.         });
  406.         result.addMouseDownHandler(new MouseDownHandler() {
  407.            
  408.             @Override
  409.             public void onMouseDown(MouseDownEvent event) {            
  410.                 if (event.getNativeButton() == 2) {
  411.                     AbstractPlace place = new ProcessFlowPhaseMonitoringDetailsPlace(model.getProcessFlowPhase(), model
  412.                             .getProcessFlowName(), model.getProcessFlowId(), model.getSource(), model.getPfVersion());
  413.                     MvpUtils.showLinkContextualMenu(GWT.getHostPageBaseURL()+place.getParameterLink(), event.getClientX(), event.getClientY());                    
  414.                 }
  415.             }
  416.         });
  417.         return result;
  418.     }
  419.  
  420.     public TextButton getPIEXC(final ProcessFlowKpisDTO modelParam) {
  421.         TextButton result = new TextButton("PI EXC");
  422.         result.setStyleName("navigation-button");
  423.        
  424.         MvpUtils.disableBrowserContextMenu(result);
  425.        
  426.         result.addClickHandler(new ClickHandler() {
  427.             @Override
  428.             public void onClick(ClickEvent event) {            
  429.                 Place place = new ProcessInstancesExceededTargetValuesPlace(modelParam.getProcessFlowPhase(), modelParam
  430.                         .getProcessFlowName(), modelParam.getProcessFlowId(), modelParam.getSource(), modelParam.getPfVersion(), null,
  431.                         null, null);
  432.                 clientFactory.getPlaceController().goTo(place);
  433.             }
  434.         });
  435.         result.addMouseDownHandler(new MouseDownHandler() {
  436.            
  437.             @Override
  438.             public void onMouseDown(MouseDownEvent event) {            
  439.                 if (event.getNativeButton() == 2) {
  440.                     AbstractPlace place = new ProcessInstancesExceededTargetValuesPlace(modelParam.getProcessFlowPhase(), modelParam
  441.                             .getProcessFlowName(), modelParam.getProcessFlowId(), modelParam.getSource(), modelParam.getPfVersion(), null,
  442.                             null, null);
  443.                     MvpUtils.showLinkContextualMenu(GWT.getHostPageBaseURL()+place.getParameterLink(), event.getClientX(), event.getClientY());                    
  444.                 }
  445.             }
  446.         });
  447.         return result;
  448.     }
  449.  
  450.     public TextButton getPV(final ProcessFlowKpisDTO model) {
  451.         TextButton result = new TextButton("PV");
  452.         result.setStyleName("navigation-button");
  453.         result.addClickHandler(new ClickHandler() {
  454.             @Override
  455.             public void onClick(ClickEvent event) {
  456.                 Place place = new PolicyViolationsDetailsPlace(model.getProcessFlowPhase(), model.getProcessFlowName(),
  457.                         model.getProcessFlowId(), model.getSource(), model.getPfVersion());
  458.                 clientFactory.getPlaceController().goTo(place);
  459.             }
  460.         });
  461.         result.addMouseDownHandler(new MouseDownHandler() {
  462.            
  463.             @Override
  464.             public void onMouseDown(MouseDownEvent event) {            
  465.                 if (event.getNativeButton() == 2) {
  466.                     AbstractPlace place = new PolicyViolationsDetailsPlace(model.getProcessFlowPhase(), model.getProcessFlowName(),
  467.                             model.getProcessFlowId(), model.getSource(), model.getPfVersion());
  468.                     MvpUtils.showLinkContextualMenu(GWT.getHostPageBaseURL()+place.getParameterLink(), event.getClientX(), event.getClientY());                    
  469.                 }
  470.             }
  471.         });
  472.         return result;
  473.     }
  474.  
  475.     @Override
  476.     public String getIdentifier(int row) {
  477.         return this.rowsData.get(row).getId().toString();
  478.     }
  479.  
  480.     public TextBox getProcessFlowName() {
  481.         return processFlowName;
  482.     }
  483.  
  484.     public ProcessFlowDTO getModel() {
  485.         return model;
  486.     }
  487.  
  488.     private TextLabel create(String text, ProcessFlowMetadata processFlowMetadata) {
  489.         TextLabel result = new TextLabel(text);
  490.         if (processFlowMetadata != null && !processFlowMetadata.isActive()) {
  491.             result.setStyleName("invalid-process-flow");
  492.         }
  493.         return result;
  494.     }
  495.    
  496.     private TextLabel create(String text, ProcessFlowMetadata processFlowMetadata, String styleName) {
  497.         TextLabel result = create(text, processFlowMetadata);
  498.         if (styleName != null) {
  499.             result.setStyleName(styleName);
  500.         }
  501.         return result;
  502.     }
  503.    
  504.     private String[] getFavoritePhaseNames(Long pfId) {
  505.         if (!Boolean.valueOf(CookiesUtils.getCookie("SHOW_FAVORITES_ONLY"))) {
  506.             return null;
  507.         }
  508.         Map<String, TextImage> map = favoriteRelations.get(pfId);
  509.         List<String> list = new ArrayList<String>();
  510.         for(String key : map.keySet()) {
  511.             PfFavoriteStatus status = CookiesUtils.getFavorite(key);
  512.             if(status == PfFavoriteStatus.FULL && key.contains("|")) {
  513.                 list.add(key.split("\\|")[1]);
  514.             }
  515.         }
  516.         return list.toArray(new String[]{});
  517.     }
  518.    
  519.     private ImageResource getStar(PfFavoriteStatus status) {
  520.         ImageResource image = null;
  521.         switch (status) {
  522.         case EMPTY:
  523.           image = PCCDashboard.RESOURCES.White_star();
  524.           break;
  525.         case HALF:
  526.           image = PCCDashboard.RESOURCES.Half_star();
  527.           break;
  528.         case FULL:
  529.           image = PCCDashboard.RESOURCES.Yellow_star();
  530.           break;
  531.         }
  532.         return image;
  533.       }
  534.  
  535.       private TextImage createFavorite(final String favoriteIdentifier) {
  536.         final TextImage result;
  537.  
  538.         /* If the phase is not in the cookies list, assign the flow's status to it */
  539.         PfFavoriteStatus status = CookiesUtils.getFavorite(favoriteIdentifier);
  540.         if (status == null) {
  541.           String[] favoriteIdentifiers = favoriteIdentifier.split("\\|");
  542.           if (favoriteIdentifiers.length == 2) {
  543.             String flowId = Long.valueOf(favoriteIdentifiers[0]).toString();
  544.             CookiesUtils.setFavoriteCookie(favoriteIdentifier, status = CookiesUtils.getFavorite(flowId));
  545.           } else {
  546.             CookiesUtils.setFavoriteCookie(favoriteIdentifier, status = PfFavoriteStatus.EMPTY);
  547.           }
  548.         }
  549.  
  550.         result = new TextImage(getStar(status));
  551.         result.setText(favoriteIdentifier);
  552.         result.addClickHandler(new ClickHandler() {
  553.  
  554.           @Override
  555.           public void onClick(ClickEvent event) {
  556.             String[] favoriteIdentifiers = favoriteIdentifier.split("\\|");
  557.             String flowId = Long.valueOf(favoriteIdentifiers[0]).toString();
  558.             Map<String, TextImage> map = favoriteRelations.get(Long.valueOf(favoriteIdentifiers[0]));
  559.  
  560.             if (favoriteIdentifiers.length == 2) { // Process phase
  561.               /* Set star for process phase */
  562.               PfFavoriteStatus phaseStatus = null;
  563.               PfFavoriteStatus flowStatus = CookiesUtils.getFavorite(flowId);
  564.               switch (CookiesUtils.getFavorite(favoriteIdentifier)) {
  565.               case EMPTY:
  566.                 phaseStatus = PfFavoriteStatus.FULL;
  567.                 break;
  568.               case FULL:
  569.                 phaseStatus = PfFavoriteStatus.EMPTY;
  570.                 break;
  571.               }
  572.               CookiesUtils.setFavoriteCookie(favoriteIdentifier, phaseStatus);
  573.               result.setResource(getStar(phaseStatus));
  574.              
  575.               /* Adjust star for process flow */
  576.               int pfFavCount = CookiesUtils.getFavoritePhasesCount(flowId);
  577.               int pfCount = map.size() - 1;
  578.               if(pfCount == pfFavCount) {
  579.                 flowStatus = PfFavoriteStatus.FULL;
  580.               } else if (pfFavCount == 0) {
  581.                 flowStatus = PfFavoriteStatus.EMPTY;
  582.               } else {
  583.                 flowStatus = PfFavoriteStatus.HALF;
  584.               }
  585.               CookiesUtils.setFavoriteCookie(flowId, flowStatus);
  586.               map.get(flowId).setResource(getStar(flowStatus));
  587.  
  588.             } else if (favoriteIdentifiers.length == 1) { // Process flow
  589.               PfFavoriteStatus status = null;
  590.  
  591.               /* HALF -> FULL <-> EMPTY */
  592.               switch (CookiesUtils.getFavorite(flowId)) {
  593.               case EMPTY:
  594.               case HALF:
  595.                 status = PfFavoriteStatus.FULL;
  596.                 break;
  597.               case FULL:
  598.                 status = PfFavoriteStatus.EMPTY;
  599.                 break;
  600.               }
  601.               CookiesUtils.setFavoriteCookie(flowId, status);
  602.  
  603.               /* Set the process flow's star for all the map */
  604.               for (Entry<String, TextImage> entry : map.entrySet()) {
  605.                   CookiesUtils.setFavoriteCookie(entry.getKey(), status);
  606.                   entry.getValue().setResource(getStar(status));
  607.               }
  608.             }
  609.           }
  610.         });
  611.         return result;
  612.       }
  613.  
  614.  
  615.     @Override
  616.     public void getChilds(final int row, final AsyncCallback<List<WidgetHasText[]>> response) {
  617.         ProcessFlowDTO processFlowDTO = this.rowsData.get(row);
  618.         final ProcessFlowMetadata processFlowMetadata = this.processFlowMetadata.get(processFlowDTO);
  619.         final RetrieveMonitoredProcessFlowPhasesModel actionModel = new RetrieveMonitoredProcessFlowPhasesModel(
  620.                 processFlowDTO.getPfId(), processFlowDTO.getVersion(), processFlowDTO.getSource());
  621.         actionModel.setPhaseNames(getFavoritePhaseNames(processFlowDTO.getId()));
  622.         SqlCriteriaUtils.toSqlString(this.sqlCriteria, this.model);
  623.         this.sqlCriteria.remove(Order
  624.                 .nothing(MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_NAME_NATIVE_SQL_COLUMN_IDENTIFIER));
  625.         this.sqlCriteria.add(Order
  626.                 .asc(MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_PHASE_NATIVE_SQL_COLUMN_IDENTIFIER));
  627.         this.sqlCriteria.setWithWHERE(false);
  628.         this.sqlCriteria.clearCriterion();
  629.         actionModel.setCriteria(this.sqlCriteria.toOrderBySqlString());
  630.         this.dispatcher.execute(actionModel, new AsyncCallback<RetrieveMonitoredProcessFlowPhasesModelResult>() {
  631.             public void onFailure(Throwable caught) {
  632.                 if (caught instanceof StatusCodeException && ((StatusCodeException) caught).getStatusCode() == 0) {
  633.                     // just ignore and continue
  634.                 } else {
  635.                     showError("Can not get table rows data from the server.");
  636.                 }
  637.             }
  638.  
  639.             public void onSuccess(RetrieveMonitoredProcessFlowPhasesModelResult result) {
  640.                 TreeMetadata treeMetadata = getTreeMetadatas().get(new TreeMetadata(getIdentifier(row)))
  641.                         .getTreeMetadata();
  642.                 ProcessFlowKpisDTO[] rowsData = result.getFlows().toArray(new ProcessFlowKpisDTO[] {});
  643.                 if (treeMetadata.isOpen()) {
  644.                     return;
  645.                 }
  646.                 int columnsCount = columns[COLUMN_INDEX].length;
  647.                 List<WidgetHasText[]> rows = new ArrayList<WidgetHasText[]>(rowsData.length);
  648.                 cacheChilds.put(actionModel, rows);
  649.                 for (int row = 0; row < rowsData.length; row++) {
  650.                     rows.add(new WidgetHasText[columnsCount]);
  651.                     for (int col = 0; col < columnsCount; col++) {
  652.                         String columnName = columns[COLUMN_INDEX][col].getName();
  653.                         if (row < rowsData.length) {
  654.                             rows.get(row)[col] = getValue(rowsData[row], columnName, processFlowMetadata);
  655.                         } else {
  656.                             rows.get(row)[col] = new TextLabel("");
  657.                         }
  658.                     }
  659.                 }
  660.                 response.onSuccess(rows);
  661.                 getColumnGrid().setSize(getGrid().getElement().getClientWidth() + "px", "100%");
  662.             }
  663.         });
  664.         this.sqlCriteria.remove(Order
  665.                 .nothing(MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_PHASE_NATIVE_SQL_COLUMN_IDENTIFIER));
  666.     }
  667.    
  668.     private WidgetHasText getValue(final ProcessFlowKpisDTO model, String columnName, ProcessFlowMetadata processFlowMetadata) {
  669.         if (columnName
  670.                 .equals(MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_PHASE_IDENTIFIER)) {
  671.             TextLabel result = create(model.getProcessFlowName() + " - " + model.getProcessFlowPhase(), processFlowMetadata, "pointerCursor");
  672.             result.addClickHandler(new ClickHandler() {
  673.                
  674.                 @Override
  675.                 public void onClick(ClickEvent event) {
  676.                     Place place = new ProcessFlowPhaseMonitoringDetailsPlace(model.getProcessFlowPhase(), model.getProcessFlowName(),
  677.                             model.getProcessFlowId(), model.getSource(), model.getPfVersion());
  678.                     clientFactory.getPlaceController().goTo(place);
  679.                 }
  680.             });
  681.             MvpUtils.disableBrowserContextMenu(result);
  682.            
  683.             result.addMouseDownHandler(new MouseDownHandler() {
  684.                
  685.                 @Override
  686.                 public void onMouseDown(MouseDownEvent event) {
  687.                     event.preventDefault();
  688.                     event.stopPropagation();
  689.                     if (event.getNativeButton() == 2) {
  690.                         AbstractPlace place = new ProcessFlowPhaseMonitoringDetailsPlace(model.getProcessFlowPhase(), model
  691.                                 .getProcessFlowName(), model.getProcessFlowId().toString(), model.getSource(), model.getPfVersion());
  692.                         MvpUtils.showLinkContextualMenu(GWT.getHostPageBaseURL()+place.getParameterLink(), event.getClientX(), event.getClientY());                    
  693.                     }
  694.                 }
  695.             });
  696.             return result;
  697.         } else if (columnName
  698.                 .equals(MonitoredProcessFlowPhasesModelConstants.PROCESS_FLOW_FAVORITE_IDENTIFIER)) {
  699.             String favoriteKey = processFlowMetadata.getId().toString();   
  700.             String identifier = favoriteKey + "|" + model.getProcessFlowPhase();
  701.             TextImage result = createFavorite(identifier);
  702.             Map<String, TextImage> map = this.favoriteRelations.get(processFlowMetadata.getId());
  703.             map.put(identifier, result);
  704.             return result;
  705.         } else if (columnName
  706.                 .equals(MonitoredProcessFlowPhasesModelConstants.AGGREGATED_HEALTH_STATUS_IDENTIFIER)) {
  707.             TextLabel result = new TextLabel(model.getComputationTimestamp() == null?null:model.getComputationTimestamp().getValueFormatted());
  708.             result.setStyleName(getStyleName(model.getAggregatedHealthStatusDesc()));
  709.             return result;         
  710.         } else if (columnName
  711.                 .equals(MonitoredProcessFlowPhasesModelConstants.STARTED_PROCESS_INSTANCES_IDENTIFIER)) {
  712.             return getResultCell(model, model.getStartedProcessInstances(), DBConstants.KPI_PS_001, model.getStartedProcessInstancesDesc());
  713.         } else if (columnName
  714.                 .equals(MonitoredProcessFlowPhasesModelConstants.ACTIVE_PROCESS_INSTANCES_IDENTIFIER)) {
  715.             return getResultCell(model, model.getActiveProcessInstances(), DBConstants.KPI_PS_002, model.getActiveProcessInstancesDesc());
  716.         } else if (columnName
  717.                 .equals(MonitoredProcessFlowPhasesModelConstants.AVERAGE_TIME_OF_FINISHED_PROCESS_INSTANCES_IDENTIFIER)) {
  718.             return getResultCell(model, model.getAvgTimeOfFinishedProcessInstances(), DBConstants.KPI_PS_005, model.getAvgTimeOfFinishedProcessInstancesDesc());
  719.         } else if (columnName
  720.                 .equals(MonitoredProcessFlowPhasesModelConstants.MAX_TIME_OF_FINISHED_PROCESS_INSTANCES_IDENTIFIER)) {
  721.             return getResultCell(model, model.getMaxTimeOfFinishedProcessInstances(), DBConstants.KPI_PS_006, model.getMaxTimeOfFinishedProcessInstancesDesc());
  722.         } else if (columnName
  723.                 .equals(MonitoredProcessFlowPhasesModelConstants.CANCELLED_PROCESS_INSTANCES_IDENTIFIER)) {
  724.             return getResultCell(model, model.getCancelledProcessInstances(), DBConstants.KPI_PS_008, model.getCancelledProcessInstancesDesc());
  725.         } else if (columnName
  726.                 .equals(MonitoredProcessFlowPhasesModelConstants.PROCESS_INSTANCES_EXCEEDED_TARGET_LINK)) {
  727.             return getPIEXC(model);
  728.         } else if (columnName
  729.                 .equals(MonitoredProcessFlowPhasesModelConstants.POLICY_VIOLATIONS_LINK)) {
  730.             return getPV(model);
  731.         }
  732.         return null;
  733.     }
  734.  
  735.     public void onApplyFavorites() {
  736.         fillProcessFlowFavorites();
  737.         this.cacheChilds.clear();
  738.     }
  739.  
  740.     private void fillProcessFlowFavorites() {
  741.         if (Boolean.valueOf(CookiesUtils.getCookie("SHOW_FAVORITES_ONLY"))) {
  742.             this.processFlowsFavorite = CookiesUtils.getProcessFlowsFavorite();
  743.         } else {
  744.             this.processFlowsFavorite = null;
  745.         }
  746.     }
  747.  
  748.     @Override
  749.     public void buttonRefreshClicked() {
  750.         onApplyFavorites();
  751.         super.buttonRefreshClicked();
  752.     }
  753.  
  754.     @Override
  755.     protected TableColumn[][] getColumns() {
  756.         return columns;
  757.     }
  758.  
  759.     @Override
  760.     protected TableColumn[] getColumnsRow() {
  761.         return columns[COLUMN_INDEX];
  762.     }
  763.  
  764.     public int getSortableRow() {
  765.         return COLUMN_INDEX;
  766.     }
  767.  
  768.     @Override
  769.     public void onReportMarked(ExportType exportType, List<String> ids) {
  770.  
  771.     }  
  772.  
  773.     private TextLabel getResultCell(final ProcessFlowKpisDTO model, PairValueDTO<Double> pairValueDTO, final String kpiCode, String kpiDesc) {
  774.         TextLabel result = new TextLabel(pairValueDTO == null?null:pairValueDTO.getValueFormatted());
  775.         //result.setStyleName(getStyleName(kpiDesc));
  776.         if (model != null) {
  777.             result.addStyleName("pointerCursor");
  778.         result.addClickHandler(new ClickHandler() {
  779.            
  780.             @Override
  781.             public void onClick(ClickEvent event) {
  782.                 Place place = new ProcessFlowKPIDetailsPlace(
  783.                         kpiCode, model.getProcessFlowName(),
  784.                           model.getProcessFlowPhase(), model.getPfVersion(), model.getProcessFlowId(),
  785.                           model.getSource());
  786.                 clientFactory.getPlaceController().goTo(place);
  787.             }
  788.         });
  789.         MvpUtils.disableBrowserContextMenu(result);
  790.         result.addMouseDownHandler(new MouseDownHandler() {
  791.            
  792.             @Override
  793.             public void onMouseDown(MouseDownEvent event) {                
  794.                 if (event.getNativeButton() == 2) {
  795.                     AbstractPlace place = new ProcessFlowKPIDetailsPlace(
  796.                             kpiCode, model.getProcessFlowName(),
  797.                               model.getProcessFlowPhase(), model.getPfVersion(), model.getProcessFlowId(),
  798.                               model.getSource());
  799.                     MvpUtils.showLinkContextualMenu(GWT.getHostPageBaseURL()+place.getParameterLink(), event.getClientX(), event.getClientY());
  800.                 }
  801.             }
  802.         });
  803.         }
  804.         return result;
  805.     }
  806.    
  807.     private String getStyleName(String kpiDesc) {
  808.         if (kpiDesc == null) {
  809.             return "gray-result";
  810.         }      
  811.         if (DashboardKpiStatus.isGreenStatus(kpiDesc)) {
  812.             return null;
  813.         } else if (DashboardKpiStatus.isRedStatus(kpiDesc)) {
  814.             return "red-result";
  815.         } else if (DashboardKpiStatus.isYellowStatus(kpiDesc)) {
  816.             return "yellow-result";
  817.         }
  818.         return null;
  819.     }
  820.    
  821.    
  822. }
Add Comment
Please, Sign In to add comment