Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 417829 | Differences between
and this patch

Collapse All | Expand All

(-)a/org.eclipse.jubula.app/src/org/eclipse/jubula/app/core/JubulaWorkbenchAdvisor.java (-3 / +5 lines)
Lines 28-34 import org.eclipse.jubula.app.i18n.Messages; Link Here
28
import org.eclipse.jubula.client.core.businessprocess.progress.OperationCanceledUtil;
28
import org.eclipse.jubula.client.core.businessprocess.progress.OperationCanceledUtil;
29
import org.eclipse.jubula.client.ui.constants.Constants;
29
import org.eclipse.jubula.client.ui.constants.Constants;
30
import org.eclipse.jubula.client.ui.rcp.Plugin;
30
import org.eclipse.jubula.client.ui.rcp.Plugin;
31
import org.eclipse.jubula.client.ui.rcp.Plugin.ClientStatus;
31
import org.eclipse.jubula.client.ui.rcp.events.GuiEventDispatcher;
32
import org.eclipse.jubula.client.ui.rcp.events.GuiEventDispatcher.ClientStatus;
32
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
33
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
33
import org.eclipse.jubula.tools.constants.StringConstants;
34
import org.eclipse.jubula.tools.constants.StringConstants;
34
import org.eclipse.jubula.tools.exception.JBFatalException;
35
import org.eclipse.jubula.tools.exception.JBFatalException;
Lines 371-378 public class JubulaWorkbenchAdvisor extends WorkbenchAdvisor { Link Here
371
     * {@inheritDoc}
372
     * {@inheritDoc}
372
     */
373
     */
373
    public boolean preShutdown() {
374
    public boolean preShutdown() {
374
        try {
375
        try {
375
            Plugin.getDefault().setClientStatus(ClientStatus.STOPPING);
376
            GuiEventDispatcher.getInstance().fireClientStatusChanged(
377
                    ClientStatus.STOPPING);
376
            // Close all open editors
378
            // Close all open editors
377
            IWorkbenchWindow[] allWW = PlatformUI.getWorkbench()
379
            IWorkbenchWindow[] allWW = PlatformUI.getWorkbench()
378
                .getWorkbenchWindows();
380
                .getWorkbenchWindows();
(-)a/org.eclipse.jubula.client.alm.mylyn.ui.bridge/src/org/eclipse/jubula/client/alm/mylyn/ui/bridge/monitor/EditorInteractionMonitor.java (-3 / +11 lines)
Lines 16-28 import org.eclipse.jubula.client.alm.mylyn.ui.bridge.constants.ContentType; Link Here
16
import org.eclipse.jubula.client.core.model.IAUTMainPO;
16
import org.eclipse.jubula.client.core.model.IAUTMainPO;
17
import org.eclipse.jubula.client.core.model.INodePO;
17
import org.eclipse.jubula.client.core.model.INodePO;
18
import org.eclipse.jubula.client.core.model.IPersistentObject;
18
import org.eclipse.jubula.client.core.model.IPersistentObject;
19
import org.eclipse.jubula.client.ui.rcp.Plugin;
20
import org.eclipse.jubula.client.ui.rcp.Plugin.ClientStatus;
21
import org.eclipse.jubula.client.ui.rcp.editors.AbstractJBEditor;
19
import org.eclipse.jubula.client.ui.rcp.editors.AbstractJBEditor;
22
import org.eclipse.jubula.client.ui.rcp.editors.CentralTestDataEditor;
20
import org.eclipse.jubula.client.ui.rcp.editors.CentralTestDataEditor;
23
import org.eclipse.jubula.client.ui.rcp.editors.IJBEditor;
21
import org.eclipse.jubula.client.ui.rcp.editors.IJBEditor;
24
import org.eclipse.jubula.client.ui.rcp.editors.ObjectMappingMultiPageEditor;
22
import org.eclipse.jubula.client.ui.rcp.editors.ObjectMappingMultiPageEditor;
25
import org.eclipse.jubula.client.ui.rcp.editors.PersistableEditorInput;
23
import org.eclipse.jubula.client.ui.rcp.editors.PersistableEditorInput;
24
import org.eclipse.jubula.client.ui.rcp.events.GuiEventDispatcher.ClientStatus;
26
import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
25
import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
27
import org.eclipse.mylyn.context.core.ContextCore;
26
import org.eclipse.mylyn.context.core.ContextCore;
28
import org.eclipse.mylyn.context.core.IInteractionContext;
27
import org.eclipse.mylyn.context.core.IInteractionContext;
Lines 46-51 public class EditorInteractionMonitor extends AbstractEditorTracker { Link Here
46
     * <code>CDTE_HANDLE</code>
45
     * <code>CDTE_HANDLE</code>
47
     */
46
     */
48
    private static final String CDTE_HANDLE = "00000000000000000000000000000005"; //$NON-NLS-1$
47
    private static final String CDTE_HANDLE = "00000000000000000000000000000005"; //$NON-NLS-1$
48
    /**
49
     * the status
50
     */
51
    private ClientStatus m_status;
49
52
50
    /** {@inheritDoc} */
53
    /** {@inheritDoc} */
51
    protected void editorBroughtToTop(IEditorPart part) {
54
    protected void editorBroughtToTop(IEditorPart part) {
Lines 54-60 public class EditorInteractionMonitor extends AbstractEditorTracker { Link Here
54
57
55
    /** {@inheritDoc} */
58
    /** {@inheritDoc} */
56
    protected void editorClosed(IEditorPart part) {
59
    protected void editorClosed(IEditorPart part) {
57
        if (Plugin.getDefault().getClientStatus() == ClientStatus.STOPPING
60
        if (m_status == ClientStatus.STOPPING
58
                || TasksUi.getTaskActivityManager().getActiveTask() == null) {
61
                || TasksUi.getTaskActivityManager().getActiveTask() == null) {
59
            return;
62
            return;
60
        }
63
        }
Lines 155-158 public class EditorInteractionMonitor extends AbstractEditorTracker { Link Here
155
        return new InteractionEvent(InteractionEvent.Kind.SELECTION,
158
        return new InteractionEvent(InteractionEvent.Kind.SELECTION,
156
                ContentType.OM_EDITOR, id, id);
159
                ContentType.OM_EDITOR, id, id);
157
    }
160
    }
161
162
    /** {@inheritDoc} */
163
    public void handleClientStateChanged(ClientStatus status) {
164
        m_status = status;
165
    }
158
}
166
}
(-)a/org.eclipse.jubula.client.ui.rcp/plugin.xml (-32 / +75 lines)
Lines 2839-2861 Link Here
2839
          class="org.eclipse.jubula.client.ui.rcp.handlers.GoToNextTestResultErrorHandler"
2839
          class="org.eclipse.jubula.client.ui.rcp.handlers.GoToNextTestResultErrorHandler"
2840
          commandId="org.eclipse.jubula.client.ui.commands.GoToNextError">
2840
          commandId="org.eclipse.jubula.client.ui.commands.GoToNextError">
2841
       <activeWhen>
2841
       <activeWhen>
2842
          <with
2842
          <or>
2843
                variable="activePartId">
2843
            <with
2844
             <equals
2844
                    variable="activePartId">
2845
                   value="org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView">
2845
                 <equals
2846
             </equals>
2846
                       value="org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView">
2847
          </with></activeWhen>
2847
                 </equals>
2848
             </with>
2849
             <reference
2850
                 definitionId="org.eclipse.jubula.client.ui.reference.distinct.activeWhen.TRTreeViewIsNotHidden">
2851
             </reference>
2852
          </or>
2853
       </activeWhen>
2848
    </handler>
2854
    </handler>
2849
    <handler
2855
    <handler
2850
          class="org.eclipse.jubula.client.ui.rcp.handlers.GoToPreviousTestResultErrorHandler"
2856
          class="org.eclipse.jubula.client.ui.rcp.handlers.GoToPreviousTestResultErrorHandler"
2851
          commandId="org.eclipse.jubula.client.ui.commands.GoToPreviousError">
2857
          commandId="org.eclipse.jubula.client.ui.commands.GoToPreviousError">
2852
       <activeWhen>
2858
       <activeWhen>
2853
          <with
2859
          <or>
2854
                variable="activePartId">
2860
              <with
2855
             <equals
2861
                    variable="activePartId">
2856
                   value="org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView">
2862
                 <equals
2857
             </equals>
2863
                       value="org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView">
2858
          </with></activeWhen>
2864
                 </equals>
2865
              </with>
2866
              <reference
2867
                 definitionId="org.eclipse.jubula.client.ui.reference.distinct.activeWhen.TRTreeViewIsNotHidden">
2868
             </reference>
2869
          </or>
2870
        </activeWhen>
2859
    </handler>
2871
    </handler>
2860
  </extension>
2872
  </extension>
2861
  <extension point="org.eclipse.ui.commandImages">
2873
  <extension point="org.eclipse.ui.commandImages">
Lines 3919-3924 Link Here
3919
        priorityLevel="workbench" />
3931
        priorityLevel="workbench" />
3920
    </sourceProvider>
3932
    </sourceProvider>
3921
    <sourceProvider
3933
    <sourceProvider
3934
      provider="org.eclipse.jubula.client.ui.rcp.sourceprovider.TestResultSourceProvider">
3935
      <variable
3936
        name="org.eclipse.jubula.client.ui.rcp.variable.isPartToViewTestResultOpen"
3937
        priorityLevel="workbench" />
3938
      <variable
3939
        name="org.eclipse.jubula.client.ui.rcp.variable.isTRTreeViewHidden"
3940
        priorityLevel="workbench" />
3941
        <!-- currently it is impossible easy to check if the part (view/editor) 
3942
        was hidden by other editor, because no list of stacked editors exist (only of staked views);
3943
        state of TestResultViewer is regarded as "may be hidden" when (this behaviour is defined
3944
        in methods of PartListenerToTrackTRParts and other methods of TestResultPartsTracker):
3945
            - editor other then TestResultViewer was activated ;
3946
            - on Perspective change;
3947
            - when TestResultViewer was closed;
3948
        -->
3949
      <variable
3950
        name="org.eclipse.jubula.client.ui.variable.mayTestResultViewerBeHidden"
3951
        priorityLevel="workbench" />
3952
    </sourceProvider>
3953
    <sourceProvider
3922
      provider="org.eclipse.jubula.client.ui.rcp.sourceprovider.TestExecutionSourceProvider">
3954
      provider="org.eclipse.jubula.client.ui.rcp.sourceprovider.TestExecutionSourceProvider">
3923
      <variable
3955
      <variable
3924
        name="org.eclipse.jubula.client.ui.rcp.variable.isTestRunning"
3956
        name="org.eclipse.jubula.client.ui.rcp.variable.isTestRunning"
Lines 4063-4099 Link Here
4063
           id="org.eclipse.jubula.client.ui.reference.distinct.visibleWhen.TestResultToolbar">
4095
           id="org.eclipse.jubula.client.ui.reference.distinct.visibleWhen.TestResultToolbar">
4064
        <or>
4096
        <or>
4065
           <with
4097
           <with
4066
                 variable="activeEditorId">
4098
                 variable="org.eclipse.jubula.client.ui.rcp.variable.isPartToViewTestResultOpen">
4067
              <equals
4099
              <equals
4068
                    value="org.eclipse.jubula.client.ui.editors.TestResultViewer">
4100
                    value="true">
4069
              </equals>
4070
           </with>
4071
           <with
4072
                 variable="activePartId">
4073
              <equals
4074
                    value="org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView">
4075
              </equals>
4101
              </equals>
4076
           </with>
4102
           </with>
4077
        </or>
4103
        </or>
4078
     </definition>
4104
     </definition>
4079
     <definition
4105
     <definition
4080
           id="org.eclipse.jubula.client.ui.reference.distinct.activeWhen.GoToTestResultError">
4106
           id="org.eclipse.jubula.client.ui.reference.distinct.activeWhen.GoToTestResultError">
4081
        <and>
4107
               <and>
4108
                   <with
4109
                         variable="activeEditorId">
4110
                      <equals
4111
                            value="org.eclipse.jubula.client.ui.editors.TestResultViewer">
4112
                      </equals>
4113
                   </with>
4114
                   <not>
4115
                      <with
4116
                            variable="activePartId">
4117
                         <equals
4118
                               value="org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView">
4119
                         </equals>
4120
                      </with>
4121
                   </not>
4122
                   <not>
4123
                      <with
4124
                            variable="org.eclipse.jubula.client.ui.variable.mayTestResultViewerBeHidden">
4125
                         <equals
4126
                               value="true">
4127
                         </equals>
4128
                      </with>
4129
                   </not>
4130
                </and>
4131
     </definition>
4132
     <definition
4133
           id="org.eclipse.jubula.client.ui.reference.distinct.activeWhen.TRTreeViewIsNotHidden">
4082
           <with
4134
           <with
4083
                 variable="activeEditorId">
4135
                 variable="org.eclipse.jubula.client.ui.rcp.variable.isTRTreeViewHidden">
4084
              <equals
4136
              <equals
4085
                    value="org.eclipse.jubula.client.ui.editors.TestResultViewer">
4137
                 value="false">
4086
              </equals>
4138
              </equals>
4087
           </with>
4139
           </with>
4088
           <not>
4089
              <with
4090
                    variable="activePartId">
4091
                 <equals
4092
                       value="org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView">
4093
                 </equals>
4094
              </with>
4095
           </not>
4096
        </and>
4097
     </definition>
4140
     </definition>
4098
  </extension>
4141
  </extension>
4099
</plugin>
4142
</plugin>
(-)a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/Plugin.java (-36 / +55 lines)
Lines 15-26 import java.util.ArrayList; Link Here
15
import java.util.HashMap;
15
import java.util.HashMap;
16
import java.util.List;
16
import java.util.List;
17
import java.util.Map;
17
import java.util.Map;
18
import java.util.concurrent.atomic.AtomicReference;
18
19
19
import javax.persistence.PersistenceException;
20
import javax.persistence.PersistenceException;
20
21
21
import org.apache.commons.lang.Validate;
22
import org.apache.commons.lang.Validate;
23
import org.eclipse.core.runtime.IProgressMonitor;
24
import org.eclipse.core.runtime.IStatus;
22
import org.eclipse.core.runtime.NullProgressMonitor;
25
import org.eclipse.core.runtime.NullProgressMonitor;
23
import org.eclipse.core.runtime.Platform;
26
import org.eclipse.core.runtime.Platform;
27
import org.eclipse.core.runtime.Status;
28
import org.eclipse.core.runtime.jobs.Job;
24
import org.eclipse.core.runtime.preferences.InstanceScope;
29
import org.eclipse.core.runtime.preferences.InstanceScope;
25
import org.eclipse.jface.action.IStatusLineManager;
30
import org.eclipse.jface.action.IStatusLineManager;
26
import org.eclipse.jface.action.StatusLineManager;
31
import org.eclipse.jface.action.StatusLineManager;
Lines 48-63 import org.eclipse.jubula.client.ui.rcp.businessprocess.ProblemsBP; Link Here
48
import org.eclipse.jubula.client.ui.rcp.businessprocess.ToolkitBP;
53
import org.eclipse.jubula.client.ui.rcp.businessprocess.ToolkitBP;
49
import org.eclipse.jubula.client.ui.rcp.businessprocess.WorkingLanguageBP;
54
import org.eclipse.jubula.client.ui.rcp.businessprocess.WorkingLanguageBP;
50
import org.eclipse.jubula.client.ui.rcp.controllers.TestExecutionContributor;
55
import org.eclipse.jubula.client.ui.rcp.controllers.TestExecutionContributor;
56
import org.eclipse.jubula.client.ui.rcp.controllers.TestResultPartsTracker;
51
import org.eclipse.jubula.client.ui.rcp.editors.AbstractJBEditor;
57
import org.eclipse.jubula.client.ui.rcp.editors.AbstractJBEditor;
52
import org.eclipse.jubula.client.ui.rcp.editors.AbstractTestCaseEditor;
58
import org.eclipse.jubula.client.ui.rcp.editors.AbstractTestCaseEditor;
53
import org.eclipse.jubula.client.ui.rcp.editors.IJBEditor;
59
import org.eclipse.jubula.client.ui.rcp.editors.IJBEditor;
54
import org.eclipse.jubula.client.ui.rcp.editors.TestJobEditor;
60
import org.eclipse.jubula.client.ui.rcp.editors.TestJobEditor;
61
import org.eclipse.jubula.client.ui.rcp.events.GuiEventDispatcher;
62
import org.eclipse.jubula.client.ui.rcp.events.GuiEventDispatcher.ClientStatus;
55
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
63
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
56
import org.eclipse.jubula.client.ui.rcp.provider.contentprovider.DirtyStarListContentProvider;
64
import org.eclipse.jubula.client.ui.rcp.provider.contentprovider.DirtyStarListContentProvider;
57
import org.eclipse.jubula.client.ui.rcp.provider.labelprovider.DirtyStarListLabelProvider;
65
import org.eclipse.jubula.client.ui.rcp.provider.labelprovider.DirtyStarListLabelProvider;
58
import org.eclipse.jubula.client.ui.rcp.search.query.AbstractQuery;
66
import org.eclipse.jubula.client.ui.rcp.search.query.AbstractQuery;
59
import org.eclipse.jubula.client.ui.rcp.widgets.StatusLineContributionItem;
67
import org.eclipse.jubula.client.ui.rcp.widgets.StatusLineContributionItem;
60
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
68
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
69
import org.eclipse.jubula.client.ui.utils.JobUtils;
61
import org.eclipse.jubula.client.ui.views.IJBPart;
70
import org.eclipse.jubula.client.ui.views.IJBPart;
62
import org.eclipse.jubula.tools.constants.StringConstants;
71
import org.eclipse.jubula.tools.constants.StringConstants;
63
import org.eclipse.jubula.tools.exception.JBException;
72
import org.eclipse.jubula.tools.exception.JBException;
Lines 65-70 import org.eclipse.jubula.tools.exception.JBFatalException; Link Here
65
import org.eclipse.jubula.tools.exception.JBRuntimeException;
74
import org.eclipse.jubula.tools.exception.JBRuntimeException;
66
import org.eclipse.jubula.tools.i18n.CompSystemI18n;
75
import org.eclipse.jubula.tools.i18n.CompSystemI18n;
67
import org.eclipse.jubula.tools.messagehandling.MessageIDs;
76
import org.eclipse.jubula.tools.messagehandling.MessageIDs;
77
import org.eclipse.jubula.tools.utils.TimeUtil;
68
import org.eclipse.osgi.util.NLS;
78
import org.eclipse.osgi.util.NLS;
69
import org.eclipse.search.ui.IQueryListener;
79
import org.eclipse.search.ui.IQueryListener;
70
import org.eclipse.search.ui.ISearchQuery;
80
import org.eclipse.search.ui.ISearchQuery;
Lines 141-148 public class Plugin extends AbstractUIPlugin implements IProgressConsole { Link Here
141
    private static final String AUT_TOOLKIT_STATUSLINE_ITEM = "autToolKitInfo"; //$NON-NLS-1$
151
    private static final String AUT_TOOLKIT_STATUSLINE_ITEM = "autToolKitInfo"; //$NON-NLS-1$
142
    /** <code>LANG_STATUSLINE_ITEM</code> */
152
    /** <code>LANG_STATUSLINE_ITEM</code> */
143
    private static final String LANG_STATUSLINE_ITEM = "lang"; //$NON-NLS-1$
153
    private static final String LANG_STATUSLINE_ITEM = "lang"; //$NON-NLS-1$
144
    /** the client status */
145
    private ClientStatus m_status = ClientStatus.STARTING;
146
    /** the preference store for this bundle */
154
    /** the preference store for this bundle */
147
    private ScopedPreferenceStore m_preferenceStore = null;
155
    private ScopedPreferenceStore m_preferenceStore = null;
148
    /** the console */
156
    /** the console */
Lines 171-213 public class Plugin extends AbstractUIPlugin implements IProgressConsole { Link Here
171
    }
179
    }
172
    
180
    
173
    /**
181
    /**
174
     * The Client Status
175
     */
176
    public enum ClientStatus {
177
        /**
178
         * Jubula is launched completely
179
         */
180
        RUNNING,
181
        /**
182
         * Jubula is starting up
183
         */
184
        STARTING,
185
        /**
186
         * Jubula is shutting down
187
         */
188
        STOPPING
189
    }
190
    
191
    /**
192
     * 
193
     * @param statust - the new ClientStatus (RUNNING,STOPPING,STARTING)
194
     */
195
    public void setClientStatus(ClientStatus statust) {
196
        m_status = statust;
197
    }
198
    
199
    /**
200
     * 
201
     * @return the actual ClientStatus (RUNNING,STARTING,STOPPING)
202
     */
203
    public ClientStatus getClientStatus() {
204
        return m_status;
205
    }
206
    
207
    /**
208
     * {@inheritDoc}
182
     * {@inheritDoc}
209
     */
183
     */
210
    public void stop(BundleContext context) throws Exception {
184
    public void stop(BundleContext context) throws Exception {
185
        GuiEventDispatcher.getInstance().
186
            removeClientStatusListener(TestResultPartsTracker.getInstance());
211
        super.stop(context);
187
        super.stop(context);
212
    }
188
    }
213
189
Lines 1056-1061 public class Plugin extends AbstractUIPlugin implements IProgressConsole { Link Here
1056
     * - ComponentNamesListBP
1032
     * - ComponentNamesListBP
1057
     */
1033
     */
1058
    private void registerPermanentServices() {
1034
    private void registerPermanentServices() {
1035
        registerWorkbenchStartupListenerJob();
1036
1059
        // register problem view listeners
1037
        // register problem view listeners
1060
        ProblemsBP.getInstance();
1038
        ProblemsBP.getInstance();
1061
1039
Lines 1086-1091 public class Plugin extends AbstractUIPlugin implements IProgressConsole { Link Here
1086
        
1064
        
1087
        // register service for toolkit
1065
        // register service for toolkit
1088
        ToolkitBP.getInstance();
1066
        ToolkitBP.getInstance();
1067
        
1068
        // setup view tracker
1069
        TestResultPartsTracker.getInstance();
1070
    }
1071
1072
    /**
1073
     * setup the test result viewer tracker
1074
     */
1075
    private void registerWorkbenchStartupListenerJob() {
1076
        JobUtils.executeJob(new Job(Messages.RegisterWorkbenchStartupListener) {
1077
            @Override
1078
            protected IStatus run(IProgressMonitor monitor) {
1079
                monitor.beginTask(Messages.WorkbenchStartupListenerIsRegistring,
1080
                        IProgressMonitor.UNKNOWN);
1081
                final AtomicReference<Object> ref = 
1082
                        new AtomicReference<Object>();
1083
                ref.set(null);
1084
                Display defaultDisplay = Display.getDefault();
1085
                while (ref.get() == null) {
1086
                    if (monitor.isCanceled()) {
1087
                        break;
1088
                    }
1089
                    TimeUtil.delay(1000);
1090
                    defaultDisplay.syncExec(new Runnable() {
1091
                        public void run() {
1092
                            // important!
1093
                            ref.set(Plugin.getActivePage());
1094
                        }
1095
                    });
1096
                }
1097
                monitor.done();
1098
                defaultDisplay.syncExec(new Runnable() {
1099
                    public void run() {
1100
                        GuiEventDispatcher.getInstance()
1101
                            .fireClientStatusChanged(
1102
                                ClientStatus.RUNNING);
1103
                    }
1104
                });
1105
                return Status.OK_STATUS;
1106
            }
1107
        }, null, 1000);
1089
    }
1108
    }
1090
1109
1091
    /**
1110
    /**
(-)a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/controllers/TestResultPartsTracker.java (+383 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004, 2012 BREDEX GmbH.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     BREDEX GmbH - initial API and implementation and/or initial documentation
10
 *******************************************************************************/
11
package org.eclipse.jubula.client.ui.rcp.controllers;
12
13
import java.util.ArrayList;
14
import java.util.LinkedList;
15
import java.util.List;
16
import org.eclipse.jubula.client.ui.constants.Constants;
17
import org.eclipse.jubula.client.ui.editors.TestResultViewer;
18
import org.eclipse.jubula.client.ui.rcp.Plugin;
19
import org.eclipse.jubula.client.ui.rcp.events.GuiEventDispatcher;
20
import org.eclipse.jubula.client.ui.rcp.events.GuiEventDispatcher.ClientStatus;
21
import org.eclipse.jubula.client.ui.rcp.events.GuiEventDispatcher.IClientStatusListener;
22
import org.eclipse.jubula.client.ui.rcp.sourceprovider.TestResultSourceProvider;
23
import org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView;
24
import org.eclipse.ui.IEditorPart;
25
import org.eclipse.ui.IPartListener;
26
import org.eclipse.ui.IPerspectiveDescriptor;
27
import org.eclipse.ui.IViewPart;
28
import org.eclipse.ui.IViewReference;
29
import org.eclipse.ui.IWorkbenchPage;
30
import org.eclipse.ui.IWorkbenchPart;
31
import org.eclipse.ui.part.ViewPart;
32
import org.eclipse.ui.part.WorkbenchPart;
33
34
/**
35
 * @author BREDEX GmbH
36
 */
37
public class TestResultPartsTracker implements IClientStatusListener {
38
    
39
    /**
40
     * the current perspective descriptor of the active page
41
     */
42
    private static IPerspectiveDescriptor currPesrpDescriptor;
43
    
44
    /**
45
     * singleton instance
46
     */
47
    private static TestResultPartsTracker instance = null;
48
49
    /**
50
     * the list of open test result viewers
51
     */
52
    private List<TestResultViewer> m_trViewers = 
53
            new ArrayList<TestResultViewer>();
54
    
55
    /**
56
     * state is false is Test Result Tree View is hidden
57
     * the value of this member is used to define if GoToNext/Previous Error Buttons should be disabled
58
     * currently it is impossible easy to check if the part (view/editor)
59
     * was hidden by other editor, because no list of stacked editors exist (only of staked views);
60
     * state of TestResultViewer is regarded as "may be hidden" when (this behaviour is defined
61
     * in methods of PartListenerToTrackTRParts and other methods of TestResultPartsTracker):
62
     *      - editor other then TestResultViewer was activated ;
63
     *      - on Perspective change; 
64
     *      - when TestResultViewer was closed; 
65
     */
66
    private boolean m_isTRTreeViewHidden = true;
67
    
68
    /**
69
     *it is not currently tracked if the TestResultViewer
70
     *is hidden or visible, and when it might be hidden
71
     *GoToErrorButtons should be disabled
72
     */
73
    private boolean m_trViewerMayBeHidden = true;
74
    
75
    /**
76
     * the ordered by activation time list of open test result viewers and test result view
77
     */
78
    private List<WorkbenchPart> m_trParts = 
79
            new LinkedList<WorkbenchPart>();
80
81
    /**
82
     * the test result tree view
83
     */
84
    private TestResultTreeView m_trTreeView = null;
85
    
86
    /**
87
    * the source provider
88
    */
89
    private TestResultSourceProvider m_provider = null;
90
    
91
92
    /**
93
     * private Constructor
94
     */
95
    private TestResultPartsTracker() {
96
        GuiEventDispatcher.getInstance()
97
            .addClientStatusListener(this);
98
    }
99
    
100
    /**
101
     * sets the value of the current perspective descriptor of the active page
102
     * @param pDescr the value to set
103
     */
104
    private static void setCurrentPesrpective(IPerspectiveDescriptor pDescr) {
105
        currPesrpDescriptor = pDescr;
106
    }
107
    
108
    /**
109
     *@return the value of the current perspective descriptor of the active page
110
     */
111
    private static IPerspectiveDescriptor getCurrentPesrpective() {
112
        return currPesrpDescriptor;
113
    }
114
    
115
    /**
116
     * @param page the page for which state of Test Result Tree View is tracked and handled
117
     */
118
    private void handleTestResultTreeViewInitialState(IWorkbenchPage page) {
119
        for (IViewReference viewRef : page.getViewReferences()) {
120
            if (viewRef.getId().equals(Constants.TESTRE_ID)) {
121
                addTRTreeView((TestResultTreeView)viewRef.getPart(true));
122
                setTRTreeViewHiddenStateTo(true);
123
            }
124
        }
125
    }
126
    
127
    /**
128
     * @author BREDEX The PartListener for tracking the state of Parts to view Test Result 
129
     * (TestResultViewer or TestResultTreeView)
130
     */
131
    private class PartListenerToTrackTRParts implements IPartListener {
132
        /** {@inheritDoc} */
133
        public void partActivated(IWorkbenchPart part) {
134
            handlePerspectiveChange();
135
            if (part instanceof TestResultTreeView) {
136
                setTRTreeViewHiddenStateTo(false);
137
            }
138
            if (part instanceof IEditorPart) {
139
                setTRViewerMayBeHiddenStateTo(
140
                        !(part instanceof TestResultViewer));
141
            }
142
        }
143
144
        /** {@inheritDoc} */
145
        public void partOpened(IWorkbenchPart part) {
146
            if (partIsTestResultPart(part)) {
147
                changeTRPartHiddenStateTo(part, false);
148
                if (part instanceof TestResultTreeView) {
149
                    addTRTreeView((TestResultTreeView)part);
150
                } else {
151
                    addTRViewer((TestResultViewer)part);
152
                }
153
            }
154
        }
155
        
156
        /** {@inheritDoc} */
157
        public void partDeactivated(IWorkbenchPart part) {
158
            //do nothing
159
        }
160
        
161
        /** {@inheritDoc} */
162
        public void partClosed(IWorkbenchPart part) {
163
            if (partIsTestResultPart(part)) {
164
                if (part instanceof TestResultTreeView) {
165
                    removeTRTreeView((TestResultTreeView)part);
166
                } else {
167
                    removeTRViewer((TestResultViewer)part);
168
                }
169
                changeTRPartHiddenStateTo(part, true);
170
            }
171
        }
172
173
        /** {@inheritDoc} */
174
        public void partBroughtToTop(IWorkbenchPart part) {
175
            if (part instanceof TestResultTreeView) {
176
                setTRTreeViewHiddenStateTo(false);
177
            }
178
            if (!((part instanceof TestResultTreeView)
179
                  || (part instanceof TestResultViewer))) {
180
                if (part instanceof IViewPart) {
181
                    IWorkbenchPage actPage = Plugin.getActivePage();
182
                    if (actPage != null) {
183
                        IViewPart[] stackedViews =
184
                                actPage.getViewStack((ViewPart)part);
185
                        for (IViewPart iViewPart : stackedViews) {
186
                            if (iViewPart instanceof TestResultTreeView) {
187
                                setTRTreeViewHiddenStateTo(true);
188
                            }
189
                        }
190
                    }
191
                }
192
            }
193
        }
194
        
195
        /**
196
         * @param part the part for which hidden state will be changed
197
         * @param state the new value of the part hidden state 
198
         */
199
        private void changeTRPartHiddenStateTo(IWorkbenchPart part, 
200
                boolean state) {
201
            if (part instanceof TestResultTreeView) {
202
                setTRTreeViewHiddenStateTo(state);
203
            } else {
204
                setTRViewerMayBeHiddenStateTo(state);
205
            }
206
        }
207
208
        /**
209
         * @param part the part to check
210
         * @return true if the part is the one to view test results
211
         * (TestResultTreeView or TestResultViewer)
212
         */
213
        private boolean partIsTestResultPart(IWorkbenchPart part) {
214
            return (part instanceof TestResultTreeView) 
215
                    || (part instanceof TestResultViewer);
216
        }
217
        
218
        /**
219
         * handle availability of GoToErrorButtons on change of the current perspective
220
         */
221
        private void handlePerspectiveChange() {
222
            IWorkbenchPage actPage = Plugin.getActivePage();
223
            if (actPage != null) {
224
                if (!actPage.getPerspective().equals(getCurrentPesrpective())) {
225
                    setTRViewerMayBeHiddenStateTo(true);
226
                    setTRTreeViewHiddenStateTo(true);
227
                    setCurrentPesrpective(actPage.getPerspective());
228
                }
229
            }
230
        }
231
        
232
        
233
    }
234
235
    /**
236
     * get single instance
237
     * 
238
     * @return single instance of ImportFileBP
239
     */
240
    public static TestResultPartsTracker getInstance() {
241
        if (instance == null) {
242
            instance = new TestResultPartsTracker();
243
        }
244
        return instance;
245
    }
246
247
    /**
248
     * Add a test result viewer to this tracker.
249
     * @param testResultViewer The test result viewer to add.
250
     */
251
    public void addTRViewer(TestResultViewer testResultViewer) {
252
        if (testResultViewer != null) {
253
            m_trViewers.add(testResultViewer);
254
            m_trParts.add(testResultViewer);
255
            m_trViewerMayBeHidden = false;
256
            fireStateChanged();
257
        }
258
    }
259
    
260
    /**
261
     * Add a test result tree view to this tracker.
262
     * @param testResultTreeView The test result tree view to add.
263
     */
264
    public void addTRTreeView(TestResultTreeView testResultTreeView) {
265
        if (testResultTreeView != null) {
266
            m_trTreeView = testResultTreeView;
267
            m_trParts.add(testResultTreeView);
268
            m_isTRTreeViewHidden = false;
269
            fireStateChanged();
270
        }
271
    }
272
273
    /**
274
     * @param provider the provider to set
275
     */
276
    public void setProvider(TestResultSourceProvider provider) {
277
        m_provider = provider;
278
    }
279
    
280
    /**
281
     * set m_isTRTreeViewHidden to true or false
282
     * @param state the state to what of m_isTRTreeViewHidden will be set
283
     */
284
    public void setTRTreeViewHiddenStateTo(boolean state) {
285
        m_isTRTreeViewHidden = state;
286
        fireStateChanged();
287
    }
288
    
289
    /**
290
     * set m_isTRTreeViewHidden to true or false
291
     * @param state the state to what of m_isTRTreeViewHidden will be set
292
     */
293
    public void setTRViewerMayBeHiddenStateTo(boolean state) {
294
        m_trViewerMayBeHidden = state;
295
        fireStateChanged();
296
    }
297
    
298
    /**
299
     * @return the currently open instances of the Test Result Viewer editor
300
     */
301
    public List<TestResultViewer> getOpenTRViewers() {
302
        List<TestResultViewer> trvs = new ArrayList<TestResultViewer>();
303
        for (TestResultViewer trv : m_trViewers) {
304
            trvs.add(trv);
305
        }
306
        return trvs;
307
    }
308
    
309
    /**
310
     * @return the list of open parts to view test result
311
     * (test result tree view or test result viewers)
312
     * ordered by their activation
313
     */
314
    public List<WorkbenchPart> getTRParts() {
315
        List<WorkbenchPart> trParts = new LinkedList<WorkbenchPart>();
316
        for (WorkbenchPart trv : m_trParts) {
317
            trParts.add(trv);
318
        }
319
        return trParts;
320
    }
321
    
322
    /**
323
     * @return the currently open instance of the Test Result Tree View
324
     */
325
    public TestResultTreeView getTRTreeView() {
326
        return m_trTreeView;
327
    }
328
    
329
    /**
330
     * @return the value of m_isTRTreeViewHidden (true if Test Result Tree View is hidden)
331
     */
332
    public boolean isTRTreeViewHidden() {
333
        return m_isTRTreeViewHidden;
334
    }
335
336
    /**
337
     * @return the value of m_areButtonsDisabled
338
     */
339
    public boolean mayTRViewerBeHidden() {
340
        return m_trViewerMayBeHidden;
341
    }
342
    
343
    /**
344
     * Remove a test result tree view from this tracker.
345
     * @param testResultViewer The test result tree view to remove.
346
     */
347
    public void removeTRViewer(TestResultViewer testResultViewer) {
348
        m_trViewers.remove(testResultViewer);
349
        m_trParts.remove(testResultViewer);
350
        fireStateChanged();
351
    }
352
    
353
    /**
354
     * Remove a test result tree view from this tracker.
355
     * @param testResultTreeView The test result tree view to remove.
356
     */
357
    public void removeTRTreeView(TestResultTreeView testResultTreeView) {
358
        m_trParts.remove(testResultTreeView);
359
        m_trTreeView = null;
360
        fireStateChanged();
361
    }
362
363
    /**
364
     * fire data changed events
365
     */
366
    private void fireStateChanged() {
367
        if (m_provider != null) {
368
            m_provider.externalFireSourceChanged();
369
        }
370
    }
371
372
    /** {@inheritDoc} */
373
    public void handleClientStateChanged(ClientStatus status) {
374
        if (status.equals(ClientStatus.RUNNING)) {
375
            IWorkbenchPage actPage = Plugin.getActivePage();
376
            if (actPage != null) {
377
                actPage.addPartListener(new PartListenerToTrackTRParts());
378
                setCurrentPesrpective(actPage.getPerspective());
379
                handleTestResultTreeViewInitialState(actPage);
380
            }
381
        }
382
    }
383
}
(-)a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/events/GuiEventDispatcher.java (+64 lines)
Lines 36-41 public class GuiEventDispatcher { Link Here
36
                boolean isDirty);
36
                boolean isDirty);
37
    }
37
    }
38
    
38
    
39
    /** to notify clients about changes client status */
40
    public interface IClientStatusListener {
41
        /**
42
         * @param status the status of the client
43
         */
44
        public void handleClientStateChanged(ClientStatus status);
45
    }
46
    
39
    /** logger */
47
    /** logger */
40
    private static final Logger LOG = 
48
    private static final Logger LOG = 
41
        LoggerFactory.getLogger(GuiEventDispatcher.class);
49
        LoggerFactory.getLogger(GuiEventDispatcher.class);
Lines 50-55 public class GuiEventDispatcher { Link Here
50
     * <code>m_editorDirtyStateListeners</code> listener for notification 
58
     * <code>m_editorDirtyStateListeners</code> listener for notification 
51
     * about change of the dirty state of an editor
59
     * about change of the dirty state of an editor
52
     */
60
     */
61
    private Set<IClientStatusListener> m_clStatusListeners =
62
        new HashSet<IClientStatusListener>();
63
    
64
    /**
65
     * <code>m_editorDirtyStateListeners</code> listener for notification 
66
     * about change of the dirty state of an editor
67
     */
53
    private Set<IEditorDirtyStateListener> m_editorDirtyStateListeners =
68
    private Set<IEditorDirtyStateListener> m_editorDirtyStateListeners =
54
        new HashSet<IEditorDirtyStateListener>();
69
        new HashSet<IEditorDirtyStateListener>();
55
    /**
70
    /**
Lines 60-65 public class GuiEventDispatcher { Link Here
60
    private Set<IEditorDirtyStateListener> m_editorDirtyStateListenersPost =
75
    private Set<IEditorDirtyStateListener> m_editorDirtyStateListenersPost =
61
        new HashSet<IEditorDirtyStateListener>();
76
        new HashSet<IEditorDirtyStateListener>();
62
    
77
    
78
    /** the Client Status */
79
    public enum ClientStatus {
80
        /**
81
         * Jubula is launched completely
82
         */
83
        RUNNING,
84
        /**
85
         * Jubula is starting up
86
         */
87
        STARTING,
88
        /**
89
         * Jubula is shutting down
90
         */
91
        STOPPING
92
    }
93
    
63
    /**
94
    /**
64
     * private constructor
95
     * private constructor
65
     */
96
     */
Lines 131-134 public class GuiEventDispatcher { Link Here
131
            }
162
            }
132
        }
163
        }
133
    }
164
    }
165
166
    /**
167
     * fire client status changed events
168
     * 
169
     * @param status the new status
170
     */
171
    public void fireClientStatusChanged(ClientStatus status) {
172
        for (IClientStatusListener l : m_clStatusListeners) {
173
            try {
174
                l.handleClientStateChanged(status);
175
            } catch (Throwable t) {
176
                LOG.error(Messages.UnhandledExceptionCallingListeners, t);
177
            }
178
        }
179
    }
180
181
    /**
182
     * add client status listener
183
     * 
184
     * @param l the listener to add
185
     */
186
    public void addClientStatusListener(IClientStatusListener l) {
187
        m_clStatusListeners.add(l);
188
    }
189
    
190
    /**
191
     * remove client status listener
192
     * 
193
     * @param l the listener to remove
194
     */
195
    public void removeClientStatusListener(IClientStatusListener l) {
196
        m_clStatusListeners.remove(l);
197
    }
134
}
198
}
(-)a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/handlers/GoToNextTestResultErrorHandler.java (-8 / +18 lines)
Lines 10-19 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.jubula.client.ui.rcp.handlers;
11
package org.eclipse.jubula.client.ui.rcp.handlers;
12
12
13
import java.util.List;
14
15
import org.eclipse.jface.viewers.TreeViewer;
13
import org.eclipse.jface.viewers.TreeViewer;
14
import org.eclipse.jubula.client.ui.editors.TestResultViewer;
16
import org.eclipse.jubula.client.ui.handlers.AbstractGoToTestResultErrorHandler;
15
import org.eclipse.jubula.client.ui.handlers.AbstractGoToTestResultErrorHandler;
16
import org.eclipse.jubula.client.ui.rcp.controllers.TestResultPartsTracker;
17
import org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView;
17
import org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView;
18
import org.eclipse.ui.IWorkbenchPart;
18
import org.eclipse.ui.IWorkbenchPart;
19
19
Lines 33-43 public class GoToNextTestResultErrorHandler extends Link Here
33
        return true;
33
        return true;
34
    }
