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