Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extEditing / src / org / gvsig / editing / gui / cad / tools / smc / CircleCADToolContext.java @ 29685

History | View | Annotate | Download (15.6 KB)

1

    
2
//
3
// Vicente Caballero Navarro
4

    
5

    
6
package org.gvsig.editing.gui.cad.tools.smc;
7

    
8
import java.awt.event.InputEvent;
9

    
10
import org.gvsig.andami.PluginServices;
11
import org.gvsig.editing.gui.cad.tools.CircleCADTool;
12

    
13

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

    
21
    public CircleCADToolContext(CircleCADTool owner)
22
    {
23
        super();
24

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

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

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

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

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

    
63
        return ((CircleCADToolState) _state);
64
    }
65

    
66
    protected CircleCADTool getOwner()
67
    {
68
        return (_owner);
69
    }
70

    
71
//---------------------------------------------------------------
72
// Member data.
73
//
74

    
75
    transient private CircleCADTool _owner;
76

    
77
//---------------------------------------------------------------
78
// Inner classes.
79
//
80

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

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

    
93
        protected void Entry(CircleCADToolContext context) {}
94
        protected void Exit(CircleCADToolContext context) {}
95

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

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

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

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

    
121
    //-----------------------------------------------------------
122
    // Member data.
123
    //
124
    }
125

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

    
132
    //-----------------------------------------------------------
133
    // Member data.
134
    //
135

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

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

    
156
    }
157

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

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

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

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

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

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

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

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

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

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

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

    
226
                }
227
            }
228

    
229
            return;
230
        }
231

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

    
236
            boolean loopbackFlag =
237
                context.getState().getName().equals(
238
                    Circle.CenterPointOr3p.getName());
239

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

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

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

    
259
            }
260
            return;
261
        }
262

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

    
267
            boolean loopbackFlag =
268
                context.getState().getName().equals(
269
                    Circle.CenterPointOr3p.getName());
270

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

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

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

    
290
            }
291
            return;
292
        }
293

    
294
    //-----------------------------------------------------------
295
    // Inner classse.
296
    //
297

    
298

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

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

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

    
315
                ctxt.setQuestion(PluginServices.getText(this,"insert_central_point_or_3p")+
316
                "["+PluginServices.getText(this,"CircleCADTool.3p")+"]");
317
                ctxt.setDescription(new String[]{"cancel", "3P"});
318
                return;
319
            }
320

    
321
            protected void addOption(CircleCADToolContext context, String s)
322
            {
323
                CircleCADTool ctxt = context.getOwner();
324

    
325
                if (s.equalsIgnoreCase(PluginServices.getText(this,"CircleCADTool.3p")))
326
                {
327

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

    
347
                return;
348
            }
349

    
350
            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
351
            {
352
                CircleCADTool ctxt = context.getOwner();
353

    
354

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

    
371
        //-------------------------------------------------------
372
        // Member data.
373
        //
374
        }
375

    
376
        private static final class Circle_PointOrRadius
377
            extends Circle_Default
378
        {
379
        //-------------------------------------------------------
380
        // Member methods.
381
        //
382

    
383
            private Circle_PointOrRadius(String name, int id)
384
            {
385
                super (name, id);
386
            }
387

    
388
            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
389
            {
390
                CircleCADTool ctxt = context.getOwner();
391

    
392

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

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

    
411

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

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

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

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

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

    
447

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

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

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

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

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

    
485

    
486
                (context.getState()).Exit(context);
487
                context.clearState();
488
                try
489
                {
490
                    ctxt.addPoint(pointX, pointY, event);
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
}