Search in sources :

Example 6 with ProcessMessage

use of org.talend.designer.runprocess.ProcessMessage in project tdi-studio-se by Talend.

the class DebugProcessTosComposite method debug.

@Override
public void debug() {
    if (manager.getClearBeforeExec()) {
        processContext.clearMessages();
    }
    setHideconsoleLine(false);
    if ((processContext.getProcess()) instanceof org.talend.designer.core.ui.editor.process.Process) {
        ((org.talend.designer.core.ui.editor.process.Process) processContext.getProcess()).checkDifferenceWithRepository();
    }
    // final IPreferenceStore preferenceStore = DebugUIPlugin.getDefault().getPreferenceStore();
    final IPreferenceStore preferenceStore = DebugUITools.getPreferenceStore();
    final boolean oldValueConsoleOnOut = preferenceStore.getBoolean(IDebugPreferenceConstants.CONSOLE_OPEN_ON_OUT);
    final boolean oldValueConsoleOnErr = preferenceStore.getBoolean(IDebugPreferenceConstants.CONSOLE_OPEN_ON_ERR);
    preferenceStore.setValue(IDebugPreferenceConstants.CONSOLE_OPEN_ON_OUT, false);
    preferenceStore.setValue(IDebugPreferenceConstants.CONSOLE_OPEN_ON_ERR, false);
    // java debug to collect when tos
    int num = RunProcessPlugin.getDefault().getPreferenceStore().getInt(RunProcessTokenCollector.TOS_COUNT_DEBUG_RUNS.getPrefKey());
    RunProcessPlugin.getDefault().getPreferenceStore().setValue(RunProcessTokenCollector.TOS_COUNT_DEBUG_RUNS.getPrefKey(), num + 1);
    checkSaveBeforeRunSelection();
    if (contextComposite.promptConfirmLauch()) {
        setRunnable(false);
        final IContext context = contextComposite.getSelectedContext();
        IRunnableWithProgress worker = new IRunnableWithProgress() {

            @Override
            public void run(IProgressMonitor monitor) {
                IProcessor processor = ProcessorUtilities.getProcessor(processContext.getProcess(), processContext.getProcess().getProperty(), context);
                //$NON-NLS-1$
                monitor.beginTask("Launching debugger", IProgressMonitor.UNKNOWN);
                try {
                    // use this function to generate childrens also.
                    ProcessorUtilities.generateCode(processContext.getProcess(), context, false, false, true, monitor);
                    ILaunchConfiguration config = ((Processor) processor).getDebugConfiguration(processContext.getStatisticsPort(), processContext.getTracesPort(), null);
                    // code is correct before launching
                    if (!JobErrorsChecker.hasErrors(DebugProcessTosComposite.this.getShell())) {
                        if (config != null) {
                            // PlatformUI.getWorkbench().
                            // getActiveWorkbenchWindow
                            // ().addPerspectiveListener(new
                            // DebugInNewWindowListener());
                            DebugUITools.launch(config, ILaunchManager.DEBUG_MODE);
                        } else {
                            //$NON-NLS-1$
                            MessageDialog.openInformation(//$NON-NLS-1$
                            getShell(), //$NON-NLS-1$
                            Messages.getString("ProcessDebugDialog.debugBtn"), //$NON-NLS-1$ 
                            Messages.getString("ProcessDebugDialog.errortext"));
                        }
                    }
                } catch (ProcessorException e) {
                    IStatus status = new Status(IStatus.ERROR, RunProcessPlugin.PLUGIN_ID, IStatus.OK, "Debug launch failed.", //$NON-NLS-1$
                    e);
                    RunProcessPlugin.getDefault().getLog().log(status);
                    //$NON-NLS-1$ //$NON-NLS-2$
                    MessageDialog.openError(getShell(), Messages.getString("ProcessDebugDialog.debugBtn"), "");
                } finally {
                    monitor.done();
                }
            }
        };
        IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
        try {
            progressService.runInUI(PlatformUI.getWorkbench().getProgressService(), worker, ResourcesPlugin.getWorkspace().getRoot());
        } catch (InvocationTargetException e) {
            // e.printStackTrace();
            ExceptionHandler.process(e);
        } catch (InterruptedException e) {
            // e.printStackTrace();
            ExceptionHandler.process(e);
        }
    }
    debugMode = true;
    try {
        Thread thread = new Thread() {

            @Override
            public void run() {
                while (debugMode) {
                    final IProcess process = DebugUITools.getCurrentProcess();
                    if (process != null && process.isTerminated()) {
                        Display dis = Display.getCurrent();
                        if (dis == null) {
                            dis = Display.getDefault();
                        }
                        dis.asyncExec(new Runnable() {

                            @Override
                            public void run() {
                                setRunnable(true);
                                if (!killBtn.isDisposed() && killBtn != null) {
                                    killBtn.setEnabled(false);
                                }
                                preferenceStore.setValue(IDebugPreferenceConstants.CONSOLE_OPEN_ON_OUT, oldValueConsoleOnOut);
                                preferenceStore.setValue(IDebugPreferenceConstants.CONSOLE_OPEN_ON_ERR, oldValueConsoleOnErr);
                                if (isAddedStreamListener) {
                                    process.getStreamsProxy().getOutputStreamMonitor().removeListener(streamListener);
                                    isAddedStreamListener = false;
                                    if (processContext.isRunning()) {
                                        //$NON-NLS-1$
                                        final String endingPattern = Messages.getString("ProcessComposite.endPattern");
                                        MessageFormat mf = new MessageFormat(endingPattern);
                                        String byeMsg;
                                        try {
                                            byeMsg = //$NON-NLS-1$
                                            "\n" + mf.format(new Object[] { processContext.getProcess().getName(), new Date(), new Integer(process.getExitValue()) });
                                            processContext.addDebugResultToConsole(new ProcessMessage(MsgType.CORE_OUT, byeMsg));
                                        } catch (DebugException e) {
                                            // e.printStackTrace();
                                            ExceptionHandler.process(e);
                                        }
                                        processContext.setRunning(false);
                                    }
                                }
                                debugMode = false;
                            }
                        });
                    } else {
                        if (process != null) {
                            // (one at leat) process
                            // still running
                            Display dis = Display.getCurrent();
                            if (dis == null) {
                                dis = Display.getDefault();
                            }
                            dis.asyncExec(new Runnable() {

                                @Override
                                public void run() {
                                    setRunnable(false);
                                    if (!killBtn.isDisposed() && killBtn != null) {
                                        killBtn.setEnabled(true);
                                    }
                                    processContext.setRunning(true);
                                    processContext.setDebugProcess(process);
                                    if (!isAddedStreamListener) {
                                        process.getStreamsProxy().getOutputStreamMonitor().addListener(streamListener);
                                        // if (clearBeforeExec.getSelection()) {
                                        // processContext.clearMessages();
                                        // }
                                        // if (watchBtn.getSelection()) {
                                        // processContext.switchTime();
                                        // }
                                        ClearPerformanceAction clearPerfAction = new ClearPerformanceAction();
                                        clearPerfAction.setProcess(processContext.getProcess());
                                        clearPerfAction.run();
                                        ClearTraceAction clearTraceAction = new ClearTraceAction();
                                        clearTraceAction.setProcess(processContext.getProcess());
                                        clearTraceAction.run();
                                        isAddedStreamListener = true;
                                        //$NON-NLS-1$
                                        final String startingPattern = Messages.getString("ProcessComposite.startPattern");
                                        MessageFormat mf = new MessageFormat(startingPattern);
                                        String welcomeMsg = mf.format(new Object[] { processContext.getProcess().getName(), new Date() });
                                        processContext.addDebugResultToConsole(new ProcessMessage(MsgType.CORE_OUT, //$NON-NLS-1$
                                        welcomeMsg + "\r\n"));
                                    }
                                }
                            });
                        } else {
                            // no process running
                            Display dis = Display.getCurrent();
                            if (dis == null) {
                                dis = Display.getDefault();
                            }
                            dis.asyncExec(new Runnable() {

                                @Override
                                public void run() {
                                    setRunnable(true);
                                    if (!killBtn.isDisposed() && killBtn != null) {
                                        killBtn.setEnabled(false);
                                    }
                                }
                            });
                        }
                    }
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        // e.printStackTrace();
                        ExceptionHandler.process(e);
                    }
                }
            }
        };
        thread.start();
    } catch (Exception e) {
        ExceptionHandler.process(e);
        processContext.addErrorMessage(e);
        kill();
    }
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) IContext(org.talend.core.model.process.IContext) IProcessor(org.talend.designer.runprocess.IProcessor) Processor(org.talend.designer.core.runprocess.Processor) ClearTraceAction(org.talend.designer.runprocess.ui.actions.ClearTraceAction) IProcess(org.eclipse.debug.core.model.IProcess) Process(org.talend.designer.core.ui.editor.process.Process) IRunnableWithProgress(org.eclipse.jface.operation.IRunnableWithProgress) IProgressService(org.eclipse.ui.progress.IProgressService) IProcessMessage(org.talend.designer.runprocess.IProcessMessage) ProcessMessage(org.talend.designer.runprocess.ProcessMessage) IProcess(org.eclipse.debug.core.model.IProcess) Status(org.eclipse.core.runtime.Status) IStatus(org.eclipse.core.runtime.IStatus) ILaunchConfiguration(org.eclipse.debug.core.ILaunchConfiguration) ProcessorException(org.talend.designer.runprocess.ProcessorException) MessageFormat(java.text.MessageFormat) IProcessor(org.talend.designer.runprocess.IProcessor) DebugException(org.eclipse.debug.core.DebugException) Point(org.eclipse.swt.graphics.Point) InvocationTargetException(java.lang.reflect.InvocationTargetException) Date(java.util.Date) DebugException(org.eclipse.debug.core.DebugException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ProcessorException(org.talend.designer.runprocess.ProcessorException) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) ClearPerformanceAction(org.talend.designer.runprocess.ui.actions.ClearPerformanceAction) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) Display(org.eclipse.swt.widgets.Display)

