Statistics
| Revision:

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

History | View | Annotate | Download (13.3 KB)

1 3766 caballero
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.PolylineCADTool;
9 4324 caballero
import java.awt.event.InputEvent;
10 4584 caballero
import com.iver.andami.PluginServices;
11 3766 caballero
12
public final class PolylineCADToolContext
13
    extends statemap.FSMContext
14
{
15
//---------------------------------------------------------------
16
// Member methods.
17
//
18
19
    public PolylineCADToolContext(PolylineCADTool owner)
20
    {
21
        super();
22
23
        _owner = owner;
24 3978 caballero
        setState(Polyline.FirstPoint);
25
        Polyline.FirstPoint.Entry(this);
26 3766 caballero
    }
27
28 3832 caballero
    public void addOption(String s)
29 3766 caballero
    {
30
        _transition = "addOption";
31 3832 caballero
        getState().addOption(this, s);
32 3766 caballero
        _transition = "";
33
        return;
34
    }
35
36 4324 caballero
    public void addPoint(double pointX, double pointY, InputEvent event)
37 3766 caballero
    {
38
        _transition = "addPoint";
39 4324 caballero
        getState().addPoint(this, pointX, pointY, event);
40 3766 caballero
        _transition = "";
41
        return;
42
    }
43
44
    public PolylineCADToolState getState()
45
        throws statemap.StateUndefinedException
46
    {
47
        if (_state == null)
48
        {
49
            throw(
50
                new statemap.StateUndefinedException());
51
        }
52
53
        return ((PolylineCADToolState) _state);
54
    }
55
56
    protected PolylineCADTool getOwner()
57
    {
58
        return (_owner);
59
    }
60
61
//---------------------------------------------------------------
62
// Member data.
63
//
64
65
    transient private PolylineCADTool _owner;
66
67
//---------------------------------------------------------------
68
// Inner classes.
69
//
70
71
    public static abstract class PolylineCADToolState
72
        extends statemap.State
73
    {
74
    //-----------------------------------------------------------
75
    // Member methods.
76
    //
77
78
        protected PolylineCADToolState(String name, int id)
79
        {
80
            super (name, id);
81
        }
82
83
        protected void Entry(PolylineCADToolContext context) {}
84
        protected void Exit(PolylineCADToolContext context) {}
85
86 3832 caballero
        protected void addOption(PolylineCADToolContext context, String s)
87 3766 caballero
        {
88
            Default(context);
89
        }
90
91 4324 caballero
        protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
92 3766 caballero
        {
93
            Default(context);
94
        }
95
96
        protected void Default(PolylineCADToolContext context)
97
        {
98
            throw (
99
                new statemap.TransitionUndefinedException(
100
                    "State: " +
101
                    context.getState().getName() +
102
                    ", Transition: " +
103
                    context.getTransition()));
104
        }
105
106
    //-----------------------------------------------------------
107
    // Member data.
108
    //
109
    }
110
111 3978 caballero
    /* package */ static abstract class Polyline
112 3766 caballero
    {
113
    //-----------------------------------------------------------
114
    // Member methods.
115
    //
116
117
    //-----------------------------------------------------------
118
    // Member data.
119
    //
120
121
        //-------------------------------------------------------
122
        // Statics.
123
        //
124 3978 caballero
        /* package */ static Polyline_Default.Polyline_FirstPoint FirstPoint;
125
        /* package */ static Polyline_Default.Polyline_NextPointOrArcOrClose NextPointOrArcOrClose;
126
        /* package */ static Polyline_Default.Polyline_NextPointOrLineOrClose NextPointOrLineOrClose;
127
        private static Polyline_Default Default;
128 3766 caballero
129
        static
130
        {
131 3978 caballero
            FirstPoint = new Polyline_Default.Polyline_FirstPoint("Polyline.FirstPoint", 0);
132
            NextPointOrArcOrClose = new Polyline_Default.Polyline_NextPointOrArcOrClose("Polyline.NextPointOrArcOrClose", 1);
133
            NextPointOrLineOrClose = new Polyline_Default.Polyline_NextPointOrLineOrClose("Polyline.NextPointOrLineOrClose", 2);
134
            Default = new Polyline_Default("Polyline.Default", -1);
135 3766 caballero
        }
136
137
    }
138
139 3978 caballero
    protected static class Polyline_Default
140 3766 caballero
        extends PolylineCADToolState
141
    {
142
    //-----------------------------------------------------------
143
    // Member methods.
144
    //
145
146 3978 caballero
        protected Polyline_Default(String name, int id)
147 3766 caballero
        {
148
            super (name, id);
149
        }
150
151 3883 caballero
        protected void addOption(PolylineCADToolContext context, String s)
152
        {
153
            PolylineCADTool ctxt = context.getOwner();
154
155 4584 caballero
            if (s.equals(PluginServices.getText(this,"cancel")))
156 3883 caballero
            {
157
                boolean loopbackFlag =
158
                    context.getState().getName().equals(
159 3978 caballero
                        Polyline.FirstPoint.getName());
160 3883 caballero
161
                if (loopbackFlag == false)
162
                {
163
                    (context.getState()).Exit(context);
164
                }
165
166
                context.clearState();
167
                try
168
                {
169
                    ctxt.cancel();
170
                }
171
                finally
172
                {
173 3978 caballero
                    context.setState(Polyline.FirstPoint);
174 3883 caballero
175
                    if (loopbackFlag == false)
176
                    {
177
                        (context.getState()).Entry(context);
178
                    }
179
180
                }
181
            }
182 4002 fjp
            else if (s.equals(""))
183 3883 caballero
            {
184 4002 fjp
                boolean loopbackFlag =
185
                    context.getState().getName().equals(
186
                        Polyline.FirstPoint.getName());
187
188
                if (loopbackFlag == false)
189
                {
190
                    (context.getState()).Exit(context);
191
                }
192
193
                context.clearState();
194
                try
195
                {
196
                    ctxt.endGeometry();
197
                }
198
                finally
199
                {
200
                    context.setState(Polyline.FirstPoint);
201
202
                    if (loopbackFlag == false)
203
                    {
204
                        (context.getState()).Entry(context);
205
                    }
206
207
                }
208
            }            else
209
            {
210 3883 caballero
                super.addOption(context, s);
211
            }
212
213
            return;
214
        }
215
216 3766 caballero
    //-----------------------------------------------------------
217
    // Inner classse.
218
    //
219
220
221 3978 caballero
        private static final class Polyline_FirstPoint
222
            extends Polyline_Default
223 3766 caballero
        {
224
        //-------------------------------------------------------
225
        // Member methods.
226
        //
227
228 3978 caballero
            private Polyline_FirstPoint(String name, int id)
229 3766 caballero
            {
230
                super (name, id);
231
            }
232
233
            protected void Entry(PolylineCADToolContext context)
234
            {
235
                PolylineCADTool ctxt = context.getOwner();
236
237 4892 caballero
                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
238 4584 caballero
                ctxt.setDescription(new String[]{"cancel"});
239 3766 caballero
                return;
240
            }
241
242 4324 caballero
            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
243 3766 caballero
            {
244
                PolylineCADTool ctxt = context.getOwner();
245
246
247
                (context.getState()).Exit(context);
248
                context.clearState();
249
                try
250
                {
251 4584 caballero
                    ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_arc_or_close"));
252 5172 caballero
                    ctxt.setDescription(new String[]{"inter_arc", "close", "cancel"});
253 4365 caballero
                    ctxt.addPoint(pointX, pointY, event);
254 3766 caballero
                }
255
                finally
256
                {
257 3978 caballero
                    context.setState(Polyline.NextPointOrArcOrClose);
258 3766 caballero
                    (context.getState()).Entry(context);
259
                }
260
                return;
261
            }
262
263
        //-------------------------------------------------------
264
        // Member data.
265
        //
266
        }
267
268 3978 caballero
        private static final class Polyline_NextPointOrArcOrClose
269
            extends Polyline_Default
270 3766 caballero
        {
271
        //-------------------------------------------------------
272
        // Member methods.
273
        //
274
275 3978 caballero
            private Polyline_NextPointOrArcOrClose(String name, int id)
276 3766 caballero
            {
277
                super (name, id);
278
            }
279
280 3832 caballero
            protected void addOption(PolylineCADToolContext context, String s)
281 3766 caballero
            {
282
                PolylineCADTool ctxt = context.getOwner();
283
284 5172 caballero
                if (s.equals("A") ||  s.equals("a") || s.equals(PluginServices.getText(this,"inter_arc")))
285 3766 caballero
                {
286
287
                    (context.getState()).Exit(context);
288
                    context.clearState();
289
                    try
290
                    {
291 4584 caballero
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_line_or_close"));
292 5172 caballero
                        ctxt.setDescription(new String[]{"inter_line", "close", "cancel"});
293 3832 caballero
                        ctxt.addOption(s);
294 3766 caballero
                    }
295
                    finally
296
                    {
297 3978 caballero
                        context.setState(Polyline.NextPointOrLineOrClose);
298 3766 caballero
                        (context.getState()).Entry(context);
299
                    }
300
                }
301 4584 caballero
                else if (s.equals("C") ||  s.equals("c") || s.equals(PluginServices.getText(this,"close")))
302 3766 caballero
                {
303
304
                    (context.getState()).Exit(context);
305
                    context.clearState();
306
                    try
307
                    {
308 3832 caballero
                        ctxt.addOption(s);
309 3883 caballero
                        ctxt.closeGeometry();
310
                        ctxt.endGeometry();
311 3766 caballero
                        ctxt.end();
312
                    }
313
                    finally
314
                    {
315 3978 caballero
                        context.setState(Polyline.FirstPoint);
316 3766 caballero
                        (context.getState()).Entry(context);
317
                    }
318
                }                else
319
                {
320 3832 caballero
                    super.addOption(context, s);
321 3766 caballero
                }
322
323
                return;
324
            }
325
326 4324 caballero
            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
327 3766 caballero
            {
328
                PolylineCADTool ctxt = context.getOwner();
329
330
                PolylineCADToolState endState = context.getState();
331
332
                context.clearState();
333
                try
334
                {
335 4584 caballero
                    ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_arc_or_close"));
336 5172 caballero
                    ctxt.setDescription(new String[]{"inter_arc", "close", "cancel"});
337 4365 caballero
                    ctxt.addPoint(pointX, pointY, event);
338 3766 caballero
                }
339
                finally
340
                {
341
                    context.setState(endState);
342
                }
343
                return;
344
            }
345
346
        //-------------------------------------------------------
347
        // Member data.
348
        //
349
        }
350
351 3978 caballero
        private static final class Polyline_NextPointOrLineOrClose
352
            extends Polyline_Default
353 3766 caballero
        {
354
        //-------------------------------------------------------
355
        // Member methods.
356
        //
357
358 3978 caballero
            private Polyline_NextPointOrLineOrClose(String name, int id)
359 3766 caballero
            {
360
                super (name, id);
361
            }
362
363 3832 caballero
            protected void addOption(PolylineCADToolContext context, String s)
364 3766 caballero
            {
365
                PolylineCADTool ctxt = context.getOwner();
366
367 5172 caballero
                if (s.equals("N") ||  s.equals("n") || s.equals(PluginServices.getText(this,"inter_line")))
368 3766 caballero
                {
369
370
                    (context.getState()).Exit(context);
371
                    context.clearState();
372
                    try
373
                    {
374 4584 caballero
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_arc_or_close"));
375 5172 caballero
                        ctxt.setDescription(new String[]{"inter_arc", "close", "cancel"});
376 3832 caballero
                        ctxt.addOption(s);
377 3766 caballero
                    }
378
                    finally
379
                    {
380 3978 caballero
                        context.setState(Polyline.NextPointOrArcOrClose);
381 3766 caballero
                        (context.getState()).Entry(context);
382
                    }
383
                }
384 4584 caballero
                else if (s.equals("C") ||  s.equals("c") || s.equals(PluginServices.getText(this,"close")))
385 3766 caballero
                {
386
387
                    (context.getState()).Exit(context);
388
                    context.clearState();
389
                    try
390
                    {
391 3832 caballero
                        ctxt.addOption(s);
392 3883 caballero
                        ctxt.closeGeometry();
393
                        ctxt.endGeometry();
394 3766 caballero
                        ctxt.end();
395
                    }
396
                    finally
397
                    {
398 3978 caballero
                        context.setState(Polyline.FirstPoint);
399 3766 caballero
                        (context.getState()).Entry(context);
400
                    }
401
                }                else
402
                {
403 3832 caballero
                    super.addOption(context, s);
404 3766 caballero
                }
405
406
                return;
407
            }
408
409 4324 caballero
            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
410 3766 caballero
            {
411
                PolylineCADTool ctxt = context.getOwner();
412
413
                PolylineCADToolState endState = context.getState();
414
415
                context.clearState();
416
                try
417
                {
418 4584 caballero
                    ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_line_or_close"));
419 5172 caballero
                    ctxt.setDescription(new String[]{"inter_line", "close", "cancel"});
420 4365 caballero
                    ctxt.addPoint(pointX, pointY, event);
421 3766 caballero
                }
422
                finally
423
                {
424
                    context.setState(endState);
425
                }
426
                return;
427
            }
428
429
        //-------------------------------------------------------
430
        // Member data.
431
        //
432
        }
433
434
    //-----------------------------------------------------------
435
    // Member data.
436
    //
437
    }
438
}