1
2
3
4
5
6
7 package org.mule.example.gpswalker;
8
9 import org.mule.api.annotations.Schedule;
10
11 import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
12
13
14
15
16 public class CityStroller
17 {
18
19 public static final GpsCoord SAN_FRANCISCO = new GpsCoord(37.789167f, -122.419281f);
20 public static final GpsCoord LONDON = new GpsCoord(37.788423f, -122.39823f);
21 public static final GpsCoord VALLETTA = new GpsCoord(35.898504f, 14.514313f);
22
23
24 private volatile GpsCoord currentCoord = SAN_FRANCISCO;
25 private AtomicBoolean firstTime = new AtomicBoolean(true);
26
27
28 public GpsCoord generateNextCoord()
29 {
30 if (firstTime.get())
31 {
32 firstTime.set(false);
33 }
34 else
35 {
36 double dist = Math.random() * 0.002;
37 double angle = Math.random() * Math.PI;
38
39
40 float lat = currentCoord.getLatitude() + (float) (dist * Math.sin(angle));
41 float lng = currentCoord.getLongitude() + (float) (dist * Math.cos(angle));
42
43 currentCoord = new GpsCoord(lat, lng);
44 }
45 return currentCoord;
46 }
47
48 public GpsCoord getCurrentCoord()
49 {
50 return currentCoord;
51 }
52
53 public void setCurrentCoord(GpsCoord currentCoord)
54 {
55 this.currentCoord = currentCoord;
56 firstTime.set(false);
57 }
58 }