EMMA Coverage Report (generated Sun Feb 05 10:43:15 CET 2012)
[all classes][de.uka.ipd.sdq.dsexplore.launch]

COVERAGE SUMMARY FOR SOURCE FILE [TacticsTab.java]

nameclass, %method, %block, %line, %
TacticsTab.java0%   (0/7)0%   (0/33)0%   (0/1855)0%   (0/463)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TacticsTab0%   (0/1)0%   (0/20)0%   (0/1779)0%   (0/446)
TacticsTab (): void 0%   (0/1)0%   (0/3)0%   (0/1)
access$0 (TacticsTab, boolean): void 0%   (0/1)0%   (0/4)0%   (0/1)
access$1 (TacticsTab): void 0%   (0/1)0%   (0/3)0%   (0/1)
access$2 (TacticsTab): void 0%   (0/1)0%   (0/3)0%   (0/1)
access$3 (TacticsTab): void 0%   (0/1)0%   (0/3)0%   (0/1)
access$4 (TacticsTab): void 0%   (0/1)0%   (0/3)0%   (0/1)
access$5 (TacticsTab): void 0%   (0/1)0%   (0/3)0%   (0/1)
activated (ILaunchConfigurationWorkingCopy): void 0%   (0/1)0%   (0/1)0%   (0/1)
createControl (Composite): void 0%   (0/1)0%   (0/871)0%   (0/233)
deactivated (ILaunchConfigurationWorkingCopy): void 0%   (0/1)0%   (0/1)0%   (0/1)
getName (): String 0%   (0/1)0%   (0/2)0%   (0/1)
initializeFrom (ILaunchConfiguration): void 0%   (0/1)0%   (0/303)0%   (0/62)
isValid (ILaunchConfiguration): boolean 0%   (0/1)0%   (0/244)0%   (0/43)
performApply (ILaunchConfigurationWorkingCopy): void 0%   (0/1)0%   (0/121)0%   (0/21)
setDefaults (ILaunchConfigurationWorkingCopy): void 0%   (0/1)0%   (0/81)0%   (0/18)
updateProcessingRateSelection (): void 0%   (0/1)0%   (0/47)0%   (0/21)
updateReallocationSelection (): void 0%   (0/1)0%   (0/23)0%   (0/8)
updateSelections (): void 0%   (0/1)0%   (0/9)0%   (0/5)
updateServerConsolidationSelection (): void 0%   (0/1)0%   (0/23)0%   (0/11)
updateServerExpansionSelection (): void 0%   (0/1)0%   (0/31)0%   (0/15)
     
class TacticsTab$10%   (0/1)0%   (0/2)0%   (0/14)0%   (0/5)
TacticsTab$1 (TacticsTab): void 0%   (0/1)0%   (0/6)0%   (0/2)
modifyText (ModifyEvent): void 0%   (0/1)0%   (0/8)0%   (0/3)
     
class TacticsTab$20%   (0/1)0%   (0/3)0%   (0/22)0%   (0/8)
TacticsTab$2 (TacticsTab): void 0%   (0/1)0%   (0/6)0%   (0/2)
widgetDefaultSelected (SelectionEvent): void 0%   (0/1)0%   (0/8)0%   (0/3)
widgetSelected (SelectionEvent): void 0%   (0/1)0%   (0/8)0%   (0/3)
     
class TacticsTab$30%   (0/1)0%   (0/2)0%   (0/10)0%   (0/4)
TacticsTab$3 (TacticsTab): void 0%   (0/1)0%   (0/6)0%   (0/2)
widgetSelected (SelectionEvent): void 0%   (0/1)0%   (0/4)0%   (0/2)
     
class TacticsTab$40%   (0/1)0%   (0/2)0%   (0/10)0%   (0/4)
TacticsTab$4 (TacticsTab): void 0%   (0/1)0%   (0/6)0%   (0/2)
widgetSelected (SelectionEvent): void 0%   (0/1)0%   (0/4)0%   (0/2)
     
class TacticsTab$50%   (0/1)0%   (0/2)0%   (0/10)0%   (0/4)
TacticsTab$5 (TacticsTab): void 0%   (0/1)0%   (0/6)0%   (0/2)
widgetSelected (SelectionEvent): void 0%   (0/1)0%   (0/4)0%   (0/2)
     
class TacticsTab$60%   (0/1)0%   (0/2)0%   (0/10)0%   (0/4)
TacticsTab$6 (TacticsTab): void 0%   (0/1)0%   (0/6)0%   (0/2)
widgetSelected (SelectionEvent): void 0%   (0/1)0%   (0/4)0%   (0/2)

