Statistics
| Revision:

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

History | View | Annotate | Download (12.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.EquidistanceCADTool;
12

    
13

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

    
21
    public EquidistanceCADToolContext(EquidistanceCADTool owner)
22
    {
23
        super();
24

    
25
        _owner = owner;
26
        setState(Equidistance.Distance);
27
        Equidistance.Distance.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 EquidistanceCADToolState getState()
55
        throws statemap.StateUndefinedException
56
    {
57
        if (_state == null)
58
        {
59
            throw(
60
                new statemap.StateUndefinedException());
61
        }
62

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

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

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

    
75
    transient private EquidistanceCADTool _owner;
76

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

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

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

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

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

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

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

    
111
        protected void Default(EquidistanceCADToolContext 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 Equidistance
127
    {
128
    //-----------------------------------------------------------
129
    // Member methods.
130
    //
131

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

    
136
        //-------------------------------------------------------
137
        // Statics.
138
        //
139
        /* package */ static Equidistance_Default.Equidistance_Distance Distance;
140
        /* package */ static Equidistance_Default.Equidistance_SecondPointDistance SecondPointDistance;
141
        /* package */ static Equidistance_Default.Equidistance_Position Position;
142
        private static Equidistance_Default Default;
143

    
144
        static
145
        {
146
            Distance = new Equidistance_Default.Equidistance_Distance("Equidistance.Distance", 0);
147
            SecondPointDistance = new Equidistance_Default.Equidistance_SecondPointDistance("Equidistance.SecondPointDistance", 1);
148
            Position = new Equidistance_Default.Equidistance_Position("Equidistance.Position", 2);
149
            Default = new Equidistance_Default("Equidistance.Default", -1);
150
        }
151

    
152
    }
153

    
154
    protected static class Equidistance_Default
155
        extends EquidistanceCADToolState
156
    {
157
    //-----------------------------------------------------------
158
    // Member methods.
159
    //
160

    
161
        protected Equidistance_Default(String name, int id)
162
        {
163
            super (name, id);
164
        }
165

    
166
        protected void addOption(EquidistanceCADToolContext context, String s)
167
        {
168
            EquidistanceCADTool ctxt = context.getOwner();
169

    
170
            if (s.equals(PluginServices.getText(this,"cancel")))
171
            {
172
                boolean loopbackFlag =
173
                    context.getState().getName().equals(
174
                        Equidistance.Distance.getName());
175

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

    
181
                context.clearState();
182
                try
183
                {
184
                    ctxt.end();
185
                }
186
                finally
187
                {
188
                    context.setState(Equidistance.Distance);
189

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

    
195
                }
196
            }
197
            else
198
            {
199
                boolean loopbackFlag =
200
                    context.getState().getName().equals(
201
                        Equidistance.Distance.getName());
202

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

    
208
                context.clearState();
209
                try
210
                {
211
                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
212
                }
213
                finally
214
                {
215
                    context.setState(Equidistance.Distance);
216

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

    
222
                }
223
            }
224

    
225
            return;
226
        }
227

    
228
        protected void addValue(EquidistanceCADToolContext context, double d)
229
        {
230
            EquidistanceCADTool ctxt = context.getOwner();
231

    
232
            boolean loopbackFlag =
233
                context.getState().getName().equals(
234
                    Equidistance.Distance.getName());
235

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

    
241
            context.clearState();
242
            try
243
            {
244
                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
245
            }
246
            finally
247
            {
248
                context.setState(Equidistance.Distance);
249

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

    
255
            }
256
            return;
257
        }
258

    
259
        protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
260
        {
261
            EquidistanceCADTool ctxt = context.getOwner();
262

    
263
            boolean loopbackFlag =
264
                context.getState().getName().equals(
265
                    Equidistance.Distance.getName());
266

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

    
272
            context.clearState();
273
            try
274
            {
275
                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
276
            }
277
            finally
278
            {
279
                context.setState(Equidistance.Distance);
280

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

    
286
            }
287
            return;
288
        }
289

    
290
    //-----------------------------------------------------------
291
    // Inner classse.
292
    //
293

    
294

    
295
        private static final class Equidistance_Distance
296
            extends Equidistance_Default
297
        {
298
        //-------------------------------------------------------
299
        // Member methods.
300
        //
301

    
302
            private Equidistance_Distance(String name, int id)
303
            {
304
                super (name, id);
305
            }
306

    
307
            protected void Entry(EquidistanceCADToolContext context)
308
            {
309
                EquidistanceCADTool ctxt = context.getOwner();
310

    
311
                ctxt.selection();
312
                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point_or_distance"));
313
                ctxt.setDescription(new String[]{"cancel"});
314
                return;
315
            }
316

    
317
            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
318
            {
319
                EquidistanceCADTool ctxt = context.getOwner();
320

    
321

    
322
                (context.getState()).Exit(context);
323
                context.clearState();
324
                try
325
                {
326
                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
327
                    ctxt.setDescription(new String[]{"cancel"});
328
                    ctxt.addPoint(pointX, pointY, event);
329
                }
330
                finally
331
                {
332
                    context.setState(Equidistance.SecondPointDistance);
333
                    (context.getState()).Entry(context);
334
                }
335
                return;
336
            }
337

    
338
            protected void addValue(EquidistanceCADToolContext context, double d)
339
            {
340
                EquidistanceCADTool ctxt = context.getOwner();
341

    
342

    
343
                (context.getState()).Exit(context);
344
                context.clearState();
345
                try
346
                {
347
                    ctxt.setQuestion(PluginServices.getText(this,"position"));
348
                    ctxt.setDescription(new String[]{"cancel"});
349
                    ctxt.addValue(d);
350
                }
351
                finally
352
                {
353
                    context.setState(Equidistance.Position);
354
                    (context.getState()).Entry(context);
355
                }
356
                return;
357
            }
358

    
359
        //-------------------------------------------------------
360
        // Member data.
361
        //
362
        }
363

    
364
        private static final class Equidistance_SecondPointDistance
365
            extends Equidistance_Default
366
        {
367
        //-------------------------------------------------------
368
        // Member methods.
369
        //
370

    
371
            private Equidistance_SecondPointDistance(String name, int id)
372
            {
373
                super (name, id);
374
            }
375

    
376
            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
377
            {
378
                EquidistanceCADTool ctxt = context.getOwner();
379

    
380

    
381
                (context.getState()).Exit(context);
382
                context.clearState();
383
                try
384
                {
385
                    ctxt.setQuestion(PluginServices.getText(this,"position"));
386
                    ctxt.setDescription(new String[]{"cancel"});
387
                    ctxt.addPoint(pointX, pointY, event);
388
                }
389
                finally
390
                {
391
                    context.setState(Equidistance.Position);
392
                    (context.getState()).Entry(context);
393
                }
394
                return;
395
            }
396

    
397
        //-------------------------------------------------------
398
        // Member data.
399
        //
400
        }
401

    
402
        private static final class Equidistance_Position
403
            extends Equidistance_Default
404
        {
405
        //-------------------------------------------------------
406
        // Member methods.
407
        //
408

    
409
            private Equidistance_Position(String name, int id)
410
            {
411
                super (name, id);
412
            }
413

    
414
            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
415
            {
416
                EquidistanceCADTool ctxt = context.getOwner();
417

    
418

    
419
                (context.getState()).Exit(context);
420
                context.clearState();
421
                try
422
                {
423
                    ctxt.setDescription(new String[]{"cancel"});
424
                    ctxt.addPoint(pointX, pointY, event);
425
                    ctxt.end();
426
                }
427
                finally
428
                {
429
                    context.setState(Equidistance.Distance);
430
                    (context.getState()).Entry(context);
431
                }
432
                return;
433
            }
434

    
435
        //-------------------------------------------------------
436
        // Member data.
437
        //
438
        }
439

    
440
    //-----------------------------------------------------------
441
    // Member data.
442
    //
443
    }
444
}