Example 7 with ProcessMessage

use of org.talend.designer.runprocess.ProcessMessage in project tdi-studio-se by Talend.

the class DebugProcessTosComposite method getAllErrorMess.

@Override
public void getAllErrorMess(IProcessMessage psMess) {
    if (psMess.getType().equals(MsgType.STD_ERR)) {
        String mess = psMess.getContent();
        //$NON-NLS-1$
        String[] linesMess = mess.split("\n");
        StringBuffer currentMess = new StringBuffer();
        String currenctJobName = processContext.getProcess().getName();
        for (int i = 0; i < linesMess.length; i++) {
            String tRunJobName = currenctJobName;
            String linemess = linesMess[i].trim();
            //$NON-NLS-1$
            Pattern pattern = Pattern.compile("^Exception\\s*in\\s*component\\s*(\\w)+_\\d$");
            Matcher m = pattern.matcher(linemess);
            if (m.find()) {
                List<Node> runjobList = getTRunjobList(processContext.getProcess());
                //$NON-NLS-1$
                String[] allwords = linemess.split("\\s");
                String componentName = allwords[allwords.length - 1];
                if (runjobList.size() > 0) {
                    int currentI = i;
                    if (currentI + 1 < linesMess.length - 1) {
                        // && currentI < linesMess.length - 1);
                        for (int j = currentI + 1; j < linesMess.length - 1; j++) {
                            tRunJobName = linesMess[j];
                            if ((tRunJobName.contains(componentName))) {
                                break;
                            }
                        }
                        if (tRunJobName.lastIndexOf("(") != -1 && tRunJobName.lastIndexOf(".java") != -1) {
                            tRunJobName = tRunJobName.substring(tRunJobName.lastIndexOf("(") + 1, tRunJobName.lastIndexOf(".java"));
                        } else {
                            tRunJobName = currenctJobName;
                        }
                    }
                }
                if (tRunJobName != null && tRunJobName.equals(currenctJobName)) {
                    if (i == 0) {
                        errorMessMap.put(componentName, psMess);
                    } else {
                        for (int j = i; j < linesMess.length; j++) {
                            //$NON-NLS-1$
                            currentMess.append(linesMess[j] + "\n");
                        }
                        IProcessMessage currentProMess = new ProcessMessage(MsgType.STD_ERR, currentMess.toString());
                        errorMessMap.put(componentName, currentProMess);
                    }
                }
            // break;
            }
        }
    }
    refreshNode(psMess);
}
Also used : Pattern(java.util.regex.Pattern) IProcessMessage(org.talend.designer.runprocess.IProcessMessage) Matcher(java.util.regex.Matcher) INode(org.talend.core.model.process.INode) Node(org.talend.designer.core.ui.editor.nodes.Node) IProcessMessage(org.talend.designer.runprocess.IProcessMessage) ProcessMessage(org.talend.designer.runprocess.ProcessMessage) Point(org.eclipse.swt.graphics.Point)

