Statistics
| Revision:

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

History | View | Annotate | Download (15.5 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.CircleCADTool;
9
import java.awt.event.InputEvent;
10
import com.iver.andami.PluginServices;
11

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

    
19
    public CircleCADToolContext(CircleCADTool owner)
20
    {
21
        super();
22

    
23
        _owner = owner;
24
        setState(Circle.CenterPointOr3p);
25
        Circle.CenterPointOr3p.Entry(this);
26
    }
27

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

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

    
44
    public void addValue(double d)
45
    {
46
        _transition = "addValue";
47
        getState().addValue(this, d);
48
        _transition = "";
49
        return;
50
    }
51

    
52
    public CircleCADToolState getState()
53
        throws statemap.StateUndefinedException
54
    {
55
        if (_state == null)
56
        {
57
            throw(
58
                new statemap.StateUndefinedException());
59
        }
60

    
61
        return ((CircleCADToolState) _state);
62
    }
63

    
64
    protected CircleCADTool getOwner()
65
    {
66
        return (_owner);
67
    }
68

    
69
//---------------------------------------------------------------
70
// Member data.
71
//
72

    
73
    transient private CircleCADTool _owner;
74

    
75
//---------------------------------------------------------------
76
// Inner classes.
77
//
78

    
79
    public static abstract class CircleCADToolState
80
        extends statemap.State
81
    {
82
    //-----------------------------------------------------------
83
    // Member methods.
84
    //
85

    
86
        protected CircleCADToolState(String name, int id)
87
        {
88
            super (name, id);
89
        }
90

    
91
        protected void Entry(CircleCADToolContext context) {}
92
        protected void Exit(CircleCADToolContext context) {}
93

    
94
        protected void addOption(CircleCADToolContext context, String s)
95
        {
96
            Default(context);
97
        }
98

    
99
        protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
100
        {
101
            Default(context);
102
        }
103

    
104
        protected void addValue(CircleCADToolContext context, double d)
105
        {
106
            Default(context);
107
        }
108

    
109
        protected void Default(CircleCADToolContext context)
110
        {
111
            throw (
112
                new statemap.TransitionUndefinedException(
113
                    "State: " +
114
                    context.getState().getName() +
115
                    ", Transition: " +
116
                    context.getTransition()));
117
        }
118

    
119
    //-----------------------------------------------------------
120
    // Member data.
121
    //
122
    }
123

    
124
    /* package */ static abstract class Circle
125
    {
126
    //-----------------------------------------------------------
127
    // Member methods.
128
    //
129

    
130
    //-----------------------------------------------------------
131
    // Member data.
132
    //
133

    
134
        //-------------------------------------------------------
135
        // Statics.
136
        //
137
        /* package */ static Circle_Default.Circle_CenterPointOr3p CenterPointOr3p;
138
        /* package */ static Circle_Default.Circle_PointOrRadius PointOrRadius;
139
        /* package */ static Circle_Default.Circle_SecondPoint SecondPoint;
140
        /* package */ static Circle_Default.Circle_ThirdPoint ThirdPoint;
141
        /* package */ static Circle_Default.Circle_FirstPoint FirstPoint;
142
        private static Circle_Default Default;
143

    
144
        static
145
        {
146
            CenterPointOr3p = new Circle_Default.Circle_CenterPointOr3p("Circle.CenterPointOr3p", 0);
147
            PointOrRadius = new Circle_Default.Circle_PointOrRadius("Circle.PointOrRadius", 1);
148
            SecondPoint = new Circle_Default.Circle_SecondPoint("Circle.SecondPoint", 2);
149
            ThirdPoint = new Circle_Default.Circle_ThirdPoint("Circle.ThirdPoint", 3);
150
            FirstPoint = new Circle_Default.Circle_FirstPoint("Circle.FirstPoint", 4);
151
            Default = new Circle_Default("Circle.Default", -1);
152
        }
153

    
154
    }
155

    
156
    protected static class Circle_Default
157
        extends CircleCADToolState
158
    {
159
    //-----------------------------------------------------------
160
    // Member methods.
161
    //
162

    
163
        protected Circle_Default(String name, int id)
164
        {
165
            super (name, id);
166
        }
167

    
168
        protected void addOption(CircleCADToolContext context, String s)
169
        {
170
            CircleCADTool ctxt = context.getOwner();
171

    
172
            if (s.equals(PluginServices.getText(this,"cancel")))
173
            {
174
                boolean loopbackFlag =
175
                    context.getState().getName().equals(
176
                        Circle.CenterPointOr3p.getName());
177

    
178
                if (loopbackFlag == false)
179
                {
180
                    (context.getState()).Exit(context);
181
                }
182

    
183
                context.clearState();
184
                try
185
                {
186
                    ctxt.end();
187
                }
188
                finally
189
                {
190
                    context.setState(Circle.CenterPointOr3p);
191

    
192
                    if (loopbackFlag == false)
193
                    {
194
                        (context.getState()).Entry(context);
195
                    }
196

    
197
                }
198
            }
199
            else
200
            {
201
                boolean loopbackFlag =
202
                    context.getState().getName().equals(
203
                        Circle.CenterPointOr3p.getName());
204

    
205
                if (loopbackFlag == false)
206
                {
207
                    (context.getState()).Exit(context);
208
                }
209

    
210
                context.clearState();
211
                try
212
                {
213
                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
214
                }
215
                finally
216
                {
217
                    context.setState(Circle.CenterPointOr3p);
218

    
219
                    if (loopbackFlag == false)
220
                    {
221
                        (context.getState()).Entry(context);
222
                    }
223

    
224
                }
225
            }
226

    
227
            return;
228
        }
229

    
230
        protected void addValue(CircleCADToolContext context, double d)
231
        {
232
            CircleCADTool ctxt = context.getOwner();
233

    
234
            boolean loopbackFlag =
235
                context.getState().getName().equals(
236
                    Circle.CenterPointOr3p.getName());
237

    
238
            if (loopbackFlag == false)
239
            {
240
                (context.getState()).Exit(context);
241
            }
242

    
243
            context.clearState();
244
            try
245
            {
246
                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
247
            }
248
            finally
249
            {
250
                context.setState(Circle.CenterPointOr3p);
251

    
252
                if (loopbackFlag == false)
253
                {
254
                    (context.getState()).Entry(context);
255
                }
256

    
257
            }
258
            return;
259
        }
260

    
261
        protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
262
        {
263
            CircleCADTool ctxt = context.getOwner();
264

    
265
            boolean loopbackFlag =
266
                context.getState().getName().equals(
267
                    Circle.CenterPointOr3p.getName());
268

    
269
            if (loopbackFlag == false)
270
            {
271
                (context.getState()).Exit(context);
272
            }
273

    
274
            context.clearState();
275
            try
276
            {
277
                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
278
            }
279
            finally
280
            {
281
                context.setState(Circle.CenterPointOr3p);
282

    
283
                if (loopbackFlag == false)
284
                {
285
                    (context.getState()).Entry(context);
286
                }
287

    
288
            }
289
            return;
290
        }
291

    
292
    //-----------------------------------------------------------
293
    // Inner classse.
294
    //
295

    
296

    
297
        private static final class Circle_CenterPointOr3p
298
            extends Circle_Default
299
        {
300
        //-------------------------------------------------------
301
        // Member methods.
302
        //
303

    
304
            private Circle_CenterPointOr3p(String name, int id)
305
            {
306
                super (name, id);
307
            }
308

    
309
            protected void Entry(CircleCADToolContext context)
310
            {
311
                CircleCADTool ctxt = context.getOwner();
312

    
313
                ctxt.setQuestion(PluginServices.getText(this,"insert_central_point_or_3p"));
314
                ctxt.setDescription(new String[]{"cancel", "3P"});
315
                return;
316
            }
317

    
318
            protected void addOption(CircleCADToolContext context, String s)
319
            {
320
                CircleCADTool ctxt = context.getOwner();
321

    
322
                if (s.equals("3p") || s.equals("3P"))
323
                {
324

    
325
                    (context.getState()).Exit(context);
326
                    context.clearState();
327
                    try
328
                    {
329
                        ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
330
                        ctxt.setDescription(new String[]{"cancel"});
331
                        ctxt.addOption(s);
332
                    }
333
                    finally
334
                    {
335
                        context.setState(Circle.FirstPoint);
336
                        (context.getState()).Entry(context);
337
                    }
338
                }
339
                else
340
                {
341
                    super.addOption(context, s);
342
                }
343

    
344
                return;
345
            }
346

    
347
            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
348
            {
349
                CircleCADTool ctxt = context.getOwner();
350

    
351

    
352
                (context.getState()).Exit(context);
353
                context.clearState();
354
                try
355
                {
356
                    ctxt.setQuestion(PluginServices.getText(this,"insert_radius_or_second_point"));
357
                    ctxt.setDescription(new String[]{"cancel"});
358
                    ctxt.addPoint(pointX, pointY, event);
359
                }
360
                finally
361
                {
362
                    context.setState(Circle.PointOrRadius);
363
                    (context.getState()).Entry(context);
364
                }
365
                return;
366
            }
367

    
368
        //-------------------------------------------------------
369
        // Member data.
370
        //
371
        }
372

    
373
        private static final class Circle_PointOrRadius
374
            extends Circle_Default
375
        {
376
        //-------------------------------------------------------
377
        // Member methods.
378
        //
379

    
380
            private Circle_PointOrRadius(String name, int id)
381
            {
382
                super (name, id);
383
            }
384

    
385
            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
386
            {
387
                CircleCADTool ctxt = context.getOwner();
388

    
389

    
390
                (context.getState()).Exit(context);
391
                context.clearState();
392
                try
393
                {
394
                    ctxt.addPoint(pointX, pointY, event);
395
                    ctxt.end();
396
                }
397
                finally
398
                {
399
                    context.setState(Circle.CenterPointOr3p);
400
                    (context.getState()).Entry(context);
401
                }
402
                return;
403
            }
404

    
405
            protected void addValue(CircleCADToolContext context, double d)
406
            {
407
                CircleCADTool ctxt = context.getOwner();
408

    
409

    
410
                (context.getState()).Exit(context);
411
                context.clearState();
412
                try
413
                {
414
                    ctxt.addValue(d);
415
                    ctxt.end();
416
                }
417
                finally
418
                {
419
                    context.setState(Circle.CenterPointOr3p);
420
                    (context.getState()).Entry(context);
421
                }
422
                return;
423
            }
424

    
425
        //-------------------------------------------------------
426
        // Member data.
427
        //
428
        }
429

    
430
        private static final class Circle_SecondPoint
431
            extends Circle_Default
432
        {
433
        //-------------------------------------------------------
434
        // Member methods.
435
        //
436

    
437
            private Circle_SecondPoint(String name, int id)
438
            {
439
                super (name, id);
440
            }
441

    
442
            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
443
            {
444
                CircleCADTool ctxt = context.getOwner();
445

    
446

    
447
                (context.getState()).Exit(context);
448
                context.clearState();
449
                try
450
                {
451
                    ctxt.setQuestion(PluginServices.getText(this,"insert_third_point"));
452
                    ctxt.setDescription(new String[]{"cancel"});
453
                    ctxt.addPoint(pointX, pointY, event);
454
                }
455
                finally
456
                {
457
                    context.setState(Circle.ThirdPoint);
458
                    (context.getState()).Entry(context);
459
                }
460
                return;
461
            }
462

    
463
        //-------------------------------------------------------
464
        // Member data.
465
        //
466
        }
467

    
468
        private static final class Circle_ThirdPoint
469
            extends Circle_Default
470
        {
471
        //-------------------------------------------------------
472
        // Member methods.
473
        //
474

    
475
            private Circle_ThirdPoint(String name, int id)
476
            {
477
                super (name, id);
478
            }
479

    
480
            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
481
            {
482
                CircleCADTool ctxt = context.getOwner();
483

    
484

    
485
                (context.getState()).Exit(context);
486
                context.clearState();
487
                try
488
                {
489
                    ctxt.addPoint(pointX, pointY, event);
490
                    ctxt.end();
491
                }
492
                finally
493
                {
494
                    context.setState(Circle.CenterPointOr3p);
495
                    (context.getState()).Entry(context);
496
                }
497
                return;
498
            }
499

    
500
        //-------------------------------------------------------
501
        // Member data.
502
        //
503
        }
504

    
505
        private static final class Circle_FirstPoint
506
            extends Circle_Default
507
        {
508
        //-------------------------------------------------------
509
        // Member methods.
510
        //
511

    
512
            private Circle_FirstPoint(String name, int id)
513
            {
514
                super (name, id);
515
            }
516

    
517
            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
518
            {
519
                CircleCADTool ctxt = context.getOwner();
520

    
521

    
522
                (context.getState()).Exit(context);
523
                context.clearState();
524
                try
525
                {
526
                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
527
                    ctxt.setDescription(new String[]{"cancel"});
528
                    ctxt.addPoint(pointX, pointY, event);
529
                }
530
                finally
531
                {
532
                    context.setState(Circle.SecondPoint);
533
                    (context.getState()).Entry(context);
534
                }
535
                return;
536
            }
537

    
538
        //-------------------------------------------------------
539
        // Member data.
540
        //
541
        }
542

    
543
    //-----------------------------------------------------------
544
    // Member data.
545
    //
546
    }
547
}