1package de.uka.ipd.sdq.dsexplore.launch;
2 
3import java.util.Hashtable;
4 
5import org.eclipse.core.runtime.CoreException;
6import org.eclipse.debug.core.ILaunchConfiguration;
7import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
8import org.eclipse.swt.SWT;
9import org.eclipse.swt.events.ModifyEvent;
10import org.eclipse.swt.events.ModifyListener;
11import org.eclipse.swt.events.SelectionAdapter;
12import org.eclipse.swt.events.SelectionEvent;
13import org.eclipse.swt.events.SelectionListener;
14import org.eclipse.swt.layout.GridData;
15import org.eclipse.swt.layout.GridLayout;
16import org.eclipse.swt.widgets.Button;
17import org.eclipse.swt.widgets.Composite;
18import org.eclipse.swt.widgets.Group;
19import org.eclipse.swt.widgets.Label;
20import org.eclipse.swt.widgets.Text;
21 
22import de.uka.ipd.sdq.workflow.launchconfig.RunConfigPlugin;
23import de.uka.ipd.sdq.workflow.pcm.runconfig.FileNamesInputTab;
24 
25public class TacticsTab extends FileNamesInputTab {
26        final static String TAB_NAME = "Tactics";
27        private static final int DEFAULT_MARGIN = 15;
28        private static final int DEFAULT_HORIZONTAL_SPACING = 30;
29        private ModifyListener modifyListener;
30        
31        /*
32         * General Settings
33         */
34        final static String GENERAL_SETTINGS_GROUP_NAME = "General Settings";
35        final static String CONSIDER_QML_BOUNDS = "Consider QML bounds (Makes tactic application dependent of bound violations.)";
36        final static String TACTICS_PROBABILITY = "Probability to try applying tactics when mating.";
37        
38        private Button considerQMLBoundsButton;
39        private Text tacticsProbabilityText;
40        
41        /*
42         * Reallocation Settings
43         */
44        
45        final static String REALLOCATION_GROUP_NAME = "Reallocation Tactic";
46        final static String USE_REALLOCATION = "Use reallocation tactic";
47        final static String REALLOCATION_UTILISATION_DIFFERENCE = "Threshold for utilisation difference";
48        final static String REALLOCATION_WEIGHT = "Weight of reallocation tactic";
49 
50        private Button useReallocationButton;
51        private Text reallocationThresholdUtilisationDifference;
52        private Text reallocationWeight;
53 
54        private Label reallocationThresholdUtilisationDifferenceLabel;
55        private Label reallocationWeightLabel;
56        
57        final static boolean USE_REALLOCATION_DEFAULT =  false;
58        final static double REALLOCATION_UTILISATION_DIFFERENCE_DEFAULT = 0.5;
59        final static double REALLOCATION_WEIGHT_DEFAULT = 1.0;
60        
61        /*
62         * Processing rate setting
63         */
64 
65        final static String PROCESSING_RATE_GROUP_NAME = "Processing Rate Heuristic";
66        final static String USE_PROCESSING_RATE = "Use processing rate tactic";
67        final static String PROCESSING_RATE_THRESHOLD_LOW_UTILISATION = "Threshold for low utilisation";
68        final static String PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION = "Threshold for high utilisation";
69        final static String PROCESSING_RATE_INCREASE_FACTOR = "Increase processing rate factor";
70        final static String PROCESSING_RATE_DECREASE_FACTOR = "Decrease processing rate factor";
71        final static String PROCESSING_RATE_WEIGHT = "Weight of processing rate tactic";
72 
73        private Button useProcessingRateButton;
74        private Text processingRateThresholdLowUtilisation;
75        private Text processingRateThresholdHighUtilisation;
76        private Text processingRateDecreaseFactor;
77        private Text processingRateIncreaseFactor;
78        private Text processingRateWeight;
79 
80        private Label processingRateThresholdLowUtilisationLabel;
81        private Label processingRateThresholdHighUtilisationLabel;
82        private Label processingRateDecreaseFactorLabel;
83        private Label processingRateIncreaseFactorLabel;
84        private Label processingRateWeightLabel;
85        
86        final static boolean USE_PROCESSING_RATE_DEFAULT = false;
87        final static double PROCESSING_RATE_THRESHOLD_LOW_UTILISATION_DEFAULT = 0.2;
88        final static double PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION_DEFAULT = 0.8;
89        final static double PROCESSING_RATE_INCREASE_FACTOR_DEFAULT = 0.25;
90        final static double PROCESSING_RATE_DECREASE_FACTOR_DEFAULT = 0.25;
91        final static double PROCESSING_RATE_WEIGHT_DEFAULT = 0.1;
92        
93        /*
94         * Server consolidation settings
95         */
96 
97        final static String SERVER_CONSOLIDATION_GROUP_NAME = "Server Consolidation";
98        final static String USE_SERVER_CONSOLIDATION = "Use server consolidation tactic";
99        final static String SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION = "Threshold for low utilisation";
100        final static String SERVER_CONSOLIDATION_WEIGHT = "Weight of server consolidation tactic";
101 
102        private Button useServerConsolidationButton;
103        private Text serverConsolidationThresholdLowUtilisation;
104        private Text serverConsolidationWeight;
105 
106        private Label serverConsolidationThresholdLowUtilisationLabel;
107        private Label serverConsolidationWeightLabel;
108        
109        final static boolean USE_SERVER_CONSOLIDATION_DEFAULT = false;
110        final static double SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION_DEFAULT = 0.3;
111        final static double SERVER_CONSOLIDATION_WEIGHT_DEFAULT = 0.5;
112        
113        /*
114         * Server expansion settings
115         */
116 
117        final static String SERVER_EXPANSION_GROUP_NAME = "Server expansion";
118        final static String USE_SERVER_EXPANSION = "Use server expansion tactic";
119        final static String SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION = "Threshold for high utilisation";
120        final static String SERVER_EXPANSION_MAX_NUMBER_OF_REPLACEMENTS = "Maximum number of reallocations";
121        final static String SERVER_EXPANSION_WEIGHT = "Weight of server expansion tactic";
122        
123        private Button useServerExpansionButton;
124        private Text serverExpansionThresholdHighUtilisation;
125        private Text serverExpansionMaxNumberOfReplacements;
126        private Text serverExpansionWeight;
127 
128        private Label serverExpansionThresholdHighUtilisationLabel;
129        private Label serverExpansionMaxNumberOfReplacementsLabel;
130        private Label serverExpansionWeightLabel;
131        
132        /* Linking resource reallocation tactic*/
133        private Button useLinkReallocationButton;
134        final static String REALLOCATION_FOR_LINK_USAGE_GROUP_NAME = "Reallocation for link usage tactic";
135        final static String REALLOCATION_FOR_LINK_USAGE = "Use link reallocation tactic";
136        
137        /* Antipattern settings */
138        private Button useAntipatternsButton;
139        private static final String USE_ANTIPATTERNS = "Use antipattern knowledge";
140    private static final String ANTIPATTERNS_GROUP_NAME = "Antipattern Detection and Solution";
141        
142    /* defaults */
143    final static boolean CONSIDER_QML_BOUNDS_DEFAULT = false;
144        final static boolean USE_SERVER_EXPANSION_DEFAULT = false;
145        final static double SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION_DEFAULT = 0.7;
146        final static int SERVER_EXPANSION_MAX_NUMBER_OF_REPLACEMENTS_DEFAULT = 1;
147        final static double SERVER_EXPANSION_WEIGHT_DEFAULT = 0.5;
148        
149        final static boolean  USE_ANTIPATTERNS_DEFAULT = false;
150        final static boolean USE_LINK_REALLOCATION_DEFAULT = false;
151        
152        
153 
154        @Override
155        public void createControl(Composite parent) {
156                modifyListener = new ModifyListener() {
157                        public void modifyText(ModifyEvent e) {
158                                TacticsTab.this.setDirty(true);
159                                TacticsTab.this.updateLaunchConfigurationDialog();
160                        }
161                };
162 
163                final SelectionListener selectionListener = new SelectionListener() {
164 
165                        public void widgetDefaultSelected(SelectionEvent e) {
166                                TacticsTab.this.setDirty(true);
167                                TacticsTab.this.updateLaunchConfigurationDialog();
168                        }
169 
170                        public void widgetSelected(SelectionEvent e) {
171                                TacticsTab.this.setDirty(true);
172                                TacticsTab.this.updateLaunchConfigurationDialog();
173                        }
174                };
175 
176                Composite container = new Composite(parent, SWT.NONE);
177                setControl(container);
178                container.setLayout(new GridLayout());
179                
180                /*
181                 * Consider QML bounds
182                 */
183                {
184                        final Group generalSettingsGroup = new Group(container, SWT.NONE);
185                        final GridLayout qmlGroupLayout = new GridLayout();
186                        qmlGroupLayout.numColumns = 4;
187                        qmlGroupLayout.horizontalSpacing = DEFAULT_HORIZONTAL_SPACING;
188                        qmlGroupLayout.marginHeight = DEFAULT_MARGIN;
189                        qmlGroupLayout.marginWidth = DEFAULT_MARGIN;
190                        generalSettingsGroup.setLayout(qmlGroupLayout);
191                        generalSettingsGroup.setText(GENERAL_SETTINGS_GROUP_NAME);
192                        generalSettingsGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,
193                                        true, false));
194 
195                        considerQMLBoundsButton = new Button(generalSettingsGroup, SWT.CHECK);
196                        considerQMLBoundsButton.setEnabled(true);
197                        considerQMLBoundsButton.setSelection(true);
198                        considerQMLBoundsButton.setText(CONSIDER_QML_BOUNDS);
199                        considerQMLBoundsButton.addSelectionListener(selectionListener);
200 
201                        Label tacticsProbabilityLabel = new Label(generalSettingsGroup, SWT.NONE);
202                        tacticsProbabilityLabel.setText(TACTICS_PROBABILITY);
203                        
204                        tacticsProbabilityText = new Text(generalSettingsGroup, SWT.SINGLE | SWT.BORDER);
205                        tacticsProbabilityText.setText(""+DSEConstantsContainer.TACTICS_PROBABILITY_DEFAULT);
206                        tacticsProbabilityText.addModifyListener(modifyListener);
207                }
208                
209                /*
210                 * Reallocation
211                 */
212                {
213                        final Group reallocationGroup = new Group(container, SWT.NONE);
214                        final GridLayout reallocationGroupLayout = new GridLayout();
215                        reallocationGroupLayout.numColumns = 4;
216                        reallocationGroupLayout.horizontalSpacing = DEFAULT_HORIZONTAL_SPACING;
217                        reallocationGroupLayout.marginHeight = DEFAULT_MARGIN;
218                        reallocationGroupLayout.marginWidth = DEFAULT_MARGIN;
219                        reallocationGroup.setLayout(reallocationGroupLayout);
220                        reallocationGroup.setText(REALLOCATION_GROUP_NAME);
221                        reallocationGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,
222                                        true, false));
223 
224                        useReallocationButton = new Button(reallocationGroup, SWT.CHECK);
225                        useReallocationButton.setEnabled(true);
226                        useReallocationButton.setSelection(true);
227                        useReallocationButton.setText(USE_REALLOCATION);
228                        useReallocationButton.addSelectionListener(selectionListener);
229                        useReallocationButton.addSelectionListener(new SelectionAdapter() {
230                                @Override
231                                public void widgetSelected(SelectionEvent e) {
232                                        // enable level and half-with fields if and only if check
233                                        // box is checked
234                                        updateReallocationSelection();
235                                }
236 
237                        });
238 
239                        // spacer
240                        new Label(reallocationGroup, SWT.NONE);
241                        new Label(reallocationGroup, SWT.NONE);
242                        new Label(reallocationGroup, SWT.NONE);
243 
244                        reallocationThresholdUtilisationDifferenceLabel = new Label(
245                                        reallocationGroup, SWT.NONE);
246                        reallocationThresholdUtilisationDifferenceLabel
247                                        .setText(REALLOCATION_UTILISATION_DIFFERENCE);
248                        reallocationThresholdUtilisationDifference = new Text(reallocationGroup,
249                                        SWT.SINGLE | SWT.BORDER);
250                        reallocationThresholdUtilisationDifference.setEnabled(true);
251                        reallocationThresholdUtilisationDifference
252                                        .addModifyListener(modifyListener);
253 
254                        reallocationWeightLabel = new Label(reallocationGroup, SWT.NONE);
255                        reallocationWeightLabel.setText(REALLOCATION_WEIGHT);
256                        reallocationWeight = new Text(reallocationGroup, SWT.SINGLE
257                                        | SWT.BORDER);
258                        reallocationWeight.setEnabled(true);
259                        reallocationWeight.addModifyListener(modifyListener);
260                }
261 
262                /*
263                 * Processing Rate
264                 */
265                {
266                        final Group processingRateGroup = new Group(container, SWT.NONE);
267                        final GridLayout processingRateGroupLayout = new GridLayout();
268                        processingRateGroupLayout.numColumns = 4;
269                        processingRateGroupLayout.horizontalSpacing = DEFAULT_HORIZONTAL_SPACING;
270                        processingRateGroupLayout.marginHeight = DEFAULT_MARGIN;
271                        processingRateGroupLayout.marginWidth = DEFAULT_MARGIN;
272                        processingRateGroup.setLayout(processingRateGroupLayout);
273                        processingRateGroup.setText(PROCESSING_RATE_GROUP_NAME);
274                        processingRateGroup.setLayoutData(new GridData(SWT.FILL,
275                                        SWT.CENTER, true, false));
276 
277                        useProcessingRateButton = new Button(processingRateGroup, SWT.CHECK);
278                        useProcessingRateButton.setEnabled(true);
279                        useProcessingRateButton.setSelection(true);
280                        useProcessingRateButton.setText(USE_PROCESSING_RATE);
281                        useProcessingRateButton.addSelectionListener(selectionListener);
282                        useProcessingRateButton
283                                        .addSelectionListener(new SelectionAdapter() {
284                                                @Override
285                                                public void widgetSelected(SelectionEvent e) {
286                                                        // enable level and half-with fields if and only if
287                                                        // check box is checked
288                                                        updateProcessingRateSelection();
289                                                }
290 
291                                        });
292 
293                        // spacer
294                        new Label(processingRateGroup, SWT.NONE);
295                        new Label(processingRateGroup, SWT.NONE);
296                        new Label(processingRateGroup, SWT.NONE);
297 
298                        processingRateThresholdHighUtilisationLabel = new Label(
299                                        processingRateGroup, SWT.NONE);
300                        processingRateThresholdHighUtilisationLabel
301                                        .setText(PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION);
302                        processingRateThresholdHighUtilisation = new Text(
303                                        processingRateGroup, SWT.SINGLE | SWT.BORDER);
304                        processingRateThresholdHighUtilisation.setEnabled(true);
305                        processingRateThresholdHighUtilisation
306                                        .addModifyListener(modifyListener);
307 
308                        processingRateThresholdLowUtilisationLabel = new Label(
309                                        processingRateGroup, SWT.NONE);
310                        processingRateThresholdLowUtilisationLabel
311                                        .setText(PROCESSING_RATE_THRESHOLD_LOW_UTILISATION);
312                        processingRateThresholdLowUtilisation = new Text(
313                                        processingRateGroup, SWT.SINGLE | SWT.BORDER);
314                        processingRateThresholdLowUtilisation.setEnabled(true);
315                        processingRateThresholdLowUtilisation
316                                        .addModifyListener(modifyListener);
317 
318                        processingRateDecreaseFactorLabel = new Label(processingRateGroup,
319                                        SWT.NONE);
320                        processingRateDecreaseFactorLabel
321                                        .setText(PROCESSING_RATE_DECREASE_FACTOR);
322                        processingRateDecreaseFactor = new Text(processingRateGroup,
323                                        SWT.SINGLE | SWT.BORDER);
324                        processingRateDecreaseFactor.setEnabled(true);
325                        processingRateDecreaseFactor.addModifyListener(modifyListener);
326 
327                        processingRateIncreaseFactorLabel = new Label(processingRateGroup,
328                                        SWT.NONE);
329                        processingRateIncreaseFactorLabel
330                                        .setText(PROCESSING_RATE_INCREASE_FACTOR);
331                        processingRateIncreaseFactor = new Text(processingRateGroup,
332                                        SWT.SINGLE | SWT.BORDER);
333                        processingRateIncreaseFactor.setEnabled(true);
334                        processingRateIncreaseFactor.addModifyListener(modifyListener);
335 
336                        processingRateWeightLabel = new Label(processingRateGroup, SWT.NONE);
337                        processingRateWeightLabel.setText(PROCESSING_RATE_WEIGHT);
338                        processingRateWeight = new Text(processingRateGroup, SWT.SINGLE
339                                        | SWT.BORDER);
340                        processingRateWeight.setEnabled(true);
341                        processingRateWeight.addModifyListener(modifyListener);
342                }
343 
344                /*
345                 * Server Consolidation
346                 */
347                {
348                        final Group serverConsolidationGroup = new Group(container,
349                                        SWT.NONE);
350                        final GridLayout serverConsolidationGroupLayout = new GridLayout();
351                        serverConsolidationGroupLayout.marginHeight = DEFAULT_MARGIN;
352                        serverConsolidationGroupLayout.marginWidth = DEFAULT_MARGIN;
353                        serverConsolidationGroupLayout.numColumns = 4;
354                        serverConsolidationGroupLayout.horizontalSpacing = DEFAULT_HORIZONTAL_SPACING;
355                        serverConsolidationGroup.setLayout(serverConsolidationGroupLayout);
356                        serverConsolidationGroup.setText(SERVER_CONSOLIDATION_GROUP_NAME);
357                        serverConsolidationGroup.setLayoutData(new GridData(SWT.FILL,
358                                        SWT.CENTER, true, false));
359 
360                        useServerConsolidationButton = new Button(serverConsolidationGroup,
361                                        SWT.CHECK);
362                        useServerConsolidationButton.setEnabled(true);
363                        useServerConsolidationButton.setSelection(true);
364                        useServerConsolidationButton.setText(USE_SERVER_CONSOLIDATION);
365                        useServerConsolidationButton.addSelectionListener(selectionListener);
366                        useServerConsolidationButton
367                                        .addSelectionListener(new SelectionAdapter() {
368                                                @Override
369                                                public void widgetSelected(SelectionEvent e) {
370                                                        // enable level and half-with fields if and only if
371                                                        // check box is checked
372                                                        updateServerConsolidationSelection();
373                                                }
374                                        });
375 
376                        // spacer
377                        new Label(serverConsolidationGroup, SWT.NONE);
378                        new Label(serverConsolidationGroup, SWT.NONE);
379                        new Label(serverConsolidationGroup, SWT.NONE);
380 
381                        serverConsolidationThresholdLowUtilisationLabel = new Label(
382                                        serverConsolidationGroup, SWT.NONE);
383                        serverConsolidationThresholdLowUtilisationLabel
384                                        .setText(SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION);
385                        serverConsolidationThresholdLowUtilisation = new Text(
386                                        serverConsolidationGroup, SWT.SINGLE | SWT.BORDER);
387                        serverConsolidationThresholdLowUtilisation.setEnabled(true);
388                        serverConsolidationThresholdLowUtilisation
389                                        .addModifyListener(modifyListener);
390 
391                        serverConsolidationWeightLabel = new Label(
392                                        serverConsolidationGroup, SWT.NONE);
393                        serverConsolidationWeightLabel.setText(SERVER_CONSOLIDATION_WEIGHT);
394                        serverConsolidationWeight = new Text(serverConsolidationGroup,
395                                        SWT.SINGLE | SWT.BORDER);
396                        serverConsolidationWeight.setEnabled(true);
397                        serverConsolidationWeight.addModifyListener(modifyListener);
398                }
399 
400                /*
401                 * Server Expansion
402                 */
403                {
404                        final Group serverExpansionGroup = new Group(container, SWT.NONE);
405                        final GridLayout serverExpansionGroupLayout = new GridLayout();
406                        serverExpansionGroupLayout.marginHeight = DEFAULT_MARGIN;
407                        serverExpansionGroupLayout.marginWidth = DEFAULT_MARGIN;
408                        serverExpansionGroupLayout.numColumns = 4;
409                        serverExpansionGroupLayout.horizontalSpacing = DEFAULT_HORIZONTAL_SPACING;
410                        serverExpansionGroup.setLayout(serverExpansionGroupLayout);
411                        serverExpansionGroup.setText(SERVER_EXPANSION_GROUP_NAME);
412                        serverExpansionGroup.setLayoutData(new GridData(SWT.FILL,
413                                        SWT.CENTER, true, false));
414 
415                        useServerExpansionButton = new Button(serverExpansionGroup,
416                                        SWT.CHECK);
417                        useServerExpansionButton.setEnabled(true);
418                        useServerExpansionButton.setSelection(true);
419                        useServerExpansionButton.setText(USE_SERVER_EXPANSION);
420                        useServerExpansionButton.addSelectionListener(selectionListener);
421                        useServerExpansionButton
422                                        .addSelectionListener(new SelectionAdapter() {
423                                                @Override
424                                                public void widgetSelected(SelectionEvent e) {
425                                                        // enable level and half-with fields if and only if
426                                                        // check box is
427                                                        // checked
428                                                        updateServerExpansionSelection();
429                                                }
430                                        });
431 
432                        // spacer
433                        new Label(serverExpansionGroup, SWT.NONE);
434                        new Label(serverExpansionGroup, SWT.NONE);
435                        new Label(serverExpansionGroup, SWT.NONE);
436 
437                        serverExpansionThresholdHighUtilisationLabel = new Label(
438                                        serverExpansionGroup, SWT.NONE);
439                        serverExpansionThresholdHighUtilisationLabel
440                                        .setText(SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION);
441                        serverExpansionThresholdHighUtilisation = new Text(
442                                        serverExpansionGroup, SWT.SINGLE | SWT.BORDER);
443                        serverExpansionThresholdHighUtilisation.setEnabled(true);
444                        serverExpansionThresholdHighUtilisation
445                                        .addModifyListener(modifyListener);
446 
447                        serverExpansionMaxNumberOfReplacementsLabel = new Label(
448                                        serverExpansionGroup, SWT.NONE);
449                        serverExpansionMaxNumberOfReplacementsLabel
450                                        .setText(SERVER_EXPANSION_MAX_NUMBER_OF_REPLACEMENTS);
451                        serverExpansionMaxNumberOfReplacements = new Text(
452                                        serverExpansionGroup, SWT.SINGLE | SWT.BORDER);
453                        serverExpansionMaxNumberOfReplacements.setEnabled(true);
454                        serverExpansionMaxNumberOfReplacements
455                                        .addModifyListener(modifyListener);
456 
457                        serverExpansionWeightLabel = new Label(serverExpansionGroup,
458                                        SWT.NONE);
459                        serverExpansionWeightLabel.setText(SERVER_EXPANSION_WEIGHT);
460                        serverExpansionWeight = new Text(serverExpansionGroup, SWT.SINGLE
461                                        | SWT.BORDER);
462                        serverExpansionWeight.setEnabled(true);
463                        serverExpansionWeight.addModifyListener(modifyListener);
464                }
465                
466                {
467                        // Link reallocation
468                        final Group linkReallocGroup = new Group(container, SWT.NONE);
469                        final GridLayout linkReallocGroupLayout = new GridLayout();
470                        linkReallocGroupLayout.marginHeight = DEFAULT_MARGIN;
471                        linkReallocGroupLayout.marginWidth = DEFAULT_MARGIN;
472                        linkReallocGroupLayout.numColumns = 4;
473                        linkReallocGroupLayout.horizontalSpacing = DEFAULT_HORIZONTAL_SPACING;
474                        linkReallocGroup.setLayout(linkReallocGroupLayout);
475                        linkReallocGroup.setText(REALLOCATION_FOR_LINK_USAGE_GROUP_NAME);
476                        linkReallocGroup.setLayoutData(new GridData(SWT.FILL,
477                                        SWT.CENTER, true, false));
478 
479                        useLinkReallocationButton = new Button(linkReallocGroup,
480                                        SWT.CHECK);
481                        useLinkReallocationButton.setEnabled(true);
482                        useLinkReallocationButton.setSelection(true);
483                        useLinkReallocationButton.setText(REALLOCATION_FOR_LINK_USAGE);
484                        useLinkReallocationButton.addSelectionListener(selectionListener);
485                }
486                
487                
488                {
489                        /*
490                         * Antipatterns
491                         */
492                        final Group antipatternsGroup = new Group(container, SWT.NONE);
493                        final GridLayout antipatternsGroupLayout = new GridLayout();
494                        antipatternsGroupLayout.marginHeight = DEFAULT_MARGIN;
495                        antipatternsGroupLayout.marginWidth = DEFAULT_MARGIN;
496                        antipatternsGroupLayout.numColumns = 4;
497                        antipatternsGroupLayout.horizontalSpacing = DEFAULT_HORIZONTAL_SPACING;
498                        antipatternsGroup.setLayout(antipatternsGroupLayout);
499                        antipatternsGroup.setText(ANTIPATTERNS_GROUP_NAME);
500                        antipatternsGroup.setLayoutData(new GridData(SWT.FILL,
501                                        SWT.CENTER, true, false));
502 
503                        useAntipatternsButton = new Button(antipatternsGroup,
504                                        SWT.CHECK);
505                        useAntipatternsButton.setEnabled(true);
506                        useAntipatternsButton.setSelection(true);
507                        useAntipatternsButton.setText(USE_ANTIPATTERNS);
508                        useAntipatternsButton.addSelectionListener(selectionListener);
509                }
510 
511        }
512 
513        @Override
514        public String getName() {
515                return TAB_NAME;
516        }
517 
518        @Override
519        public void initializeFrom(ILaunchConfiguration configuration) {
520                try {
521                        considerQMLBoundsButton.setSelection(configuration.getAttribute(DSEConstantsContainer.CONSIDER_QML_BOUNDS, CONSIDER_QML_BOUNDS_DEFAULT));
522                } catch (CoreException e) {
523                        RunConfigPlugin.errorLogger(getName(), CONSIDER_QML_BOUNDS , e.getMessage());
524                }
525                
526                try {
527                        tacticsProbabilityText.setText(configuration.getAttribute(DSEConstantsContainer.TACTICS_PROBABILITY, ""+DSEConstantsContainer.TACTICS_PROBABILITY_DEFAULT ));
528                } catch (CoreException e) {
529                        RunConfigPlugin.errorLogger(getName(), TACTICS_PROBABILITY , e.getMessage());
530                }
531                
532                try {
533                        useReallocationButton.setSelection(configuration.getAttribute(DSEConstantsContainer.USE_REALLOCATION, USE_REALLOCATION_DEFAULT));
534                } catch (CoreException e) {
535                        RunConfigPlugin.errorLogger(getName(), USE_REALLOCATION , e.getMessage());
536                }
537                
538                try {
539                        reallocationThresholdUtilisationDifference.setText(configuration.getAttribute(DSEConstantsContainer.REALLOCATION_UTILISATION_DIFFERENCE, ""));
540                } catch (CoreException e) {
541                        RunConfigPlugin.errorLogger(getName(), REALLOCATION_UTILISATION_DIFFERENCE , e.getMessage());
542                }
543                
544                try {
545                        reallocationWeight.setText(configuration.getAttribute(DSEConstantsContainer.REALLOCATION_WEIGHT, ""));
546                } catch (CoreException e) {
547                        RunConfigPlugin.errorLogger(getName(), REALLOCATION_WEIGHT , e.getMessage());
548                }
549                
550                try {
551                        useProcessingRateButton.setSelection(configuration.getAttribute(DSEConstantsContainer.USE_PROCESSING_RATE, USE_PROCESSING_RATE_DEFAULT));
552                } catch (CoreException e) {
553                        RunConfigPlugin.errorLogger(getName(), USE_PROCESSING_RATE , e.getMessage());
554                }
555                
556                try {
557                        useLinkReallocationButton.setSelection(configuration.getAttribute(DSEConstantsContainer.USE_LINK_REALLOCATION, USE_LINK_REALLOCATION_DEFAULT));
558                } catch (CoreException e) {
559                        RunConfigPlugin.errorLogger(getName(), REALLOCATION_FOR_LINK_USAGE , e.getMessage());
560                }
561                
562                try {
563                        useAntipatternsButton.setSelection(configuration.getAttribute(DSEConstantsContainer.USE_ANTIPATTERNS, USE_ANTIPATTERNS_DEFAULT));
564                } catch (CoreException e) {
565                        RunConfigPlugin.errorLogger(getName(), USE_ANTIPATTERNS , e.getMessage());
566                }
567                
568                try {
569                        processingRateDecreaseFactor.setText(configuration.getAttribute(DSEConstantsContainer.PROCESSING_RATE_DECREASE_FACTOR, ""));
570                } catch (CoreException e) {
571                        RunConfigPlugin.errorLogger(getName(), PROCESSING_RATE_DECREASE_FACTOR , e.getMessage());
572                }
573                
574                try {
575                        processingRateIncreaseFactor.setText(configuration.getAttribute(DSEConstantsContainer.PROCESSING_RATE_INCREASE_FACTOR, ""));
576                } catch (CoreException e) {
577                        RunConfigPlugin.errorLogger(getName(), PROCESSING_RATE_INCREASE_FACTOR , e.getMessage());
578                }
579                
580                try {
581                        processingRateThresholdHighUtilisation.setText(configuration.getAttribute(DSEConstantsContainer.PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION, ""));
582                } catch (CoreException e) {
583                        RunConfigPlugin.errorLogger(getName(), PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION , e.getMessage());
584                }
585                
586                try {
587                        processingRateThresholdLowUtilisation.setText(configuration.getAttribute(DSEConstantsContainer.PROCESSING_RATE_THRESHOLD_LOW_UTILISATION, ""));
588                } catch (CoreException e) {
589                        RunConfigPlugin.errorLogger(getName(), PROCESSING_RATE_THRESHOLD_LOW_UTILISATION , e.getMessage());
590                }
591                
592                try {
593                        processingRateWeight.setText(configuration.getAttribute(DSEConstantsContainer.PROCESSING_RATE_WEIGHT, ""));
594                } catch (CoreException e) {
595                        RunConfigPlugin.errorLogger(getName(), PROCESSING_RATE_WEIGHT , e.getMessage());
596                }
597                
598                try {
599                        useServerConsolidationButton.setSelection(configuration.getAttribute(DSEConstantsContainer.USE_SERVER_CONSOLIDATION, USE_SERVER_CONSOLIDATION_DEFAULT));
600                } catch (CoreException e) {
601                        RunConfigPlugin.errorLogger(getName(), USE_SERVER_CONSOLIDATION , e.getMessage());
602                }
603                
604                try {
605                        serverConsolidationThresholdLowUtilisation.setText(configuration.getAttribute(DSEConstantsContainer.SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION, ""));
606                } catch (CoreException e) {
607                        RunConfigPlugin.errorLogger(getName(), SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION , e.getMessage());
608                }
609                
610                try {
611                        serverConsolidationWeight.setText(configuration.getAttribute(DSEConstantsContainer.SERVER_CONSOLIDATION_WEIGHT, ""));
612                } catch (CoreException e) {
613                        RunConfigPlugin.errorLogger(getName(), SERVER_CONSOLIDATION_WEIGHT , e.getMessage());
614                }
615                
616                try {
617                        useServerExpansionButton.setSelection(configuration.getAttribute(DSEConstantsContainer.USE_SERVER_EXPANSION, USE_SERVER_EXPANSION_DEFAULT));
618                } catch (CoreException e) {
619                        RunConfigPlugin.errorLogger(getName(), USE_SERVER_EXPANSION , e.getMessage());
620                }
621                
622                try {
623                        serverExpansionMaxNumberOfReplacements.setText(configuration.getAttribute(DSEConstantsContainer.SERVER_EXPANSION_MAX_NUMBER_OF_REPLACEMENTS, ""));
624                } catch (CoreException e) {
625                        RunConfigPlugin.errorLogger(getName(), SERVER_EXPANSION_MAX_NUMBER_OF_REPLACEMENTS , e.getMessage());
626                }
627                
628                try {
629                        serverExpansionThresholdHighUtilisation.setText(configuration.getAttribute(DSEConstantsContainer.SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION, ""));
630                } catch (CoreException e) {
631                        RunConfigPlugin.errorLogger(getName(), SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION , e.getMessage());
632                }
633                
634                try {
635                        serverExpansionWeight.setText(configuration.getAttribute(DSEConstantsContainer.SERVER_EXPANSION_WEIGHT, ""));
636                } catch (CoreException e) {
637                        RunConfigPlugin.errorLogger(getName(), SERVER_EXPANSION_WEIGHT , e.getMessage());
638                }
639                
640                updateSelections();
641        }
642 
643        @Override
644        public void performApply(ILaunchConfigurationWorkingCopy configuration) {
645                configuration.setAttribute(DSEConstantsContainer.CONSIDER_QML_BOUNDS, considerQMLBoundsButton.getSelection());
646                configuration.setAttribute(DSEConstantsContainer.TACTICS_PROBABILITY, tacticsProbabilityText.getText());
647                
648                configuration.setAttribute(DSEConstantsContainer.USE_REALLOCATION, useReallocationButton.getSelection());
649                configuration.setAttribute(DSEConstantsContainer.REALLOCATION_UTILISATION_DIFFERENCE, reallocationThresholdUtilisationDifference.getText());
650                configuration.setAttribute(DSEConstantsContainer.REALLOCATION_WEIGHT, reallocationWeight.getText());
651                
652                configuration.setAttribute(DSEConstantsContainer.USE_PROCESSING_RATE, useProcessingRateButton.getSelection());
653                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_DECREASE_FACTOR, processingRateDecreaseFactor.getText());
654                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_INCREASE_FACTOR, processingRateIncreaseFactor.getText());
655                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION, processingRateThresholdHighUtilisation.getText());
656                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_THRESHOLD_LOW_UTILISATION, processingRateThresholdLowUtilisation.getText());
657                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_WEIGHT, processingRateWeight.getText());
658                
659                configuration.setAttribute(DSEConstantsContainer.USE_SERVER_CONSOLIDATION, useServerConsolidationButton.getSelection());
660                configuration.setAttribute(DSEConstantsContainer.SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION, serverConsolidationThresholdLowUtilisation.getText());
661                configuration.setAttribute(DSEConstantsContainer.SERVER_CONSOLIDATION_WEIGHT, serverConsolidationWeight.getText());
662                
663                configuration.setAttribute(DSEConstantsContainer.USE_SERVER_EXPANSION, useServerExpansionButton.getSelection());
664                configuration.setAttribute(DSEConstantsContainer.SERVER_EXPANSION_MAX_NUMBER_OF_REPLACEMENTS, serverExpansionMaxNumberOfReplacements.getText());
665                configuration.setAttribute(DSEConstantsContainer.SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION, serverExpansionThresholdHighUtilisation.getText());
666                configuration.setAttribute(DSEConstantsContainer.SERVER_EXPANSION_WEIGHT, serverExpansionWeight.getText());
667                
668                configuration.setAttribute(DSEConstantsContainer.USE_LINK_REALLOCATION, useLinkReallocationButton.getSelection());
669                
670                configuration.setAttribute(DSEConstantsContainer.USE_ANTIPATTERNS, useAntipatternsButton.getSelection());
671        }
672 
673        @Override
674        public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
675//                configuration.setAttribute(DSEConstantsContainer.THRESHOLD, "0.7");
676//                configuration.setAttribute(DSEConstantsContainer.INCR_FACTOR, "1.1");
677//                configuration.setAttribute(
678//                                DSEConstantsContainer.INDIVIDUALS_PER_GENERATION, "3");
679//                configuration.setAttribute(DSEConstantsContainer.DESIGN_DECISIONS_ONLY,
680//                                false);
681//                configuration.setAttribute(DSEConstantsContainer.OPTIMISATION_ONLY,
682//                                false);
683                
684                configuration.setAttribute(DSEConstantsContainer.USE_REALLOCATION, USE_REALLOCATION_DEFAULT);
685                configuration.setAttribute(DSEConstantsContainer.REALLOCATION_UTILISATION_DIFFERENCE, Double.toString(REALLOCATION_UTILISATION_DIFFERENCE_DEFAULT));
686                configuration.setAttribute(DSEConstantsContainer.REALLOCATION_WEIGHT, Double.toString(REALLOCATION_WEIGHT_DEFAULT));
687                
688                configuration.setAttribute(DSEConstantsContainer.USE_PROCESSING_RATE, USE_PROCESSING_RATE_DEFAULT);
689                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_DECREASE_FACTOR, Double.toString(PROCESSING_RATE_DECREASE_FACTOR_DEFAULT));
690                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_INCREASE_FACTOR, Double.toString(PROCESSING_RATE_INCREASE_FACTOR_DEFAULT));
691                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION, Double.toString(PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION_DEFAULT));
692                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_THRESHOLD_LOW_UTILISATION, Double.toString(PROCESSING_RATE_THRESHOLD_LOW_UTILISATION_DEFAULT));
693                configuration.setAttribute(DSEConstantsContainer.PROCESSING_RATE_WEIGHT, Double.toString(PROCESSING_RATE_WEIGHT_DEFAULT));
694                
695                configuration.setAttribute(DSEConstantsContainer.USE_SERVER_CONSOLIDATION, USE_SERVER_CONSOLIDATION_DEFAULT);
696                configuration.setAttribute(DSEConstantsContainer.SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION, Double.toString(SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION_DEFAULT));
697                configuration.setAttribute(DSEConstantsContainer.SERVER_CONSOLIDATION_WEIGHT, Double.toString(SERVER_CONSOLIDATION_WEIGHT_DEFAULT));
698                
699                configuration.setAttribute(DSEConstantsContainer.USE_SERVER_EXPANSION, USE_SERVER_EXPANSION_DEFAULT);
700                configuration.setAttribute(DSEConstantsContainer.SERVER_EXPANSION_MAX_NUMBER_OF_REPLACEMENTS, Integer.toString(SERVER_EXPANSION_MAX_NUMBER_OF_REPLACEMENTS_DEFAULT));
701                configuration.setAttribute(DSEConstantsContainer.SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION, Double.toString(SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION_DEFAULT));
702                configuration.setAttribute(DSEConstantsContainer.SERVER_EXPANSION_WEIGHT, Double.toString(SERVER_EXPANSION_WEIGHT_DEFAULT));
703                
704                configuration.setAttribute(DSEConstantsContainer.USE_ANTIPATTERNS, USE_ANTIPATTERNS_DEFAULT);
705        }
706 
707        /*
708         * (non-Javadoc)
709         * 
710         * @see
711         * org.eclipse.debug.ui.AbstractLaunchConfigurationTab#isValid(org.eclipse
712         * .debug.core.ILaunchConfiguration)
713         */
714        @Override
715        public boolean isValid(ILaunchConfiguration launchConfig) {
716                setErrorMessage(null);
717                
718                /*
719                 * Check: is double?
720                 */
721                Hashtable<Text, String> valuesToCheck = new Hashtable<Text, String>();
722                if (useProcessingRateButton.getSelection()) {
723                        valuesToCheck.put(processingRateDecreaseFactor, "Processing rate: Decrease factor");
724                        valuesToCheck.put(processingRateIncreaseFactor, "Processing rate: Increase factor");
725                }
726                for (Text text : valuesToCheck.keySet()) {
727                                try {
728                                        Double.parseDouble(text.getText());
729                                } catch (NumberFormatException e) {
730                                        setErrorMessage(valuesToCheck.get(text)  + " (" +  text.getText() + ") must be a double value or empty.");
731                                        return false;
732                                }
733                }
734                
735                /*
736                 * Check: is int?
737                 */
738                valuesToCheck = new Hashtable<Text, String>();
739                if (useServerExpansionButton.getSelection()) {
740                        valuesToCheck.put(serverExpansionMaxNumberOfReplacements, "Server expansion: Maximum number of reallocations");
741                }
742                for (Text text : valuesToCheck.keySet()) {
743                                try {
744                                        Integer.parseInt(text.getText());
745                                } catch (NumberFormatException e) {
746                                        setErrorMessage(valuesToCheck.get(text) + " (" +  text.getText() + ") must be an integer value or empty.");
747                                        return false;
748                                }
749                }
750 
751                /*
752                 * Check: is double in [0,1]?
753                 */
754                valuesToCheck = new Hashtable<Text, String>();
755                valuesToCheck.put(tacticsProbabilityText, TACTICS_PROBABILITY);
756                
757                if (useProcessingRateButton.getSelection()) {
758                        valuesToCheck.put(processingRateWeight, "Processing rate: Weight");
759                        valuesToCheck.put(processingRateThresholdLowUtilisation, "Processing rate: "+PROCESSING_RATE_THRESHOLD_LOW_UTILISATION);
760                        valuesToCheck
761                                        .put(processingRateThresholdHighUtilisation, "Processing rate: "+PROCESSING_RATE_THRESHOLD_HIGH_UTILISATION);
762                }
763                if (useReallocationButton.getSelection()) {
764                        valuesToCheck.put(reallocationWeight, "Reallocation: Weight");
765                        valuesToCheck.put(reallocationThresholdUtilisationDifference, "Reallocation: "+REALLOCATION_UTILISATION_DIFFERENCE);
766                }
767                if (useServerConsolidationButton.getSelection()) {
768                        valuesToCheck.put(serverConsolidationWeight, SERVER_CONSOLIDATION_WEIGHT);
769                        valuesToCheck.put(serverConsolidationThresholdLowUtilisation,
770                                        "Server consolidation: "+SERVER_CONSOLIDATION_THRESHOLD_LOW_UTILISATION);
771                }
772                if (useServerExpansionButton.getSelection()) {
773                        valuesToCheck.put(serverExpansionWeight, "Server expansion: Weight");
774                        valuesToCheck.put(serverExpansionThresholdHighUtilisation,
775                                        "Server expansion: "+SERVER_EXPANSION_THRESHOLD_HIGH_UTILISATION);
776                }
777 
778                for (Text text : valuesToCheck.keySet()) {
779                                try {
780                                        if (Double.parseDouble(text.getText()) < 0 || Double.parseDouble(text.getText()) > 1.0) {
781                                                throw new NumberFormatException();
782                                        }
783                                } catch (NumberFormatException e) {
784                                        setErrorMessage(valuesToCheck.get(text) + " (" +  text.getText() + ") must be a double value between 0.0 and 1.0 or empty.");
785                                        return false;
786                                }
787                }
788 
789                return true;
790        }
791 
792        @Override
793        public void activated(ILaunchConfigurationWorkingCopy workingCopy) {
794                // Leave this method empty to prevent unnecessary invocation of
795                // initializeFrom() and multiple resulting invocations of
796                // performApply().
797        }
798 
799        @Override
800        public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {
801        }
802        
803        private void updateSelections() {
804                updateProcessingRateSelection();
805                updateReallocationSelection();
806                updateServerConsolidationSelection();
807                updateServerExpansionSelection();
808        }
809        
810        private void updateServerConsolidationSelection() {
811                boolean selected = useServerConsolidationButton
812                                .getSelection();
813                serverConsolidationThresholdLowUtilisationLabel
814                                .setEnabled(selected);
815                serverConsolidationThresholdLowUtilisation
816                                .setEnabled(selected);
817                serverConsolidationWeightLabel.setEnabled(selected);
818                serverConsolidationWeight.setEnabled(selected);
819                TacticsTab.this
820                                .updateLaunchConfigurationDialog();
821        }
822        
823        /**
824         * 
825         */
826        private void updateServerExpansionSelection() {
827                boolean selected = useServerExpansionButton
828                                .getSelection();
829                serverExpansionThresholdHighUtilisationLabel
830                                .setEnabled(selected);
831                serverExpansionThresholdHighUtilisation
832                                .setEnabled(selected);
833                serverExpansionMaxNumberOfReplacementsLabel
834                                .setEnabled(selected);
835                serverExpansionMaxNumberOfReplacements
836                                .setEnabled(selected);
837                serverExpansionWeightLabel.setEnabled(selected);
838                serverExpansionWeight.setEnabled(selected);
839                TacticsTab.this
840                                .updateLaunchConfigurationDialog();
841        }
842        
843 
844        /**
845         * 
846         */
847        private void updateReallocationSelection() {
848                boolean selected = useReallocationButton.getSelection();
849                reallocationThresholdUtilisationDifferenceLabel
850                                .setEnabled(selected);
851                reallocationThresholdUtilisationDifference.setEnabled(selected);
852                reallocationWeightLabel.setEnabled(selected);
853                reallocationWeight.setEnabled(selected);
854                TacticsTab.this.updateLaunchConfigurationDialog();
855        }
856        
857 
858        /**
859         * 
860         */
861        private void updateProcessingRateSelection() {
862                boolean selected = useProcessingRateButton
863                                .getSelection();
864                processingRateThresholdHighUtilisationLabel
865                                .setEnabled(selected);
866                processingRateThresholdHighUtilisation
867                                .setEnabled(selected);
868                processingRateThresholdLowUtilisationLabel
869                                .setEnabled(selected);
870                processingRateThresholdLowUtilisation
871                                .setEnabled(selected);
872                processingRateDecreaseFactorLabel
873                                .setEnabled(selected);
874                processingRateDecreaseFactor.setEnabled(selected);
875                processingRateIncreaseFactorLabel
876                                .setEnabled(selected);
877                processingRateIncreaseFactor.setEnabled(selected);
878                processingRateWeightLabel.setEnabled(selected);
879                processingRateWeight.setEnabled(selected);
880                TacticsTab.this
881                                .updateLaunchConfigurationDialog();
882        }
883}

[all classes][de.uka.ipd.sdq.dsexplore.launch]
EMMA 2.0.9414 (unsupported private build) (C) Vladimir Roubtsov