Example 8 with ProcessMessage

use of org.talend.designer.runprocess.ProcessMessage in project tdi-studio-se by Talend.

the class ProcessComposite method doAppendToConsole.

private void doAppendToConsole(Collection<IProcessMessage> messages) {
    if (consoleText == null || consoleText.isDisposed()) {
        return;
    }
    int linesLimit = getConsoleRowLimit();
    int currentLines = consoleText.getLineCount();
    if (linesLimit > 0 && currentLines > linesLimit) {
        return;
    }
    List<StyleRange> styles = new ArrayList<StyleRange>();
    StringBuffer consoleMsgText = new StringBuffer();
    int startLength = consoleText.getText().length();
    for (StyleRange curStyle : consoleText.getStyleRanges()) {
        styles.add(curStyle);
    }
    boolean newStyle = false;
    for (IProcessMessage message : messages) {
        if (message.getType() == MsgType.STD_OUT) {
            //$NON-NLS-1$
            String[] splitLines = message.getContent().split("\n");
            for (String lineContent : splitLines) {
                if (linesLimit > 0 && currentLines > linesLimit) {
                    return;
                }
                currentLines++;
                IProcessMessage lineMsg = new ProcessMessage(getLog4jMsgType(MsgType.STD_OUT, lineContent), lineContent);
                newStyle = newStyle | processMessage(consoleMsgText, lineMsg, startLength, styles);
            }
        } else {
            if (linesLimit > 0 && currentLines > linesLimit) {
                return;
            }
            currentLines++;
            // count as only one line for the error, to avoid the error to be cut from original
            newStyle = newStyle | processMessage(consoleMsgText, message, startLength, styles);
        }
    }
    if (messages.size() > 1) {
        consoleText.setText(consoleText.getText() + consoleMsgText);
    } else {
        consoleText.append(consoleMsgText.toString());
    }
    if (newStyle) {
        consoleText.setStyleRanges(styles.toArray(new StyleRange[0]));
    }
}
Also used : IProcessMessage(org.talend.designer.runprocess.IProcessMessage) StyleRange(org.eclipse.swt.custom.StyleRange) ArrayList(java.util.ArrayList) IProcessMessage(org.talend.designer.runprocess.IProcessMessage) ProcessMessage(org.talend.designer.runprocess.ProcessMessage) Point(org.eclipse.swt.graphics.Point)

Example 9 with ProcessMessage

use of org.talend.designer.runprocess.ProcessMessage in project tdi-studio-se by Talend.

the class ProcessComposite method initGraphicComponents.

/**
     * DOC amaumont Comment method "initGraphicComponents".
     * 
     * @param parent
     */
