Java tutorial
/******************************************************************************* * Copyright 2017 Capital One Services, LLC and Bitwise, Inc. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package hydrograph.ui.graph.action.debug; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; import org.eclipse.gef.ui.actions.SelectionAction; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import hydrograph.ui.common.datastructures.dataviewer.JobDetails; import hydrograph.ui.common.interfaces.parametergrid.DefaultGEFCanvas; import hydrograph.ui.common.util.Constants; import hydrograph.ui.dataviewer.constants.MessageBoxText; import hydrograph.ui.dataviewer.filter.FilterConditions; import hydrograph.ui.dataviewer.window.DebugDataViewer; import hydrograph.ui.graph.Messages; import hydrograph.ui.graph.controller.ComponentEditPart; import hydrograph.ui.graph.controller.LinkEditPart; import hydrograph.ui.graph.editor.ELTGraphicalEditor; import hydrograph.ui.graph.execution.tracking.datastructure.SubjobDetails; import hydrograph.ui.graph.job.Job; import hydrograph.ui.graph.job.JobManager; import hydrograph.ui.graph.model.Component; import hydrograph.ui.graph.model.Container; import hydrograph.ui.graph.model.Link; import hydrograph.ui.graph.utility.MessageBox; import hydrograph.ui.graph.utility.ViewDataUtils; /** * The Class WatchRecordAction used to view data at watch points after job execution * * @author Bitwise * */ public class ViewDataCurrentJobAction extends SelectionAction { private WatchRecordInner watchRecordInner = new WatchRecordInner(); private static Map<String, DebugDataViewer> dataViewerMap; private Map<String, FilterConditions> watcherAndConditon = new LinkedHashMap<String, FilterConditions>(); public ViewDataCurrentJobAction(IWorkbenchPart part) { super(part); setLazyEnablementCalculation(true); } @Override protected void init() { super.init(); setText(Messages.VIEW_DATA_CURRENT_RUN_TEXT); setId(Constants.CURRENT_VIEW_DATA_ID); setEnabled(true); dataViewerMap = new HashMap<>(); JobManager.INSTANCE.setDataViewerMap(dataViewerMap); } @Override protected boolean calculateEnabled() { Map<String, SubjobDetails> componentNameAndLink = new HashMap(); int count = 0; boolean isWatcher = false; List<Object> selectedObject = getSelectedObjects(); for (Object obj : selectedObject) { if (obj instanceof LinkEditPart) { Link link = (Link) ((LinkEditPart) obj).getModel(); String componentId = link.getSource().getComponentId(); Component component = link.getSource(); if (StringUtils.equalsIgnoreCase(component.getComponentName(), Constants.SUBJOB_COMPONENT)) { String componenet_Id = ""; String socket_Id = ""; ViewDataUtils.getInstance().subjobParams(componentNameAndLink, component, new StringBuilder(), link.getSourceTerminal()); for (Entry<String, SubjobDetails> entry : componentNameAndLink.entrySet()) { String comp_soc = entry.getKey(); String[] split = StringUtils.split(comp_soc, "/."); componenet_Id = split[0]; for (int i = 1; i < split.length - 1; i++) { componenet_Id = componenet_Id + "." + split[i]; } socket_Id = split[split.length - 1]; } watchRecordInner.setComponentId(componenet_Id); watchRecordInner.setSocketId(socket_Id); } else { watchRecordInner.setComponentId(componentId); String socketId = link.getSourceTerminal(); watchRecordInner.setSocketId(socketId); } ViewDataUtils dataUtils = ViewDataUtils.getInstance(); isWatcher = dataUtils.checkWatcher(link.getSource(), link.getSourceTerminal()); } } if (!selectedObject.isEmpty() && isWatcher) { for (Object obj : selectedObject) { if (obj instanceof LinkEditPart) { count++; } } } if (count == 1) { return true; } else { return false; } } /** * Gets the component canvas. * * @return the component canvas */ private DefaultGEFCanvas getComponentCanvas() { if (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getActiveEditor() instanceof DefaultGEFCanvas) return (DefaultGEFCanvas) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getActiveEditor(); else return null; } @Override public void run() { // Check if job is executed in debug mode Job job = JobManager.INSTANCE.getPreviouslyExecutedJobs() .get(getComponentCanvas().getActiveProject() + "." + getComponentCanvas().getJobName()); if (job == null) { String jobName = StringUtils.split(getComponentCanvas().getJobName(), ".")[0]; Job mainJob = JobManager.INSTANCE.getPreviouslyExecutedJobs() .get(getComponentCanvas().getActiveProject() + "." + jobName); if (mainJob != null && mainJob.isDebugMode() && mainJob.isExecutionTrack() == true) { String previousComponentId = getPreviousComponentId(); String componentId = ViewDataUtils.getInstance().getComponentId(); JobDetails jobDetails = getJobDetails(mainJob); componentId = getComponentId(previousComponentId, componentId, jobDetails); jobDetails.setComponentID(componentId); String dataViewerWindowName = mainJob.getLocalJobID().replace(".", "_") + "_" + watchRecordInner.getComponentId() + "_" + watchRecordInner.getSocketId(); if (dataViewerMap.keySet().contains(dataViewerWindowName)) { Point originalWindowSize = dataViewerMap.get(dataViewerWindowName).getShell().getSize(); setShellProperties(dataViewerWindowName, originalWindowSize); return; } final String dataViewerWindowTitle = dataViewerWindowName; DebugDataViewer window = new DebugDataViewer(jobDetails, dataViewerWindowTitle); String watcherId = getWatcherId(dataViewerWindowTitle, window); window.open(); setWatcherAndConditionMap(window, watcherId); } else { showErrorMessage(mainJob); return; } } else if (!job.isDebugMode()) { showErrorMessage(job); } else { // Create data viewer window name, if window exist reopen same // window String dataViewerWindowName = job.getLocalJobID().replace(".", "_") + "_" + watchRecordInner.getComponentId() + "_" + watchRecordInner.getSocketId(); if (dataViewerMap.keySet().contains(dataViewerWindowName)) { Point originalWindowSize = dataViewerMap.get(dataViewerWindowName).getShell().getSize(); setShellProperties(dataViewerWindowName, originalWindowSize); return; } final JobDetails jobDetails = getJobDetails(job); final String dataViewerWindowTitle = dataViewerWindowName; DebugDataViewer window = new DebugDataViewer(jobDetails, dataViewerWindowTitle); String watcherId = getWatcherId(dataViewerWindowTitle, window); window.open(); setWatcherAndConditionMap(window, watcherId); } } private void setWatcherAndConditionMap(DebugDataViewer window, String watcherId) { if (window.getConditions() != null) { if (!window.getConditions().getRetainLocal()) { ViewDataUtils.getInstance().clearLocalFilterConditions(window); } if (!window.getConditions().getRetainRemote()) { ViewDataUtils.getInstance().clearRemoteFilterConditions(window); } watcherAndConditon.put(watcherId, window.getConditions()); } } private void showErrorMessage(Job mainJob) { if (mainJob == null) { MessageBox.INSTANCE.showMessage(MessageBoxText.INFO, Messages.RUN_JOB_IN_DEBUG_OR_OPEN_SUBJOB_THROUGH_TRACKSUBJOB); } else { if (!mainJob.isDebugMode()) { MessageBox.INSTANCE.showMessage(MessageBoxText.INFO, Messages.RUN_THE_JOB_IN_DEBUG_MODE); } else { if (!mainJob.isExecutionTrack()) { MessageBox.INSTANCE.showMessage(MessageBoxText.INFO, Messages.OPEN_SUBJOB_THROUGH_TRACK_SUBJOB); } } } } private void setShellProperties(String dataViewerWindowName, Point originalWindowSize) { dataViewerMap.get(dataViewerWindowName).getShell().setActive(); dataViewerMap.get(dataViewerWindowName).getShell().setMaximized(true); dataViewerMap.get(dataViewerWindowName).getShell() .setSize(new Point(originalWindowSize.x, originalWindowSize.y)); } private String getPreviousComponentId() { Container mainContainer = ((ELTGraphicalEditor) getComponentCanvas()).getContainer(); ComponentEditPart componentEditPart = (ComponentEditPart) mainContainer.getSubjobComponentEditPart(); LinkEditPart linkEditPart = (LinkEditPart) componentEditPart.getTargetConnections().get(0); Link link = (Link) linkEditPart.getModel(); String previousComponentId = link.getSource().getComponentId(); return previousComponentId; } private String getComponentId(String previousComponentId, String componentId, JobDetails jobDetails) { if (jobDetails.getComponentID().equalsIgnoreCase(Constants.INPUT_SUBJOB)) { componentId = componentId.substring(componentId.indexOf(".") + 1) + previousComponentId; } else { componentId = componentId + jobDetails.getComponentID(); } return componentId; } private String getWatcherId(final String dataViewerWindowTitle, DebugDataViewer window) { String watcherId = watchRecordInner.getComponentId() + watchRecordInner.getComponentId(); dataViewerMap.put(dataViewerWindowTitle, window); window.setBlockOnOpen(true); window.setDataViewerMap(dataViewerMap); if (watcherAndConditon.containsKey(watcherId)) { window.setConditions(watcherAndConditon.get(watcherId)); if (watcherAndConditon.get(watcherId).isOverWritten()) { window.setOverWritten(watcherAndConditon.get(watcherId).isOverWritten()); } } return watcherId; } private JobDetails getJobDetails(Job job) { final JobDetails jobDetails = new JobDetails(job.getHost(), job.getPortNumber(), job.getUserId(), job.getPassword(), job.getBasePath(), job.getUniqueJobId(), watchRecordInner.getComponentId(), watchRecordInner.getSocketId(), job.isRemoteMode(), job.getJobStatus()); return jobDetails; } }