Statistics
| Revision:

root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / cad / tools / smc / ArcCADToolContext.java @ 4365

History | View | Annotate | Download (8.42 KB)

1

    
2
//
3
// Vicente Caballero Navarro
4

    
5

    
6
package com.iver.cit.gvsig.gui.cad.tools.smc;
7

    
8
import com.iver.cit.gvsig.gui.cad.tools.ArcCADTool;
9
import java.awt.event.InputEvent;
10

    
11
public final class ArcCADToolContext
12
    extends statemap.FSMContext
13
{
14
//---------------------------------------------------------------
15
// Member methods.
16
//
17

    
18
    public ArcCADToolContext(ArcCADTool owner)
19
    {
20
        super();
21

    
22
        _owner = owner;
23
        setState(Arc.FirstPoint);
24
        Arc.FirstPoint.Entry(this);
25
    }
26

    
27
    public void addOption(String s)
28
    {
29
        _transition = "addOption";
30
        getState().addOption(this, s);
31
        _transition = "";
32
        return;
33
    }
34

    
35
    public void addPoint(double pointX, double pointY, InputEvent event)
36
    {
37
        _transition = "addPoint";
38
        getState().addPoint(this, pointX, pointY, event);
39
        _transition = "";
40
        return;
41
    }
42

    
43
    public ArcCADToolState getState()
44
        throws statemap.StateUndefinedException
45
    {
46
        if (_state == null)
47
        {
48
            throw(
49
                new statemap.StateUndefinedException());
50
        }
51

    
52
        return ((ArcCADToolState) _state);
53
    }
54

    
55
    protected ArcCADTool getOwner()
56
    {
57
        return (_owner);
58
    }
59

    
60
//---------------------------------------------------------------
61
// Member data.
62
//
63

    
64
    transient private ArcCADTool _owner;
65

    
66
//---------------------------------------------------------------
67
// Inner classes.
68
//
69

    
70
    public static abstract class ArcCADToolState
71
        extends statemap.State
72
    {
73
    //-----------------------------------------------------------
74
    // Member methods.
75
    //
76

    
77
        protected ArcCADToolState(String name, int id)
78
        {
79
            super (name, id);
80
        }
81

    
82
        protected void Entry(ArcCADToolContext context) {}
83
        protected void Exit(ArcCADToolContext context) {}
84

    
85
        protected void addOption(ArcCADToolContext context, String s)
86
        {
87
            Default(context);
88
        }
89

    
90
        protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
91
        {
92
            Default(context);
93
        }
94

    
95
        protected void Default(ArcCADToolContext context)
96
        {
97
            throw (
98
                new statemap.TransitionUndefinedException(
99
                    "State: " +
100
                    context.getState().getName() +
101
                    ", Transition: " +
102
                    context.getTransition()));
103
        }
104

    
105
    //-----------------------------------------------------------
106
    // Member data.
107
    //
108
    }
109

    
110
    /* package */ static abstract class Arc
111
    {
112
    //-----------------------------------------------------------
113
    // Member methods.
114
    //
115

    
116
    //-----------------------------------------------------------
117
    // Member data.
118
    //
119

    
120
        //-------------------------------------------------------
121
        // Statics.
122
        //
123
        /* package */ static Arc_Default.Arc_FirstPoint FirstPoint;
124
        /* package */ static Arc_Default.Arc_SecondPoint SecondPoint;
125
        /* package */ static Arc_Default.Arc_ThirdPoint ThirdPoint;
126
        private static Arc_Default Default;
127

    
128
        static
129
        {
130
            FirstPoint = new Arc_Default.Arc_FirstPoint("Arc.FirstPoint", 0);
131
            SecondPoint = new Arc_Default.Arc_SecondPoint("Arc.SecondPoint", 1);
132
            ThirdPoint = new Arc_Default.Arc_ThirdPoint("Arc.ThirdPoint", 2);
133
            Default = new Arc_Default("Arc.Default", -1);
134
        }
135

    
136
    }
137

    
138
    protected static class Arc_Default
139
        extends ArcCADToolState
140
    {
141
    //-----------------------------------------------------------
142
    // Member methods.
143
    //
144

    
145
        protected Arc_Default(String name, int id)
146
        {
147
            super (name, id);
148
        }
149

    
150
        protected void addOption(ArcCADToolContext context, String s)
151
        {
152
            ArcCADTool ctxt = context.getOwner();
153

    
154
            if (s.equals("Cancelar"))
155
            {
156
                boolean loopbackFlag =
157
                    context.getState().getName().equals(
158
                        Arc.FirstPoint.getName());
159

    
160
                if (loopbackFlag == false)
161
                {
162
                    (context.getState()).Exit(context);
163
                }
164

    
165
                context.clearState();
166
                try
167
                {
168
                    ctxt.end();
169
                }
170
                finally
171
                {
172
                    context.setState(Arc.FirstPoint);
173

    
174
                    if (loopbackFlag == false)
175
                    {
176
                        (context.getState()).Entry(context);
177
                    }
178

    
179
                }
180
            }
181
            else
182
            {
183
                super.addOption(context, s);
184
            }
185

    
186
            return;
187
        }
188

    
189
    //-----------------------------------------------------------
190
    // Inner classse.
191
    //
192

    
193

    
194
        private static final class Arc_FirstPoint
195
            extends Arc_Default
196
        {
197
        //-------------------------------------------------------
198
        // Member methods.
199
        //
200

    
201
            private Arc_FirstPoint(String name, int id)
202
            {
203
                super (name, id);
204
            }
205

    
206
            protected void Entry(ArcCADToolContext context)
207
            {
208
                ArcCADTool ctxt = context.getOwner();
209

    
210
                ctxt.setQuestion("ARCO" + "\n"+
211
                "Insertar primer punto");
212
                ctxt.setDescription(new String[]{"Cancelar"});
213
                return;
214
            }
215

    
216
            protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
217
            {
218
                ArcCADTool ctxt = context.getOwner();
219

    
220

    
221
                (context.getState()).Exit(context);
222
                context.clearState();
223
                try
224
                {
225
                    ctxt.setQuestion("Insertar segundo punto");
226
                    ctxt.setDescription(new String[]{"Cancelar"});
227
                    ctxt.addPoint(pointX, pointY, event);
228
                }
229
                finally
230
                {
231
                    context.setState(Arc.SecondPoint);
232
                    (context.getState()).Entry(context);
233
                }
234
                return;
235
            }
236

    
237
        //-------------------------------------------------------
238
        // Member data.
239
        //
240
        }
241

    
242
        private static final class Arc_SecondPoint
243
            extends Arc_Default
244
        {
245
        //-------------------------------------------------------
246
        // Member methods.
247
        //
248

    
249
            private Arc_SecondPoint(String name, int id)
250
            {
251
                super (name, id);
252
            }
253

    
254
            protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
255
            {
256
                ArcCADTool ctxt = context.getOwner();
257

    
258

    
259
                (context.getState()).Exit(context);
260
                context.clearState();
261
                try
262
                {
263
                    ctxt.setQuestion("Insertar ultimo punto");
264
                    ctxt.setDescription(new String[]{"Cancelar"});
265
                    ctxt.addPoint(pointX, pointY, event);
266
                }
267
                finally
268
                {
269
                    context.setState(Arc.ThirdPoint);
270
                    (context.getState()).Entry(context);
271
                }
272
                return;
273
            }
274

    
275
        //-------------------------------------------------------
276
        // Member data.
277
        //
278
        }
279

    
280
        private static final class Arc_ThirdPoint
281
            extends Arc_Default
282
        {
283
        //-------------------------------------------------------
284
        // Member methods.
285
        //
286

    
287
            private Arc_ThirdPoint(String name, int id)
288
            {
289
                super (name, id);
290
            }
291

    
292
            protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
293
            {
294
                ArcCADTool ctxt = context.getOwner();
295

    
296

    
297
                (context.getState()).Exit(context);
298
                context.clearState();
299
                try
300
                {
301
                    ctxt.addPoint(pointX, pointY, event);
302
                    ctxt.end();
303
                }
304
                finally
305
                {
306
                    context.setState(Arc.FirstPoint);
307
                    (context.getState()).Entry(context);
308
                }
309
                return;
310
            }
311

    
312
        //-------------------------------------------------------
313
        // Member data.
314
        //
315
        }
316

    
317
    //-----------------------------------------------------------
318
    // Member data.
319
    //
320
    }
321
}