private void initGraphicComponents(Composite parent) {
    setExpandHorizontal(true);
    setExpandVertical(true);
    this.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
    FormData layouData = new FormData();
    layouData.left = new FormAttachment(0, 0);
    layouData.right = new FormAttachment(100, 0);
    layouData.top = new FormAttachment(0, 0);
    layouData.bottom = new FormAttachment(100, 0);
    setLayoutData(layouData);
    this.setLayout(new FormLayout());
    final Composite panel = new Composite(this, SWT.NONE);
    setContent(panel);
    // panel.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_DARK_RED));
    FormLayout layout2 = new FormLayout();
    layout2.marginWidth = 5 + 2;
    layout2.marginHeight = 4;
    layout2.spacing = 6 + 1;
    panel.setLayout(layout2);
    GridData data;
    GridLayout layout = new GridLayout();
    // panel.setLayout(layout);
    // Splitter
    // sash = new SashForm(this, SWT.HORIZONTAL | SWT.SMOOTH);
    // sash.setLayoutData(new GridData(GridData.FILL_BOTH));
    //
    // layout = new GridLayout();
    // sash.setLayout(layout);
    //
    // // group Button
    // // qli,see the feature 6366.
    //
    // Composite buttonComposite = new Composite(sash, SWT.ERROR);
    // buttonComposite.setLayout(new GridLayout());
    //
    // moveButton = new Button(buttonComposite, SWT.PUSH);
    //        moveButton.setText("<<"); //$NON-NLS-1$
    //        moveButton.setToolTipText(Messages.getString("ProcessComposite.hideContext")); //$NON-NLS-1$
    //
    // final GridData layoutData = new GridData();
    // layoutData.verticalAlignment = GridData.CENTER;
    // layoutData.horizontalAlignment = GridData.CENTER;
    // layoutData.grabExcessHorizontalSpace = true;
    // layoutData.grabExcessVerticalSpace = true;
    // moveButton.setLayoutData(layoutData);
    // Group execution
    Group execGroup = new Group(panel, SWT.NONE);
    //$NON-NLS-1$
    execGroup.setText(Messages.getString("ProcessComposite.execGroup"));
    layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    execGroup.setLayout(layout);
    FormData layouDatag = new FormData();
    layouDatag.left = new FormAttachment(0, 0);
    layouDatag.right = new FormAttachment(100, 0);
    layouDatag.top = new FormAttachment(0, 0);
    layouDatag.bottom = new FormAttachment(100, 0);
    execGroup.setLayoutData(layouDatag);
    // leftTabFolder = new CTabFolder(this, SWT.BORDER);
    // leftTabFolder.setSimple(false);
    // //
    // leftTabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
    // //
    // // // Group context
    // //
    // CTabItem contextTabItem = new CTabItem(leftTabFolder, SWT.BORDER);
    //        contextTabItem.setText(Messages.getString("ProcessComposite.contextTab")); //$NON-NLS-1$
    // // contextComposite = new ProcessContextComposite(this, SWT.NONE);
    // // contextComposite.setBackground(leftTabFolder.getDisplay().getSystemColor(SWT.COLOR_WHITE));
    // // contextTabItem.setControl(contextComposite);
    // //
    // Composite targetExecutionComposite = createTargetExecutionComposite(leftTabFolder);
    // targetExecutionComposite.setBackground(leftTabFolder.getDisplay().getSystemColor(SWT.COLOR_WHITE));
    // //
    // targetExecutionTabItem = new CTabItem(leftTabFolder, SWT.BORDER);
    //        targetExecutionTabItem.setText(Messages.getString("ProcessComposite.targetExecutionTab")); //$NON-NLS-1$
    // targetExecutionTabItem.setToolTipText(Messages.getString("ProcessComposite.targetExecutionTabTooltipAvailable"));
    // targetExecutionTabItem.setControl(targetExecutionComposite);
    // //
    // // // Job Run VM Arguments Tab if language is java.
    // if (LanguageManager.getCurrentLanguage() == ECodeLanguage.JAVA) {
    // jobVMTabItem = new CTabItem(leftTabFolder, SWT.BORDER);
    //            jobVMTabItem.setText(Messages.getString("ProcessComposite.JVMTab")); //$NON-NLS-1$
    // argumentsComposite = new Composite(leftTabFolder, SWT.NONE);
    // argumentsComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
    // GridLayout gridLayoutArguments = new GridLayout(1, false);
    // argumentsComposite.setLayout(gridLayoutArguments);
    // argumentsViewer = new JobVMArgumentsComposite("vmarguments", Messages
    //                    .getString("RunProcessPreferencePage.vmArgument"), //$NON-NLS-1$
    // argumentsComposite);
    // // argumentsViewer.setEnabled(false, argumentsComposite);
    // jobVMTabItem.setControl(argumentsComposite);
    // }
    ScrolledComposite execScroll = new ScrolledComposite(execGroup, SWT.V_SCROLL | SWT.H_SCROLL);
    execScroll.setExpandHorizontal(true);
    execScroll.setExpandVertical(true);
    execScroll.setLayoutData(new GridData(GridData.FILL_BOTH));
    Composite execContent = new Composite(execScroll, SWT.NONE);
    layout = new GridLayout();
    execContent.setLayout(new FormLayout());
    execScroll.setContent(execContent);
    Composite execHeader = new Composite(execContent, SWT.NONE);
    FormLayout formLayout = new FormLayout();
    formLayout.marginWidth = 7;
    formLayout.marginHeight = 4;
    formLayout.spacing = 7;
    execHeader.setLayout(formLayout);
    FormData layoutData = new FormData();
    layoutData.left = new FormAttachment(0, 0);
    layoutData.right = new FormAttachment(100, 0);
    layoutData.top = new FormAttachment(0, 0);
    layoutData.bottom = new FormAttachment(0, 50);
    // new GridData(GridData.FILL_HORIZONTAL)
    execHeader.setLayoutData(layoutData);
    // qli
    // see the feature 6366
    run = new Button(execHeader, SWT.PUSH);
    // itemDropDown = new ToolItem(toolBar, SWT.ARROW);
    //$NON-NLS-1$//$NON-NLS-2$
    run.setText(" " + Messages.getString("ProcessComposite.exec"));
    run.setData(ProcessView.EXEC_ID);
    //$NON-NLS-1$
    run.setToolTipText(Messages.getString("ProcessComposite.execHint"));
    run.setImage(ImageProvider.getImage(ERunprocessImages.RUN_PROCESS_ACTION));
    // final Menu menu = new Menu(execHeader);
    run.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent event) {
            execRun();
        }
    });
    // Run
    // final MenuItem menuItem1 = new MenuItem(menu, SWT.PUSH);
    //        menuItem1.setText(" " + Messages.getString("ProcessComposite.exec"));//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
    // menuItem1.setImage(ImageProvider.getImage(ERunprocessImages.RUN_PROCESS_ACTION));
    // menuItem1.setData(ProcessView.EXEC_ID);
    // menuItem1.addSelectionListener(new SelectionAdapter() {
    //
    // public void widgetSelected(SelectionEvent event) {
    // if (!itemDropDown.getData().equals(ProcessView.PAUSE_ID) &&
    // !itemDropDown.getData().equals(ProcessView.RESUME_ID)) {
    // itemDropDown.setText(menuItem1.getText());
    // itemDropDown.setData(ProcessView.EXEC_ID);
    // itemDropDown.setImage(ImageProvider.getImage(ERunprocessImages.RUN_PROCESS_ACTION));
    //                    itemDropDown.setToolTipText(Messages.getString("ProcessComposite.execHint"));//$NON-NLS-1$
    // toolBar.getParent().layout();
    // }
    // }
    // });
    IBrandingService brandingService = (IBrandingService) GlobalServiceRegister.getDefault().getService(IBrandingService.class);
    // }
    if (processContext == null) {
        run.setEnabled(false);
    }
    // toolBar.setEnabled(false);
    FormData formData = new FormData();
    // see the feature 6366,qli comment.
    // make a judge when the text change in diffrent languages.
    Point debugSize = null;
    Point execSize = null;
    formData.left = new FormAttachment(0);
    // if (brandingService.getBrandingConfiguration().isAllowDebugMode()) {
    // // set debug text to judge size
    // itemDropDown.setText(debugMenuItem.getText());
    // debugSize = computeSize(itemDropDown.getText());
    //
    // // set exec text to judge size
    // itemDropDown.setText(menuItem1.getText());
    // execSize = computeSize(itemDropDown.getText());
    // if (debugSize.x > execSize.x) {
    // formData.right = new FormAttachment(0, debugSize.x + 70);
    // } else {
    // formData.right = new FormAttachment(0, execSize.x + 70);
    // }
    // } else {
    // set exec text to judge size
    execSize = computeSize(run.getText());
    formData.right = new FormAttachment(0, execSize.x + 70);
    formData.height = 30;
    // }
    run.setLayoutData(formData);
    killBtn = new Button(execHeader, SWT.PUSH);
    //$NON-NLS-1$
    killBtn.setText(Messages.getString("ProcessComposite.kill"));
    //$NON-NLS-1$
    killBtn.setToolTipText(Messages.getString("ProcessComposite.killHint"));
    killBtn.setImage(ImageProvider.getImage(ERunprocessImages.KILL_PROCESS_ACTION));
    setButtonLayoutData(killBtn);
    killBtn.setEnabled(false);
    formData = new FormData();
    formData.top = new FormAttachment(run, 0, SWT.TOP);
    formData.left = new FormAttachment(run, 0, SWT.RIGHT);
    // qli modified to fix the bug "7302".
    Point killSize = computeSize(killBtn.getText());
    // if (brandingService.getBrandingConfiguration().isAllowDebugMode()) {
    // if ((killSize.x > debugSize.x) && (killSize.x > execSize.x)) {
    // formData.right = new FormAttachment(toolBar, killSize.x + 70, SWT.RIGHT);
    // } else if (debugSize.x > execSize.x) {
    // formData.right = new FormAttachment(toolBar, debugSize.x + 70, SWT.RIGHT);
    // } else {
    // formData.right = new FormAttachment(toolBar, execSize.x + 70, SWT.RIGHT);
    // }
    // } else {
    // if (killSize.x > execSize.x) {
    // formData.right = new FormAttachment(toolBar, killSize.x + 70, SWT.RIGHT);
    // } else {
    // formData.right = new FormAttachment(toolBar, execSize.x + 70, SWT.RIGHT);
    // }
    // }
    formData.right = new FormAttachment(run, 30 + 70, SWT.RIGHT);
    formData.height = 30;
    killBtn.setLayoutData(formData);
    // saveJobBeforeRunButton = new Button(execHeader, SWT.CHECK);
    //        saveJobBeforeRunButton.setText(Messages.getString("ProcessComposite.saveBeforeRun")); //$NON-NLS-1$
    //        saveJobBeforeRunButton.setToolTipText(Messages.getString("ProcessComposite.saveBeforeRunHint")); //$NON-NLS-1$
    // // saveJobBeforeRunButton.setEnabled(false);
    // saveJobBeforeRunButton.setSelection(RunProcessPlugin.getDefault().getPreferenceStore().getBoolean(
    // RunProcessPrefsConstants.ISSAVEBEFORERUN));
    // data = new GridData();
    // data.horizontalSpan = 2;
    // data.horizontalAlignment = SWT.END;
    // saveJobBeforeRunButton.setLayoutData(data);
    // formData = new FormData();
    // formData.top = new FormAttachment(toolBar, 0, SWT.BOTTOM);
    // formData.left = new FormAttachment(toolBar, 0, SWT.LEFT);
    // saveJobBeforeRunButton.setLayoutData(formData);
    // clearBeforeExec = new Button(execHeader, SWT.CHECK);
    //        clearBeforeExec.setText(Messages.getString("ProcessComposite.clearBefore")); //$NON-NLS-1$
    //        clearBeforeExec.setToolTipText(Messages.getString("ProcessComposite.clearBeforeHint")); //$NON-NLS-1$
    // // clearBeforeExec.setEnabled(false);
    // clearBeforeExec.setSelection(RunProcessPlugin.getDefault().getPreferenceStore().getBoolean(
    // RunProcessPrefsConstants.ISCLEARBEFORERUN));
    // data = new GridData();
    // data.horizontalSpan = 2;
    // data.horizontalAlignment = SWT.END;
    // clearBeforeExec.setLayoutData(data);
    // formData = new FormData();
    // formData.top = new FormAttachment(toolBar, 0, SWT.BOTTOM);
    // formData.left = new FormAttachment(saveJobBeforeRunButton, 0, SWT.RIGHT);
    // clearBeforeExec.setLayoutData(formData);
    //
    // watchBtn = new Button(execHeader, SWT.CHECK);
    //        watchBtn.setText(Messages.getString("ProcessComposite.execTime")); //$NON-NLS-1$
    //        watchBtn.setToolTipText(Messages.getString("ProcessComposite.execTimeHint")); //$NON-NLS-1$
    // watchBtn.setEnabled(false);
    // watchBtn.setSelection(RunProcessPlugin.getDefault().getPreferenceStore().getBoolean(
    // RunProcessPrefsConstants.ISEXECTIMERUN));
    // data = new GridData();
    // data.horizontalSpan = 2;
    // data.horizontalAlignment = SWT.END;
    // watchBtn.setLayoutData(data);
    // formData = new FormData();
    // formData.top = new FormAttachment(killBtn, 0, SWT.BOTTOM);
    // formData.left = new FormAttachment(clearBeforeExec, 0, SWT.RIGHT);
    // watchBtn.setLayoutData(formData);
    //
    // Group statisticsComposite = new Group(execHeader, SWT.NONE);
    //        statisticsComposite.setText(Messages.getString("ProcessComposite2.statsComposite")); //$NON-NLS-1$
    // layout = new GridLayout(3, false);
    // layout.marginWidth = 0;
    // statisticsComposite.setLayout(layout);
    // formData = new FormData();
    // // formData.right = new FormAttachment(100, 0);
    // / formData.left = new FormAttachment(watchBtn, 0, SWT.RIGHT);
    // statisticsComposite.setLayoutData(formData);
    //
    // Composite statisticsButtonComposite = new Composite(statisticsComposite, SWT.NONE);
    // layout = new GridLayout(1, false);
    // layout.marginWidth = 0;
    // statisticsButtonComposite.setLayout(layout);
    // statisticsButtonComposite.setLayoutData(new GridData(GridData.FILL_VERTICAL));
    // perfBtn = new Button(statisticsButtonComposite, SWT.CHECK);
    //        perfBtn.setText(Messages.getString("ProcessComposite.stat")); //$NON-NLS-1$
    //        perfBtn.setToolTipText(Messages.getString("ProcessComposite.statHint")); //$NON-NLS-1$
    // perfBtn.setEnabled(false);
    // perfBtn.setSelection(RunProcessPlugin.getDefault().getPreferenceStore().getBoolean(
    // RunProcessPrefsConstants.ISSTATISTICSRUN));
    // traceBtn = new Button(statisticsButtonComposite, SWT.CHECK);
    //        traceBtn.setText(Messages.getString("ProcessComposite.trace")); //$NON-NLS-1$
    //        traceBtn.setToolTipText(Messages.getString("ProcessComposite.traceHint")); //$NON-NLS-1$
    // traceBtn.setEnabled(false);
    // traceBtn
    // .setSelection(RunProcessPlugin.getDefault().getPreferenceStore().getBoolean(RunProcessPrefsConstants.ISTRACESRUN));
    clearTracePerfBtn = new Button(execHeader, SWT.PUSH);
    //$NON-NLS-1$
    clearTracePerfBtn.setText(Messages.getString("ProcessComposite.clear"));
    //$NON-NLS-1$
    clearTracePerfBtn.setToolTipText(Messages.getString("ProcessComposite.clearHint"));
    clearTracePerfBtn.setImage(ImageProvider.getImage(RunProcessPlugin.imageDescriptorFromPlugin(RunProcessPlugin.PLUGIN_ID, //$NON-NLS-1$
    "icons/process_stat_clear.gif")));
    clearTracePerfBtn.setEnabled(false);
    formData = new FormData();
    formData.top = new FormAttachment(killBtn, 0, SWT.TOP);
    formData.left = new FormAttachment(killBtn, 0, SWT.RIGHT);
    formData.right = new FormAttachment(killBtn, 10 + 70, SWT.RIGHT);
    formData.height = 30;
    clearTracePerfBtn.setLayoutData(formData);
    consoleText = new StyledText(execContent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
    consoleText.setWordWrap(true);
    data = new GridData(GridData.FILL_BOTH);
    data.horizontalSpan = 2;
    data.minimumHeight = MINIMUM_HEIGHT;
    data.minimumWidth = MINIMUM_WIDTH;
    layouData = new FormData();
    layouData.left = new FormAttachment(0, 10);
    layouData.right = new FormAttachment(100, 0);
    layouData.top = new FormAttachment(0, 50);
    layouData.bottom = new FormAttachment(100, -30);
    consoleText.setLayoutData(layouData);
    // feature 6875, add searching capability, nma
    consoleText.addKeyListener(new KeyListener() {

        @Override
        public void keyPressed(KeyEvent evt) {
            // select all
            if ((evt.stateMask == SWT.CTRL) && (evt.keyCode == 'a')) {
                if (consoleText.getText().length() > 0) {
                    consoleText.setSelection(0, (consoleText.getText().length() - 1));
                }
            } else // search special string value
            if ((evt.stateMask == SWT.CTRL) && (evt.keyCode == 'f')) {
                FindDialog td = new FindDialog(Display.getCurrent().getActiveShell());
                td.setConsoleText(consoleText);
                td.setBlockOnOpen(true);
                td.open();
            }
        }

        @Override
        public void keyReleased(KeyEvent arg0) {
        }
    });
    // see feature 0004895: Font size of the output console are very small
    setConsoleFont();
    IPreferenceStore preferenceStore = CorePlugin.getDefault().getPreferenceStore();
    preferenceStore.addPropertyChangeListener(new IPropertyChangeListener() {

        @Override
        public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {
            if (TalendDesignerPrefConstants.CONSOLT_TEXT_FONT.endsWith(event.getProperty())) {
                setConsoleFont();
            }
        }
    });
    // execScroll.setMinSize(execContent.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    // sash.setSashWidth(1);
    // sash.setWeights(new int[] { 7, 1, H_WEIGHT });
    pcl = new PropertyChangeListener() {

        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            runProcessContextChanged(evt);
        }
    };
    streamListener = new IStreamListener() {

        @Override
        public void streamAppended(String text, IStreamMonitor monitor) {
            IProcessMessage message = new ProcessMessage(ProcessMessage.MsgType.STD_OUT, text);
            processContext.addDebugResultToConsole(message);
        }
    };
    addListeners();
    createLineLimitedControl(execContent);
}
Also used : IStreamListener(org.eclipse.debug.core.IStreamListener) Group(org.eclipse.swt.widgets.Group) PropertyChangeListener(java.beans.PropertyChangeListener) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) KeyEvent(org.eclipse.swt.events.KeyEvent) GridLayout(org.eclipse.swt.layout.GridLayout) Button(org.eclipse.swt.widgets.Button) SelectionEvent(org.eclipse.swt.events.SelectionEvent) ScrolledComposite(org.eclipse.swt.custom.ScrolledComposite) IProcessMessage(org.talend.designer.runprocess.IProcessMessage) ProcessMessage(org.talend.designer.runprocess.ProcessMessage) FormAttachment(org.eclipse.swt.layout.FormAttachment) FormData(org.eclipse.swt.layout.FormData) FormLayout(org.eclipse.swt.layout.FormLayout) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) PropertyChangeEvent(java.beans.PropertyChangeEvent) StyledText(org.eclipse.swt.custom.StyledText) Composite(org.eclipse.swt.widgets.Composite) ScrolledComposite(org.eclipse.swt.custom.ScrolledComposite) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) IBrandingService(org.talend.core.ui.branding.IBrandingService) Point(org.eclipse.swt.graphics.Point) IStreamMonitor(org.eclipse.debug.core.model.IStreamMonitor) IProcessMessage(org.talend.designer.runprocess.IProcessMessage) GridData(org.eclipse.swt.layout.GridData) KeyListener(org.eclipse.swt.events.KeyListener) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore)

