CSVFormatter.java revision 8ab8b411b81e4581060a31a97a0cb204a803b2e5
14774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall/* 2518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * Copyright (C) 2008 The Android Open Source Project 3518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * 44774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * Licensed under the Apache License, Version 2.0 (the "License"); 54774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * you may not use this file except in compliance with the License. 64774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * You may obtain a copy of the License at 7518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * 84774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * http://www.apache.org/licenses/LICENSE-2.0 9518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * 104774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * Unless required by applicable law or agreed to in writing, software 114774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * distributed under the License is distributed on an "AS IS" BASIS, 124774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * See the License for the specific language governing permissions and 14518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * limitations under the License. 15518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian */ 16518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian 171c8e95cf86f2182986385bc1ee85f13f425f3a3aJamie Gennispackage com.android.locationtracker.data; 181c8e95cf86f2182986385bc1ee85f13f425f3a3aJamie Gennis 19518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopianimport com.android.locationtracker.data.TrackerEntry.EntryType; 20518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian 21518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian/** 22518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * Formats tracker data as CSV output 23518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian */ 24518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopianclass CSVFormatter implements IFormatter { 25518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian 26518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian private static final String DELIMITER = ", "; 27518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian 28518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian public String getHeader() { 29518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian StringBuilder csvBuilder = new StringBuilder(); 30518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian for (String col : TrackerEntry.ATTRIBUTES) { 317db993a98b9239bd4e384cc4aa128262fe3cf52cMathias Agopian // skip type and id column 32518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian if (!TrackerEntry.ENTRY_TYPE.equals(col) && 33518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian !TrackerEntry.ID_COL.equals(col)) { 34518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian csvBuilder.append(col); 35518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian csvBuilder.append(DELIMITER); 36518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 37518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 381c8e95cf86f2182986385bc1ee85f13f425f3a3aJamie Gennis csvBuilder.append("\n"); 39518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian return csvBuilder.toString(); 40518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 41518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian 420469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy public String getOutput(TrackerEntry entry) { 43518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian StringBuilder rowOutput = new StringBuilder(); 44518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian // these must match order of columns added in getHeader 45518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(entry.getTimestamp()); 46518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(DELIMITER); 47518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(entry.getTag()); 48518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(DELIMITER); 49ada798b7ca7cabc255aa159964b64975e7fdb2dfMathias Agopian //rowOutput.append(entry.getType()); 50518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian //rowOutput.append(DELIMITER); 51518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian if (entry.getType() == EntryType.LOCATION_TYPE) { 52518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian if (entry.getLocation().hasAccuracy()) { 53518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(entry.getLocation().getAccuracy()); 54518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 55bc2d79ed7ada6243f3690f94ab512c0ddcdbed12Mathias Agopian rowOutput.append(DELIMITER); 56bc2d79ed7ada6243f3690f94ab512c0ddcdbed12Mathias Agopian rowOutput.append(entry.getLocation().getLatitude()); 57518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(DELIMITER); 58518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(entry.getLocation().getLongitude()); 59518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(DELIMITER); 60518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian if (entry.getLocation().hasAltitude()) { 61518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(entry.getLocation().getAltitude()); 62518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 63518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(DELIMITER); 64518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian if (entry.getLocation().hasSpeed()) { 65518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(entry.getLocation().getSpeed()); 66518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 67518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(DELIMITER); 68518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian if (entry.getLocation().hasBearing()) { 69518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(entry.getLocation().getBearing()); 70518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 711c3d72a2291827fb15e2ef311a571c860e0dba41Jonas Yang rowOutput.append(DELIMITER); 721c3d72a2291827fb15e2ef311a571c860e0dba41Jonas Yang rowOutput.append(entry.getDistFromNetLocation()); 731c3d72a2291827fb15e2ef311a571c860e0dba41Jonas Yang rowOutput.append(DELIMITER); 741c3d72a2291827fb15e2ef311a571c860e0dba41Jonas Yang rowOutput.append(DateUtils.getKMLTimestamp(entry.getLocation() 75518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian .getTime())); 76518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(DELIMITER); 77518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 78518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append(entry.getLogMsg()); 79518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian rowOutput.append("\n"); 80518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian return rowOutput.toString(); 81518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 82518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian 83518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian public String getFooter() { 84518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian // not needed, return empty string 85518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian return ""; 86518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian } 87518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian} 88518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian