Statistics
| Revision:

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

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

    
13

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

    
21
    public EditVertexCADToolContext(EditVertexCADTool owner)
22
    {
23
        super();
24

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

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

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

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

    
75
    transient private EditVertexCADTool _owner;
76

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

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

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

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

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

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

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

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

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

    
136
        //-------------------------------------------------------
137
        // Statics.
138
        //
139
        /* package */ static EditVertex_Default.EditVertex_SelectVertexOrDelete SelectVertexOrDelete;
140
        /* package */ static EditVertex_Default.EditVertex_AddVertex AddVertex;
141
        private static EditVertex_Default Default;
142

    
143
        static
144
        {
145
            SelectVertexOrDelete = new EditVertex_Default.EditVertex_SelectVertexOrDelete("EditVertex.SelectVertexOrDelete", 0);
146
            AddVertex = new EditVertex_Default.EditVertex_AddVertex("EditVertex.AddVertex", 1);
147
            Default = new EditVertex_Default("EditVertex.Default", -1);
148
        }
149

    
150
    }
151

    
152
    protected static class EditVertex_Default
153
        extends EditVertexCADToolState
154
    {
155
    //-----------------------------------------------------------
156
    // Member methods.
157
    //
158

    
159
        protected EditVertex_Default(String name, int id)
160
        {
161
            super (name, id);
162
        }
163

    
164
        protected void addOption(EditVertexCADToolContext context, String s)
165
        {
166
            EditVertexCADTool ctxt = context.getOwner();
167

    
168
            if (s.equals(PluginServices.getText(this,"cancel")))
169
            {
170
                boolean loopbackFlag =
171
                    context.getState().getName().equals(
172
                        EditVertex.SelectVertexOrDelete.getName());
173

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

    
179
                context.clearState();
180
                try
181
                {
182
                    ctxt.end();
183
                }
184
                finally
185
                {
186
                    context.setState(EditVertex.SelectVertexOrDelete);
187

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

    
193
                }
194
            }
195
            else
196
            {
197
                boolean loopbackFlag =
198
                    context.getState().getName().equals(
199
                        EditVertex.SelectVertexOrDelete.getName());
200

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

    
206
                context.clearState();
207
                try
208
                {
209
                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
210
                }
211
                finally
212
                {
213
                    context.setState(EditVertex.SelectVertexOrDelete);
214

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

    
220
                }
221
            }
222

    
223
            return;
224
        }
225

    
226
        protected void addValue(EditVertexCADToolContext context, double d)
227
        {
228
            EditVertexCADTool ctxt = context.getOwner();
229

    
230
            boolean loopbackFlag =
231
                context.getState().getName().equals(
232
                    EditVertex.SelectVertexOrDelete.getName());
233

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

    
239
            context.clearState();
240
            try
241
            {
242
                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
243
            }
244
            finally
245
            {
246
                context.setState(EditVertex.SelectVertexOrDelete);
247

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

    
253
            }
254
            return;
255
        }
256

    
257
        protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
258
        {
259
            EditVertexCADTool ctxt = context.getOwner();
260

    
261
            boolean loopbackFlag =
262
                context.getState().getName().equals(
263
                    EditVertex.SelectVertexOrDelete.getName());
264

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

    
270
            context.clearState();
271
            try
272
            {
273
                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
274
            }
275
            finally
276
            {
277
                context.setState(EditVertex.SelectVertexOrDelete);
278

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

    
284
            }
285
            return;
286
        }
287

    
288
    //-----------------------------------------------------------
289
    // Inner classse.
290
    //
291

    
292

    
293
        private static final class EditVertex_SelectVertexOrDelete
294
            extends EditVertex_Default
295
        {
296
        //-------------------------------------------------------
297
        // Member methods.
298
        //
299

    
300
            private EditVertex_SelectVertexOrDelete(String name, int id)
301
            {
302
                super (name, id);
303
            }
304

    
305
            protected void Entry(EditVertexCADToolContext context)
306
            {
307
                EditVertexCADTool ctxt = context.getOwner();
308

    
309
                ctxt.selection();
310
                ctxt.setQuestion(PluginServices.getText(this,"point")+", "+
311
                    PluginServices.getText(this,"next")+
312
                    "["+PluginServices.getText(this,"EditVertexCADTool.nextvertex")+"], "+
313
                     PluginServices.getText(this,"previous")+
314
                    "["+PluginServices.getText(this,"EditVertexCADTool.previousvertex")+"], "+
315
                     PluginServices.getText(this,"add")+
316
                    "["+PluginServices.getText(this,"EditVertexCADTool.addvertex")+"] "+
317
                    PluginServices.getText(this,"cad.or")+" "+
318
                     PluginServices.getText(this,"del")+
319
                    "["+PluginServices.getText(this,"EditVertexCADTool.delvertex")+"]");
320
                ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
321
                return;
322
            }
323

    
324
            protected void addOption(EditVertexCADToolContext context, String s)
325
            {
326
                EditVertexCADTool ctxt = context.getOwner();
327

    
328
                if (s.equals("i") || s.equals("I") || s.equals(PluginServices.getText(this,"add")))
329
                {
330

    
331
                    (context.getState()).Exit(context);
332
                    context.clearState();
333
                    try
334
                    {
335
                        ctxt.setQuestion(PluginServices.getText(this,"add_vertex"));
336
                        ctxt.setDescription(new String[]{"cancel"});
337
                        ctxt.addOption(s);
338
                    }
339
                    finally
340
                    {
341
                        context.setState(EditVertex.AddVertex);
342
                        (context.getState()).Entry(context);
343
                    }
344
                }
345
                else if (!s.equals("i") && !s.equals("I") && !s.equals(PluginServices.getText(this,"add")))
346
                {
347
                    EditVertexCADToolState endState = context.getState();
348

    
349
                    context.clearState();
350
                    try
351
                    {
352
                        ctxt.setQuestion(PluginServices.getText(this,"point")+", "+
353
                                    PluginServices.getText(this,"next")+
354
                                    "["+PluginServices.getText(this,"EditVertexCADTool.nextvertex")+"], "+
355
                                     PluginServices.getText(this,"previous")+
356
                                    "["+PluginServices.getText(this,"EditVertexCADTool.previousvertex")+"], "+
357
                                     PluginServices.getText(this,"add")+
358
                                    "["+PluginServices.getText(this,"EditVertexCADTool.addvertex")+"] "+
359
                                    PluginServices.getText(this,"cad.or")+" "+
360
                                     PluginServices.getText(this,"del")+
361
                                    "["+PluginServices.getText(this,"EditVertexCADTool.delvertex")+"]");
362
                        ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
363
                        ctxt.addOption(s);
364
                    }
365
                    finally
366
                    {
367
                        context.setState(endState);
368
                    }
369
                }                else
370
                {
371
                    super.addOption(context, s);
372
                }
373

    
374
                return;
375
            }
376

    
377
            protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
378
            {
379
                EditVertexCADTool ctxt = context.getOwner();
380

    
381
                EditVertexCADToolState endState = context.getState();
382

    
383
                context.clearState();
384
                try
385
                {
386
                    ctxt.setQuestion(PluginServices.getText(this,"select_from_point"));
387
                    ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
388
                    ctxt.addPoint(pointX, pointY, event);
389
                }
390
                finally
391
                {
392
                    context.setState(endState);
393
                }
394
                return;
395
            }
396

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

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

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

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

    
418

    
419
                (context.getState()).Exit(context);
420
                context.clearState();
421
                try
422
                {
423
                    ctxt.setQuestion(PluginServices.getText(this,"select_from_point"));
424
                    ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
425
                    ctxt.addPoint(pointX, pointY, event);
426
                }
427
                finally
428
                {
429
                    context.setState(EditVertex.SelectVertexOrDelete);
430
                    (context.getState()).Entry(context);
431
                }
432
                return;
433
            }
434

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

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