34
    }
35
35
36
    /**
36
    @Override
37
     * {@inheritDoc}
37
    protected TreeViewer handleTestResultPart(IWorkbenchPart part) {
38
     */
38
        TreeViewer viewer = null;
39
    protected TreeViewer handleActiveWorkbenchParts(List<IWorkbenchPart> list) {
39
        if (part instanceof TestResultTreeView) {
40
        list.get(0).setFocus();
40
            if (!(TestResultPartsTracker.getInstance().
41
        return ((TestResultTreeView) list.get(0)).getTreeViewer();
41
                    isTRTreeViewHidden())) {
42
                part.setFocus();
43
                TestResultTreeView trTreeView = (TestResultTreeView)part;
44
                viewer = trTreeView.getTreeViewer();
45
            }
46
        } else if (part instanceof TestResultViewer) { 
47
            part.setFocus();
48
            TestResultViewer trViewer = (TestResultViewer)part;
49
            viewer = trViewer.getTreeViewer();
50
        }
51
        return viewer;
42
    }
52
    }
43
}
53
}
(-)a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/handlers/GoToPreviousTestResultErrorHandler.java (-16 / +1 lines)
Lines 10-22 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.jubula.client.ui.rcp.handlers;
11
package org.eclipse.jubula.client.ui.rcp.handlers;
12
12
13
import java.util.List;
14
15
import org.eclipse.jface.viewers.TreeViewer;
16
import org.eclipse.jubula.client.ui.handlers.AbstractGoToTestResultErrorHandler;
17
import org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView;
18
import org.eclipse.ui.IWorkbenchPart;
19
20
/**
13
/**
21
 * Handler for navigating to the "previous" error in a Test Result.
14
 * Handler for navigating to the "previous" error in a Test Result.
22
 * 
15
 * 
Lines 24-30 import org.eclipse.ui.IWorkbenchPart; Link Here
24
 * @created September 10, 2013
17
 * @created September 10, 2013
25
 */
