Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: b800e2cbe224deba94f0be458d9608c7bda76649 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*******************************************************************************
 * Copyright (c) 2007 Wind River Systems, Inc. and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 *  
 * Contributors:
 *     Wind River Systems - initial API and implementation
 *******************************************************************************/
package com.windriver.debug.tcf.ui.model;

import java.util.Arrays;

import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
import org.eclipse.swt.graphics.RGB;

import com.windriver.debug.tcf.core.model.TCFLaunch;

public class TCFNodeLaunch extends TCFNode {
    
    private final TCFChildren children; 

    TCFNodeLaunch(TCFModel model) {
        super(model);
        children = new TCFChildrenExecContext(this);
    }

    @Override
    void dispose() {
        children.dispose();
        super.dispose();
    }

    @Override
    void dispose(String id) {
        children.dispose(id);
    }

    @Override
    protected void getData(IChildrenCountUpdate result) {
        result.setChildCount(children.size());
    }
    
    @Override
    protected void getData(IChildrenUpdate result) {
        int offset = 0;
        TCFNode[] arr = children.toArray();
        Arrays.sort(arr);
        for (TCFNode n : arr) {
            if (offset >= result.getOffset() && offset < result.getOffset() + result.getLength()) {
                result.setChild(n, offset);
            }
            offset++;
        }
    }
    
    @Override
    protected void getData(IHasChildrenUpdate result) {
        result.setHasChilren(children.size() > 0);
    }
    
    @Override
    protected void getData(ILabelUpdate result) {
        result.setImageDescriptor(getImageDescriptor(getImageName()), 0);
        String label = id;
        TCFLaunch launch = model.getLaunch();
        String status = "";
        if (launch.isConnecting()) status = "Connecting";
        else if (launch.isDisconnected()) status = "Disconnected";
        else if (launch.isTerminated()) status = "Terminated";
        Throwable error = launch.getError();
        if (error != null) {
            status += " - " + error;
            result.setForeground(new RGB(255, 0, 0), 0);
        }
        if (status.length() > 0) status = " (" + status + ")";
        label = launch.getLaunchConfiguration().getName() + status;
        result.setLabel(label, 0);
    }
    
    @Override
    ModelDelta makeModelDelta(int flags) {
        int count = -1;
        //if (node_valid == CF_ALL) count = children.size();
        ModelDelta delta = model.getDelta(this);
        if (delta == null) {
            delta = new ModelDelta(DebugPlugin.getDefault().getLaunchManager(), IModelDelta.NO_CHANGE);
            delta = delta.addNode(model.getLaunch(), -1, flags, count);
            model.addDelta(this, delta);
        }
        else {
            assert delta.getChildCount() == count;
            delta.setFlags(delta.getFlags() | flags);
        }
        return delta;
    }

    @Override
    protected void invalidateNode(int flags) {
        super.invalidateNode(flags);
        if ((flags & CF_CHILDREN) != 0) {
            children.invalidate();
        }
    }

    @Override
    protected boolean validateChildren(TCFRunnable done) {
        if (!children.valid && !children.validate(done)) return false;
        node_valid |= CF_CHILDREN;
        return true;
    }

    @Override
    protected String getImageName() {
        return "icons/full/obj16/ldebug_obj.gif";
    }
}

Back to the top