Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / cad / tools / smc / MoveCADToolContext.java @ 13561

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

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

    
19
    public MoveCADToolContext(MoveCADTool owner)
20
    {
21
        super();
22

    
23
        _owner = owner;
24
        setState(Move.FirstPointToMove);
25
        Move.FirstPointToMove.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 MoveCADToolState getState()
53
        throws statemap.StateUndefinedException
54
    {
55
        if (_state == null)
56
        {
57
            throw(
58
                new statemap.StateUndefinedException());
59
        }
60

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

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

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

    
73
    transient private MoveCADTool _owner;
74

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

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

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

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

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

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

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

    
109
        protected void Default(MoveCADToolContext 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 Move
125
    {
126
    //-----------------------------------------------------------
127
    // Member methods.
128
    //
129

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

    
134
        //-------------------------------------------------------
135
        // Statics.
136
        //
137
        /* package */ static Move_Default.Move_FirstPointToMove FirstPointToMove;
138
        /* package */ static Move_Default.Move_SecondPointToMove SecondPointToMove;
139
        private static Move_Default Default;
140

    
141
        static
142
        {
143
            FirstPointToMove = new Move_Default.Move_FirstPointToMove("Move.FirstPointToMove", 0);
144
            SecondPointToMove = new Move_Default.Move_SecondPointToMove("Move.SecondPointToMove", 1);
145
            Default = new Move_Default("Move.Default", -1);
146
        }
147

    
148
    }
149

    
150
    protected static class Move_Default
151
        extends MoveCADToolState
152
    {
153
    //-----------------------------------------------------------
154
    // Member methods.
155
    //
156

    
157
        protected Move_Default(String name, int id)
158
        {
159
            super (name, id);
160
        }
161

    
162
        protected void addOption(MoveCADToolContext context, String s)
163
        {
164
            MoveCADTool ctxt = context.getOwner();
165

    
166
            if (s.equals(PluginServices.getText(this,"cancel")))
167
            {
168
                boolean loopbackFlag =
169
                    context.getState().getName().equals(
170
                        Move.FirstPointToMove.getName());
171

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

    
177
                context.clearState();
178
                try
179
                {
180
                    ctxt.end();
181
                }
182
                finally
183
                {
184
                    context.setState(Move.FirstPointToMove);
185

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

    
191
                }
192
            }
193
            else
194
            {
195
                boolean loopbackFlag =
196
                    context.getState().getName().equals(
197
                        Move.FirstPointToMove.getName());
198

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

    
204
                context.clearState();
205
                try
206
                {
207
                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
208
                }
209
                finally
210
                {
211
                    context.setState(Move.FirstPointToMove);
212

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

    
218
                }
219
            }
220

    
221
            return;
222
        }
223

    
224
        protected void addValue(MoveCADToolContext context, double d)
225
        {
226
            MoveCADTool ctxt = context.getOwner();
227

    
228
            boolean loopbackFlag =
229
                context.getState().getName().equals(
230
                    Move.FirstPointToMove.getName());
231

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

    
237
            context.clearState();
238
            try
239
            {
240
                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
241
            }
242
            finally
243
            {
244
                context.setState(Move.FirstPointToMove);
245

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

    
251
            }
252
            return;
253
        }
254

    
255
        protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
256
        {
257
            MoveCADTool ctxt = context.getOwner();
258

    
259
            boolean loopbackFlag =
260
                context.getState().getName().equals(
261
                    Move.FirstPointToMove.getName());
262

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

    
268
            context.clearState();
269
            try
270
            {
271
                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
272
            }
273
            finally
274
            {
275
                context.setState(Move.FirstPointToMove);
276

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

    
282
            }
283
            return;
284
        }
285

    
286
    //-----------------------------------------------------------
287
    // Inner classse.
288
    //
289

    
290

    
291
        private static final class Move_FirstPointToMove
292
            extends Move_Default
293
        {
294
        //-------------------------------------------------------
295
        // Member methods.
296
        //
297

    
298
            private Move_FirstPointToMove(String name, int id)
299
            {
300
                super (name, id);
301
            }
302

    
303
            protected void Entry(MoveCADToolContext context)
304
            {
305
                MoveCADTool ctxt = context.getOwner();
306

    
307
                ctxt.selection();
308
                ctxt.setQuestion(PluginServices.getText(this,"insert_point_move"));
309
                ctxt.setDescription(new String[]{"cancel"});
310
                return;
311
            }
312

    
313
            protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
314
            {
315
                MoveCADTool ctxt = context.getOwner();
316

    
317

    
318
                (context.getState()).Exit(context);
319
                context.clearState();
320
                try
321
                {
322
                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point_move"));
323
                    ctxt.setDescription(new String[]{"cancel"});
324
                    ctxt.addPoint(pointX, pointY, event);
325
                }
326
                finally
327
                {
328
                    context.setState(Move.SecondPointToMove);
329
                    (context.getState()).Entry(context);
330
                }
331
                return;
332
            }
333

    
334
        //-------------------------------------------------------
335
        // Member data.
336
        //
337
        }
338

    
339
        private static final class Move_SecondPointToMove
340
            extends Move_Default
341
        {
342
        //-------------------------------------------------------
343
        // Member methods.
344
        //
345

    
346
            private Move_SecondPointToMove(String name, int id)
347
            {
348
                super (name, id);
349
            }
350

    
351
            protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
352
            {
353
                MoveCADTool ctxt = context.getOwner();
354

    
355

    
356
                (context.getState()).Exit(context);
357
                context.clearState();
358
                try
359
                {
360
                    ctxt.setDescription(new String[]{"cancel"});
361
                    ctxt.addPoint(pointX, pointY, event);
362
                    ctxt.end();
363
                    ctxt.refresh();
364
                }
365
                finally
366
                {
367
                    context.setState(Move.FirstPointToMove);
368
                    (context.getState()).Entry(context);
369
                }
370
                return;
371
            }
372

    
373
        //-------------------------------------------------------
374
        // Member data.
375
        //
376
        }
377

    
378
    //-----------------------------------------------------------
379
    // Member data.
380
    //
381
    }
382
}