18
 */
26
public class GoToPreviousTestResultErrorHandler extends
19
public class GoToPreviousTestResultErrorHandler extends
27
        AbstractGoToTestResultErrorHandler {
20
        GoToNextTestResultErrorHandler {
28
21
29
    /**
22
    /**
30
     * {@inheritDoc}
23
     * {@inheritDoc}
Lines 32-43 public class GoToPreviousTestResultErrorHandler extends Link Here
32
    protected boolean isForwardIteration() {
25
    protected boolean isForwardIteration() {
33
        return false;
26
        return false;
34
    }
27
    }
35
36
    /**
37
     * {@inheritDoc}
38
     */
39
    protected TreeViewer handleActiveWorkbenchParts(List<IWorkbenchPart> list) {
40
        list.get(0).setFocus();
41
        return ((TestResultTreeView) list.get(0)).getTreeViewer();
42
    }
43
}
28
}
(-)a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/i18n/Messages.java (+2 lines)
Lines 626-631 public class Messages extends NLS { Link Here
626
    public static String ChangeParameterUsageOldNameLabel;
626
    public static String ChangeParameterUsageOldNameLabel;
627
    public static String ChangeParameterUsageNewNameLabel;
627
    public static String ChangeParameterUsageNewNameLabel;
628
    public static String ChangeParameterUsageOperation;
628
    public static String ChangeParameterUsageOperation;
629
    public static String RegisterWorkbenchStartupListener;
629
    public static String RenameActionCatError;
630
    public static String RenameActionCatError;
630
    public static String RenameActionCatLabel;
631
    public static String RenameActionCatLabel;
631
    public static String RenameActionCatMessage;
632
    public static String RenameActionCatMessage;
Lines 892-897 public class Messages extends NLS { Link Here
892
    public static String WasExpectedBut;
893
    public static String WasExpectedBut;
893
    public static String WasFound;
894
    public static String WasFound;
894
    public static String WindowIsNull;
895
    public static String WindowIsNull;
896
    public static String WorkbenchStartupListenerIsRegistring;
895
    public static String WrongAUT;
897
    public static String WrongAUT;
896
    public static String WrongEditorType;
898
    public static String WrongEditorType;
897
    public static String WrongEditSupportInTestCaseEditor;
899
    public static String WrongEditSupportInTestCaseEditor;
(-)a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/i18n/messages.properties (+2 lines)
Lines 610-615 ChangeCtdsColumnUsageTestCaseCouldNotBeLocked=The Test Case "{0}" could not be l Link Here
610
ChangeParameterUsageOldNameLabel=Old parameter/column name
610
ChangeParameterUsageOldNameLabel=Old parameter/column name
611
ChangeParameterUsageNewNameLabel=New parameter/column name
611
ChangeParameterUsageNewNameLabel=New parameter/column name
612
ChangeParameterUsageOperation=Change parameter usage from "{0}" to "{1}"...
612
ChangeParameterUsageOperation=Change parameter usage from "{0}" to "{1}"...
613
RegisterWorkbenchStartupListener=Register Workbench Startup Listener
613
RenameActionCatError=Category
614
RenameActionCatError=Category
614
RenameActionCatLabel=Category name\: 
615
RenameActionCatLabel=Category name\: 
615
RenameActionCatMessage=Rename category
616
RenameActionCatMessage=Rename category
Lines 878-883 VersionDialogEmptyField=Version number fields may not be empty. Link Here
878
WasExpectedBut=was expected, but
879
WasExpectedBut=was expected, but
879
WasFound=was found
880
WasFound=was found
880
WindowIsNull=Window is null
881
WindowIsNull=Window is null
882
WorkbenchStartupListenerIsRegistring=Workbench startup listener is being registred...
881
WrongAUT=Wrong AUT
883
WrongAUT=Wrong AUT
882
WrongEditorType=Wrong editor type
884
WrongEditorType=Wrong editor type
883
WrongEditSupportInTestCaseEditor=Wrong edit support in TestCaseEditor
885
WrongEditSupportInTestCaseEditor=Wrong edit support in TestCaseEditor
(-)a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/sourceprovider/TestResultSourceProvider.java (+116 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004, 2010 BREDEX GmbH.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     BREDEX GmbH - initial API and implementation and/or initial documentation
10
 *******************************************************************************/
11
package org.eclipse.jubula.client.ui.rcp.sourceprovider;
12
13
import java.util.HashMap;
14
import java.util.Map;
15
import org.eclipse.jubula.client.ui.rcp.controllers.TestResultPartsTracker;
16
import org.eclipse.ui.ISources;
17
18
/**
19
 * Provides variables related to the Test Result Viewers and Test Result Tree View.
20
 *
21
 * @author BREDEX GmbH
22
 * @created Dec 09, 2013
23
 */
24
public class TestResultSourceProvider extends AbstractJBSourceProvider {
25
    /** 
26
     * ID of variable that indicates whether at least one part to view test result 
27
     * (test result tree view or test result viewer) is open.
28
     */
29
    public static final String IS_PART_TO_VIEW_TEST_RESULT_OPEN =
30
        "org.eclipse.jubula.client.ui.rcp.variable.isPartToViewTestResultOpen"; //$NON-NLS-1$
31
    
32
    /** 
33
     * ID of definition that indicates whether Go to Next/Previous Error Buttons should be disabled
34
     * (the value depends on if open Test Result Tree View is hidden or not)
35
     */
36
    public static final String IS_TEST_RESULT_TREE_VIEW_HIDDEN =
37
        "org.eclipse.jubula.client.ui.rcp.variable.isTRTreeViewHidden"; //$NON-NLS-1$
38
    
39
    /** 
40
     * ID of definition that indicates whether Go to Next/Previous Error Buttons should be disabled
41
     * (the value depends on if open Test Result Tree View is hidden or not)
42
     */
43
    public static final String TEST_RESLT_VIEWER_MAY_BE_HIDDEN =
44
        "org.eclipse.jubula.client.ui.variable.mayTestResultViewerBeHidden"; //$NON-NLS-1$
45
    
46
    /**
47
     * Constructor.
48
     */
49
    public TestResultSourceProvider() {
50
        TestResultPartsTracker.getInstance().setProvider(this);
51
    }
52
53
    /**
54
     * 
55
     * {@inheritDoc}
56
     */
57
    public void dispose() {
58
        TestResultPartsTracker.getInstance().setProvider(null);
59
    }
60
61
    /**
62
     * 
63
     * {@inheritDoc}
64
     */
65
    public Map getCurrentState() {
66
        Map<String, Object> currentState = new HashMap<String, Object>();
67
        currentState.put(IS_PART_TO_VIEW_TEST_RESULT_OPEN,
68
                TestResultPartsTracker.getInstance().
69
                    getTRParts().size() > 0);
70
        currentState.put(IS_TEST_RESULT_TREE_VIEW_HIDDEN,
71
                TestResultPartsTracker.getInstance().
72
                    isTRTreeViewHidden());
73
        currentState.put(TEST_RESLT_VIEWER_MAY_BE_HIDDEN,
74
                TestResultPartsTracker.getInstance().mayTRViewerBeHidden());
75
        return currentState;
76
    }
77
78
    /**
79
     * 
80
     * {@inheritDoc}
81
     */
82
    public String[] getProvidedSourceNames() {
83
        return new String[] {   IS_PART_TO_VIEW_TEST_RESULT_OPEN,
84
                                IS_TEST_RESULT_TREE_VIEW_HIDDEN,
85
                                TEST_RESLT_VIEWER_MAY_BE_HIDDEN};
86
    }
87
88
    /**
89
     * Fires a source changed event for
90
     * <code>IS_PART_TO_VIEW_TEST_RESULT_OPEN</code> and
91
     * <code>IS_TEST_RESULT_TREE_VIEW_HIDDEN</code>
92
     * <code>TEST_RESLT_VIEWER_MAY_BE_HIDDEN</code>
93
     */
94
    private void fireSourceChanged() {
95
        gdFireSourceChanged(ISources.WORKBENCH,
96
                IS_PART_TO_VIEW_TEST_RESULT_OPEN,
97
              TestResultPartsTracker.getInstance().
98
                  getTRParts().size() > 0);
99
        gdFireSourceChanged(ISources.WORKBENCH,
100
                IS_TEST_RESULT_TREE_VIEW_HIDDEN,
101
              TestResultPartsTracker.getInstance().
102
                  isTRTreeViewHidden());
103
        gdFireSourceChanged(ISources.WORKBENCH,
104
                TEST_RESLT_VIEWER_MAY_BE_HIDDEN,
105
              TestResultPartsTracker.getInstance().
106
                  mayTRViewerBeHidden());        
107
    }
108
    
109
    /**
110
     * specified in Listener
111
     * callback method
112
     */
113
    public void externalFireSourceChanged() {
114
        fireSourceChanged();
115
    }
116
}
(-)a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/constants/Constants.java (+4 lines)
Lines 74-79 public interface Constants { Link Here
74
    public static final String TESTRE_ID = 
74
    public static final String TESTRE_ID = 
75
        "org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView"; //$NON-NLS-1$
75
        "org.eclipse.jubula.client.ui.rcp.views.TestResultTreeView"; //$NON-NLS-1$
76
    
76
    
77
    /** the ID of the test result viewer */
78
    public static final String TESTRE_VIEWER_ID =
79
        "org.eclipse.jubula.client.ui.editors.TestResultViewer"; //$NON-NLS-1$
80
    
77
    /** the ID of the test case browser */
81
    /** the ID of the test case browser */
78
    public static final String TC_BROWSER_ID = 
82
    public static final String TC_BROWSER_ID = 
79
        "org.eclipse.jubula.client.ui.rcp.views.TestCaseBrowser"; //$NON-NLS-1$
83
        "org.eclipse.jubula.client.ui.rcp.views.TestCaseBrowser"; //$NON-NLS-1$
(-)a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/handlers/AbstractGoToTestResultErrorHandler.java (-37 / +104 lines)
Lines 10-73 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.jubula.client.ui.handlers;
11
package org.eclipse.jubula.client.ui.handlers;
12
12
13
import java.util.LinkedList;
13
import java.util.logging.Level;
14
import java.util.List;
14
import java.util.logging.Logger;
15
15
16
import org.eclipse.core.commands.AbstractHandler;
16
import org.eclipse.core.commands.AbstractHandler;
17
import org.eclipse.core.commands.ExecutionEvent;
17
import org.eclipse.core.commands.ExecutionEvent;
18
import org.eclipse.core.commands.ExecutionException;
19
import org.eclipse.jface.viewers.IStructuredSelection;
18
import org.eclipse.jface.viewers.IStructuredSelection;
20
import org.eclipse.jface.viewers.ITreeContentProvider;
19
import org.eclipse.jface.viewers.ITreeContentProvider;
21
import org.eclipse.jface.viewers.StructuredSelection;
20
import org.eclipse.jface.viewers.StructuredSelection;
22
import org.eclipse.jface.viewers.TreeViewer;
21
import org.eclipse.jface.viewers.TreeViewer;
23
import org.eclipse.jubula.client.core.model.TestResultNode;
22
import org.eclipse.jubula.client.core.model.TestResultNode;
23
import org.eclipse.jubula.client.ui.constants.Constants;
24
import org.eclipse.jubula.client.ui.editors.TestResultViewer;
25
import org.eclipse.jubula.client.ui.i18n.Messages;
24
import org.eclipse.jubula.client.ui.utils.TreeViewerIterator;
26
import org.eclipse.jubula.client.ui.utils.TreeViewerIterator;
27
import org.eclipse.ui.IEditorReference;
28
import org.eclipse.ui.IViewReference;
29
import org.eclipse.ui.IWorkbenchPage;
25
import org.eclipse.ui.IWorkbenchPart;
30
import org.eclipse.ui.IWorkbenchPart;
26
import org.eclipse.ui.handlers.HandlerUtil;
31
import org.eclipse.ui.IWorkbenchWindow;
27
32
import org.eclipse.ui.PlatformUI;
28
33
29
/**
34
/**
30
 * Abstract handler for navigating to a test result node.
35
 * Abstract handler for navigating to a test result node.
31
 *
36
 * 
32
 * @author BREDEX GmbH
37
 * @author BREDEX GmbH
33
 * @created Jun 3, 2010
38
 * @created Jun 3, 2010
34
 */
39
 */
35
public abstract class AbstractGoToTestResultErrorHandler 
40
public abstract class AbstractGoToTestResultErrorHandler extends
36
        extends AbstractHandler {
41
        AbstractHandler {
37
42
38
    /**
43
    /**
39
     * {@inheritDoc}
44
     * {@inheritDoc}
40
     */
45
     */
41
    public final Object execute(ExecutionEvent event) 
46
    public final Object execute(ExecutionEvent event) {
42
        throws ExecutionException {
47
        activateTestResultTreeView();
43
48
        TreeViewer viewer = handleTestResultPart(
44
        List<IWorkbenchPart> listOfPossibleParts =
49
                getTestResultPartToExecuteGoToOn());
45
                new LinkedList<IWorkbenchPart>();
50
        IStructuredSelection selection = (IStructuredSelection) viewer
46
        listOfPossibleParts.add(HandlerUtil.getActivePart(event));
51
                .getSelection();
47
        listOfPossibleParts.add(HandlerUtil.getActiveEditor(event));
52
        ITreeContentProvider contentProvider = (ITreeContentProvider) viewer
48
        TreeViewer viewer = handleActiveWorkbenchParts(listOfPossibleParts);
53
                .getContentProvider();
49
        
50
        IStructuredSelection selection = 
51
            (IStructuredSelection)viewer.getSelection();
52
        ITreeContentProvider contentProvider = 
53
            (ITreeContentProvider)viewer.getContentProvider();
54
        TestResultNode startingNode = null;
54
        TestResultNode startingNode = null;
55
        if (selection.getFirstElement() instanceof TestResultNode) {
55
        if (selection.getFirstElement() instanceof TestResultNode) {
56
            startingNode = (TestResultNode)selection.getFirstElement();
56
            startingNode = (TestResultNode) selection.getFirstElement();
57
        } else {
57
        } else {
58
            Object[] rootElements = 
58
            Object[] rootElements = contentProvider.getElements(viewer
59
                contentProvider.getElements(viewer.getInput());
59
                    .getInput());
60
            for (Object element : rootElements) {
60
            for (Object element : rootElements) {
61
                if (element instanceof TestResultNode) {
61
                if (element instanceof TestResultNode) {
62
                    startingNode = (TestResultNode)element;
62
                    startingNode = (TestResultNode) element;
63
                    break;
63
                    break;
64
                }
64
                }
65
            }
65
            }
66
        }
66
        }
67
       
67
68
        TestResultNode targetNode = null;
68
        TestResultNode targetNode = null;
69
        TreeViewerIterator iter = new TreeViewerIterator(viewer, startingNode,
69
        TreeViewerIterator iter = new TreeViewerIterator(viewer, startingNode,
70
            isForwardIteration());
70
                isForwardIteration());
71
        while (iter.hasNext() && targetNode == null) {
71
        while (iter.hasNext() && targetNode == null) {
72
            Object nextElement = iter.next();
72
            Object nextElement = iter.next();
73
            if (nextElement instanceof TestResultNode) {
73
            if (nextElement instanceof TestResultNode) {
Lines 77-83 public abstract class AbstractGoToTestResultErrorHandler Link Here
77
                }
77
                }
78
            }
78
            }
79
        }
79
        }
80
        
80
81
        if (targetNode != null) {
81
        if (targetNode != null) {
82
            viewer.reveal(targetNode);
82
            viewer.reveal(targetNode);
83
            viewer.setSelection(new StructuredSelection(targetNode));
83
            viewer.setSelection(new StructuredSelection(targetNode));
Lines 87-94 public abstract class AbstractGoToTestResultErrorHandler Link Here
87
    }
87
    }
88
88
89
    /**
89
    /**
90
     * @return part to Execute GoTo on the active TestResultViewer or
91
     *         TestResultTreeView is selected to be a part if both
92
     *         TestResultViewer and TestResultTreeView or none of them are
93
     *         active, the part is considered to be a TestResultViewer
94
     *         return null if no active window or active page exist and if 
95
     *         no TestResultTreeView or TestResultViewer is open
96
     */
97
    private IWorkbenchPart getTestResultPartToExecuteGoToOn() {
98
        IWorkbenchWindow actWindow = PlatformUI.getWorkbench()
99
                .getActiveWorkbenchWindow();
100
        if (actWindow != null) {
101
            IWorkbenchPage actPage = actWindow.getActivePage();
102
            if (actPage != null) {
103
                // part is an active TestResultTreeView
104
                for (IViewReference viewRef : actPage.getViewReferences()) {
105
                    if ((viewRef.getId().equals(Constants.TESTRE_ID))
106
                            && (viewRef.equals(
107
                                    actPage.getActivePartReference()))) {
108
                        return (IWorkbenchPart) viewRef.getView(true);
109
                    }
110
                }
111
                // part is an active TestResultViewer
112
                for (IEditorReference edRef : actPage.getEditorReferences()) {
113
                    if ((edRef.getId().equals(Constants.TESTRE_VIEWER_ID))
114
                            && (edRef.getEditor(true).equals(actPage
115
                                    .getActiveEditor()))) {
116
                        return (IWorkbenchPart) edRef.getEditor(true);
117
                    }
118
                }
119
                // part is any of open TestResultViewers
120
                for (IEditorReference edRef : actPage.getEditorReferences()) {
121
                    if (edRef.getId().equals(Constants.TESTRE_VIEWER_ID)) {
122
                        return (IWorkbenchPart) edRef.getEditor(true);
123
                    }
124
                }
125
                Logger.getGlobal().log(Level.SEVERE, Messages.
126
                        ErrorOccurredWhileGettingTestResultPartToExecuteGoToOn);
127
                return null;
128
            }
129
            Logger.getGlobal().log(Level.SEVERE, Messages.
130
                    ActiveWorkbenchPageDoesNotExist);
131
            return null;
132
        }
133
        Logger.getGlobal().log(Level.SEVERE, Messages.
134
                ActiveWorkbenchWindowDoesNotExist);
135
        return null;
136
    }
137
138
    /**
139
     * unlike Editors (for which value of last active editor is remembered even
140
     * if Editor loses focus) last active view is not remembered and need to be
141
     * activated at the beginning of GoToTestResultErrorHandler execution
142
     */
143
    private void activateTestResultTreeView() {
144
        IWorkbenchPage actPage = PlatformUI.getWorkbench()
145
                .getActiveWorkbenchWindow().getActivePage();
146
        if (!(actPage.getActiveEditor() instanceof TestResultViewer)) {
147
            for (IViewReference viewRef : actPage.getViewReferences()) {
148
                if (viewRef.getId().equals(Constants.TESTRE_ID)) {
149
                    actPage.activate(viewRef.getView(true));
150
                }
151
            }
152
        }
153
    }
154
155
    /**
90
     * 
156
     * 
91
     * @param node The node to check.
157
     * @param node
158
     *            The node to check.
92
     * @return <code>true</code> if the node is considered an error node.
159
     * @return <code>true</code> if the node is considered an error node.
93
     */
160
     */
94
    private final boolean isErrorNode(TestResultNode node) {
161
    private final boolean isErrorNode(TestResultNode node) {
Lines 96-112 public abstract class AbstractGoToTestResultErrorHandler Link Here
96
        return (status == TestResultNode.ERROR)
163
        return (status == TestResultNode.ERROR)
97
                || (status == TestResultNode.ABORT);
164
                || (status == TestResultNode.ABORT);
98
    }
165
    }
99
    
166
100
    /**
167
    /**
101
     * @return a boolean describing the direction of iteration:
168
     * @return a boolean describing the direction of iteration: true = forwards;
102
     * true = forwards; false = backwards
169
     *         false = backwards
103
     */
170
     */
104
    protected abstract boolean isForwardIteration();
171
    protected abstract boolean isForwardIteration();
105
    
172
106
    /**
173
    /**
107
     * @param listOfPossibleParts a list of two possible parts to execute the GoTo on
174
     * @param part
108
     * @return the TreeViewer of the active part
175
     *            a part to execute the GoTo on
176
     * @return the TreeViewer of the part to execute the GoTo on
109
     */
177
     */
110
    protected abstract TreeViewer handleActiveWorkbenchParts(
178
    protected abstract TreeViewer handleTestResultPart(IWorkbenchPart part);
111
            List<IWorkbenchPart> listOfPossibleParts);  
112
}
179
}
(-)a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/handlers/GoToNextTestResultErrorHandler.java (-8 / +21 lines)
Lines 10-20 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.jubula.client.ui.handlers;
11
package org.eclipse.jubula.client.ui.handlers;
12
12
13
import java.util.List;
14
15
import org.eclipse.jface.viewers.TreeViewer;
13
import org.eclipse.jface.viewers.TreeViewer;
16
import org.eclipse.jubula.client.ui.editors.TestResultViewer;
14
import org.eclipse.jubula.client.ui.editors.TestResultViewer;
15
import org.eclipse.ui.IWorkbenchPage;
17
import org.eclipse.ui.IWorkbenchPart;
16
import org.eclipse.ui.IWorkbenchPart;
17
import org.eclipse.ui.PlatformUI;
18
18
19
/**
19
/**
20
 * Handler for navigating to the "next" error in a Test Result.
20
 * Handler for navigating to the "next" error in a Test Result.
Lines 32-42 public class GoToNextTestResultErrorHandler extends Link Here
32
        return true;
32
        return true;
33
    }
33
    }
34
34
35
    /**
35
    @Override
36
     * {@inheritDoc}
36
    protected TreeViewer handleTestResultPart(IWorkbenchPart part) {
37
     */
37
        TestResultViewer trViewer = null;
38
    protected TreeViewer handleActiveWorkbenchParts(List<IWorkbenchPart> list) {
38
        boolean existActTRViewer = false;
39
        list.get(1).setFocus();
39
        IWorkbenchPage actPage = PlatformUI.getWorkbench().
40
        return ((TestResultViewer) list.get(1)).getTreeViewer();
40
                getActiveWorkbenchWindow().getActivePage();
41
        if ((part instanceof TestResultViewer) 
42
                && (part.equals(actPage.getActiveEditor()))) {
43
            part.setFocus();
44
            trViewer = (TestResultViewer) part;
45
            existActTRViewer = true;
46
        }
47
        if (!existActTRViewer) {
48
            if (part instanceof TestResultViewer) { 
49
                part.setFocus();
50
                trViewer = (TestResultViewer) part;
51
            }
52
        }
53
        return trViewer.getTreeViewer();
41
    }
54
    }
42
}
55
}
(-)a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/handlers/GoToPreviousTestResultErrorHandler.java (-14 / +1 lines)
Lines 10-20 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.jubula.client.ui.handlers;
11
package org.eclipse.jubula.client.ui.handlers;
12
12
13
import java.util.List;
14
15
import org.eclipse.jface.viewers.TreeViewer;
16
import org.eclipse.jubula.client.ui.editors.TestResultViewer;
17
import org.eclipse.ui.IWorkbenchPart;
18
13
19
/**
14
/**
20
 * Handler for navigating to the "previous" error in a Test Result.
15
 * Handler for navigating to the "previous" error in a Test Result.
Lines 23-29 import org.eclipse.ui.IWorkbenchPart; Link Here
23
 * @created May 17, 2010
18
 * @created May 17, 2010
24
 */
19
 */
25
public class GoToPreviousTestResultErrorHandler extends
20
public class GoToPreviousTestResultErrorHandler extends
26
        AbstractGoToTestResultErrorHandler {
21
    GoToNextTestResultErrorHandler {
27
22
28
    /**
23
    /**
29
     * {@inheritDoc}
24
     * {@inheritDoc}
Lines 31-42 public class GoToPreviousTestResultErrorHandler extends Link Here
31
    protected boolean isForwardIteration() {
26
    protected boolean isForwardIteration() {
32
        return false;
27
        return false;
33
    }
28
    }
34
35
    /**
36
     * {@inheritDoc}
37
     */
38
    protected TreeViewer handleActiveWorkbenchParts(List<IWorkbenchPart> list) {
39
        list.get(1).setFocus();
40
        return ((TestResultViewer) list.get(1)).getTreeViewer();
41
    }
42
}
29
}
(-)a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/i18n/Messages.java (+3 lines)
Lines 21-26 public class Messages extends NLS { Link Here
21
21
22
    private static final String BUNDLE_NAME = "org.eclipse.jubula.client.ui.i18n.messages"; //$NON-NLS-1$
22
    private static final String BUNDLE_NAME = "org.eclipse.jubula.client.ui.i18n.messages"; //$NON-NLS-1$
23
    public static String AbstractGuiNodePropertySourceTaskId;
23
    public static String AbstractGuiNodePropertySourceTaskId;
24
    public static String ActiveWorkbenchPageDoesNotExist;
25
    public static String ActiveWorkbenchWindowDoesNotExist;
24
    public static String CantLoadMetadataFromDatabase;
26
    public static String CantLoadMetadataFromDatabase;
25
    public static String CapGUIPropertySourceAction;
27
    public static String CapGUIPropertySourceAction;
26
    public static String CapGUIPropertySourceActionType;
28
    public static String CapGUIPropertySourceActionType;
Lines 61-66 public class Messages extends NLS { Link Here
61
    public static String EnterCommentDialogTitleLabel;
63
    public static String EnterCommentDialogTitleLabel;
62
    public static String ErrorFetchingTestResultInformation;
64
    public static String ErrorFetchingTestResultInformation;
63
    public static String ErrorOccurredWhileExecutingCommand;
65
    public static String ErrorOccurredWhileExecutingCommand;
66
    public static String ErrorOccurredWhileGettingTestResultPartToExecuteGoToOn;
64
    public static String InputElementHasInvalidTypeReturningEmptyArray;
67
    public static String InputElementHasInvalidTypeReturningEmptyArray;
65
    public static String JobFilterSummaryView;
68
    public static String JobFilterSummaryView;
66
    public static String NoEditorInputCouldBeCreated;
69
    public static String NoEditorInputCouldBeCreated;
(-)a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/i18n/messages.properties (+3 lines)
Lines 6-11 Link Here
6
# http://www.eclipse.org/legal/epl-v10.html
6
# http://www.eclipse.org/legal/epl-v10.html
7
##############################################################################
7
##############################################################################
8
AbstractGuiNodePropertySourceTaskId=Task ID
8
AbstractGuiNodePropertySourceTaskId=Task ID
9
ActiveWorkbenchPageDoesNotExist=Active Workbench page does not exist
10
ActiveWorkbenchWindowDoesNotExist=Active Workbench window does not exist
9
AnErrorHasOccurred=An error has occurred
11
AnErrorHasOccurred=An error has occurred
10
CantLoadMetadataFromDatabase=Can't load metadata from database
12
CantLoadMetadataFromDatabase=Can't load metadata from database
11
CapGUIPropertySourceAction=Action
13
CapGUIPropertySourceAction=Action
Lines 46-51 EnterCommentDialogMessage=Enter a Comment. Link Here
46
EnterCommentDialogTitle=Enter a Comment
48
EnterCommentDialogTitle=Enter a Comment
47
EnterCommentDialogTitleLabel=Title\:
49
EnterCommentDialogTitleLabel=Title\:
48
ErrorFetchingTestResultInformation=Error occurred while fetching Test Result information
50
ErrorFetchingTestResultInformation=Error occurred while fetching Test Result information
51
ErrorOccurredWhileGettingTestResultPartToExecuteGoToOn=Error occurred while getting TestResult Part to execute GoToError
49
ErrorOccurredWhileExecutingCommand=Error occurred while executing command
52
ErrorOccurredWhileExecutingCommand=Error occurred while executing command
50
InputElementHasInvalidTypeReturningEmptyArray=Input element has invalid type. Returning empty array.
53
InputElementHasInvalidTypeReturningEmptyArray=Input element has invalid type. Returning empty array.
51
JobFilterSummaryView=Filtering Summary View...
54
JobFilterSummaryView=Filtering Summary View...

Return to bug 417829