1c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/*
28ab8b411b81e4581060a31a97a0cb204a803b2e5Mike Lockwood * Copyright (C) 2008 The Android Open Source Project
3c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood *
4c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * use this file except in compliance with the License. You may obtain a copy of
6c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * the License at
7c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood *
8c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0
9c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood *
10c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Unless required by applicable law or agreed to in writing, software
11c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * License for the specific language governing permissions and limitations under
14c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * the License.
15c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */
16c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
17191d898468d2f4910a684f429bec518320843744Mike Lockwoodpackage com.android.locationtracker.data;
18c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
19191d898468d2f4910a684f429bec518320843744Mike Lockwoodimport com.android.locationtracker.data.TrackerEntry.EntryType;
20c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
21c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.location.Location;
22c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
23c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/**
24c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Formats tracker data as KML output
25c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */
26c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodclass KMLFormatter implements IFormatter {
27c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
28c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    public String getHeader() {
29c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        LineBuilder builder = new LineBuilder();
30c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        builder.addLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
31c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        builder.addLine("<kml xmlns=\"http://earth.google.com/kml/2.2\">");
32c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        builder.addLine("<Document>");
33c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        return builder.toString();
34c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    }
35c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
36c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    public String getFooter() {
37c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        LineBuilder builder = new LineBuilder();
38c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        builder.addLine("</Document>");
39c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        builder.addLine("</kml>");
40c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        return builder.toString();
41c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    }
42c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
43c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    public String getOutput(TrackerEntry entry) {
44c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        LineBuilder builder = new LineBuilder();
45c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
46c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        if (entry.getType() == EntryType.LOCATION_TYPE) {
47c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
48c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            Location loc = entry.getLocation();
49c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("<Placemark>");
50c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("<description>");
51c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("accuracy = " + loc.getAccuracy());
52c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("distance from last network location  = "
53c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                    + entry.getDistFromNetLocation());
54c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("</description>");
55c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("<TimeStamp>");
56c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("<when>" + entry.getTimestamp() + "</when>");
57c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("</TimeStamp>");
58c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("<Point>");
59c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("<coordinates>");
60c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine(loc.getLongitude() + "," + loc.getLatitude() + ","
61c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                    + loc.getAltitude());
62c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("</coordinates>");
63c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("</Point>");
64c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            builder.addLine("</Placemark>");
65c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        }
66c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        return builder.toString();
67c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    }
68c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
69c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    private static class LineBuilder {
70c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        private StringBuilder mBuilder;
71c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
72c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        public LineBuilder() {
73c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            mBuilder = new StringBuilder();
74c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        }
75c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
76c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        public void addLine(String line) {
77c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            mBuilder.append(line);
78c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            mBuilder.append("\n");
79c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        }
80c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
81c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        @Override
82c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        public String toString() {
83c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            return mBuilder.toString();
84c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        }
85c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
86c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    }
87c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
88c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood}
89