Example 10 with ProcessMessage

use of org.talend.designer.runprocess.ProcessMessage in project tdi-studio-se by Talend.

the class ProcessComposite method debug.

public void debug() {
    setHideconsoleLine(false);
    if ((processContext.getProcess()) instanceof org.talend.designer.core.ui.editor.process.Process) {
        ((org.talend.designer.core.ui.editor.process.Process) processContext.getProcess()).checkDifferenceWithRepository();
    }
    // final IPreferenceStore preferenceStore = DebugUIPlugin.getDefault().getPreferenceStore();
    final IPreferenceStore preferenceStore = DebugUITools.getPreferenceStore();
    final boolean oldValueConsoleOnOut = preferenceStore.getBoolean(IDebugPreferenceConstants.CONSOLE_OPEN_ON_OUT);
    final boolean oldValueConsoleOnErr = preferenceStore.getBoolean(IDebugPreferenceConstants.CONSOLE_OPEN_ON_ERR);
    preferenceStore.setValue(IDebugPreferenceConstants.CONSOLE_OPEN_ON_OUT, false);
    preferenceStore.setValue(IDebugPreferenceConstants.CONSOLE_OPEN_ON_ERR, false);
    checkSaveBeforeRunSelection();
    if (contextComposite.promptConfirmLauch()) {
        setRunnable(false);
        final IContext context = contextComposite.getSelectedContext();
        IRunnableWithProgress worker = new IRunnableWithProgress() {

            @Override
            public void run(IProgressMonitor monitor) {
                IProcessor processor = ProcessorUtilities.getProcessor(processContext.getProcess(), processContext.getProcess().getProperty(), context);
                //$NON-NLS-1$
                monitor.beginTask("Launching debugger", IProgressMonitor.UNKNOWN);
                try {
                    // use this function to generate childrens also.
                    ProcessorUtilities.generateCode(processContext.getProcess(), context, false, false, true, monitor);
                    ILaunchConfiguration config = ((Processor) processor).getDebugConfiguration(processContext.getStatisticsPort(), processContext.getTracesPort(), null);
                    // code is correct before launching
                    if (!JobErrorsChecker.hasErrors(ProcessComposite.this.getShell())) {
                        if (config != null) {
                            // PlatformUI.getWorkbench().
                            // getActiveWorkbenchWindow
                            // ().addPerspectiveListener(new
                            // DebugInNewWindowListener());
                            DebugUITools.launch(config, ILaunchManager.DEBUG_MODE);
                        } else {
                            //$NON-NLS-1$
                            MessageDialog.openInformation(//$NON-NLS-1$
                            getShell(), //$NON-NLS-1$
                            Messages.getString("ProcessDebugDialog.debugBtn"), //$NON-NLS-1$ 
                            Messages.getString("ProcessDebugDialog.errortext"));
                        }
                    }
                } catch (ProcessorException e) {
                    IStatus status = new Status(IStatus.ERROR, RunProcessPlugin.PLUGIN_ID, IStatus.OK, "Debug launch failed.", //$NON-NLS-1$
                    e);
                    RunProcessPlugin.getDefault().getLog().log(status);
                    //$NON-NLS-1$ //$NON-NLS-2$
                    MessageDialog.openError(getShell(), Messages.getString("ProcessDebugDialog.debugBtn"), "");
                } finally {
                    monitor.done();
                }
            }
        };
        IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
        try {
            progressService.runInUI(PlatformUI.getWorkbench().getProgressService(), worker, ResourcesPlugin.getWorkspace().getRoot());
        } catch (InvocationTargetException e) {
            // e.printStackTrace();
            ExceptionHandler.process(e);
        } catch (InterruptedException e) {
            // e.printStackTrace();
            ExceptionHandler.process(e);
        }
    }
    debugMode = true;
    try {
        Thread thread = new Thread() {

            @Override
            public void run() {
                while (debugMode) {
                    final IProcess process = DebugUITools.getCurrentProcess();
                    if (process != null && process.isTerminated()) {
                        getDisplay().asyncExec(new Runnable() {

                            @Override
                            public void run() {
                                setRunnable(true);
                                killBtn.setEnabled(false);
                                preferenceStore.setValue(IDebugPreferenceConstants.CONSOLE_OPEN_ON_OUT, oldValueConsoleOnOut);
                                preferenceStore.setValue(IDebugPreferenceConstants.CONSOLE_OPEN_ON_ERR, oldValueConsoleOnErr);
                                if (isAddedStreamListener) {
                                    process.getStreamsProxy().getOutputStreamMonitor().removeListener(streamListener);
                                    isAddedStreamListener = false;
                                    if (processContext.isRunning()) {
                                        //$NON-NLS-1$
                                        final String endingPattern = Messages.getString("ProcessComposite.endPattern");
                                        MessageFormat mf = new MessageFormat(endingPattern);
                                        String byeMsg;
                                        try {
                                            byeMsg = //$NON-NLS-1$
                                            "\n" + mf.format(new Object[] { processContext.getProcess().getName(), new Date(), new Integer(process.getExitValue()) });
                                            processContext.addDebugResultToConsole(new ProcessMessage(MsgType.CORE_OUT, byeMsg));
                                        } catch (DebugException e) {
                                            // e.printStackTrace();
                                            ExceptionHandler.process(e);
                                        }
                                        processContext.setRunning(false);
                                    }
                                }
                                debugMode = false;
                            }
                        });
                    } else {
                        if (process != null) {
                            // (one at leat) process
                            // still running
                            getDisplay().asyncExec(new Runnable() {

                                @Override
                                public void run() {
                                    setRunnable(false);
                                    killBtn.setEnabled(true);
                                    processContext.setRunning(true);
                                    processContext.setDebugProcess(process);
                                    if (!isAddedStreamListener) {
                                        process.getStreamsProxy().getOutputStreamMonitor().addListener(streamListener);
                                        // if (clearBeforeExec.getSelection()) {
                                        // processContext.clearMessages();
                                        // }
                                        // if (watchBtn.getSelection()) {
                                        // processContext.switchTime();
                                        // }
                                        ClearPerformanceAction clearPerfAction = new ClearPerformanceAction();
                                        clearPerfAction.setProcess(processContext.getProcess());
                                        clearPerfAction.run();
                                        ClearTraceAction clearTraceAction = new ClearTraceAction();
                                        clearTraceAction.setProcess(processContext.getProcess());
                                        clearTraceAction.run();
                                        isAddedStreamListener = true;
                                        //$NON-NLS-1$
                                        final String startingPattern = Messages.getString("ProcessComposite.startPattern");
                                        MessageFormat mf = new MessageFormat(startingPattern);
                                        String welcomeMsg = mf.format(new Object[] { processContext.getProcess().getName(), new Date() });
                                        processContext.addDebugResultToConsole(new ProcessMessage(MsgType.CORE_OUT, //$NON-NLS-1$
                                        welcomeMsg + "\r\n"));
                                    }
                                }
                            });
                        } else {
                            // no process running
                            getDisplay().asyncExec(new Runnable() {

                                @Override
                                public void run() {
                                    setRunnable(true);
                                    killBtn.setEnabled(false);
                                }
                            });
                        }
                    }
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        // e.printStackTrace();
                        ExceptionHandler.process(e);
                    }
                }
            }
        };
        thread.start();
    } catch (Exception e) {
        ExceptionHandler.process(e);
        processContext.addErrorMessage(e);
        kill();
    }
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) IContext(org.talend.core.model.process.IContext) IProcessor(org.talend.designer.runprocess.IProcessor) Processor(org.talend.designer.core.runprocess.Processor) ClearTraceAction(org.talend.designer.runprocess.ui.actions.ClearTraceAction) IProcess(org.eclipse.debug.core.model.IProcess) Process(org.talend.designer.core.ui.editor.process.Process) IRunnableWithProgress(org.eclipse.jface.operation.IRunnableWithProgress) IProgressService(org.eclipse.ui.progress.IProgressService) IProcessMessage(org.talend.designer.runprocess.IProcessMessage) ProcessMessage(org.talend.designer.runprocess.ProcessMessage) IProcess(org.eclipse.debug.core.model.IProcess) Status(org.eclipse.core.runtime.Status) IStatus(org.eclipse.core.runtime.IStatus) ILaunchConfiguration(org.eclipse.debug.core.ILaunchConfiguration) ProcessorException(org.talend.designer.runprocess.ProcessorException) MessageFormat(java.text.MessageFormat) IProcessor(org.talend.designer.runprocess.IProcessor) DebugException(org.eclipse.debug.core.DebugException) InvocationTargetException(java.lang.reflect.InvocationTargetException) Date(java.util.Date) DebugException(org.eclipse.debug.core.DebugException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ProcessorException(org.talend.designer.runprocess.ProcessorException) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) ClearPerformanceAction(org.talend.designer.runprocess.ui.actions.ClearPerformanceAction) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore)

Aggregations

IProcessMessage (org.talend.designer.runprocess.IProcessMessage)11 ProcessMessage (org.talend.designer.runprocess.ProcessMessage)11 Point (org.eclipse.swt.graphics.Point)8 Matcher (java.util.regex.Matcher)6 Pattern (java.util.regex.Pattern)6 IPreferenceStore (org.eclipse.jface.preference.IPreferenceStore)3 Process (org.talend.designer.core.ui.editor.process.Process)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)2 MessageFormat (java.text.MessageFormat)2 Date (java.util.Date)2 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)2 IStatus (org.eclipse.core.runtime.IStatus)2 Status (org.eclipse.core.runtime.Status)2 DebugException (org.eclipse.debug.core.DebugException)2 ILaunchConfiguration (org.eclipse.debug.core.ILaunchConfiguration)2 IProcess (org.eclipse.debug.core.model.IProcess)2 IRunnableWithProgress (org.eclipse.jface.operation.IRunnableWithProgress)2 IProgressService (org.eclipse.ui.progress.IProgressService)2 IContext (org.talend.core.model.process.IContext)2 Processor (org.talend.designer.core.runprocess.Processor)2