diff --git a/configuration/sailing.sh b/configuration/sailing.sh index 7efa3b8a5b7..a6e048ffb25 100644 --- a/configuration/sailing.sh +++ b/configuration/sailing.sh @@ -8,6 +8,7 @@ export EC2_HOME=/opt/amazon/ec2-api-tools-1.6.8.0 export EC2_URL=https://ec2.eu-west-1.amazonaws.com export JAVA_HOME=/opt/jdk1.8.0_45 export JAVA_1_7_HOME=/opt/jdk1.7.0_75 +export ANDROID_HOME=/opt/android-sdk-linux export PATH=$PATH:$JAVA_HOME/bin:/opt/amazon/ec2-api-tools-1.6.8.0/bin:/opt/amazon/bin diff --git a/ios/Pods/Pods.xcodeproj/project.pbxproj b/ios/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 142607cbd09..00000000000 --- a/ios/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2340 +0,0 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 01372C8D011695972338A77C - - children - - 8CB906BB24A8BD9735257403 - 9ED4BB76BBCC1A41E84BF0F2 - C47A12D2F2CF33BE81ECA5A0 - FF96D5CC872B30F3325ADEEF - 6AFFF5A41D74E8159E1C9AB6 - DB256D67D942AD2149D39DB6 - F431BB261ADA5E3199049992 - - isa - PBXGroup - name - Pods - path - Target Support Files/Pods - sourceTree - <group> - - 01BE99069A71784266B96879 - - fileRef - D7639E497E56ACF55CB9B05A - isa - PBXBuildFile - - 031E9FBE70153803F40DBC39 - - fileRef - E72DACF3684388DE8D81464B - isa - PBXBuildFile - - 0490E4DAB3DDB6D39DC97099 - - attributes - - LastUpgradeCheck - 0510 - - buildConfigurationList - D97E44F5AE41C9FA25AA624E - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - EFD66281F20897E102745D31 - productRefGroup - 7E0839CF90B700ABCAB46CC1 - projectDirPath - - projectReferences - - projectRoot - - targets - - E072BABCF079D3EE1B840FCE - E3CF112FD497FD85C96047C1 - 79C01B588CCBF3598A5027D9 - - - 05409CF62977D05709335386 - - buildConfigurations - - A90BA683EF8618FB6B06D409 - 64344A107EE3A7C5558F8A54 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 0621CCB2779F181A038DE450 - - fileRef - 29241EA195821F8149527277 - isa - PBXBuildFile - - 07ADB22806EB95E5C84A9685 - - fileRef - E72DACF3684388DE8D81464B - isa - PBXBuildFile - - 08146036336D621D790FE9F9 - - fileRef - C47A12D2F2CF33BE81ECA5A0 - isa - PBXBuildFile - - 0A12EC1BA4EE2914D6C6E51C - - fileRef - 1882839278BDF020896AE927 - isa - PBXBuildFile - - 0A8023FAEDB19C3F1E8571E7 - - fileRef - D3886E0C456A583AA1B6A2B1 - isa - PBXBuildFile - - 0A89F58135F1E6AC6B6ADBBF - - buildConfigurations - - E1D24D3A579F134CCA505BF4 - 887CB9634407AD36B33392B2 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 0D071ECC8E6344204A50228B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-AFNetworkActivityLogger-dummy.m - sourceTree - <group> - - 0DFA192D1AB53FD41E873DD7 - - buildActionMask - 2147483647 - files - - 49AD2B7897D7D4DE91257F2F - 46BFBD95B565CCA25458D174 - 01BE99069A71784266B96879 - 404027F13A78FF6078E02E47 - 168F6C2B4946FE3954DA7197 - 0A12EC1BA4EE2914D6C6E51C - C0BFC3B35B0B7CB4855BCBEA - 72C8F9392830492BAED30E4C - 4C32F15F8F49F3D91F3D3BDD - 824E5030490F6BA5024A90EA - 566D836F8CE7C866F1E24484 - 21EB1097746BA37E8B123B1A - 52CEA0602964396B2CD02FFD - F2482F84D3370CB4F1751FE3 - 717A84298A8BA5DEB3F3A324 - 79345F6081328B2A536BDC63 - B49D9669C39F6BE66B686B02 - F5467CD91DFD4D022CB5A33E - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 0FB7BDD92324C1BCECCD7AD7 - - fileRef - 7F0107819F1BFA4CEC85B389 - isa - PBXBuildFile - - 168F6C2B4946FE3954DA7197 - - fileRef - BE038F5BCA22AB9EA5BA9BE3 - isa - PBXBuildFile - - 169AC5C3E4209942C2CD45EC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIWebView+AFNetworking.m - path - UIKit+AFNetworking/UIWebView+AFNetworking.m - sourceTree - <group> - - 17274F34EC1490F0CF9E2423 - - fileRef - E72DACF3684388DE8D81464B - isa - PBXBuildFile - - 1882839278BDF020896AE927 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFSecurityPolicy.m - path - AFNetworking/AFSecurityPolicy.m - sourceTree - <group> - - 18C1EAA4119797F9CB5A9B35 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFNetworkActivityLogger.h - path - AFNetworkActivityLogger/AFNetworkActivityLogger.h - sourceTree - <group> - - 203D82000C5A25B2F2F319C1 - - isa - PBXTargetDependency - name - Pods-AFNetworkActivityLogger - target - E3CF112FD497FD85C96047C1 - targetProxy - 443CC3D204E777544D11B468 - - 2088A1DE92C24C1E53EDCDD0 - - children - - 18C1EAA4119797F9CB5A9B35 - EC434E78879EB7E1CB1C5CFE - B1E1F93E184E457842E7B006 - - isa - PBXGroup - name - AFNetworkActivityLogger - path - AFNetworkActivityLogger - sourceTree - <group> - - 21EB1097746BA37E8B123B1A - - fileRef - 8C6077A7517C621663BA5B79 - isa - PBXBuildFile - - 232E00CEE81EA9B4AC25E5A6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIKit+AFNetworking.h - path - UIKit+AFNetworking/UIKit+AFNetworking.h - sourceTree - <group> - - 2336239F976606F3E1E9F204 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFURLConnectionOperation.m - path - AFNetworking/AFURLConnectionOperation.m - sourceTree - <group> - - 23DB7D0244257A16F4194241 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFNetworkActivityIndicatorManager.m - path - UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m - sourceTree - <group> - - 25836FFB490531D4D8FDAA1B - - fileRef - F82A7A784412A479CB491192 - isa - PBXBuildFile - - 25C070161040878C92A0F013 - - children - - 01372C8D011695972338A77C - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - - 29241EA195821F8149527277 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - SystemConfiguration.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/SystemConfiguration.framework - sourceTree - DEVELOPER_DIR - - 29B7F5C179A25D975EF59B6E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIProgressView+AFNetworking.h - path - UIKit+AFNetworking/UIProgressView+AFNetworking.h - sourceTree - <group> - - 2B14D7247CC7823836C6D980 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFURLResponseSerialization.m - path - AFNetworking/AFURLResponseSerialization.m - sourceTree - <group> - - 2BE98A3FA669FCA7C9BC48B6 - - fileRef - 5A14A4D5A946648BE169C59F - isa - PBXBuildFile - - 2E759B64AE9784A8913CC554 - - buildActionMask - 2147483647 - files - - 07ADB22806EB95E5C84A9685 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 312BE46A06C0F2B5ECEEE999 - - fileRef - D916BC3F14515A4E5E9C560F - isa - PBXBuildFile - - 32E15A5F7B08FC34DC659956 - - buildConfigurations - - ED6BE6E20A89C79E1836D640 - 55E2371EA54B14F857A27DDD - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 347BBEAE1883F79DB9CBAE32 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFURLResponseSerialization.h - path - AFNetworking/AFURLResponseSerialization.h - sourceTree - <group> - - 39D08B24C4DE46EC3BC090A9 - - children - - 5E225BB2956C8AEA98A4855B - E72DACF3684388DE8D81464B - F82A7A784412A479CB491192 - 56F06D61E0F92B62A1927D35 - 29241EA195821F8149527277 - - isa - PBXGroup - name - iOS - sourceTree - <group> - - 404027F13A78FF6078E02E47 - - fileRef - 23DB7D0244257A16F4194241 - isa - PBXBuildFile - - 4100956414F14539443125E5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-AFNetworking-dummy.m - sourceTree - <group> - - 4301DDD1430825C36D4FD7CA - - children - - 2088A1DE92C24C1E53EDCDD0 - E6336EC62992BA53DFBBF522 - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 443CC3D204E777544D11B468 - - containerPortal - 0490E4DAB3DDB6D39DC97099 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - E3CF112FD497FD85C96047C1 - remoteInfo - Pods-AFNetworkActivityLogger - - 448D60C6B25494BD2F689731 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFNetworkReachabilityManager.h - path - AFNetworking/AFNetworkReachabilityManager.h - sourceTree - <group> - - 46BD47174231E95D7C3D19F9 - - fileRef - 0D071ECC8E6344204A50228B - isa - PBXBuildFile - - 46BFBD95B565CCA25458D174 - - fileRef - AE0F194270D52DDD00DEE9F4 - isa - PBXBuildFile - - 4824A5632439401264A8B1EC - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - 49AD2B7897D7D4DE91257F2F - - fileRef - 61229E4318B8BC3B852D4F80 - isa - PBXBuildFile - - 49E6184F33F7AE66F2CF634B - - buildActionMask - 2147483647 - files - - BC15705A2889910A6E39C1E4 - 0FB7BDD92324C1BCECCD7AD7 - 2BE98A3FA669FCA7C9BC48B6 - B7C7DDE6EE0B8F1558F94166 - F9486F7E99242DE91733C746 - 64758826EEA3863BCD81B4DA - 312BE46A06C0F2B5ECEEE999 - CF2A3299B769C68AA7409881 - A590C5ADD7E65449D50738FD - 65FD9848A803347C34B98E03 - C393AF8D084415D3149E9D5A - D392ECF9A60DD3EC2C46A93C - 0A8023FAEDB19C3F1E8571E7 - EDF1E904CE45BAC25E30D1C3 - C6C6799BE6E83D5EB560A535 - E51DC121154B02650BA29CC0 - BB25B6509431443F12F69FD3 - EAF1DE07CED4E91231726E14 - 649890629692A8ACCED9D88D - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 4C32F15F8F49F3D91F3D3BDD - - fileRef - 2B14D7247CC7823836C6D980 - isa - PBXBuildFile - - 4DA12087B65E5744353312C1 - - children - - 7459203ABCA1E75FD9BC3C72 - 23DB7D0244257A16F4194241 - 8E66EA35CD138998F2B6BE75 - 8C6077A7517C621663BA5B79 - D3886E0C456A583AA1B6A2B1 - E94DBCC6DF81D822A44BA8B3 - D76B93DB6D12D34C958421F4 - 9EA962748176EC55FB2DDB8B - 53B465F909890C943C2DEE32 - 6350DE404FCFF82F0A806D43 - 232E00CEE81EA9B4AC25E5A6 - 29B7F5C179A25D975EF59B6E - 84766E2E4819EFC3392B2CA2 - F678CFF83A10C536F97951CC - 8F441E3A428407495D55CE5F - 5F875074979C06D13D35AC97 - 169AC5C3E4209942C2CD45EC - - isa - PBXGroup - name - UIKit - sourceTree - <group> - - 52CEA0602964396B2CD02FFD - - fileRef - E94DBCC6DF81D822A44BA8B3 - isa - PBXBuildFile - - 53B465F909890C943C2DEE32 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIImageView+AFNetworking.h - path - UIKit+AFNetworking/UIImageView+AFNetworking.h - sourceTree - <group> - - 5512E6C77FA714A22BF8B282 - - isa - PBXTargetDependency - name - Pods-AFNetworking - target - 79C01B588CCBF3598A5027D9 - targetProxy - 57E9666E1B91424EA47DF569 - - 55E2371EA54B14F857A27DDD - - baseConfigurationReference - D0AF813CD9446163A0B191B8 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 566D836F8CE7C866F1E24484 - - fileRef - 4100956414F14539443125E5 - isa - PBXBuildFile - - 56F06D61E0F92B62A1927D35 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Security.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Security.framework - sourceTree - DEVELOPER_DIR - - 57E9666E1B91424EA47DF569 - - containerPortal - 0490E4DAB3DDB6D39DC97099 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 79C01B588CCBF3598A5027D9 - remoteInfo - Pods-AFNetworking - - 5A14A4D5A946648BE169C59F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFHTTPSessionManager.h - path - AFNetworking/AFHTTPSessionManager.h - sourceTree - <group> - - 5E225BB2956C8AEA98A4855B - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - CoreGraphics.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/CoreGraphics.framework - sourceTree - DEVELOPER_DIR - - 5F875074979C06D13D35AC97 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIWebView+AFNetworking.h - path - UIKit+AFNetworking/UIWebView+AFNetworking.h - sourceTree - <group> - - 60E80537F0DBCA3537443CC7 - - buildActionMask - 2147483647 - files - - E12934C00D608B7ABAE5CD96 - 17274F34EC1490F0CF9E2423 - 25836FFB490531D4D8FDAA1B - D0A1AE05FDAC5B995B8FD152 - 0621CCB2779F181A038DE450 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 61229E4318B8BC3B852D4F80 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFHTTPRequestOperation.m - path - AFNetworking/AFHTTPRequestOperation.m - sourceTree - <group> - - 6350DE404FCFF82F0A806D43 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIImageView+AFNetworking.m - path - UIKit+AFNetworking/UIImageView+AFNetworking.m - sourceTree - <group> - - 637719F660CE11BE709A0AA8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFURLRequestSerialization.m - path - AFNetworking/AFURLRequestSerialization.m - sourceTree - <group> - - 64344A107EE3A7C5558F8A54 - - baseConfigurationReference - AD5C1025B6FF638288367CF5 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 64758826EEA3863BCD81B4DA - - fileRef - F3AD18BB6CB0D219E5793C00 - isa - PBXBuildFile - - 649890629692A8ACCED9D88D - - fileRef - 5F875074979C06D13D35AC97 - isa - PBXBuildFile - - 65FD9848A803347C34B98E03 - - fileRef - 347BBEAE1883F79DB9CBAE32 - isa - PBXBuildFile - - 6A787EB952C5E58AAFFFCD25 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - name - Podfile - path - ../Podfile - sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby - - 6AFFF5A41D74E8159E1C9AB6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-resources.sh - sourceTree - <group> - - 717A84298A8BA5DEB3F3A324 - - fileRef - 6350DE404FCFF82F0A806D43 - isa - PBXBuildFile - - 72C8F9392830492BAED30E4C - - fileRef - 637719F660CE11BE709A0AA8 - isa - PBXBuildFile - - 7459203ABCA1E75FD9BC3C72 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFNetworkActivityIndicatorManager.h - path - UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h - sourceTree - <group> - - 782765BD554A2D7FB0535ED8 - - buildActionMask - 2147483647 - files - - 031E9FBE70153803F40DBC39 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 79345F6081328B2A536BDC63 - - fileRef - 84766E2E4819EFC3392B2CA2 - isa - PBXBuildFile - - 79C01B588CCBF3598A5027D9 - - buildConfigurationList - 32E15A5F7B08FC34DC659956 - buildPhases - - 0DFA192D1AB53FD41E873DD7 - 60E80537F0DBCA3537443CC7 - 49E6184F33F7AE66F2CF634B - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-AFNetworking - productName - Pods-AFNetworking - productReference - FE94A162B03BCF6419D21E9A - productType - com.apple.product-type.library.static - - 7DD9D24B5B1CD8251D6EAEC1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFURLConnectionOperation.h - path - AFNetworking/AFURLConnectionOperation.h - sourceTree - <group> - - 7E0839CF90B700ABCAB46CC1 - - children - - 4824A5632439401264A8B1EC - C3BB10CE93DD7F0153B33993 - FE94A162B03BCF6419D21E9A - - isa - PBXGroup - name - Products - sourceTree - <group> - - 7F0107819F1BFA4CEC85B389 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFHTTPRequestOperationManager.h - path - AFNetworking/AFHTTPRequestOperationManager.h - sourceTree - <group> - - 824E5030490F6BA5024A90EA - - fileRef - BFF86824E13FECBDE4B1EAC5 - isa - PBXBuildFile - - 84766E2E4819EFC3392B2CA2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIProgressView+AFNetworking.m - path - UIKit+AFNetworking/UIProgressView+AFNetworking.m - sourceTree - <group> - - 85FA8DA3E05B317B45C4C17A - - children - - 448D60C6B25494BD2F689731 - BE038F5BCA22AB9EA5BA9BE3 - - isa - PBXGroup - name - Reachability - sourceTree - <group> - - 875341ECA51C552412EF93CC - - children - - 8FD1A3EEC32D63C82A04BC19 - 637719F660CE11BE709A0AA8 - 347BBEAE1883F79DB9CBAE32 - 2B14D7247CC7823836C6D980 - - isa - PBXGroup - name - Serialization - sourceTree - <group> - - 887CB9634407AD36B33392B2 - - baseConfigurationReference - F431BB261ADA5E3199049992 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 887E09A1CEF257FE0166D284 - - fileRef - 18C1EAA4119797F9CB5A9B35 - isa - PBXBuildFile - - 8C6077A7517C621663BA5B79 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIActivityIndicatorView+AFNetworking.m - path - UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m - sourceTree - <group> - - 8CB906BB24A8BD9735257403 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - path - Pods-acknowledgements.markdown - sourceTree - <group> - - 8E66EA35CD138998F2B6BE75 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIActivityIndicatorView+AFNetworking.h - path - UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h - sourceTree - <group> - - 8F4313FCD3719BCA2DBB1CE5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-AFNetworking.xcconfig - sourceTree - <group> - - 8F441E3A428407495D55CE5F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIRefreshControl+AFNetworking.m - path - UIKit+AFNetworking/UIRefreshControl+AFNetworking.m - sourceTree - <group> - - 8F982F080766FA6EFE3C5278 - - children - - 5A14A4D5A946648BE169C59F - D7639E497E56ACF55CB9B05A - DEA86C4A228CFCF53B3FB72E - BFF86824E13FECBDE4B1EAC5 - - isa - PBXGroup - name - NSURLSession - sourceTree - <group> - - 8FD1A3EEC32D63C82A04BC19 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFURLRequestSerialization.h - path - AFNetworking/AFURLRequestSerialization.h - sourceTree - <group> - - 993FB2D5B591A7E1E8257298 - - children - - D916BC3F14515A4E5E9C560F - 1882839278BDF020896AE927 - - isa - PBXGroup - name - Security - sourceTree - <group> - - 9A8F93F7D798DF189D623CEF - - buildActionMask - 2147483647 - files - - 08146036336D621D790FE9F9 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 9E648FC20015E13A84597159 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFHTTPRequestOperation.h - path - AFNetworking/AFHTTPRequestOperation.h - sourceTree - <group> - - 9E7752371871214BDE28504B - - children - - 9E648FC20015E13A84597159 - 61229E4318B8BC3B852D4F80 - 7F0107819F1BFA4CEC85B389 - AE0F194270D52DDD00DEE9F4 - 7DD9D24B5B1CD8251D6EAEC1 - 2336239F976606F3E1E9F204 - - isa - PBXGroup - name - NSURLConnection - sourceTree - <group> - - 9EA962748176EC55FB2DDB8B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIButton+AFNetworking.m - path - UIKit+AFNetworking/UIButton+AFNetworking.m - sourceTree - <group> - - 9ED4BB76BBCC1A41E84BF0F2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> - - A1BCFE4254968CED4177A0F1 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - A49098802D450D95B11B3474 - - buildActionMask - 2147483647 - files - - E04B5BFA94BDD64ADE6F7B59 - 46BD47174231E95D7C3D19F9 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - A590C5ADD7E65449D50738FD - - fileRef - 8FD1A3EEC32D63C82A04BC19 - isa - PBXBuildFile - - A90BA683EF8618FB6B06D409 - - baseConfigurationReference - AD5C1025B6FF638288367CF5 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - AD5C1025B6FF638288367CF5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-AFNetworkActivityLogger-Private.xcconfig - sourceTree - <group> - - AE0F194270D52DDD00DEE9F4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFHTTPRequestOperationManager.m - path - AFNetworking/AFHTTPRequestOperationManager.m - sourceTree - <group> - - B1E1F93E184E457842E7B006 - - children - - DA817ABDA524795C562B5B49 - AD5C1025B6FF638288367CF5 - 0D071ECC8E6344204A50228B - D6CAD7B5AF9B1003B3EA6792 - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-AFNetworkActivityLogger - sourceTree - <group> - - B2D4BD845F34A22B2991AC29 - - containerPortal - 0490E4DAB3DDB6D39DC97099 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 79C01B588CCBF3598A5027D9 - remoteInfo - Pods-AFNetworking - - B49D9669C39F6BE66B686B02 - - fileRef - 8F441E3A428407495D55CE5F - isa - PBXBuildFile - - B7C7DDE6EE0B8F1558F94166 - - fileRef - 7459203ABCA1E75FD9BC3C72 - isa - PBXBuildFile - - BB25B6509431443F12F69FD3 - - fileRef - 29B7F5C179A25D975EF59B6E - isa - PBXBuildFile - - BC15705A2889910A6E39C1E4 - - fileRef - 9E648FC20015E13A84597159 - isa - PBXBuildFile - - BE038F5BCA22AB9EA5BA9BE3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFNetworkReachabilityManager.m - path - AFNetworking/AFNetworkReachabilityManager.m - sourceTree - <group> - - BE093E7E258A8EEA2E8A9AEE - - buildActionMask - 2147483647 - files - - 887E09A1CEF257FE0166D284 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - BFF86824E13FECBDE4B1EAC5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFURLSessionManager.m - path - AFNetworking/AFURLSessionManager.m - sourceTree - <group> - - C01DD9FE30EA4F08B59FD966 - - children - - 8F4313FCD3719BCA2DBB1CE5 - D0AF813CD9446163A0B191B8 - 4100956414F14539443125E5 - CE9DAE4AF8050A4749AD4BFA - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-AFNetworking - sourceTree - <group> - - C0BFC3B35B0B7CB4855BCBEA - - fileRef - 2336239F976606F3E1E9F204 - isa - PBXBuildFile - - C393AF8D084415D3149E9D5A - - fileRef - DEA86C4A228CFCF53B3FB72E - isa - PBXBuildFile - - C3BB10CE93DD7F0153B33993 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-AFNetworkActivityLogger.a - sourceTree - BUILT_PRODUCTS_DIR - - C47A12D2F2CF33BE81ECA5A0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-dummy.m - sourceTree - <group> - - C6C6799BE6E83D5EB560A535 - - fileRef - 53B465F909890C943C2DEE32 - isa - PBXBuildFile - - C8B5D89CEA0AF17528D401C4 - - children - - 39D08B24C4DE46EC3BC090A9 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - C91938CBC1E91331A44CA885 - - isa - PBXTargetDependency - name - Pods-AFNetworking - target - 79C01B588CCBF3598A5027D9 - targetProxy - B2D4BD845F34A22B2991AC29 - - CE9DAE4AF8050A4749AD4BFA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-AFNetworking-prefix.pch - sourceTree - <group> - - CF2A3299B769C68AA7409881 - - fileRef - 7DD9D24B5B1CD8251D6EAEC1 - isa - PBXBuildFile - - D0A1AE05FDAC5B995B8FD152 - - fileRef - 56F06D61E0F92B62A1927D35 - isa - PBXBuildFile - - D0AF813CD9446163A0B191B8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-AFNetworking-Private.xcconfig - sourceTree - <group> - - D3886E0C456A583AA1B6A2B1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIAlertView+AFNetworking.h - path - UIKit+AFNetworking/UIAlertView+AFNetworking.h - sourceTree - <group> - - D392ECF9A60DD3EC2C46A93C - - fileRef - 8E66EA35CD138998F2B6BE75 - isa - PBXBuildFile - - D6CAD7B5AF9B1003B3EA6792 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-AFNetworkActivityLogger-prefix.pch - sourceTree - <group> - - D7639E497E56ACF55CB9B05A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFHTTPSessionManager.m - path - AFNetworking/AFHTTPSessionManager.m - sourceTree - <group> - - D76B93DB6D12D34C958421F4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIButton+AFNetworking.h - path - UIKit+AFNetworking/UIButton+AFNetworking.h - sourceTree - <group> - - D916BC3F14515A4E5E9C560F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFSecurityPolicy.h - path - AFNetworking/AFSecurityPolicy.h - sourceTree - <group> - - D97E44F5AE41C9FA25AA624E - - buildConfigurations - - DDB9630253BE4F940AD75522 - A1BCFE4254968CED4177A0F1 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - DA817ABDA524795C562B5B49 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-AFNetworkActivityLogger.xcconfig - sourceTree - <group> - - DB256D67D942AD2149D39DB6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.debug.xcconfig - sourceTree - <group> - - DDB9630253BE4F940AD75522 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - - isa - XCBuildConfiguration - name - Debug - - DEA86C4A228CFCF53B3FB72E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFURLSessionManager.h - path - AFNetworking/AFURLSessionManager.h - sourceTree - <group> - - E04B5BFA94BDD64ADE6F7B59 - - fileRef - EC434E78879EB7E1CB1C5CFE - isa - PBXBuildFile - - E072BABCF079D3EE1B840FCE - - buildConfigurationList - 0A89F58135F1E6AC6B6ADBBF - buildPhases - - 9A8F93F7D798DF189D623CEF - 2E759B64AE9784A8913CC554 - - buildRules - - dependencies - - 203D82000C5A25B2F2F319C1 - 5512E6C77FA714A22BF8B282 - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 4824A5632439401264A8B1EC - productType - com.apple.product-type.library.static - - E12934C00D608B7ABAE5CD96 - - fileRef - 5E225BB2956C8AEA98A4855B - isa - PBXBuildFile - - E1D24D3A579F134CCA505BF4 - - baseConfigurationReference - DB256D67D942AD2149D39DB6 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - E3CF112FD497FD85C96047C1 - - buildConfigurationList - 05409CF62977D05709335386 - buildPhases - - A49098802D450D95B11B3474 - 782765BD554A2D7FB0535ED8 - BE093E7E258A8EEA2E8A9AEE - - buildRules - - dependencies - - C91938CBC1E91331A44CA885 - - isa - PBXNativeTarget - name - Pods-AFNetworkActivityLogger - productName - Pods-AFNetworkActivityLogger - productReference - C3BB10CE93DD7F0153B33993 - productType - com.apple.product-type.library.static - - E51DC121154B02650BA29CC0 - - fileRef - 232E00CEE81EA9B4AC25E5A6 - isa - PBXBuildFile - - E6336EC62992BA53DFBBF522 - - children - - F3AD18BB6CB0D219E5793C00 - 9E7752371871214BDE28504B - 8F982F080766FA6EFE3C5278 - 85FA8DA3E05B317B45C4C17A - 993FB2D5B591A7E1E8257298 - 875341ECA51C552412EF93CC - C01DD9FE30EA4F08B59FD966 - 4DA12087B65E5744353312C1 - - isa - PBXGroup - name - AFNetworking - path - AFNetworking - sourceTree - <group> - - E72DACF3684388DE8D81464B - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR - - E94DBCC6DF81D822A44BA8B3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIAlertView+AFNetworking.m - path - UIKit+AFNetworking/UIAlertView+AFNetworking.m - sourceTree - <group> - - EAF1DE07CED4E91231726E14 - - fileRef - F678CFF83A10C536F97951CC - isa - PBXBuildFile - - EC434E78879EB7E1CB1C5CFE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - AFNetworkActivityLogger.m - path - AFNetworkActivityLogger/AFNetworkActivityLogger.m - sourceTree - <group> - - ED6BE6E20A89C79E1836D640 - - baseConfigurationReference - D0AF813CD9446163A0B191B8 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - EDF1E904CE45BAC25E30D1C3 - - fileRef - D76B93DB6D12D34C958421F4 - isa - PBXBuildFile - - EFD66281F20897E102745D31 - - children - - 6A787EB952C5E58AAFFFCD25 - C8B5D89CEA0AF17528D401C4 - 4301DDD1430825C36D4FD7CA - 7E0839CF90B700ABCAB46CC1 - 25C070161040878C92A0F013 - - isa - PBXGroup - sourceTree - <group> - - F2482F84D3370CB4F1751FE3 - - fileRef - 9EA962748176EC55FB2DDB8B - isa - PBXBuildFile - - F3AD18BB6CB0D219E5793C00 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - AFNetworking.h - path - AFNetworking/AFNetworking.h - sourceTree - <group> - - F431BB261ADA5E3199049992 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.release.xcconfig - sourceTree - <group> - - F5467CD91DFD4D022CB5A33E - - fileRef - 169AC5C3E4209942C2CD45EC - isa - PBXBuildFile - - F678CFF83A10C536F97951CC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIRefreshControl+AFNetworking.h - path - UIKit+AFNetworking/UIRefreshControl+AFNetworking.h - sourceTree - <group> - - F82A7A784412A479CB491192 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - MobileCoreServices.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/MobileCoreServices.framework - sourceTree - DEVELOPER_DIR - - F9486F7E99242DE91733C746 - - fileRef - 448D60C6B25494BD2F689731 - isa - PBXBuildFile - - FE94A162B03BCF6419D21E9A - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-AFNetworking.a - sourceTree - BUILT_PRODUCTS_DIR - - FF96D5CC872B30F3325ADEEF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-environment.h - sourceTree - <group> - - - rootObject - 0490E4DAB3DDB6D39DC97099 - - diff --git a/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-Private.xcconfig b/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-Private.xcconfig deleted file mode 100644 index b3142847d94..00000000000 --- a/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-AFNetworkActivityLogger.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public/AFNetworking" -OTHER_LDFLAGS = -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-dummy.m b/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-dummy.m deleted file mode 100644 index eb50c0ca53f..00000000000 --- a/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_AFNetworkActivityLogger : NSObject -@end -@implementation PodsDummy_Pods_AFNetworkActivityLogger -@end diff --git a/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-Private.xcconfig b/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-Private.xcconfig deleted file mode 100644 index da18c6977ff..00000000000 --- a/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-AFNetworking.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public/AFNetworking" -OTHER_LDFLAGS = ${PODS_AFNETWORKING_OTHER_LDFLAGS} -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-dummy.m b/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-dummy.m deleted file mode 100644 index c50a8c61689..00000000000 --- a/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_AFNetworking : NSObject -@end -@implementation PodsDummy_Pods_AFNetworking -@end diff --git a/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking.xcconfig b/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking.xcconfig deleted file mode 100644 index c2f387a4568..00000000000 --- a/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_AFNETWORKING_OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" \ No newline at end of file diff --git a/ios/Pods/Target Support Files/Pods/Pods-environment.h b/ios/Pods/Target Support Files/Pods/Pods-environment.h deleted file mode 100644 index 7011703d364..00000000000 --- a/ios/Pods/Target Support Files/Pods/Pods-environment.h +++ /dev/null @@ -1,60 +0,0 @@ - -// To check if a library is compiled with CocoaPods you -// can use the `COCOAPODS` macro definition which is -// defined in the xcconfigs so it is available in -// headers also when they are imported in the client -// project. - - -// AFNetworking -#define COCOAPODS_POD_AVAILABLE_AFNetworking -#define COCOAPODS_VERSION_MAJOR_AFNetworking 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking 5 -#define COCOAPODS_VERSION_PATCH_AFNetworking 0 - -// AFNetworking/NSURLConnection -#define COCOAPODS_POD_AVAILABLE_AFNetworking_NSURLConnection -#define COCOAPODS_VERSION_MAJOR_AFNetworking_NSURLConnection 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_NSURLConnection 5 -#define COCOAPODS_VERSION_PATCH_AFNetworking_NSURLConnection 0 - -// AFNetworking/NSURLSession -#define COCOAPODS_POD_AVAILABLE_AFNetworking_NSURLSession -#define COCOAPODS_VERSION_MAJOR_AFNetworking_NSURLSession 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_NSURLSession 5 -#define COCOAPODS_VERSION_PATCH_AFNetworking_NSURLSession 0 - -// AFNetworking/Reachability -#define COCOAPODS_POD_AVAILABLE_AFNetworking_Reachability -#define COCOAPODS_VERSION_MAJOR_AFNetworking_Reachability 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_Reachability 5 -#define COCOAPODS_VERSION_PATCH_AFNetworking_Reachability 0 - -// AFNetworking/Security -#define COCOAPODS_POD_AVAILABLE_AFNetworking_Security -#define COCOAPODS_VERSION_MAJOR_AFNetworking_Security 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_Security 5 -#define COCOAPODS_VERSION_PATCH_AFNetworking_Security 0 - -// AFNetworking/Serialization -#define COCOAPODS_POD_AVAILABLE_AFNetworking_Serialization -#define COCOAPODS_VERSION_MAJOR_AFNetworking_Serialization 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_Serialization 5 -#define COCOAPODS_VERSION_PATCH_AFNetworking_Serialization 0 - -// AFNetworking/UIKit -#define COCOAPODS_POD_AVAILABLE_AFNetworking_UIKit -#define COCOAPODS_VERSION_MAJOR_AFNetworking_UIKit 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_UIKit 5 -#define COCOAPODS_VERSION_PATCH_AFNetworking_UIKit 0 - -// Debug build configuration -#ifdef DEBUG - - // AFNetworkActivityLogger - #define COCOAPODS_POD_AVAILABLE_AFNetworkActivityLogger - #define COCOAPODS_VERSION_MAJOR_AFNetworkActivityLogger 2 - #define COCOAPODS_VERSION_MINOR_AFNetworkActivityLogger 0 - #define COCOAPODS_VERSION_PATCH_AFNetworkActivityLogger 3 - -#endif diff --git a/ios/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/ios/Pods/Target Support Files/Pods/Pods.debug.xcconfig deleted file mode 100644 index 9e7138e12fb..00000000000 --- a/ios/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public/AFNetworking" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -OTHER_LDFLAGS = -ObjC -l"Pods-AFNetworkActivityLogger" -l"Pods-AFNetworking" -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/ios/Pods/Target Support Files/Pods/Pods.release.xcconfig b/ios/Pods/Target Support Files/Pods/Pods.release.xcconfig deleted file mode 100644 index d6bb72c4e9d..00000000000 --- a/ios/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public/AFNetworking" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -OTHER_LDFLAGS = -ObjC -l"Pods-AFNetworking" -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/ios/SAPTracker/pom.xml b/ios/SAPTracker/pom.xml new file mode 100644 index 00000000000..99fe5462368 --- /dev/null +++ b/ios/SAPTracker/pom.xml @@ -0,0 +1,20 @@ + + 4.0.0 + + com.sap.sailing.mobile.ios + SAPTracker + 1.0-SNAPSHOT + xcode-app + + + + + com.sap.prd.mobile.ios.mios + xcode-maven-plugin + 1.14.1 + true + + + + \ No newline at end of file diff --git a/ios/LICENSE.txt b/ios/SAPTracker/src/xcode/LICENSE.txt similarity index 100% rename from ios/LICENSE.txt rename to ios/SAPTracker/src/xcode/LICENSE.txt diff --git a/ios/Podfile b/ios/SAPTracker/src/xcode/Podfile similarity index 54% rename from ios/Podfile rename to ios/SAPTracker/src/xcode/Podfile index d242a62eb1e..1f2ac4d0d7a 100644 --- a/ios/Podfile +++ b/ios/SAPTracker/src/xcode/Podfile @@ -1,5 +1,5 @@ source 'https://github.com/CocoaPods/Specs.git' platform :ios, '7.1' link_with ['SAPTracker', 'SAPTrackerTests'] -pod 'AFNetworking', '~> 2.4' -pod 'AFNetworkActivityLogger', :configurations => ['Debug'] \ No newline at end of file +pod 'AFNetworking', '2.5.0' +pod 'AFNetworkActivityLogger', '2.0.3', :configurations => ['Debug'] \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/SAPTracker/src/xcode/Podfile.lock similarity index 81% rename from ios/Podfile.lock rename to ios/SAPTracker/src/xcode/Podfile.lock index 6d64efa9042..128df4346eb 100644 --- a/ios/Podfile.lock +++ b/ios/SAPTracker/src/xcode/Podfile.lock @@ -25,11 +25,11 @@ PODS: - AFNetworking/NSURLSession DEPENDENCIES: - - AFNetworkActivityLogger - - AFNetworking (~> 2.4) + - AFNetworkActivityLogger (= 2.0.3) + - AFNetworking (= 2.5.0) SPEC CHECKSUMS: - AFNetworkActivityLogger: d6a2d2755fada3a1fbf1f490ec0dd92224e092a4 - AFNetworking: 0f54cb5d16ce38c1b76948faffb8d5fb705021c7 + AFNetworkActivityLogger: e82c9ba285b37042d86729bff5b14036c4312cd7 + AFNetworking: 96ac9bf3eda33582701cb1fcc5b896aa1e20311e -COCOAPODS: 0.35.0 +COCOAPODS: 0.38.2 diff --git a/ios/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.h b/ios/SAPTracker/src/xcode/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.h similarity index 100% rename from ios/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.h diff --git a/ios/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.m b/ios/SAPTracker/src/xcode/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.m similarity index 100% rename from ios/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.m diff --git a/ios/Pods/AFNetworkActivityLogger/LICENSE b/ios/SAPTracker/src/xcode/Pods/AFNetworkActivityLogger/LICENSE similarity index 100% rename from ios/Pods/AFNetworkActivityLogger/LICENSE rename to ios/SAPTracker/src/xcode/Pods/AFNetworkActivityLogger/LICENSE diff --git a/ios/Pods/AFNetworkActivityLogger/README.md b/ios/SAPTracker/src/xcode/Pods/AFNetworkActivityLogger/README.md similarity index 100% rename from ios/Pods/AFNetworkActivityLogger/README.md rename to ios/SAPTracker/src/xcode/Pods/AFNetworkActivityLogger/README.md diff --git a/ios/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m diff --git a/ios/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m diff --git a/ios/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m diff --git a/ios/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m diff --git a/ios/Pods/AFNetworking/AFNetworking/AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFNetworking.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m diff --git a/ios/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m diff --git a/ios/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m diff --git a/ios/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m diff --git a/ios/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h diff --git a/ios/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m similarity index 100% rename from ios/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m diff --git a/ios/Pods/AFNetworking/LICENSE b/ios/SAPTracker/src/xcode/Pods/AFNetworking/LICENSE similarity index 100% rename from ios/Pods/AFNetworking/LICENSE rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/LICENSE diff --git a/ios/Pods/AFNetworking/README.md b/ios/SAPTracker/src/xcode/Pods/AFNetworking/README.md similarity index 100% rename from ios/Pods/AFNetworking/README.md rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/README.md diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h diff --git a/ios/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m b/ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m similarity index 100% rename from ios/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m rename to ios/SAPTracker/src/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m diff --git a/ios/Pods/Headers/Public/AFNetworkActivityLogger/AFNetworkActivityLogger.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworkActivityLogger/AFNetworkActivityLogger.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworkActivityLogger/AFNetworkActivityLogger.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworkActivityLogger/AFNetworkActivityLogger.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFNetworking.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h diff --git a/ios/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h diff --git a/ios/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h diff --git a/ios/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h diff --git a/ios/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h diff --git a/ios/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h diff --git a/ios/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h diff --git a/ios/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h diff --git a/ios/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h diff --git a/ios/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h similarity index 100% rename from ios/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h rename to ios/SAPTracker/src/xcode/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworkActivityLogger/AFNetworkActivityLogger.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworkActivityLogger/AFNetworkActivityLogger.h new file mode 120000 index 00000000000..e0d89901efb --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworkActivityLogger/AFNetworkActivityLogger.h @@ -0,0 +1 @@ +../../../AFNetworkActivityLogger/AFNetworkActivityLogger/AFNetworkActivityLogger.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h new file mode 120000 index 00000000000..ac762c82387 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPRequestOperation.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h new file mode 120000 index 00000000000..9dcc623c638 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h new file mode 120000 index 00000000000..56feb9fb85e --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPSessionManager.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h new file mode 120000 index 00000000000..67519d98485 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h new file mode 120000 index 00000000000..68fc7744f28 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFNetworkReachabilityManager.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworking.h new file mode 120000 index 00000000000..a5a38da7dc9 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFNetworking.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h new file mode 120000 index 00000000000..fd1322db9c2 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFSecurityPolicy.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h new file mode 120000 index 00000000000..d9b35fb754f --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLConnectionOperation.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h new file mode 120000 index 00000000000..ca8209b81f9 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLRequestSerialization.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h new file mode 120000 index 00000000000..e36a765d826 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLResponseSerialization.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h new file mode 120000 index 00000000000..835101de7bf --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLSessionManager.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h new file mode 120000 index 00000000000..c534ebfb02a --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h new file mode 120000 index 00000000000..f9928133851 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h new file mode 120000 index 00000000000..8f2e221939a --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h new file mode 120000 index 00000000000..a95d67380f1 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h new file mode 120000 index 00000000000..95017cce573 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h new file mode 120000 index 00000000000..730b167dcde --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h new file mode 120000 index 00000000000..8efd8262093 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h new file mode 120000 index 00000000000..c8df6ef17b8 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h \ No newline at end of file diff --git a/ios/Pods/Manifest.lock b/ios/SAPTracker/src/xcode/Pods/Manifest.lock similarity index 81% rename from ios/Pods/Manifest.lock rename to ios/SAPTracker/src/xcode/Pods/Manifest.lock index 6d64efa9042..128df4346eb 100644 --- a/ios/Pods/Manifest.lock +++ b/ios/SAPTracker/src/xcode/Pods/Manifest.lock @@ -25,11 +25,11 @@ PODS: - AFNetworking/NSURLSession DEPENDENCIES: - - AFNetworkActivityLogger - - AFNetworking (~> 2.4) + - AFNetworkActivityLogger (= 2.0.3) + - AFNetworking (= 2.5.0) SPEC CHECKSUMS: - AFNetworkActivityLogger: d6a2d2755fada3a1fbf1f490ec0dd92224e092a4 - AFNetworking: 0f54cb5d16ce38c1b76948faffb8d5fb705021c7 + AFNetworkActivityLogger: e82c9ba285b37042d86729bff5b14036c4312cd7 + AFNetworking: 96ac9bf3eda33582701cb1fcc5b896aa1e20311e -COCOAPODS: 0.35.0 +COCOAPODS: 0.38.2 diff --git a/ios/SAPTracker/src/xcode/Pods/Pods.xcodeproj/project.pbxproj b/ios/SAPTracker/src/xcode/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..db59e3209b4 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,782 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 025E6747910E56011BA2D83BF880DF8D /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 82BD37C04D19B3A67B19F098C8EC42F4 /* AFURLResponseSerialization.m */; }; + 081CADCC8048F53A161D9266E6A83376 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 972E9D309A282EB65FDFE4EB44AE2488 /* AFHTTPRequestOperationManager.m */; }; + 09FC07D17013C78518F1F288A29B5B0D /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C513F09683FA5B9FDAEA9EEAE26A0F26 /* UIButton+AFNetworking.m */; }; + 15B08ACB995753995E80BA75F9103306 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = C800B4312D64B9C02BC8FCA6FBC4C549 /* AFSecurityPolicy.m */; }; + 18F673E75E690807EB07CBB4CE19FAEA /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 64BE514B696E322F3DCA240DAF103D2E /* AFHTTPSessionManager.h */; }; + 192D0C2F489A39601D6F8554B0B360EF /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A2BFEF5BA3A0695086C375BC09DC370B /* AFHTTPRequestOperation.m */; }; + 1BEB36DFBDA89692F8C13D1D59F061AD /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD39031DD7FE2501B6C846C1B3D8DC3B /* AFURLConnectionOperation.h */; }; + 26D4DA6F1A00790F4655E1CF354FEA6E /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = D67E92338396E7B9D0CF98F7405CB8FE /* AFURLRequestSerialization.m */; }; + 29582756D157B663C861F87A3B786A7A /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DC7E9F698526C638E05983D7E9F59D /* UIAlertView+AFNetworking.m */; }; + 2AA218480E5B867131FBDBC9FB9BD397 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = B95E9F5279B8786B904FC6024A34A89E /* UIActivityIndicatorView+AFNetworking.m */; }; + 32A554551747164958B9915C561FB328 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B6B765039E99B6851BBE3ED1DA0B00D /* AFHTTPSessionManager.m */; }; + 4393DF4DE6B79274752055AC1AA52B35 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 96600891D0D41680AEF339DAC2AF4326 /* AFURLRequestSerialization.h */; }; + 51D8BFC8313148D60950851D4625E219 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A4CCAA7F40C831B14C24D547FB5B4D9 /* Foundation.framework */; }; + 5314E53C8A36ED00BB2F78FDB9FBF86D /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 93663AA788B6828E596F19F62CC07F5D /* UIImageView+AFNetworking.h */; }; + 59B3A8278FB3A9337B85DF48B67EA41A /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 89EF23DED4F8FF5024059B9D419F4CE0 /* UIWebView+AFNetworking.h */; }; + 5F7BFD22B34066746743982D1579FAD9 /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 596C9E516B69E6A2C441A722C6209831 /* AFHTTPRequestOperationManager.h */; }; + 6244A1E5B4A5E9CC2594E538B9076226 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E80BCAB2D7D93EA3ADCAAA2585C75A8C /* UIActivityIndicatorView+AFNetworking.h */; }; + 6375DA2CAFA15B08926A49A055BE4FA6 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D512A020B513DDF434AB67A1C3A065F /* AFSecurityPolicy.h */; }; + 663A052303C8C8064B20957E6BABB7E5 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EB9EC509DAC4DCC0DD7845ADA57B294 /* AFNetworkReachabilityManager.h */; }; + 6754EA424017808C31014E6B3E7CFBA1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 194BABAD50E26C26090EAF3CCC989755 /* Security.framework */; }; + 685DA92F0217B618F4F6BDE15F8609F3 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EEF5BB3B32B5D8A619F503AD2409050 /* UIRefreshControl+AFNetworking.m */; }; + 6C4B59205A44209F8B2C3750075D6312 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E89A11D00B5079678993CFB6FE0F3523 /* UIRefreshControl+AFNetworking.h */; }; + 75965E64A23429676DC9E774677EB728 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 332BA9C05FB239B15F40CEA10174E6FA /* AFHTTPRequestOperation.h */; }; + 7A7C7239F0B3584177EA5A61F4B052BE /* AFNetworkActivityLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 34E26EB4BA946976675D38DBE96FDA54 /* AFNetworkActivityLogger.m */; }; + 7FC5AC9660821F1C7223587733F9CDCC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FC9012E7A28327C8465EEA7671C187D /* CoreGraphics.framework */; }; + 813E71ED690E24E7C9FD21A2BB54F1E0 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E2BA590CD2C87BA5F66E0A84C1EFFE34 /* UIAlertView+AFNetworking.h */; }; + 86D9F9D3AA0CD9895C5ADCC41DDC7C4E /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C44E0CF9CBBDA2D389DA61144BDB5FF0 /* SystemConfiguration.framework */; }; + 87120BE62826ADC477A0CF766A97DAA4 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = EEA7AA7C06D6E8A19CF368E78759CD3D /* UIKit+AFNetworking.h */; }; + 8FB22D7D85FBC0D18B09E2E160D10A2B /* AFNetworkActivityLogger-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FEE5B473F20A7BA4C6F3752DFE0C3E74 /* AFNetworkActivityLogger-dummy.m */; }; + 907452784922BC9FF45DA0C9D59A8E9B /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EE37C79C29C262204A0398008AD4660D /* AFNetworkActivityIndicatorManager.h */; }; + 9741BC43CA64A80F797CF7A300DDFF68 /* AFNetworkActivityLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A758F8E1D90FF693142B3FF8E1EF5192 /* AFNetworkActivityLogger.h */; }; + 97D515CA521990F52638874E3DEFB54A /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B40F9DBA6FF69F2F6CDFFD022184B63 /* UIProgressView+AFNetworking.h */; }; + 9FD32F6805143DCF52EC69291DBA2179 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7902D5BBF1854500BEDEB7892186999C /* AFURLSessionManager.m */; }; + A2994342DD5F82F8324B3B6B0F4B2CAD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A4CCAA7F40C831B14C24D547FB5B4D9 /* Foundation.framework */; }; + A33F3299CA52ED6774E8A845F024B569 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 17EDC614745310AA3FA5F6F649724050 /* UIWebView+AFNetworking.m */; }; + A6B75AE4D345C8725ED293DAF11E3070 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A4CCAA7F40C831B14C24D547FB5B4D9 /* Foundation.framework */; }; + AA9F1573BB802E172AD8B2692AA45706 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EB238CE84EDA2D4C7BA3405789B8E14 /* AFURLResponseSerialization.h */; }; + BB65C5D6C7D6D72DEA873016411350EF /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E919B4AD791E048C5ADB3BC85D5AF875 /* UIImageView+AFNetworking.m */; }; + C80CD0965A3093BDEE000A46ED3A3609 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F4323B875BB257B1AEFC09C6D4CF4FDA /* AFURLConnectionOperation.m */; }; + CECF96E43956493E34D445890D31C5CF /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 349CFA126FDBC341686BD24B4564E81F /* UIButton+AFNetworking.h */; }; + D4375A35D213D14C79616CE0A5E5D446 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 783610A25BA6944B19940CB50F8B3060 /* AFURLSessionManager.h */; }; + D6B1485BBFED1AF1169626253AE07CBF /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 74570FBEA8EAD5D9AB96DEEF0A7357BE /* Pods-dummy.m */; }; + E3126C768050A3A2083A738F777B962E /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 83345E677054A966E86DD205742A52CA /* AFNetworkReachabilityManager.m */; }; + E5358D89338123E5FDAD13299AEAAF4E /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DF4E819D4C55376A9AF79BC0AD782E4 /* AFNetworking-dummy.m */; }; + F3689EDC4174E5D4FDDB4122D752B60C /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AB28CDBBC539CCA2848526B8AC4F2B8 /* MobileCoreServices.framework */; }; + F81DC032394DDE2E36F27B53A6F84E6D /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DDE9B0DC922D1B2537F6A72BAA8064A /* AFNetworkActivityIndicatorManager.m */; }; + FA5FCAB1EEB69ACB439917555962A8ED /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = DB38DC0033518B27150331F75C90107A /* AFNetworking.h */; }; + FCD49A40D6CA7E0004CE68D004F855C2 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C8B9DC86DB3660F457BC371C49940E0D /* UIProgressView+AFNetworking.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 177D00269F4BF67FF1871F64836CFBC4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 349C8636459695DB16019E4A7683161A; + remoteInfo = AFNetworkActivityLogger; + }; + 54385AD0D3545E5B93DD906A5CA369A5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4740EFA4199EC7173ED2C752A903316E; + remoteInfo = AFNetworking; + }; + A8360A0829B02F8A3E48C3C897455DD8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4740EFA4199EC7173ED2C752A903316E; + remoteInfo = AFNetworking; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0B40F9DBA6FF69F2F6CDFFD022184B63 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; + 17EDC614745310AA3FA5F6F649724050 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + 194BABAD50E26C26090EAF3CCC989755 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 1FC9012E7A28327C8465EEA7671C187D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 2E24355D20F9985A2E38FC29CA66617E /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + 332BA9C05FB239B15F40CEA10174E6FA /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; + 349CFA126FDBC341686BD24B4564E81F /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + 34E26EB4BA946976675D38DBE96FDA54 /* AFNetworkActivityLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityLogger.m; path = AFNetworkActivityLogger/AFNetworkActivityLogger.m; sourceTree = ""; }; + 3DF4E819D4C55376A9AF79BC0AD782E4 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 4066FB3D56AF33E753573F0554122A90 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 491F530684ABE0C250361CF89F4D98F2 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 4AB28CDBBC539CCA2848526B8AC4F2B8 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 4B6B765039E99B6851BBE3ED1DA0B00D /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 596C9E516B69E6A2C441A722C6209831 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; + 5A4CCAA7F40C831B14C24D547FB5B4D9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 5EB9EC509DAC4DCC0DD7845ADA57B294 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 602B51B19F654E3ACED00ABFECEEA663 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; + 64BE514B696E322F3DCA240DAF103D2E /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + 74570FBEA8EAD5D9AB96DEEF0A7357BE /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + 783610A25BA6944B19940CB50F8B3060 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 7902D5BBF1854500BEDEB7892186999C /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 7D512A020B513DDF434AB67A1C3A065F /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + 7EB238CE84EDA2D4C7BA3405789B8E14 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + 82BD37C04D19B3A67B19F098C8EC42F4 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 83345E677054A966E86DD205742A52CA /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + 89EF23DED4F8FF5024059B9D419F4CE0 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + 8DDE9B0DC922D1B2537F6A72BAA8064A /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + 8E6CC3BD654674B899480FC2100FAB81 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 93663AA788B6828E596F19F62CC07F5D /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 96600891D0D41680AEF339DAC2AF4326 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 972E9D309A282EB65FDFE4EB44AE2488 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; + 9EEF5BB3B32B5D8A619F503AD2409050 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + A25D0CBC0C6347F3CD6A0FF8B5EAA94E /* libAFNetworkActivityLogger.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworkActivityLogger.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A2BFEF5BA3A0695086C375BC09DC370B /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; + A758F8E1D90FF693142B3FF8E1EF5192 /* AFNetworkActivityLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityLogger.h; path = AFNetworkActivityLogger/AFNetworkActivityLogger.h; sourceTree = ""; }; + B173EA68BDE4EBF27E0F0FBD584C2043 /* AFNetworkActivityLogger.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworkActivityLogger.xcconfig; sourceTree = ""; }; + B6E8F9C8B561C38A3C904D84E5AF6A6F /* AFNetworkActivityLogger-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworkActivityLogger-Private.xcconfig"; sourceTree = ""; }; + B95E9F5279B8786B904FC6024A34A89E /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + BB26CC8C37233104B0CD59EF23DE0661 /* AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworking-Private.xcconfig"; sourceTree = ""; }; + BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; + C44E0CF9CBBDA2D389DA61144BDB5FF0 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + C513F09683FA5B9FDAEA9EEAE26A0F26 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + C800B4312D64B9C02BC8FCA6FBC4C549 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + C8B9DC86DB3660F457BC371C49940E0D /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + D67E92338396E7B9D0CF98F7405CB8FE /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + DA09B2020E2A9137848F660BA56CF6CB /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + DB38DC0033518B27150331F75C90107A /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + DD39031DD7FE2501B6C846C1B3D8DC3B /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; + E2BA590CD2C87BA5F66E0A84C1EFFE34 /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; + E80BCAB2D7D93EA3ADCAAA2585C75A8C /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + E89A11D00B5079678993CFB6FE0F3523 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + E919B4AD791E048C5ADB3BC85D5AF875 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + EE37C79C29C262204A0398008AD4660D /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + EEA7AA7C06D6E8A19CF368E78759CD3D /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + F4323B875BB257B1AEFC09C6D4CF4FDA /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; + F4DC7E9F698526C638E05983D7E9F59D /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; + FB6E37E19F0E4B4EA7D2A7106F9FCE94 /* AFNetworkActivityLogger-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworkActivityLogger-prefix.pch"; sourceTree = ""; }; + FEE5B473F20A7BA4C6F3752DFE0C3E74 /* AFNetworkActivityLogger-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworkActivityLogger-dummy.m"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1920492E9DB6D2E164130E805FF2E6E5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A2994342DD5F82F8324B3B6B0F4B2CAD /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2C7F2717542D3B3839F4F0E115FA1A18 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7FC5AC9660821F1C7223587733F9CDCC /* CoreGraphics.framework in Frameworks */, + A6B75AE4D345C8725ED293DAF11E3070 /* Foundation.framework in Frameworks */, + F3689EDC4174E5D4FDDB4122D752B60C /* MobileCoreServices.framework in Frameworks */, + 6754EA424017808C31014E6B3E7CFBA1 /* Security.framework in Frameworks */, + 86D9F9D3AA0CD9895C5ADCC41DDC7C4E /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E1FD8D1BABE67E0F0F3422E8A2BD38E4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 51D8BFC8313148D60950851D4625E219 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0464617FDABCF2CFA331749DBB872F5F /* NSURLSession */ = { + isa = PBXGroup; + children = ( + 64BE514B696E322F3DCA240DAF103D2E /* AFHTTPSessionManager.h */, + 4B6B765039E99B6851BBE3ED1DA0B00D /* AFHTTPSessionManager.m */, + 783610A25BA6944B19940CB50F8B3060 /* AFURLSessionManager.h */, + 7902D5BBF1854500BEDEB7892186999C /* AFURLSessionManager.m */, + ); + name = NSURLSession; + sourceTree = ""; + }; + 0EB4052B31529DBA5CF25CFE10910596 /* NSURLConnection */ = { + isa = PBXGroup; + children = ( + 332BA9C05FB239B15F40CEA10174E6FA /* AFHTTPRequestOperation.h */, + A2BFEF5BA3A0695086C375BC09DC370B /* AFHTTPRequestOperation.m */, + 596C9E516B69E6A2C441A722C6209831 /* AFHTTPRequestOperationManager.h */, + 972E9D309A282EB65FDFE4EB44AE2488 /* AFHTTPRequestOperationManager.m */, + DD39031DD7FE2501B6C846C1B3D8DC3B /* AFURLConnectionOperation.h */, + F4323B875BB257B1AEFC09C6D4CF4FDA /* AFURLConnectionOperation.m */, + ); + name = NSURLConnection; + sourceTree = ""; + }; + 20B56609144CE204DFA8221F742B2D76 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D39F297F7432FCFAB7049A1566A95C1A /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 271A5776C18F89450F1140CCA7A6CFDF /* Serialization */ = { + isa = PBXGroup; + children = ( + 96600891D0D41680AEF339DAC2AF4326 /* AFURLRequestSerialization.h */, + D67E92338396E7B9D0CF98F7405CB8FE /* AFURLRequestSerialization.m */, + 7EB238CE84EDA2D4C7BA3405789B8E14 /* AFURLResponseSerialization.h */, + 82BD37C04D19B3A67B19F098C8EC42F4 /* AFURLResponseSerialization.m */, + ); + name = Serialization; + sourceTree = ""; + }; + 45D1497504DB07B926870354848D6C5E /* Support Files */ = { + isa = PBXGroup; + children = ( + B173EA68BDE4EBF27E0F0FBD584C2043 /* AFNetworkActivityLogger.xcconfig */, + B6E8F9C8B561C38A3C904D84E5AF6A6F /* AFNetworkActivityLogger-Private.xcconfig */, + FEE5B473F20A7BA4C6F3752DFE0C3E74 /* AFNetworkActivityLogger-dummy.m */, + FB6E37E19F0E4B4EA7D2A7106F9FCE94 /* AFNetworkActivityLogger-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/AFNetworkActivityLogger"; + sourceTree = ""; + }; + 5885AB07A491D26173A0DC5475437750 /* Reachability */ = { + isa = PBXGroup; + children = ( + 5EB9EC509DAC4DCC0DD7845ADA57B294 /* AFNetworkReachabilityManager.h */, + 83345E677054A966E86DD205742A52CA /* AFNetworkReachabilityManager.m */, + ); + name = Reachability; + sourceTree = ""; + }; + 650930E5D950E0C9EEF22DCA5E9E181C /* AFNetworking */ = { + isa = PBXGroup; + children = ( + DB38DC0033518B27150331F75C90107A /* AFNetworking.h */, + 0EB4052B31529DBA5CF25CFE10910596 /* NSURLConnection */, + 0464617FDABCF2CFA331749DBB872F5F /* NSURLSession */, + 5885AB07A491D26173A0DC5475437750 /* Reachability */, + 71B2EF470198619BF60F96AB893D257D /* Security */, + 271A5776C18F89450F1140CCA7A6CFDF /* Serialization */, + AEB2BD38731D472D4A7A1475AE6A0CBD /* Support Files */, + 6D2B08BC6767555F600DD289FB7FB754 /* UIKit */, + ); + path = AFNetworking; + sourceTree = ""; + }; + 6D2B08BC6767555F600DD289FB7FB754 /* UIKit */ = { + isa = PBXGroup; + children = ( + EE37C79C29C262204A0398008AD4660D /* AFNetworkActivityIndicatorManager.h */, + 8DDE9B0DC922D1B2537F6A72BAA8064A /* AFNetworkActivityIndicatorManager.m */, + E80BCAB2D7D93EA3ADCAAA2585C75A8C /* UIActivityIndicatorView+AFNetworking.h */, + B95E9F5279B8786B904FC6024A34A89E /* UIActivityIndicatorView+AFNetworking.m */, + E2BA590CD2C87BA5F66E0A84C1EFFE34 /* UIAlertView+AFNetworking.h */, + F4DC7E9F698526C638E05983D7E9F59D /* UIAlertView+AFNetworking.m */, + 349CFA126FDBC341686BD24B4564E81F /* UIButton+AFNetworking.h */, + C513F09683FA5B9FDAEA9EEAE26A0F26 /* UIButton+AFNetworking.m */, + 93663AA788B6828E596F19F62CC07F5D /* UIImageView+AFNetworking.h */, + E919B4AD791E048C5ADB3BC85D5AF875 /* UIImageView+AFNetworking.m */, + EEA7AA7C06D6E8A19CF368E78759CD3D /* UIKit+AFNetworking.h */, + 0B40F9DBA6FF69F2F6CDFFD022184B63 /* UIProgressView+AFNetworking.h */, + C8B9DC86DB3660F457BC371C49940E0D /* UIProgressView+AFNetworking.m */, + E89A11D00B5079678993CFB6FE0F3523 /* UIRefreshControl+AFNetworking.h */, + 9EEF5BB3B32B5D8A619F503AD2409050 /* UIRefreshControl+AFNetworking.m */, + 89EF23DED4F8FF5024059B9D419F4CE0 /* UIWebView+AFNetworking.h */, + 17EDC614745310AA3FA5F6F649724050 /* UIWebView+AFNetworking.m */, + ); + name = UIKit; + sourceTree = ""; + }; + 71B2EF470198619BF60F96AB893D257D /* Security */ = { + isa = PBXGroup; + children = ( + 7D512A020B513DDF434AB67A1C3A065F /* AFSecurityPolicy.h */, + C800B4312D64B9C02BC8FCA6FBC4C549 /* AFSecurityPolicy.m */, + ); + name = Security; + sourceTree = ""; + }; + 7C764A93AD6CB011EE2F92D0EFE22E9A /* AFNetworkActivityLogger */ = { + isa = PBXGroup; + children = ( + A758F8E1D90FF693142B3FF8E1EF5192 /* AFNetworkActivityLogger.h */, + 34E26EB4BA946976675D38DBE96FDA54 /* AFNetworkActivityLogger.m */, + 45D1497504DB07B926870354848D6C5E /* Support Files */, + ); + path = AFNetworkActivityLogger; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + 20B56609144CE204DFA8221F742B2D76 /* Frameworks */, + F88C05AF42F4401EFB3AC9D218791A5B /* Pods */, + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, + ); + sourceTree = ""; + }; + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { + isa = PBXGroup; + children = ( + 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, + BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, + 74570FBEA8EAD5D9AB96DEEF0A7357BE /* Pods-dummy.m */, + 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, + DA09B2020E2A9137848F660BA56CF6CB /* Pods.debug.xcconfig */, + 8E6CC3BD654674B899480FC2100FAB81 /* Pods.release.xcconfig */, + ); + name = Pods; + path = "Target Support Files/Pods"; + sourceTree = ""; + }; + AEB2BD38731D472D4A7A1475AE6A0CBD /* Support Files */ = { + isa = PBXGroup; + children = ( + 602B51B19F654E3ACED00ABFECEEA663 /* AFNetworking.xcconfig */, + BB26CC8C37233104B0CD59EF23DE0661 /* AFNetworking-Private.xcconfig */, + 3DF4E819D4C55376A9AF79BC0AD782E4 /* AFNetworking-dummy.m */, + 2E24355D20F9985A2E38FC29CA66617E /* AFNetworking-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/AFNetworking"; + sourceTree = ""; + }; + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { + isa = PBXGroup; + children = ( + A25D0CBC0C6347F3CD6A0FF8B5EAA94E /* libAFNetworkActivityLogger.a */, + 491F530684ABE0C250361CF89F4D98F2 /* libAFNetworking.a */, + 4066FB3D56AF33E753573F0554122A90 /* libPods.a */, + ); + name = Products; + sourceTree = ""; + }; + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + D39F297F7432FCFAB7049A1566A95C1A /* iOS */ = { + isa = PBXGroup; + children = ( + 1FC9012E7A28327C8465EEA7671C187D /* CoreGraphics.framework */, + 5A4CCAA7F40C831B14C24D547FB5B4D9 /* Foundation.framework */, + 4AB28CDBBC539CCA2848526B8AC4F2B8 /* MobileCoreServices.framework */, + 194BABAD50E26C26090EAF3CCC989755 /* Security.framework */, + C44E0CF9CBBDA2D389DA61144BDB5FF0 /* SystemConfiguration.framework */, + ); + name = iOS; + sourceTree = ""; + }; + F88C05AF42F4401EFB3AC9D218791A5B /* Pods */ = { + isa = PBXGroup; + children = ( + 7C764A93AD6CB011EE2F92D0EFE22E9A /* AFNetworkActivityLogger */, + 650930E5D950E0C9EEF22DCA5E9E181C /* AFNetworking */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 1C75DAF6CB6D26DE245E7D63BEE4B568 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 75965E64A23429676DC9E774677EB728 /* AFHTTPRequestOperation.h in Headers */, + 5F7BFD22B34066746743982D1579FAD9 /* AFHTTPRequestOperationManager.h in Headers */, + 18F673E75E690807EB07CBB4CE19FAEA /* AFHTTPSessionManager.h in Headers */, + 907452784922BC9FF45DA0C9D59A8E9B /* AFNetworkActivityIndicatorManager.h in Headers */, + 663A052303C8C8064B20957E6BABB7E5 /* AFNetworkReachabilityManager.h in Headers */, + FA5FCAB1EEB69ACB439917555962A8ED /* AFNetworking.h in Headers */, + 6375DA2CAFA15B08926A49A055BE4FA6 /* AFSecurityPolicy.h in Headers */, + 1BEB36DFBDA89692F8C13D1D59F061AD /* AFURLConnectionOperation.h in Headers */, + 4393DF4DE6B79274752055AC1AA52B35 /* AFURLRequestSerialization.h in Headers */, + AA9F1573BB802E172AD8B2692AA45706 /* AFURLResponseSerialization.h in Headers */, + D4375A35D213D14C79616CE0A5E5D446 /* AFURLSessionManager.h in Headers */, + 6244A1E5B4A5E9CC2594E538B9076226 /* UIActivityIndicatorView+AFNetworking.h in Headers */, + 813E71ED690E24E7C9FD21A2BB54F1E0 /* UIAlertView+AFNetworking.h in Headers */, + CECF96E43956493E34D445890D31C5CF /* UIButton+AFNetworking.h in Headers */, + 5314E53C8A36ED00BB2F78FDB9FBF86D /* UIImageView+AFNetworking.h in Headers */, + 87120BE62826ADC477A0CF766A97DAA4 /* UIKit+AFNetworking.h in Headers */, + 97D515CA521990F52638874E3DEFB54A /* UIProgressView+AFNetworking.h in Headers */, + 6C4B59205A44209F8B2C3750075D6312 /* UIRefreshControl+AFNetworking.h in Headers */, + 59B3A8278FB3A9337B85DF48B67EA41A /* UIWebView+AFNetworking.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9E7D726E639437E42C9CAB857E9234A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9741BC43CA64A80F797CF7A300DDFF68 /* AFNetworkActivityLogger.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 349C8636459695DB16019E4A7683161A /* AFNetworkActivityLogger */ = { + isa = PBXNativeTarget; + buildConfigurationList = 717FE1EEBE4F9BDD8FCAAEECC4A5B8C7 /* Build configuration list for PBXNativeTarget "AFNetworkActivityLogger" */; + buildPhases = ( + 1C0214A0CAA09232ED0CB119275D2762 /* Sources */, + E1FD8D1BABE67E0F0F3422E8A2BD38E4 /* Frameworks */, + A9E7D726E639437E42C9CAB857E9234A /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 69270ECA2838443BA84CAE2AD235C30F /* PBXTargetDependency */, + ); + name = AFNetworkActivityLogger; + productName = AFNetworkActivityLogger; + productReference = A25D0CBC0C6347F3CD6A0FF8B5EAA94E /* libAFNetworkActivityLogger.a */; + productType = "com.apple.product-type.library.static"; + }; + 4740EFA4199EC7173ED2C752A903316E /* AFNetworking */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4A9CAADB7542792DDF525BBD7E3C2273 /* Build configuration list for PBXNativeTarget "AFNetworking" */; + buildPhases = ( + 87770F590517B7D9CFCD4A8AC622EE6B /* Sources */, + 2C7F2717542D3B3839F4F0E115FA1A18 /* Frameworks */, + 1C75DAF6CB6D26DE245E7D63BEE4B568 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AFNetworking; + productName = AFNetworking; + productReference = 491F530684ABE0C250361CF89F4D98F2 /* libAFNetworking.a */; + productType = "com.apple.product-type.library.static"; + }; + A6D0CE1BA9EEBE59D9198973ED1466CE /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13578CF905B5068DFE0FE2F89C5723E5 /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + 625AF712EA4007238D95A6752A16BCC2 /* Sources */, + 1920492E9DB6D2E164130E805FF2E6E5 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F05C59C04F0B4944099437DC6412886A /* PBXTargetDependency */, + 88B5F44AD6CBDF8D1B93109394790873 /* PBXTargetDependency */, + ); + name = Pods; + productName = Pods; + productReference = 4066FB3D56AF33E753573F0554122A90 /* libPods.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = CCA510CFBEA2D207524CDA0D73C3B561 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 349C8636459695DB16019E4A7683161A /* AFNetworkActivityLogger */, + 4740EFA4199EC7173ED2C752A903316E /* AFNetworking */, + A6D0CE1BA9EEBE59D9198973ED1466CE /* Pods */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 1C0214A0CAA09232ED0CB119275D2762 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8FB22D7D85FBC0D18B09E2E160D10A2B /* AFNetworkActivityLogger-dummy.m in Sources */, + 7A7C7239F0B3584177EA5A61F4B052BE /* AFNetworkActivityLogger.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 625AF712EA4007238D95A6752A16BCC2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D6B1485BBFED1AF1169626253AE07CBF /* Pods-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 87770F590517B7D9CFCD4A8AC622EE6B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 192D0C2F489A39601D6F8554B0B360EF /* AFHTTPRequestOperation.m in Sources */, + 081CADCC8048F53A161D9266E6A83376 /* AFHTTPRequestOperationManager.m in Sources */, + 32A554551747164958B9915C561FB328 /* AFHTTPSessionManager.m in Sources */, + F81DC032394DDE2E36F27B53A6F84E6D /* AFNetworkActivityIndicatorManager.m in Sources */, + E3126C768050A3A2083A738F777B962E /* AFNetworkReachabilityManager.m in Sources */, + E5358D89338123E5FDAD13299AEAAF4E /* AFNetworking-dummy.m in Sources */, + 15B08ACB995753995E80BA75F9103306 /* AFSecurityPolicy.m in Sources */, + C80CD0965A3093BDEE000A46ED3A3609 /* AFURLConnectionOperation.m in Sources */, + 26D4DA6F1A00790F4655E1CF354FEA6E /* AFURLRequestSerialization.m in Sources */, + 025E6747910E56011BA2D83BF880DF8D /* AFURLResponseSerialization.m in Sources */, + 9FD32F6805143DCF52EC69291DBA2179 /* AFURLSessionManager.m in Sources */, + 2AA218480E5B867131FBDBC9FB9BD397 /* UIActivityIndicatorView+AFNetworking.m in Sources */, + 29582756D157B663C861F87A3B786A7A /* UIAlertView+AFNetworking.m in Sources */, + 09FC07D17013C78518F1F288A29B5B0D /* UIButton+AFNetworking.m in Sources */, + BB65C5D6C7D6D72DEA873016411350EF /* UIImageView+AFNetworking.m in Sources */, + FCD49A40D6CA7E0004CE68D004F855C2 /* UIProgressView+AFNetworking.m in Sources */, + 685DA92F0217B618F4F6BDE15F8609F3 /* UIRefreshControl+AFNetworking.m in Sources */, + A33F3299CA52ED6774E8A845F024B569 /* UIWebView+AFNetworking.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 69270ECA2838443BA84CAE2AD235C30F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = 4740EFA4199EC7173ED2C752A903316E /* AFNetworking */; + targetProxy = 54385AD0D3545E5B93DD906A5CA369A5 /* PBXContainerItemProxy */; + }; + 88B5F44AD6CBDF8D1B93109394790873 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = 4740EFA4199EC7173ED2C752A903316E /* AFNetworking */; + targetProxy = A8360A0829B02F8A3E48C3C897455DD8 /* PBXContainerItemProxy */; + }; + F05C59C04F0B4944099437DC6412886A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworkActivityLogger; + target = 349C8636459695DB16019E4A7683161A /* AFNetworkActivityLogger */; + targetProxy = 177D00269F4BF67FF1871F64836CFBC4 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 03CA91998D6773EC5D02B3DB87B8353E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos8.3; + STRIP_INSTALLED_PRODUCT = NO; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 0B57334D6C23DADAA4F7D802A5760EB2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos8.3; + STRIP_INSTALLED_PRODUCT = NO; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 305DF51FA13E80B0EAC76F683094132C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BB26CC8C37233104B0CD59EF23DE0661 /* AFNetworking-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 620E1E3F3D355635F7D1E8751A2DE472 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B6E8F9C8B561C38A3C904D84E5AF6A6F /* AFNetworkActivityLogger-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 63B9D4B2582DDE83E132B8C1844DEF57 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8E6CC3BD654674B899480FC2100FAB81 /* Pods.release.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + ADC7294C2FDBA2958A6CB05F9D2585E9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BB26CC8C37233104B0CD59EF23DE0661 /* AFNetworking-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + B4312DC2B7304BF5F1E609249BDE2507 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DA09B2020E2A9137848F660BA56CF6CB /* Pods.debug.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + CC688A624CB543A1DDB063D779864270 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B6E8F9C8B561C38A3C904D84E5AF6A6F /* AFNetworkActivityLogger-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13578CF905B5068DFE0FE2F89C5723E5 /* Build configuration list for PBXNativeTarget "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B4312DC2B7304BF5F1E609249BDE2507 /* Debug */, + 63B9D4B2582DDE83E132B8C1844DEF57 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0B57334D6C23DADAA4F7D802A5760EB2 /* Debug */, + 03CA91998D6773EC5D02B3DB87B8353E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4A9CAADB7542792DDF525BBD7E3C2273 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ADC7294C2FDBA2958A6CB05F9D2585E9 /* Debug */, + 305DF51FA13E80B0EAC76F683094132C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 717FE1EEBE4F9BDD8FCAAEECC4A5B8C7 /* Build configuration list for PBXNativeTarget "AFNetworkActivityLogger" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CC688A624CB543A1DDB063D779864270 /* Debug */, + 620E1E3F3D355635F7D1E8751A2DE472 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-Private.xcconfig b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-Private.xcconfig new file mode 100644 index 00000000000..6895eb2fcc9 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-Private.xcconfig @@ -0,0 +1,5 @@ +#include "AFNetworkActivityLogger.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public/AFNetworking" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-dummy.m b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-dummy.m new file mode 100644 index 00000000000..740d1d5861a --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_AFNetworkActivityLogger : NSObject +@end +@implementation PodsDummy_AFNetworkActivityLogger +@end diff --git a/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-prefix.pch b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-prefix.pch similarity index 62% rename from ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-prefix.pch rename to ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-prefix.pch index 95cf11d9fb0..aa992a4adb2 100644 --- a/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger-prefix.pch +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger-prefix.pch @@ -2,4 +2,3 @@ #import #endif -#import "Pods-environment.h" diff --git a/ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger.xcconfig b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger.xcconfig similarity index 100% rename from ios/Pods/Target Support Files/Pods-AFNetworkActivityLogger/Pods-AFNetworkActivityLogger.xcconfig rename to ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworkActivityLogger/AFNetworkActivityLogger.xcconfig diff --git a/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig new file mode 100644 index 00000000000..10fd728e04c --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig @@ -0,0 +1,6 @@ +#include "AFNetworking.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public/AFNetworking" +OTHER_LDFLAGS = ${AFNETWORKING_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m new file mode 100644 index 00000000000..6a29cf8dadb --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_AFNetworking : NSObject +@end +@implementation PodsDummy_AFNetworking +@end diff --git a/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch similarity index 62% rename from ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch rename to ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch index 95cf11d9fb0..aa992a4adb2 100644 --- a/ios/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch @@ -2,4 +2,3 @@ #import #endif -#import "Pods-environment.h" diff --git a/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig new file mode 100644 index 00000000000..b0b2d5292eb --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig @@ -0,0 +1 @@ +AFNETWORKING_OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" \ No newline at end of file diff --git a/ios/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown similarity index 100% rename from ios/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown rename to ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown diff --git a/ios/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-acknowledgements.plist similarity index 100% rename from ios/Pods/Target Support Files/Pods/Pods-acknowledgements.plist rename to ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-acknowledgements.plist diff --git a/ios/Pods/Target Support Files/Pods/Pods-dummy.m b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-dummy.m similarity index 100% rename from ios/Pods/Target Support Files/Pods/Pods-dummy.m rename to ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-dummy.m diff --git a/ios/Pods/Target Support Files/Pods/Pods-resources.sh b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-resources.sh similarity index 72% rename from ios/Pods/Target Support Files/Pods/Pods-resources.sh rename to ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-resources.sh index e149064a090..ea685a22b1d 100755 --- a/ios/Pods/Target Support Files/Pods/Pods-resources.sh +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods-resources.sh @@ -6,6 +6,14 @@ mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" +XCASSET_FILES=() + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + install_resource() { case $1 in @@ -14,7 +22,7 @@ install_resource() ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.framework) @@ -36,6 +44,8 @@ install_resource() xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" ;; *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; /*) echo "$1" @@ -48,13 +58,15 @@ install_resource() esac } +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then case "${TARGETED_DEVICE_FAMILY}" in 1,2) @@ -70,5 +82,14 @@ then TARGET_DEVICE_ARGS="--target-device mac" ;; esac - find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi diff --git a/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods.debug.xcconfig new file mode 100644 index 00000000000..5568432ba2c --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public/AFNetworking" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworkActivityLogger" -l"AFNetworking" -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods.release.xcconfig b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods.release.xcconfig new file mode 100644 index 00000000000..012751458d2 --- /dev/null +++ b/ios/SAPTracker/src/xcode/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" "${PODS_ROOT}/Headers/Public/AFNetworking" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworkActivityLogger" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/ios/SAPTracker.xcodeproj/project.pbxproj b/ios/SAPTracker/src/xcode/SAPTracker.xcodeproj/project.pbxproj similarity index 97% rename from ios/SAPTracker.xcodeproj/project.pbxproj rename to ios/SAPTracker/src/xcode/SAPTracker.xcodeproj/project.pbxproj index 80e6468adb9..718cb1dbcf2 100644 --- a/ios/SAPTracker.xcodeproj/project.pbxproj +++ b/ios/SAPTracker/src/xcode/SAPTracker.xcodeproj/project.pbxproj @@ -317,7 +317,6 @@ 7FED45C81A25F5900022505F /* competitor1.json in Resources */ = {isa = PBXBuildFile; fileRef = 7FED45C21A25F5900022505F /* competitor1.json */; }; 7FED45CA1A25F5910022505F /* event1.json in Resources */ = {isa = PBXBuildFile; fileRef = 7FED45C41A25F5900022505F /* event1.json */; }; 7FED45CC1A25F5910022505F /* leaderboard1.json in Resources */ = {isa = PBXBuildFile; fileRef = 7FED45C61A25F5900022505F /* leaderboard1.json */; }; - EAFE4EA346FB83C2B67C60B7 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 06377F0B2F2854497073FC0E /* libPods.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -328,6 +327,34 @@ remoteGlobalIDString = 7F83F14F19F154F000C53328; remoteInfo = SAPTracker; }; + C89A171B1B6A27CF00CE6814 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C8B31F771B68DAD400C8A809 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A25D0CBC0C6347F3CD6A0FF8B5EAA94E; + remoteInfo = AFNetworkActivityLogger; + }; + C89A171D1B6A27CF00CE6814 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C8B31F771B68DAD400C8A809 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 491F530684ABE0C250361CF89F4D98F2; + remoteInfo = AFNetworking; + }; + C8B31F7D1B68DAD500C8A809 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C8B31F771B68DAD400C8A809 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = AA2D50EF0C96F46B694820F2; + remoteInfo = Pods; + }; + C8B31F831B68DAEE00C8A809 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C8B31F771B68DAD400C8A809 /* Pods.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = A6D0CE1BA9EEBE59D9198973ED1466CE; + remoteInfo = Pods; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -649,6 +676,7 @@ 7FED45C21A25F5900022505F /* competitor1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = competitor1.json; sourceTree = ""; }; 7FED45C41A25F5900022505F /* event1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = event1.json; sourceTree = ""; }; 7FED45C61A25F5900022505F /* leaderboard1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = leaderboard1.json; sourceTree = ""; }; + C8B31F771B68DAD400C8A809 /* Pods.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Pods.xcodeproj; path = Pods/Pods.xcodeproj; sourceTree = ""; }; CF98F25F363113C51C7CB1F3 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; EA431711E588F5A2B31A62AC /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -660,7 +688,6 @@ files = ( 7FC5232D19F6AEE800BBFDCC /* AVFoundation.framework in Frameworks */, 7F83F17619F1574700C53328 /* CoreLocation.framework in Frameworks */, - EAFE4EA346FB83C2B67C60B7 /* libPods.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1044,6 +1071,7 @@ 7F83F14719F154F000C53328 = { isa = PBXGroup; children = ( + C8B31F771B68DAD400C8A809 /* Pods.xcodeproj */, 7FAFB0B51A603C3E0054D457 /* LICENSE.txt */, 7F83F15219F154F000C53328 /* SAPTracker */, 7F83F16819F154F000C53328 /* SAPTrackerTests */, @@ -1112,6 +1140,16 @@ name = JSON; sourceTree = ""; }; + C8B31F781B68DAD400C8A809 /* Products */ = { + isa = PBXGroup; + children = ( + C89A171C1B6A27CF00CE6814 /* libAFNetworkActivityLogger.a */, + C89A171E1B6A27CF00CE6814 /* libAFNetworking.a */, + C8B31F7E1B68DAD500C8A809 /* libPods.a */, + ); + name = Products; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1119,16 +1157,15 @@ isa = PBXNativeTarget; buildConfigurationList = 7F83F16F19F154F000C53328 /* Build configuration list for PBXNativeTarget "SAPTracker" */; buildPhases = ( - 2F709DA84C6F8CAB03CB7F15 /* Check Pods Manifest.lock */, 7F83F14C19F154F000C53328 /* Sources */, 7F83F14D19F154F000C53328 /* Frameworks */, 7F83F14E19F154F000C53328 /* Resources */, - DBF8E8393235EF60C87EB83C /* Copy Pods Resources */, 7FF3E4BE1A1DFCF20012F1FB /* ShellScript */, ); buildRules = ( ); dependencies = ( + C8B31F841B68DAEE00C8A809 /* PBXTargetDependency */, ); name = SAPTracker; productName = SAPTracker; @@ -1164,7 +1201,6 @@ TargetAttributes = { 7F83F14F19F154F000C53328 = { CreatedOnToolsVersion = 6.0.1; - DevelopmentTeam = RRE8EFVCE3; }; 7F83F16419F154F000C53328 = { CreatedOnToolsVersion = 6.0.1; @@ -1184,6 +1220,12 @@ mainGroup = 7F83F14719F154F000C53328; productRefGroup = 7F83F15119F154F000C53328 /* Products */; projectDirPath = ""; + projectReferences = ( + { + ProductGroup = C8B31F781B68DAD400C8A809 /* Products */; + ProjectRef = C8B31F771B68DAD400C8A809 /* Pods.xcodeproj */; + }, + ); projectRoot = ""; targets = ( 7F83F14F19F154F000C53328 /* SAPTracker */, @@ -1192,6 +1234,30 @@ }; /* End PBXProject section */ +/* Begin PBXReferenceProxy section */ + C89A171C1B6A27CF00CE6814 /* libAFNetworkActivityLogger.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libAFNetworkActivityLogger.a; + remoteRef = C89A171B1B6A27CF00CE6814 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C89A171E1B6A27CF00CE6814 /* libAFNetworking.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libAFNetworking.a; + remoteRef = C89A171D1B6A27CF00CE6814 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C8B31F7E1B68DAD500C8A809 /* libPods.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libPods.a; + remoteRef = C8B31F7D1B68DAD500C8A809 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + /* Begin PBXResourcesBuildPhase section */ 7F83F14E19F154F000C53328 /* Resources */ = { isa = PBXResourcesBuildPhase; @@ -1483,21 +1549,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2F709DA84C6F8CAB03CB7F15 /* Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; 7FF3E4BE1A1DFCF20012F1FB /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1511,21 +1562,6 @@ shellPath = /bin/sh; shellScript = "FILE=\"${SRCROOT}/HockeySDK-iOS/BuildAgent\"\nif [ -f \"$FILE\" ]; then\n\"$FILE\"\nfi"; }; - DBF8E8393235EF60C87EB83C /* Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -1583,6 +1619,11 @@ target = 7F83F14F19F154F000C53328 /* SAPTracker */; targetProxy = 7F83F16619F154F000C53328 /* PBXContainerItemProxy */; }; + C8B31F841B68DAEE00C8A809 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Pods; + targetProxy = C8B31F831B68DAEE00C8A809 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -1650,9 +1691,17 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(PROJECT_DIR)/Pods/**", + "${PROJECT_DIR}/Pods/build/${BUILD_STYLE}-${PLATFORM_NAME}/**", + ); IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LIBRARY_SEARCH_PATHS = "${PROJECT_DIR}/Pods/build/${BUILD_STYLE}-${PLATFORM_NAME}/**"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + PODS_ROOT = "$(PROJECT_DIR)/Pods"; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; @@ -1686,8 +1735,17 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(PROJECT_DIR)/Pods/**", + "${PROJECT_DIR}/Pods/build/${BUILD_STYLE}-${PLATFORM_NAME}/**", + ); IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LIBRARY_SEARCH_PATHS = "${PROJECT_DIR}/Pods/build/${BUILD_STYLE}-${PLATFORM_NAME}/**"; MTL_ENABLE_DEBUG_INFO = NO; + ONLY_ACTIVE_ARCH = YES; + PODS_ROOT = "$(PROJECT_DIR)/Pods"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -1699,14 +1757,15 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer: Raimund Wege (WAGJHJEE6V)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Raimund Wege (WAGJHJEE6V)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = SAPTracker/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_SWIFT_FLAGS = "-D DEBUG"; + PODS_ROOT = "$(PROJECT_DIR)/Pods"; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = "8a90e486-9896-4d99-91cd-7dc200bf6ab4"; + PROVISIONING_PROFILE = ""; SWIFT_OBJC_BRIDGING_HEADER = SAPTracker/bridge.h; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -1718,14 +1777,15 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Distribution: Ubilabs GmbH (RRE8EFVCE3)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Ubilabs GmbH (RRE8EFVCE3)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; INFOPLIST_FILE = SAPTracker/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_SWIFT_FLAGS = ""; + PODS_ROOT = "$(PROJECT_DIR)/Pods"; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = "b69fb7aa-cf0e-4b86-8907-ea643ed64cba"; + PROVISIONING_PROFILE = ""; SWIFT_OBJC_BRIDGING_HEADER = SAPTracker/bridge.h; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -1746,6 +1806,7 @@ ); INFOPLIST_FILE = SAPTrackerTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PODS_ROOT = "$(PROJECT_DIR)/Pods"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = SAPTracker/bridge.h; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SAPTracker.app/SAPTracker"; @@ -1763,6 +1824,7 @@ ); INFOPLIST_FILE = SAPTrackerTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PODS_ROOT = "$(PROJECT_DIR)/Pods"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = SAPTracker/bridge.h; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SAPTracker.app/SAPTracker"; diff --git a/ios/SAPTracker/APIManager.swift b/ios/SAPTracker/src/xcode/SAPTracker/APIManager.swift similarity index 100% rename from ios/SAPTracker/APIManager.swift rename to ios/SAPTracker/src/xcode/SAPTracker/APIManager.swift diff --git a/ios/SAPTracker/AboutViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/AboutViewController.swift similarity index 100% rename from ios/SAPTracker/AboutViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/AboutViewController.swift diff --git a/ios/SAPTracker/AcceptTermsViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/AcceptTermsViewController.swift similarity index 100% rename from ios/SAPTracker/AcceptTermsViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/AcceptTermsViewController.swift diff --git a/ios/SAPTracker/AppDelegate.swift b/ios/SAPTracker/src/xcode/SAPTracker/AppDelegate.swift similarity index 100% rename from ios/SAPTracker/AppDelegate.swift rename to ios/SAPTracker/src/xcode/SAPTracker/AppDelegate.swift diff --git a/ios/SAPTracker/Appearance.h b/ios/SAPTracker/src/xcode/SAPTracker/Appearance.h similarity index 100% rename from ios/SAPTracker/Appearance.h rename to ios/SAPTracker/src/xcode/SAPTracker/Appearance.h diff --git a/ios/SAPTracker/Appearance.m b/ios/SAPTracker/src/xcode/SAPTracker/Appearance.m similarity index 100% rename from ios/SAPTracker/Appearance.m rename to ios/SAPTracker/src/xcode/SAPTracker/Appearance.m diff --git a/ios/SAPTracker/Base.lproj/Localizable.strings b/ios/SAPTracker/src/xcode/SAPTracker/Base.lproj/Localizable.strings similarity index 100% rename from ios/SAPTracker/Base.lproj/Localizable.strings rename to ios/SAPTracker/src/xcode/SAPTracker/Base.lproj/Localizable.strings diff --git a/ios/SAPTracker/Base.lproj/Main.storyboard b/ios/SAPTracker/src/xcode/SAPTracker/Base.lproj/Main.storyboard similarity index 100% rename from ios/SAPTracker/Base.lproj/Main.storyboard rename to ios/SAPTracker/src/xcode/SAPTracker/Base.lproj/Main.storyboard diff --git a/ios/SAPTracker/Base.lproj/eula-ios.html b/ios/SAPTracker/src/xcode/SAPTracker/Base.lproj/eula-ios.html similarity index 100% rename from ios/SAPTracker/Base.lproj/eula-ios.html rename to ios/SAPTracker/src/xcode/SAPTracker/Base.lproj/eula-ios.html diff --git a/ios/SAPTracker/BatteryManager.swift b/ios/SAPTracker/src/xcode/SAPTracker/BatteryManager.swift similarity index 100% rename from ios/SAPTracker/BatteryManager.swift rename to ios/SAPTracker/src/xcode/SAPTracker/BatteryManager.swift diff --git a/ios/SAPTracker/CheckIn.swift b/ios/SAPTracker/src/xcode/SAPTracker/CheckIn.swift similarity index 100% rename from ios/SAPTracker/CheckIn.swift rename to ios/SAPTracker/src/xcode/SAPTracker/CheckIn.swift diff --git a/ios/SAPTracker/Competitor.swift b/ios/SAPTracker/src/xcode/SAPTracker/Competitor.swift similarity index 100% rename from ios/SAPTracker/Competitor.swift rename to ios/SAPTracker/src/xcode/SAPTracker/Competitor.swift diff --git a/ios/SAPTracker/CoreData.xcdatamodeld/CoreData.xcdatamodel/contents b/ios/SAPTracker/src/xcode/SAPTracker/CoreData.xcdatamodeld/CoreData.xcdatamodel/contents similarity index 100% rename from ios/SAPTracker/CoreData.xcdatamodeld/CoreData.xcdatamodel/contents rename to ios/SAPTracker/src/xcode/SAPTracker/CoreData.xcdatamodeld/CoreData.xcdatamodel/contents diff --git a/ios/SAPTracker/CourseViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/CourseViewController.swift similarity index 100% rename from ios/SAPTracker/CourseViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/CourseViewController.swift diff --git a/ios/SAPTracker/DataManager.swift b/ios/SAPTracker/src/xcode/SAPTracker/DataManager.swift similarity index 95% rename from ios/SAPTracker/DataManager.swift rename to ios/SAPTracker/src/xcode/SAPTracker/DataManager.swift index 5dcef3d0428..4a9ee0ed93f 100644 --- a/ios/SAPTracker/DataManager.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/DataManager.swift @@ -38,18 +38,21 @@ public class DataManager: NSObject { // MARK: - notification callbacks - /* New location detected, store to database. */ + /* New location detected, store to database if location is valid. */ func newLocation(notification: NSNotification) { if notification == NSNull() { return } - let gpsFix = NSEntityDescription.insertNewObjectForEntityForName("GPSFix", inManagedObjectContext: self.managedObjectContext!) as! GPSFix - gpsFix.initWithDictionary(notification.userInfo!) - if selectedCheckIn == nil { - abort(); + var dict = notification.userInfo!; + if dict["isValid"] as! Bool { + let gpsFix = NSEntityDescription.insertNewObjectForEntityForName("GPSFix", inManagedObjectContext: self.managedObjectContext!) as! GPSFix + gpsFix.initWithDictionary(dict) + if selectedCheckIn == nil { + abort(); + } + gpsFix.checkIn = selectedCheckIn! + saveContext() } - gpsFix.checkIn = selectedCheckIn! - saveContext() } /* Tracking stopped, save data to disk. */ diff --git a/ios/SAPTracker/DeviceUDIDManager.swift b/ios/SAPTracker/src/xcode/SAPTracker/DeviceUDIDManager.swift similarity index 100% rename from ios/SAPTracker/DeviceUDIDManager.swift rename to ios/SAPTracker/src/xcode/SAPTracker/DeviceUDIDManager.swift diff --git a/ios/SAPTracker/Event.swift b/ios/SAPTracker/src/xcode/SAPTracker/Event.swift similarity index 100% rename from ios/SAPTracker/Event.swift rename to ios/SAPTracker/src/xcode/SAPTracker/Event.swift diff --git a/ios/SAPTracker/Extensions.swift b/ios/SAPTracker/src/xcode/SAPTracker/Extensions.swift similarity index 100% rename from ios/SAPTracker/Extensions.swift rename to ios/SAPTracker/src/xcode/SAPTracker/Extensions.swift diff --git a/ios/SAPTracker/GPSAccuracyView.swift b/ios/SAPTracker/src/xcode/SAPTracker/GPSAccuracyView.swift similarity index 100% rename from ios/SAPTracker/GPSAccuracyView.swift rename to ios/SAPTracker/src/xcode/SAPTracker/GPSAccuracyView.swift diff --git a/ios/SAPTracker/GPSFix.swift b/ios/SAPTracker/src/xcode/SAPTracker/GPSFix.swift similarity index 100% rename from ios/SAPTracker/GPSFix.swift rename to ios/SAPTracker/src/xcode/SAPTracker/GPSFix.swift diff --git a/ios/SAPTracker/HomeViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/HomeViewController.swift similarity index 100% rename from ios/SAPTracker/HomeViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/HomeViewController.swift diff --git a/ios/SAPTracker/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/AppIcon.appiconset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-120.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-120.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-120.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-120.png diff --git a/ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-152.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-152.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-152.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-152.png diff --git a/ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-58.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-58.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-58.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-58.png diff --git a/ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-76.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-76.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-76.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-76.png diff --git a/ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-80.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-80.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-80.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/AppIcon.appiconset/sap_sailing_app_icon-80.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1024_768.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1024_768.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1024_768.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1024_768.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1242_2208.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1242_2208.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1242_2208.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1242_2208.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1536_2048.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1536_2048.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1536_2048.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_1536_2048.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_2048_1536.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_2048_1536.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_2048_1536.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_2048_1536.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_2208_1242.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_2208_1242.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_2208_1242.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_2208_1242.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_640_1136.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_640_1136.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_640_1136.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_640_1136.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_640_960.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_640_960.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_640_960.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_640_960.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_750_1334.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_750_1334.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_750_1334.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_750_1334.png diff --git a/ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_768_1024.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_768_1024.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_768_1024.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/LaunchImage.launchimage/launch_768_1024.png diff --git a/ios/SAPTracker/Images.xcassets/camera.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/camera.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/camera.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/camera.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/camera.imageset/ic_menu_camera.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/camera.imageset/ic_menu_camera.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/camera.imageset/ic_menu_camera.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/camera.imageset/ic_menu_camera.png diff --git a/ios/SAPTracker/Images.xcassets/edit.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/edit.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/edit.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/edit.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/edit.imageset/edit@3x.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/edit.imageset/edit@3x.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/edit.imageset/edit@3x.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/edit.imageset/edit@3x.png diff --git a/ios/SAPTracker/Images.xcassets/home_bg.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/home_bg.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/home_bg.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/home_bg.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/home_bg.imageset/d78923ad.Image_big.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/home_bg.imageset/d78923ad.Image_big.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/home_bg.imageset/d78923ad.Image_big.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/home_bg.imageset/d78923ad.Image_big.png diff --git a/ios/SAPTracker/Images.xcassets/navbar_bg.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/navbar_bg.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/navbar_bg.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/navbar_bg.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/navbar_bg.imageset/navbar_bg_320.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/navbar_bg.imageset/navbar_bg_320.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/navbar_bg.imageset/navbar_bg_320.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/navbar_bg.imageset/navbar_bg_320.png diff --git a/ios/SAPTracker/Images.xcassets/profile_placeholder.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/profile_placeholder.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/profile_placeholder.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/profile_placeholder.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/profile_placeholder.imageset/profile_placeholder.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/profile_placeholder.imageset/profile_placeholder.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/profile_placeholder.imageset/profile_placeholder.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/profile_placeholder.imageset/profile_placeholder.png diff --git a/ios/SAPTracker/Images.xcassets/sap_logo.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/sap_logo.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/sap_logo.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/sap_logo.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/sap_logo.imageset/sap_logo.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/sap_logo.imageset/sap_logo.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/sap_logo.imageset/sap_logo.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/sap_logo.imageset/sap_logo.png diff --git a/ios/SAPTracker/Images.xcassets/scan_green.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/scan_green.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/scan_green.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/scan_green.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/scan_green.imageset/scan_green.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/scan_green.imageset/scan_green.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/scan_green.imageset/scan_green.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/scan_green.imageset/scan_green.png diff --git a/ios/SAPTracker/Images.xcassets/scan_white.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/scan_white.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/scan_white.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/scan_white.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/scan_white.imageset/scan_white.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/scan_white.imageset/scan_white.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/scan_white.imageset/scan_white.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/scan_white.imageset/scan_white.png diff --git a/ios/SAPTracker/Images.xcassets/settings.imageset/Contents.json b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/settings.imageset/Contents.json similarity index 100% rename from ios/SAPTracker/Images.xcassets/settings.imageset/Contents.json rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/settings.imageset/Contents.json diff --git a/ios/SAPTracker/Images.xcassets/settings.imageset/settings-44.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/settings.imageset/settings-44.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/settings.imageset/settings-44.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/settings.imageset/settings-44.png diff --git a/ios/SAPTracker/Images.xcassets/settings.imageset/settings@3x.png b/ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/settings.imageset/settings@3x.png similarity index 100% rename from ios/SAPTracker/Images.xcassets/settings.imageset/settings@3x.png rename to ios/SAPTracker/src/xcode/SAPTracker/Images.xcassets/settings.imageset/settings@3x.png diff --git a/ios/SAPTracker/Info.plist b/ios/SAPTracker/src/xcode/SAPTracker/Info.plist similarity index 98% rename from ios/SAPTracker/Info.plist rename to ios/SAPTracker/src/xcode/SAPTracker/Info.plist index 64799a8edad..ebfa0e651e5 100644 --- a/ios/SAPTracker/Info.plist +++ b/ios/SAPTracker/src/xcode/SAPTracker/Info.plist @@ -30,7 +30,7 @@ CFBundleVersion - 16 + 19 LSRequiresIPhoneOS NSLocationAlwaysUsageDescription diff --git a/ios/SAPTracker/LeaderBoard.swift b/ios/SAPTracker/src/xcode/SAPTracker/LeaderBoard.swift similarity index 100% rename from ios/SAPTracker/LeaderBoard.swift rename to ios/SAPTracker/src/xcode/SAPTracker/LeaderBoard.swift diff --git a/ios/SAPTracker/LeaderBoardViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/LeaderBoardViewController.swift similarity index 100% rename from ios/SAPTracker/LeaderBoardViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/LeaderBoardViewController.swift diff --git a/ios/SAPTracker/LocationManager.swift b/ios/SAPTracker/src/xcode/SAPTracker/LocationManager.swift similarity index 86% rename from ios/SAPTracker/LocationManager.swift rename to ios/SAPTracker/src/xcode/SAPTracker/LocationManager.swift index 9404b0c9cd8..7302013071a 100644 --- a/ios/SAPTracker/LocationManager.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/LocationManager.swift @@ -83,6 +83,23 @@ class LocationManager: NSObject, CLLocationManagerDelegate { "speed": location.speed, "course": location.course, "horizontalAccuracy": location.horizontalAccuracy, + "isValid": isLocationValid(location) ] } + + static let REQ_ACCURACY : CLLocationAccuracy = 10 + static let REQ_TIME : NSTimeInterval = 10 + class func isLocationValid(location: CLLocation) -> Bool { + let accuracy = location.horizontalAccuracy + let time = location.timestamp + let elapsed = time.timeIntervalSinceDate(NSDate()) + if elapsed > REQ_TIME { + return false + } + if accuracy < 0 || accuracy > REQ_ACCURACY { + return false + } + return true; + } + } \ No newline at end of file diff --git a/ios/SAPTracker/OpenSans-Bold.ttf b/ios/SAPTracker/src/xcode/SAPTracker/OpenSans-Bold.ttf similarity index 100% rename from ios/SAPTracker/OpenSans-Bold.ttf rename to ios/SAPTracker/src/xcode/SAPTracker/OpenSans-Bold.ttf diff --git a/ios/SAPTracker/OpenSans-Light.ttf b/ios/SAPTracker/src/xcode/SAPTracker/OpenSans-Light.ttf similarity index 100% rename from ios/SAPTracker/OpenSans-Light.ttf rename to ios/SAPTracker/src/xcode/SAPTracker/OpenSans-Light.ttf diff --git a/ios/SAPTracker/OpenSans-Regular.ttf b/ios/SAPTracker/src/xcode/SAPTracker/OpenSans-Regular.ttf similarity index 100% rename from ios/SAPTracker/OpenSans-Regular.ttf rename to ios/SAPTracker/src/xcode/SAPTracker/OpenSans-Regular.ttf diff --git a/ios/SAPTracker/OpenSans-Semibold.ttf b/ios/SAPTracker/src/xcode/SAPTracker/OpenSans-Semibold.ttf similarity index 100% rename from ios/SAPTracker/OpenSans-Semibold.ttf rename to ios/SAPTracker/src/xcode/SAPTracker/OpenSans-Semibold.ttf diff --git a/ios/SAPTracker/QRCodeData.swift b/ios/SAPTracker/src/xcode/SAPTracker/QRCodeData.swift similarity index 100% rename from ios/SAPTracker/QRCodeData.swift rename to ios/SAPTracker/src/xcode/SAPTracker/QRCodeData.swift diff --git a/ios/SAPTracker/QRCodeManager.swift b/ios/SAPTracker/src/xcode/SAPTracker/QRCodeManager.swift similarity index 100% rename from ios/SAPTracker/QRCodeManager.swift rename to ios/SAPTracker/src/xcode/SAPTracker/QRCodeManager.swift diff --git a/ios/SAPTracker/RegattaViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/RegattaViewController.swift similarity index 100% rename from ios/SAPTracker/RegattaViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/RegattaViewController.swift diff --git a/ios/SAPTracker/ScanViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/ScanViewController.swift similarity index 100% rename from ios/SAPTracker/ScanViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/ScanViewController.swift diff --git a/ios/SAPTracker/SendGPSFixController.swift b/ios/SAPTracker/src/xcode/SAPTracker/SendGPSFixController.swift similarity index 100% rename from ios/SAPTracker/SendGPSFixController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/SendGPSFixController.swift diff --git a/ios/SAPTracker/SettingsViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/SettingsViewController.swift similarity index 100% rename from ios/SAPTracker/SettingsViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/SettingsViewController.swift diff --git a/ios/SAPTracker/SpeedViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/SpeedViewController.swift similarity index 100% rename from ios/SAPTracker/SpeedViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/SpeedViewController.swift diff --git a/ios/SAPTracker/SplashScreenDummy.swift b/ios/SAPTracker/src/xcode/SAPTracker/SplashScreenDummy.swift similarity index 100% rename from ios/SAPTracker/SplashScreenDummy.swift rename to ios/SAPTracker/src/xcode/SAPTracker/SplashScreenDummy.swift diff --git a/ios/SAPTracker/TimerViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/TimerViewController.swift similarity index 100% rename from ios/SAPTracker/TimerViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/TimerViewController.swift diff --git a/ios/SAPTracker/TrackingPageViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/TrackingPageViewController.swift similarity index 100% rename from ios/SAPTracker/TrackingPageViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/TrackingPageViewController.swift diff --git a/ios/SAPTracker/TrackingViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/TrackingViewController.swift similarity index 100% rename from ios/SAPTracker/TrackingViewController.swift rename to ios/SAPTracker/src/xcode/SAPTracker/TrackingViewController.swift diff --git a/ios/SAPTracker/bridge.h b/ios/SAPTracker/src/xcode/SAPTracker/bridge.h similarity index 100% rename from ios/SAPTracker/bridge.h rename to ios/SAPTracker/src/xcode/SAPTracker/bridge.h diff --git a/ios/SAPTracker/de.lproj/Localizable.strings b/ios/SAPTracker/src/xcode/SAPTracker/de.lproj/Localizable.strings similarity index 100% rename from ios/SAPTracker/de.lproj/Localizable.strings rename to ios/SAPTracker/src/xcode/SAPTracker/de.lproj/Localizable.strings diff --git a/ios/SAPTracker/de.lproj/Main.strings b/ios/SAPTracker/src/xcode/SAPTracker/de.lproj/Main.strings similarity index 100% rename from ios/SAPTracker/de.lproj/Main.strings rename to ios/SAPTracker/src/xcode/SAPTracker/de.lproj/Main.strings diff --git a/ios/SAPTracker/de.lproj/eula-ios.html b/ios/SAPTracker/src/xcode/SAPTracker/de.lproj/eula-ios.html similarity index 100% rename from ios/SAPTracker/de.lproj/eula-ios.html rename to ios/SAPTracker/src/xcode/SAPTracker/de.lproj/eula-ios.html diff --git a/ios/SAPTracker/flags/AD.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AD.png similarity index 100% rename from ios/SAPTracker/flags/AD.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AD.png diff --git a/ios/SAPTracker/flags/AE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AE.png similarity index 100% rename from ios/SAPTracker/flags/AE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AE.png diff --git a/ios/SAPTracker/flags/AF.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AF.png similarity index 100% rename from ios/SAPTracker/flags/AF.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AF.png diff --git a/ios/SAPTracker/flags/AG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AG.png similarity index 100% rename from ios/SAPTracker/flags/AG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AG.png diff --git a/ios/SAPTracker/flags/AI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AI.png similarity index 100% rename from ios/SAPTracker/flags/AI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AI.png diff --git a/ios/SAPTracker/flags/AL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AL.png similarity index 100% rename from ios/SAPTracker/flags/AL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AL.png diff --git a/ios/SAPTracker/flags/AM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AM.png similarity index 100% rename from ios/SAPTracker/flags/AM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AM.png diff --git a/ios/SAPTracker/flags/AN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AN.png similarity index 100% rename from ios/SAPTracker/flags/AN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AN.png diff --git a/ios/SAPTracker/flags/AO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AO.png similarity index 100% rename from ios/SAPTracker/flags/AO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AO.png diff --git a/ios/SAPTracker/flags/AQ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AQ.png similarity index 100% rename from ios/SAPTracker/flags/AQ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AQ.png diff --git a/ios/SAPTracker/flags/AR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AR.png similarity index 100% rename from ios/SAPTracker/flags/AR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AR.png diff --git a/ios/SAPTracker/flags/AS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AS.png similarity index 100% rename from ios/SAPTracker/flags/AS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AS.png diff --git a/ios/SAPTracker/flags/AT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AT.png similarity index 100% rename from ios/SAPTracker/flags/AT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AT.png diff --git a/ios/SAPTracker/flags/AU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AU.png similarity index 100% rename from ios/SAPTracker/flags/AU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AU.png diff --git a/ios/SAPTracker/flags/AW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AW.png similarity index 100% rename from ios/SAPTracker/flags/AW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AW.png diff --git a/ios/SAPTracker/flags/AX.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AX.png similarity index 100% rename from ios/SAPTracker/flags/AX.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AX.png diff --git a/ios/SAPTracker/flags/AZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/AZ.png similarity index 100% rename from ios/SAPTracker/flags/AZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/AZ.png diff --git a/ios/SAPTracker/flags/BA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BA.png similarity index 100% rename from ios/SAPTracker/flags/BA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BA.png diff --git a/ios/SAPTracker/flags/BB.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BB.png similarity index 100% rename from ios/SAPTracker/flags/BB.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BB.png diff --git a/ios/SAPTracker/flags/BD.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BD.png similarity index 100% rename from ios/SAPTracker/flags/BD.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BD.png diff --git a/ios/SAPTracker/flags/BE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BE.png similarity index 100% rename from ios/SAPTracker/flags/BE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BE.png diff --git a/ios/SAPTracker/flags/BF.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BF.png similarity index 100% rename from ios/SAPTracker/flags/BF.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BF.png diff --git a/ios/SAPTracker/flags/BG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BG.png similarity index 100% rename from ios/SAPTracker/flags/BG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BG.png diff --git a/ios/SAPTracker/flags/BH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BH.png similarity index 100% rename from ios/SAPTracker/flags/BH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BH.png diff --git a/ios/SAPTracker/flags/BI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BI.png similarity index 100% rename from ios/SAPTracker/flags/BI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BI.png diff --git a/ios/SAPTracker/flags/BJ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BJ.png similarity index 100% rename from ios/SAPTracker/flags/BJ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BJ.png diff --git a/ios/SAPTracker/flags/BL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BL.png similarity index 100% rename from ios/SAPTracker/flags/BL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BL.png diff --git a/ios/SAPTracker/flags/BM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BM.png similarity index 100% rename from ios/SAPTracker/flags/BM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BM.png diff --git a/ios/SAPTracker/flags/BN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BN.png similarity index 100% rename from ios/SAPTracker/flags/BN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BN.png diff --git a/ios/SAPTracker/flags/BO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BO.png similarity index 100% rename from ios/SAPTracker/flags/BO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BO.png diff --git a/ios/SAPTracker/flags/BR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BR.png similarity index 100% rename from ios/SAPTracker/flags/BR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BR.png diff --git a/ios/SAPTracker/flags/BS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BS.png similarity index 100% rename from ios/SAPTracker/flags/BS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BS.png diff --git a/ios/SAPTracker/flags/BT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BT.png similarity index 100% rename from ios/SAPTracker/flags/BT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BT.png diff --git a/ios/SAPTracker/flags/BW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BW.png similarity index 100% rename from ios/SAPTracker/flags/BW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BW.png diff --git a/ios/SAPTracker/flags/BY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BY.png similarity index 100% rename from ios/SAPTracker/flags/BY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BY.png diff --git a/ios/SAPTracker/flags/BZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/BZ.png similarity index 100% rename from ios/SAPTracker/flags/BZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/BZ.png diff --git a/ios/SAPTracker/flags/CA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CA.png similarity index 100% rename from ios/SAPTracker/flags/CA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CA.png diff --git a/ios/SAPTracker/flags/CC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CC.png similarity index 100% rename from ios/SAPTracker/flags/CC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CC.png diff --git a/ios/SAPTracker/flags/CD.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CD.png similarity index 100% rename from ios/SAPTracker/flags/CD.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CD.png diff --git a/ios/SAPTracker/flags/CF.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CF.png similarity index 100% rename from ios/SAPTracker/flags/CF.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CF.png diff --git a/ios/SAPTracker/flags/CG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CG.png similarity index 100% rename from ios/SAPTracker/flags/CG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CG.png diff --git a/ios/SAPTracker/flags/CH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CH.png similarity index 100% rename from ios/SAPTracker/flags/CH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CH.png diff --git a/ios/SAPTracker/flags/CI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CI.png similarity index 100% rename from ios/SAPTracker/flags/CI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CI.png diff --git a/ios/SAPTracker/flags/CK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CK.png similarity index 100% rename from ios/SAPTracker/flags/CK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CK.png diff --git a/ios/SAPTracker/flags/CL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CL.png similarity index 100% rename from ios/SAPTracker/flags/CL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CL.png diff --git a/ios/SAPTracker/flags/CM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CM.png similarity index 100% rename from ios/SAPTracker/flags/CM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CM.png diff --git a/ios/SAPTracker/flags/CN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CN.png similarity index 100% rename from ios/SAPTracker/flags/CN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CN.png diff --git a/ios/SAPTracker/flags/CO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CO.png similarity index 100% rename from ios/SAPTracker/flags/CO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CO.png diff --git a/ios/SAPTracker/flags/CR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CR.png similarity index 100% rename from ios/SAPTracker/flags/CR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CR.png diff --git a/ios/SAPTracker/flags/CU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CU.png similarity index 100% rename from ios/SAPTracker/flags/CU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CU.png diff --git a/ios/SAPTracker/flags/CV.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CV.png similarity index 100% rename from ios/SAPTracker/flags/CV.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CV.png diff --git a/ios/SAPTracker/flags/CW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CW.png similarity index 100% rename from ios/SAPTracker/flags/CW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CW.png diff --git a/ios/SAPTracker/flags/CX.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CX.png similarity index 100% rename from ios/SAPTracker/flags/CX.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CX.png diff --git a/ios/SAPTracker/flags/CY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CY.png similarity index 100% rename from ios/SAPTracker/flags/CY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CY.png diff --git a/ios/SAPTracker/flags/CZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/CZ.png similarity index 100% rename from ios/SAPTracker/flags/CZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/CZ.png diff --git a/ios/SAPTracker/flags/DE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/DE.png similarity index 100% rename from ios/SAPTracker/flags/DE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/DE.png diff --git a/ios/SAPTracker/flags/DJ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/DJ.png similarity index 100% rename from ios/SAPTracker/flags/DJ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/DJ.png diff --git a/ios/SAPTracker/flags/DK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/DK.png similarity index 100% rename from ios/SAPTracker/flags/DK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/DK.png diff --git a/ios/SAPTracker/flags/DM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/DM.png similarity index 100% rename from ios/SAPTracker/flags/DM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/DM.png diff --git a/ios/SAPTracker/flags/DO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/DO.png similarity index 100% rename from ios/SAPTracker/flags/DO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/DO.png diff --git a/ios/SAPTracker/flags/DZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/DZ.png similarity index 100% rename from ios/SAPTracker/flags/DZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/DZ.png diff --git a/ios/SAPTracker/flags/EC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/EC.png similarity index 100% rename from ios/SAPTracker/flags/EC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/EC.png diff --git a/ios/SAPTracker/flags/EE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/EE.png similarity index 100% rename from ios/SAPTracker/flags/EE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/EE.png diff --git a/ios/SAPTracker/flags/EG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/EG.png similarity index 100% rename from ios/SAPTracker/flags/EG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/EG.png diff --git a/ios/SAPTracker/flags/EH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/EH.png similarity index 100% rename from ios/SAPTracker/flags/EH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/EH.png diff --git a/ios/SAPTracker/flags/ER.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ER.png similarity index 100% rename from ios/SAPTracker/flags/ER.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ER.png diff --git a/ios/SAPTracker/flags/ES.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ES.png similarity index 100% rename from ios/SAPTracker/flags/ES.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ES.png diff --git a/ios/SAPTracker/flags/ET.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ET.png similarity index 100% rename from ios/SAPTracker/flags/ET.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ET.png diff --git a/ios/SAPTracker/flags/EU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/EU.png similarity index 100% rename from ios/SAPTracker/flags/EU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/EU.png diff --git a/ios/SAPTracker/flags/FI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/FI.png similarity index 100% rename from ios/SAPTracker/flags/FI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/FI.png diff --git a/ios/SAPTracker/flags/FJ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/FJ.png similarity index 100% rename from ios/SAPTracker/flags/FJ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/FJ.png diff --git a/ios/SAPTracker/flags/FK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/FK.png similarity index 100% rename from ios/SAPTracker/flags/FK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/FK.png diff --git a/ios/SAPTracker/flags/FM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/FM.png similarity index 100% rename from ios/SAPTracker/flags/FM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/FM.png diff --git a/ios/SAPTracker/flags/FO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/FO.png similarity index 100% rename from ios/SAPTracker/flags/FO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/FO.png diff --git a/ios/SAPTracker/flags/FR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/FR.png similarity index 100% rename from ios/SAPTracker/flags/FR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/FR.png diff --git a/ios/SAPTracker/flags/GA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GA.png similarity index 100% rename from ios/SAPTracker/flags/GA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GA.png diff --git a/ios/SAPTracker/flags/GB.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GB.png similarity index 100% rename from ios/SAPTracker/flags/GB.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GB.png diff --git a/ios/SAPTracker/flags/GD.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GD.png similarity index 100% rename from ios/SAPTracker/flags/GD.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GD.png diff --git a/ios/SAPTracker/flags/GE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GE.png similarity index 100% rename from ios/SAPTracker/flags/GE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GE.png diff --git a/ios/SAPTracker/flags/GG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GG.png similarity index 100% rename from ios/SAPTracker/flags/GG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GG.png diff --git a/ios/SAPTracker/flags/GH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GH.png similarity index 100% rename from ios/SAPTracker/flags/GH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GH.png diff --git a/ios/SAPTracker/flags/GI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GI.png similarity index 100% rename from ios/SAPTracker/flags/GI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GI.png diff --git a/ios/SAPTracker/flags/GL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GL.png similarity index 100% rename from ios/SAPTracker/flags/GL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GL.png diff --git a/ios/SAPTracker/flags/GM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GM.png similarity index 100% rename from ios/SAPTracker/flags/GM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GM.png diff --git a/ios/SAPTracker/flags/GN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GN.png similarity index 100% rename from ios/SAPTracker/flags/GN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GN.png diff --git a/ios/SAPTracker/flags/GQ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GQ.png similarity index 100% rename from ios/SAPTracker/flags/GQ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GQ.png diff --git a/ios/SAPTracker/flags/GR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GR.png similarity index 100% rename from ios/SAPTracker/flags/GR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GR.png diff --git a/ios/SAPTracker/flags/GS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GS.png similarity index 100% rename from ios/SAPTracker/flags/GS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GS.png diff --git a/ios/SAPTracker/flags/GT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GT.png similarity index 100% rename from ios/SAPTracker/flags/GT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GT.png diff --git a/ios/SAPTracker/flags/GU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GU.png similarity index 100% rename from ios/SAPTracker/flags/GU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GU.png diff --git a/ios/SAPTracker/flags/GW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GW.png similarity index 100% rename from ios/SAPTracker/flags/GW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GW.png diff --git a/ios/SAPTracker/flags/GY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/GY.png similarity index 100% rename from ios/SAPTracker/flags/GY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/GY.png diff --git a/ios/SAPTracker/flags/HK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/HK.png similarity index 100% rename from ios/SAPTracker/flags/HK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/HK.png diff --git a/ios/SAPTracker/flags/HN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/HN.png similarity index 100% rename from ios/SAPTracker/flags/HN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/HN.png diff --git a/ios/SAPTracker/flags/HR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/HR.png similarity index 100% rename from ios/SAPTracker/flags/HR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/HR.png diff --git a/ios/SAPTracker/flags/HT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/HT.png similarity index 100% rename from ios/SAPTracker/flags/HT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/HT.png diff --git a/ios/SAPTracker/flags/HU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/HU.png similarity index 100% rename from ios/SAPTracker/flags/HU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/HU.png diff --git a/ios/SAPTracker/flags/Hello.txt b/ios/SAPTracker/src/xcode/SAPTracker/flags/Hello.txt similarity index 100% rename from ios/SAPTracker/flags/Hello.txt rename to ios/SAPTracker/src/xcode/SAPTracker/flags/Hello.txt diff --git a/ios/SAPTracker/flags/IC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IC.png similarity index 100% rename from ios/SAPTracker/flags/IC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IC.png diff --git a/ios/SAPTracker/flags/ID.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ID.png similarity index 100% rename from ios/SAPTracker/flags/ID.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ID.png diff --git a/ios/SAPTracker/flags/IE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IE.png similarity index 100% rename from ios/SAPTracker/flags/IE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IE.png diff --git a/ios/SAPTracker/flags/IL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IL.png similarity index 100% rename from ios/SAPTracker/flags/IL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IL.png diff --git a/ios/SAPTracker/flags/IM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IM.png similarity index 100% rename from ios/SAPTracker/flags/IM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IM.png diff --git a/ios/SAPTracker/flags/IN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IN.png similarity index 100% rename from ios/SAPTracker/flags/IN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IN.png diff --git a/ios/SAPTracker/flags/IQ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IQ.png similarity index 100% rename from ios/SAPTracker/flags/IQ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IQ.png diff --git a/ios/SAPTracker/flags/IR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IR.png similarity index 100% rename from ios/SAPTracker/flags/IR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IR.png diff --git a/ios/SAPTracker/flags/IS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IS.png similarity index 100% rename from ios/SAPTracker/flags/IS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IS.png diff --git a/ios/SAPTracker/flags/IT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/IT.png similarity index 100% rename from ios/SAPTracker/flags/IT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/IT.png diff --git a/ios/SAPTracker/flags/JE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/JE.png similarity index 100% rename from ios/SAPTracker/flags/JE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/JE.png diff --git a/ios/SAPTracker/flags/JM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/JM.png similarity index 100% rename from ios/SAPTracker/flags/JM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/JM.png diff --git a/ios/SAPTracker/flags/JO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/JO.png similarity index 100% rename from ios/SAPTracker/flags/JO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/JO.png diff --git a/ios/SAPTracker/flags/JP.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/JP.png similarity index 100% rename from ios/SAPTracker/flags/JP.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/JP.png diff --git a/ios/SAPTracker/flags/KE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KE.png similarity index 100% rename from ios/SAPTracker/flags/KE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KE.png diff --git a/ios/SAPTracker/flags/KG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KG.png similarity index 100% rename from ios/SAPTracker/flags/KG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KG.png diff --git a/ios/SAPTracker/flags/KH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KH.png similarity index 100% rename from ios/SAPTracker/flags/KH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KH.png diff --git a/ios/SAPTracker/flags/KI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KI.png similarity index 100% rename from ios/SAPTracker/flags/KI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KI.png diff --git a/ios/SAPTracker/flags/KM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KM.png similarity index 100% rename from ios/SAPTracker/flags/KM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KM.png diff --git a/ios/SAPTracker/flags/KN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KN.png similarity index 100% rename from ios/SAPTracker/flags/KN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KN.png diff --git a/ios/SAPTracker/flags/KP.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KP.png similarity index 100% rename from ios/SAPTracker/flags/KP.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KP.png diff --git a/ios/SAPTracker/flags/KR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KR.png similarity index 100% rename from ios/SAPTracker/flags/KR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KR.png diff --git a/ios/SAPTracker/flags/KW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KW.png similarity index 100% rename from ios/SAPTracker/flags/KW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KW.png diff --git a/ios/SAPTracker/flags/KY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KY.png similarity index 100% rename from ios/SAPTracker/flags/KY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KY.png diff --git a/ios/SAPTracker/flags/KZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/KZ.png similarity index 100% rename from ios/SAPTracker/flags/KZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/KZ.png diff --git a/ios/SAPTracker/flags/LA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LA.png similarity index 100% rename from ios/SAPTracker/flags/LA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LA.png diff --git a/ios/SAPTracker/flags/LB.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LB.png similarity index 100% rename from ios/SAPTracker/flags/LB.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LB.png diff --git a/ios/SAPTracker/flags/LC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LC.png similarity index 100% rename from ios/SAPTracker/flags/LC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LC.png diff --git a/ios/SAPTracker/flags/LI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LI.png similarity index 100% rename from ios/SAPTracker/flags/LI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LI.png diff --git a/ios/SAPTracker/flags/LICENSE.txt b/ios/SAPTracker/src/xcode/SAPTracker/flags/LICENSE.txt similarity index 100% rename from ios/SAPTracker/flags/LICENSE.txt rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LICENSE.txt diff --git a/ios/SAPTracker/flags/LK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LK.png similarity index 100% rename from ios/SAPTracker/flags/LK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LK.png diff --git a/ios/SAPTracker/flags/LR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LR.png similarity index 100% rename from ios/SAPTracker/flags/LR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LR.png diff --git a/ios/SAPTracker/flags/LS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LS.png similarity index 100% rename from ios/SAPTracker/flags/LS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LS.png diff --git a/ios/SAPTracker/flags/LT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LT.png similarity index 100% rename from ios/SAPTracker/flags/LT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LT.png diff --git a/ios/SAPTracker/flags/LU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LU.png similarity index 100% rename from ios/SAPTracker/flags/LU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LU.png diff --git a/ios/SAPTracker/flags/LV.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LV.png similarity index 100% rename from ios/SAPTracker/flags/LV.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LV.png diff --git a/ios/SAPTracker/flags/LY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/LY.png similarity index 100% rename from ios/SAPTracker/flags/LY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/LY.png diff --git a/ios/SAPTracker/flags/MA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MA.png similarity index 100% rename from ios/SAPTracker/flags/MA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MA.png diff --git a/ios/SAPTracker/flags/MC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MC.png similarity index 100% rename from ios/SAPTracker/flags/MC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MC.png diff --git a/ios/SAPTracker/flags/MD.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MD.png similarity index 100% rename from ios/SAPTracker/flags/MD.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MD.png diff --git a/ios/SAPTracker/flags/ME.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ME.png similarity index 100% rename from ios/SAPTracker/flags/ME.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ME.png diff --git a/ios/SAPTracker/flags/MF.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MF.png similarity index 100% rename from ios/SAPTracker/flags/MF.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MF.png diff --git a/ios/SAPTracker/flags/MG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MG.png similarity index 100% rename from ios/SAPTracker/flags/MG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MG.png diff --git a/ios/SAPTracker/flags/MH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MH.png similarity index 100% rename from ios/SAPTracker/flags/MH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MH.png diff --git a/ios/SAPTracker/flags/MK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MK.png similarity index 100% rename from ios/SAPTracker/flags/MK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MK.png diff --git a/ios/SAPTracker/flags/ML.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ML.png similarity index 100% rename from ios/SAPTracker/flags/ML.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ML.png diff --git a/ios/SAPTracker/flags/MM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MM.png similarity index 100% rename from ios/SAPTracker/flags/MM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MM.png diff --git a/ios/SAPTracker/flags/MN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MN.png similarity index 100% rename from ios/SAPTracker/flags/MN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MN.png diff --git a/ios/SAPTracker/flags/MO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MO.png similarity index 100% rename from ios/SAPTracker/flags/MO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MO.png diff --git a/ios/SAPTracker/flags/MP.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MP.png similarity index 100% rename from ios/SAPTracker/flags/MP.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MP.png diff --git a/ios/SAPTracker/flags/MQ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MQ.png similarity index 100% rename from ios/SAPTracker/flags/MQ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MQ.png diff --git a/ios/SAPTracker/flags/MR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MR.png similarity index 100% rename from ios/SAPTracker/flags/MR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MR.png diff --git a/ios/SAPTracker/flags/MS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MS.png similarity index 100% rename from ios/SAPTracker/flags/MS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MS.png diff --git a/ios/SAPTracker/flags/MT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MT.png similarity index 100% rename from ios/SAPTracker/flags/MT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MT.png diff --git a/ios/SAPTracker/flags/MU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MU.png similarity index 100% rename from ios/SAPTracker/flags/MU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MU.png diff --git a/ios/SAPTracker/flags/MV.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MV.png similarity index 100% rename from ios/SAPTracker/flags/MV.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MV.png diff --git a/ios/SAPTracker/flags/MW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MW.png similarity index 100% rename from ios/SAPTracker/flags/MW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MW.png diff --git a/ios/SAPTracker/flags/MX.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MX.png similarity index 100% rename from ios/SAPTracker/flags/MX.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MX.png diff --git a/ios/SAPTracker/flags/MY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MY.png similarity index 100% rename from ios/SAPTracker/flags/MY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MY.png diff --git a/ios/SAPTracker/flags/MZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/MZ.png similarity index 100% rename from ios/SAPTracker/flags/MZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/MZ.png diff --git a/ios/SAPTracker/flags/NA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NA.png similarity index 100% rename from ios/SAPTracker/flags/NA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NA.png diff --git a/ios/SAPTracker/flags/NC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NC.png similarity index 100% rename from ios/SAPTracker/flags/NC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NC.png diff --git a/ios/SAPTracker/flags/NE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NE.png similarity index 100% rename from ios/SAPTracker/flags/NE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NE.png diff --git a/ios/SAPTracker/flags/NF.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NF.png similarity index 100% rename from ios/SAPTracker/flags/NF.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NF.png diff --git a/ios/SAPTracker/flags/NG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NG.png similarity index 100% rename from ios/SAPTracker/flags/NG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NG.png diff --git a/ios/SAPTracker/flags/NI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NI.png similarity index 100% rename from ios/SAPTracker/flags/NI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NI.png diff --git a/ios/SAPTracker/flags/NL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NL.png similarity index 100% rename from ios/SAPTracker/flags/NL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NL.png diff --git a/ios/SAPTracker/flags/NO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NO.png similarity index 100% rename from ios/SAPTracker/flags/NO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NO.png diff --git a/ios/SAPTracker/flags/NP.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NP.png similarity index 100% rename from ios/SAPTracker/flags/NP.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NP.png diff --git a/ios/SAPTracker/flags/NR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NR.png similarity index 100% rename from ios/SAPTracker/flags/NR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NR.png diff --git a/ios/SAPTracker/flags/NU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NU.png similarity index 100% rename from ios/SAPTracker/flags/NU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NU.png diff --git a/ios/SAPTracker/flags/NZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/NZ.png similarity index 100% rename from ios/SAPTracker/flags/NZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/NZ.png diff --git a/ios/SAPTracker/flags/OM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/OM.png similarity index 100% rename from ios/SAPTracker/flags/OM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/OM.png diff --git a/ios/SAPTracker/flags/PA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PA.png similarity index 100% rename from ios/SAPTracker/flags/PA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PA.png diff --git a/ios/SAPTracker/flags/PE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PE.png similarity index 100% rename from ios/SAPTracker/flags/PE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PE.png diff --git a/ios/SAPTracker/flags/PF.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PF.png similarity index 100% rename from ios/SAPTracker/flags/PF.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PF.png diff --git a/ios/SAPTracker/flags/PG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PG.png similarity index 100% rename from ios/SAPTracker/flags/PG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PG.png diff --git a/ios/SAPTracker/flags/PH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PH.png similarity index 100% rename from ios/SAPTracker/flags/PH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PH.png diff --git a/ios/SAPTracker/flags/PK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PK.png similarity index 100% rename from ios/SAPTracker/flags/PK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PK.png diff --git a/ios/SAPTracker/flags/PL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PL.png similarity index 100% rename from ios/SAPTracker/flags/PL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PL.png diff --git a/ios/SAPTracker/flags/PN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PN.png similarity index 100% rename from ios/SAPTracker/flags/PN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PN.png diff --git a/ios/SAPTracker/flags/PR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PR.png similarity index 100% rename from ios/SAPTracker/flags/PR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PR.png diff --git a/ios/SAPTracker/flags/PS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PS.png similarity index 100% rename from ios/SAPTracker/flags/PS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PS.png diff --git a/ios/SAPTracker/flags/PT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PT.png similarity index 100% rename from ios/SAPTracker/flags/PT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PT.png diff --git a/ios/SAPTracker/flags/PW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PW.png similarity index 100% rename from ios/SAPTracker/flags/PW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PW.png diff --git a/ios/SAPTracker/flags/PY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/PY.png similarity index 100% rename from ios/SAPTracker/flags/PY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/PY.png diff --git a/ios/SAPTracker/flags/QA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/QA.png similarity index 100% rename from ios/SAPTracker/flags/QA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/QA.png diff --git a/ios/SAPTracker/flags/RO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/RO.png similarity index 100% rename from ios/SAPTracker/flags/RO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/RO.png diff --git a/ios/SAPTracker/flags/RS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/RS.png similarity index 100% rename from ios/SAPTracker/flags/RS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/RS.png diff --git a/ios/SAPTracker/flags/RU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/RU.png similarity index 100% rename from ios/SAPTracker/flags/RU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/RU.png diff --git a/ios/SAPTracker/flags/RW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/RW.png similarity index 100% rename from ios/SAPTracker/flags/RW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/RW.png diff --git a/ios/SAPTracker/flags/SA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SA.png similarity index 100% rename from ios/SAPTracker/flags/SA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SA.png diff --git a/ios/SAPTracker/flags/SB.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SB.png similarity index 100% rename from ios/SAPTracker/flags/SB.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SB.png diff --git a/ios/SAPTracker/flags/SC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SC.png similarity index 100% rename from ios/SAPTracker/flags/SC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SC.png diff --git a/ios/SAPTracker/flags/SD.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SD.png similarity index 100% rename from ios/SAPTracker/flags/SD.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SD.png diff --git a/ios/SAPTracker/flags/SE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SE.png similarity index 100% rename from ios/SAPTracker/flags/SE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SE.png diff --git a/ios/SAPTracker/flags/SG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SG.png similarity index 100% rename from ios/SAPTracker/flags/SG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SG.png diff --git a/ios/SAPTracker/flags/SH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SH.png similarity index 100% rename from ios/SAPTracker/flags/SH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SH.png diff --git a/ios/SAPTracker/flags/SI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SI.png similarity index 100% rename from ios/SAPTracker/flags/SI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SI.png diff --git a/ios/SAPTracker/flags/SK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SK.png similarity index 100% rename from ios/SAPTracker/flags/SK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SK.png diff --git a/ios/SAPTracker/flags/SL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SL.png similarity index 100% rename from ios/SAPTracker/flags/SL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SL.png diff --git a/ios/SAPTracker/flags/SM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SM.png similarity index 100% rename from ios/SAPTracker/flags/SM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SM.png diff --git a/ios/SAPTracker/flags/SN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SN.png similarity index 100% rename from ios/SAPTracker/flags/SN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SN.png diff --git a/ios/SAPTracker/flags/SO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SO.png similarity index 100% rename from ios/SAPTracker/flags/SO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SO.png diff --git a/ios/SAPTracker/flags/SR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SR.png similarity index 100% rename from ios/SAPTracker/flags/SR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SR.png diff --git a/ios/SAPTracker/flags/SS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SS.png similarity index 100% rename from ios/SAPTracker/flags/SS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SS.png diff --git a/ios/SAPTracker/flags/ST.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ST.png similarity index 100% rename from ios/SAPTracker/flags/ST.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ST.png diff --git a/ios/SAPTracker/flags/SV.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SV.png similarity index 100% rename from ios/SAPTracker/flags/SV.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SV.png diff --git a/ios/SAPTracker/flags/SY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SY.png similarity index 100% rename from ios/SAPTracker/flags/SY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SY.png diff --git a/ios/SAPTracker/flags/SZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/SZ.png similarity index 100% rename from ios/SAPTracker/flags/SZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/SZ.png diff --git a/ios/SAPTracker/flags/TC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TC.png similarity index 100% rename from ios/SAPTracker/flags/TC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TC.png diff --git a/ios/SAPTracker/flags/TD.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TD.png similarity index 100% rename from ios/SAPTracker/flags/TD.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TD.png diff --git a/ios/SAPTracker/flags/TF.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TF.png similarity index 100% rename from ios/SAPTracker/flags/TF.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TF.png diff --git a/ios/SAPTracker/flags/TG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TG.png similarity index 100% rename from ios/SAPTracker/flags/TG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TG.png diff --git a/ios/SAPTracker/flags/TH.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TH.png similarity index 100% rename from ios/SAPTracker/flags/TH.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TH.png diff --git a/ios/SAPTracker/flags/TJ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TJ.png similarity index 100% rename from ios/SAPTracker/flags/TJ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TJ.png diff --git a/ios/SAPTracker/flags/TK.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TK.png similarity index 100% rename from ios/SAPTracker/flags/TK.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TK.png diff --git a/ios/SAPTracker/flags/TL.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TL.png similarity index 100% rename from ios/SAPTracker/flags/TL.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TL.png diff --git a/ios/SAPTracker/flags/TM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TM.png similarity index 100% rename from ios/SAPTracker/flags/TM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TM.png diff --git a/ios/SAPTracker/flags/TN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TN.png similarity index 100% rename from ios/SAPTracker/flags/TN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TN.png diff --git a/ios/SAPTracker/flags/TO.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TO.png similarity index 100% rename from ios/SAPTracker/flags/TO.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TO.png diff --git a/ios/SAPTracker/flags/TR.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TR.png similarity index 100% rename from ios/SAPTracker/flags/TR.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TR.png diff --git a/ios/SAPTracker/flags/TT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TT.png similarity index 100% rename from ios/SAPTracker/flags/TT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TT.png diff --git a/ios/SAPTracker/flags/TV.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TV.png similarity index 100% rename from ios/SAPTracker/flags/TV.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TV.png diff --git a/ios/SAPTracker/flags/TW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TW.png similarity index 100% rename from ios/SAPTracker/flags/TW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TW.png diff --git a/ios/SAPTracker/flags/TZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/TZ.png similarity index 100% rename from ios/SAPTracker/flags/TZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/TZ.png diff --git a/ios/SAPTracker/flags/UA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/UA.png similarity index 100% rename from ios/SAPTracker/flags/UA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/UA.png diff --git a/ios/SAPTracker/flags/UG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/UG.png similarity index 100% rename from ios/SAPTracker/flags/UG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/UG.png diff --git a/ios/SAPTracker/flags/US.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/US.png similarity index 100% rename from ios/SAPTracker/flags/US.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/US.png diff --git a/ios/SAPTracker/flags/UY.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/UY.png similarity index 100% rename from ios/SAPTracker/flags/UY.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/UY.png diff --git a/ios/SAPTracker/flags/UZ.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/UZ.png similarity index 100% rename from ios/SAPTracker/flags/UZ.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/UZ.png diff --git a/ios/SAPTracker/flags/VA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/VA.png similarity index 100% rename from ios/SAPTracker/flags/VA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/VA.png diff --git a/ios/SAPTracker/flags/VC.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/VC.png similarity index 100% rename from ios/SAPTracker/flags/VC.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/VC.png diff --git a/ios/SAPTracker/flags/VE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/VE.png similarity index 100% rename from ios/SAPTracker/flags/VE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/VE.png diff --git a/ios/SAPTracker/flags/VG.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/VG.png similarity index 100% rename from ios/SAPTracker/flags/VG.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/VG.png diff --git a/ios/SAPTracker/flags/VI.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/VI.png similarity index 100% rename from ios/SAPTracker/flags/VI.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/VI.png diff --git a/ios/SAPTracker/flags/VN.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/VN.png similarity index 100% rename from ios/SAPTracker/flags/VN.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/VN.png diff --git a/ios/SAPTracker/flags/VU.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/VU.png similarity index 100% rename from ios/SAPTracker/flags/VU.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/VU.png diff --git a/ios/SAPTracker/flags/WF.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/WF.png similarity index 100% rename from ios/SAPTracker/flags/WF.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/WF.png diff --git a/ios/SAPTracker/flags/WS.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/WS.png similarity index 100% rename from ios/SAPTracker/flags/WS.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/WS.png diff --git a/ios/SAPTracker/flags/YE.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/YE.png similarity index 100% rename from ios/SAPTracker/flags/YE.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/YE.png diff --git a/ios/SAPTracker/flags/YT.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/YT.png similarity index 100% rename from ios/SAPTracker/flags/YT.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/YT.png diff --git a/ios/SAPTracker/flags/ZA.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ZA.png similarity index 100% rename from ios/SAPTracker/flags/ZA.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ZA.png diff --git a/ios/SAPTracker/flags/ZM.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ZM.png similarity index 100% rename from ios/SAPTracker/flags/ZM.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ZM.png diff --git a/ios/SAPTracker/flags/ZW.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/ZW.png similarity index 100% rename from ios/SAPTracker/flags/ZW.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/ZW.png diff --git a/ios/SAPTracker/flags/_abkhazia.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_abkhazia.png similarity index 100% rename from ios/SAPTracker/flags/_abkhazia.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_abkhazia.png diff --git a/ios/SAPTracker/flags/_basque-country.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_basque-country.png similarity index 100% rename from ios/SAPTracker/flags/_basque-country.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_basque-country.png diff --git a/ios/SAPTracker/flags/_british-antarctic-territory.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_british-antarctic-territory.png similarity index 100% rename from ios/SAPTracker/flags/_british-antarctic-territory.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_british-antarctic-territory.png diff --git a/ios/SAPTracker/flags/_commonwealth.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_commonwealth.png similarity index 100% rename from ios/SAPTracker/flags/_commonwealth.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_commonwealth.png diff --git a/ios/SAPTracker/flags/_england.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_england.png similarity index 100% rename from ios/SAPTracker/flags/_england.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_england.png diff --git a/ios/SAPTracker/flags/_gosquared.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_gosquared.png similarity index 100% rename from ios/SAPTracker/flags/_gosquared.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_gosquared.png diff --git a/ios/SAPTracker/flags/_kosovo.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_kosovo.png similarity index 100% rename from ios/SAPTracker/flags/_kosovo.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_kosovo.png diff --git a/ios/SAPTracker/flags/_mars.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_mars.png similarity index 100% rename from ios/SAPTracker/flags/_mars.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_mars.png diff --git a/ios/SAPTracker/flags/_nagorno-karabakh.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_nagorno-karabakh.png similarity index 100% rename from ios/SAPTracker/flags/_nagorno-karabakh.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_nagorno-karabakh.png diff --git a/ios/SAPTracker/flags/_nato.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_nato.png similarity index 100% rename from ios/SAPTracker/flags/_nato.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_nato.png diff --git a/ios/SAPTracker/flags/_northern-cyprus.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_northern-cyprus.png similarity index 100% rename from ios/SAPTracker/flags/_northern-cyprus.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_northern-cyprus.png diff --git a/ios/SAPTracker/flags/_olympics.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_olympics.png similarity index 100% rename from ios/SAPTracker/flags/_olympics.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_olympics.png diff --git a/ios/SAPTracker/flags/_red-cross.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_red-cross.png similarity index 100% rename from ios/SAPTracker/flags/_red-cross.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_red-cross.png diff --git a/ios/SAPTracker/flags/_scotland.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_scotland.png similarity index 100% rename from ios/SAPTracker/flags/_scotland.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_scotland.png diff --git a/ios/SAPTracker/flags/_somaliland.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_somaliland.png similarity index 100% rename from ios/SAPTracker/flags/_somaliland.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_somaliland.png diff --git a/ios/SAPTracker/flags/_south-ossetia.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_south-ossetia.png similarity index 100% rename from ios/SAPTracker/flags/_south-ossetia.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_south-ossetia.png diff --git a/ios/SAPTracker/flags/_united-nations.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_united-nations.png similarity index 100% rename from ios/SAPTracker/flags/_united-nations.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_united-nations.png diff --git a/ios/SAPTracker/flags/_unknown.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_unknown.png similarity index 100% rename from ios/SAPTracker/flags/_unknown.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_unknown.png diff --git a/ios/SAPTracker/flags/_wales.png b/ios/SAPTracker/src/xcode/SAPTracker/flags/_wales.png similarity index 100% rename from ios/SAPTracker/flags/_wales.png rename to ios/SAPTracker/src/xcode/SAPTracker/flags/_wales.png diff --git a/ios/SAPTrackerTests/Info.plist b/ios/SAPTracker/src/xcode/SAPTrackerTests/Info.plist similarity index 100% rename from ios/SAPTrackerTests/Info.plist rename to ios/SAPTracker/src/xcode/SAPTrackerTests/Info.plist diff --git a/ios/SAPTrackerTests/SAPTrackerAPITests.swift b/ios/SAPTracker/src/xcode/SAPTrackerTests/SAPTrackerAPITests.swift similarity index 100% rename from ios/SAPTrackerTests/SAPTrackerAPITests.swift rename to ios/SAPTracker/src/xcode/SAPTrackerTests/SAPTrackerAPITests.swift diff --git a/ios/SAPTrackerTests/competitor1.json b/ios/SAPTracker/src/xcode/SAPTrackerTests/competitor1.json similarity index 100% rename from ios/SAPTrackerTests/competitor1.json rename to ios/SAPTracker/src/xcode/SAPTrackerTests/competitor1.json diff --git a/ios/SAPTrackerTests/event1.json b/ios/SAPTracker/src/xcode/SAPTrackerTests/event1.json similarity index 100% rename from ios/SAPTrackerTests/event1.json rename to ios/SAPTracker/src/xcode/SAPTrackerTests/event1.json diff --git a/ios/SAPTrackerTests/leaderboard1.json b/ios/SAPTracker/src/xcode/SAPTrackerTests/leaderboard1.json similarity index 100% rename from ios/SAPTrackerTests/leaderboard1.json rename to ios/SAPTracker/src/xcode/SAPTrackerTests/leaderboard1.json diff --git a/ios/pom.xml b/ios/pom.xml new file mode 100644 index 00000000000..af252ba1835 --- /dev/null +++ b/ios/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + com.sap.sailing + ios + 1.0.0-SNAPSHOT + pom + + + SAPTracker + + + diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java index 494597a73b9..ba267b82e89 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java @@ -1,5 +1,8 @@ package com.sap.sailing.domain.common; +import java.util.ArrayList; +import java.util.List; + import com.sap.sailing.domain.common.impl.MeterDistance; @@ -157,4 +160,16 @@ public enum BoatClassMasterdata { return hasAdditionalDownwindSail; } + public static Iterable getAllBoatClassNames(boolean includeAlternativeNames) { + final List result = new ArrayList<>(); + for (BoatClassMasterdata bcmd : values()) { + result.add(bcmd.getDisplayName()); + if (includeAlternativeNames) { + for (String alternativeName : bcmd.getAlternativeNames()) { + result.add(alternativeName); + } + } + } + return result; + } } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index f77fb9b316f..b32457da726 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -35,7 +35,7 @@ import com.mongodb.util.JSON; import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl; import com.sap.sailing.domain.abstractlog.race.CompetitorResults; -import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent; import com.sap.sailing.domain.abstractlog.race.RaceLog; import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent; @@ -44,6 +44,7 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogEventRestoreFactory; import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent; @@ -51,11 +52,12 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogPathfinderEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent; import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier; -import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent; import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultsImpl; import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl; import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl; @@ -141,7 +143,6 @@ import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sailing.domain.common.racelog.tracking.TransformationException; import com.sap.sailing.domain.leaderboard.DelayedLeaderboardCorrections; -import com.sap.sailing.domain.leaderboard.DelayedLeaderboardCorrections.LeaderboardCorrectionsResolvedListener; import com.sap.sailing.domain.leaderboard.EventResolver; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard; @@ -315,7 +316,6 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { .add(FieldNames.WIND.name() + "." + FieldNames.TIME_AS_MILLIS.name(), 1).get(), new BasicDBObjectBuilder().add("unique", true).add("dropDups", true).get()); } catch (MongoException exception) { - if (exception.getCode() == 10092) { logger.warning(String.format( "Setting the unique index on the %s collection failed because you have too many duplicates. " @@ -408,19 +408,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { if (result != null) { final Leaderboard finalResult = result; finalResult.setDisplayName((String) dbLeaderboard.get(FieldNames.LEADERBOARD_DISPLAY_NAME.name())); - DelayedLeaderboardCorrections loadedLeaderboardCorrections = new DelayedLeaderboardCorrectionsImpl(result, baseDomainFactory); - final boolean[] needsMigration = new boolean[1]; - loadedLeaderboardCorrections.addLeaderboardCorrectionsResolvedListener(new LeaderboardCorrectionsResolvedListener() { - @Override - public void correctionsResolved(DelayedLeaderboardCorrections delayedLeaderboardCorrections) { - if (needsMigration[0]) { - new MongoObjectFactoryImpl(database).storeLeaderboard(finalResult); - } - } - }); - needsMigration[0] = loadLeaderboardCorrections(dbLeaderboard, loadedLeaderboardCorrections, result.getScoreCorrection()) || needsMigration[0]; - needsMigration[0] = loadSuppressedCompetitors(dbLeaderboard, loadedLeaderboardCorrections) || needsMigration[0]; + loadLeaderboardCorrections(dbLeaderboard, loadedLeaderboardCorrections, result.getScoreCorrection()); + loadSuppressedCompetitors(dbLeaderboard, loadedLeaderboardCorrections); loadColumnFactors(dbLeaderboard, result); // add the leaderboard to the registry if (leaderboardRegistry != null) { @@ -449,25 +439,13 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { } } - private boolean loadSuppressedCompetitors(DBObject dbLeaderboard, - DelayedLeaderboardCorrections loadedLeaderboardCorrections) { - final boolean needsMigration; - BasicDBList dbSuppressedCompetitorNames = (BasicDBList) dbLeaderboard.get(FieldNames.LEADERBOARD_SUPPRESSED_COMPETITORS.name()); - if (dbSuppressedCompetitorNames != null) { - needsMigration = true; - for (Object escapedCompetitorName : dbSuppressedCompetitorNames) { - loadedLeaderboardCorrections.suppressCompetitorByName(MongoUtils.unescapeDollarAndDot((String) escapedCompetitorName)); - } - } else { - needsMigration = false; - } + private void loadSuppressedCompetitors(DBObject dbLeaderboard, DelayedLeaderboardCorrections loadedLeaderboardCorrections) { BasicDBList dbSuppressedCompetitorIDs = (BasicDBList) dbLeaderboard.get(FieldNames.LEADERBOARD_SUPPRESSED_COMPETITOR_IDS.name()); if (dbSuppressedCompetitorIDs != null) { for (Object competitorId : dbSuppressedCompetitorIDs) { - loadedLeaderboardCorrections.suppressCompetitorById((Serializable) competitorId); + loadedLeaderboardCorrections.suppressCompetitorByID((Serializable) competitorId); } } - return needsMigration; } /** @@ -576,19 +554,8 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { return scoringScheme; } - private boolean loadLeaderboardCorrections(DBObject dbLeaderboard, DelayedLeaderboardCorrections correctionsToUpdate, + private void loadLeaderboardCorrections(DBObject dbLeaderboard, DelayedLeaderboardCorrections correctionsToUpdate, SettableScoreCorrection scoreCorrectionToUpdate) { - boolean needsMigration = false; - DBObject carriedPoints = (DBObject) dbLeaderboard.get(FieldNames.LEADERBOARD_CARRIED_POINTS.name()); - if (carriedPoints != null) { - needsMigration = true; - for (String escapedCompetitorName : carriedPoints.keySet()) { - Double carriedPointsForCompetitor = ((Number) carriedPoints.get(escapedCompetitorName)).doubleValue(); - if (carriedPointsForCompetitor != null) { - correctionsToUpdate.setCarriedPointsByName(MongoUtils.unescapeDollarAndDot(escapedCompetitorName), carriedPointsForCompetitor); - } - } - } BasicDBList carriedPointsById = (BasicDBList) dbLeaderboard.get(FieldNames.LEADERBOARD_CARRIED_POINTS_BY_ID.name()); if (carriedPointsById != null) { for (Object o : carriedPointsById) { @@ -618,44 +585,22 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { DBObject dbScoreCorrectionForRace = (DBObject) dbScoreCorrection.get(escapedRaceColumnName); final RaceColumn raceColumn = correctionsToUpdate.getLeaderboard().getRaceColumnByName(MongoUtils.unescapeDollarAndDot(escapedRaceColumnName)); if (raceColumn != null) { - if (dbScoreCorrectionForRace instanceof BasicDBList) { - for (Object o : (BasicDBList) dbScoreCorrectionForRace) { - DBObject dbScoreCorrectionForCompetitorInRace = (DBObject) o; - Serializable competitorId = (Serializable) dbScoreCorrectionForCompetitorInRace - .get(FieldNames.COMPETITOR_ID.name()); - if (dbScoreCorrectionForCompetitorInRace - .containsField(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name())) { - correctionsToUpdate.setMaxPointsReasonByID(competitorId, raceColumn, MaxPointsReason - .valueOf((String) dbScoreCorrectionForCompetitorInRace - .get(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name()))); - } - if (dbScoreCorrectionForCompetitorInRace.containsField(FieldNames.LEADERBOARD_CORRECTED_SCORE - .name())) { - final Double leaderboardCorrectedScore = ((Number) dbScoreCorrectionForCompetitorInRace - .get(FieldNames.LEADERBOARD_CORRECTED_SCORE.name())).doubleValue(); - correctionsToUpdate.correctScoreByID(competitorId, raceColumn, - (Double) leaderboardCorrectedScore); - } + for (Object o : (BasicDBList) dbScoreCorrectionForRace) { + DBObject dbScoreCorrectionForCompetitorInRace = (DBObject) o; + Serializable competitorId = (Serializable) dbScoreCorrectionForCompetitorInRace + .get(FieldNames.COMPETITOR_ID.name()); + if (dbScoreCorrectionForCompetitorInRace + .containsField(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name())) { + correctionsToUpdate.setMaxPointsReasonByID(competitorId, raceColumn, MaxPointsReason + .valueOf((String) dbScoreCorrectionForCompetitorInRace + .get(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name()))); } - } else { - needsMigration = true; - for (String competitorName : dbScoreCorrectionForRace.keySet()) { - DBObject dbScoreCorrectionForCompetitorInRace = (DBObject) dbScoreCorrectionForRace - .get(competitorName); - if (dbScoreCorrectionForCompetitorInRace - .containsField(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name())) { - correctionsToUpdate.setMaxPointsReasonByName(MongoUtils - .unescapeDollarAndDot(competitorName), raceColumn, MaxPointsReason - .valueOf((String) dbScoreCorrectionForCompetitorInRace - .get(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name()))); - } - if (dbScoreCorrectionForCompetitorInRace.containsField(FieldNames.LEADERBOARD_CORRECTED_SCORE - .name())) { - final Double leaderboardCorrectedScore = ((Number) dbScoreCorrectionForCompetitorInRace - .get(FieldNames.LEADERBOARD_CORRECTED_SCORE.name())).doubleValue(); - correctionsToUpdate.correctScoreByName(MongoUtils.unescapeDollarAndDot(competitorName), - raceColumn, (Double) leaderboardCorrectedScore); - } + if (dbScoreCorrectionForCompetitorInRace.containsField(FieldNames.LEADERBOARD_CORRECTED_SCORE + .name())) { + final Double leaderboardCorrectedScore = ((Number) dbScoreCorrectionForCompetitorInRace + .get(FieldNames.LEADERBOARD_CORRECTED_SCORE.name())).doubleValue(); + correctionsToUpdate.correctScoreByID(competitorId, raceColumn, + (Double) leaderboardCorrectedScore); } } } else { @@ -667,22 +612,13 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { // deprecated style: a DBObject whose keys are the escaped competitor names // new style: a BasicDBList whose entries are DBObjects with COMPETITOR_ID and COMPETITOR_DISPLAY_NAME fields if (competitorDisplayNames != null) { - if (competitorDisplayNames instanceof BasicDBList) { - for (Object o : (BasicDBList) competitorDisplayNames) { - DBObject competitorDisplayName = (DBObject) o; - final Serializable competitorId = (Serializable) competitorDisplayName.get(FieldNames.COMPETITOR_ID.name()); - final String displayName = (String) competitorDisplayName.get(FieldNames.COMPETITOR_DISPLAY_NAME.name()); - correctionsToUpdate.setDisplayNameByID(competitorId, displayName); - } - } else { - needsMigration = true; - for (String escapedCompetitorName : competitorDisplayNames.keySet()) { - correctionsToUpdate.setDisplayNameByName(MongoUtils.unescapeDollarAndDot(escapedCompetitorName), - (String) competitorDisplayNames.get(escapedCompetitorName)); - } + for (Object o : (BasicDBList) competitorDisplayNames) { + DBObject competitorDisplayName = (DBObject) o; + final Serializable competitorId = (Serializable) competitorDisplayName.get(FieldNames.COMPETITOR_ID.name()); + final String displayName = (String) competitorDisplayName.get(FieldNames.COMPETITOR_DISPLAY_NAME.name()); + correctionsToUpdate.setDisplayNameByID(competitorId, displayName); } } - return needsMigration; } /** @@ -1360,6 +1296,10 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { String eventClass = (String) dbObject.get(FieldNames.RACE_LOG_EVENT_CLASS.name()); if (eventClass.equals(RaceLogStartTimeEvent.class.getSimpleName())) { return loadRaceLogStartTimeEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject); + } else if (eventClass.equals(RaceLogStartOfTrackingEvent.class.getSimpleName())) { + return loadRaceLogStartOfTrackingEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject); + } else if (eventClass.equals(RaceLogEndOfTrackingEvent.class.getSimpleName())) { + return loadRaceLogEndOfTrackingEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject); } else if (eventClass.equals(RaceLogDependentStartTimeEvent.class.getSimpleName())) { return loadRaceLogDependentStartTimeEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject); } else if (eventClass.equals(RaceLogRaceStatusEvent.class.getSimpleName())) { @@ -1393,7 +1333,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { } else if (eventClass.equals(RaceLogDenoteForTrackingEvent.class.getSimpleName())) { return loadRaceLogDenoteForTrackingEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject); } else if (eventClass.equals(RaceLogStartTrackingEvent.class.getSimpleName())) { - return loadRaceLogStartEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject); + return loadRaceLogStartTrackingEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject); } else if (eventClass.equals(RaceLogRevokeEvent.class.getSimpleName())) { return loadRaceLogRevokeEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject); } else if (eventClass.equals(RaceLogRegisterCompetitorEvent.class.getSimpleName())) { @@ -1461,7 +1401,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { return raceLogEventFactory.createDenoteForTrackingEvent(createdAt, author, logicalTimePoint, id, passId, raceName, boatClass, raceId); } - private RaceLogEvent loadRaceLogStartEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, + private RaceLogEvent loadRaceLogStartTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) { return raceLogEventFactory.createStartTrackingEvent(createdAt, author, logicalTimePoint, id, passId); } @@ -1644,6 +1584,14 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { return raceLogEventFactory.createStartTimeEvent(createdAt, author, logicalTimePoint, id, competitors, passId, startTime, nextStatus); } + private RaceLogStartOfTrackingEvent loadRaceLogStartOfTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) { + return raceLogEventFactory.createStartOfTrackingEvent(logicalTimePoint, author, id, competitors, passId); + } + + private RaceLogEndOfTrackingEvent loadRaceLogEndOfTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) { + return raceLogEventFactory.createEndOfTrackingEvent(logicalTimePoint, author, id, competitors, passId); + } + private RaceLogDependentStartTimeEvent loadRaceLogDependentStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) { final Object regattaLikeNameObject = dbObject.get(FieldNames.RACE_LOG_DEPDENDENT_ON_REGATTALIKE.name()); final String regattaLikeName = regattaLikeNameObject == null ? null : regattaLikeNameObject.toString(); diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogStoreVisitor.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogStoreVisitor.java index 0347f39f532..4dff4932552 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogStoreVisitor.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogStoreVisitor.java @@ -201,13 +201,11 @@ public class MongoRaceLogStoreVisitor implements RaceLogEventVisitor { public void visit(RaceLogStartOfTrackingEvent event) { DBObject object = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event); mongoObjectFactory.storeRaceLogEventEvent(object); - } @Override public void visit(RaceLogEndOfTrackingEvent event) { DBObject object = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event); mongoObjectFactory.storeRaceLogEventEvent(object); - } } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/manual/PostFixes.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/manual/PostFixes.java index 662e49892d0..a39ea2e9748 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/manual/PostFixes.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/manual/PostFixes.java @@ -24,7 +24,7 @@ import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiJsonHandl import com.sap.sailing.domain.racelogtracking.test.AbstractJsonOverHttpTest; import com.sap.sailing.server.gateway.serialization.impl.DeviceAndSessionIdentifierWithGPSFixesSerializer; import com.sap.sailing.server.gateway.serialization.impl.DeviceIdentifierJsonSerializer; -import com.sap.sailing.server.gateway.serialization.impl.GPSFixMovingNmeaDTOJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.GPSFixMovingJsonSerializer; import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; @@ -33,7 +33,7 @@ public class PostFixes extends AbstractJsonOverHttpTest { private final DeviceAndSessionIdentifierWithGPSFixesSerializer fixSerializer = new DeviceAndSessionIdentifierWithGPSFixesSerializer<>(DeviceIdentifierJsonSerializer.create( - new SmartphoneImeiJsonHandler(), SmartphoneImeiIdentifier.TYPE), new GPSFixMovingNmeaDTOJsonSerializer()); + new SmartphoneImeiJsonHandler(), SmartphoneImeiIdentifier.TYPE), new GPSFixMovingJsonSerializer()); private void recordFix(GPSFixMoving... fix) throws IOException { String request = fixSerializer.serialize( diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/Activator.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/Activator.java index d0017065297..1724876d4ac 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/Activator.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/Activator.java @@ -22,13 +22,9 @@ import com.sap.sailing.server.MasterDataImportClassLoaderService; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.GPSFixJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.GPSFixMovingJsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.GPSFixMovingNmeaDTOJsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.GPSFixNmeaDTOJsonDeserializer; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.GPSFixJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.GPSFixMovingJsonSerializer; -import com.sap.sailing.server.gateway.serialization.impl.GPSFixMovingNmeaDTOJsonSerializer; -import com.sap.sailing.server.gateway.serialization.impl.GPSFixNmeaDTOJsonSerializer; import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler; import com.sap.sailing.server.gateway.serialization.racelog.tracking.GPSFixJsonHandler; import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.GPSFixJsonHandlerImpl; @@ -75,8 +71,6 @@ public class Activator implements BundleActivator { registerGPSFixJsonService(context, new GPSFixJsonDeserializer(), new GPSFixJsonSerializer(), GPSFixJsonDeserializer.TYPE); registerGPSFixJsonService(context, new GPSFixMovingJsonDeserializer(), new GPSFixMovingJsonSerializer(), GPSFixMovingJsonDeserializer.TYPE); - registerGPSFixJsonService(context, new GPSFixNmeaDTOJsonDeserializer(), new GPSFixNmeaDTOJsonSerializer(), GPSFixNmeaDTOJsonDeserializer.TYPE); - registerGPSFixJsonService(context, new GPSFixMovingNmeaDTOJsonDeserializer(), new GPSFixMovingNmeaDTOJsonSerializer(), GPSFixMovingNmeaDTOJsonDeserializer.TYPE); registrations.add(context.registerService(RaceLogTrackingAdapterFactory.class, RaceLogTrackingAdapterFactory.INSTANCE, null)); diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java index 6dada58742b..747f938f666 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java @@ -24,6 +24,7 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastPublishedCourseDesignFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver; import com.sap.sailing.domain.abstractlog.race.impl.BaseRaceLogEventVisitor; +import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent; import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent; import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorMappingEvent; import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent; @@ -80,6 +81,7 @@ import com.sap.sailing.domain.tracking.impl.TrackedRaceStatusImpl; import com.sap.sse.common.NoCorrespondingServiceRegisteredException; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; +import com.sap.sse.common.Util.Pair; import com.sap.sse.common.WithID; import com.sap.sse.common.impl.MillisecondsTimePoint; @@ -135,6 +137,11 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener { public void visit(RaceLogDeviceMarkMappingEvent event) { RaceLogRaceTracker.this.onDeviceMarkMappingEvent(event); } + + @Override + public void visit(RaceLogDefineMarkEvent event) { + RaceLogRaceTracker.this.onDefineMarkEvent(event); + } @Override public void visit(RaceLogStartTrackingEvent event) { @@ -254,33 +261,37 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener { * Use mapping time ranges to set time start and end of tracking time for race */ private void updateStartAndEndOfTracking() { - TimePoint earliestMappingStart = new MillisecondsTimePoint(Long.MAX_VALUE); - TimePoint latestMappingEnd = new MillisecondsTimePoint(Long.MIN_VALUE); - - for (List> list : competitorMappings.values()) { - for (DeviceMapping mapping : list) { - if (mapping.getTimeRange().from().before(earliestMappingStart)) { - earliestMappingStart = mapping.getTimeRange().from(); - } - if (mapping.getTimeRange().to().after(latestMappingEnd)) { - latestMappingEnd = mapping.getTimeRange().to(); + // TODO bug 3196: this would need to be evaluated lazily in TrackedRaceImpl.getStartOfTracking / getEndOfTracking + final Pair trackingTimesFromRaceLog = trackedRace.getTrackingTimesFromRaceLogs(); + if (trackingTimesFromRaceLog == null) { + TimePoint earliestMappingStart = new MillisecondsTimePoint(Long.MAX_VALUE); + TimePoint latestMappingEnd = new MillisecondsTimePoint(Long.MIN_VALUE); + + for (List> list : competitorMappings.values()) { + for (DeviceMapping mapping : list) { + if (mapping.getTimeRange().from().before(earliestMappingStart)) { + earliestMappingStart = mapping.getTimeRange().from(); + } + if (mapping.getTimeRange().to().after(latestMappingEnd)) { + latestMappingEnd = mapping.getTimeRange().to(); + } } } - } - - for (List> list : markMappings.values()) { - for (DeviceMapping mapping : list) { - if (mapping.getTimeRange().from().before(earliestMappingStart)) { - earliestMappingStart = mapping.getTimeRange().from(); - } - if (mapping.getTimeRange().to().after(latestMappingEnd)) { - latestMappingEnd = mapping.getTimeRange().to(); + + for (List> list : markMappings.values()) { + for (DeviceMapping mapping : list) { + if (mapping.getTimeRange().from().before(earliestMappingStart)) { + earliestMappingStart = mapping.getTimeRange().from(); + } + if (mapping.getTimeRange().to().after(latestMappingEnd)) { + latestMappingEnd = mapping.getTimeRange().to(); + } } } + + trackedRace.setStartOfTrackingReceived(earliestMappingStart); + trackedRace.setEndOfTrackingReceived(latestMappingEnd); } - - trackedRace.setStartOfTrackingReceived(earliestMappingStart); - trackedRace.setEndOfTrackingReceived(latestMappingEnd); } private boolean hasMappingAlreadyBeenLoaded( @@ -316,6 +327,7 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener { } private void updateMarkMappings(boolean loadIfNotCovered) { + assert trackedRace != null; // TODO remove fixes, if mappings have been removed // check if there are new time ranges not covered so far Map>> newMappings = getNewMarkMappings(); @@ -354,6 +366,18 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener { gpsFixStore.addListener(this, event.getDevice()); } } + + /** + * When a log is attached to it, the tracked race creates mark tracks for all marks either defined or with a device + * mapped to it. When this tracker is running for a tracked race it has to mimic this behavior dynamically. When a + * {@link RaceLogDefineMarkEvent} is received, the existence of the track for that mark in the {@link TrackedRace} + * has to be ensured, also ensuring that the mark will exist in the mark tracks map key set. + */ + private void onDefineMarkEvent(RaceLogDefineMarkEvent event) { + if (trackedRace != null) { + trackedRace.getOrCreateTrack(event.getMark()); + } + } private void onDeviceCompetitorMappingEvent(DeviceCompetitorMappingEvent event) { if (trackedRace != null) { @@ -384,13 +408,10 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener { } } } - competitorMappings.clear(); competitorMappings.putAll(newMappings); - competitorMappingsByDevices.clear(); competitorMappingsByDevices.putAll(transformToMappingsByDevice(competitorMappings)); - updateStartAndEndOfTracking(); } @@ -427,7 +448,6 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener { RaceLog raceLog = params.getRaceLog(); RaceColumn raceColumn = params.getRaceColumn(); Fleet fleet = params.getFleet(); - RaceLogDenoteForTrackingEvent denoteEvent = new RaceInformationFinder(raceLog).analyze(); BoatClass boatClass = denoteEvent.getBoatClass(); String raceName = denoteEvent.getRaceName(); @@ -436,51 +456,41 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener { courseBase = new CourseDataImpl("Default course for " + raceName); logger.log(Level.FINE, "Using empty course in creation of race " + raceName); } - Course course = new CourseImpl(raceName + " course", courseBase.getWaypoints()); - if (raceColumn.getTrackedRace(fleet) != null) { try { raceLog.revokeEvent(params.getService().getServerAuthor(), event, "could not start tracking because tracked race already exists"); } catch (NotRevokableException e) { + logger.log(Level.WARNING, "Couldn't revoke event "+event, e); } throw new RaceNotCreatedException(String.format("Race for racelog (%s) has already been created", raceLog)); } - // check both the racelog and regattalog for registered competitors Set competitors = new MultiLogAnalyzer<>(RegisteredCompetitorsAnalyzer.Factory.INSTANCE, new SetReducer(), params.getLogHierarchy()).analyze(); - Serializable raceId = denoteEvent.getRaceId(); final RaceDefinition raceDef = new RaceDefinitionImpl(raceName, course, boatClass, competitors, raceId); - Iterable sidelines = Collections. emptyList(); - // set race definition, so race is linked to leaderboard automatically regatta.getRegatta().addRace(raceDef); raceColumn.setRaceIdentifier(fleet, regatta.getRegatta().getRaceIdentifier(raceDef)); - trackedRace = regatta.createTrackedRace(raceDef, sidelines, windStore, gpsFixStore, params.getDelayToLiveInMillis(), WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, boatClass.getApproximateManeuverDurationInMilliseconds(), null, /*useMarkPassingCalculator*/ true, raceLogResolver); - trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.TRACKING, 0)); - //attach regatta logs for (AbstractLog log : params.getLogHierarchy()) { if (log instanceof RegattaLog) { trackedRace.attachRegattaLog((RegattaLog) log); } } - // update the device mappings (without loading the fixes, as the TrackedRace does this itself on startup) updateCompetitorMappings(false); updateMarkMappings(false); // add listeners for devices in mappings already present addListeners(competitorMappings); addListeners(markMappings); - logger.info(String.format("Started tracking race-log race (%s)", raceLog)); // this wakes up all waiting race handles synchronized (this) { diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/AbstractLog.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/AbstractLog.java index cc29a91a082..a40781f618f 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/AbstractLog.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/AbstractLog.java @@ -111,7 +111,6 @@ extends Track, WithID { /** * Get a {@link NavigableSet} of unrevoked events regardless of the {@code pass}. - * @return */ NavigableSet getUnrevokedEventsDescending(); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/MultiLogAnalyzer.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/MultiLogAnalyzer.java index 76f7df12b78..a2b6ac90feb 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/MultiLogAnalyzer.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/MultiLogAnalyzer.java @@ -10,6 +10,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import com.sap.sse.common.Util; + /** * Apply one kind of analyzer to multiple logs, and combine (reduce) their output into one result value. */ @@ -31,7 +33,7 @@ public class MultiLogAnalyzer public static abstract class CollectionReducer> implements ResultReducer, C> { @Override public C reduce(Collection interimResult, C reducedFinalResult) { - reducedFinalResult.addAll(interimResult); + Util.addAll(interimResult, reducedFinalResult); return reducedFinalResult; } } @@ -71,7 +73,7 @@ public class MultiLogAnalyzer } - public MultiLogAnalyzer(AnalyzerFactory< InterimResultT> analyzerFactory, + public MultiLogAnalyzer(AnalyzerFactory analyzerFactory, ResultReducer resultReducer, AbstractLog... logs) { this(analyzerFactory, resultReducer, Arrays.asList(logs)); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/analyzing/impl/TrackingTimesFinder.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/analyzing/impl/TrackingTimesFinder.java new file mode 100755 index 00000000000..00bf8467cfe --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/analyzing/impl/TrackingTimesFinder.java @@ -0,0 +1,46 @@ +package com.sap.sailing.domain.abstractlog.race.analyzing.impl; + +import com.sap.sailing.domain.abstractlog.race.RaceLog; +import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.Util; +import com.sap.sse.common.Util.Pair; + +public class TrackingTimesFinder extends RaceLogAnalyzer> { + + public TrackingTimesFinder(RaceLog raceLog) { + super(raceLog); + } + + @Override + protected Util.Pair performAnalysis() { + boolean startOfTrackingFound = false; + boolean endOfTrackingFound = false; + TimePoint start = null; + TimePoint end = null; + final RaceLog raceLog = getLog(); + for (RaceLogEvent event : raceLog.getUnrevokedEventsDescending()) { + if (!startOfTrackingFound && event instanceof RaceLogStartOfTrackingEvent) { + start = event.getLogicalTimePoint(); + startOfTrackingFound = true; + } + if (!endOfTrackingFound && event instanceof RaceLogEndOfTrackingEvent) { + end = event.getLogicalTimePoint(); + endOfTrackingFound = true; + } + if (startOfTrackingFound && endOfTrackingFound) { + break; + } + } + final Pair result; + if (startOfTrackingFound || endOfTrackingFound) { + result = new Util.Pair(start, end); + } else { + result = null; + } + return result; + } + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEndOfTrackingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEndOfTrackingEventImpl.java index 4199520a8b9..054933cba7b 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEndOfTrackingEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEndOfTrackingEventImpl.java @@ -21,6 +21,11 @@ public class RaceLogEndOfTrackingEventImpl extends RaceLogEventImpl implements R @Override public void accept(RaceLogEventVisitor visitor) { visitor.visit(this); - } + + @Override + public String getShortInfo() { + return "endOfTrackingTime=" + getLogicalTimePoint(); + } + } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartOfTrackingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartOfTrackingEventImpl.java index a8cadf7c118..58005300c6a 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartOfTrackingEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartOfTrackingEventImpl.java @@ -15,11 +15,15 @@ public class RaceLogStartOfTrackingEventImpl extends RaceLogEventImpl implements public RaceLogStartOfTrackingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint startOfTracking, Serializable pId, List pInvolvedBoats, int pPassId) { super(createdAt, author, startOfTracking, pId, pInvolvedBoats, pPassId); - // TODO Auto-generated constructor stub } @Override public void accept(RaceLogEventVisitor visitor) { visitor.visit(this); } + + @Override + public String getShortInfo() { + return "startOfTrackingTime=" + getLogicalTimePoint(); + } } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/analyzing/impl/DefinedMarkFinder.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/analyzing/impl/DefinedMarkFinder.java index 7e2ea5a69d7..15de65022db 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/analyzing/impl/DefinedMarkFinder.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/analyzing/impl/DefinedMarkFinder.java @@ -1,22 +1,33 @@ package com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import com.sap.sailing.domain.abstractlog.AbstractLog; +import com.sap.sailing.domain.abstractlog.LogAnalyzer; +import com.sap.sailing.domain.abstractlog.MultiLogAnalyzer.AnalyzerFactory; import com.sap.sailing.domain.abstractlog.race.RaceLog; import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogAnalyzer; import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent; import com.sap.sailing.domain.base.Mark; -public class DefinedMarkFinder extends RaceLogAnalyzer> { +public class DefinedMarkFinder extends RaceLogAnalyzer> { public DefinedMarkFinder(RaceLog raceLog) { super(raceLog); } + public static class Factory implements AnalyzerFactory> { + @Override + public LogAnalyzer> createAnalyzer(AbstractLog log) { + return new DefinedMarkFinder((RaceLog) log); + } + } + @Override - protected Iterable performAnalysis() { - List< Mark> result = new ArrayList(); + protected Collection performAnalysis() { + List result = new ArrayList(); for (RaceLogEvent event : getLog().getUnrevokedEvents()) { if (event instanceof RaceLogDefineMarkEvent) { RaceLogDefineMarkEvent dME = (RaceLogDefineMarkEvent) event; @@ -25,5 +36,4 @@ public class DefinedMarkFinder extends RaceLogAnalyzer> { } return result; } - } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/analyzing/DeviceMarkMappingFinder.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/analyzing/DeviceMarkMappingFinder.java index 97ac6b477fd..c8ef195833f 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/analyzing/DeviceMarkMappingFinder.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/analyzing/DeviceMarkMappingFinder.java @@ -21,7 +21,6 @@ public class DeviceMarkMappingFinder, public LogAnalyzer>>> createAnalyzer(AbstractLog log) { return new DeviceMarkMappingFinder(log); } - } public DeviceMarkMappingFinder(LogT log) { diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/WaypointImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/WaypointImpl.java index 6e28e3b3edb..7c262b59976 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/WaypointImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/WaypointImpl.java @@ -1,5 +1,7 @@ package com.sap.sailing.domain.base.impl; +import java.util.UUID; + import com.sap.sailing.domain.base.ControlPoint; import com.sap.sailing.domain.base.Mark; import com.sap.sailing.domain.base.SharedDomainFactory; @@ -10,8 +12,7 @@ import com.sap.sailing.domain.common.PassingInstruction; public class WaypointImpl implements Waypoint { private static final long serialVersionUID = 1600863368078653897L; private final ControlPoint controlPoint; - private static int idCounter = 1; - private final int id; + private final UUID id; private final PassingInstruction passingInstructions; private final Bearing fixedBearing; @@ -30,7 +31,7 @@ public class WaypointImpl implements Waypoint { this.controlPoint = controlPoint; this.passingInstructions = passingInstructions; this.fixedBearing = fixedBearing; - id = idCounter++; + id = UUID.randomUUID(); } @Override @@ -54,7 +55,7 @@ public class WaypointImpl implements Waypoint { } @Override - public Integer getId() { + public UUID getId() { return id; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/DelayedLeaderboardCorrections.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/DelayedLeaderboardCorrections.java index a56de1af5c7..8897561ef11 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/DelayedLeaderboardCorrections.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/DelayedLeaderboardCorrections.java @@ -34,39 +34,13 @@ public interface DelayedLeaderboardCorrections extends RaceColumnListener, Seria void correctScoreByID(Serializable competitorId, RaceColumn raceColumn, double correctedScore); - /** - * Deprecated. Use {@link #correctScoreByID(Serializable, RaceColumn, double)} instead. Remains available until all - * databases have been migrated to the use of competitor IDs instead of competitor names. - */ - void correctScoreByName(String competitorName, RaceColumn raceColumn, double correctedScore); - void setCarriedPointsByID(Serializable competitorId, double carriedPoints); - /** - * Deprecated. Use {@link #setCarriedPointsByID(Serializable, double)} instead. Remains available until all databases have been - * migrated to the use of competitor IDs instead of competitor names. - */ - void setCarriedPointsByName(String competitorName, double carriedPoints); - void setMaxPointsReasonByID(Serializable competitorId, RaceColumn raceColumn, MaxPointsReason maxPointsReason); - /** - * Deprecated. Use {@link #setMaxPointsReasonByID(Serializable, RaceColumn, MaxPointsReason)} instead. Remains - * available until all databases have been migrated to the use of competitor IDs instead of competitor names. - */ - void setMaxPointsReasonByName(String competitorName, RaceColumn raceColumn, MaxPointsReason maxPointsReason); - void setDisplayNameByID(Serializable competitorId, String displayName); - void setDisplayNameByName(String competitorName, String displayName); - - void suppressCompetitorById(Serializable escapedCompetitorId); - - /** - * Deprecated. Use {@link #suppressCompetitorById(Serializable)} instead. Remains available until all databases have been - * migrated to the use of competitor IDs instead of competitor names. - */ - void suppressCompetitorByName(String competitorName); + void suppressCompetitorByID(Serializable escapedCompetitorId); void addLeaderboardCorrectionsResolvedListener(LeaderboardCorrectionsResolvedListener listener); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DelayedLeaderboardCorrectionsImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DelayedLeaderboardCorrectionsImpl.java index 95979bb56e6..15e2db0a7cf 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DelayedLeaderboardCorrectionsImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DelayedLeaderboardCorrectionsImpl.java @@ -44,13 +44,6 @@ import com.sap.sse.common.IsManagedByCache; public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorrections, IsManagedByCache { private static final long serialVersionUID = 8824782847677232275L; - // deprecated structures that key corrections by name; to be removed once all databases have been migrated - private final Map carriedPointsByCompetitorName; - private final Map> maxPointsReasonsByCompetitorName; - private final Map> correctedScoresByCompetitorName; - private final Map displayNamesByCompetitorName; - private final Set suppressedCompetitorNames; - // structures that key corrections by competitor ID private final Map carriedPointsByCompetitorID; private final Map> maxPointsReasonsByCompetitorID; @@ -66,11 +59,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr public DelayedLeaderboardCorrectionsImpl(Leaderboard leaderboard, CompetitorFactory competitorFactory) { this.competitorFactory = competitorFactory; listeners = new HashSet<>(); - carriedPointsByCompetitorName = new HashMap(); - maxPointsReasonsByCompetitorName = new HashMap>(); - correctedScoresByCompetitorName = new HashMap>(); - displayNamesByCompetitorName = new HashMap(); - suppressedCompetitorNames = new HashSet(); carriedPointsByCompetitorID = new HashMap(); maxPointsReasonsByCompetitorID = new HashMap>(); correctedScoresByCompetitorID = new HashMap>(); @@ -121,14 +109,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } - @Override - public void setCarriedPointsByName(String competitorName, double carriedPoints) { - assertNoTrackedRaceAssociatedYet(); - synchronized (carriedPointsByCompetitorName) { - carriedPointsByCompetitorName.put(competitorName, carriedPoints); - } - } - @Override public void setMaxPointsReasonByID(Serializable competitorId, RaceColumn raceColumn, MaxPointsReason maxPointsReason) { assertNoTrackedRaceAssociatedYet(); @@ -147,19 +127,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } - @Override - public void setMaxPointsReasonByName(String competitorName, RaceColumn raceColumn, MaxPointsReason maxPointsReason) { - assertNoTrackedRaceAssociatedYet(); - synchronized (maxPointsReasonsByCompetitorName) { - Map map = maxPointsReasonsByCompetitorName.get(competitorName); - if (map == null) { - map = new HashMap(); - maxPointsReasonsByCompetitorName.put(competitorName, map); - } - map.put(raceColumn, maxPointsReason); - } - } - @Override public void correctScoreByID(Serializable competitorId, RaceColumn raceColumn, double correctedScore) { assertNoTrackedRaceAssociatedYet(); @@ -178,19 +145,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } - @Override - public void correctScoreByName(String competitorName, RaceColumn raceColumn, double correctedScore) { - assertNoTrackedRaceAssociatedYet(); - synchronized (correctedScoresByCompetitorName) { - Map map = correctedScoresByCompetitorName.get(competitorName); - if (map == null) { - map = new HashMap(); - correctedScoresByCompetitorName.put(competitorName, map); - } - map.put(raceColumn, correctedScore); - } - } - /** * Checks if there are any carried points, max points reasons or corrected scores left over that may now receive * their competitor record. If so, {@link #setCarriedPointsByName(com.sap.sailing.domain.base.Competitor, int)}, @@ -216,16 +170,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } } - synchronized (carriedPointsByCompetitorName) { - for (Iterator> carryEntryIter = carriedPointsByCompetitorName.entrySet() - .iterator(); carryEntryIter.hasNext();) { - Map.Entry carryEntry = carryEntryIter.next(); - if (competitorsByName.containsKey(carryEntry.getKey())) { - leaderboard.setCarriedPoints(competitorsByName.get(carryEntry.getKey()), carryEntry.getValue()); - carryEntryIter.remove(); - } - } - } synchronized (maxPointsReasonsByCompetitorID) { for (Iterator>> maxPointsReasonsEntryIter = maxPointsReasonsByCompetitorID .entrySet().iterator(); maxPointsReasonsEntryIter.hasNext();) { @@ -242,22 +186,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } } - synchronized (maxPointsReasonsByCompetitorName) { - for (Iterator>> maxPointsReasonsEntryIter = maxPointsReasonsByCompetitorName - .entrySet().iterator(); maxPointsReasonsEntryIter.hasNext();) { - java.util.Map.Entry> maxPointsReasonEntries = maxPointsReasonsEntryIter - .next(); - if (competitorsByName.containsKey(maxPointsReasonEntries.getKey())) { - for (Map.Entry maxPointsReasonEntry : maxPointsReasonEntries - .getValue().entrySet()) { - leaderboard.getScoreCorrection().setMaxPointsReason( - competitorsByName.get(maxPointsReasonEntries.getKey()), maxPointsReasonEntry.getKey(), - maxPointsReasonEntry.getValue()); - } - maxPointsReasonsEntryIter.remove(); - } - } - } synchronized (correctedScoresByCompetitorID) { for (Iterator>> correctedScoresEntryIter = correctedScoresByCompetitorID .entrySet().iterator(); correctedScoresEntryIter.hasNext();) { @@ -274,22 +202,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } } - synchronized (correctedScoresByCompetitorName) { - for (Iterator>> correctedScoresEntryIter = correctedScoresByCompetitorName - .entrySet().iterator(); correctedScoresEntryIter.hasNext();) { - java.util.Map.Entry> correctedScoresEntries = correctedScoresEntryIter - .next(); - if (competitorsByName.containsKey(correctedScoresEntries.getKey())) { - for (java.util.Map.Entry correctedScoreEntry : correctedScoresEntries - .getValue().entrySet()) { - leaderboard.getScoreCorrection().correctScore( - competitorsByName.get(correctedScoresEntries.getKey()), correctedScoreEntry.getKey(), - correctedScoreEntry.getValue()); - } - correctedScoresEntryIter.remove(); - } - } - } synchronized (displayNamesByCompetitorID) { for (Iterator> displayNamesEntryIter = displayNamesByCompetitorID .entrySet().iterator(); displayNamesEntryIter.hasNext();) { @@ -301,17 +213,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } } - synchronized (displayNamesByCompetitorName) { - for (Iterator> displayNamesEntryIter = displayNamesByCompetitorName - .entrySet().iterator(); displayNamesEntryIter.hasNext();) { - java.util.Map.Entry displayNamesEntry = displayNamesEntryIter.next(); - if (competitorsByName.containsKey(displayNamesEntry.getKey())) { - leaderboard.setDisplayName(competitorsByName.get(displayNamesEntry.getKey()), - displayNamesEntry.getValue()); - displayNamesEntryIter.remove(); - } - } - } synchronized (suppressedCompetitorIDs) { for (Iterator suppressedCompetitorNameIter = suppressedCompetitorIDs.iterator(); suppressedCompetitorNameIter .hasNext();) { @@ -322,24 +223,11 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } } - synchronized (suppressedCompetitorNames) { - for (Iterator suppressedCompetitorNameIter = suppressedCompetitorNames.iterator(); suppressedCompetitorNameIter - .hasNext();) { - String next = suppressedCompetitorNameIter.next(); - if (competitorsByName.containsKey(next)) { - leaderboard.setSuppressed(competitorsByName.get(next), true); - suppressedCompetitorNameIter.remove(); - } - } - } removeAsListenerIfNoLeftOvers(); } private void removeAsListenerIfNoLeftOvers() { - if (carriedPointsByCompetitorName.isEmpty() && maxPointsReasonsByCompetitorName.isEmpty() && - correctedScoresByCompetitorName.isEmpty() && displayNamesByCompetitorName.isEmpty() && - suppressedCompetitorNames.isEmpty() && - carriedPointsByCompetitorID.isEmpty() && maxPointsReasonsByCompetitorID.isEmpty() && + if (carriedPointsByCompetitorID.isEmpty() && maxPointsReasonsByCompetitorID.isEmpty() && correctedScoresByCompetitorID.isEmpty() && displayNamesByCompetitorID.isEmpty() && suppressedCompetitorIDs.isEmpty()) { getLeaderboard().removeRaceColumnListener(this); @@ -365,15 +253,7 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } @Override - public void setDisplayNameByName(String competitorName, String displayName) { - assertNoTrackedRaceAssociatedYet(); - synchronized (displayNamesByCompetitorName) { - displayNamesByCompetitorName.put(competitorName, displayName); - } - } - - @Override - public void suppressCompetitorById(Serializable competitorId) { + public void suppressCompetitorByID(Serializable competitorId) { assertNoTrackedRaceAssociatedYet(); Competitor competitor = competitorFactory.getExistingCompetitorById(competitorId); if (competitor != null) { @@ -385,14 +265,6 @@ public class DelayedLeaderboardCorrectionsImpl implements DelayedLeaderboardCorr } } - @Override - public void suppressCompetitorByName(String competitorName) { - assertNoTrackedRaceAssociatedYet(); - synchronized (suppressedCompetitorNames) { - suppressedCompetitorNames.add(competitorName); - } - } - @Override public void trackedRaceLinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) { assignLeftOvers(trackedRace); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/MarkPassingCalculator.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/MarkPassingCalculator.java index 48f7b56316e..7a04955c404 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/MarkPassingCalculator.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/MarkPassingCalculator.java @@ -101,6 +101,7 @@ public class MarkPassingCalculator { List> suppressedMarkPassings = new ArrayList<>(); List unsuppressedMarkPassings = new ArrayList<>(); while (!finished) { + try { logger.finer("MPC is checking the queue"); List allNewFixInsertions = new ArrayList<>(); try { @@ -140,11 +141,14 @@ public class MarkPassingCalculator { markFixes.clear(); addedWaypoints.clear(); removedWaypoints.clear(); - smallestChangedWaypointIndex = null; + smallestChangedWaypointIndex = null; fixedMarkPassings.clear(); removedFixedMarkPassings.clear(); suppressedMarkPassings.clear(); - unsuppressedMarkPassings.clear(); + unsuppressedMarkPassings.clear(); + } + } catch (Exception e) { + logger.severe("Error while calculating markpassings: " + e.getMessage()); } } } finally { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java index 058613d55b0..8c5bfaca6df 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java @@ -50,6 +50,7 @@ import com.sap.sse.common.Duration; import com.sap.sse.common.IsManagedByCache; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; +import com.sap.sse.common.Util.Pair; /** * Live tracking data of a single race. The race follows a defined {@link Course} with a sequence of {@link Leg}s. The @@ -865,4 +866,16 @@ public interface TrackedRace extends Serializable, IsManagedByCache getTrackingTimesFromRaceLogs() { + return null; + } + + /** + * Returns all marks found in the {@link #markTracks} map and the mark device mappings and mark + * definition events in all attached race and regatta logs. + */ + default Iterable getMarksFromRaceAndLogs() { + return getMarks(); + } + } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java index 9803974aff9..b900b863654 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java @@ -4,21 +4,24 @@ import java.util.HashSet; import java.util.Set; import java.util.logging.Logger; -import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent; import com.sap.sailing.domain.abstractlog.race.RaceLog; import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent; -import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AbortingFlagFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastPublishedCourseDesignFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.MarkPassingDataFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.TrackingTimesFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.WindFixesFinder; import com.sap.sailing.domain.abstractlog.race.impl.BaseRaceLogEventVisitor; import com.sap.sailing.domain.base.Competitor; @@ -31,6 +34,7 @@ import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.markpassingcalculation.MarkPassingUpdateListener; import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.Util.Pair; import com.sap.sse.common.Util.Triple; /** @@ -50,8 +54,9 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor { private LastPublishedCourseDesignFinder courseDesignFinder; private StartTimeFinder startTimeFinder; private AbortingFlagFinder abortingFlagFinder; - private MarkPassingDataFinder markPassingDataFinder; + private TrackingTimesFinder trackingTimesFinder; + private MarkPassingUpdateListener markPassingUpdateListener; public DynamicTrackedRaceLogListener(DynamicTrackedRace trackedRace) { @@ -70,12 +75,8 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor { courseDesignFinder = new LastPublishedCourseDesignFinder(raceLog); startTimeFinder = new StartTimeFinder(trackedRace.getRaceLogResolver(), raceLog); abortingFlagFinder = new AbortingFlagFinder(raceLog); - initializeWindTrack(raceLog); - analyze(); - if (markPassingUpdateListener != null) { - markPassingDataFinder = new MarkPassingDataFinder(raceLog); - analyzeMarkPassings(); - } + trackingTimesFinder = new TrackingTimesFinder(raceLog); + analyze(raceLog); } } @@ -137,8 +138,22 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor { } } - private void analyze() { + private void analyze(RaceLog raceLog) { analyzeCourseDesign(null); + initializeWindTrack(raceLog); + analyseTrackingTimes(raceLog); + if (markPassingUpdateListener != null) { + markPassingDataFinder = new MarkPassingDataFinder(raceLog); + analyzeMarkPassings(); + } + } + + private void analyseTrackingTimes(RaceLog raceLog) { + Pair times = trackingTimesFinder.analyze(); + if (times != null) { + trackedRace.setStartOfTrackingReceived(times.getA()); + trackedRace.setEndOfTrackingReceived(times.getB()); + } } private void analyzeCourseDesign(CourseBase courseBaseProvidedByEvent) { @@ -261,4 +276,14 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor { public void visit(RaceLogDependentStartTimeEvent event) { analyzeStartTime(null); } + + @Override + public void visit(RaceLogStartOfTrackingEvent event) { + trackedRace.setStartOfTrackingReceived(event.getLogicalTimePoint()); + } + + @Override + public void visit(RaceLogEndOfTrackingEvent event) { + trackedRace.setEndOfTrackingReceived(event.getLogicalTimePoint()); + } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 4cceaac7115..bc0a9a72841 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -6,6 +6,7 @@ import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.ConcurrentModificationException; @@ -35,18 +36,27 @@ import java.util.logging.Logger; import com.sap.sailing.domain.abstractlog.AbstractLog; import com.sap.sailing.domain.abstractlog.AbstractLogEvent; +import com.sap.sailing.domain.abstractlog.MultiLogAnalyzer; +import com.sap.sailing.domain.abstractlog.MultiLogAnalyzer.AnalyzerFactory; +import com.sap.sailing.domain.abstractlog.MultiLogAnalyzer.MapWithValueCollectionReducer; +import com.sap.sailing.domain.abstractlog.MultiLogAnalyzer.SetReducer; import com.sap.sailing.domain.abstractlog.race.RaceLog; import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent; import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.TrackingTimesFinder; import com.sap.sailing.domain.abstractlog.race.impl.RaceLogGateLineOpeningTimeEventImpl; import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState; import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateImpl; import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ReadonlyRacingProcedure; +import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.DefinedMarkFinder; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; +import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceMarkMappingFinder; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Course; @@ -746,6 +756,25 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl markPassingsTimes.clear(); } } + + /** + * The race log supports the event types {@link RaceLogStartOfTrackingEvent} and + * {@link RaceLogEndOfTrackingEvent}. These are to take precedence over any other start/end of + * tracking specification (see bug 3196). This method uses the {@link TrackingTimesFinder} to + * analyze all {@link #attachedRaceLogs race logs attached} to find tracking times specifications. + * If no tracking times specification is found at all, null is returned. Note that + * even when a valid pair is returned, the components may be null. + */ + @Override + public Pair getTrackingTimesFromRaceLogs() { + for (final RaceLog raceLog : attachedRaceLogs.values()) { + Pair result = new TrackingTimesFinder(raceLog).analyze(); + if (result != null) { + return result; + } + } + return null; + } /** * Calculates the start time of the race from various sources. The highest precedence take the {@link #attachedRaceLogs race logs}, @@ -3139,10 +3168,9 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl } logger.info("Finished loading competitor tracks for " + getRace().getName()); logger.info("Started loading mark tracks for " + getRace().getName()); - for (Mark mark : getMarks()) { + for (Mark mark : getMarksFromRaceAndLogs()) { try { - gpsFixStore.loadMarkTrack((DynamicGPSFixTrack) markTracks.get(mark), log, - mark); + gpsFixStore.loadMarkTrack((DynamicGPSFixTrack) getOrCreateTrack(mark), log, mark); } catch (TransformationException | NoCorrespondingServiceRegisteredException e) { logger.log(Level.WARNING, "Could not load track for " + mark, e); } @@ -3755,4 +3783,21 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl this.raceLogResolver = domainFactory.getRaceLogResolver(); return this; } + + @Override + public Iterable getMarksFromRaceAndLogs() { + final List> allLogs = new ArrayList>(); + final List> raceLogs = new ArrayList<>(); + raceLogs.addAll(attachedRaceLogs.values()); + allLogs.addAll(raceLogs); + allLogs.addAll(attachedRegattaLogs.values()); + final Map>> markMappings = new MultiLogAnalyzer<>(new DeviceMarkMappingFinder.Factory(), + new MapWithValueCollectionReducer<>(), allLogs).analyze(); + final Set result = new HashSet<>(); + result.addAll(markMappings.keySet()); + final AnalyzerFactory> analyzerFactory = new DefinedMarkFinder.Factory(); + Set marksDefinedInRaceLog = new MultiLogAnalyzer<>(analyzerFactory, new SetReducer(), raceLogs).analyze(); + result.addAll(marksDefinedInRaceLog); + return result; + } } diff --git a/java/com.sap.sailing.gwt.ui/Debug AdminConsole.launch b/java/com.sap.sailing.gwt.ui/Debug AdminConsole.launch new file mode 100755 index 00000000000..fac07558ee8 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/Debug AdminConsole.launch @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/Forward SailingGWT Ports for Android.launch.template b/java/com.sap.sailing.gwt.ui/Forward SailingGWT Ports for Android.launch similarity index 85% rename from java/com.sap.sailing.gwt.ui/Forward SailingGWT Ports for Android.launch.template rename to java/com.sap.sailing.gwt.ui/Forward SailingGWT Ports for Android.launch index 680251d912a..042eed68208 100644 --- a/java/com.sap.sailing.gwt.ui/Forward SailingGWT Ports for Android.launch.template +++ b/java/com.sap.sailing.gwt.ui/Forward SailingGWT Ports for Android.launch @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch b/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch index 9e0f5cfd10a..19df6cdef27 100644 --- a/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch @@ -3,7 +3,7 @@ - + @@ -72,7 +72,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/images/home/fullscreen.svg b/java/com.sap.sailing.gwt.ui/images/home/fullscreen.svg new file mode 100644 index 00000000000..f8666e288c1 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/images/home/fullscreen.svg @@ -0,0 +1,52 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/images/home/reload.svg b/java/com.sap.sailing.gwt.ui/images/home/reload.svg new file mode 100644 index 00000000000..b65180022cf --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/images/home/reload.svg @@ -0,0 +1,57 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/images/home/settings.svg b/java/com.sap.sailing.gwt.ui/images/home/settings.svg new file mode 100644 index 00000000000..41bdaa6e50b --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/images/home/settings.svg @@ -0,0 +1,52 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/images/mobile/solutions-post-trimmed.png b/java/com.sap.sailing.gwt.ui/images/mobile/solutions-post-trimmed.png new file mode 100644 index 00000000000..afd31c1255c Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/mobile/solutions-post-trimmed.png differ diff --git a/java/com.sap.sailing.gwt.ui/images/mobile/solutions-sap-trimmed.png b/java/com.sap.sailing.gwt.ui/images/mobile/solutions-sap-trimmed.png new file mode 100644 index 00000000000..d835a09e7ec Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/mobile/solutions-sap-trimmed.png differ diff --git a/java/com.sap.sailing.gwt.ui/images/mobile/solutions-simulator-trimmed.png b/java/com.sap.sailing.gwt.ui/images/mobile/solutions-simulator-trimmed.png new file mode 100644 index 00000000000..522e7eeedd4 Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/mobile/solutions-simulator-trimmed.png differ diff --git a/java/com.sap.sailing.gwt.ui/images/mobile/statistics.svg b/java/com.sap.sailing.gwt.ui/images/mobile/statistics.svg new file mode 100644 index 00000000000..d65616d4212 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/images/mobile/statistics.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivityProxy.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivityProxy.java index 88fba3a3b7b..d3b5c5449b0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivityProxy.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivityProxy.java @@ -94,11 +94,7 @@ public class EventActivityProxy extends AbstractActivityProxy { EventViewDTO event = ctx.getEventDTO(); if(event.getType() == EventType.SERIES_EVENT || event.getType() == EventType.SINGLE_REGATTA) { - if (event.isFinished()) { - return new RegattaLeaderboardPlace(new EventContext(ctx).withRegattaId(null)); - } else { - return new RegattaOverviewPlace(new EventContext(ctx).withRegattaId(null)); - } + return new RegattaOverviewPlace(new EventContext(ctx).withRegattaId(null)); } return new MultiregattaOverviewPlace(place.getCtx()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaOverviewTabView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaOverviewTabView.java index d01b77fe9b2..7ef53ebd364 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaOverviewTabView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaOverviewTabView.java @@ -8,6 +8,7 @@ import java.util.Map; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.AnchorElement; import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Style.Display; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -30,12 +31,14 @@ import com.sap.sailing.gwt.home.client.place.event.partials.multiRegattaList.Mul import com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLive; import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshManager; import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget; +import com.sap.sailing.gwt.home.desktop.partials.statistics.StatisticsBox; import com.sap.sailing.gwt.home.shared.ExperimentalFeatures; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO; import com.sap.sailing.gwt.ui.shared.RaceGroupDTO; import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO; import com.sap.sailing.gwt.ui.shared.dispatch.SortedSetResult; +import com.sap.sailing.gwt.ui.shared.dispatch.event.GetEventStatisticsAction; import com.sap.sailing.gwt.ui.shared.dispatch.event.GetLiveRacesForEventAction; import com.sap.sailing.gwt.ui.shared.dispatch.event.GetRegattaListViewAction; import com.sap.sailing.gwt.ui.shared.dispatch.regatta.RegattaWithProgressDTO; @@ -57,10 +60,12 @@ public class MultiregattaOverviewTabView extends Composite implements Multiregat @UiField(provided = true) EventOverviewStage stage; @UiField(provided = true) RacesListLive racesListLive; @UiField DivElement newContentContainerUi; + @UiField DivElement legendAndFilterUi; @UiField(provided = true) DropdownFilter boatCategoryFilterUi; @UiField MultiRegattaListStepsLegend regattaProgressLegendUi; @UiField(provided = true) MultiRegattaList regattaListUi; @UiField AnchorElement regattaOverviewLinkUi; + @UiField StatisticsBox statisticsBoxUi; private Presenter currentPresenter; @Override @@ -84,7 +89,7 @@ public class MultiregattaOverviewTabView extends Composite implements Multiregat racesListLive = new RacesListLive(currentPresenter, true); MultiregattaOverviewRegattasTabViewRegattaFilterList regattaFilterList = new MultiregattaOverviewRegattasTabViewRegattaFilterList(); boatCategoryFilterUi = new DropdownFilter(StringMessages.INSTANCE.allBoatClasses(), regattaFilterList); - regattaListUi = new MultiRegattaList(currentPresenter); + regattaListUi = new MultiRegattaList(currentPresenter, false); initWidget(ourUiBinder.createAndBindUi(this)); regattaOverviewLinkUi.setHref(currentPresenter.getRegattaOverviewLink()); @@ -95,6 +100,7 @@ public class MultiregattaOverviewTabView extends Composite implements Multiregat if (ExperimentalFeatures.SHOW_NEW_REGATTA_LIST) { refreshManager.add(regattaFilterList, new GetRegattaListViewAction(currentPresenter.getCtx().getEventDTO().getId())); + refreshManager.add(statisticsBoxUi, new GetEventStatisticsAction(currentPresenter.getCtx().getEventDTO().getId(), true)); content.removeFromParent(); } else { boatCategoryFilterUi.removeFromParent(); @@ -158,6 +164,7 @@ public class MultiregattaOverviewTabView extends Composite implements Multiregat DropdownFilterList, RefreshableWidget> { @Override public void setData(SortedSetResult data) { + legendAndFilterUi.getStyle().setDisplay(data.isEmpty() ? Display.NONE : Display.BLOCK); regattaListUi.setData(data); boatCategoryFilterUi.updateFilterValues(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaOverviewTabView.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaOverviewTabView.ui.xml index 0bc24f74d7d..74e5192b8c5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaOverviewTabView.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaOverviewTabView.ui.xml @@ -1,6 +1,7 @@ @@ -19,7 +20,7 @@
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaRegattasTabView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaRegattasTabView.java index 869c356c28a..b8bbbe0dcad 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaRegattasTabView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaRegattasTabView.java @@ -8,6 +8,7 @@ import java.util.Map; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.AnchorElement; import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Style.Display; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -55,6 +56,7 @@ public class MultiregattaRegattasTabView extends Composite implements Multiregat @UiField SimplePanel content; @UiField DivElement newContentContainerUi; @UiField(provided = true) RacesListLive racesListLiveUi; + @UiField DivElement legendAndFilterUi; @UiField(provided = true) DropdownFilter boatCategoryFilterUi; @UiField MultiRegattaListStepsLegend regattaProgressLegendUi; @UiField(provided = true) MultiRegattaList regattaListUi; @@ -81,7 +83,7 @@ public class MultiregattaRegattasTabView extends Composite implements Multiregat racesListLiveUi = new RacesListLive(currentPresenter, true); MultiregattaRegattasTabViewRegattaFilterList regattaFilterList = new MultiregattaRegattasTabViewRegattaFilterList(); boatCategoryFilterUi = new DropdownFilter(StringMessages.INSTANCE.allBoatClasses(), regattaFilterList); - regattaListUi = new MultiRegattaList(currentPresenter); + regattaListUi = new MultiRegattaList(currentPresenter, true); initWidget(ourUiBinder.createAndBindUi(this)); regattaOverviewLinkUi.setHref(currentPresenter.getRegattaOverviewLink()); @@ -156,6 +158,7 @@ public class MultiregattaRegattasTabView extends Composite implements Multiregat @Override public void setData(SortedSetResult data) { + legendAndFilterUi.getStyle().setDisplay(data.isEmpty() ? Display.NONE : Display.BLOCK); regattaListUi.setData(data); boatCategoryFilterUi.updateFilterValues(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaRegattasTabView.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaRegattasTabView.ui.xml index 43eb8639e1c..6bd7cebe1d7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaRegattasTabView.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/multiregatta/tabs/MultiregattaRegattasTabView.ui.xml @@ -16,7 +16,7 @@
-
+
-
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboard/OldLeaderboardDelegateFullscreenViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboard/OldLeaderboardDelegateFullscreenViewer.java new file mode 100644 index 00000000000..571214a20ec --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboard/OldLeaderboardDelegateFullscreenViewer.java @@ -0,0 +1,23 @@ +package com.sap.sailing.gwt.home.client.place.event.oldleaderboard; + +import com.google.gwt.dom.client.Element; +import com.google.gwt.user.client.ui.Label; +import com.sap.sailing.gwt.home.client.place.event.oldleaderboard.OldLeaderboard.OldLeaderboardDelegate; +import com.sap.sailing.gwt.home.client.place.event.oldleaderboards.AbstractLeaderboardFullscreenViewer; +import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; + +public class OldLeaderboardDelegateFullscreenViewer extends AbstractLeaderboardFullscreenViewer + implements OldLeaderboardDelegate { + + private final Label hasLiveRace = new Label(); + + public OldLeaderboardDelegateFullscreenViewer() { + setHeaderWidget(createPanel(lastScoringComment, hasLiveRace, scoringScheme)); + } + + @Override + public Element getHasLiveRaceElement() { + return hasLiveRace.getElement(); + } + +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboard/OldLeaderboardResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboard/OldLeaderboardResources.java deleted file mode 100644 index 44c6a5910c9..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboard/OldLeaderboardResources.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.sap.sailing.gwt.home.client.place.event.oldleaderboard; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ClientBundle; -import com.google.gwt.resources.client.CssResource; - -public interface OldLeaderboardResources extends ClientBundle { - public static final OldLeaderboardResources INSTANCE = GWT.create(OldLeaderboardResources.class); - - @Source("com/sap/sailing/gwt/home/client/place/event/oldleaderboard/OldLeaderboard.css") - LocalCss css(); - - public interface LocalCss extends CssResource { - String oldLeaderboardPanel(); - } -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboards/AbstractLeaderboardFullscreenViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboards/AbstractLeaderboardFullscreenViewer.java new file mode 100644 index 00000000000..b1704d341f7 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboards/AbstractLeaderboardFullscreenViewer.java @@ -0,0 +1,91 @@ +package com.sap.sailing.gwt.home.client.place.event.oldleaderboards; + +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.shared.partials.fullscreen.FullscreenContainer; +import com.sap.sse.common.Color; + +public abstract class AbstractLeaderboardFullscreenViewer extends FullscreenContainer implements + LeaderboardDelegate { + + private final Image autoRefreshControl = new Image("images/home/reload.svg"); + private final Image settingsControl = new Image("images/home/settings.svg"); + + private final Label lastScoringUpdateTime = new Label(); + private final Label lastScoringUpdateText = new Label(); + protected final Label lastScoringComment = new Label(); + protected final Label scoringScheme = new Label(); + + public AbstractLeaderboardFullscreenViewer() { + showLogo(); + showBorder(); + addToolbarInfo(createPanel(lastScoringUpdateText, lastScoringUpdateTime)); + addToolbarAction(autoRefreshControl); + addToolbarAction(settingsControl); + } + + @Override + protected void onShow() { + Element leaderboardPanel = getContentWidget().getElement(); + leaderboardPanel.getStyle().setBackgroundColor(Color.WHITE.getAsHtml()); + leaderboardPanel.getFirstChildElement().getStyle().setMarginTop(-10, Unit.PX); + leaderboardPanel.setTabIndex(0); + leaderboardPanel.focus(); + } + + @Override + protected void onClose() { + Element leaderboardPanel = getContentWidget().getElement(); + leaderboardPanel.getStyle().clearBackgroundColor(); + leaderboardPanel.getFirstChildElement().getStyle().clearMarginTop(); + leaderboardPanel.blur(); + leaderboardPanel.removeAttribute("tabIndex"); + } + + protected Widget createPanel(Widget... contentWidgets) { + FlowPanel panel = new FlowPanel(); + for (Widget widget : contentWidgets) + panel.add(widget); + return panel; + } + + @Override + public void setLeaderboardPanel(T leaderboardPanel) { + showContent(leaderboardPanel); + } + + @Override + public Widget getAutoRefreshControl() { + return autoRefreshControl; + } + + @Override + public Widget getSettingsControl() { + return settingsControl; + } + + @Override + public Element getLastScoringUpdateTimeElement() { + return lastScoringUpdateTime.getElement(); + } + + @Override + public Element getLastScoringUpdateTextElement() { + return lastScoringUpdateText.getElement(); + } + + @Override + public Element getLastScoringCommentElement() { + return lastScoringComment.getElement(); + } + + @Override + public Element getScoringSchemeElement() { + return scoringScheme.getElement(); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboards/LeaderboardDelegate.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboards/LeaderboardDelegate.java new file mode 100644 index 00000000000..1a3ff6fb283 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldleaderboards/LeaderboardDelegate.java @@ -0,0 +1,27 @@ +package com.sap.sailing.gwt.home.client.place.event.oldleaderboards; + +import com.google.gwt.dom.client.Element; +import com.google.gwt.event.logical.shared.CloseHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.ui.PopupPanel; +import com.google.gwt.user.client.ui.Widget; + +public interface LeaderboardDelegate { + + void setLeaderboardPanel(T leaderboardPanel); + + Widget getAutoRefreshControl(); + + Widget getSettingsControl(); + + HandlerRegistration addCloseHandler(CloseHandler handler); + + Element getLastScoringUpdateTimeElement(); + + Element getLastScoringUpdateTextElement(); + + Element getLastScoringCommentElement(); + + Element getScoringSchemeElement(); + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboard.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboard.java index 374edd07d03..5e3914f5069 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboard.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboard.java @@ -4,17 +4,25 @@ import java.util.Date; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.ParagraphElement; +import com.google.gwt.dom.client.Style.Overflow; +import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.Visibility; import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.logical.shared.CloseEvent; +import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.home.client.place.event.oldleaderboards.LeaderboardDelegate; import com.sap.sailing.gwt.home.client.place.event.regattaleaderboard.EventRegattaLeaderboardResources; import com.sap.sailing.gwt.ui.client.DebugIdHelper; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -37,41 +45,89 @@ public class OldMultiLeaderboard extends Composite { @UiField Anchor settingsAnchor; @UiField Anchor autoRefreshAnchor; + @UiField Anchor fullscreenAnchor; @UiField ParagraphElement lastScoringUpdateTimeDiv; @UiField ParagraphElement lastScoringUpdateTextDiv; @UiField ParagraphElement lastScoringCommentDiv; - @UiField - ParagraphElement scoringSchemeDiv; - @UiField - EventRegattaLeaderboardResources local_res; + @UiField ParagraphElement scoringSchemeDiv; + @UiField EventRegattaLeaderboardResources local_res; private MultiLeaderboardPanel multiLeaderboardPanel; private Timer autoRefreshTimer; + private final OldMultiLeaderboardDelegate delegate; public OldMultiLeaderboard() { - this.multiLeaderboardPanel = null; - - EventRegattaLeaderboardResources.INSTANCE.css().ensureInjected(); - OldMultiLeaderboardResources.INSTANCE.css().ensureInjected(); - - initWidget(uiBinder.createAndBindUi(this)); + this(null); } + public OldMultiLeaderboard(OldMultiLeaderboardDelegate delegate) { + this.multiLeaderboardPanel = null; + EventRegattaLeaderboardResources.INSTANCE.css().ensureInjected(); + OldMultiLeaderboardResources.INSTANCE.css().ensureInjected(); + initWidget(uiBinder.createAndBindUi(this)); + settingsAnchor.setTitle(StringMessages.INSTANCE.settings()); + autoRefreshAnchor.setTitle(StringMessages.INSTANCE.refresh()); + fullscreenAnchor.setTitle(StringMessages.INSTANCE.openFullscreenView()); + this.delegate = delegate; + this.setupFullscreenDelegate(); + } + + private void setupFullscreenDelegate() { + if (delegate == null) { + fullscreenAnchor.removeFromParent(); + return; + } + delegate.addCloseHandler(new CloseHandler() { + @Override + public void onClose(CloseEvent event) { + if (multiLeaderboardPanel != null) { + multiLeaderboardPanel.removeFromParent(); + oldMultiLeaderboardPanel.add(multiLeaderboardPanel); + } + } + }); + delegate.getSettingsControl().setTitle(StringMessages.INSTANCE.settings()); + delegate.getSettingsControl().addHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + OldMultiLeaderboard.this.settingsClicked(event); + } + }, ClickEvent.getType()); + delegate.getAutoRefreshControl().setTitle(StringMessages.INSTANCE.refresh()); + delegate.getAutoRefreshControl().addHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + OldMultiLeaderboard.this.toogleAutoRefreshClicked(event); + } + }, ClickEvent.getType()); + } + @UiHandler("autoRefreshAnchor") void toogleAutoRefreshClicked(ClickEvent event) { - if(autoRefreshTimer != null) { + if (autoRefreshTimer != null) { autoRefreshAnchor.removeStyleName(local_res.css().regattaleaderboard_meta_reload_live()); autoRefreshAnchor.removeStyleName(local_res.css().regattaleaderboard_meta_reload_playing()); + if (delegate != null) { + delegate.getAutoRefreshControl().removeStyleName(local_res.css().regattaleaderboard_meta_reload_live()); + delegate.getAutoRefreshControl().removeStyleName(local_res.css().regattaleaderboard_meta_reload_playing()); + } if (autoRefreshTimer.getPlayState() == PlayStates.Playing) { autoRefreshTimer.pause(); // autoRefreshAnchor.getElement().getStyle().setBackgroundColor("#f0ab00"); // autoRefreshAnchor.addStyleName(local_res.css().regattaleaderboard_meta_reload_playing()); - + // if (delegate != null) { + // delegate.getAutoRefreshControl().getElement().getStyle().setBackgroundColor("#f0ab00"); + // delegate.getAutoRefreshControl().addStyleName(local_res.css().regattaleaderboard_meta_reload_playing()); + // } } else { // playing the standalone leaderboard means putting it into live mode autoRefreshTimer.setPlayMode(PlayModes.Live); - // autoRefreshAnchor.getElement().getStyle().setBackgroundColor(r); + // autoRefreshAnchor.getElement().getStyle().setBackgroundColor("red"); autoRefreshAnchor.addStyleName(local_res.css().regattaleaderboard_meta_reload_live()); + if (delegate != null) { + // delegate.getAutoRefreshControl().getElement().getStyle().setBackgroundColor("red"); + delegate.getAutoRefreshControl().addStyleName(local_res.css().regattaleaderboard_meta_reload_live()); + } } } } @@ -82,12 +138,28 @@ public class OldMultiLeaderboard extends Composite { final String componentName = multiLeaderboardPanel.getLocalizedShortName(); final String debugIdPrefix = DebugIdHelper.createDebugId(componentName); - SettingsDialog dialog = new SettingsDialog(multiLeaderboardPanel, - StringMessages.INSTANCE); + SettingsDialog dialog = new SettingsDialog(multiLeaderboardPanel, StringMessages.INSTANCE) { + protected Widget getAdditionalWidget() { + Widget additionalWidget = super.getAdditionalWidget(); + if (!oldMultiLeaderboardPanel.getElement().isOrHasChild(multiLeaderboardPanel.getElement())) { + additionalWidget.getElement().getStyle().setProperty("maxWidth", Window.getClientWidth()-75, Unit.PX); + additionalWidget.getElement().getStyle().setOverflow(Overflow.AUTO); + } + return additionalWidget; + } + }; dialog.ensureDebugId(debugIdPrefix + "SettingsDialog"); dialog.show(); } } + + @UiHandler("fullscreenAnchor") + void fullscreenClicked(ClickEvent event) { + if(multiLeaderboardPanel != null && delegate != null) { + multiLeaderboardPanel.removeFromParent(); + delegate.setLeaderboardPanel(multiLeaderboardPanel); + } + } public void setMultiLeaderboard(MultiLeaderboardPanel multiLeaderboardPanel, final Timer timer) { this.autoRefreshTimer = timer; @@ -98,19 +170,36 @@ public class OldMultiLeaderboard extends Composite { public void updatedMultiLeaderboard(LeaderboardDTO leaderboard, boolean hasLiveRace) { if(leaderboard != null) { - lastScoringCommentDiv.setInnerText(leaderboard.getComment() != null ? leaderboard.getComment() : ""); - scoringSchemeDiv.setInnerText(leaderboard.scoringScheme != null ? ScoringSchemeTypeFormatter.getDescription(leaderboard.scoringScheme, StringMessages.INSTANCE) : ""); + String comment = leaderboard.getComment() != null ? leaderboard.getComment() : ""; + String scoringScheme = leaderboard.scoringScheme != null ? ScoringSchemeTypeFormatter.getDescription(leaderboard.scoringScheme, StringMessages.INSTANCE) : ""; + lastScoringCommentDiv.setInnerText(comment); + scoringSchemeDiv.setInnerText(scoringScheme); + if (delegate != null) { + delegate.getLastScoringCommentElement().setInnerText(comment); + delegate.getScoringSchemeElement().setInnerText(scoringScheme); + } if (leaderboard.getTimePointOfLastCorrectionsValidity() != null) { Date lastCorrectionDate = leaderboard.getTimePointOfLastCorrectionsValidity(); String lastUpdate = DateAndTimeFormatterUtil.defaultDateFormatter.render(lastCorrectionDate) + ", " + DateAndTimeFormatterUtil.longTimeFormatter.render(lastCorrectionDate); lastScoringUpdateTimeDiv.setInnerText(lastUpdate); lastScoringUpdateTextDiv.setInnerText(TextMessages.INSTANCE.eventRegattaLeaderboardLastScoreUpdate()); + if (delegate != null) { + delegate.getLastScoringUpdateTimeElement().setInnerText(lastUpdate); + delegate.getLastScoringUpdateTextElement().setInnerText(TextMessages.INSTANCE.eventRegattaLeaderboardLastScoreUpdate()); + } } else { lastScoringUpdateTimeDiv.setInnerText(""); lastScoringUpdateTextDiv.setInnerText(""); } - lastScoringUpdateTimeDiv.getStyle().setVisibility(!hasLiveRace ? Visibility.VISIBLE : Visibility.HIDDEN); + Visibility lastScoringUpdateTimeVisibility = !hasLiveRace ? Visibility.VISIBLE : Visibility.HIDDEN; + lastScoringUpdateTimeDiv.getStyle().setVisibility(lastScoringUpdateTimeVisibility); + if (delegate != null) { + delegate.getLastScoringUpdateTimeElement().getStyle().setVisibility(lastScoringUpdateTimeVisibility); + } } } + + public interface OldMultiLeaderboardDelegate extends LeaderboardDelegate{ + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboard.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboard.ui.xml index 0c6496bf821..1c6353daa1f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboard.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboard.ui.xml @@ -19,6 +19,7 @@ + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboardDelegateFullscreenViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboardDelegateFullscreenViewer.java new file mode 100644 index 00000000000..51bebceb478 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/oldmultileaderboard/OldMultiLeaderboardDelegateFullscreenViewer.java @@ -0,0 +1,13 @@ +package com.sap.sailing.gwt.home.client.place.event.oldmultileaderboard; + +import com.sap.sailing.gwt.home.client.place.event.oldleaderboards.AbstractLeaderboardFullscreenViewer; +import com.sap.sailing.gwt.home.client.place.event.oldmultileaderboard.OldMultiLeaderboard.OldMultiLeaderboardDelegate; +import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardPanel; + +public class OldMultiLeaderboardDelegateFullscreenViewer extends + AbstractLeaderboardFullscreenViewer implements OldMultiLeaderboardDelegate { + + public OldMultiLeaderboardDelegateFullscreenViewer() { + setHeaderWidget(createPanel(lastScoringComment, scoringScheme)); + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaList.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaList.gss index 42b617a51be..fe4b81f38e9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaList.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaList.gss @@ -151,7 +151,6 @@ img.race_item_windflag { } .regattalistitem { font-size: 1rem; - float: left; width: 100%; margin-top: 2em; border: 1px solid #ddd; @@ -173,8 +172,13 @@ img.race_item_windflag { .regattalistitem_tableborderTop { border-top: 1px solid #ebebeb; } +.regattalistitem_noraces { + font-style: italic; + font-weight: bold; + padding: 1.5em 1em; + float: left; +} .regattalistitem_steps { - border-bottom: 1px solid #ddd; overflow: hidden; } .regattalistitem_steps_step { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaList.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaList.java index 729b72a3d48..f7221341737 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaList.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaList.java @@ -5,13 +5,17 @@ import java.util.Collections; import java.util.TreeSet; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.FontWeight; +import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.place.event.multiregatta.EventMultiregattaView.Presenter; import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget; +import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.dispatch.SortedSetResult; import com.sap.sailing.gwt.ui.shared.dispatch.regatta.RegattaWithProgressDTO; @@ -25,9 +29,11 @@ public class MultiRegattaList extends Composite implements RefreshableWidget selectableBoatCategories = new TreeSet<>(); + private final boolean showMessageIfEmpty; - public MultiRegattaList(Presenter presenter) { + public MultiRegattaList(Presenter presenter, boolean showMessageIfEmpty) { this.currentPresenter = presenter; + this.showMessageIfEmpty = showMessageIfEmpty; initWidget(uiBinder.createAndBindUi(this)); } @@ -39,6 +45,9 @@ public class MultiRegattaList extends Composite implements RefreshableWidget data) { regattasContainerUi.clear(); selectableBoatCategories.clear(); + if (data.isEmpty() && showMessageIfEmpty) { + regattasContainerUi.add(getNoDataInfoWidget()); + } for (RegattaWithProgressDTO regattaWithProgress : data) { regattasContainerUi.add(new MultiRegattaListItem(regattaWithProgress, currentPresenter)); String boatCategory = regattaWithProgress.getBoatCategory(); @@ -48,6 +57,13 @@ public class MultiRegattaList extends Composite implements RefreshableWidget getSelectableBoatCategories() { return selectableBoatCategories; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListResources.java index 4135f335be9..80198633cab 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListResources.java @@ -44,6 +44,7 @@ public interface MultiRegattaListResources extends ClientBundle { String regattalistitem(); String regattalistitem_table(); String regattalistitem_tableborderTop(); + String regattalistitem_noraces(); String regattalistitem_steps(); String regattalistitem_steps_step(); String regattalistitem_steps_stepinactive(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListSteps.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListSteps.java index 98f9d0e6fdc..7ad113dea33 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListSteps.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListSteps.java @@ -33,6 +33,7 @@ public class MultiRegattaListSteps extends Composite { @UiField DivElement progressContainerUi; @UiField DivElement stepsContainerUi; + @UiField DivElement noRacesMessageUi; @UiField DivElement leaderboardButtonContainerUi; @UiField AnchorElement leaderboardButtonUi; @@ -56,6 +57,10 @@ public class MultiRegattaListSteps extends Composite { stepsContainerUi.appendChild(stepsBody.getElement()); } + if(regattaProgress.getSeries().isEmpty()) { + noRacesMessageUi.getStyle().clearDisplay(); + stepsContainerUi.removeFromParent(); + } } @Override @@ -77,7 +82,7 @@ public class MultiRegattaListSteps extends Composite { void setLeaderboardNavigation(RegattaState regattaState, PlaceNavigation placeNavigation) { placeNavigation.configureAnchorElement(leaderboardButtonUi); - leaderboardButtonUi.getStyle().clearDisplay(); + leaderboardButtonContainerUi.getStyle().clearDisplay(); leaderboardButtonUi.addClassName(getLeaderboardButtonStyle(regattaState)); stepsContainerUi.getStyle().setDisplay(Display.NONE); Scheduler.get().scheduleDeferred(new ScheduledCommand() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListSteps.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListSteps.ui.xml index 355541e4715..40465f5ca94 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListSteps.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListSteps.ui.xml @@ -6,10 +6,11 @@
+
-
+ diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListStepsBody.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListStepsBody.java index 7afd6f6ff85..c0773a10dba 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListStepsBody.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/multiRegattaList/MultiRegattaListStepsBody.java @@ -20,6 +20,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.dispatch.regatta.RegattaProgressFleetDTO; import com.sap.sailing.gwt.ui.shared.dispatch.regatta.RegattaProgressSeriesDTO; import com.sap.sailing.gwt.ui.shared.race.FleetMetadataDTO; +import com.sap.sse.common.Util; public class MultiRegattaListStepsBody extends UIObject implements RequiresResize { @@ -49,6 +50,7 @@ public class MultiRegattaListStepsBody extends UIObject implements RequiresResiz seriesProgress.getProgressRaceCount(), seriesProgress.getTotalRaceCount())); } addFleetProgresses(seriesProgress.getFleetState(), seriesProgress.getTotalRaceCount()); + setFleetsTooltip(seriesProgress.getFleetNames()); Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { @@ -68,6 +70,14 @@ public class MultiRegattaListStepsBody extends UIObject implements RequiresResiz } } + private void setFleetsTooltip(String[] fleetNames) { + if (fleetNames.length > 1) { + String fleetCount = String.valueOf(fleetNames.length); + String fleetNameList = "(" + Util.join(", ", fleetNames) + ")"; + fleetsContainerUi.setTitle(Util.join(" ", fleetCount, I18N.fleets(), fleetNameList)); + } + } + private void renderNames() { if (getElement().getOffsetWidth() < nameUi.getOffsetWidth() + checkUi.getOffsetWidth() + progressUi.getOffsetWidth()) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/raceListLive/RacesListLive.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/raceListLive/RacesListLive.gss index 6f05b620b9b..33566e9022b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/raceListLive/RacesListLive.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/raceListLive/RacesListLive.gss @@ -83,8 +83,7 @@ img.race_item_flag { .race_item_sailid { margin-left: 5px; vertical-align: middle; - font-weight: bold; - font-size: 0.8em; + font-weight: 600; } .race_item_winner { vertical-align: middle; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/raceListLive/RacesListLive.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/raceListLive/RacesListLive.java index 43c16bf8745..928934f777f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/raceListLive/RacesListLive.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/raceListLive/RacesListLive.java @@ -7,6 +7,7 @@ import com.google.gwt.user.client.ui.Composite; import com.sap.sailing.gwt.home.client.place.event.EventView; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.AbstractRaceList; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListColumnFactory; +import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListColumnSet; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListContainer; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListDataUtil; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.SortableRaceListColumn; @@ -38,9 +39,9 @@ public class RacesListLive extends Composite { private final SortableRaceListColumn courseAreaColumn = RaceListColumnFactory.getCourseAreaColumn(); private final SortableRaceListColumn courseColumn = RaceListColumnFactory.getCourseColumn(); private final SortableRaceListColumn raceViewStateColumn = RaceListColumnFactory.getRaceViewStateColumn(); - + public RaceListLiveRaces(EventView.Presenter presenter, boolean showRegattaDetails) { - super(presenter); + super(presenter, new RaceListColumnSet(1, 1)); this.regattaNameColumn.setShowDetails(showRegattaDetails); } @@ -55,6 +56,7 @@ public class RacesListLive extends Composite { boolean hasWind = RaceListDataUtil.hasWind(data); this.windSpeedColumn.setShowDetails(hasWind); this.windDirectionColumn.setShowDetails(hasWind); + columnSet.updateColumnVisibilities(); super.setTableData(data); } @@ -72,6 +74,13 @@ public class RacesListLive extends Composite { add(courseColumn); add(raceViewStateColumn); add(raceViewerButtonColumn); + + columnSet.addColumn(regattaNameColumn); + columnSet.addColumn(windSpeedColumn); + columnSet.addColumn(windDirectionColumn); + columnSet.addColumn(courseAreaColumn); + columnSet.addColumn(courseColumn); + columnSet.addColumn(fleetNameColumn); } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/AbstractRaceList.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/AbstractRaceList.java index adfd33c15d2..1e22538b0bf 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/AbstractRaceList.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/AbstractRaceList.java @@ -35,13 +35,14 @@ public abstract class AbstractRaceList startTimeColumn = RaceListColumnFactory.getStartTimeColumn(); protected final SortableRaceListColumn windDirectionColumn = RaceListColumnFactory.getWindDirectionColumn(); protected final SortableRaceListColumn raceViewerButtonColumn; - - private SortedCellTable cellTable = new SortedCellTable(0, CleanCellTableResources.INSTANCE); + protected final RaceListColumnSet columnSet; + private final SortedCellTable cellTable = new SortedCellTable(0, CleanCellTableResources.INSTANCE); private boolean tableColumnsInitialized = false; - protected AbstractRaceList(EventView.Presenter presenter) { + protected AbstractRaceList(EventView.Presenter presenter, RaceListColumnSet columnSet) { CSS.ensureInjected(); this.raceViewerButtonColumn = RaceListColumnFactory.getRaceViewerButtonColumn(presenter); + this.columnSet = columnSet; this.cellTableContainer.setWidget(this.cellTable); this.initTableStyle(); this.initWidget(cellTableContainer); @@ -49,7 +50,11 @@ public abstract class AbstractRaceList data) { this.ensureInitTableColumns(); - this.updateColumnVisibility(); + this.columnSet.updateColumnVisibilities(); + for (int i = 0; i < this.cellTable.getColumnCount(); i++) { + SortableRaceListColumn column = (SortableRaceListColumn) this.cellTable.getColumn(i); + column.updateHeaderAndCellStyles(); + } this.cellTable.setPageSize(data.size()); this.cellTable.setList(data); this.restoreColumnSortInfos(); @@ -74,17 +79,6 @@ public abstract class AbstractRaceList column = (SortableRaceListColumn) this.cellTable.getColumn(i); - Header header = column.getHeader(); - if (header != null) { - header.setHeaderStyleNames(column.getCurrentHeaderStyle()); - } - column.setCellStyleNames(column.getCurrentColumnStyle()); - } - } - @SuppressWarnings("unchecked") private void restoreColumnSortInfos() { ColumnSortList sortList = this.cellTable.getColumnSortList(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/RaceListColumnFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/RaceListColumnFactory.java index 5008ea7a1f6..de2f047769d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/RaceListColumnFactory.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/RaceListColumnFactory.java @@ -1,5 +1,7 @@ package com.sap.sailing.gwt.home.client.place.event.partials.racelist; +import static com.sap.sailing.gwt.ui.shared.race.RaceMetadataDTO.RaceTrackingState.TRACKED_VALID_DATA; + import java.util.Date; import com.google.gwt.cell.client.AbstractCell; @@ -21,10 +23,10 @@ import com.google.gwt.safehtml.shared.UriUtils; import com.google.gwt.user.cellview.client.SafeHtmlHeader; import com.sap.sailing.domain.common.InvertibleComparator; import com.sap.sailing.domain.common.SortingOrder; +import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter; import com.sap.sailing.domain.common.impl.NaturalComparator; import com.sap.sailing.gwt.common.client.SharedResources; import com.sap.sailing.gwt.common.client.SharedResources.MainCss; -import com.sap.sailing.gwt.common.client.SharedResources.MediaCss; import com.sap.sailing.gwt.common.client.i18n.TextMessages; import com.sap.sailing.gwt.home.client.place.event.EventView; import com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources; @@ -55,7 +57,6 @@ public class RaceListColumnFactory { private static final LocalCss CSS = RacesListLiveResources.INSTANCE.css(); private static final MainCss MAIN_CSS = SharedResources.INSTANCE.mainCss(); - private static final MediaCss MEDIA_CSS = SharedResources.INSTANCE.mediaCss(); private static final StringMessages I18N = StringMessages.INSTANCE; private static final TextMessages I18N_UBI = TextMessages.INSTANCE; private static final CellTemplates TEMPLATE = GWT.create(CellTemplates.class); @@ -170,12 +171,12 @@ public class RaceListColumnFactory { return new SortableRaceListColumn(I18N.fleet(), cell, comparator) { @Override public String getHeaderStyle() { - return getStyleNamesString(CSS.raceslist_head_item(), MEDIA_CSS.showonlarge()); + return CSS.raceslist_head_item(); } @Override public String getColumnStyle() { - return getStyleNamesString(CSS.race_item(), MEDIA_CSS.showonlarge()); + return CSS.race_item(); } @Override @@ -206,12 +207,12 @@ public class RaceListColumnFactory { return new SortableRaceListColumn(I18N.durationPlain(), cell, comparator) { @Override public String getHeaderStyle() { - return getStyleNamesString(CSS.raceslist_head_item(), MEDIA_CSS.showonlarge()); + return CSS.raceslist_head_item(); } @Override public String getColumnStyle() { - return getStyleNamesString(CSS.race_item(), MEDIA_CSS.showonlarge()); + return CSS.race_item(); } @Override @@ -309,12 +310,12 @@ public class RaceListColumnFactory { return new SortableRaceListColumn(I18N.from(), cell, comparator) { @Override public String getHeaderStyle() { - return getStyleNamesString(CSS.raceslist_head_item(), MEDIA_CSS.hideonsmall()); + return CSS.raceslist_head_item(); } @Override public String getColumnStyle() { - return getStyleNamesString(CSS.race_item(), CSS.racesListIcon(), MEDIA_CSS.hideonsmall()); + return getStyleNamesString(CSS.race_item(), CSS.racesListIcon()); } @Override @@ -335,12 +336,12 @@ public class RaceListColumnFactory { return new SortableRaceListColumn(I18N.courseArea(), cell, comparator) { @Override public String getHeaderStyle() { - return getStyleNamesString(CSS.raceslist_head_item(), MEDIA_CSS.showonlarge()); + return CSS.raceslist_head_item(); } @Override public String getColumnStyle() { - return getStyleNamesString(CSS.race_item(), MEDIA_CSS.showonlarge()); + return CSS.race_item(); } @Override @@ -361,12 +362,12 @@ public class RaceListColumnFactory { return new SortableRaceListColumn(I18N.course(), cell, comparator) { @Override public String getHeaderStyle() { - return getStyleNamesString(CSS.raceslist_head_item(), MEDIA_CSS.showonlarge()); + return CSS.raceslist_head_item(); } @Override public String getColumnStyle() { - return getStyleNamesString(CSS.race_item(), MEDIA_CSS.showonlarge()); + return CSS.race_item(); } @Override @@ -524,7 +525,20 @@ public class RaceListColumnFactory { return Util.join(" ", MAIN_CSS.button(), MAIN_CSS.buttonstrong(), buttonColor, MAIN_CSS.buttonarrowrightwhite()); } }; - InvertibleComparator comparator = null; + InvertibleComparator comparator = new InvertibleComparatorAdapter() { + @Override + public int compare(T o1, T o2) { + if (o1.getTrackingState() == TRACKED_VALID_DATA && o2.getTrackingState() == TRACKED_VALID_DATA) { + if (o1.getViewState() == RaceViewState.FINISHED && o2.getViewState() != RaceViewState.FINISHED) { + return 1; + } + if (o1.getViewState() != RaceViewState.FINISHED && o2.getViewState() == RaceViewState.FINISHED) { + return -1; + } + } + return -o1.getTrackingState().compareTo(o2.getTrackingState()); + } + }; return new SortableRaceListColumn("", cell, comparator) { @Override public String getHeaderStyle() { @@ -617,12 +631,12 @@ public class RaceListColumnFactory { @Override public String getHeaderStyle() { - return getStyleNamesString(CSS.raceslist_head_item(), CSS.raceslist_head_itemcenter(), MEDIA_CSS.showonlarge()); + return getStyleNamesString(CSS.raceslist_head_item(), CSS.raceslist_head_itemcenter()); } @Override public String getColumnStyle() { - return getStyleNamesString(CSS.race_item(), CSS.race_itemcenter(), MEDIA_CSS.showonlarge()); + return getStyleNamesString(CSS.race_item(), CSS.race_itemcenter()); } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/RaceListColumnSet.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/RaceListColumnSet.java new file mode 100644 index 00000000000..dd6d1091120 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/RaceListColumnSet.java @@ -0,0 +1,39 @@ +package com.sap.sailing.gwt.home.client.place.event.partials.racelist; + +import static com.sap.sailing.gwt.home.client.place.event.partials.racelist.SortableRaceListColumn.ColumnVisibility.ALWAYS; +import static com.sap.sailing.gwt.home.client.place.event.partials.racelist.SortableRaceListColumn.ColumnVisibility.LARGE; +import static com.sap.sailing.gwt.home.client.place.event.partials.racelist.SortableRaceListColumn.ColumnVisibility.MEDIUM; + +import java.util.LinkedHashSet; +import java.util.Set; + +import com.sap.sailing.gwt.home.client.place.event.partials.racelist.SortableRaceListColumn.ColumnVisibility; + +public class RaceListColumnSet { + + private final Set> columns = new LinkedHashSet<>(); + private final int visibilityAlwaysQuota, visibilityMediumQuota; + + public RaceListColumnSet(int visibilityAlwaysQuota, int visibilityMediumQuota) { + this.visibilityAlwaysQuota = visibilityAlwaysQuota; + this.visibilityMediumQuota = visibilityMediumQuota; + } + + public void addColumn(SortableRaceListColumn column) { + columns.add(column); + } + + public void updateColumnVisibilities() { + int visibleColumnCount = 0; + for (SortableRaceListColumn column : columns) { + if (column.isShowDetails()) { + column.setColumnVisibility(getColumnVisibilityByQuota(visibleColumnCount++)); + } + } + } + + private ColumnVisibility getColumnVisibilityByQuota(int i) { + return (i < visibilityAlwaysQuota) ? ALWAYS : (i < visibilityAlwaysQuota + visibilityMediumQuota) ? MEDIUM : LARGE; + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/SortableRaceListColumn.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/SortableRaceListColumn.java index 77935253a0d..bd7b5fde625 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/SortableRaceListColumn.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/partials/racelist/SortableRaceListColumn.java @@ -6,16 +6,37 @@ import com.google.gwt.user.cellview.client.Header; import com.google.gwt.user.cellview.client.SafeHtmlHeader; import com.sap.sailing.domain.common.InvertibleComparator; import com.sap.sailing.domain.common.SortingOrder; +import com.sap.sailing.gwt.common.client.SharedResources; import com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources; import com.sap.sailing.gwt.ui.client.shared.controls.SortableColumn; import com.sap.sse.common.Util; public abstract class SortableRaceListColumn extends SortableColumn { + enum ColumnVisibility { + ALWAYS { + @Override + protected String getAdditionalStyle() { + return ""; + } + }, LARGE { + @Override + protected String getAdditionalStyle() { + return SharedResources.INSTANCE.mediaCss().showonlarge(); + } + }, MEDIUM { + @Override + protected String getAdditionalStyle() { + return SharedResources.INSTANCE.mediaCss().hideonsmall(); + } + }; + protected abstract String getAdditionalStyle(); + } + private final Header header; private final InvertibleComparator comparator; - private boolean showDetails = true; + private ColumnVisibility columnVisibility = ColumnVisibility.ALWAYS; protected SortableRaceListColumn(String headerText, Cell cell, InvertibleComparator comparator) { this(new WrappedTextHeader(headerText), cell, comparator); @@ -25,7 +46,7 @@ public abstract class SortableRaceListColumn extends SortableColumn this(new WrappedTextHeader(headerText), cell, comparator, preferredSortingOrder); } - protected SortableRaceListColumn(Header header, Cell cell, InvertibleComparator comparator) { + private SortableRaceListColumn(Header header, Cell cell, InvertibleComparator comparator) { this(header, cell, comparator, SortingOrder.ASCENDING); } @@ -49,29 +70,30 @@ public abstract class SortableRaceListColumn extends SortableColumn this.showDetails = showDetails; } - public boolean isShowDetails() { + boolean isShowDetails() { return showDetails; } + + void setColumnVisibility(ColumnVisibility columnVisibility) { + this.columnVisibility = columnVisibility; + } + + void updateHeaderAndCellStyles() { + if (header != null) { + header.setHeaderStyleNames(getCurrentStyle(getHeaderStyle())); + } + setCellStyleNames(getCurrentStyle(getColumnStyle())); + } protected final String getStyleNamesString(String... styleNames) { return Util.join(" ", styleNames); } - private static final String COLUMN_HIDDEN_STYLE = RacesListLiveResources.INSTANCE.css().racesListHideColumn(); - - protected final String getCurrentHeaderStyle() { - return getShowOrHiddenStyle(getHeaderStyle()); + private String getCurrentStyle(String baseStyle) { + return getStyleNamesString(baseStyle, isShowDetails() ? columnVisibility.getAdditionalStyle() + : RacesListLiveResources.INSTANCE.css().racesListHideColumn()); } - - protected final String getCurrentColumnStyle() { - return getShowOrHiddenStyle(getColumnStyle()); - } - - private String getShowOrHiddenStyle(String showStyle) { - showStyle = showStyle == null ? "" : showStyle; - return showDetails ? showStyle : getStyleNamesString(showStyle, COLUMN_HIDDEN_STYLE); - } - + private static class WrappedTextHeader extends SafeHtmlHeader { public WrappedTextHeader(String headerText) { super(SafeHtmlUtils.fromTrustedString("
" + headerText + "
")); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaLeaderboardTabView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaLeaderboardTabView.java index 03c2ad85999..291306a4c14 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaLeaderboardTabView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaLeaderboardTabView.java @@ -10,6 +10,7 @@ import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.gwt.common.client.controls.tabbar.TabView; +import com.sap.sailing.gwt.home.client.place.event.oldleaderboard.OldLeaderboardDelegateFullscreenViewer; import com.sap.sailing.gwt.home.client.place.event.oldleaderboard.OldLeaderboard; import com.sap.sailing.gwt.home.client.place.event.regatta.EventRegattaView; import com.sap.sailing.gwt.home.client.place.event.regatta.EventRegattaView.Presenter; @@ -29,11 +30,11 @@ public class RegattaLeaderboardTabView extends SharedLeaderboardRegattaTabView { + interface MyBinder extends UiBinder { + } + + private static MyBinder ourUiBinder = GWT.create(MyBinder.class); + private Presenter currentPresenter; + + @UiField MultiRegattaListStepsLegend regattaProgressLegendUi; + @UiField SimplePanel regattaInfoContainerUi; + @UiField(provided = true) + RacesListLive racesListLive; + @UiField(provided = true) EventOverviewStage stage; + @UiField(provided = true) StandingsList standingsUi; + @UiField(provided = true) StatisticsBox statisticsBoxUi; + public RegattaOverviewTabView() { } @@ -30,27 +57,36 @@ public class RegattaOverviewTabView extends Composite implements RegattaTabView< @Override public TabView.State getState() { - // Made not available until we have something to show - // TODO: implement backend and required UI - // return currentPresenter.getCtx().getEventDTO().getType() == EventType.MULTI_REGATTA ? - // TabView.State.NOT_AVAILABLE_SHOW_NEXT_AVAILABLE - // : TabView.State.VISIBLE; - return TabView.State.NOT_AVAILABLE_SHOW_NEXT_AVAILABLE; + if(ExperimentalFeatures.SHOW_SINGLE_REGATTA_OVERVIEW) { + return currentPresenter.getCtx().getEventDTO().getType() == EventType.MULTI_REGATTA ? TabView.State.NOT_AVAILABLE_SHOW_NEXT_AVAILABLE + : TabView.State.VISIBLE; + } else { + return TabView.State.NOT_AVAILABLE_SHOW_NEXT_AVAILABLE; + } } @Override public void start(RegattaOverviewPlace myPlace, AcceptsOneWidget contentArea) { racesListLive = new RacesListLive(currentPresenter, false); stage = new EventOverviewStage(currentPresenter); + statisticsBoxUi = new StatisticsBox(false); + standingsUi = new StandingsList(currentPresenter.getRegattaMetadata().getState() == RegattaState.FINISHED, currentPresenter.getRegattaLeaderboardNavigation(myPlace.getRegattaId())); initWidget(ourUiBinder.createAndBindUi(this)); RefreshManager refreshManager = new RefreshManager(this, currentPresenter.getDispatch()); + refreshManager.add(new RefreshableWidget() { + @Override + public void setData(RegattaWithProgressDTO data) { + regattaInfoContainerUi.setWidget(new MultiRegattaListItem(data, true)); + } + }, new GetRegattaWithProgressAction(myPlace.getCtx().getEventDTO().getId(), myPlace.getRegattaId())); stage.setupRefresh(refreshManager); refreshManager.add(racesListLive.getRefreshable(), new GetLiveRacesForRegattaAction(currentPresenter.getCtx().getEventDTO() .getId(), currentPresenter.getCtx().getRegattaId())); - + refreshManager.add(standingsUi, new GetMiniLeaderbordAction(myPlace.getCtx().getEventDTO().getId(), myPlace.getRegattaId(), 5)); + refreshManager.add(statisticsBoxUi, new GetEventStatisticsAction(myPlace.getCtx().getEventDTO().getId(), true)); contentArea.setWidget(this); } @@ -59,16 +95,6 @@ public class RegattaOverviewTabView extends Composite implements RegattaTabView< } - interface MyBinder extends UiBinder { - } - - private static MyBinder ourUiBinder = GWT.create(MyBinder.class); - private Presenter currentPresenter; - - @UiField(provided = true) - RacesListLive racesListLive; - @UiField(provided = true) EventOverviewStage stage; - @Override public RegattaOverviewPlace placeToFire() { return new RegattaOverviewPlace(currentPresenter.getCtx()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaOverviewTabView.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaOverviewTabView.ui.xml index a2d8a30b0f2..f86c796b10b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaOverviewTabView.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaOverviewTabView.ui.xml @@ -1,13 +1,27 @@ + xmlns:o="urn:import:com.sap.sailing.gwt.home.client.place.event.overview" + xmlns:p='urn:import:com.sap.sailing.gwt.home.client.place.event.partials' + xmlns:dp='urn:import:com.sap.sailing.gwt.home.desktop.partials'> + + .legend { + margin-top: 2em; + margin-bottom: -1.5em; + } + - +
+ + +
+
- + + +
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaRacesTabView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaRacesTabView.java index 842dc760560..ccc0cf34e88 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaRacesTabView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regatta/tabs/RegattaRacesTabView.java @@ -31,6 +31,7 @@ import com.sap.sailing.gwt.home.client.place.event.partials.multiRegattaList.Mul import com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLive; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.AbstractRaceList; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListColumnFactory; +import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListColumnSet; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListContainer; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListDataUtil; import com.sap.sailing.gwt.home.client.place.event.partials.racelist.SortableRaceListColumn; @@ -227,7 +228,7 @@ public class RegattaRacesTabView extends Composite implements RegattaTabView winnerColumn = RaceListColumnFactory.getWinnerColumn(); public RaceListFinishedRaces(EventView.Presenter presenter) { - super(presenter); + super(presenter, new RaceListColumnSet(1, 1)); } @Override @@ -261,6 +262,14 @@ public class RegattaRacesTabView extends Composite implements RegattaTabView extends Composite implements RegattaTabView, LeaderboardUpdateListener { - + private boolean initialLeaderboardSizeCalculated = false; + public SharedLeaderboardRegattaTabView() { } @@ -28,7 +31,7 @@ public abstract class SharedLeaderboardRegattaTabView 0 && newHeight > 0 && newWidth > 1500 && initialLeaderboardSizeCalculated == false) { + int numberOfLastRacesToShow = (1500 - 600) / 50; + leaderboardPanel.setRaceColumnSelectionToLastNStrategy(numberOfLastRacesToShow); + initialLeaderboardSizeCalculated = true; + } + } + }); + observer.observe(leaderboardPanel.getLeaderboardTable().getElement()); + } + return leaderboardPanel; } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaleaderboard/EventRegattaLeaderboard.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaleaderboard/EventRegattaLeaderboard.gss index 84b86a3f74a..7aee44185c8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaleaderboard/EventRegattaLeaderboard.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaleaderboard/EventRegattaLeaderboard.gss @@ -85,17 +85,19 @@ text-align: right; } .regattaleaderboard_meta_reload, -.regattaleaderboard_meta_settings_button { +.regattaleaderboard_meta_settings_button, +.regattaleaderboard_meta_fullscreen_button { display: inline-block; width: 2.666666666666667em; height: 2.666666666666667em; margin: 0 0 0 0.666666666666667em; background-repeat: no-repeat; background-position: center center; + background-size: 50%; } .regattaleaderboard_meta_reload { background-color: #9f9f9f; - background-image: url("images/home/reload.png"); + background-image: url("images/home/reload.svg"); } .regattaleaderboard_meta_reload_live { background-color: red; @@ -122,12 +124,8 @@ text-align: right; } .regattaleaderboard_meta_settings_button { - width: 2.666666666666667em; - height: 2.666666666666667em; - margin: 0 0 0 0.666666666666667em; background-color: #9f9f9f; - background-image: url("images/home/settings.png"); - background-size: 40%; + background-image: url("images/home/settings.svg"); } .regattaleaderboard_table { margin-bottom: 20px; @@ -232,3 +230,7 @@ overflow-x: auto; margin: 10px 0px; } +.regattaleaderboard_meta_fullscreen_button { + background-color: #9f9f9f; + background-image: url("images/home/fullscreen.svg"); +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaleaderboard/EventRegattaLeaderboardResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaleaderboard/EventRegattaLeaderboardResources.java index c038ee3b299..4cca8c6382a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaleaderboard/EventRegattaLeaderboardResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaleaderboard/EventRegattaLeaderboardResources.java @@ -65,5 +65,7 @@ public interface EventRegattaLeaderboardResources extends ClientBundle { String leaderboardcompetitorshort(); String marginFix(); String letItScroll(); + + String regattaleaderboard_meta_fullscreen_button(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/fakeseries/tabs/EventSeriesLeaderboardTabView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/fakeseries/tabs/EventSeriesLeaderboardTabView.java index 2d0b0f90b3d..a035de5a67f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/fakeseries/tabs/EventSeriesLeaderboardTabView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/fakeseries/tabs/EventSeriesLeaderboardTabView.java @@ -10,6 +10,7 @@ import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.gwt.common.client.controls.tabbar.TabView; +import com.sap.sailing.gwt.home.client.place.event.oldleaderboard.OldLeaderboardDelegateFullscreenViewer; import com.sap.sailing.gwt.home.client.place.event.oldleaderboard.OldLeaderboard; import com.sap.sailing.gwt.home.client.place.fakeseries.EventSeriesAnalyticsDataManager; import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesView; @@ -28,11 +29,11 @@ public class EventSeriesLeaderboardTabView extends SharedLeaderboardEventSeriesT private SeriesView.Presenter currentPresenter; - @UiField + @UiField(provided = true) protected OldLeaderboard leaderboard; public EventSeriesLeaderboardTabView() { - super(); + leaderboard = new OldLeaderboard(new OldLeaderboardDelegateFullscreenViewer()); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/fakeseries/tabs/EventSeriesLeaderboardsTabView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/fakeseries/tabs/EventSeriesLeaderboardsTabView.java index e13b400eb31..04b18475f80 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/fakeseries/tabs/EventSeriesLeaderboardsTabView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/fakeseries/tabs/EventSeriesLeaderboardsTabView.java @@ -12,6 +12,7 @@ import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.gwt.common.client.controls.tabbar.TabView; +import com.sap.sailing.gwt.home.client.place.event.oldmultileaderboard.OldMultiLeaderboardDelegateFullscreenViewer; import com.sap.sailing.gwt.home.client.place.event.oldmultileaderboard.OldMultiLeaderboard; import com.sap.sailing.gwt.home.client.place.event.utils.EventParamUtils; import com.sap.sailing.gwt.home.client.place.fakeseries.EventSeriesAnalyticsDataManager; @@ -35,10 +36,11 @@ public class EventSeriesLeaderboardsTabView extends Composite implements SeriesT private SeriesView.Presenter currentPresenter; - @UiField + @UiField(provided = true) protected OldMultiLeaderboard leaderboard; public EventSeriesLeaderboardsTabView() { + leaderboard = new OldMultiLeaderboard(new OldMultiLeaderboardDelegateFullscreenViewer()); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/solutions/SolutionsPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/solutions/SolutionsPlace.java index 5fdf93d9361..e9fbb8f367e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/solutions/SolutionsPlace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/solutions/SolutionsPlace.java @@ -2,8 +2,11 @@ package com.sap.sailing.gwt.home.client.place.solutions; import com.google.gwt.place.shared.PlaceTokenizer; import com.sap.sailing.gwt.common.client.AbstractBasePlace; +import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.home.shared.app.HasLocationTitle; +import com.sap.sailing.gwt.home.shared.app.HasMobileVersion; -public class SolutionsPlace extends AbstractBasePlace { +public class SolutionsPlace extends AbstractBasePlace implements HasLocationTitle, HasMobileVersion { public enum SolutionsNavigationTabs { SailingAnalytics, RaceCommiteeApp, PostRaceAnalytics, TrainingDiary, SailingSimulator }; private final SolutionsNavigationTabs navigationTab; @@ -23,6 +26,11 @@ public class SolutionsPlace extends AbstractBasePlace { public SolutionsNavigationTabs getNavigationTab() { return navigationTab; } + + @Override + public String getLocationTitle() { + return TextMessages.INSTANCE.solutions(); + } public static class Tokenizer implements PlaceTokenizer { @Override @@ -35,5 +43,4 @@ public class SolutionsPlace extends AbstractBasePlace { return new SolutionsPlace(url); } } - } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingFullscreenViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingFullscreenViewer.java index d965a7422e9..9888022cd85 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingFullscreenViewer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingFullscreenViewer.java @@ -2,67 +2,17 @@ package com.sap.sailing.gwt.home.client.shared.media; import java.util.Collection; -import com.google.gwt.dom.client.Style.Overflow; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.event.logical.shared.CloseEvent; -import com.google.gwt.event.logical.shared.CloseHandler; -import com.google.gwt.event.logical.shared.ResizeEvent; -import com.google.gwt.event.logical.shared.ResizeHandler; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.PopupPanel; -import com.google.gwt.user.client.ui.PopupPanel.PositionCallback; -import com.google.gwt.user.client.ui.RootPanel; +import com.sap.sailing.gwt.home.shared.partials.fullscreen.FullscreenContainer; import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO; import com.sap.sse.gwt.client.controls.carousel.ImageCarousel.FullscreenViewer; -public class SailingFullscreenViewer implements FullscreenViewer { - private PopupPanel popup = new PopupPanel(true) { - protected void onPreviewNativeEvent(NativePreviewEvent event) { - if (event.getTypeInt() == Event.ONKEYDOWN && event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) { - hide(); - } - }; - }; - +public class SailingFullscreenViewer extends FullscreenContainer implements FullscreenViewer { public void show(SailingImageDTO selected, Collection images) { - final SailingGalleryPlayer viewer = new SailingGalleryPlayer(selected, images); - - Window.addResizeHandler(new ResizeHandler() { - @Override - public void onResize(ResizeEvent event) { - viewer.setHeight(Window.getClientHeight() + "px"); - viewer.setWidth(Window.getClientWidth() + "px"); - viewer.onResize(); - } - }); - - RootPanel.get().getElement().getStyle().setOverflow(Overflow.HIDDEN); - viewer.setHeight(Window.getClientHeight() + "px"); - viewer.setWidth(Window.getClientWidth() + "px"); - viewer.onResize(); - popup.setWidget(viewer); - - popup.setPopupPositionAndShow(new PositionCallback() { - @Override - public void setPosition(int offsetWidth, int offsetHeight) { - popup.center(); - } - }); - popup.addCloseHandler(new CloseHandler() { - @Override - public void onClose(CloseEvent event) { - RootPanel.get().getElement().getStyle().setOverflow(Overflow.AUTO); - } - }); - viewer.setCloseCommand(new Command() { - @Override - public void execute() { - popup.hide(); - } - }); + showContent(new SailingGalleryPlayer(selected, images)); + } + + @Override + protected void onShow() { + getContentWidget().setFocusToSubSlider(); } - } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingGalleryPlayer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingGalleryPlayer.java index 26af01bd791..5be069d2680 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingGalleryPlayer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingGalleryPlayer.java @@ -8,27 +8,22 @@ import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.ImageElement; -import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.ResizeComposite; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO; import com.sap.sse.common.Util; public class SailingGalleryPlayer extends ResizeComposite { + private static MyBinder uiBinder = GWT.create(MyBinder.class); - private Command closeCommand; interface MyBinder extends UiBinder { } - @UiField - DivElement mainSliderUi; - @UiField - DivElement subSliderUi; + @UiField DivElement mainSliderUi; + @UiField DivElement subSliderUi; private int selectedIdx; @@ -40,6 +35,10 @@ public class SailingGalleryPlayer extends ResizeComposite { subSliderUi.appendChild(createThumbImgElement(i)); } } + + public void setFocusToSubSlider() { + subSliderUi.getFirstChildElement().focus(); + } private ImageElement createThumbImgElement(SailingImageDTO i ) { ImageElement img = Document.get().createImageElement(); @@ -82,10 +81,8 @@ public class SailingGalleryPlayer extends ResizeComposite { }-*/; native void refreshSlider() /*-{ - $wnd.$('.mainSlider').slick('setOption', null, null, true); $wnd.$('.subSlider').slick('setOption', null, null, true); - }-*/; /** @@ -94,7 +91,6 @@ public class SailingGalleryPlayer extends ResizeComposite { * @param uniqueId */ native void _onLoad() /*-{ - $wnd.$('.mainSlider').slick({ lazyLoad : 'ondemand', slidesToShow : 1, @@ -118,17 +114,5 @@ public class SailingGalleryPlayer extends ResizeComposite { focusOnSelect : true, draggable : false }); - }-*/; - - public void setCloseCommand(Command closeCommand) { - this.closeCommand = closeCommand; - } - - @UiHandler("closeUi") - public void didClose(ClickEvent e) { - if (closeCommand != null) { - closeCommand.execute(); - } - } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingGalleryPlayer.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingGalleryPlayer.ui.xml index 8dad830f28b..2df8570a654 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingGalleryPlayer.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/media/SailingGalleryPlayer.ui.xml @@ -1,72 +1,46 @@ - + - @external slick-active; + @external slick-active; + .mainSlider { + height: 100%; + } + .mainSlider div { + height: 100%; + } + .subSlider img { + margin-top: 10px; + margin-right: 10px; + border: 4px solid transparent; + cursor: pointer; + } + .subSlider .slick-active { + border: 4px solid white; - .mainSlider { - height: 100%; - } - .mainSlider div { - height: 100%; - } - .subSlider img { - margin-top: 10px; - margin-right: 10px; - border: 4px solid transparent; - cursor: pointer; - } - .subSlider .slick-active { - border: 4px solid white; - - } - - .fs-background { - background-color: rgba(0,0,0,0.9); - } - .previewBar { - border-top: 1px solid white; - padding: 10px; - - } - .toolbar { - text-align: right; - padding: 10px 20px 10px 10px; - - } - .content { - width: 100%; - height: 100%; - } - .close { - height: 30px; - width: 30px; - cursor: pointer; - } - .subcontent { - border-top: 1px solid #ebebeb; - } - - - - - - - - - -
+ } + .previewBar { + border-top: 1px solid white; + padding: 10px; -
+ } + .content { + width: 100%; + height: 100%; + } + .subcontent { + border-top: 1px solid #ebebeb; + } + + + + +
-
- -
+
-
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/Standings.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/Standings.gss new file mode 100644 index 00000000000..b0307fa806e --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/Standings.gss @@ -0,0 +1,383 @@ +.standingsHeaderLink, .standingsHeaderLink:HOVER { + display: block; + background-color: #f2f2f2; + color: #333; + border-bottom: 1px solid #dedede; + text-decoration: none; + position: relative; + overflow: hidden; +} +.standingsHeaderTitle { + padding: 1.111111111111111em; + padding-right: 0.25em; + font-size: 1.2em; + font-weight: 700; + line-height: 1.333; + display: inline-block; +} +.standingsHeaderArrow { + position: absolute; + top: 0; + right: 0; + bottom: 0; + text-align: right; + padding: 0.666666666666667em; + padding-right: 2.666666666666667em; + background-image: url("images/home/arrow-down-grey.png"); + background-size: 1.333333333333333em 1.333333333333333em; + background-position: center; + background-repeat: no-repeat; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.regattalistitem { + font-size: 1rem; + float: left; + width: 100%; + margin-top: 2em; + border: 1px solid #ddd; + border-radius: 0.333333333333333em; + overflow: hidden; +} +.regattalistitem > div:last-child { + border-bottom: none; +} +.regattalistitem_table { + width: 100%; + border-spacing: 0; + border-collapse: separate; + border-bottom: 1px solid #ddd; +} +.regattalistitem_table:last-of-type { + border-bottom: none; +} +.regattalistitem_tableborderTop { + border-top: 1px solid #ebebeb; +} +.regattalistitem_steps { + border-bottom: 1px solid #ddd; + overflow: hidden; +} +.regattalistitem_steps_step { + float: left; + position: relative; + height: 4em; + text-transform: uppercase; + padding: 0 0.666666666666667em; +} +.regattalistitem_steps_step:first-child { + padding-left: 1em; +} +.regattalistitem_steps_stepinactive { + color: #ddd; +} +.regattalistitem_steps_step_infowrapper { + position: relative; + top: 50%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + white-space: nowrap; +} +.regattalistitem_steps_step_name { + font-size: 0.866666666666667em; + font-weight: 600; + display: inline-block; + margin-right: 0.333333333333333em; +} +.regattalistitem_steps_step_name::first-letter { + font-size: 0.866666666666667rem; + margin-right: 0.333333333333333rem; +} +@media (min-width: 49.0625em) { + .regattalistitem_steps_step_name::first-letter { + margin-right: 0; + } +} +@media (min-width: 49.0625em) { + .regattalistitem_steps_step_name { + font-size: 0.866666666666667em; + } +} +.regattalistitem_steps_step_check { + display: inline-block; + vertical-align: middle; + width: 1.066666666666667em; + height: 1.066666666666667em; + background-image: url("../images/home/icon-green-check.svg"); + background-repeat: no-repeat; + background-size: contain; + margin-right: 0.333333333333333em; +} +.regattalistitem_steps_step_progress { + display: inline-block; + font-size: 0.866666666666667em; + text-transform: none; +} +.regattalistitem_steps_step_fleets { + width: 100%; + height: 1em; + border: 1px solid #dedede; + margin-top: 0.266666666666667em; +} +.regattalistitem_steps_step_fleets_fleet { + font-size: inherit; +} +.regattalistitem_steps_step_fleets_fleet_progress { + height: 100%; +} +.regattalistitem_steps_button { + height: 100%; + padding: 0.666666666666667em; + text-align: right; +} +.regattalistitem_steps_button .button { + margin-left: 0.8em; +} +.race { + display: table-row; + color: #333; + font-size: 1rem; + overflow: hidden; +} +.race:last-of-type .race_item { + border: none; +} +.race_fleetcorner { + width: 1em; + vertical-align: top; + border-bottom: 1px solid #ebebeb; +} +.race_fleetcorner_icon { + width: 1em; + margin-right: -2.333333333333333em; + position: relative; + top: 1px; + left: 1px; + border-style: solid; + border-color: transparent; + border-width: 1em 1em 0 0; +} +.race_item { + display: table-cell; + text-align: left; + vertical-align: middle; + border-bottom: 1px solid #ebebeb; + white-space: nowrap; + padding: 1.4em 0.666666666666667em 0.733333333333333em 1.333333333333333em; +} +.race_item .button { + white-space: nowrap; +} +.race_item:first-of-type { + padding-left: 2em; +} +.race_itemrank:after { + content: '.'; +} +.race_itemshort { + width: 5em; +} +.race_itemlong { + width: 32.5%; +} +.race_itemwind { + white-space: nowrap; +} +.race_itemwindflag { + padding: 1.066666666666667em 0.666666666666667em 0.4em 1.333333333333333em; +} +img.race_item_windflag { + max-width: 2.4em; + max-height: 2.4em; + vertical-align: middle; +} +.race_itemname { + font-weight: 600; +} +.race_itemwinner { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: middle; + min-width: 13.333333333333334em; + max-width: 16.666666666666668em; +} +img.race_item_flag { + vertical-align: middle; + height: 1.25em; + width: auto; + margin-top: -0.2em; +} +.race_item_position { + margin-right: 0.333333333333333em; +} +.race_item_winner { + white-space: normal; + vertical-align: middle; +} +.race_itemwinner { + padding: 0.733333333333333em 1.333333333333333em; +} +.race_itemcenter { + text-align: center; +} +.race_itemright { + text-align: right; + vertical-align: middle; + padding-left: 0; + padding-right: 0.666666666666667em; + padding-top: 0.666666666666667em; +} +.race_itemright_button { + padding: 0.666666666666667em; +} +.race_itemstatus { + position: relative; +} +.race_itemstatus:first-letter { + text-transform: capitalize; +} +.race_itemstatus_container { + min-width: 5.333333333333333em; + display: inline-block; +} +.race_itemstatus_container_text { + clip: auto; +} +.race_itemstatus_container_progressbar { + height: 0.2em; + position: relative; + top: 0.2em; + width: 100%; + background-color: #dedede; +} +.race_itemstatus_container_progressbar_progress { + height: 100%; + background-color: #efaa00; +} +.racewinners .race_item { + padding: 1.2em 0.666666666666667em 1.2em 1.333333333333333em; +} +.racewinners .race_item:nth-last-child(1) { + display: none; +} +@media (min-width: 61em) { + .racewinners .race_item:nth-last-child(1) { + display: inline-block; + } +} +.racewinners .race_itemname { + vertical-align: middle; +} +.race_fleetcornerblue:before { + border-top-color: #00f; +} +.race_fleetcornerred:before { + border-top-color: #f00; +} +.race_fleetcornersilver:before { + border-top-color: #c0c0c0; +} +.race_fleetcornergold:before { + border-top-color: #ffd700; +} +.race_fleetcorneryellow:before { + border-top-color: #ff0; +} +.standings { + font-size: 1rem; +} +.standings_title { + font-size: 1.466666666666667em; + color: #0a0a0a; +} +.standings_description { + color: #666; + margin: -1em 0 0; +} +.standings_list { + width: 100%; + font-size: 1rem; + border: 1px solid #dedede; + border-radius: 0.333333333333333em; + overflow: hidden; +} +.standings_listhidden .standings_list_content { + display: none; +} +.standings_list_content { + font-size: inherit; + overflow: hidden; +} +.standings_list_content .regattalistitem { + font-size: inherit; + float: left; + width: 100%; + margin: 0; + padding: 0; + border: none; + border-radius: 0; + padding-left: 12.666666666666666em; + margin-left: -12.666666666666666em; +} +.standings_list_content .race_item { + padding: 1.15em 1em 1.15em 1.333333333333333em; +} +.standings_list_content .small10 .race_item { + padding-left: 0.666666666666667em; +} +.standings_list_content_picture { + width: 9.466666666666667em; + margin: 1.333333333333333em; + padding: 0; +} +.standings_list_content_picture_image { + width: 100%; + background-color: #808080; + background-repeat: no-repeat; + background-size: cover; + background-position: center center; +} +.standings_list_content_rank { + margin-right: 1.333333333333333em; + margin-left: 0.666666666666667em; +} +.standings_list_content_rank:after { + content: '.'; +} +.standings_list_content_medal { + display: inline-block; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + text-align: center; + color: #fff; + font-size: 12px; + font-weight: bold; + border-radius: 50%; + margin-right: 2.5em; + margin-top: -0.333333333333333em; + margin-bottom: -0.333333333333333em; +} +.standings_list_content_medal[data-rank="1"] { + background-color: #de8a2e; +} +.standings_list_content_medal[data-rank="2"] { + background-color: #c0c0c0; +} +.standings_list_content_medal[data-rank="3"] { + background-color: #8c7953; +} +.standings_list_content_flag { + margin-right: 1.666666666666667em; +} +.regattalistitem_table .race_itemwithbutton { + padding: 0.666666666666667em; +} +.standings_listhidden .regattaheader { + border: none; +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/StandingsList.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/StandingsList.java new file mode 100644 index 00000000000..f9c500c415d --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/StandingsList.java @@ -0,0 +1,92 @@ +package com.sap.sailing.gwt.home.desktop.partials.standings; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.dom.client.Style.Display; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget; +import com.sap.sailing.gwt.home.client.shared.LabelTypeUtil; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil; +import com.sap.sailing.gwt.ui.shared.dispatch.event.GetMiniLeaderboardDTO; +import com.sap.sailing.gwt.ui.shared.dispatch.event.MiniLeaderboardItemDTO; +import com.sap.sailing.gwt.ui.shared.general.LabelType; + +public class StandingsList extends Widget implements RefreshableWidget { + interface MyUiBinder extends UiBinder { + } + + private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); + private static final StringMessages i18n = StringMessages.INSTANCE; + + @UiField AnchorElement headerLinkUi; + @UiField SpanElement headerTitleUi; + @UiField SpanElement headerLabelUi; + @UiField DivElement headerArrowUi; + @UiField DivElement itemContainerUi; + @UiField DivElement noResultsUi; + @UiField DivElement scoreInformationUi; + + public StandingsList(boolean finished, PlaceNavigation headerNavigation) { + StandingsResources.INSTANCE.css().ensureInjected(); + setElement(uiBinder.createAndBindUi(this)); + + headerTitleUi.setInnerText(finished ? i18n.results() : i18n.latestRegattaStandings()); + if(headerNavigation == null) { + headerArrowUi.removeFromParent(); + } else { + headerNavigation.configureAnchorElement(headerLinkUi); + } + } + + @Override + public void setData(GetMiniLeaderboardDTO data) { + itemContainerUi.removeAllChildren(); + scoreInformationUi.removeAllChildren(); + getElement().getStyle().clearDisplay(); + updateScoreInformation(data); + + LabelTypeUtil.renderLabelTypeOrHide(headerLabelUi, data.isLive() ? LabelType.LIVE : LabelType.NONE); + + if(data.getItems().isEmpty()) { + noResultsUi.getStyle().clearDisplay(); + return; + } + noResultsUi.getStyle().setDisplay(Display.NONE); + + + boolean showRaceCounts = data.hasDifferentRaceCounts(); + for (MiniLeaderboardItemDTO item : data.getItems()) { + itemContainerUi.appendChild(new StandingsListCompetitor(item, showRaceCounts).getElement()); + } + } + + private void updateScoreInformation(GetMiniLeaderboardDTO data) { + scoreInformationUi.removeAllChildren(); + if(data.getItems().isEmpty() || (data.getScoreCorrectionText() == null && data.getLastScoreUpdate() == null)) { + scoreInformationUi.getStyle().setDisplay(Display.NONE); + return; + } + scoreInformationUi.getStyle().clearDisplay(); + + if (data.getScoreCorrectionText() != null) { + DivElement scoreCorrectionText = Document.get().createDivElement(); + scoreCorrectionText.setInnerText(data.getScoreCorrectionText()); + scoreInformationUi.appendChild(scoreCorrectionText); + } + if (data.getLastScoreUpdate() != null) { + DivElement lastUpdateElement = Document.get().createDivElement(); + String lastUpdate = DateAndTimeFormatterUtil.longDateFormatter.render(data.getLastScoreUpdate()) + " " + + DateAndTimeFormatterUtil.formatElapsedTime(data.getLastScoreUpdate().getTime()); + lastUpdateElement.setInnerText(StringMessages.INSTANCE.lastScoreUpdate() + ": " + lastUpdate); + scoreInformationUi.appendChild(lastUpdateElement); + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/StandingsList.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/StandingsList.ui.xml new file mode 100644 index 00000000000..567cfff1379 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/standings/StandingsList.ui.xml @@ -0,0 +1,36 @@ + + + + + + + .scoreInformation { + border-bottom: 1px solid #dedede; + font-size: 0.866666666666667em; + padding: 0.75em 1.25em; + } + .noResults { + font-weight: bold; + font-style: italic; + padding: 1.2em; + } + +
- +
- @@ -218,12 +218,12 @@ implements IAttachmentKey key, java.lang.Object obj) -
Description copied from interface: IAttachable
+
Description copied from interface: IAttachable
Sets custom data for this object. Previous data for this attachment key, if any, are overwritten.
Specified by:
-
setAttachment in interface IAttachable
+
setAttachment in interface IAttachable
Parameters:
key - the attachment key.
obj - the custom data to attach.
@@ -254,7 +254,7 @@ implements - @@ -207,7 +207,7 @@ -
-
- +
+
-
+
@@ -42,20 +32,8 @@
- - -
- - - +
+
- - - - - - \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/seriesheader/SeriesHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/seriesheader/SeriesHeader.java index 3c429e1b16c..57fa756fc9b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/seriesheader/SeriesHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/seriesheader/SeriesHeader.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.home.mobile.partials.seriesheader; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.SpanElement; import com.google.gwt.uibinder.client.UiBinder; @@ -8,6 +9,7 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.shared.LabelTypeUtil; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.utils.LogoUtil; import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO; import com.sap.sailing.gwt.ui.shared.general.EventMetadataDTO; @@ -20,18 +22,25 @@ public class SeriesHeader extends Composite { @UiField SpanElement eventNameUi; @UiField DivElement eventStateUi; - @UiField DivElement eventLogoUi; + @UiField AnchorElement eventLogoUi; @UiField DivElement locationsUi; public SeriesHeader(EventSeriesViewDTO event) { + this(event, null); + } + + public SeriesHeader(EventSeriesViewDTO event, PlaceNavigation logoNavigation) { SeriesHeaderResources.INSTANCE.css().ensureInjected(); initWidget(uiBinder.createAndBindUi(this)); - setUiFieldValues(event); + setUiFieldValues(event, logoNavigation); } - private void setUiFieldValues(EventSeriesViewDTO event) { + private void setUiFieldValues(EventSeriesViewDTO event, PlaceNavigation logoNavigation) { LogoUtil.setEventLogo(eventLogoUi, event); + if(logoNavigation != null) { + logoNavigation.configureAnchorElement(eventLogoUi); + } eventNameUi.setInnerText(event.getDisplayName()); LabelTypeUtil.renderLabelType(eventStateUi, event.getState().getStateMarker()); StringBuilder locationsBuilder = new StringBuilder(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/seriesheader/SeriesHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/seriesheader/SeriesHeader.ui.xml index d7ca9ba0c4d..fb5e9e32bec 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/seriesheader/SeriesHeader.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/seriesheader/SeriesHeader.ui.xml @@ -16,14 +16,14 @@

-
-
+
+

-
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/socialfooter/SocialFooter.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/socialfooter/SocialFooter.ui.xml index 1e9946b655a..f5d0da14854 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/socialfooter/SocialFooter.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/socialfooter/SocialFooter.ui.xml @@ -13,7 +13,7 @@
- +
- +
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.gss new file mode 100644 index 00000000000..344cac56efa --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.gss @@ -0,0 +1,58 @@ +.accordion { + font-size: 1rem; +} +.accordion_trigger { + font-size: inherit; +} +.accordion_content { + font-size: inherit; +} +.solutions { + font-size: 1rem; +} +.solutions .accordioncollapsed .solutions_item_header_arrow { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); +} +.solutions_item { + padding: 0; +} +.solutions_item:last-child .solutions_item_header { + border-bottom: none; +} +.solutions_item:last-child .solutions_item_body { + border-bottom: none; + border-top: 1px solid #ccc; +} +.solutions_item_header { + padding: 1em 1.333333333333333em; + border-bottom: 1px solid #ccc; +} +.solutions_item_header_title { + margin: 0; + font-size: 1.066666666666667em; + font-weight: 700; + display: inline-block; + max-width: 15.625em; +} +.solutions_item_header_arrow { + float: right; + display: inline-block; + width: 1.333333333333333em; + height: 1.333333333333333em; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: -webkit-transform 0.4s; + -moz-transition: -moz-transform 0.4s; + transition: transform 0.4s; +} +.solutions_item_body { + font-size: 0.933333333333333em; + line-height: 1.428571428571429em; + border-bottom: 1px solid #ccc; + padding: 1.785714285714286em 1.071428571428571em 3.214285714285714em 1.071428571428571em; +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.java new file mode 100644 index 00000000000..ae32c4684b1 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.java @@ -0,0 +1,70 @@ +package com.sap.sailing.gwt.home.mobile.partials.solutions; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Element; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.EventListener; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.client.place.events.CollapseAnimation; + +public class Solutions extends Composite { + + interface MyUiBinder extends UiBinder { + } + + private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); + + @UiField DivElement sapSailingAnalyticsUi; + @UiField DivElement raceCommitteeAppUi; + @UiField DivElement postRaceAnalyticsUi; + @UiField DivElement stgTrainingDiaryUi; + @UiField DivElement strategySimulatorUi; + + public Solutions() { + SolutionsResources.INSTANCE.css().ensureInjected(); + initWidget(uiBinder.createAndBindUi(this)); + + initAnimation(sapSailingAnalyticsUi, true); + initAnimation(raceCommitteeAppUi, false); + initAnimation(postRaceAnalyticsUi, false); + initAnimation(stgTrainingDiaryUi, false); + initAnimation(strategySimulatorUi, false); + } + + private void initAnimation(final DivElement rootElement, boolean showInitial) { + final CollapseAnimation animation = new CollapseAnimation(getContent(rootElement), showInitial); + setClassName(rootElement, SolutionsResources.INSTANCE.css().accordioncollapsed(), !showInitial); + Element header = getHeader(rootElement); + DOM.sinkEvents(header, Event.ONCLICK); + DOM.setEventListener(header, new EventListener() { + @Override + public void onBrowserEvent(Event event) { + boolean collapsed = isCollapsed(rootElement); + setClassName(rootElement, SolutionsResources.INSTANCE.css().accordioncollapsed(), !collapsed); + animation.animate(collapsed); + } + }); + } + + private void setClassName(Element element, String className, boolean add) { + if (add) element.addClassName(className); + else element.removeClassName(className); + } + + private boolean isCollapsed(Element rootElement) { + return rootElement.hasClassName(SolutionsResources.INSTANCE.css().accordioncollapsed()); + } + + private Element getHeader(Element rootElement) { + return rootElement.getFirstChildElement(); + } + + private Element getContent(Element rootElement) { + return rootElement.getFirstChildElement().getNextSiblingElement(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.ui.xml new file mode 100644 index 00000000000..57e3d8ce093 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/Solutions.ui.xml @@ -0,0 +1,86 @@ + + + + + + + +
+
+
+
+

+ +

+ {i18n_ubi.solutionsSAPHeadline} +
+
+ {i18n.sapSailingAnalytics} +

+ +

+

+ +

+
+
+
+
+

+ +

+ +
+
+ {i18n_ubi.solutionsRaceHeadline} +

+ +

+
+
+
+
+

+ +

+ +
+
+ {i18n_ubi.solutionsPostHeadline} +

+ +

+
+
+
+
+

+ +

+ +
+
+ {i18n_ubi.solutionsTrainingHeadline} +

+ +

+
+
+
+
+

+ +

+ +
+
+ {i18n_ubi.solutionsSimulatorHeadline} +

+ +

+
+
+
+
+
+
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/SolutionsResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/SolutionsResources.java new file mode 100644 index 00000000000..a43aef67827 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/solutions/SolutionsResources.java @@ -0,0 +1,25 @@ +package com.sap.sailing.gwt.home.mobile.partials.solutions; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; + +public interface SolutionsResources extends ClientBundle { + public static final SolutionsResources INSTANCE = GWT.create(SolutionsResources.class); + + @Source("Solutions.gss") + LocalCss css(); + + public interface LocalCss extends CssResource { + String accordion(); + String accordion_trigger(); + String accordion_content(); + String solutions(); + String accordioncollapsed(); + String solutions_item_header_arrow(); + String solutions_item(); + String solutions_item_header(); + String solutions_item_body(); + String solutions_item_header_title(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/LiveEventStageTeaser.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/LiveEventStageTeaser.java new file mode 100644 index 00000000000..be743a3e718 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/LiveEventStageTeaser.java @@ -0,0 +1,28 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; + +public class LiveEventStageTeaser extends StageTeaser { + + private final LiveStageTeaserBand teaserBand; + + public LiveEventStageTeaser(EventStageDTO event, MobilePlacesNavigator placeNavigator) { + super(event); + + title.setInnerText(event.getDisplayName()); + subtitle.setInnerText(event.getLocationAndVenue()); + + + bandCount.setAttribute("data-bandcount", "1"); + + teaserBand = new LiveStageTeaserBand(event, placeNavigator); + stageTeaserBandsPanel.getElement().appendChild(teaserBand.getElement()); + } + + @Override + protected void handleUserAction() { + teaserBand.actionLinkClicked(null); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/LiveStageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/LiveStageTeaserBand.java new file mode 100644 index 00000000000..27ad680b41b --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/LiveStageTeaserBand.java @@ -0,0 +1,34 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.google.gwt.event.dom.client.ClickEvent; +import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.home.client.shared.EventDatesFormatterUtil; +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; + +/** + * Teaser band for a live event on the homepage stage + * @author Frank + * + */ +public class LiveStageTeaserBand extends StageTeaserBand { + + public LiveStageTeaserBand(EventStageDTO event, MobilePlacesNavigator placeNavigator) { + super(event, placeNavigator); + + bandTitle.setInnerText(event.getDisplayName()); + bandSubtitle.setInnerText(EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate())); + + actionLink.setVisible(true); + actionLink.setText(TextMessages.INSTANCE.watchNow()); + actionLink.setHref(getEventNavigation().getTargetUrl()); + } + + @Override + public void actionLinkClicked(ClickEvent e) { + getPlaceNavigator().goToPlace(getEventNavigation()); + if (e != null) { + e.preventDefault(); + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/NoActionStageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/NoActionStageTeaserBand.java new file mode 100644 index 00000000000..965d317a0de --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/NoActionStageTeaserBand.java @@ -0,0 +1,19 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.sap.sailing.gwt.home.client.shared.EventDatesFormatterUtil; +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; + +/** + * Teaser band with no action on the homepage stage + * + */ +public class NoActionStageTeaserBand extends StageTeaserBand { + + public NoActionStageTeaserBand(EventStageDTO event, MobilePlacesNavigator placeNavigator) { + super(event, placeNavigator); + + bandTitle.setInnerText(event.getDisplayName()); + bandSubtitle.setInnerText(EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate())); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/PopularEventStageTeaser.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/PopularEventStageTeaser.java new file mode 100644 index 00000000000..c39db293bb9 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/PopularEventStageTeaser.java @@ -0,0 +1,25 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; + +public class PopularEventStageTeaser extends StageTeaser { + + private final PopularEventStageTeaserBand teaserBand; + + public PopularEventStageTeaser(EventStageDTO event, MobilePlacesNavigator placeNavigator) { + super(event); + + title.setInnerText(event.getDisplayName()); + subtitle.setInnerText(event.getLocationAndVenue()); + bandCount.setAttribute("data-bandcount", "1"); + teaserBand = new PopularEventStageTeaserBand(event, placeNavigator); + stageTeaserBandsPanel.getElement().appendChild(teaserBand.getElement()); + } + + @Override + protected void handleUserAction() { + teaserBand.actionLinkClicked(null); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/PopularEventStageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/PopularEventStageTeaserBand.java new file mode 100644 index 00000000000..d21f05c498c --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/PopularEventStageTeaserBand.java @@ -0,0 +1,34 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.google.gwt.event.dom.client.ClickEvent; +import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.home.client.shared.EventDatesFormatterUtil; +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; + +/** + * Teaser band for a popular but finished event on the homepage stage + * @author Frank + * + */ +public class PopularEventStageTeaserBand extends StageTeaserBand { + + public PopularEventStageTeaserBand(EventStageDTO event, MobilePlacesNavigator placeNavigator) { + super(event, placeNavigator); + + bandTitle.setInnerText(event.getDisplayName()); + bandSubtitle.setInnerText(EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate())); + + actionLink.setVisible(true); + actionLink.setText(TextMessages.INSTANCE.viewAnalysis()); + actionLink.setHref(getEventNavigation().getTargetUrl()); + } + + @Override + public void actionLinkClicked(ClickEvent e) { + getPlaceNavigator().goToPlace(getEventNavigation()); + if (e != null) { + e.preventDefault(); + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss new file mode 100644 index 00000000000..d7236ecc751 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss @@ -0,0 +1,210 @@ + +.swipercontainer { + margin: 0 auto; + position: relative; + overflow: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; +} +.swiperslide { + font-size: 1rem; + float: left; +} +.countdown { + font-size: 1rem; +} +.countdown_pane { + border: 0.266666666666667em solid #fff; + background: #008fcc; + color: #fff; + text-align: center; + display: inline-block; + margin: 0.333333333333333em; + margin-top: 2em; + padding: 0.666666666666667em; + border-radius: 0.666666666666667em; + width: 4.666666666666667em; + height: 4.666666666666667em; + text-shadow: none; + box-shadow: 0 0 18px rgba(0,0,0,0.13), 0 2px 6px rgba(0,0,0,0.25); +} +.countdown_pane_count { + font-weight: bold; + font-size: 2em; + line-height: 0.866666666666667em; +} +.countdown_pane_unit { + font-size: 1.2em; +} +.stageteaser { + font-size: 1rem; + position: relative; + width: 100%; + cursor: pointer; +} +.stageteaser_background { + height: 225px; + overflow: hidden; +} +.stageteaser_background_image { + display: block; + background-position: center center; + background-repeat: no-repeat; + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + height: 100%; + position: absolute; + left: 0; + right: 0; + -webkit-transition: margin 1s ease; + -moz-transition: margin 1s ease; + -o-transition: margin 1s ease; + -ms-transition: margin 1s ease; + transition: margin 1s ease; + +} +.stageteaser_content { + height: 38.666666666666664em; + margin-top: -38.666666666666664em; +} +.stageteaser_content_header { + position: absolute; + width: 100%; + padding: 3.333333333333333em 4em 5.2em 4em; + line-height: 0.9; + text-shadow: 0 0 18px rgba(0,0,0,0.13), 0 2px 6px rgba(0,0,0,0.25); + text-align: center; + opacity: 1; + filter: none; + transition: opacity 1s ease; +} +.stageteaser_content_headerhidden { + opacity: 0; +} +.stageteaser_content_header_subtitle { + font-size: 2em; + font-weight: 400; + color: #fff; + margin: 0 0 0.533333333333333em; +} +.stageteaser_content_header_title { + font-size: 1.466666666666667em; + font-weight: 700; + color: #fff; + margin: 0; + +} +.stageteaser_content_header_countdown { + font-size: 1rem; +} +.stageteaser_content_band { + position: absolute; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(51,51,51,0.6); + padding: 0px; + cursor:auto; +} +.stageteaser_content_band_item { + padding: 0 0em; + position: relative; +} +.stageteaser_content_band_text { + display: block; + position: relative; + min-height: 3em; +} +.stageteaser_content_band_text_headline { + color: #f0ab00; + font-size: 1em; + font-weight: 700; + text-shadow: 0 0 0.666666666666667em rgba(51,51,51,0.45); + text-transform: uppercase; + margin: 0.5em 0.5em 0em; + display: block; + +} +.stageteaser_content_band_text_name { + color: #fff; + font-size: 1em; + margin: 0.5em; + text-shadow: 0 0 0.666666666666667em rgba(51,51,51,0.45); +} +.stageteaser_content_band_action { + float: right; + font-size: 1em; + padding: 0.4em 0.933333333333333em; + margin: 0.5em; +} +.stage { + font-size: 1rem; + position: relative; + clear: both; +} +.stage_teasers { + height: 18em; + width: 100%; +} +.stage_controls { + font-size: 15px; + /* @alternate */ font-size: 1rem; +} +.stage_progress { + height: 0.333333333333333em; + margin-top: -0.333333333333333em; + z-index: 10; + position: relative; +} +.stage_progress_bar { + background-color: #f0ab00; + height: 0.333333333333333em; + width: 0%; + transition: width 0.1s linear; +} + + +.stage .slick-dots { + position: absolute; + list-style: none; + display: block; + text-align: center; + padding: 0px; + margin: 13px 0; + width: 100%; +} +.stage .slick-dots li { + position: relative; + display: inline-block; + height: 7px; + width: 7px; + margin: 0px 4px; + padding: 0px; + cursor: pointer; + vertical-align: middle; +} +.stage .slick-dots li button { + border: 0; + display: block; + height: 7px; + width: 7px; + line-height: 0; + font-size: 0; + color: transparent; + padding: 0; + cursor: pointer; + outline: none; + background: #dedede; + border-radius: 50%; +} +.stage .slick-dots li button:focus { + outline: none; +} +.stage .slick-dots li.slick-active button { + background: #333; +} + +@external slick-dots, slick-active; + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.java new file mode 100644 index 00000000000..523184fddb2 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.java @@ -0,0 +1,59 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; +import com.sap.sse.gwt.client.controls.carousel.WidgetCarousel; + +public class Stage extends Composite { + + private List stageTeaserComposites; + + @UiField + WidgetCarousel widgetCarousel; + + private StageTeaser stageTeaser; + + private final MobilePlacesNavigator placeNavigator; + + interface StageUiBinder extends UiBinder { + } + + private static StageUiBinder uiBinder = GWT.create(StageUiBinder.class); + + public Stage(MobilePlacesNavigator placeNavigator) { + this.placeNavigator = placeNavigator; + + StageResources.INSTANCE.css().ensureInjected(); + initWidget(uiBinder.createAndBindUi(this)); + widgetCarousel.setShowArrows(false); + stageTeaserComposites = new ArrayList(); + } + + public void setFeaturedEvents(List list) { + + for (EventStageDTO event : list) { + switch (event.getStageType()) { + case POPULAR: + stageTeaser = new PopularEventStageTeaser(event, placeNavigator); + break; + case RUNNING: + stageTeaser = new LiveEventStageTeaser(event, placeNavigator); + break; + case UPCOMING_SOON: + stageTeaser = new UpcomingEventStageTeaser(event, placeNavigator); + break; + } + widgetCarousel.addWidget(stageTeaser); + stageTeaserComposites.add(stageTeaser); + } + + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.ui.xml new file mode 100644 index 00000000000..bb10e93046b --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.ui.xml @@ -0,0 +1,22 @@ + + + + + + + +
+
+ +
+
+
+
+
+
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageResources.java new file mode 100644 index 00000000000..144050c2ff9 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageResources.java @@ -0,0 +1,45 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.ImageResource; + +public interface StageResources extends ClientBundle { + public static final StageResources INSTANCE = GWT.create(StageResources.class); + + @Source("Stage.gss") + LocalCss css(); + + public interface LocalCss extends CssResource { + String countdown(); + String countdown_pane(); + String countdown_pane_count(); + String countdown_pane_unit(); + String stageteaser(); + String stageteaser_background(); + String stageteaser_background_image(); + String stageteaser_content(); + String stageteaser_content_header(); + String stageteaser_content_headerhidden(); + String stageteaser_content_header_subtitle(); + String stageteaser_content_header_title(); + String stageteaser_content_header_countdown(); + String stageteaser_content_band(); + String stageteaser_content_band_item(); + String stageteaser_content_band_text(); + String stageteaser_content_band_text_headline(); + String stageteaser_content_band_text_name(); + String stageteaser_content_band_action(); + String swipercontainer(); + String swiperslide(); + String stage(); + String stage_teasers(); + String stage_controls(); + String stage_progress(); + String stage_progress_bar(); + } + + @Source("com/sap/sailing/gwt/home/images/default_stage_event_teaser.jpg") + ImageResource defaultStageEventTeaserImage(); +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaser.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaser.java new file mode 100644 index 00000000000..781906741bf --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaser.java @@ -0,0 +1,85 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.EventTarget; +import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.mobile.partials.countdown.CountdownTicker; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.gwt.client.controls.carousel.LazyLoadable; + +public abstract class StageTeaser extends Composite implements LazyLoadable { + @UiField + DivElement bandCount; + @UiField + SpanElement subtitle; + @UiField + SpanElement title; + @UiField(provided = true) + CountdownTicker countdownTickerUi; + @UiField + HTMLPanel stageTeaserBandsPanel; + @UiField + DivElement teaserImage; + + interface StageTeaserUiBinder extends UiBinder { + } + + private static StageTeaserUiBinder uiBinder = GWT.create(StageTeaserUiBinder.class); + private final EventStageDTO event; + + @Override + public void doInitializeLazyComponents() { + String stageImageUrl = event.getStageImageURL() != null ? event.getStageImageURL() : StageResources.INSTANCE + .defaultStageEventTeaserImage().getSafeUri().asString(); + String backgroundImage = "url(" + stageImageUrl + ")"; + teaserImage.getStyle().setBackgroundImage(backgroundImage); + + } + + protected void handleUserAction() { + + } + + public StageTeaser(EventStageDTO event) { + this.event = event; + StageResources.INSTANCE.css().ensureInjected(); + + TimePoint eventStart = new MillisecondsTimePoint(event.getStartDate()); + countdownTickerUi = new CountdownTicker(eventStart.asDate()); + initWidget(uiBinder.createAndBindUi(this)); + + if(MillisecondsTimePoint.now().after(eventStart)) { + countdownTickerUi.removeFromParent(); + } + + addDomHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + EventTarget eventTarget = event.getNativeEvent().getEventTarget(); + if (!Element.is(eventTarget)) { + return; + } + Element element = eventTarget.cast(); + if (bandCount.isOrHasChild(element)) { + return; + } + handleUserAction(); + + } + }, ClickEvent.getType()); + } + + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaser.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaser.ui.xml new file mode 100644 index 00000000000..0b7a5efb53a --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaser.ui.xml @@ -0,0 +1,41 @@ + + + + + + + .countdownPosition { + position: absolute; + top: 2.5em; + width: 100%; + transform: scale(0.66); + } + + +
+
+
+
+ +
+
+ +
+
+
+ +
+
+ + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java new file mode 100644 index 00000000000..01e49856b07 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java @@ -0,0 +1,64 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.client.place.event.EventDefaultPlace; +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; + +public abstract class StageTeaserBand extends Composite { + + interface StageTeaserBandUiBinder extends UiBinder { + } + + private static StageTeaserBandUiBinder uiBinder = GWT.create(StageTeaserBandUiBinder.class); + + @UiField + DivElement bandTitle; + @UiField + DivElement bandSubtitle; + @UiField Anchor actionLink; + + private final MobilePlacesNavigator placeNavigator; + private final EventStageDTO event; + private final PlaceNavigation eventNavigation; + + public StageTeaserBand(EventStageDTO event, MobilePlacesNavigator placeNavigator) { + this.event = event; + this.placeNavigator = placeNavigator; + + StageResources.INSTANCE.css().ensureInjected(); + initWidget(uiBinder.createAndBindUi(this)); + + eventNavigation = placeNavigator.getEventNavigation(event.getId().toString(), event.getBaseURL(), event.isOnRemoteServer()); + } + + @UiHandler("actionLink") + public void stageActionClicked(ClickEvent e) { + actionLinkClicked(e); + } + + public PlaceNavigator getPlaceNavigator() { + return placeNavigator; + } + + public EventStageDTO getEvent() { + return event; + } + + public PlaceNavigation getEventNavigation() { + return eventNavigation; + } + + protected void actionLinkClicked(ClickEvent e) { + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml new file mode 100644 index 00000000000..4f2a4af7739 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml @@ -0,0 +1,51 @@ + + + + + + + + .left { + display: inline; + position: absolute; + top: 0px; + left: 0px; + width: 50%; + vertical-align: middle; + } + .right { + display: inline; + position: absolute; + top: 0px; + left: 50%; + right: 0px; + text-align: right; + vertical-align: middle; + } + .ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + + } + + +
+
+
+
+
+
+
+
+ +
+
+ + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaser.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaser.java new file mode 100644 index 00000000000..1bfca51bb73 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaser.java @@ -0,0 +1,25 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; + +public class UpcomingEventStageTeaser extends StageTeaser { + + private final UpcomingEventStageTeaserBand teaserBand; + + public UpcomingEventStageTeaser(EventStageDTO event, MobilePlacesNavigator placeNavigator) { + super(event); + + title.setInnerText(event.getDisplayName()); + subtitle.setInnerText(event.getLocationAndVenue()); + + bandCount.setAttribute("data-bandcount", "1"); + teaserBand = new UpcomingEventStageTeaserBand(event, placeNavigator); + stageTeaserBandsPanel.getElement().appendChild(teaserBand.getElement()); + } + + @Override + protected void handleUserAction() { + teaserBand.actionLinkClicked(null); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaserBand.java new file mode 100644 index 00000000000..4a1b5dca7c1 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaserBand.java @@ -0,0 +1,32 @@ +package com.sap.sailing.gwt.home.mobile.partials.stage; + +import com.google.gwt.event.dom.client.ClickEvent; +import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.home.client.shared.EventDatesFormatterUtil; +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; + +/** + * Teaser band for an upcoming event on the homepage stage + * @author Frank + * + */ +public class UpcomingEventStageTeaserBand extends StageTeaserBand { + + public UpcomingEventStageTeaserBand(EventStageDTO event, MobilePlacesNavigator placeNavigator) { + super(event, placeNavigator); + + bandTitle.setInnerText(event.getDisplayName()); + bandSubtitle.setInnerText(EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate())); + + actionLink.setVisible(true); + actionLink.setText(TextMessages.INSTANCE.moreInfo()); + actionLink.setHref(getEventNavigation().getTargetUrl()); + } + + @Override + public void actionLinkClicked(ClickEvent e) { + getPlaceNavigator().goToPlace(getEventNavigation()); + e.preventDefault(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.gss index 50a1cf8c300..84a5c55b413 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.gss @@ -29,8 +29,9 @@ -ms-transform: translateY(-40%); transform: translateY(-40%); } -.statisticsbox_content_item_icon { - width: 1.538461538461539em; +img.statisticsbox_content_item_icon { + width: 1.6em; + height: 1.6em; position: absolute; display: inline-block; vertical-align: middle; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.java index afda3cca38b..15cdce535f8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.java @@ -1,104 +1,36 @@ package com.sap.sailing.gwt.home.mobile.partials.statisticsBox; import com.google.gwt.core.client.GWT; -import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget; import com.sap.sailing.gwt.home.mobile.partials.section.MobileSection; -import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sailing.gwt.ui.shared.dispatch.event.EventStatisticsDTO; +import com.sap.sailing.gwt.home.shared.partials.statistics.AbstractStatisticsBox; -public class StatisticsBox extends Composite implements RefreshableWidget { - private static final StringMessages MSG = StringMessages.INSTANCE; - public static final String ICON_REGATTAS_FOUGHT = "images/mobile/icon_regattasFought.svg"; - public static final String ICON_COMPATITORS_COUNT = "images/mobile/icon_averageSpeed.svg"; - public static final String ICON_RACES_COUNT = "images/mobile/icon_racesCount.svg"; - public static final String ICON_TRACKED_COUNT = "images/mobile/icon_trackedCount.svg"; - public static final String ICON_FASTEST_SAILOR = "images/mobile/fastest_sailor.svg"; - public static final String ICON_RAW_GPS_FIX = "images/mobile/raw_gps_fixes.svg"; - public static final String ICON_WIND_FIX = "images/mobile/strongest_wind.svg"; - public static final String ICON_SUM_MILES = "images/mobile/sum_miles.svg"; +public class StatisticsBox extends AbstractStatisticsBox { private static StatisticsBoxUiBinder uiBinder = GWT.create(StatisticsBoxUiBinder.class); - private NumberFormat simpleFormat = NumberFormat.getFormat("#0.0"); - interface StatisticsBoxUiBinder extends UiBinder { } @UiField MobileSection itemContainerUi; - private final boolean showRegattaInformation; public StatisticsBox() { this(true); } public StatisticsBox(boolean showRegattaInformation) { - this.showRegattaInformation = showRegattaInformation; + super(showRegattaInformation); StatisticsBoxResources.INSTANCE.css().ensureInjected(); initWidget(uiBinder.createAndBindUi(this)); } + @Override + protected void clear() { + itemContainerUi.clearContent(); + } + public void addItem(String iconUrl, String name, Object payload) { itemContainerUi.addContent(new StatisticsBoxItem(iconUrl, name, payload)); } - - public void addItemWithCompactFormat(String iconUrl, String name, Double payload) { - if (payload != null && payload != 0) { - addItem(iconUrl, name, compactNumber(payload)); - } - } - - public void addItemWithCompactFormat(String iconUrl, String name, long payload) { - if (payload != 0) { - addItem(iconUrl, name, compactNumber(payload)); - } - } - - public void addItemIfNotNull(String iconUrl, String name, Object payload) { - if (payload != null || payload instanceof Number && ((Number) payload).longValue() != 0) { - addItem(iconUrl, name, payload); - } - } - - @Override - public void setData(EventStatisticsDTO statistics) { - itemContainerUi.clearContent(); - if (showRegattaInformation) { - addItem(StatisticsBox.ICON_REGATTAS_FOUGHT, MSG.regattas(), statistics.getRegattasFoughtCount()); - } - addItem(StatisticsBox.ICON_COMPATITORS_COUNT, MSG.competitors(), statistics.getCompetitorsCount()); - addItem(StatisticsBox.ICON_RACES_COUNT, MSG.races(), statistics.getRacesRunCount()); - addItem(StatisticsBox.ICON_TRACKED_COUNT, MSG.trackedRaces(), statistics.getTrackedRacesCount()); - addItemWithCompactFormat(StatisticsBox.ICON_RAW_GPS_FIX, MSG.numberOfGPSFixes(), statistics.getNumberOfGPSFixes()); - addItemWithCompactFormat(StatisticsBox.ICON_WIND_FIX, MSG.numberWindFixes(), statistics.getNumberOfWindFixes()); - addItemWithCompactFormat(StatisticsBox.ICON_SUM_MILES, MSG.sailedMiles(), statistics.getTotalDistanceTraveled()); - addItemWithCompactFormat(StatisticsBox.ICON_FASTEST_SAILOR, MSG.fastestSailor() + ": " - + statistics.getCompetitorInfo(), statistics.getCompetitorSpeed()); - } - - private String compactNumber(double value) { - if(value < 100.0) { - return simpleFormat.format(value); - } - if(value < 100_000.0) { - return "" + Double.valueOf(value).intValue(); - } - if(value < 100_000_000.0) { - return StringMessages.INSTANCE.millionValue(value / 1_000_000.0); - } - return StringMessages.INSTANCE.billionValue(value / 1_000_000_000.0); - } - - private String compactNumber(long value) { - if(value < 100_000l) { - return "" + value; - } - if(value < 100_000_000l) { - return StringMessages.INSTANCE.millionValue(value / 1_000_000.0); - } - return StringMessages.INSTANCE.billionValue(value / 1_000_000_000.0); - } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.ui.xml index 972cf09776c..004e1883070 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.ui.xml @@ -1,6 +1,7 @@ + xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared" + xmlns:mp="urn:import:com.sap.sailing.gwt.home.mobile.partials"> diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsActivity.java index 59df2a3933c..ee8bfd9f4f6 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsActivity.java @@ -10,6 +10,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.sap.sailing.gwt.home.client.place.error.ErrorPlace; import com.sap.sailing.gwt.home.client.place.event.EventContext; +import com.sap.sailing.gwt.home.client.place.event.EventDefaultPlace; import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; import com.sap.sailing.gwt.home.mobile.partials.updatesBox.NewsItemLinkProvider; import com.sap.sailing.gwt.home.mobile.places.latestnews.LatestNewsView.Presenter; @@ -89,6 +90,11 @@ public class LatestNewsActivity extends AbstractActivity implements Presenter, N return clientFactory.getNavigator().getEventLastestNewsNavigation(getCtx(), values, null, false); } + @Override + public PlaceNavigation getEventNavigation() { + return clientFactory.getNavigator().getEventNavigation(new EventDefaultPlace(getCtx()), null, false); + } + @Override public EventContext getCtx() { return place.getCtx(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsView.java index 056fe0561d6..f745eba3c57 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsView.java @@ -5,12 +5,15 @@ import java.util.List; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.place.event.EventContext; import com.sap.sailing.gwt.home.mobile.partials.updatesBox.NewsItemLinkProvider; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.dispatch.DispatchSystem; import com.sap.sailing.gwt.ui.shared.dispatch.news.NewsEntryDTO; public interface LatestNewsView { public interface Presenter extends NewsItemLinkProvider { + PlaceNavigation getEventNavigation(); + void gotoEvents(); DispatchSystem getDispatch(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsViewImpl.java index f9bbabb2a8c..eb33bc1493b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsViewImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/latestnews/LatestNewsViewImpl.java @@ -30,7 +30,7 @@ public class LatestNewsViewImpl extends Composite implements LatestNewsView { public LatestNewsViewImpl(Presenter presenter) { this.currentPresenter = presenter; RefreshManager refreshManager = new RefreshManager(this, currentPresenter.getDispatch()); - eventHeaderUi = new EventHeader(presenter.getCtx().getEventDTO()); + eventHeaderUi = new EventHeader(presenter.getCtx().getEventDTO(), presenter.getEventNavigation()); updatesBoxUi = new UpdatesBox(presenter, refreshManager); initWidget(uiBinder.createAndBindUi(this)); UUID uuid = UUID.fromString(presenter.getCtx().getEventId()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardActivity.java index 7dd50831fa3..f87ec043364 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardActivity.java @@ -8,6 +8,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.sap.sailing.gwt.home.client.place.error.ErrorPlace; import com.sap.sailing.gwt.home.client.place.event.EventContext; +import com.sap.sailing.gwt.home.client.place.event.EventDefaultPlace; import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaLeaderboardPlace; import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesContext; import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; @@ -99,4 +100,9 @@ public class MiniLeaderboardActivity extends AbstractActivity implements Present public PlaceNavigation getMiniLeaderboardNavigation(UUID eventId) { return clientFactory.getNavigator().getEventNavigation(new MiniLeaderboardPlace(eventId.toString(), null), null, false); } + + @Override + public PlaceNavigation getEventNavigation() { + return clientFactory.getNavigator().getEventNavigation(new EventDefaultPlace(getCtx()), null, false); + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardView.java index aeb783ec142..471b7f7d6c8 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardView.java @@ -6,6 +6,7 @@ import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.place.event.EventContext; import com.sap.sailing.gwt.home.mobile.places.RegattaLeaderboardNavigationProvider; import com.sap.sailing.gwt.home.mobile.places.SeriesLeaderboardNavigationProvider; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.dispatch.DispatchSystem; import com.sap.sailing.gwt.ui.shared.eventview.RegattaMetadataDTO; import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO; @@ -13,6 +14,8 @@ import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO; public interface MiniLeaderboardView { public interface Presenter extends RegattaLeaderboardNavigationProvider, SeriesLeaderboardNavigationProvider { + + PlaceNavigation getEventNavigation(); DispatchSystem getDispatch(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardViewImpl.java index 291cc3f9a21..5fb161f8ee2 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardViewImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/minileaderboard/MiniLeaderboardViewImpl.java @@ -42,7 +42,7 @@ public class MiniLeaderboardViewImpl extends Composite implements MiniLeaderboar regattaDisplayName = presenter.getCtx().getRegatta().getDisplayName(); } minileaderboardUi = new MinileaderboardBox(false); - eventHeaderUi = new EventHeader(presenter.getCtx().getEventDTO(), regattaDisplayName); + eventHeaderUi = new EventHeader(presenter.getCtx().getEventDTO(), regattaDisplayName, presenter.getEventNavigation()); initWidget(uiBinder.createAndBindUi(this)); RefreshManager refreshManager = new RefreshManager(this, currentPresenter.getDispatch()); EventContext ctx = presenter.getCtx(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardActivity.java index 7bedeaa9a99..d938c5057b9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardActivity.java @@ -8,6 +8,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.sap.sailing.gwt.home.client.place.error.ErrorPlace; import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesContext; +import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesDefaultPlace; import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesOverallLeaderboardPlace; import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; import com.sap.sailing.gwt.home.mobile.places.minileaderboard.MiniLeaderboardPlace; @@ -81,4 +82,9 @@ public class SeriesMiniOverallLeaderboardActivity extends AbstractActivity imple public PlaceNavigation getMiniLeaderboardNavigation(UUID eventId) { return clientFactory.getNavigator().getEventNavigation(new MiniLeaderboardPlace(eventId.toString(), null), null, false); } + + @Override + public PlaceNavigation getSeriesNavigation() { + return clientFactory.getNavigator().getSeriesNavigation(new SeriesDefaultPlace(getCtx()), null, false); + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardView.java index 32b1107b18c..c4ac35ce5ae 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardView.java @@ -6,6 +6,7 @@ import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesContext; import com.sap.sailing.gwt.home.mobile.places.SeriesLeaderboardNavigationProvider; import com.sap.sailing.gwt.home.mobile.places.series.OverallLeaderboardNavigationProvider; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.dispatch.DispatchSystem; import com.sap.sailing.gwt.ui.shared.general.EventMetadataDTO; @@ -15,6 +16,8 @@ public interface SeriesMiniOverallLeaderboardView { DispatchSystem getDispatch(); SeriesContext getCtx(); + + PlaceNavigation getSeriesNavigation(); } Widget asWidget(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardViewImpl.java index 31af84116a8..d96fd09bd23 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardViewImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/series/minileaderboard/SeriesMiniOverallLeaderboardViewImpl.java @@ -35,7 +35,7 @@ public class SeriesMiniOverallLeaderboardViewImpl extends Composite implements S public SeriesMiniOverallLeaderboardViewImpl(Presenter presenter) { this.currentPresenter = presenter; minileaderboardUi = new MinileaderboardBox(true); - eventHeaderUi = new SeriesHeader(presenter.getCtx().getSeriesDTO()); + eventHeaderUi = new SeriesHeader(presenter.getCtx().getSeriesDTO(), presenter.getSeriesNavigation()); initWidget(uiBinder.createAndBindUi(this)); RefreshManager refreshManager = new RefreshManager(this, currentPresenter.getDispatch()); SeriesContext ctx = presenter.getCtx(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsActivity.java new file mode 100644 index 00000000000..ce8573b8d43 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsActivity.java @@ -0,0 +1,18 @@ +package com.sap.sailing.gwt.home.mobile.places.solutions; + +import com.google.gwt.activity.shared.AbstractActivity; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.user.client.ui.AcceptsOneWidget; +import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace; +import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; + +public class SolutionsActivity extends AbstractActivity implements SolutionsView.Presenter { + + public SolutionsActivity(SolutionsPlace place, MobileApplicationClientFactory clientFactory) { + } + + @Override + public void start(final AcceptsOneWidget panel, final EventBus eventBus) { + panel.setWidget(new SolutionsViewImpl(this)); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsActivityProxy.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsActivityProxy.java new file mode 100644 index 00000000000..abd91f77551 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsActivityProxy.java @@ -0,0 +1,27 @@ +package com.sap.sailing.gwt.home.mobile.places.solutions; + +import com.google.gwt.core.client.GWT; +import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace; +import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; +import com.sap.sse.gwt.client.mvp.AbstractActivityProxy; + +public class SolutionsActivityProxy extends AbstractActivityProxy { + + private final MobileApplicationClientFactory clientFactory; + private final SolutionsPlace currentPlace; + + public SolutionsActivityProxy(SolutionsPlace place, MobileApplicationClientFactory clientFactory) { + this.currentPlace = place; + this.clientFactory = clientFactory; + } + + @Override + protected void startAsync() { + GWT.runAsync(new AbstractRunAsyncCallback() { + @Override + public void onSuccess() { + super.onSuccess(new SolutionsActivity(currentPlace, clientFactory)); + } + }); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsView.java new file mode 100644 index 00000000000..94b4e45a19b --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsView.java @@ -0,0 +1,12 @@ +package com.sap.sailing.gwt.home.mobile.places.solutions; + +import com.google.gwt.user.client.ui.Widget; + +public interface SolutionsView { + + Widget asWidget(); + + public interface Presenter { + } +} + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsViewImpl.java new file mode 100644 index 00000000000..11ae5846992 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsViewImpl.java @@ -0,0 +1,18 @@ +package com.sap.sailing.gwt.home.mobile.places.solutions; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; + +public class SolutionsViewImpl extends Composite implements SolutionsView { + private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); + + interface MyUiBinder extends UiBinder { + } + + + public SolutionsViewImpl(Presenter presenter) { + initWidget(uiBinder.createAndBindUi(this)); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsViewImpl.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsViewImpl.ui.xml new file mode 100644 index 00000000000..9a61d11776e --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/solutions/SolutionsViewImpl.ui.xml @@ -0,0 +1,6 @@ + + + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartActivity.java index 7ee839870ca..f1eb9460352 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartActivity.java @@ -3,10 +3,18 @@ package com.sap.sailing.gwt.home.mobile.places.start; import com.google.gwt.activity.shared.AbstractActivity; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.sap.sailing.gwt.home.client.place.start.StartPlace; import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; import com.sap.sailing.gwt.home.mobile.places.start.StartView.Presenter; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.shared.dispatch.ListResult; +import com.sap.sailing.gwt.ui.shared.dispatch.start.EventQuickfinderDTO; +import com.sap.sailing.gwt.ui.shared.dispatch.start.GetRecentEventsAction; +import com.sap.sailing.gwt.ui.shared.dispatch.start.GetStagedEventsAction; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; public class StartActivity extends AbstractActivity implements Presenter { private final MobileApplicationClientFactory clientFactory; @@ -19,16 +27,41 @@ public class StartActivity extends AbstractActivity implements Presenter { @Override public void start(final AcceptsOneWidget panel, EventBus eventBus) { - final StartView view = new StartViewImpl(this); - panel.setWidget(view.asWidget()); Window.setTitle(place.getTitle()); + final StartView view = new StartViewImpl(StartActivity.this); + clientFactory.getDispatch().execute(new GetStagedEventsAction(true), new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + } + + @Override + public void onSuccess(ListResult result) { + panel.setWidget(view.asWidget()); + Window.setTitle(place.getTitle()); + view.setFeaturedEvents(result.getValues()); + } + }); + clientFactory.getDispatch().execute(new GetRecentEventsAction(15), new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + } + + @Override + public void onSuccess(ListResult result) { + view.setQuickFinderValues(result.getValues()); + } + }); } @Override - public void gotoEvents() { - clientFactory // - .getNavigator() // - .getEventsNavigation()// - .goToPlace(); + public MobilePlacesNavigator getNavigator() { + return clientFactory.getNavigator(); + } + + @Override + public PlaceNavigation getEventNavigation(EventQuickfinderDTO event) { + return clientFactory.getNavigator().getEventNavigation(event.getId().toString(), event.getBaseURL(), event.isOnRemoteServer()); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartView.java index 19c9d6bc387..a2521bafe1e 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartView.java @@ -1,13 +1,26 @@ package com.sap.sailing.gwt.home.mobile.places.start; +import java.util.Collection; +import java.util.List; + import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.shared.dispatch.start.EventQuickfinderDTO; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; public interface StartView { Widget asWidget(); + void setQuickFinderValues(Collection events); + public interface Presenter { - void gotoEvents(); + MobilePlacesNavigator getNavigator(); + + PlaceNavigation getEventNavigation(EventQuickfinderDTO event); } + + void setFeaturedEvents(List list); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartViewImpl.java index 9cd190b9846..ae25dded1f3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartViewImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartViewImpl.java @@ -1,34 +1,69 @@ package com.sap.sailing.gwt.home.mobile.places.start; +import java.util.Collection; +import java.util.List; + import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.dom.client.AnchorElement; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.home.mobile.partials.quickfinder.Quickfinder; +import com.sap.sailing.gwt.home.mobile.partials.stage.Stage; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.dispatch.start.EventQuickfinderDTO; +import com.sap.sailing.gwt.ui.shared.general.EventState; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; public class StartViewImpl extends Composite implements StartView { private static StartPageViewUiBinder uiBinder = GWT.create(StartPageViewUiBinder.class); interface StartPageViewUiBinder extends UiBinder { } + + private final StringMessages i18n = StringMessages.INSTANCE; private Presenter currentPresenter; - @UiField - protected Anchor eventsLinkUi; + @UiField(provided = true) + Stage stage; + + @UiField Quickfinder quickFinderUi; + @UiField AnchorElement showAllEventsUi; public StartViewImpl(Presenter presenter) { this.currentPresenter = presenter; + stage = new Stage(presenter.getNavigator()); initWidget(uiBinder.createAndBindUi(this)); - - } - - @UiHandler("eventsLinkUi") - public void gotoEvents(ClickEvent e) { - currentPresenter.gotoEvents(); + + presenter.getNavigator().getEventsNavigation().configureAnchorElement(showAllEventsUi); } + @Override + public void setFeaturedEvents(List list) { + stage.setFeaturedEvents(list); + } + + @Override + public void setQuickFinderValues(Collection events) { + // TODO change message: recent events + quickFinderUi.addPlaceholderItem(i18n.events()); + + for (EventQuickfinderDTO event : events) { + String group; + EventState state = event.getState(); + if(state == EventState.FINISHED) { + group = TextMessages.INSTANCE.searchResultSortNewest(); + } else if(state == EventState.RUNNING) { + group = TextMessages.INSTANCE.live(); + } else { + group = TextMessages.INSTANCE.seriesHeaderUpcoming(); + } + PlaceNavigation eventPlaceNavigation = currentPresenter.getEventNavigation(event); + quickFinderUi.addItemToGroup(group, event.getDisplayName(), eventPlaceNavigation); + } + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartViewImpl.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartViewImpl.ui.xml index f75e7d5a99b..ddfe8324fc8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartViewImpl.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/start/StartViewImpl.ui.xml @@ -1,18 +1,36 @@ - - - -

START VIEW

- -

Go to events...

- -
-
+ xmlns:g="urn:import:com.google.gwt.user.client.ui" + > + + + + .headerWrapper { + background-color: #f2f2f2; + } + .action { + border-radius: .384615384615385em; + width: 100%; + text-align: center; + } + .buttonContainer { + margin: 1em 10px 0; + +} + + +
+ +
+ +
+ +
+ + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/ExperimentalFeatures.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/ExperimentalFeatures.java index 4043aa55112..f1cae94b323 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/ExperimentalFeatures.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/ExperimentalFeatures.java @@ -13,6 +13,10 @@ public class ExperimentalFeatures { * Show new regatta list */ public static final boolean SHOW_NEW_REGATTA_LIST = true; + /** + * Show overview tab for single-regatta events and series events. + */ + public static final boolean SHOW_SINGLE_REGATTA_OVERVIEW = true; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/SwitchingEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/SwitchingEntryPoint.java index 686007a75a3..0706e896f4b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/SwitchingEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/SwitchingEntryPoint.java @@ -27,7 +27,7 @@ public class SwitchingEntryPoint implements EntryPoint { private static Logger LOG = Logger.getLogger(SwitchingEntryPoint.class.getName()); private static final String SAPSAILING_MOBILE = "sapsailing_mobile"; private static final RegExp isMobileRegExp = RegExp.compile( - "Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini", "i"); + "Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile Safari", "i"); private final PlaceHistoryMapper hisMap = GWT.create(ApplicationHistoryMapper.class); private final ApplicationPlaceUpdater placeUpdater = new ApplicationPlaceUpdater(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java new file mode 100644 index 00000000000..998b211f053 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java @@ -0,0 +1,164 @@ +package com.sap.sailing.gwt.home.shared.partials.fullscreen; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.dom.client.Style.Overflow; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.logical.shared.CloseEvent; +import com.google.gwt.event.logical.shared.CloseHandler; +import com.google.gwt.event.logical.shared.ResizeEvent; +import com.google.gwt.event.logical.shared.ResizeHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Event.NativePreviewEvent; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HeaderPanel; +import com.google.gwt.user.client.ui.PopupPanel; +import com.google.gwt.user.client.ui.RootPanel; +import com.google.gwt.user.client.ui.SimpleLayoutPanel; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; + +public class FullscreenContainer { + + private static FullscreenContainerUiBinder uiBinder = GWT.create(FullscreenContainerUiBinder.class); + + interface FullscreenContainerUiBinder extends UiBinder> { + } + + interface Style extends CssResource { + String popup(); + String toolbarInfo(); + String toolbarAction(); + String content(); + String contentBorder(); + } + + @UiField Style style; + @UiField AnchorElement logoUi; + @UiField SimplePanel headerContentUi; + @UiField FlowPanel toolbarUi; + @UiField(provided=true) SimpleLayoutPanel contentUi = new FullscreenContentPanel(); + + private final FullscreenPopupPanel popup = new FullscreenPopupPanel(); + private final HeaderPanel mainPanel; + + public FullscreenContainer() { + popup.setWidget(mainPanel = uiBinder.createAndBindUi(this)); + popup.addStyleName(style.popup()); + } + + protected void onShow() { + } + + protected void onClose() { + } + + @SuppressWarnings("unchecked") + protected T getContentWidget() { + return (T) contentUi.getWidget(); + } + + protected void showLogo() { + logoUi.getStyle().clearDisplay(); + headerContentUi.getElement().getStyle().setMarginLeft(5, Unit.EM); + } + + protected void showBorder() { + contentUi.addStyleName(style.contentBorder()); + } + + @UiHandler("closeActionUi") + void onCloseActionClicked(ClickEvent event) { + popup.hide(); + } + + public HandlerRegistration addCloseHandler(CloseHandler handler) { + return popup.addCloseHandler(handler); + } + + public void addToolbarAction(Widget widget) { + widget.addStyleName(style.toolbarAction()); + toolbarUi.add(widget); + } + + public void addToolbarInfo(Widget widget) { + widget.addStyleName(style.toolbarInfo()); + toolbarUi.add(widget); + } + + public void setHeaderWidget(Widget widget) { + headerContentUi.setWidget(widget); + } + + public void showContent(T content) { + contentUi.setWidget(content); + getContentWidget().getElement().addClassName(style.content()); + mainPanel.onResize(); + popup.showPopupPanel(); + this.onShow(); + } + + private class FullscreenPopupPanel extends PopupPanel { + private FullscreenPopupPanel() { + super(false, true); + this.addCloseHandler(new CloseHandler() { + @Override + public void onClose(CloseEvent event) { + RootPanel.get().getElement().getStyle().setOverflow(Overflow.AUTO); + getContentWidget().getElement().removeClassName(style.content()); + FullscreenContainer.this.onClose(); + } + }); + } + + protected void onPreviewNativeEvent(NativePreviewEvent event) { + if (event.getTypeInt() == Event.ONKEYDOWN && event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) { + FullscreenPopupPanel.this.hide(); + event.cancel(); + return; + } + event.consume(); + }; + + private void showPopupPanel() { + RootPanel.get().getElement().getStyle().setOverflow(Overflow.HIDDEN); + FullscreenPopupPanel.this.show(); + } + } + + private class FullscreenContentPanel extends SimpleLayoutPanel { + private HandlerRegistration windowResizeHandler; + + @Override + public void onResize() { + popup.getWidget().getElement().getStyle().setWidth(Window.getClientWidth(), Unit.PX); + popup.getWidget().getElement().getStyle().setHeight(Window.getClientHeight(), Unit.PX); + super.onResize(); + } + + @Override + protected void onLoad() { + windowResizeHandler = Window.addResizeHandler(new ResizeHandler() { + @Override + public void onResize(ResizeEvent event) { + mainPanel.onResize(); + } + }); + } + + @Override + protected void onUnload() { + if (windowResizeHandler != null) { + windowResizeHandler.removeHandler(); + } + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml new file mode 100644 index 00000000000..bc1f63ed53d --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml @@ -0,0 +1,82 @@ + + + + + + .popup { + position: fixed !important; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(0,0,0,0.9); + } + .logoLink { + position: absolute; + } + .logo { + height: 50px; + padding: 10px 5px 5px 5px; + } + .header { + color: white + } + .header:after { + clear: both; + } + .headerContent { + padding: 9px 10px; + } + .toolbar { + float: right; + padding-left: 30px; + white-space: nowrap; + font-size: 0; + } + .toolbarContent { + display: inline-block; + font-size: 1rem; + } + .toolbarInfo { + display: inline-block; + padding: 9px 10px; + vertical-align: top; + font-size: 93.75%; + } + .toolbarAction { + display: inline-block; + height: 50px; + width: auto; + cursor: pointer; + padding: 10px; + } + .toolbarAction:hover { + background-color: #d79900; + } + .container { + width: 100%; + height: 100%; + } + .content { + overflow: auto !important; + } + .contentBorder { + border-color: rgba(0,0,0,0); + border-width: 0 5px 5px; + border-style: solid; + } + + + + +
+ + +
+ +
+ +
+
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/statistics/AbstractStatisticsBox.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/statistics/AbstractStatisticsBox.java new file mode 100644 index 00000000000..4fb85d6ba65 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/statistics/AbstractStatisticsBox.java @@ -0,0 +1,90 @@ +package com.sap.sailing.gwt.home.shared.partials.statistics; + +import com.google.gwt.i18n.client.NumberFormat; +import com.google.gwt.user.client.ui.Composite; +import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.dispatch.event.EventStatisticsDTO; + +public abstract class AbstractStatisticsBox extends Composite implements RefreshableWidget { + + private static final StringMessages MSG = StringMessages.INSTANCE; + public static final String ICON_REGATTAS_FOUGHT = "images/mobile/icon_regattasFought.svg"; + public static final String ICON_COMPATITORS_COUNT = "images/mobile/icon_averageSpeed.svg"; + public static final String ICON_RACES_COUNT = "images/mobile/icon_racesCount.svg"; + public static final String ICON_TRACKED_COUNT = "images/mobile/icon_trackedCount.svg"; + public static final String ICON_FASTEST_SAILOR = "images/mobile/fastest_sailor.svg"; + public static final String ICON_RAW_GPS_FIX = "images/mobile/raw_gps_fixes.svg"; + public static final String ICON_WIND_FIX = "images/mobile/strongest_wind.svg"; + public static final String ICON_SUM_MILES = "images/mobile/sum_miles.svg"; + + private NumberFormat simpleFormat = NumberFormat.getFormat("#0.0"); + + private final boolean showRegattaInformation; + + public AbstractStatisticsBox(boolean showRegattaInformation) { + this.showRegattaInformation = showRegattaInformation; + } + + public void addItemWithCompactFormat(String iconUrl, String name, Double payload) { + if (payload != null && payload != 0) { + addItem(iconUrl, name, compactNumber(payload)); + } + } + + public void addItemWithCompactFormat(String iconUrl, String name, long payload) { + if (payload != 0) { + addItem(iconUrl, name, compactNumber(payload)); + } + } + + public void addItemIfNotNull(String iconUrl, String name, Object payload) { + if (payload != null || payload instanceof Number && ((Number) payload).longValue() != 0) { + addItem(iconUrl, name, payload); + } + } + + @Override + public void setData(EventStatisticsDTO statistics) { + clear(); + if (showRegattaInformation) { + addItem(ICON_REGATTAS_FOUGHT, MSG.regattas(), statistics.getRegattasFoughtCount()); + } + addItem(ICON_COMPATITORS_COUNT, MSG.competitors(), statistics.getCompetitorsCount()); + addItem(ICON_RACES_COUNT, MSG.races(), statistics.getRacesRunCount()); + addItem(ICON_TRACKED_COUNT, MSG.trackedRaces(), statistics.getTrackedRacesCount()); + addItemWithCompactFormat(ICON_RAW_GPS_FIX, MSG.numberOfGPSFixes(), statistics.getNumberOfGPSFixes()); + addItemWithCompactFormat(ICON_WIND_FIX, MSG.numberWindFixes(), statistics.getNumberOfWindFixes()); + addItemWithCompactFormat(ICON_SUM_MILES, MSG.sailedMiles(), statistics.getTotalDistanceTraveled()); + addItemWithCompactFormat(ICON_FASTEST_SAILOR, MSG.fastestSailor() + ": " + + statistics.getCompetitorInfo(), statistics.getCompetitorSpeed()); + } + + private String compactNumber(double value) { + if(value < 100.0) { + return simpleFormat.format(value); + } + if(value < 100_000.0) { + return "" + Double.valueOf(value).intValue(); + } + if(value < 100_000_000.0) { + return StringMessages.INSTANCE.millionValue(value / 1_000_000.0); + } + return StringMessages.INSTANCE.billionValue(value / 1_000_000_000.0); + } + + private String compactNumber(long value) { + if(value < 100_000l) { + return "" + value; + } + if(value < 100_000_000l) { + return StringMessages.INSTANCE.millionValue(value / 1_000_000.0); + } + return StringMessages.INSTANCE.billionValue(value / 1_000_000_000.0); + } + + protected abstract void clear(); + + protected abstract void addItem(String iconUrl, String name, Object payload); + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventHolder.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventHolder.java new file mode 100644 index 00000000000..29105c9ec25 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventHolder.java @@ -0,0 +1,18 @@ +package com.sap.sailing.gwt.server; + +import java.net.URL; + +import com.sap.sailing.domain.base.EventBase; + +public class EventHolder { + public final EventBase event; + public final boolean onRemoteServer; + public final URL baseURL; + + public EventHolder(EventBase event, boolean onRemoteServer, URL baseURL) { + super(); + this.event = event; + this.onRemoteServer = onRemoteServer; + this.baseURL = baseURL; + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventStageCandidateCalculator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventStageCandidateCalculator.java new file mode 100644 index 00000000000..dbba6e86a69 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventStageCandidateCalculator.java @@ -0,0 +1,41 @@ +package com.sap.sailing.gwt.server; + +import java.net.URL; +import java.util.Collection; +import java.util.SortedSet; +import java.util.TreeSet; + +import com.sap.sailing.domain.base.EventBase; +import com.sap.sailing.gwt.server.HomeServiceUtil.EventVisitor; +import com.sap.sailing.gwt.ui.shared.start.StageEventType; +import com.sap.sse.common.Duration; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.Util.Pair; +import com.sap.sse.common.impl.MillisecondsTimePoint; + +public class EventStageCandidateCalculator implements EventVisitor { + private final TimePoint now = MillisecondsTimePoint.now(); + private final SortedSet> featuredEvents = new TreeSet<>(FeaturedEventsComparator.INSTANCE); + + @Override + public void visit(EventBase event, boolean onRemoteServer, URL baseURL) { + EventHolder holder = new EventHolder(event, onRemoteServer, baseURL); + if (now.after(event.getStartDate()) && now.before(event.getEndDate())) { + featuredEvents.add(new Pair(StageEventType.RUNNING, holder)); + } else if (event.getStartDate().after(now) && + event.getStartDate().before(now.plus(Duration.ONE_WEEK.times(4)))) { + // This ensures that no events appear on the stage that do not have their leaderboards configured + // as the event page only shows a placeholder message in this stage + if(HomeServiceUtil.hasRegattaData(event)) { + featuredEvents.add(new Pair(StageEventType.UPCOMING_SOON, holder)); + } + } else if (event.getEndDate().before(now) && + event.getEndDate().after(now.minus(Duration.ONE_YEAR))) { + featuredEvents.add(new Pair(StageEventType.POPULAR, holder)); + } + } + + public Collection> getFeaturedEvents() { + return featuredEvents; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/FeaturedEventsComparator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/FeaturedEventsComparator.java new file mode 100644 index 00000000000..bd475ee6fa8 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/FeaturedEventsComparator.java @@ -0,0 +1,24 @@ +package com.sap.sailing.gwt.server; + +import java.util.Comparator; + +import com.sap.sailing.gwt.ui.shared.start.StageEventType; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; +import com.sap.sse.common.Util.Pair; +import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.common.impl.TimeRangeImpl; + +public class FeaturedEventsComparator implements Comparator> { + public static final Comparator> INSTANCE = new FeaturedEventsComparator(); + + @Override + public int compare(Pair eventAndStageType1, Pair eventAndStageType2) { + TimePoint now = MillisecondsTimePoint.now(); + TimeRange event1Range = new TimeRangeImpl(eventAndStageType1.getB().event.getStartDate(), + eventAndStageType1.getB().event.getEndDate()); + TimeRange event2Range = new TimeRangeImpl(eventAndStageType2.getB().event.getStartDate(), + eventAndStageType2.getB().event.getEndDate()); + return event1Range.timeDifference(now).compareTo(event2Range.timeDifference(now)); + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java index d48af353190..550ed2649cd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java @@ -10,7 +10,6 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.HashSet; import java.util.List; -import java.util.Map.Entry; import java.util.Random; import java.util.Set; import java.util.UUID; @@ -20,8 +19,8 @@ import org.osgi.util.tracker.ServiceTracker; import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.EventBase; -import com.sap.sailing.domain.base.RemoteSailingServerReference; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; +import com.sap.sailing.gwt.server.HomeServiceUtil.EventVisitor; import com.sap.sailing.gwt.ui.client.HomeService; import com.sap.sailing.gwt.ui.server.Activator; import com.sap.sailing.gwt.ui.server.ProxiedRemoteServiceServlet; @@ -38,13 +37,8 @@ import com.sap.sailing.gwt.ui.shared.media.SailingVideoDTO; import com.sap.sailing.gwt.ui.shared.start.StageEventType; import com.sap.sailing.gwt.ui.shared.start.StartViewDTO; import com.sap.sailing.server.RacingEventService; -import com.sap.sse.common.Duration; -import com.sap.sse.common.TimePoint; -import com.sap.sse.common.TimeRange; import com.sap.sse.common.Util; import com.sap.sse.common.Util.Pair; -import com.sap.sse.common.impl.MillisecondsTimePoint; -import com.sap.sse.common.impl.TimeRangeImpl; import com.sap.sse.common.media.ImageDescriptor; import com.sap.sse.common.media.MediaTagConstants; import com.sap.sse.common.media.MimeType; @@ -57,7 +51,7 @@ import com.sap.sse.util.ServiceTrackerFactory; public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements HomeService { private static final long serialVersionUID = 3947782997746039939L; - private static final int MAX_STAGE_EVENTS = 5; + public static final int MAX_STAGE_EVENTS = 5; private static final int MAX_RECENT_EVENTS = 3; private static final int MAX_VIDEO_COUNT = 3; @@ -72,103 +66,26 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home protected RacingEventService getService() { return racingEventServiceTracker.getService(); } - - private interface EventVisitor { - void visit(EventBase event, boolean onRemoteServer, URL baseURL); - } - - private static class EventHolder { - EventBase event; - boolean onRemoteServer; - URL baseURL; - public EventHolder(EventBase event, boolean onRemoteServer, URL baseURL) { - super(); - this.event = event; - this.onRemoteServer = onRemoteServer; - this.baseURL = baseURL; - } - } - - private class FeaturedEventsComparator implements Comparator> { - @Override - public int compare(Pair eventAndStageType1, - Pair eventAndStageType2) { - TimePoint now = MillisecondsTimePoint.now(); - TimeRange event1Range = new TimeRangeImpl(eventAndStageType1.getB().event.getStartDate(), eventAndStageType1.getB().event.getEndDate()); - TimeRange event2Range = new TimeRangeImpl(eventAndStageType2.getB().event.getStartDate(), eventAndStageType2.getB().event.getEndDate()); - return event1Range.timeDifference(now).compareTo(event2Range.timeDifference(now)); - } - } - - public void forAllPublicEvents(EventVisitor visitor) throws MalformedURLException { - URL requestedBaseURL = getRequestBaseURL(); - for (Event event : getService().getAllEvents()) { - if(event.isPublic()) { - visitor.visit(event, false, requestedBaseURL); - } - } - for (Entry, Exception>> serverRefAndEventsOrException : - getService().getPublicEventsOfAllSailingServers().entrySet()) { - final com.sap.sse.common.Util.Pair, Exception> eventsOrException = serverRefAndEventsOrException.getValue(); - final RemoteSailingServerReference serverRef = serverRefAndEventsOrException.getKey(); - final Iterable remoteEvents = eventsOrException.getA(); - URL baseURL = getBaseURL(serverRef.getURL()); - if (remoteEvents != null) { - for (EventBase remoteEvent : remoteEvents) { - if(remoteEvent.isPublic()) { - visitor.visit(remoteEvent, true, baseURL); - } - } - } - } - } - - /** - * Determines the base URL (protocol, host and port parts) used for the currently executing servlet request. Defaults - * to http://sapsailing.com. - * @throws MalformedURLException - */ - private URL getRequestBaseURL() throws MalformedURLException { - final URL url = new URL(getThreadLocalRequest().getRequestURL().toString()); - final URL baseURL = getBaseURL(url); - return baseURL; - } - - private URL getBaseURL(URL url) throws MalformedURLException { - return new URL(url.getProtocol(), url.getHost(), url.getPort(), /* file */ ""); - } @Override public StartViewDTO getStartView() throws MalformedURLException { - final List> featuredEvents = new ArrayList>(); - final List recentEventsOfLast12Month = new ArrayList(); - final TimePoint now = MillisecondsTimePoint.now(); + EventStageCandidateCalculator stageCandidateCalculator = new EventStageCandidateCalculator(); + RecentEventsCalculator recentEventsCalculator = new RecentEventsCalculator(); - forAllPublicEvents(new EventVisitor() { - @Override - public void visit(EventBase event, boolean onRemoteServer, URL baseURL) { - EventHolder holder = new EventHolder(event, onRemoteServer, baseURL); - if (now.after(event.getStartDate()) && now.before(event.getEndDate())) { - featuredEvents.add(new Pair(StageEventType.RUNNING, holder)); - } else if (event.getStartDate().after(now) && - event.getStartDate().before(now.plus(Duration.ONE_WEEK.times(4)))) { - featuredEvents.add(new Pair(StageEventType.UPCOMING_SOON, holder)); - } else if (event.getEndDate().before(now) && - event.getEndDate().after(now.minus(Duration.ONE_YEAR))) { - recentEventsOfLast12Month.add(holder); - featuredEvents.add(new Pair(StageEventType.POPULAR, holder)); - } - } - }); + HomeServiceUtil.forAllPublicEvents(getService(), getThreadLocalRequest(), stageCandidateCalculator, recentEventsCalculator); StartViewDTO result = new StartViewDTO(); - Collections.sort(featuredEvents, new FeaturedEventsComparator()); - for(int i = 0; i < MAX_STAGE_EVENTS && i < featuredEvents.size(); i++) { - Pair pair = featuredEvents.get(i); + int count = 0; + for(Pair pair : stageCandidateCalculator.getFeaturedEvents()) { + count++; + if(count > MAX_STAGE_EVENTS) { + break; + } + StageEventType stageType = pair.getA(); EventHolder holder = pair.getB(); - result.addStageEvent(HomeServiceUtil.convertToEventStageDTO(holder.event, holder.baseURL, holder.onRemoteServer, stageType, getService())); + result.addStageEvent(HomeServiceUtil.convertToEventStageDTO(holder.event, holder.baseURL, holder.onRemoteServer, stageType, getService(), false)); EventReferenceDTO eventRef = new EventReferenceDTO(holder.event); @@ -186,19 +103,12 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home } } } - Collections.sort(recentEventsOfLast12Month, new Comparator() { - @Override - public int compare(EventHolder o1, EventHolder o2) { - final long diff = o2.event.getEndDate().asMillis() - o1.event.getEndDate().asMillis(); - return diff > 0l ? 1 : diff < 0l ? -1 : 0; - } - }); final Set photoGalleryUrls = new HashSet<>(); // using a HashSet here leads to a reasonable // amount of shuffling final List videoCandidates = new ArrayList<>(); - for(EventHolder holder : recentEventsOfLast12Month) { + for(EventHolder holder : recentEventsCalculator.getRecentEventsOfLast12Month()) { if(result.getRecentEvents().size() < MAX_RECENT_EVENTS) { result.addRecentEvent(HomeServiceUtil.convertToEventListDTO(holder.event, holder.baseURL, holder.onRemoteServer, getService())); } @@ -354,7 +264,7 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home public EventListViewDTO getEventListView() throws MalformedURLException { // TODO fill stats of years final EventListViewDTO result = new EventListViewDTO(); - forAllPublicEvents(new EventVisitor() { + HomeServiceUtil.forAllPublicEvents(getService(), getThreadLocalRequest(), new EventVisitor() { @Override public void visit(EventBase event, boolean onRemoteServer, URL baseURL) { EventListEventDTO eventDTO = HomeServiceUtil.convertToEventListDTO(event, baseURL, onRemoteServer, getService()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java index 96b765dcf12..c243cbf921e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java @@ -1,5 +1,6 @@ package com.sap.sailing.gwt.server; +import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; @@ -10,6 +11,9 @@ import java.util.List; import java.util.Locale; import java.util.Random; import java.util.UUID; +import java.util.Map.Entry; + +import javax.servlet.http.HttpServletRequest; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.CourseArea; @@ -19,6 +23,7 @@ import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.LeaderboardGroupBase; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.Regatta; +import com.sap.sailing.domain.base.RemoteSailingServerReference; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; @@ -35,6 +40,7 @@ import com.sap.sailing.gwt.ui.shared.start.StageEventType; import com.sap.sailing.server.RacingEventService; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; +import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.media.ImageDescriptor; import com.sap.sse.common.media.MediaDescriptor; @@ -44,6 +50,9 @@ import com.sap.sse.gwt.client.media.ImageDTO; import com.sap.sse.gwt.client.media.VideoDTO; public final class HomeServiceUtil { + public interface EventVisitor { + void visit(EventBase event, boolean onRemoteServer, URL baseURL); + } private HomeServiceUtil() { } @@ -234,7 +243,7 @@ public final class HomeServiceUtil { return !Util.isEmpty(event.getVideos()); } - public static boolean isPartOfEvent(Event event, Leaderboard regattaEntity) { + public static boolean isPartOfEvent(EventBase event, Leaderboard regattaEntity) { for (CourseArea courseArea : event.getVenue().getCourseAreas()) { if(courseArea.equals(regattaEntity.getDefaultCourseArea())) { return true; @@ -337,13 +346,13 @@ public final class HomeServiceUtil { return LocaleMatch.NO_MATCH; } - public static EventStageDTO convertToEventStageDTO(EventBase event, URL baseURL, boolean onRemoteServer, StageEventType stageType, RacingEventService service) { + public static EventStageDTO convertToEventStageDTO(EventBase event, URL baseURL, boolean onRemoteServer, StageEventType stageType, RacingEventService service, boolean useTeaserImage) { EventStageDTO dto = new EventStageDTO(); mapToMetadataDTO(event, dto, service); dto.setBaseURL(baseURL.toString()); dto.setOnRemoteServer(onRemoteServer); dto.setStageType(stageType); - dto.setStageImageURL(HomeServiceUtil.getStageImageURLAsString(event)); + dto.setStageImageURL(useTeaserImage ? findEventThumbnailImageUrlAsString(event) : getStageImageURLAsString(event)); return dto; } @@ -467,4 +476,65 @@ public final class HomeServiceUtil { } return courseArea == null ? null : courseArea.getId().toString(); } + + public static void forAllPublicEvents(RacingEventService service, HttpServletRequest request, EventVisitor... visitors) throws MalformedURLException { + URL requestedBaseURL = getRequestBaseURL(request); + for (Event event : service.getAllEvents()) { + if(event.isPublic()) { + for(EventVisitor visitor : visitors) { + visitor.visit(event, false, requestedBaseURL); + } + } + } + for (Entry, Exception>> serverRefAndEventsOrException : + service.getPublicEventsOfAllSailingServers().entrySet()) { + final Pair, Exception> eventsOrException = serverRefAndEventsOrException.getValue(); + final RemoteSailingServerReference serverRef = serverRefAndEventsOrException.getKey(); + final Iterable remoteEvents = eventsOrException.getA(); + URL baseURL = getBaseURL(serverRef.getURL()); + if (remoteEvents != null) { + for (EventBase remoteEvent : remoteEvents) { + if(remoteEvent.isPublic()) { + for(EventVisitor visitor : visitors) { + visitor.visit(remoteEvent, true, baseURL); + } + } + } + } + } + } + + /** + * Determines the base URL (protocol, host and port parts) used for the currently executing servlet request. Defaults + * to http://sapsailing.com. + * @throws MalformedURLException + */ + private static URL getRequestBaseURL(HttpServletRequest request) throws MalformedURLException { + final URL url = new URL(request.getRequestURL().toString()); + final URL baseURL = getBaseURL(url); + return baseURL; + } + + private static URL getBaseURL(URL url) throws MalformedURLException { + return new URL(url.getProtocol(), url.getHost(), url.getPort(), /* file */ ""); + } + + public static boolean hasRegattaData(EventBase event) { + final boolean fakeSeries = HomeServiceUtil.isFakeSeries(event); + for (LeaderboardGroupBase leaderboardGroupBase : event.getLeaderboardGroups()) { + if(leaderboardGroupBase instanceof LeaderboardGroup) { + // for events that are locally available, we can see if there are any leaderboards + LeaderboardGroup leaderboardGroup = (LeaderboardGroup) leaderboardGroupBase; + for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { + if(!fakeSeries || isPartOfEvent(event, leaderboard)) { + return true; + } + } + } else { + // we can't know if the event has leaderboards but the existence of a leaderboard group is a good sign for that + return true; + } + } + return false; + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/RecentEventsCalculator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/RecentEventsCalculator.java new file mode 100644 index 00000000000..8299dd62fbc --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/RecentEventsCalculator.java @@ -0,0 +1,36 @@ +package com.sap.sailing.gwt.server; + +import java.net.URL; +import java.util.Collection; +import java.util.Comparator; +import java.util.SortedSet; +import java.util.TreeSet; + +import com.sap.sailing.domain.base.EventBase; +import com.sap.sailing.gwt.server.HomeServiceUtil.EventVisitor; +import com.sap.sse.common.Duration; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.impl.MillisecondsTimePoint; + +public class RecentEventsCalculator implements EventVisitor { + private final TimePoint now = MillisecondsTimePoint.now(); + private final SortedSet recentEventsOfLast12Month = new TreeSet<>(new Comparator() { + @Override + public int compare(EventHolder o1, EventHolder o2) { + final long diff = o2.event.getEndDate().asMillis() - o1.event.getEndDate().asMillis(); + return diff > 0l ? 1 : diff < 0l ? -1 : 0; + } + }); + + @Override + public void visit(EventBase event, boolean onRemoteServer, URL baseURL) { + EventHolder holder = new EventHolder(event, onRemoteServer, baseURL); + if (event.getEndDate().before(now) && event.getEndDate().after(now.minus(Duration.ONE_YEAR))) { + recentEventsOfLast12Month.add(holder); + } + } + + public Collection getRecentEventsOfLast12Month() { + return recentEventsOfLast12Month; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java index c8203b76bd1..b18109f4e2f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java @@ -1,5 +1,8 @@ package com.sap.sailing.gwt.ui.adminconsole; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.UUID; @@ -181,7 +184,15 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog extends DataEn private void setupEventAndCourseAreaListBoxes(StringMessages stringMessages) { sailingEventsListBox.addItem(stringMessages.selectSailingEvent()); - for (EventDTO event : existingEvents) { + final List sortedEvents = new ArrayList<>(); + sortedEvents.addAll(existingEvents); + Collections.sort(sortedEvents, new Comparator() { + @Override + public int compare(EventDTO o1, EventDTO o2) { + return o1.getName().compareTo(o2.getName()); + } + }); + for (EventDTO event : sortedEvents) { sailingEventsListBox.addItem(event.getName()); if (isCourseAreaInEvent(event, regatta.defaultCourseAreaUuid)) { sailingEventsListBox.setSelectedIndex(sailingEventsListBox.getItemCount() - 1); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleResources.java index b291df106b6..d387a675ae0 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleResources.java @@ -79,6 +79,9 @@ interface AdminConsoleResources extends ClientBundle { @Source("com/sap/sailing/gwt/ui/client/images/map_devices.png") ImageResource mapDevices(); + @Source("com/sap/sailing/gwt/ui/client/images/set_tracking_times.png") + ImageResource setTrackingTimes(); + @Source("com/sap/sailing/gwt/ui/client/images/ping.png") ImageResource ping(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorEditDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorEditDialog.java index 571177f4adc..a19ce368dae 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorEditDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorEditDialog.java @@ -9,6 +9,7 @@ import com.google.gwt.user.client.ui.DoubleBox; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; +import com.google.gwt.user.client.ui.SuggestBox; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.BoatClassMasterdata; @@ -37,7 +38,7 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog; public class CompetitorEditDialog extends DataEntryDialog { private final CompetitorDTO competitorToEdit; private final TextBox name; - private final ListBox boatClassName; + private final SuggestBox boatClassName; private final TextBox displayColorTextBox; private final ListBox threeLetterIocCountryCode; private final TextBox sailId; @@ -73,25 +74,12 @@ public class CompetitorEditDialog extends DataEntryDialog { this.stringMessages = stringMessages; this.competitorToEdit = competitorToEdit; - this.boatClassName = createListBox(/* isMultipleSelect */ false); + this.boatClassName = createSuggestBox(BoatClassMasterdata.getAllBoatClassNames(/* includeAlternativeNames */ true)); int i=0; List boatClassNamesList = new ArrayList(); for (BoatClassMasterdata t : BoatClassMasterdata.values()) { boatClassNamesList.add(t.getDisplayName()); } - String competitorsBoatClassName = competitorToEdit.getBoatClass() != null ? competitorToEdit.getBoatClass().getName() : null; - Collections.sort(boatClassNamesList); - for (String name : boatClassNamesList) { - boatClassName.addItem(name); - if (name.equals(competitorsBoatClassName)) { - boatClassName.setSelectedIndex(i); - } - i++; - } - if (boatClassName.getSelectedIndex() == -1 && competitorsBoatClassName != null) { - boatClassName.addItem(competitorsBoatClassName); - boatClassName.setSelectedIndex(i); - } if (competitorToEdit.getBoatClass() != null) { boatClassName.setEnabled(false); } @@ -185,7 +173,7 @@ public class CompetitorEditDialog extends DataEntryDialog { color = new InvalidColor(iae); } } - BoatClassDTO boatClass = new BoatClassDTO(boatClassName.getValue(boatClassName.getSelectedIndex()), 0); + BoatClassDTO boatClass = new BoatClassDTO(boatClassName.getValue(), 0); CompetitorDTO result = new CompetitorDTOImpl(name.getText(), color, email.getText(), /* twoLetterIsoCountryCode */ null, threeLetterIocCountryCode.getValue(threeLetterIocCountryCode.getSelectedIndex()), diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageCreateDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageCreateDialog.java index c3304669cc6..386a6642315 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageCreateDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageCreateDialog.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.adminconsole; import java.util.ArrayList; +import java.util.Date; import java.util.List; import com.google.gwt.user.client.ui.Label; @@ -10,7 +11,7 @@ import com.sap.sse.gwt.client.media.ImageDTO; public class ImageCreateDialog extends ImageDialog { public ImageCreateDialog(String initialTag, StringMessages stringMessages, DialogCallback callback) { - super(new ImageParameterValidator(stringMessages), stringMessages, callback); + super(new Date(), new ImageParameterValidator(stringMessages), stringMessages, callback); createdAtLabel = new Label(creationDate.toString()); titleTextBox = createTextBox(null); titleTextBox.setVisibleLength(50); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageDialog.java index e934b453208..308be6cbf77 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageDialog.java @@ -58,11 +58,11 @@ public abstract class ImageDialog extends DataEntryDialog { } } - public ImageDialog(ImageParameterValidator validator, StringMessages stringMessages, DialogCallback callback) { + public ImageDialog(Date creationDate, ImageParameterValidator validator, StringMessages stringMessages, DialogCallback callback) { super(stringMessages.image(), null, stringMessages.ok(), stringMessages.cancel(), validator, callback); this.stringMessages = stringMessages; - this.creationDate = new Date(); + this.creationDate = creationDate; getDialogBox().getWidget().setWidth("730px"); image = new Image(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageEditDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageEditDialog.java index 45fb0194bc7..0ccd2222467 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageEditDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImageEditDialog.java @@ -9,7 +9,7 @@ import com.sap.sse.gwt.client.media.ImageDTO; public class ImageEditDialog extends ImageDialog { public ImageEditDialog(ImageDTO image, StringMessages stringMessages, DialogCallback callback) { - super(new ImageParameterValidator(stringMessages), stringMessages, callback); + super(image.getCreatedAtDate(), new ImageParameterValidator(stringMessages), stringMessages, callback); createdAtLabel = new Label(image.getCreatedAtDate().toString()); imageURLAndUploadComposite.setURL(image.getSourceRef()); titleTextBox = createTextBox(image.getTitle()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogSetTrackingTimesDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogSetTrackingTimesDTO.java new file mode 100755 index 00000000000..ec047b07de0 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogSetTrackingTimesDTO.java @@ -0,0 +1,17 @@ +package com.sap.sailing.gwt.ui.adminconsole; + +import com.google.gwt.user.client.rpc.IsSerializable; +import com.sap.sse.common.TimePoint; + +public class RaceLogSetTrackingTimesDTO implements IsSerializable { + public String leaderboardName; + public String raceColumnName; + public String fleetName; + public String authorName; + public Integer authorPriority; + public TimePoint logicalTimePoint; + public TimePoint newStartOfTracking; + public TimePoint newEndOfTracking; + public TimePoint currentStartOfTracking; + public TimePoint currentEndOfTracking; +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementPanel.java index 2bf1a6da848..e77529b6f59 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementPanel.java @@ -283,6 +283,8 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf setStartTime(getSelectedRaceColumnWithFleet().getA(), getSelectedRaceColumnWithFleet().getB()); } else if (LeaderboardRaceConfigImagesBarCell.ACTION_SHOW_RACELOG.equals(value)) { showRaceLog(object.getA(), object.getB()); + } else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_SET_TRACKING_TIMES.equals(value)) { + setTrackingTimes(getSelectedRaceColumnWithFleet().getA(), getSelectedRaceColumnWithFleet().getB());; } } }); @@ -499,6 +501,32 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf }).show(); } + private void setTrackingTimes(RaceColumnDTO raceColumn, FleetDTO fleet) { + new SetTrackingTimesDialog(sailingService, errorReporter, getSelectedLeaderboardName(), raceColumn.getName(), + fleet.getName(), stringMessages, new DataEntryDialog.DialogCallback() { + + @Override + public void ok(RaceLogSetTrackingTimesDTO editedObject) { + sailingService.setTrackingTimes(editedObject, new AsyncCallback(){ + + @Override + public void onFailure(Throwable caught) { + errorReporter.reportError("Error while setting tracking times: " + caught.getMessage()); + } + + @Override + public void onSuccess(Void result) { + } + + }); + + } + + @Override + public void cancel() {} + }).show(); + } + private String getLocaleInfo() { return LocaleInfo.getCurrentLocale().getLocaleName(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementRaceImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementRaceImagesBarCell.java index fe7ee3e10db..9a2f6d69373 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementRaceImagesBarCell.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementRaceImagesBarCell.java @@ -19,6 +19,7 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe public final static String ACTION_REFRESH_RACELOG = "ACTION_REFRESH_RACE_LOG"; public final static String ACTION_SET_STARTTIME = "ACTION_SET_STARTTIME"; public final static String ACTION_SHOW_RACELOG = "ACTION_SHOW_RACELOG"; + public final static String ACTION_SET_TRACKING_TIMES = "ACTION_SET_TRACKING_TIMES"; private final StringMessages stringMessages; @@ -46,6 +47,7 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe result.add(new ImageSpec(ACTION_REFRESH_RACELOG, stringMessages.refreshRaceLog(), makeImagePrototype(resources.reloadIcon()))); result.add(new ImageSpec(ACTION_SET_STARTTIME, stringMessages.setStartTime(), makeImagePrototype(resources.clockIcon()))); result.add(new ImageSpec(ACTION_SHOW_RACELOG, stringMessages.raceLog(), makeImagePrototype(resources.flagIcon()))); + result.add(new ImageSpec(ACTION_SET_TRACKING_TIMES, stringMessages.setTrackingTimes(), makeImagePrototype(resources.setTrackingTimes()))); return result; } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsDialog.java index fbbf533fe7f..dc4db1d817f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsDialog.java @@ -4,8 +4,10 @@ import java.util.List; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.SuggestBox; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; +import com.sap.sailing.domain.common.BoatClassMasterdata; import com.sap.sailing.domain.common.dto.BoatClassDTO; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.EventDTO; @@ -16,7 +18,7 @@ import com.sap.sse.gwt.client.controls.listedit.ListEditorComposite; public abstract class RegattaWithSeriesAndFleetsDialog extends AbstractRegattaWithSeriesAndFleetsDialog { protected TextBox nameEntryField; - protected TextBox boatClassEntryField; + protected SuggestBox boatClassEntryField; public RegattaWithSeriesAndFleetsDialog(RegattaDTO regatta, Iterable series, List existingEvents, String title, String okButton, StringMessages stringMessages, @@ -27,9 +29,8 @@ public abstract class RegattaWithSeriesAndFleetsDialog extends AbstractRegattaWi nameEntryField.ensureDebugId("NameTextBox"); nameEntryField.setVisibleLength(40); nameEntryField.setText(regatta.getName()); - boatClassEntryField = createTextBox(null); - boatClassEntryField.ensureDebugId("BoatClassTextBox"); - boatClassEntryField.setVisibleLength(20); + boatClassEntryField = createSuggestBox(BoatClassMasterdata.getAllBoatClassNames(/* include alternative names */ true)); + boatClassEntryField.getValueBox().ensureDebugId("BoatClassTextBox"); if (regatta.boatClass != null) { boatClassEntryField.setText(regatta.boatClass.getName()); } @@ -45,7 +46,7 @@ public abstract class RegattaWithSeriesAndFleetsDialog extends AbstractRegattaWi @Override protected RegattaDTO getResult() { RegattaDTO result = getRegattaDTO(); - result.setName(nameEntryField.getText()); + result.setName(nameEntryField.getText().trim()); // trim to particularly avoid trailing slashes result.boatClass = new BoatClassDTO(boatClassEntryField.getText(), 0.0); return result; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SetTrackingTimesDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SetTrackingTimesDialog.java new file mode 100755 index 00000000000..9f486ec49b9 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SetTrackingTimesDialog.java @@ -0,0 +1,184 @@ +package com.sap.sailing.gwt.ui.adminconsole; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.CaptionPanel; +import com.google.gwt.user.client.ui.Grid; +import com.google.gwt.user.client.ui.HasVerticalAlignment; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.PushButton; +import com.google.gwt.user.client.ui.TextBox; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap; +import com.sap.sailing.gwt.ui.client.SailingServiceAsync; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.BetterDateTimeBox; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.Util; +import com.sap.sse.common.Util.Pair; +import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.gwt.client.ErrorReporter; +import com.sap.sse.gwt.client.dialog.DataEntryDialog; + +public class SetTrackingTimesDialog extends DataEntryDialogWithBootstrap { + + private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class); + + private final SailingServiceAsync service; + private final ErrorReporter errorReporter; + private final String leaderboardName; + private final String raceColumnName; + private final String fleetName; + private final StringMessages stringMessages; + + private final DateTimeFormat dateTimeFormat = DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_LONG); + private Label currentStartLabel; + private TimePoint currentStart; + private Label currentEndLabel; + private TimePoint currentEnd; + + private BetterDateTimeBox startTimeBox; + private BetterDateTimeBox endTimeBox; + private TextBox authorNameBox; + private com.sap.sse.gwt.client.controls.IntegerBox authorPriorityBox; + + protected SetTrackingTimesDialog(SailingServiceAsync service, ErrorReporter errorReporter, String leaderboardName, + String raceColumnName, String fleetName, StringMessages stringMessages, + DataEntryDialog.DialogCallback callback) { + super(stringMessages.setTrackingTimes(), stringMessages.setTrackingTimesDescription(), stringMessages + .setTrackingTimes(), stringMessages.cancel(), new TrackingTimesValidator(stringMessages), callback); + this.service = service; + this.errorReporter = errorReporter; + this.leaderboardName = leaderboardName; + this.raceColumnName = raceColumnName; + this.fleetName = fleetName; + this.stringMessages = stringMessages; + } + + @Override + protected Widget getAdditionalWidget() { + VerticalPanel content = new VerticalPanel(); + content.add(createCurrentPanel()); + content.add(createInputPanel()); + refreshTimes(); + return content; + } + + private void refreshTimes() { + service.getTrackingTimes(leaderboardName, raceColumnName, fleetName, + new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + errorReporter.reportError("Error retrieving tracking times: " + caught.getMessage()); + } + + @Override + public void onSuccess(Pair result) { + currentStart = result.getA(); + currentEnd = result.getB(); + updateDateTimeLabelAndTimeBoxFromDate(currentStart, currentStartLabel, startTimeBox); + updateDateTimeLabelAndTimeBoxFromDate(currentEnd, currentEndLabel, endTimeBox); + } + }); + } + + private void updateDateTimeLabelAndTimeBoxFromDate(final TimePoint timePoint, final Label label, final BetterDateTimeBox dateTimeBox) { + if (timePoint == null) { + label.setText(stringMessages.notAvailable()); + } else { + label.setText(dateTimeFormat.format(timePoint == null ? null : timePoint.asDate())); + dateTimeBox.setValue(timePoint==null ? null : timePoint.asDate()); + } + } + + private Widget createInputPanel() { + Grid content = new Grid(4, 2); + startTimeBox = createDateTimeBox(null); + startTimeBox.setFormat("dd/mm/yyyy hh:ii:ss"); + content.setWidget(0, 0, createLabel(stringMessages.startOfTracking())); + content.setWidget(0, 1, startTimeBox); + + endTimeBox = createDateTimeBox(null); + endTimeBox.setFormat("dd/mm/yyyy hh:ii:ss"); + content.setWidget(1, 0, createLabel(stringMessages.endOfTracking())); + content.setWidget(1, 1, endTimeBox); + + authorNameBox = createTextBox("Shore"); + content.setWidget(2, 0, createLabel(stringMessages.authorName())); + content.setWidget(2, 1, authorNameBox); + authorPriorityBox = createIntegerBox(4, 2); + content.setWidget(3, 0, createLabel(stringMessages.authorPriority())); + content.setWidget(3, 1, authorPriorityBox); + + return content; + } + + private Widget createCurrentPanel() { + CaptionPanel current = new CaptionPanel(stringMessages.liveData()); + HorizontalPanel currentPanel = new HorizontalPanel(); + currentPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + Grid grid = new Grid(2, 2); + currentStartLabel = new Label(""); + grid.setWidget(0, 0, createLabel(stringMessages.startOfTracking())); + grid.setWidget(0, 1, currentStartLabel); + + currentEndLabel = new Label(""); + grid.setWidget(1, 0, createLabel(stringMessages.endOfTracking())); + grid.setWidget(1, 1, currentEndLabel); + currentPanel.add(grid); + + PushButton refreshButton = new PushButton(new Image(resources.reloadIcon())); + refreshButton.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + refreshTimes(); + } + }); + currentPanel.add(refreshButton); + + current.add(currentPanel); + return current; + } + + @Override + protected RaceLogSetTrackingTimesDTO getResult() { + RaceLogSetTrackingTimesDTO dto = new RaceLogSetTrackingTimesDTO(); + dto.leaderboardName = leaderboardName; + dto.raceColumnName = raceColumnName; + dto.fleetName = fleetName; + dto.authorName = authorNameBox.getValue(); + dto.authorPriority = authorPriorityBox.getValue(); + dto.logicalTimePoint = MillisecondsTimePoint.now(); + dto.newStartOfTracking = startTimeBox.getValue() == null ? null : new MillisecondsTimePoint(startTimeBox.getValue()); + dto.newEndOfTracking = endTimeBox.getValue() == null ? null : new MillisecondsTimePoint(endTimeBox.getValue()); + dto.currentStartOfTracking = currentStart; + dto.currentEndOfTracking = currentEnd; + return dto; + } + + private static class TrackingTimesValidator implements Validator { + private final StringMessages stringMessages; + + public TrackingTimesValidator(StringMessages stringMessages) { + this.stringMessages = stringMessages; + } + + @Override + public String getErrorMessage(RaceLogSetTrackingTimesDTO dto) { + final String result; + if (dto.authorName == null || dto.authorPriority == null) { + result = stringMessages.pleaseEnterAValue(); + } else { + result = null; + } + return result; + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TracTracEventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TracTracEventManagementPanel.java index 411331c30cd..8540d7fa24b 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TracTracEventManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TracTracEventManagementPanel.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.adminconsole; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashSet; @@ -474,13 +475,17 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel { public void onSuccess(List result) { TracTracEventManagementPanel.this.previousConfigurations.clear(); TracTracEventManagementPanel.this.connectionsHistoryListBox.clear(); - + Collections.sort(result, new Comparator() { + @Override + public int compare(TracTracConfigurationDTO c1, TracTracConfigurationDTO c2) { + return c1.name.compareTo(c2.name); + } + }); for (TracTracConfigurationDTO config : result) { TracTracEventManagementPanel.this.previousConfigurations.put(config.name, config); TracTracEventManagementPanel.this.connectionsHistoryListBox.addItem(config.name); } - if (!result.isEmpty()) { updatePanelFromSelectedStoredConfiguration(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoCreateDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoCreateDialog.java index 7d513502c68..f1540cf0061 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoCreateDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoCreateDialog.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.adminconsole; import java.util.ArrayList; +import java.util.Date; import java.util.List; import com.google.gwt.user.client.ui.Label; @@ -11,7 +12,7 @@ import com.sap.sse.gwt.client.media.VideoDTO; public class VideoCreateDialog extends VideoDialog { public VideoCreateDialog(String initialTag, StringMessages stringMessages, DialogCallback callback) { - super(new VideoParameterValidator(stringMessages), stringMessages, callback); + super(new Date(), new VideoParameterValidator(stringMessages), stringMessages, callback); createdAtLabel = new Label(creationDate.toString()); titleTextBox = createTextBox(null); titleTextBox.setVisibleLength(50); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoDialog.java index c44b7dd5bfa..9f450927658 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoDialog.java @@ -59,11 +59,11 @@ public abstract class VideoDialog extends DataEntryDialog { } } - public VideoDialog(VideoParameterValidator validator, StringMessages stringMessages, DialogCallback callback) { + public VideoDialog(Date createdAtDate, VideoParameterValidator validator, StringMessages stringMessages, DialogCallback callback) { super(stringMessages.video(), null, stringMessages.ok(), stringMessages.cancel(), validator, callback); this.stringMessages = stringMessages; - this.creationDate = new Date(); + this.creationDate = createdAtDate; getDialogBox().getWidget().setWidth("730px"); mimeTypeListBox = createListBox(false); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoEditDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoEditDialog.java index c31c51cb239..29d8811bd7e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoEditDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/VideoEditDialog.java @@ -9,7 +9,7 @@ import com.sap.sse.gwt.client.media.VideoDTO; public class VideoEditDialog extends VideoDialog { public VideoEditDialog(VideoDTO video, StringMessages stringMessages, DialogCallback callback) { - super(new VideoParameterValidator(stringMessages), stringMessages, callback); + super(video.getCreatedAtDate(), new VideoParameterValidator(stringMessages), stringMessages, callback); createdAtLabel = new Label(video.getCreatedAtDate().toString()); videoURLAndUploadComposite.setURL(video.getSourceRef()); titleTextBox = createTextBox(video.getTitle()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index 3cbaa3f8e10..ed9f3409526 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -47,6 +47,7 @@ import com.sap.sailing.domain.common.racelog.tracking.TransformationException; import com.sap.sailing.domain.racelog.tracking.GPSFixStore; import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.gwt.ui.adminconsole.RaceLogSetTrackingTimesDTO; import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO; import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO; import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO; @@ -89,6 +90,7 @@ import com.sap.sailing.gwt.ui.shared.VenueDTO; import com.sap.sailing.gwt.ui.shared.WindDTO; import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO; import com.sap.sse.common.NoCorrespondingServiceRegisteredException; +import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; import com.sap.sse.common.Util.Pair; import com.sap.sse.common.mail.MailException; @@ -616,4 +618,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS boolean doesRegattaLogContainCompetitors(String name) throws DoesNotHaveRegattaLogException; RegattaAndRaceIdentifier getRaceIdentifier(String regattaLikeName, String raceColumnName, String fleetName); + void setTrackingTimes(RaceLogSetTrackingTimesDTO dto); + + Pair getTrackingTimes(String leaderboardName, String raceColumnName, String fleetName); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 10ad3e1bd81..fc3ad82f970 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -37,6 +37,7 @@ import com.sap.sailing.domain.common.dto.RaceDTO; import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO; import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.gwt.ui.adminconsole.RaceLogSetTrackingTimesDTO; import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO; import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO; import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO; @@ -78,6 +79,7 @@ import com.sap.sailing.gwt.ui.shared.TrackFileImportDeviceIdentifierDTO; import com.sap.sailing.gwt.ui.shared.VenueDTO; import com.sap.sailing.gwt.ui.shared.WindDTO; import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO; +import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; import com.sap.sse.common.Util.Pair; import com.sap.sse.common.search.KeywordQuery; @@ -721,4 +723,8 @@ public interface SailingServiceAsync extends BuildVersionRetriever, FileStorageM void doesRegattaLogContainCompetitors(String name, AsyncCallback regattaLogCallBack); void getRaceIdentifier(String regattaLikeName, String raceColumnName, String fleetName, AsyncCallback asyncCallback); + void setTrackingTimes(RaceLogSetTrackingTimesDTO dto, AsyncCallback callback); + + void getTrackingTimes(String leaderboardName, String raceColumnName, String fleetName, + AsyncCallback> callback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index 639fe2413fe..8fb86cdfcf5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -104,6 +104,8 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c String eventName(); String event(); String startTime(); + String startOfTracking(); + String endOfTracking(); String regatta(); String regattas(); String startTracking(); @@ -965,6 +967,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c String setStartTime(); String currentPass(); String setStartTimeDescription(); + String setTrackingTimesDescription(); String hasAdditionalGolfDownTime(); String additionalGolfDownTimeHelpText(); String invalidColor(String message); @@ -1029,6 +1032,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c String pingPosition(String whose); String pleaseEnterAValidValueFor(String what, String validTemplate); String copyCourseAndCompetitors(); + String setTrackingTimes(); String nowSelectRaceColumnAndFleetToCopyTo(); String selectRowInTableToCopyCourse(); String deviceId(); @@ -1354,7 +1358,10 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c String racesOverview(); String empty(); String runAQuery(); + String latestRegattaStandings(); String plainText(); String columnChart(); String choosePresentation(); + String openFullscreenView(); + String closeFullscreenView(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index fdc5d2faaab..94e7f0c35f0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -102,6 +102,8 @@ regattaName=Regatta name eventName=Event name event=Event startTime=Start time +startOfTracking=Start of tracking +endOfTracking=End of tracking regatta=Regatta regattas=Regattas startTracking=Start tracking @@ -936,6 +938,7 @@ overwriteRacingProceduresConfigurationHelpText=Enabling this option will provide setStartTime=Set start time currentPass=Current pass setStartTimeDescription=Select a new start time for the race. If you want to set the start time to a timepoint in the past then you have to enable the checkbox to update the pass count. Please be aware of the fact that changing the pass count will have you loose all information from the previous pass (like flag events). +setTrackingTimesDescription=Set the start and end of tracking for the race. hasAdditionalGolfDownTime=Activate additional golf down time additionalGolfDownTimeHelpText=Activate additional golf down time invalidColor=Invalid color: {0} @@ -996,6 +999,7 @@ pleaseEnterA=Please enter a {0} pingPosition=Ping {0} position pleaseEnterAValidValueFor=Please enter a valid value for {0} ({1}) copyCourseAndCompetitors=Copy course and competitors to other races +setTrackingTimes=Set tracking times nowSelectRaceColumnAndFleetToCopyTo=Now select the race column and fleet to copy the course to. selectRowInTableToCopyCourse=Select a single row in the table, to which to copy the course. deviceId=Device ID @@ -1323,6 +1327,9 @@ noFinishedRaces=There are no finished races yet racesOverview=Races overview empty=Empty runAQuery=Run a Query +latestRegattaStandings=Latest Regatta Standings plainText=Plain Text columnChart=Column Chart choosePresentation=Choose Presentation +openFullscreenView=Open fullscreen view +closeFullscreenView=Close fullscreen view \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index 9a1df47b95a..6237342cd5f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -102,6 +102,8 @@ regattaName=Name der Regatta eventName=Event-Name event=Rennen startTime=Startzeit +startOfTracking=Startzeit, die wo vom Tracking ist +endOfTrackings=Ende des Trackings regatta=Regatta regattas=Regatten startTracking=Tracking starten @@ -992,6 +994,7 @@ pleaseEnterA=Bitte {0} eingeben. pingPosition={0}-Position pingen pleaseEnterAValidValueFor=Bitte geben Sie für {0} einen gültigen Wert ein ({1}) copyCourseAndCompetitors=Kurs und Teams in andere Rennen kopieren +setTrackingTimes=Tracking-Interval setzen nowSelectRaceColumnAndFleetToCopyTo=Bitte wählen Sie nun die Renn-Spalte und Flotte zum Kopieren des Kurses aus. selectRowInTableToCopyCourse=Bitte selektieren Sie eine einzelne Zeile der Tabelle, um den Kurs dorthin zu kopieren. deviceId=Geräte ID @@ -1313,6 +1316,9 @@ noFinishedRaces=Es wurden noch keine Wettfahrten beendet. racesOverview=Wettfahrtübersicht empty=Leer runAQuery=Führe eine Anfrage aus +latestRegattaStandings=Aktuelle Plazierungen plainText=Einfacher Text columnChart=Säulendiagramm -choosePresentation=Wähle Präsentation \ No newline at end of file +choosePresentation=Wähle Präsentation +openFullscreenView=Vollbildansicht öffnen +closeFullscreenView=Vollbildansicht schließen \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties old mode 100644 new mode 100755 index e26978d0580..d6ca28ff43c --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties @@ -1254,12 +1254,18 @@ points=Points numberOfRacesShort=# Races courseGeometry=Course Geometry degreesToWind={0}° to wind +setTrackingTimes=Set tracking times +startOfTracking=Start of tracking +endOfTracking=End of tracking miniLeeaderboardLegendText=Shows points along with the number of races per competitor currentOfTotal={0,number}/{1,number} noFinishedRaces=There are no finished races yet racesOverview=Races overview empty=Empty runAQuery=Run a Query +latestRegattaStandings=Latest Regatta Standings plainText=Plain Text columnChart=Column Chart -choosePresentation=Choose Presentation \ No newline at end of file +choosePresentation=Choose Presentation +openFullscreenView=Open fullscreen view +closeFullscreenView=Close fullscreen view \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties index 8843bfaae60..be44f19de8b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties @@ -263,6 +263,8 @@ explainReplicationExchangeName=The name of the exchange queue. It must be the sa tack=迎风转向 golfRemoved=Flag removed - gate is closed startTime=起航时间 +startOfTracking=Start of tracking +endOfTracking=End of tracking rightWind=右侧风 scoringSchemeHighPointFirstGetsTen=High Point, winner gets 10 points raceDistanceTraveledTooltip=本轮次起航后到目前时间位置的航行距离 @@ -419,6 +421,7 @@ racesScoredTooltip=参赛队完成并记录在积分榜上的比赛轮次 noOverallEventSelected=No overall event selected... sailNumber=帆号 copyCourseAndCompetitors=Copy course and competitors to other races +setTrackingTimes=Set tracking times showUncorrectedNetPoints=Show uncorrected net points raceIsInLiveTimePanelMode=Race is Live removeSuppressedPassing=Remove suppressed mark passing @@ -1304,4 +1307,7 @@ degreesToWind={0}° to wind miniLeeaderboardLegendText=Shows points along with the number of races per competitor currentOfTotal={0,number}/{1,number} noFinishedRaces=There are no finished races yet -racesOverview=Races overview \ No newline at end of file +racesOverview=Races overview +latestRegattaStandings=Latest Regatta Standings +openFullscreenView=Open fullscreen view +closeFullscreenView=Close fullscreen view \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java index b3f560ae8e8..3f4e6aa9e19 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java @@ -537,7 +537,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS })); } - void setRaceColumnSelectionToLastNStrategy(final Integer numberOfLastRacesToShow) { + public void setRaceColumnSelectionToLastNStrategy(final Integer numberOfLastRacesToShow) { raceColumnSelection = new LastNRacesColumnSelection(numberOfLastRacesToShow, getRaceTimesInfoProvider()); if (timer.getPlayState() != Timer.PlayStates.Playing) { // wait for the first update and adjust leaderboard once the race times have been received @@ -3019,7 +3019,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS return new CarryColumn(); } - protected SortedCellTable getLeaderboardTable() { + public SortedCellTable getLeaderboardTable() { return leaderboardTable; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 0d167853d33..e7de038a468 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -61,6 +61,7 @@ import com.sap.sailing.domain.abstractlog.AbstractLog; import com.sap.sailing.domain.abstractlog.AbstractLogEvent; import com.sap.sailing.domain.abstractlog.MultiLogAnalyzer; import com.sap.sailing.domain.abstractlog.impl.AllEventsOfTypeFinder; +import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl; import com.sap.sailing.domain.abstractlog.race.RaceLog; import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory; @@ -70,6 +71,7 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEven import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AbortingFlagFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastPublishedCourseDesignFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.MarkPassingDataFinder; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.TrackingTimesFinder; import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFixedMarkPassingEventImpl; import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState; import com.sap.sailing.domain.abstractlog.race.state.impl.ReadonlyRaceStateImpl; @@ -277,6 +279,7 @@ import com.sap.sailing.domain.tractracadapter.TracTracAdapter; import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory; import com.sap.sailing.domain.tractracadapter.TracTracConfiguration; import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants; +import com.sap.sailing.gwt.ui.adminconsole.RaceLogSetTrackingTimesDTO; import com.sap.sailing.gwt.ui.client.SailingService; import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO; import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO; @@ -4755,6 +4758,29 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return new MillisecondsTimePoint(dto.startTime).equals(newStartTime); } + @Override + public void setTrackingTimes(RaceLogSetTrackingTimesDTO dto) { + RaceLog raceLog = getRaceLog(dto.leaderboardName, dto.raceColumnName, dto.fleetName); + // TODO If new is null and current is not, current should be revoked. + if (!Util.equalsWithNull(dto.newStartOfTracking, dto.currentStartOfTracking)) { + raceLog.add(RaceLogEventFactory.INSTANCE.createStartOfTrackingEvent( + dto.newStartOfTracking, new LogEventAuthorImpl(dto.authorName, dto.authorPriority), UUID + .randomUUID(), new ArrayList(), raceLog.getCurrentPassId())); + } + if (!Util.equalsWithNull(dto.newEndOfTracking, dto.currentEndOfTracking)) { + raceLog.add(RaceLogEventFactory.INSTANCE.createEndOfTrackingEvent( + dto.newEndOfTracking, new LogEventAuthorImpl(dto.authorName, dto.authorPriority), UUID + .randomUUID(), new ArrayList(), raceLog.getCurrentPassId())); + } + } + + @Override + public Util.Pair getTrackingTimes(String leaderboardName, String raceColumnName, String fleetName) { + final RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); + final Pair times = new TrackingTimesFinder(raceLog).analyze(); + return new Pair(times.getA(), times.getB()); + } + @Override public com.sap.sse.common.Util.Triple getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName) { com.sap.sse.common.Util.Triple result = getService().getStartTimeAndProcedure(leaderboardName, raceColumnName, fleetName); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/dispatch/DispatchRPCImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/dispatch/DispatchRPCImpl.java index 35a4952ffb5..63f9f1de4fb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/dispatch/DispatchRPCImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/dispatch/DispatchRPCImpl.java @@ -40,10 +40,11 @@ public class DispatchRPCImpl extends ProxiedRemoteServiceServlet implements Disp A action = request.getAction(); long start = System.currentTimeMillis(); try { + R executionResult = action.execute( new DispatchContextImpl(request.getCurrentClientTime(), racingEventServiceTracker.getService(), eventNewsServiceTracker.getService(), request - .getClientLocaleName())); + .getClientLocaleName(), getThreadLocalRequest())); return new ResultWrapper(executionResult); } catch (DispatchException d) { logger.log(Level.WARNING, "Server exception", d); @@ -66,4 +67,9 @@ public class DispatchRPCImpl extends ProxiedRemoteServiceServlet implements Disp } } + @Override + protected void doUnexpectedFailure(Throwable e) { + logger.log(Level.WARNING, "GWT RPC Exception: " + e.getMessage(), e); + super.doUnexpectedFailure(e); + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/Action.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/Action.java index aa577ee0d87..606e22bc064 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/Action.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/Action.java @@ -6,6 +6,6 @@ import com.google.gwt.user.client.rpc.IsSerializable; public interface Action extends IsSerializable { @GwtIncompatible - R execute(DispatchContext ctx) throws DispatchException; + R execute(DispatchContext ctx) throws Exception; } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContext.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContext.java index ae000b8a3cb..365a4849e0c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContext.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContext.java @@ -3,6 +3,8 @@ package com.sap.sailing.gwt.ui.shared.dispatch; import java.util.Date; import java.util.Locale; +import javax.servlet.http.HttpServletRequest; + import com.sap.sailing.news.EventNewsService; import com.sap.sailing.server.RacingEventService; @@ -18,4 +20,6 @@ public interface DispatchContext { Locale getClientLocale(); Date getCurrentClientTime(); + + HttpServletRequest getRequest(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContextImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContextImpl.java index 253c37a7a53..ad2a06c5611 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContextImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContextImpl.java @@ -3,6 +3,8 @@ package com.sap.sailing.gwt.ui.shared.dispatch; import java.util.Date; import java.util.Locale; +import javax.servlet.http.HttpServletRequest; + import com.google.gwt.core.shared.GwtIncompatible; import com.sap.sailing.news.EventNewsService; import com.sap.sailing.server.RacingEventService; @@ -14,12 +16,14 @@ public class DispatchContextImpl implements DispatchContext { private final Date currentClientTime; // private final Date currentServerTime = new Date(); private String clientLocaleName; + private final HttpServletRequest request; - public DispatchContextImpl(Date currentClientTime, RacingEventService racingEventService, EventNewsService eventNewsService, String clientLocaleName) { + public DispatchContextImpl(Date currentClientTime, RacingEventService racingEventService, EventNewsService eventNewsService, String clientLocaleName, HttpServletRequest request) { this.currentClientTime = currentClientTime; this.racingEventService = racingEventService; this.eventNewsService = eventNewsService; this.clientLocaleName = clientLocaleName; + this.request = request; } @Override @@ -49,4 +53,9 @@ public class DispatchContextImpl implements DispatchContext { public Locale getClientLocale() { return Locale.forLanguageTag(clientLocaleName); } + + @Override + public HttpServletRequest getRequest() { + return request; + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/ListResult.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/ListResult.java index 6df09bc8878..80d26721393 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/ListResult.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/ListResult.java @@ -6,8 +6,7 @@ import java.util.List; public class ListResult implements CollectionResult { private ArrayList values = new ArrayList<>(); - @SuppressWarnings("unused") - private ListResult() { + public ListResult() { } public ListResult(List values) { @@ -15,7 +14,17 @@ public class ListResult implements CollectionResult { this.values.addAll(values); } + public void addValue(T value) { + if (value != null) { + this.values.add(value); + } + } + public List getValues() { return values; } + + public boolean isEmpty() { + return values.isEmpty(); + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java index 31c7fd0f8cd..bcbd0921395 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java @@ -19,8 +19,8 @@ import com.sap.sse.common.media.MediaTagConstants; import com.sap.sse.common.media.VideoDescriptor; public class GetEventOverviewStageAction implements Action> { - private static final Collection rankedTags = Arrays.asList(MediaTagConstants.LIVESTREAM, MediaTagConstants.FEATURED, MediaTagConstants.HIGHLIGHT); - private static final Collection rankedTagsFinished = Arrays.asList(MediaTagConstants.FEATURED, MediaTagConstants.HIGHLIGHT); + private static final Collection rankedTags = Arrays.asList(MediaTagConstants.STAGE, MediaTagConstants.LIVESTREAM, MediaTagConstants.FEATURED, MediaTagConstants.HIGHLIGHT); + private static final Collection rankedTagsFinished = Arrays.asList(MediaTagConstants.STAGE, MediaTagConstants.FEATURED, MediaTagConstants.HIGHLIGHT); private UUID eventId; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/RaceContext.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/RaceContext.java index ecf8050f2b3..2a5a788a6d9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/RaceContext.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/RaceContext.java @@ -93,7 +93,7 @@ public class RaceContext { this.fleet = fleet; trackedRace = raceColumn.getTrackedRace(fleet); raceLog = raceColumn.getRaceLog(fleet); - state = ReadonlyRaceStateImpl.create(raceLogResolver, raceLog); + state = (raceLog == null) ? null : ReadonlyRaceStateImpl.create(raceLogResolver, raceLog); } private boolean isShowFleetData() { @@ -220,6 +220,9 @@ public class RaceContext { } private FlagStateDTO getFlagStateOrNull() { + if(raceLog == null) { + return null; + } // Code extracted from SailingServiceImpl.createRaceInfoDTO // TODO: extract to to util to be used from both places TimePoint startTime = state.getStartTime(); @@ -294,6 +297,9 @@ public class RaceContext { } private String getCourseNameOrNull() { + if(state == null) { + return null; + } CourseBase lastCourse = state.getCourseDesign(); if (lastCourse != null) { return lastCourse.getName(); @@ -532,6 +538,9 @@ public class RaceContext { } private Wind checkForWindFixesFromRaceLog() { + if(raceLog == null) { + return null; + } WindFixesFinder windFixesFinder = new WindFixesFinder(raceLog); List windList = windFixesFinder.analyze(); if (windList.size() > 0) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/regatta/RegattaProgressSeriesDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/regatta/RegattaProgressSeriesDTO.java index aa4fa6f57a2..3b24e905f18 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/regatta/RegattaProgressSeriesDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/regatta/RegattaProgressSeriesDTO.java @@ -36,6 +36,15 @@ public class RegattaProgressSeriesDTO implements DTO { fleetState.put(fleet, stats); } + public String[] getFleetNames() { + String[] fleetNames = new String[fleetState.size()]; + int i = 0; + for (FleetMetadataDTO fleet : fleetState.keySet()) { + fleetNames[i++] = fleet.getFleetName(); + } + return fleetNames; + } + public boolean isCompleted() { for (RegattaProgressFleetDTO stats : fleetState.values()) { if (stats.getFinishedRaceCount() < totalRaceCount) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/EventQuickfinderDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/EventQuickfinderDTO.java new file mode 100644 index 00000000000..803ffe1bd87 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/EventQuickfinderDTO.java @@ -0,0 +1,64 @@ +package com.sap.sailing.gwt.ui.shared.dispatch.start; + +import com.sap.sailing.gwt.ui.shared.dispatch.DTO; +import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO; +import com.sap.sailing.gwt.ui.shared.general.EventState; +import com.sap.sse.common.TimePoint; + +public class EventQuickfinderDTO extends EventReferenceDTO implements DTO, Comparable { + private String baseURL; + private boolean isOnRemoteServer; + private TimePoint startTimePoint; + private EventState state; + + public String getBaseURL() { + return baseURL; + } + + public void setBaseURL(String baseURL) { + this.baseURL = baseURL; + } + + public boolean isOnRemoteServer() { + return isOnRemoteServer; + } + + public void setOnRemoteServer(boolean isOnRemoteServer) { + this.isOnRemoteServer = isOnRemoteServer; + } + + public TimePoint getStartTimePoint() { + return startTimePoint; + } + + public void setStartTimePoint(TimePoint startTimePoint) { + this.startTimePoint = startTimePoint; + } + + public EventState getState() { + return state; + } + + public void setState(EventState state) { + this.state = state; + } + + @Override + public int compareTo(EventQuickfinderDTO o) { + if(state != o.state) { + if(state == EventState.RUNNING) { + return -1; + } + if(o.state == EventState.RUNNING) { + return 1; + } + if(state == EventState.UPCOMING || state == EventState.PLANNED) { + return -1; + } + if(o.state == EventState.UPCOMING || o.state == EventState.PLANNED) { + return 1; + } + } + return -startTimePoint.compareTo(o.startTimePoint); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/GetRecentEventsAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/GetRecentEventsAction.java new file mode 100644 index 00000000000..6fdd73eec8b --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/GetRecentEventsAction.java @@ -0,0 +1,55 @@ +package com.sap.sailing.gwt.ui.shared.dispatch.start; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.UUID; + +import com.google.gwt.core.shared.GwtIncompatible; +import com.sap.sailing.domain.base.EventBase; +import com.sap.sailing.gwt.server.HomeServiceUtil; +import com.sap.sailing.gwt.server.HomeServiceUtil.EventVisitor; +import com.sap.sailing.gwt.ui.shared.dispatch.Action; +import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext; +import com.sap.sailing.gwt.ui.shared.dispatch.ListResult; + +public class GetRecentEventsAction implements Action> { + + private int limit; + + protected GetRecentEventsAction() { + } + + public GetRecentEventsAction(int limit) { + this.limit = limit; + } + + @GwtIncompatible + public ListResult execute(final DispatchContext context) throws MalformedURLException { + final SortedSet events = new TreeSet<>(); + HomeServiceUtil.forAllPublicEvents(context.getRacingEventService(), context.getRequest(), new EventVisitor() { + @Override + public void visit(EventBase event, boolean onRemoteServer, URL baseURL) { + EventQuickfinderDTO dto = new EventQuickfinderDTO(); + dto.setId((UUID) event.getId()); + dto.setDisplayName(HomeServiceUtil.getEventDisplayName(event, context.getRacingEventService())); + dto.setOnRemoteServer(onRemoteServer); + dto.setBaseURL(baseURL == null ? null : baseURL.toString()); + dto.setStartTimePoint(event.getStartDate()); + dto.setState(HomeServiceUtil.calculateEventState(event)); + events.add(dto); + } + }); + ListResult result = new ListResult<>(); + int count = 0; + for (EventQuickfinderDTO event : events) { + result.addValue(event); + count++; + if(limit > 0 && count >= limit) { + break; + } + } + return result; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/GetStagedEventsAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/GetStagedEventsAction.java new file mode 100644 index 00000000000..0f69c06dbef --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/start/GetStagedEventsAction.java @@ -0,0 +1,49 @@ +package com.sap.sailing.gwt.ui.shared.dispatch.start; + +import java.net.MalformedURLException; + +import com.google.gwt.core.shared.GwtIncompatible; +import com.sap.sailing.gwt.server.EventHolder; +import com.sap.sailing.gwt.server.EventStageCandidateCalculator; +import com.sap.sailing.gwt.server.HomeServiceImpl; +import com.sap.sailing.gwt.server.HomeServiceUtil; +import com.sap.sailing.gwt.ui.shared.dispatch.Action; +import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext; +import com.sap.sailing.gwt.ui.shared.dispatch.ListResult; +import com.sap.sailing.gwt.ui.shared.start.EventStageDTO; +import com.sap.sailing.gwt.ui.shared.start.StageEventType; +import com.sap.sse.common.Util.Pair; + +public class GetStagedEventsAction implements Action> { + + private boolean useTeaserImage; + + protected GetStagedEventsAction() { + } + + public GetStagedEventsAction(boolean useTeaserImage) { + this.useTeaserImage = useTeaserImage; + } + + @GwtIncompatible + public ListResult execute(final DispatchContext context) throws MalformedURLException { + EventStageCandidateCalculator stageCandidateCalculator = new EventStageCandidateCalculator(); + + HomeServiceUtil.forAllPublicEvents(context.getRacingEventService(), context.getRequest(), stageCandidateCalculator); + + ListResult result = new ListResult<>(); + + int count = 0; + for(Pair pair : stageCandidateCalculator.getFeaturedEvents()) { + count++; + if(count > HomeServiceImpl.MAX_STAGE_EVENTS) { + break; + } + + StageEventType stageType = pair.getA(); + EventHolder holder = pair.getB(); + result.addValue(HomeServiceUtil.convertToEventStageDTO(holder.event, holder.baseURL, holder.onRemoteServer, stageType, context.getRacingEventService(), useTeaserImage)); + } + return result; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/general/EventReferenceDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/general/EventReferenceDTO.java index 40b5e41ddeb..ada6194da68 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/general/EventReferenceDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/general/EventReferenceDTO.java @@ -3,10 +3,10 @@ package com.sap.sailing.gwt.ui.shared.general; import java.util.UUID; import com.google.gwt.core.shared.GwtIncompatible; -import com.google.gwt.user.client.rpc.IsSerializable; import com.sap.sailing.domain.base.EventBase; +import com.sap.sailing.gwt.ui.shared.dispatch.DTO; -public class EventReferenceDTO implements IsSerializable { +public class EventReferenceDTO implements DTO { private UUID id; private String displayName; public EventReferenceDTO() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/media/MediaConstants.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/media/MediaConstants.java index 402fb961100..821118d5605 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/media/MediaConstants.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/media/MediaConstants.java @@ -12,7 +12,7 @@ public final class MediaConstants { public static final List imageTagSuggestions = Arrays.asList(new String[] { MediaTagConstants.STAGE, MediaTagConstants.TEASER, MediaTagConstants.SPONSOR, MediaTagConstants.LOGO, MediaTagConstants.GALLERY }); - public static final List videoTagSuggestions = Arrays.asList(new String[] { MediaTagConstants.LIVESTREAM, MediaTagConstants.HIGHLIGHT,MediaTagConstants.FEATURED }); + public static final List videoTagSuggestions = Arrays.asList(new String[] { MediaTagConstants.LIVESTREAM, MediaTagConstants.HIGHLIGHT, MediaTagConstants.FEATURED, MediaTagConstants.STAGE }); public static final Set SUPPORTED_VIDEO_TYPES = new HashSet<>(Arrays.asList(MimeType.youtube, MimeType.vimeo, MimeType.mp4)); private MediaConstants() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/client/images/set_tracking_times.png b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/client/images/set_tracking_times.png new file mode 100644 index 00000000000..265fad660d1 Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/client/images/set_tracking_times.png differ diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateEventNewsProvider.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateEventNewsProvider.java index a23e0dba314..0c55fbdde67 100644 --- a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateEventNewsProvider.java +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateEventNewsProvider.java @@ -7,7 +7,9 @@ import java.util.LinkedList; import java.util.List; import com.sap.sailing.domain.base.BoatClass; +import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.Event; +import com.sap.sailing.domain.base.EventBase; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; @@ -29,6 +31,9 @@ public class LeaderboardUpdateEventNewsProvider implements EventNewsProvider { Iterable leaderboardGroups = event.getLeaderboardGroups(); for(LeaderboardGroup leaderboardGroup: leaderboardGroups) { for(Leaderboard leaderboard: leaderboardGroup.getLeaderboards()) { + if(!isPartOfEvent(event, leaderboard)) { + continue; + } SettableScoreCorrection scoreCorrection = leaderboard.getScoreCorrection(); if(scoreCorrection != null) { TimePoint timePointOfLatestModification = scoreCorrection.getTimePointOfLastCorrectionsValidity(); @@ -54,6 +59,20 @@ public class LeaderboardUpdateEventNewsProvider implements EventNewsProvider { } return result.subList(0, 11); } + + // TODO duplicate code taken from HomeServiceUtil + private boolean isPartOfEvent(EventBase event, Leaderboard regattaEntity) { + final CourseArea defaultCourseArea = regattaEntity.getDefaultCourseArea(); + if(defaultCourseArea == null) { + return true; + } + for (CourseArea courseArea : event.getVenue().getCourseAreas()) { + if(courseArea.equals(defaultCourseArea)) { + return true; + } + } + return false; + } @Override public Collection getNews(Event event, Date startingFrom) { diff --git a/java/com.sap.sailing.nmeaconnector.test/.classpath b/java/com.sap.sailing.nmeaconnector.test/.classpath deleted file mode 100644 index 110168ffa19..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/java/com.sap.sailing.nmeaconnector.test/.project b/java/com.sap.sailing.nmeaconnector.test/.project deleted file mode 100755 index 3a94467be6f..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - com.sap.sailing.nmeaconnector.test - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/java/com.sap.sailing.nmeaconnector.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.nmeaconnector.test/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index a698e59674f..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,12 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.nmeaconnector.test/.settings/org.eclipse.pde.core.prefs b/java/com.sap.sailing.nmeaconnector.test/.settings/org.eclipse.pde.core.prefs deleted file mode 100755 index b7e72d019c2..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -pluginProject.extensions=false -resolve.requirebundle=false diff --git a/java/com.sap.sailing.nmeaconnector.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.nmeaconnector.test/META-INF/MANIFEST.MF deleted file mode 100644 index dae6f2ce622..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/META-INF/MANIFEST.MF +++ /dev/null @@ -1,16 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.sap.sailing.nmeaconnector.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Fragment-Host: com.sap.sailing.nmeaconnector -Bundle-ActivationPolicy: lazy -Require-Bundle: org.junit4;bundle-version="4.8.2", - com.sap.sailing.domain, - com.sap.sailing.domain.common, - net.sf.marineapi;bundle-version="0.5.0", - com.sap.sse.common, - routeconverter;bundle-version="2.8.0" -Bundle-ClassPath: . diff --git a/java/com.sap.sailing.nmeaconnector.test/build.properties b/java/com.sap.sailing.nmeaconnector.test/build.properties deleted file mode 100755 index a2e16dfebcd..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -source.. = src/,\ - resources/ -output.. = bin/ -bin.includes = META-INF/,\ - . diff --git a/java/com.sap.sailing.nmeaconnector.test/pom.xml b/java/com.sap.sailing.nmeaconnector.test/pom.xml deleted file mode 100644 index 99ef3eea40b..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/pom.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - 4.0.0 - - root - com.sap.sailing - 1.0.0-SNAPSHOT - - com.sap.sailing.nmeaconnector.test - eclipse-test-plugin - diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/20121219114023.gpx b/java/com.sap.sailing.nmeaconnector.test/resources/20121219114023.gpx deleted file mode 100755 index 89fddfa266d..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/20121219114023.gpx +++ /dev/null @@ -1,490 +0,0 @@ -56.70000076293945203.10.751.6970562gps10 -56.400001525878906340.30.751.6970562gps10 -52.5331.14.01.0gps11 -51.70000076293945330.54.01.0gps11 -50.099998474121094337.33.750.7211102gps11 -49.2000007629394526.74.50.7211102gps12 -48.59999847412109454.14.750.7211102gps12 -48.59999847412109466.95.750.7211102gps11 -46.40000152587890670.35.50.5656854gps12 -44.581.35.00.8485281gps12 -43.90000152587890656.64.00.8485281gps12 -43.700000762939452.22.50.7211102gps12 -42.29999923706055345.20.50.5656854gps12 -41.79999923706055345.20.00.5656854gps12 -41.79999923706055345.20.250.5656854gps12 -42.400001525878906313.81.00.5656854gps12 -42.79999923706055278.11.750.5656854gps12 -42.20000076293945231.92.750.5656854gps12 -42.20000076293945193.22.750.5656854gps12 -41.70000076293945151.02.50.5656854gps12 -41.79999923706055116.81.750.5656854gps12 -42.087.71.50.5656854gps12 -42.09999847412109486.60.750.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.09999847412109486.60.00.7211102gps12 -41.7999992370605586.60.00.8944272gps12 -41.90000152587890686.60.00.8944272gps12 -42.2000007629394586.60.00.8944272gps12 -42.2000007629394586.60.00.8944272gps12 -42.2000007629394586.60.00.7211102gps12 -42.2000007629394586.60.00.7211102gps11 -42.2000007629394586.60.00.7211102gps11 -42.2000007629394586.60.00.7211102gps11 -42.2000007629394586.60.00.7211102gps12 -42.2000007629394586.60.01.0gps11 -42.2000007629394586.60.01.0gps11 -42.2000007629394586.60.01.0gps11 -42.2000007629394586.60.01.0gps11 -42.2000007629394586.60.00.7211102gps11 -42.2000007629394586.60.00.7211102gps11 -42.2000007629394586.60.00.7211102gps12 -42.2000007629394586.60.00.7211102gps11 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps7 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps12 -42.2000007629394586.60.00.5656854gps11 -42.2000007629394586.60.00.5656854gps11 -42.09999847412109486.60.00.5656854gps11 -42.09999847412109486.60.00.5656854gps11 -42.09999847412109486.60.00.5656854gps11 -42.09999847412109486.60.00.5656854gps6 -42.09999847412109486.60.00.5656854gps12 -42.09999847412109486.60.00.5656854gps12 -42.09999847412109486.60.00.5656854gps12 -42.09999847412109486.60.00.5656854gps12 -42.09999847412109486.60.00.5656854gps8 -42.09999847412109486.60.00.5656854gps12 -42.09999847412109486.60.00.5656854gps12 -42.09999847412109486.60.00.5656854gps12 -42.09999847412109486.60.00.5656854gps12 -42.2999992370605586.60.00.5656854gps8 -42.586.60.00.5656854gps11 -42.09999847412109445.61.00.5656854gps11 -41.799999237060557.61.50.5656854gps12 -41.70000076293945357.51.750.5656854gps12 -41.50.00.01.0gps4 -41.50.00.01.0gps12 -41.4000015258789060.00.01.0gps12 -41.299999237060550.00.01.3416407gps12 -41.4000015258789060.00.02.529822gps12 -41.4000015258789060.00.02.529822gps12 -41.4000015258789060.00.03.2984843gps12 -41.799999237060550.00.01.3416407gps12 -41.700000762939450.00.00.8944272gps12 -41.700000762939450.00.00.7211102gps12 -41.700000762939450.00.00.7211102gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps6 -41.700000762939450.00.00.5656854gps11 -41.700000762939450.00.00.5656854gps11 -41.700000762939450.00.00.5656854gps11 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.700000762939450.00.00.5656854gps12 -41.70000076293945351.43.00.5656854gps12 -42.0350.96.00.5656854gps12 -42.5351.17.00.5656854gps12 -42.79999923706055351.88.00.5656854gps12 -42.599998474121094352.07.50.5656854gps12 -42.599998474121094351.97.250.5656854gps12 -42.70000076293945351.97.250.5656854gps12 -42.79999923706055352.17.250.5656854gps12 -42.79999923706055352.27.250.5656854gps12 -42.900001525878906352.17.750.5656854gps12 -42.599998474121094352.47.250.5656854gps12 -42.599998474121094351.85.750.5656854gps12 -42.29999923706055327.33.50.5656854gps12 -41.79999923706055307.53.250.5656854gps12 -41.70000076293945253.72.750.5656854gps12 -41.5244.41.250.5656854gps12 -41.099998474121094244.40.00.5656854gps12 -41.2000007629394584.50.750.5656854gps12 -41.073.01.00.5656854gps12 -41.09999847412109446.20.750.5656854gps12 -41.037.80.750.5656854gps11 -41.09999847412109437.80.00.5656854gps11 -41.2000007629394537.80.750.5656854gps12 -41.099998474121094127.31.50.5656854gps12 -41.09999847412109474.21.50.5656854gps12 -40.900001525878906146.81.750.5656854gps12 -40.29999923706055183.91.00.5656854gps12 -40.29999923706055183.90.50.5656854gps12 -40.20000076293945355.61.250.5656854gps11 -40.29999923706055357.20.00.5656854gps11 -40.400001525878906357.20.00.5656854gps12 -40.5357.20.00.5656854gps12 -40.5357.20.00.5656854gps12 -40.5357.20.00.5656854gps11 -40.5357.20.00.5656854gps11 -40.5357.20.00.5656854gps12 -40.5357.20.00.5656854gps12 -40.5357.20.250.5656854gps12 -40.5173.35.00.5656854gps7 -40.20000076293945172.27.00.5656854gps12 -40.29999923706055171.68.00.5656854gps12 -40.29999923706055171.48.250.5656854gps12 -39.900001525878906171.88.00.5656854gps12 -40.0172.08.00.5656854gps12 -40.20000076293945171.58.00.5656854gps8 -39.900001525878906171.38.00.5656854gps11 -39.70000076293945171.68.00.5656854gps12 -39.900001525878906172.18.00.5656854gps12 -40.0171.37.250.5656854gps12 -41.20000076293945170.30.250.5656854gps6 -40.70000076293945170.30.00.5656854gps12 -40.79999923706055170.30.250.5656854gps12 -41.20000076293945200.02.00.5656854gps12 -41.599998474121094216.83.00.5656854gps12 -41.599998474121094156.22.750.5656854gps12 -40.90000152587890664.22.50.5656854gps12 -40.799999237060554.22.50.5656854gps12 -40.20000076293945327.62.00.5656854gps12 -40.0337.91.250.5656854gps12 -39.900001525878906337.90.00.5656854gps12 -39.900001525878906337.90.750.5656854gps12 -39.20000076293945352.20.50.5656854gps12 -39.29999923706055347.95.250.5656854gps12 -39.20000076293945349.710.750.5656854gps12 -39.29999923706055350.811.250.5656854gps12 -39.20000076293945351.111.250.5656854gps12 -39.20000076293945351.311.00.5656854gps12 -39.20000076293945351.710.750.5656854gps12 -39.70000076293945352.310.750.5656854gps9 -39.79999923706055352.36.50.5656854gps11 -39.900001525878906327.53.750.5656854gps12 -40.0284.63.00.5656854gps12 -40.70000076293945233.92.50.5656854gps12 -40.29999923706055225.20.00.5656854gps12 -40.40000152587890672.91.00.5656854gps12 -40.40000152587890645.71.00.5656854gps12 -40.40000152587890636.60.50.5656854gps12 -40.7999992370605536.60.250.5656854gps12 -41.099998474121094136.11.50.5656854gps12 -39.900001525878906174.51.750.5656854gps8 -39.79999923706055350.71.50.5656854gps10 -39.900001525878906359.31.50.5656854gps12 -40.0356.10.00.5656854gps6 -40.0356.10.00.5656854gps12 -40.099998474121094356.10.00.5656854gps12 -40.0356.10.00.5656854gps12 -40.099998474121094356.10.00.5656854gps12 -40.0356.10.00.5656854gps12 -40.0356.10.00.5656854gps12 -40.0356.10.00.5656854gps12 -40.0356.10.00.5656854gps10 -40.0356.10.00.5656854gps12 -24.700000762939453168.711.52.0gps6 -37.20000076293945142.85.751.3416407gps12 -40.0195.31.1180341.0gps12 -41.20000076293945236.21.250.5656854gps12 -39.0236.20.50.5656854gps11 -42.599998474121094348.10.50.5656854gps8 -41.20000076293945348.10.00.5656854gps4 -40.70000076293945348.10.00.5656854gps12 -41.0348.10.00.5656854gps4 -41.0348.10.00.5656854gps12 -41.0348.10.01.7888544gps6 -41.099998474121094347.43.751.0gps12 -38.599998474121094348.05.250.5656854gps12 -40.099998474121094176.71.01.6970562gps12 -40.400001525878906342.90.251.0gps12 -40.5348.04.51.6970562gps12 -40.599998474121094348.69.251.0gps12 -41.5349.610.250.7211102gps12 -41.099998474121094351.510.750.5656854gps12 -40.900001525878906351.810.750.5656854gps12 -40.900001525878906352.010.750.5656854gps12 -41.0352.310.750.5656854gps12 -41.099998474121094352.010.750.5656854gps12 -41.400001525878906352.110.50.5656854gps12 -41.20000076293945352.87.00.5656854gps12 -41.20000076293945355.04.00.5656854gps12 -41.29999923706055353.22.250.5656854gps12 -41.400001525878906345.12.250.5656854gps6 -40.900001525878906349.42.250.5656854gps12 -40.599998474121094313.32.00.5656854gps12 -40.0306.31.00.5656854gps12 -40.5306.30.00.5656854gps12 -40.900001525878906306.30.00.5656854gps12 -41.099998474121094306.30.00.5656854gps12 -41.0306.30.00.5656854gps12 -41.29999923706055306.30.250.5656854gps12 -41.29999923706055306.30.750.5656854gps12 -41.0197.90.00.5656854gps1 -41.036.40.750.7211102gps12 -41.2000007629394534.30.250.5656854gps12 -41.2000007629394534.30.250.5656854gps12 -41.70000076293945137.51.250.5656854gps12 -41.599998474121094105.21.250.5656854gps12 -41.7000007629394589.81.250.5656854gps12 -40.79999923706055104.00.50.5656854gps12 -40.70000076293945140.00.750.5656854gps12 -40.599998474121094177.51.50.5656854gps12 -40.400001525878906185.50.00.5656854gps12 -40.59.31.00.5656854gps5 -40.09999847412109418.00.00.5656854gps11 -39.90000152587890618.00.00.5656854gps11 -39.90000152587890618.00.00.5656854gps11 -39.400001525878906171.89.750.5656854gps8 -39.29999923706055171.611.00.5656854gps12 -39.20000076293945172.111.00.5656854gps12 -40.099998474121094171.910.750.5656854gps12 -40.599998474121094172.010.750.5656854gps12 -40.400001525878906172.110.750.5656854gps12 -40.70000076293945171.710.750.5656854gps12 -40.5171.710.750.5656854gps12 -40.20000076293945192.84.250.5656854gps12 -40.20000076293945155.02.750.5656854gps12 -40.40000152587890665.02.50.5656854gps12 -40.7999992370605515.11.50.5656854gps12 -41.2999992370605515.10.250.5656854gps12 -41.400001525878906217.11.250.5656854gps12 -41.29999923706055217.10.00.5656854gps12 -41.20000076293945217.10.50.5656854gps12 -41.0340.61.50.5656854gps12 -40.79999923706055339.80.00.5656854gps12 -40.900001525878906339.80.00.7211102gps12 -41.0339.80.01.0gps12 -40.599998474121094339.80.01.0gps5 -40.599998474121094339.80.01.0gps12 -40.599998474121094339.80.00.8485281gps6 -40.599998474121094339.80.01.0gps12 -40.599998474121094339.80.01.0gps12 -40.599998474121094339.80.01.0gps12 -40.599998474121094339.80.01.0gps12 -40.599998474121094339.80.01.0gps12 -40.599998474121094339.80.01.0gps12 -40.599998474121094339.80.01.0gps12 -40.599998474121094339.80.01.3416407gps12 -40.599998474121094339.80.01.4422204gps12 -40.599998474121094339.80.251.4422204gps12 -42.20000076293945344.04.751.0gps12 -41.099998474121094344.97.251.0gps11 -38.29999923706055351.69.50.7211102gps12 -39.0351.510.00.7211102gps12 -40.5351.710.250.5656854gps12 -41.0352.110.50.5656854gps12 -37.70000076293945333.45.01.7888544gps5 -41.20000076293945284.61.50.7211102gps12 -40.400001525878906284.60.00.5656854gps12 -39.085.81.00.5656854gps12 -39.066.31.00.5656854gps12 -39.2000007629394566.30.50.5656854gps12 -38.59999847412109466.30.00.5656854gps12 -38.7000007629394566.30.750.5656854gps12 -39.0147.71.00.5656854gps12 -38.599998474121094147.70.50.5656854gps6 -38.29999923706055147.70.50.5656854gps12 -37.70000076293945104.11.50.5656854gps12 -37.900001525878906135.61.50.5656854gps12 -37.599998474121094169.91.50.5656854gps12 -38.29999923706055185.20.750.5656854gps12 -38.20000076293945185.20.750.5656854gps12 -38.0999984741210943.11.250.5656854gps12 -38.400001525878906359.71.250.5656854gps12 -38.5359.70.250.5656854gps12 -39.5359.70.00.5656854gps12 -39.79999923706055359.70.00.5656854gps12 -40.29999923706055359.70.00.5656854gps12 -40.5359.70.00.5656854gps12 -40.70000076293945359.70.00.5656854gps12 -40.79999923706055359.70.00.5656854gps12 -40.79999923706055359.70.00.5656854gps12 -40.79999923706055359.70.00.5656854gps12 -40.79999923706055359.70.00.5656854gps12 -40.79999923706055359.70.00.5656854gps12 -40.70000076293945171.03.750.5656854gps11 -40.400001525878906173.39.50.5656854gps12 -40.70000076293945172.910.00.5656854gps12 -40.599998474121094171.710.250.5656854gps12 -40.400001525878906172.210.50.5656854gps12 -40.400001525878906172.910.50.5656854gps12 -39.79999923706055170.810.750.5656854gps12 -40.099998474121094171.010.750.5656854gps12 -40.0172.010.750.5656854gps12 -40.099998474121094172.810.750.5656854gps12 -39.70000076293945175.910.750.5656854gps12 -39.79999923706055180.06.750.5656854gps12 -40.599998474121094143.23.00.5656854gps12 -40.065.42.250.5656854gps12 -39.90000152587890633.31.34629120.5656854gps12 -40.033.30.5590170.5656854gps12 -40.0242.81.00.5656854gps12 -40.29999923706055215.41.250.5656854gps12 -39.79999923706055215.40.250.5656854gps12 -40.599998474121094345.81.00.5656854gps12 -41.29999923706055345.80.00.5656854gps12 -41.900001525878906345.80.02.0gps5 -42.400001525878906345.80.01.6970562gps12 -42.900001525878906345.80.01.4422204gps12 -42.900001525878906345.80.01.4422204gps12 -43.0345.80.01.4422204gps12 -42.900001525878906345.80.01.4422204gps12 -43.0345.80.01.3416407gps12 -43.0345.80.01.3416407gps12 -43.0345.80.00.8485281gps8 -43.0345.80.00.7211102gps12 -43.0345.80.00.5656854gps12 -61.20000076293945345.80.50.5656854gps12 -59.29999923706055347.13.50.5656854gps12 -51.79999923706055351.311.00.7211102gps8 -51.5351.910.750.7211102gps12 -50.20000076293945352.110.750.5656854gps12 -49.29999923706055352.110.750.5656854gps12 -48.20000076293945352.010.750.5656854gps12 -47.70000076293945351.310.750.5656854gps12 -47.0352.65.250.5656854gps12 -46.900001525878906351.92.50.5656854gps12 -46.5350.72.250.5656854gps12 -46.20000076293945346.42.06155280.5656854gps12 -45.29999923706055320.22.00.5656854gps12 -44.20000076293945301.02.00.5656854gps12 -43.70000076293945257.60.00.5656854gps8 -43.79999923706055257.60.00.5656854gps12 -43.400001525878906257.60.00.5656854gps12 -42.900001525878906257.60.250.5656854gps12 -30.100000381469727351.86.8236722.0gps11 -42.5350.511.01.0gps12 -54.599998474121094351.011.03.5777087gps12 -39.29999923706055352.111.251.4422204gps12 -38.900001525878906352.111.00.8485281gps12 -39.099998474121094352.510.50.8485281gps12 -39.70000076293945352.111.00.8485281gps12 -39.79999923706055351.710.751.0gps12 -40.29999923706055351.910.751.0gps12 -40.70000076293945352.010.750.7211102gps12 -41.099998474121094349.09.00.7211102gps12 -42.0229.61.750.5656854gps5 -41.70000076293945226.00.750.5656854gps11 -41.554.41.00.5656854gps12 -41.7000007629394548.60.750.5656854gps11 -39.79999923706055106.70.750.7211102gps6 -39.0133.21.50.7211102gps12 -39.20000076293945186.61.50.7211102gps12 -40.099998474121094186.60.00.5656854gps12 -40.20000076293945347.70.750.5656854gps12 -40.299999237060555.31.250.5656854gps12 -40.9000015258789063.50.250.5656854gps12 -40.299999237060553.50.250.5656854gps12 -40.200000762939453.50.00.5656854gps12 -40.03.50.00.5656854gps12 -39.700000762939453.50.00.5656854gps12 -39.9000015258789063.50.00.5656854gps12 -40.03.50.00.5656854gps12 -40.03.50.00.5656854gps12 -39.70000076293945172.210.750.5656854gps12 -39.5171.811.250.5656854gps12 -39.20000076293945171.711.250.5656854gps12 -39.0172.011.00.5656854gps12 -38.900001525878906171.611.00.5656854gps12 -40.0173.210.750.5656854gps9 -39.599998474121094174.510.750.5656854gps12 -39.599998474121094177.96.250.5656854gps12 -40.20000076293945249.82.250.5656854gps12 -40.5303.51.750.5656854gps12 -40.400001525878906339.81.250.5656854gps12 -40.20000076293945350.90.50.5656854gps12 -40.400001525878906350.90.00.5656854gps12 -40.29999923706055350.90.00.5656854gps12 -40.29999923706055350.90.00.5656854gps12 -40.400001525878906350.90.00.5656854gps12 -41.0350.90.00.5656854gps12 -41.099998474121094350.90.00.5656854gps12 -41.099998474121094350.90.00.5656854gps12 -41.099998474121094350.90.50.5656854gps12 -41.535.11.250.5656854gps11 -41.40000152587890654.31.250.5656854gps12 -41.561.11.00.5656854gps12 -41.2000007629394568.90.750.5656854gps12 -41.59999847412109471.91.00.5656854gps12 -41.90000152587890674.31.00.5656854gps12 -41.7000007629394574.30.00.5656854gps12 -41.59999847412109474.30.00.5656854gps12 -41.2999992370605574.30.00.5656854gps12 -41.09999847412109474.30.00.5656854gps12 -41.09999847412109474.30.00.5656854gps12 -41.2000007629394574.30.750.5656854gps12 -41.4000015258789063.52.00.5656854gps12 -41.29999923706055336.01.750.5656854gps12 -42.0298.62.06155280.5656854gps12 -41.70000076293945229.31.750.5656854gps12 -41.70000076293945219.01.250.5656854gps12 -41.70000076293945230.31.00.5656854gps12 -42.0230.30.00.5656854gps12 -42.0222.91.250.5656854gps12 -42.70000076293945177.33.750.5656854gps12 -42.599998474121094128.74.750.5656854gps12 -42.099998474121094108.44.00.5656854gps12 -41.70000076293945104.44.250.5656854gps12 -41.599998474121094102.23.750.5656854gps12 -41.40000152587890692.13.250.5656854gps12 -41.2999992370605564.43.00.5656854gps12 -41.099998474121094354.22.50.5656854gps12 -41.099998474121094207.72.50.5656854gps6 -40.7999992370605584.93.00.5656854gps12 -40.7000007629394555.92.750.5656854gps12 -40.4000015258789065.42.250.5656854gps12 -40.70000076293945329.42.250.5656854gps12 -40.79999923706055303.12.250.5656854gps12 -40.900001525878906235.62.250.5656854gps12 -41.29999923706055185.02.250.5656854gps12 -41.099998474121094129.62.50.5656854gps12 -40.7999992370605524.92.00.5656854gps12 -41.02.01.50.5656854gps12 -40.70000076293945171.42.06155282.0gps7 -33.099998474121094104.21.34629121.4422204gps12 -38.70000076293945100.01.58113882.6832814gps12 -42.591.81.58113881.1313708gps12 -41.79999923706055127.43.00.8485281gps12 -41.79999923706055141.63.250.5656854gps12 -40.79999923706055151.73.28823660.5656854gps12 -38.599998474121094169.03.00.5656854gps7 -38.29999923706055164.83.00.5656854gps12 -38.79999923706055168.03.00.5656854gps12 -39.599998474121094182.22.750.5656854gps12 -40.79999923706055197.22.250.5656854gps12 -41.099998474121094217.21.50.5656854gps12 -41.5231.01.750.5656854gps12 -41.70000076293945269.03.250.5656854gps12 -41.5296.54.00.5656854gps12 - \ No newline at end of file diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS15.txt b/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS15.txt deleted file mode 100755 index 2adca09e052..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS15.txt +++ /dev/null @@ -1,1937 +0,0 @@ -$GPGGA,220550,4124.7580,N,08152.2565,W,2,04,4.4,235.1,M,-34.0,M,,*7B -$GPGSA,A,2,02,,,,,,,26,,29,,35,4.5,4.4,1.0*38 -$PGRME,16.4,M,13.9,M,21.5,M*10 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220555,4124.7580,N,08152.2563,W,2,04,3.9,235.9,M,-34.0,M,,*7A -$GPGSA,A,2,02,,,,,,,26,,29,,35,4.0,3.9,1.0*37 -$PGRME,16.4,M,13.9,M,21.5,M*10 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220600,4124.7579,N,08152.2561,W,2,04,3.9,236.6,M,-34.0,M,,*71 -$GPGSA,A,2,02,,,,,,,26,,29,,35,4.0,3.9,1.0*37 -$PGRME,16.4,M,13.9,M,21.5,M*10 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220605,4124.7578,N,08152.2560,W,2,04,3.7,236.2,M,-34.0,M,,*7E -$GPGSA,A,2,02,,,,,,,26,,29,,35,3.8,3.7,1.0*36 -$PGRME,16.5,M,14.0,M,21.7,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220610,4124.7576,N,08152.2558,W,2,04,3.7,236.1,M,-34.0,M,,*7C -$GPGSA,A,2,02,,,,,,,26,,29,,35,3.8,3.7,1.0*36 -$PGRME,16.5,M,14.0,M,21.7,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220615,4124.7574,N,08152.2556,W,2,04,3.7,236.8,M,-34.0,M,,*7C -$GPGSA,A,2,02,,,,,,,26,,29,,35,3.8,3.7,1.0*36 -$PGRME,16.5,M,14.0,M,21.7,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220620,4124.7573,N,08152.2555,W,2,04,4.4,237.6,M,-34.0,M,,*75 -$GPGSA,A,2,02,,,,,,,26,,29,,35,4.5,4.4,1.0*38 -$PGRME,16.4,M,13.9,M,21.5,M*10 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220625,4124.7571,N,08152.2554,W,2,04,4.6,237.6,M,-34.0,M,,*71 -$GPGSA,A,2,02,,,,,,,26,,29,,35,4.8,4.6,1.0*37 -$PGRME,16.5,M,14.0,M,21.7,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220630,4124.7570,N,08152.2553,W,2,04,4.7,238.8,M,-34.0,M,,*73 -$GPGSA,A,2,,06,,,,,,26,,29,,35,5.2,4.7,1.6*3F -$PGRME,10.3,M,14.1,M,18.7,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220635,4124.7569,N,08152.2552,W,2,05,3.1,239.6,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.3,3.1,1.0*3C -$PGRME,10.7,M,11.1,M,16.8,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220640,4124.7567,N,08152.2551,W,2,04,2.8,239.6,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,,,29,,35,3.0,2.8,1.0*33 -$PGRME,10.3,M,11.1,M,15.1,M*18 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220645,4124.7566,N,08152.2550,W,2,04,3.1,241.7,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,,,29,,35,3.3,3.1,1.0*38 -$PGRME,10.3,M,11.1,M,15.1,M*18 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220650,4124.7564,N,08152.2549,W,2,04,2.8,241.7,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,,,29,,35,3.0,2.8,1.0*33 -$PGRME,10.3,M,11.1,M,15.1,M*18 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220655,4124.7563,N,08152.2549,W,2,04,3.1,241.8,M,-34.0,M,,*76 -$GPGSA,A,2,,06,,,,,,26,,29,,35,3.3,3.1,1.0*3F -$PGRME,10.2,M,11.1,M,15.1,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220700,4124.7560,N,08152.2547,W,2,05,3.1,241.9,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.3,3.1,1.0*3C -$PGRME,10.5,M,11.1,M,15.3,M*1C -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220705,4124.7559,N,08152.2547,W,2,04,2.8,242.1,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,,,29,,35,3.0,2.8,1.0*33 -$PGRME,10.2,M,11.1,M,15.1,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220710,4124.7557,N,08152.2546,W,2,05,3.5,242.4,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.5,1.6*3E -$PGRME,8.0,M,7.4,M,10.9,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220715,4124.7555,N,08152.2545,W,2,05,3.5,242.0,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.5,1.6*3E -$PGRME,8.0,M,7.4,M,10.9,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220720,4124.7553,N,08152.2544,W,2,05,3.9,243.2,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.0,3.9,1.6*37 -$PGRME,8.0,M,7.4,M,11.0,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220725,4124.7551,N,08152.2543,W,2,05,4.2,242.5,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.3,4.2,1.6*38 -$PGRME,9.0,M,7.4,M,11.8,M*1C -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220730,4124.7549,N,08152.2543,W,2,05,3.4,241.4,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.8*31 -$PGRME,7.9,M,6.6,M,10.2,M*13 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220735,4124.7547,N,08152.2542,W,2,05,3.6,239.5,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.3*36 -$PGRME,7.9,M,6.6,M,10.3,M*12 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220740,4124.7546,N,08152.2541,W,2,05,3.7,238.6,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.7,1.0*38 -$PGRME,8.0,M,7.4,M,11.0,M*15 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220745,4124.7545,N,08152.2541,W,2,05,3.6,239.9,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,1.8*3E -$PGRME,8.0,M,7.4,M,11.0,M*15 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220750,4124.7544,N,08152.2540,W,2,05,3.8,239.3,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.0,3.8,1.0*30 -$PGRME,8.0,M,7.4,M,11.0,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220755,4124.7544,N,08152.2539,W,2,05,3.8,234.3,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.1,3.8,1.6*37 -$PGRME,8.0,M,7.4,M,11.0,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220800,4124.7544,N,08152.2539,W,2,05,3.6,233.4,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.3*36 -$PGRME,7.9,M,6.6,M,10.3,M*12 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220805,4124.7543,N,08152.2538,W,2,05,3.6,236.1,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.3*36 -$PGRME,7.9,M,6.6,M,10.3,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220810,4124.7543,N,08152.2538,W,2,05,3.4,238.4,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.2*3B -$PGRME,7.9,M,6.6,M,10.3,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220815,4124.7542,N,08152.2537,W,2,05,3.6,241.8,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,1.8*3E -$PGRME,7.9,M,6.6,M,10.3,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220820,4124.7542,N,08152.2537,W,2,05,4.0,245.4,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.4,4.0,1.6*3D -$PGRME,7.9,M,6.6,M,10.3,M*12 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,220825,4124.7541,N,08152.2536,W,2,05,3.8,246.2,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.0,3.8,1.0*30 -$PGRME,8.0,M,7.5,M,11.0,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220830,4124.7540,N,08152.2536,W,2,05,3.6,250.3,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.3*36 -$PGRME,8.0,M,7.5,M,11.0,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220835,4124.7539,N,08152.2535,W,2,05,4.0,250.4,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.4,4.0,1.6*3D -$PGRME,8.0,M,7.5,M,11.0,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220840,4124.7537,N,08152.2535,W,2,05,3.6,248.3,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,1.8*3E -$PGRME,8.0,M,7.5,M,11.0,M*14 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220845,4124.7536,N,08152.2535,W,2,05,3.7,250.3,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.7,1.0*38 -$PGRME,8.0,M,7.5,M,11.0,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220850,4124.7535,N,08152.2535,W,2,05,4.0,247.2,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.4,4.0,1.6*3D -$PGRME,8.0,M,7.5,M,11.0,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220855,4124.7534,N,08152.2535,W,2,05,4.3,242.3,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.9,4.3,1.6*33 -$PGRME,8.0,M,7.5,M,11.0,M*14 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,220900,4124.7533,N,08152.2535,W,2,05,3.4,237.9,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.8*31 -$PGRME,7.9,M,6.7,M,10.3,M*13 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,220905,4124.7532,N,08152.2535,W,2,05,3.7,235.0,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.8,3.7,1.0*31 -$PGRME,7.9,M,6.6,M,10.3,M*12 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,220910,4124.7532,N,08152.2536,W,2,05,3.4,235.3,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.8*31 -$PGRME,7.9,M,6.7,M,10.3,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220915,4124.7531,N,08152.2536,W,2,05,3.4,234.0,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.4,1.2*3F -$PGRME,7.9,M,6.6,M,10.4,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220920,4124.7531,N,08152.2537,W,2,05,3.7,232.0,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.7,1.0*30 -$PGRME,8.0,M,7.4,M,11.0,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220925,4124.7530,N,08152.2537,W,2,05,4.2,231.9,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.8,4.2,1.2*36 -$PGRME,7.9,M,6.7,M,10.4,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220930,4124.7530,N,08152.2537,W,2,05,3.4,233.0,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.1*3B -$PGRME,7.9,M,6.7,M,10.4,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220935,4124.7530,N,08152.2538,W,2,05,3.6,233.5,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.6,1.0*39 -$PGRME,8.5,M,6.7,M,10.9,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220940,4124.7530,N,08152.2538,W,2,05,3.4,233.9,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.5*3C -$PGRME,7.9,M,6.7,M,10.4,M*14 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,220945,4124.7530,N,08152.2539,W,2,05,3.8,233.4,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.0,3.8,1.0*30 -$PGRME,9.0,M,7.3,M,11.9,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220950,4124.7530,N,08152.2539,W,2,05,3.4,233.5,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.8*31 -$PGRME,7.9,M,6.8,M,10.4,M*1B -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,220955,4124.7530,N,08152.2540,W,2,05,4.0,238.8,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.4,4.0,1.6*3D -$PGRME,8.0,M,7.6,M,11.1,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221000,4124.7530,N,08152.2540,W,2,05,3.6,244.2,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.5*30 -$PGRME,8.0,M,7.6,M,11.1,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221005,4124.7529,N,08152.2540,W,2,05,3.4,245.9,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.6,3.4,1.0*3C -$PGRME,7.9,M,6.8,M,10.4,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221010,4124.7529,N,08152.2540,W,2,05,3.6,244.3,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.1,3.6,1.6*38 -$PGRME,8.0,M,7.6,M,11.1,M*16 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221015,4124.7528,N,08152.2541,W,2,05,3.6,243.0,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.1,3.6,1.7*39 -$PGRME,8.0,M,7.6,M,11.1,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221020,4124.7527,N,08152.2541,W,2,05,3.6,243.0,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.1,3.6,1.7*39 -$PGRME,8.0,M,7.6,M,11.1,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221025,4124.7527,N,08152.2541,W,2,05,3.8,246.8,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.7,3.8,2.2*37 -$PGRME,8.0,M,7.6,M,11.1,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221030,4124.7526,N,08152.2541,W,2,05,3.8,245.9,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.7,3.8,2.2*37 -$PGRME,7.9,M,6.8,M,10.4,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221035,4124.7526,N,08152.2541,W,2,05,3.6,246.9,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.8*3D -$PGRME,8.0,M,7.6,M,11.1,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221040,4124.7526,N,08152.2541,W,2,05,3.6,247.7,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.8*3D -$PGRME,8.0,M,7.6,M,11.1,M*16 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221045,4124.7525,N,08152.2541,W,2,05,3.8,247.9,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.3,3.8,3.3*32 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221050,4124.7525,N,08152.2541,W,2,05,3.8,249.5,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.1,3.8,1.7*36 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221055,4124.7524,N,08152.2541,W,2,05,3.4,248.9,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.8*31 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221100,4124.7524,N,08152.2540,W,2,05,3.6,247.8,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.3*36 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221105,4124.7525,N,08152.2540,W,2,05,3.4,245.3,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.4*3E -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221110,4124.7523,N,08152.2540,W,2,05,3.4,244.6,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.9*33 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221115,4124.7523,N,08152.2539,W,2,05,3.4,244.7,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.9*33 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221120,4124.7523,N,08152.2539,W,2,05,3.4,245.4,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.9*33 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221125,4124.7523,N,08152.2539,W,2,05,3.9,246.5,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.4,3.9,1.7*32 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221130,4124.7523,N,08152.2538,W,2,05,3.4,246.7,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.8*31 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221135,4124.7523,N,08152.2538,W,2,05,3.4,246.4,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.8*31 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221140,4124.7522,N,08152.2537,W,2,05,3.4,247.3,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.9*30 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221145,4124.7522,N,08152.2537,W,2,05,3.4,250.3,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.1*3B -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221150,4124.7522,N,08152.2536,W,2,05,3.6,253.8,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.6,2.6*33 -$PGRME,7.9,M,6.9,M,10.5,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221155,4124.7522,N,08152.2536,W,2,05,3.7,250.8,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.1,3.7,3.2*3E -$PGRME,8.0,M,7.7,M,11.2,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221200,4124.7521,N,08152.2535,W,2,05,3.4,249.6,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.9*33 -$PGRME,7.9,M,7.0,M,10.5,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221205,4124.7521,N,08152.2534,W,2,05,3.4,248.6,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.9*33 -$PGRME,7.9,M,7.0,M,10.5,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221210,4124.7521,N,08152.2534,W,2,05,3.6,248.2,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.6,2.9*33 -$PGRME,7.9,M,7.0,M,10.5,M*13 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221215,4124.7521,N,08152.2533,W,2,05,3.6,248.2,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.7,3.6,3.0*3A -$PGRME,7.9,M,7.0,M,10.5,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221220,4124.7520,N,08152.2533,W,2,05,3.6,248.4,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.6,2.9*33 -$PGRME,7.9,M,7.0,M,10.5,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221225,4124.7521,N,08152.2533,W,2,05,3.4,243.4,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,2.9*33 -$PGRME,7.9,M,7.0,M,10.5,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221230,4124.7520,N,08152.2532,W,2,05,3.4,241.4,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.2*3B -$PGRME,7.9,M,7.0,M,10.6,M*10 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221235,4124.7520,N,08152.2532,W,2,05,3.4,241.2,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.2*3B -$PGRME,7.9,M,7.0,M,10.6,M*10 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221240,4124.7520,N,08152.2532,W,2,05,4.1,240.5,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.0,4.1,1.2*3C -$PGRME,7.9,M,7.0,M,10.6,M*10 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221245,4124.7520,N,08152.2531,W,2,05,3.5,238.0,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.5,1.5*3F -$PGRME,8.9,M,7.1,M,11.5,M*1C -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221250,4124.7520,N,08152.2531,W,2,05,3.9,236.9,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.9,1.3*3A -$PGRME,7.9,M,7.0,M,10.6,M*10 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221255,4124.7521,N,08152.2531,W,2,05,4.9,238.2,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.7,4.9,1.0*31 -$PGRME,8.9,M,7.1,M,11.5,M*1C -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221300,4124.7521,N,08152.2531,W,2,05,4.0,239.5,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,4.0,1.0*37 -$PGRME,8.6,M,7.0,M,11.2,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221305,4124.7521,N,08152.2531,W,2,05,4.4,236.0,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.5,4.4,1.9*37 -$PGRME,8.9,M,7.2,M,11.5,M*1F -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221310,4124.7522,N,08152.2531,W,2,05,4.6,232.7,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.7,4.6,2.3*3E -$PGRME,7.9,M,7.1,M,10.6,M*11 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221315,4124.7523,N,08152.2530,W,2,05,3.4,232.1,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.2*3B -$PGRME,7.9,M,7.1,M,10.6,M*11 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221320,4124.7523,N,08152.2530,W,2,05,3.5,232.7,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.5,2.5*33 -$PGRME,8.0,M,7.8,M,11.2,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221325,4124.7523,N,08152.2530,W,2,05,3.7,234.2,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.0,3.7,2.9*35 -$PGRME,8.9,M,7.2,M,11.5,M*1F -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221330,4124.7523,N,08152.2529,W,2,05,3.4,234.1,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.4,1.2*3B -$PGRME,7.9,M,7.1,M,10.6,M*11 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221335,4124.7523,N,08152.2529,W,2,05,3.3,235.7,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.9*37 -$PGRME,7.9,M,7.1,M,10.6,M*11 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221340,4124.7524,N,08152.2529,W,2,05,3.3,236.8,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.2*3C -$PGRME,7.9,M,7.1,M,10.6,M*11 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221345,4124.7524,N,08152.2529,W,2,05,3.5,239.1,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.5,2.7*31 -$PGRME,8.0,M,7.8,M,11.2,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221350,4124.7524,N,08152.2529,W,2,05,3.5,240.9,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.5,2.7*31 -$PGRME,8.0,M,7.8,M,11.3,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221355,4124.7524,N,08152.2529,W,2,05,4.0,239.3,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.7,4.0,2.2*39 -$PGRME,8.8,M,8.5,M,13.0,M*11 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221400,4124.7524,N,08152.2529,W,2,05,3.3,238.5,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,2.3*3E -$PGRME,7.9,M,7.1,M,10.6,M*11 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221405,4124.7525,N,08152.2528,W,2,05,3.3,239.4,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,2.8*35 -$PGRME,7.9,M,7.1,M,10.6,M*11 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221410,4124.7525,N,08152.2528,W,2,05,3.6,239.1,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.0,3.6,1.5*3A -$PGRME,7.9,M,7.1,M,10.6,M*11 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221415,4124.7525,N,08152.2528,W,2,05,3.5,241.5,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.5,1.9*31 -$PGRME,8.9,M,7.3,M,11.6,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221420,4124.7526,N,08152.2528,W,2,05,3.3,241.6,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.2*3C -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221425,4124.7525,N,08152.2527,W,2,05,3.3,240.7,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.7*39 -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221430,4124.7525,N,08152.2527,W,2,05,3.3,242.0,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.9*37 -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221435,4124.7525,N,08152.2526,W,2,05,3.3,243.6,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.9*37 -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221440,4124.7525,N,08152.2526,W,2,05,3.3,243.8,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,2.0*3D -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221445,4124.7526,N,08152.2526,W,2,05,4.0,244.1,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.0,4.0,1.2*3D -$PGRME,8.9,M,7.3,M,11.6,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221450,4124.7525,N,08152.2526,W,2,05,4.5,244.5,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.3,4.5,1.2*3B -$PGRME,8.9,M,7.4,M,11.6,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221455,4124.7525,N,08152.2525,W,2,04,4.5,244.2,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,,,35,5.3,4.5,1.2*30 -$PGRME,8.9,M,7.4,M,11.6,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221500,4124.7525,N,08152.2525,W,2,05,5.1,243.2,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.7,5.1,1.0*38 -$PGRME,8.9,M,7.4,M,11.6,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221505,4124.7525,N,08152.2524,W,2,05,3.7,244.1,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.8,3.7,1.8*3E -$PGRME,8.9,M,7.4,M,11.6,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221510,4124.7525,N,08152.2524,W,2,05,3.7,245.1,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.8,3.7,1.8*3E -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221515,4124.7526,N,08152.2524,W,2,05,4.0,244.9,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,4.0,1.2*35 -$PGRME,8.9,M,7.4,M,11.6,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221520,4124.7526,N,08152.2524,W,2,05,3.3,245.8,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.4*3A -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221525,4124.7525,N,08152.2523,W,2,05,3.3,246.1,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.4*3A -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221530,4124.7525,N,08152.2523,W,2,05,3.5,245.7,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.5,1.7*3D -$PGRME,7.9,M,7.2,M,10.7,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221535,4124.7525,N,08152.2523,W,2,05,3.5,245.3,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.5,1.9*33 -$PGRME,8.9,M,7.4,M,11.6,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221540,4124.7525,N,08152.2522,W,2,05,3.5,242.6,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.5,2.1*38 -$PGRME,7.9,M,7.3,M,10.7,M*12 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221545,4124.7525,N,08152.2522,W,2,05,3.3,241.4,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,2.4*39 -$PGRME,7.9,M,7.3,M,10.7,M*12 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221550,4124.7524,N,08152.2521,W,2,05,3.3,240.6,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.4*3A -$PGRME,7.9,M,7.3,M,10.7,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221555,4124.7524,N,08152.2522,W,2,05,3.5,241.4,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.5,2.3*35 -$PGRME,8.0,M,8.0,M,11.3,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221600,4124.7524,N,08152.2522,W,2,05,3.5,241.5,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.5,3.0*37 -$PGRME,7.9,M,7.3,M,10.7,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221605,4124.7525,N,08152.2521,W,2,05,3.5,240.5,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,3.5,2.9*33 -$PGRME,8.8,M,7.5,M,11.6,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221610,4124.7524,N,08152.2521,W,2,05,4.2,237.0,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.6,4.2,1.7*3C -$PGRME,8.0,M,8.0,M,11.3,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221615,4124.7524,N,08152.2521,W,2,05,4.3,236.9,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,4.3,1.0*3B -$PGRME,10.6,M,8.2,M,13.6,M*27 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221620,4124.7523,N,08152.2521,W,2,05,4.4,235.9,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.7,4.4,1.2*3F -$PGRME,7.9,M,7.3,M,10.8,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221625,4124.7524,N,08152.2521,W,2,05,4.4,232.4,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,4.4,1.0*3F -$PGRME,10.0,M,8.1,M,13.0,M*24 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221630,4124.7524,N,08152.2521,W,2,05,3.8,229.3,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.1,3.8,1.0*31 -$PGRME,7.9,M,7.3,M,10.8,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221635,4124.7524,N,08152.2521,W,2,05,4.3,230.3,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.1,4.3,1.7*3A -$PGRME,7.9,M,7.4,M,10.8,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221640,4124.7525,N,08152.2521,W,2,05,3.7,230.2,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.7,1.0*30 -$PGRME,8.7,M,8.5,M,12.9,M*16 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221645,4124.7526,N,08152.2521,W,2,05,4.0,228.4,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.3,4.0,1.0*3D -$PGRME,8.7,M,8.2,M,12.2,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221650,4124.7525,N,08152.2521,W,2,05,4.3,225.9,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,4.3,1.7*33 -$PGRME,7.9,M,7.4,M,10.8,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221655,4124.7526,N,08152.2521,W,2,05,4.1,224.4,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,4.1,1.0*39 -$PGRME,8.6,M,8.0,M,11.9,M*11 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221700,4124.7526,N,08152.2520,W,2,05,3.3,224.8,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.3,1.2*36 -$PGRME,7.9,M,7.4,M,10.8,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221705,4124.7527,N,08152.2522,W,2,05,4.0,224.9,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,4.0,1.0*3C -$PGRME,7.9,M,7.4,M,10.8,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221710,4124.7527,N,08152.2522,W,2,05,3.6,225.0,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.8,3.6,1.0*30 -$PGRME,9.6,M,7.3,M,12.2,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221715,4124.7528,N,08152.2522,W,2,05,3.6,224.1,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.8,3.6,1.0*30 -$PGRME,9.7,M,7.5,M,12.4,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221720,4124.7527,N,08152.2522,W,2,05,3.4,228.3,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.4,1.0*33 -$PGRME,8.4,M,7.4,M,11.2,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221725,4124.7528,N,08152.2522,W,2,05,3.8,226.8,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.7,3.8,2.0*35 -$PGRME,8.0,M,8.1,M,11.4,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221730,4124.7664,N,08152.2502,W,2,05,3.5,226.9,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,3.5,2.2*38 -$PGRME,8.8,M,7.6,M,11.7,M*18 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221735,4124.7657,N,08152.2491,W,2,05,3.3,232.3,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,2.4*39 -$PGRME,7.9,M,7.4,M,10.8,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221740,4124.7624,N,08152.2482,W,2,05,3.3,273.9,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,2.4*39 -$PGRME,7.9,M,7.4,M,10.8,M*1A -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221745,4124.7513,N,08152.2450,W,2,05,3.5,269.7,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.5,2.9*3F -$PGRME,7.9,M,7.4,M,10.8,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221750,4124.7503,N,08152.2446,W,2,05,3.7,289.6,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.3,3.7,1.0*3D -$PGRME,8.5,M,8.1,M,11.8,M*12 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221755,4124.7496,N,08152.2444,W,2,05,3.9,277.2,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.8,3.9,1.7*3F -$PGRME,8.4,M,8.1,M,11.8,M*13 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221800,4124.7490,N,08152.2442,W,2,05,3.3,276.2,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,2.3*3E -$PGRME,7.9,M,7.5,M,10.9,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221805,4124.7485,N,08152.2442,W,2,05,3.8,274.5,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.3,3.8,1.0*32 -$PGRME,7.9,M,7.5,M,10.9,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221810,4124.7482,N,08152.2443,W,2,05,3.4,273.4,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,3.4,1.4*3C -$PGRME,8.8,M,7.7,M,11.7,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221815,4124.7482,N,08152.2444,W,2,05,3.5,273.1,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.3,3.5,1.0*3F -$PGRME,7.9,M,7.5,M,10.9,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221820,4124.7482,N,08152.2445,W,2,05,3.5,269.3,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.3,3.5,1.0*3F -$PGRME,8.6,M,8.3,M,12.5,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221825,4124.7482,N,08152.2445,W,2,05,3.5,269.3,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.3,3.5,1.0*3F -$PGRME,11.2,M,8.6,M,14.5,M*22 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221830,4124.7485,N,08152.2446,W,2,05,4.0,265.2,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,4.0,1.0*3C -$PGRME,9.2,M,7.7,M,12.1,M*17 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221835,4124.7488,N,08152.2446,W,2,05,4.0,263.6,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,4.0,1.0*3C -$PGRME,10.3,M,7.9,M,13.1,M*21 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221840,4124.7490,N,08152.2447,W,2,04,4.1,259.6,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,,,35,4.2,4.1,1.0*36 -$PGRME,11.7,M,8.3,M,14.5,M*22 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221845,4124.7494,N,08152.2447,W,2,05,4.2,255.6,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,4.2,1.2*3A -$PGRME,8.8,M,7.7,M,11.7,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221850,4124.7497,N,08152.2448,W,2,05,4.2,251.5,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,4.2,1.2*3A -$PGRME,9.4,M,8.5,M,13.2,M*1E -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221855,4124.7500,N,08152.2449,W,2,05,4.1,254.0,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,4.1,1.0*3D -$PGRME,8.6,M,8.4,M,12.2,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221900,4124.7502,N,08152.2449,W,2,05,4.1,251.7,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,4.1,1.0*3D -$PGRME,10.8,M,8.7,M,14.1,M*2C -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221905,4124.7505,N,08152.2451,W,2,05,3.3,248.5,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,3.3,1.2*3A -$PGRME,7.9,M,7.5,M,10.9,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221910,4124.7506,N,08152.2452,W,2,05,3.3,246.9,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.8*36 -$PGRME,7.9,M,7.5,M,10.9,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221915,4124.7508,N,08152.2453,W,2,05,3.4,243.4,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,3.4,2.1*3A -$PGRME,8.8,M,7.8,M,11.8,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221920,4124.7511,N,08152.2454,W,2,05,3.4,239.4,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,3.4,2.1*3A -$PGRME,7.9,M,7.6,M,10.9,M*19 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221925,4124.7513,N,08152.2456,W,2,05,3.7,236.5,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.3,3.7,1.2*3F -$PGRME,8.8,M,7.8,M,11.8,M*19 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221930,4124.7515,N,08152.2457,W,2,05,3.6,237.1,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,3.6,1.2*38 -$PGRME,8.8,M,7.8,M,11.8,M*19 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,221935,4124.7513,N,08152.2457,W,2,05,3.2,243.0,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.2,1.8*37 -$PGRME,7.9,M,7.6,M,10.9,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221940,4124.7352,N,08152.2428,W,2,05,3.5,247.5,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.1,3.5,1.0*3D -$PGRME,9.2,M,7.9,M,12.1,M*19 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221945,4124.7369,N,08152.2412,W,2,05,3.2,247.0,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.2,1.8*37 -$PGRME,7.9,M,7.6,M,10.9,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221950,4124.7503,N,08152.2438,W,2,05,3.2,247.5,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.1,3.2,1.2*38 -$PGRME,7.9,M,7.6,M,10.9,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,221955,4124.7509,N,08152.2440,W,2,05,3.6,247.5,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,3.6,1.2*3F -$PGRME,7.9,M,7.6,M,10.9,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222000,4124.7511,N,08152.2440,W,2,05,3.2,246.3,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,3.2,1.4*3D -$PGRME,7.9,M,7.6,M,10.9,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222005,4124.7512,N,08152.2441,W,2,05,3.2,248.5,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,3.2,1.4*3D -$PGRME,7.9,M,7.6,M,10.9,M*19 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,222010,4124.7512,N,08152.2441,W,2,05,3.7,248.7,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,3.7,1.8*3F -$PGRME,8.7,M,7.9,M,11.8,M*17 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,222015,4124.7510,N,08152.2442,W,2,05,3.6,249.7,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.6,1.0*39 -$PGRME,7.8,M,7.6,M,10.9,M*18 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222020,4124.7509,N,08152.2442,W,2,05,3.7,251.5,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.7,3.7,1.2*3B -$PGRME,8.7,M,7.9,M,11.8,M*17 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222025,4124.7508,N,08152.2443,W,2,04,4.0,254.5,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,,,35,4.8,4.0,1.2*3F -$PGRME,10.7,M,8.2,M,13.6,M*26 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222030,4124.7506,N,08152.2443,W,2,05,4.0,256.4,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.8,4.0,1.2*34 -$PGRME,8.7,M,7.9,M,11.8,M*17 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222035,4124.7503,N,08152.2443,W,2,05,3.4,257.3,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,3.4,1.7*3F -$PGRME,7.8,M,7.7,M,11.0,M*11 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222040,4124.7500,N,08152.2444,W,2,05,3.4,257.5,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.5,3.4,1.9*31 -$PGRME,8.7,M,7.9,M,11.8,M*17 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222045,4124.7499,N,08152.2445,W,2,04,3.8,256.7,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,,,35,4.7,3.8,1.0*3D -$PGRME,11.8,M,8.2,M,14.6,M*2F -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222050,4124.7498,N,08152.2447,W,2,04,3.8,253.6,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,,,35,4.7,3.8,1.0*3D -$PGRME,13.7,M,8.6,M,16.4,M*26 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222055,4124.7499,N,08152.2448,W,2,05,3.8,255.3,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.0,3.8,1.2*33 -$PGRME,7.8,M,7.7,M,11.0,M*11 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222100,4124.7491,N,08152.2461,W,2,05,4.1,254.9,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,4.1,1.0*3D -$PGRME,10.4,M,7.4,M,13.1,M*2B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222105,4124.7334,N,08152.2636,W,2,04,3.7,254.3,M,-34.0,M,,*70 -$GPGSA,A,2,02,,,,,,,26,,29,,35,3.8,3.7,1.0*36 -$PGRME,11.7,M,7.2,M,13.7,M*29 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222110,4124.7349,N,08152.2607,W,2,04,3.9,254.2,M,-34.0,M,,*73 -$GPGSA,A,2,02,,,,,,,26,,29,,35,4.0,3.9,1.0*37 -$PGRME,13.6,M,7.2,M,15.5,M*2E -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222115,4124.7368,N,08152.2578,W,2,03,4.0,254.2,M,-34.0,M,,*77 -$GPGSA,A,2,02,,,,,,,26,,,,35,4.2,4.0,1.0*30 -$PGRME,13.6,M,7.2,M,15.5,M*2E -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222120,4124.7383,N,08152.2555,W,2,04,3.5,254.2,M,-34.0,M,,*7E -$GPGSA,A,2,02,,,,,,,26,,29,,35,3.7,3.5,1.0*3B -$PGRME,11.7,M,7.2,M,13.8,M*26 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222125,4124.7392,N,08152.2538,W,2,04,3.6,254.2,M,-34.0,M,,*73 -$GPGSA,A,2,02,,,,,,,26,,29,,35,3.8,3.6,1.0*37 -$PGRME,11.7,M,7.2,M,13.8,M*26 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222130,4124.7400,N,08152.2526,W,2,04,4.0,254.1,M,-34.0,M,,*76 -$GPGSA,A,2,02,,,,,,,26,,29,,35,4.2,4.0,1.0*3B -$PGRME,12.7,M,7.2,M,14.7,M*2D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222135,4124.7405,N,08152.2516,W,2,05,4.3,256.4,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,4.3,1.0*39 -$PGRME,14.3,M,7.9,M,16.4,M*25 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222140,4124.7413,N,08152.2506,W,2,05,4.5,257.6,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.7,4.5,1.2*3E -$PGRME,7.8,M,7.8,M,11.0,M*1E -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222145,4124.7419,N,08152.2495,W,2,05,3.2,260.2,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.1,3.2,1.4*3E -$PGRME,7.8,M,7.8,M,11.0,M*1E -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222150,4124.7423,N,08152.2483,W,2,05,3.5,261.8,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.5,1.0*3C -$PGRME,8.3,M,7.6,M,11.4,M*10 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222155,4124.7425,N,08152.2474,W,2,05,3.8,262.8,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.0,3.8,1.2*33 -$PGRME,7.8,M,7.8,M,11.0,M*1E -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222200,4124.7427,N,08152.2465,W,2,05,3.2,266.1,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.1,3.2,1.4*3E -$PGRME,7.8,M,7.8,M,11.0,M*1E -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222205,4124.7425,N,08152.2457,W,2,05,3.9,266.4,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.9,1.0*34 -$PGRME,8.3,M,7.7,M,11.4,M*11 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222210,4124.7426,N,08152.2450,W,2,05,4.2,263.3,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,5.0,4.2,1.0*3D -$PGRME,9.4,M,8.4,M,12.8,M*14 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222215,4124.7426,N,08152.2444,W,2,05,3.8,264.1,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.8,1.0*3F -$PGRME,7.8,M,7.8,M,11.1,M*1F -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222220,4124.7426,N,08152.2439,W,2,05,3.8,266.8,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.8,1.0*3F -$PGRME,8.3,M,8.3,M,11.9,M*17 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222225,4124.7425,N,08152.2434,W,2,05,3.7,264.3,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.8,3.7,1.0*31 -$PGRME,9.4,M,8.5,M,12.9,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222230,4124.7426,N,08152.2430,W,2,04,3.7,265.2,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.8,3.7,1.0*3A -$PGRME,10.4,M,8.8,M,13.8,M*21 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222235,4124.7425,N,08152.2427,W,2,04,3.7,265.2,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.8,3.7,1.0*3A -$PGRME,10.6,M,8.8,M,13.9,M*22 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222240,4124.7426,N,08152.2424,W,2,03,3.7,265.2,M,-34.0,M,,*73 -$GPGSA,A,3,,06,,,,,,26,,,,35,3.8,3.7,1.0*38 -$PGRME,10.9,M,8.8,M,14.1,M*22 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222245,4124.7423,N,08152.2421,W,2,04,3.8,379.9,M,-34.0,M,,*79 -$GPGSA,A,3,,06,,,,,,26,,29,,35,4.3,3.8,1.7*37 -$PGRME,8.2,M,9.6,M,14.5,M*1B -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222250,4124.7098,N,08152.2383,W,2,04,3.6,379.8,M,-34.0,M,,*79 -$GPGSA,A,3,,06,,,,,,26,,29,,35,3.8,3.6,1.0*32 -$PGRME,8.7,M,9.6,M,14.6,M*1D -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222255,4124.6960,N,08152.2399,W,2,03,3.6,379.8,M,-34.0,M,,*7F -$GPGSA,A,2,,06,,,,,,26,,,,35,3.8,3.6,1.0*38 -$PGRME,8.7,M,9.6,M,14.6,M*1D -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222300,4124.6942,N,08152.2404,W,2,03,3.6,379.8,M,-34.0,M,,*7D -$GPGSA,A,2,,06,,,,,,26,,,,35,3.8,3.6,1.0*38 -$PGRME,9.1,M,9.6,M,14.8,M*14 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222305,4124.6937,N,08152.2406,W,2,04,3.6,308.4,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.8,3.6,1.0*3B -$PGRME,10.1,M,9.8,M,15.3,M*28 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222310,4124.6940,N,08152.2406,W,2,05,3.6,364.4,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.6,1.0*3F -$PGRME,8.0,M,7.8,M,11.2,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222315,4124.6988,N,08152.2404,W,2,05,3.6,318.6,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.6,1.0*3F -$PGRME,9.9,M,8.4,M,13.0,M*10 -$PGRMV,0.1,-0.3,0.1*72 -$PGRMM,WGS 84*06 -$GPGGA,222320,4124.7023,N,08152.2413,W,2,04,3.6,295.7,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.7,3.6,1.0*34 -$PGRME,11.2,M,8.9,M,14.4,M*2C -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222325,4124.7043,N,08152.2421,W,2,04,3.6,295.7,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.7,3.6,1.0*34 -$PGRME,11.9,M,9.2,M,15.1,M*29 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222330,4124.7059,N,08152.2426,W,2,04,3.6,295.9,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.7,3.6,1.0*34 -$PGRME,12.3,M,9.4,M,15.5,M*22 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222335,4124.7079,N,08152.2430,W,2,05,3.6,291.8,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.6,1.0*3F -$PGRME,8.5,M,8.1,M,11.8,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222340,4124.7096,N,08152.2432,W,2,05,3.6,292.6,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.6,1.0*3F -$PGRME,7.6,M,7.8,M,10.9,M*18 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,33,R*06 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222345,4124.7112,N,08152.2434,W,2,05,3.6,290.3,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.6,1.0*3F -$PGRME,9.1,M,8.2,M,12.3,M*1C -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222350,4124.7240,N,08152.2459,W,2,04,3.8,215.9,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,,,35,4.0,3.8,1.4*3E -$PGRME,10.5,M,8.8,M,13.7,M*2F -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222355,4124.7263,N,08152.2465,W,2,04,3.7,225.3,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.9,3.7,1.2*39 -$PGRME,10.5,M,8.8,M,13.7,M*2F -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222400,4124.7281,N,08152.2467,W,2,04,3.6,231.9,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.9,3.6,1.2*38 -$PGRME,11.2,M,9.0,M,14.4,M*24 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222405,4124.7298,N,08152.2470,W,2,05,3.5,240.1,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.5,1.0*3C -$PGRME,8.2,M,9.8,M,14.8,M*18 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,222410,4124.7307,N,08152.2470,W,2,05,3.3,243.3,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.7,3.3,1.0*3A -$PGRME,8.1,M,7.7,M,11.3,M*14 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,222415,4124.7315,N,08152.2473,W,2,05,3.6,241.4,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.0,3.6,1.2*3D -$PGRME,8.9,M,8.0,M,12.1,M*15 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,222420,4124.7325,N,08152.2477,W,2,04,3.5,241.1,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.6,3.5,1.0*36 -$PGRME,10.0,M,8.4,M,13.2,M*23 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,222425,4124.7335,N,08152.2482,W,2,04,3.5,241.0,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.6,3.5,1.0*36 -$PGRME,10.8,M,8.7,M,13.9,M*23 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222430,4124.7343,N,08152.2486,W,2,05,3.7,242.4,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.7,1.0*30 -$PGRME,9.2,M,8.1,M,12.4,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222435,4124.7350,N,08152.2491,W,2,05,3.3,240.7,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,3.3,1.7*3F -$PGRME,7.6,M,7.9,M,10.9,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222440,4124.7357,N,08152.2496,W,2,05,3.3,240.3,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.7,3.3,2.4*3A -$PGRME,7.7,M,8.4,M,11.4,M*16 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,34,R*01 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222445,4124.7362,N,08152.2500,W,2,05,3.3,242.5,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.4,3.3,1.4*3A -$PGRME,7.6,M,7.9,M,11.0,M*11 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222450,4124.7367,N,08152.2503,W,2,05,3.3,243.0,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.1,3.3,1.7*3C -$PGRME,7.7,M,8.4,M,11.4,M*16 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222455,4124.7372,N,08152.2506,W,2,05,3.5,238.7,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.6,3.5,1.0*3D -$PGRME,8.1,M,8.9,M,12.1,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222500,4124.7377,N,08152.2510,W,2,04,3.5,240.3,M,-34.0,M,,*76 -$GPGSA,A,3,,06,,,,,,26,,29,,35,3.6,3.5,1.0*3F -$PGRME,8.5,M,9.3,M,12.7,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222505,4124.7382,N,08152.2513,W,2,04,3.8,241.9,M,-34.0,M,,*7C -$GPGSA,A,3,,06,,,,,,26,,29,,35,4.4,3.8,1.7*30 -$PGRME,8.1,M,10.0,M,13.7,M*23 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222510,4124.7387,N,08152.2516,W,2,05,3.4,238.8,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.6,3.4,1.0*3C -$PGRME,8.0,M,7.9,M,11.3,M*1B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222515,4124.7391,N,08152.2519,W,2,05,3.5,235.9,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.8,3.5,1.2*31 -$PGRME,9.7,M,8.6,M,13.1,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222520,4124.7396,N,08152.2522,W,2,04,3.4,234.7,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.6,3.4,1.0*37 -$PGRME,11.6,M,8.9,M,14.7,M*2B -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222525,4124.7489,N,08152.2573,W,2,05,3.1,232.9,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.6,3.1,1.0*39 -$PGRME,8.5,M,8.3,M,11.9,M*11 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222530,4124.7492,N,08152.2575,W,2,05,3.9,231.7,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,3.9,1.0*36 -$PGRME,10.7,M,8.8,M,14.8,M*25 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222535,4124.7493,N,08152.2582,W,2,05,4.4,231.9,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.9,4.4,1.0*33 -$PGRME,12.4,M,8.8,M,16.1,M*2F -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222540,4124.7494,N,08152.2586,W,2,04,4.6,230.6,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,26,,,,35,5.0,4.6,1.0*32 -$PGRME,14.8,M,9.1,M,18.2,M*20 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,34,R*01 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222545,4124.7500,N,08152.2586,W,2,05,3.8,230.2,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.8,1.0*3F -$PGRME,13.4,M,8.9,M,16.1,M*2F -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222550,4124.7505,N,08152.2586,W,2,05,4.4,229.2,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.6,4.4,1.0*3C -$PGRME,15.7,M,9.2,M,18.3,M*2C -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222555,4124.7508,N,08152.2587,W,2,05,3.8,230.5,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.9,3.8,1.0*3F -$PGRME,10.3,M,8.2,M,13.4,M*20 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222600,4124.7511,N,08152.2586,W,2,05,4.1,230.4,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.2,4.1,1.0*3D -$PGRME,11.6,M,8.2,M,14.6,M*21 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222605,4124.7514,N,08152.2585,W,2,03,4.3,230.4,M,-34.0,M,,*79 -$GPGSA,A,3,02,,,,,,,26,,,,35,4.4,4.3,1.0*34 -$PGRME,13.9,M,8.2,M,16.6,M*2E -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222610,4124.7517,N,08152.2583,W,2,03,4.4,230.4,M,-34.0,M,,*7F -$GPGSA,A,2,02,,,,,,,26,,,,35,4.6,4.4,1.0*30 -$PGRME,13.9,M,8.2,M,16.6,M*2E -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222615,4124.7520,N,08152.2583,W,2,03,4.7,230.4,M,-34.0,M,,*7D -$GPGSA,A,2,02,,,,,,,26,,,,35,4.8,4.7,1.0*3D -$PGRME,15.8,M,8.2,M,18.2,M*23 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222620,4124.7523,N,08152.2583,W,2,04,4.9,231.1,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,26,,,,35,5.0,4.9,1.0*3D -$PGRME,16.0,M,8.6,M,19.6,M*29 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222625,4124.7527,N,08152.2580,W,2,04,4.6,231.6,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,26,,,,35,5.1,4.6,1.0*33 -$PGRME,16.8,M,8.9,M,20.2,M*20 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222630,4124.7528,N,08152.2578,W,2,05,3.3,236.2,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,3.5,3.3,1.0*38 -$PGRME,9.2,M,9.9,M,15.7,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222635,4124.7530,N,08152.2574,W,2,05,3.7,238.8,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,26,,29,,35,4.0,3.7,1.2*3C -$PGRME,11.3,M,10.1,M,17.1,M*1A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222640,4124.7532,N,08152.2571,W,2,04,3.7,241.9,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,26,,,,35,4.0,3.7,1.2*37 -$PGRME,11.3,M,10.1,M,17.1,M*1A -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,34,R*01 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222645,4124.7532,N,08152.2567,W,2,04,3.4,243.2,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,26,,,,35,3.7,3.4,1.2*34 -$PGRME,11.8,M,10.3,M,16.1,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222650,4124.7532,N,08152.2563,W,2,04,3.8,243.4,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,,26,,,35,4.0,3.8,1.0*3A -$PGRME,13.2,M,10.3,M,17.2,M*18 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222655,4124.7533,N,08152.2560,W,2,04,3.6,241.5,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,,26,,,35,3.9,3.6,1.2*38 -$PGRME,14.0,M,10.6,M,17.7,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222700,4124.7533,N,08152.2557,W,2,04,3.3,239.6,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,,26,,,35,3.4,3.3,1.0*32 -$PGRME,12.4,M,10.8,M,16.4,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222705,4124.7533,N,08152.2555,W,2,04,3.4,241.4,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,,26,,,35,3.6,3.4,1.2*35 -$PGRME,12.7,M,10.9,M,16.8,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222710,4124.7532,N,08152.2553,W,2,05,3.3,244.0,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.3,1.0*39 -$PGRME,7.6,M,8.1,M,11.1,M*17 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222715,4124.7529,N,08152.2551,W,2,05,3.4,246.6,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.6,3.4,1.2*3E -$PGRME,8.4,M,8.5,M,12.0,M*1C -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222720,4124.7528,N,08152.2550,W,2,05,3.5,247.5,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.8,3.5,1.4*37 -$PGRME,9.2,M,8.9,M,12.8,M*1F -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222725,4124.7525,N,08152.2549,W,2,05,3.3,246.9,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.3,1.0*39 -$PGRME,8.4,M,8.9,M,12.4,M*14 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222730,4124.7524,N,08152.2548,W,2,05,3.3,244.6,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.3,1.0*39 -$PGRME,9.5,M,9.3,M,13.3,M*19 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222735,4124.7522,N,08152.2547,W,2,05,3.4,245.1,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.6,3.4,1.2*3E -$PGRME,8.6,M,8.7,M,12.2,M*1E -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222740,4124.7522,N,08152.2546,W,2,05,3.3,244.4,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.3,1.0*39 -$PGRME,7.7,M,8.3,M,11.3,M*16 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,34,R*01 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222745,4124.7521,N,08152.2546,W,2,05,3.2,247.1,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.2,1.0*38 -$PGRME,7.8,M,8.8,M,11.7,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222750,4124.7399,N,08152.2513,W,2,05,4.0,276.6,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,4.5,4.0,1.0*3B -$PGRME,7.7,M,8.3,M,11.3,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222755,4124.7396,N,08152.2514,W,2,05,3.2,219.2,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.2,1.0*38 -$PGRME,8.6,M,9.2,M,12.6,M*1E -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222800,4124.7434,N,08152.2522,W,2,05,3.4,236.4,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.9,3.4,1.7*34 -$PGRME,7.7,M,8.3,M,11.3,M*16 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222805,4124.7532,N,08152.2549,W,2,05,3.3,231.9,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.6,3.3,1.2*39 -$PGRME,8.5,M,8.7,M,12.2,M*1D -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222810,4124.7537,N,08152.2558,W,2,05,3.2,232.8,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.2,1.0*38 -$PGRME,8.5,M,9.2,M,12.9,M*12 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222815,4124.7538,N,08152.2564,W,2,05,3.3,236.1,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.9,3.3,1.7*33 -$PGRME,7.7,M,8.3,M,11.3,M*16 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222820,4124.7537,N,08152.2568,W,2,05,3.2,237.9,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.2,1.0*38 -$PGRME,8.1,M,9.2,M,12.3,M*1C -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222825,4124.7535,N,08152.2571,W,2,05,3.2,236.6,M,-34.0,M,,*79 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.2,1.0*38 -$PGRME,8.2,M,9.9,M,13.4,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222830,4124.7535,N,08152.2573,W,2,05,3.0,234.8,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.7,3.0,1.5*3C -$PGRME,7.7,M,8.4,M,11.4,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222835,4124.7537,N,08152.2575,W,2,05,3.3,234.0,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,,26,29,,35,4.0,3.3,1.8*32 -$PGRME,8.5,M,8.8,M,12.3,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222840,4124.7539,N,08152.2576,W,2,05,3.3,233.4,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.6,3.3,1.2*39 -$PGRME,9.5,M,9.2,M,13.2,M*19 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,35,R*00 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222845,4124.7540,N,08152.2576,W,2,05,3.3,235.0,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.9,3.3,1.7*33 -$PGRME,7.7,M,8.4,M,11.4,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222850,4124.7541,N,08152.2575,W,2,05,3.2,237.8,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.8,3.2,1.4*30 -$PGRME,8.5,M,8.8,M,12.3,M*13 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222855,4124.7540,N,08152.2575,W,2,05,3.2,237.0,M,-34.0,M,,*7F -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.3,3.2,1.0*3F -$PGRME,11.0,M,9.0,M,14.2,M*20 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222900,4124.7540,N,08152.2574,W,2,05,3.3,233.7,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.5,3.3,1.2*3A -$PGRME,11.7,M,9.7,M,15.2,M*21 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222905,4124.7541,N,08152.2575,W,2,05,3.3,240.1,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.5,3.3,1.2*3A -$PGRME,7.7,M,8.4,M,11.4,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222910,4124.7538,N,08152.2574,W,2,05,3.3,239.6,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.5,3.3,1.2*3A -$PGRME,9.5,M,9.3,M,13.3,M*19 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222915,4124.7537,N,08152.2573,W,2,04,3.4,238.8,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,,26,,,35,3.7,3.4,1.4*32 -$PGRME,10.1,M,9.6,M,14.0,M*24 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222920,4124.7536,N,08152.2572,W,2,05,3.4,239.6,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.6,3.4,1.0*3C -$PGRME,8.5,M,8.9,M,12.3,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222925,4124.7535,N,08152.2570,W,2,05,3.3,241.9,M,-34.0,M,,*77 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.5,3.3,1.2*3A -$PGRME,7.7,M,8.4,M,11.4,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222930,4124.7435,N,08152.2503,W,2,05,3.1,247.1,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.3,3.1,1.0*3C -$PGRME,8.5,M,8.9,M,12.3,M*12 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,222935,4124.7427,N,08152.2489,W,2,05,3.1,248.5,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.3,3.1,1.0*3C -$PGRME,8.4,M,9.3,M,12.8,M*13 -$PGRMV,0.0,0.0,0.1*5D -$PGRMM,WGS 84*06 -$GPGGA,222940,4124.7434,N,08152.2495,W,2,05,3.1,248.8,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.3,3.1,1.0*3C -$PGRME,9.4,M,9.7,M,13.7,M*18 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,35,R*00 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222945,4124.7443,N,08152.2505,W,2,05,3.1,245.8,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.3,3.1,1.0*3C -$PGRME,7.7,M,8.5,M,11.4,M*17 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,222950,4124.7448,N,08152.2511,W,2,05,3.2,249.2,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,,26,29,,35,4.1,3.2,2.0*39 -$PGRME,7.7,M,8.9,M,11.8,M*17 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,222955,4124.7451,N,08152.2515,W,2,05,3.5,243.8,M,-34.0,M,,*75 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.8,3.5,1.2*31 -$PGRME,9.2,M,8.9,M,12.9,M*1E -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223000,4124.7455,N,08152.2519,W,2,05,3.0,244.4,M,-34.0,M,,*7B -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.0,1.2*38 -$PGRME,7.7,M,8.5,M,11.5,M*16 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223005,4124.7454,N,08152.2523,W,2,05,4.2,249.0,M,-34.0,M,,*7A -$GPGSA,A,3,02,06,,,,,,,26,29,,35,4.8,4.2,1.0*34 -$PGRME,8.3,M,8.3,M,11.9,M*17 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223010,4124.7451,N,08152.2525,W,2,05,3.4,250.8,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.6,3.4,1.0*3C -$PGRME,8.4,M,8.5,M,12.1,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223015,4124.7449,N,08152.2528,W,2,05,3.4,254.3,M,-34.0,M,,*72 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.7,3.4,1.0*3D -$PGRME,8.5,M,9.0,M,12.4,M*1D -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223020,4124.7445,N,08152.2528,W,2,05,3.1,256.8,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.2,3.1,1.0*3D -$PGRME,8.9,M,9.0,M,12.7,M*12 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223025,4124.7443,N,08152.2529,W,2,04,3.3,258.0,M,-34.0,M,,*73 -$GPGSA,A,3,02,06,,,,,,,26,,,35,3.4,3.3,1.0*32 -$PGRME,11.2,M,9.4,M,14.9,M*2D -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223030,4124.7439,N,08152.2529,W,2,05,3.0,260.5,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.7,3.0,1.5*3C -$PGRME,7.7,M,8.6,M,11.5,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223035,4124.7436,N,08152.2522,W,2,05,3.4,259.2,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,,26,29,,35,4.1,3.4,1.0*3C -$PGRME,7.7,M,8.6,M,11.5,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223040,4124.7569,N,08152.2469,W,2,05,3.2,252.8,M,-34.0,M,,*7E -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.4,3.2,1.2*3A -$PGRME,8.5,M,9.1,M,12.4,M*1C -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,35,R*00 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223045,4124.7659,N,08152.2501,W,2,05,3.5,250.1,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.8,3.5,1.2*31 -$PGRME,7.7,M,8.6,M,11.5,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223050,4124.7656,N,08152.2499,W,2,05,3.2,246.4,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,4.3,3.2,1.0*38 -$PGRME,8.5,M,9.1,M,12.5,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223055,4124.7644,N,08152.2502,W,2,05,3.0,250.6,M,-34.0,M,,*74 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.3,3.0,1.2*3F -$PGRME,7.7,M,8.6,M,11.5,M*15 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223100,4124.7489,N,08152.2517,W,2,05,3.3,250.6,M,-34.0,M,,*71 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.8,3.3,1.6*33 -$PGRME,7.7,M,8.6,M,11.6,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223105,4124.7417,N,08152.2508,W,2,05,3.7,250.2,M,-34.0,M,,*7D -$GPGSA,A,3,02,06,,,,,,,26,29,,35,4.4,3.7,1.8*32 -$PGRME,7.7,M,8.9,M,11.9,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223110,4124.7447,N,08152.2489,W,2,05,3.0,246.6,M,-34.0,M,,*70 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.5,3.0,1.4*3F -$PGRME,7.7,M,8.7,M,11.6,M*17 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223115,4124.7463,N,08152.2480,W,2,05,3.1,242.1,M,-34.0,M,,*78 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.6,3.1,1.5*3C -$PGRME,7.7,M,8.7,M,11.6,M*17 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223120,4124.7476,N,08152.2476,W,2,05,3.0,239.9,M,-34.0,M,,*76 -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.2,3.0,1.0*3C -$PGRME,7.9,M,8.7,M,11.8,M*17 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223125,4124.7484,N,08152.2475,W,2,05,3.0,244.2,M,-34.0,M,,*7C -$GPGSA,A,3,02,06,,,,,,,26,29,,35,3.2,3.0,1.0*3C -$PGRME,7.9,M,8.7,M,11.8,M*17 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223133,4124.7520,N,08152.2467,W,0,00,,,M,,M,,*47 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$PGRME,,M,,M,,M*00 -$PGRMV,,,*72 -$PGRMM,WGS 84*06 -$GPGGA,223138,4124.7520,N,08152.2467,W,0,00,,,M,,M,,*4C -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$PGRME,,M,,M,,M*00 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,34,R*01 -$PGRMV,,,*72 -$PGRMM,WGS 84*06 -$GPGGA,223143,4124.7520,N,08152.2467,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$PGRME,,M,,M,,M*00 -$PGRMV,,,*72 -$PGRMM,WGS 84*06 -$GPGGA,223150,4124.7478,N,08152.2474,W,2,03,3.0,242.5,M,-34.0,M,,*7B -$GPGSA,A,2,06,,,,,,,,26,,,35,3.2,3.0,1.0*34 -$PGRME,40.3,M,50.0,M,64.2,M*1C -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223155,4124.7515,N,08152.2472,W,2,03,3.0,242.5,M,-34.0,M,,*72 -$GPGSA,A,2,06,,,,,,,,26,,,35,3.2,3.0,1.0*34 -$PGRME,40.2,M,50.0,M,64.2,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223200,4124.7538,N,08152.2480,W,2,03,3.0,242.5,M,-34.0,M,,*73 -$GPGSA,A,2,06,,,,,,,,26,,,35,3.2,3.0,1.0*34 -$PGRME,40.2,M,50.0,M,64.2,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223205,4124.7544,N,08152.2485,W,2,03,3.0,242.5,M,-34.0,M,,*78 -$GPGSA,A,2,06,,,,,,,,26,,,35,3.2,3.0,1.0*34 -$PGRME,40.2,M,50.0,M,64.2,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223210,4124.7543,N,08152.2488,W,2,03,2.4,242.5,M,-34.0,M,,*73 -$GPGSA,A,2,06,,,,,,,,26,,,35,2.6,2.4,1.0*34 -$PGRME,40.1,M,50.0,M,64.1,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223215,4124.7540,N,08152.2490,W,2,03,2.4,242.5,M,-34.0,M,,*7C -$GPGSA,A,2,06,,,,,,,,26,,,35,2.6,2.4,1.0*34 -$PGRME,40.1,M,50.0,M,64.1,M*1D -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223220,4124.7538,N,08152.2492,W,2,03,2.5,242.5,M,-34.0,M,,*76 -$GPGSA,A,2,06,,,,,,,,26,,,35,2.7,2.5,1.0*34 -$PGRME,39.5,M,50.0,M,63.7,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223225,4124.7536,N,08152.2493,W,2,03,2.6,242.5,M,-34.0,M,,*7F -$GPGSA,A,2,06,,,,,,,,26,,,35,2.8,2.6,1.0*38 -$PGRME,39.5,M,50.0,M,63.7,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223230,4124.7533,N,08152.2494,W,2,03,2.6,242.5,M,-34.0,M,,*79 -$GPGSA,A,2,06,,,,,,,,26,,,35,2.8,2.6,1.0*38 -$PGRME,39.5,M,50.0,M,63.7,M*16 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223235,4124.7530,N,08152.2496,W,2,04,3.0,243.4,M,-34.0,M,,*7D -$GPGSA,A,3,06,,,,,,,,26,29,,35,3.8,3.0,2.1*36 -$PGRME,8.8,M,13.4,M,16.0,M*2F -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223240,4124.7527,N,08152.2497,W,2,05,3.3,244.8,M,-34.0,M,,*71 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,4.4,3.3,2.7*31 -$PGRME,8.6,M,11.4,M,14.3,M*22 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,35,R*00 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223245,4124.7523,N,08152.2499,W,2,05,3.4,251.0,M,-34.0,M,,*75 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,4.9,3.4,3.1*3C -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223250,4124.7520,N,08152.2461,W,2,05,3.8,250.6,M,-34.0,M,,*7E -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.8,3.4*39 -$PGRME,10.2,M,13.2,M,16.7,M*1D -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223255,4124.7602,N,08152.2466,W,2,05,3.8,245.2,M,-34.0,M,,*7F -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.8,3.4*39 -$PGRME,10.1,M,13.2,M,16.7,M*1E -$PGRMV,0.0,0.0,-0.2*73 -$PGRMM,WGS 84*06 -$GPGGA,223300,4124.7617,N,08152.2466,W,2,05,3.7,243.7,M,-34.0,M,,*76 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.7,3.9*3B -$PGRME,10.1,M,13.2,M,16.7,M*1E -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223305,4124.7613,N,08152.2470,W,2,05,3.7,244.6,M,-34.0,M,,*76 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.7,3.9*3B -$PGRME,7.8,M,10.8,M,13.3,M*29 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223310,4124.7597,N,08152.2475,W,2,05,3.4,248.0,M,-34.0,M,,*71 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.0,3.4,3.7*32 -$PGRME,7.8,M,10.8,M,13.3,M*29 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223315,4124.7585,N,08152.2478,W,2,05,3.7,250.4,M,-34.0,M,,*74 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.7,3.9*3B -$PGRME,7.8,M,10.7,M,13.3,M*26 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223320,4124.7576,N,08152.2481,W,2,05,3.7,249.4,M,-34.0,M,,*70 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.7,3.9*3B -$PGRME,10.1,M,13.0,M,16.5,M*1E -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223325,4124.7569,N,08152.2483,W,2,05,4.1,250.0,M,-34.0,M,,*74 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.8,4.1,4.2*3A -$PGRME,7.8,M,10.7,M,13.2,M*27 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223330,4124.7562,N,08152.2486,W,2,05,4.1,250.7,M,-34.0,M,,*79 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.5,4.1,1.0*30 -$PGRME,14.4,M,15.1,M,21.3,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223335,4124.7556,N,08152.2489,W,2,05,3.9,253.3,M,-34.0,M,,*7C -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.6,3.9,2.4*3B -$PGRME,9.1,M,11.2,M,14.5,M*24 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223340,4124.7548,N,08152.2493,W,2,05,4.6,261.5,M,-34.0,M,,*75 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.1,4.6,1.8*38 -$PGRME,7.8,M,10.7,M,13.2,M*27 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,35,R*00 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223345,4124.7539,N,08152.2499,W,2,05,5.3,257.5,M,-34.0,M,,*7D -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.9,5.3,2.9*36 -$PGRME,9.1,M,11.1,M,14.4,M*26 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223350,4124.7533,N,08152.2504,W,2,05,5.3,260.5,M,-34.0,M,,*72 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.0,5.3,1.0*35 -$PGRME,11.0,M,13.2,M,17.2,M*1A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223355,4124.7527,N,08152.2509,W,2,05,5.8,258.8,M,-34.0,M,,*72 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.5,5.8,1.3*38 -$PGRME,14.1,M,13.4,M,20.0,M*1E -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223400,4124.7522,N,08152.2511,W,2,04,5.8,258.3,M,-34.0,M,,*73 -$GPGSA,A,3,,,09,,,,,,26,29,,35,6.5,5.8,1.3*3E -$PGRME,14.1,M,13.4,M,20.0,M*1E -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223405,4124.7518,N,08152.2514,W,2,05,5.8,257.4,M,-34.0,M,,*73 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.1,5.8,1.3*3C -$PGRME,16.1,M,15.4,M,22.7,M*1F -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223410,4124.7513,N,08152.2515,W,2,05,5.8,258.3,M,-34.0,M,,*75 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.0,5.8,1.0*3E -$PGRME,7.8,M,10.5,M,13.1,M*26 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223415,4124.7509,N,08152.2516,W,2,05,5.9,254.8,M,-34.0,M,,*7E -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.1,5.9,1.3*3D -$PGRME,9.0,M,10.9,M,14.2,M*28 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223420,4124.7507,N,08152.2520,W,2,05,5.9,253.1,M,-34.0,M,,*7D -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.1,5.9,1.3*3D -$PGRME,7.8,M,10.4,M,13.0,M*26 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223425,4124.7506,N,08152.2523,W,2,05,4.2,248.6,M,-34.0,M,,*7D -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.6,4.2,1.3*33 -$PGRME,7.8,M,10.4,M,13.0,M*26 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223430,4124.7505,N,08152.2523,W,2,05,4.6,246.4,M,-34.0,M,,*72 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.8,4.6,1.0*3A -$PGRME,7.8,M,10.4,M,13.0,M*26 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223435,4124.7501,N,08152.2524,W,2,05,3.6,261.2,M,-34.0,M,,*70 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.1,3.6,1.0*34 -$PGRME,9.0,M,10.9,M,14.2,M*28 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223440,4124.7499,N,08152.2526,W,2,05,4.6,240.4,M,-34.0,M,,*72 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.8,4.6,1.3*39 -$PGRME,7.8,M,10.4,M,13.0,M*26 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,35,R*00 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223445,4124.7502,N,08152.2529,W,2,05,5.0,218.0,M,-34.0,M,,*75 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.1,5.0,1.0*37 -$PGRME,7.8,M,10.4,M,12.9,M*2E -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223450,4124.7611,N,08152.2563,W,2,05,3.3,214.6,M,-34.0,M,,*71 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.0,3.3,1.8*38 -$PGRME,7.8,M,10.4,M,12.9,M*2E -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223455,4124.7620,N,08152.2556,W,2,05,4.1,214.0,M,-34.0,M,,*73 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.7,4.1,1.5*37 -$PGRME,9.7,M,12.4,M,15.8,M*2B -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223500,4124.7625,N,08152.2552,W,2,05,4.6,216.3,M,-34.0,M,,*75 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,6.2,4.6,2.2*32 -$PGRME,9.7,M,12.4,M,15.8,M*2B -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223505,4124.7594,N,08152.2560,W,2,05,3.6,220.5,M,-34.0,M,,*7C -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.2,3.6,2.5*31 -$PGRME,8.9,M,10.8,M,14.1,M*22 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223510,4124.7414,N,08152.2598,W,2,05,3.9,224.8,M,-34.0,M,,*70 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.5,3.9,1.0*3F -$PGRME,13.6,M,14.3,M,20.2,M*1C -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223515,4124.7441,N,08152.2578,W,2,05,4.2,225.4,M,-34.0,M,,*7A -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.9,4.2,1.5*3A -$PGRME,16.9,M,16.0,M,23.9,M*1F -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223520,4124.7453,N,08152.2563,W,2,04,4.8,229.9,M,-34.0,M,,*7F -$GPGSA,A,3,06,,09,,,,,,26,,,35,6.2,4.8,1.5*33 -$PGRME,19.6,M,17.4,M,27.0,M*17 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223525,4124.7456,N,08152.2559,W,2,05,2.3,225.9,M,-34.0,M,,*76 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,2.5,2.3,1.0*33 -$PGRME,9.6,M,12.3,M,15.6,M*23 -$PGRMV,-0.0,0.2,-0.1*5F -$PGRMM,WGS 84*06 -$GPGGA,223530,4124.7496,N,08152.2534,W,2,05,2.8,232.0,M,-34.0,M,,*71 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.2,2.8,1.5*3B -$PGRME,7.7,M,10.3,M,12.9,M*26 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223535,4124.7489,N,08152.2530,W,2,05,2.8,236.8,M,-34.0,M,,*72 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.2,2.8,1.5*3B -$PGRME,7.7,M,10.3,M,12.9,M*26 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223540,4124.7487,N,08152.2530,W,2,05,3.2,236.9,M,-34.0,M,,*74 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.8,3.2,2.0*3C -$PGRME,9.6,M,12.2,M,15.5,M*21 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,36,R*03 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223545,4124.7486,N,08152.2531,W,2,05,3.7,238.4,M,-34.0,M,,*77 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,4.4,3.7,1.5*34 -$PGRME,13.3,M,14.8,M,20.3,M*13 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223550,4124.7485,N,08152.2530,W,2,05,3.7,242.2,M,-34.0,M,,*7A -$GPGSA,A,3,06,,09,,,,,,26,29,,35,4.4,3.7,1.5*34 -$PGRME,13.3,M,14.8,M,20.3,M*13 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223555,4124.7484,N,08152.2529,W,2,04,4.2,242.0,M,-34.0,M,,*77 -$GPGSA,A,3,06,,09,,,,,,26,,,35,5.1,4.2,1.5*39 -$PGRME,16.6,M,16.4,M,23.9,M*14 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223600,4124.7468,N,08152.2526,W,2,05,3.6,249.4,M,-34.0,M,,*74 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.6,2.2*30 -$PGRME,9.5,M,12.2,M,15.5,M*22 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223605,4124.7362,N,08152.2518,W,2,05,3.6,252.2,M,-34.0,M,,*7D -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.2,3.6,2.5*31 -$PGRME,8.9,M,10.6,M,13.9,M*23 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223610,4124.7362,N,08152.2537,W,2,05,3.6,253.5,M,-34.0,M,,*72 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.1,3.6,1.0*34 -$PGRME,11.7,M,12.1,M,17.3,M*1E -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223615,4124.7373,N,08152.2540,W,2,05,3.9,254.6,M,-34.0,M,,*7C -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.5,3.9,1.5*3A -$PGRME,11.7,M,12.1,M,17.3,M*1E -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223620,4124.7381,N,08152.2541,W,2,05,2.8,250.0,M,-34.0,M,,*74 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.2,2.8,1.5*3B -$PGRME,7.7,M,10.2,M,12.8,M*26 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223625,4124.7517,N,08152.2534,W,2,05,3.2,243.4,M,-34.0,M,,*77 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,4.1,3.2,2.4*36 -$PGRME,7.7,M,10.2,M,12.8,M*26 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223630,4124.7533,N,08152.2529,W,2,05,4.1,240.0,M,-34.0,M,,*7A -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.2,4.1,1.5*32 -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223635,4124.7504,N,08152.2584,W,2,05,2.8,242.9,M,-34.0,M,,*78 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.4,2.8,1.8*30 -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223640,4124.7478,N,08152.2566,W,2,05,3.2,245.7,M,-34.0,M,,*7E -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.9,3.2,2.2*3F -$PGRME,9.5,M,12.1,M,15.3,M*27 -$PGRMT,GPS 15-H Ver. 2.02,P,P,R,R,P,,36,R*03 -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223645,4124.7473,N,08152.2556,W,2,05,3.2,244.5,M,-34.0,M,,*70 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.9,3.2,2.2*3F -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223650,4124.7474,N,08152.2551,W,2,05,3.5,241.2,M,-34.0,M,,*71 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,4.6,3.5,2.8*3A -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223655,4124.7475,N,08152.2547,W,2,05,3.6,242.6,M,-34.0,M,,*76 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.6,3.6*35 -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223700,4124.7475,N,08152.2543,W,2,05,3.6,244.4,M,-34.0,M,,*77 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.6,3.9*3A -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223705,4124.7476,N,08152.2541,W,2,05,3.3,246.6,M,-34.0,M,,*76 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.0,3.3,3.7*35 -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223710,4124.7475,N,08152.2539,W,2,05,3.6,246.3,M,-34.0,M,,*7E -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.6,4.0*34 -$PGRME,9.4,M,12.0,M,15.2,M*26 -$PGRMV,0.0,0.0,-0.0*71 -$PGRMM,WGS 84*06 -$GPGGA,223715,4124.7475,N,08152.2539,W,2,05,3.3,243.7,M,-34.0,M,,*7F -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.0,3.3,3.8*3A -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,0.0*5C -$PGRMM,WGS 84*06 -$GPGGA,223720,4124.7477,N,08152.2539,W,2,05,3.6,245.6,M,-34.0,M,,*79 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,5.4,3.6,4.0*34 -$PGRME,7.7,M,10.1,M,12.7,M*2A -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223725,4124.7477,N,08152.2528,W,2,05,2.7,241.7,M,-34.0,M,,*79 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.2,2.7,1.5*34 -$PGRME,7.6,M,10.1,M,12.7,M*2B -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 -$GPGGA,223730,4124.7495,N,08152.2527,W,2,05,2.3,233.0,M,-34.0,M,,*78 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,2.5,2.3,1.0*33 -$PGRME,9.4,M,11.9,M,15.2,M*2C -$PGRMV,-0.0,0.2,-0.1*5F -$PGRMM,WGS 84*06 -$GPGGA,223735,4124.7354,N,08152.2485,W,2,05,3.2,303.9,M,-34.0,M,,*75 -$GPGSA,A,3,06,,09,,,,,,26,29,,35,3.9,3.2,2.2*3F -$PGRME,7.6,M,10.0,M,12.6,M*2B -$PGRMV,0.0,0.0,-0.1*70 -$PGRMM,WGS 84*06 - \ No newline at end of file diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS15H.txt b/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS15H.txt deleted file mode 100755 index 8b60ad275c9..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS15H.txt +++ /dev/null @@ -1,4382 +0,0 @@ -$GPRMC,183408,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*68 -$GPGGA,183408,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4F -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,00,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183409,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*69 -$GPGGA,183409,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4E -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,47,13,20,067,32,23,10,041,00*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183410,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*61 -$GPGGA,183410,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*46 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183411,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*60 -$GPGGA,183411,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*47 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,31,04,50,056,00,05,43,263,00,06,02,307,00*7C -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183412,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*63 -$GPGGA,183412,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*44 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,47,13,20,067,00,23,10,041,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183413,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*62 -$GPGGA,183413,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*45 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183414,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*65 -$GPGGA,183414,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*42 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,32,04,50,056,00,05,43,263,00,06,02,307,00*7F -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183415,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*64 -$GPGGA,183415,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*43 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,47,13,20,067,00,23,10,041,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183416,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*67 -$GPGGA,183416,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183417,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*66 -$GPGGA,183417,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*41 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,31,04,50,056,00,05,43,263,00,06,02,307,00*7C -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183418,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*69 -$GPGGA,183418,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4E -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,45,13,20,067,00,23,10,041,00*70 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183419,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*68 -$GPGGA,183419,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4F -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,41,35,34,141,43*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183420,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*62 -$GPGGA,183420,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*45 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,32,04,50,056,00,05,43,263,00,06,02,307,00*7F -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183421,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*63 -$GPGGA,183421,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*44 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,46,13,20,067,00,23,10,041,00*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183422,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*60 -$GPGGA,183422,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*47 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183423,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*61 -$GPGGA,183423,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*46 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,32,04,50,056,00,05,43,263,00,06,02,307,00*7F -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183424,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*66 -$GPGGA,183424,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*41 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,47,13,20,067,00,23,10,041,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183425,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*67 -$GPGGA,183425,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183426,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*64 -$GPGGA,183426,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*43 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,33,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183427,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*65 -$GPGGA,183427,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*42 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,47,13,20,067,00,23,10,041,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183428,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*6A -$GPGGA,183428,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4D -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,39,35,34,141,43*7D -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183429,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*6B -$GPGGA,183429,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4C -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,33,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183430,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*63 -$GPGGA,183430,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*44 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,47,13,20,067,00,23,10,041,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183431,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*62 -$GPGGA,183431,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*45 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183432,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*61 -$GPGGA,183432,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*46 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,33,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183433,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*60 -$GPGGA,183433,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*47 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,47,13,20,067,00,23,10,041,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183434,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*67 -$GPGGA,183434,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,41,35,34,141,43*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183435,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*66 -$GPGGA,183435,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*41 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,32,04,50,056,00,05,43,263,00,06,02,307,00*7F -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183436,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*65 -$GPGGA,183436,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*42 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,31,10,44,197,48,13,20,067,00,23,10,041,00*7F -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183437,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*64 -$GPGGA,183437,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*43 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,41,35,34,141,43*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183438,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*6B -$GPGGA,183438,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4C -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,00,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183439,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*6A -$GPGGA,183439,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4D -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,48,13,20,067,00,23,10,041,00*7D -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183440,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*64 -$GPGGA,183440,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*43 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,41,35,34,141,43*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183441,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*65 -$GPGGA,183441,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*42 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,00,04,50,056,35,05,43,263,00,06,02,307,00*78 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183442,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*66 -$GPGGA,183442,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*41 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,49,13,20,067,00,23,09,040,00*75 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183443,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*67 -$GPGGA,183443,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,18,067,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183444,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*60 -$GPGGA,183444,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*47 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,00,04,50,056,35,05,43,263,00,06,02,307,00*78 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183445,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*61 -$GPGGA,183445,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*46 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,49,13,20,067,00,23,09,040,00*75 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183446,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*62 -$GPGGA,183446,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*45 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,17,068,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183447,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*63 -$GPGGA,183447,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*44 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,00,04,50,056,35,05,43,263,00,06,02,307,00*78 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183448,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*6C -$GPGGA,183448,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4B -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,49,13,20,067,00,23,09,040,00*75 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183449,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*6D -$GPGGA,183449,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*4A -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,17,068,00,30,29,304,00,33,09,106,41,35,34,141,43*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183450,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*65 -$GPGGA,183450,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*42 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,00,04,50,056,36,05,43,263,00,06,02,307,00*7B -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183451,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*64 -$GPGGA,183451,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*43 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,20,126,00,10,44,197,49,13,20,067,00,23,09,040,00*75 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183452,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*67 -$GPGGA,183452,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,17,068,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183453,V,4124.7502,N,08152.2393,W,,,010305,007.9,W*66 -$GPGGA,183453,4124.7502,N,08152.2393,W,0,00,,,M,,M,,*41 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,71,317,00,04,50,056,36,05,43,263,00,06,02,307,00*7B -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183453,A,4124.6743,N,08152.2490,W,000.0,000.0,010305,007.9,W*73 -$GPGGA,183453,4124.6743,N,08152.2490,W,2,04,2.5,232.9,M,-34.0,M,,*7C -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,20,126,32,10,44,197,49,13,20,067,00,23,09,040,00*74 -$PGRME,252.5,M,50.0,M,257.4,M*1F -$PGRMM,WGS 84*06 -$GPRMC,183454,A,4124.7340,N,08152.2465,W,000.0,000.0,010305,007.9,W*78 -$GPGGA,183454,4124.7340,N,08152.2465,W,2,04,4.2,259.7,M,-34.0,M,,*75 -$GPGSA,A,2,,04,,,07,10,,,,,,35,5.4,4.2,1.7*36 -$GPGSV,3,3,12,24,17,068,00,30,29,304,00,33,09,106,41,35,34,141,43*72 -$PGRME,13.4,M,25.9,M,29.1,M*1C -$PGRMM,WGS 84*06 -$GPRMC,183455,A,4124.7339,N,08152.2463,W,000.0,000.0,010305,007.9,W*71 -$GPGGA,183455,4124.7339,N,08152.2463,W,2,04,2.5,259.3,M,-34.0,M,,*79 -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,71,317,00,04,50,056,36,05,43,263,00,06,02,307,00*7B -$PGRME,13.6,M,28.3,M,31.5,M*14 -$PGRMM,WGS 84*06 -$GPRMC,183456,A,4124.7342,N,08152.2464,W,000.0,000.0,010305,007.9,W*79 -$GPGGA,183456,4124.7342,N,08152.2464,W,2,04,2.5,259.0,M,-34.0,M,,*72 -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,20,126,31,10,44,197,50,13,20,067,00,23,09,040,00*7F -$PGRME,13.6,M,28.3,M,31.5,M*14 -$PGRMM,WGS 84*06 -$GPRMC,183457,A,4124.7342,N,08152.2464,W,000.0,000.0,010305,007.9,W*78 -$GPGGA,183457,4124.7342,N,08152.2464,W,2,04,2.5,258.8,M,-34.0,M,,*7A -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,3,12,24,17,068,00,30,29,304,00,33,09,106,41,35,34,141,43*72 -$PGRME,13.8,M,30.4,M,33.6,M*15 -$PGRMM,WGS 84*06 -$GPRMC,183458,A,4124.7341,N,08152.2447,W,000.0,000.0,010305,007.9,W*75 -$GPGGA,183458,4124.7341,N,08152.2447,W,2,04,2.5,258.6,M,-34.0,M,,*79 -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,71,317,00,04,50,056,35,05,43,263,00,06,02,307,00*78 -$PGRME,13.8,M,30.4,M,33.6,M*15 -$PGRMM,WGS 84*06 -$GPRMC,183459,A,4124.7340,N,08152.2437,W,000.0,000.0,010305,007.9,W*72 -$GPGGA,183459,4124.7340,N,08152.2437,W,2,04,2.5,258.4,M,-34.0,M,,*7C -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,20,126,32,10,44,197,50,13,20,067,32,23,09,040,00*7D -$PGRME,13.8,M,30.4,M,33.6,M*15 -$PGRMM,WGS 84*06 -$GPRMC,183500,A,4124.7338,N,08152.2429,W,000.0,000.0,010305,007.9,W*7F -$GPGGA,183500,4124.7338,N,08152.2429,W,2,04,4.2,211.2,M,-34.0,M,,*7B -$GPGSA,A,2,,04,,,07,10,,,,,,35,5.4,4.2,1.7*36 -$GPGSV,3,3,12,24,17,068,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183501,A,4124.7346,N,08152.2441,W,001.5,348.3,010305,007.9,W*71 -$GPGGA,183501,4124.7346,N,08152.2441,W,2,04,2.5,211.3,M,-34.0,M,,*7D -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,71,317,00,04,50,056,34,05,43,263,00,06,02,307,00*79 -$PGRME,13.6,M,28.2,M,31.4,M*14 -$PGRMM,WGS 84*06 -$GPRMC,183502,A,4124.7477,N,08152.2520,W,001.5,348.3,010305,007.9,W*71 -$GPGGA,183502,4124.7477,N,08152.2520,W,2,04,6.9,211.4,M,-34.0,M,,*72 -$GPGSA,A,2,,04,,,07,10,,,,,,35,7.1,6.9,1.0*3F -$GPGSV,3,2,12,07,20,126,35,10,44,197,50,13,20,067,32,23,09,040,00*7A -$PGRME,13.6,M,28.2,M,31.4,M*14 -$PGRMM,WGS 84*06 -$GPRMC,183503,A,4124.7413,N,08152.2473,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183503,4124.7413,N,08152.2473,W,2,04,4.2,228.9,M,-34.0,M,,*78 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.0,4.2,1.7*3E -$GPGSV,3,3,12,24,17,068,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183504,A,4124.7413,N,08152.2473,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183504,4124.7413,N,08152.2473,W,2,04,4.2,229.1,M,-34.0,M,,*76 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.0,4.2,1.7*3E -$GPGSV,3,1,12,02,71,317,00,04,50,056,33,05,43,263,00,06,02,307,00*7E -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183505,A,4124.7414,N,08152.2473,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183505,4124.7414,N,08152.2473,W,2,04,8.4,229.3,M,-34.0,M,,*78 -$GPGSA,A,2,,04,,,07,10,,,,,,35,12.3,8.4,1.0*0A -$GPGSV,3,2,12,07,20,126,34,10,44,197,51,13,20,067,00,23,09,040,00*7B -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183506,A,4124.7415,N,08152.2473,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183506,4124.7415,N,08152.2473,W,2,04,8.4,229.4,M,-34.0,M,,*7D -$GPGSA,A,2,,04,,,07,10,,,,,,35,12.3,8.4,1.0*0A -$GPGSV,3,3,12,24,17,068,00,30,29,304,00,33,09,106,40,35,34,141,43*73 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183507,A,4124.7416,N,08152.2473,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183507,4124.7416,N,08152.2473,W,2,04,11.8,229.5,M,-34.0,M,,*4A -$GPGSA,A,2,,04,,,07,10,,,,,,35,14.9,11.8,1.0*32 -$GPGSV,3,1,12,02,71,317,00,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183508,A,4124.7417,N,08152.2473,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183508,4124.7417,N,08152.2473,W,2,04,14.5,229.6,M,-34.0,M,,*4F -$GPGSA,A,2,,04,,,07,10,,,,,,35,17.0,14.5,1.0*30 -$GPGSV,3,2,12,07,20,126,36,10,44,197,51,13,20,067,00,23,09,040,00*79 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183509,A,4124.7418,N,08152.2473,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183509,4124.7418,N,08152.2473,W,2,04,16.7,229.7,M,-34.0,M,,*40 -$GPGSA,A,2,,04,,,07,10,,,,,,35,18.8,16.7,1.0*37 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,43*74 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183510,A,4124.7418,N,08152.2473,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183510,4124.7418,N,08152.2473,W,2,04,18.5,229.7,M,-34.0,M,,*44 -$GPGSA,A,2,,04,,,07,10,,,,,,35,20.2,18.5,1.0*3A -$GPGSV,3,1,12,02,71,317,00,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183511,A,4124.7419,N,08152.2473,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183511,4124.7419,N,08152.2473,W,2,04,20.0,229.8,M,-34.0,M,,*45 -$GPGSA,A,2,,04,,,07,10,,,,,,35,21.3,20.0,1.0*34 -$GPGSV,3,2,12,07,20,126,36,10,44,197,51,13,20,067,00,23,09,040,00*79 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183512,A,4124.7420,N,08152.2473,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183512,4124.7420,N,08152.2473,W,2,00,21.1,229.8,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,,,,,,,,22.2,21.1,1.0*32 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183513,A,4124.7421,N,08152.2472,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183513,4124.7421,N,08152.2472,W,2,00,21.1,229.9,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,,,,,,,,22.2,21.1,1.0*32 -$GPGSV,3,1,12,02,71,317,00,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183514,A,4124.7422,N,08152.2472,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,183514,4124.7422,N,08152.2472,W,2,00,21.1,229.9,M,-34.0,M,,*4C -$GPGSA,A,2,,,,,,,,,,,,,22.2,21.1,1.0*32 -$GPGSV,3,2,12,07,20,126,00,10,44,197,50,13,20,067,00,23,09,040,00*7D -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183515,A,4124.7422,N,08152.2472,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183515,4124.7422,N,08152.2472,W,2,00,21.1,229.9,M,-34.0,M,,*4D -$GPGSA,A,2,,,,,,,,,,,,,22.2,21.1,1.0*32 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183516,A,4124.7423,N,08152.2472,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183516,4124.7423,N,08152.2472,W,2,00,21.1,229.9,M,-34.0,M,,*4F -$GPGSA,A,2,,,,,,,,,,,,,22.2,21.1,1.0*32 -$GPGSV,3,1,12,02,71,317,00,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183517,A,4124.7424,N,08152.2472,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183517,4124.7424,N,08152.2472,W,2,00,22.1,229.9,M,-34.0,M,,*4A -$GPGSA,A,2,,,,,,,,,,,,,23.0,22.1,1.0*32 -$GPGSV,3,2,12,07,20,126,31,10,44,197,50,13,20,067,00,23,09,040,00*7F -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183518,A,4124.7425,N,08152.2472,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183518,4124.7425,N,08152.2472,W,2,00,22.1,229.9,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,,,,,,,,23.0,22.1,1.0*32 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183519,A,4124.7426,N,08152.2472,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183519,4124.7426,N,08152.2472,W,2,00,22.1,229.9,M,-34.0,M,,*46 -$GPGSA,A,2,,,,,,,,,,,,,23.0,22.1,1.0*32 -$GPGSV,3,1,12,02,71,317,00,04,50,056,00,05,43,263,00,06,02,307,00*7E -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183520,A,4124.7427,N,08152.2472,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183520,4124.7427,N,08152.2472,W,2,00,22.1,229.9,M,-34.0,M,,*4D -$GPGSA,A,2,,,,,,,,,,,,,23.0,22.1,1.0*32 -$GPGSV,3,2,12,07,20,126,00,10,44,197,50,13,20,067,00,23,09,040,00*7D -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183521,A,4124.7427,N,08152.2471,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,183521,4124.7427,N,08152.2471,W,2,00,22.1,229.9,M,-34.0,M,,*4F -$GPGSA,A,2,,,,,,,,,,,,,23.0,22.1,1.0*32 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183522,A,4124.7428,N,08152.2471,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183522,4124.7428,N,08152.2471,W,2,00,22.1,229.9,M,-34.0,M,,*43 -$GPGSA,A,2,,,,,,,,,,,,,23.0,22.1,1.0*32 -$GPGSV,3,1,12,02,72,320,00,04,50,056,35,05,43,263,00,06,02,307,00*7F -$PGRME,13.4,M,25.8,M,29.1,M*1D -$PGRMM,WGS 84*06 -$GPRMC,183523,A,4124.7429,N,08152.2471,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183523,4124.7429,N,08152.2471,W,2,03,2.5,230.0,M,-34.0,M,,*77 -$GPGSA,A,2,,04,,,,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,20,126,00,10,44,197,50,13,20,067,00,23,09,040,00*7D -$PGRME,13.6,M,28.2,M,31.4,M*14 -$PGRMM,WGS 84*06 -$GPRMC,183524,A,4124.7427,N,08152.2471,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183524,4124.7427,N,08152.2471,W,2,03,2.5,230.0,M,-34.0,M,,*7E -$GPGSA,A,2,,04,,,,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.6,M,28.2,M,31.4,M*14 -$PGRMM,WGS 84*06 -$GPRMC,183525,A,4124.7427,N,08152.2471,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183525,4124.7427,N,08152.2471,W,2,03,2.5,230.0,M,-34.0,M,,*7F -$GPGSA,A,2,,04,,,,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,1,12,02,72,320,00,04,50,056,35,05,43,263,00,06,02,307,00*7F -$PGRME,13.6,M,28.2,M,31.4,M*14 -$PGRMM,WGS 84*06 -$GPRMC,183526,A,4124.7426,N,08152.2471,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183526,4124.7426,N,08152.2471,W,2,04,2.5,227.9,M,-34.0,M,,*75 -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,20,126,35,10,44,197,50,13,20,067,00,23,09,040,00*7B -$PGRME,30.5,M,30.6,M,47.2,M*1C -$PGRMM,WGS 84*06 -$GPRMC,183527,A,4124.7408,N,08152.2471,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183527,4124.7408,N,08152.2471,W,2,04,4.2,249.3,M,-34.0,M,,*7B -$GPGSA,A,2,,04,,,07,10,,,,,,35,5.4,4.2,1.7*36 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,43*74 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183528,A,4124.7393,N,08152.2468,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183528,4124.7393,N,08152.2468,W,2,04,8.5,249.1,M,-34.0,M,,*70 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.4,8.5,1.0*36 -$GPGSV,3,1,12,02,72,320,00,04,50,056,32,05,43,263,00,06,02,307,00*78 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183529,A,4124.7380,N,08152.2466,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183529,4124.7380,N,08152.2466,W,2,04,4.2,253.8,M,-34.0,M,,*74 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.1,4.2,1.7*3F -$GPGSV,3,2,12,07,20,126,34,10,44,197,49,13,20,067,00,23,09,040,00*72 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183530,A,4124.7371,N,08152.2464,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,183530,4124.7371,N,08152.2464,W,2,04,4.2,256.0,M,-34.0,M,,*7D -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.1,4.2,1.7*3F -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,43*74 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183531,A,4124.7207,N,08152.2437,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183531,4124.7207,N,08152.2437,W,2,04,8.5,255.9,M,-34.0,M,,*7B -$GPGSA,A,2,,04,,,07,10,,,,,,35,12.4,8.5,1.0*0C -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,263,00,06,02,307,00*70 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183532,A,4124.7207,N,08152.2436,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183532,4124.7207,N,08152.2436,W,2,04,8.5,255.7,M,-34.0,M,,*77 -$GPGSA,A,2,,04,,,07,10,,,,,,35,12.4,8.5,1.0*0C -$GPGSV,3,2,12,07,20,126,33,10,44,197,49,13,20,067,00,23,09,040,00*75 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183533,A,4124.7207,N,08152.2435,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183533,4124.7207,N,08152.2435,W,2,04,8.5,255.6,M,-34.0,M,,*74 -$GPGSA,A,2,,04,,,07,10,,,,,,35,12.4,8.5,1.0*0C -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,43*74 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183534,A,4124.7207,N,08152.2434,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183534,4124.7207,N,08152.2434,W,2,04,11.9,255.5,M,-34.0,M,,*45 -$GPGSA,A,2,,04,,,07,10,,,,,,35,15.1,11.9,1.0*3A -$GPGSV,3,1,12,02,72,320,00,04,49,057,32,05,43,262,00,06,02,307,00*70 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183535,A,4124.7207,N,08152.2434,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,183535,4124.7207,N,08152.2434,W,2,04,4.2,264.0,M,-34.0,M,,*7C -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.1,4.2,1.7*3F -$GPGSV,3,2,12,07,20,126,34,10,44,197,48,13,20,067,00,23,09,040,00*73 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183536,A,4124.7211,N,08152.2433,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183536,4124.7211,N,08152.2433,W,2,04,4.2,263.9,M,-34.0,M,,*71 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.1,4.2,1.7*3F -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183537,A,4124.7215,N,08152.2432,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183537,4124.7215,N,08152.2432,W,2,04,4.2,263.8,M,-34.0,M,,*74 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.1,4.2,1.7*3F -$GPGSV,3,1,12,02,72,320,00,04,49,057,31,05,43,262,00,06,03,307,00*72 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183538,A,4124.7218,N,08152.2432,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183538,4124.7218,N,08152.2432,W,2,04,8.5,263.7,M,-34.0,M,,*72 -$GPGSA,A,2,,04,,,07,10,,,,,,35,12.4,8.5,1.0*0C -$GPGSV,3,2,12,07,20,126,35,10,44,197,48,13,20,067,00,23,09,040,00*72 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183539,A,4124.7221,N,08152.2431,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183539,4124.7221,N,08152.2431,W,2,04,11.9,263.7,M,-34.0,M,,*4E -$GPGSA,A,2,,04,,,07,10,,,,,,35,15.1,11.9,1.0*3A -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.6,M,28.9,M*1A -$PGRMM,WGS 84*06 -$GPRMC,183540,A,4124.7224,N,08152.2431,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183540,4124.7224,N,08152.2431,W,2,04,2.5,263.6,M,-34.0,M,,*7A -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,72,320,00,04,49,057,32,05,43,262,00,06,03,307,00*71 -$PGRME,13.6,M,28.0,M,31.2,M*10 -$PGRMM,WGS 84*06 -$GPRMC,183541,A,4124.7228,N,08152.2431,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183541,4124.7228,N,08152.2431,W,2,04,7.1,263.6,M,-34.0,M,,*76 -$GPGSA,A,2,,04,,,07,10,,,,,,35,7.2,7.1,1.0*35 -$GPGSV,3,2,12,07,19,126,36,10,44,197,47,13,20,067,00,23,09,040,00*74 -$PGRME,13.6,M,28.0,M,31.2,M*10 -$PGRMM,WGS 84*06 -$GPRMC,183542,A,4124.7232,N,08152.2431,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183542,4124.7232,N,08152.2431,W,2,04,10.8,263.6,M,-34.0,M,,*41 -$GPGSA,A,2,,04,,,07,10,,,,,,35,10.9,10.8,1.0*37 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.6,M,28.0,M,31.2,M*10 -$PGRMM,WGS 84*06 -$GPRMC,183543,A,4124.7235,N,08152.2431,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183543,4124.7235,N,08152.2431,W,2,04,2.5,263.5,M,-34.0,M,,*7A -$GPGSA,A,2,,04,,,07,10,,,,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,72,320,36,04,49,057,32,05,43,262,00,06,03,307,00*74 -$PGRME,13.9,M,30.2,M,33.4,M*10 -$PGRMM,WGS 84*06 -$GPRMC,183544,A,4124.7240,N,08152.2432,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183544,4124.7240,N,08152.2432,W,2,03,2.5,263.5,M,-34.0,M,,*7B -$GPGSA,A,2,,04,,,,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,19,126,35,10,44,197,47,13,20,067,36,23,09,040,00*72 -$PGRME,13.9,M,30.2,M,33.4,M*10 -$PGRMM,WGS 84*06 -$GPRMC,183545,A,4124.7244,N,08152.2433,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183545,4124.7244,N,08152.2433,W,2,03,2.5,263.5,M,-34.0,M,,*7F -$GPGSA,A,2,,04,,,,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,43*74 -$PGRME,13.9,M,30.2,M,33.4,M*10 -$PGRMM,WGS 84*06 -$GPRMC,183546,A,4124.7247,N,08152.2433,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183546,4124.7247,N,08152.2433,W,2,04,4.2,268.5,M,-34.0,M,,*72 -$GPGSA,A,2,,04,,,07,10,,,,,,35,5.5,4.2,1.7*37 -$GPGSV,3,1,12,02,72,320,37,04,49,057,33,05,43,262,00,06,03,307,00*74 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183547,A,4124.7251,N,08152.2434,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183547,4124.7251,N,08152.2434,W,2,04,8.5,268.5,M,-34.0,M,,*78 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.5,8.5,1.0*37 -$GPGSV,3,2,12,07,19,126,00,10,44,197,46,13,20,067,35,23,09,040,00*76 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183548,A,4124.7254,N,08152.2434,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183548,4124.7254,N,08152.2434,W,2,04,8.5,268.6,M,-34.0,M,,*71 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.5,8.5,1.0*37 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183549,A,4124.7257,N,08152.2435,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183549,4124.7257,N,08152.2435,W,2,04,8.5,268.6,M,-34.0,M,,*72 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.5,8.5,1.0*37 -$GPGSV,3,1,12,02,72,320,38,04,49,057,00,05,43,262,00,06,03,307,00*7B -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183550,A,4124.7259,N,08152.2435,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183550,4124.7259,N,08152.2435,W,2,04,8.5,268.6,M,-34.0,M,,*74 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.5,8.5,1.0*37 -$GPGSV,3,2,12,07,19,126,00,10,44,197,45,13,20,067,34,23,09,040,00*74 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183551,A,4124.7262,N,08152.2436,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183551,4124.7262,N,08152.2436,W,2,04,8.5,268.6,M,-34.0,M,,*7E -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.5,8.5,1.0*37 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183552,A,4124.7264,N,08152.2436,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183552,4124.7264,N,08152.2436,W,2,04,8.5,268.6,M,-34.0,M,,*7B -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.5,8.5,1.0*37 -$GPGSV,3,1,12,02,72,320,39,04,49,057,00,05,43,262,00,06,03,307,00*7A -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183553,A,4124.7267,N,08152.2437,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183553,4124.7267,N,08152.2437,W,2,04,12.0,268.6,M,-34.0,M,,*46 -$GPGSA,A,2,,04,,,07,10,,,,,,35,12.8,12.0,1.0*3E -$GPGSV,3,2,12,07,19,126,33,10,45,198,45,13,20,067,35,23,09,040,00*7B -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183554,A,4124.7269,N,08152.2438,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183554,4124.7269,N,08152.2438,W,2,04,14.8,268.6,M,-34.0,M,,*4E -$GPGSA,A,2,,04,,,07,10,,,,,,35,15.5,14.8,1.0*3A -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183555,A,4124.7271,N,08152.2438,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183555,4124.7271,N,08152.2438,W,2,00,14.8,268.6,M,-34.0,M,,*42 -$GPGSA,A,2,,,,,,,,,,,,,15.5,14.8,1.0*3E -$GPGSV,3,1,12,02,72,320,38,04,49,057,00,05,43,262,00,06,03,307,00*7B -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183556,A,4124.7273,N,08152.2439,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183556,4124.7273,N,08152.2439,W,2,00,14.8,268.6,M,-34.0,M,,*42 -$GPGSA,A,2,,,,,,,,,,,,,15.5,14.8,1.0*3E -$GPGSV,3,2,12,07,19,126,35,10,45,198,44,13,20,067,35,23,09,040,00*7C -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183557,A,4124.7275,N,08152.2439,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183557,4124.7275,N,08152.2439,W,2,00,17.1,268.6,M,-34.0,M,,*4F -$GPGSA,A,2,,,,,,,,,,,,,17.7,17.1,1.0*34 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183558,A,4124.7276,N,08152.2440,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183558,4124.7276,N,08152.2440,W,2,00,19.0,268.6,M,-34.0,M,,*42 -$GPGSA,A,2,,,,,,,,,,,,,19.4,19.0,1.0*36 -$GPGSV,3,1,12,02,72,320,38,04,49,057,00,05,43,262,00,06,03,307,00*7B -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183559,A,4124.7278,N,08152.2440,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183559,4124.7278,N,08152.2440,W,2,00,20.5,268.6,M,-34.0,M,,*42 -$GPGSA,A,2,,,,,,,,,,,,,20.9,20.5,1.0*3E -$GPGSV,3,2,12,07,19,126,35,10,45,198,45,13,20,067,35,23,09,040,00*7D -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183600,A,4124.7279,N,08152.2441,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183600,4124.7279,N,08152.2441,W,2,00,20.5,268.6,M,-34.0,M,,*4D -$GPGSA,A,2,,,,,,,,,,,,,20.9,20.5,1.0*3E -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183601,A,4124.7281,N,08152.2441,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183601,4124.7281,N,08152.2441,W,2,00,20.5,268.6,M,-34.0,M,,*4B -$GPGSA,A,2,,,,,,,,,,,,,20.9,20.5,1.0*3E -$GPGSV,3,1,12,02,72,320,37,04,49,057,00,05,43,262,00,06,03,307,00*74 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183602,A,4124.7282,N,08152.2442,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183602,4124.7282,N,08152.2442,W,2,00,20.5,268.6,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,,,,,,,,20.9,20.5,1.0*3E -$GPGSV,3,2,12,07,19,126,35,10,45,198,45,13,20,067,37,23,09,040,00*7F -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183603,A,4124.7284,N,08152.2443,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183603,4124.7284,N,08152.2443,W,2,00,21.7,268.6,M,-34.0,M,,*4D -$GPGSA,A,2,,,,,,,,,,,,,22.0,21.7,1.0*36 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183604,A,4124.7285,N,08152.2443,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183604,4124.7285,N,08152.2443,W,2,00,22.7,268.6,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,,,,,,,,23.0,22.7,1.0*34 -$GPGSV,3,1,12,02,72,320,37,04,49,057,00,05,43,262,32,06,03,307,00*75 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183605,A,4124.7287,N,08152.2444,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183605,4124.7287,N,08152.2444,W,2,00,23.6,268.6,M,-34.0,M,,*4C -$GPGSA,A,2,,,,,,,,,,,,,23.8,23.6,1.0*3C -$GPGSV,3,2,12,07,19,126,34,10,45,198,45,13,20,066,38,23,09,040,00*70 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183606,A,4124.7288,N,08152.2444,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183606,4124.7288,N,08152.2444,W,2,00,23.6,268.6,M,-34.0,M,,*40 -$GPGSA,A,2,,,,,,,,,,,,,23.8,23.6,1.0*3C -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183607,A,4124.7289,N,08152.2445,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183607,4124.7289,N,08152.2445,W,2,00,24.2,268.6,M,-34.0,M,,*42 -$GPGSA,A,2,,,,,,,,,,,,,24.4,24.2,1.0*34 -$GPGSV,3,1,12,02,72,320,37,04,49,057,33,05,43,262,33,06,03,307,00*74 -$PGRME,13.4,M,25.5,M,28.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,183608,A,4124.7291,N,08152.2446,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183608,4124.7291,N,08152.2446,W,2,04,4.2,268.4,M,-34.0,M,,*73 -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.0,4.2,1.7*3E -$GPGSV,3,2,12,07,19,126,35,10,45,198,45,13,20,066,38,23,09,040,00*71 -$PGRME,13.4,M,25.4,M,28.7,M*16 -$PGRMM,WGS 84*06 -$GPRMC,183609,A,4124.7292,N,08152.2447,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183609,4124.7292,N,08152.2447,W,2,04,4.2,267.7,M,-34.0,M,,*7C -$GPGSA,A,2,,04,,,07,10,,,,,,35,9.0,4.2,1.7*3E -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,44*72 -$PGRME,13.4,M,25.4,M,28.7,M*16 -$PGRMM,WGS 84*06 -$GPRMC,183610,A,4124.7293,N,08152.2446,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183610,4124.7293,N,08152.2446,W,1,04,4.2,265.8,M,-34.0,M,,*7A -$GPGSA,A,3,,04,,,07,10,,,,,,35,9.0,4.2,2.3*38 -$GPGSV,3,1,12,02,72,320,37,04,49,057,31,05,43,262,33,06,03,307,00*76 -$PGRME,13.4,M,25.4,M,28.7,M*16 -$PGRMM,WGS 84*06 -$GPRMC,183611,A,4124.7294,N,08152.2447,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183611,4124.7294,N,08152.2447,W,1,04,4.2,265.5,M,-34.0,M,,*70 -$GPGSA,A,3,,04,,,07,10,,,,,,35,9.0,4.2,2.3*38 -$GPGSV,3,2,12,07,19,126,35,10,45,198,45,13,20,066,38,23,09,040,00*71 -$PGRME,13.4,M,25.4,M,28.7,M*16 -$PGRMM,WGS 84*06 -$GPRMC,183612,A,4124.7295,N,08152.2448,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183612,4124.7295,N,08152.2448,W,1,04,8.6,265.4,M,-34.0,M,,*74 -$GPGSA,A,3,,04,,,07,10,,,,,,35,12.5,8.6,1.0*0F -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,43*75 -$PGRME,13.4,M,25.4,M,28.7,M*16 -$PGRMM,WGS 84*06 -$GPRMC,183613,A,4124.7296,N,08152.2449,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183613,4124.7296,N,08152.2449,W,1,04,2.5,265.2,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,07,10,,,,,,35,2.7,2.5,1.0*35 -$GPGSV,3,1,12,02,72,320,36,04,49,057,31,05,43,262,34,06,03,307,00*70 -$PGRME,10.1,M,25.4,M,27.3,M*1B -$PGRMM,WGS 84*06 -$GPRMC,183614,A,4124.7298,N,08152.2450,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183614,4124.7298,N,08152.2450,W,1,04,2.5,265.1,M,-34.0,M,,*7A -$GPGSA,A,3,,04,,,07,10,,,,,,35,2.7,2.5,1.0*35 -$GPGSV,3,2,12,07,19,126,00,10,45,198,46,13,20,066,37,23,09,040,00*7B -$PGRME,10.1,M,25.4,M,27.3,M*1B -$PGRMM,WGS 84*06 -$GPRMC,183615,A,4124.7299,N,08152.2450,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183615,4124.7299,N,08152.2450,W,1,04,2.5,265.1,M,-34.0,M,,*7A -$GPGSA,A,3,,04,,,07,10,,,,,,35,2.7,2.5,1.0*35 -$GPGSV,3,3,12,24,17,068,35,30,29,303,00,33,09,106,41,35,34,141,43*73 -$PGRME,10.1,M,25.4,M,27.3,M*1B -$PGRMM,WGS 84*06 -$GPRMC,183616,A,4124.7300,N,08152.2451,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183616,4124.7300,N,08152.2451,W,1,04,2.5,265.0,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,07,10,,,,,,35,2.7,2.5,1.0*35 -$GPGSV,3,1,12,02,72,320,36,04,49,057,31,05,43,262,33,06,03,307,00*77 -$PGRME,10.1,M,25.4,M,27.3,M*1B -$PGRMM,WGS 84*06 -$GPRMC,183617,A,4124.7301,N,08152.2451,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183617,4124.7301,N,08152.2451,W,1,04,2.5,265.0,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,07,10,,,,,,35,2.7,2.5,1.0*35 -$GPGSV,3,2,12,07,19,126,00,10,45,198,46,13,20,066,00,23,09,040,00*7F -$PGRME,10.1,M,25.4,M,27.3,M*1B -$PGRMM,WGS 84*06 -$GPRMC,183618,A,4124.7302,N,08152.2452,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183618,4124.7302,N,08152.2452,W,1,04,2.5,264.9,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,07,10,,,,,,35,2.7,2.5,1.0*35 -$GPGSV,3,3,12,24,17,068,35,30,29,303,00,33,09,106,41,35,34,141,43*73 -$PGRME,10.1,M,25.4,M,27.3,M*1B -$PGRMM,WGS 84*06 -$GPRMC,183619,A,4124.7303,N,08152.2452,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183619,4124.7303,N,08152.2452,W,1,03,2.5,264.9,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,1,12,02,72,320,36,04,49,057,31,05,43,262,32,06,03,307,00*76 -$PGRME,10.1,M,25.4,M,27.3,M*1B -$PGRMM,WGS 84*06 -$GPRMC,183620,A,4124.7304,N,08152.2453,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183620,4124.7304,N,08152.2453,W,1,05,3.7,262.7,M,-34.0,M,,*79 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,5.6,3.7,1.8*3E -$GPGSV,3,2,12,07,19,126,34,10,45,198,46,13,20,066,00,23,09,040,00*78 -$PGRME,10.3,M,25.7,M,27.6,M*1F -$PGRMM,WGS 84*06 -$GPRMC,183621,A,4124.7305,N,08152.2454,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183621,4124.7305,N,08152.2454,W,1,05,2.8,261.1,M,-34.0,M,,*75 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,3,12,24,17,068,36,30,29,303,00,33,09,106,41,35,34,141,43*70 -$PGRME,8.6,M,10.5,M,13.6,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183622,A,4124.7306,N,08152.2455,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183622,4124.7306,N,08152.2455,W,1,05,2.8,259.2,M,-34.0,M,,*7C -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.2,2.8,1.3*39 -$GPGSV,3,1,12,02,72,320,37,04,49,057,34,05,43,262,00,06,03,307,00*73 -$PGRME,8.6,M,10.5,M,13.6,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183623,A,4124.7307,N,08152.2456,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183623,4124.7307,N,08152.2456,W,1,05,4.2,258.3,M,-34.0,M,,*73 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,5.9,4.2,1.7*3C -$GPGSV,3,2,12,07,19,126,35,10,45,198,46,13,20,066,00,23,09,040,00*79 -$PGRME,9.1,M,12.0,M,15.1,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183624,A,4124.7308,N,08152.2456,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183624,4124.7308,N,08152.2456,W,1,05,4.2,256.7,M,-34.0,M,,*71 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,6.2,4.2,2.3*33 -$GPGSV,3,3,12,24,17,068,34,30,29,303,00,33,09,106,40,35,34,141,43*73 -$PGRME,7.2,M,10.5,M,12.7,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183625,A,4124.7309,N,08152.2457,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183625,4124.7309,N,08152.2457,W,1,05,4.2,256.5,M,-34.0,M,,*72 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,6.2,4.2,2.3*33 -$GPGSV,3,1,12,02,72,320,36,04,49,057,34,05,43,262,00,06,03,307,00*72 -$PGRME,7.8,M,12.0,M,14.3,M*24 -$PGRMM,WGS 84*06 -$GPRMC,183626,A,4124.7310,N,08152.2458,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183626,4124.7310,N,08152.2458,W,1,05,3.7,256.5,M,-34.0,M,,*74 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,8.5,3.7,1.8*30 -$GPGSV,3,2,12,07,19,126,34,10,45,198,45,13,20,066,33,23,09,040,00*7B -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183627,A,4124.7311,N,08152.2458,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183627,4124.7311,N,08152.2458,W,1,05,2.8,256.6,M,-34.0,M,,*79 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,3,12,24,17,068,32,30,29,303,00,33,09,106,40,35,34,141,43*75 -$PGRME,8.3,M,13.6,M,16.0,M*26 -$PGRMM,WGS 84*06 -$GPRMC,183628,A,4124.7312,N,08152.2460,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183628,4124.7312,N,08152.2460,W,1,05,2.8,256.7,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,1,12,02,72,320,36,04,49,057,00,05,43,262,00,06,03,307,00*75 -$PGRME,8.5,M,13.6,M,16.1,M*21 -$PGRMM,WGS 84*06 -$GPRMC,183629,A,4124.7313,N,08152.2460,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183629,4124.7313,N,08152.2460,W,1,05,2.8,256.7,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,2,12,07,19,126,00,10,45,198,45,13,20,066,32,23,09,040,00*7D -$PGRME,8.6,M,13.6,M,16.1,M*22 -$PGRMM,WGS 84*06 -$GPRMC,183630,A,4124.7314,N,08152.2461,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183630,4124.7314,N,08152.2461,W,1,05,2.8,256.8,M,-34.0,M,,*7E -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,44*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183631,A,4124.7315,N,08152.2462,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183631,4124.7315,N,08152.2462,W,1,05,2.8,256.8,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,1,12,02,72,320,34,04,49,057,00,05,43,262,00,06,03,307,00*77 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183632,A,4124.7316,N,08152.2463,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183632,4124.7316,N,08152.2463,W,1,05,2.8,256.8,M,-34.0,M,,*7C -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,2,12,07,19,126,00,10,45,198,45,13,20,066,00,23,09,040,00*7C -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183633,A,4124.7317,N,08152.2463,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183633,4124.7317,N,08152.2463,W,1,05,2.8,256.8,M,-34.0,M,,*7C -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,43*74 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183634,A,4124.7318,N,08152.2464,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183634,4124.7318,N,08152.2464,W,1,04,2.8,256.9,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,1,12,02,72,320,34,04,49,057,00,05,43,262,00,06,03,307,00*77 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183635,A,4124.7319,N,08152.2465,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183635,4124.7319,N,08152.2465,W,1,03,2.8,256.9,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,2,12,07,19,126,00,10,45,198,45,13,20,066,00,23,09,040,00*7C -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183636,A,4124.7319,N,08152.2466,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183636,4124.7319,N,08152.2466,W,1,03,2.8,256.9,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,44*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183637,A,4124.7320,N,08152.2466,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183637,4124.7320,N,08152.2466,W,1,03,7.5,256.9,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,,10,,,24,,,35,7.6,7.5,1.0*31 -$GPGSV,3,1,12,02,72,320,33,04,49,057,00,05,43,262,00,06,03,307,00*70 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183638,A,4124.7321,N,08152.2467,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183638,4124.7321,N,08152.2467,W,1,03,11.3,256.9,M,-34.0,M,,*48 -$GPGSA,A,3,,,,,,10,,,24,,,35,11.4,11.3,1.0*35 -$GPGSV,3,2,12,07,19,126,33,10,45,198,45,13,20,066,00,23,09,040,00*7C -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183639,A,4124.7322,N,08152.2468,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,183639,4124.7322,N,08152.2468,W,1,00,14.4,256.9,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,,,,,,,,,14.5,14.4,1.0*32 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,40,35,34,141,43*74 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183640,A,4124.7323,N,08152.2468,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183640,4124.7323,N,08152.2468,W,1,00,16.9,256.9,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,,,,,,,,,17.0,16.9,1.0*3B -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,00,06,03,307,00*70 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183641,A,4124.7324,N,08152.2469,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183641,4124.7324,N,08152.2469,W,1,00,19.0,256.9,M,-34.0,M,,*45 -$GPGSA,A,3,,,,,,,,,,,,,19.0,19.0,1.0*33 -$GPGSV,3,2,12,07,19,126,35,10,45,198,45,13,20,066,00,23,09,039,00*74 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183642,A,4124.7324,N,08152.2469,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183642,4124.7324,N,08152.2469,W,1,00,20.6,256.9,M,-34.0,M,,*4A -$GPGSA,A,3,,,,,,,,,,,,,20.7,20.6,1.0*32 -$GPGSV,3,3,12,24,17,068,00,30,29,303,00,33,09,106,41,35,34,141,44*72 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183643,A,4124.7325,N,08152.2470,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183643,4124.7325,N,08152.2470,W,1,00,22.0,256.9,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,00,06,03,307,00*70 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183644,A,4124.7326,N,08152.2470,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183644,4124.7326,N,08152.2470,W,1,00,22.0,256.9,M,-34.0,M,,*42 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,2,12,07,19,126,00,10,45,198,45,13,20,066,00,23,09,039,00*72 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183645,A,4124.7327,N,08152.2471,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183645,4124.7327,N,08152.2471,W,1,00,22.0,256.9,M,-34.0,M,,*43 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,3,12,24,16,068,00,30,29,303,00,33,09,106,41,35,34,141,44*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183646,A,4124.7327,N,08152.2472,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183646,4124.7327,N,08152.2472,W,1,00,22.0,256.9,M,-34.0,M,,*43 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,00,06,03,307,00*70 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183647,A,4124.7328,N,08152.2472,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183647,4124.7328,N,08152.2472,W,1,00,22.0,256.9,M,-34.0,M,,*4D -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,2,12,07,19,126,00,10,45,198,45,13,20,066,00,23,09,039,00*72 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183648,A,4124.7329,N,08152.2473,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183648,4124.7329,N,08152.2473,W,1,00,22.0,256.9,M,-34.0,M,,*42 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,3,12,24,16,068,00,30,29,303,00,33,09,106,41,35,34,141,44*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183649,A,4124.7329,N,08152.2473,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183649,4124.7329,N,08152.2473,W,1,00,22.0,256.9,M,-34.0,M,,*43 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,00,06,03,307,00*70 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183650,A,4124.7330,N,08152.2474,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183650,4124.7330,N,08152.2474,W,1,00,22.0,256.9,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,2,12,07,19,126,00,10,45,198,44,13,20,066,00,23,09,039,00*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183651,A,4124.7331,N,08152.2474,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183651,4124.7331,N,08152.2474,W,1,00,22.0,256.9,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,3,12,24,16,068,00,30,29,303,00,33,09,106,41,35,34,141,43*74 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183652,A,4124.7331,N,08152.2474,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183652,4124.7331,N,08152.2474,W,1,00,22.0,256.9,M,-34.0,M,,*47 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,00,06,03,307,00*70 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183653,A,4124.7332,N,08152.2475,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183653,4124.7332,N,08152.2475,W,1,00,22.0,256.9,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,2,12,07,19,126,00,10,45,198,44,13,20,066,00,23,09,039,00*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183654,A,4124.7332,N,08152.2475,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183654,4124.7332,N,08152.2475,W,1,00,22.0,256.9,M,-34.0,M,,*43 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,3,12,24,16,068,00,30,29,303,00,33,09,106,41,35,34,141,44*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183655,A,4124.7333,N,08152.2476,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183655,4124.7333,N,08152.2476,W,1,00,22.0,256.9,M,-34.0,M,,*40 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,00,06,03,307,00*70 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183656,A,4124.7334,N,08152.2476,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183656,4124.7334,N,08152.2476,W,1,00,22.0,256.9,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,2,12,07,19,126,00,10,45,198,44,13,20,066,00,23,09,039,00*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183657,A,4124.7334,N,08152.2477,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183657,4124.7334,N,08152.2477,W,1,00,22.0,256.9,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,3,12,24,16,068,00,30,29,303,00,33,09,106,41,35,34,141,43*74 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183658,A,4124.7335,N,08152.2477,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183658,4124.7335,N,08152.2477,W,1,00,22.0,256.9,M,-34.0,M,,*4A -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,35,06,03,307,00*76 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183659,A,4124.7335,N,08152.2477,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183659,4124.7335,N,08152.2477,W,1,00,22.0,256.9,M,-34.0,M,,*4B -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,2,12,07,19,126,00,10,45,198,44,13,20,066,00,23,09,039,00*73 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183700,A,4124.7336,N,08152.2478,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183700,4124.7336,N,08152.2478,W,1,00,22.0,256.9,M,-34.0,M,,*4A -$GPGSA,A,3,,,,,,,,,,,,,22.0,22.0,1.0*33 -$GPGSV,3,3,12,24,16,068,00,30,29,303,00,33,09,106,41,35,34,141,43*74 -$PGRME,8.7,M,13.6,M,16.2,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183659,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*6D -$GPGGA,183659,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*4A -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,35,06,03,307,00*76 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183700,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*60 -$GPGGA,183700,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*47 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,00,10,45,198,43,13,20,066,00,23,09,039,00*74 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183701,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*61 -$GPGGA,183701,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*46 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,29,303,00,33,09,106,41,35,34,141,43*74 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183702,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*62 -$GPGGA,183702,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*45 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,34,06,03,307,00*77 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183703,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*63 -$GPGGA,183703,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*44 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,00,10,45,198,43,13,20,066,00,23,09,039,00*74 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183704,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*64 -$GPGGA,183704,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*43 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,29,303,00,33,09,106,40,35,34,141,43*75 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183705,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*65 -$GPGGA,183705,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*42 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,33,06,03,307,00*70 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183706,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*66 -$GPGGA,183706,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*41 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,00,10,45,198,44,13,20,066,00,23,09,039,00*73 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183707,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*67 -$GPGGA,183707,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,44*7A -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183708,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*68 -$GPGGA,183708,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*4F -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,32,06,03,307,00*71 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183709,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*69 -$GPGGA,183709,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*4E -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,00,10,45,198,45,13,20,066,00,23,09,039,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183710,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*61 -$GPGGA,183710,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*46 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,43*7D -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183711,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*60 -$GPGGA,183711,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*47 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,31,06,03,307,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183712,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*63 -$GPGGA,183712,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*44 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,00,10,45,198,45,13,20,066,00,23,09,039,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183713,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*62 -$GPGGA,183713,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*45 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,43*7D -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183714,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*65 -$GPGGA,183714,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*42 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,31,06,03,307,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183715,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*64 -$GPGGA,183715,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*43 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,00,10,45,198,46,13,20,066,00,23,09,039,00*71 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183716,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*67 -$GPGGA,183716,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,44*7A -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183717,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*66 -$GPGGA,183717,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*41 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,320,00,04,49,057,00,05,43,262,32,06,03,307,00*71 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183718,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*69 -$GPGGA,183718,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*4E -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,37,10,45,198,46,13,20,066,00,23,09,039,00*75 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183719,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*68 -$GPGGA,183719,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*4F -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,44*7A -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183720,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*62 -$GPGGA,183720,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*45 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,323,00,04,49,057,00,05,43,262,31,06,03,307,00*71 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183721,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*63 -$GPGGA,183721,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*44 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,36,10,45,198,46,13,20,066,00,23,09,039,00*74 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183722,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*60 -$GPGGA,183722,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*47 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,44*7A -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183723,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*61 -$GPGGA,183723,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*46 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,323,00,04,49,057,00,05,43,262,31,06,03,307,00*71 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183724,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*66 -$GPGGA,183724,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*41 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,37,10,45,198,46,13,20,066,00,23,09,039,00*75 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183725,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*67 -$GPGGA,183725,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*40 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,44*7A -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183726,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*64 -$GPGGA,183726,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*43 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,1,12,02,72,323,00,04,49,057,00,05,43,262,34,06,03,307,00*74 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183727,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*65 -$GPGGA,183727,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*42 -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,2,12,07,19,126,37,10,45,198,46,13,20,066,34,23,09,039,00*72 -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183728,V,4124.7387,N,08152.2515,W,,,010305,007.9,W*6A -$GPGGA,183728,4124.7387,N,08152.2515,W,0,00,,,M,,M,,*4D -$GPGSA,A,1,,,,,,,,,,,,,,,*1E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,40,35,34,141,44*7B -$PGRME,,M,,M,,M*00 -$PGRMM,WGS 84*06 -$GPRMC,183731,A,4124.7348,N,08152.2487,W,000.0,000.0,010305,007.9,W*7C -$GPGGA,183731,4124.7348,N,08152.2487,W,1,03,2.5,256.9,M,-34.0,M,,*75 -$GPGSA,A,2,,04,,,,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,43,262,00,06,03,307,00*72 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183732,A,4124.7344,N,08152.2486,W,000.0,000.0,010305,007.9,W*72 -$GPGGA,183732,4124.7344,N,08152.2486,W,1,03,2.5,256.9,M,-34.0,M,,*7B -$GPGSA,A,2,,04,,,,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,19,126,36,10,45,198,46,13,20,066,34,23,09,039,00*73 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183733,A,4124.7341,N,08152.2486,W,000.0,000.0,010305,007.9,W*76 -$GPGGA,183733,4124.7341,N,08152.2486,W,1,03,7.4,256.9,M,-34.0,M,,*7B -$GPGSA,A,2,,04,,,,10,,,,,,35,7.6,7.4,1.0*33 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,44*7A -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183734,A,4124.7197,N,08152.2484,W,000.0,000.0,010305,007.9,W*7A -$GPGGA,183734,4124.7197,N,08152.2484,W,1,03,11.4,256.9,M,-34.0,M,,*40 -$GPGSA,A,2,,04,,,,10,,,,,,35,11.6,11.4,1.0*33 -$GPGSV,3,1,12,02,72,323,34,04,48,057,00,05,42,260,35,06,03,307,00*70 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183735,A,4124.7161,N,08152.2477,W,000.0,000.0,010305,007.9,W*7E -$GPGGA,183735,4124.7161,N,08152.2477,W,1,03,14.7,256.9,M,-34.0,M,,*42 -$GPGSA,A,2,,04,,,,10,,,,,,35,14.8,14.7,1.0*3E -$GPGSV,3,2,12,07,19,126,36,10,45,198,46,13,20,066,34,23,09,039,00*73 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183736,A,4124.7132,N,08152.2473,W,000.0,000.0,010305,007.9,W*7F -$GPGGA,183736,4124.7132,N,08152.2473,W,1,03,14.7,256.9,M,-34.0,M,,*43 -$GPGSA,A,2,,04,,,,10,,,,,,35,14.8,14.7,1.0*3E -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,40,35,34,141,43*7C -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183737,A,4124.7004,N,08152.2451,W,000.0,000.0,010305,007.9,W*7A -$GPGGA,183737,4124.7004,N,08152.2451,W,1,03,17.3,256.9,M,-34.0,M,,*41 -$GPGSA,A,2,,04,,,,10,,,,,,35,17.4,17.3,1.0*36 -$GPGSV,3,1,12,02,72,323,34,04,48,057,00,05,42,260,00,06,04,307,00*71 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183738,A,4124.6989,N,08152.2448,W,000.0,000.0,010305,007.9,W*70 -$GPGGA,183738,4124.6989,N,08152.2448,W,1,03,17.3,256.9,M,-34.0,M,,*4B -$GPGSA,A,2,,04,,,,10,,,,,,35,17.4,17.3,1.0*36 -$GPGSV,3,2,12,07,19,126,35,10,45,198,46,13,20,066,32,23,09,039,00*76 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183739,A,4124.6874,N,08152.2429,W,000.0,000.0,010305,007.9,W*75 -$GPGGA,183739,4124.6874,N,08152.2429,W,1,03,17.3,256.9,M,-34.0,M,,*4E -$GPGSA,A,2,,04,,,,10,,,,,,35,17.4,17.3,1.0*36 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,43*7D -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183740,A,4124.6874,N,08152.2429,W,000.0,000.0,010305,007.9,W*7B -$GPGGA,183740,4124.6874,N,08152.2429,W,1,00,19.5,256.9,M,-34.0,M,,*4B -$GPGSA,A,2,,,,,,,,,,,,,19.6,19.5,1.0*31 -$GPGSV,3,1,12,02,72,323,36,04,48,057,00,05,42,260,00,06,04,307,00*73 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183741,A,4124.6874,N,08152.2429,W,000.0,000.0,010305,007.9,W*7A -$GPGGA,183741,4124.6874,N,08152.2429,W,1,00,21.2,256.9,M,-34.0,M,,*46 -$GPGSA,A,2,,,,,,,,,,,,,21.3,21.2,1.0*33 -$GPGSV,3,2,12,07,18,127,37,10,45,198,46,13,20,066,33,23,09,039,00*75 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183742,A,4124.6874,N,08152.2428,W,000.0,000.0,010305,007.9,W*78 -$GPGGA,183742,4124.6874,N,08152.2428,W,1,00,22.7,256.9,M,-34.0,M,,*42 -$GPGSA,A,2,,,,,,,,,,,,,22.7,22.7,1.0*32 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,40,35,34,141,43*7C -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183743,A,4124.6874,N,08152.2428,W,000.0,000.0,010305,007.9,W*79 -$GPGGA,183743,4124.6874,N,08152.2428,W,1,00,23.8,256.9,M,-34.0,M,,*4D -$GPGSA,A,2,,,,,,,,,,,,,23.9,23.8,1.0*33 -$GPGSV,3,1,12,02,72,323,37,04,48,057,00,05,42,260,00,06,04,307,00*72 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183744,A,4124.6873,N,08152.2428,W,000.0,000.0,010305,007.9,W*79 -$GPGGA,183744,4124.6873,N,08152.2428,W,1,00,24.8,256.9,M,-34.0,M,,*4A -$GPGSA,A,2,,,,,,,,,,,,,24.8,24.8,1.0*32 -$GPGSV,3,2,12,07,18,127,36,10,45,198,46,13,20,066,34,23,09,039,00*73 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183745,A,4124.6873,N,08152.2428,W,000.0,000.0,010305,007.9,W*78 -$GPGGA,183745,4124.6873,N,08152.2428,W,1,00,25.5,256.9,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,,,,,,,,25.6,25.5,1.0*31 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,40,35,34,141,43*7C -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183746,A,4124.6873,N,08152.2428,W,000.0,000.0,010305,007.9,W*7B -$GPGGA,183746,4124.6873,N,08152.2428,W,1,00,25.5,256.9,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,,,,,,,,25.6,25.5,1.0*31 -$GPGSV,3,1,12,02,72,323,37,04,48,057,00,05,42,260,00,06,04,307,00*72 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183747,A,4124.6873,N,08152.2427,W,000.0,000.0,010305,007.9,W*75 -$GPGGA,183747,4124.6873,N,08152.2427,W,1,00,25.5,256.9,M,-34.0,M,,*4A -$GPGSA,A,2,,,,,,,,,,,,,25.6,25.5,1.0*31 -$GPGSV,3,2,12,07,18,127,31,10,45,198,45,13,20,066,35,23,09,039,00*76 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183748,A,4124.6872,N,08152.2427,W,000.0,000.0,010305,007.9,W*7B -$GPGGA,183748,4124.6872,N,08152.2427,W,1,00,26.1,256.9,M,-34.0,M,,*43 -$GPGSA,A,2,,,,,,,,,,,,,26.2,26.1,1.0*31 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,43*7D -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183749,A,4124.6872,N,08152.2427,W,000.0,000.0,010305,007.9,W*7A -$GPGGA,183749,4124.6872,N,08152.2427,W,1,00,26.1,256.9,M,-34.0,M,,*42 -$GPGSA,A,2,,,,,,,,,,,,,26.2,26.1,1.0*31 -$GPGSV,3,1,12,02,72,323,37,04,48,057,00,05,42,260,00,06,04,307,00*72 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183750,A,4124.6872,N,08152.2427,W,000.0,000.0,010305,007.9,W*72 -$GPGGA,183750,4124.6872,N,08152.2427,W,1,00,26.7,256.9,M,-34.0,M,,*4C -$GPGSA,A,2,,,,,,,,,,,,,26.7,26.7,1.0*32 -$GPGSV,3,2,12,07,18,127,33,10,45,198,45,13,20,066,33,23,09,039,00*72 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183751,A,4124.6872,N,08152.2426,W,000.0,000.0,010305,007.9,W*72 -$GPGGA,183751,4124.6872,N,08152.2426,W,1,00,27.1,256.9,M,-34.0,M,,*4B -$GPGSA,A,2,,,,,,,,,,,,,27.1,27.1,1.0*32 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,41,35,34,141,43*7D -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183752,A,4124.6871,N,08152.2426,W,000.0,000.0,010305,007.9,W*72 -$GPGGA,183752,4124.6871,N,08152.2426,W,1,00,27.1,256.9,M,-34.0,M,,*4B -$GPGSA,A,2,,,,,,,,,,,,,27.1,27.1,1.0*32 -$GPGSV,3,1,12,02,72,323,37,04,48,057,00,05,42,260,33,06,04,307,00*72 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183753,A,4124.6871,N,08152.2426,W,000.0,000.0,010305,007.9,W*73 -$GPGGA,183753,4124.6871,N,08152.2426,W,1,00,27.1,256.9,M,-34.0,M,,*4A -$GPGSA,A,2,,,,,,,,,,,,,27.1,27.1,1.0*32 -$GPGSV,3,2,12,07,18,127,34,10,46,198,44,13,20,066,00,23,09,039,00*77 -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183754,A,4124.6871,N,08152.2426,W,000.0,000.0,010305,007.9,W*74 -$GPGGA,183754,4124.6871,N,08152.2426,W,1,00,27.4,256.9,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,,,,,,,,27.5,27.4,1.0*33 -$GPGSV,3,3,12,24,16,068,35,30,30,302,00,33,09,106,41,35,34,141,43*7B -$PGRME,8.2,M,13.6,M,15.9,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183755,A,4124.6872,N,08152.2429,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183755,4124.6872,N,08152.2429,W,1,04,3.8,273.5,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.4,3.8,1.8*3B -$GPGSV,3,1,12,02,72,323,37,04,48,057,00,05,42,260,33,06,04,307,00*72 -$PGRME,8.5,M,15.0,M,17.2,M*23 -$PGRMM,WGS 84*06 -$GPRMC,183756,A,4124.6897,N,08152.2432,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183756,4124.6897,N,08152.2432,W,1,04,2.8,273.1,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,2,12,07,18,127,33,10,46,198,44,13,20,066,00,23,09,039,00*70 -$PGRME,8.7,M,15.0,M,17.3,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183757,A,4124.7033,N,08152.2454,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183757,4124.7033,N,08152.2454,W,1,04,2.8,272.8,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,3,12,24,16,068,36,30,30,302,00,33,09,106,41,35,34,141,43*78 -$PGRME,8.7,M,15.0,M,17.3,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183758,A,4124.7091,N,08152.2466,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183758,4124.7091,N,08152.2466,W,1,04,2.8,272.5,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,1,12,02,72,323,37,04,48,057,00,05,42,260,34,06,04,307,00*75 -$PGRME,8.7,M,15.0,M,17.3,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183759,A,4124.7137,N,08152.2477,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183759,4124.7137,N,08152.2477,W,1,04,2.8,272.3,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,2,12,07,18,127,00,10,46,198,44,13,20,066,00,23,09,039,00*70 -$PGRME,8.8,M,15.0,M,17.4,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183800,A,4124.7293,N,08152.2510,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183800,4124.7293,N,08152.2510,W,1,04,2.8,272.2,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,3,12,24,16,068,36,30,30,302,00,33,09,106,41,35,34,141,43*78 -$PGRME,8.8,M,15.0,M,17.4,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183801,A,4124.7323,N,08152.2517,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183801,4124.7323,N,08152.2517,W,1,04,2.8,272.1,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,1,12,02,72,323,38,04,48,057,00,05,42,260,35,06,04,307,00*7B -$PGRME,8.8,M,15.0,M,17.4,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183802,A,4124.7467,N,08152.2546,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183802,4124.7467,N,08152.2546,W,1,04,2.8,271.9,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,2,12,07,18,127,00,10,46,198,44,13,20,066,00,23,09,039,00*70 -$PGRME,8.8,M,15.0,M,17.4,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183803,A,4124.7477,N,08152.2547,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183803,4124.7477,N,08152.2547,W,1,04,2.8,271.9,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,3,12,24,16,068,35,30,30,302,00,33,09,106,41,35,34,141,43*7B -$PGRME,8.8,M,15.0,M,17.4,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183804,A,4124.7486,N,08152.2547,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183804,4124.7486,N,08152.2547,W,1,03,2.8,271.8,M,-34.0,M,,*7D -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,1,12,02,72,323,38,04,48,057,00,05,42,260,34,06,04,307,00*7A -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,183805,A,4124.7492,N,08152.2547,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183805,4124.7492,N,08152.2547,W,1,03,2.8,271.8,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,2,12,07,18,127,00,10,46,198,44,13,20,065,00,23,09,039,00*73 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,183806,A,4124.7499,N,08152.2545,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183806,4124.7499,N,08152.2545,W,1,03,2.8,271.7,M,-34.0,M,,*7C -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,3,12,24,16,068,34,30,30,302,00,33,09,106,41,35,34,141,43*7A -$PGRME,9.0,M,15.0,M,17.5,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183807,A,4124.7506,N,08152.2543,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183807,4124.7506,N,08152.2543,W,1,03,2.8,271.7,M,-34.0,M,,*7C -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,1,12,02,72,323,38,04,48,057,00,05,42,260,00,06,04,307,00*7D -$PGRME,9.0,M,15.0,M,17.5,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183808,A,4124.7511,N,08152.2540,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183808,4124.7511,N,08152.2540,W,1,03,2.8,271.7,M,-34.0,M,,*76 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,2,12,07,18,127,34,10,46,198,44,13,20,065,00,23,09,039,00*74 -$PGRME,9.0,M,15.0,M,17.5,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183809,A,4124.7516,N,08152.2538,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183809,4124.7516,N,08152.2538,W,1,04,2.8,271.6,M,-34.0,M,,*79 -$GPGSA,A,2,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3D -$GPGSV,3,3,12,24,16,068,34,30,30,302,00,33,09,106,41,35,34,141,43*7A -$PGRME,7.7,M,13.1,M,15.2,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183810,A,4124.7521,N,08152.2536,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183810,4124.7521,N,08152.2536,W,1,04,7.8,271.5,M,-34.0,M,,*7D -$GPGSA,A,2,,,,,07,10,,,24,,,35,8.0,7.8,1.0*33 -$GPGSV,3,1,12,02,72,323,39,04,48,057,00,05,42,260,00,06,04,307,00*7C -$PGRME,7.7,M,13.1,M,15.2,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183811,A,4124.7525,N,08152.2535,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183811,4124.7525,N,08152.2535,W,1,04,7.8,271.5,M,-34.0,M,,*7B -$GPGSA,A,2,,,,,07,10,,,24,,,35,8.0,7.8,1.0*33 -$GPGSV,3,2,12,07,18,127,34,10,46,198,44,13,20,065,00,23,09,039,00*74 -$PGRME,7.7,M,13.1,M,15.2,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183812,A,4124.7528,N,08152.2533,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183812,4124.7528,N,08152.2533,W,1,04,3.8,272.0,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.3,3.8,1.8*3C -$GPGSV,3,3,12,24,16,068,35,30,30,302,00,33,09,106,40,35,34,141,43*7A -$PGRME,8.1,M,14.5,M,16.6,M*26 -$PGRMM,WGS 84*06 -$GPRMC,183813,A,4124.7531,N,08152.2531,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183813,4124.7531,N,08152.2531,W,1,04,3.8,273.6,M,-34.0,M,,*7D -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.3,3.8,2.4*33 -$GPGSV,3,1,12,02,72,323,37,04,48,057,00,05,42,260,00,06,04,307,00*72 -$PGRME,8.1,M,14.5,M,16.6,M*26 -$PGRMM,WGS 84*06 -$GPRMC,183814,A,4124.7533,N,08152.2529,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183814,4124.7533,N,08152.2529,W,1,04,2.8,273.6,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,2,12,07,18,127,33,10,46,198,43,13,20,065,00,23,09,039,00*74 -$PGRME,8.3,M,14.5,M,16.7,M*25 -$PGRMM,WGS 84*06 -$GPRMC,183815,A,4124.7535,N,08152.2528,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183815,4124.7535,N,08152.2528,W,1,04,2.8,273.6,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,3,12,24,16,068,36,30,30,302,00,33,09,106,40,35,34,141,43*79 -$PGRME,8.3,M,14.5,M,16.7,M*25 -$PGRMM,WGS 84*06 -$GPRMC,183816,A,4124.7537,N,08152.2526,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183816,4124.7537,N,08152.2526,W,1,04,2.8,273.1,M,-34.0,M,,*7E -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,1,12,02,72,323,36,04,48,057,00,05,42,260,00,06,04,307,00*73 -$PGRME,7.6,M,12.8,M,14.9,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183817,A,4124.7539,N,08152.2525,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183817,4124.7539,N,08152.2525,W,1,04,2.9,273.3,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.6,2.9,1.7*3C -$GPGSV,3,2,12,07,18,127,35,10,46,198,44,13,20,065,00,23,09,039,00*75 -$PGRME,7.6,M,12.8,M,14.9,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183818,A,4124.7540,N,08152.2524,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183818,4124.7540,N,08152.2524,W,1,04,2.3,273.6,M,-34.0,M,,*7E -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.5,2.3,1.0*33 -$GPGSV,3,3,12,24,16,068,37,30,30,302,00,33,09,106,41,35,34,141,43*79 -$PGRME,7.6,M,12.8,M,14.9,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183819,A,4124.7541,N,08152.2523,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183819,4124.7541,N,08152.2523,W,1,04,2.3,273.7,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.5,2.3,1.0*33 -$GPGSV,3,1,12,02,72,323,35,04,48,057,00,05,42,260,34,06,04,307,00*77 -$PGRME,7.8,M,12.8,M,15.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183820,A,4124.7542,N,08152.2523,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183820,4124.7542,N,08152.2523,W,1,04,2.3,273.9,M,-34.0,M,,*7F -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.5,2.3,1.0*33 -$GPGSV,3,2,12,07,18,127,35,10,46,198,44,13,20,065,00,23,09,039,00*75 -$PGRME,7.8,M,12.8,M,15.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183821,A,4124.7543,N,08152.2522,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183821,4124.7543,N,08152.2522,W,1,04,7.5,274.0,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,7.7,7.5,1.0*37 -$GPGSV,3,3,12,24,16,068,35,30,30,302,00,33,09,106,40,35,34,141,43*7A -$PGRME,7.8,M,12.8,M,15.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183822,A,4124.7544,N,08152.2521,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183822,4124.7544,N,08152.2521,W,1,04,11.7,274.1,M,-34.0,M,,*40 -$GPGSA,A,3,,,,,07,10,,,24,,,35,11.8,11.7,1.0*3A -$GPGSV,3,1,12,02,72,323,35,04,48,057,00,05,42,260,00,06,04,307,00*70 -$PGRME,7.8,M,12.8,M,15.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183823,A,4124.7544,N,08152.2521,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183823,4124.7544,N,08152.2521,W,1,04,3.8,273.8,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.3,3.8,1.7*33 -$GPGSV,3,2,12,07,18,127,37,10,46,198,44,13,20,065,00,23,09,039,00*77 -$PGRME,8.2,M,14.2,M,16.5,M*21 -$PGRMM,WGS 84*06 -$GPRMC,183824,A,4124.7545,N,08152.2520,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183824,4124.7545,N,08152.2520,W,1,04,2.3,273.4,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.5,2.3,1.0*33 -$GPGSV,3,3,12,24,16,068,36,30,30,302,00,33,09,106,40,35,34,141,43*79 -$PGRME,8.2,M,14.2,M,16.5,M*21 -$PGRMM,WGS 84*06 -$GPRMC,183825,A,4124.7545,N,08152.2521,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183825,4124.7545,N,08152.2521,W,1,04,2.4,272.7,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.2,2.4,1.7*35 -$GPGSV,3,1,12,02,72,323,35,04,48,057,00,05,42,260,00,06,04,307,00*70 -$PGRME,8.2,M,14.2,M,16.5,M*21 -$PGRMM,WGS 84*06 -$GPRMC,183826,A,4124.7546,N,08152.2520,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183826,4124.7546,N,08152.2520,W,1,04,7.6,272.5,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.2,7.6,1.0*3E -$GPGSV,3,2,12,07,18,127,36,10,46,198,44,13,20,065,00,23,09,039,00*76 -$PGRME,8.2,M,14.2,M,16.5,M*21 -$PGRMM,WGS 84*06 -$GPRMC,183827,A,4124.7546,N,08152.2520,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183827,4124.7546,N,08152.2520,W,1,04,2.8,272.4,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.0,2.8,1.0*3C -$GPGSV,3,3,12,24,16,068,35,30,30,302,00,33,09,106,40,35,34,141,44*7D -$PGRME,8.4,M,14.2,M,16.5,M*27 -$PGRMM,WGS 84*06 -$GPRMC,183828,A,4124.7547,N,08152.2519,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183828,4124.7547,N,08152.2519,W,1,04,7.9,272.3,M,-34.0,M,,*7F -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.0,7.9,1.0*33 -$GPGSV,3,1,12,02,72,323,34,04,48,057,00,05,42,260,00,06,04,307,00*71 -$PGRME,8.4,M,14.2,M,16.5,M*27 -$PGRMM,WGS 84*06 -$GPRMC,183829,A,4124.7547,N,08152.2519,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183829,4124.7547,N,08152.2519,W,1,04,12.0,272.2,M,-34.0,M,,*42 -$GPGSA,A,3,,,,,07,10,,,24,,,35,12.1,12.0,1.0*34 -$GPGSV,3,2,12,07,18,127,36,10,46,198,43,13,20,065,00,23,09,039,00*71 -$PGRME,8.4,M,14.2,M,16.5,M*27 -$PGRMM,WGS 84*06 -$GPRMC,183830,A,4124.7548,N,08152.2519,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183830,4124.7548,N,08152.2519,W,1,04,12.0,272.2,M,-34.0,M,,*45 -$GPGSA,A,3,,,,,07,10,,,24,,,35,12.1,12.0,1.0*34 -$GPGSV,3,3,12,24,16,068,34,30,30,302,00,33,09,106,40,35,34,141,43*7B -$PGRME,8.4,M,14.2,M,16.5,M*27 -$PGRMM,WGS 84*06 -$GPRMC,183831,A,4124.7548,N,08152.2519,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183831,4124.7548,N,08152.2519,W,1,04,3.8,270.0,M,-34.0,M,,*7C -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.3,3.8,1.7*33 -$GPGSV,3,1,12,02,72,323,33,04,48,057,00,05,42,260,00,06,04,307,00*76 -$PGRME,8.7,M,15.5,M,17.8,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183832,A,4124.7548,N,08152.2518,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183832,4124.7548,N,08152.2518,W,1,04,2.3,267.5,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.5,2.3,1.0*33 -$GPGSV,3,2,12,07,18,127,35,10,46,198,43,13,20,065,00,23,09,039,00*72 -$PGRME,8.7,M,15.5,M,17.8,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183833,A,4124.7549,N,08152.2518,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183833,4124.7549,N,08152.2518,W,1,04,7.5,267.5,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,07,10,,,24,,,35,7.7,7.5,1.0*37 -$GPGSV,3,3,12,24,16,068,33,30,30,302,00,33,09,106,40,35,34,141,44*7B -$PGRME,8.7,M,15.5,M,17.8,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183834,A,4124.7549,N,08152.2518,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183834,4124.7549,N,08152.2518,W,1,04,11.7,267.4,M,-34.0,M,,*47 -$GPGSA,A,3,,,,,07,10,,,24,,,35,11.8,11.7,1.0*3A -$GPGSV,3,1,12,02,72,323,33,04,48,057,00,05,42,260,00,06,04,307,00*76 -$PGRME,8.7,M,15.5,M,17.8,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183835,A,4124.7549,N,08152.2518,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183835,4124.7549,N,08152.2518,W,1,04,11.7,267.3,M,-34.0,M,,*41 -$GPGSA,A,3,,,,,07,10,,,24,,,35,11.8,11.7,1.0*3A -$GPGSV,3,2,12,07,18,127,34,10,46,198,43,13,20,065,00,23,09,039,00*73 -$PGRME,8.7,M,15.5,M,17.8,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183836,A,4124.7549,N,08152.2518,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183836,4124.7549,N,08152.2518,W,1,04,3.8,56.6,M,-34.0,M,,*4B -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.2,3.8,1.7*32 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,40,35,34,141,44*7B -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183837,A,4124.7549,N,08152.2518,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183837,4124.7549,N,08152.2518,W,1,04,8.7,56.6,M,-34.0,M,,*4E -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.1,8.7,1.0*09 -$GPGSV,3,1,12,02,72,323,33,04,48,057,00,05,42,260,00,06,04,307,00*76 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183838,A,4124.7550,N,08152.2518,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183838,4124.7550,N,08152.2518,W,1,04,8.7,56.5,M,-34.0,M,,*4A -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.1,8.7,1.0*09 -$GPGSV,3,2,12,07,18,127,00,10,46,198,43,13,20,065,00,23,09,039,00*74 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183839,A,4124.7550,N,08152.2519,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183839,4124.7550,N,08152.2519,W,1,04,8.7,56.5,M,-34.0,M,,*4A -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.1,8.7,1.0*09 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,40,35,34,141,44*7B -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183840,A,4124.7550,N,08152.2519,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183840,4124.7550,N,08152.2519,W,1,04,8.7,56.5,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.1,8.7,1.0*09 -$GPGSV,3,1,12,02,72,323,33,04,48,057,00,05,42,260,00,06,04,307,00*76 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183841,A,4124.7550,N,08152.2519,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183841,4124.7550,N,08152.2519,W,1,04,8.7,56.5,M,-34.0,M,,*45 -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.1,8.7,1.0*09 -$GPGSV,3,2,12,07,18,127,00,10,46,198,44,13,20,065,00,23,09,038,00*72 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183842,A,4124.7550,N,08152.2519,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183842,4124.7550,N,08152.2519,W,1,04,8.7,56.5,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.1,8.7,1.0*09 -$GPGSV,3,3,12,24,16,068,00,30,30,302,00,33,09,106,40,35,34,141,43*7C -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183843,A,4124.7550,N,08152.2520,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183843,4124.7550,N,08152.2520,W,1,04,12.7,56.5,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,07,10,,,24,,,35,16.3,12.7,1.0*35 -$GPGSV,3,1,12,02,72,323,34,04,48,057,00,05,42,260,31,06,04,307,00*73 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183844,A,4124.7550,N,08152.2520,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183844,4124.7550,N,08152.2520,W,1,04,12.7,56.5,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,16.3,12.7,1.0*35 -$GPGSV,3,2,12,07,18,127,00,10,46,198,44,13,20,065,00,23,09,038,32*73 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183845,A,4124.7550,N,08152.2520,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183845,4124.7550,N,08152.2520,W,1,00,12.7,56.5,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,3,12,24,16,069,00,30,30,302,00,33,09,106,40,35,34,141,44*7A -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183846,A,4124.7550,N,08152.2521,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183846,4124.7550,N,08152.2521,W,1,00,12.7,56.5,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,1,12,02,72,323,33,04,48,057,00,05,42,260,30,06,04,307,00*75 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183847,A,4124.7550,N,08152.2521,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183847,4124.7550,N,08152.2521,W,1,00,12.7,56.5,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,2,12,07,18,127,00,10,46,198,45,13,20,065,00,23,09,038,32*72 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183848,A,4124.7550,N,08152.2521,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183848,4124.7550,N,08152.2521,W,1,00,12.7,56.5,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,3,12,24,16,069,00,30,30,302,00,33,09,106,40,35,34,141,44*7A -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183849,A,4124.7550,N,08152.2521,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183849,4124.7550,N,08152.2521,W,1,00,12.7,56.5,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,00,06,04,307,00*76 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183850,A,4124.7550,N,08152.2522,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183850,4124.7550,N,08152.2522,W,1,00,12.7,56.5,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,2,12,07,18,127,00,10,46,198,45,13,20,065,00,23,09,038,00*73 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183851,A,4124.7550,N,08152.2522,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183851,4124.7550,N,08152.2522,W,1,00,12.7,56.5,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,3,12,24,16,069,00,30,30,302,00,33,09,106,40,35,34,141,44*7A -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183852,A,4124.7550,N,08152.2522,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183852,4124.7550,N,08152.2522,W,1,00,12.7,56.5,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,00,06,04,307,00*76 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183853,A,4124.7550,N,08152.2522,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183853,4124.7550,N,08152.2522,W,1,00,12.7,56.5,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,2,12,07,18,127,00,10,46,198,45,13,20,065,00,23,09,038,33*73 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183854,A,4124.7550,N,08152.2523,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183854,4124.7550,N,08152.2523,W,1,00,12.7,56.5,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,3,12,24,16,069,00,30,30,302,00,33,09,106,40,35,34,141,44*7A -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183855,A,4124.7550,N,08152.2523,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183855,4124.7550,N,08152.2523,W,1,00,12.7,56.5,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,30,06,04,307,00*75 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183856,A,4124.7550,N,08152.2523,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183856,4124.7550,N,08152.2523,W,1,00,12.7,56.5,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,2,12,07,18,127,00,10,46,198,45,13,20,065,00,23,09,038,33*73 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183857,A,4124.7550,N,08152.2523,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183857,4124.7550,N,08152.2523,W,1,00,12.7,56.5,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,3,12,24,16,069,00,30,30,302,00,33,09,106,40,35,34,141,43*7D -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183858,A,4124.7550,N,08152.2523,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183858,4124.7550,N,08152.2523,W,1,00,12.7,56.4,M,-34.0,M,,*7A -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,32,06,04,307,00*77 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183859,A,4124.7550,N,08152.2524,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183859,4124.7550,N,08152.2524,W,1,00,12.7,56.4,M,-34.0,M,,*7C -$GPGSA,A,3,,,,,,,,,,,,,16.3,12.7,1.0*33 -$GPGSV,3,2,12,07,18,127,33,10,46,198,45,13,20,065,00,23,09,038,33*73 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183900,A,4124.7550,N,08152.2524,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183900,4124.7550,N,08152.2524,W,1,00,16.0,56.4,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,,,,,,,,,18.9,16.0,1.0*34 -$GPGSV,3,3,12,24,16,069,00,30,30,302,00,33,09,106,40,35,34,141,43*7D -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183901,A,4124.7550,N,08152.2524,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183901,4124.7550,N,08152.2524,W,1,00,16.0,56.4,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,,,,,,,,18.9,16.0,1.0*34 -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,33,06,04,307,00*76 -$PGRME,9.0,M,16.7,M,19.0,M*2F -$PGRMM,WGS 84*06 -$GPRMC,183902,A,4124.7550,N,08152.2524,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183902,4124.7550,N,08152.2524,W,1,03,2.8,56.5,M,-34.0,M,,*4F -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,2,12,07,18,127,00,10,46,198,44,13,20,065,00,23,09,038,33*72 -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183903,A,4124.7550,N,08152.2525,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183903,4124.7550,N,08152.2525,W,1,03,2.8,56.5,M,-34.0,M,,*4F -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,3,12,24,16,069,32,30,30,302,00,33,09,106,40,35,34,141,43*7C -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183904,A,4124.7550,N,08152.2525,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183904,4124.7550,N,08152.2525,W,1,03,2.8,56.5,M,-34.0,M,,*48 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,33,06,04,307,00*76 -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183905,A,4124.7550,N,08152.2525,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183905,4124.7550,N,08152.2525,W,1,03,2.8,56.5,M,-34.0,M,,*49 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,2,12,07,18,127,00,10,46,198,44,13,20,065,00,23,09,038,00*72 -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183906,A,4124.7550,N,08152.2526,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183906,4124.7550,N,08152.2526,W,1,03,2.8,56.5,M,-34.0,M,,*49 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,3,12,24,16,069,33,30,30,302,00,33,09,106,40,35,34,141,44*7A -$PGRME,9.2,M,16.7,M,19.1,M*2C -$PGRMM,WGS 84*06 -$GPRMC,183907,A,4124.7550,N,08152.2526,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183907,4124.7550,N,08152.2526,W,1,03,2.8,56.5,M,-34.0,M,,*48 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,34,06,04,307,00*71 -$PGRME,9.2,M,16.7,M,19.1,M*2C -$PGRMM,WGS 84*06 -$GPRMC,183908,A,4124.7546,N,08152.2530,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183908,4124.7546,N,08152.2530,W,1,03,2.8,56.5,M,-34.0,M,,*47 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,2,12,07,18,127,00,10,46,198,43,13,20,065,00,23,09,038,00*75 -$PGRME,9.3,M,16.7,M,19.1,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183909,A,4124.7541,N,08152.2534,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183909,4124.7541,N,08152.2534,W,1,03,2.8,56.5,M,-34.0,M,,*45 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,3,12,24,16,069,32,30,30,301,00,33,09,106,40,35,34,141,43*7F -$PGRME,9.3,M,16.7,M,19.1,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183910,A,4124.7426,N,08152.2656,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183910,4124.7426,N,08152.2656,W,1,03,2.8,56.5,M,-34.0,M,,*4A -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,34,06,04,307,00*71 -$PGRME,9.3,M,16.7,M,19.1,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183911,A,4124.7405,N,08152.2675,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,183911,4124.7405,N,08152.2675,W,1,03,2.8,56.5,M,-34.0,M,,*4B -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,2,12,07,18,127,00,10,46,198,42,13,20,065,00,23,09,038,00*74 -$PGRME,9.4,M,16.7,M,19.2,M*29 -$PGRMM,WGS 84*06 -$GPRMC,183912,A,4124.7398,N,08152.2693,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183912,4124.7398,N,08152.2693,W,1,03,2.8,56.5,M,-34.0,M,,*43 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,3,12,24,16,069,32,30,30,301,00,33,09,106,40,35,34,141,43*7F -$PGRME,9.4,M,16.7,M,19.2,M*29 -$PGRMM,WGS 84*06 -$GPRMC,183913,A,4124.7395,N,08152.2708,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183913,4124.7395,N,08152.2708,W,1,03,2.8,56.5,M,-34.0,M,,*4C -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,33,06,04,307,00*76 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183914,A,4124.7394,N,08152.2722,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,183914,4124.7394,N,08152.2722,W,1,03,2.8,56.5,M,-34.0,M,,*42 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,2,12,07,18,127,00,10,46,198,41,13,20,065,00,23,09,038,00*77 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183915,A,4124.7395,N,08152.2738,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183915,4124.7395,N,08152.2738,W,1,03,2.8,56.5,M,-34.0,M,,*49 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,40,35,34,141,43*7E -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183916,A,4124.7395,N,08152.2752,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183916,4124.7395,N,08152.2752,W,1,03,2.8,56.5,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,00,06,04,307,00*76 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,183917,A,4124.7396,N,08152.2763,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183917,4124.7396,N,08152.2763,W,1,03,2.8,56.5,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,2,12,07,18,127,00,10,46,198,40,13,20,065,00,23,09,038,00*76 -$PGRME,9.6,M,16.7,M,19.2,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183918,A,4124.7397,N,08152.2774,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183918,4124.7397,N,08152.2774,W,1,03,2.8,56.5,M,-34.0,M,,*4E -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,40,35,34,141,44*79 -$PGRME,9.6,M,16.7,M,19.2,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183919,A,4124.7398,N,08152.2784,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183919,4124.7398,N,08152.2784,W,1,03,2.8,56.5,M,-34.0,M,,*4F -$GPGSA,A,3,,,,,,10,,,24,,,35,3.0,2.8,1.0*3B -$GPGSV,3,1,12,02,72,323,00,04,48,057,00,05,42,260,00,06,04,307,00*76 -$PGRME,9.6,M,16.7,M,19.2,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183920,A,4124.7400,N,08152.2794,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,183920,4124.7400,N,08152.2794,W,1,03,2.8,56.5,M,-34.0,M,,*42 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,46,198,41,13,20,065,00,23,09,038,00*77 -$PGRME,9.6,M,16.7,M,19.3,M*2A -$PGRMM,WGS 84*06 -$GPRMC,183921,A,4124.7397,N,08152.2800,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183921,4124.7397,N,08152.2800,W,1,03,2.8,56.5,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,3,12,24,16,069,33,30,30,301,00,33,09,106,41,35,34,141,43*7F -$PGRME,9.6,M,16.7,M,19.3,M*2A -$PGRMM,WGS 84*06 -$GPRMC,183922,A,4124.7394,N,08152.2805,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183922,4124.7394,N,08152.2805,W,1,03,2.8,56.5,M,-34.0,M,,*4D -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,1,12,02,72,326,00,04,48,057,00,05,42,260,00,06,04,307,00*73 -$PGRME,9.6,M,16.7,M,19.3,M*2A -$PGRMM,WGS 84*06 -$GPRMC,183923,A,4124.7391,N,08152.2810,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183923,4124.7391,N,08152.2810,W,1,03,2.8,56.5,M,-34.0,M,,*4D -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,46,198,40,13,20,065,00,23,09,038,00*76 -$PGRME,9.6,M,16.7,M,19.3,M*2A -$PGRMM,WGS 84*06 -$GPRMC,183924,A,4124.7389,N,08152.2815,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183924,4124.7389,N,08152.2815,W,1,03,2.8,56.5,M,-34.0,M,,*46 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,3,12,24,16,069,33,30,30,301,00,33,09,106,41,35,34,141,43*7F -$PGRME,9.6,M,16.7,M,19.3,M*2A -$PGRMM,WGS 84*06 -$GPRMC,183925,A,4124.7387,N,08152.2819,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183925,4124.7387,N,08152.2819,W,1,03,2.8,56.5,M,-34.0,M,,*45 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,1,12,02,72,326,00,04,48,057,00,05,42,260,00,06,04,307,00*73 -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183926,A,4124.7384,N,08152.2822,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183926,4124.7384,N,08152.2822,W,1,03,2.8,56.5,M,-34.0,M,,*4D -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,46,198,40,13,20,065,34,23,09,038,00*71 -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183927,A,4124.7384,N,08152.2826,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183927,4124.7384,N,08152.2826,W,1,03,2.8,56.5,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,3,12,24,16,069,33,30,30,301,00,33,09,106,40,35,34,141,43*7E -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183928,A,4124.7383,N,08152.2829,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183928,4124.7383,N,08152.2829,W,1,03,2.8,56.5,M,-34.0,M,,*4F -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,1,12,02,72,326,00,04,48,057,00,05,42,260,35,06,04,307,00*75 -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183929,A,4124.7383,N,08152.2833,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183929,4124.7383,N,08152.2833,W,1,03,2.8,56.5,M,-34.0,M,,*45 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,46,198,40,13,20,065,00,23,09,038,00*76 -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183930,A,4124.7383,N,08152.2836,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183930,4124.7383,N,08152.2836,W,1,03,2.8,56.5,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,3,12,24,16,069,32,30,30,301,00,33,09,106,41,35,34,141,43*7E -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,183931,A,4124.7383,N,08152.2839,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,183931,4124.7383,N,08152.2839,W,1,03,2.8,56.5,M,-34.0,M,,*46 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,1,12,02,72,326,35,04,47,058,00,05,42,260,35,06,04,307,00*73 -$PGRME,9.8,M,16.7,M,19.3,M*24 -$PGRMM,WGS 84*06 -$GPRMC,183932,A,4124.7384,N,08152.2842,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183932,4124.7384,N,08152.2842,W,1,03,2.8,56.5,M,-34.0,M,,*4E -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,46,198,39,13,20,065,00,23,09,038,00*78 -$PGRME,9.8,M,16.7,M,19.3,M*24 -$PGRMM,WGS 84*06 -$GPRMC,183933,A,4124.7385,N,08152.2844,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183933,4124.7385,N,08152.2844,W,1,03,2.8,56.5,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,41,35,34,141,43*7F -$PGRME,9.8,M,16.7,M,19.3,M*24 -$PGRMM,WGS 84*06 -$GPRMC,183934,A,4124.7386,N,08152.2847,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183934,4124.7386,N,08152.2847,W,1,03,2.8,56.5,M,-34.0,M,,*4F -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,1,12,02,72,326,35,04,47,058,00,05,42,259,33,06,04,307,00*7F -$PGRME,9.8,M,16.7,M,19.3,M*24 -$PGRMM,WGS 84*06 -$GPRMC,183935,A,4124.7387,N,08152.2849,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183935,4124.7387,N,08152.2849,W,1,03,2.8,56.5,M,-34.0,M,,*41 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,46,198,39,13,20,065,00,23,09,038,00*78 -$PGRME,9.8,M,16.7,M,19.3,M*24 -$PGRMM,WGS 84*06 -$GPRMC,183936,A,4124.7388,N,08152.2851,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183936,4124.7388,N,08152.2851,W,1,03,2.8,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,3,12,24,16,069,30,30,30,301,00,33,09,106,41,35,34,141,44*7B -$PGRME,9.8,M,16.7,M,19.4,M*23 -$PGRMM,WGS 84*06 -$GPRMC,183937,A,4124.7390,N,08152.2854,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183937,4124.7390,N,08152.2854,W,1,03,2.8,56.5,M,-34.0,M,,*49 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,1,12,02,72,326,34,04,47,058,00,05,42,259,32,06,04,307,00*7F -$PGRME,9.8,M,16.7,M,19.4,M*23 -$PGRMM,WGS 84*06 -$GPRMC,183938,A,4124.7391,N,08152.2857,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,183938,4124.7391,N,08152.2857,W,1,03,2.8,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,46,198,37,13,20,065,00,23,09,038,00*76 -$PGRME,9.8,M,16.7,M,19.4,M*23 -$PGRMM,WGS 84*06 -$GPRMC,183939,A,4124.7393,N,08152.2859,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,183939,4124.7393,N,08152.2859,W,1,03,2.8,56.5,M,-34.0,M,,*49 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,41,35,34,141,44*78 -$PGRME,9.8,M,16.7,M,19.4,M*23 -$PGRMM,WGS 84*06 -$GPRMC,183940,A,4124.7394,N,08152.2862,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,183940,4124.7394,N,08152.2862,W,1,03,2.8,56.5,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,10,,,24,,,35,3.0,2.8,1.0*3A -$GPGSV,3,1,12,02,72,326,33,04,47,058,32,05,42,259,00,06,04,307,00*78 -$PGRME,9.8,M,16.7,M,19.4,M*23 -$PGRMM,WGS 84*06 -$GPRMC,183941,A,4124.7395,N,08152.2864,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183941,4124.7395,N,08152.2864,W,1,04,2.5,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,2,12,07,18,127,00,10,46,198,38,13,20,065,00,23,09,038,00*79 -$PGRME,8.7,M,16.7,M,18.8,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183942,A,4124.7396,N,08152.2866,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,183942,4124.7396,N,08152.2866,W,1,04,2.5,56.5,M,-34.0,M,,*46 -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,41,35,34,141,44*78 -$PGRME,8.7,M,16.7,M,18.8,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183943,A,4124.7397,N,08152.2868,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,183943,4124.7397,N,08152.2868,W,1,04,2.5,56.5,M,-34.0,M,,*48 -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,1,12,02,72,326,34,04,47,058,00,05,42,259,00,06,04,307,00*7E -$PGRME,8.7,M,16.7,M,18.8,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183944,A,4124.7398,N,08152.2870,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183944,4124.7398,N,08152.2870,W,1,04,2.5,56.5,M,-34.0,M,,*49 -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,2,12,07,18,127,00,10,46,198,39,13,20,065,00,23,09,038,00*78 -$PGRME,8.7,M,16.7,M,18.8,M*20 -$PGRMM,WGS 84*06 -$GPRMC,183945,A,4124.7399,N,08152.2872,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183945,4124.7399,N,08152.2872,W,1,04,2.5,56.5,M,-34.0,M,,*4B -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,3,12,24,16,069,33,30,30,301,00,33,09,106,41,35,34,141,44*78 -$PGRME,8.8,M,16.7,M,18.9,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183946,A,4124.7400,N,08152.2874,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,183946,4124.7400,N,08152.2874,W,1,04,2.5,56.5,M,-34.0,M,,*49 -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,1,12,02,72,326,34,04,47,058,00,05,42,259,35,06,04,307,00*78 -$PGRME,8.8,M,16.7,M,18.9,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183947,A,4124.7401,N,08152.2876,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,183947,4124.7401,N,08152.2876,W,1,04,2.5,56.5,M,-34.0,M,,*4B -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,2,12,07,18,127,00,10,46,198,39,13,20,065,00,23,09,038,00*78 -$PGRME,8.8,M,16.7,M,18.9,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183948,A,4124.7401,N,08152.2878,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183948,4124.7401,N,08152.2878,W,1,04,2.5,56.5,M,-34.0,M,,*4A -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,3,12,24,16,069,34,30,30,301,00,33,09,106,41,35,34,141,44*7F -$PGRME,8.8,M,16.7,M,18.9,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183949,A,4124.7402,N,08152.2880,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183949,4124.7402,N,08152.2880,W,1,04,2.5,56.5,M,-34.0,M,,*4F -$GPGSA,A,2,,04,,,,10,,,24,,,35,2.7,2.5,1.0*35 -$GPGSV,3,1,12,02,72,326,35,04,47,058,00,05,42,259,35,06,04,307,00*79 -$PGRME,9.0,M,16.7,M,18.9,M*27 -$PGRMM,WGS 84*06 -$GPRMC,183950,A,4124.7403,N,08152.2882,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183950,4124.7403,N,08152.2882,W,1,03,2.5,56.5,M,-34.0,M,,*43 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,18,127,00,10,46,198,40,13,20,065,00,23,09,038,00*76 -$PGRME,9.0,M,16.7,M,18.9,M*27 -$PGRMM,WGS 84*06 -$GPRMC,183951,A,4124.7403,N,08152.2883,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,183951,4124.7403,N,08152.2883,W,1,03,2.6,56.5,M,-34.0,M,,*40 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.7,2.6,1.0*32 -$GPGSV,3,3,12,24,16,069,35,30,30,301,00,33,09,106,41,35,34,141,43*79 -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183952,A,4124.7404,N,08152.2886,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183952,4124.7404,N,08152.2886,W,1,03,2.6,56.5,M,-34.0,M,,*41 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,1,12,02,72,326,34,04,47,058,00,05,42,259,37,06,04,307,00*7A -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183953,A,4124.7404,N,08152.2888,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,183953,4124.7404,N,08152.2888,W,1,03,2.6,56.5,M,-34.0,M,,*4E -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,2,12,07,18,127,00,10,47,198,40,13,20,065,00,23,09,038,00*77 -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183954,A,4124.7405,N,08152.2889,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,183954,4124.7405,N,08152.2889,W,1,03,2.6,56.5,M,-34.0,M,,*49 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,3,12,24,16,069,35,30,30,301,00,33,09,106,41,35,34,141,44*7E -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183955,A,4124.7405,N,08152.2891,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,183955,4124.7405,N,08152.2891,W,1,03,2.6,56.5,M,-34.0,M,,*41 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,1,12,02,72,326,34,04,47,058,00,05,42,259,36,06,04,307,00*7B -$PGRME,9.1,M,16.7,M,19.0,M*2E -$PGRMM,WGS 84*06 -$GPRMC,183956,A,4124.7406,N,08152.2893,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,183956,4124.7406,N,08152.2893,W,1,03,2.6,56.5,M,-34.0,M,,*43 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,2,12,07,18,127,00,10,47,198,40,13,20,065,00,23,09,038,00*77 -$PGRME,9.2,M,16.7,M,19.0,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183957,A,4124.7406,N,08152.2895,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,183957,4124.7406,N,08152.2895,W,1,03,2.6,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,3,12,24,16,069,36,30,30,301,00,33,09,106,41,35,34,141,44*7D -$PGRME,9.3,M,16.7,M,19.1,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183958,A,4124.7405,N,08152.2896,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183958,4124.7405,N,08152.2896,W,1,03,2.6,56.5,M,-34.0,M,,*4B -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,1,12,02,72,326,35,04,47,058,00,05,42,259,34,06,04,307,00*78 -$PGRME,9.3,M,16.7,M,19.1,M*2D -$PGRMM,WGS 84*06 -$GPRMC,183959,A,4124.7405,N,08152.2897,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,183959,4124.7405,N,08152.2897,W,1,03,2.6,56.5,M,-34.0,M,,*4B -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,2,12,07,18,127,00,10,47,198,42,13,20,065,00,23,09,038,00*75 -$PGRME,9.3,M,16.7,M,19.1,M*2D -$PGRMM,WGS 84*06 -$GPRMC,184000,A,4124.7405,N,08152.2899,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184000,4124.7405,N,08152.2899,W,1,03,2.6,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,3,12,24,16,069,35,30,30,301,00,33,09,106,41,35,34,141,44*7E -$PGRME,9.3,M,16.7,M,19.1,M*2D -$PGRMM,WGS 84*06 -$GPRMC,184001,A,4124.7405,N,08152.2900,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184001,4124.7405,N,08152.2900,W,1,03,2.6,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.6,1.0*3D -$GPGSV,3,1,12,02,72,326,35,04,47,058,00,05,42,259,00,06,04,307,00*7F -$PGRME,9.4,M,16.7,M,19.1,M*2A -$PGRMM,WGS 84*06 -$GPRMC,184002,A,4124.7405,N,08152.2901,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184002,4124.7405,N,08152.2901,W,1,03,2.7,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.7,1.0*3C -$GPGSV,3,2,12,07,18,127,00,10,47,198,42,13,20,065,00,23,09,038,00*75 -$PGRME,9.4,M,16.7,M,19.1,M*2A -$PGRMM,WGS 84*06 -$GPRMC,184003,A,4124.7405,N,08152.2903,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184003,4124.7405,N,08152.2903,W,1,03,2.7,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.8,2.7,1.0*3C -$GPGSV,3,3,12,24,16,069,34,30,30,301,00,33,09,106,41,35,34,141,44*7F -$PGRME,9.4,M,16.7,M,19.1,M*2A -$PGRMM,WGS 84*06 -$GPRMC,184004,A,4124.7406,N,08152.2904,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184004,4124.7406,N,08152.2904,W,1,03,2.7,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,1,12,02,72,326,34,04,47,058,00,05,42,259,00,06,04,307,00*7E -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184005,A,4124.7406,N,08152.2905,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184005,4124.7406,N,08152.2905,W,1,03,2.7,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,2,12,07,18,127,00,10,47,198,43,13,21,064,00,23,09,038,00*74 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184006,A,4124.7405,N,08152.2907,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184006,4124.7405,N,08152.2907,W,1,03,2.7,56.5,M,-34.0,M,,*46 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,40,35,34,141,44*79 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184007,A,4124.7405,N,08152.2908,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184007,4124.7405,N,08152.2908,W,1,03,2.7,56.5,M,-34.0,M,,*48 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,1,12,02,72,326,33,04,47,058,00,05,42,259,00,06,04,307,00*79 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184008,A,4124.7405,N,08152.2909,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184008,4124.7405,N,08152.2909,W,1,03,2.7,56.5,M,-34.0,M,,*46 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,2,12,07,18,127,00,10,47,198,43,13,21,064,00,23,09,038,00*74 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184009,A,4124.7405,N,08152.2910,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184009,4124.7405,N,08152.2910,W,1,03,2.7,56.5,M,-34.0,M,,*4F -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,3,12,24,16,069,31,30,30,301,00,33,09,106,40,35,34,141,44*7B -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184010,A,4124.7406,N,08152.2911,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184010,4124.7406,N,08152.2911,W,1,03,2.7,56.5,M,-34.0,M,,*45 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,1,12,02,72,326,33,04,47,058,00,05,42,259,00,06,04,307,00*79 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184011,A,4124.7406,N,08152.2912,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184011,4124.7406,N,08152.2912,W,1,03,2.7,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,2,12,07,18,127,00,10,47,198,43,13,21,064,00,23,09,038,34*73 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184012,A,4124.7405,N,08152.2913,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184012,4124.7405,N,08152.2913,W,1,03,2.7,56.5,M,-34.0,M,,*46 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,41,35,34,141,43*7F -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184013,A,4124.7405,N,08152.2914,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184013,4124.7405,N,08152.2914,W,1,03,2.7,56.5,M,-34.0,M,,*40 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,1,12,02,72,326,33,04,47,058,00,05,42,259,00,06,04,307,00*79 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184014,A,4124.7405,N,08152.2914,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184014,4124.7405,N,08152.2914,W,1,03,2.7,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,2,12,07,18,127,00,10,47,198,42,13,21,064,00,23,09,038,35*73 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184015,A,4124.7405,N,08152.2915,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184015,4124.7405,N,08152.2915,W,1,03,2.7,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,41,35,34,141,43*7F -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184016,A,4124.7405,N,08152.2916,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184016,4124.7405,N,08152.2916,W,1,03,2.7,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,1,12,02,72,326,32,04,47,058,00,05,42,259,00,06,04,307,00*78 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184017,A,4124.7405,N,08152.2917,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184017,4124.7405,N,08152.2917,W,1,03,2.7,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,2,12,07,18,127,00,10,47,198,42,13,21,064,00,23,09,038,34*72 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184018,A,4124.7405,N,08152.2918,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184018,4124.7405,N,08152.2918,W,1,03,2.7,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,41,35,34,141,43*7F -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184019,A,4124.7405,N,08152.2919,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184019,4124.7405,N,08152.2919,W,1,00,2.7,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,,,,,,,,2.9,2.7,1.0*3C -$GPGSV,3,1,12,02,72,326,32,04,47,058,00,05,42,259,34,06,04,307,00*7F -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184020,A,4124.7406,N,08152.2920,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184020,4124.7406,N,08152.2920,W,1,00,2.7,56.5,M,-34.0,M,,*47 -$GPGSA,A,2,,,,,,,,,,,,,2.9,2.7,1.0*3C -$GPGSV,3,2,12,07,18,127,00,10,47,198,41,13,21,064,00,23,09,038,33*76 -$PGRME,9.5,M,16.7,M,19.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184021,A,4124.7405,N,08152.2920,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184021,4124.7405,N,08152.2920,W,1,03,2.7,56.5,M,-34.0,M,,*46 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,3,12,24,16,069,31,30,30,301,00,33,09,106,41,35,34,141,43*7D -$PGRME,9.6,M,16.7,M,19.2,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184022,A,4124.7405,N,08152.2921,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184022,4124.7405,N,08152.2921,W,1,03,2.7,56.5,M,-34.0,M,,*44 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.7,1.0*3D -$GPGSV,3,1,12,02,72,326,31,04,47,058,30,05,42,259,35,06,04,307,00*7E -$PGRME,9.6,M,16.7,M,19.2,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184023,A,4124.7406,N,08152.2922,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184023,4124.7406,N,08152.2922,W,1,05,4.2,340.3,M,-34.0,M,,*72 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,6.0,4.2,1.6*37 -$GPGSV,3,2,12,07,18,127,33,10,47,198,40,13,21,064,00,23,09,038,00*77 -$PGRME,10.0,M,17.4,M,20.0,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184024,A,4124.7401,N,08152.2915,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184024,4124.7401,N,08152.2915,W,1,05,2.8,340.3,M,-34.0,M,,*7A -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,3,12,24,16,069,32,30,30,301,00,33,09,106,40,35,34,141,44*78 -$PGRME,10.0,M,17.4,M,20.1,M*1E -$PGRMM,WGS 84*06 -$GPRMC,184025,A,4124.7402,N,08152.2910,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184025,4124.7402,N,08152.2910,W,1,05,2.8,340.3,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,07,10,,,24,,,35,3.0,2.8,1.0*38 -$GPGSV,3,1,12,02,72,326,00,04,47,058,31,05,42,259,33,06,04,307,00*7B -$PGRME,10.0,M,17.4,M,20.1,M*1E -$PGRMM,WGS 84*06 -$GPRMC,184026,A,4124.7404,N,08152.2905,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184026,4124.7404,N,08152.2905,W,1,05,2.5,340.3,M,-34.0,M,,*71 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,18,127,31,10,47,198,40,13,21,064,00,23,09,038,00*75 -$PGRME,8.8,M,17.4,M,19.5,M*21 -$PGRMM,WGS 84*06 -$GPRMC,184027,A,4124.7356,N,08152.2704,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184027,4124.7356,N,08152.2704,W,1,05,2.5,340.3,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,16,069,31,30,30,301,00,33,09,106,40,35,34,141,44*7B -$PGRME,8.8,M,17.4,M,19.5,M*21 -$PGRMM,WGS 84*06 -$GPRMC,184028,A,4124.7320,N,08152.2676,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184028,4124.7320,N,08152.2676,W,1,05,4.2,293.0,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,5.9,4.2,1.6*3D -$GPGSV,3,1,12,02,72,326,00,04,47,058,33,05,42,259,34,06,04,307,00*7E -$PGRME,9.3,M,18.0,M,20.3,M*2C -$PGRMM,WGS 84*06 -$GPRMC,184029,A,4124.7294,N,08152.2665,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184029,4124.7294,N,08152.2665,W,1,05,2.5,174.3,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,18,127,31,10,47,198,39,13,21,064,00,23,09,038,00*7B -$PGRME,7.6,M,10.7,M,13.2,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184030,A,4124.7297,N,08152.2694,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184030,4124.7297,N,08152.2694,W,1,05,2.5,174.3,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,41,35,34,141,44*78 -$PGRME,7.6,M,10.7,M,13.2,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184031,A,4124.7241,N,08152.2585,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184031,4124.7241,N,08152.2585,W,1,05,2.5,174.3,M,-34.0,M,,*71 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,1,12,02,72,326,00,04,47,058,32,05,42,259,33,06,04,307,00*78 -$PGRME,7.6,M,10.7,M,13.2,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184032,A,4124.7250,N,08152.2628,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184032,4124.7250,N,08152.2628,W,1,05,2.5,174.3,M,-34.0,M,,*76 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,18,127,00,10,47,198,37,13,21,064,00,23,09,038,00*77 -$PGRME,7.6,M,10.7,M,13.2,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184033,A,4124.7257,N,08152.2664,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184033,4124.7257,N,08152.2664,W,1,05,2.5,174.3,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,16,069,33,30,30,301,00,33,09,106,40,35,34,141,44*79 -$PGRME,7.6,M,10.7,M,13.2,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184034,A,4124.7263,N,08152.2692,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184034,4124.7263,N,08152.2692,W,1,05,4.2,258.8,M,-34.0,M,,*76 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,5.9,4.2,1.6*3D -$GPGSV,3,1,12,02,72,326,00,04,47,058,32,05,42,259,32,06,04,307,00*79 -$PGRME,8.2,M,12.0,M,14.6,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184035,A,4124.7235,N,08152.2835,W,000.4,348.3,010305,007.9,W*7E -$GPGGA,184035,4124.7235,N,08152.2835,W,1,05,2.5,-29.8,M,-34.0,M,,*6F -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,18,127,00,10,47,198,36,13,21,064,00,23,09,038,00*76 -$PGRME,8.3,M,10.8,M,13.9,M*27 -$PGRMM,WGS 84*06 -$GPRMC,184036,A,4124.7316,N,08152.3016,W,000.4,348.3,010305,007.9,W*75 -$GPGGA,184036,4124.7316,N,08152.3016,W,1,05,2.5,-29.6,M,-34.0,M,,*6A -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,16,069,32,30,30,301,00,33,09,106,40,35,34,141,44*78 -$PGRME,8.3,M,10.8,M,13.9,M*27 -$PGRMM,WGS 84*06 -$GPRMC,184037,A,4124.7316,N,08152.3015,W,000.4,348.3,010305,007.9,W*77 -$GPGGA,184037,4124.7316,N,08152.3015,W,1,05,2.5,-29.5,M,-34.0,M,,*6B -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,1,12,02,72,326,00,04,47,058,31,05,42,259,32,06,04,307,00*7A -$PGRME,8.3,M,10.8,M,13.9,M*27 -$PGRMM,WGS 84*06 -$GPRMC,184038,A,4124.7315,N,08152.3014,W,000.4,348.3,010305,007.9,W*7A -$GPGGA,184038,4124.7315,N,08152.3014,W,1,05,2.5,-29.3,M,-34.0,M,,*60 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,18,127,00,10,47,198,37,13,21,064,00,23,09,038,00*77 -$PGRME,8.3,M,10.8,M,13.9,M*27 -$PGRMM,WGS 84*06 -$GPRMC,184039,A,4124.7370,N,08152.2918,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184039,4124.7370,N,08152.2918,W,1,05,2.5,140.4,M,-34.0,M,,*72 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.9,2.5,1.3*3E -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,40,35,34,141,43*7E -$PGRME,8.3,M,10.8,M,13.9,M*27 -$PGRMM,WGS 84*06 -$GPRMC,184040,A,4124.7370,N,08152.2917,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184040,4124.7370,N,08152.2917,W,1,05,2.5,140.3,M,-34.0,M,,*74 -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,1,12,02,72,326,00,04,47,058,34,05,42,259,36,06,04,307,00*7B -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184041,A,4124.7382,N,08152.2889,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184041,4124.7382,N,08152.2889,W,1,05,2.5,140.2,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,18,127,00,10,47,198,37,13,21,064,00,23,09,038,00*77 -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184042,A,4124.7389,N,08152.2868,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184042,4124.7389,N,08152.2868,W,1,05,2.5,140.1,M,-34.0,M,,*7B -$GPGSA,A,3,,04,,,07,10,,,24,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,16,069,00,30,30,301,00,33,09,106,40,35,34,141,43*7E -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184043,A,4124.7393,N,08152.2858,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184043,4124.7393,N,08152.2858,W,1,04,2.5,140.0,M,-34.0,M,,*72 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,72,326,00,04,47,058,34,05,42,259,37,06,04,307,00*7A -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184044,A,4124.7397,N,08152.2845,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184044,4124.7397,N,08152.2845,W,1,04,2.5,140.0,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,18,127,00,10,47,198,39,13,21,064,36,23,09,038,00*7C -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184045,A,4124.7400,N,08152.2837,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184045,4124.7400,N,08152.2837,W,1,04,2.5,139.9,M,-34.0,M,,*77 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,3,12,24,15,069,00,30,30,301,00,33,09,106,40,35,34,141,43*7D -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184046,A,4124.7402,N,08152.2832,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184046,4124.7402,N,08152.2832,W,1,04,2.5,139.9,M,-34.0,M,,*73 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,72,326,00,04,47,058,00,05,42,259,38,06,04,307,00*72 -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184047,A,4124.7404,N,08152.2827,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184047,4124.7404,N,08152.2827,W,1,04,2.5,139.9,M,-34.0,M,,*70 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,18,127,00,10,47,198,39,13,21,064,35,23,09,038,00*7F -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184048,A,4124.7405,N,08152.2824,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184048,4124.7405,N,08152.2824,W,1,03,2.5,139.8,M,-34.0,M,,*7B -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,3,12,24,15,069,00,30,30,301,00,33,09,106,40,35,34,141,43*7D -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184049,A,4124.7406,N,08152.2822,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184049,4124.7406,N,08152.2822,W,1,03,2.5,139.8,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,1,12,02,73,328,00,04,47,058,00,05,42,259,38,06,04,307,00*7D -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184050,A,4124.7407,N,08152.2820,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184050,4124.7407,N,08152.2820,W,1,03,2.5,139.8,M,-34.0,M,,*74 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,2,12,07,18,127,00,10,47,198,42,13,21,064,34,23,09,038,00*72 -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184051,A,4124.7408,N,08152.2818,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184051,4124.7408,N,08152.2818,W,1,03,2.5,139.8,M,-34.0,M,,*71 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,3,12,24,15,069,31,30,30,301,00,33,09,106,40,35,34,141,43*7F -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184052,A,4124.7408,N,08152.2817,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184052,4124.7408,N,08152.2817,W,1,03,2.5,139.8,M,-34.0,M,,*7D -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,1,12,02,73,328,00,04,47,058,00,05,42,259,38,06,04,307,00*7D -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184053,A,4124.7408,N,08152.2812,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184053,4124.7408,N,08152.2812,W,1,03,2.5,139.8,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,2,12,07,18,127,00,10,47,198,43,13,21,064,34,23,09,038,00*73 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184054,A,4124.7407,N,08152.2806,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184054,4124.7407,N,08152.2806,W,1,03,2.5,139.8,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,3,12,24,15,069,00,30,30,301,00,33,09,106,40,35,34,141,44*7A -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184055,A,4124.7406,N,08152.2801,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184055,4124.7406,N,08152.2801,W,1,03,2.5,139.8,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,1,12,02,73,328,00,04,47,058,00,05,42,259,38,06,04,307,00*7D -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184056,A,4124.7405,N,08152.2797,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184056,4124.7405,N,08152.2797,W,1,03,2.5,139.8,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,2,12,07,18,127,00,10,47,198,44,13,21,064,33,23,09,038,00*73 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184057,A,4124.7404,N,08152.2792,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184057,4124.7404,N,08152.2792,W,1,03,2.5,139.8,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,3,12,24,15,069,00,30,30,301,00,33,09,106,40,35,34,141,44*7A -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184058,A,4124.7404,N,08152.2789,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184058,4124.7404,N,08152.2789,W,1,03,2.5,139.7,M,-34.0,M,,*7C -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,1,12,02,73,328,00,04,47,058,00,05,42,259,38,06,04,307,00*7D -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184059,A,4124.7403,N,08152.2786,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184059,4124.7403,N,08152.2786,W,1,03,2.5,139.7,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,2,12,07,18,127,00,10,47,198,44,13,21,064,34,23,09,038,00*74 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184100,A,4124.7403,N,08152.2783,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184100,4124.7403,N,08152.2783,W,1,03,2.5,139.7,M,-34.0,M,,*7D -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,3,12,24,15,069,00,30,30,301,00,33,09,106,40,35,34,141,44*7A -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184101,A,4124.7402,N,08152.2780,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184101,4124.7402,N,08152.2780,W,1,03,2.5,139.7,M,-34.0,M,,*7E -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,1,12,02,73,328,00,04,47,058,00,05,42,259,36,06,04,307,00*73 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184102,A,4124.7402,N,08152.2778,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184102,4124.7402,N,08152.2778,W,1,00,2.5,139.7,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,18,127,00,10,47,198,45,13,21,064,34,23,09,038,00*75 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184103,A,4124.7401,N,08152.2776,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184103,4124.7401,N,08152.2776,W,1,00,2.5,139.7,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,00,30,30,301,00,33,09,106,40,35,34,141,43*7D -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184104,A,4124.7401,N,08152.2774,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184104,4124.7401,N,08152.2774,W,1,00,2.5,139.7,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,1,12,02,73,328,32,04,47,058,00,05,42,259,35,06,04,307,00*71 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184105,A,4124.7401,N,08152.2772,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184105,4124.7401,N,08152.2772,W,1,00,2.5,139.7,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,18,127,00,10,47,198,45,13,21,064,34,23,09,038,00*75 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184106,A,4124.7401,N,08152.2770,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184106,4124.7401,N,08152.2770,W,1,00,2.5,139.7,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,00,30,30,301,00,33,09,106,40,35,34,141,44*7A -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184107,A,4124.7400,N,08152.2769,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184107,4124.7400,N,08152.2769,W,1,00,2.5,139.7,M,-34.0,M,,*7E -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,1,12,02,73,328,00,04,47,058,00,05,42,259,33,06,04,307,00*76 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184108,A,4124.7400,N,08152.2767,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184108,4124.7400,N,08152.2767,W,1,00,2.5,139.7,M,-34.0,M,,*7F -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,18,127,00,10,47,198,45,13,21,064,32,23,09,038,00*73 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184109,A,4124.7400,N,08152.2766,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184109,4124.7400,N,08152.2766,W,1,00,2.5,139.7,M,-34.0,M,,*7F -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,31,30,30,300,00,33,09,106,40,35,34,141,44*79 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184110,A,4124.7399,N,08152.2766,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184110,4124.7399,N,08152.2766,W,1,03,2.6,139.7,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.6,1.0*33 -$GPGSV,3,1,12,02,73,328,30,04,47,058,00,05,42,259,34,06,04,307,00*72 -$PGRME,8.2,M,10.8,M,13.5,M*2A -$PGRMM,WGS 84*06 -$GPRMC,184111,A,4124.7399,N,08152.2765,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184111,4124.7399,N,08152.2765,W,1,03,2.6,139.7,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.8,2.6,1.0*3C -$GPGSV,3,2,12,07,18,127,00,10,47,198,45,13,21,064,00,23,09,038,00*72 -$PGRME,8.3,M,10.8,M,13.6,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184112,A,4124.7397,N,08152.2763,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184112,4124.7397,N,08152.2763,W,1,03,2.6,139.7,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.8,2.6,1.0*3C -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,43*7C -$PGRME,8.3,M,10.8,M,13.6,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184113,A,4124.7395,N,08152.2762,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184113,4124.7395,N,08152.2762,W,1,04,2.5,139.7,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,73,328,30,04,47,058,32,05,42,259,35,06,04,307,00*72 -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184114,A,4124.7394,N,08152.2761,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184114,4124.7394,N,08152.2761,W,1,04,2.5,139.7,M,-34.0,M,,*7A -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,18,127,00,10,47,198,46,13,21,064,33,23,09,038,00*71 -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184115,A,4124.7393,N,08152.2760,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184115,4124.7393,N,08152.2760,W,1,04,2.5,139.7,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,3,12,24,15,069,32,30,30,300,00,33,09,106,39,35,34,141,44*74 -$PGRME,7.9,M,10.8,M,13.3,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184116,A,4124.7392,N,08152.2758,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184116,4124.7392,N,08152.2758,W,1,04,2.5,163.1,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.9,2.5,1.3*39 -$GPGSV,3,1,12,02,73,328,00,04,47,058,31,05,42,259,00,06,04,307,00*74 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184117,A,4124.7392,N,08152.2757,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184117,4124.7392,N,08152.2757,W,1,04,2.5,163.1,M,-34.0,M,,*73 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.9,2.5,1.3*39 -$GPGSV,3,2,12,07,18,127,00,10,47,198,47,13,21,064,33,23,09,038,00*70 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184118,A,4124.7391,N,08152.2755,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184118,4124.7391,N,08152.2755,W,1,04,2.5,163.1,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,39,35,34,141,44*75 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184119,A,4124.7391,N,08152.2754,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184119,4124.7391,N,08152.2754,W,1,04,2.5,163.1,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,73,328,00,04,47,058,32,05,42,259,00,06,04,307,00*77 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184120,A,4124.7392,N,08152.2752,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184120,4124.7392,N,08152.2752,W,1,04,2.5,163.1,M,-34.0,M,,*72 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,18,127,00,10,47,198,48,13,21,064,33,23,09,038,00*7F -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184121,A,4124.7392,N,08152.2750,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184121,4124.7392,N,08152.2750,W,1,04,2.5,174.1,M,-34.0,M,,*77 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.9,2.5,1.3*39 -$GPGSV,3,3,12,24,15,069,32,30,30,300,00,33,09,106,39,35,34,141,44*74 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184122,A,4124.7393,N,08152.2747,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184122,4124.7393,N,08152.2747,W,1,04,2.5,183.1,M,-34.0,M,,*7B -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.9,2.5,1.0*3A -$GPGSV,3,1,12,02,73,328,00,04,47,058,32,05,42,259,00,06,04,307,00*77 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184123,A,4124.7394,N,08152.2745,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184123,4124.7394,N,08152.2745,W,1,04,2.5,183.1,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.9,2.5,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,47,198,48,13,21,064,32,23,09,038,00*7E -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184124,A,4124.7394,N,08152.2743,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184124,4124.7394,N,08152.2743,W,1,04,2.5,183.1,M,-34.0,M,,*7E -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.9,2.5,1.0*3A -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,39,35,34,141,44*75 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184125,A,4124.7395,N,08152.2741,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184125,4124.7395,N,08152.2741,W,1,04,2.5,183.1,M,-34.0,M,,*7C -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.9,2.5,1.0*3A -$GPGSV,3,1,12,02,73,329,32,04,47,058,31,05,42,259,00,06,04,307,00*74 -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184126,A,4124.7396,N,08152.2739,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184126,4124.7396,N,08152.2739,W,1,04,2.5,183.1,M,-34.0,M,,*73 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.9,2.5,1.0*3A -$GPGSV,3,2,12,07,18,127,00,10,47,198,48,13,21,064,33,23,09,038,00*7F -$PGRME,8.0,M,10.8,M,13.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184127,A,4124.7396,N,08152.2738,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184127,4124.7396,N,08152.2738,W,1,04,2.5,183.1,M,-34.0,M,,*73 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184128,A,4124.7396,N,08152.2737,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184128,4124.7396,N,08152.2737,W,1,04,2.5,183.1,M,-34.0,M,,*73 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,1,12,02,73,329,33,04,47,058,00,05,42,259,00,06,04,307,00*77 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184129,A,4124.7397,N,08152.2735,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184129,4124.7397,N,08152.2735,W,1,04,2.5,183.1,M,-34.0,M,,*71 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,2,12,07,18,127,00,10,47,198,48,13,21,064,34,23,09,038,00*78 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184130,A,4124.7398,N,08152.2733,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184130,4124.7398,N,08152.2733,W,1,04,2.5,183.1,M,-34.0,M,,*70 -$GPGSA,A,3,,04,,,,10,,,24,,,35,2.7,2.5,1.0*34 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184131,A,4124.7398,N,08152.2732,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184131,4124.7398,N,08152.2732,W,1,03,2.5,183.1,M,-34.0,M,,*77 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,1,12,02,73,329,32,04,47,059,00,05,42,259,00,06,04,307,00*77 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184132,A,4124.7399,N,08152.2731,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184132,4124.7399,N,08152.2731,W,1,03,2.5,183.1,M,-34.0,M,,*76 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,2,12,07,18,127,00,10,47,198,48,13,21,064,33,23,09,038,00*7F -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184133,A,4124.7399,N,08152.2729,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184133,4124.7399,N,08152.2729,W,1,03,2.5,183.1,M,-34.0,M,,*7E -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184134,A,4124.7399,N,08152.2728,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184134,4124.7399,N,08152.2728,W,1,03,2.5,183.1,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,1,12,02,73,329,35,04,47,059,00,05,42,258,00,06,04,307,00*71 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184135,A,4124.7400,N,08152.2727,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184135,4124.7400,N,08152.2727,W,1,03,2.5,183.0,M,-34.0,M,,*70 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,2,12,07,18,127,00,10,47,198,49,13,21,064,00,23,09,038,00*7E -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184136,A,4124.7400,N,08152.2726,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184136,4124.7400,N,08152.2726,W,1,03,2.5,183.0,M,-34.0,M,,*72 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184137,A,4124.7401,N,08152.2725,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184137,4124.7401,N,08152.2725,W,1,03,2.5,183.0,M,-34.0,M,,*71 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,1,12,02,73,329,36,04,47,059,00,05,42,258,32,06,04,307,00*73 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184138,A,4124.7401,N,08152.2723,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184138,4124.7401,N,08152.2723,W,1,03,2.5,183.0,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,2,12,07,18,127,00,10,47,198,49,13,21,064,00,23,09,038,00*7E -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184139,A,4124.7402,N,08152.2722,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184139,4124.7402,N,08152.2722,W,1,03,2.5,183.0,M,-34.0,M,,*7B -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184140,A,4124.7402,N,08152.2721,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184140,4124.7402,N,08152.2721,W,1,03,2.5,183.0,M,-34.0,M,,*76 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,1,12,02,73,329,38,04,47,059,00,05,42,258,32,06,05,308,00*73 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184141,A,4124.7402,N,08152.2720,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184141,4124.7402,N,08152.2720,W,1,03,2.5,183.0,M,-34.0,M,,*76 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,47,198,49,13,21,064,00,23,09,038,00*7E -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184142,A,4124.7403,N,08152.2720,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184142,4124.7403,N,08152.2720,W,1,03,2.5,183.0,M,-34.0,M,,*74 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184143,A,4124.7403,N,08152.2719,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184143,4124.7403,N,08152.2719,W,1,03,2.5,183.0,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,1,12,02,73,329,38,04,47,059,00,05,42,258,00,06,05,308,00*72 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184144,A,4124.7403,N,08152.2718,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184144,4124.7403,N,08152.2718,W,1,03,2.5,183.0,M,-34.0,M,,*79 -$GPGSA,A,3,,04,,,,10,,,,,,35,2.7,2.5,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,47,198,49,13,21,064,00,23,09,038,00*7E -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184145,A,4124.7404,N,08152.2717,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184145,4124.7404,N,08152.2717,W,1,00,2.5,183.0,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,43*7C -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184146,A,4124.7404,N,08152.2716,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184146,4124.7404,N,08152.2716,W,1,00,2.5,183.0,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,1,12,02,73,329,38,04,47,059,00,05,42,258,32,06,05,308,00*73 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184147,A,4124.7404,N,08152.2716,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184147,4124.7404,N,08152.2716,W,1,00,2.5,183.0,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,17,128,00,10,47,198,49,13,21,064,00,23,09,038,00*7E -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184148,A,4124.7404,N,08152.2715,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184148,4124.7404,N,08152.2715,W,1,00,2.5,183.0,M,-34.0,M,,*7C -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,43*7C -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184149,A,4124.7405,N,08152.2714,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184149,4124.7405,N,08152.2714,W,1,00,2.5,183.0,M,-34.0,M,,*7D -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,1,12,02,73,329,39,04,46,059,00,05,42,258,00,06,05,308,00*72 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184150,A,4124.7405,N,08152.2714,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184150,4124.7405,N,08152.2714,W,1,00,2.5,183.0,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,17,128,00,10,47,198,48,13,21,064,00,23,09,038,00*7F -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184151,A,4124.7405,N,08152.2713,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184151,4124.7405,N,08152.2713,W,1,00,2.5,183.0,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184152,A,4124.7405,N,08152.2713,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184152,4124.7405,N,08152.2713,W,1,00,2.5,183.0,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,1,12,02,73,329,38,04,46,059,00,05,42,258,37,06,05,308,00*77 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184153,A,4124.7406,N,08152.2712,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184153,4124.7406,N,08152.2712,W,1,00,2.5,183.0,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,17,128,00,10,48,198,48,13,21,064,00,23,09,038,00*70 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184154,A,4124.7406,N,08152.2712,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184154,4124.7406,N,08152.2712,W,1,00,2.5,183.0,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184155,A,4124.7406,N,08152.2711,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184155,4124.7406,N,08152.2711,W,1,00,2.5,183.0,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,1,12,02,73,329,38,04,46,059,00,05,42,258,36,06,05,308,00*76 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184156,A,4124.7406,N,08152.2711,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184156,4124.7406,N,08152.2711,W,1,00,2.5,183.0,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,17,128,00,10,48,198,48,13,21,064,00,23,09,038,00*70 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184157,A,4124.7406,N,08152.2710,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184157,4124.7406,N,08152.2710,W,1,00,2.5,183.0,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,39,35,34,141,44*75 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184158,A,4124.7407,N,08152.2710,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184158,4124.7407,N,08152.2710,W,1,00,2.5,183.0,M,-34.0,M,,*7B -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,1,12,02,73,329,37,04,46,059,00,05,42,258,35,06,05,308,00*7A -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184159,A,4124.7407,N,08152.2709,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184159,4124.7407,N,08152.2709,W,1,00,2.5,183.0,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,2,12,07,17,128,00,10,48,198,48,13,21,064,00,23,09,038,00*70 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184200,A,4124.7407,N,08152.2709,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184200,4124.7407,N,08152.2709,W,1,00,2.5,183.0,M,-34.0,M,,*7D -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,3,12,24,15,069,00,30,30,300,00,33,09,106,40,35,34,141,44*7B -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184201,A,4124.7407,N,08152.2709,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184201,4124.7407,N,08152.2709,W,1,00,2.5,183.0,M,-34.0,M,,*7C -$GPGSA,A,3,,,,,,,,,,,,,2.7,2.5,1.0*31 -$GPGSV,3,1,12,02,73,329,35,04,46,059,00,05,42,258,35,06,05,308,00*78 -$PGRME,7.9,M,10.8,M,13.4,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184202,A,4124.7408,N,08152.2708,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184202,4124.7408,N,08152.2708,W,1,03,2.5,183.0,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,2,12,07,17,128,00,10,48,198,47,13,21,064,00,23,09,038,00*7F -$PGRME,8.0,M,10.8,M,13.5,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184203,A,4124.7408,N,08152.2708,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184203,4124.7408,N,08152.2708,W,1,03,2.5,183.0,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,3,12,24,15,069,32,30,30,300,00,33,09,106,39,35,34,141,44*74 -$PGRME,8.0,M,10.8,M,13.5,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184204,A,4124.7409,N,08152.2708,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184204,4124.7409,N,08152.2708,W,1,03,2.5,183.0,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.7,2.5,1.0*30 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,258,34,06,05,308,00*7F -$PGRME,8.0,M,10.8,M,13.5,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184205,A,4124.7409,N,08152.2708,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184205,4124.7409,N,08152.2708,W,1,04,3.9,188.7,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.1,3.9,1.7*3F -$GPGSV,3,2,12,07,17,128,33,10,48,198,47,13,21,064,00,23,09,038,00*7F -$PGRME,8.4,M,12.2,M,14.9,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184206,A,4124.7409,N,08152.2707,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184206,4124.7409,N,08152.2707,W,1,04,9.6,188.7,M,-34.0,M,,*7B -$GPGSA,A,3,,,,,07,10,,,24,,,35,11.4,9.6,1.0*0E -$GPGSV,3,3,12,24,15,069,33,30,30,300,00,33,09,106,39,35,34,141,44*75 -$PGRME,8.4,M,12.2,M,14.9,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184207,A,4124.7409,N,08152.2707,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184207,4124.7409,N,08152.2707,W,1,04,9.6,188.7,M,-34.0,M,,*7A -$GPGSA,A,3,,,,,07,10,,,24,,,35,11.4,9.6,1.0*0E -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,258,38,06,05,308,00*73 -$PGRME,8.4,M,12.2,M,14.9,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184208,A,4124.7409,N,08152.2706,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184208,4124.7409,N,08152.2706,W,1,04,2.8,188.7,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,2,12,07,17,128,31,10,48,198,47,13,21,064,00,23,09,038,00*7D -$PGRME,8.6,M,12.2,M,15.0,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184209,A,4124.7409,N,08152.2705,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184209,4124.7409,N,08152.2705,W,1,04,2.8,201.1,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,3,12,24,15,069,35,30,30,300,00,33,09,106,39,35,34,141,44*73 -$PGRME,8.9,M,13.5,M,16.3,M*2C -$PGRMM,WGS 84*06 -$GPRMC,184210,A,4124.7409,N,08152.2705,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184210,4124.7409,N,08152.2705,W,1,04,3.9,213.4,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.3,3.9,1.7*3D -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,258,38,06,05,308,00*73 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184211,A,4124.7409,N,08152.2705,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184211,4124.7409,N,08152.2705,W,1,04,2.8,213.4,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,2,12,07,17,128,31,10,48,198,47,13,21,064,00,23,09,038,00*7D -$PGRME,9.3,M,14.7,M,17.5,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184212,A,4124.7410,N,08152.2704,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184212,4124.7410,N,08152.2704,W,1,04,2.8,213.4,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,3,12,24,15,069,35,30,30,300,00,33,09,106,39,35,34,141,44*73 -$PGRME,9.3,M,14.7,M,17.5,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184213,A,4124.7410,N,08152.2704,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184213,4124.7410,N,08152.2704,W,1,04,2.8,213.4,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,258,38,06,05,308,00*73 -$PGRME,9.3,M,14.7,M,17.5,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184214,A,4124.7410,N,08152.2704,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184214,4124.7410,N,08152.2704,W,1,04,2.8,213.4,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,2,12,07,17,128,00,10,48,198,47,13,21,064,00,23,09,038,00*7F -$PGRME,9.3,M,14.7,M,17.5,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184215,A,4124.7411,N,08152.2703,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184215,4124.7411,N,08152.2703,W,1,04,2.8,213.4,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,3,12,24,15,069,34,30,30,300,00,33,09,106,39,35,34,141,44*72 -$PGRME,9.4,M,14.7,M,17.5,M*22 -$PGRMM,WGS 84*06 -$GPRMC,184216,A,4124.7411,N,08152.2703,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184216,4124.7411,N,08152.2703,W,1,04,2.8,213.4,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,258,37,06,05,308,00*7C -$PGRME,9.4,M,14.7,M,17.5,M*22 -$PGRMM,WGS 84*06 -$GPRMC,184217,A,4124.7411,N,08152.2702,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184217,4124.7411,N,08152.2702,W,1,04,2.8,213.4,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,2,12,07,17,128,00,10,48,198,47,13,21,064,00,23,09,038,00*7F -$PGRME,9.5,M,14.7,M,17.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184218,A,4124.7412,N,08152.2702,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184218,4124.7412,N,08152.2702,W,1,04,2.8,213.4,M,-34.0,M,,*7C -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,3,12,24,15,069,35,30,30,300,00,33,09,106,39,35,34,141,44*73 -$PGRME,9.5,M,14.7,M,17.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184219,A,4124.7412,N,08152.2702,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184219,4124.7412,N,08152.2702,W,1,03,2.8,213.4,M,-34.0,M,,*7A -$GPGSA,A,3,,,,,,10,,,24,,,35,2.9,2.8,1.0*33 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,36,06,05,308,00*72 -$PGRME,9.5,M,14.7,M,17.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184220,A,4124.7412,N,08152.2701,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184220,4124.7412,N,08152.2701,W,1,03,2.8,213.4,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.9,2.8,1.0*33 -$GPGSV,3,2,12,07,17,128,00,10,48,198,46,13,21,064,00,23,09,038,00*7E -$PGRME,9.5,M,14.7,M,17.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184221,A,4124.7412,N,08152.2701,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184221,4124.7412,N,08152.2701,W,1,03,2.8,213.4,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.9,2.8,1.0*33 -$GPGSV,3,3,12,24,15,069,35,30,30,300,00,33,09,106,39,35,34,141,44*73 -$PGRME,9.5,M,14.7,M,17.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184222,A,4124.7413,N,08152.2701,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184222,4124.7413,N,08152.2701,W,1,03,2.8,213.4,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.9,2.8,1.0*33 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,35,06,05,308,00*71 -$PGRME,9.5,M,14.7,M,17.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184223,A,4124.7414,N,08152.2700,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184223,4124.7414,N,08152.2700,W,1,03,2.8,213.4,M,-34.0,M,,*77 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.9,2.8,1.0*33 -$GPGSV,3,2,12,07,17,128,00,10,48,198,46,13,21,064,00,23,09,038,00*7E -$PGRME,9.5,M,14.7,M,17.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184224,A,4124.7414,N,08152.2700,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184224,4124.7414,N,08152.2700,W,1,03,2.8,213.4,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.9,2.8,1.0*33 -$GPGSV,3,3,12,24,15,069,34,30,30,300,00,33,09,106,40,35,34,141,44*7C -$PGRME,9.5,M,14.7,M,17.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184225,A,4124.7415,N,08152.2700,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184225,4124.7415,N,08152.2700,W,1,03,2.8,213.4,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,,10,,,24,,,35,2.9,2.8,1.0*33 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,36,06,05,308,00*72 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184226,A,4124.7415,N,08152.2698,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184226,4124.7415,N,08152.2698,W,1,03,2.8,213.4,M,-34.0,M,,*73 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,46,13,21,064,00,23,09,038,00*7E -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184227,A,4124.7415,N,08152.2698,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184227,4124.7415,N,08152.2698,W,1,03,2.8,213.4,M,-34.0,M,,*72 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,15,069,35,30,30,300,00,33,09,106,40,35,34,141,43*7A -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184228,A,4124.7416,N,08152.2697,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184228,4124.7416,N,08152.2697,W,1,03,2.8,213.4,M,-34.0,M,,*71 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,35,06,05,308,00*71 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184229,A,4124.7416,N,08152.2697,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184229,4124.7416,N,08152.2697,W,1,03,2.8,213.4,M,-34.0,M,,*70 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,46,13,21,064,00,23,09,038,00*7E -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184230,A,4124.7417,N,08152.2696,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184230,4124.7417,N,08152.2696,W,1,03,2.8,213.4,M,-34.0,M,,*78 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,15,069,35,30,30,300,00,33,09,106,39,35,34,141,43*74 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184231,A,4124.7417,N,08152.2696,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184231,4124.7417,N,08152.2696,W,1,03,2.8,213.4,M,-34.0,M,,*79 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,34,06,05,308,00*70 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184232,A,4124.7418,N,08152.2696,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184232,4124.7418,N,08152.2696,W,1,03,2.8,213.4,M,-34.0,M,,*75 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,47,13,21,064,00,23,09,038,00*7F -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184233,A,4124.7418,N,08152.2695,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184233,4124.7418,N,08152.2695,W,1,03,2.8,213.4,M,-34.0,M,,*77 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,15,069,38,30,30,300,00,33,09,106,39,35,34,141,43*79 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184234,A,4124.7419,N,08152.2695,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184234,4124.7419,N,08152.2695,W,1,03,2.8,213.4,M,-34.0,M,,*71 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,35,06,05,308,00*71 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184235,A,4124.7419,N,08152.2694,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184235,4124.7419,N,08152.2694,W,1,03,2.8,213.4,M,-34.0,M,,*71 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,47,13,21,064,00,23,09,038,00*7F -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184236,A,4124.7419,N,08152.2693,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184236,4124.7419,N,08152.2693,W,1,03,2.8,213.4,M,-34.0,M,,*75 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,15,069,39,30,30,300,00,33,09,106,39,35,34,141,43*78 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184237,A,4124.7420,N,08152.2693,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184237,4124.7420,N,08152.2693,W,1,03,2.8,213.4,M,-34.0,M,,*7E -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,37,06,05,308,00*73 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184238,A,4124.7420,N,08152.2692,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184238,4124.7420,N,08152.2692,W,1,03,2.8,213.4,M,-34.0,M,,*70 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,46,13,21,064,00,23,09,038,00*7E -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184239,A,4124.7421,N,08152.2691,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184239,4124.7421,N,08152.2691,W,1,03,2.8,213.4,M,-34.0,M,,*73 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,15,069,39,30,30,300,00,33,09,106,40,35,34,141,43*76 -$PGRME,9.6,M,14.7,M,17.6,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184240,A,4124.7421,N,08152.2691,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184240,4124.7421,N,08152.2691,W,1,03,2.8,213.4,M,-34.0,M,,*7D -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,39,06,05,308,00*7D -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184241,A,4124.7422,N,08152.2690,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184241,4124.7422,N,08152.2690,W,1,03,2.8,213.4,M,-34.0,M,,*7E -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,45,13,21,064,00,23,08,037,00*73 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184242,A,4124.7422,N,08152.2690,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184242,4124.7422,N,08152.2690,W,1,03,2.8,213.4,M,-34.0,M,,*7D -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,15,069,39,30,30,300,00,33,09,106,40,35,34,141,43*76 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184243,A,4124.7423,N,08152.2689,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184243,4124.7423,N,08152.2689,W,1,03,2.8,213.4,M,-34.0,M,,*75 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,40,06,05,308,00*73 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184244,A,4124.7423,N,08152.2688,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184244,4124.7423,N,08152.2688,W,1,03,2.8,213.4,M,-34.0,M,,*73 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,44,13,21,064,00,23,08,037,00*72 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184245,A,4124.7424,N,08152.2688,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184245,4124.7424,N,08152.2688,W,1,03,2.8,213.4,M,-34.0,M,,*75 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,14,070,39,30,30,300,00,33,09,106,40,35,34,141,43*7F -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184246,A,4124.7424,N,08152.2688,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184246,4124.7424,N,08152.2688,W,1,03,2.8,213.4,M,-34.0,M,,*76 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,38,06,05,308,00*7C -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184247,A,4124.7425,N,08152.2687,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184247,4124.7425,N,08152.2687,W,1,03,2.8,213.4,M,-34.0,M,,*79 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,43,13,21,064,00,23,08,037,00*75 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184248,A,4124.7425,N,08152.2686,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184248,4124.7425,N,08152.2686,W,1,03,2.8,213.4,M,-34.0,M,,*77 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,14,070,40,30,30,300,00,33,09,106,40,35,34,141,43*71 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184249,A,4124.7426,N,08152.2686,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184249,4124.7426,N,08152.2686,W,1,03,2.8,213.4,M,-34.0,M,,*75 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,36,06,06,308,00*71 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184250,A,4124.7426,N,08152.2685,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184250,4124.7426,N,08152.2685,W,1,03,2.8,213.4,M,-34.0,M,,*7E -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,44,13,21,064,00,23,08,037,00*72 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184251,A,4124.7427,N,08152.2685,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184251,4124.7427,N,08152.2685,W,1,03,2.8,213.4,M,-34.0,M,,*7E -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,14,070,39,30,30,300,00,33,09,106,40,35,34,141,43*7F -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184252,A,4124.7427,N,08152.2684,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184252,4124.7427,N,08152.2684,W,1,03,2.8,213.4,M,-34.0,M,,*7C -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,31,06,06,308,00*76 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184253,A,4124.7427,N,08152.2684,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184253,4124.7427,N,08152.2684,W,1,03,2.8,213.4,M,-34.0,M,,*7D -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,44,13,21,064,00,23,08,037,00*72 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184254,A,4124.7428,N,08152.2683,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184254,4124.7428,N,08152.2683,W,1,03,2.8,213.4,M,-34.0,M,,*72 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,14,070,38,30,30,300,00,33,09,106,40,35,34,141,43*7E -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184255,A,4124.7429,N,08152.2683,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184255,4124.7429,N,08152.2683,W,1,03,2.8,213.4,M,-34.0,M,,*72 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,31,06,06,308,00*76 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184256,A,4124.7429,N,08152.2682,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184256,4124.7429,N,08152.2682,W,1,03,2.8,213.4,M,-34.0,M,,*70 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,43,13,21,064,00,23,08,037,00*75 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184257,A,4124.7429,N,08152.2681,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184257,4124.7429,N,08152.2681,W,1,03,2.8,213.4,M,-34.0,M,,*72 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,14,070,38,30,30,300,00,33,09,106,40,35,34,141,43*7E -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184258,A,4124.7430,N,08152.2681,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184258,4124.7430,N,08152.2681,W,1,03,2.8,213.4,M,-34.0,M,,*75 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,34,06,06,308,00*73 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184259,A,4124.7430,N,08152.2680,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184259,4124.7430,N,08152.2680,W,1,03,2.8,213.4,M,-34.0,M,,*75 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,43,13,21,064,00,23,08,037,00*75 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184300,A,4124.7431,N,08152.2680,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184300,4124.7431,N,08152.2680,W,1,03,2.8,213.4,M,-34.0,M,,*79 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,14,070,39,30,30,300,00,33,09,106,40,35,34,141,44*78 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184301,A,4124.7431,N,08152.2679,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184301,4124.7431,N,08152.2679,W,1,03,2.8,213.4,M,-34.0,M,,*7E -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,34,06,06,308,00*73 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184302,A,4124.7431,N,08152.2678,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184302,4124.7431,N,08152.2678,W,1,03,2.8,213.4,M,-34.0,M,,*7C -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,00,10,48,198,43,13,21,064,00,23,08,037,00*75 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184303,A,4124.7431,N,08152.2678,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184303,4124.7431,N,08152.2678,W,1,03,2.8,213.4,M,-34.0,M,,*7D -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,3,12,24,14,070,39,30,30,300,00,33,09,106,40,35,34,141,43*7F -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184304,A,4124.7432,N,08152.2677,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184304,4124.7432,N,08152.2677,W,1,03,2.8,213.4,M,-34.0,M,,*76 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,36,06,06,308,00*71 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184305,A,4124.7432,N,08152.2676,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184305,4124.7432,N,08152.2676,W,1,03,2.8,213.4,M,-34.0,M,,*76 -$GPGSA,A,2,,,,,,10,,,24,,,35,2.9,2.8,1.0*32 -$GPGSV,3,2,12,07,17,128,35,10,48,198,43,13,21,064,00,23,08,037,00*73 -$PGRME,9.3,M,14.7,M,17.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184306,A,4124.7433,N,08152.2676,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184306,4124.7433,N,08152.2676,W,1,04,2.8,216.3,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,3,12,24,14,070,38,30,30,300,00,33,09,106,40,35,34,141,43*7E -$PGRME,9.5,M,15.5,M,18.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184307,A,4124.7433,N,08152.2675,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184307,4124.7433,N,08152.2675,W,1,04,2.9,219.6,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,3.5,2.9,1.7*3F -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,37,06,06,308,00*70 -$PGRME,9.5,M,15.5,M,18.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184308,A,4124.7434,N,08152.2675,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184308,4124.7434,N,08152.2675,W,1,04,9.1,219.7,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.6,9.1,1.0*32 -$GPGSV,3,2,12,07,17,128,37,10,48,198,42,13,21,064,00,23,08,037,00*70 -$PGRME,9.5,M,15.5,M,18.2,M*28 -$PGRMM,WGS 84*06 -$GPRMC,184309,A,4124.7434,N,08152.2674,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184309,4124.7434,N,08152.2674,W,1,04,3.9,225.4,M,-34.0,M,,*7C -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.5,3.9,1.7*35 -$GPGSV,3,3,12,24,14,070,36,30,31,299,00,33,09,106,39,35,34,141,43*7E -$PGRME,9.7,M,16.2,M,18.9,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184310,A,4124.7435,N,08152.2673,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184310,4124.7435,N,08152.2673,W,1,04,3.9,225.5,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.5,3.9,1.7*35 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,36,06,06,308,00*71 -$PGRME,9.7,M,16.2,M,18.9,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184311,A,4124.7435,N,08152.2673,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184311,4124.7435,N,08152.2673,W,1,04,3.9,225.6,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.5,3.9,1.7*35 -$GPGSV,3,2,12,07,17,128,36,10,48,198,41,13,21,064,00,23,08,037,00*72 -$PGRME,9.7,M,16.2,M,18.9,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184312,A,4124.7436,N,08152.2672,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184312,4124.7436,N,08152.2672,W,1,04,4.2,225.7,M,-34.0,M,,*7D -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.9,4.2,1.0*3C -$GPGSV,3,3,12,24,14,070,36,30,31,299,00,33,09,106,39,35,34,141,43*7E -$PGRME,11.6,M,16.2,M,20.3,M*1C -$PGRMM,WGS 84*06 -$GPRMC,184313,A,4124.7436,N,08152.2672,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184313,4124.7436,N,08152.2672,W,1,04,2.8,225.7,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,1,12,02,73,329,00,04,46,059,00,05,42,257,36,06,06,308,00*71 -$PGRME,9.7,M,16.2,M,18.8,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184314,A,4124.7437,N,08152.2671,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184314,4124.7437,N,08152.2671,W,1,04,2.8,226.8,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,2,12,07,17,128,35,10,48,198,41,13,21,064,00,23,08,037,00*71 -$PGRME,9.8,M,16.8,M,19.5,M*2D -$PGRMM,WGS 84*06 -$GPRMC,184315,A,4124.7437,N,08152.2670,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184315,4124.7437,N,08152.2670,W,1,04,2.8,226.8,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,3,12,24,14,070,36,30,31,299,00,33,09,106,40,35,34,141,43*70 -$PGRME,9.8,M,16.8,M,19.5,M*2D -$PGRMM,WGS 84*06 -$GPRMC,184316,A,4124.7438,N,08152.2669,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184316,4124.7438,N,08152.2669,W,1,04,3.9,230.3,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.4,3.9,1.7*3A -$GPGSV,3,1,12,02,73,329,31,04,46,059,00,05,42,257,36,06,06,308,00*73 -$PGRME,10.0,M,17.4,M,20.0,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184317,A,4124.7438,N,08152.2667,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184317,4124.7438,N,08152.2667,W,1,04,4.2,234.1,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.5,4.2,1.0*30 -$GPGSV,3,2,12,07,17,128,35,10,48,198,42,13,21,064,00,23,08,037,00*72 -$PGRME,10.0,M,17.4,M,20.0,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184318,A,4124.7439,N,08152.2667,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184318,4124.7439,N,08152.2667,W,1,04,3.9,237.0,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.5,3.9,1.7*35 -$GPGSV,3,3,12,24,14,070,35,30,31,299,00,33,09,106,40,35,34,141,43*73 -$PGRME,10.1,M,17.9,M,20.5,M*16 -$PGRMM,WGS 84*06 -$GPRMC,184319,A,4124.7439,N,08152.2666,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184319,4124.7439,N,08152.2666,W,1,04,9.9,236.9,M,-34.0,M,,*76 -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.7,9.9,1.0*00 -$GPGSV,3,1,12,02,73,329,32,04,46,059,00,05,42,257,36,06,06,308,00*70 -$PGRME,10.1,M,17.9,M,20.5,M*16 -$PGRMM,WGS 84*06 -$GPRMC,184320,A,4124.7440,N,08152.2666,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184320,4124.7440,N,08152.2666,W,1,04,3.9,237.0,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.5,3.9,1.7*35 -$GPGSV,3,2,12,07,16,128,34,10,48,198,41,13,21,064,00,23,08,037,00*71 -$PGRME,10.2,M,18.3,M,21.0,M*14 -$PGRMM,WGS 84*06 -$GPRMC,184321,A,4124.7440,N,08152.2665,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184321,4124.7440,N,08152.2665,W,1,04,3.9,236.8,M,-34.0,M,,*7B -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.5,3.9,1.7*35 -$GPGSV,3,3,12,24,14,070,34,30,31,299,00,33,09,106,40,35,34,141,43*72 -$PGRME,10.2,M,18.3,M,21.0,M*14 -$PGRMM,WGS 84*06 -$GPRMC,184322,A,4124.7441,N,08152.2664,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184322,4124.7441,N,08152.2664,W,1,04,4.2,236.7,M,-34.0,M,,*7B -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.9,4.2,1.0*3C -$GPGSV,3,1,12,02,73,329,34,04,46,059,00,05,42,257,35,06,06,308,00*75 -$PGRME,12.3,M,18.3,M,22.5,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184323,A,4124.7442,N,08152.2664,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184323,4124.7442,N,08152.2664,W,1,04,10.2,236.6,M,-34.0,M,,*4D -$GPGSA,A,3,,,,,07,10,,,24,,,35,12.4,10.2,1.0*31 -$GPGSV,3,2,12,07,16,128,36,10,48,198,39,13,21,064,00,23,08,037,00*7C -$PGRME,12.3,M,18.3,M,22.5,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184324,A,4124.7442,N,08152.2663,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184324,4124.7442,N,08152.2663,W,1,04,15.1,236.5,M,-34.0,M,,*48 -$GPGSA,A,3,,,,,07,10,,,24,,,35,16.9,15.1,1.0*3E -$GPGSV,3,3,12,24,14,070,33,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,12.3,M,18.3,M,22.5,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184325,A,4124.7443,N,08152.2662,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184325,4124.7443,N,08152.2662,W,1,04,3.9,239.8,M,-34.0,M,,*74 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.5,3.9,1.7*35 -$GPGSV,3,1,12,02,73,332,34,04,46,059,00,05,42,257,34,06,06,308,00*7E -$PGRME,11.3,M,18.7,M,22.8,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184326,A,4124.7443,N,08152.2661,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184326,4124.7443,N,08152.2661,W,1,04,10.0,239.7,M,-34.0,M,,*40 -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.7,10.0,1.0*31 -$GPGSV,3,2,12,07,16,128,37,10,48,198,38,13,21,064,00,23,08,037,00*7C -$PGRME,11.3,M,18.7,M,22.8,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184327,A,4124.7444,N,08152.2661,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184327,4124.7444,N,08152.2661,W,1,04,6.8,239.7,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.9,6.8,1.0*34 -$GPGSV,3,3,12,24,14,070,33,30,31,299,00,33,09,106,39,35,34,141,43*7B -$PGRME,13.3,M,18.7,M,24.2,M*15 -$PGRMM,WGS 84*06 -$GPRMC,184328,A,4124.7444,N,08152.2660,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184328,4124.7444,N,08152.2660,W,1,04,2.8,239.6,M,-34.0,M,,*72 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,1,12,02,73,332,34,04,46,059,00,05,42,257,34,06,06,308,00*7E -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184329,A,4124.7445,N,08152.2659,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184329,4124.7445,N,08152.2659,W,1,04,2.8,239.6,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,2,12,07,16,128,36,10,48,198,39,13,21,064,00,23,08,037,00*7C -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184330,A,4124.7445,N,08152.2658,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184330,4124.7445,N,08152.2658,W,1,04,9.1,239.6,M,-34.0,M,,*73 -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.2,9.1,1.0*36 -$GPGSV,3,3,12,24,14,070,32,30,31,299,00,33,09,106,40,35,34,141,43*74 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184331,A,4124.7446,N,08152.2658,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184331,4124.7446,N,08152.2658,W,1,04,9.1,239.6,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.2,9.1,1.0*36 -$GPGSV,3,1,12,02,73,332,34,04,46,060,00,05,42,257,34,06,06,308,00*74 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184332,A,4124.7446,N,08152.2657,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184332,4124.7446,N,08152.2657,W,1,04,9.1,239.5,M,-34.0,M,,*7E -$GPGSA,A,3,,,,,07,10,,,24,,,35,9.2,9.1,1.0*36 -$GPGSV,3,2,12,07,16,128,38,10,48,198,38,13,21,064,00,23,08,037,00*73 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184333,A,4124.7447,N,08152.2657,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184333,4124.7447,N,08152.2657,W,1,04,14.2,239.5,M,-34.0,M,,*41 -$GPGSA,A,3,,,,,07,10,,,24,,,35,14.4,14.2,1.0*33 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184334,A,4124.7448,N,08152.2656,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184334,4124.7448,N,08152.2656,W,1,04,18.4,239.5,M,-34.0,M,,*42 -$GPGSA,A,3,,,,,07,10,,,24,,,35,18.5,18.4,1.0*34 -$GPGSV,3,1,12,02,73,332,33,04,46,060,00,05,41,257,00,06,06,308,00*77 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184335,A,4124.7448,N,08152.2656,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184335,4124.7448,N,08152.2656,W,1,04,21.8,239.5,M,-34.0,M,,*45 -$GPGSA,A,3,,,,,07,10,,,24,,,35,21.9,21.8,1.0*34 -$GPGSV,3,2,12,07,16,128,39,10,48,198,38,13,21,064,00,23,08,037,00*72 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184336,A,4124.7449,N,08152.2655,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184336,4124.7449,N,08152.2655,W,1,03,24.5,239.5,M,-34.0,M,,*4B -$GPGSA,A,3,,,,,,10,,,24,,,35,24.6,24.5,1.0*31 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184337,A,4124.7449,N,08152.2655,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184337,4124.7449,N,08152.2655,W,1,00,26.8,239.5,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,,,,,,,,,26.8,26.8,1.0*33 -$GPGSV,3,1,12,02,73,332,34,04,46,060,00,05,41,257,32,06,06,308,00*71 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184338,A,4124.7450,N,08152.2654,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184338,4124.7450,N,08152.2654,W,1,00,28.6,239.5,M,-34.0,M,,*40 -$GPGSA,A,3,,,,,,,,,,,,,28.6,28.6,1.0*33 -$GPGSV,3,2,12,07,16,128,40,10,48,198,37,13,21,064,00,23,08,037,00*73 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184339,A,4124.7450,N,08152.2654,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184339,4124.7450,N,08152.2654,W,1,00,28.6,239.5,M,-34.0,M,,*41 -$GPGSA,A,3,,,,,,,,,,,,,28.6,28.6,1.0*33 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184340,A,4124.7451,N,08152.2653,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184340,4124.7451,N,08152.2653,W,1,00,30.0,239.5,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,,,,,,,,,30.1,30.0,1.0*32 -$GPGSV,3,1,12,02,73,332,34,04,46,060,00,05,41,257,00,06,06,308,00*70 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184341,A,4124.7451,N,08152.2653,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184341,4124.7451,N,08152.2653,W,1,00,31.2,239.5,M,-34.0,M,,*44 -$GPGSA,A,3,,,,,,,,,,,,,31.3,31.2,1.0*32 -$GPGSV,3,2,12,07,16,128,40,10,48,198,39,13,21,064,00,23,08,037,00*7D -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184342,A,4124.7452,N,08152.2652,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184342,4124.7452,N,08152.2652,W,1,00,32.2,239.5,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,,,,,,,,,32.2,32.2,1.0*33 -$GPGSV,3,3,12,24,14,070,36,30,31,299,00,33,09,106,40,35,34,141,44*77 -$PGRME,10.2,M,18.7,M,21.3,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184343,A,4124.7452,N,08152.2651,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184343,4124.7452,N,08152.2651,W,1,04,3.9,240.3,M,-34.0,M,,*71 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.4,3.9,1.6*35 -$GPGSV,3,1,12,02,73,332,34,04,46,060,00,05,41,257,37,06,06,308,00*74 -$PGRME,10.3,M,19.1,M,21.7,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184344,A,4124.7453,N,08152.2651,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184344,4124.7453,N,08152.2651,W,1,04,2.8,240.4,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,07,10,,,24,,,35,2.9,2.8,1.0*34 -$GPGSV,3,2,12,07,16,128,39,10,48,198,39,13,21,064,00,23,08,037,00*73 -$PGRME,10.3,M,19.1,M,21.7,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184345,A,4124.7453,N,08152.2650,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184345,4124.7453,N,08152.2650,W,1,04,3.9,242.3,M,-34.0,M,,*75 -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.5,3.9,1.6*3A -$GPGSV,3,3,12,24,14,070,36,30,31,299,00,33,09,106,40,35,34,141,43*70 -$PGRME,10.4,M,19.4,M,22.0,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184346,A,4124.7453,N,08152.2649,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184346,4124.7453,N,08152.2649,W,1,04,3.9,244.0,M,-34.0,M,,*7B -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.4,3.9,1.6*35 -$GPGSV,3,1,12,02,73,332,34,04,46,060,00,05,41,257,35,06,06,308,00*76 -$PGRME,10.5,M,19.7,M,22.3,M*16 -$PGRMM,WGS 84*06 -$GPRMC,184347,A,4124.7454,N,08152.2650,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184347,4124.7454,N,08152.2650,W,1,04,4.2,244.1,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,6.9,4.2,1.0*3C -$GPGSV,3,2,12,07,16,128,38,10,48,198,40,13,21,064,00,23,08,037,00*7C -$PGRME,12.7,M,19.7,M,23.9,M*1D -$PGRMM,WGS 84*06 -$GPRMC,184348,A,4124.7455,N,08152.2649,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184348,4124.7455,N,08152.2649,W,1,04,3.9,245.8,M,-34.0,M,,*7A -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.4,3.9,1.6*35 -$GPGSV,3,3,12,24,14,070,35,30,31,299,00,33,09,106,40,35,34,141,43*73 -$PGRME,11.3,M,20.0,M,24.0,M*19 -$PGRMM,WGS 84*06 -$GPRMC,184349,A,4124.7455,N,08152.2649,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184349,4124.7455,N,08152.2649,W,1,04,3.9,247.1,M,-34.0,M,,*70 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.4,3.9,1.6*35 -$GPGSV,3,1,12,02,73,332,37,04,46,060,00,05,41,257,37,06,06,308,00*77 -$PGRME,11.3,M,20.2,M,24.1,M*1A -$PGRMM,WGS 84*06 -$GPRMC,184350,A,4124.7456,N,08152.2649,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184350,4124.7456,N,08152.2649,W,1,04,10.1,247.0,M,-34.0,M,,*40 -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.8,10.1,1.0*3F -$GPGSV,3,2,12,07,16,128,36,10,48,198,42,13,21,064,00,23,08,037,00*70 -$PGRME,11.3,M,20.2,M,24.1,M*1A -$PGRMM,WGS 84*06 -$GPRMC,184351,A,4124.7456,N,08152.2648,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184351,4124.7456,N,08152.2648,W,1,04,15.1,247.0,M,-34.0,M,,*45 -$GPGSA,A,3,,,,,07,10,,,24,,,35,18.1,15.1,1.0*38 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,11.3,M,20.2,M,24.1,M*1A -$PGRMM,WGS 84*06 -$GPRMC,184352,A,4124.7457,N,08152.2648,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184352,4124.7457,N,08152.2648,W,1,04,19.2,247.0,M,-34.0,M,,*48 -$GPGSA,A,3,,,,,07,10,,,24,,,35,21.6,19.2,1.0*3A -$GPGSV,3,1,12,02,73,332,39,04,46,060,00,05,41,257,37,06,06,308,00*79 -$PGRME,11.3,M,20.2,M,24.1,M*1A -$PGRMM,WGS 84*06 -$GPRMC,184353,A,4124.7457,N,08152.2647,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184353,4124.7457,N,08152.2647,W,1,04,3.9,248.0,M,-34.0,M,,*79 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.4,3.9,1.6*35 -$GPGSV,3,2,12,07,16,128,35,10,49,198,43,13,21,064,00,23,08,037,00*73 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184354,A,4124.7457,N,08152.2647,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184354,4124.7457,N,08152.2647,W,1,04,3.9,247.9,M,-34.0,M,,*78 -$GPGSA,A,3,,,,,07,10,,,24,,,35,8.4,3.9,1.6*35 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,43*7B -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184355,A,4124.7457,N,08152.2646,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184355,4124.7457,N,08152.2646,W,1,04,10.1,247.9,M,-34.0,M,,*42 -$GPGSA,A,3,,,,,07,10,,,24,,,35,13.8,10.1,1.0*3F -$GPGSV,3,1,12,02,73,332,40,04,46,060,00,05,41,257,37,06,06,308,00*77 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184356,A,4124.7458,N,08152.2646,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184356,4124.7458,N,08152.2646,W,1,04,15.2,247.9,M,-34.0,M,,*48 -$GPGSA,A,3,,,,,07,10,,,24,,,35,18.1,15.2,1.0*3B -$GPGSV,3,2,12,07,16,128,35,10,49,198,43,13,21,064,00,23,08,037,00*73 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184357,A,4124.7458,N,08152.2645,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184357,4124.7458,N,08152.2645,W,1,04,19.3,247.9,M,-34.0,M,,*47 -$GPGSA,A,3,,,,,07,10,,,24,,,35,21.7,19.3,1.0*3A -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,44*7C -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184358,A,4124.7458,N,08152.2645,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184358,4124.7458,N,08152.2645,W,1,04,22.6,247.9,M,-34.0,M,,*45 -$GPGSA,A,3,,,,,07,10,,,24,,,35,24.5,22.6,1.0*30 -$GPGSV,3,1,12,02,73,332,40,04,46,060,00,05,41,257,37,06,06,308,00*77 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184359,A,4124.7459,N,08152.2644,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184359,4124.7459,N,08152.2644,W,1,04,25.3,247.9,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,07,10,,,24,,,35,26.9,25.3,1.0*3C -$GPGSV,3,2,12,07,16,128,37,10,49,198,43,13,21,064,00,23,08,037,00*71 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184400,A,4124.7459,N,08152.2644,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184400,4124.7459,N,08152.2644,W,1,04,27.5,247.9,M,-34.0,M,,*49 -$GPGSA,A,3,,,,,07,10,,,24,,,35,28.8,27.5,1.0*37 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184401,A,4124.7459,N,08152.2643,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184401,4124.7459,N,08152.2643,W,1,04,29.3,247.9,M,-34.0,M,,*47 -$GPGSA,A,3,,,,,07,10,,,24,,,35,30.3,29.3,1.0*3D -$GPGSV,3,1,12,02,73,332,40,04,46,060,00,05,41,257,37,06,06,308,00*77 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184402,A,4124.7460,N,08152.2643,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184402,4124.7460,N,08152.2643,W,1,00,30.7,247.9,M,-34.0,M,,*46 -$GPGSA,A,3,,,,,,,,,,,,,31.6,30.7,1.0*33 -$GPGSV,3,2,12,07,16,128,38,10,49,198,44,13,21,064,00,23,08,037,00*79 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184403,A,4124.7460,N,08152.2643,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184403,4124.7460,N,08152.2643,W,1,00,31.9,247.9,M,-34.0,M,,*48 -$GPGSA,A,3,,,,,,,,,,,,,32.6,31.9,1.0*3F -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184404,A,4124.7460,N,08152.2642,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184404,4124.7460,N,08152.2642,W,1,00,32.8,247.9,M,-34.0,M,,*4C -$GPGSA,A,3,,,,,,,,,,,,,33.4,32.8,1.0*3E -$GPGSV,3,1,12,02,73,332,40,04,46,060,00,05,41,257,39,06,06,308,00*79 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184405,A,4124.7461,N,08152.2642,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184405,4124.7461,N,08152.2642,W,1,00,33.6,247.9,M,-34.0,M,,*43 -$GPGSA,A,3,,,,,,,,,,,,,34.1,33.6,1.0*33 -$GPGSV,3,2,12,07,16,128,38,10,49,198,44,13,21,063,00,23,08,037,00*7E -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184406,A,4124.7461,N,08152.2641,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184406,4124.7461,N,08152.2641,W,1,00,34.3,247.9,M,-34.0,M,,*41 -$GPGSA,A,3,,,,,,,,,,,,,34.6,34.3,1.0*36 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,11.3,M,20.4,M,24.2,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184407,A,4124.7461,N,08152.2641,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184407,4124.7461,N,08152.2641,W,2,04,4.1,247.3,M,-34.0,M,,*7C -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,1.6*3B -$GPGSV,3,1,12,02,73,332,40,04,46,060,00,05,41,257,38,06,06,308,00*78 -$PGRME,11.5,M,20.8,M,24.5,M*12 -$PGRMM,WGS 84*06 -$GPRMC,184408,A,4124.7462,N,08152.2641,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184408,4124.7462,N,08152.2641,W,2,04,4.1,246.6,M,-34.0,M,,*74 -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,2.1*3F -$GPGSV,3,2,12,07,16,128,39,10,49,198,45,13,21,063,00,23,08,037,00*7E -$PGRME,11.5,M,20.8,M,24.5,M*12 -$PGRMM,WGS 84*06 -$GPRMC,184409,A,4124.7462,N,08152.2641,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184409,4124.7462,N,08152.2641,W,2,04,2.5,246.3,M,-34.0,M,,*72 -$GPGSA,A,3,02,,,,07,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,9.8,M,20.8,M,23.0,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184410,A,4124.7463,N,08152.2641,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184410,4124.7463,N,08152.2641,W,2,04,2.7,247.2,M,-34.0,M,,*79 -$GPGSA,A,3,02,,,,07,10,,,,,,35,3.2,2.7,1.6*33 -$GPGSV,3,1,12,02,73,332,40,04,46,060,00,05,41,257,39,06,06,308,00*79 -$PGRME,10.1,M,21.1,M,23.4,M*19 -$PGRMM,WGS 84*06 -$GPRMC,184411,A,4124.7463,N,08152.2640,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184411,4124.7463,N,08152.2640,W,2,04,2.8,247.7,M,-34.0,M,,*73 -$GPGSA,A,3,02,,,,07,10,,,,,,35,3.7,2.8,2.1*3D -$GPGSV,3,2,12,07,16,128,39,10,49,198,45,13,21,063,00,23,08,037,00*7E -$PGRME,10.1,M,21.1,M,23.4,M*19 -$PGRMM,WGS 84*06 -$GPRMC,184412,A,4124.7463,N,08152.2640,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184412,4124.7463,N,08152.2640,W,2,04,2.8,247.9,M,-34.0,M,,*7E -$GPGSA,A,3,02,,,,07,10,,,,,,35,3.7,2.8,2.1*3D -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,10.1,M,21.1,M,23.4,M*19 -$PGRMM,WGS 84*06 -$GPRMC,184413,A,4124.7463,N,08152.2639,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184413,4124.7463,N,08152.2639,W,2,04,2.8,248.3,M,-34.0,M,,*74 -$GPGSA,A,3,02,,,,07,10,,,,,,35,3.7,2.8,2.1*3D -$GPGSV,3,1,12,02,73,332,39,04,46,060,00,05,41,257,39,06,06,308,00*77 -$PGRME,10.1,M,21.1,M,23.4,M*19 -$PGRMM,WGS 84*06 -$GPRMC,184414,A,4124.7463,N,08152.2638,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184414,4124.7463,N,08152.2638,W,2,04,2.5,248.2,M,-34.0,M,,*7E -$GPGSA,A,3,02,,,,07,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,2,12,07,16,128,38,10,49,198,45,13,21,063,00,23,08,037,00*7F -$PGRME,9.9,M,21.1,M,23.3,M*2E -$PGRMM,WGS 84*06 -$GPRMC,184415,A,4124.7463,N,08152.2637,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184415,4124.7463,N,08152.2637,W,2,04,2.5,247.8,M,-34.0,M,,*75 -$GPGSA,A,3,02,,,,07,10,,,,,,35,2.7,2.5,1.0*33 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184416,A,4124.7463,N,08152.2637,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184416,4124.7463,N,08152.2637,W,2,04,2.7,247.4,M,-34.0,M,,*78 -$GPGSA,A,3,02,,,,07,10,,,,,,35,3.2,2.7,1.6*33 -$GPGSV,3,1,12,02,73,332,39,04,46,060,00,05,41,257,38,06,06,308,00*76 -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184417,A,4124.7463,N,08152.2637,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184417,4124.7463,N,08152.2637,W,2,04,2.7,246.9,M,-34.0,M,,*75 -$GPGSA,A,3,02,,,,07,10,,,,,,35,3.2,2.7,1.6*33 -$GPGSV,3,2,12,07,16,128,38,10,49,198,46,13,21,063,00,23,08,037,00*7C -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184418,A,4124.7464,N,08152.2636,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184418,4124.7464,N,08152.2636,W,2,04,9.2,246.9,M,-34.0,M,,*72 -$GPGSA,A,3,02,,,,07,10,,,,,,35,9.7,9.2,1.0*34 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184419,A,4124.7464,N,08152.2636,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184419,4124.7464,N,08152.2636,W,2,04,4.1,245.5,M,-34.0,M,,*72 -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,1.6*3B -$GPGSV,3,1,12,02,73,332,38,04,46,060,00,05,41,257,38,06,06,308,00*77 -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184420,A,4124.7464,N,08152.2635,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184420,4124.7464,N,08152.2635,W,2,04,4.1,245.0,M,-34.0,M,,*7E -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,2.1*3F -$GPGSV,3,2,12,07,16,128,39,10,49,198,45,13,21,063,00,23,08,037,00*7E -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184421,A,4124.7464,N,08152.2635,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184421,4124.7464,N,08152.2635,W,2,04,4.1,245.1,M,-34.0,M,,*7E -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,2.1*3F -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,43*7B -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184422,A,4124.7464,N,08152.2634,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184422,4124.7464,N,08152.2634,W,2,04,4.1,245.0,M,-34.0,M,,*7D -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,2.6*38 -$GPGSV,3,1,12,02,73,332,37,04,46,060,00,05,41,257,39,06,06,308,00*79 -$PGRME,10.0,M,17.4,M,20.1,M*1E -$PGRMM,WGS 84*06 -$GPRMC,184423,A,4124.7464,N,08152.2634,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184423,4124.7464,N,08152.2634,W,2,04,10.4,245.1,M,-34.0,M,,*4D -$GPGSA,A,3,02,,,,07,10,,,,,,35,13.7,10.4,1.0*31 -$GPGSV,3,2,12,07,16,128,39,10,49,198,45,13,21,063,00,23,08,037,00*7E -$PGRME,10.0,M,17.4,M,20.1,M*1E -$PGRMM,WGS 84*06 -$GPRMC,184424,A,4124.7464,N,08152.2633,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184424,4124.7464,N,08152.2633,W,2,04,4.1,244.5,M,-34.0,M,,*78 -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,1.6*3B -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,10.4,M,18.1,M,20.8,M*19 -$PGRMM,WGS 84*06 -$GPRMC,184425,A,4124.7465,N,08152.2633,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184425,4124.7465,N,08152.2633,W,2,04,4.4,244.6,M,-34.0,M,,*7E -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.2,4.4,1.0*34 -$GPGSV,3,1,12,02,73,332,36,04,46,060,00,05,41,257,40,06,06,308,00*76 -$PGRME,12.7,M,18.1,M,22.5,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184426,A,4124.7465,N,08152.2632,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184426,4124.7465,N,08152.2632,W,2,04,10.7,244.7,M,-34.0,M,,*4B -$GPGSA,A,3,02,,,,07,10,,,,,,35,13.0,10.7,1.0*35 -$GPGSV,3,2,12,07,16,128,40,10,49,198,44,13,21,063,00,23,08,037,00*71 -$PGRME,12.7,M,18.1,M,22.5,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184427,A,4124.7465,N,08152.2632,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184427,4124.7465,N,08152.2632,W,2,04,4.1,243.9,M,-34.0,M,,*70 -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,1.6*3B -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,12.7,M,18.7,M,23.0,M*15 -$PGRMM,WGS 84*06 -$GPRMC,184428,A,4124.7466,N,08152.2631,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184428,4124.7466,N,08152.2631,W,2,04,4.1,243.4,M,-34.0,M,,*72 -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,2.1*3F -$GPGSV,3,1,12,02,73,332,36,04,46,060,00,05,41,257,40,06,06,308,00*76 -$PGRME,12.8,M,19.2,M,23.5,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184429,A,4124.7466,N,08152.2632,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184429,4124.7466,N,08152.2632,W,2,04,4.1,242.9,M,-34.0,M,,*7C -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,2.6*38 -$GPGSV,3,2,12,07,16,128,42,10,49,198,44,13,21,063,00,23,08,037,00*73 -$PGRME,12.8,M,19.2,M,23.5,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184430,A,4124.7466,N,08152.2631,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184430,4124.7466,N,08152.2631,W,2,04,4.1,242.9,M,-34.0,M,,*77 -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,2.6*38 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,43*75 -$PGRME,12.8,M,19.2,M,23.5,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184431,A,4124.7466,N,08152.2630,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184431,4124.7466,N,08152.2630,W,2,04,10.5,243.1,M,-34.0,M,,*4F -$GPGSA,A,3,02,,,,07,10,,,,,,35,13.7,10.5,1.0*30 -$GPGSV,3,1,12,02,73,332,36,04,46,060,00,05,41,257,39,06,06,308,00*78 -$PGRME,12.8,M,19.2,M,23.5,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184432,A,4124.7467,N,08152.2630,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184432,4124.7467,N,08152.2630,W,2,04,7.2,243.2,M,-34.0,M,,*7F -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.2,7.2,1.0*31 -$GPGSV,3,2,12,07,16,128,42,10,49,198,43,13,21,063,00,23,08,037,00*74 -$PGRME,14.9,M,19.2,M,25.1,M*1E -$PGRMM,WGS 84*06 -$GPRMC,184433,A,4124.7467,N,08152.2630,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184433,4124.7467,N,08152.2630,W,2,04,7.2,243.3,M,-34.0,M,,*7F -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.2,7.2,1.0*31 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184434,A,4124.7467,N,08152.2630,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184434,4124.7467,N,08152.2630,W,2,04,4.1,243.4,M,-34.0,M,,*7F -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.3,4.1,1.6*36 -$GPGSV,3,1,12,02,73,332,36,04,46,060,00,05,41,257,39,06,06,308,00*78 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184435,A,4124.7467,N,08152.2630,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184435,4124.7467,N,08152.2630,W,2,04,4.1,243.4,M,-34.0,M,,*7E -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.3,4.1,1.6*36 -$GPGSV,3,2,12,07,16,128,42,10,49,198,42,13,21,063,00,23,08,037,00*75 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184436,A,4124.7468,N,08152.2630,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184436,4124.7468,N,08152.2630,W,2,04,4.1,243.1,M,-34.0,M,,*77 -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.3,4.1,1.6*36 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184437,A,4124.7468,N,08152.2629,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184437,4124.7468,N,08152.2629,W,2,04,4.1,242.6,M,-34.0,M,,*78 -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.3,4.1,1.6*36 -$GPGSV,3,1,12,02,73,332,36,04,46,060,00,05,41,257,39,06,06,308,00*78 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184438,A,4124.7468,N,08152.2628,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184438,4124.7468,N,08152.2628,W,2,04,4.1,242.8,M,-34.0,M,,*78 -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.3,4.1,1.6*36 -$GPGSV,3,2,12,07,16,128,41,10,49,198,42,13,21,063,00,23,08,037,00*76 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184439,A,4124.7468,N,08152.2628,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184439,4124.7468,N,08152.2628,W,2,04,4.1,242.7,M,-34.0,M,,*76 -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.3,4.1,1.6*36 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,43*7B -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184440,A,4124.7468,N,08152.2627,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184440,4124.7468,N,08152.2627,W,2,04,4.1,242.7,M,-34.0,M,,*77 -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.3,4.1,1.6*36 -$GPGSV,3,1,12,02,73,332,35,04,46,060,00,05,41,257,37,06,06,308,00*75 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184441,A,4124.7469,N,08152.2627,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184441,4124.7469,N,08152.2627,W,2,04,4.1,242.6,M,-34.0,M,,*76 -$GPGSA,A,2,02,,,,07,10,,,,,,35,7.3,4.1,1.6*37 -$GPGSV,3,2,12,07,16,128,41,10,49,198,42,13,21,063,00,23,08,037,00*76 -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184442,A,4124.7469,N,08152.2627,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184442,4124.7469,N,08152.2627,W,2,04,4.1,242.2,M,-34.0,M,,*71 -$GPGSA,A,2,02,,,,07,10,,,,,,35,7.3,4.1,1.6*37 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,43*7B -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184443,A,4124.7469,N,08152.2627,W,000.0,348.3,010305,007.9,W*7D -$GPGGA,184443,4124.7469,N,08152.2627,W,2,04,4.1,241.8,M,-34.0,M,,*79 -$GPGSA,A,2,02,,,,07,10,,,,,,35,7.3,4.1,1.6*37 -$GPGSV,3,1,12,02,73,332,34,04,46,060,00,05,41,257,38,06,06,308,00*7B -$PGRME,8.9,M,15.0,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184444,A,4124.7469,N,08152.2626,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184444,4124.7469,N,08152.2626,W,2,04,4.1,240.9,M,-34.0,M,,*7F -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.4,4.1,2.1*35 -$GPGSV,3,2,12,07,16,128,40,10,49,198,42,13,21,063,00,23,08,036,00*76 -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184445,A,4124.7469,N,08152.2627,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184445,4124.7469,N,08152.2627,W,2,04,4.1,239.5,M,-34.0,M,,*7D -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.4,4.1,2.1*35 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,43*7B -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184446,A,4124.7470,N,08152.2627,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184446,4124.7470,N,08152.2627,W,2,04,4.1,238.9,M,-34.0,M,,*7B -$GPGSA,A,3,02,,,,07,10,,,,,,35,7.4,4.1,2.1*35 -$GPGSV,3,1,12,02,73,332,33,04,46,060,00,05,41,257,38,06,06,308,00*7C -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184447,A,4124.7470,N,08152.2626,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184447,4124.7470,N,08152.2626,W,2,04,10.6,238.8,M,-34.0,M,,*48 -$GPGSA,A,3,02,,,,07,10,,,,,,35,13.2,10.6,1.0*36 -$GPGSV,3,2,12,07,16,128,40,10,49,198,42,13,21,063,00,23,08,036,00*76 -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184448,A,4124.7470,N,08152.2626,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184448,4124.7470,N,08152.2626,W,2,04,15.8,238.8,M,-34.0,M,,*4C -$GPGSA,A,3,02,,,,07,10,,,,,,35,17.9,15.8,1.0*32 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,44*7C -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184449,A,4124.7470,N,08152.2626,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184449,4124.7470,N,08152.2626,W,2,04,15.8,238.7,M,-34.0,M,,*42 -$GPGSA,A,3,02,,,,07,10,,,,,,35,17.9,15.8,1.0*32 -$GPGSV,3,1,12,02,73,332,33,04,46,060,00,05,41,257,38,06,06,308,00*7C -$PGRME,9.3,M,15.9,M,18.4,M*24 -$PGRMM,WGS 84*06 -$GPRMC,184450,A,4124.7471,N,08152.2626,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184450,4124.7471,N,08152.2626,W,2,04,4.1,236.5,M,-34.0,M,,*7E -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,1.6*3B -$GPGSV,3,2,12,07,16,128,40,10,49,198,41,13,21,063,00,23,08,036,00*75 -$PGRME,9.7,M,16.7,M,19.3,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184451,A,4124.7471,N,08152.2626,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184451,4124.7471,N,08152.2626,W,2,04,4.1,235.1,M,-34.0,M,,*78 -$GPGSA,A,3,02,,,,07,10,,,,,,35,8.1,4.1,2.1*3F -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184452,A,4124.7471,N,08152.2626,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184452,4124.7471,N,08152.2626,W,2,04,10.6,235.0,M,-34.0,M,,*48 -$GPGSA,A,3,02,,,,07,10,,,,,,35,13.8,10.6,1.0*3C -$GPGSV,3,1,12,02,73,332,00,04,46,060,00,05,41,257,39,06,06,308,00*7D -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184453,A,4124.7471,N,08152.2626,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184453,4124.7471,N,08152.2626,W,2,04,15.8,235.0,M,-34.0,M,,*42 -$GPGSA,A,3,02,,,,07,10,,,,,,35,18.4,15.8,1.0*30 -$GPGSV,3,2,12,07,16,128,41,10,49,198,41,13,21,063,00,23,08,036,00*74 -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184454,A,4124.7471,N,08152.2625,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184454,4124.7471,N,08152.2625,W,2,04,20.1,234.9,M,-34.0,M,,*41 -$GPGSA,A,3,02,,,,07,10,,,,,,35,22.2,20.1,1.0*30 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,44*7C -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184455,A,4124.7471,N,08152.2625,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184455,4124.7471,N,08152.2625,W,2,04,23.5,234.9,M,-34.0,M,,*47 -$GPGSA,A,3,02,,,,07,10,,,,,,35,25.2,23.5,1.0*30 -$GPGSV,3,1,12,02,73,332,00,04,46,060,00,05,41,257,38,06,06,308,00*7C -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184456,A,4124.7471,N,08152.2625,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184456,4124.7471,N,08152.2625,W,2,04,26.3,234.9,M,-34.0,M,,*47 -$GPGSA,A,3,02,,,,07,10,,,,,,35,27.7,26.3,1.0*34 -$GPGSV,3,2,12,07,16,128,41,10,49,198,40,13,21,063,00,23,08,036,00*75 -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184457,A,4124.7472,N,08152.2625,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184457,4124.7472,N,08152.2625,W,2,04,28.6,234.9,M,-34.0,M,,*4E -$GPGSA,A,3,02,,,,07,10,,,,,,35,29.7,28.6,1.0*31 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,44*7C -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184458,A,4124.7472,N,08152.2625,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184458,4124.7472,N,08152.2625,W,2,04,30.5,234.9,M,-34.0,M,,*4B -$GPGSA,A,3,02,,,,07,10,,,,,,35,31.4,30.5,1.0*31 -$GPGSV,3,1,12,02,73,332,00,04,46,060,00,05,41,257,38,06,06,308,00*7C -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184459,A,4124.7472,N,08152.2625,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184459,4124.7472,N,08152.2625,W,2,04,32.0,234.8,M,-34.0,M,,*4C -$GPGSA,A,3,02,,,,07,10,,,,,,35,32.7,32.0,1.0*36 -$GPGSV,3,2,12,07,16,128,41,10,49,198,41,13,21,063,00,23,08,036,00*74 -$PGRME,10.1,M,17.4,M,20.1,M*1F -$PGRMM,WGS 84*06 -$GPRMC,184500,A,4124.7472,N,08152.2624,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184500,4124.7472,N,08152.2624,W,2,04,4.2,234.5,M,-34.0,M,,*7A -$GPGSA,A,3,,04,,,07,10,,,,,,35,8.0,4.2,1.6*3F -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,39,35,34,141,44*7C -$PGRME,10.4,M,17.9,M,20.7,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184501,A,4124.7472,N,08152.2624,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184501,4124.7472,N,08152.2624,W,2,04,4.2,233.5,M,-34.0,M,,*7C -$GPGSA,A,3,,04,,,07,10,,,,,,35,8.0,4.2,2.1*3B -$GPGSV,3,1,12,02,73,332,00,04,46,060,35,05,41,257,37,06,06,308,00*75 -$PGRME,10.4,M,17.9,M,20.7,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184502,A,4124.7473,N,08152.2625,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184502,4124.7473,N,08152.2625,W,2,04,4.4,233.4,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,07,10,,,,,,35,6.3,4.4,1.0*32 -$GPGSV,3,2,12,07,16,128,40,10,49,198,42,13,21,063,00,23,08,036,00*76 -$PGRME,12.5,M,17.9,M,22.2,M*15 -$PGRMM,WGS 84*06 -$GPRMC,184503,A,4124.7473,N,08152.2624,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184503,4124.7473,N,08152.2624,W,2,04,4.4,233.5,M,-34.0,M,,*79 -$GPGSA,A,3,,04,,,07,10,,,,,,35,6.3,4.4,1.0*32 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,12.6,M,18.3,M,22.6,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184504,A,4124.7473,N,08152.2624,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184504,4124.7473,N,08152.2624,W,2,04,4.2,233.5,M,-34.0,M,,*78 -$GPGSA,A,3,,04,,,07,10,,,,,,35,6.5,4.2,1.6*34 -$GPGSV,3,1,12,02,73,332,00,04,46,060,35,05,41,257,37,06,06,308,00*75 -$PGRME,12.6,M,18.3,M,22.6,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184505,A,4124.7473,N,08152.2624,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184505,4124.7473,N,08152.2624,W,2,04,4.2,233.3,M,-34.0,M,,*7F -$GPGSA,A,3,,04,,,07,10,,,,,,35,6.5,4.2,1.6*34 -$GPGSV,3,2,12,07,16,128,40,10,49,198,43,13,21,063,00,23,08,036,00*77 -$PGRME,12.6,M,18.3,M,22.6,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184506,A,4124.7473,N,08152.2623,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184506,4124.7473,N,08152.2623,W,2,04,10.7,233.2,M,-34.0,M,,*4A -$GPGSA,A,3,,04,,,07,10,,,,,,35,12.6,10.7,1.0*34 -$GPGSV,3,3,12,24,14,070,00,30,31,299,00,33,09,106,40,35,34,141,44*72 -$PGRME,12.6,M,18.3,M,22.6,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184507,A,4124.7473,N,08152.2623,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184507,4124.7473,N,08152.2623,W,2,04,4.2,232.2,M,-34.0,M,,*7A -$GPGSA,A,3,,04,,,07,10,,,,,,35,8.0,4.2,1.6*3F -$GPGSV,3,1,12,02,73,332,00,04,46,060,35,05,41,257,37,06,06,308,00*75 -$PGRME,12.7,M,18.7,M,22.9,M*1D -$PGRMM,WGS 84*06 -$GPRMC,184508,A,4124.7472,N,08152.2622,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184508,4124.7472,N,08152.2622,W,2,04,4.2,232.0,M,-34.0,M,,*77 -$GPGSA,A,3,,04,,,07,10,,,,,,35,8.0,4.2,2.1*3B -$GPGSV,3,2,12,07,16,128,40,10,49,198,44,13,21,063,00,23,08,036,00*70 -$PGRME,12.7,M,18.7,M,22.9,M*1D -$PGRMM,WGS 84*06 -$GPRMC,184509,A,4124.7473,N,08152.2622,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184509,4124.7473,N,08152.2622,W,2,04,4.2,231.6,M,-34.0,M,,*72 -$GPGSA,A,3,,04,,,07,10,,,,,,35,8.0,4.2,2.1*3B -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,44*7D -$PGRME,12.7,M,18.7,M,22.9,M*1D -$PGRMM,WGS 84*06 -$GPRMC,184510,A,4124.7472,N,08152.2622,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184510,4124.7472,N,08152.2622,W,1,04,4.2,232.0,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,07,10,,,,,,35,8.0,4.2,2.1*3B -$GPGSV,3,1,12,02,73,332,00,04,46,060,35,05,41,257,38,06,06,308,00*7A -$PGRME,12.7,M,18.7,M,22.9,M*1D -$PGRMM,WGS 84*06 -$GPRMC,184511,A,4124.7472,N,08152.2621,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184511,4124.7472,N,08152.2621,W,1,04,10.7,232.4,M,-34.0,M,,*4B -$GPGSA,A,3,,04,,,07,10,,,,,,35,13.8,10.7,1.0*3B -$GPGSV,3,2,12,07,16,128,41,10,49,198,44,13,21,063,00,23,08,036,00*71 -$PGRME,12.7,M,18.7,M,22.9,M*1D -$PGRMM,WGS 84*06 -$GPRMC,184512,A,4124.7472,N,08152.2621,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184512,4124.7472,N,08152.2621,W,1,04,4.2,232.5,M,-34.0,M,,*79 -$GPGSA,A,3,,04,,,07,10,,,,,,35,8.0,4.2,1.6*3F -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,44*73 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184513,A,4124.7473,N,08152.2622,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184513,4124.7473,N,08152.2622,W,1,04,4.2,232.2,M,-34.0,M,,*7D -$GPGSA,A,3,,04,,,07,10,,,,,,35,8.0,4.2,2.1*3B -$GPGSV,3,1,12,02,73,332,00,04,46,060,00,05,41,257,38,06,06,308,00*7C -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184514,A,4124.7473,N,08152.2621,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184514,4124.7473,N,08152.2621,W,1,04,10.8,232.4,M,-34.0,M,,*40 -$GPGSA,A,3,,04,,,07,10,,,,,,35,13.8,10.8,1.0*34 -$GPGSV,3,2,12,07,16,128,40,10,49,198,44,13,21,063,00,23,08,036,00*70 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184515,A,4124.7473,N,08152.2621,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184515,4124.7473,N,08152.2621,W,1,04,16.1,232.5,M,-34.0,M,,*4F -$GPGSA,A,3,,04,,,07,10,,,,,,35,18.6,16.1,1.0*3E -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,44*73 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184516,A,4124.7473,N,08152.2621,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184516,4124.7473,N,08152.2621,W,1,04,20.4,232.6,M,-34.0,M,,*4F -$GPGSA,A,3,,04,,,07,10,,,,,,35,22.4,20.4,1.0*35 -$GPGSV,3,1,12,02,73,332,00,04,46,060,00,05,41,257,38,06,06,308,00*7C -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184517,A,4124.7473,N,08152.2621,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184517,4124.7473,N,08152.2621,W,1,04,23.9,232.7,M,-34.0,M,,*41 -$GPGSA,A,3,,04,,,07,10,,,,,,35,25.6,23.9,1.0*3E -$GPGSV,3,2,12,07,16,128,40,10,49,198,44,13,21,063,00,23,08,036,00*70 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184518,A,4124.7473,N,08152.2621,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184518,4124.7473,N,08152.2621,W,1,04,26.8,232.7,M,-34.0,M,,*4A -$GPGSA,A,3,,04,,,07,10,,,,,,35,28.1,26.8,1.0*30 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,43*74 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184519,A,4124.7473,N,08152.2621,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184519,4124.7473,N,08152.2621,W,1,04,29.1,232.8,M,-34.0,M,,*42 -$GPGSA,A,3,,04,,,07,10,,,,,,35,30.1,29.1,1.0*3F -$GPGSV,3,1,12,02,73,332,00,04,46,060,00,05,41,257,38,06,06,308,00*7C -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184520,A,4124.7473,N,08152.2620,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184520,4124.7473,N,08152.2620,W,1,04,30.9,232.8,M,-34.0,M,,*49 -$GPGSA,A,3,,04,,,07,10,,,,,,35,31.8,30.9,1.0*37 -$GPGSV,3,2,12,07,16,128,40,10,49,198,43,13,21,063,36,23,08,036,00*72 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184521,A,4124.7473,N,08152.2620,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184521,4124.7473,N,08152.2620,W,1,04,32.5,232.8,M,-34.0,M,,*46 -$GPGSA,A,3,,04,,,07,10,,,,,,35,33.2,32.5,1.0*31 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,44*73 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184522,A,4124.7473,N,08152.2620,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184522,4124.7473,N,08152.2620,W,1,00,33.7,232.8,M,-34.0,M,,*42 -$GPGSA,A,3,,,,,,,,,,,,,34.3,33.7,1.0*30 -$GPGSV,3,1,12,02,73,332,00,04,46,060,00,05,41,257,38,06,06,308,00*7C -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184523,A,4124.7473,N,08152.2620,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184523,4124.7473,N,08152.2620,W,1,00,34.7,232.9,M,-34.0,M,,*45 -$GPGSA,A,3,,,,,,,,,,,,,35.2,34.7,1.0*37 -$GPGSV,3,2,12,07,16,128,41,10,49,198,42,13,21,063,36,23,08,036,00*72 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184524,A,4124.7473,N,08152.2620,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184524,4124.7473,N,08152.2620,W,1,00,35.5,232.9,M,-34.0,M,,*41 -$GPGSA,A,3,,,,,,,,,,,,,35.9,35.5,1.0*3F -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,43*7A -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184525,A,4124.7473,N,08152.2619,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184525,4124.7473,N,08152.2619,W,1,00,36.2,232.9,M,-34.0,M,,*4E -$GPGSA,A,3,,,,,,,,,,,,,36.5,36.2,1.0*34 -$GPGSV,3,1,12,02,73,335,00,04,46,060,00,05,41,257,36,06,06,308,00*75 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184526,A,4124.7473,N,08152.2619,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184526,4124.7473,N,08152.2619,W,1,00,36.8,232.9,M,-34.0,M,,*47 -$GPGSA,A,3,,,,,,,,,,,,,37.0,36.8,1.0*3A -$GPGSV,3,2,12,07,16,128,42,10,49,198,42,13,21,063,35,23,08,036,00*72 -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184527,A,4124.7472,N,08152.2619,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184527,4124.7472,N,08152.2619,W,1,00,37.2,232.9,M,-34.0,M,,*4C -$GPGSA,A,3,,,,,,,,,,,,,37.4,37.2,1.0*35 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,43*7A -$PGRME,12.7,M,19.1,M,23.3,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184528,A,4124.7473,N,08152.2619,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184528,4124.7473,N,08152.2619,W,2,03,7.2,232.9,M,-34.0,M,,*71 -$GPGSA,A,2,02,,,,07,,,,,,,35,7.3,7.2,1.0*30 -$GPGSV,3,1,12,02,73,335,34,04,46,060,31,05,41,257,37,06,06,308,00*71 -$PGRME,15.0,M,19.1,M,24.9,M*1C -$PGRMM,WGS 84*06 -$GPRMC,184529,A,4124.7474,N,08152.2617,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184529,4124.7474,N,08152.2617,W,2,04,7.2,233.3,M,-34.0,M,,*75 -$GPGSA,A,2,02,,,,07,10,,,,,,35,7.3,7.2,1.0*31 -$GPGSV,3,2,12,07,16,128,42,10,49,198,42,13,21,063,35,23,08,036,00*72 -$PGRME,9.0,M,14.8,M,17.3,M*2F -$PGRMM,WGS 84*06 -$GPRMC,184530,A,4124.7474,N,08152.2618,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184530,4124.7474,N,08152.2618,W,2,05,4.2,233.8,M,-34.0,M,,*7B -$GPGSA,A,2,02,04,,,07,10,,,,,,35,7.9,4.2,1.6*3A -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,43*7A -$PGRME,9.4,M,15.6,M,18.2,M*2A -$PGRMM,WGS 84*06 -$GPRMC,184531,A,4124.7474,N,08152.2618,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184531,4124.7474,N,08152.2618,W,2,05,4.1,234.0,M,-34.0,M,,*76 -$GPGSA,A,3,02,04,,,07,10,,,,,,35,7.9,4.1,2.1*3C -$GPGSV,3,1,12,02,73,335,35,04,45,060,00,05,41,257,37,06,06,308,00*71 -$PGRME,9.8,M,16.4,M,19.1,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184532,A,4124.7473,N,08152.2619,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184532,4124.7473,N,08152.2619,W,2,05,4.1,233.9,M,-34.0,M,,*7D -$GPGSA,A,3,02,04,,,07,10,,,,,,35,7.9,4.1,2.6*3B -$GPGSV,3,2,12,07,16,128,42,10,49,198,42,13,21,063,35,23,08,036,00*72 -$PGRME,9.8,M,16.4,M,19.1,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184533,A,4124.7473,N,08152.2618,W,000.0,348.3,010305,007.9,W*7C -$GPGGA,184533,4124.7473,N,08152.2618,W,2,05,4.1,234.2,M,-34.0,M,,*71 -$GPGSA,A,3,02,04,,,07,10,,,,,,35,7.9,4.1,2.6*3B -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,43*7A -$PGRME,9.8,M,16.4,M,19.1,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184534,A,4124.7473,N,08152.2618,W,000.0,348.3,010305,007.9,W*7B -$GPGGA,184534,4124.7473,N,08152.2618,W,2,05,4.2,234.1,M,-34.0,M,,*76 -$GPGSA,A,3,02,04,,,07,10,,,,,,35,7.9,4.2,1.6*3B -$GPGSV,3,1,12,02,73,335,36,04,45,060,31,05,41,256,37,06,06,308,00*71 -$PGRME,10.1,M,17.0,M,19.8,M*18 -$PGRMM,WGS 84*06 -$GPRMC,184535,A,4124.7473,N,08152.2618,W,000.0,348.3,010305,007.9,W*7A -$GPGGA,184535,4124.7473,N,08152.2618,W,2,05,4.1,233.6,M,-34.0,M,,*74 -$GPGSA,A,3,02,04,,,07,10,,,,,,35,7.9,4.1,2.1*3C -$GPGSV,3,2,12,07,16,128,42,10,49,198,42,13,21,063,34,23,08,036,00*73 -$PGRME,10.4,M,17.6,M,20.5,M*1C -$PGRMM,WGS 84*06 -$GPRMC,184536,A,4124.7473,N,08152.2617,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184536,4124.7473,N,08152.2617,W,2,05,4.1,233.0,M,-34.0,M,,*7E -$GPGSA,A,3,02,04,,,07,10,,,,,,35,7.9,4.1,2.6*3B -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,43*7A -$PGRME,10.4,M,17.6,M,20.5,M*1C -$PGRMM,WGS 84*06 -$GPRMC,184537,A,4124.7472,N,08152.2617,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184537,4124.7472,N,08152.2617,W,2,06,4.1,232.6,M,-34.0,M,,*7A -$GPGSA,A,3,02,04,,,07,10,13,,,,,35,7.9,4.1,2.6*39 -$GPGSV,3,1,12,02,73,335,38,04,45,060,00,05,41,256,35,06,06,308,00*7F -$PGRME,10.4,M,16.7,M,19.8,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184538,A,4124.7472,N,08152.2617,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184538,4124.7472,N,08152.2617,W,2,06,4.1,230.4,M,-34.0,M,,*75 -$GPGSA,A,3,02,04,,,07,10,13,,,,,35,7.9,4.1,2.6*39 -$GPGSV,3,2,12,07,16,128,41,10,49,198,41,13,21,063,34,23,08,036,00*73 -$PGRME,10.4,M,16.7,M,19.8,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184539,A,4124.7472,N,08152.2616,W,000.0,348.3,010305,007.9,W*79 -$GPGGA,184539,4124.7472,N,08152.2616,W,2,06,3.6,227.9,M,-34.0,M,,*7E -$GPGSA,A,3,02,04,,,07,10,13,,,,,35,6.9,3.6,2.9*37 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,44*7D -$PGRME,10.4,M,16.7,M,19.8,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184540,A,4124.7472,N,08152.2617,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184540,4124.7472,N,08152.2617,W,2,06,4.0,223.3,M,-34.0,M,,*7E -$GPGSA,A,3,02,04,,,07,10,13,,,,,35,6.9,4.0,1.0*3C -$GPGSV,3,1,12,02,73,335,39,04,45,060,00,05,41,256,35,06,07,308,00*7F -$PGRME,10.4,M,16.7,M,19.8,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184541,A,4124.7472,N,08152.2616,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184541,4124.7472,N,08152.2616,W,2,06,4.0,219.3,M,-34.0,M,,*77 -$GPGSA,A,3,02,04,,,07,10,13,,,,,35,7.0,4.0,1.6*32 -$GPGSV,3,2,12,07,16,128,41,10,49,198,40,13,21,063,33,23,08,036,00*75 -$PGRME,10.4,M,16.7,M,19.8,M*1B -$PGRMM,WGS 84*06 -$GPRMC,184542,A,4124.7473,N,08152.2615,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184542,4124.7473,N,08152.2615,W,2,06,4.3,219.6,M,-34.0,M,,*70 -$GPGSA,A,3,02,04,,,07,10,13,,,,,35,7.1,4.3,1.0*36 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,43*7A -$PGRME,10.5,M,14.8,M,18.2,M*1C -$PGRMM,WGS 84*06 -$GPRMC,184543,A,4124.7473,N,08152.2615,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184543,4124.7473,N,08152.2615,W,2,05,4.3,219.6,M,-34.0,M,,*72 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.1,4.3,1.0*32 -$GPGSV,3,1,12,02,73,335,39,04,45,060,00,05,41,256,34,06,07,308,00*7E -$PGRME,7.9,M,12.5,M,14.8,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184544,A,4124.7472,N,08152.2616,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184544,4124.7472,N,08152.2616,W,2,05,4.1,219.5,M,-34.0,M,,*76 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.2,4.1,1.6*35 -$GPGSV,3,2,12,07,15,129,42,10,49,198,41,13,21,063,00,23,08,036,00*75 -$PGRME,7.9,M,12.5,M,14.8,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184545,A,4124.7472,N,08152.2616,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184545,4124.7472,N,08152.2616,W,2,05,4.1,219.5,M,-34.0,M,,*77 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.2,4.1,2.1*31 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,43*74 -$PGRME,8.4,M,13.6,M,16.0,M*21 -$PGRMM,WGS 84*06 -$GPRMC,184546,A,4124.7472,N,08152.2616,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184546,4124.7472,N,08152.2616,W,2,05,4.1,220.1,M,-34.0,M,,*7A -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.3,4.1,2.6*37 -$GPGSV,3,1,12,02,73,335,38,04,45,060,00,05,41,256,33,06,07,308,00*78 -$PGRME,8.4,M,13.6,M,16.0,M*21 -$PGRMM,WGS 84*06 -$GPRMC,184547,A,4124.7472,N,08152.2616,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184547,4124.7472,N,08152.2616,W,2,05,4.1,221.0,M,-34.0,M,,*7B -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.3,4.1,2.6*37 -$GPGSV,3,2,12,07,15,129,42,10,49,198,42,13,21,063,00,23,08,036,00*76 -$PGRME,8.4,M,13.6,M,16.0,M*21 -$PGRMM,WGS 84*06 -$GPRMC,184548,A,4124.7472,N,08152.2616,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184548,4124.7472,N,08152.2616,W,2,05,4.1,221.7,M,-34.0,M,,*73 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.3,4.1,2.6*37 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,44*7D -$PGRME,8.4,M,13.6,M,16.0,M*21 -$PGRMM,WGS 84*06 -$GPRMC,184549,A,4124.7473,N,08152.2616,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184549,4124.7473,N,08152.2616,W,2,05,3.8,222.1,M,-34.0,M,,*78 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.4,3.8,3.0*39 -$GPGSV,3,1,12,02,73,335,37,04,45,060,00,05,41,256,34,06,07,308,00*70 -$PGRME,8.8,M,14.7,M,17.1,M*2B -$PGRMM,WGS 84*06 -$GPRMC,184550,A,4124.7472,N,08152.2615,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184550,4124.7472,N,08152.2615,W,2,05,3.8,224.1,M,-34.0,M,,*74 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.4,3.8,3.4*3D -$GPGSV,3,2,12,07,15,129,43,10,49,198,41,13,21,063,35,23,08,036,00*72 -$PGRME,9.0,M,14.9,M,17.4,M*29 -$PGRMM,WGS 84*06 -$GPRMC,184551,A,4124.7472,N,08152.2615,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184551,4124.7472,N,08152.2615,W,2,05,3.8,224.9,M,-34.0,M,,*7D -$GPGSA,A,3,02,,,,07,10,13,,,,,35,7.4,3.8,3.4*3D -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,44*7D -$PGRME,9.3,M,15.8,M,18.4,M*25 -$PGRMM,WGS 84*06 -$GPRMC,184552,A,4124.7472,N,08152.2615,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184552,4124.7472,N,08152.2615,W,2,05,2.1,225.4,M,-34.0,M,,*7A -$GPGSA,A,3,02,,,,07,10,13,,,,,35,2.3,2.1,1.0*31 -$GPGSV,3,1,12,02,73,335,36,04,45,060,00,05,41,256,35,06,07,308,00*70 -$PGRME,9.5,M,15.9,M,18.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184553,A,4124.7472,N,08152.2615,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184553,4124.7472,N,08152.2615,W,2,05,2.2,225.5,M,-34.0,M,,*79 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,2.7,2.2,1.5*33 -$GPGSV,3,2,12,07,15,129,42,10,50,199,41,13,21,063,35,23,08,036,00*7A -$PGRME,9.5,M,15.9,M,18.5,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184554,A,4124.7472,N,08152.2615,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184554,4124.7472,N,08152.2615,W,2,05,2.4,225.8,M,-34.0,M,,*75 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,3.3,2.4,2.0*36 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,39,35,34,141,44*7D -$PGRME,9.8,M,16.7,M,19.4,M*23 -$PGRMM,WGS 84*06 -$GPRMC,184555,A,4124.7472,N,08152.2615,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184555,4124.7472,N,08152.2615,W,2,05,2.4,225.6,M,-34.0,M,,*7A -$GPGSA,A,3,02,,,,07,10,13,,,,,35,3.3,2.4,2.0*36 -$GPGSV,3,1,12,02,73,335,37,04,45,060,00,05,41,256,34,06,07,308,00*70 -$PGRME,9.8,M,16.6,M,19.4,M*22 -$PGRMM,WGS 84*06 -$GPRMC,184556,A,4124.7471,N,08152.2614,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184556,4124.7471,N,08152.2614,W,2,05,2.5,226.2,M,-34.0,M,,*7D -$GPGSA,A,3,02,,,,07,10,13,,,,,35,3.7,2.5,2.5*36 -$GPGSV,3,2,12,07,15,129,42,10,50,199,39,13,21,063,00,23,08,036,00*73 -$PGRME,10.2,M,17.3,M,20.2,M*18 -$PGRMM,WGS 84*06 -$GPRMC,184557,A,4124.7472,N,08152.2613,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184557,4124.7472,N,08152.2613,W,2,05,3.0,226.3,M,-34.0,M,,*7D -$GPGSA,A,3,02,,,,07,10,13,,,,,35,4.1,3.0,1.0*35 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,44*73 -$PGRME,12.6,M,17.3,M,22.0,M*1E -$PGRMM,WGS 84*06 -$GPRMC,184558,A,4124.7471,N,08152.2613,W,000.0,348.3,010305,007.9,W*78 -$GPGGA,184558,4124.7471,N,08152.2613,W,2,05,3.0,223.6,M,-34.0,M,,*71 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,4.1,3.0,1.0*35 -$GPGSV,3,1,12,02,73,335,38,04,45,060,00,05,41,256,00,06,07,308,00*78 -$PGRME,10.5,M,16.6,M,19.7,M*14 -$PGRMM,WGS 84*06 -$GPRMC,184559,A,4124.7471,N,08152.2614,W,000.0,348.3,010305,007.9,W*7E -$GPGGA,184559,4124.7471,N,08152.2614,W,2,05,3.1,224.2,M,-34.0,M,,*75 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,4.5,3.1,1.6*36 -$GPGSV,3,2,12,07,15,129,42,10,50,199,39,13,21,063,33,23,08,036,00*73 -$PGRME,10.8,M,17.3,M,20.4,M*14 -$PGRMM,WGS 84*06 -$GPRMC,184600,A,4124.7471,N,08152.2614,W,000.0,348.3,010305,007.9,W*71 -$GPGGA,184600,4124.7471,N,08152.2614,W,2,05,3.2,224.2,M,-34.0,M,,*79 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,4.8,3.2,2.1*3C -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,43*74 -$PGRME,11.0,M,17.9,M,21.1,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184601,A,4124.7471,N,08152.2613,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184601,4124.7471,N,08152.2613,W,2,05,3.3,224.3,M,-34.0,M,,*7F -$GPGSA,A,3,02,,,,07,10,13,,,,,35,5.1,3.3,2.6*32 -$GPGSV,3,1,12,02,73,335,38,04,45,060,00,05,41,256,00,06,07,308,00*78 -$PGRME,11.0,M,17.9,M,21.1,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184602,A,4124.7471,N,08152.2613,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184602,4124.7471,N,08152.2613,W,2,05,3.3,224.2,M,-34.0,M,,*7D -$GPGSA,A,3,02,,,,07,10,13,,,,,35,5.1,3.3,2.6*32 -$GPGSV,3,2,12,07,15,129,42,10,50,199,38,13,21,063,32,23,08,036,00*73 -$PGRME,11.0,M,17.9,M,21.1,M*13 -$PGRMM,WGS 84*06 -$GPRMC,184603,A,4124.7471,N,08152.2613,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184603,4124.7471,N,08152.2613,W,2,05,3.7,224.7,M,-34.0,M,,*7D -$GPGSA,A,3,02,,,,07,10,13,,,,,35,5.4,3.7,1.0*36 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,43*74 -$PGRME,11.1,M,15.5,M,19.2,M*14 -$PGRMM,WGS 84*06 -$GPRMC,184604,A,4124.7471,N,08152.2613,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184604,4124.7471,N,08152.2613,W,2,05,3.7,220.1,M,-34.0,M,,*78 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,5.4,3.7,1.0*36 -$GPGSV,3,1,12,02,73,335,38,04,45,060,00,05,41,256,00,06,07,308,00*78 -$PGRME,10.5,M,15.6,M,19.2,M*12 -$PGRMM,WGS 84*06 -$GPRMC,184605,A,4124.7471,N,08152.2613,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184605,4124.7471,N,08152.2613,W,2,05,3.8,219.7,M,-34.0,M,,*7A -$GPGSA,A,3,02,,,,07,10,13,,,,,35,5.6,3.8,1.6*3D -$GPGSV,3,2,12,07,15,129,41,10,50,199,39,13,21,062,32,23,08,036,00*70 -$PGRME,10.8,M,16.4,M,20.0,M*16 -$PGRMM,WGS 84*06 -$GPRMC,184606,A,4124.7471,N,08152.2613,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184606,4124.7471,N,08152.2613,W,2,05,4.1,219.9,M,-34.0,M,,*79 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,5.8,4.1,1.0*3B -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,43*74 -$PGRME,10.8,M,16.4,M,20.0,M*16 -$PGRMM,WGS 84*06 -$GPRMC,184607,A,4124.7471,N,08152.2612,W,000.0,348.3,010305,007.9,W*70 -$GPGGA,184607,4124.7471,N,08152.2612,W,2,05,4.1,221.0,M,-34.0,M,,*7B -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.0,4.1,1.6*36 -$GPGSV,3,1,12,02,73,335,38,04,45,060,00,05,41,256,00,06,07,308,00*78 -$PGRME,10.5,M,16.4,M,19.7,M*16 -$PGRMM,WGS 84*06 -$GPRMC,184608,A,4124.7471,N,08152.2612,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184608,4124.7471,N,08152.2612,W,2,05,4.1,221.4,M,-34.0,M,,*70 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.0,4.1,1.6*36 -$GPGSV,3,2,12,07,15,129,41,10,50,199,40,13,21,062,33,23,08,036,00*7F -$PGRME,10.8,M,17.1,M,20.4,M*16 -$PGRMM,WGS 84*06 -$GPRMC,184609,A,4124.7471,N,08152.2613,W,000.0,348.3,010305,007.9,W*7F -$GPGGA,184609,4124.7471,N,08152.2613,W,2,05,4.4,221.5,M,-34.0,M,,*74 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.1,4.4,1.0*34 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,43*74 -$PGRME,10.8,M,15.0,M,18.6,M*1C -$PGRMM,WGS 84*06 -$GPRMC,184610,A,4124.7471,N,08152.2612,W,000.0,348.3,010305,007.9,W*76 -$GPGGA,184610,4124.7471,N,08152.2612,W,2,05,4.7,223.8,M,-34.0,M,,*71 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.3,4.7,1.0*35 -$GPGSV,3,1,12,02,73,335,38,04,45,060,36,05,41,256,00,06,07,308,00*7D -$PGRME,10.5,M,15.2,M,18.7,M*12 -$PGRMM,WGS 84*06 -$GPRMC,184611,A,4124.7471,N,08152.2612,W,000.0,348.3,010305,007.9,W*77 -$GPGGA,184611,4124.7471,N,08152.2612,W,2,05,4.7,223.8,M,-34.0,M,,*70 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.3,4.7,1.0*35 -$GPGSV,3,2,12,07,15,129,41,10,50,199,40,13,21,062,34,23,08,036,00*78 -$PGRME,12.7,M,15.2,M,20.4,M*1A -$PGRMM,WGS 84*06 -$GPRMC,184612,A,4124.7471,N,08152.2612,W,000.0,348.3,010305,007.9,W*74 -$GPGGA,184612,4124.7471,N,08152.2612,W,2,05,5.0,222.5,M,-34.0,M,,*79 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.4,5.0,1.0*34 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,40,35,34,141,43*74 -$PGRME,10.6,M,15.3,M,19.7,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184613,A,4124.7471,N,08152.2612,W,000.0,348.3,010305,007.9,W*75 -$GPGGA,184613,4124.7471,N,08152.2612,W,2,05,3.6,221.2,M,-34.0,M,,*7C -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.4,3.6,1.5*31 -$GPGSV,3,1,12,02,73,335,37,04,45,060,36,05,41,256,33,06,07,308,00*72 -$PGRME,10.6,M,15.3,M,19.7,M*11 -$PGRMM,WGS 84*06 -$GPRMC,184614,A,4124.7471,N,08152.2612,W,000.0,348.3,010305,007.9,W*72 -$GPGGA,184614,4124.7471,N,08152.2612,W,2,05,3.7,222.1,M,-34.0,M,,*7A -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.6,3.7,2.0*34 -$GPGSV,3,2,12,07,15,129,42,10,50,199,41,13,21,062,34,23,08,036,00*7A -$PGRME,10.8,M,16.1,M,20.4,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184615,A,4124.7471,N,08152.2612,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184615,4124.7471,N,08152.2612,W,2,05,3.7,223.9,M,-34.0,M,,*72 -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.7,3.7,2.5*30 -$GPGSV,3,3,12,24,14,070,00,30,31,298,00,33,09,106,41,35,34,141,44*72 -$PGRME,11.0,M,16.9,M,21.1,M*12 -$PGRMM,WGS 84*06 -$GPRMC,184616,A,4124.7471,N,08152.2611,W,000.0,348.3,010305,007.9,W*73 -$GPGGA,184616,4124.7471,N,08152.2611,W,2,05,3.7,227.2,M,-34.0,M,,*7D -$GPGSA,A,3,02,,,,07,10,13,,,,,35,6.8,3.7,3.0*3B -$GPGSV,3,1,12,02,73,335,36,04,45,060,36,05,41,256,33,06,07,308,00*73 -$PGRME,10.6,M,16.6,M,19.7,M*17 -$PGRMM,WGS 84*06 -$GPRMC,184617,A,4124.7471,N,08152.2610,W,000.3,348.3,010305,007.9,W*70 -$GPGGA,184617,4124.7471,N,08152.2610,W,2 \ No newline at end of file diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76.txt b/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76.txt deleted file mode 100755 index e78a80b5805..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76.txt +++ /dev/null @@ -1 +0,0 @@ -$GPGSA,A,3,03,05,07,08,10,15,18,19,21,28,,,1.4,0.9,1.1*3A $GPGSV,3,1,12,03,02,011,37,05,20,210,38,07,14,084,41,08,50,084,48*74 $GPGSV,3,2,12,10,01,189,38,15,55,282,37,18,18,325,40,19,19,032,00*79 $GPGSV,3,3,12,21,07,305,00,28,63,127,47,33,16,220,00,37,28,178,36*72 $GPGLL,6003.9421,N,01940.2829,E,131548,A,A*4B $GPBOD,,T,,M,,*47 $PGRME,3.7,M,5.6,M,6.7,M*28 $PGRMZ,-6,f,3*30 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131550,A,6003.9425,N,01940.2853,E,2.3,76.6,280510,4.8,E,A*23 $GPRMB,A,,,,,,,,,,,,A,A*0B $GPGGA,131550,6003.9425,N,01940.2853,E,1,10,0.9,-1.6,M,21.7,M,,*68 $GPGSA,A,3,03,05,07,08,10,15,18,19,21,28,,,1.4,0.9,1.1*3A $GPGSV,3,1,12,03,02,011,36,05,20,210,39,07,14,084,41,08,50,084,48*74 $GPGSV,3,2,12,10,01,189,37,15,55,282,38,18,18,325,41,19,19,032,31*7A $GPGSV,3,3,12,21,07,305,00,28,63,127,47,33,16,220,00,37,28,178,36*72 $GPGLL,6003.9425,N,01940.2853,E,131550,A,A*4B $GPBOD,,T,,M,,*47 $PGRME,3.3,M,4.9,M,5.9,M*2F $PGRMZ,-5,f,3*33 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131552,A,6003.9428,N,01940.2876,E,2.1,75.8,280510,4.8,E,A*24 $GPRMB,A,,,,,,,,,,,,A,A*0B $GPGGA,131552,6003.9428,N,01940.2876,E,1,10,0.8,-1.4,M,21.7,M,,*63 $GPGSA,A,3,03,05,07,08,10,15,18,19,21,28,,,1.4,0.8,1.1*3B $GPGSV,3,1,12,03,02,011,36,05,20,210,40,07,14,084,40,08,50,084,48*7B $GPGSV,3,2,12,10,01,189,38,15,55,282,37,18,18,325,42,19,19,032,33*7B $GPGSV,3,3,12,21,07,305,00,28,63,127,46,33,16,220,00,37,28,178,00*76 $GPGLL,6003.9428,N,01940.2876,E,131552,A,A*43 $GPBOD,,T,,M,,*47 $PGRME,3.4,M,5.0,M,6.0,M*2A $PGRMZ,-4,f,3*32 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131554,A,6003.9431,N,01940.2901,E,2.2,76.2,280510,4.8,E,A*21 $GPRMB,A,,,,,,,,,,,,A,A*0B $GPGGA,131554,6003.9431,N,01940.2901,E,1,10,0.8,-1.2,M,21.7,M,,*6A $GPGSA,A,3,03,05,07,08,10,15,18,19,21,28,,,1.3,0.8,1.0*3D $GPGSV,3,1,12,03,02,011,38,05,20,210,41,07,14,084,39,08,50,084,48*7A $GPGSV,3,2,12,10,01,189,38,15,55,282,37,18,18,325,42,19,19,032,32*7A $GPGSV,3,3,12,21,07,305,35,28,63,127,46,33,16,220,00,37,28,178,00*70 $GPGLL,6003.9431,N,01940.2901,E,131554,A,A*4C $GPBOD,,T,,M,,*47 $PGRME,3.4,M,5.0,M,6.0,M*2A $PGRMZ,-4,f,3*32 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131556,A,6003.9433,N,01940.2926,E,2.2,81.9,280510,4.8,E,A*27 $GPRMB,A,,,,,,,,,,,,A,A*0B $GPGGA,131556,6003.9433,N,01940.2926,E,1,10,0.9,-1.3,M,21.7,M,,*6F $GPGSA,A,3,03,05,07,08,10,15,18,19,21,28,,,1.4,0.9,1.1*3A $GPGSV,3,1,12,03,02,011,37,05,20,210,42,07,14,084,39,08,50,084,48*76 $GPGSV,3,2,12,10,01,189,38,15,55,282,38,18,18,325,40,19,19,032,00*76 $GPGSV,3,3,12,21,07,305,38,28,63,127,46,33,16,220,00,37,28,178,00*7D $GPGLL,6003.9433,N,01940.2926,E,131556,A,A*49 $GPBOD,,T,,M,,*47 $PGRME,3.4,M,5.0,M,6.0,M*2A $PGRMZ,-4,f,3*32 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131558,A,6003.9436,N,01940.2949,E,2.2,78.0,280510,4.8,E,A*2A $GPRMB,A,,,,,,,,,,,,A,A*0B $GPGGA,131558,6003.9436,N,01940.2949,E,1,10,0.8,-1.5,M,21.7,M,,*6A $GPGSA,A,3,03,05,07,08,10,15,18,19,21,28,,,1.3,0.8,1.0*3D $GPGSV,3,1,12,03,02,011,35,05,20,210,43,07,14,084,38,08,50,084,48*74 $GPGSV,3,2,12,10,01,189,39,15,55,282,37,18,18,325,39,19,19,032,00*76 $GPGSV,3,3,12,21,07,305,38,28,63,127,46,33,16,220,00,37,28,178,00*7D $GPGLL,6003.9436,N,01940.2949,E,131558,A,A*4B $GPBOD,,T,,M,,*47 $PGRME,3.3,M,4.7,M,5.8,M*20 $PGRMZ,-5,f,3*33 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131600,A,6003.9438,N,01940.2973,E,2.1,79.9,280510,4.8,E,A*28 $GPRMB,A,,,,,,,,,,,,A,A*0B $GPGGA,131600,6003.9438,N,01940.2973,E,1,10,0.8,-1.3,M,21.7,M,,*65 $GPGSA,A,3,03,05,07,08,10,15,18,19,21,28,,,1.4,0.8,1.1*3B $GPGSV,3,1,12,03,02,011,35,05,20,210,43,07,14,084,37,08,50,084,48*7B $GPGSV,3,2,12,10,01,189,39,15,55,282,38,18,18,325,38,19,19,032,39*72 $GPGSV,3,3,12,21,07,305,39,28,63,127,46,33,16,220,00,37,28,178,00*7C $GPGLL,6003.9438,N,01940.2973,E,131600,A,A*42 $GPBOD,,T,,M,,*47 $PGRME,3.4,M,4.8,M,5.8,M*28 $PGRMZ,-4,f,3*32 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131602,A,6003.9439,N,01940.2996,E,2.1,83.9,280510,4.8,E,A*25 $GPRMB,A,,,,,,,,,,,,A,A*0B $GPGGA,131602,6003.9439,N,01940.2996,E,1,10,0.9,-1.4,M,21.7,M,,*6B $GPGSA,A,3,03,05,07,08,10,15,18,19,21,28,,,1.4,0.9,1.1*3A $GPGSV,3,1,12,03,02,011,34,05,20,210,43,07,14,084,36,08,50,084,47*74 $GPGSV,3,2,12,10,01,189,39,15,55,282,38,18,18,325,37,19,19,032,37*73 $GPGSV,3,3,12,21,07,305,39,28,63,127,47,33,16,220,00,37,28,178,00*7D $GPGLL,6003.9439,N,01940.2996,E,131602,A,A*4A $GPBOD,,T,,M,,*47 $PGRME,3.3,M,4.7,M,5.7,M*2F $PGRMZ,-4,f,3*32 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 \ No newline at end of file diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_diff.txt b/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_diff.txt deleted file mode 100755 index a5b438ec890..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_diff.txt +++ /dev/null @@ -1 +0,0 @@ -$GPGSA,A,3,,05,,08,,,18,19,21,,,,1.7,1.3,1.0*38 $GPGSV,3,1,12,03,01,010,34,05,19,210,43,07,13,084,38,08,49,085,49*72 $GPGSV,3,2,12,10,00,189,00,15,56,281,39,18,19,323,41,19,18,030,00*78 $GPGSV,3,3,12,21,06,304,30,28,63,125,47,33,16,220,00,37,28,178,38*7D $GPGLL,6003.9499,N,01940.4863,E,131838,A,D*4F $GPBOD,,T,,M,,*47 $PGRME,6.0,M,11.3,M,12.8,M*20 $PGRMZ,-4,f,3*32 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131840,A,6003.9502,N,01940.4884,E,2.2,72.4,280510,4.8,E,D*25 $GPRMB,A,,,,,,,,,,,,A,D*0E $GPGGA,131840,6003.9502,N,01940.4884,E,2,05,1.3,-0.8,M,21.7,M,,*6F $GPGSA,A,3,,05,,08,,,18,19,21,,,,1.7,1.3,1.0*38 $GPGSV,3,1,12,03,01,010,00,05,19,210,41,07,13,084,39,08,49,085,49*76 $GPGSV,3,2,12,10,00,189,00,15,56,281,39,18,19,323,40,19,18,030,37*7D $GPGSV,3,3,12,21,06,304,30,28,63,125,47,33,16,220,00,37,28,178,37*72 $GPGLL,6003.9502,N,01940.4884,E,131840,A,D*4A $GPBOD,,T,,M,,*47 $PGRME,6.0,M,11.4,M,13.0,M*2E $PGRMZ,-3,f,3*35 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131842,A,6003.9505,N,01940.4904,E,1.9,76.3,280510,4.8,E,D*22 $GPRMB,A,,,,,,,,,,,,A,D*0E $GPGGA,131842,6003.9505,N,01940.4904,E,2,05,1.2,-0.6,M,21.7,M,,*6C $GPGSA,A,3,,05,,08,,,18,19,21,,,,1.6,1.2,1.0*38 $GPGSV,3,1,12,03,01,010,00,05,19,210,40,07,13,084,38,08,49,085,48*77 $GPGSV,3,2,12,10,00,189,00,15,56,281,40,18,19,323,39,19,18,030,36*7C $GPGSV,3,3,12,21,06,304,34,28,63,125,47,33,16,220,00,37,28,178,00*72 $GPGLL,6003.9505,N,01940.4904,E,131842,A,D*46 $GPBOD,,T,,M,,*47 $PGRME,5.9,M,11.7,M,13.2,M*25 $PGRMZ,-2,f,3*34 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131844,A,6003.9510,N,01940.4927,E,2.1,75.0,280510,4.8,E,D*2A $GPRMB,A,,,,,,,,,,,,A,D*0E $GPGGA,131844,6003.9510,N,01940.4927,E,2,05,1.6,-0.6,M,21.7,M,,*6B $GPGSA,A,3,,05,,08,,,18,19,21,,,,1.9,1.6,1.0*33 $GPGSV,3,1,12,03,01,010,00,05,19,210,39,07,13,084,37,08,49,085,48*76 $GPGSV,3,2,12,10,00,189,00,15,56,281,40,18,19,323,38,19,18,030,00*78 $GPGSV,3,3,12,21,06,304,35,28,63,124,47,33,16,220,00,37,28,178,00*72 $GPGLL,6003.9510,N,01940.4927,E,131844,A,D*45 $GPBOD,,T,,M,,*47 $PGRME,6.0,M,11.2,M,12.8,M*21 $PGRMZ,-2,f,3*34 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131846,A,6003.9513,N,01940.4948,E,2.1,77.6,280510,4.8,E,D*26 $GPRMB,A,,,,,,,,,,,,A,D*0E $GPGGA,131846,6003.9513,N,01940.4948,E,2,08,1.4,-0.8,M,21.7,M,,*62 $GPGSA,A,3,,05,07,08,,15,18,19,21,28,,,1.8,1.4,1.1*38 $GPGSV,3,1,12,03,01,010,00,05,19,210,38,07,13,084,36,08,49,085,47*79 $GPGSV,3,2,12,10,00,189,00,15,56,281,41,18,19,323,38,19,18,030,41*7C $GPGSV,3,3,12,21,06,304,35,28,63,124,48,33,16,220,00,37,28,178,00*7D $GPGLL,6003.9513,N,01940.4948,E,131846,A,D*4D $GPBOD,,T,,M,,*47 $PGRME,3.7,M,5.2,M,6.4,M*2F $PGRMZ,-3,f,3*35 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131848,A,6003.9517,N,01940.4969,E,2.2,67.8,280510,4.8,E,D*23 $GPRMB,A,,,,,,,,,,,,A,D*0E $GPGGA,131848,6003.9517,N,01940.4969,E,2,08,2.0,-0.3,M,21.7,M,,*67 $GPGSA,A,3,,05,07,08,,15,18,19,21,28,,,2.5,2.0,1.0*30 $GPGSV,3,1,12,03,01,010,00,05,19,210,37,07,13,084,35,08,49,085,47*75 $GPGSV,3,2,12,10,00,189,00,15,56,281,42,18,19,323,37,19,18,030,41*70 $GPGSV,3,3,12,21,06,304,35,28,63,124,47,33,16,220,00,37,28,178,00*72 $GPGLL,6003.9517,N,01940.4969,E,131848,A,D*44 $GPBOD,,T,,M,,*47 $PGRME,4.1,M,5.6,M,6.9,M*27 $PGRMZ,-1,f,3*37 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131850,A,6003.9521,N,01940.4991,E,2.2,69.9,280510,4.8,E,D*27 $GPRMB,A,,,,,,,,,,,,A,D*0E $GPGGA,131850,6003.9521,N,01940.4991,E,2,08,1.0,-0.1,M,21.7,M,,*6D $GPGSA,A,3,,05,07,08,,15,18,19,21,28,,,1.7,1.0,1.2*30 $GPGSV,3,1,12,03,01,010,00,05,19,210,37,07,13,084,39,08,49,085,47*79 $GPGSV,3,2,12,10,00,189,00,15,56,281,41,18,19,323,36,19,18,030,40*73 $GPGSV,3,3,12,21,06,304,36,28,63,124,48,33,16,220,00,37,28,178,00*7E $GPGLL,6003.9521,N,01940.4991,E,131850,A,D*4F $GPBOD,,T,,M,,*47 $PGRME,3.3,M,4.7,M,5.7,M*2F $PGRMZ,0,f,3*1B $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,131852,A,6003.9525,N,01940.5014,E,2.2,73.4,280510,4.8,E,A*27 $GPRMB,A,,,,,,,,,,,,A,A*0B $GPGGA,131852,6003.9525,N,01940.5014,E,1,08,0.9,-0.2,M,21.7,M,,*66 $GPGSA,A,3,,05,07,08,,15,18,19,21,28,,,1.6,0.9,1.2*39 $GPGSV,3,1,12,03,01,010,00,05,19,210,38,07,13,084,39,08,49,085,46*77 $GPGSV,3,2,12,10,00,189,00,15,56,281,42,18,19,323,38,19,18,030,40*7E $GPGSV,3,3,12,21,06,304,37,28,63,124,47,33,16,220,00,37,28,178,38*7B $GPGLL,6003.9525,N,01940.5014,E,131852,A,A*49 $GPBOD,,T,,M,,*47 $PGRME,3.3,M,4.7,M,5.7,M*2F $PGRMZ,-1,f,3*37 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 \ No newline at end of file diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_goto.txt b/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_goto.txt deleted file mode 100755 index f6ddcff8d13..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_goto.txt +++ /dev/null @@ -1 +0,0 @@ -$GPGSA,A,3,02,04,05,07,08,10,13,16,23,,,,2.3,1.4,1.6*38 $GPGSV,3,1,12,02,25,252,45,04,06,214,33,05,39,299,36,07,68,165,45*7E $GPGSV,3,2,12,08,37,205,43,10,63,258,39,13,47,095,45,16,19,031,37*73 $GPGSV,3,3,12,23,21,097,44,29,06,325,34,37,21,178,44,39,24,173,39*72 $GPGLL,6004.3035,N,01940.9139,E,095200,A,D*45 $GPBOD,54.6,T,49.7,M,Fl.W.3s,*77 $PGRME,3.3,M,4.5,M,5.8,M*22 $PGRMZ,-6,f,3*30 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,095202,A,6004.3030,N,01940.9154,E,1.7,124.6,030610,4.9,E,D*1B $GPRMB,A,0.03,L,,Fl.W.3s,6004.899,N,01942.501,E,0.993,53.0,0.4,V,D*51 $GPGGA,095202,6004.3030,N,01940.9154,E,2,09,1.3,-2.0,M,21.7,M,,*6A $GPGSA,A,3,02,04,05,07,08,10,13,16,23,,,,2.2,1.3,1.6*3E $GPGSV,3,1,12,02,25,252,45,04,06,214,34,05,39,299,36,07,68,165,46*7A $GPGSV,3,2,12,08,37,205,43,10,63,258,39,13,47,095,45,16,19,031,38*7C $GPGSV,3,3,12,23,21,097,44,29,06,325,35,37,21,178,44,39,24,173,39*73 $GPGLL,6004.3030,N,01940.9154,E,095202,A,D*49 $GPBOD,54.6,T,49.7,M,Fl.W.3s,*77 $PGRME,3.1,M,4.3,M,5.6,M*28 $PGRMZ,-6,f,3*30 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,095204,A,6004.3024,N,01940.9169,E,1.7,127.0,030610,4.9,E,D*13 $GPRMB,A,0.03,L,,Fl.W.3s,6004.899,N,01942.501,E,0.992,52.9,0.3,V,D*5F $GPGGA,095204,6004.3024,N,01940.9169,E,2,09,1.3,-1.9,M,21.7,M,,*6D $GPGSA,A,3,02,04,05,07,08,10,13,16,23,,,,2.2,1.3,1.6*3E $GPGSV,3,1,12,02,25,252,44,04,06,214,34,05,39,299,00,07,68,165,46*7E $GPGSV,3,2,12,08,37,205,43,10,63,258,39,13,47,095,45,16,19,031,39*7D $GPGSV,3,3,12,23,21,097,44,29,06,325,34,37,21,178,44,39,24,173,39*72 $GPGLL,6004.3024,N,01940.9169,E,095204,A,D*44 $GPBOD,54.6,T,49.7,M,Fl.W.3s,*77 $PGRME,3.2,M,4.4,M,5.7,M*2D $PGRMZ,-6,f,3*30 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,095206,A,6004.3021,N,01940.9176,E,1.7,124.9,030610,4.9,E,D*10 $GPRMB,A,0.03,L,,Fl.W.3s,6004.899,N,01942.501,E,0.992,52.9,0.5,V,D*59 $GPGGA,095206,6004.3021,N,01940.9176,E,2,09,1.6,-2.3,M,21.7,M,,*68 $GPGSA,A,3,02,04,05,07,08,10,13,16,23,,,,2.5,1.6,1.7*3D $GPGSV,3,1,12,02,25,252,44,04,06,214,33,05,39,299,00,07,68,165,45*7A $GPGSV,3,2,12,08,37,205,41,10,63,258,39,13,47,095,46,16,19,031,00*76 $GPGSV,3,3,12,23,21,097,43,29,06,325,00,37,21,178,42,39,24,173,39*74 $GPGLL,6004.3021,N,01940.9176,E,095206,A,D*4D $GPBOD,54.6,T,49.7,M,Fl.W.3s,*77 $PGRME,4.0,M,4.5,M,6.4,M*29 $PGRMZ,-7,f,3*31 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,095208,A,6004.3011,N,01940.9197,E,1.7,131.4,030610,4.9,E,D*1B $GPRMB,A,0.03,L,,Fl.W.3s,6004.899,N,01942.501,E,0.992,52.8,0.3,V,D*5E $GPGGA,095208,6004.3011,N,01940.9197,E,2,09,1.7,-2.0,M,21.7,M,,*68 $GPGSA,A,3,02,04,05,07,08,10,13,16,23,,,,2.5,1.7,1.7*3C $GPGSV,3,1,12,02,25,252,44,04,06,214,00,05,39,299,34,07,68,165,45*7D $GPGSV,3,2,12,08,37,205,41,10,63,258,39,13,47,095,46,16,19,031,40*72 $GPGSV,3,3,12,23,21,097,42,29,06,325,00,37,21,178,43,39,24,173,40*7A $GPGLL,6004.3011,N,01940.9197,E,095208,A,D*4F $GPBOD,54.6,T,49.7,M,Fl.W.3s,*77 $PGRME,3.0,M,4.4,M,5.3,M*2B $PGRMZ,-6,f,3*30 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,095210,A,6004.3005,N,01940.9210,E,1.6,126.2,030610,4.9,E,D*1A $GPRMB,A,0.03,L,,Fl.W.3s,6004.899,N,01942.501,E,0.992,52.8,0.2,V,D*5F $GPGGA,095210,6004.3005,N,01940.9210,E,2,09,1.3,-1.8,M,21.7,M,,*67 $GPGSA,A,3,02,04,05,07,08,10,13,16,23,,,,2.2,1.3,1.7*3F $GPGSV,3,1,12,02,25,252,44,04,06,214,00,05,39,299,33,07,68,165,45*7A $GPGSV,3,2,12,08,37,205,42,10,63,258,40,13,47,095,46,16,19,031,42*7D $GPGSV,3,3,12,23,21,097,42,29,06,325,00,37,21,178,43,39,24,173,40*7A $GPGLL,6004.3005,N,01940.9210,E,095210,A,D*4F $GPBOD,54.6,T,49.7,M,Fl.W.3s,*77 $PGRME,3.0,M,4.4,M,5.3,M*2B $PGRMZ,-6,f,3*30 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,095212,A,6004.2999,N,01940.9223,E,1.7,130.3,030610,4.9,E,D*12 $GPRMB,A,0.03,L,,Fl.W.3s,6004.899,N,01942.501,E,0.992,52.7,0.2,V,D*50 $GPGGA,095212,6004.2999,N,01940.9223,E,2,09,1.3,-1.7,M,21.7,M,,*67 $GPGSA,A,3,02,04,05,07,08,10,13,16,23,,,,2.2,1.3,1.7*3F $GPGSV,3,1,12,02,25,252,44,04,06,214,00,05,39,299,00,07,68,165,45*7A $GPGSV,3,2,12,08,37,205,43,10,63,258,40,13,47,095,47,16,19,031,41*7E $GPGSV,3,3,12,23,21,097,42,29,06,325,31,37,21,178,43,39,24,173,40*78 $GPGLL,6004.2999,N,01940.9223,E,095212,A,D*40 $GPBOD,54.6,T,49.7,M,Fl.W.3s,*77 $PGRME,3.1,M,4.4,M,5.4,M*2D $PGRMZ,-6,f,3*30 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 $GPRMC,095214,A,6004.2993,N,01940.9236,E,1.8,136.0,030610,4.9,E,D*10 $GPRMB,A,0.03,L,,Fl.W.3s,6004.899,N,01942.501,E,0.991,52.7,0.3,V,D*52 $GPGGA,095214,6004.2993,N,01940.9236,E,2,09,1.4,-1.7,M,21.7,M,,*68 $GPGSA,A,3,02,04,05,07,08,10,13,16,23,,,,2.3,1.4,1.7*39 $GPGSV,3,1,12,02,25,252,44,04,06,214,00,05,39,299,00,07,68,165,45*7A $GPGSV,3,2,12,08,37,205,43,10,63,258,39,13,47,095,47,16,19,031,40*71 $GPGSV,3,3,12,23,21,097,42,29,06,325,33,37,21,178,44,39,24,173,41*7C $GPGLL,6004.2993,N,01940.9236,E,095214,A,D*48 $GPBOD,54.6,T,49.7,M,Fl.W.3s,*77 $PGRME,3.2,M,4.5,M,5.5,M*2E $PGRMZ,-6,f,3*30 $PGRMM,WGS 84*06 $GPRTE,1,1,c,*37 \ No newline at end of file diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_route.txt b/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_route.txt deleted file mode 100755 index aa01b2040df..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/Garmin-GPS76_route.txt +++ /dev/null @@ -1 +0,0 @@ -$GPRMB,A,0.20,R,A003,A002,6004.099,N,01940.515,E,0.310,180.1,-0.3,V,D*68 $GPGGA,094140,6004.4083,N,01940.5157,E,2,10,1.0,0.1,M,21.7,M,,*4B $GPGSA,A,3,02,04,05,07,08,10,13,16,23,29,,,1.7,1.0,1.3*35 $GPGSV,3,1,12,02,28,256,34,04,10,216,39,05,35,301,00,07,65,172,43*7A $GPGSV,3,2,12,08,33,205,43,10,61,267,42,13,52,094,49,16,22,035,43*73 $GPGSV,3,3,12,23,27,095,39,29,08,329,37,37,21,178,38,39,24,173,00*7C $GPGLL,6004.4083,N,01940.5157,E,094140,A,D*4D $GPBOD,139.7,T,134.9,M,A002,A003*45 $PGRME,2.9,M,4.3,M,5.2,M*25 $PGRMZ,0,f,3*1B $PGRMM,WGS 84*06 $GPRTE,1,1,c,A003-A001 1,A003,A002,A001*54 $GPRMC,094142,A,6004.4085,N,01940.5176,E,1.8,80.0,030610,4.8,E,D*2F $GPRMB,A,0.20,R,A003,A002,6004.099,N,01940.515,E,0.310,180.3,-0.5,V,D*6C $GPGGA,094142,6004.4085,N,01940.5176,E,2,10,1.0,0.1,M,21.7,M,,*4C $GPGSA,A,3,02,04,05,07,08,10,13,16,23,29,,,1.7,1.0,1.4*32 $GPGSV,3,1,12,02,28,256,34,04,10,216,39,05,35,301,00,07,65,172,42*7B $GPGSV,3,2,12,08,33,205,44,10,61,267,41,13,52,094,48,16,22,035,43*76 $GPGSV,3,3,12,23,27,095,38,29,08,329,36,37,21,178,38,39,24,173,40*78 $GPGLL,6004.4085,N,01940.5176,E,094142,A,D*4A $GPBOD,139.7,T,134.9,M,A002,A003*45 $PGRME,3.0,M,4.2,M,5.3,M*2D $PGRMZ,0,f,3*1B $PGRMM,WGS 84*06 $GPWPL,6004.407,N,01939.993,E,A003*39 $GPRMC,094144,A,6004.4087,N,01940.5195,E,1.7,74.9,030610,4.8,E,D*2B $GPRMB,A,0.20,R,A003,A002,6004.099,N,01940.515,E,0.310,180.4,-0.5,V,D*6B $GPGGA,094144,6004.4087,N,01940.5195,E,2,10,1.2,0.2,M,21.7,M,,*44 $GPGSA,A,3,02,04,05,07,08,10,13,16,23,29,,,1.9,1.2,1.5*3F $GPGSV,3,1,12,02,28,256,00,04,10,216,38,05,35,301,31,07,65,172,43*7E $GPGSV,3,2,12,08,33,205,44,10,61,267,41,13,52,094,48,16,22,035,42*77 $GPGSV,3,3,12,23,27,095,38,29,08,329,35,37,21,178,38,39,24,173,39*75 $GPGLL,6004.4087,N,01940.5195,E,094144,A,D*43 $GPBOD,139.7,T,134.9,M,A002,A003*45 $PGRME,3.4,M,4.7,M,5.9,M*26 $PGRMZ,1,f,3*1A $PGRMM,WGS 84*06 $GPWPL,6004.099,N,01940.515,E,A002*37 $GPRMC,094146,A,6004.4089,N,01940.5214,E,1.7,75.7,030610,4.8,E,D*22 $GPRMB,A,0.20,R,A003,A002,6004.099,N,01940.515,E,0.310,180.6,-0.3,V,D*6F $GPGGA,094146,6004.4089,N,01940.5214,E,2,10,1.2,0.3,M,21.7,M,,*43 $GPGSA,A,3,02,04,05,07,08,10,13,16,23,29,,,2.0,1.2,1.6*36 $GPGSV,3,1,12,02,28,256,00,04,10,216,37,05,35,301,34,07,65,172,42*75 $GPGSV,3,2,12,08,33,205,44,10,61,267,42,13,52,094,48,16,22,035,40*76 $GPGSV,3,3,12,23,27,095,40,29,08,329,34,37,21,178,38,39,24,173,38*7A $GPGLL,6004.4089,N,01940.5214,E,094146,A,D*45 $GPBOD,139.7,T,134.9,M,A002,A003*45 $PGRME,3.5,M,4.9,M,6.1,M*22 $PGRMZ,1,f,3*1A $PGRMM,WGS 84*06 $GPWPL,6003.958,N,01940.872,E,A001*3B $GPRMC,094148,A,6004.4090,N,01940.5232,E,1.7,79.4,030610,4.8,E,D*2F $GPRMB,A,0.20,R,A003,A002,6004.099,N,01940.515,E,0.310,180.8,-0.4,V,D*66 $GPGGA,094148,6004.4090,N,01940.5232,E,2,10,1.4,0.5,M,21.7,M,,*41 $GPGSA,A,3,02,04,05,07,08,10,13,16,23,29,,,2.2,1.4,1.7*33 $GPGSV,3,1,12,02,28,256,00,04,10,216,36,05,35,301,35,07,65,172,43*74 $GPGSV,3,2,12,08,33,205,44,10,61,267,42,13,52,094,48,16,22,035,40*76 $GPGSV,3,3,12,23,27,095,39,29,08,329,35,37,21,178,38,39,24,173,37*7A $GPGLL,6004.4090,N,01940.5232,E,094148,A,D*47 $GPBOD,139.7,T,134.9,M,A002,A003*45 $PGRME,3.6,M,5.1,M,6.3,M*2A $PGRMZ,2,f,3*19 $PGRMM,WGS 84*06 $GPRTE,1,1,c,A003-A001 1,A003,A002,A001*54 $GPRMC,094150,A,6004.4092,N,01940.5251,E,1.7,76.3,030610,4.8,E,D*29 $GPRMB,A,0.20,R,A003,A002,6004.099,N,01940.515,E,0.310,180.9,-0.3,V,D*60 $GPGGA,094150,6004.4092,N,01940.5251,E,2,10,1.5,0.6,M,21.7,M,,*4D $GPGSA,A,3,02,04,05,07,08,10,13,16,23,29,,,2.6,1.5,2.1*33 $GPGSV,3,1,12,02,28,256,00,04,10,216,35,05,35,301,35,07,65,172,43*77 $GPGSV,3,2,12,08,33,205,43,10,61,267,41,13,52,094,48,16,22,035,39*7C $GPGSV,3,3,12,23,27,095,39,29,08,329,35,37,21,178,38,39,24,173,38*75 $GPGLL,6004.4092,N,01940.5251,E,094150,A,D*49 $GPBOD,139.7,T,134.9,M,A002,A003*45 $PGRME,3.6,M,5.4,M,6.5,M*29 $PGRMZ,2,f,3*19 $PGRMM,WGS 84*06 $GPWPL,6004.407,N,01939.993,E,A003*39 $GPRMC,094152,A,6004.4093,N,01940.5271,E,1.8,80.8,030610,4.8,E,D*25 $GPRMB,A,0.21,R,A003,A002,6004.099,N,01940.515,E,0.310,181.1,-0.2,V,D*69 $GPGGA,094152,6004.4093,N,01940.5271,E,2,07,1.5,0.7,M,21.7,M,,*4B $GPGSA,A,3,,04,05,07,08,10,13,,,29,,,2.6,1.5,2.1*37 $GPGSV,3,1,12,02,28,256,00,04,10,216,34,05,35,301,34,07,65,172,43*77 $GPGSV,3,2,12,08,33,205,43,10,61,267,41,13,52,094,48,16,22,035,40*72 $GPGSV,3,3,12,23,27,095,38,29,08,329,37,37,21,178,38,39,24,173,38*76 $GPGLL,6004.4093,N,01940.5271,E,094152,A,D*48 $GPBOD,139.7,T,134.9,M,A002,A003*45 $PGRME,3.9,M,6.1,M,7.3,M*27 $PGRMZ,2,f,3*19 $PGRMM,WGS 84*06 $GPWPL,6004.099,N,01940.515,E,A002*37 $GPRMC,094154,A,6004.4095,N,01940.5289,E,1.8,82.1,030610,4.8,E,D*29 $GPRMB,A,0.21,R,A003,A002,6004.099,N,01940.515,E,0.311,181.3,-0.3,V,D*6B $GPGGA,094154,6004.4095,N,01940.5289,E,2,08,1.6,0.7,M,21.7,M,,*40 $GPGSA,A,3,,04,05,07,08,10,13,16,,29,,,2.7,1.6,2.2*31 $GPGSV,3,1,12,02,28,256,00,04,10,216,33,05,35,301,34,07,65,172,43*70 $GPGSV,3,2,12,08,33,205,42,10,61,267,41,13,52,094,48,16,22,035,41*72 $GPGSV,3,3,12,23,26,095,37,29,08,329,36,37,21,178,38,39,24,173,37*76 $GPGLL,6004.4095,N,01940.5289,E,094154,A,D*4F $GPBOD,139.7,T,134.9,M,A002,A003*45 $PGRME,3.4,M,6.2,M,7.3,M*29 $PGRMZ,2,f,3*19 \ No newline at end of file diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/Navibe-GM720.txt b/java/com.sap.sailing.nmeaconnector.test/resources/Navibe-GM720.txt deleted file mode 100755 index 231f8c409c1..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/Navibe-GM720.txt +++ /dev/null @@ -1,217 +0,0 @@ -=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2010.02.13 13:08:23 =~=~=~=~=~=~=~=~=~=~=~= -2,14,52,083,45,07,,,00,05,,,27*71 -$GPGSV,3,3,12,02,,,26,24,,,00,26,30,047,48,06,,,25*43 -$GPRMC,110728,A,6013.0600,N,02453.5376,E,000.0,000.0,130210,,,A*79 -$GPGGA,110729,6013.0599,N,02453.5376,E,1,04,03.4,-00016.6,M,045.5,M,,*63 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,08,03,,,00,19,25,189,51,22,22,075,51,14,52,083,45*44 -$GPGSV,2,2,08,07,,,00,24,,,00,26,30,047,48,06,,,26*4A -$GPRMC,110729,A,6013.0599,N,02453.5376,E,000.0,000.0,130210,,,A*7B -$GPGGA,110730,6013.0599,N,02453.5377,E,1,04,03.4,-00016.6,M,045.5,M,,*6A -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,07,03,,,00,19,25,189,51,22,22,075,50,14,52,083,45*4A -$GPGSV,2,2,07,07,,,00,24,,,00,26,30,047,48,,,,*47 -$GPRMC,110730,A,6013.0599,N,02453.5377,E,000.0,000.0,130210,,,A*72 -$GPGGA,110731,6013.0599,N,02453.5376,E,1,04,03.4,-00016.6,M,045.5,M,,*6A -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,07,03,,,26,19,25,189,51,22,22,075,51,14,52,083,46*4C -$GPGSV,2,2,07,07,,,26,24,,,26,26,30,047,49,,,,*46 -$GPRMC,110731,A,6013.0599,N,02453.5376,E,000.0,000.0,130210,,,A*72 -$GPGGA,110732,6013.0599,N,02453.5376,E,1,04,03.4,-00016.7,M,045.5,M,,*68 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,3,1,12,03,,,00,11,,,00,19,25,189,51,17,,,00*46 -$GPGSV,3,2,12,22,22,075,51,14,52,083,45,07,,,00,04,,,00*76 -$GPGSV,3,3,12,15,,,00,24,,,00,26,30,047,48,20,,,00*42 -$GPRMC,110732,A,6013.0599,N,02453.5376,E,000.0,000.0,130210,,,A*71 -$GPGGA,110733,6013.0599,N,02453.5375,E,1,04,03.4,-00016.8,M,045.5,M,,*65 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,08,11,,,00,19,25,189,50,17,,,00,22,22,075,51*78 -$GPGSV,2,2,08,14,52,083,44,04,,,00,26,30,047,47,20,,,00*79 -$GPRMC,110733,A,6013.0599,N,02453.5375,E,000.0,000.0,130210,,,A*73 -$GPGGA,110734,6013.0600,N,02453.5374,E,1,04,03.4,-00016.9,M,045.5,M,,*61 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,08,11,60,262,23,19,25,189,50,17,12,327,31,22,22,075,51*7E -$GPGSV,2,2,08,14,52,083,44,04,,,00,26,30,047,47,20,,,00*79 -$GPRMC,110734,A,6013.0600,N,02453.5374,E,000.0,000.0,130210,,,A*76 -$GPGGA,110735,6013.0600,N,02453.5373,E,1,04,03.4,-00016.9,M,045.5,M,,*67 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,3,1,12,10,,,00,11,60,262,26,19,25,189,50,17,12,327,28*4E -$GPGSV,3,2,12,22,22,075,51,14,52,083,45,18,,,00,04,,,26*7C -$GPGSV,3,3,12,23,,,00,13,,,00,26,30,047,48,20,19,247,27*7F -$GPRMC,110735,A,6013.0600,N,02453.5373,E,000.0,000.0,130210,,,A*70 -$GPGGA,110736,6013.0600,N,02453.5373,E,1,04,03.4,-00016.9,M,045.5,M,,*64 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,05,19,25,189,51,22,22,075,51,14,52,083,45,23,,,27*4E -$GPGSV,2,2,05,26,30,047,48,,,,,,,,,,,,*44 -$GPRMC,110736,A,6013.0600,N,02453.5373,E,000.0,000.0,130210,,,A*73 -$GPGGA,110737,6013.0600,N,02453.5373,E,1,04,03.4,-00016.8,M,045.5,M,,*64 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,3,1,10,01,,,00,29,,,00,19,25,189,50,12,,,00*49 -$GPGSV,3,2,10,22,22,075,51,14,52,083,44,21,,,00,32,,,00*74 -$GPGSV,3,3,10,23,,,00,26,30,047,48,,,,,,,,*41 -$GPRMC,110737,A,6013.0600,N,02453.5373,E,000.0,000.0,130210,,,A*72 -$GPGGA,110738,6013.0599,N,02453.5373,E,1,04,03.4,-00016.8,M,045.5,M,,*68 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,07,01,,,00,29,,,00,19,25,189,50,22,22,075,51*7B -$GPGSV,2,2,07,14,52,083,43,32,,,00,26,30,047,48,,,,*79 -$GPRMC,110738,A,6013.0599,N,02453.5373,E,000.0,000.0,130210,,,A*7E -$GPGGA,110739,6013.0599,N,02453.5374,E,1,04,03.4,-00016.7,M,045.5,M,,*61 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,07,01,,,25,29,,,25,19,25,189,50,22,22,075,51*7B -$GPGSV,2,2,07,14,52,083,45,32,49,234,27,26,30,047,48,,,,*42 -$GPRMC,110739,A,6013.0599,N,02453.5374,E,000.0,000.0,130210,,,A*78 -$GPGGA,110740,6013.0599,N,02453.5374,E,1,04,03.4,-00016.6,M,045.5,M,,*6E -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,3,1,12,01,,,00,29,,,00,19,25,189,50,09,,,00*41 -$GPGSV,3,2,12,22,22,075,51,14,52,083,44,25,,,00,32,,,00*72 -$GPGSV,3,3,12,08,,,00,27,,,00,26,30,047,49,16,,,00*49 -$GPRMC,110740,A,6013.0599,N,02453.5374,E,000.0,000.0,130210,,,A*76 -$GPGGA,110741,6013.0599,N,02453.5374,E,1,04,03.4,-00016.6,M,045.5,M,,*6F -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,07,19,25,189,50,09,,,00,22,22,075,51,14,52,083,45*40 -$GPGSV,2,2,07,25,,,00,27,,,00,26,30,047,49,,,,*45 -$GPRMC,110741,A,6013.0599,N,02453.5374,E,000.0,000.0,130210,,,A*77 -$GPGGA,110742,6013.0599,N,02453.5374,E,1,04,03.4,-00016.5,M,045.5,M,,*6F -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,2,1,07,19,25,189,51,09,,,00,22$GPGGA,110826,6013.0600,N,02453.5359,E,1,04,03.4,-00015.9,M,045.5,M,,*61 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,3,1,09,28,,,00,19,24,189,49,22,21,075,51,14,52,082,47*45 -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,48*48 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110826,A,6013.0600,N,02453.5359,E,000.0,000.0,130210,,,A*75 -$GPGGA,110827,6013.0600,N,02453.5358,E,1,04,03.4,-00015.9,M,045.5,M,,*61 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,3,1,09,28,,,00,19,24,189,48,22,21,075,50,14,52,082,46*44 -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,47*47 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110827,A,6013.0600,N,02453.5358,E,000.0,000.0,130210,,,A*75 -$GPGGA,110828,6013.0600,N,02453.5358,E,1,04,03.4,-00015.9,M,045.5,M,,*6E -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.1*0C -$GPGSV,3,1,09,28,,,00,19,24,189,47,22,21,075,50,14,52,082,45*48 -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,47*47 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110828,A,6013.0600,N,02453.5358,E,000.0,000.0,130210,,,A*7A -$GPGGA,110829,6013.0600,N,02453.5357,E,1,04,03.4,-00015.9,M,045.5,M,,*60 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,28,,,00,19,24,189,47,22,21,075,49,14,52,082,45*40 -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,47*47 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110829,A,6013.0600,N,02453.5357,E,000.0,000.0,130210,,,A*74 -$GPGGA,110830,6013.0600,N,02453.5356,E,1,04,03.4,-00015.9,M,045.5,M,,*69 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,28,,,00,19,24,189,47,22,21,075,50,14,52,082,46*4B -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,47*47 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110830,A,6013.0600,N,02453.5356,E,000.0,000.0,130210,,,A*7D -$GPGGA,110831,6013.0600,N,02453.5356,E,1,04,03.4,-00016.0,M,045.5,M,,*62 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,28,,,00,19,24,189,47,22,21,075,50,14,52,082,45*48 -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,47*47 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110831,A,6013.0600,N,02453.5356,E,000.0,000.0,130210,,,A*7C -$GPGGA,110832,6013.0600,N,02453.5355,E,1,04,03.4,-00016.0,M,045.5,M,,*62 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,28,,,00,19,24,189,47,22,21,075,50,14,52,082,45*48 -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,47*47 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110832,A,6013.0600,N,02453.5355,E,000.0,000.0,130210,,,A*7C -$GPGGA,110833,6013.0600,N,02453.5354,E,1,04,03.4,-00016.0,M,045.5,M,,*62 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,28,,,00,19,24,189,47,22,21,075,49,14,52,082,45*40 -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,47*47 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110833,A,6013.0600,N,02453.5354,E,000.0,000.0,130210,,,A*7C -$GPGGA,110834,6013.0600,N,02453.5353,E,1,04,03.4,-00016.1,M,045.5,M,,*63 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,28,,,00,19,24,189,47,22,21,075,50,14,52,082,45*48 -$GPGSV,3,2,09,05,,,00,02,,,00,06,,,00,26,30,047,47*47 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110834,A,6013.0600,N,02453.5353,E,000.0,000.0,130210,,,A*7C -$GPGGA,110835,6013.0601,N,02453.5352,E,1,04,03.4,-00016.1,M,045.5,M,,*62 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,28,,,27,19,24,189,47,22,21,075,50,14,52,082,45*4D -$GPGSV,3,2,09,05,,,27,02,,,30,06,,,00,26,30,047,47*41 -$GPGSV,3,3,09,03,,,00,,,,,,,,,,,,*73 -$GPRMC,110835,A,6013.0601,N,02453.5352,E,000.0,000.0,130210,,,A*7D -$GPGGA,110836,6013.0601,N,02453.5351,E,1,04,03.4,-00016.1,M,045.5,M,,*62 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,12,28,,,00,31,,,00,19,24,189,48,07,,,00*45 -$GPGSV,3,2,12,22,21,075,51,14,52,082,45,05,,,27,02,,,27*70 -$GPGSV,3,3,12,24,,,00,06,,,26,26,30,047,47,03,,,27*4F -$GPRMC,110836,A,6013.0601,N,02453.5351,E,000.0,000.0,130210,,,A*7D -$GPGGA,110837,6013.0602,N,02453.5350,E,1,04,03.4,-00016.1,M,045.5,M,,*61 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,2,1,08,31,,,00,19,24,189,47,07,,,00,22,21,075,51*7F -$GPGSV,2,2,08,14,52,082,45,24,,,00,26,30,047,47,03,,,00*7A -$GPRMC,110837,A,6013.0602,N,02453.5350,E,000.0,000.0,130210,,,A*7E -$GPGGA,110838,6013.0602,N,02453.5349,E,1,04,03.4,-00016.1,M,045.5,M,,*66 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,2,1,07,31,,,00,19,24,189,48,07,,,00,22,21,075,51*7F -$GPGSV,2,2,07,14,52,082,45,24,,,00,26,30,047,47,,,,*76 -$GPRMC,110838,A,6013.0602,N,02453.5349,E,000.0,000.0,130210,,,A*79 -$GPGGA,110839,6013.0602,N,02453.5348,E,1,04,03.4,-00016.1,M,045.5,M,,*66 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,2,1,07,31,,,00,19,24,189,48,07,,,00,22,21,075,50*7E -$GPGSV,2,2,07,14,52,082,44,24,,,00,26,30,047,47,,,,*77 -$GPRMC,110839,A,6013.0602,N,02453.5348,E,000.0,000.0,130210,,,A*79 -$GPGGA,110840,6013.0602,N,02453.5348,E,1,04,03.4,-00016.1,M,045.5,M,,*68 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,2,1,07,31,,,00,19,24,189,48,07,,,00,22,21,075,49*76 -$GPGSV,2,2,07,14,52,082,44,24,,,00,26,30,047,47,,,,*77 -$GPRMC,110840,A,6013.0602,N,02453.5348,E,000.0,000.0,130210,,,A*77 -$GPGGA,110841,6013.0602,N,02453.5348,E,1,04,03.4,-00016.0,M,045.5,M,,*68 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,2,1,07,31,,,00,19,24,189,47,07,,,00,22,21,075,50*71 -$GPGSV,2,2,07,14,52,082,44,24,,,00,26,30,047,47,,,,*77 -$GPRMC,110841,A,6013.0602,N,02453.5348,E,000.0,000.0,130210,,,A*76 -$GPGGA,110842,6013.0602,N,02453.5347,E,1,04,03.4,-00016.0,M,045.5,M,,*64 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,2,1,07,31,,,00,19,24,189,47,07,,,00,22,21,075,50*71 -$GPGSV,2,2,07,14,52,082,44,24,,,00,26,30,047,47,,,,*77 -$GPRMC,110842,A,6013.0602,N,02453.5347,E,000.0,000.0,130210,,,A*7A -$GPGGA,110843,6013.0602,N,02453.5347,E,1,04,03.4,-00015.9,M,045.5,M,,*6F -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,2,1,07,31,,,00,19,24,189,48,07,,,00,22,21,075,50*7E -$GPGSV,2,2,07,14,52,082,45,24,,,00,26,30,047,46,,,,*77 -$GPRMC,110843,A,6013.0602,N,02453.5347,E,000.0,000.0,130210,,,A*7B -$GPGGA,110844,6013.0602,N,02453.5347,E,1,04,03.4,-00015.9,M,045.5,M,,*68 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,2,1,07,31,00,128,26,19,24,189,48,07,,,29,22,21,075,50*4A -$GPGSV,2,2,07,14,52,082,45,24,,,00,26,30,047,47,,,,*76 -$GPRMC,110844,A,6013.0602,N,02453.5347,E,000.0,000.0,130210,,,A*7C -$GPGGA,110845,6013.0603,N,02453.5346,E,1,04,03.4,-00015.8,M,045.5,M,,*68 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,12,11,,,00,31,00,128,28,19,24,189,48,07,,,27*7B -$GPGSV,3,2,12,22,21,075,51,14,52,082,45,17,,,00,04,,,00*75 -$GPGSV,3,3,12,24,,,25,15,,,00,26,30,047,47,20,,,00*4A -$GPRMC,110845,A,6013.0603,N,02453.5346,E,000.0,000.0,130210,,,A*7D -$GPGGA,110846,6013.0603,N,02453.5345,E,1,04,03.4,-00015.8,M,045.5,M,,*68 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,11,,,00,19,24,189,48,22,21,075,51,14,52,082,45*4C -$GPGSV,3,2,09,17,,,00,04,,,00,24,,,00,26,30,047,47*42 -$GPGSV,3,3,09,20,,,00,,,,,,,,,,,,*72 -$GPRMC,110846,A,6013.0603,N,02453.5345,E,000.0,000.0,130210,,,A*7D -$GPGGA,110847,6013.0603,N,02453.5345,E,1,04,03.4,-00015.7,M,045.5,M,,*66 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,11,,,00,19,24,189,48,22,21,075,50,14,52,082,45*4D -$GPGSV,3,2,09,17,,,00,04,,,00,24,,,00,26,30,047,46*43 -$GPGSV,3,3,09,20,,,00,,,,,,,,,,,,*72 -$GPRMC,110847,A,6013.0603,N,02453.5345,E,000.0,000.0,130210,,,A*7C -$GPGGA,110848,6013.0603,N,02453.5344,E,1,04,03.4,-00015.7,M,045.5,M,,*68 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,11,,,00,19,24,189,48,22,21,075,50,14,52,082,45*4D -$GPGSV,3,2,09,17,,,00,04,,,00,24,,,00,26,30,047,47*42 -$GPGSV,3,3,09,20,,,00,,,,,,,,,,,,*72 -$GPRMC,110848,A,6013.0603,N,02453.5344,E,000.0,000.0,130210,,,A*72 -$GPGGA,110849,6013.0603,N,02453.5343,E,1,04,03.4,-00015.7,M,045.5,M,,*6E -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,11,,,00,19,24,189,48,22,21,075,50,14,52,082,45*4D -$GPGSV,3,2,09,17,,,00,04,,,00,24,,,00,26,30,047,47*42 -$GPGSV,3,3,09,20,,,00,,,,,,,,,,,,*72 -$GPRMC,110849,A,6013.0603,N,02453.5343,E,000.0,000.0,130210,,,A*74 -$GPGGA,110850,6013.0603,N,02453.5343,E,1,04,03.4,-00015.7,M,045.5,M,,*66 -$GPGSA,A,3,14,19,22,26,,,,,,,,,04.6,03.4,03.0*0D -$GPGSV,3,1,09,11,,,00,19,24,189,48,22,21,075,50,14,52,082,46*4E -$GPGSV,3,2,09,17,,,00,04,,,00,24,,,00,26,30,047,47*42 -$GPGSV,3,3,09,20,,,00,,,,,,,,,,,,*72 -$GPRMC,110850,A,6013.0603,N,02453.5343,E,000.0,000.0,130210,,,A*7C diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/messprotokoll.txt b/java/com.sap.sailing.nmeaconnector.test/resources/messprotokoll.txt deleted file mode 100755 index 73bab5ed492..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/messprotokoll.txt +++ /dev/null @@ -1,46 +0,0 @@ -Messprotokoll 19.12.2012 - -Windvane nicht kalibriert. Plan: Messfahrt mit jeweils 90°-Schritten. Festhalten von Fahrtgeschwindigkeit des Autos, -ausserdem GPS-Track von einem Android HTC Desire. - -Vergleich der Windgeschwindigkeit mit Hansmesser - -11:42 7.5-9.2kt - -Messfahrten entlang Soling - -1. Messfahrt, Beginn 11:45:00, Kopfstellung 0°, Handwindmessung: 4.3-6kt, Tacho 28km/h. Ende ca. 11:46:20 - -2. Messfahrt, Beginn 11:47:00, Kopfstellung 0°, Handwindmessung: 5-6kt, Tacho 28km/h. Ende ca. 11:47:40 - -3. Messfahrt, Beginn 11:48:00, Kopfstellung 0°, Handwindmessung: 5-6kt, Tacho 40km/h. Ende ca. 11:48:35 - -4. Messfahrt, Beginn 11:50:00, Kopfstellung 0°, Handwindmessung: 5-7kt, Tacho 40km/h. Ende ca. 11:50:11 - -5. Messfahrt, Beginn 11:51:00, Kopfstellung 0°, Handwindmessung: 2.5-3,5kt, Tacho 20km/h. Ende ca. 11:51:50 - -6. Messfahrt, Beginn 11:52:30, Kopfstellung 0°, Handwindmessung: 4-5kt, Tacho 20km/h. Ende ca. 11:53:20 - -7. Messfahrt, Beginn 11:55:20, Kopfstellung 90°, Handwindmessung: 4-6kt, Tacho 40km/h. Ende ca. 11:55:45 - -8. Messfahrt, Beginn 11:57:00, Kopfstellung 90°, Handwindmessung: 4-5kt, Tacho 40km/h. Ende ca. 11:57:20 - -9. Messfahrt, Beginn 11:58:30, Kopfstellung 180°, Handwindmessung: 4-5kt, Tacho 40km/h. Ende ca. 11:58:53 - -10. Messfahrt, Beginn 12:00:00, Kopfstellung 180°, Handwindmessung: 5.5-6.5kt, Tacho 40km/h. Ende ca. 12:00:25 - -11. Messfahrt, Beginn 12:01:30, Kopfstellung 270°, Handwindmessung: 2.7-3.5kt, Tacho 40km/h. Ende ca. 12:01:50 - -12. Messfahrt, Beginn 12:03:00, Kopfstellung 270°, Handwindmessung: 5.5-6.5kt, Tacho 40km/h. Ende ca. 12:03:20 - -13. Messfahrt, Beginn 12:04:45, Kopfstellung 0°, Handwindmessung: 3.8-4.8kt, Tacho 40km/h. Ende ca. 12:05:05 - -14. Messfahrt, Beginn 12:06:00, Kopfstellung 0°, Handwindmessung: 3.7-4.5kt, Tacho 40km/h. Ende ca. 12:06:21 - -15. Messfahrt, Beginn 12:09:00, Kreisfahrt links Volleinschlag im Schritttempo, Kopfstellung 0°, Handwindmessung: 3.7-5.1kt, Tacho 4km/h, Ende ca. 12:10:42 - -16. Messfahrt, Beginn 12:12:10, Kreisfahrt recht Volleinschlag im Schritttempo, Kopfstellung 0°, Handwindmessung: 2.7-5.0kt, Tacho 4km/h, Ende ca. 12:13:15 - - - - diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/sample1.txt b/java/com.sap.sailing.nmeaconnector.test/resources/sample1.txt deleted file mode 100755 index 7231ab938ea..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/sample1.txt +++ /dev/null @@ -1,20 +0,0 @@ -$IIMWV,273,R,24.3,N,A*10 -$IIVHW,,,347,M,0.00,N,,*64 -$IIVLW,1958.64,N,1958.64,N*4D -$IIVPW,00.00,N,,*31 $IIVTG,,T,312,M,0.0,N,,*0C -$IIVWR,088,L,24.5,N,12.6,M,,*2A -$IIVWT,088,L,24.7,N,12.6,M,,*2E -$IIXTE,A,A,5.36,R,N*67 -$IIDBT,013.4,f,04.1,M,02.2,F*12 -$IIGLL,3748.4051,N,12226.618,W,,A*1D -$IIHDM,348,M*33 -$IIMTA,39.4,C*0B -$IIMTW,016,C*3A -$IIMWD,,T,258,M,24.6,N,12.6,M*7E -$IIMWV,272,R,24.6,N,A*14 -$IIVHW,,,348,M,0.00,N,,*6B -$IIVLW,1958.64,N,1958.64,N*4D -$IIVPW,00.00,N,,*31 -$IIVTG,,T,315,M,0.0,N,,*0B -$IIVWR,091,L,24.9,N,12.8,M,,*20 -$IIVWT,090,L,24.6,N,12.6,M,,*26 $IIXTE,A,A,5.36,R,N*67 $IIDBT,013.2,f,04.0,M,02.2,F*15 $IIGLL,3748.4052,N,12226.618,W,,A*1E $IIHDM,348,M*33 $IIMTA,17.9,C*0A $IIMTW,016,C*3A $IIMWD,,T,254,M,26.4,N,13.5,M*70 $IIMWV,267,R,26.0,N,A*14 $IIVHW,,,348,M,0.00,N,,*6B $IIVLW,1958.64,N,1958.64,N*4D $IIVPW,00.00,N,,*31 $IIVTG,,T,295,M,0.0,N,,*02 $IIVWR,093,L,26.5,N,13.6,M,,*23 $IIVWT,094,L,26.7,N,13.7,M,,*21 $IIXTE,A,A,5.36,R,N*67 $IIDBT,013.3,f,04.0,M,02.2,F*14 $IIGLL,3748.4051,N,12226.618,W,,A*1D $IIHDM,348,M*33 $IIMTA,3.6,C*30 $IIMTW,016,C*3A $IIMWD,,T,250,M,27.0,N,13.8,M*7C $IIMWV,265,R,26.4,N,A*12 \ No newline at end of file diff --git a/java/com.sap.sailing.nmeaconnector.test/resources/windvane.nmea b/java/com.sap.sailing.nmeaconnector.test/resources/windvane.nmea deleted file mode 100755 index 4ea555b3d2d..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/resources/windvane.nmea +++ /dev/null @@ -1,2063 +0,0 @@ -$WIMWV,229.0,R,05.4,K,A*1E -$WIMWV,228.0,R,07.2,K,A*1B -$WIMWV,228.0,R,05.8,K,A*13 -$WIMWV,224.0,R,08.7,K,A*1D -$WIMWV,220.0,R,04.4,K,A*16 -$WIMWV,219.0,R,06.8,K,A*12 -$WIMWV,219.0,R,03.2,K,A*1D -$WIBAT,1,5*4D -$WIMWV,218.0,R,04.0,K,A*19 -$WIMWV,218.0,R,07.0,K,A*1A -Mi, 19. Dez 2012 11:23:20 -Mi, 19. Dez 2012 11:23:25 -Mi, 19. Dez 2012 11:23:30 -Mi, 19. Dez 2012 11:23:35 -Mi, 19. Dez 2012 11:23:40 -Mi, 19. Dez 2012 11:23:45 -$WIMWV,217.0,R,06.1,K,A*15 -$WIMWV,345.0,R,05.3,K,A*12 -$WIMWV,345.0,R,06.5,K,A*17 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:23:50 -$WIMWV,345.0,R,06.8,K,A*1A -$WIMWV,355.0,R,05.2,K,A*12 -Mi, 19. Dez 2012 11:23:55 -$WIMWV,355.0,R,05.2,K,A*12 -Mi, 19. Dez 2012 11:24:01 -$WIMWV,226.0,R,07.3,K,A*14 -Mi, 19. Dez 2012 11:24:06 -$WIMWV,167.0,R,06.0,K,A*10 -Mi, 19. Dez 2012 11:24:11 -$WIMWV,165.0,R,03.5,K,A*12 -Mi, 19. Dez 2012 11:24:16 -Mi, 19. Dez 2012 11:24:21 -Mi, 19. Dez 2012 11:24:26 -Mi, 19. Dez 2012 11:24:31 -$WIMWV,165.0,R,00.0,K,A*14 -Mi, 19. Dez 2012 11:24:36 -$WIMWV,165.0,R,00.0,K,A*14 -Mi, 19. Dez 2012 11:24:41 -Mi, 19. Dez 2012 11:24:46 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:24:51 -Mi, 19. Dez 2012 11:24:56 -$WIMWV,165.0,R,00.0,K,A*14 -Mi, 19. Dez 2012 11:25:01 -Mi, 19. Dez 2012 11:25:06 -Mi, 19. Dez 2012 11:25:11 -Mi, 19. Dez 2012 11:25:16 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:25:21 -$WIMWV,165.0,R,00.0,K,A*14 -Mi, 19. Dez 2012 11:25:26 -$WIMWV,164.0,R,08.7,K,A*1A -Mi, 19. Dez 2012 11:25:32 -Mi, 19. Dez 2012 11:25:37 -Mi, 19. Dez 2012 11:25:42 -$WIMWV,164.0,R,00.0,K,A*15 -Mi, 19. Dez 2012 11:25:47 -$WIMWV,164.0,R,00.0,K,A*15 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:25:52 -$WIMWV,129.0,R,00.0,K,A*1C -Mi, 19. Dez 2012 11:25:57 -$WIMWV,127.0,R,00.0,K,A*12 -Mi, 19. Dez 2012 11:26:02 -Mi, 19. Dez 2012 11:26:07 -$WIMWV,124.0,R,08.0,K,A*19 -$WIMWV,124.0,R,07.8,K,A*1E -Mi, 19. Dez 2012 11:26:12 -$WIMWV,124.0,R,09.3,K,A*1B -Mi, 19. Dez 2012 11:26:17 -$WIMWV,124.0,R,10.6,K,A*16 -$WIMWV,124.0,R,11.4,K,A*15 -Mi, 19. Dez 2012 11:26:22 -$WIMWV,124.0,R,08.0,K,A*19 -$WIMWV,124.0,R,06.4,K,A*13 -Mi, 19. Dez 2012 11:26:27 -$WIMWV,124.0,R,10.5,K,A*15 -Mi, 19. Dez 2012 11:26:32 -$WIMWV,124.0,R,12.0,K,A*12 -$WIMWV,124.0,R,09.8,K,A*10 -Mi, 19. Dez 2012 11:26:37 -Mi, 19. Dez 2012 11:26:43 -$WIMWV,124.0,R,08.7,K,A*1E -$WIMWV,124.0,R,06.0,K,A*17 -Mi, 19. Dez 2012 11:26:48 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:26:53 -$WIMWV,124.0,R,01.0,K,A*10 -$WIMWV,124.0,R,04.7,K,A*12 -Mi, 19. Dez 2012 11:26:58 -Mi, 19. Dez 2012 11:27:03 -$WIMWV,124.0,R,07.8,K,A*1E -Mi, 19. Dez 2012 11:27:08 -$WIMWV,126.0,R,05.8,K,A*1E -$WIMWV,125.0,R,07.7,K,A*10 -Mi, 19. Dez 2012 11:27:13 -$WIMWV,126.0,R,07.3,K,A*17 -Mi, 19. Dez 2012 11:27:18 -$WIMWV,126.0,R,10.3,K,A*11 -$WIMWV,126.0,R,08.8,K,A*13 -Mi, 19. Dez 2012 11:27:23 -$WIMWV,126.0,R,10.7,K,A*15 -$WIMWV,126.0,R,10.4,K,A*16 -Mi, 19. Dez 2012 11:27:28 -$WIMWV,126.0,R,05.8,K,A*1E -Mi, 19. Dez 2012 11:27:33 -$WIMWV,126.0,R,02.4,K,A*15 -$WIMWV,125.0,R,03.5,K,A*16 -Mi, 19. Dez 2012 11:27:38 -$WIMWV,126.0,R,06.7,K,A*12 -Mi, 19. Dez 2012 11:27:44 -$WIMWV,126.0,R,08.9,K,A*12 -$WIMWV,126.0,R,09.8,K,A*12 -Mi, 19. Dez 2012 11:27:49 -$WIMWV,126.0,R,05.9,K,A*1F -$WIMWV,126.0,R,06.5,K,A*10 -Mi, 19. Dez 2012 11:27:54 -$WIMWV,126.0,R,06.3,K,A*16 -$WIMWV,126.0,R,05.7,K,A*11 -Mi, 19. Dez 2012 11:27:59 -$WIMWV,126.0,R,08.5,K,A*1E -Mi, 19. Dez 2012 11:28:04 -$WIMWV,126.0,R,06.9,K,A*1C -$WIMWV,126.0,R,11.7,K,A*14 -Mi, 19. Dez 2012 11:28:09 -$WIMWV,126.0,R,17.0,K,A*15 -$WIMWV,127.0,R,12.1,K,A*10 -Mi, 19. Dez 2012 11:28:14 -$WIMWV,127.0,R,20.2,K,A*12 -$WIMWV,127.0,R,12.7,K,A*16 -Mi, 19. Dez 2012 11:28:19 -$WIBAT,1,5*4D -$WIMWV,128.0,R,08.7,K,A*12 -Mi, 19. Dez 2012 11:28:24 -Mi, 19. Dez 2012 11:28:29 -$WIMWV,128.0,R,04.1,K,A*18 -Mi, 19. Dez 2012 11:28:34 -$WIMWV,128.0,R,01.6,K,A*1A -Mi, 19. Dez 2012 11:28:39 -Mi, 19. Dez 2012 11:28:44 -$WIMWV,126.0,R,01.6,K,A*14 -Mi, 19. Dez 2012 11:28:50 -$WIBAT,1,5*4D -$WIMWV,126.0,R,00.0,K,A*13 -Mi, 19. Dez 2012 11:28:55 -Mi, 19. Dez 2012 11:29:00 -Mi, 19. Dez 2012 11:38:14 -Mi, 19. Dez 2012 11:38:19 -Mi, 19. Dez 2012 11:38:24 -Mi, 19. Dez 2012 11:38:29 -Mi, 19. Dez 2012 11:38:34 -Mi, 19. Dez 2012 11:38:39 -Mi, 19. Dez 2012 11:38:44 -Mi, 19. Dez 2012 11:38:50 -Mi, 19. Dez 2012 11:38:55 -Mi, 19. Dez 2012 11:39:00 -Mi, 19. Dez 2012 11:39:05 -Mi, 19. Dez 2012 11:39:10 -Mi, 19. Dez 2012 11:39:15 -Mi, 19. Dez 2012 11:39:20 -Mi, 19. Dez 2012 11:39:25 -Mi, 19. Dez 2012 11:39:30 -Mi, 19. Dez 2012 11:39:35 -Mi, 19. Dez 2012 11:39:40 -Mi, 19. Dez 2012 11:39:45 -Mi, 19. Dez 2012 11:39:50 -Mi, 19. Dez 2012 11:39:55 -Mi, 19. Dez 2012 11:40:00 -Mi, 19. Dez 2012 11:40:05 -Mi, 19. Dez 2012 11:40:10 -$WIMWV,000.0,R,00.0,K,A*16 -Mi, 19. Dez 2012 11:40:15 -$WIMWV,000.0,R,00.0,K,A*16 -$WIMWV,280.0,R,00.0,K,A*1C -Mi, 19. Dez 2012 11:40:20 -$WIMWV,236.0,R,00.4,K,A*15 -Mi, 19. Dez 2012 11:40:25 -$WIMWV,254.0,R,00.4,K,A*11 -Mi, 19. Dez 2012 11:40:31 -$WIBAT,1,5*4D -$WIMWV,262.0,R,01.4,K,A*15 -Mi, 19. Dez 2012 11:40:36 -Mi, 19. Dez 2012 11:40:41 -Mi, 19. Dez 2012 11:40:46 -$WIMWV,340.0,R,00.4,K,A*15 -$WIMWV,254.0,R,01.6,K,A*12 -Mi, 19. Dez 2012 11:40:51 -$WIMWV,249.0,R,02.8,K,A*13 -$WIMWV,260.0,R,06.9,K,A*1D -Mi, 19. Dez 2012 11:40:56 -$WIMWV,263.0,R,05.7,K,A*13 -Mi, 19. Dez 2012 11:41:01 -$WIMWV,242.0,R,13.0,K,A*10 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:41:06 -$WIMWV,246.0,R,14.9,K,A*1A -$WIMWV,272.0,R,13.6,K,A*15 -Mi, 19. Dez 2012 11:41:11 -$WIMWV,272.0,R,08.1,K,A*18 -$WIMWV,327.0,R,05.1,K,A*14 -Mi, 19. Dez 2012 11:41:16 -Mi, 19. Dez 2012 11:41:21 -$WIMWV,153.0,R,02.5,K,A*16 -Mi, 19. Dez 2012 11:41:26 -$WIMWV,153.0,R,05.2,K,A*16 -$WIMWV,211.0,R,07.8,K,A*1B -Mi, 19. Dez 2012 11:41:31 -$WIMWV,233.0,R,08.5,K,A*19 -$WIMWV,233.0,R,07.2,K,A*11 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:41:36 -$WIMWV,235.0,R,05.7,K,A*10 -$WIMWV,230.0,R,05.3,K,A*11 -Mi, 19. Dez 2012 11:41:41 -$WIMWV,237.0,R,05.3,K,A*16 -Mi, 19. Dez 2012 11:41:47 -$WIMWV,239.0,R,05.6,K,A*1D -Mi, 19. Dez 2012 11:41:52 -$WIMWV,248.0,R,05.9,K,A*14 -Mi, 19. Dez 2012 11:41:57 -$WIMWV,223.0,R,05.5,K,A*15 -$WIMWV,221.0,R,05.0,K,A*12 -Mi, 19. Dez 2012 11:42:02 -$WIMWV,227.0,R,05.0,K,A*14 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:42:07 -Mi, 19. Dez 2012 11:42:12 -$WIMWV,225.0,R,06.9,K,A*1C -$WIMWV,221.0,R,06.0,K,A*11 -Mi, 19. Dez 2012 11:42:17 -$WIMWV,223.0,R,06.5,K,A*16 -Mi, 19. Dez 2012 11:42:22 -Mi, 19. Dez 2012 11:42:27 -$WIMWV,217.0,R,06.5,K,A*11 -$WIMWV,217.0,R,06.3,K,A*17 -Mi, 19. Dez 2012 11:42:32 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:42:37 -Mi, 19. Dez 2012 11:42:42 -$WIMWV,239.0,R,06.3,K,A*1B -Mi, 19. Dez 2012 11:42:47 -$WIMWV,233.0,R,07.1,K,A*12 -Mi, 19. Dez 2012 11:42:52 -$WIMWV,236.0,R,07.5,K,A*13 -$WIMWV,239.0,R,07.4,K,A*1D -Mi, 19. Dez 2012 11:42:58 -$WIMWV,236.0,R,07.3,K,A*15 -$WIMWV,230.0,R,06.9,K,A*18 -Mi, 19. Dez 2012 11:43:03 -$WIBAT,1,5*4D -$WIMWV,233.0,R,06.8,K,A*1A -Mi, 19. Dez 2012 11:43:08 -$WIMWV,240.0,R,06.3,K,A*15 -Mi, 19. Dez 2012 11:43:13 -$WIMWV,246.0,R,05.9,K,A*1A -Mi, 19. Dez 2012 11:43:18 -Mi, 19. Dez 2012 11:43:23 -$WIMWV,245.0,R,04.2,K,A*13 -$WIMWV,234.0,R,05.1,K,A*17 -Mi, 19. Dez 2012 11:43:28 -$WIMWV,239.0,R,05.4,K,A*1F -Mi, 19. Dez 2012 11:43:33 -$WIBAT,1,5*4D -$WIMWV,230.0,R,05.2,K,A*10 -Mi, 19. Dez 2012 11:43:38 -$WIMWV,230.0,R,05.5,K,A*17 -$WIMWV,235.0,R,06.1,K,A*15 -Mi, 19. Dez 2012 11:43:43 -$WIMWV,234.0,R,05.7,K,A*11 -Mi, 19. Dez 2012 11:43:48 -$WIMWV,229.0,R,05.6,K,A*1C -$WIMWV,229.0,R,05.4,K,A*1E -Mi, 19. Dez 2012 11:43:53 -$WIMWV,233.0,R,05.0,K,A*11 -$WIMWV,220.0,R,05.6,K,A*15 -Mi, 19. Dez 2012 11:43:58 -$WIMWV,224.0,R,06.0,K,A*14 -Mi, 19. Dez 2012 11:44:04 -$WIMWV,225.0,R,04.9,K,A*1E -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:44:09 -$WIMWV,228.0,R,05.8,K,A*13 -$WIMWV,243.0,R,05.7,K,A*11 -Mi, 19. Dez 2012 11:44:14 -$WIMWV,244.0,R,05.7,K,A*16 -$WIMWV,281.0,R,08.0,K,A*15 -Mi, 19. Dez 2012 11:44:19 -$WIMWV,293.0,R,08.2,K,A*14 -$WIMWV,315.0,R,08.6,K,A*1F -Mi, 19. Dez 2012 11:44:24 -$WIMWV,333.0,R,07.4,K,A*16 -$WIMWV,325.0,R,06.6,K,A*12 -Mi, 19. Dez 2012 11:44:29 -$WIMWV,330.0,R,06.1,K,A*11 -Mi, 19. Dez 2012 11:44:34 -$WIBAT,1,5*4D -$WIMWV,320.0,R,04.9,K,A*1A -$WIMWV,319.0,R,04.2,K,A*1B -Mi, 19. Dez 2012 11:44:39 -$WIMWV,341.0,R,03.2,K,A*11 -Mi, 19. Dez 2012 11:44:44 -$WIMWV,334.0,R,03.5,K,A*14 -Mi, 19. Dez 2012 11:44:49 -$WIMWV,342.0,R,04.0,K,A*17 -$WIMWV,346.0,R,04.6,K,A*15 -Mi, 19. Dez 2012 11:44:54 -$WIMWV,346.0,R,05.0,K,A*12 -$WIMWV,339.0,R,05.0,K,A*1A -Mi, 19. Dez 2012 11:44:59 -$WIMWV,338.0,R,04.6,K,A*1C -$WIMWV,338.0,R,04.9,K,A*13 -Mi, 19. Dez 2012 11:45:04 -$WIMWV,324.0,R,05.4,K,A*12 -Mi, 19. Dez 2012 11:45:10 -$WIMWV,339.0,R,04.9,K,A*12 -Mi, 19. Dez 2012 11:45:15 -$WIMWV,340.0,R,05.1,K,A*15 -$WIMWV,331.0,R,05.8,K,A*1A -$WIMWV,339.0,R,07.0,K,A*18 -Mi, 19. Dez 2012 11:45:20 -$WIMWV,336.0,R,06.0,K,A*16 -Mi, 19. Dez 2012 11:45:25 -$WIMWV,330.0,R,04.9,K,A*1B -Mi, 19. Dez 2012 11:45:30 -Mi, 19. Dez 2012 11:45:35 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:45:40 -$WIMWV,269.0,R,05.7,K,A*19 -$WIMWV,271.0,R,11.4,K,A*16 -Mi, 19. Dez 2012 11:45:45 -$WIMWV,267.0,R,15.6,K,A*17 -Mi, 19. Dez 2012 11:45:50 -$WIMWV,266.0,R,16.4,K,A*17 -$WIMWV,257.0,R,13.6,K,A*12 -Mi, 19. Dez 2012 11:45:55 -$WIMWV,263.0,R,15.0,K,A*15 -Mi, 19. Dez 2012 11:46:00 -$WIMWV,269.0,R,15.6,K,A*19 -$WIMWV,260.0,R,15.7,K,A*11 -Mi, 19. Dez 2012 11:46:05 -$WIMWV,256.0,R,13.7,K,A*12 -$WIBAT,1,5*4D -$WIMWV,303.0,R,09.9,K,A*16 -Mi, 19. Dez 2012 11:46:10 -$WIMWV,234.0,R,04.7,K,A*10 -Mi, 19. Dez 2012 11:46:15 -$WIMWV,096.0,R,02.7,K,A*1C -$WIMWV,085.0,R,05.2,K,A*1C -Mi, 19. Dez 2012 11:46:20 -$WIMWV,108.0,R,06.9,K,A*10 -$WIMWV,115.0,R,07.7,K,A*13 -Mi, 19. Dez 2012 11:46:26 -$WIMWV,115.0,R,06.5,K,A*10 -Mi, 19. Dez 2012 11:46:31 -$WIMWV,191.0,R,05.3,K,A*19 -$WIMWV,239.0,R,08.8,K,A*1E -Mi, 19. Dez 2012 11:46:36 -$WIBAT,1,5*4D -$WIMWV,239.0,R,08.6,K,A*10 -$WIMWV,180.0,R,08.4,K,A*13 -Mi, 19. Dez 2012 11:46:41 -$WIMWV,146.0,R,08.2,K,A*1F -$WIMWV,132.0,R,07.0,K,A*11 -Mi, 19. Dez 2012 11:46:46 -$WIMWV,132.0,R,06.7,K,A*17 -$WIMWV,152.0,R,06.9,K,A*1F -Mi, 19. Dez 2012 11:46:51 -$WIMWV,148.0,R,05.9,K,A*17 -$WIMWV,151.0,R,05.8,K,A*1E -Mi, 19. Dez 2012 11:46:56 -$WIMWV,162.0,R,05.4,K,A*12 -Mi, 19. Dez 2012 11:47:01 -$WIMWV,162.0,R,05.0,K,A*16 -$WIMWV,164.0,R,05.3,K,A*13 -Mi, 19. Dez 2012 11:47:06 -$WIBAT,1,5*4D -$WIMWV,164.0,R,06.2,K,A*11 -$WIMWV,188.0,R,08.9,K,A*16 -Mi, 19. Dez 2012 11:47:11 -$WIMWV,207.0,R,17.6,K,A*13 -$WIMWV,213.0,R,19.1,K,A*1F -Mi, 19. Dez 2012 11:47:16 -$WIMWV,204.0,R,18.5,K,A*1C -Mi, 19. Dez 2012 11:47:21 -$WIMWV,208.0,R,19.1,K,A*15 -Mi, 19. Dez 2012 11:47:26 -Mi, 19. Dez 2012 11:47:32 -Mi, 19. Dez 2012 11:47:37 -$WIBAT,1,5*4D -$WIMWV,206.0,R,19.4,K,A*1E -Mi, 19. Dez 2012 11:47:42 -$WIMWV,157.0,R,06.8,K,A*1B -$WIMWV,140.0,R,04.4,K,A*13 -Mi, 19. Dez 2012 11:47:47 -$WIMWV,168.0,R,03.8,K,A*12 -$WIMWV,193.0,R,03.1,K,A*1F -Mi, 19. Dez 2012 11:47:52 -$WIMWV,196.0,R,04.5,K,A*19 -$WIMWV,225.0,R,10.3,K,A*11 -Mi, 19. Dez 2012 11:47:57 -$WIMWV,287.0,R,07.6,K,A*1A -$WIMWV,287.0,R,05.9,K,A*17 -Mi, 19. Dez 2012 11:48:02 -$WIMWV,348.0,R,03.6,K,A*1C -Mi, 19. Dez 2012 11:48:07 -$WIMWV,348.0,R,03.1,K,A*1B -$WIMWV,288.0,R,03.6,K,A*11 -Mi, 19. Dez 2012 11:48:12 -$WIMWV,288.0,R,05.1,K,A*10 -$WIMWV,249.0,R,19.4,K,A*15 -Mi, 19. Dez 2012 11:48:17 -$WIMWV,254.0,R,21.9,K,A*1F -$WIMWV,249.0,R,21.4,K,A*1E -Mi, 19. Dez 2012 11:48:22 -$WIMWV,253.0,R,21.5,K,A*14 -$WIMWV,253.0,R,20.4,K,A*14 -Mi, 19. Dez 2012 11:48:27 -Mi, 19. Dez 2012 11:48:32 -$WIMWV,283.0,R,18.7,K,A*11 -$WIMWV,283.0,R,10.0,K,A*1E -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:48:37 -$WIMWV,138.0,R,04.7,K,A*1F -$WIMWV,098.0,R,03.8,K,A*1C -Mi, 19. Dez 2012 11:48:42 -$WIMWV,124.0,R,06.9,K,A*1E -$WIMWV,141.0,R,08.1,K,A*1B -Mi, 19. Dez 2012 11:48:48 -$WIMWV,159.0,R,06.2,K,A*1F -$WIMWV,201.0,R,06.9,K,A*1A -Mi, 19. Dez 2012 11:48:53 -$WIMWV,233.0,R,11.1,K,A*15 -$WIMWV,200.0,R,09.1,K,A*1C -Mi, 19. Dez 2012 11:48:58 -$WIMWV,157.0,R,08.9,K,A*14 -$WIMWV,130.0,R,08.3,K,A*1F -Mi, 19. Dez 2012 11:49:03 -$WIMWV,148.0,R,08.3,K,A*10 -$WIMWV,154.0,R,07.4,K,A*15 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:49:08 -Mi, 19. Dez 2012 11:49:13 -$WIMWV,154.0,R,07.7,K,A*16 -Mi, 19. Dez 2012 11:49:18 -$WIMWV,159.0,R,07.0,K,A*1C -$WIMWV,156.0,R,06.6,K,A*14 -Mi, 19. Dez 2012 11:49:23 -$WIMWV,140.0,R,05.8,K,A*1E -Mi, 19. Dez 2012 11:49:28 -$WIMWV,156.0,R,05.2,K,A*13 -Mi, 19. Dez 2012 11:49:33 -$WIMWV,156.0,R,05.4,K,A*15 -$WIMWV,151.0,R,06.5,K,A*10 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:49:38 -$WIMWV,147.0,R,05.6,K,A*17 -Mi, 19. Dez 2012 11:49:43 -$WIMWV,204.0,R,05.9,K,A*1C -$WIMWV,214.0,R,16.3,K,A*15 -Mi, 19. Dez 2012 11:49:48 -$WIMWV,213.0,R,25.9,K,A*18 -Mi, 19. Dez 2012 11:49:53 -$WIMWV,213.0,R,24.5,K,A*15 -Mi, 19. Dez 2012 11:49:59 -$WIMWV,217.0,R,26.5,K,A*13 -Mi, 19. Dez 2012 11:50:04 -$WIMWV,197.0,R,23.2,K,A*1A -Mi, 19. Dez 2012 11:50:09 -$WIMWV,238.0,R,13.2,K,A*1F -$WIMWV,290.0,R,09.0,K,A*14 -Mi, 19. Dez 2012 11:50:14 -$WIMWV,291.0,R,04.2,K,A*1A -$WIMWV,291.0,R,02.4,K,A*1A -Mi, 19. Dez 2012 11:50:19 -$WIMWV,336.0,R,03.2,K,A*11 -Mi, 19. Dez 2012 11:50:24 -$WIMWV,012.0,R,02.6,K,A*11 -$WIMWV,012.0,R,03.2,K,A*14 -Mi, 19. Dez 2012 11:50:29 -$WIMWV,356.0,R,03.6,K,A*13 -Mi, 19. Dez 2012 11:50:34 -$WIMWV,356.0,R,03.9,K,A*1C -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:50:39 -$WIMWV,002.0,R,03.2,K,A*15 -Mi, 19. Dez 2012 11:50:44 -$WIMWV,002.0,R,03.2,K,A*15 -Mi, 19. Dez 2012 11:50:49 -$WIMWV,002.0,R,01.9,K,A*1C -Mi, 19. Dez 2012 11:50:54 -Mi, 19. Dez 2012 11:50:59 -$WIMWV,355.0,R,02.4,K,A*13 -Mi, 19. Dez 2012 11:51:04 -$WIMWV,249.0,R,06.6,K,A*19 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:51:10 -$WIMWV,254.0,R,07.5,K,A*17 -$WIMWV,256.0,R,08.0,K,A*1F -Mi, 19. Dez 2012 11:51:15 -$WIMWV,252.0,R,08.5,K,A*1E -Mi, 19. Dez 2012 11:51:20 -$WIMWV,257.0,R,09.4,K,A*1B -$WIMWV,257.0,R,08.9,K,A*17 -Mi, 19. Dez 2012 11:51:25 -$WIMWV,265.0,R,09.3,K,A*1D -$WIMWV,263.0,R,10.2,K,A*12 -Mi, 19. Dez 2012 11:51:30 -Mi, 19. Dez 2012 11:51:35 -$WIMWV,256.0,R,09.5,K,A*1B -$WIBAT,1,5*4D -$WIMWV,265.0,R,10.6,K,A*10 -Mi, 19. Dez 2012 11:51:40 -$WIMWV,265.0,R,09.5,K,A*1B -$WIMWV,277.0,R,09.4,K,A*19 -Mi, 19. Dez 2012 11:51:45 -$WIMWV,293.0,R,09.5,K,A*12 -$WIMWV,353.0,R,06.7,K,A*12 -Mi, 19. Dez 2012 11:51:50 -$WIMWV,342.0,R,05.2,K,A*14 -Mi, 19. Dez 2012 11:51:55 -$WIMWV,300.0,R,04.9,K,A*18 -$WIMWV,098.0,R,02.6,K,A*13 -Mi, 19. Dez 2012 11:52:00 -$WIMWV,111.0,R,02.9,K,A*1C -$WIMWV,126.0,R,07.5,K,A*11 -Mi, 19. Dez 2012 11:52:05 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:52:10 -$WIMWV,227.0,R,08.7,K,A*1E -Mi, 19. Dez 2012 11:52:15 -$WIMWV,204.0,R,08.9,K,A*11 -$WIMWV,153.0,R,08.9,K,A*10 -Mi, 19. Dez 2012 11:52:20 -$WIMWV,132.0,R,06.5,K,A*15 -$WIMWV,134.0,R,05.0,K,A*15 -Mi, 19. Dez 2012 11:52:26 -$WIMWV,159.0,R,04.5,K,A*1A -Mi, 19. Dez 2012 11:52:31 -Mi, 19. Dez 2012 11:52:36 -$WIMWV,199.0,R,04.9,K,A*1A -$WIBAT,1,5*4D -$WIMWV,199.0,R,13.9,K,A*1C -Mi, 19. Dez 2012 11:52:41 -$WIMWV,204.0,R,14.1,K,A*14 -$WIMWV,204.0,R,15.7,K,A*13 -Mi, 19. Dez 2012 11:52:46 -Mi, 19. Dez 2012 11:52:51 -$WIMWV,207.0,R,14.8,K,A*1E -$WIMWV,215.0,R,14.2,K,A*17 -Mi, 19. Dez 2012 11:52:56 -$WIMWV,211.0,R,14.8,K,A*19 -$WIMWV,213.0,R,14.5,K,A*16 -$WIMWV,211.0,R,15.7,K,A*17 -Mi, 19. Dez 2012 11:53:01 -$WIMWV,211.0,R,14.8,K,A*19 -$WIMWV,205.0,R,14.3,K,A*17 -Mi, 19. Dez 2012 11:53:06 -$WIBAT,1,5*4D -$WIMWV,209.0,R,13.9,K,A*16 -Mi, 19. Dez 2012 11:53:11 -$WIMWV,210.0,R,13.6,K,A*11 -Mi, 19. Dez 2012 11:53:16 -$WIMWV,208.0,R,14.0,K,A*19 -$WIMWV,203.0,R,13.2,K,A*17 -Mi, 19. Dez 2012 11:53:21 -$WIMWV,204.0,R,11.8,K,A*18 -Mi, 19. Dez 2012 11:53:26 -$WIMWV,267.0,R,09.7,K,A*1B -$WIMWV,279.0,R,05.0,K,A*1F -Mi, 19. Dez 2012 11:53:31 -$WIMWV,286.0,R,03.3,K,A*1A -$WIMWV,286.0,R,02.2,K,A*1A -Mi, 19. Dez 2012 11:53:37 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:53:42 -$WIMWV,320.0,R,03.4,K,A*10 -$WIMWV,355.0,R,03.0,K,A*16 -Mi, 19. Dez 2012 11:53:47 -$WIMWV,352.0,R,03.5,K,A*14 -$WIMWV,263.0,R,04.3,K,A*16 -Mi, 19. Dez 2012 11:53:52 -$WIMWV,266.0,R,04.2,K,A*12 -Mi, 19. Dez 2012 11:53:57 -$WIMWV,268.0,R,03.5,K,A*1C -$WIMWV,274.0,R,04.0,K,A*13 -Mi, 19. Dez 2012 11:54:02 -$WIMWV,259.0,R,03.5,K,A*1E -$WIMWV,259.0,R,03.7,K,A*1C -Mi, 19. Dez 2012 11:54:07 -$WIMWV,259.0,R,03.9,K,A*12 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:54:12 -Mi, 19. Dez 2012 11:54:17 -Mi, 19. Dez 2012 11:54:22 -$WIMWV,270.0,R,04.2,K,A*15 -$WIMWV,270.0,R,03.5,K,A*15 -Mi, 19. Dez 2012 11:54:27 -Mi, 19. Dez 2012 11:54:32 -$WIMWV,268.0,R,02.5,K,A*1D -Mi, 19. Dez 2012 11:54:37 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:54:42 -$WIMWV,274.0,R,02.2,K,A*17 -$WIMWV,274.0,R,01.6,K,A*10 -Mi, 19. Dez 2012 11:54:48 -Mi, 19. Dez 2012 11:54:53 -$WIMWV,273.0,R,02.7,K,A*15 -$WIMWV,272.0,R,03.2,K,A*10 -Mi, 19. Dez 2012 11:54:58 -$WIMWV,277.0,R,04.1,K,A*11 -$WIMWV,266.0,R,04.4,K,A*14 -Mi, 19. Dez 2012 11:55:03 -$WIMWV,266.0,R,03.7,K,A*10 -Mi, 19. Dez 2012 11:55:08 -$WIBAT,1,5*4D -$WIMWV,262.0,R,03.3,K,A*10 -Mi, 19. Dez 2012 11:55:13 -$WIMWV,256.0,R,03.6,K,A*12 -$WIMWV,259.0,R,03.2,K,A*19 -Mi, 19. Dez 2012 11:55:18 -Mi, 19. Dez 2012 11:55:23 -$WIMWV,153.0,R,03.3,K,A*11 -$WIMWV,153.0,R,17.1,K,A*16 -Mi, 19. Dez 2012 11:55:28 -$WIMWV,157.0,R,19.4,K,A*19 -Mi, 19. Dez 2012 11:55:33 -$WIMWV,150.0,R,19.8,K,A*12 -$WIMWV,155.0,R,19.4,K,A*1B -Mi, 19. Dez 2012 11:55:38 -$WIBAT,1,5*4D -$WIMWV,161.0,R,19.7,K,A*1F -Mi, 19. Dez 2012 11:55:43 -$WIMWV,196.0,R,12.9,K,A*12 -Mi, 19. Dez 2012 11:55:48 -$WIMWV,218.0,R,04.4,K,A*1D -Mi, 19. Dez 2012 11:55:53 -Mi, 19. Dez 2012 11:55:59 -Mi, 19. Dez 2012 11:56:04 -$WIMWV,320.0,R,02.4,K,A*11 -Mi, 19. Dez 2012 11:56:09 -$WIBAT,1,5*4D -$WIMWV,312.0,R,03.2,K,A*17 -Mi, 19. Dez 2012 11:56:14 -$WIMWV,040.0,R,03.0,K,A*11 -Mi, 19. Dez 2012 11:56:19 -$WIMWV,034.0,R,02.2,K,A*11 -Mi, 19. Dez 2012 11:56:24 -$WIMWV,061.0,R,02.2,K,A*11 -Mi, 19. Dez 2012 11:56:29 -$WIMWV,129.0,R,06.7,K,A*1D -Mi, 19. Dez 2012 11:56:34 -$WIMWV,151.0,R,06.8,K,A*1D -Mi, 19. Dez 2012 11:56:39 -$WIBAT,1,5*4D -$WIMWV,078.0,R,06.4,K,A*1B -Mi, 19. Dez 2012 11:56:44 -$WIMWV,062.0,R,02.7,K,A*17 -Mi, 19. Dez 2012 11:56:49 -$WIMWV,078.0,R,02.1,K,A*1A -Mi, 19. Dez 2012 11:56:54 -$WIMWV,071.0,R,03.3,K,A*10 -Mi, 19. Dez 2012 11:56:59 -$WIMWV,127.0,R,20.0,K,A*10 -Mi, 19. Dez 2012 11:57:04 -$WIMWV,132.0,R,26.6,K,A*14 -$WIMWV,133.0,R,26.2,K,A*11 -Mi, 19. Dez 2012 11:57:10 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:57:15 -$WIMWV,133.0,R,27.8,K,A*1A -$WIMWV,126.0,R,24.2,K,A*17 -Mi, 19. Dez 2012 11:57:20 -$WIMWV,113.0,R,20.8,K,A*1F -Mi, 19. Dez 2012 11:57:25 -Mi, 19. Dez 2012 11:57:30 -$WIMWV,134.0,R,09.8,K,A*11 -Mi, 19. Dez 2012 11:57:35 -$WIMWV,254.0,R,04.2,K,A*13 -$WIMWV,205.0,R,03.2,K,A*10 -Mi, 19. Dez 2012 11:57:40 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:57:45 -$WIMWV,263.0,R,03.1,K,A*13 -Mi, 19. Dez 2012 11:57:50 -$WIMWV,260.0,R,03.9,K,A*18 -$WIMWV,260.0,R,03.6,K,A*17 -Mi, 19. Dez 2012 11:57:55 -$WIMWV,259.0,R,03.9,K,A*12 -Mi, 19. Dez 2012 11:58:00 -Mi, 19. Dez 2012 11:58:05 -$WIMWV,257.0,R,03.5,K,A*10 -Mi, 19. Dez 2012 11:58:10 -$WIBAT,1,5*4D -$WIMWV,172.0,R,03.3,K,A*12 -$WIMWV,172.0,R,03.9,K,A*18 -Mi, 19. Dez 2012 11:58:15 -$WIMWV,178.0,R,04.8,K,A*14 -Mi, 19. Dez 2012 11:58:21 -Mi, 19. Dez 2012 11:58:26 -$WIMWV,178.0,R,03.7,K,A*1C -$WIMWV,178.0,R,03.1,K,A*1A -Mi, 19. Dez 2012 11:58:31 -Mi, 19. Dez 2012 11:58:36 -$WIMWV,075.0,R,19.7,K,A*1B -$WIMWV,071.0,R,20.5,K,A*17 -Mi, 19. Dez 2012 11:58:41 -$WIBAT,1,5*4D -$WIMWV,070.0,R,21.2,K,A*10 -Mi, 19. Dez 2012 11:58:46 -Mi, 19. Dez 2012 11:58:51 -$WIMWV,084.0,R,22.4,K,A*1E -$WIMWV,099.0,R,11.1,K,A*17 -Mi, 19. Dez 2012 11:58:56 -$WIMWV,353.0,R,04.6,K,A*11 -Mi, 19. Dez 2012 11:59:01 -$WIMWV,261.0,R,04.4,K,A*13 -Mi, 19. Dez 2012 11:59:06 -$WIMWV,308.0,R,06.1,K,A*1A -Mi, 19. Dez 2012 11:59:11 -$WIBAT,1,5*4D -$WIMWV,355.0,R,04.8,K,A*19 -Mi, 19. Dez 2012 11:59:16 -$WIMWV,001.0,R,03.8,K,A*1C -$WIMWV,027.0,R,03.5,K,A*15 -Mi, 19. Dez 2012 11:59:21 -Mi, 19. Dez 2012 11:59:26 -$WIMWV,354.0,R,05.1,K,A*10 -Mi, 19. Dez 2012 11:59:31 -$WIMWV,334.0,R,04.5,K,A*13 -Mi, 19. Dez 2012 11:59:37 -$WIMWV,334.0,R,04.0,K,A*16 -$WIMWV,345.0,R,03.2,K,A*15 -Mi, 19. Dez 2012 11:59:42 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 11:59:47 -$WIMWV,002.0,R,03.9,K,A*1E -$WIMWV,002.0,R,04.2,K,A*12 -Mi, 19. Dez 2012 11:59:52 -$WIMWV,355.0,R,04.6,K,A*17 -Mi, 19. Dez 2012 11:59:57 -$WIMWV,355.0,R,04.8,K,A*19 -$WIMWV,026.0,R,04.1,K,A*17 -Mi, 19. Dez 2012 12:00:02 -$WIMWV,026.0,R,15.0,K,A*16 -$WIMWV,034.0,R,21.6,K,A*14 -Mi, 19. Dez 2012 12:00:07 -$WIMWV,034.0,R,19.7,K,A*1E -$WIMWV,034.0,R,23.0,K,A*10 -$WIMWV,033.0,R,23.4,K,A*13 -Mi, 19. Dez 2012 12:00:12 -$WIMWV,033.0,R,24.3,K,A*13 -$WIMWV,032.0,R,23.0,K,A*16 -Mi, 19. Dez 2012 12:00:17 -$WIMWV,032.0,R,24.1,K,A*10 -Mi, 19. Dez 2012 12:00:22 -$WIMWV,033.0,R,22.9,K,A*1F -$WIMWV,020.0,R,15.1,K,A*11 -Mi, 19. Dez 2012 12:00:27 -$WIMWV,075.0,R,09.4,K,A*19 -$WIMWV,127.0,R,06.8,K,A*1C -Mi, 19. Dez 2012 12:00:32 -$WIMWV,118.0,R,04.1,K,A*1B -$WIMWV,139.0,R,02.3,K,A*1C -Mi, 19. Dez 2012 12:00:38 -$WIMWV,139.0,R,02.7,K,A*18 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:00:43 -$WIMWV,170.0,R,03.0,K,A*13 -Mi, 19. Dez 2012 12:00:48 -Mi, 19. Dez 2012 12:00:53 -Mi, 19. Dez 2012 12:00:58 -$WIMWV,128.0,R,02.8,K,A*17 -$WIMWV,128.0,R,02.5,K,A*1A -Mi, 19. Dez 2012 12:01:03 -$WIMWV,081.0,R,02.7,K,A*1A -Mi, 19. Dez 2012 12:01:08 -$WIBAT,1,5*4D -$WIMWV,083.0,R,02.9,K,A*16 -Mi, 19. Dez 2012 12:01:13 -$WIMWV,083.0,R,02.3,K,A*1C -Mi, 19. Dez 2012 12:01:18 -$WIMWV,083.0,R,01.9,K,A*15 -Mi, 19. Dez 2012 12:01:23 -Mi, 19. Dez 2012 12:01:28 -Mi, 19. Dez 2012 12:01:33 -$WIMWV,334.0,R,11.6,K,A*14 -Mi, 19. Dez 2012 12:01:38 -$WIBAT,1,5*4D -$WIMWV,340.0,R,19.7,K,A*1E -Mi, 19. Dez 2012 12:01:43 -$WIMWV,342.0,R,19.1,K,A*1A -Mi, 19. Dez 2012 12:01:48 -$WIMWV,341.0,R,20.0,K,A*12 -$WIMWV,342.0,R,18.2,K,A*18 -Mi, 19. Dez 2012 12:01:54 -$WIMWV,342.0,R,19.9,K,A*12 -Mi, 19. Dez 2012 12:01:59 -$WIMWV,032.0,R,04.2,K,A*11 -$WIMWV,037.0,R,03.1,K,A*10 -Mi, 19. Dez 2012 12:02:04 -$WIMWV,183.0,R,00.9,K,A*15 -Mi, 19. Dez 2012 12:02:09 -$WIMWV,183.0,R,04.2,K,A*1A -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:02:14 -$WIMWV,177.0,R,05.2,K,A*10 -Mi, 19. Dez 2012 12:02:19 -Mi, 19. Dez 2012 12:02:24 -$WIMWV,214.0,R,05.7,K,A*13 -$WIMWV,228.0,R,06.8,K,A*10 -Mi, 19. Dez 2012 12:02:29 -$WIMWV,241.0,R,05.9,K,A*1D -$WIMWV,254.0,R,05.3,K,A*13 -Mi, 19. Dez 2012 12:02:34 -$WIMWV,302.0,R,05.3,K,A*11 -$WIMWV,343.0,R,07.6,K,A*13 -Mi, 19. Dez 2012 12:02:39 -$WIMWV,335.0,R,07.0,K,A*14 -$WIBAT,1,5*4D -$WIMWV,292.0,R,07.8,K,A*10 -Mi, 19. Dez 2012 12:02:44 -$WIMWV,254.0,R,08.7,K,A*1A -$WIMWV,229.0,R,06.0,K,A*19 -Mi, 19. Dez 2012 12:02:49 -$WIMWV,265.0,R,05.4,K,A*16 -$WIMWV,265.0,R,05.2,K,A*10 -Mi, 19. Dez 2012 12:02:54 -$WIMWV,252.0,R,06.3,K,A*16 -$WIMWV,256.0,R,05.8,K,A*1A -Mi, 19. Dez 2012 12:02:59 -$WIMWV,256.0,R,05.2,K,A*10 -Mi, 19. Dez 2012 12:03:05 -$WIMWV,313.0,R,13.8,K,A*1D -$WIMWV,316.0,R,22.3,K,A*11 -Mi, 19. Dez 2012 12:03:10 -$WIMWV,315.0,R,23.0,K,A*10 -$WIBAT,1,5*4D -$WIMWV,314.0,R,24.1,K,A*17 -Mi, 19. Dez 2012 12:03:15 -$WIMWV,314.0,R,22.7,K,A*17 -$WIMWV,314.0,R,23.9,K,A*18 -Mi, 19. Dez 2012 12:03:20 -Mi, 19. Dez 2012 12:03:25 -$WIMWV,313.0,R,22.9,K,A*1E -$WIMWV,295.0,R,14.9,K,A*14 -Mi, 19. Dez 2012 12:03:30 -$WIMWV,338.0,R,09.0,K,A*17 -$WIMWV,002.0,R,06.5,K,A*17 -Mi, 19. Dez 2012 12:03:35 -Mi, 19. Dez 2012 12:03:40 -$WIBAT,1,5*4D -$WIMWV,015.0,R,02.6,K,A*16 -Mi, 19. Dez 2012 12:03:45 -$WIMWV,042.0,R,03.3,K,A*10 -$WIMWV,042.0,R,03.4,K,A*17 -Mi, 19. Dez 2012 12:03:50 -Mi, 19. Dez 2012 12:03:55 -$WIMWV,348.0,R,02.1,K,A*1A -$WIMWV,341.0,R,02.4,K,A*16 -Mi, 19. Dez 2012 12:04:00 -$WIMWV,341.0,R,02.3,K,A*11 -Mi, 19. Dez 2012 12:04:05 -$WIMWV,343.0,R,02.1,K,A*11 -$WIMWV,352.0,R,03.6,K,A*17 -Mi, 19. Dez 2012 12:04:10 -$WIBAT,1,5*4D -$WIMWV,338.0,R,03.4,K,A*19 -Mi, 19. Dez 2012 12:04:16 -$WIMWV,347.0,R,03.3,K,A*16 -Mi, 19. Dez 2012 12:04:21 -$WIMWV,340.0,R,03.7,K,A*15 -Mi, 19. Dez 2012 12:04:26 -$WIMWV,351.0,R,02.9,K,A*1A -$WIMWV,349.0,R,02.6,K,A*1C -Mi, 19. Dez 2012 12:04:31 -Mi, 19. Dez 2012 12:04:36 -$WIMWV,352.0,R,02.1,K,A*11 -Mi, 19. Dez 2012 12:04:41 -$WIBAT,1,5*4D -$WIMWV,345.0,R,01.6,K,A*13 -Mi, 19. Dez 2012 12:04:46 -Mi, 19. Dez 2012 12:04:51 -$WIMWV,246.0,R,21.0,K,A*15 -$WIMWV,246.0,R,21.4,K,A*11 -Mi, 19. Dez 2012 12:04:56 -$WIMWV,248.0,R,20.7,K,A*1D -Mi, 19. Dez 2012 12:05:01 -$WIMWV,250.0,R,20.2,K,A*11 -$WIMWV,247.0,R,19.2,K,A*1D -Mi, 19. Dez 2012 12:05:06 -$WIMWV,255.0,R,20.7,K,A*11 -$WIMWV,266.0,R,16.2,K,A*11 -Mi, 19. Dez 2012 12:05:11 -$WIMWV,131.0,R,06.9,K,A*1A -$WIBAT,1,5*4D -$WIMWV,146.0,R,04.8,K,A*19 -Mi, 19. Dez 2012 12:05:16 -$WIMWV,111.0,R,04.2,K,A*11 -Mi, 19. Dez 2012 12:05:21 -$WIMWV,135.0,R,06.3,K,A*14 -$WIMWV,160.0,R,06.0,K,A*17 -Mi, 19. Dez 2012 12:05:27 -$WIMWV,176.0,R,04.9,K,A*1B -$WIMWV,176.0,R,05.1,K,A*12 -Mi, 19. Dez 2012 12:05:32 -$WIMWV,196.0,R,07.1,K,A*1E -Mi, 19. Dez 2012 12:05:37 -$WIMWV,145.0,R,06.1,K,A*11 -Mi, 19. Dez 2012 12:05:42 -$WIMWV,151.0,R,03.2,K,A*12 -$WIBAT,1,5*4D -$WIMWV,152.0,R,03.3,K,A*10 -Mi, 19. Dez 2012 12:05:47 -$WIMWV,160.0,R,03.9,K,A*1B -Mi, 19. Dez 2012 12:05:52 -Mi, 19. Dez 2012 12:05:57 -Mi, 19. Dez 2012 12:06:02 -$WIMWV,216.0,R,08.2,K,A*19 -$WIMWV,216.0,R,22.9,K,A*1A -Mi, 19. Dez 2012 12:06:07 -$WIMWV,219.0,R,24.8,K,A*12 -$WIMWV,216.0,R,24.8,K,A*1D -$WIMWV,213.0,R,25.4,K,A*15 -Mi, 19. Dez 2012 12:06:12 -$WIMWV,219.0,R,24.1,K,A*1B -$WIBAT,1,5*4D -$WIMWV,215.0,R,23.6,K,A*17 -Mi, 19. Dez 2012 12:06:17 -$WIMWV,219.0,R,24.7,K,A*1D -$WIMWV,218.0,R,23.6,K,A*1A -Mi, 19. Dez 2012 12:06:22 -$WIMWV,213.0,R,22.9,K,A*1F -$WIMWV,213.0,R,16.4,K,A*15 -Mi, 19. Dez 2012 12:06:28 -$WIMWV,355.0,R,03.7,K,A*11 -Mi, 19. Dez 2012 12:06:33 -$WIMWV,356.0,R,03.8,K,A*1D -$WIMWV,347.0,R,04.3,K,A*11 -Mi, 19. Dez 2012 12:06:38 -Mi, 19. Dez 2012 12:06:43 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:06:48 -$WIMWV,302.0,R,03.6,K,A*12 -Mi, 19. Dez 2012 12:06:53 -$WIMWV,273.0,R,04.0,K,A*14 -$WIMWV,268.0,R,04.9,K,A*17 -Mi, 19. Dez 2012 12:06:58 -$WIMWV,240.0,R,04.0,K,A*14 -$WIMWV,239.0,R,04.3,K,A*19 -Mi, 19. Dez 2012 12:07:03 -Mi, 19. Dez 2012 12:07:08 -$WIMWV,258.0,R,02.9,K,A*12 -Mi, 19. Dez 2012 12:07:13 -$WIBAT,1,5*4D -$WIMWV,277.0,R,04.3,K,A*13 -Mi, 19. Dez 2012 12:07:18 -$WIMWV,326.0,R,04.0,K,A*15 -Mi, 19. Dez 2012 12:07:23 -$WIMWV,135.0,R,03.7,K,A*15 -$WIMWV,099.0,R,04.6,K,A*14 -Mi, 19. Dez 2012 12:07:28 -$WIMWV,098.0,R,04.9,K,A*1A -$WIMWV,182.0,R,05.2,K,A*1A -Mi, 19. Dez 2012 12:07:34 -$WIMWV,214.0,R,08.8,K,A*11 -$WIMWV,225.0,R,12.0,K,A*10 -Mi, 19. Dez 2012 12:07:39 -$WIMWV,230.0,R,11.2,K,A*15 -$WIMWV,224.0,R,12.5,K,A*14 -Mi, 19. Dez 2012 12:07:44 -$WIMWV,240.0,R,10.8,K,A*19 -$WIBAT,1,5*4D -$WIMWV,259.0,R,09.4,K,A*15 -Mi, 19. Dez 2012 12:07:49 -$WIMWV,234.0,R,06.5,K,A*10 -Mi, 19. Dez 2012 12:07:54 -$WIMWV,199.0,R,05.9,K,A*1B -$WIMWV,238.0,R,10.0,K,A*1E -Mi, 19. Dez 2012 12:07:59 -$WIMWV,255.0,R,09.8,K,A*15 -$WIMWV,291.0,R,08.4,K,A*10 -Mi, 19. Dez 2012 12:08:04 -$WIMWV,248.0,R,06.0,K,A*1E -$WIMWV,175.0,R,02.9,K,A*1E -Mi, 19. Dez 2012 12:08:09 -$WIMWV,175.0,R,03.7,K,A*11 -Mi, 19. Dez 2012 12:08:14 -$WIBAT,1,5*4D -$WIMWV,268.0,R,07.5,K,A*18 -Mi, 19. Dez 2012 12:08:19 -Mi, 19. Dez 2012 12:08:24 -$WIMWV,181.0,R,04.9,K,A*13 -Mi, 19. Dez 2012 12:08:29 -Mi, 19. Dez 2012 12:08:34 -$WIMWV,146.0,R,02.9,K,A*1E -Mi, 19. Dez 2012 12:08:39 -Mi, 19. Dez 2012 12:08:45 -$WIMWV,165.0,R,04.2,K,A*12 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:08:50 -$WIMWV,209.0,R,05.6,K,A*1E -$WIMWV,258.0,R,06.4,K,A*1B -Mi, 19. Dez 2012 12:08:55 -$WIMWV,278.0,R,06.4,K,A*19 -$WIMWV,310.0,R,06.5,K,A*17 -Mi, 19. Dez 2012 12:09:00 -$WIMWV,310.0,R,04.6,K,A*16 -$WIMWV,337.0,R,02.7,K,A*14 -Mi, 19. Dez 2012 12:09:05 -$WIMWV,155.0,R,03.1,K,A*15 -Mi, 19. Dez 2012 12:09:10 -$WIMWV,181.0,R,04.9,K,A*13 -$WIMWV,208.0,R,05.5,K,A*1C -Mi, 19. Dez 2012 12:09:15 -$WIMWV,240.0,R,06.3,K,A*15 -$WIBAT,1,5*4D -$WIMWV,269.0,R,06.3,K,A*1E -Mi, 19. Dez 2012 12:09:20 -$WIMWV,304.0,R,04.7,K,A*12 -Mi, 19. Dez 2012 12:09:25 -$WIMWV,323.0,R,03.8,K,A*1F -$WIMWV,124.0,R,01.7,K,A*17 -Mi, 19. Dez 2012 12:09:30 -$WIMWV,180.0,R,03.6,K,A*1A -Mi, 19. Dez 2012 12:09:35 -$WIMWV,206.0,R,06.2,K,A*16 -$WIMWV,231.0,R,06.5,K,A*15 -Mi, 19. Dez 2012 12:09:40 -$WIMWV,325.0,R,04.9,K,A*1F -Mi, 19. Dez 2012 12:09:45 -$WIBAT,1,5*4D -$WIMWV,001.0,R,04.3,K,A*10 -Mi, 19. Dez 2012 12:09:50 -$WIMWV,001.0,R,02.2,K,A*17 -Mi, 19. Dez 2012 12:09:55 -$WIMWV,194.0,R,05.9,K,A*16 -Mi, 19. Dez 2012 12:10:01 -$WIMWV,221.0,R,06.2,K,A*13 -Mi, 19. Dez 2012 12:10:06 -$WIMWV,285.0,R,05.4,K,A*18 -$WIMWV,306.0,R,04.1,K,A*16 -Mi, 19. Dez 2012 12:10:11 -$WIMWV,331.0,R,03.0,K,A*14 -Mi, 19. Dez 2012 12:10:16 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:10:21 -$WIMWV,224.0,R,08.0,K,A*1A -Mi, 19. Dez 2012 12:10:26 -$WIMWV,269.0,R,05.2,K,A*1C -Mi, 19. Dez 2012 12:10:31 -$WIMWV,346.0,R,04.5,K,A*16 -Mi, 19. Dez 2012 12:10:36 -$WIMWV,161.0,R,02.3,K,A*11 -Mi, 19. Dez 2012 12:10:41 -$WIMWV,172.0,R,03.6,K,A*17 -$WIMWV,208.0,R,07.8,K,A*13 -Mi, 19. Dez 2012 12:10:46 -$WIBAT,1,5*4D -$WIMWV,239.0,R,07.4,K,A*1D -$WIMWV,212.0,R,09.3,K,A*1D -Mi, 19. Dez 2012 12:10:51 -$WIMWV,219.0,R,11.1,K,A*1D -$WIMWV,199.0,R,09.8,K,A*16 -Mi, 19. Dez 2012 12:10:56 -$WIMWV,199.0,R,10.9,K,A*1F -$WIMWV,199.0,R,07.7,K,A*17 -Mi, 19. Dez 2012 12:11:01 -$WIMWV,215.0,R,06.8,K,A*1E -$WIMWV,221.0,R,05.4,K,A*16 -Mi, 19. Dez 2012 12:11:06 -$WIMWV,200.0,R,06.4,K,A*16 -$WIMWV,180.0,R,07.3,K,A*1B -Mi, 19. Dez 2012 12:11:12 -$WIMWV,180.0,R,04.4,K,A*1F -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:11:17 -$WIMWV,182.0,R,01.9,K,A*15 -$WIMWV,246.0,R,04.1,K,A*13 -Mi, 19. Dez 2012 12:11:22 -$WIMWV,238.0,R,09.1,K,A*17 -$WIMWV,238.0,R,11.7,K,A*18 -Mi, 19. Dez 2012 12:11:27 -Mi, 19. Dez 2012 12:11:32 -$WIMWV,259.0,R,13.2,K,A*18 -$WIMWV,263.0,R,10.1,K,A*11 -Mi, 19. Dez 2012 12:11:37 -$WIMWV,243.0,R,05.3,K,A*15 -$WIMWV,243.0,R,02.6,K,A*17 -Mi, 19. Dez 2012 12:11:42 -$WIMWV,270.0,R,03.1,K,A*11 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:11:47 -$WIMWV,238.0,R,02.9,K,A*14 -$WIMWV,256.0,R,01.8,K,A*1E -Mi, 19. Dez 2012 12:11:52 -$WIMWV,244.0,R,01.8,K,A*1D -Mi, 19. Dez 2012 12:11:57 -$WIMWV,208.0,R,02.9,K,A*17 -$WIMWV,190.0,R,05.2,K,A*19 -Mi, 19. Dez 2012 12:12:02 -$WIMWV,300.0,R,02.2,K,A*15 -Mi, 19. Dez 2012 12:12:07 -$WIMWV,273.0,R,03.2,K,A*11 -$WIMWV,254.0,R,04.1,K,A*10 -Mi, 19. Dez 2012 12:12:13 -$WIMWV,174.0,R,03.0,K,A*17 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:12:18 -$WIMWV,157.0,R,03.8,K,A*1E -$WIMWV,144.0,R,02.6,K,A*13 -Mi, 19. Dez 2012 12:12:23 -$WIMWV,341.0,R,01.1,K,A*10 -Mi, 19. Dez 2012 12:12:28 -$WIMWV,341.0,R,03.6,K,A*15 -$WIMWV,245.0,R,04.1,K,A*10 -Mi, 19. Dez 2012 12:12:33 -$WIMWV,268.0,R,04.2,K,A*1C -Mi, 19. Dez 2012 12:12:38 -$WIMWV,206.0,R,03.7,K,A*16 -$WIMWV,174.0,R,05.0,K,A*11 -Mi, 19. Dez 2012 12:12:43 -$WIBAT,1,5*4D -$WIMWV,298.0,R,01.7,K,A*13 -Mi, 19. Dez 2012 12:12:48 -$WIMWV,326.0,R,03.1,K,A*13 -Mi, 19. Dez 2012 12:12:53 -$WIMWV,297.0,R,05.7,K,A*18 -$WIMWV,243.0,R,05.6,K,A*10 -Mi, 19. Dez 2012 12:12:58 -$WIMWV,235.0,R,05.2,K,A*15 -$WIMWV,194.0,R,04.4,K,A*1A -Mi, 19. Dez 2012 12:13:03 -$WIMWV,160.0,R,05.3,K,A*17 -$WIMWV,111.0,R,04.3,K,A*10 -Mi, 19. Dez 2012 12:13:08 -$WIMWV,343.0,R,01.9,K,A*1A -Mi, 19. Dez 2012 12:13:14 -$WIMWV,329.0,R,01.9,K,A*16 -$WIBAT,1,5*4D -$WIMWV,296.0,R,03.1,K,A*19 -Mi, 19. Dez 2012 12:13:19 -$WIMWV,266.0,R,03.2,K,A*15 -Mi, 19. Dez 2012 12:13:24 -$WIMWV,213.0,R,03.9,K,A*1C -$WIMWV,213.0,R,04.7,K,A*15 -Mi, 19. Dez 2012 12:13:29 -$WIMWV,186.0,R,04.6,K,A*1B -$WIMWV,241.0,R,03.6,K,A*14 -Mi, 19. Dez 2012 12:13:34 -$WIMWV,259.0,R,04.8,K,A*14 -$WIMWV,250.0,R,12.2,K,A*10 -Mi, 19. Dez 2012 12:13:39 -$WIMWV,219.0,R,09.2,K,A*17 -Mi, 19. Dez 2012 12:13:44 -$WIMWV,212.0,R,10.4,K,A*12 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:13:49 -$WIMWV,226.0,R,10.9,K,A*18 -$WIMWV,226.0,R,13.7,K,A*15 -Mi, 19. Dez 2012 12:13:54 -$WIMWV,225.0,R,10.2,K,A*10 -Mi, 19. Dez 2012 12:13:59 -$WIMWV,234.0,R,15.5,K,A*12 -Mi, 19. Dez 2012 12:14:04 -$WIMWV,235.0,R,13.3,K,A*13 -$WIMWV,240.0,R,11.1,K,A*11 -Mi, 19. Dez 2012 12:14:09 -$WIMWV,233.0,R,07.5,K,A*16 -Mi, 19. Dez 2012 12:14:14 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:14:20 -Mi, 19. Dez 2012 12:14:25 -Mi, 19. Dez 2012 12:14:30 -$WIMWV,284.0,R,00.0,K,A*18 -Mi, 19. Dez 2012 12:14:35 -$WIMWV,284.0,R,00.0,K,A*18 -$WIMWV,084.0,R,00.0,K,A*1A -Mi, 19. Dez 2012 12:14:40 -$WIMWV,087.0,R,00.0,K,A*19 -Mi, 19. Dez 2012 12:14:45 -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:14:50 -Mi, 19. Dez 2012 12:14:55 -$WIMWV,089.0,R,00.0,K,A*17 -Mi, 19. Dez 2012 12:15:00 -Mi, 19. Dez 2012 12:15:05 -Mi, 19. Dez 2012 12:15:10 -Mi, 19. Dez 2012 12:15:15 -$WIMWV,090.0,R,00.0,K,A*1F -$WIBAT,1,5*4D -Mi, 19. Dez 2012 12:15:20 -Mi, 19. Dez 2012 12:15:25 -Mi, 19. Dez 2012 12:20:30 -Mi, 19. Dez 2012 12:20:35 -Mi, 19. Dez 2012 12:20:40 -Mi, 19. Dez 2012 12:20:45 -Mi, 19. Dez 2012 12:20:50 -Mi, 19. Dez 2012 12:20:55 -Mi, 19. Dez 2012 12:21:00 -Mi, 19. Dez 2012 12:21:05 -Mi, 19. Dez 2012 12:21:10 -Mi, 19. Dez 2012 12:21:15 -Mi, 19. Dez 2012 12:21:20 -Mi, 19. Dez 2012 12:21:26 -Mi, 19. Dez 2012 12:21:31 -Mi, 19. Dez 2012 12:21:36 -Mi, 19. Dez 2012 12:21:41 -Mi, 19. Dez 2012 12:21:46 -Mi, 19. Dez 2012 12:21:51 -Mi, 19. Dez 2012 12:21:56 -Mi, 19. Dez 2012 12:22:01 -Mi, 19. Dez 2012 12:22:06 -Mi, 19. Dez 2012 12:22:11 -Mi, 19. Dez 2012 12:22:16 -Mi, 19. Dez 2012 12:22:21 -Mi, 19. Dez 2012 12:22:26 -Mi, 19. Dez 2012 12:22:31 -Mi, 19. Dez 2012 12:22:36 -Mi, 19. Dez 2012 12:22:41 -Mi, 19. Dez 2012 12:22:46 -Mi, 19. Dez 2012 12:22:52 -Mi, 19. Dez 2012 12:22:57 -Mi, 19. Dez 2012 12:23:02 -Mi, 19. Dez 2012 12:23:07 -Mi, 19. Dez 2012 12:23:12 -Mi, 19. Dez 2012 12:23:17 -Mi, 19. Dez 2012 12:23:22 -Mi, 19. Dez 2012 12:23:27 -Mi, 19. Dez 2012 12:23:32 -Mi, 19. Dez 2012 12:23:37 -Mi, 19. Dez 2012 12:23:42 -Mi, 19. Dez 2012 12:23:47 -Mi, 19. Dez 2012 12:23:52 -Mi, 19. Dez 2012 12:23:58 -Mi, 19. Dez 2012 12:24:03 -Mi, 19. Dez 2012 12:24:08 -Mi, 19. Dez 2012 12:24:13 -Mi, 19. Dez 2012 12:24:18 -Mi, 19. Dez 2012 12:24:23 -Mi, 19. Dez 2012 12:24:28 -Mi, 19. Dez 2012 12:24:33 -Mi, 19. Dez 2012 12:24:38 -Mi, 19. Dez 2012 12:24:43 -Mi, 19. Dez 2012 12:24:48 -Mi, 19. Dez 2012 12:24:53 -Mi, 19. Dez 2012 12:24:58 -Mi, 19. Dez 2012 12:25:03 -Mi, 19. Dez 2012 12:25:08 -Mi, 19. Dez 2012 12:25:13 -Mi, 19. Dez 2012 12:25:18 -Mi, 19. Dez 2012 12:25:23 -Mi, 19. Dez 2012 12:25:29 -Mi, 19. Dez 2012 12:25:34 -Mi, 19. Dez 2012 12:25:39 -Mi, 19. Dez 2012 12:25:44 -Mi, 19. Dez 2012 12:25:49 -Mi, 19. Dez 2012 12:25:54 -Mi, 19. Dez 2012 12:25:59 -Mi, 19. Dez 2012 12:26:04 -Mi, 19. Dez 2012 12:26:09 -Mi, 19. Dez 2012 12:26:14 -Mi, 19. Dez 2012 12:26:19 -Mi, 19. Dez 2012 12:26:24 -Mi, 19. Dez 2012 12:26:29 -Mi, 19. Dez 2012 12:26:34 -Mi, 19. Dez 2012 12:26:39 -Mi, 19. Dez 2012 12:26:45 -Mi, 19. Dez 2012 12:26:50 -Mi, 19. Dez 2012 12:26:55 -Mi, 19. Dez 2012 12:27:00 -Mi, 19. Dez 2012 12:27:05 -Mi, 19. Dez 2012 12:27:10 -Mi, 19. Dez 2012 12:27:15 -Mi, 19. Dez 2012 12:27:20 -Mi, 19. Dez 2012 12:27:25 -Mi, 19. Dez 2012 12:27:30 -Mi, 19. Dez 2012 12:27:35 -Mi, 19. Dez 2012 12:27:40 -Mi, 19. Dez 2012 12:27:45 -Mi, 19. Dez 2012 12:27:50 -Mi, 19. Dez 2012 12:27:55 -Mi, 19. Dez 2012 12:28:00 -Mi, 19. Dez 2012 12:28:05 -Mi, 19. Dez 2012 12:28:11 -Mi, 19. Dez 2012 12:28:16 -Mi, 19. Dez 2012 12:28:21 -Mi, 19. Dez 2012 12:28:26 -Mi, 19. Dez 2012 12:28:31 -Mi, 19. Dez 2012 12:28:36 -Mi, 19. Dez 2012 12:28:41 -Mi, 19. Dez 2012 12:28:46 -Mi, 19. Dez 2012 12:28:51 -Mi, 19. Dez 2012 12:28:56 -Mi, 19. Dez 2012 12:29:01 -Mi, 19. Dez 2012 12:29:06 -Mi, 19. Dez 2012 12:29:11 -Mi, 19. Dez 2012 12:29:16 -Mi, 19. Dez 2012 12:29:21 -Mi, 19. Dez 2012 12:29:26 -Mi, 19. Dez 2012 12:29:32 -Mi, 19. Dez 2012 12:29:37 -Mi, 19. Dez 2012 12:29:42 -Mi, 19. Dez 2012 12:29:47 -Mi, 19. Dez 2012 12:29:52 -Mi, 19. Dez 2012 12:29:57 -Mi, 19. Dez 2012 12:30:02 -Mi, 19. Dez 2012 12:30:07 -Mi, 19. Dez 2012 12:30:12 -Mi, 19. Dez 2012 12:30:17 -Mi, 19. Dez 2012 12:30:22 -Mi, 19. Dez 2012 12:30:27 -Mi, 19. Dez 2012 12:30:32 -Mi, 19. Dez 2012 12:30:37 -Mi, 19. Dez 2012 12:30:43 -Mi, 19. Dez 2012 12:30:48 -Mi, 19. Dez 2012 12:30:53 -Mi, 19. Dez 2012 12:30:58 -Mi, 19. Dez 2012 12:31:03 -Mi, 19. Dez 2012 12:31:08 -Mi, 19. Dez 2012 12:31:13 -Mi, 19. Dez 2012 12:31:18 -Mi, 19. Dez 2012 12:31:23 -Mi, 19. Dez 2012 12:31:28 -Mi, 19. Dez 2012 12:31:33 -Mi, 19. Dez 2012 12:31:38 -Mi, 19. Dez 2012 12:31:43 -Mi, 19. Dez 2012 12:31:49 -Mi, 19. Dez 2012 12:31:54 -Mi, 19. Dez 2012 12:31:59 -Mi, 19. Dez 2012 12:32:04 -Mi, 19. Dez 2012 12:32:09 -Mi, 19. Dez 2012 12:32:14 -Mi, 19. Dez 2012 12:32:19 -Mi, 19. Dez 2012 12:32:24 -Mi, 19. Dez 2012 12:32:29 -Mi, 19. Dez 2012 12:32:34 -Mi, 19. Dez 2012 12:32:39 -Mi, 19. Dez 2012 12:32:44 -Mi, 19. Dez 2012 12:32:50 -Mi, 19. Dez 2012 12:32:55 -Mi, 19. Dez 2012 12:33:00 -Mi, 19. Dez 2012 12:33:05 -Mi, 19. Dez 2012 12:33:10 -Mi, 19. Dez 2012 12:33:15 -Mi, 19. Dez 2012 12:33:20 -Mi, 19. Dez 2012 12:33:25 -Mi, 19. Dez 2012 12:33:30 -Mi, 19. Dez 2012 12:33:35 -Mi, 19. Dez 2012 12:33:40 -Mi, 19. Dez 2012 12:33:45 -Mi, 19. Dez 2012 12:33:50 -Mi, 19. Dez 2012 12:33:55 -Mi, 19. Dez 2012 12:34:00 -Mi, 19. Dez 2012 12:34:06 -Mi, 19. Dez 2012 12:34:11 -Mi, 19. Dez 2012 12:34:16 -Mi, 19. Dez 2012 12:34:21 -Mi, 19. Dez 2012 12:34:26 -Mi, 19. Dez 2012 12:34:31 -Mi, 19. Dez 2012 12:34:36 -Mi, 19. Dez 2012 12:34:41 -Mi, 19. Dez 2012 12:34:46 -Mi, 19. Dez 2012 12:34:51 -Mi, 19. Dez 2012 12:34:56 -Mi, 19. Dez 2012 12:35:01 -Mi, 19. Dez 2012 12:35:06 -Mi, 19. Dez 2012 12:35:11 -Mi, 19. Dez 2012 12:35:17 -Mi, 19. Dez 2012 12:35:22 -Mi, 19. Dez 2012 12:35:27 -Mi, 19. Dez 2012 12:35:32 -Mi, 19. Dez 2012 12:35:37 -Mi, 19. Dez 2012 12:35:42 -Mi, 19. Dez 2012 12:35:47 -Mi, 19. Dez 2012 12:35:52 -Mi, 19. Dez 2012 12:35:57 -Mi, 19. Dez 2012 12:36:02 -Mi, 19. Dez 2012 12:36:07 -Mi, 19. Dez 2012 12:36:12 -Mi, 19. Dez 2012 12:36:17 -Mi, 19. Dez 2012 12:36:22 -Mi, 19. Dez 2012 12:36:28 -Mi, 19. Dez 2012 12:36:33 -Mi, 19. Dez 2012 12:36:38 -Mi, 19. Dez 2012 12:36:43 -Mi, 19. Dez 2012 12:36:48 -Mi, 19. Dez 2012 12:36:53 -Mi, 19. Dez 2012 12:36:58 -Mi, 19. Dez 2012 12:37:03 -Mi, 19. Dez 2012 12:37:08 -Mi, 19. Dez 2012 12:37:13 -Mi, 19. Dez 2012 12:37:18 -Mi, 19. Dez 2012 12:37:23 -Mi, 19. Dez 2012 12:37:28 -Mi, 19. Dez 2012 12:37:34 -Mi, 19. Dez 2012 12:37:39 -Mi, 19. Dez 2012 12:37:44 -Mi, 19. Dez 2012 12:37:49 -Mi, 19. Dez 2012 12:37:54 -Mi, 19. Dez 2012 12:37:59 -Mi, 19. Dez 2012 12:38:04 -Mi, 19. Dez 2012 12:38:09 -Mi, 19. Dez 2012 12:38:14 -Mi, 19. Dez 2012 12:38:19 -Mi, 19. Dez 2012 12:38:24 -Mi, 19. Dez 2012 12:38:29 -Mi, 19. Dez 2012 12:38:34 -Mi, 19. Dez 2012 12:38:40 -Mi, 19. Dez 2012 12:38:45 -Mi, 19. Dez 2012 12:38:50 -Mi, 19. Dez 2012 12:38:55 -Mi, 19. Dez 2012 12:39:00 -Mi, 19. Dez 2012 12:39:05 -Mi, 19. Dez 2012 12:39:10 -Mi, 19. Dez 2012 12:39:15 -Mi, 19. Dez 2012 12:39:20 -Mi, 19. Dez 2012 12:39:25 -Mi, 19. Dez 2012 12:39:30 -Mi, 19. Dez 2012 12:39:35 -Mi, 19. Dez 2012 12:39:40 -Mi, 19. Dez 2012 12:39:45 -Mi, 19. Dez 2012 12:39:51 -Mi, 19. Dez 2012 12:39:56 -Mi, 19. Dez 2012 12:40:01 -Mi, 19. Dez 2012 12:40:06 -Mi, 19. Dez 2012 12:40:11 -Mi, 19. Dez 2012 12:40:16 -Mi, 19. Dez 2012 12:40:21 -Mi, 19. Dez 2012 12:40:26 -Mi, 19. Dez 2012 12:40:31 -Mi, 19. Dez 2012 12:40:36 -Mi, 19. Dez 2012 12:40:41 -Mi, 19. Dez 2012 12:40:46 -Mi, 19. Dez 2012 12:40:51 -Mi, 19. Dez 2012 12:40:57 -Mi, 19. Dez 2012 12:41:02 -Mi, 19. Dez 2012 12:41:07 -Mi, 19. Dez 2012 12:41:12 -Mi, 19. Dez 2012 12:41:17 -Mi, 19. Dez 2012 12:41:22 -Mi, 19. Dez 2012 12:41:27 -Mi, 19. Dez 2012 12:41:32 -Mi, 19. Dez 2012 12:41:37 -Mi, 19. Dez 2012 12:41:42 -Mi, 19. Dez 2012 12:41:47 -Mi, 19. Dez 2012 12:41:52 -Mi, 19. Dez 2012 12:41:57 -Mi, 19. Dez 2012 12:42:02 -Mi, 19. Dez 2012 12:42:08 -Mi, 19. Dez 2012 12:42:13 -Mi, 19. Dez 2012 12:42:18 -Mi, 19. Dez 2012 12:42:23 -Mi, 19. Dez 2012 12:42:28 -Mi, 19. Dez 2012 12:42:33 -Mi, 19. Dez 2012 12:42:38 -Mi, 19. Dez 2012 12:42:43 -Mi, 19. Dez 2012 12:42:48 -Mi, 19. Dez 2012 12:42:53 -Mi, 19. Dez 2012 12:42:58 -Mi, 19. Dez 2012 12:43:03 -Mi, 19. Dez 2012 12:43:08 -Mi, 19. Dez 2012 12:43:13 -Mi, 19. Dez 2012 12:43:18 -Mi, 19. Dez 2012 12:43:24 -Mi, 19. Dez 2012 12:43:29 -Mi, 19. Dez 2012 12:43:34 -Mi, 19. Dez 2012 12:43:39 -Mi, 19. Dez 2012 12:43:44 -Mi, 19. Dez 2012 12:43:49 -Mi, 19. Dez 2012 12:43:54 -Mi, 19. Dez 2012 12:43:59 -Mi, 19. Dez 2012 12:44:04 -Mi, 19. Dez 2012 12:44:09 -Mi, 19. Dez 2012 12:44:14 -Mi, 19. Dez 2012 12:44:19 -Mi, 19. Dez 2012 12:44:24 -Mi, 19. Dez 2012 12:44:30 -Mi, 19. Dez 2012 12:44:35 -Mi, 19. Dez 2012 12:44:40 -Mi, 19. Dez 2012 12:44:45 -Mi, 19. Dez 2012 12:44:50 -Mi, 19. Dez 2012 12:44:55 -Mi, 19. Dez 2012 12:45:00 -Mi, 19. Dez 2012 12:45:05 -Mi, 19. Dez 2012 12:45:10 -Mi, 19. Dez 2012 12:45:15 -Mi, 19. Dez 2012 12:45:20 -Mi, 19. Dez 2012 12:45:25 -Mi, 19. Dez 2012 12:45:30 -Mi, 19. Dez 2012 12:45:36 -Mi, 19. Dez 2012 12:45:41 -Mi, 19. Dez 2012 12:45:46 -Mi, 19. Dez 2012 12:45:51 -Mi, 19. Dez 2012 12:45:56 -Mi, 19. Dez 2012 12:46:01 -Mi, 19. Dez 2012 12:46:06 -Mi, 19. Dez 2012 12:46:11 -Mi, 19. Dez 2012 12:46:16 -Mi, 19. Dez 2012 12:46:21 -Mi, 19. Dez 2012 12:46:26 -Mi, 19. Dez 2012 12:46:31 -Mi, 19. Dez 2012 12:46:36 -Mi, 19. Dez 2012 12:46:42 -Mi, 19. Dez 2012 12:46:47 -Mi, 19. Dez 2012 12:46:52 -Mi, 19. Dez 2012 12:46:57 -Mi, 19. Dez 2012 12:47:02 -Mi, 19. Dez 2012 12:47:07 -Mi, 19. Dez 2012 12:47:12 -Mi, 19. Dez 2012 12:47:17 -Mi, 19. Dez 2012 12:47:22 -Mi, 19. Dez 2012 12:47:27 -Mi, 19. Dez 2012 12:47:32 -Mi, 19. Dez 2012 12:47:37 -Mi, 19. Dez 2012 12:47:42 -Mi, 19. Dez 2012 12:47:48 -Mi, 19. Dez 2012 12:47:53 -Mi, 19. Dez 2012 12:47:58 -Mi, 19. Dez 2012 12:48:03 -Mi, 19. Dez 2012 12:48:08 -Mi, 19. Dez 2012 12:48:13 -Mi, 19. Dez 2012 12:48:18 -Mi, 19. Dez 2012 12:48:23 -Mi, 19. Dez 2012 12:48:28 -Mi, 19. Dez 2012 12:48:33 -Mi, 19. Dez 2012 12:48:38 -Mi, 19. Dez 2012 12:48:43 -Mi, 19. Dez 2012 12:48:48 -Mi, 19. Dez 2012 12:48:53 -Mi, 19. Dez 2012 12:48:59 -Mi, 19. Dez 2012 12:49:04 -Mi, 19. Dez 2012 12:49:09 -Mi, 19. Dez 2012 12:49:14 -Mi, 19. Dez 2012 12:49:19 -Mi, 19. Dez 2012 12:49:24 -Mi, 19. Dez 2012 12:49:29 -Mi, 19. Dez 2012 12:49:34 -Mi, 19. Dez 2012 12:49:39 -Mi, 19. Dez 2012 12:49:44 -Mi, 19. Dez 2012 12:49:49 -Mi, 19. Dez 2012 12:49:54 -Mi, 19. Dez 2012 12:49:59 -Mi, 19. Dez 2012 12:50:05 -Mi, 19. Dez 2012 12:50:10 -Mi, 19. Dez 2012 12:50:15 -Mi, 19. Dez 2012 12:50:20 -Mi, 19. Dez 2012 12:50:25 -Mi, 19. Dez 2012 12:50:30 -Mi, 19. Dez 2012 12:50:35 -Mi, 19. Dez 2012 12:50:40 -Mi, 19. Dez 2012 12:50:45 -Mi, 19. Dez 2012 12:50:50 -Mi, 19. Dez 2012 12:50:55 -Mi, 19. Dez 2012 12:51:00 -Mi, 19. Dez 2012 12:51:06 -Mi, 19. Dez 2012 12:51:11 -Mi, 19. Dez 2012 12:51:16 -Mi, 19. Dez 2012 12:51:21 -Mi, 19. Dez 2012 12:51:26 -Mi, 19. Dez 2012 12:51:31 -Mi, 19. Dez 2012 12:51:36 -Mi, 19. Dez 2012 12:51:41 -Mi, 19. Dez 2012 12:51:46 -Mi, 19. Dez 2012 12:51:51 -Mi, 19. Dez 2012 12:51:56 -Mi, 19. Dez 2012 12:52:01 -Mi, 19. Dez 2012 12:52:06 -Mi, 19. Dez 2012 12:52:12 -Mi, 19. Dez 2012 12:52:17 -Mi, 19. Dez 2012 12:52:22 -Mi, 19. Dez 2012 12:52:27 -Mi, 19. Dez 2012 12:52:32 -Mi, 19. Dez 2012 12:52:37 -Mi, 19. Dez 2012 12:52:42 -Mi, 19. Dez 2012 12:52:47 -Mi, 19. Dez 2012 12:52:52 -Mi, 19. Dez 2012 12:52:57 -Mi, 19. Dez 2012 12:53:02 -Mi, 19. Dez 2012 12:53:07 -Mi, 19. Dez 2012 12:53:12 -Mi, 19. Dez 2012 12:53:17 -Mi, 19. Dez 2012 12:53:23 -Mi, 19. Dez 2012 12:53:28 -Mi, 19. Dez 2012 12:53:33 -Mi, 19. Dez 2012 12:53:38 -Mi, 19. Dez 2012 12:53:43 -Mi, 19. Dez 2012 12:53:48 -Mi, 19. Dez 2012 12:53:53 -Mi, 19. Dez 2012 12:53:58 -Mi, 19. Dez 2012 12:54:03 -Mi, 19. Dez 2012 12:54:08 -Mi, 19. Dez 2012 12:54:13 -Mi, 19. Dez 2012 12:54:18 -Mi, 19. Dez 2012 12:54:23 -Mi, 19. Dez 2012 12:54:28 -Mi, 19. Dez 2012 12:54:34 -Mi, 19. Dez 2012 12:54:39 -Mi, 19. Dez 2012 12:54:44 -Mi, 19. Dez 2012 12:54:49 -Mi, 19. Dez 2012 12:54:54 -Mi, 19. Dez 2012 12:54:59 -Mi, 19. Dez 2012 12:55:04 -Mi, 19. Dez 2012 12:55:09 -Mi, 19. Dez 2012 12:55:14 -Mi, 19. Dez 2012 12:55:19 -Mi, 19. Dez 2012 12:55:24 -Mi, 19. Dez 2012 12:55:29 -Mi, 19. Dez 2012 12:55:34 -Mi, 19. Dez 2012 12:55:40 -Mi, 19. Dez 2012 12:55:45 -Mi, 19. Dez 2012 12:55:50 -Mi, 19. Dez 2012 12:55:55 -Mi, 19. Dez 2012 12:56:00 -Mi, 19. Dez 2012 12:56:05 -Mi, 19. Dez 2012 12:56:10 -Mi, 19. Dez 2012 12:56:15 -Mi, 19. Dez 2012 12:56:20 -Mi, 19. Dez 2012 12:56:25 -Mi, 19. Dez 2012 12:56:30 -Mi, 19. Dez 2012 12:56:35 -Mi, 19. Dez 2012 12:56:40 -Mi, 19. Dez 2012 12:56:46 -Mi, 19. Dez 2012 12:56:51 -Mi, 19. Dez 2012 12:56:56 -Mi, 19. Dez 2012 12:57:01 -Mi, 19. Dez 2012 12:57:06 -Mi, 19. Dez 2012 12:57:11 -Mi, 19. Dez 2012 12:57:16 -Mi, 19. Dez 2012 12:57:21 -Mi, 19. Dez 2012 12:57:26 -Mi, 19. Dez 2012 12:57:31 -Mi, 19. Dez 2012 12:57:36 -Mi, 19. Dez 2012 12:57:41 -Mi, 19. Dez 2012 12:57:46 -Mi, 19. Dez 2012 12:57:51 -Mi, 19. Dez 2012 12:57:56 -Mi, 19. Dez 2012 12:58:02 -Mi, 19. Dez 2012 12:58:07 -Mi, 19. Dez 2012 12:58:12 -Mi, 19. Dez 2012 12:58:17 -Mi, 19. Dez 2012 12:58:22 -Mi, 19. Dez 2012 12:58:27 -Mi, 19. Dez 2012 12:58:32 -Mi, 19. Dez 2012 12:58:37 -Mi, 19. Dez 2012 12:58:42 -Mi, 19. Dez 2012 12:58:47 -Mi, 19. Dez 2012 12:58:52 -Mi, 19. Dez 2012 12:58:57 -Mi, 19. Dez 2012 12:59:02 -Mi, 19. Dez 2012 12:59:07 -Mi, 19. Dez 2012 12:59:13 -Mi, 19. Dez 2012 12:59:18 -Mi, 19. Dez 2012 12:59:23 -Mi, 19. Dez 2012 12:59:28 -Mi, 19. Dez 2012 12:59:33 -Mi, 19. Dez 2012 12:59:38 -Mi, 19. Dez 2012 12:59:43 -Mi, 19. Dez 2012 12:59:48 -Mi, 19. Dez 2012 12:59:53 -Mi, 19. Dez 2012 12:59:58 -Mi, 19. Dez 2012 13:00:03 -Mi, 19. Dez 2012 13:00:08 -Mi, 19. Dez 2012 13:00:13 -Mi, 19. Dez 2012 13:00:19 -Mi, 19. Dez 2012 13:00:24 -Mi, 19. Dez 2012 13:00:29 -Mi, 19. Dez 2012 13:00:34 -Mi, 19. Dez 2012 13:00:39 -Mi, 19. Dez 2012 13:00:44 -Mi, 19. Dez 2012 13:00:49 -Mi, 19. Dez 2012 13:00:54 -Mi, 19. Dez 2012 13:00:59 -Mi, 19. Dez 2012 13:01:04 -Mi, 19. Dez 2012 13:01:09 -Mi, 19. Dez 2012 13:01:14 -Mi, 19. Dez 2012 13:01:19 -Mi, 19. Dez 2012 13:01:25 -Mi, 19. Dez 2012 13:01:30 -Mi, 19. Dez 2012 13:01:35 -Mi, 19. Dez 2012 13:01:40 -Mi, 19. Dez 2012 13:01:45 -Mi, 19. Dez 2012 13:01:50 -Mi, 19. Dez 2012 13:01:55 -Mi, 19. Dez 2012 13:02:00 -Mi, 19. Dez 2012 13:02:05 -Mi, 19. Dez 2012 13:02:10 -Mi, 19. Dez 2012 13:02:15 -Mi, 19. Dez 2012 13:02:20 -Mi, 19. Dez 2012 13:02:25 -Mi, 19. Dez 2012 13:02:31 -Mi, 19. Dez 2012 13:02:36 -Mi, 19. Dez 2012 13:02:41 -Mi, 19. Dez 2012 13:02:46 -Mi, 19. Dez 2012 13:02:51 -Mi, 19. Dez 2012 13:02:56 -Mi, 19. Dez 2012 13:03:01 -Mi, 19. Dez 2012 13:03:06 -Mi, 19. Dez 2012 13:03:11 -Mi, 19. Dez 2012 13:03:16 -Mi, 19. Dez 2012 13:03:21 -Mi, 19. Dez 2012 13:03:26 -Mi, 19. Dez 2012 13:03:32 -Mi, 19. Dez 2012 13:03:37 -Mi, 19. Dez 2012 13:03:42 -Mi, 19. Dez 2012 13:03:47 -Mi, 19. Dez 2012 13:03:52 -Mi, 19. Dez 2012 13:03:57 -Mi, 19. Dez 2012 13:04:02 -Mi, 19. Dez 2012 13:04:07 -Mi, 19. Dez 2012 13:04:12 -Mi, 19. Dez 2012 13:04:17 -Mi, 19. Dez 2012 13:04:22 -Mi, 19. Dez 2012 13:04:27 -Mi, 19. Dez 2012 13:04:32 -Mi, 19. Dez 2012 13:04:37 -Mi, 19. Dez 2012 13:04:43 -Mi, 19. Dez 2012 13:04:48 -Mi, 19. Dez 2012 13:04:53 -Mi, 19. Dez 2012 13:04:58 -Mi, 19. Dez 2012 13:05:03 -Mi, 19. Dez 2012 13:05:08 -Mi, 19. Dez 2012 13:05:13 -Mi, 19. Dez 2012 13:05:18 -Mi, 19. Dez 2012 13:05:23 -Mi, 19. Dez 2012 13:05:28 -Mi, 19. Dez 2012 13:05:33 -Mi, 19. Dez 2012 13:05:38 -Mi, 19. Dez 2012 13:05:44 -Mi, 19. Dez 2012 13:05:49 -Mi, 19. Dez 2012 13:05:54 -Mi, 19. Dez 2012 13:05:59 -Mi, 19. Dez 2012 13:06:04 -Mi, 19. Dez 2012 13:06:09 -Mi, 19. Dez 2012 13:06:14 -Mi, 19. Dez 2012 13:06:19 -Mi, 19. Dez 2012 13:06:24 -Mi, 19. Dez 2012 13:06:29 -Mi, 19. Dez 2012 13:06:34 -Mi, 19. Dez 2012 13:06:39 -Mi, 19. Dez 2012 13:06:44 -Mi, 19. Dez 2012 13:06:49 -Mi, 19. Dez 2012 13:06:55 -Mi, 19. Dez 2012 13:07:00 -Mi, 19. Dez 2012 13:07:05 -Mi, 19. Dez 2012 13:07:10 -Mi, 19. Dez 2012 13:07:15 -Mi, 19. Dez 2012 13:07:20 -Mi, 19. Dez 2012 13:07:25 -Mi, 19. Dez 2012 13:07:30 -Mi, 19. Dez 2012 13:07:35 -Mi, 19. Dez 2012 13:07:40 -Mi, 19. Dez 2012 13:07:45 -Mi, 19. Dez 2012 13:07:50 -Mi, 19. Dez 2012 13:07:56 -Mi, 19. Dez 2012 13:08:01 -Mi, 19. Dez 2012 13:08:06 -Mi, 19. Dez 2012 13:08:11 -Mi, 19. Dez 2012 13:08:16 -Mi, 19. Dez 2012 13:08:21 -Mi, 19. Dez 2012 13:08:26 -Mi, 19. Dez 2012 13:08:31 -Mi, 19. Dez 2012 13:08:36 -Mi, 19. Dez 2012 13:08:41 -Mi, 19. Dez 2012 13:08:46 -Mi, 19. Dez 2012 13:08:52 -Mi, 19. Dez 2012 13:08:57 -Mi, 19. Dez 2012 13:09:02 -Mi, 19. Dez 2012 13:09:07 -Mi, 19. Dez 2012 13:09:12 -Mi, 19. Dez 2012 13:09:17 -Mi, 19. Dez 2012 13:09:22 -Mi, 19. Dez 2012 13:09:27 -Mi, 19. Dez 2012 13:09:32 -Mi, 19. Dez 2012 13:09:37 -Mi, 19. Dez 2012 13:09:42 -Mi, 19. Dez 2012 13:09:47 -Mi, 19. Dez 2012 13:09:52 -Mi, 19. Dez 2012 13:09:57 -Mi, 19. Dez 2012 13:10:02 -Mi, 19. Dez 2012 13:10:07 -Mi, 19. Dez 2012 13:10:13 -Mi, 19. Dez 2012 13:10:18 -Mi, 19. Dez 2012 13:10:23 -Mi, 19. Dez 2012 13:10:28 -Mi, 19. Dez 2012 13:10:33 -Mi, 19. Dez 2012 13:10:38 -Mi, 19. Dez 2012 13:10:43 -Mi, 19. Dez 2012 13:10:48 -Mi, 19. Dez 2012 13:10:53 -Mi, 19. Dez 2012 13:10:58 -Mi, 19. Dez 2012 13:11:03 -Mi, 19. Dez 2012 13:11:08 -Mi, 19. Dez 2012 13:11:13 -Mi, 19. Dez 2012 13:11:18 -Mi, 19. Dez 2012 13:11:24 -Mi, 19. Dez 2012 13:11:29 -Mi, 19. Dez 2012 13:11:34 -Mi, 19. Dez 2012 13:11:39 -Mi, 19. Dez 2012 13:11:44 -Mi, 19. Dez 2012 13:11:49 -Mi, 19. Dez 2012 13:11:54 -Mi, 19. Dez 2012 13:11:59 -Mi, 19. Dez 2012 13:12:04 -Mi, 19. Dez 2012 13:12:09 -Mi, 19. Dez 2012 13:12:14 -Mi, 19. Dez 2012 13:12:19 -Mi, 19. Dez 2012 13:12:25 -Mi, 19. Dez 2012 13:12:30 -Mi, 19. Dez 2012 13:12:35 -Mi, 19. Dez 2012 13:12:40 -Mi, 19. Dez 2012 13:12:45 -Mi, 19. Dez 2012 13:12:50 -Mi, 19. Dez 2012 13:12:55 -Mi, 19. Dez 2012 13:13:00 -Mi, 19. Dez 2012 13:13:05 -Mi, 19. Dez 2012 13:13:10 -Mi, 19. Dez 2012 13:13:15 -Mi, 19. Dez 2012 13:13:20 -Mi, 19. Dez 2012 13:13:25 -Mi, 19. Dez 2012 13:13:31 -Mi, 19. Dez 2012 13:13:36 -Mi, 19. Dez 2012 13:13:41 -Mi, 19. Dez 2012 13:13:46 -Mi, 19. Dez 2012 13:13:51 -Mi, 19. Dez 2012 13:13:56 -Mi, 19. Dez 2012 13:14:01 -Mi, 19. Dez 2012 13:14:06 -Mi, 19. Dez 2012 13:14:11 -Mi, 19. Dez 2012 13:14:16 -Mi, 19. Dez 2012 13:14:21 -Mi, 19. Dez 2012 13:14:26 -Mi, 19. Dez 2012 13:14:31 -Mi, 19. Dez 2012 13:14:36 -Mi, 19. Dez 2012 13:14:42 -Mi, 19. Dez 2012 13:14:47 -Mi, 19. Dez 2012 13:14:52 -Mi, 19. Dez 2012 13:14:57 -Mi, 19. Dez 2012 13:15:02 -Mi, 19. Dez 2012 13:15:07 -Mi, 19. Dez 2012 13:15:12 -Mi, 19. Dez 2012 13:15:17 -Mi, 19. Dez 2012 13:15:22 -Mi, 19. Dez 2012 13:15:27 -Mi, 19. Dez 2012 13:15:32 -Mi, 19. Dez 2012 13:22:12 -Mi, 19. Dez 2012 13:22:17 -Mi, 19. Dez 2012 13:22:22 -Mi, 19. Dez 2012 13:22:27 -Mi, 19. Dez 2012 13:22:32 -Mi, 19. Dez 2012 13:22:37 -Mi, 19. Dez 2012 13:22:42 -Mi, 19. Dez 2012 13:22:47 -Mi, 19. Dez 2012 13:22:53 -Mi, 19. Dez 2012 13:22:58 -Mi, 19. Dez 2012 13:23:03 -Mi, 19. Dez 2012 13:23:08 -Mi, 19. Dez 2012 13:23:13 -Mi, 19. Dez 2012 13:23:18 -Mi, 19. Dez 2012 13:23:23 -Mi, 19. Dez 2012 13:23:28 -Mi, 19. Dez 2012 13:23:33 -Mi, 19. Dez 2012 13:23:38 -Mi, 19. Dez 2012 13:23:43 -Mi, 19. Dez 2012 13:23:48 -Mi, 19. Dez 2012 13:23:53 -Mi, 19. Dez 2012 13:23:58 -Mi, 19. Dez 2012 13:24:03 -Mi, 19. Dez 2012 13:24:08 -Mi, 19. Dez 2012 13:24:14 -Mi, 19. Dez 2012 13:24:19 -Mi, 19. Dez 2012 13:24:24 -Mi, 19. Dez 2012 13:24:29 -Mi, 19. Dez 2012 13:24:34 -Mi, 19. Dez 2012 13:24:39 -Mi, 19. Dez 2012 13:24:44 -Mi, 19. Dez 2012 13:24:49 -Mi, 19. Dez 2012 13:24:54 -Mi, 19. Dez 2012 13:24:59 -Mi, 19. Dez 2012 13:25:04 -Mi, 19. Dez 2012 13:25:09 -Mi, 19. Dez 2012 13:25:14 -Mi, 19. Dez 2012 13:25:19 -Mi, 19. Dez 2012 13:25:25 -Mi, 19. Dez 2012 13:25:30 -Mi, 19. Dez 2012 13:25:35 -Mi, 19. Dez 2012 13:25:40 -Mi, 19. Dez 2012 13:25:45 -Mi, 19. Dez 2012 13:25:50 -Mi, 19. Dez 2012 13:25:55 -Mi, 19. Dez 2012 13:26:00 -Mi, 19. Dez 2012 13:26:05 -Mi, 19. Dez 2012 13:26:10 -Mi, 19. Dez 2012 13:26:15 -Mi, 19. Dez 2012 13:26:20 -Mi, 19. Dez 2012 13:26:25 -Mi, 19. Dez 2012 13:26:30 -Mi, 19. Dez 2012 13:26:36 -Mi, 19. Dez 2012 13:26:41 -Mi, 19. Dez 2012 13:26:46 -Mi, 19. Dez 2012 13:26:51 -Mi, 19. Dez 2012 13:26:56 -Mi, 19. Dez 2012 13:27:01 -Mi, 19. Dez 2012 13:27:06 -Mi, 19. Dez 2012 13:27:11 -Mi, 19. Dez 2012 13:27:16 -Mi, 19. Dez 2012 13:27:21 -Mi, 19. Dez 2012 13:27:26 -Mi, 19. Dez 2012 13:27:31 -Mi, 19. Dez 2012 13:27:36 -Mi, 19. Dez 2012 13:27:42 -Mi, 19. Dez 2012 13:27:47 -Mi, 19. Dez 2012 13:27:52 -Mi, 19. Dez 2012 13:27:57 -Mi, 19. Dez 2012 13:28:02 -Mi, 19. Dez 2012 13:28:07 -Mi, 19. Dez 2012 13:28:12 -Mi, 19. Dez 2012 13:28:17 -Mi, 19. Dez 2012 13:28:22 -Mi, 19. Dez 2012 13:28:27 -Mi, 19. Dez 2012 13:28:32 -Mi, 19. Dez 2012 13:28:37 -Mi, 19. Dez 2012 13:28:42 -Mi, 19. Dez 2012 13:28:48 -Mi, 19. Dez 2012 13:28:53 -Mi, 19. Dez 2012 13:28:58 -Mi, 19. Dez 2012 13:29:03 -Mi, 19. Dez 2012 13:29:08 -Mi, 19. Dez 2012 13:29:13 -Mi, 19. Dez 2012 13:29:18 -Mi, 19. Dez 2012 13:29:23 -Mi, 19. Dez 2012 13:29:28 -Mi, 19. Dez 2012 13:29:33 -Mi, 19. Dez 2012 13:29:38 -Mi, 19. Dez 2012 13:29:43 -Mi, 19. Dez 2012 13:29:48 -Mi, 19. Dez 2012 13:29:53 -Mi, 19. Dez 2012 13:29:58 -Mi, 19. Dez 2012 13:30:04 -Mi, 19. Dez 2012 13:30:09 -Mi, 19. Dez 2012 13:30:14 -Mi, 19. Dez 2012 13:30:19 -Mi, 19. Dez 2012 13:30:24 -Mi, 19. Dez 2012 13:30:29 -Mi, 19. Dez 2012 13:30:34 -Mi, 19. Dez 2012 13:30:39 -Mi, 19. Dez 2012 13:30:44 -Mi, 19. Dez 2012 13:30:49 -Mi, 19. Dez 2012 13:30:54 -Mi, 19. Dez 2012 13:30:59 -Mi, 19. Dez 2012 13:31:04 -Mi, 19. Dez 2012 13:31:09 -Mi, 19. Dez 2012 13:31:15 -Mi, 19. Dez 2012 13:31:20 -Mi, 19. Dez 2012 13:31:25 -Mi, 19. Dez 2012 13:31:30 -Mi, 19. Dez 2012 13:31:35 -Mi, 19. Dez 2012 13:31:40 -Mi, 19. Dez 2012 13:31:45 -Mi, 19. Dez 2012 13:31:50 -Mi, 19. Dez 2012 13:31:55 -Mi, 19. Dez 2012 13:32:00 -Mi, 19. Dez 2012 13:32:05 -Mi, 19. Dez 2012 13:32:10 -Mi, 19. Dez 2012 13:32:15 -Mi, 19. Dez 2012 13:32:21 -Mi, 19. Dez 2012 13:32:26 -Mi, 19. Dez 2012 13:32:31 -Mi, 19. Dez 2012 13:32:36 -Mi, 19. Dez 2012 13:32:41 -Mi, 19. Dez 2012 13:32:46 -Mi, 19. Dez 2012 13:32:51 -Mi, 19. Dez 2012 13:32:56 -Mi, 19. Dez 2012 13:33:01 -Mi, 19. Dez 2012 13:33:06 -Mi, 19. Dez 2012 13:33:11 -Mi, 19. Dez 2012 13:33:16 -Mi, 19. Dez 2012 13:33:21 -Mi, 19. Dez 2012 13:33:26 -Mi, 19. Dez 2012 13:33:32 -Mi, 19. Dez 2012 13:33:37 -Mi, 19. Dez 2012 13:33:42 -Mi, 19. Dez 2012 13:33:47 -Mi, 19. Dez 2012 13:33:52 -Mi, 19. Dez 2012 13:33:57 -Mi, 19. Dez 2012 13:34:02 -Mi, 19. Dez 2012 13:34:07 -Mi, 19. Dez 2012 13:34:12 -Mi, 19. Dez 2012 13:34:17 -Mi, 19. Dez 2012 13:34:22 -Mi, 19. Dez 2012 13:34:27 -Mi, 19. Dez 2012 13:34:32 -Mi, 19. Dez 2012 13:34:37 -Mi, 19. Dez 2012 13:34:42 -Mi, 19. Dez 2012 13:34:48 -Mi, 19. Dez 2012 13:34:53 -Mi, 19. Dez 2012 13:34:58 -Mi, 19. Dez 2012 13:35:03 -Mi, 19. Dez 2012 13:35:08 -Mi, 19. Dez 2012 13:35:13 -Mi, 19. Dez 2012 13:35:18 -Mi, 19. Dez 2012 13:35:23 -Mi, 19. Dez 2012 13:35:28 -Mi, 19. Dez 2012 13:35:33 -Mi, 19. Dez 2012 13:35:38 -Mi, 19. Dez 2012 13:35:43 -Mi, 19. Dez 2012 13:35:49 -Mi, 19. Dez 2012 13:35:54 -Mi, 19. Dez 2012 13:35:59 -Mi, 19. Dez 2012 13:36:04 -Mi, 19. Dez 2012 13:36:09 -Mi, 19. Dez 2012 13:36:14 -Mi, 19. Dez 2012 13:36:19 -Mi, 19. Dez 2012 13:36:24 -Mi, 19. Dez 2012 13:36:29 -Mi, 19. Dez 2012 13:36:34 -Mi, 19. Dez 2012 13:36:39 -Mi, 19. Dez 2012 13:36:44 -Mi, 19. Dez 2012 13:36:50 -Mi, 19. Dez 2012 13:36:55 -Mi, 19. Dez 2012 13:37:00 -Mi, 19. Dez 2012 13:37:05 -Mi, 19. Dez 2012 13:37:10 -Mi, 19. Dez 2012 13:37:15 -Mi, 19. Dez 2012 13:37:20 -Mi, 19. Dez 2012 13:37:25 -Mi, 19. Dez 2012 13:37:30 -Mi, 19. Dez 2012 13:37:35 -Mi, 19. Dez 2012 13:37:40 -Mi, 19. Dez 2012 13:37:45 -Mi, 19. Dez 2012 13:37:50 -Mi, 19. Dez 2012 13:37:55 -Mi, 19. Dez 2012 13:38:00 -Mi, 19. Dez 2012 13:38:05 -Mi, 19. Dez 2012 13:38:11 -Mi, 19. Dez 2012 13:38:16 -Mi, 19. Dez 2012 13:38:21 -Mi, 19. Dez 2012 13:38:26 -Mi, 19. Dez 2012 13:38:31 -Mi, 19. Dez 2012 13:38:36 -Mi, 19. Dez 2012 13:38:41 -Mi, 19. Dez 2012 13:38:46 -Mi, 19. Dez 2012 13:38:51 -Mi, 19. Dez 2012 13:38:56 -Mi, 19. Dez 2012 13:39:01 -Mi, 19. Dez 2012 13:39:06 -Mi, 19. Dez 2012 13:39:11 -Mi, 19. Dez 2012 13:39:16 -Mi, 19. Dez 2012 13:39:22 -Mi, 19. Dez 2012 13:39:27 -Mi, 19. Dez 2012 13:39:32 -Mi, 19. Dez 2012 13:39:37 -Mi, 19. Dez 2012 13:39:42 -Mi, 19. Dez 2012 13:39:47 -Mi, 19. Dez 2012 13:39:52 -Mi, 19. Dez 2012 13:39:57 -Mi, 19. Dez 2012 13:40:02 -Mi, 19. Dez 2012 13:40:07 -Mi, 19. Dez 2012 13:40:12 -Mi, 19. Dez 2012 13:40:17 -Mi, 19. Dez 2012 13:40:22 -Mi, 19. Dez 2012 13:40:27 -Mi, 19. Dez 2012 13:40:32 diff --git a/java/com.sap.sailing.nmeaconnector.test/src/com/sap/sailing/nmeaconnector/test/ReadWindVaneDataTest.java b/java/com.sap.sailing.nmeaconnector.test/src/com/sap/sailing/nmeaconnector/test/ReadWindVaneDataTest.java deleted file mode 100755 index b6e781ddae9..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/src/com/sap/sailing/nmeaconnector/test/ReadWindVaneDataTest.java +++ /dev/null @@ -1,231 +0,0 @@ -package com.sap.sailing.nmeaconnector.test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.PipedInputStream; -import java.io.PipedOutputStream; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; - -import net.sf.marineapi.nmea.event.SentenceEvent; -import net.sf.marineapi.nmea.event.SentenceListener; -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.nmea.sentence.BATSentence; -import net.sf.marineapi.nmea.sentence.MWVSentence; -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.sentence.BATSentence.WindVaneBatteryStatus; - -import org.junit.Test; - -import slash.navigation.base.BaseRoute; -import slash.navigation.base.NavigationFormat; -import slash.navigation.base.NavigationFormatParser; -import slash.navigation.base.ParserResult; -import slash.navigation.gpx.Gpx10Format; -import slash.navigation.gpx.GpxPosition; -import slash.navigation.gpx.GpxRoute; - -import com.sap.sailing.domain.base.impl.KilometersPerHourSpeedWithBearingImpl; -import com.sap.sailing.domain.common.Position; -import com.sap.sailing.domain.common.SpeedWithBearing; -import com.sap.sailing.domain.common.Wind; -import com.sap.sailing.domain.common.impl.DegreeBearingImpl; -import com.sap.sailing.domain.common.impl.DegreePosition; -import com.sap.sailing.domain.common.tracking.GPSFixMoving; -import com.sap.sailing.domain.common.tracking.impl.GPSFixMovingImpl; -import com.sap.sailing.domain.tracking.WindTrack; -import com.sap.sailing.domain.tracking.impl.DynamicGPSFixMovingTrackImpl; -import com.sap.sailing.domain.tracking.impl.WindComparator; -import com.sap.sailing.domain.tracking.impl.WindTrackImpl; -import com.sap.sailing.nmeaconnector.NmeaFactory; -import com.sap.sailing.nmeaconnector.NmeaUtil; -import com.sap.sse.common.TimePoint; -import com.sap.sse.common.Util; -import com.sap.sse.common.impl.MillisecondsTimePoint; - -public class ReadWindVaneDataTest { - @Test - public void testWindVaneFilePresence() throws IOException { - InputStream is = getClass().getResourceAsStream("/windvane.nmea"); - assertNotNull(is); - is.close(); - } - - @Test - public void readWindVaneOutputWithInterlacedTimeStamps() throws IOException, InterruptedException { - final List sentences = new ArrayList<>(); - final List timePointsForSentences = new ArrayList<>(); - readWindVaneNmeaFile(sentences, timePointsForSentences); - assertEquals(674, sentences.size()); // we have 684 sentences altogether; 74 of those are WIBAT which are now understood; - // 10 messages (one of them a WIBAT) have no timestamp yet - } - - @Test - public void findProprietaryBatteryMessages() throws IOException, InterruptedException { - final List sentences = new ArrayList<>(); - final List timePointsForSentences = new ArrayList<>(); - readWindVaneNmeaFile(sentences, timePointsForSentences); - boolean found = false; - for (Sentence sentence : sentences) { - if (sentence.getTalkerId() == TalkerId.WI) { - if (sentence.getSentenceId().equals("BAT")) { - found = true; - assertTrue(sentence instanceof BATSentence); - assertEquals(WindVaneBatteryStatus.GOOD, ((BATSentence) sentence).getWindVaneBatteryStatus()); - assertEquals(5, ((BATSentence) sentence).getBaseUnitBatteryLevel()); - } - } - } - assertTrue("Expected to find BAT message", found); - } - - private void readWindVaneNmeaFile(final List sentences, final List timePointsForSentences) - throws IOException, InterruptedException { - NmeaUtil nmeaUtil = NmeaFactory.INSTANCE.getUtil(); - DateFormat df = new SimpleDateFormat("EE, dd. MMM yyyy HH:mm:ss", Locale.GERMANY); - TimePoint lastTimestampFromFile = null; - InputStream is = getClass().getResourceAsStream("/windvane.nmea"); - PipedInputStream pis = new PipedInputStream(); - PipedOutputStream pos = new PipedOutputStream(pis); - SentenceReader nmeaReader = new SentenceReader(pis); - nmeaReader.addSentenceListener(new SentenceListener() { - @Override - public void sentenceRead(SentenceEvent event) { - TimePoint timePoint = new MillisecondsTimePoint(event.getTimeStamp()); - Sentence sentence = event.getSentence(); - sentences.add(sentence); - System.out.println("Time from file: "+timePointsForSentences.get(sentences.size()-1)+", Timestamp in sentence: "+timePoint+ - ", Talker ID: "+sentence.getTalkerId()+", Sentence ID: "+sentence.getSentenceId()); - } - @Override public void readingStopped() {} - @Override public void readingStarted() {} - @Override public void readingPaused() {} - }); - nmeaReader.start(); - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - String line; - while ((line=br.readLine()) != null) { - if (line.startsWith("$") || line.startsWith("!")) { - // NMEA0183 sentence - // Special hack for a bug with the WindVane's speed unit output which erroneously uses "K" for "knots": - line = nmeaUtil.replace(line, ",K,", ",N,"); - if (lastTimestampFromFile != null) { - lastTimestampFromFile = lastTimestampFromFile.plus(1000); - timePointsForSentences.add(lastTimestampFromFile); - // write the sentence only if we have a time stamp for it - pos.write(line.getBytes()); - pos.write(new byte[] { 13, 10 }); - pos.flush(); - } - } else { - try { - // Maybe it's an interwoven timestamp. Try out... - Date date = df.parse(line); - final MillisecondsTimePoint newTimePointFromFile = new MillisecondsTimePoint(date); - if (lastTimestampFromFile != null && newTimePointFromFile.before(lastTimestampFromFile)) { - System.err.println("Surprise! Received more than five NMEA messages in five seconds at "+newTimePointFromFile); - } - lastTimestampFromFile = newTimePointFromFile; - } catch (ParseException pe) { - pe.printStackTrace(); - } - } - } - pos.close(); - br.close(); - Thread.sleep(3000); - nmeaReader.stop(); - } - - @Test - public void readGpxFile() throws IOException { - DynamicGPSFixMovingTrackImpl track = new DynamicGPSFixMovingTrackImpl("Wind Vane", /* millisecondsOverWhichToAverage */ 5000); - loadGpxFileIntoTrack(track); - track.lockForRead(); - try { - assertEquals(489, track.getRawFixes().size()); - } finally { - track.unlockAfterRead(); - } - } - - @Test - public void readWindVaneNmeaIntoWindTrack() throws IOException, InterruptedException { - NmeaUtil nmeaUtil = NmeaFactory.INSTANCE.getUtil(); - final List sentences = new ArrayList<>(); - DynamicGPSFixMovingTrackImpl gpsTrack = new DynamicGPSFixMovingTrackImpl("Wind Vane", /* millisecondsOverWhichToAverage */ 5000); - loadGpxFileIntoTrack(gpsTrack); - final List timePointsForSentences = new ArrayList<>(); - WindTrack windTrack = new WindTrackImpl(/* millisecondsOverWhichToAverage */ 5000, /* useSpeed */ true, - /* nameForReadWriteLock */ "readWindVaneNmeaIntoWindTrack"); - readWindVaneNmeaFile(sentences, timePointsForSentences); - Iterator timePointIter = timePointsForSentences.iterator(); - for (Sentence sentence : sentences) { - TimePoint timePoint = timePointIter.next(); - Position position = gpsTrack.getEstimatedPosition(timePoint, /* extrapolate */ true); - if (SentenceId.MWV == SentenceId.valueOf(sentence.getSentenceId())) { - MWVSentence mwvSentence = (MWVSentence) sentence; - final Wind wind = nmeaUtil.getWind(timePoint, position, mwvSentence); - Wind oldWindAtOrAfter = windTrack.getFirstFixAtOrAfter(timePoint); - if (oldWindAtOrAfter != null && WindComparator.INSTANCE.compare(oldWindAtOrAfter, wind) == 0) { - System.err.println("Surprise: two wind fixes for the same time point and the same position. Old: " - + oldWindAtOrAfter + ". New: " + wind); - } - windTrack.add(wind); - } - } - windTrack.lockForRead(); - try { - assertEquals(601, Util.size(windTrack.getRawFixes())); - System.out.println("\n\nTimePoint"+"\t" - +"AWS/kts"+"\t" - +"AWA"+"\t" - +"SOG/kts"+"\t" - +"COG"); - for (Wind rawWind : windTrack.getRawFixes()) { - final SpeedWithBearing estimatedSpeed = gpsTrack.getEstimatedSpeed(rawWind.getTimePoint()); - System.out.println(rawWind.getTimePoint()+"\t" - +rawWind.getKnots()+"\t" - +rawWind.getBearing().getDegrees()+"\t" - +estimatedSpeed.getKnots()+"\t" - +estimatedSpeed.getBearing().getDegrees()); - } - } finally { - windTrack.unlockAfterRead(); - } - } - - private void loadGpxFileIntoTrack(DynamicGPSFixMovingTrackImpl track) throws IOException { - ParserResult read = new NavigationFormatParser().read(getClass().getResource("/20121219114023.gpx"), - Arrays.asList(new NavigationFormat[] { new Gpx10Format() })); - @SuppressWarnings("rawtypes") - List routes = read.getAllRoutes(); - assertNotNull(routes); - assertEquals(1, routes.size()); - assertEquals(489, routes.get(0).getPositionCount()); - GpxRoute route = (GpxRoute) routes.get(0); - List gpsPositions = route.getPositions(); - assertNotNull(gpsPositions); - for (GpxPosition gpxPosition : gpsPositions) { - GPSFixMoving gpsFixMoving = new GPSFixMovingImpl(new DegreePosition(gpxPosition.getLatitude(), gpxPosition.getLongitude()), - new MillisecondsTimePoint(gpxPosition.getTime().getTimeInMillis()), new KilometersPerHourSpeedWithBearingImpl( - gpxPosition.getSpeed(), new DegreeBearingImpl(gpxPosition.getHeading()))); - track.addGPSFix(gpsFixMoving); - } - } -} diff --git a/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/FileExample.java b/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/FileExample.java deleted file mode 100755 index a4c7cc44c16..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/FileExample.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * FileExample.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.example; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import net.sf.marineapi.nmea.event.SentenceEvent; -import net.sf.marineapi.nmea.event.SentenceListener; -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.nmea.sentence.GGASentence; -import net.sf.marineapi.nmea.sentence.SentenceId; - -/** - * Simple example application that takes a filename as command-line argument and - * prints Position from received GGA sentences. - * - * @author Kimmo Tuukkanen - */ -public class FileExample implements SentenceListener { - - private SentenceReader reader; - - /** - * Creates a new instance of FileExample - * - * @param f File from which to read Checksum data - */ - public FileExample(File file) throws IOException { - - // create sentence reader and provide input stream - InputStream stream = new FileInputStream(file); - reader = new SentenceReader(stream); - - // register self as a listener for GGA sentences - reader.addSentenceListener(this, SentenceId.GGA); - reader.start(); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingPaused() - */ - public void readingPaused() { - System.out.println("-- Paused --"); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingStarted() - */ - public void readingStarted() { - System.out.println("-- Started --"); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingStopped() - */ - public void readingStopped() { - System.out.println("-- Stopped --"); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.event.SentenceListener#sentenceRead(net.sf.marineapi - * .nmea.event.SentenceEvent) - */ - public void sentenceRead(SentenceEvent event) { - - // Safe to cast as we are registered only for GGA updates. Could - // also cast to PositionSentence if interested only in position data. - // When receiving all sentences without filtering, you should check the - // sentence type before casting (e.g. with Sentence.getSentenceId()). - GGASentence s = (GGASentence) event.getSentence(); - - // Do something with sentence data.. - System.out.println(s.getPosition()); - } - - /** - * Main method takes one command-line argument, the name of the file to - * read. - * - * @param args Command-line arguments - */ - public static void main(String[] args) { - - if (args.length != 1) { - System.out.println("Example usage:\njava FileExample nmea.log"); - System.exit(1); - } - - try { - new FileExample(new File(args[0])); - System.out.println("Running, press CTRL-C to stop.."); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - } -} diff --git a/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/HeadingProviderExample.java b/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/HeadingProviderExample.java deleted file mode 100755 index 233ffc04e68..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/HeadingProviderExample.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * HeadingProviderExample.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.example; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.provider.HeadingProvider; -import net.sf.marineapi.provider.event.HeadingEvent; -import net.sf.marineapi.provider.event.HeadingListener; - -/** - * Demonstrates the usage of HeadingProvider. - * - * @author Kimmo Tuukkanen - */ -public class HeadingProviderExample implements HeadingListener { - - private SentenceReader reader; - private HeadingProvider provider; - - /** - * Creates a new instance of FileExample - * - * @param f File from which to read Checksum data - */ - public HeadingProviderExample(File file) throws IOException { - - // create sentence reader and provide input stream - InputStream stream = new FileInputStream(file); - reader = new SentenceReader(stream); - - // create provider and register listener - provider = new HeadingProvider(reader); - provider.addListener(this); - - reader.start(); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.provider.event.HeadingListener#providerUpdate(net.sf - * .marineapi.provider.event.HeadingEvent) - */ - public void providerUpdate(HeadingEvent evt) { - System.out.println(evt.toString()); - } - - /** - * Main method takes one command-line argument, the name of the file to - * read. - * - * @param args Command-line arguments - */ - public static void main(String[] args) { - - if (args.length != 1) { - String msg = "Example usage:\njava HeadingProviderExample nmea.log"; - System.out.println(msg); - System.exit(0); - } - - try { - new HeadingProviderExample(new File(args[0])); - System.out.println("Running, press CTRL-C to stop.."); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - } -} diff --git a/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/TPVProviderExample.java b/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/TPVProviderExample.java deleted file mode 100755 index be8b5f15ebe..00000000000 --- a/java/com.sap.sailing.nmeaconnector.test/src/net/sf/marineapi/example/TPVProviderExample.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * TPVProviderExample.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.example; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; - -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.provider.TPVProvider; -import net.sf.marineapi.provider.event.TPVEvent; -import net.sf.marineapi.provider.event.TPVListener; - -/** - * Demonstrates the usage of TPVProvider. - * - * @author Kimmo Tuukkanen - * @see TPVProvider - */ -public class TPVProviderExample implements TPVListener { - - TPVProvider provider; - - public TPVProviderExample(File f) throws FileNotFoundException { - InputStream stream = new FileInputStream(f); - SentenceReader reader = new SentenceReader(stream); - provider = new TPVProvider(reader); - provider.addListener(this); - reader.start(); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.provider.event.TPVListener#providerUpdate(net.sf.marineapi - * .provider.event.TPVEvent) - */ - public void providerUpdate(TPVEvent evt) { - // do something with the data.. - System.out.println("TPV: " + evt.toString()); - } - - /** - * Startup method. - * - * @param args NMEA log file - */ - public static void main(String[] args) { - - if (args.length != 1) { - System.out.println("Usage:\njava TPVProviderExample nmea.log"); - System.exit(1); - } - - try { - new TPVProviderExample(new File(args[0])); - System.out.println("Running, press CTRL-C to stop.."); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - } -} diff --git a/java/com.sap.sailing.nmeaconnector/.classpath b/java/com.sap.sailing.nmeaconnector/.classpath deleted file mode 100644 index eca7bdba8f0..00000000000 --- a/java/com.sap.sailing.nmeaconnector/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/java/com.sap.sailing.nmeaconnector/.project b/java/com.sap.sailing.nmeaconnector/.project deleted file mode 100755 index 87a9d5667b7..00000000000 --- a/java/com.sap.sailing.nmeaconnector/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - com.sap.sailing.nmeaconnector - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/java/com.sap.sailing.nmeaconnector/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.nmeaconnector/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index a698e59674f..00000000000 --- a/java/com.sap.sailing.nmeaconnector/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,12 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.nmeaconnector/.settings/org.eclipse.pde.core.prefs b/java/com.sap.sailing.nmeaconnector/.settings/org.eclipse.pde.core.prefs deleted file mode 100755 index b7e72d019c2..00000000000 --- a/java/com.sap.sailing.nmeaconnector/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -pluginProject.extensions=false -resolve.requirebundle=false diff --git a/java/com.sap.sailing.nmeaconnector/META-INF/MANIFEST.MF b/java/com.sap.sailing.nmeaconnector/META-INF/MANIFEST.MF deleted file mode 100644 index e9e6e6416d4..00000000000 --- a/java/com.sap.sailing.nmeaconnector/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Nmeaconnector -Bundle-SymbolicName: com.sap.sailing.nmeaconnector -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Bundle-ClassPath: . -Export-Package: com.sap.sailing.nmeaconnector -Require-Bundle: com.sap.sailing.domain, - com.sap.sailing.domain.common, - net.sf.marineapi;bundle-version="0.5.0", - com.sap.sse.common diff --git a/java/com.sap.sailing.nmeaconnector/build.properties b/java/com.sap.sailing.nmeaconnector/build.properties deleted file mode 100755 index 41eb6ade2b4..00000000000 --- a/java/com.sap.sailing.nmeaconnector/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . diff --git a/java/com.sap.sailing.nmeaconnector/pom.xml b/java/com.sap.sailing.nmeaconnector/pom.xml deleted file mode 100644 index 60db4b3153f..00000000000 --- a/java/com.sap.sailing.nmeaconnector/pom.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - 4.0.0 - - root - com.sap.sailing - 1.0.0-SNAPSHOT - - com.sap.sailing.nmeaconnector - eclipse-plugin - diff --git a/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/NmeaFactory.java b/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/NmeaFactory.java deleted file mode 100755 index aa03073cd6e..00000000000 --- a/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/NmeaFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.sap.sailing.nmeaconnector; - -import com.sap.sailing.nmeaconnector.impl.NmeaFactoryImpl; - -public interface NmeaFactory { - static NmeaFactory INSTANCE = new NmeaFactoryImpl(); - - NmeaUtil getUtil(); -} diff --git a/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/NmeaUtil.java b/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/NmeaUtil.java deleted file mode 100755 index 57cff86839d..00000000000 --- a/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/NmeaUtil.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.sap.sailing.nmeaconnector; - -import net.sf.marineapi.nmea.sentence.MWVSentence; -import net.sf.marineapi.nmea.util.Units; - -import com.sap.sailing.domain.common.Position; -import com.sap.sailing.domain.common.Speed; -import com.sap.sailing.domain.common.SpeedWithBearing; -import com.sap.sailing.domain.common.Wind; -import com.sap.sse.common.TimePoint; - -public interface NmeaUtil { - Wind getWind(TimePoint timePoint, Position position, MWVSentence mwvSentence); - - Speed getSpeed(double magnitude, Units unit); - - SpeedWithBearing getSpeedWithBearing(double speedMagnitude, Units speedUnit, double bearingInDegrees); - - /** - * Replaces all occurrences of sequenceToFind by replaceWith, as {@link String#replace(CharSequence, CharSequence)}, - * but assuming that nmeaSentence has a trailing NMEA checksum, adjusts the checksum accordingly. This will turn a valid - * checksum into a valid checksum again, and an invalid checksum into an invalid checksum. - */ - String replace(String nmeaSentence, String sequenceToFind, String replaceWith); -} diff --git a/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/impl/NmeaFactoryImpl.java b/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/impl/NmeaFactoryImpl.java deleted file mode 100755 index 959dfabc5b8..00000000000 --- a/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/impl/NmeaFactoryImpl.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.sap.sailing.nmeaconnector.impl; - -import com.sap.sailing.nmeaconnector.NmeaFactory; -import com.sap.sailing.nmeaconnector.NmeaUtil; - -public class NmeaFactoryImpl implements NmeaFactory { - - @Override - public NmeaUtil getUtil() { - return new NmeaUtilImpl(); - } - -} diff --git a/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/impl/NmeaUtilImpl.java b/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/impl/NmeaUtilImpl.java deleted file mode 100755 index 859cd07a20c..00000000000 --- a/java/com.sap.sailing.nmeaconnector/src/com/sap/sailing/nmeaconnector/impl/NmeaUtilImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.sap.sailing.nmeaconnector.impl; - -import net.sf.marineapi.nmea.sentence.MWVSentence; -import net.sf.marineapi.nmea.util.Units; - -import com.sap.sailing.domain.base.impl.KilometersPerHourSpeedWithBearingImpl; -import com.sap.sailing.domain.common.Bearing; -import com.sap.sailing.domain.common.Position; -import com.sap.sailing.domain.common.Speed; -import com.sap.sailing.domain.common.SpeedWithBearing; -import com.sap.sailing.domain.common.Wind; -import com.sap.sailing.domain.common.impl.DegreeBearingImpl; -import com.sap.sailing.domain.common.impl.KilometersPerHourSpeedImpl; -import com.sap.sailing.domain.common.impl.KnotSpeedImpl; -import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; -import com.sap.sailing.domain.common.impl.WindImpl; -import com.sap.sailing.nmeaconnector.NmeaUtil; -import com.sap.sse.common.TimePoint; - -public class NmeaUtilImpl implements NmeaUtil { - - @Override - public Wind getWind(TimePoint timePoint, Position position, MWVSentence mwvSentence) { - return new WindImpl(position, timePoint, new KnotSpeedWithBearingImpl(mwvSentence.getSpeed(), - new DegreeBearingImpl(mwvSentence.getAngle()))); - } - - @Override - public Speed getSpeed(double magnitude, Units unit) { - switch (unit) { - case KMH: - return new KilometersPerHourSpeedImpl(magnitude); - case KNOT: - return new KnotSpeedImpl(magnitude); - case METER: - return new KilometersPerHourSpeedImpl(magnitude * 3.6); - default: - throw new IllegalArgumentException("Unit "+unit+" not understood for a speed"); - } - } - - @Override - public SpeedWithBearing getSpeedWithBearing(double speedMagnitude, Units speedUnit, double bearingInDegrees) { - Bearing bearing = new DegreeBearingImpl(bearingInDegrees); - switch (speedUnit) { - case KMH: - return new KilometersPerHourSpeedWithBearingImpl(speedMagnitude, bearing); - case KNOT: - return new KnotSpeedWithBearingImpl(speedMagnitude, bearing); - case METER: - return new KilometersPerHourSpeedWithBearingImpl(speedMagnitude * 3.6, bearing); - default: - throw new IllegalArgumentException("Unit "+speedUnit+" not understood for a speed"); - } - } - - @Override - public String replace(String nmeaSentence, String regexToFind, String replaceWith) { - while (nmeaSentence.matches(".*" + regexToFind + ".*")) { - final String resultWithOldChecksum = nmeaSentence.replaceFirst(regexToFind, replaceWith); - if (resultWithOldChecksum.matches(".*\\*[0-9a-fA-F][0-9a-fA-F]$")) { - // found checksum - int checksum = Integer.valueOf(resultWithOldChecksum.substring(resultWithOldChecksum.length() - 2), 16); - for (char oldChar : regexToFind.toCharArray()) { - checksum ^= (byte) oldChar; - } - for (char newChar : replaceWith.toCharArray()) { - checksum ^= (byte) newChar; - } - String newHexChecksum = Integer.toHexString(checksum).toUpperCase(); - if (newHexChecksum.length() == 1) { - newHexChecksum = "0" + newHexChecksum; - } - nmeaSentence = resultWithOldChecksum.substring(0, resultWithOldChecksum.length() - 2) + newHexChecksum; - } else { - nmeaSentence = resultWithOldChecksum; - } - } - return nmeaSentence; - } - -} diff --git a/java/com.sap.sailing.server.gateway.serialization/META-INF/MANIFEST.MF b/java/com.sap.sailing.server.gateway.serialization/META-INF/MANIFEST.MF index 5a14c4424a4..4db310dafb9 100644 --- a/java/com.sap.sailing.server.gateway.serialization/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.server.gateway.serialization/META-INF/MANIFEST.MF @@ -9,7 +9,6 @@ Import-Package: org.json.simple Require-Bundle: com.sap.sailing.domain.common, com.sap.sailing.domain.shared.android, com.sap.sailing.domain, - net.sf.marineapi;bundle-version="0.5.0", com.sap.sse, com.sap.sse.common, com.sap.sailing.server.gateway.serialization.shared.android diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/GPSFixMovingNmeaDTOJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/GPSFixMovingNmeaDTOJsonDeserializer.java deleted file mode 100644 index 088d20f2e48..00000000000 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/GPSFixMovingNmeaDTOJsonDeserializer.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.sap.sailing.server.gateway.deserialization.impl; - -import net.sf.marineapi.nmea.parser.RMCParser; -import net.sf.marineapi.nmea.sentence.RMCSentence; - -import org.json.simple.JSONObject; - -import com.sap.sailing.domain.common.Bearing; -import com.sap.sailing.domain.common.SpeedWithBearing; -import com.sap.sailing.domain.common.impl.DegreeBearingImpl; -import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; -import com.sap.sailing.domain.common.tracking.GPSFix; -import com.sap.sailing.domain.common.tracking.GPSFixMoving; -import com.sap.sailing.domain.common.tracking.impl.GPSFixMovingImpl; -import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; -import com.sap.sailing.server.gateway.deserialization.TypeBasedJsonDeserializer; - -public class GPSFixMovingNmeaDTOJsonDeserializer extends TypeBasedJsonDeserializer { - public static final String TYPE = "GPSFixMovingNmea"; - - @Override - protected String getType() { - return TYPE; - } - - @Override - protected GPSFixMoving deserializeAfterCheckingType(JSONObject object) throws JsonDeserializationException { - String nmea = (String) object.get(GPSFixNmeaDTOJsonDeserializer.FIELD_NMEA); - - RMCSentence sentence = new RMCParser(nmea); - - JSONObject clone = (JSONObject) object.clone(); - clone.put(TypeBasedJsonDeserializer.FIELD_TYPE, GPSFixNmeaDTOJsonDeserializer.TYPE); - GPSFix baseFix = new GPSFixNmeaDTOJsonDeserializer().deserialize(clone); - Bearing bearing = new DegreeBearingImpl(sentence.getCourse()); - SpeedWithBearing speed = new KnotSpeedWithBearingImpl(sentence.getSpeed(), bearing); - - GPSFixMoving fix = new GPSFixMovingImpl(baseFix.getPosition(), baseFix.getTimePoint(), speed); - - return fix; - } - -} diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/GPSFixNmeaDTOJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/GPSFixNmeaDTOJsonDeserializer.java deleted file mode 100644 index 1b48680d896..00000000000 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/GPSFixNmeaDTOJsonDeserializer.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.sap.sailing.server.gateway.deserialization.impl; - -import java.util.Date; - -import net.sf.marineapi.nmea.parser.RMCParser; -import net.sf.marineapi.nmea.sentence.RMCSentence; - -import org.json.simple.JSONObject; - -import com.sap.sailing.domain.common.Position; -import com.sap.sailing.domain.common.impl.DegreePosition; -import com.sap.sailing.domain.common.tracking.GPSFix; -import com.sap.sailing.domain.common.tracking.impl.GPSFixImpl; -import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; -import com.sap.sailing.server.gateway.deserialization.TypeBasedJsonDeserializer; -import com.sap.sse.common.TimePoint; -import com.sap.sse.common.impl.MillisecondsTimePoint; - -public class GPSFixNmeaDTOJsonDeserializer extends TypeBasedJsonDeserializer { - public static final String TYPE = "GPSFixNmea"; - - public static final String FIELD_TIME = "unixtime"; - public static final String FIELD_NMEA = "nmea"; - - @Override - protected String getType() { - return TYPE; - } - - @Override - protected GPSFix deserializeAfterCheckingType(JSONObject object) throws JsonDeserializationException { - Date time = new Date((Long) object.get(FIELD_TIME)); - String nmea = (String) object.get(FIELD_NMEA); - - RMCSentence sentence = new RMCParser(nmea); - - Position position = new DegreePosition(sentence.getPosition().getLatitude(), - sentence.getPosition().getLongitude()); - TimePoint timePoint = new MillisecondsTimePoint(time); - - GPSFix fix = new GPSFixImpl(position, timePoint); - - return fix; - } - -} diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/GPSFixMovingNmeaDTOJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/GPSFixMovingNmeaDTOJsonSerializer.java deleted file mode 100644 index 0b6c5f45d3f..00000000000 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/GPSFixMovingNmeaDTOJsonSerializer.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.sap.sailing.server.gateway.serialization.impl; - -import net.sf.marineapi.nmea.parser.RMCParser; - -import org.json.simple.JSONObject; - -import com.sap.sailing.domain.common.tracking.GPSFixMoving; -import com.sap.sailing.server.gateway.deserialization.TypeBasedJsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.GPSFixMovingNmeaDTOJsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.GPSFixNmeaDTOJsonDeserializer; -import com.sap.sailing.server.gateway.serialization.JsonSerializer; - -public class GPSFixMovingNmeaDTOJsonSerializer implements JsonSerializer { - - @Override - public JSONObject serialize(GPSFixMoving object) { - JSONObject result = new JSONObject(); - - RMCParser parser = GPSFixNmeaDTOJsonSerializer.getParser(object); - - double bearing = object.getSpeed().getBearing().getDegrees(); - double speed = object.getSpeed().getKnots(); - - parser.setCourse(bearing); - parser.setSpeed(speed); - - String nmea = parser.toSentence(); - - result.put(TypeBasedJsonDeserializer.FIELD_TYPE, GPSFixMovingNmeaDTOJsonDeserializer.TYPE); - result.put(GPSFixNmeaDTOJsonDeserializer.FIELD_NMEA, nmea); - result.put(GPSFixNmeaDTOJsonDeserializer.FIELD_TIME, object.getTimePoint().asMillis()); - - return result; - } - -} diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/GPSFixNmeaDTOJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/GPSFixNmeaDTOJsonSerializer.java deleted file mode 100644 index 296e968b808..00000000000 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/GPSFixNmeaDTOJsonSerializer.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.sap.sailing.server.gateway.serialization.impl; - -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -import net.sf.marineapi.nmea.parser.RMCParser; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.CompassPoint; -import net.sf.marineapi.nmea.util.Position; -import net.sf.marineapi.nmea.util.Time; - -import org.json.simple.JSONObject; - -import com.sap.sailing.domain.common.tracking.GPSFix; -import com.sap.sailing.server.gateway.deserialization.TypeBasedJsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.GPSFixNmeaDTOJsonDeserializer; -import com.sap.sailing.server.gateway.serialization.JsonSerializer; - -public class GPSFixNmeaDTOJsonSerializer implements JsonSerializer { - - public static RMCParser getParser(GPSFix fix) { - RMCParser parser = new RMCParser(TalkerId.GP); - - double lat = fix.getPosition().getLatDeg(); - double lng = fix.getPosition().getLngDeg(); - Date timepoint = fix.getTimePoint().asDate(); - - CompassPoint latCP = lat < 0 ? CompassPoint.SOUTH : CompassPoint.NORTH; - CompassPoint lngCP = lng < 0 ? CompassPoint.WEST : CompassPoint.EAST; - Calendar calendar = new GregorianCalendar(); - calendar.setTime(timepoint); - Time time = new Time(calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), - calendar.get(Calendar.SECOND)); - - parser.setPosition(new Position(Math.abs(lat), latCP, Math.abs(lng), lngCP)); - parser.setTime(time); - - return parser; - } - - @Override - public JSONObject serialize(GPSFix object) { - JSONObject result = new JSONObject(); - - String nmea = getParser(object).toSentence(); - - result.put(TypeBasedJsonDeserializer.FIELD_TYPE, GPSFixNmeaDTOJsonDeserializer.TYPE); - result.put(GPSFixNmeaDTOJsonDeserializer.FIELD_NMEA, nmea); - result.put(GPSFixNmeaDTOJsonDeserializer.FIELD_TIME, object.getTimePoint().asMillis()); - - return result; - } - -} diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/tracking/impl/GPSFixJsonServiceFinder.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/tracking/impl/GPSFixJsonServiceFinder.java index 842eb7fdb8b..e755b7bcda9 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/tracking/impl/GPSFixJsonServiceFinder.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/tracking/impl/GPSFixJsonServiceFinder.java @@ -8,12 +8,8 @@ import com.sap.sailing.domain.common.tracking.GPSFix; import com.sap.sailing.domain.common.tracking.GPSFixMoving; import com.sap.sailing.server.gateway.deserialization.impl.GPSFixJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.GPSFixMovingJsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.GPSFixMovingNmeaDTOJsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.GPSFixNmeaDTOJsonDeserializer; import com.sap.sailing.server.gateway.serialization.impl.GPSFixJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.GPSFixMovingJsonSerializer; -import com.sap.sailing.server.gateway.serialization.impl.GPSFixMovingNmeaDTOJsonSerializer; -import com.sap.sailing.server.gateway.serialization.impl.GPSFixNmeaDTOJsonSerializer; import com.sap.sailing.server.gateway.serialization.racelog.tracking.GPSFixJsonHandler; import com.sap.sse.common.NoCorrespondingServiceRegisteredException; import com.sap.sse.common.TypeBasedServiceFinder; @@ -23,10 +19,6 @@ public class GPSFixJsonServiceFinder implements TypeBasedServiceFinder( new GPSFixMovingJsonDeserializer(), new GPSFixMovingJsonSerializer()); - private final GPSFixJsonHandler gpsFixNmeaDTOHandler = new GPSFixJsonHandlerImpl( - new GPSFixNmeaDTOJsonDeserializer(), new GPSFixNmeaDTOJsonSerializer()); - private final GPSFixJsonHandler gpsFixMovingNmeaDTOHandler = new GPSFixJsonHandlerImpl( - new GPSFixMovingNmeaDTOJsonDeserializer(), new GPSFixMovingNmeaDTOJsonSerializer()); @Override public GPSFixJsonHandler findService(String type) throws NoCorrespondingServiceRegisteredException { @@ -34,10 +26,6 @@ public class GPSFixJsonServiceFinder implements TypeBasedServiceFinder findAllServices() { - return new HashSet(Arrays.asList(gpsFixHandler, gpsFixMovingHandler, - gpsFixMovingNmeaDTOHandler, gpsFixNmeaDTOHandler)); + return new HashSet(Arrays.asList(gpsFixHandler, gpsFixMovingHandler)); } } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/MarksJsonExportServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/MarksJsonExportServlet.java index 8b108f5c4fb..6b6ae9eff60 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/MarksJsonExportServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/MarksJsonExportServlet.java @@ -1,6 +1,8 @@ package com.sap.sailing.server.gateway.impl.rc; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import javax.servlet.ServletException; @@ -9,6 +11,7 @@ import javax.servlet.http.HttpServletResponse; import org.json.simple.JSONArray; +import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.DefinedMarkFinder; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.Mark; import com.sap.sailing.domain.base.RaceColumn; @@ -24,62 +27,59 @@ public class MarksJsonExportServlet extends AbstractJsonHttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String leaderboardName = request.getParameter(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME); if (leaderboardName == null) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", RaceLogServletConstants.PARAMS_LEADERBOARD_NAME)); return; } - String raceColumnName = request.getParameter(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME); if (raceColumnName == null) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME)); return; } - String fleetName = request.getParameter(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME); if (fleetName == null) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", RaceLogServletConstants.PARAMS_RACE_FLEET_NAME)); return; } - RacingEventService service = getService(); - Leaderboard leaderboard = service.getLeaderboardByName(leaderboardName); if (leaderboard == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such leaderboard found."); return; } - RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName); if (raceColumn == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such race column found."); return; } - Fleet fleet = raceColumn.getFleetByName(fleetName); if (fleet == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such fleet found."); return; } - TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); - JSONArray result = new JSONArray(); - + final Iterable marks; if (trackedRace != null) { - MarkJsonSerializer serializer = new MarkJsonSerializer(); - - for (Mark mark : trackedRace.getMarks()) { - if (toUUID(mark.getId().toString()) != null) { - result.add(serializer.serialize(mark)); - } + marks = trackedRace.getMarks(); + } else { + final List marksList = new ArrayList<>(); + // no tracked race associated yet; grab the mark definitions from the race log: + for (Mark markDefinitionFromRaceLog : new DefinedMarkFinder(raceColumn.getRaceLog(fleet)).analyze()) { + marksList.add(markDefinitionFromRaceLog); + } + marks = marksList; + } + MarkJsonSerializer serializer = new MarkJsonSerializer(); + for (Mark mark : marks) { + if (toUUID(mark.getId().toString()) != null) { + result.add(serializer.serialize(mark)); } } - setJsonResponseHeader(response); result.writeJSONString(response.getWriter()); } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java index aaec169b747..52c8ddcb5ac 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java @@ -612,5 +612,4 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch ClassLoader getCombinedMasterDataClassLoader(); Iterable getCompetitorInOrderOfWindwardDistanceTraveledFarthestFirst(TrackedRace trackedRace, TimePoint timePoint); - } diff --git a/java/com.sap.sse.gwt/META-INF/MANIFEST.MF b/java/com.sap.sse.gwt/META-INF/MANIFEST.MF index 920e0ac2e70..1b53b52f991 100644 --- a/java/com.sap.sse.gwt/META-INF/MANIFEST.MF +++ b/java/com.sap.sse.gwt/META-INF/MANIFEST.MF @@ -30,13 +30,14 @@ Export-Package: com.google.gwt.user.client.rpc.core.java.util, com.sap.sse.gwt.client.event, com.sap.sse.gwt.client.filestorage, com.sap.sse.gwt.client.media, + com.sap.sse.gwt.client.mutationobserver, com.sap.sse.gwt.client.mvp, com.sap.sse.gwt.client.panels, com.sap.sse.gwt.client.player, com.sap.sse.gwt.client.shared.components, com.sap.sse.gwt.client.useragent, + com.sap.sse.gwt.resources, com.sap.sse.gwt.server, com.sap.sse.gwt.server.filestorage, com.sap.sse.gwt.shared, - com.sap.sse.gwt.shared.filestorage, - com.sap.sse.gwt.resources + com.sap.sse.gwt.shared.filestorage diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/carousel/WidgetCarousel.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/carousel/WidgetCarousel.java index 401d3fcbab2..2e3af5b4984 100644 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/carousel/WidgetCarousel.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/carousel/WidgetCarousel.java @@ -63,6 +63,7 @@ public class WidgetCarousel extends Composite { private boolean infiniteScrolling = true; private final String uniqueId; + private boolean showArrows = true; private LinkedList items = new LinkedList(); @@ -73,8 +74,12 @@ public class WidgetCarousel extends Composite { initWidget(ourUiBinder.createAndBindUi(this)); uniqueId = Document.get().createUniqueId(); sliderMainUi.addStyleName(uniqueId); + } + + @Override + protected void onLoad() { + super.onLoad(); init(); - } public void onAfterChange() { @@ -141,7 +146,7 @@ public class WidgetCarousel extends Composite { infinite : (sliderReference.@com.sap.sse.gwt.client.controls.carousel.WidgetCarousel::infiniteScrolling), swipeToSlide : false, responsive : false, - arrows : true, + arrows : sliderReference.@com.sap.sse.gwt.client.controls.carousel.WidgetCarousel::showArrows, prevArrow : "
", nextArrow : "
" @@ -174,6 +179,15 @@ public class WidgetCarousel extends Composite { this.infiniteScrolling = infiniteScrolling; } + /** + * Disable/ enable left/right arrows + * + * @param showArrows + */ + public void setShowArrows(boolean showArrows) { + this.showArrows = showArrows; + } + /** * Enable dot indicators * diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/listedit/StringListEditorComposite.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/listedit/StringListEditorComposite.java index 5e1d8f59c76..56a23608b20 100755 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/listedit/StringListEditorComposite.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/listedit/StringListEditorComposite.java @@ -1,5 +1,8 @@ package com.sap.sse.gwt.client.controls.listedit; +import java.util.ArrayList; +import java.util.List; + import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyUpEvent; @@ -82,6 +85,9 @@ public class StringListEditorComposite extends ListEditorComposite { for (String suggestValue : suggestValues) { inputOracle.add(suggestValue); } + List defaultSuggestions = new ArrayList<>(); + Util.addAll(suggestValues, defaultSuggestions); + this.inputOracle.setDefaultSuggestionsFromText(defaultSuggestions); } @Override diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/dialog/DataEntryDialog.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/dialog/DataEntryDialog.java index 810114a8362..4f72a25d7ff 100755 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/dialog/DataEntryDialog.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/dialog/DataEntryDialog.java @@ -1,6 +1,8 @@ package com.sap.sse.gwt.client.dialog; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style; @@ -24,12 +26,15 @@ import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.LongBox; +import com.google.gwt.user.client.ui.MultiWordSuggestOracle; import com.google.gwt.user.client.ui.PasswordTextBox; import com.google.gwt.user.client.ui.RadioButton; +import com.google.gwt.user.client.ui.SuggestBox; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.datepicker.client.DateBox; +import com.sap.sse.common.Util; import com.sap.sse.gwt.client.controls.GenericListBox; import com.sap.sse.gwt.client.controls.GenericListBox.ValueBuilder; import com.sap.sse.gwt.client.controls.IntegerBox; @@ -163,6 +168,24 @@ public abstract class DataEntryDialog { return createTextBoxInternal(initialValue, 30); } + public SuggestBox createSuggestBox(Iterable suggestValues) { + List suggestValuesAsCollection = new ArrayList<>(); + Util.addAll(suggestValues, suggestValuesAsCollection); + final MultiWordSuggestOracle oracle = new MultiWordSuggestOracle(); + oracle.addAll(suggestValuesAsCollection); + oracle.setDefaultSuggestionsFromText(suggestValuesAsCollection); + final SuggestBox result = new SuggestBox(oracle); + result.getValueBox().addChangeHandler(new ChangeHandler() { + @Override + public void onChange(ChangeEvent event) { + validate(); + } + }); + DialogUtils.linkEnterToButton(getOkButton(), result.getValueBox()); + DialogUtils.linkEscapeToButton(getCancelButton(), result.getValueBox()); + return result; + } + /** * Creates a text box with a key-up listener attached which ensures the value is updated after each * key-up event and the entire dialog is {@link #validate() validated} in this case. diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/mutationobserver/ElementChildsMutationObserver.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/mutationobserver/ElementChildsMutationObserver.java new file mode 100644 index 00000000000..7f63d220d63 --- /dev/null +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/mutationobserver/ElementChildsMutationObserver.java @@ -0,0 +1,81 @@ +package com.sap.sse.gwt.client.mutationobserver; + +import com.google.gwt.core.client.JavaScriptObject; +import com.google.gwt.core.client.JsArray; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.Node; + +/** + * A mutation observer looking at adding at child nodes of a DOM element (add, remove). + * @author Frank + * + */ +public class ElementChildsMutationObserver { + public static interface DomMutationCallback { + public void onNodesRemoved(JsArray removedNodes); + + public void onNodesInserted(JsArray addedNodes, Node nextSibling); + + public void onNodesAppended(JsArray addedNodes); + } + + protected static class NativeMutationObserver extends JavaScriptObject { + static native NativeMutationObserver create(DomMutationCallback callback) /*-{ + return new MutationObserver( + function(mutations) { + var mutationsCount = mutations.length; + for (var i = 0; i < mutationsCount; i++) { + if (mutations[i].removedNodes.length) { + callback.@com.sap.sse.gwt.client.mutationobserver.ElementChildsMutationObserver.DomMutationCallback::onNodesRemoved(Lcom/google/gwt/core/client/JsArray;)(mutations[i].removedNodes); + } + if (mutations[i].addedNodes.length) { + var nodes = mutations[i].addedNodes; + if (mutations[i].nextSibling) { + callback.@com.sap.sse.gwt.client.mutationobserver.ElementChildsMutationObserver.DomMutationCallback::onNodesInserted(Lcom/google/gwt/core/client/JsArray;Lcom/google/gwt/dom/client/Node;)(nodes, mutations[i].nextSibling) + } else { + callback.@com.sap.sse.gwt.client.mutationobserver.ElementChildsMutationObserver.DomMutationCallback::onNodesAppended(Lcom/google/gwt/core/client/JsArray;)(nodes); + } + } + } + }); + }-*/; + + static native boolean exist() /*-{ + return !!$wnd.MutationObserver; + }-*/; + + protected NativeMutationObserver() { + } + + final native void observe(Element e) /*-{ + // only observe childList modification + this.observe(e, { + attributes : false, + childList : true, + characterData : false + }); + }-*/; + + final native void disconnect() /*-{ + this.disconnect(); + }-*/; + } + + public static boolean isSupported() { + return NativeMutationObserver.exist(); + } + + private NativeMutationObserver mutator; + + public ElementChildsMutationObserver(DomMutationCallback callback) { + mutator = NativeMutationObserver.create(callback); + } + + public void observe(Element e) { + mutator.observe(e); + } + + public void disconnect() { + mutator.disconnect(); + } +} \ No newline at end of file diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/mutationobserver/ElementSizeMutationObserver.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/mutationobserver/ElementSizeMutationObserver.java new file mode 100644 index 00000000000..b93c8a5e14e --- /dev/null +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/mutationobserver/ElementSizeMutationObserver.java @@ -0,0 +1,73 @@ +package com.sap.sse.gwt.client.mutationobserver; + +import com.google.gwt.core.client.JavaScriptObject; +import com.google.gwt.dom.client.Element; + +/** + * A mutation observer specialized in observing the clientWith and clientHeight attribute of a DOM element + * in order to recognize element size changes. + * @author Frank + * + */ +public class ElementSizeMutationObserver { + public static interface DomMutationCallback { + public void onSizeChanged(int newWidth, int newHeight); + } + + protected static class NativeMutationObserver extends JavaScriptObject { + static native NativeMutationObserver create(DomMutationCallback callback) /*-{ + return new MutationObserver( + function(mutations) { + var maxNewWidth = -1; + var maxNewHeight = -1; + mutations.forEach(function(mutation) { + if(mutation.target.clientWidth > maxNewWidth) { + maxNewWidth = mutation.target.clientWidth; + } + if(mutation.target.clientHeight > maxNewHeight) { + maxNewHeight = mutation.target.clientHeight; + } + }) + callback.@com.sap.sse.gwt.client.mutationobserver.ElementSizeMutationObserver.DomMutationCallback::onSizeChanged(II)(maxNewWidth,maxNewHeight); + }); + }-*/; + + static native boolean exist() /*-{ + return !!$wnd.MutationObserver; + }-*/; + + protected NativeMutationObserver() { + } + + final native void observe(Element e) /*-{ + // observe childList and attributes + this.observe(e, { + attributes : true, + attributeFilter: ['clientHeight', 'clientWidth'], + childList : true, + }); + }-*/; + + final native void disconnect() /*-{ + this.disconnect(); + }-*/; + } + + public static boolean isSupported() { + return NativeMutationObserver.exist(); + } + + private NativeMutationObserver mutator; + + public ElementSizeMutationObserver(DomMutationCallback callback) { + mutator = NativeMutationObserver.create(callback); + } + + public void observe(Element e) { + mutator.observe(e); + } + + public void disconnect() { + mutator.disconnect(); + } +} \ No newline at end of file diff --git a/java/com.sap.sse.security.ui/Security UI sdm.launch b/java/com.sap.sse.security.ui/Security UI sdm.launch index 7e0c9220c55..63fc7dc7116 100755 --- a/java/com.sap.sse.security.ui/Security UI sdm.launch +++ b/java/com.sap.sse.security.ui/Security UI sdm.launch @@ -4,7 +4,6 @@ - @@ -43,7 +42,7 @@ - + diff --git a/java/com.tractrac.clientmodule/META-INF/MANIFEST.MF b/java/com.tractrac.clientmodule/META-INF/MANIFEST.MF index 06fe75fc795..0043b019213 100644 --- a/java/com.tractrac.clientmodule/META-INF/MANIFEST.MF +++ b/java/com.tractrac.clientmodule/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: TracTrac Client module Bundle-SymbolicName: com.tractrac.clientmodule -Bundle-Version: 3.0.11 +Bundle-Version: 3.0.12 Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ClassPath: ., lib/TracAPI.jar diff --git a/java/com.tractrac.clientmodule/README.txt b/java/com.tractrac.clientmodule/README.txt index cc91891f4bc..e3a23e66229 100644 --- a/java/com.tractrac.clientmodule/README.txt +++ b/java/com.tractrac.clientmodule/README.txt @@ -15,7 +15,33 @@ It contains also some files: - test.sh -> script that compiles the code in the src folder, creates the test.jar library and execute the code of the example. - Manifest.txt -> manifest used to create the test.jar file + +******************************************** +************* TracAPI 3.0.12 *************** +******************************************** +This is a final version. It fixes bugs in the implementation and it adds a some features. +These features add methods to the API, but they keep the backward compatibility. +This version provides a new JavaDoc version. + +Release date: 07/08/2015 +Build number: 11130 + + 1) Features + - Adding the method ISubscriberFactory.setUserId(userId) used to configure a valid user with permissions + to retrieve data from the TracTrac servers. (Requested by Jorge Piera, 18/06/2015) + + 2) Bugs + + - If the consumer application is not subscribed to the events that manage the addition of new "objects" + in the system (e.g: add control, add competitor...), it is never going to receive the events related + with these "objects". It is an error of design in TracAPI because it has been designed "thinking" + that the consumer application is always subscribed to receive all the events. The solution is simple: + TracAPI is always going to subscribe to all the events to guarantee that the static model is always + updated and to guarantee that if the consumer application is subscribed to a type of event it is always + going to receive all the events of this type. There is a secondary effect: the consumer application can + receive events with new objects. (Reported by Axel Uhl, 20/07/2015) + ******************************************** ************* TracAPI 3.0.11 *************** ******************************************** @@ -44,37 +70,20 @@ Build number: 10715 - It is possible to add two or more subscriptions for the same subscriber (Reported by Jorge Piera, 02/05/2015) - - An initialized race is a race where the tracking is on. A not -initialized race is a race where the tracking is off. If a race is in a -not initialized state and it is loaded using the parameters file, the -library assumes that the consumer application wants to load the race and -it changes its initialized attribute to true (the tracking is on). This -assumption is wrong. Now, if a race is not initialized it will continue -being uninitialized until the event administrator changes its state to -initialized. - When a race changes its state from not initialized to initialized, -some events are thrown in the system: - 1. -IRaceStartStopTimesChangeListener.gotTrackingStartStopTime(IRace, -IStartStopData): where the IStartStopData object contains the new -tracking interval. - 2. IRacesListener.startTracking(UUID): the UUID is the race -identifier - 3. IRacesListener.updateRace(IRace): IRace is the new updated -race where the IRace.isInitialized is true and it has values for both -the getTrackingStartTime and the getTrackingEndTime methods. - When a race changes its state from initialized to not initialized, -the following events are thrown in the system: - 1. -IRaceStartStopTimesChangeListener.gotTrackingStartStopTime(IRace, -IStartStopData): where the IStartStopData object contains the null -interval ([0, 0]) - 2. IRacesListener.abandonRace(UUID): the UUID is the race identifier - 3. IRacesListener.updateRace(IRace): IRace is the new updated -race where the IRace.isInitialized is false and it has null values for -both the getTrackingStartTime and the getTrackingEndTime methods. - (Reported by Axel Uhl, 17/05/2015) - + - An initialized race is a race where the tracking is on. A not initialized race is a race where the tracking is off. + If a race is in a not initialized state and it is loaded using the parameters file, the library assumes that the + consumer application wants to load the race and it changes its initialized attribute to true (the tracking is on). + This assumption is wrong. Now, if a race is not initialized it will continue being uninitialized until the event + administrator changes its state to initialized. + When a race changes its state from not initialized to initialized, some events are thrown in the system: + 1. IRaceStartStopTimesChangeListener.gotTrackingStartStopTime(IRace, IStartStopData): where the IStartStopData object contains the new tracking interval. + 2. IRacesListener.startTracking(UUID): the UUID is the race identifier + 3. IRacesListener.updateRace(IRace): IRace is the new updated race where the IRace.isInitialized is true and it has values for both the getTrackingStartTime and the getTrackingEndTime methods. + When a race changes its state from initialized to not initialized, the following events are thrown in the system: + 1. IRaceStartStopTimesChangeListener.gotTrackingStartStopTime(IRace, IStartStopData): where the IStartStopData object contains the null interval ([0, 0]) + 2. IRacesListener.abandonRace(UUID): the UUID is the race identifier + 3. IRacesListener.updateRace(IRace): IRace is the new updated race where the IRace.isInitialized is false and it has null values for both the getTrackingStartTime and the getTrackingEndTime methods. + (Reported by Axel Uhl, 17/05/2015) ******************************************** ************* TracAPI 3.0.10 *************** diff --git a/java/com.tractrac.clientmodule/javadoc/allclasses-frame.html b/java/com.tractrac.clientmodule/javadoc/allclasses-frame.html index ec62db7c5cf..41aeb598daa 100644 --- a/java/com.tractrac.clientmodule/javadoc/allclasses-frame.html +++ b/java/com.tractrac.clientmodule/javadoc/allclasses-frame.html @@ -2,9 +2,9 @@ - + All Classes - + @@ -12,16 +12,8 @@ diff --git a/java/com.tractrac.clientmodule/javadoc/allclasses-noframe.html b/java/com.tractrac.clientmodule/javadoc/allclasses-noframe.html index af4a1217590..fff0c85ece6 100644 --- a/java/com.tractrac.clientmodule/javadoc/allclasses-noframe.html +++ b/java/com.tractrac.clientmodule/javadoc/allclasses-noframe.html @@ -2,9 +2,9 @@ - + All Classes - + @@ -12,16 +12,8 @@ diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/IIdentifiable.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/IIdentifiable.html index ed98fd29d71..3c1de2b821b 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/IIdentifiable.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/IIdentifiable.html @@ -2,9 +2,9 @@ - + IIdentifiable - + @@ -36,7 +36,7 @@
voidsetAttachment(IAttachmentKey key, +setAttachment(IAttachmentKey key, java.lang.Object obj)
Sets custom data for this object.
voidsetAttachment(IAttachmentKey key, +setAttachment(IAttachmentKey key, java.lang.Object obj)
Sets custom data for this object.
IAttachmentKeynewKey(java.lang.Class<? extends IAttachable> clazz, +newKey(java.lang.Class<? extends IAttachable> clazz, java.lang.String description)
Creates a new IAttachmentKey for attach objects for a concrete class
diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/AbstractAttachable.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/AbstractAttachable.html index 5036b9f4187..12fd20590f4 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/AbstractAttachable.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/AbstractAttachable.html @@ -2,9 +2,9 @@ - + Uses of Class com.tractrac.model.lib.api.attachment.AbstractAttachable - + @@ -28,7 +28,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • @@ -77,7 +77,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachable.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachable.html index 70a9900de6a..a6f95831bc9 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachable.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachable.html @@ -2,9 +2,9 @@ - + Uses of Interface com.tractrac.model.lib.api.attachment.IAttachable - + @@ -28,7 +28,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • @@ -140,23 +140,6 @@
    - - - - - - - - - - - - -
    Methods in com.tractrac.model.lib.api with parameters of type IAttachable 
    Modifier and TypeMethod and Description
    voidAbstractModelTest.addAttachment(IAttachable attachable, - IAttachmentKey attachmentKey, - java.lang.Object object) -
    Add an attachment to an attachable object
    -
  • @@ -193,7 +176,7 @@ IAttachmentKey -IAttachmentManager.newKey(java.lang.Class<? extends IAttachable> clazz, +IAttachmentManager.newKey(java.lang.Class<? extends IAttachable> clazz, java.lang.String description)
    Creates a new IAttachmentKey for attach objects for a concrete class
    @@ -350,7 +333,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachmentKey.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachmentKey.html index 61ae76a4594..658d90d9f22 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachmentKey.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachmentKey.html @@ -2,9 +2,9 @@ - + Uses of Interface com.tractrac.model.lib.api.attachment.IAttachmentKey - + @@ -28,7 +28,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • @@ -76,13 +76,6 @@ -com.tractrac.model.lib.api - -
    - Main package of the model project.
    - - - com.tractrac.model.lib.api.attachment
    @@ -94,28 +87,6 @@
    • -
    • - - -

      Uses of IAttachmentKey in com.tractrac.model.lib.api

      - - - - - - - - - - - - -
      Methods in com.tractrac.model.lib.api with parameters of type IAttachmentKey 
      Modifier and TypeMethod and Description
      voidAbstractModelTest.addAttachment(IAttachable attachable, - IAttachmentKey attachmentKey, - java.lang.Object object) -
      Add an attachment to an attachable object
      -
      -
    • @@ -129,7 +100,7 @@ IAttachmentKey -IAttachmentManager.newKey(java.lang.Class<? extends IAttachable> clazz, +IAttachmentManager.newKey(java.lang.Class<? extends IAttachable> clazz, java.lang.String description)
      Creates a new IAttachmentKey for attach objects for a concrete class
      @@ -162,26 +133,26 @@ <T> T -AbstractAttachable.getAttachment(IAttachmentKey key)  - - -<T> T IAttachable.getAttachment(IAttachmentKey key)
      Fetches custom data for this object.
      + +<T> T +AbstractAttachable.getAttachment(IAttachmentKey key)  + void -AbstractAttachable.setAttachment(IAttachmentKey key, - java.lang.Object obj)  - - -void -IAttachable.setAttachment(IAttachmentKey key, +IAttachable.setAttachment(IAttachmentKey key, java.lang.Object obj)
      Sets custom data for this object.
      + +void +AbstractAttachable.setAttachment(IAttachmentKey key, + java.lang.Object obj)  +
    • @@ -200,7 +171,7 @@
    • Package
    • Class
    • -
    • Tree
    • +
    • Tree
    • Deprecated
    • Index
    • Help
    • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachmentManager.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachmentManager.html index 9e6e2ce9d04..f4d9a449eef 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachmentManager.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/class-use/IAttachmentManager.html @@ -2,9 +2,9 @@ - + Uses of Interface com.tractrac.model.lib.api.attachment.IAttachmentManager - + @@ -28,7 +28,7 @@
    • Package
    • Class
    • -
    • Tree
    • +
    • Tree
    • Deprecated
    • Index
    • Help
    • @@ -137,7 +137,7 @@
    • Package
    • Class
    • -
    • Tree
    • +
    • Tree
    • Deprecated
    • Index
    • Help
    • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-frame.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-frame.html index a596d5870ef..09bd6c26330 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-frame.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-frame.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api.attachment - + @@ -19,7 +19,6 @@

      Classes

  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-summary.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-summary.html index a24fe82effc..9ca0eb0f96d 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-summary.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-summary.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api.attachment - + @@ -118,13 +118,6 @@
    Abstract implementation for the IAttachable interface.
    - -AttachmentsTest - -
    - This test checks the attachments.
    - - diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-tree.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-tree.html index f542dae14d6..d7cbce25a70 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-tree.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-tree.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api.attachment Class Hierarchy - + @@ -75,15 +75,6 @@
  • java.lang.Object
    • com.tractrac.model.lib.api.attachment.AbstractAttachable (implements com.tractrac.model.lib.api.attachment.IAttachable)
    • -
    • junit.framework.Assert -
        -
      • junit.framework.TestCase (implements junit.framework.Test) - -
      • -
      -
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-use.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-use.html index 56eeafd2488..bf8a5a69be6 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-use.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/attachment/package-use.html @@ -2,9 +2,9 @@ - + Uses of Package com.tractrac.model.lib.api.attachment - + @@ -129,12 +129,6 @@ -IAttachmentKey -
    - An attachment key is used as a key to save a new attachment.
    - - - IAttachmentManager
    Manager interface for creation of IAttachementKey for use with the IAttachable interface.
    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/IIdentifiable.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/IIdentifiable.html index 5ae04d87d8c..1890a43bcea 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/IIdentifiable.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/IIdentifiable.html @@ -2,9 +2,9 @@ - + Uses of Interface com.tractrac.model.lib.api.IIdentifiable - + @@ -28,7 +28,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • @@ -241,7 +241,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/INamed.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/INamed.html index f7bdcfa2a9e..69669d431db 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/INamed.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/INamed.html @@ -2,9 +2,9 @@ - + Uses of Interface com.tractrac.model.lib.api.INamed - + @@ -28,7 +28,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • @@ -214,7 +214,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/ModelLocator.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/ModelLocator.html index 398a99f6f4d..82c755681f6 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/ModelLocator.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/class-use/ModelLocator.html @@ -2,9 +2,9 @@ - + Uses of Class com.tractrac.model.lib.api.ModelLocator - + @@ -28,7 +28,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • @@ -77,7 +77,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IControlPassing.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IControlPassing.html index ae1e9a61c76..9eda8716d0c 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IControlPassing.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IControlPassing.html @@ -2,9 +2,9 @@ - + IControlPassing - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IControlPassings.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IControlPassings.html index 3438fc5fe46..0f94194505e 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IControlPassings.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IControlPassings.html @@ -2,9 +2,9 @@ - + IControlPassings - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IMessageData.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IMessageData.html index 3f70814bd52..62b77f3a81b 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IMessageData.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IMessageData.html @@ -2,9 +2,9 @@ - + IMessageData - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IPosition.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IPosition.html index 0ad393c8516..26c79e73f35 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IPosition.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/data/IPosition.html @@ -2,9 +2,9 @@ - + IPosition - + @@ -199,7 +199,7 @@ extends IAttachable -getAttachment, setAttachment +getAttachment, setAttachment
    Returns:
    the visibility of the race
    @@ -569,8 +576,9 @@ extends

    getStoredURI

    java.net.URI getStoredURI()
    -
    Gets the stored URI of this race. It can be used to download stored data of - this race. It can be a connection to the database or a link to a MTB file
    +
    Gets the stored URI of this race. It can be used to download stored data + of this race. It can be a connection to the database or a link to a MTB + file
    Returns:
    the stored URI
    @@ -639,10 +647,10 @@ extends

    getLiveDelay

    int getLiveDelay()
    -
    Returns the live delay in seconds. The live delay is the number of seconds - that this race needs to be delayed when it is reproduced in live time. This - value is retrieved from the parameters file. If this file has not been - processed, this method returns -1.
    +
    Returns the live delay in seconds. The live delay is the number of + seconds that this race needs to be delayed when it is reproduced in live + time. This value is retrieved from the parameters file. If this file has + not been processed, this method returns -1.
    Returns:
    the live delay.
    @@ -655,13 +663,29 @@ extends
    boolean isInitialized()

    This value means if the race has been initialized. In practice, if this - value returns false, the tracking start time and the tracking - end time are null and there are not positions attached to this - race. + value returns false, the tracking start time and the + tracking end time are null and there are not positions + attached to this race.

    Returns:
    if the race has been initialized
    +
    + + +
      +
    • +

      setInitialized

      +
      void setInitialized(boolean initialized)
      +

      + Sets a race to an initialized state. From this moment it will be possible + to establish a connection with the server in order to retrieve control + point positions (the competitor positions can not be retrieved if the + race is not initialized). +

      +
      Parameters:
      initialized - update the state of initialization of a race
      +
    • +
    @@ -670,12 +694,13 @@ extends getStartTimeType
    StartTimeType getStartTimeType()

    - Gets the start time type of the race. At this moment this value is managed - only at an event level but in a future this functionality will be added at - a race level. + Gets the start time type of the race. At this moment this value is + managed only at an event level but in a future this functionality will be + added at a race level.

    - If the attribute is not defined, it always returns StartTimeType.RaceStart + If the attribute is not defined, it always returns + StartTimeType.RaceStart

    Returns:
    the start time type
    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/IRaceCompetitor.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/IRaceCompetitor.html index 0964099bcad..e750db45a22 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/IRaceCompetitor.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/IRaceCompetitor.html @@ -2,9 +2,9 @@ - + IRaceCompetitor - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/IRaceSerie.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/IRaceSerie.html index c04a068fbe7..877f8b55444 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/IRaceSerie.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/IRaceSerie.html @@ -2,9 +2,9 @@ - + IRaceSerie - + @@ -144,7 +144,7 @@ extends

    Methods inherited from interface com.tractrac.model.lib.api.attachment.IAttachable

    -getAttachment, setAttachment +getAttachment, setAttachment diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/ITeam.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/ITeam.html index 7a991bbcda8..b6068e8b750 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/ITeam.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/ITeam.html @@ -2,9 +2,9 @@ - + ITeam - + @@ -37,7 +37,7 @@ -
    Returns:
    an array containing the constants of this enum type, in -the order they are declared
    +
    Returns:
    an array containing the constants of this enum type, in the order they are declared
    @@ -267,8 +266,7 @@ not permitted.)
    Parameters:
    name - the name of the enum constant to be returned.
    Returns:
    the enum constant with the specified name
    Throws:
    -
    java.lang.IllegalArgumentException - if this enum type has no constant -with the specified name
    +
    java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
    java.lang.NullPointerException - if the argument is null
    @@ -316,8 +314,8 @@ with the specified name
    -
    Returns:
    an array containing the constants of this enum type, in -the order they are declared
    +
    Returns:
    an array containing the constants of this enum type, in the order they are declared
    @@ -275,8 +274,7 @@ not permitted.)
    Parameters:
    name - the name of the enum constant to be returned.
    Returns:
    the enum constant with the specified name
    Throws:
    -
    java.lang.IllegalArgumentException - if this enum type has no constant -with the specified name
    +
    java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
    java.lang.NullPointerException - if the argument is null
    @@ -318,8 +316,8 @@ with the specified name
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/class-use/StartTimeType.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/class-use/StartTimeType.html index c4ec31b3edf..98367661e83 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/class-use/StartTimeType.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/class-use/StartTimeType.html @@ -2,9 +2,9 @@ - + Uses of Class com.tractrac.model.lib.api.event.StartTimeType - + @@ -28,7 +28,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • @@ -142,7 +142,7 @@ the order they are declared.
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-frame.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-frame.html index 5f985492e16..f416e894c78 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-frame.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-frame.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api.event - + @@ -21,19 +21,9 @@
  • IRaceSerie
  • ITeam
  • -

    Classes

    -

    Enums

    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-summary.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-summary.html index 16abf129ba2..920713ea595 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-summary.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-summary.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api.event - + @@ -140,51 +140,6 @@
  • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Class Summary 
    ClassDescription
    AbstractJSONTest 
    EventsFromClubsJSONTest 
    EventsFromJSONTest 
    RaceCompetitorTest 
    RaceSerieTest 
    RacesFromJSONTest 
    SameEventTest 
    StartTimeTypeTest -
    Class used to test the StartTimeType enumerate
    -
    -
  • -
  • @@ -193,10 +148,17 @@ + + + + - + - - - - - - - - - - - - - + - + - + - + - - - - - - - - - - - - - - - - -
    Enum Summary 
    EventType +
    + The type of the event, according with the EventManager
    +
    RaceStatusType  
    StartTimeType
    Type of start time to use.
    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-tree.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-tree.html index 9741bd5eb0e..bb52c4329e1 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-tree.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-tree.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api.event Class Hierarchy - + @@ -74,25 +74,6 @@
    • java.lang.Object
        -
      • junit.framework.Assert - -
      • java.lang.Throwable (implements java.io.Serializable)
        • java.lang.Exception @@ -163,8 +144,9 @@
          • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
          diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-use.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-use.html index 2333669d944..55a7ac7ecda 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-use.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/event/package-use.html @@ -2,9 +2,9 @@ - + Uses of Package com.tractrac.model.lib.api.event - + @@ -83,62 +83,41 @@
    com.tractrac.model.lib.api.attachment -
    - Contains the functionality to attach an object to other object.
    -
    com.tractrac.model.lib.api.event
    Events, races and competitors
    com.tractrac.model.lib.api.metadata -
    - The metadata functionality
    -
    com.tractrac.model.lib.api.route -
    - The route configuration: controls, paths and routes
    -
    com.tractrac.subscription.lib.api
    Contains the classes used to add a subscription to an event.
    com.tractrac.subscription.lib.api.competitor
    Subscriptions related with competitors and positions
    com.tractrac.subscription.lib.api.control
    Subscriptions related with the controls and control passings
    com.tractrac.subscription.lib.api.event
    Subscriptions related with the event and/or the connection
    com.tractrac.subscription.lib.api.race
    @@ -158,53 +137,11 @@
    CreateModelException 
    ICompetitor -
    - Encapsulates data related to a Competitor of an Event.
    -
    IEvent -
    Encapsulates data related to an Event: Races, Competitors, Competitor - Classes, Routes.
    -
    IEventFactory
    Factory used to create an IEvent.
    IRace -
    - Encapsulates data related to a specific Race of a TracTrac Event.
    -
    IRaceCompetitor -
    - Encapsulates data related to a specific Competitor of a specific Race.
    -
    -
  • -
  • - - - - - - - - - - -
    Classes in com.tractrac.model.lib.api.event used by com.tractrac.model.lib.api.attachment 
    Class and Description
    CreateModelException 
  • @@ -218,10 +155,13 @@ -AbstractJSONTest  +CreateModelException  -CreateModelException  +EventType +
    + The type of the event, according with the EventManager
    + ICompetitor @@ -282,36 +222,6 @@ -
  • - - - - - - - - - - - - -
    Classes in com.tractrac.model.lib.api.event used by com.tractrac.model.lib.api.metadata 
    Class and Description
    CreateModelException 
    -
  • -
  • - - - - - - - - - - - - -
    Classes in com.tractrac.model.lib.api.event used by com.tractrac.model.lib.api.route 
    Class and Description
    CreateModelException 
    -
  • @@ -322,15 +232,6 @@ -CreateModelException  - - -ICompetitor -
    - Encapsulates data related to a Competitor of an Event.
    - - - IEvent
    Encapsulates data related to an Event: Races, Competitors, Competitor Classes, Routes.
    @@ -342,9 +243,6 @@ Encapsulates data related to a specific Race of a TracTrac Event.
  • - -RaceStatusType  - @@ -358,15 +256,12 @@ -CreateModelException  - - ICompetitor
    Encapsulates data related to a Competitor of an Event.
    - + IRaceCompetitor
    Encapsulates data related to a specific Competitor of a specific Race.
    @@ -385,9 +280,6 @@ -CreateModelException  - - IRaceCompetitor
    Encapsulates data related to a specific Competitor of a specific Race.
    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadata.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadata.html index 16c8aaae2e5..7824bec6839 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadata.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadata.html @@ -2,9 +2,9 @@ - + IMetadata - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadataContainer.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadataContainer.html index 2c5d8528b3f..654e27ef512 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadataContainer.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadataContainer.html @@ -2,9 +2,9 @@ - + IMetadataContainer - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadataFactory.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadataFactory.html index 61dc09c7855..457ad41b213 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadataFactory.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IMetadataFactory.html @@ -2,9 +2,9 @@ - + IMetadataFactory - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IPropertiesContainer.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IPropertiesContainer.html index da4f02af8b6..8941143baed 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IPropertiesContainer.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/IPropertiesContainer.html @@ -2,9 +2,9 @@ - + IPropertiesContainer - + @@ -37,7 +37,7 @@
    -

    Class Hierarchy

    -

    Interface Hierarchy

    • com.tractrac.model.lib.api.metadata.IMetadata
    • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/package-use.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/package-use.html index 7651f340b53..9639d5c5803 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/package-use.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/metadata/package-use.html @@ -2,9 +2,9 @@ - + Uses of Package com.tractrac.model.lib.api.metadata - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-frame.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-frame.html index e3696323e5c..5189f0a1fca 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-frame.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-frame.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api - + @@ -17,10 +17,7 @@

    Classes

    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-summary.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-summary.html index 6db5d2c929d..e791d5f9a93 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-summary.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-summary.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api - + @@ -104,13 +104,6 @@ -AbstractModelTest - -
    - Abstract class that can be inherited for the test classes.
    - - - ModelLocator
    @@ -118,20 +111,6 @@ that are used for the creation of the objects.
    - -ModelLocatorTest - -
    - This test checks if an implementation of the model library implements all the - mandatory objects
    - - - -ReadParameterFileTest - -
    Class that tests reading in a Text parameter file and setting up an event
    - - diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-tree.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-tree.html index a4d16bacd93..59fe0839d28 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-tree.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-tree.html @@ -2,9 +2,9 @@ - + com.tractrac.model.lib.api Class Hierarchy - + @@ -74,18 +74,7 @@ diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-use.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-use.html index fa86e4a3ce3..717868ade5d 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-use.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/package-use.html @@ -2,9 +2,9 @@ - + Uses of Package com.tractrac.model.lib.api - + @@ -96,34 +96,6 @@ The route configuration: controls, paths and routes - -com.tractrac.subscription.lib.api - -
    - Contains the classes used to add a subscription to an event.
    - - - -com.tractrac.subscription.lib.api.competitor - -
    - Subscriptions related with competitors and positions
    - - - -com.tractrac.subscription.lib.api.control - -
    - Subscriptions related with the controls and control passings
    - - - -com.tractrac.subscription.lib.api.race - -
    - Subscriptions related with the races
    - - @@ -188,78 +160,6 @@ -
  • - - - - - - - - - - - - -
    Classes in com.tractrac.model.lib.api used by com.tractrac.subscription.lib.api 
    Class and Description
    AbstractModelTest -
    - Abstract class that can be inherited for the test classes.
    -
    -
  • -
  • - - - - - - - - - - - - -
    Classes in com.tractrac.model.lib.api used by com.tractrac.subscription.lib.api.competitor 
    Class and Description
    AbstractModelTest -
    - Abstract class that can be inherited for the test classes.
    -
    -
  • -
  • - - - - - - - - - - - - -
    Classes in com.tractrac.model.lib.api used by com.tractrac.subscription.lib.api.control 
    Class and Description
    AbstractModelTest -
    - Abstract class that can be inherited for the test classes.
    -
    -
  • -
  • - - - - - - - - - - - - -
    Classes in com.tractrac.model.lib.api used by com.tractrac.subscription.lib.api.race 
    Class and Description
    AbstractModelTest -
    - Abstract class that can be inherited for the test classes.
    -
    -
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/route/IControl.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/route/IControl.html index 6c97a9a9bd0..2ca5f0f681e 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/route/IControl.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/model/lib/api/route/IControl.html @@ -2,9 +2,9 @@ - + IControl - + @@ -36,7 +36,7 @@
    Parameters:
    parametersURI - the URI where the parameters file is located
    liveUri - the uri where the live provider is located
    storedUri - the uri where the stored provider is located
    Returns:
    a subscriber for the race
    @@ -321,6 +330,17 @@ extends com.tractrac.common.lib.api.service.IServiceProvider
    SubscriberInitializationException - if there is any error creating the subscriber
    + + + +
      +
    • +

      setUserId

      +
      void setUserId(java.lang.String userId)
      +
      Add a valid user with permissions to retrieve data
      +
      Parameters:
      userId - a valid user
      +
    • +
    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/ISubscriberListener.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/ISubscriberListener.html index 36bf804584d..25c3ce86e72 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/ISubscriberListener.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/ISubscriberListener.html @@ -2,9 +2,9 @@ - + ISubscriberListener - + @@ -37,7 +37,7 @@ - -ISubscriberListener + + + +
  • + + + + + + + + + + - diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceStartStopTimesChangeListener.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceStartStopTimesChangeListener.html index f9ec8dc7735..ce647ac54b0 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceStartStopTimesChangeListener.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceStartStopTimesChangeListener.html @@ -2,9 +2,9 @@ - +IRaceStartStopTimesChangeListener - + @@ -123,14 +123,14 @@ extends - - diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRacesListener.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRacesListener.html index 153f9f40f61..d42810c6e86 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRacesListener.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRacesListener.html @@ -2,9 +2,9 @@ - + IRacesListener - + @@ -90,10 +90,6 @@
    All Superinterfaces:
    ISubscriberListener
    -
    -
    All Known Implementing Classes:
    -
    RacesListener
    -


    public interface IRacesListener
    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IStartStopTimesChangeListener.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IStartStopTimesChangeListener.html
    index 95c813176a8..f4cb9c062c5 100644
    --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IStartStopTimesChangeListener.html
    +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IStartStopTimesChangeListener.html
    @@ -2,9 +2,9 @@
     
     
     
    -
    +
     IStartStopTimesChangeListener
    -
    +
     
     
     
    @@ -37,7 +37,7 @@
     
     
     
    - - - -
    Classes in com.tractrac.subscription.lib.api used by com.tractrac.subscription.lib.api.route 
    Class and Description
    ISubscriberListener
    All the listeners that are used for the consumer application in order to receive events from the server side have to implemented this interface.
    diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceCompetitorListener.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceCompetitorListener.html index 29feb49c85a..4c419636815 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceCompetitorListener.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceCompetitorListener.html @@ -2,9 +2,9 @@ - + IRaceCompetitorListener - + diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceMessageListener.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceMessageListener.html index 7dba4d2fcf5..b0630b2fc4e 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceMessageListener.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/IRaceMessageListener.html @@ -2,9 +2,9 @@ - + IRaceMessageListener - + @@ -114,7 +114,7 @@
    voidgotRaceMessage(IRace race, +gotRaceMessage(IRace race, IMessageData messageData)
    Invoked when a new race message arrives
    voidgotRaceStartStopTime(IRace race, +gotRaceStartStopTime(IRace race, IStartStopData startStopData)
    Invoked when an update in the race start and/or stop time occurs.
    voidgotTrackingStartStopTime(IRace race, +gotTrackingStartStopTime(IRace race, IStartStopData startStopData)
    Invoked when an update in the tracking start and/or stop time occurs.
    com.tractrac.subscription.lib.api.race -
    - Subscriptions related with the races
    -
  • @@ -122,24 +115,6 @@ -
  • - - -

    Uses of IRacesListener in com.tractrac.subscription.lib.api.race

    - - - - - - - - - - - - -
    Classes in com.tractrac.subscription.lib.api.race that implement IRacesListener 
    Modifier and TypeClass and Description
    class RacesListener 
    -
  • @@ -155,7 +130,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/class-use/IStartStopTimesChangeListener.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/class-use/IStartStopTimesChangeListener.html index e8fca35bed0..a874475419c 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/class-use/IStartStopTimesChangeListener.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/class-use/IStartStopTimesChangeListener.html @@ -2,9 +2,9 @@ - + Uses of Interface com.tractrac.subscription.lib.api.race.IStartStopTimesChangeListener - + @@ -28,7 +28,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • @@ -128,7 +128,7 @@
  • Package
  • Class
  • -
  • Tree
  • +
  • Tree
  • Deprecated
  • Index
  • Help
  • diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/package-frame.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/package-frame.html index c7e76f2b98e..e73c6434a0e 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/package-frame.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/package-frame.html @@ -2,9 +2,9 @@ - + com.tractrac.subscription.lib.api.race - + @@ -18,13 +18,6 @@
  • IRaceStartStopTimesChangeListener
  • IStartStopTimesChangeListener
  • -

    Classes

    - diff --git a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/package-summary.html b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/package-summary.html index 66fe09b4ac3..c8fd708a4b5 100644 --- a/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/package-summary.html +++ b/java/com.tractrac.clientmodule/javadoc/com/tractrac/subscription/lib/api/race/package-summary.html @@ -2,9 +2,9 @@ - + com.tractrac.subscription.lib.api.race - + @@ -37,7 +37,7 @@ -
    reloadRace(UUID) - Method in class com.tractrac.subscription.lib.api.race.RacesListener
    -
     
    -
    removeRaceCompetitor(IRace, UUID) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    +
    subscribeEventMessages(IEventMessageListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    Delete a race from the race
    +
    Subscribe to messages for an event.
    +
    subscribeEventTimesChanges(IStartStopTimesChangeListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    +
    +
    Subscribes to changes in event start and stop times.
    +
    +
    subscribePositions(IPositionListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to competitor positions for a given Race.
    +
    +
    subscribePositions(IPositionListener, long, long) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to competitor positions for a given Race.
    +
    +
    subscribePositionsOffset(IPositionOffsetListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to offset competitor positions for a given Race.
    +
    +
    subscribePositionsOffset(IPositionOffsetListener, long, long) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to offset competitor positions for a given Race, including + historic data.
    +
    +
    subscribePositionsSnapped(IPositionSnappedListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to snapped competitor positions for a given Race.
    +
    +
    subscribePositionsSnapped(IPositionSnappedListener, long, long) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to snapped competitor positions for a given Race, including + historic data.
    +
    +
    subscribeRaceCompetitor(IRaceCompetitorListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to race competitor for a given Race.
    +
    +
    subscribeRaceMessages(IRaceMessageListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribe to messages for a race.
    +
    +
    subscribeRaces(IRacesListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    +
    +
    + Subscriber to race changes.
    +
    +
    subscribeRaceTimesChanges(IRaceStartStopTimesChangeListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to changes in race start and stop times.
    +
    +
    SubscriberInitializationException - Exception in com.tractrac.subscription.lib.api
    +
    +
    This exception is thrown when it is not possible to create a susbcriber.
    +
    +
    SubscriberInitializationException(Exception) - Constructor for exception com.tractrac.subscription.lib.api.SubscriberInitializationException
    +
     
    +
    subscribeRouteChanges(IControlRouteChangeListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Subscribes to route changes for a given Race.
    +
    +
    subscribeRoutes(IRoutesListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    + Subscriber to route changes.
    +
    +
    subscribeServerTime(IServerTimeListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    +
    +
    Subscribe to messages for the server time.
    +
    +
    SubscriptionLocator - Class in com.tractrac.subscription.lib.api
    +
    +
    + This class is a locator used to get the instance of some of the factories + that are used for the creation of the objects.
    +
    +
    SubscriptionLocator() - Constructor for class com.tractrac.subscription.lib.api.SubscriptionLocator
    +
     
    -A B C D E G I L M N P R S T U V  +A B C D E G I L M N R S T U V  -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V  -

    S

    +

    T

    -
    SameEventTest - Class in com.tractrac.model.lib.api.event
    -
     
    -
    SameEventTest() - Constructor for class com.tractrac.model.lib.api.event.SameEventTest
    -
     
    -
    setAttachment(IAttachmentKey, Object) - Method in class com.tractrac.model.lib.api.attachment.AbstractAttachable
    -
     
    -
    setAttachment(IAttachmentKey, Object) - Method in interface com.tractrac.model.lib.api.attachment.IAttachable
    +
    toArray() - Method in interface com.tractrac.model.lib.api.spatial.ICoordinateSequence
    -
    Sets custom data for this object.
    +
    Returns (possibly copies of) the coordinates in this collection.
    -
    setDirection(double) - Method in interface com.tractrac.model.lib.api.data.IPosition
    -
    -
    Sets the direction
    -
    -
    setHeight(double) - Method in interface com.tractrac.model.lib.api.spatial.IGeoCoordinate
    -
    -
    Sets the value of the height
    -
    -
    setLatitude(double) - Method in interface com.tractrac.model.lib.api.spatial.IGeoCoordinate
    -
    -
    Sets the value of the latitude
    -
    -
    setLongitude(double) - Method in interface com.tractrac.model.lib.api.spatial.IGeoCoordinate
    -
    -
    Sets the value of the longitude
    -
    -
    setM(double) - Method in interface com.tractrac.model.lib.api.spatial.IGeoCoordinate
    -
    -
    Sets the value of the m coordinate
    -
    -
    setSpeed(double) - Method in interface com.tractrac.model.lib.api.data.IPosition
    -
    -
    Set the speed value
    -
    -
    setUp() - Method in class com.tractrac.model.lib.api.attachment.AttachmentsTest
    -
     
    -
    setUp() - Method in class com.tractrac.model.lib.api.event.AbstractJSONTest
    -
     
    -
    setUp() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    setUp() - Method in class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    -
    setUp() - Method in class com.tractrac.model.lib.api.route.ControlRouteTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.competitor.CompetitorsEventTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.competitor.PositionEventTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.competitor.ReconnectAddingEntriesTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.control.ControlsEventTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.control.ReconnectAddingControlsTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.control.ReconnectWithStaticControlsTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.control.StaticControlInSecondRace
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.control.StaticControlTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.control.StaticRoutesChangesTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.race.RacesEventTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.race.StaticRaceStartStopTimesChangeTest
    -
     
    -
    setUp() - Method in class com.tractrac.subscription.lib.api.ReadHDRaceTest
    -
     
    -
    size() - Method in interface com.tractrac.model.lib.api.spatial.ICoordinateSequence
    -
    -
    Returns the number of points in the coordinate sequence.
    -
    -
    start() - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Create the threads that listen both the stored and live connections
    -
    -
    start() - Method in interface com.tractrac.subscription.lib.api.ISubscriber
    -
    -
    Start a new thread that received data from the subscriptions
    -
    -
    StartTimeType - Enum in com.tractrac.model.lib.api.event
    -
    -
    Type of start time to use.
    -
    -
    StartTimeTypeTest - Class in com.tractrac.model.lib.api.event
    -
    -
    Class used to test the StartTimeType enumerate
    -
    -
    StartTimeTypeTest() - Constructor for class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    startTracking(UUID) - Method in interface com.tractrac.subscription.lib.api.race.IRacesListener
    -
    -
    It is thrown when tracking of a race has started.
    -
    -
    startTracking(UUID) - Method in class com.tractrac.subscription.lib.api.race.RacesListener
    -
     
    -
    StaticControlInSecondRace - Class in com.tractrac.subscription.lib.api.control
    -
    -
    This test check the values for the static control points when a recond race - is loaded
    -
    -
    StaticControlInSecondRace() - Constructor for class com.tractrac.subscription.lib.api.control.StaticControlInSecondRace
    -
     
    -
    StaticControlTest - Class in com.tractrac.subscription.lib.api.control
    -
    -
    - This test checks that the subscription library sends events with the - positions of the static marks
    -
    -
    StaticControlTest() - Constructor for class com.tractrac.subscription.lib.api.control.StaticControlTest
    -
     
    -
    StaticRaceStartStopTimesChangeTest - Class in com.tractrac.subscription.lib.api.race
    -
     
    -
    StaticRaceStartStopTimesChangeTest() - Constructor for class com.tractrac.subscription.lib.api.race.StaticRaceStartStopTimesChangeTest
    -
     
    -
    StaticRoutesChangesTest - Class in com.tractrac.subscription.lib.api.control
    -
     
    -
    StaticRoutesChangesTest() - Constructor for class com.tractrac.subscription.lib.api.control.StaticRoutesChangesTest
    -
     
    -
    stop() - Method in interface com.tractrac.subscription.lib.api.ISubscriber
    -
    -
    Stops the thread that receives data from the subscriptions
    -
    -
    stopped(Object) - Method in interface com.tractrac.subscription.lib.api.event.IConnectionStatusListener
    -
    -
    Invoked when data subscription was stopped.
    -
    -
    subscribeCompetitors(ICompetitorsListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    -
    - Subscriber to competitor changes.
    -
    -
    subscribeConnectionStatus(IConnectionStatusListener) - Method in interface com.tractrac.subscription.lib.api.ISubscriber
    -
    -
    Subscribes for connection status
    -
    -
    subscribeControlPassings(IControlPassingsListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to control passing data for the specified race.
    -
    -
    subscribeControlPositions(IControlPointPositionListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to control positions for the race.
    -
    -
    subscribeControlPositions(IControlPointPositionListener, long, long) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to control positions for the race, also retrieving historic - data.
    -
    -
    subscribeControls(IControlsListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    -
    - Subscriber to control changes.
    -
    -
    subscribeEventMessages(IEventMessageListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    -
    Subscribe to messages for an event.
    -
    -
    subscribeEventTimesChanges(IStartStopTimesChangeListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    -
    Subscribes to changes in event start and stop times.
    -
    -
    subscribePositions(IPositionListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to competitor positions for a given Race.
    -
    -
    subscribePositions(IPositionListener, long, long) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to competitor positions for a given Race.
    -
    -
    subscribePositionsOffset(IPositionOffsetListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to offset competitor positions for a given Race.
    -
    -
    subscribePositionsOffset(IPositionOffsetListener, long, long) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to offset competitor positions for a given Race, including - historic data.
    -
    -
    subscribePositionsSnapped(IPositionSnappedListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to snapped competitor positions for a given Race.
    -
    -
    subscribePositionsSnapped(IPositionSnappedListener, long, long) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to snapped competitor positions for a given Race, including - historic data.
    -
    -
    subscribeRaceCompetitor(IRaceCompetitorListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to race competitor for a given Race.
    -
    -
    subscribeRaceMessages(IRaceMessageListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribe to messages for a race.
    -
    -
    subscribeRaces(IRacesListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    -
    - Subscriber to race changes.
    -
    -
    subscribeRaceTimesChanges(IRaceStartStopTimesChangeListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to changes in race start and stop times.
    -
    -
    SubscriberInitializationException - Exception in com.tractrac.subscription.lib.api
    -
    -
    This exception is thrown when it is not possible to create a susbcriber.
    -
    -
    SubscriberInitializationException(Exception) - Constructor for exception com.tractrac.subscription.lib.api.SubscriberInitializationException
    -
     
    -
    subscribeRouteChanges(IControlRouteChangeListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Subscribes to route changes for a given Race.
    -
    -
    subscribeServerTime(IServerTimeListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    -
    Subscribe to messages for the server time.
    -
    -
    SubscriptionLocator - Class in com.tractrac.subscription.lib.api
    -
    -
    - This class is a locator used to get the instance of some of the factories - that are used for the creation of the objects.
    -
    -
    SubscriptionLocator() - Constructor for class com.tractrac.subscription.lib.api.SubscriptionLocator
    -
     
    -
    SubscriptionLocatorTest - Class in com.tractrac.subscription.lib.api
    -
    -
    - This test checks if an implementation of the model library implements all the - mandatory objects
    -
    -
    SubscriptionLocatorTest() - Constructor for class com.tractrac.subscription.lib.api.SubscriptionLocatorTest
    -
     
    -
    SubscriptionTestLocator - Class in com.tractrac.subscription.lib.api
    -
    -
    - This class is a locator used to get the instance of some of the factories - that are used for the creation of the objects.
    -
    -
    SubscriptionTestLocator() - Constructor for class com.tractrac.subscription.lib.api.SubscriptionTestLocator
    -
     
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V  -

    T

    +

    U

    -
    testAbandonRace() - Method in class com.tractrac.subscription.lib.api.race.RacesEventTest
    -
     
    -
    testAddCompetitor() - Method in class com.tractrac.subscription.lib.api.competitor.CompetitorsEventTest
    -
     
    -
    testAddCompetitor() - Method in class com.tractrac.subscription.lib.api.race.RaceCompetitorTest
    -
     
    -
    testAddMark() - Method in class com.tractrac.subscription.lib.api.control.ControlsEventTest
    -
     
    -
    testAddRace() - Method in class com.tractrac.subscription.lib.api.race.RacesEventTest
    -
     
    -
    testAttachmentManagerSingleton() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribeCompetitors(ICompetitorsListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    Test if the IAttachmentManager is a singleton
    +
    + Unsubscribes the competitors subscribers
    -
    testChangeControlCompetitor() - Method in class com.tractrac.subscription.lib.api.control.ReconnectAddingControlsTest
    -
     
    -
    testClasses() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testCompetitors() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testCreateAttachment() - Method in class com.tractrac.model.lib.api.attachment.AttachmentsTest
    -
     
    -
    testCreateAttachment() - Method in class com.tractrac.model.lib.api.route.ControlRouteTest
    -
     
    -
    testCreateSeveralAttachments() - Method in class com.tractrac.model.lib.api.attachment.AttachmentsTest
    -
     
    -
    testEvent() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testEventData() - Method in class com.tractrac.subscription.lib.api.ReadHDRaceTest
    -
     
    -
    testEventFactorySingleton() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribeConnectionStatus(IConnectionStatusListener) - Method in interface com.tractrac.subscription.lib.api.ISubscriber
    -
    Test if the IEventFactory is a singleton
    +
    Unsubscribes for connection status
    -
    testLoadRace() - Method in class com.tractrac.model.lib.api.event.RacesFromJSONTest
    -
     
    -
    testMetadata() - Method in class com.tractrac.model.lib.api.event.RaceCompetitorTest
    -
     
    -
    testMetadataFactorySingleton() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribeControlPassings(IControlPassingsListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    Test if the IPositionFactory is a singleton
    +
    Unsubscribes to control passing data for the specified race.
    -
    testMetadataForCompetitor() - Method in class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    -
    testMetadataForControlPoint() - Method in class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    -
    testMetadataForCourse() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testMetadataForRace() - Method in class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    -
    testMetadataForRoute() - Method in class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    -
    testMetadataFromControl() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testMetadataIsEmpty() - Method in class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    -
    testMetadataisNull() - Method in class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    -
    testMetadataWithBreakLine() - Method in class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    -
    testModel() - Method in class com.tractrac.subscription.lib.api.competitor.PositionEventTest
    -
     
    -
    testParseEventsFile() - Method in class com.tractrac.model.lib.api.event.EventsFromClubsJSONTest
    -
     
    -
    testParseEventsFile() - Method in class com.tractrac.model.lib.api.event.EventsFromJSONTest
    -
     
    -
    testPathRouteFactorySingleton() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribeControlPositions(IControlPointPositionListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    Test if the IPathRouteFactory is a singleton
    +
    Unsubscribes to control positions.
    -
    testPositionFactorySingleton() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribeControls(IControlsListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    Test if the IPositionFactory is a singleton
    +
    + Unsubscribes the controls subscribers
    -
    testRace() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testRaceCompetitor() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testReadRaceSerie() - Method in class com.tractrac.model.lib.api.event.RaceSerieTest
    -
     
    -
    testRegisteredAttachmentManager() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribeEventMessages(IEventMessageListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    Test if there is a IAttachmentManager registered.
    +
    Unsubscribes to event messages.
    -
    testRegisteredEventFactory() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribeEventTimesChanges(IStartStopTimesChangeListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    Test if there is a IEventFactory registered.
    +
    Unsubscribes to changes in event start and stop times.
    -
    testRegisteredMetadataFactory() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribePositions(IPositionListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    Test if there is a IMetadataFactory registered.
    +
    Unsubscribes to competitor positions for a given Race.
    -
    testRegisteredPathRouteFactory() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribePositionsOffset(IPositionOffsetListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    Test if there is a IPathRouteFactory registered.
    +
    Unsubscribes to competitor positions for a given Race.
    -
    testRegisteredPositionFactory() - Method in class com.tractrac.model.lib.api.ModelLocatorTest
    +
    unsubscribePositionsSnapped(IPositionSnappedListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    Test if there is a IPositionFactory registered.
    +
    Unsubscribes to competitor positions for a given Race.
    -
    testRegisteredSubscriberFactory() - Method in class com.tractrac.subscription.lib.api.SubscriptionLocatorTest
    +
    unsubscribeRaceCompetitor(IRaceCompetitorListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    Test if there is a ISubscriberFactory registered.
    +
    Unsubscribes to race competitor
    -
    testReloadRace() - Method in class com.tractrac.subscription.lib.api.race.RacesEventTest
    -
     
    -
    testRemoveAndAddCompetitor() - Method in class com.tractrac.subscription.lib.api.competitor.ReconnectAddingEntriesTest
    -
     
    -
    testRemoveCompetitor() - Method in class com.tractrac.subscription.lib.api.competitor.CompetitorsEventTest
    -
     
    -
    testRemoveCompetitor() - Method in class com.tractrac.subscription.lib.api.race.RaceCompetitorTest
    -
     
    -
    testRemoveMark() - Method in class com.tractrac.subscription.lib.api.control.ControlsEventTest
    -
     
    -
    testRemoveRace() - Method in class com.tractrac.subscription.lib.api.race.RacesEventTest
    -
     
    -
    testRouteData() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testRouteData() - Method in class com.tractrac.model.lib.api.route.ReadTextPathRouteTests
    -
     
    -
    testRouteName() - Method in class com.tractrac.model.lib.api.route.ReadRouteTest
    -
     
    -
    testRouteNotNull() - Method in class com.tractrac.model.lib.api.event.RaceCompetitorTest
    -
     
    -
    testSameEvent() - Method in class com.tractrac.model.lib.api.event.SameEventTest
    -
     
    -
    testStartTypeIdividualAndStartTimeTypeNull() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeIndividualAndStartTimeTypeFirstMark() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeIndividualAndStartTimeTypeIndividual() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeIndividualAndStartTimeTypeRace() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeMassStartAndStartTimeTypeFirstMark() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeMassStartAndStartTimeTypeIndividual() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeMassStartAndStartTimeTypeNull() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeMassStartAndStartTimeTypeRace() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeNullAndStartTimeTypeFirstMark() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeNullAndStartTimeTypeIndividual() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeNullAndStartTimeTypeNull() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStartTypeNullAndStartTimeTypeRace() - Method in class com.tractrac.model.lib.api.event.StartTimeTypeTest
    -
     
    -
    testStaticControlInSecondRace() - Method in class com.tractrac.subscription.lib.api.control.StaticControlInSecondRace
    -
     
    -
    testStaticMark() - Method in class com.tractrac.subscription.lib.api.control.StaticControlTest
    -
     
    -
    testStaticPointChanged() - Method in class com.tractrac.subscription.lib.api.control.ReconnectWithStaticControlsTest
    -
     
    -
    testStaticRoute() - Method in class com.tractrac.subscription.lib.api.control.StaticRoutesChangesTest
    -
     
    -
    testStoredPositions() - Method in class com.tractrac.subscription.lib.api.competitor.PositionEventTest
    -
     
    -
    testSubscriberFactorySingleton() - Method in class com.tractrac.subscription.lib.api.SubscriptionLocatorTest
    +
    unsubscribeRaceMessages(IRaceMessageListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    Test if the ISubscriberFactory is a singleton
    +
    Unsubscribes to race messages
    -
    testTeams() - Method in class com.tractrac.model.lib.api.ReadParameterFileTest
    -
     
    -
    testTrackingTimesChange() - Method in class com.tractrac.subscription.lib.api.race.StaticRaceStartStopTimesChangeTest
    -
     
    -
    testUpdateCompetitor() - Method in class com.tractrac.subscription.lib.api.competitor.CompetitorsEventTest
    -
     
    -
    testUpdateMark() - Method in class com.tractrac.subscription.lib.api.control.ControlsEventTest
    -
     
    -
    testUpdateRace() - Method in class com.tractrac.subscription.lib.api.race.RacesEventTest
    -
     
    -
    toArray() - Method in interface com.tractrac.model.lib.api.spatial.ICoordinateSequence
    +
    unsubscribeRaces(IRacesListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    Returns (possibly copies of) the coordinates in this collection.
    +
    + Unsubscribes the races subscribers
    +
    +
    unsubscribeRaceTimesChanges(IRaceStartStopTimesChangeListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Unsubscribes to changes in race start and stop times.
    +
    +
    unsubscribeRouteChanges(IControlRouteChangeListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    Unsubscribes to route changes for a given Race.
    +
    +
    unsubscribeRoutes(IRoutesListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    +
    + Unsubscribes to route changes for a given Race.
    +
    +
    unsubscribeServerTime(IServerTimeListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    +
    +
    Unsubscribes to messages for the server time.
    +
    +
    updateCompetitor(ICompetitor) - Method in interface com.tractrac.model.lib.api.event.IEvent
    +
    +
    Update a competitor
    +
    +
    updateCompetitor(ICompetitor) - Method in interface com.tractrac.subscription.lib.api.competitor.ICompetitorsListener
    +
    +
    This event is thrown when a competitor is updated.
    +
    +
    updateControl(IControl) - Method in interface com.tractrac.model.lib.api.event.IEvent
    +
    +
    Update a control
    +
    +
    updateControl(IControl) - Method in interface com.tractrac.subscription.lib.api.control.IControlsListener
    +
    +
    This event is thrown when a control is updated.
    +
    +
    updateRace(IRace) - Method in interface com.tractrac.model.lib.api.event.IEvent
    +
    +
    Update a race
    +
    +
    updateRace(IRace) - Method in interface com.tractrac.subscription.lib.api.race.IRacesListener
    +
    +
    This event is thrown when a race is updated.
    +
    +
    updateRoute(IRoute) - Method in interface com.tractrac.subscription.lib.api.route.IRoutesListener
    +
    +
    This event is thrown when a route is updated.
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    diff --git a/java/com.tractrac.clientmodule/javadoc/index-files/index-15.html b/java/com.tractrac.clientmodule/javadoc/index-files/index-15.html index e2afe4a4c23..a21e0a275b1 100644 --- a/java/com.tractrac.clientmodule/javadoc/index-files/index-15.html +++ b/java/com.tractrac.clientmodule/javadoc/index-files/index-15.html @@ -2,15 +2,15 @@ - -U-Index - + +V-Index + @@ -37,7 +37,7 @@ -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V  -

    U

    +

    V

    -
    unsubscribeCompetitors(ICompetitorsListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    +
    valueOf(String) - Static method in enum com.tractrac.model.lib.api.event.EventType
    -
    - Unsubscribes the competitors subscribers
    +
    Returns the enum constant of this type with the specified name.
    -
    unsubscribeConnectionStatus(IConnectionStatusListener) - Method in interface com.tractrac.subscription.lib.api.ISubscriber
    +
    valueOf(String) - Static method in enum com.tractrac.model.lib.api.event.RaceStatusType
    -
    Unsubscribes for connection status
    +
    Returns the enum constant of this type with the specified name.
    -
    unsubscribeControlPassings(IControlPassingsListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    valueOf(String) - Static method in enum com.tractrac.model.lib.api.event.StartTimeType
    -
    Unsubscribes to control passing data for the specified race.
    +
    Returns the enum constant of this type with the specified name.
    -
    unsubscribeControlPositions(IControlPointPositionListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    valueOf(String) - Static method in enum com.tractrac.subscription.lib.api.event.ILiveDataEvent.StatusType
    -
    Unsubscribes to control positions.
    +
    Returns the enum constant of this type with the specified name.
    -
    unsubscribeControls(IControlsListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    +
    valueOf(String) - Static method in enum com.tractrac.subscription.lib.api.event.IStoredDataEvent.Type
    -
    - Unsubscribes the controls subscribers
    +
    Returns the enum constant of this type with the specified name.
    -
    unsubscribeEventMessages(IEventMessageListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    +
    values() - Static method in enum com.tractrac.model.lib.api.event.EventType
    -
    Unsubscribes to event messages.
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    -
    unsubscribeEventTimesChanges(IStartStopTimesChangeListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    +
    values() - Static method in enum com.tractrac.model.lib.api.event.RaceStatusType
    -
    Unsubscribes to changes in event start and stop times.
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    -
    unsubscribePositions(IPositionListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    values() - Static method in enum com.tractrac.model.lib.api.event.StartTimeType
    -
    Unsubscribes to competitor positions for a given Race.
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    -
    unsubscribePositionsOffset(IPositionOffsetListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    values() - Static method in enum com.tractrac.subscription.lib.api.event.ILiveDataEvent.StatusType
    -
    Unsubscribes to competitor positions for a given Race.
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    -
    unsubscribePositionsSnapped(IPositionSnappedListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    +
    values() - Static method in enum com.tractrac.subscription.lib.api.event.IStoredDataEvent.Type
    -
    Unsubscribes to competitor positions for a given Race.
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    -
    unsubscribeRaceCompetitor(IRaceCompetitorListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Unsubscribes to race competitor
    -
    -
    unsubscribeRaceMessages(IRaceMessageListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Unsubscribes to race messages
    -
    -
    unsubscribeRaces(IRacesListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    -
    - Unsubscribes the races subscribers
    -
    -
    unsubscribeRaceTimesChanges(IRaceStartStopTimesChangeListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Unsubscribes to changes in race start and stop times.
    -
    -
    unsubscribeRouteChanges(IControlRouteChangeListener) - Method in interface com.tractrac.subscription.lib.api.IRaceSubscriber
    -
    -
    Unsubscribes to route changes for a given Race.
    -
    -
    unsubscribeServerTime(IServerTimeListener) - Method in interface com.tractrac.subscription.lib.api.IEventSubscriber
    -
    -
    Unsubscribes to messages for the server time.
    -
    -
    updateCompetitor(ICompetitor) - Method in interface com.tractrac.model.lib.api.event.IEvent
    -
    -
    Update a competitor
    -
    -
    updateCompetitor(ICompetitor) - Method in interface com.tractrac.subscription.lib.api.competitor.ICompetitorsListener
    -
    -
    This event is thrown when a competitor is updated.
    -
    -
    updateCompetitor(UUID, String, String, String, String) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Update a competitor
    -
    -
    updateControl(IControl) - Method in interface com.tractrac.model.lib.api.event.IEvent
    -
    -
    Update a control
    -
    -
    updateControl(IControl) - Method in interface com.tractrac.subscription.lib.api.control.IControlsListener
    -
    -
    This event is thrown when a control is updated.
    -
    -
    updateLiveDelay(int) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Update the live delay property
    -
    -
    updateLiveDelay(UUID, int) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Update the live delay property for a race
    -
    -
    updateMark(UUID, String, String, double, double, long) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Add a new mark to the event
    -
    -
    updateRace(IRace) - Method in interface com.tractrac.model.lib.api.event.IEvent
    -
    -
    Update a race
    -
    -
    updateRace(UUID, String, long, long, long, RaceStatusType, URI) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Update a race
    -
    -
    updateRace(IRace) - Method in interface com.tractrac.subscription.lib.api.race.IRacesListener
    -
    -
    This event is thrown when a race is updated.
    -
    -
    updateRace(IRace) - Method in class com.tractrac.subscription.lib.api.race.RacesListener
    -
     
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    @@ -202,7 +134,7 @@ -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V 

    B

    @@ -76,7 +76,7 @@
    Gets is this position is before (in terms of time) a timestamp
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V 

    C

    -
    close() - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Closes the connections
    -
    -
    com.tractrac.model.lib.api - package com.tractrac.model.lib.api
    -
    -
    - Main package of the model project.
    -
    -
    com.tractrac.model.lib.api.attachment - package com.tractrac.model.lib.api.attachment
    -
    -
    - Contains the functionality to attach an object to other object.
    -
    com.tractrac.model.lib.api.data - package com.tractrac.model.lib.api.data
    Contains positions and control passings
    -
    com.tractrac.model.lib.api.event - package com.tractrac.model.lib.api.event
    -
    -
    - Events, races and competitors
    -
    -
    com.tractrac.model.lib.api.metadata - package com.tractrac.model.lib.api.metadata
    -
    -
    - The metadata functionality
    -
    -
    com.tractrac.model.lib.api.route - package com.tractrac.model.lib.api.route
    -
    -
    - The route configuration: controls, paths and routes
    -
    com.tractrac.model.lib.api.spatial - package com.tractrac.model.lib.api.spatial
    The spatial data
    -
    com.tractrac.subscription.lib.api - package com.tractrac.subscription.lib.api
    -
    -
    - Contains the classes used to add a subscription to an event.
    -
    -
    com.tractrac.subscription.lib.api.competitor - package com.tractrac.subscription.lib.api.competitor
    -
    -
    - Subscriptions related with competitors and positions
    -
    -
    com.tractrac.subscription.lib.api.control - package com.tractrac.subscription.lib.api.control
    -
    -
    - Subscriptions related with the controls and control passings
    -
    com.tractrac.subscription.lib.api.event - package com.tractrac.subscription.lib.api.event
    Subscriptions related with the event and/or the connection
    -
    com.tractrac.subscription.lib.api.race - package com.tractrac.subscription.lib.api.race
    -
    -
    - Subscriptions related with the races
    -
    -
    CompetitorsEventTest - Class in com.tractrac.subscription.lib.api.competitor
    +
    com.tractrac.subscription.lib.api.route - package com.tractrac.subscription.lib.api.route
     
    -
    CompetitorsEventTest() - Constructor for class com.tractrac.subscription.lib.api.competitor.CompetitorsEventTest
    -
     
    -
    ControlRouteTest - Class in com.tractrac.model.lib.api.route
    -
    -
    - Reads a route with marks from the parameters file
    -
    -
    ControlRouteTest() - Constructor for class com.tractrac.model.lib.api.route.ControlRouteTest
    -
     
    -
    ControlsEventTest - Class in com.tractrac.subscription.lib.api.control
    -
     
    -
    ControlsEventTest() - Constructor for class com.tractrac.subscription.lib.api.control.ControlsEventTest
    -
     
    -
    createCompetitor(String) - Method in class com.tractrac.model.lib.api.AbstractModelTest
    -
    -
    Create a competitor
    -
    -
    createCompetitor(UUID, String) - Method in class com.tractrac.model.lib.api.AbstractModelTest
    -
    -
    Create a competitor
    -
    -
    createCompressedPosition(double, double, double, double, double) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    +
    createCompressedPosition(double, double, double, double, double) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    Create a compressed position that is a position that can be serialized and send by Internet.
    @@ -163,30 +93,14 @@
    Create a compressed position from a buffer.
    -
    createControl(String) - Method in class com.tractrac.model.lib.api.AbstractModelTest
    -
    -
    Create a control
    -
    -
    createControlPoint(double, double, long) - Method in class com.tractrac.model.lib.api.AbstractModelTest
    -
    -
    Create a control point
    -
    -
    createCoordinate(double, double) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    +
    createCoordinate(double, double) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    Create a coordiante from a pair of coordinates
    -
    createCoordinate(double, double, double, double) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    +
    createCoordinate(double, double, double, double) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    Create a coordiante using the 4 dimensions.
    -
    createEvent(String) - Method in class com.tractrac.model.lib.api.AbstractModelTest
    -
    -
    Creates an event from a name.
    -
    -
    createEvent(String, UUID) - Method in class com.tractrac.model.lib.api.AbstractModelTest
    -
    -
    Creates an event from a name.
    -
    createEvent(URI) - Method in interface com.tractrac.model.lib.api.event.IEventFactory
    It creates an event object using the JSON with races.
    @@ -204,15 +118,11 @@
    Returns a subscriber for the event.
    -
    createEventSubscriber(IEvent, URI, URI) - Method in interface com.tractrac.subscription.lib.api.ISubscriberFactory
    +
    createEventSubscriber(IEvent, URI, URI) - Method in interface com.tractrac.subscription.lib.api.ISubscriberFactory
    Returns a subscriber for the event
    -
    createLocalDataServer(IEvent, boolean, boolean) - Method in interface com.tractrac.subscription.lib.api.ILocalDataServerFactory
    -
    -
    Creates and instance of a ILocalDataserver
    -
    createMetadata(String) - Method in interface com.tractrac.model.lib.api.metadata.IMetadataFactory
    Create a new metadata object from an string
    @@ -225,11 +135,11 @@
    Creates a list of IPathRoute from a file
    -
    createPosition(double, double, double, double, double, double, long) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    +
    createPosition(double, double, double, double, double, double, long) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    Create a position
    -
    createPosition(double, double) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    +
    createPosition(double, double) - Method in interface com.tractrac.model.lib.api.data.IPositionFactory
    Create a position using the lat,lon values.
    @@ -237,7 +147,7 @@
    Creates an IRace from a parameters file
    -
    createRace(URI, URI, URI) - Method in interface com.tractrac.model.lib.api.event.IEventFactory
    +
    createRace(URI, URI, URI) - Method in interface com.tractrac.model.lib.api.event.IEventFactory
    Creates an IRace from a parameters file
    @@ -245,7 +155,7 @@
    Creates an IRace from a set of parameters
    -
    createRace(IParameterSet, URI, URI) - Method in interface com.tractrac.model.lib.api.event.IEventFactory
    +
    createRace(IParameterSet, URI, URI) - Method in interface com.tractrac.model.lib.api.event.IEventFactory
    Creates an IRace from a set of parameters
    @@ -257,21 +167,22 @@
    createRaceSubscriber(URI) - Method in interface com.tractrac.subscription.lib.api.ISubscriberFactory
    - Returns a subscriber for the race contained in the provided parameters file
    + Returns a subscriber for the race contained in the provided parameters + file
    -
    createRaceSubscriber(IRace, URI, URI) - Method in interface com.tractrac.subscription.lib.api.ISubscriberFactory
    +
    createRaceSubscriber(IRace, URI, URI) - Method in interface com.tractrac.subscription.lib.api.ISubscriberFactory
    Returns a subscriber for a race.
    -
    createRaceSubscriber(URI, URI, URI) - Method in interface com.tractrac.subscription.lib.api.ISubscriberFactory
    +
    createRaceSubscriber(URI, URI, URI) - Method in interface com.tractrac.subscription.lib.api.ISubscriberFactory
    Returns a subscriber for the race contained in the provided parameters file.
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V 

    D

    @@ -75,10 +75,6 @@
    A competitor has been removed from the event
    -
    deleteCompetitor(UUID) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Delete a competitor from the event
    -
    deleteControl(UUID) - Method in interface com.tractrac.model.lib.api.event.IEvent
    Delete a control from the event
    @@ -87,24 +83,14 @@
    A control has been removed from the event
    -
    deleteMark(UUID) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Delete a mark from the event
    -
    deleteRace(UUID) - Method in interface com.tractrac.model.lib.api.event.IEvent
    Delete a race from the event
    -
    deleteRace(UUID) - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Delete a race from the event
    -
    deleteRace(UUID) - Method in interface com.tractrac.subscription.lib.api.race.IRacesListener
    A race has been removed from the event
    -
    deleteRace(UUID) - Method in class com.tractrac.subscription.lib.api.race.RacesListener
    -
     
    deleteRaceCompetitor(UUID) - Method in interface com.tractrac.model.lib.api.event.IRace
    Delete a race competitor from the race
    @@ -117,12 +103,16 @@
    Gets the distance between two coordinates
    +
    distance(ICoordinate, ICoordinate) - Method in interface com.tractrac.model.lib.api.spatial.ICoordinate
    +
    +
    Gets the distance between a point and a line
    +
    distanceSq(ICoordinate) - Method in interface com.tractrac.model.lib.api.spatial.ICoordinate
    Gets the square of the distance between two coordinates.
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V 

    E

    -
    EventsFromClubsJSONTest - Class in com.tractrac.model.lib.api.event
    -
     
    -
    EventsFromClubsJSONTest() - Constructor for class com.tractrac.model.lib.api.event.EventsFromClubsJSONTest
    -
     
    -
    EventsFromJSONTest - Class in com.tractrac.model.lib.api.event
    -
     
    -
    EventsFromJSONTest() - Constructor for class com.tractrac.model.lib.api.event.EventsFromJSONTest
    -
     
    +
    EventType - Enum in com.tractrac.model.lib.api.event
    +
    +
    + The type of the event, according with the EventManager
    +
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V 

    G

    -
    getAbandonedRace() - Method in class com.tractrac.subscription.lib.api.race.RacesListener
    -
     
    getAttachment(IAttachmentKey) - Method in class com.tractrac.model.lib.api.attachment.AbstractAttachable
     
    getAttachment(IAttachmentKey) - Method in interface com.tractrac.model.lib.api.attachment.IAttachable
    @@ -199,6 +197,18 @@
    Returns the event start time
    +
    getEventType() - Method in interface com.tractrac.model.lib.api.event.IEvent
    +
    +
    Gets the type of the event
    +
    +
    getEventTypeByName(String) - Static method in enum com.tractrac.model.lib.api.event.EventType
    +
    +
    Gets an event type from a description (used in the web site)
    +
    +
    getEventTypeByUUID(String) - Static method in enum com.tractrac.model.lib.api.event.EventType
    +
    +
    Gets the event type, depending on the UUID.
    +
    getExpectedRaceStartDate() - Method in interface com.tractrac.model.lib.api.event.IRace
    @@ -236,8 +246,6 @@
    Gets the index of the attachment.
    -
    getInitializedRace() - Method in class com.tractrac.subscription.lib.api.race.RacesListener
    -
     
    getKeys(Class<? extends IAttachable>) - Method in interface com.tractrac.model.lib.api.attachment.IAttachmentManager
    It returns all the IAttachmentKey's for an specified @@ -263,10 +271,6 @@
    Returns the live delay in seconds.
    -
    getLivePort() - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Gets the port for the live connection
    -
    getLiveURI() - Method in interface com.tractrac.model.lib.api.event.IEvent
    Gets the live URI of this event.
    @@ -275,10 +279,6 @@
    Gets the live URI of this race.
    -
    getLocalDataserverFactory() - Static method in class com.tractrac.subscription.lib.api.SubscriptionTestLocator
    -
    -
    Used to get the instance of the ILocalDataServerFactory class.
    -
    getLongitude() - Method in interface com.tractrac.model.lib.api.spatial.IGeoCoordinate
    Returns the longitude coordinate of the position.
    @@ -371,7 +371,7 @@
    Returns a property attached to the object
    -
    getProperty(String, int) - Method in interface com.tractrac.model.lib.api.route.IControlRoute
    +
    getProperty(String, int) - Method in interface com.tractrac.model.lib.api.route.IControlRoute
    Returns a property attached to the object
    @@ -421,8 +421,6 @@
    Start time of race.
    -
    getReloadedRace() - Method in class com.tractrac.subscription.lib.api.race.RacesListener
    -
     
    getRoute(UUID) - Method in interface com.tractrac.model.lib.api.event.IEvent
    Gets the route by Id
    @@ -503,10 +501,6 @@
    Returns the stop time.
    -
    getStoredPort() - Method in interface com.tractrac.subscription.lib.api.ILocalDataserver
    -
    -
    Gets the port for the stored connection
    -
    getStoredURI() - Method in interface com.tractrac.model.lib.api.event.IEvent
    Gets the stored URI of this event.
    @@ -562,8 +556,8 @@ Hidden: the race is not visible Offline: the race is visible but it is not accessible - Online: the race is visible and accessible (the replay status has been - merged with this status) + Online: the race is visible and accessible (the replay status has + been merged with this status)
    getX() - Method in interface com.tractrac.model.lib.api.spatial.ICoordinate
    @@ -578,15 +572,15 @@
    The value of the z coordinate
    -
    gotControlPassings(IRaceCompetitor, IControlPassings) - Method in interface com.tractrac.subscription.lib.api.control.IControlPassingsListener
    +
    gotControlPassings(IRaceCompetitor, IControlPassings) - Method in interface com.tractrac.subscription.lib.api.control.IControlPassingsListener
    Invoked when a new control passing result arrives
    -
    gotControlPointPosition(IControl, IPosition, int) - Method in interface com.tractrac.subscription.lib.api.control.IControlPointPositionListener
    +
    gotControlPointPosition(IControl, IPosition, int) - Method in interface com.tractrac.subscription.lib.api.control.IControlPointPositionListener
    Invoked when a new position for a control point arrives.
    -
    gotEventMessage(IEvent, IMessageData) - Method in interface com.tractrac.subscription.lib.api.event.IEventMessageListener
    +
    gotEventMessage(IEvent, IMessageData) - Method in interface com.tractrac.subscription.lib.api.event.IEventMessageListener
    Invoked when a new event message arrives
    @@ -594,31 +588,31 @@
    Invoked when an update in the live data status occurs.
    -
    gotPosition(IRaceCompetitor, IPosition) - Method in interface com.tractrac.subscription.lib.api.competitor.IPositionListener
    +
    gotPosition(IRaceCompetitor, IPosition) - Method in interface com.tractrac.subscription.lib.api.competitor.IPositionListener
    Invoked when a new position arrives
    -
    gotPositionOffset(IRaceCompetitor, IPositionOffset) - Method in interface com.tractrac.subscription.lib.api.competitor.IPositionOffsetListener
    +
    gotPositionOffset(IRaceCompetitor, IPositionOffset) - Method in interface com.tractrac.subscription.lib.api.competitor.IPositionOffsetListener
    Invoked when a new position arrives
    -
    gotPositionSnapped(IRaceCompetitor, IPositionSnapped) - Method in interface com.tractrac.subscription.lib.api.competitor.IPositionSnappedListener
    +
    gotPositionSnapped(IRaceCompetitor, IPositionSnapped) - Method in interface com.tractrac.subscription.lib.api.competitor.IPositionSnappedListener
    Invoked when a new snapped position arrives
    -
    gotRaceMessage(IRace, IMessageData) - Method in interface com.tractrac.subscription.lib.api.race.IRaceMessageListener
    +
    gotRaceMessage(IRace, IMessageData) - Method in interface com.tractrac.subscription.lib.api.race.IRaceMessageListener
    Invoked when a new race message arrives
    -
    gotRaceStartStopTime(IRace, IStartStopData) - Method in interface com.tractrac.subscription.lib.api.race.IRaceStartStopTimesChangeListener
    +
    gotRaceStartStopTime(IRace, IStartStopData) - Method in interface com.tractrac.subscription.lib.api.race.IRaceStartStopTimesChangeListener
    Invoked when an update in the race start and/or stop time occurs.
    -
    gotRouteChange(IControlRoute, long) - Method in interface com.tractrac.subscription.lib.api.control.IControlRouteChangeListener
    +
    gotRouteChange(IControlRoute, long) - Method in interface com.tractrac.subscription.lib.api.control.IControlRouteChangeListener
    Invoked when updates to a route arrives
    -
    gotServerTime(long, long) - Method in interface com.tractrac.subscription.lib.api.event.IServerTimeListener
    +
    gotServerTime(long, long) - Method in interface com.tractrac.subscription.lib.api.event.IServerTimeListener
    This event is thrown when a new server time event arrives from the server
    @@ -630,12 +624,12 @@
    Invoked when an update in the stored data status occurs.
    -
    gotTrackingStartStopTime(IRace, IStartStopData) - Method in interface com.tractrac.subscription.lib.api.race.IRaceStartStopTimesChangeListener
    +
    gotTrackingStartStopTime(IRace, IStartStopData) - Method in interface com.tractrac.subscription.lib.api.race.IRaceStartStopTimesChangeListener
    Invoked when an update in the tracking start and/or stop time occurs.
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V 

    I

    @@ -195,16 +195,6 @@
    The status of the connection
    -
    ILocalDataserver - Interface in com.tractrac.subscription.lib.api
    -
    -
    - This class is a local dataserver.
    -
    -
    ILocalDataServerFactory - Interface in com.tractrac.subscription.lib.api
    -
    -
    - Factory used to create ILocalDataserver instances.
    -
    IMessage - Interface in com.tractrac.subscription.lib.api.event
    @@ -332,6 +322,11 @@
    A route can be one of: IControlRoute or IPathRoute.
    +
    IRoutesListener - Interface in com.tractrac.subscription.lib.api.route
    +
    +
    + This listener is used to receive events related with the routes.
    +
    ISegment - Interface in com.tractrac.model.lib.api.route
    @@ -407,8 +402,6 @@ All the listeners that are used for the consumer application in order to receive events from the server side have to implemented this interface.
    -
    isUpdateReceived() - Method in class com.tractrac.subscription.lib.api.race.RacesListener
    -
     
    ITeam - Interface in com.tractrac.model.lib.api.event
    @@ -419,7 +412,7 @@
    A base interface for data classes that are related to a point in time
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V 

    L

    @@ -80,7 +80,7 @@
    Returns the coordinate at the specified m ordinate value
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    -
    A B C D E G I L M N P R S T U V  +
    A B C D E G I L M N R S T U V 

    M

    -
    MetadataTest - Class in com.tractrac.model.lib.api.metadata
    -
    -
    - Test the metadata
    -
    -
    MetadataTest() - Constructor for class com.tractrac.model.lib.api.metadata.MetadataTest
    -
     
    ModelLocator - Class in com.tractrac.model.lib.api
    @@ -82,16 +75,8 @@
    ModelLocator() - Constructor for class com.tractrac.model.lib.api.ModelLocator
     
    -
    ModelLocatorTest - Class in com.tractrac.model.lib.api
    -
    -
    - This test checks if an implementation of the model library implements all the - mandatory objects
    -
    -
    ModelLocatorTest() - Constructor for class com.tractrac.model.lib.api.ModelLocatorTest
    -
     
    -A B C D E G I L M N P R S T U V 
    +A B C D E G I L M N R S T U V 
    diff --git a/java/com.tractrac.clientmodule/javadoc/index.html b/java/com.tractrac.clientmodule/javadoc/index.html index 99edf2c5c2f..030f3633539 100644 --- a/java/com.tractrac.clientmodule/javadoc/index.html +++ b/java/com.tractrac.clientmodule/javadoc/index.html @@ -2,7 +2,7 @@ - + Generated Documentation (Untitled) - - - - - - -
    -
    - - - -

    Java Marine API

    - -

    About

    -

    -Java Marine API is an -NMEA -0183 parser library for Java -1.5 and newer. The goal of the project is to enable easy access to data -provided by various marine instruments, such as GPS, sonar or autopilot. The -library reads NMEA sentences from any source that can be accessed through input -stream, e.g. serial port, file, TCP/IP socket etc. The plain ASCII data is -converted to events that can be listened in your application. Library provides -interfaces and parser implementations for selected sentences and you can also -implement and integrate your own parsers by extending the provided base parser. -

    -

    -Currently the following sentences are supported:

    -
      -
    • BOD - Bearing from origin to destination
    • -
    • DBT - Water depth below transducer in meters, feet and fathoms.
    • -
    • DPT - Water depth in meters with offset to transducer.
    • -
    • GGA - GPS fix data
    • -
    • GLL - Current geographic position and time
    • -
    • GSA - Precision of GPS fix
    • -
    • GSV - Detailed GPS satellite data
    • -
    • HDG - Heading with magnetic deviation and variation
    • -
    • HDM - Magnetic heading in degrees
    • -
    • HDT - True heading in degrees
    • -
    • MTA - Air temperature in degrees Celcius
    • -
    • MTW - Water temperature in degrees Celcius
    • -
    • MWV - Wind speed and angle
    • -
    • RMB - Recommended minimum navigation information "type B"
    • -
    • RMC - Recommended minimum navigation information "type C"
    • -
    • RTE - GPS route data with list of waypoints
    • -
    • VHW - Water speed and heading
    • -
    • VTG - Course and speed over ground
    • -
    • WPL - Destination waypoint location and ID
    • -
    • ZDA - UTC time and date with local time offset
    • -
    - -

    -In addition to data reading, the library also supports modifying the sentence -contents and provides data field formatting and validation. -

    - -

    Licensing

    -

    -Java Marine API is open source software and licensed under the -GNU Lesser -General Public License. The source code is freely available in the project's -SVN -repository. See latest distribution package and readme.txt within it for -more information. -

    - -

    Releases

    - -

    Latest

    -

    v0.5 pre-alpha, released on 2012-04-19:

    - - -

    -Show -Hide -older versions. -

    - -
    - -

    v0.4 pre-alpha, released on 2011-07-12:

    - - -

    v0.3 pre-alpha, released on 2011-05-08:

    - - -

    v0.2 pre-alpha, released on 2010-12-08:

    - - -

    v0.1 pre-alpha, released on 2010-08-21:

    - - -
    - -

    Examples and sample data

    -

    -Check out the files section at Sourceforge. Also included in the distribution -package since v0.4.

    - - -

    Contact

    -

    -Please visit the project -page at SourceForge.net for contact and support. Any kind of feedback or -contribution is welcome.

    - - - -
    -
    - - - \ No newline at end of file diff --git a/java/net.sf.marineapi/doc/html/jquery-1.4.4.min.js b/java/net.sf.marineapi/doc/html/jquery-1.4.4.min.js deleted file mode 100644 index c2dcfe7bfa5..00000000000 --- a/java/net.sf.marineapi/doc/html/jquery-1.4.4.min.js +++ /dev/null @@ -1,167 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.4 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Nov 11 19:04:53 2010 -0500 - */ -(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h= -h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;kd)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La, -"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this, -e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a, -"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+ -a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/, -C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j, -s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this, -j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length}, -toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j=== --1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false; -if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload", -b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&& -!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&& -l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H
    a";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"), -k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false, -scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent= -false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom= -1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="
    ";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="
    t
    ";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display= -"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h= -c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando); -else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one"; -if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true}, -attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&& -b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0}; -c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem, -arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid= -d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+ -c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType=== -8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k=== -"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+ -d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired= -B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type=== -"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]=== -0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); -(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3]; -break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr, -q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h= -l;g.sort(w);if(h)for(var i=1;i0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n, -m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== -true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== -g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return in[3]-0},nth:function(g,i,n){return n[3]- -0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== -i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]]; -if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m, -g);else if(typeof g.length==="number")for(var p=g.length;n";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g); -n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&& -function(){var g=k,i=t.createElement("div");i.innerHTML="

    ";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F|| -p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g= -t.createElement("div");g.innerHTML="
    ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition? -function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n0)for(var h=d;h0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h= -h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context): -c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a, -2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a, -b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&& -e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/\s]+\/)>/g,P={option:[1, -""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div
    ","
    "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null; -else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append", -prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument|| -b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]===""&&!x?r.childNodes:[];for(o=k.length- -1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script")))); -d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i, -jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true, -zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b), -h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b); -if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f= -d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left; -e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/)<[^<]*)*<\/script>/gi, -ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b=== -"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("
    ").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&& -!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})}, -getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html", -script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data|| -!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache= -false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset; -A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type", -b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& -c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| -c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]= -encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess", -[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"), -e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}}); -if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show", -3),a,b,d);else{d=0;for(var e=this.length;d=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b, -d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a* -Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)} -var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true; -this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide|| -this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a= -c.timers,b=0;b-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a, -e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&& -c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase(); -c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+ -b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window); diff --git a/java/net.sf.marineapi/doc/html/marineapi.css b/java/net.sf.marineapi/doc/html/marineapi.css deleted file mode 100644 index 740d57f0716..00000000000 --- a/java/net.sf.marineapi/doc/html/marineapi.css +++ /dev/null @@ -1,51 +0,0 @@ -/** Java Marine API stylesheet */ - -#frame { - margin-left: auto; - margin-right: auto; - max-width: 45em; -} - -#content { - font-size: 0.8em; - font-family: Verdana, sans-serif; -} - -#footer { - color: silver; - font-size: 0.75em; - margin-top: 2.0em; - border-top: 1px solid silver; -} - -#buttons { - color: #000000; - font-size: 0.8em; - font-family: Verdana, sans-serif; - text-decoration: none; -} - -#close, #oldReleases { - display: none; -} - -body { - color: #00000; - background: #FFFFFF; -} - -h1 { - letter-spacing: 0.2em; - border-bottom: 1px solid silver; -} - -h1, h2, h3, h4 { - font-family: "Trebuchet MS", Verdana, sans-serif; - color: green; - font-weight: normal; -} - -h2 { - margin-top: 1.5em; - border-bottom: 1px dashed silver; -} diff --git a/java/net.sf.marineapi/doc/lgpl.txt b/java/net.sf.marineapi/doc/lgpl.txt deleted file mode 100644 index e8bec28dfa1..00000000000 --- a/java/net.sf.marineapi/doc/lgpl.txt +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/java/net.sf.marineapi/doc/readme.txt b/java/net.sf.marineapi/doc/readme.txt deleted file mode 100644 index 5d9bfb35529..00000000000 --- a/java/net.sf.marineapi/doc/readme.txt +++ /dev/null @@ -1,88 +0,0 @@ -Java Marine API readme -Version @VERSION@ pre-alpha (b@BUILD_ID@) - - -Java Marine API is an NMEA 0183 library for accessing the data provided by -electronic marine instruments such as GPS, sonar or autopilot. - -SYSTEM REQUIREMENTS - - * Java 2 SE JRE/JDK 1.5 (1.6+ recommended) - - For serial port communication (choose one): - - * Java Communications API - - - * RXTX library - - -LICENSING - -Java Marine API is free software: you can redistribute it and/or modify it -under the terms of the GNU Lesser General Public License as published by the -Free Software Foundation, either version 3 of the License, or (at your -option) any later version. - -Java Marine API is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License -for more details. - -You should have received a copy of the GNU Lesser General Public License -along with Java Marine API. If not, see . - -DISCLAIMER - -Java Marine API is not official NMEA software or related to National Marine -Electronics Association . The interpretation of NMEA -sentences for this library is based entirely on freely available resources in -the Internet. Thus, it is NOT guaranteed that the library would conform and -follow the standard accurately. - -SOURCE CODE - -The source code is freely available in project's SVN repository. See below URLs -and project homepage at SourceForge.net for more info. - -SVN browsing and GNU tarball downloads: - - -SVN checkout (no login required): -svn co https://marineapi.svn.sourceforge.net/svnroot/marineapi marineapi - -If you wish to contribute by adding new code or bug fixes, you may request for -SVN write access or provide patch file(s) via e-mail. - -DEVELOPERS - -* Kimmo Tuukkanen - - project admin, lead developer - -REFERENCES - -The NMEA information for Java Marine API has been collected mainly from the -following resources (availability checked on 2011-11-22): - - * NMEA Revealed by Eric S. Raymond - - - * The NMEA FAQ by Peter Bennett - - - * NMEA Sentence Information by Glenn Baddeley - - - * NMEA Data by Dale DePriest - - - * Wikipedia's NMEA article - - - * The NMEA Information Sheet (issue 3, 25th Feb 2011) by Actisense - - -Thanks to all above authors for making the information available. All -disclaimers and warnings concerning the accuracy of information in the above -documents apply equally to Java Marine API. When noticing or suspecting any -errors, please contact project author(s). diff --git a/java/net.sf.marineapi/doc/release_notes.txt b/java/net.sf.marineapi/doc/release_notes.txt deleted file mode 100644 index c722d34e2ff..00000000000 --- a/java/net.sf.marineapi/doc/release_notes.txt +++ /dev/null @@ -1,26 +0,0 @@ -Java Marine API release notes -Version @VERSION@ (b@BUILD_ID@) - - -This is a pre-alpha release, major API changes may be introduced in future -versions. Released on @RELEASE_DATE@. - -CHANGES - - * TBD - -NEW FEATURES - - * TBD - -KNOWN ISSUES - - * Position.distanceTo() may not produce correct results. - - * Proprietary sentences with ID longer than five characters are not supported. - - * All AIS sentences may not be supported, TalkerId contains only AI, AB and BS. - -ACKNOWLEDGEMENTS - - * Thanks to Amanda Fenech/Marssa.org for migrating the project in Maven layout. diff --git a/java/net.sf.marineapi/pom.xml b/java/net.sf.marineapi/pom.xml deleted file mode 100644 index e962ba93889..00000000000 --- a/java/net.sf.marineapi/pom.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - 4.0.0 - - root - com.sap.sailing - 1.0.0-SNAPSHOT - - net.sf.marineapi - 0.5.0-SNAPSHOT - eclipse-plugin - diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/example/FileExample.java b/java/net.sf.marineapi/src/net/sf/marineapi/example/FileExample.java deleted file mode 100644 index a4c7cc44c16..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/example/FileExample.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * FileExample.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.example; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import net.sf.marineapi.nmea.event.SentenceEvent; -import net.sf.marineapi.nmea.event.SentenceListener; -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.nmea.sentence.GGASentence; -import net.sf.marineapi.nmea.sentence.SentenceId; - -/** - * Simple example application that takes a filename as command-line argument and - * prints Position from received GGA sentences. - * - * @author Kimmo Tuukkanen - */ -public class FileExample implements SentenceListener { - - private SentenceReader reader; - - /** - * Creates a new instance of FileExample - * - * @param f File from which to read Checksum data - */ - public FileExample(File file) throws IOException { - - // create sentence reader and provide input stream - InputStream stream = new FileInputStream(file); - reader = new SentenceReader(stream); - - // register self as a listener for GGA sentences - reader.addSentenceListener(this, SentenceId.GGA); - reader.start(); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingPaused() - */ - public void readingPaused() { - System.out.println("-- Paused --"); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingStarted() - */ - public void readingStarted() { - System.out.println("-- Started --"); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingStopped() - */ - public void readingStopped() { - System.out.println("-- Stopped --"); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.event.SentenceListener#sentenceRead(net.sf.marineapi - * .nmea.event.SentenceEvent) - */ - public void sentenceRead(SentenceEvent event) { - - // Safe to cast as we are registered only for GGA updates. Could - // also cast to PositionSentence if interested only in position data. - // When receiving all sentences without filtering, you should check the - // sentence type before casting (e.g. with Sentence.getSentenceId()). - GGASentence s = (GGASentence) event.getSentence(); - - // Do something with sentence data.. - System.out.println(s.getPosition()); - } - - /** - * Main method takes one command-line argument, the name of the file to - * read. - * - * @param args Command-line arguments - */ - public static void main(String[] args) { - - if (args.length != 1) { - System.out.println("Example usage:\njava FileExample nmea.log"); - System.exit(1); - } - - try { - new FileExample(new File(args[0])); - System.out.println("Running, press CTRL-C to stop.."); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/example/GSVProviderExample.java b/java/net.sf.marineapi/src/net/sf/marineapi/example/GSVProviderExample.java deleted file mode 100644 index 6b36d1a3e7b..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/example/GSVProviderExample.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * GSVProviderExample.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.example; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.nmea.util.SatelliteInfo; -import net.sf.marineapi.provider.GSVProvider; -import net.sf.marineapi.provider.event.GSVEvent; -import net.sf.marineapi.provider.event.GSVListener; - -/** - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class GSVProviderExample implements GSVListener { - - SentenceReader reader; - GSVProvider provider; - - public GSVProviderExample(File file) throws IOException { - - // create sentence reader and provide input stream - InputStream stream = new FileInputStream(file); - reader = new SentenceReader(stream); - - // create provider and register listener - provider = new GSVProvider(reader); - provider.addListener(this); - - reader.start(); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.provider.event.GSVListener#providerUpdate(net.sf.marineapi - * .provider.event.GSVEvent) - */ - public void providerUpdate(GSVEvent event) { - System.out.println("-- GSV report --"); - for (SatelliteInfo si : event.getSatelliteInfo()) { - String ptrn = "%s: %d, %d"; - String msg = String.format(ptrn, si.getId(), si.getAzimuth(), si - .getElevation()); - System.out.println(msg); - } - System.out.println("-----"); - } - - /** - * Main method takes one command-line argument, the name of the file to - * read. - * - * @param args Command-line arguments - */ - public static void main(String[] args) { - - if (args.length != 1) { - String msg = "Example usage:\njava GSVProviderExample nmea.log"; - System.out.println(msg); - System.exit(0); - } - - try { - new GSVProviderExample(new File(args[0])); - System.out.println("Running, press CTRL-C to stop.."); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/example/HeadingProviderExample.java b/java/net.sf.marineapi/src/net/sf/marineapi/example/HeadingProviderExample.java deleted file mode 100644 index 233ffc04e68..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/example/HeadingProviderExample.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * HeadingProviderExample.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.example; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.provider.HeadingProvider; -import net.sf.marineapi.provider.event.HeadingEvent; -import net.sf.marineapi.provider.event.HeadingListener; - -/** - * Demonstrates the usage of HeadingProvider. - * - * @author Kimmo Tuukkanen - */ -public class HeadingProviderExample implements HeadingListener { - - private SentenceReader reader; - private HeadingProvider provider; - - /** - * Creates a new instance of FileExample - * - * @param f File from which to read Checksum data - */ - public HeadingProviderExample(File file) throws IOException { - - // create sentence reader and provide input stream - InputStream stream = new FileInputStream(file); - reader = new SentenceReader(stream); - - // create provider and register listener - provider = new HeadingProvider(reader); - provider.addListener(this); - - reader.start(); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.provider.event.HeadingListener#providerUpdate(net.sf - * .marineapi.provider.event.HeadingEvent) - */ - public void providerUpdate(HeadingEvent evt) { - System.out.println(evt.toString()); - } - - /** - * Main method takes one command-line argument, the name of the file to - * read. - * - * @param args Command-line arguments - */ - public static void main(String[] args) { - - if (args.length != 1) { - String msg = "Example usage:\njava HeadingProviderExample nmea.log"; - System.out.println(msg); - System.exit(0); - } - - try { - new HeadingProviderExample(new File(args[0])); - System.out.println("Running, press CTRL-C to stop.."); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/example/TPVProviderExample.java b/java/net.sf.marineapi/src/net/sf/marineapi/example/TPVProviderExample.java deleted file mode 100644 index be8b5f15ebe..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/example/TPVProviderExample.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * TPVProviderExample.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.example; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; - -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.provider.TPVProvider; -import net.sf.marineapi.provider.event.TPVEvent; -import net.sf.marineapi.provider.event.TPVListener; - -/** - * Demonstrates the usage of TPVProvider. - * - * @author Kimmo Tuukkanen - * @see TPVProvider - */ -public class TPVProviderExample implements TPVListener { - - TPVProvider provider; - - public TPVProviderExample(File f) throws FileNotFoundException { - InputStream stream = new FileInputStream(f); - SentenceReader reader = new SentenceReader(stream); - provider = new TPVProvider(reader); - provider.addListener(this); - reader.start(); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.provider.event.TPVListener#providerUpdate(net.sf.marineapi - * .provider.event.TPVEvent) - */ - public void providerUpdate(TPVEvent evt) { - // do something with the data.. - System.out.println("TPV: " + evt.toString()); - } - - /** - * Startup method. - * - * @param args NMEA log file - */ - public static void main(String[] args) { - - if (args.length != 1) { - System.out.println("Usage:\njava TPVProviderExample nmea.log"); - System.exit(1); - } - - try { - new TPVProviderExample(new File(args[0])); - System.out.println("Running, press CTRL-C to stop.."); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/SentenceEvent.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/SentenceEvent.java deleted file mode 100644 index 874e2c28ca8..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/SentenceEvent.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SentenceEvent.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.event; - -import java.util.EventObject; - -import net.sf.marineapi.nmea.sentence.Sentence; - -/** - * Sentence events occur when a valid NMEA 0183 sentence has been read from the - * data source. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see SentenceListener - * @see net.sf.marineapi.nmea.io.SentenceReader - */ -public class SentenceEvent extends EventObject { - - private static final long serialVersionUID = -2756954014186470514L; - private final long timestamp = System.currentTimeMillis(); - private final Sentence sentence; - - /** - * Creates a new SentenceEvent object. - * - * @param src Object that fired the event - * @param s Sentence that triggered the event - * @throws IllegalArgumentException If specified sentence is - * null - */ - public SentenceEvent(Object src, Sentence s) { - super(src); - if (s == null) { - throw new IllegalArgumentException("Sentence cannot be null"); - } - this.sentence = s; - } - - /** - * Gets the Sentence object that triggered the event. - * - * @return Sentence object - */ - public Sentence getSentence() { - return sentence; - } - - /** - * Get system time when this event was created. - * - * @return Milliseconds timestamp - */ - public long getTimeStamp() { - return timestamp; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/SentenceListener.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/SentenceListener.java deleted file mode 100644 index debd147c083..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/SentenceListener.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SentenceListener.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.event; - -import java.util.EventListener; - -/** - * Base interface for listening to SentenceEvents. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.io.SentenceReader - * @see SentenceEvent - */ -public interface SentenceListener extends EventListener { - - /** - * Called when NMEA data flow has paused for some reason, e.g. when reached - * the end of file or device has stopped providing data, but the reader is - * still running and waiting for more data. Timeout for pause event to occur - * is 5 seconds. - */ - void readingPaused(); - - /** - * Called when NMEA data is found in stream and reader starts dispatching - * SentenceEvents. Also, this notification occurs when events dispatching - * continues after readingPaused() has occurred. - */ - void readingStarted(); - - /** - * Invoked after SentenceReader has stopped reading the input - * stream, either due to error or explicit request by calling - * {@link net.sf.marineapi.nmea.io.SentenceReader#stop()}. - */ - void readingStopped(); - - /** - * Invoked when valid NMEA 0183 data has been read by SentenceReader. - * - * @param event SentenceEvent containing the data. - */ - void sentenceRead(SentenceEvent event); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/package.html b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/package.html deleted file mode 100644 index 8803a6380f0..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/event/package.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - -

    - Contains event classes and listener interfaces for receiving NMEA updates.

    - - \ No newline at end of file diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/SentenceReader.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/SentenceReader.java deleted file mode 100644 index 51e86c4b73e..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/SentenceReader.java +++ /dev/null @@ -1,378 +0,0 @@ -/* - * SentenceReader.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.io; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.Vector; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import net.sf.marineapi.nmea.event.SentenceEvent; -import net.sf.marineapi.nmea.event.SentenceListener; -import net.sf.marineapi.nmea.parser.SentenceFactory; -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.SentenceValidator; - -/** - * Sentence reader detects supported NMEA 0183 sentences from the specified - * InputStream and dispatches them to registered listeners as - * sentence events. Each event contains a parser for the read sentence. - *

    - * Parsers dispatched by reader are created using {@link SentenceFactory} class, - * where you can also register your own custom parsers. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see SentenceListener - * @see SentenceEvent - * @see SentenceFactory - */ -public class SentenceReader { - - // Map key for listeners that listen any kind of sentences, type - // specific listeners are registered with sentence type String - private static final String DISPATCH_ALL = "DISPATCH_ALL"; - - // Thread for running the worker - private Thread thread; - // worker that reads the input stream - private DataReader reader; - // map of sentence listeners - private ConcurrentMap> listeners = new ConcurrentHashMap>(); - // time of latest sentence event - private volatile long lastFired = -1; - // timeout for "reading paused" in ms - private volatile int pauseTimeout = 5000; - - /** - * Creates a new instance of SentenceReader. - * - * @param source Stream from which to read NMEA data - */ - public SentenceReader(InputStream source) { - reader = new DataReader(source); - } - - /** - * Adds a {@link SentenceListener} that wants to receive all sentences read - * by the reader. - * - * @param listener {@link SentenceListener} to be registered. - * @see net.sf.marineapi.nmea.event.SentenceListener - */ - public void addSentenceListener(SentenceListener listener) { - registerListener(DISPATCH_ALL, listener); - } - - /** - * Adds a {@link SentenceListener} that is interested in receiving only - * sentences of certain type. - * - * @param sl SentenceListener to add - * @param type Sentence type for which the listener is registered. - * @see net.sf.marineapi.nmea.event.SentenceListener - */ - public void addSentenceListener(SentenceListener sl, SentenceId type) { - registerListener(type.toString(), sl); - } - - /** - * Adds a {@link SentenceListener} that is interested in receiving only - * sentences of certain type. - * - * @param sl SentenceListener to add - * @param type Sentence type for which the listener is registered. - * @see net.sf.marineapi.nmea.event.SentenceListener - */ - public void addSentenceListener(SentenceListener sl, String type) { - registerListener(type, sl); - } - - /** - * Returns the current reading paused timeout. - * - * @return Timeout limit in milliseconds. - * @see #setPauseTimeout(int) - */ - public int getPauseTimeout() { - return this.pauseTimeout; - } - - /** - * Remove a listener from reader. When removed, listener will not receive - * any events from the reader. - * - * @param sl {@link SentenceListener} to be removed. - */ - public void removeSentenceListener(SentenceListener sl) { - for (List list : listeners.values()) { - if (list.contains(sl)) { - list.remove(sl); - } - } - } - - /** - * Sets the input stream from which to read NMEA data. If reader is running, - * it is first stopped and you must call {@link #start()} to resume reading. - * - * @param stream New input stream to set. - */ - public void setInputStream(InputStream stream) { - if (reader.isRunning()) { - stop(); - } - reader = new DataReader(stream); - } - - /** - * Set timeout time for reading paused events. Default is 5000 ms. - * - * @param millis Timeout in milliseconds. - */ - public void setPauseTimeout(int millis) { - this.pauseTimeout = millis; - } - - /** - * Starts reading the input stream and dispatching events. - * - * @throws IllegalStateException If reader is already running. - */ - public void start() { - if (thread != null && thread.isAlive() && reader != null - && reader.isRunning()) { - throw new IllegalStateException("Reader is already running"); - } - lastFired = -1; - thread = new Thread(reader); - thread.start(); - } - - /** - * Stops the reader and event dispatching. - */ - public void stop() { - if (reader != null && reader.isRunning()) { - reader.stop(); - } - } - - /** - * Notifies all listeners that reader has paused due to timeout. - */ - private void fireReadingPaused() { - for (String key : listeners.keySet()) { - for (SentenceListener listener : listeners.get(key)) { - try { - listener.readingPaused(); - } catch (Exception e) { - // nevermind - } - } - } - } - - /** - * Notifies all listeners that NMEA data has been detected in the stream and - * events will be dispatched until stopped or timeout occurs. - */ - private void fireReadingStarted() { - for (String key : listeners.keySet()) { - for (SentenceListener listener : listeners.get(key)) { - try { - listener.readingStarted(); - } catch (Exception e) { - // nevermind - } - } - } - } - - /** - * Notifies all listeners that data reading has stopped. - */ - private void fireReadingStopped() { - for (String key : listeners.keySet()) { - for (SentenceListener listener : listeners.get(key)) { - try { - listener.readingStopped(); - } catch (Exception e) { - // nevermind - } - } - } - } - - /** - * Dispatch data to all listeners. - * - * @param sentence sentence string. - */ - private void fireSentenceEvent(Sentence sentence) { - - if (lastFired < 0) { - fireReadingStarted(); - } - - String type = sentence.getSentenceId(); - Set list = new HashSet(); - - if (listeners.containsKey(type)) { - list.addAll(listeners.get(type)); - } - if (listeners.containsKey(DISPATCH_ALL)) { - list.addAll(listeners.get(DISPATCH_ALL)); - } - - for (SentenceListener sl : list) { - try { - SentenceEvent se = new SentenceEvent(this, sentence); - sl.sentenceRead(se); - } catch (Exception e) { - // ignore listener failures - } - } - lastFired = System.currentTimeMillis(); - } - - /** - * Registers a SentenceListener to hash map with given key. - * - * @param type Sentence type to register for - * @param sl SentenceListener to register - */ - private void registerListener(String type, SentenceListener sl) { - if (listeners.containsKey(type)) { - listeners.get(type).add(sl); - } else { - List list = new Vector(); - list.add(sl); - listeners.put(type, list); - } - } - - /** - * Worker that reads the input stream and fires sentence events. - */ - private class DataReader implements Runnable { - - private PauseMonitor monitor; - private Thread monitorThread; - private BufferedReader input; - private volatile boolean isRunning = true; - - /** - * Creates a new instance of StreamReader. - * - * @param source InputStream from where to read data. - */ - public DataReader(InputStream source) { - InputStreamReader isr = new InputStreamReader(source); - input = new BufferedReader(isr); - } - - /** - * Tells if the reader is currently running, i.e. actively scanning the - * input stream for new data. - * - * @return true if running, otherwise false. - */ - public boolean isRunning() { - return isRunning; - } - - /** - * Reads the input stream and fires SentenceEvents - */ - public void run() { - - monitor = new PauseMonitor(DataReader.this); - monitorThread = new Thread(monitor); - monitorThread.start(); - - SentenceFactory factory = SentenceFactory.getInstance(); - - while (isRunning) { - try { - if (!input.ready()) { - Thread.sleep(50); - continue; - } - String data = input.readLine(); - if (SentenceValidator.isValid(data)) { - Sentence s = factory.createParser(data); - fireSentenceEvent(s); - } - } catch (Exception e) { - // nevermind, keep trying.. - } - } - fireReadingStopped(); - } - - /** - * Stops the run loop. - */ - public void stop() { - isRunning = false; - monitorThread.interrupt(); - } - } - - /** - * Watch dog for sending start/paused notifications. - */ - private class PauseMonitor implements Runnable { - - private DataReader parent; - - public PauseMonitor(DataReader parent) { - this.parent = parent; - } - - public void run() { - while (parent.isRunning()) { - try { - int min = pauseTimeout; - int max = pauseTimeout + 1000; - long elapsed = System.currentTimeMillis() - lastFired; - - if (elapsed > min && elapsed < max) { - lastFired = -1; - fireReadingPaused(); - } - - int sleep = Math.round(pauseTimeout / 4); - Thread.sleep(sleep); - } catch (InterruptedException e) { - // nevermind - } - } - } - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/UDPSentenceReader.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/UDPSentenceReader.java deleted file mode 100644 index 4a43f5dd277..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/UDPSentenceReader.java +++ /dev/null @@ -1,365 +0,0 @@ -/* - * UDPSentenceReader.java - * Copyright (C) 2012 Ludovic Drouineau - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.io; - -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.Vector; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import net.sf.marineapi.nmea.event.SentenceEvent; -import net.sf.marineapi.nmea.event.SentenceListener; -import net.sf.marineapi.nmea.parser.SentenceFactory; -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.SentenceValidator; - -/** - * As reqular {@link SentenceReader}, detects supported NMEA 0183 sentences from - * the specified DatagramSocket and dispatches them to registered - * listeners as sentence events. Each event contains a parser for the read - * sentence. - *

    - * Parsers dispatched by reader are created using {@link SentenceFactory} class, - * where you can also register your own custom parsers. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see SentenceListener - * @see SentenceEvent - * @see SentenceFactory - */ -public class UDPSentenceReader { - - // Map key for listeners that listen any kind of sentences, type - // specific listeners are registered with sentence type String - private static final String DISPATCH_ALL = "DISPATCH_ALL"; - - // Thread for running the worker - private Thread thread; - // worker that reads the input stream - private UDPDataReader reader; - // map of sentence listeners - private ConcurrentMap> listeners = new ConcurrentHashMap>(); - // time of latest sentence event - private volatile long lastFired = -1; - // timeout for "reading paused" in ms - private volatile int pauseTimeout = 5000; - - /** - * Creates a new instance of SentenceReader. - * - * @param source DatagramSocket from which to read NMEA data - */ - public UDPSentenceReader(DatagramSocket source) { - reader = new UDPDataReader(source); - } - - /** - * Adds a {@link SentenceListener} that wants to receive all sentences read - * by the reader. - * - * @param listener {@link SentenceListener} to be registered. - * @see net.sf.marineapi.nmea.event.SentenceListener - */ - public void addSentenceListener(SentenceListener listener) { - registerListener(DISPATCH_ALL, listener); - } - - /** - * Adds a {@link SentenceListener} that is interested in receiving only - * sentences of certain type. - * - * @param sl SentenceListener to add - * @param type Sentence type for which the listener is registered. - * @see net.sf.marineapi.nmea.event.SentenceListener - */ - public void addSentenceListener(SentenceListener sl, SentenceId type) { - registerListener(type.toString(), sl); - } - - /** - * Adds a {@link SentenceListener} that is interested in receiving only - * sentences of certain type. - * - * @param sl SentenceListener to add - * @param type Sentence type for which the listener is registered. - * @see net.sf.marineapi.nmea.event.SentenceListener - */ - public void addSentenceListener(SentenceListener sl, String type) { - registerListener(type, sl); - } - - /** - * Returns the current reading paused timeout. - * - * @return Timeout limit in milliseconds. - * @see #setPauseTimeout(int) - */ - public int getPauseTimeout() { - return this.pauseTimeout; - } - - /** - * Remove a listener from reader. When removed, listener will not receive - * any events from the reader. - * - * @param sl {@link SentenceListener} to be removed. - */ - public void removeSentenceListener(SentenceListener sl) { - for (List list : listeners.values()) { - if (list.contains(sl)) { - list.remove(sl); - } - } - } - - /** - * Set timeout time for reading paused events. Default is 5000 ms. - * - * @param millis Timeout in milliseconds. - */ - public void setPauseTimeout(int millis) { - this.pauseTimeout = millis; - } - - /** - * Starts reading the input stream and dispatching events. - * - * @throws IllegalStateException If reader is already running. - */ - public void start() { - if (thread != null && thread.isAlive() && reader != null - && reader.isRunning()) { - throw new IllegalStateException("Reader is already running"); - } - lastFired = -1; - thread = new Thread(reader); - thread.start(); - } - - /** - * Stops the reader and event dispatching. - */ - public void stop() { - if (reader != null && reader.isRunning()) { - reader.stop(); - } - } - - /** - * Notifies all listeners that reader has paused due to timeout. - */ - private void fireReadingPaused() { - for (String key : listeners.keySet()) { - for (SentenceListener listener : listeners.get(key)) { - try { - listener.readingPaused(); - } catch (Exception e) { - // nevermind - } - } - } - } - - /** - * Notifies all listeners that NMEA data has been detected in the stream and - * events will be dispatched until stopped or timeout occurs. - */ - private void fireReadingStarted() { - for (String key : listeners.keySet()) { - for (SentenceListener listener : listeners.get(key)) { - try { - listener.readingStarted(); - } catch (Exception e) { - // nevermind - } - } - } - } - - /** - * Notifies all listeners that data reading has stopped. - */ - private void fireReadingStopped() { - for (String key : listeners.keySet()) { - for (SentenceListener listener : listeners.get(key)) { - try { - listener.readingStopped(); - } catch (Exception e) { - // nevermind - } - } - } - } - - /** - * Dispatch data to all listeners. - * - * @param sentence sentence string. - */ - private void fireSentenceEvent(Sentence sentence) { - - if (lastFired < 0) { - fireReadingStarted(); - } - - String type = sentence.getSentenceId(); - Set list = new HashSet(); - - if (listeners.containsKey(type)) { - list.addAll(listeners.get(type)); - } - if (listeners.containsKey(DISPATCH_ALL)) { - list.addAll(listeners.get(DISPATCH_ALL)); - } - - for (SentenceListener sl : list) { - try { - SentenceEvent se = new SentenceEvent(this, sentence); - sl.sentenceRead(se); - } catch (Exception e) { - // ignore listener failures - } - } - lastFired = System.currentTimeMillis(); - } - - /** - * Registers a SentenceListener to hash map with given key. - * - * @param type Sentence type to register for - * @param sl SentenceListener to register - */ - private void registerListener(String type, SentenceListener sl) { - if (listeners.containsKey(type)) { - listeners.get(type).add(sl); - } else { - List list = new Vector(); - list.add(sl); - listeners.put(type, list); - } - } - - /** - * Worker that reads the input stream and fires sentence events. - */ - private class UDPDataReader implements Runnable { - - private PauseMonitor monitor; - private Thread monitorThread; - DatagramSocket input; - private volatile boolean isRunning = true; - byte[] rcvData = new byte[1024]; - - /** - * Creates a new instance of StreamReader. - * - * @param source InputStream from where to read data. - */ - public UDPDataReader(DatagramSocket source) { - input = source; - } - - /** - * Tells if the reader is currently running, i.e. actively scanning the - * input stream for new data. - * - * @return true if running, otherwise false. - */ - public boolean isRunning() { - return isRunning; - } - - /** - * Reads the input stream and fires SentenceEvents - */ - public void run() { - - monitor = new PauseMonitor(UDPDataReader.this); - monitorThread = new Thread(monitor); - monitorThread.start(); - - SentenceFactory factory = SentenceFactory.getInstance(); - - while (isRunning) { - try { - - DatagramPacket dataPakt = new DatagramPacket(rcvData, rcvData.length); - input.receive(dataPakt); - String data = new String(dataPakt.getData(),0,dataPakt.getLength()); - if (SentenceValidator.isValid(data)) { - Sentence s = factory.createParser(data); - fireSentenceEvent(s); - } - Thread.sleep(50); - } catch (Exception e) { - // nevermind, keep trying.. - } - } - fireReadingStopped(); - } - - /** - * Stops the run loop. - */ - public void stop() { - isRunning = false; - monitorThread.interrupt(); - } - } - - /** - * Watch dog for sending start/paused notifications. - */ - private class PauseMonitor implements Runnable { - - private UDPDataReader parent; - - public PauseMonitor(UDPDataReader parent) { - this.parent = parent; - } - - public void run() { - while (parent.isRunning()) { - try { - int min = pauseTimeout; - int max = pauseTimeout + 1000; - long elapsed = System.currentTimeMillis() - lastFired; - - if (elapsed > min && elapsed < max) { - lastFired = -1; - fireReadingPaused(); - } - - int sleep = Math.round(pauseTimeout / 4); - Thread.sleep(sleep); - } catch (InterruptedException e) { - // nevermind - } - } - } - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/package.html b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/package.html deleted file mode 100644 index db139eb7abf..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/io/package.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - -

    - Basic input/output related classes and interfaces for reading and writing - NMEA sentences. - - \ No newline at end of file diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/BATParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/BATParser.java deleted file mode 100755 index 9a328a66bd5..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/BATParser.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * MWVParser.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.BATSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; - -/** - * BAT sentence parser. Used for the proprietary NMEA extension of the SailTimer WindVane's battery indicator message. - * The format of the sentence is:

    - * 
    - * $WIBAT,a,b*hh
    - * 
    - * 1) Wind Vane Battery (‘0’= Low, ‘1’= Good)
    - * 2) Base Unit battery level (‘0’ = Low, ‘9’ = Good)
    - * 3) Checksum
    - * 
    - * - * @author Axel Uhl - */ -public class BATParser extends SentenceParser implements BATSentence { - private static final int WIND_VANE_BATTERY_STATUS = 0; - private static final int BASE_UNIT_BATTERY_LEVEL = 1; - - /** - * Creates a new instance of BATParser. - * - * @param nmea MWV sentence String - */ - public BATParser(String nmea) { - super(nmea, SentenceId.BAT); - } - - /** - * Creates a new empty instance of BATParser. - * - * @param talker Talker id to set - */ - public BATParser(TalkerId talker) { - super(talker, SentenceId.BAT, 2); - } - - @Override - public WindVaneBatteryStatus getWindVaneBatteryStatus() { - WindVaneBatteryStatus result = null; - final int intValue = getIntValue(WIND_VANE_BATTERY_STATUS); - for (BATSentence.WindVaneBatteryStatus status : BATSentence.WindVaneBatteryStatus.values()) { - if (status.getValue() == intValue) { - result = status; - } - } - return result; - } - - @Override - public int getBaseUnitBatteryLevel() { - return getIntValue(BASE_UNIT_BATTERY_LEVEL); - } - - @Override - public void setWindVaneBatteryStatus(WindVaneBatteryStatus status) { - setIntValue(WIND_VANE_BATTERY_STATUS, status.getValue()); - } - - @Override - public void setBaseUnitBatteryLevel(int level) { - if (level < 0 || level > 9) { - throw new IllegalArgumentException("Level must be in the range 0..9 but was "+level); - } - setIntValue(BASE_UNIT_BATTERY_LEVEL, level); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/BODParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/BODParser.java deleted file mode 100644 index 1a3b2edb9dd..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/BODParser.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * BODParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.BODSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; - -/** - * BOD sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.BODSentence - */ -public class BODParser extends SentenceParser implements BODSentence { - - // field indices - private static final int BEARING_TRUE = 0; - private static final int TRUE_INDICATOR = 1; - private static final int BEARING_MAGN = 2; - private static final int MAGN_INDICATOR = 3; - private static final int DESTINATION = 4; - private static final int ORIGIN = 5; - - /** - * Creates a new instance of BOD parser. - * - * @param nmea BOD sentence String - * @throws IllegalArgumentException If specified String is invalid or does - * not contain a BOD sentence. - */ - public BODParser(String nmea) { - super(nmea, SentenceId.BOD); - } - - /** - * Creates GSA parser with empty sentence. - * - * @param talker TalkerId to set - */ - public BODParser(TalkerId talker) { - super(talker, SentenceId.BOD, 6); - setCharValue(TRUE_INDICATOR, 'T'); - setCharValue(MAGN_INDICATOR, 'M'); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.BODSentence#getDestinationWaypointId() - */ - public String getDestinationWaypointId() { - return getStringValue(DESTINATION); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.BODSentence#getMagneticBearing() - */ - public double getMagneticBearing() { - return getDoubleValue(BEARING_MAGN); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.BODSentence#getOriginWaypointId() - */ - public String getOriginWaypointId() { - return getStringValue(ORIGIN); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.BODSentence#getTrueBearing() - */ - public double getTrueBearing() { - return getDoubleValue(BEARING_TRUE); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.BODSentence#setDestinationWaypointId(java - * .lang.String) - */ - public void setDestinationWaypointId(String id) { - setStringValue(DESTINATION, id); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.BODSentence#setMagneticBearing(double) - */ - public void setMagneticBearing(double bearing) { - setDegreesValue(BEARING_MAGN, bearing); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.BODSentence#setOriginWaypointId(java.lang - * .String) - */ - public void setOriginWaypointId(String id) { - setStringValue(ORIGIN, id); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.BODSentence#setTrueBearing(double) - */ - public void setTrueBearing(double bearing) { - setDegreesValue(BEARING_TRUE, bearing); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DBTParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DBTParser.java deleted file mode 100644 index f08e53e2994..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DBTParser.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * DBTParser.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.DBTSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.Units; - -/** - * DBT sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class DBTParser extends SentenceParser implements DBTSentence { - - // TODO calculate value for all units when setting a value - - private static final int DEPTH_FEET = 0; - private static final int FEET = 1; - private static final int DEPTH_METERS = 2; - private static final int METERS = 3; - private static final int DEPTH_FATHOMS = 4; - private static final int FATHOMS = 5; - - /** - * Creates a new instance of DBTParser. - * - * @param nmea - */ - public DBTParser(String nmea) { - super(nmea, SentenceId.DBT); - } - - /** - * Creates a new instance of DBTParser with empty data fields. - * - * @param talker TalkerId to set - */ - public DBTParser(TalkerId talker) { - super(talker, SentenceId.DBT, 6); - setCharValue(FEET, Units.FEET.toChar()); - setCharValue(METERS, Units.METER.toChar()); - setCharValue(FATHOMS, Units.FATHOMS.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DBTSentence#getMeters() - */ - public double getDepth() { - return getDoubleValue(DEPTH_METERS); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DBTSentence#getFathoms() - */ - public double getFathoms() { - return getDoubleValue(DEPTH_FATHOMS); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DBTSentence#getFeet() - */ - public double getFeet() { - return getDoubleValue(DEPTH_FEET); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DBTSentence#setMeters(double) - */ - public void setDepth(double depth) { - setDoubleValue(DEPTH_METERS, depth, 1, 1); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DBTSentence#setFathoms(double) - */ - public void setFathoms(double depth) { - setDoubleValue(DEPTH_FATHOMS, depth, 1, 1); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DBTSentence#setFeet(double) - */ - public void setFeet(double depth) { - setDoubleValue(DEPTH_FEET, depth, 1, 1); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DPTParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DPTParser.java deleted file mode 100644 index 87ff855e4d0..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DPTParser.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * DPTParser.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.DPTSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; - -/** - * DPT sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class DPTParser extends SentenceParser implements DPTSentence { - - private static final int DEPTH = 0; - private static final int OFFSET = 1; - private static final int MAXIMUM = 2; - - /** - * Creates a new instance of DPTParser. - * - * @param nmea DPT sentence String - */ - public DPTParser(String nmea) { - super(nmea, SentenceId.DPT); - } - - /** - * Creates a new instance of DPTParser with empty data fields. - * - * @param talker TalkerId to set - */ - public DPTParser(TalkerId talker) { - super(talker, SentenceId.DPT, 3); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DepthSentence#getDepth() - */ - public double getDepth() { - return getDoubleValue(DEPTH); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DPTSentence#getOffset() - */ - public double getOffset() { - return getDoubleValue(OFFSET); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DepthSentence#setDepth(double) - */ - public void setDepth(double depth) { - setDoubleValue(DEPTH, depth, 1, 1); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DPTSentence#setOffset(double) - */ - public void setOffset(double offset) { - setDoubleValue(OFFSET, offset, 1, 1); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DPTSentence#getMaximum() - */ - public int getMaximum() { - return getIntValue(MAXIMUM); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DPTSentence#setMaximum(int) - */ - public void setMaximum(int max) { - setIntValue(MAXIMUM, max); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DataNotAvailableException.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DataNotAvailableException.java deleted file mode 100644 index 2d5c4473a38..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/DataNotAvailableException.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * DataNotAvailableException.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -/** - * Thrown to indicate that requested data is not available. For example, when - * invoking a getter for sentence data field that contains no value. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class DataNotAvailableException extends RuntimeException { - - private static final long serialVersionUID = -3672061046826633631L; - - /** - * Constructor - * - * @param msg Exception message - */ - public DataNotAvailableException(String msg) { - super(msg); - } - - /** - * Constructor - * - * @param msg Exception message - * @param cause Throwable that caused the exception - */ - public DataNotAvailableException(String msg, Throwable cause) { - super(msg, cause); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GGAParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GGAParser.java deleted file mode 100644 index b1ff72e0f64..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GGAParser.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * GGAParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.GGASentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.CompassPoint; -import net.sf.marineapi.nmea.util.GpsFixQuality; -import net.sf.marineapi.nmea.util.Position; -import net.sf.marineapi.nmea.util.Time; -import net.sf.marineapi.nmea.util.Units; - -/** - * GGA sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class GGAParser extends PositionParser implements GGASentence { - - // GGA field indices - private static final int UTC_TIME = 0; - private static final int LATITUDE = 1; - private static final int LAT_HEMISPHERE = 2; - private static final int LONGITUDE = 3; - private static final int LON_HEMISPHERE = 4; - private static final int FIX_QUALITY = 5; - private static final int SATELLITES_IN_USE = 6; - private static final int HORIZONTAL_DILUTION = 7; - private static final int ALTITUDE = 8; - private static final int ALTITUDE_UNITS = 9; - private static final int GEOIDAL_HEIGHT = 10; - private static final int HEIGHT_UNITS = 11; - private static final int DGPS_AGE = 12; - private static final int DGPS_STATION_ID = 13; - - /** - * Creates a new instance of GGA parser. - * - * @param nmea GGA sentence String. - * @throws IllegalArgumentException If the specified sentence is invalid or - * not a GGA sentence. - */ - public GGAParser(String nmea) { - super(nmea, SentenceId.GGA); - } - - /** - * Creates GSA parser with empty sentence. - * - * @param talker TalkerId to set - */ - public GGAParser(TalkerId talker) { - super(talker, SentenceId.GGA, 14); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getAltitude() - */ - public double getAltitude() { - return getDoubleValue(ALTITUDE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getAltitudeUnits() - */ - public Units getAltitudeUnits() { - char ch = getCharValue(ALTITUDE_UNITS); - if (ch != ALT_UNIT_METERS && ch != ALT_UNIT_FEET) { - String msg = "Invalid altitude unit indicator: %s"; - throw new ParseException(String.format(msg, ch)); - } - return Units.valueOf(ch); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getDgpsAge() - */ - public double getDgpsAge() { - return getDoubleValue(DGPS_AGE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getDgpsStationId() - */ - public String getDgpsStationId() { - return getStringValue(DGPS_STATION_ID); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getFixQuality() - */ - public GpsFixQuality getFixQuality() { - return GpsFixQuality.valueOf(getIntValue(FIX_QUALITY)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getGeoidalHeight() - */ - public double getGeoidalHeight() { - return getDoubleValue(GEOIDAL_HEIGHT); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getGeoidalHeightUnits() - */ - public Units getGeoidalHeightUnits() { - return Units.valueOf(getCharValue(HEIGHT_UNITS)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getHorizontalDOP() - */ - public double getHorizontalDOP() { - return getDoubleValue(HORIZONTAL_DILUTION); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.PositionSentence#getPosition() - */ - public Position getPosition() { - double lat = parseLatitude(LATITUDE); - double lon = parseLongitude(LONGITUDE); - CompassPoint lath = parseHemisphereLat(LAT_HEMISPHERE); - CompassPoint lonh = parseHemisphereLon(LON_HEMISPHERE); - Position pos = new Position(lat, lath, lon, lonh); - try { - double alt = getAltitude(); - if (getAltitudeUnits().equals(Units.FEET)) { - alt = (alt / 0.3048); - } - pos.setAltitude(alt); - } catch (DataNotAvailableException e) { - // alt not available, nevermind - } - return pos; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#getSatelliteCount() - */ - public int getSatelliteCount() { - return getIntValue(SATELLITES_IN_USE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.TimeSentence#getTime() - */ - public Time getTime() { - String str = getStringValue(UTC_TIME); - int h = Integer.parseInt(str.substring(0, 2)); - int m = Integer.parseInt(str.substring(2, 4)); - double s = Double.parseDouble(str.substring(4, 6)); - return new Time(h, m, s); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#setAltitude(double) - */ - public void setAltitude(double alt) { - setDoubleValue(ALTITUDE, alt, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GGASentence#setAltitudeUnits(net.sf.marineapi - * .nmea.util.Units) - */ - public void setAltitudeUnits(Units unit) { - setCharValue(ALTITUDE_UNITS, unit.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#setDgpsAge(int) - */ - public void setDgpsAge(double age) { - setDoubleValue(DGPS_AGE, age, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GGASentence#setDgpsStationId(java.lang - * .String) - */ - public void setDgpsStationId(String id) { - setStringValue(DGPS_STATION_ID, id); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GGASentence#setFixQuality(net.sf.marineapi - * .nmea.util.GpsFixQuality) - */ - public void setFixQuality(GpsFixQuality quality) { - setIntValue(FIX_QUALITY, quality.toInt()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#setGeoidalHeight(double) - */ - public void setGeoidalHeight(double height) { - setDoubleValue(GEOIDAL_HEIGHT, height, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GGASentence#setGeoidalHeightUnits(net. - * sf.marineapi.nmea.util.Units) - */ - public void setGeoidalHeightUnits(Units unit) { - setCharValue(HEIGHT_UNITS, unit.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GGASentence#setHorizontalDOP(double) - */ - public void setHorizontalDOP(double hdop) { - setDoubleValue(HORIZONTAL_DILUTION, hdop, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.PositionSentence#setPosition(net.sf.marineapi - * .nmea.util.Position) - */ - public void setPosition(Position pos) { - setLatitude(LATITUDE, pos.getLatitude()); - setLongitude(LONGITUDE, pos.getLongitude()); - setLatHemisphere(LAT_HEMISPHERE, pos.getLatHemisphere()); - setLonHemisphere(LON_HEMISPHERE, pos.getLonHemisphere()); - setAltitude(pos.getAltitude()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.TimeSentence#setTime(net.sf.marineapi. - * nmea.util.Time) - */ - public void setTime(Time t) { - int h = t.getHour(); - int m = t.getMinutes(); - int s = (int) Math.floor(t.getSeconds()); - String time = String.format("%02d%02d%02d", h, m, s); - setStringValue(UTC_TIME, time); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GLLParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GLLParser.java deleted file mode 100644 index a1b1d93b635..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GLLParser.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * GLLParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.GLLSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.CompassPoint; -import net.sf.marineapi.nmea.util.DataStatus; -import net.sf.marineapi.nmea.util.Position; -import net.sf.marineapi.nmea.util.Time; - -/** - * GLL Sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class GLLParser extends PositionParser implements GLLSentence { - - // field indices - private static final int LATITUDE = 0; - private static final int LAT_HEMISPHERE = 1; - private static final int LONGITUDE = 2; - private static final int LON_HEMISPHERE = 3; - private static final int UTC_TIME = 4; - private static final int DATA_STATUS = 5; - - /** - * Creates a new instance of GLLParser. - * - * @param nmea GLL sentence String. - * @throws IllegalArgumentException If the given sentence is invalid or does - * not contain GLL sentence. - */ - public GLLParser(String nmea) { - super(nmea, SentenceId.GLL); - } - - /** - * Creates GSA parser with empty sentence. - * - * @param talker TalkerId to set - */ - public GLLParser(TalkerId talker) { - super(talker, SentenceId.GLL, 6); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.PositionSentence#getPosition() - */ - public Position getPosition() { - double lat = parseLatitude(LATITUDE); - double lon = parseLongitude(LONGITUDE); - CompassPoint lath = parseHemisphereLat(LAT_HEMISPHERE); - CompassPoint lonh = parseHemisphereLon(LON_HEMISPHERE); - return new Position(lat, lath, lon, lonh); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GLLSentence#getDataStatus() - */ - public DataStatus getStatus() { - return DataStatus.valueOf(getCharValue(DATA_STATUS)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.TimeSentence#getTime() - */ - public Time getTime() { - String str = getStringValue(UTC_TIME); - int h = Integer.parseInt(str.substring(0, 2)); - int m = Integer.parseInt(str.substring(2, 4)); - double s = Double.parseDouble(str.substring(4, 6)); - return new Time(h, m, s); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.PositionSentence#setPosition(net.sf.marineapi - * .nmea.util.Position) - */ - public void setPosition(Position pos) { - setLatitude(LATITUDE, pos.getLatitude()); - setLongitude(LONGITUDE, pos.getLongitude()); - setLatHemisphere(LAT_HEMISPHERE, pos.getLatHemisphere()); - setLonHemisphere(LON_HEMISPHERE, pos.getLonHemisphere()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GLLSentence#setDataStatus(net.sf.marineapi - * .nmea.util.DataStatus) - */ - public void setStatus(DataStatus status) { - setCharValue(DATA_STATUS, status.toChar()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.TimeSentence#setTime(net.sf.marineapi. - * nmea.util.Time) - */ - public void setTime(Time t) { - int h = t.getHour(); - int m = t.getMinutes(); - int s = (int) Math.floor(t.getSeconds()); - String time = String.format("%02d%02d%02d", h, m, s); - setStringValue(UTC_TIME, time); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GSAParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GSAParser.java deleted file mode 100644 index 045a6abfb74..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GSAParser.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * GSAParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import java.util.ArrayList; -import java.util.List; - -import net.sf.marineapi.nmea.sentence.GSASentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.FaaMode; -import net.sf.marineapi.nmea.util.GpsFixStatus; - -/** - * GSA sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class GSAParser extends SentenceParser implements GSASentence { - - // field indices - private static final int GPS_MODE = 0; - private static final int FIX_MODE = 1; - private static final int FIRST_SV = 2; - private static final int LAST_SV = 13; - private static final int POSITION_DOP = 14; - private static final int HORIZONTAL_DOP = 15; - private static final int VERTICAL_DOP = 16; - - /** - * Creates a new instance of GSA parser. - * - * @param nmea GSA sentence String - * @throws IllegalArgumentException If specified sentence is invalid. - */ - public GSAParser(String nmea) { - super(nmea, SentenceId.GSA); - } - - /** - * Creates GSA parser with empty sentence. - * - * @param talker TalkerId to set - */ - public GSAParser(TalkerId talker) { - super(talker, SentenceId.GSA, 17); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSASentence#getFixStatus() - */ - public GpsFixStatus getFixStatus() { - return GpsFixStatus.valueOf(getIntValue(FIX_MODE)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSASentence#getHorizontalDOP() - */ - public double getHorizontalDOP() { - return getDoubleValue(HORIZONTAL_DOP); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSASentence#getMode() - */ - public FaaMode getMode() { - return FaaMode.valueOf(getCharValue(GPS_MODE)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSASentence#getPositionDOP() - */ - public double getPositionDOP() { - return getDoubleValue(POSITION_DOP); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSASentence#getSatellitesIds() - */ - public String[] getSatellitesIds() { - List result = new ArrayList(); - for (int i = FIRST_SV; i <= LAST_SV; i++) { - if (hasValue(i)) { - result.add(getStringValue(i)); - } - } - return result.toArray(new String[result.size()]); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSASentence#getVerticalDOP() - */ - public double getVerticalDOP() { - return getDoubleValue(VERTICAL_DOP); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GSASentence#setFixStatus(net.sf.marineapi - * .nmea.util.GpsFixStatus) - */ - public void setFixStatus(GpsFixStatus status) { - setIntValue(FIX_MODE, status.toInt()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GSASentence#setHorizontalPrecision(double) - */ - public void setHorizontalDOP(double hdop) { - setDoubleValue(HORIZONTAL_DOP, hdop, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GSASentence#setFaaMode(net.sf.marineapi - * .nmea.util.FaaMode) - */ - public void setMode(FaaMode mode) { - setCharValue(GPS_MODE, mode.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSASentence#setPositionDOP(double) - */ - public void setPositionDOP(double pdop) { - setDoubleValue(POSITION_DOP, pdop, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GSASentence#setSatelliteIds(java.lang. - * String[]) - */ - public void setSatelliteIds(String[] ids) { - if (ids.length > (LAST_SV - FIRST_SV + 1)) { - throw new IllegalArgumentException("List length exceeded (12)"); - } - int j = 0; - for (int i = FIRST_SV; i <= LAST_SV; i++) { - String id = (j < ids.length) ? ids[j++] : ""; - setStringValue(i, id); - } - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSASentence#setVerticalDOP(double) - */ - public void setVerticalDOP(double vdop) { - setDoubleValue(VERTICAL_DOP, vdop, 1, 1); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GSVParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GSVParser.java deleted file mode 100644 index 6441aeff35f..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/GSVParser.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * GSVParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import java.util.ArrayList; -import java.util.List; - -import net.sf.marineapi.nmea.sentence.GSVSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.SatelliteInfo; - -/** - * GSV sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class GSVParser extends SentenceParser implements GSVSentence { - - // field indices - private static final int NUMBER_OF_SENTENCES = 0; - private static final int SENTENCE_NUMBER = 1; - private static final int SATELLITES_IN_VIEW = 2; - - // satellite id fields - private static final int[] ID_FIELDS = { 3, 7, 11, 15 }; - - // satellite data fields, relative to each id field - private static final int ELEVATION = 1; - private static final int AZIMUTH = 2; - private static final int NOISE = 3; - - /** - * Constructor. - * - * @param nmea GSV Sentence - */ - public GSVParser(String nmea) { - super(nmea, SentenceId.GSV); - } - - /** - * Creates an GSV parser with empty sentence. - * - * @param talker TalkerId to set - */ - public GSVParser(TalkerId talker) { - super(talker, SentenceId.GSV, 19); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSVSentence#getSatelliteCount() - */ - public int getSatelliteCount() { - return getIntValue(SATELLITES_IN_VIEW); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSVSentence#getSatelliteInfo() - */ - public List getSatelliteInfo() { - - List satellites = new ArrayList(4); - - for (int idf : ID_FIELDS) { - try { - String id = getStringValue(idf); - int elev = getIntValue(idf + ELEVATION); - int azm = getIntValue(idf + AZIMUTH); - int snr = getIntValue(idf + NOISE); - satellites.add(new SatelliteInfo(id, elev, azm, snr)); - } catch (DataNotAvailableException e) { - // nevermind missing satellite info - } - } - - return satellites; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSVSentence#getSentenceCount() - */ - public int getSentenceCount() { - return getIntValue(NUMBER_OF_SENTENCES); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSVSentence#getSentenceIndex() - */ - public int getSentenceIndex() { - return getIntValue(SENTENCE_NUMBER); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSVSentence#isFirst() - */ - public boolean isFirst() { - return (getSentenceIndex() == 1); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSVSentence#isLast() - */ - public boolean isLast() { - return (getSentenceIndex() == getSentenceCount()); - } - - public void setSatelliteCount(int count) { - if (count < 0) { - throw new IllegalArgumentException( - "Satellite count cannot be negative"); - } - setIntValue(SATELLITES_IN_VIEW, count); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.GSVSentence#setSatelliteInfo(java.util - * .List) - */ - public void setSatelliteInfo(List info) { - if (info.size() > 4) { - throw new IllegalArgumentException("Maximum list size is 4"); - } - int i = 0; - for (int id : ID_FIELDS) { - if (i < info.size()) { - SatelliteInfo si = info.get(i++); - setStringValue(id, si.getId()); - setIntValue(id + ELEVATION, si.getElevation()); - setIntValue(id + AZIMUTH, si.getAzimuth(), 3); - setIntValue(id + NOISE, si.getNoise()); - } else { - setStringValue(id, ""); - setStringValue(id + ELEVATION, ""); - setStringValue(id + AZIMUTH, ""); - setStringValue(id + NOISE, ""); - } - } - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSVSentence#setSentenceCount(int) - */ - public void setSentenceCount(int count) { - if (count < 1) { - throw new IllegalArgumentException( - "Number of sentences cannot be negative"); - } - setIntValue(NUMBER_OF_SENTENCES, count); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.GSVSentence#setSentenceIndex(int) - */ - public void setSentenceIndex(int index) { - if (index < 0) { - throw new IllegalArgumentException( - "Sentence index cannot be negative"); - } - setIntValue(SENTENCE_NUMBER, index); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDGParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDGParser.java deleted file mode 100644 index 60ad7c2c22b..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDGParser.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * HDGParser.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.HDGSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.CompassPoint; - -/** - * HDG sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class HDGParser extends SentenceParser implements HDGSentence { - - private static final int HEADING = 0; - private static final int DEVIATION = 1; - private static final int DEV_DIRECTION = 2; - private static final int VARIATION = 3; - private static final int VAR_DIRECTION = 4; - - /** - * Creates a new HDG parser. - * - * @param nmea HDG sentence String - */ - public HDGParser(String nmea) { - super(nmea, SentenceId.HDG); - } - - /** - * Creates a new empty HDG parser. - * - * @param talker Talker id to set - */ - public HDGParser(TalkerId talker) { - super(talker, SentenceId.HDG, 5); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HDGSentence#getDeviation() - */ - public double getDeviation() { - double dev = getDoubleValue(DEVIATION); - if (dev == 0) { - return dev; - } - CompassPoint dir = CompassPoint.valueOf(getCharValue(DEV_DIRECTION)); - return dir == CompassPoint.WEST ? -dev : dev; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HDGSentence#getHeading() - */ - public double getHeading() { - return getDoubleValue(HEADING); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HDGSentence#getVariation() - */ - public double getVariation() { - double var = getDoubleValue(VARIATION); - if (var == 0) { - return var; - } - CompassPoint dir = CompassPoint.valueOf(getCharValue(VAR_DIRECTION)); - return dir == CompassPoint.WEST ? -var : var; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HeadingSentence#isTrue() - */ - public boolean isTrue() { - return false; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HDGSentence#setDeviation(double) - */ - public void setDeviation(double deviation) { - if (deviation < -180 || deviation > 180) { - throw new IllegalArgumentException("Value out of range [-180..180]"); - } - if (deviation > 0) { - setCharValue(DEV_DIRECTION, CompassPoint.EAST.toChar()); - } else if (deviation < 0) { - setCharValue(DEV_DIRECTION, CompassPoint.WEST.toChar()); - } else { - setStringValue(DEV_DIRECTION, ""); - } - setDoubleValue(DEVIATION, Math.abs(deviation), 3, 1); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HDGSentence#setHeading(double) - */ - public void setHeading(double heading) { - setDegreesValue(HEADING, heading); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HDGSentence#setVariation(double) - */ - public void setVariation(double variation) { - if (variation < -180 || variation > 180) { - throw new IllegalArgumentException("Value out of range [-180..180]"); - } - if (variation > 0) { - setCharValue(VAR_DIRECTION, CompassPoint.EAST.toChar()); - } else if (variation < 0) { - setCharValue(VAR_DIRECTION, CompassPoint.WEST.toChar()); - } else { - setStringValue(VAR_DIRECTION, ""); - } - setDoubleValue(VARIATION, Math.abs(variation), 3, 1); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDMParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDMParser.java deleted file mode 100644 index 4b128480bc9..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDMParser.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * HDMParser.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.HDMSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; - -/** - * HDM sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class HDMParser extends SentenceParser implements HDMSentence { - - private static final int HEADING = 0; - private static final int MAGN_INDICATOR = 1; - - /** - * Creates a new HDM parser. - * - * @param nmea HDM sentence String - */ - public HDMParser(String nmea) { - super(nmea, SentenceId.HDM); - } - - /** - * Creates a new empty HDM sentence. - * - * @param talker Talker id to set - */ - public HDMParser(TalkerId talker) { - super(talker, SentenceId.HDM, 2); - setCharValue(MAGN_INDICATOR, 'M'); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HDMSentence#getHeading() - */ - public double getHeading() { - return getDoubleValue(HEADING); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HeadingSentence#isTrue() - */ - public boolean isTrue() { - return false; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HDMSentence#setHeading(double) - */ - public void setHeading(double hdm) { - setDegreesValue(HEADING, hdm); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDTParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDTParser.java deleted file mode 100644 index a4c9aababeb..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/HDTParser.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * HDTParser.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.HDTSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; - -/** - * HDT sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class HDTParser extends SentenceParser implements HDTSentence { - - private static final int HEADING = 0; - private static final int TRUE_INDICATOR = 1; - - /** - * Creates a new HDT parser. - * - * @param nmea HDT sentence String to parse. - */ - public HDTParser(String nmea) { - super(nmea, SentenceId.HDT); - } - - /** - * Creates a new empty HDT sentence. - * - * @param talker Talker id to set - */ - public HDTParser(TalkerId talker) { - super(talker, SentenceId.HDT, 2); - setCharValue(TRUE_INDICATOR, 'T'); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.parser.HeadingSentence#getHeading() - */ - public double getHeading() { - return getDoubleValue(HEADING); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HeadingSentence#isTrue() - */ - public boolean isTrue() { - return true; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.parser.HeadingSentence#setHeading(double) - */ - public void setHeading(double hdt) { - setDegreesValue(HEADING, hdt); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MTAParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MTAParser.java deleted file mode 100644 index a8f1de44f87..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MTAParser.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * MTAParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.MTASentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.Units; - -/** - * MTA sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class MTAParser extends SentenceParser implements MTASentence { - - private static final int TEMPERATURE = 0; - private static final int UNIT_INDICATOR = 1; - - /** - * Constructor. - */ - public MTAParser(String mta) { - super(mta, SentenceId.MTA); - } - - /** - * Constructor. - */ - public MTAParser(TalkerId talker) { - super(talker, SentenceId.MTA, 2); - setCharValue(UNIT_INDICATOR, Units.CELSIUS.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MTASentence#getTemperature() - */ - public double getTemperature() { - return getDoubleValue(TEMPERATURE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MTASentence#setTemperature(double) - */ - public void setTemperature(double temp) { - setDoubleValue(TEMPERATURE, temp, 1, 2); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MTWParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MTWParser.java deleted file mode 100644 index eb1a591cdcf..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MTWParser.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * MTWParser.java - * Copyright (C) 2011 Warren Zahra - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.MTWSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.Units; - -/** - * MTW Sentence parser. - * - * @author Warren Zahra, Kimmo Tuukkanen - * @version $Revision$ - */ -public class MTWParser extends SentenceParser implements MTWSentence { - - private static final int TEMPERATURE = 0; - private static final int UNIT_INDICATOR = 1; - - /** - * Creates new instance of MTWParser with specified sentence. - * - * @param nmea MTW sentence string - */ - public MTWParser(String nmea) { - super(nmea); - } - - /** - * Creates new MTW parse without data. - * - * @param tid TalkerId to set - */ - public MTWParser(TalkerId tid) { - super(tid, SentenceId.MTW, 2); - setCharValue(UNIT_INDICATOR, Units.CELSIUS.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MTWSentence#getTemperature() - */ - public double getTemperature() { - return getDoubleValue(TEMPERATURE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MTWSentence#setTemperature(double) - */ - public void setTemperature(double temp) { - setDoubleValue(TEMPERATURE, temp, 1, 2); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MWVParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MWVParser.java deleted file mode 100644 index 4b64d931e93..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/MWVParser.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * MWVParser.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.MWVSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.DataStatus; -import net.sf.marineapi.nmea.util.Units; - -/** - * MWV sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class MWVParser extends SentenceParser implements MWVSentence { - - private static final int WIND_ANGLE = 0; - private static final int REFERENCE = 1; - private static final int WIND_SPEED = 2; - private static final int SPEED_UNITS = 3; - private static final int DATA_STATUS = 4; - - /** - * Creates a new instance of MWVParser. - * - * @param nmea MWV sentence String - */ - public MWVParser(String nmea) { - super(nmea, SentenceId.MWV); - } - - /** - * Creates a new empty instance of MWVParser. - * - * @param talker Talker id to set - */ - public MWVParser(TalkerId talker) { - super(talker, SentenceId.MWV, 5); - setCharValue(DATA_STATUS, DataStatus.VOID.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MWVSentence#getAngle() - */ - public double getAngle() { - return getDoubleValue(WIND_ANGLE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MWVSentence#getSpeed() - */ - public double getSpeed() { - return getDoubleValue(WIND_SPEED); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MWVSentence#getSpeedUnit() - */ - public Units getSpeedUnit() { - return Units.valueOf(getCharValue(SPEED_UNITS)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MWVSentence#getStatus() - */ - public DataStatus getStatus() { - return DataStatus.valueOf(getCharValue(DATA_STATUS)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MWVSentence#isTrue() - */ - public boolean isTrue() { - char ch = getCharValue(REFERENCE); - return ch == 'T'; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MWVSentence#setAngle(double) - */ - public void setAngle(double angle) { - setDegreesValue(WIND_ANGLE, angle); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MWVSentence#setSpeed(double) - */ - public void setSpeed(double speed) { - if (speed < 0) { - throw new IllegalArgumentException("Speed must be positive"); - } - setDoubleValue(WIND_SPEED, speed, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.MWVSentence#setSpeedUnit(net.sf.marineapi - * .nmea.util.Units) - */ - public void setSpeedUnit(Units unit) { - if (unit == Units.METER || unit == Units.KMH || unit == Units.KNOT) { - setCharValue(SPEED_UNITS, unit.toChar()); - return; - } - throw new IllegalArgumentException("Invalid unit for speed"); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.MWVSentence#setStatus(net.sf.marineapi - * .nmea.util.DataStatus) - */ - public void setStatus(DataStatus status) { - setCharValue(DATA_STATUS, status.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.MWVSentence#setTrue(boolean) - */ - public void setTrue(boolean isTrue) { - if (isTrue) { - setCharValue(REFERENCE, 'T'); - } else { - setCharValue(REFERENCE, 'R'); - } - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/ParseException.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/ParseException.java deleted file mode 100644 index 9bd0fe8929a..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/ParseException.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * ParseException.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -/** - * Thrown to indicate that parser is unable interpret the contents of requested - * data field. For example, when a field contains invalid value that cannot be - * parsed to expected native data type. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class ParseException extends DataNotAvailableException { - - /** serialVersionUID */ - private static final long serialVersionUID = 6203761984607273569L; - - /** - * Constructor with description. - * - * @param msg Description of the Exception - */ - public ParseException(String msg) { - super(msg); - } - - /** - * Constructor with message and cause. - * - * @param msg Description of the Exception - * @param cause Throwable that caused this exception - */ - public ParseException(String msg, Throwable cause) { - super(msg, cause); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/PositionParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/PositionParser.java deleted file mode 100644 index dc1838cbf9c..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/PositionParser.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * PositionParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; - -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.CompassPoint; - -/** - * Abstract base class for sentence parsers that provide geographic position or - * waypoint data, and thus need to parse lat/lon values. However, notice that - * {@link net.sf.marineapi.nmea.sentence.PositionSentence} interface is not - * implemented by this parser because the extending parser may not always - * provide current location. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public abstract class PositionParser extends SentenceParser { - - /** - * @see SentenceParser#SentenceParser(String, SentenceId) - */ - protected PositionParser(String nmea, SentenceId type) { - super(nmea, type); - } - - /** - * @see SentenceParser#SentenceParser(TalkerId, SentenceId, int) - */ - protected PositionParser(TalkerId talker, SentenceId type, int size) { - super(talker, type, size); - } - - /** - * Parses the hemisphere of latitude from specified field. - * - * @param index Index of field that contains the latitude hemisphere value. - * @return Hemisphere of latitude - */ - public CompassPoint parseHemisphereLat(int index) { - char ch = getCharValue(index); - CompassPoint d = CompassPoint.valueOf(ch); - if (d != CompassPoint.NORTH && d != CompassPoint.SOUTH) { - throw new ParseException("Invalid latitude hemisphere '" + ch + "'"); - } - return d; - } - - /** - * Parses the hemisphere of longitude from the specified field. - * - * @param index Field index for longitude hemisphere indicator - * @return Hemisphere of longitude - */ - public CompassPoint parseHemisphereLon(int index) { - char ch = getCharValue(index); - CompassPoint d = CompassPoint.valueOf(ch); - if (d != CompassPoint.EAST && d != CompassPoint.WEST) { - throw new ParseException("Invalid longitude hemisphere " + ch + "'"); - } - return d; - } - - /** - * Parses the latitude degrees from the specified field. The assumed String - * format for latitude is ddmm.mmm. - * - * @param index Index of field containing the latitude value. - * @return Latitude value in degrees - */ - public double parseLatitude(int index) { - String field = getStringValue(index); - int deg = Integer.parseInt(field.substring(0, 2)); - double min = Double.parseDouble(field.substring(2)); - return deg + (min / 60); - } - - /** - * Parses the longitude degrees from the specified field. The assumed String - * format for longitude is dddmm.mmm. - * - * @param index Index of field containing the longitude value. - * @return Longitude value in degrees - */ - public double parseLongitude(int index) { - String field = getStringValue(index); - int deg = Integer.parseInt(field.substring(0, 3)); - double min = Double.parseDouble(field.substring(3)); - return deg + (min / 60); - } - - /** - * Set the hemisphere of latitude in specified field. - * - * @param field Field index - * @param hem Direction.NORTH or Direction.SOUTH - * @throws IllegalArgumentException If specified Direction is other than - * NORTH or SOUTH. - */ - public void setLatHemisphere(int field, CompassPoint hem) { - if (hem != CompassPoint.NORTH && hem != CompassPoint.SOUTH) { - throw new IllegalArgumentException("Invalid latitude hemisphere: " - + hem); - } - setCharValue(field, hem.toChar()); - } - - /** - * Sets the latitude value in specified field, formatted in "ddmm.mmm". - * - * @param index Field index - * @param lat Latitude value in degrees - */ - public void setLatitude(int index, double lat) { - - int deg = (int) Math.floor(lat); - double min = (lat - deg) * 60; - - DecimalFormat df = new DecimalFormat("00.000"); - DecimalFormatSymbols dfs = new DecimalFormatSymbols(); - dfs.setDecimalSeparator('.'); - df.setDecimalFormatSymbols(dfs); - - String result = String.format("%02d%s", deg, df.format(min)); - setStringValue(index, result); - } - - /** - * Sets the longitude value in specified field, formatted in "dddmm.mmm". - * - * @param index Field index - * @param lon Longitude value in degrees - */ - public void setLongitude(int index, double lon) { - - int deg = (int) Math.floor(lon); - double min = (lon - deg) * 60; - - DecimalFormat nf = new DecimalFormat("00.000"); - DecimalFormatSymbols dfs = new DecimalFormatSymbols(); - dfs.setDecimalSeparator('.'); - nf.setDecimalFormatSymbols(dfs); - - String result = String.format("%03d%s", deg, nf.format(min)); - setStringValue(index, result); - } - - /** - * Set the hemisphere of longitude in specified field. - * - * @param field Field index - * @param hem Direction.EAST or Direction.WEST - * @throws IllegalArgumentException If specified Direction is other than - * EAST or WEST. - */ - public void setLonHemisphere(int field, CompassPoint hem) { - if (hem != CompassPoint.EAST && hem != CompassPoint.WEST) { - throw new IllegalArgumentException("Invalid longitude hemisphere: " - + hem); - } - setCharValue(field, hem.toChar()); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RMBParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RMBParser.java deleted file mode 100644 index 21091753239..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RMBParser.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * RMBParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.RMBSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.CompassPoint; -import net.sf.marineapi.nmea.util.DataStatus; -import net.sf.marineapi.nmea.util.Direction; -import net.sf.marineapi.nmea.util.Waypoint; - -/** - * RMB sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class RMBParser extends PositionParser implements RMBSentence { - - // field indexes - private static final int STATUS = 0; - private static final int CROSS_TRACK_ERROR = 1; - private static final int STEER_TO = 2; - private static final int ORIGIN_WPT = 3; - private static final int DEST_WPT = 4; - private static final int DEST_LAT = 5; - private static final int DEST_LAT_HEM = 6; - private static final int DEST_LON = 7; - private static final int DEST_LON_HEM = 8; - private static final int RANGE_TO_DEST = 9; - private static final int BEARING_TO_DEST = 10; - private static final int VELOCITY = 11; - private static final int ARRIVAL_STATUS = 12; - - /** - * Constructor. - * - * @param nmea RMB sentence string - */ - public RMBParser(String nmea) { - super(nmea, SentenceId.RMB); - } - - /** - * Creates RMB parser with empty sentence. - * - * @param talker TalkerId to set - */ - public RMBParser(TalkerId talker) { - super(talker, SentenceId.RMB, 13); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getArrivalStatus() - */ - public DataStatus getArrivalStatus() { - return DataStatus.valueOf(getCharValue(ARRIVAL_STATUS)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getBearing() - */ - public double getBearing() { - return getDoubleValue(BEARING_TO_DEST); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getCrossTrackError() - */ - public double getCrossTrackError() { - return getDoubleValue(CROSS_TRACK_ERROR); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getDestination() - */ - public Waypoint getDestination() { - String id = getStringValue(DEST_WPT); - double lat = parseLatitude(DEST_LAT); - double lon = parseLongitude(DEST_LON); - CompassPoint lath = parseHemisphereLat(DEST_LAT_HEM); - CompassPoint lonh = parseHemisphereLon(DEST_LON_HEM); - return new Waypoint(id, lat, lath, lon, lonh); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getOriginId() - */ - public String getOriginId() { - return getStringValue(ORIGIN_WPT); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getRange() - */ - public double getRange() { - return getDoubleValue(RANGE_TO_DEST); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getStatus() - */ - public DataStatus getStatus() { - return DataStatus.valueOf(getCharValue(STATUS)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getSteerTo() - */ - public Direction getSteerTo() { - return Direction.valueOf(getCharValue(STEER_TO)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#getVelocity() - */ - public double getVelocity() { - return getDoubleValue(VELOCITY); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#hasArrived() - */ - public boolean hasArrived() { - return DataStatus.ACTIVE.equals(getArrivalStatus()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMBSentence#setArrivalStatus(net.sf.marineapi - * .nmea.util.DataStatus) - */ - public void setArrivalStatus(DataStatus status) { - setCharValue(ARRIVAL_STATUS, status.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#setBearing(double) - */ - public void setBearing(double bearing) { - setDegreesValue(BEARING_TO_DEST, bearing); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMBSentence#setCrossTrackError(double) - */ - public void setCrossTrackError(double xte) { - setDoubleValue(CROSS_TRACK_ERROR, xte, 1, 2); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMBSentence#setDestination(net.sf.marineapi - * .nmea.util.Waypoint) - */ - public void setDestination(Waypoint dest) { - setStringValue(DEST_WPT, dest.getId()); - setLatitude(DEST_LAT, dest.getLatitude()); - setLatHemisphere(DEST_LAT_HEM, dest.getLatHemisphere()); - setLongitude(DEST_LON, dest.getLongitude()); - setLonHemisphere(DEST_LON_HEM, dest.getLonHemisphere()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMBSentence#setOriginId(java.lang.String) - */ - public void setOriginId(String id) { - setStringValue(ORIGIN_WPT, id); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#setRange(double) - */ - public void setRange(double range) { - setDoubleValue(RANGE_TO_DEST, range, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMBSentence#setStatus(net.sf.marineapi - * .nmea.util.DataStatus) - */ - public void setStatus(DataStatus status) { - setCharValue(STATUS, status.toChar()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMBSentence#setSteerTo(net.sf.marineapi - * .nmea.util.Direction) - */ - public void setSteerTo(Direction steer) { - if (steer != Direction.LEFT && steer != Direction.RIGHT) { - throw new IllegalArgumentException( - "Expected steer-to is LEFT or RIGHT."); - } - setCharValue(STEER_TO, steer.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMBSentence#setVelocity(double) - */ - public void setVelocity(double velocity) { - setDoubleValue(VELOCITY, velocity, 1, 1); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RMCParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RMCParser.java deleted file mode 100644 index 2067fdb5664..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RMCParser.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * RMCParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.RMCSentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.CompassPoint; -import net.sf.marineapi.nmea.util.DataStatus; -import net.sf.marineapi.nmea.util.Date; -import net.sf.marineapi.nmea.util.FaaMode; -import net.sf.marineapi.nmea.util.Position; -import net.sf.marineapi.nmea.util.Time; - -/** - * RMC sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class RMCParser extends PositionParser implements RMCSentence { - - private static final int UTC_TIME = 0; - private static final int DATA_STATUS = 1; - private static final int LATITUDE = 2; - private static final int LAT_HEMISPHERE = 3; - private static final int LONGITUDE = 4; - private static final int LON_HEMISPHERE = 5; - private static final int SPEED = 6; - private static final int COURSE = 7; - private static final int UTC_DATE = 8; - private static final int MAG_VARIATION = 9; - private static final int VAR_HEMISPHERE = 10; - private static final int MODE = 11; - - /** - * Creates a new instance of RMCParser. - * - * @param nmea RMC sentence String. - * @throws IllegalArgumentException If specified sentence is invalid. - */ - public RMCParser(String nmea) { - super(nmea, SentenceId.RMC); - } - - /** - * Creates a ZDA parser with empty sentence. - * - * @param talker TalkerId to set - */ - public RMCParser(TalkerId talker) { - super(talker, SentenceId.RMC, 12); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#getCorrectedCourse() - */ - public double getCorrectedCourse() { - return getCourse() + getVariation(); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#getCourse() - */ - public double getCourse() { - return getDoubleValue(COURSE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DateSentence#getDate() - */ - public Date getDate() { - int y = Integer.parseInt(getStringValue(UTC_DATE).substring(4)); - int m = Integer.parseInt(getStringValue(UTC_DATE).substring(2, 4)); - int d = Integer.parseInt(getStringValue(UTC_DATE).substring(0, 2)); - return new Date(y, m, d); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#getDirectionOfVariation() - */ - public CompassPoint getDirectionOfVariation() { - return CompassPoint.valueOf(getCharValue(VAR_HEMISPHERE)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#getFaaMode() - */ - public FaaMode getMode() { - return FaaMode.valueOf(getCharValue(MODE)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.PositionSentence#getPosition() - */ - public Position getPosition() { - double lat = parseLatitude(LATITUDE); - double lon = parseLongitude(LONGITUDE); - CompassPoint lath = parseHemisphereLat(LAT_HEMISPHERE); - CompassPoint lonh = parseHemisphereLon(LON_HEMISPHERE); - return new Position(lat, lath, lon, lonh); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#getSpeed() - */ - public double getSpeed() { - return getDoubleValue(SPEED); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#getDataStatus() - */ - public DataStatus getStatus() { - return DataStatus.valueOf(getCharValue(DATA_STATUS)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.TimeSentence#getTime() - */ - public Time getTime() { - String str = getStringValue(UTC_TIME); - int h = Integer.parseInt(str.substring(0, 2)); - int m = Integer.parseInt(str.substring(2, 4)); - double s = Double.parseDouble(str.substring(4, 6)); - return new Time(h, m, s); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#getVariation() - */ - public double getVariation() { - double variation = getDoubleValue(MAG_VARIATION); - if (CompassPoint.EAST == getDirectionOfVariation() && variation > 0) { - variation = -(variation); - } - return variation; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#setCourse(double) - */ - public void setCourse(double cog) { - setDegreesValue(COURSE, cog); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.DateSentence#setDate(net.sf.marineapi. - * nmea.util.Date) - */ - public void setDate(Date date) { - int y = date.getYear(); - int m = date.getMonth(); - int d = date.getDay(); - String year = String.valueOf(y).substring(2); - String time = String.format("%02d%02d%s", d, m, year); - setStringValue(UTC_DATE, time); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMCSentence#setDirectionOfVariation(net - * .sf.marineapi.nmea.util.Direction) - */ - public void setDirectionOfVariation(CompassPoint dir) { - if (dir != CompassPoint.EAST && dir != CompassPoint.WEST) { - throw new IllegalArgumentException( - "Invalid variation direction, expected EAST or WEST."); - } - setCharValue(VAR_HEMISPHERE, dir.toChar()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMCSentence#setFaaMode(net.sf.marineapi - * .nmea.util.FaaMode) - */ - public void setMode(FaaMode mode) { - setCharValue(MODE, mode.toChar()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.PositionSentence#setPosition(net.sf.marineapi - * .nmea.util.Position) - */ - public void setPosition(Position pos) { - setLatitude(LATITUDE, pos.getLatitude()); - setLongitude(LONGITUDE, pos.getLongitude()); - setLatHemisphere(LAT_HEMISPHERE, pos.getLatHemisphere()); - setLonHemisphere(LON_HEMISPHERE, pos.getLonHemisphere()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#setSpeed(double) - */ - public void setSpeed(double sog) { - setDoubleValue(SPEED, sog, 1, 1); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RMCSentence#setDataStatus(net.sf.marineapi - * .nmea.util.DataStatus) - */ - public void setStatus(DataStatus status) { - setCharValue(DATA_STATUS, status.toChar()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.TimeSentence#setTime(net.sf.marineapi. - * nmea.util.Time) - */ - public void setTime(Time t) { - int h = t.getHour(); - int m = t.getMinutes(); - int s = (int) Math.floor(t.getSeconds()); - String time = String.format("%02d%02d%02d", h, m, s); - setStringValue(UTC_TIME, time); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RMCSentence#setVariation(double) - */ - public void setVariation(double var) { - setDegreesValue(MAG_VARIATION, var); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RTEParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RTEParser.java deleted file mode 100644 index bbe383e3eac..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/RTEParser.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * RTEParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import java.util.ArrayList; -import java.util.List; - -import net.sf.marineapi.nmea.sentence.RTESentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.util.RouteType; - -/** - * RTE sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class RTEParser extends SentenceParser implements RTESentence { - - // fields indices - private static final int NUMBER_OF_SENTENCES = 0; - private static final int SENTENCE_NUMBER = 1; - private static final int STATUS = 2; - private static final int ROUTE_ID = 3; - private static final int FIRST_WPT = 4; - - /** - * Creates a new instance of RTE parser. - * - * @param nmea RTE sentence string. - */ - public RTEParser(String nmea) { - super(nmea, SentenceId.RTE); - } - - /** - * Creates RTE parser with empty sentence. The created RTE sentence contains - * none waypoint ID fields. - * - * @param talker TalkerId to set - */ - public RTEParser(TalkerId talker) { - super(talker, SentenceId.RTE, 4); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RTESentence#addWaypointId(java.lang.String - * ) - */ - public int addWaypointId(String id) { - - String[] ids = getWaypointIds(); - String[] newIds = new String[ids.length + 1]; - - System.arraycopy(ids, 0, newIds, 0, ids.length); - newIds[newIds.length - 1] = id; - - setStringValues(FIRST_WPT, newIds); - return newIds.length; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#getRouteId() - */ - public String getRouteId() { - return getStringValue(ROUTE_ID); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#getSentenceCount() - */ - public int getSentenceCount() { - return getIntValue(NUMBER_OF_SENTENCES); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#getSentenceIndex() - */ - public int getSentenceIndex() { - return getIntValue(SENTENCE_NUMBER); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#getWaypointCount() - */ - public int getWaypointCount() { - return getWaypointIds().length; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#getWaypointIds() - */ - public String[] getWaypointIds() { - - List temp = new ArrayList(); - - for (int i = FIRST_WPT; i < getFieldCount(); i++) { - try { - temp.add(getStringValue(i)); - } catch (DataNotAvailableException e) { - // nevermind empty fields - } - } - - return temp.toArray(new String[temp.size()]); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#isActiveRoute() - */ - public boolean isActiveRoute() { - return getCharValue(STATUS) == RouteType.ACTIVE.toChar(); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#isFirst() - */ - public boolean isFirst() { - return (getSentenceIndex() == 1); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#isLast() - */ - public boolean isLast() { - return (getSentenceIndex() == getSentenceCount()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#isWorkingRoute() - */ - public boolean isWorkingRoute() { - return getCharValue(STATUS) == RouteType.WORKING.toChar(); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RTESentence#setRouteId(java.lang.String) - */ - public void setRouteId(String id) { - setStringValue(ROUTE_ID, id); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RTESentence#setRouteType(net.sf.marineapi - * .nmea.util.RouteType) - */ - public void setRouteType(RouteType type) { - setCharValue(STATUS, type.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#setSentenceCount(int) - */ - public void setSentenceCount(int count) { - if (count < 0) { - throw new IllegalArgumentException("Count cannot be negative"); - } - setIntValue(NUMBER_OF_SENTENCES, count); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.RTESentence#setSentenceIndex(int) - */ - public void setSentenceIndex(int index) { - if (index < 0) { - throw new IllegalArgumentException("Index cannot be negative"); - } - setIntValue(SENTENCE_NUMBER, index); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.RTESentence#setWaypointIds(java.lang.String - * []) - */ - public void setWaypointIds(String[] ids) { - setStringValues(FIRST_WPT, ids); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/SentenceFactory.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/SentenceFactory.java deleted file mode 100644 index 98e285557fc..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/SentenceFactory.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * SentenceFactory.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.Map; - -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; - -/** - * Factory for creating sentence parsers. - *

    - * To create and register a custom parser: - *

      - *
    1. Define a sentence interface by extending the {@link Sentence} interface - * (e.g. XYZSentence).
    2. - *
    3. Implement the interface in a class that extends {@link SentenceParser}, - * (e.g. XYZParser).
    4. - *
    5. Use the protected getters and setters in SentenceParser to - * read and write sentence data.
    6. - *
    7. Add a constructor with String parameter, i.e. the sentence - * to be parsed by the parser. Pass this parameter to - * {@link SentenceParser#SentenceParser(String, String)} together with expected - * sentence id (e.g. "XYZ").
    8. - *
    9. Add another constructor with {@link TalkerId} parameter. Pass this - * parameter to {@link SentenceParser#SentenceParser(TalkerId, String, int)} - * along with parser type and number of sentence fields.
    10. - *
    11. Register your parser class in SentenceFactory using the - * {@link #registerParser(String, Class)} method.
    12. - *
    13. Use {@link SentenceFactory#createParser(String)} or - * {@link SentenceFactory#createParser(TalkerId, String)} to obtain an instance - * of your parser. Also, {@link net.sf.marineapi.nmea.io.SentenceReader} will - * now dispatch instances of it whenever the corresponding sentence is read from - * input stream.
    14. - *
    - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public final class SentenceFactory { - - // map that holds registered sentence types and parser classes - private static Map> parsers = new HashMap>(); - - // singleton factory instance - private static volatile SentenceFactory instance; - - /** - * Constructor. - */ - private SentenceFactory() { - registerParser("BOD", BODParser.class); - registerParser("DBT", DBTParser.class); - registerParser("DPT", DPTParser.class); - registerParser("GGA", GGAParser.class); - registerParser("GLL", GLLParser.class); - registerParser("GSA", GSAParser.class); - registerParser("GSV", GSVParser.class); - registerParser("HDG", HDGParser.class); - registerParser("HDM", HDMParser.class); - registerParser("HDT", HDTParser.class); - registerParser("MTA", MTAParser.class); - registerParser("MTW", MTWParser.class); - registerParser("BAT", BATParser.class); - registerParser("MWV", MWVParser.class); - registerParser("RMB", RMBParser.class); - registerParser("RMC", RMCParser.class); - registerParser("RTE", RTEParser.class); - registerParser("VHW", VHWParser.class); - registerParser("VTG", VTGParser.class); - registerParser("WPL", WPLParser.class); - registerParser("ZDA", ZDAParser.class); - } - - /** - * Creates a parser for specified NMEA sentence String. The parser - * implementation is selected from the list of registered parsers according - * to sentence type. - * - * @param nmea NMEA 0183 sentence String - * @return Sentence parser instance for specified sentence - * @throws IllegalArgumentException If there is no parser registered for the - * given sentence type - * @throws IllegalStateException If parser is found, but it does not - * implement expected constructors or is otherwise unusable. - */ - public Sentence createParser(String nmea) { - String sid = SentenceId.parseStr(nmea); - return createParserImpl(sid, String.class, nmea); - } - - /** - * Creates a sentence parser for specified sentence type with given talker - * ID. - * - * @param talker Talker ID to use in parser - * @param type Type of the parser to create - * @return Sentence instance - * @throws IllegalArgumentException If talker id is null or if there is no - * parser registered for given sentence type. - * @throws IllegalStateException If parser is found, but it does not - * implement expected constructors or is otherwise unusable. - */ - public Sentence createParser(TalkerId talker, String type) { - if (talker == null) { - throw new IllegalArgumentException("TalkerId cannot be null"); - } - return createParserImpl(type, TalkerId.class, talker); - } - - /** - * Tells if the factory is able to create parser for specified sentence - * type. All {@link SentenceId} enum values should result returning - * true at all times. - * - * @param type Sentence type id, e.g. "GLL" or "GGA". - * @return true if type is supported, otherwise false. - */ - public boolean hasParser(String type) { - return parsers.containsKey(type); - } - - /** - * Register a sentence parser to factory. After registration, - * {@link #createParser(String)} method can be used to obtain parsers for - * registered type. All sentences supported by the library are registered by - * default, and this method is provided mainly for registering custom - * parsers that can be created by extending the {@link SentenceParser} - * class. - * - * @param type Sentence type id, e.g. "GGA" or "GLL". - * @param parser Class of parser implementation for given type. - */ - public void registerParser(String type, - Class parser) { - - try { - parser.getConstructor(String.class); - parser.getConstructor(TalkerId.class); - parsers.put(type, parser); - } catch (SecurityException e) { - String msg = "Unable to register parser due security violation"; - throw new IllegalArgumentException(msg, e); - } catch (NoSuchMethodException e) { - String msg = "Parser must implement two constructors with String and TalkerId parameters"; - throw new IllegalArgumentException(msg, e); - } - } - - /** - * Unregisters a parser class, regardless of sentence type(s) it is - * registered for. - * - * @param parser Parser implementation class for type. - * @see #registerParser(String, Class) - */ - public void unregisterParser(Class parser) { - for (String key : parsers.keySet()) { - if (parsers.get(key) == parser) { - parsers.remove(key); - break; - } - } - } - - /** - * Creates a new parser instance with specified parameters. - * - * @param sid Sentence/parser type ID, e.g. "GGA" or "GLL" - * @param paramClass Class of the constructor parameter, String.class or - * TalkerId.class - * @param param Object to pass in parser constructor - * @return Parser instance - */ - private Sentence createParserImpl(String sid, Class paramClass, - Object param) { - if (!hasParser(sid)) { - String msg = String.format("Parser for type '%s' not found", sid); - throw new IllegalArgumentException(msg); - } - Sentence parser = null; - try { - Class c = parsers.get(sid); - Constructor co = c - .getConstructor(paramClass); - parser = co.newInstance(param); - - } catch (NoSuchMethodException e) { - String name = paramClass.getName(); - String msg = "Constructor with %s parameter not found"; - throw new IllegalStateException(String.format(msg, name), e); - } catch (InstantiationException e) { - throw new IllegalStateException("Unable to instantiate parser", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Parser is unaccessible", e); - } catch (InvocationTargetException e) { - throw new IllegalStateException( - "Unable to invoke parser constructor", e); - } - - return parser; - } - - /** - * Returns the singleton instance of SentenceFactory. - * - * @return SentenceFactory instance - */ - public synchronized static SentenceFactory getInstance() { - if (instance == null) { - instance = new SentenceFactory(); - } - return instance; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/SentenceParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/SentenceParser.java deleted file mode 100644 index f35e0bab359..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/SentenceParser.java +++ /dev/null @@ -1,565 +0,0 @@ -/* - * SentenceParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.ArrayList; -import java.util.List; - -import net.sf.marineapi.nmea.sentence.Checksum; -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.SentenceValidator; -import net.sf.marineapi.nmea.sentence.TalkerId; - -/** - *

    - * Base sentence parser for all NMEA sentence types. Provides general services - * such as sentence validation and data field setters and getters with - * formatting. - *

    - * NMEA data is transmitted in form of ASCII Strings that are called - * sentences. Each sentence starts with a '$', a two letter - * talker ID, a three letter sentence ID, followed by a number - * of data fields separated by commas, and terminated by an - * optional checksum, and a carriage return/line feed. A sentence may - * contain up to 82 characters including the '$' and CR/LF. If data - * for a field is not available, the field is simply omitted, but the commas - * that would delimit it are still sent, with no space between them. - *

    - * Sentence structure:
    - * - * $<id>,<field #0>,<field #1>,...,<field #n>*<checksum>(CR/LF) - * - *

    - * For more details, see NMEA FAQ by Peter - * Bennett or NMEA Revealed by - * Eric S. Raymond. Java Marine API is based mostly on these documents. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class SentenceParser implements Sentence { - - // The first character which will be '$' most of the times but could be '!'. - private char beginChar; - - // The first two characters after '$'. - private TalkerId talkerId; - - // The next three characters after talker id. - private final String sentenceId; - - // actual data fields (sentence id and checksum omitted) - private List fields; - - /** - * Creates a new instance of SentenceParser. Validates the input String and - * resolves talker id and sentence type. - * - * @param nmea A valid NMEA 0183 sentence - * @throws IllegalArgumentException If the specified sentence is invalid or - * if sentence type is not supported. - */ - public SentenceParser(String nmea) { - - if (!SentenceValidator.isValid(nmea)) { - String msg = String.format("Invalid data [%s]", nmea); - throw new IllegalArgumentException(msg); - } - - beginChar = nmea.charAt(0); - talkerId = TalkerId.parse(nmea); - sentenceId = SentenceId.parseStr(nmea); - - // remove address field - int begin = nmea.indexOf(Sentence.FIELD_DELIMITER); - String temp = nmea.substring(begin + 1); - - // remove checksum - if (temp.contains(String.valueOf(CHECKSUM_DELIMITER))) { - int end = temp.indexOf(CHECKSUM_DELIMITER); - temp = temp.substring(0, end); - } - - // copy data fields to list - String[] temp2 = temp.split(String.valueOf(FIELD_DELIMITER), -1); - fields = new ArrayList(temp2.length); - for (String s : temp2) { - fields.add(s); - } - } - - /** - * Creates a new instance of SentenceParser. Parser may be constructed only - * if parameter nmea contains a valid NMEA 0183 sentence of the - * specified type. - *

    - * For example, GGA sentence parser should specify "GGA" as the type. - * - * @param nmea NMEA 0183 sentence String - * @param type Expected type of the sentence in nmea parameter - * @throws IllegalArgumentException If the specified sentence is not a valid - * or is not of expected type. - */ - public SentenceParser(String nmea, String type) { - this(nmea); - if (type == null || "".equals(type)) { - throw new IllegalArgumentException( - "Sentence type must be specified."); - } - String sid = getSentenceId(); - if (!sid.equals(type)) { - String ptrn = "Sentence id mismatch; expected [%s], found [%s]."; - String msg = String.format(ptrn, type, sid); - throw new IllegalArgumentException(msg); - } - } - - /** - * Creates a new empty sentence with specified begin character, talker and - * sentence IDs. - * - * @param begin The begin character, e.g. '$' or '!' - * @param talker Talker type Id, e.g. "GP" or "LC". - * @param type Sentence type Id, e.g. "GGA or "GLL". - * @param size Number of data fields - */ - protected SentenceParser(char begin, TalkerId talker, String type, int size) { - if (size < 1) { - throw new IllegalArgumentException("Minimum number of fields is 1"); - } - if (talker == null) { - throw new IllegalArgumentException("Talker ID must be specified"); - } - if (type == null || "".equals(type)) { - throw new IllegalArgumentException("Sentence ID must be specified"); - } - - beginChar = begin; - talkerId = talker; - sentenceId = type; - fields = new ArrayList(size); - for (int i = 0; i < size; i++) { - fields.add(""); - } - } - - /** - * Creates a new empty sentence with specified talker and sentence IDs. - * - * @param talker Talker type Id, e.g. "GP" or "LC". - * @param type Sentence type Id, e.g. "GGA or "GLL". - * @param size Number of data fields - */ - protected SentenceParser(TalkerId talker, String type, int size) { - this(Sentence.BEGIN_CHAR, talker, type, size); - } - - /** - * Creates a new instance of SentenceParser with specified sentence data. - * Type of the sentence is checked against the specified expected sentence - * type id. - * - * @param nmea Sentence String - * @param type Sentence type enum - */ - SentenceParser(String nmea, SentenceId type) { - this(nmea, type.toString()); - } - - /** - * Creates a new instance of SentenceParser without any data. - * - * @param tid Talker id to set in sentence - * @param sid Sentence id to set in sentence - * @param size Number of data fields following the sentence id field - */ - public SentenceParser(TalkerId tid, SentenceId sid, int size) { - this(tid, sid.toString(), size); - } - - /* - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (obj instanceof SentenceParser) { - SentenceParser sp = (SentenceParser) obj; - return sp.toString().equals(toString()); - } - return false; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.Sentence#getFieldCount() - */ - public final int getFieldCount() { - return fields.size(); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.Sentence#getBeginChar() - */ - public final char getBeginChar() { - return beginChar; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.Sentence#getSentenceId() - */ - public final String getSentenceId() { - return sentenceId; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.Sentence#getTalkerId() - */ - public final TalkerId getTalkerId() { - return talkerId; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return toString().hashCode(); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.Sentence#isProprietary() - */ - public boolean isProprietary() { - return TalkerId.P.equals(getTalkerId()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.Sentence#isValid() - */ - public boolean isValid() { - return SentenceValidator.isValid(toString()); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.Sentence#setTalkerId(net.sf.marineapi. - * nmea.util.TalkerId) - */ - public final void setTalkerId(TalkerId id) { - this.talkerId = id; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.Sentence#toSentence() - */ - public final String toSentence() { - if (!isValid()) { - String msg = String.format("Invalid result [%s]", toString()); - throw new IllegalStateException(msg); - } - return toString(); - } - - /** - * Returns the String representation of the sentence (without line - * terminator CR/LR). Checksum is calculated and appended at the end of the - * sentence, but no validation is done. Use {@link #toSentence()} to also - * validate the result. - * - * @return String representation of sentence - */ - @Override - public String toString() { - - StringBuilder sb = new StringBuilder(MAX_LENGTH); - sb.append(beginChar); - sb.append(talkerId.toString()); - sb.append(sentenceId); - - for (String field : fields) { - sb.append(FIELD_DELIMITER); - sb.append(field); - } - - String sentence = Checksum.add(sb.toString()); - - return sentence; - } - - /** - * Parse a single character from the specified sentence field. - * - * @param index Data field index in sentence - * @return Character contained in the field - * @throws net.sf.marineapi.parser.ParseException If field contains more - * than one character - */ - public final char getCharValue(int index) { - String val = getStringValue(index); - if (val.length() > 1) { - String msg = String.format("Expected char, found String [%s]", val); - throw new ParseException(msg); - } - return val.charAt(0); - } - - /** - * Parse double value from the specified sentence field. - * - * @param index Data field index in sentence - * @return Field as parsed by {@link java.lang.Double#parseDouble(String)} - */ - public final double getDoubleValue(int index) { - double value; - try { - value = Double.parseDouble(getStringValue(index)); - } catch (NumberFormatException ex) { - throw new ParseException("Field does not contain double value", ex); - } - return value; - } - - /** - * Parse integer value from the specified sentence field. - * - * @param index Field index in sentence - * @return Field parsed by {@link java.lang.Integer#parseInt(String)} - */ - public final int getIntValue(int index) { - int value; - try { - value = Integer.parseInt(getStringValue(index)); - } catch (NumberFormatException ex) { - throw new ParseException("Field does not contain integer value", ex); - } - return value; - } - - /** - * Get contents of a data field as a String. Field indexing is zero-based. - * The address field (e.g. $GPGGA) and checksum at the end are - * not considered as a data fields and cannot therefore be fetched with this - * method. - *

    - * Field indexing, let i = 1:
    - * $<id>,<i>,<i+1>,<i+2>,...,<i+n>*<checksum> - * - * @param index Field index - * @return Field value as String - * @throws net.sf.marineapi.parser.DataNotAvailableException If the field is - * empty - */ - public final String getStringValue(int index) { - String value = fields.get(index); - if (value == null || "".equals(value)) { - throw new DataNotAvailableException("Data not available"); - } - return value; - } - - /** - * Tells is if the field specified by the given index contains a value. - * - * @param index Field index - * @return True if field contains value, otherwise false. - */ - public final boolean hasValue(int index) { - boolean result = true; - try { - getStringValue(index); - } catch (Exception e) { - result = false; - } - return result; - } - - /** - * Set a character in specified field. - * - * @param index Field index - * @param value Value to set - */ - protected final void setCharValue(int index, char value) { - setStringValue(index, String.valueOf(value)); - } - - /** - * Set degrees value, e.g. course or heading. - * - * @param index Field index where to insert value - * @param deg The degrees value to set - * @throws IllegalArgumentException If degrees value out of range [0..360] - */ - protected final void setDegreesValue(int index, double deg) { - if (deg < 0 || deg > 360) { - throw new IllegalArgumentException("Value out of bounds [0..360]"); - } - setDoubleValue(index, deg, 3, 1); - } - - /** - * Set double value in specified field. Value is set "as-is" without any - * formatting or rounding. - * - * @param index Field index - * @param value Value to set - * @see #setDoubleValue(int, double, int, int) - */ - public final void setDoubleValue(int index, double value) { - setStringValue(index, String.valueOf(value)); - } - - /** - * Set double value in specified field, with given number of digits before - * and after the decimal separator ('.'). When necessary, the value is - * padded with leading zeros and/or rounded to meet the requested number of - * digits. - * - * @param index Field index - * @param value Value to set - * @param leading Number of digits before decimal separator - * @param decimals Maximum number of digits after decimal separator - * @see #setDoubleValue(int, double) - */ - public final void setDoubleValue(int index, double value, int leading, - int decimals) { - - StringBuilder pattern = new StringBuilder(); - for (int i = 0; i < leading; i++) { - pattern.append('0'); - } - if (decimals > 0) { - pattern.append('.'); - for (int i = 0; i < decimals; i++) { - pattern.append('0'); - } - } - if (pattern.length() == 0) { - pattern.append('0'); - } - - DecimalFormat nf = new DecimalFormat(pattern.toString()); - DecimalFormatSymbols dfs = new DecimalFormatSymbols(); - dfs.setDecimalSeparator('.'); - nf.setDecimalFormatSymbols(dfs); - - setStringValue(index, nf.format(value)); - } - - /** - * Set integer value in specified field. - * - * @param index Field index - * @param value Value to set - */ - public final void setIntValue(int index, int value) { - setStringValue(index, String.valueOf(value)); - } - - /** - * Set integer value in specified field, with specified minimum number of - * digits. Leading zeros are added to value if when necessary. - * - * @param index Field index - * @param value Value to set - * @param leading Number of digits to use. - */ - public final void setIntValue(int index, int value, int leading) { - String pattern = "%d"; - if (leading > 0) { - pattern = "%0" + leading + "d"; - } - setStringValue(index, String.format(pattern, value)); - } - - /** - * Set String value in specified data field. - * - * @param index Field index - * @param value String to set, null converts to empty String. - */ - public final void setStringValue(int index, String value) { - fields.set(index, value == null ? "" : value); - } - - /** - * Replace multiple fields with given String array, starting at the - * specified index. If parameter first is zero, all sentence - * fields are replaced. - *

    - * If the length of newFields does not fit in the sentence - * field count or it contains less values, fields are removed or added - * accordingly. As the result, total number of fields may increase or - * decrease. Thus, if the sentence field count must not change, you may need - * to add empty Strings to newFields in order to preserve the - * original number of fields. Also, all existing values after - * first are lost. - * - * @param first Index of first field to set - * @param newFields Array of Strings to set - */ - public final void setStringValues(int first, String[] newFields) { - - List temp = new ArrayList(); - for (int i = 0; i < getFieldCount(); i++) { - if (i < first) { - temp.add(fields.get(i)); - } else { - break; - } - } - - for (String field : newFields) { - temp.add(field == null ? "" : field); - } - - fields.clear(); - fields = temp; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.Sentence#setBeginChar(char) - */ - public void setBeginChar(char ch) { - if (ch != BEGIN_CHAR || ch != ALTERNATIVE_BEGIN_CHAR) { - String msg = "Invalid begin char; expected '$' or '!'"; - throw new IllegalArgumentException(msg); - } - beginChar = ch; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/VHWParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/VHWParser.java deleted file mode 100644 index 85386c67fb8..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/VHWParser.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * VHWParser.java - * Copyright (C) 2011 Warren Zahra - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.sentence.VHWSentence; - -/** - * WHV sentence parser. - * - * @author Warren Zahra, Kimmo Tuukkanen - * @version $Revision$ - */ -public class VHWParser extends SentenceParser implements VHWSentence { - - private static final int TRUE_HEADING = 0; - private static final int TRUE_INDICATOR = 1; - private static final int MAGNETIC_HEADING = 2; - private static final int MAGNETIC_INDICATOR = 3; - private static final int SPEED_KNOTS = 4; - private static final int KNOTS_INDICATOR = 5; - private static final int SPEED_KMH = 6; - private static final int KMH_INDICATOR = 7; - - /** - * Creates a new instance of VHW parser with given data. - * - * @param nmea VHW sentence String - */ - public VHWParser(String nmea) { - super(nmea); - } - - /** - * Creates a new empty VHW parser instance. - * - * @param talker Talker ID to set - */ - public VHWParser(TalkerId talker) { - super(talker, SentenceId.VHW, 8); - setCharValue(TRUE_INDICATOR, 'T'); - setCharValue(MAGNETIC_INDICATOR, 'M'); - setCharValue(KNOTS_INDICATOR, 'N'); - setCharValue(KMH_INDICATOR, 'K'); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HeadingSentence#getHeading() - */ - public double getHeading() { - return getDoubleValue(TRUE_HEADING); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VHWSentence#getMagneticHeading() - */ - public double getMagneticHeading() { - return getDoubleValue(MAGNETIC_HEADING); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VHWSentence#getSpeedKilometres() - */ - public double getSpeedKmh() { - return getDoubleValue(SPEED_KMH); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VHWSentence#getSpeedKnots() - */ - public double getSpeedKnots() { - return getDoubleValue(SPEED_KNOTS); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HeadingSentence#isTrue() - */ - public boolean isTrue() { - return true; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.HeadingSentence#setHeading(double) - */ - public void setHeading(double hdg) { - setDegreesValue(TRUE_HEADING, hdg); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.VHWSentence#setMagneticHeading(double) - */ - public void setMagneticHeading(double hdg) { - setDegreesValue(MAGNETIC_HEADING, hdg); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VHWSentence#setSpeedKmh(double) - */ - public void setSpeedKmh(double kmh) { - setDoubleValue(SPEED_KMH, kmh, 1, 1); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VHWSentence#setSpeedKnots(double) - */ - public void setSpeedKnots(double knots) { - setDoubleValue(SPEED_KNOTS, knots, 1, 1); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/VTGParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/VTGParser.java deleted file mode 100644 index 425509ebe10..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/VTGParser.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * VTGParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.sentence.VTGSentence; -import net.sf.marineapi.nmea.util.FaaMode; - -/** - * VTG sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class VTGParser extends SentenceParser implements VTGSentence { - - private static final int TRUE_COURSE = 0; - private static final int TRUE_INDICATOR = 1; - private static final int MAGNETIC_COURSE = 2; - private static final int MAGNETIC_INDICATOR = 3; - private static final int SPEED_KNOTS = 4; - private static final int KNOTS_INDICATOR = 5; - private static final int SPEED_KMPH = 6; - private static final int KMPH_INDICATOR = 7; - private static final int MODE = 8; - - /** - * Creates a new instance of VTGParser. - * - * @param nmea VTG sentence String - * @throws IllegalArgumentException If specified sentence is invalid - */ - public VTGParser(String nmea) { - super(nmea, SentenceId.VTG); - } - - /** - * Creates VTG parser with empty sentence. - * - * @param talker TalkerId to set - */ - public VTGParser(TalkerId talker) { - super(talker, SentenceId.VTG, 9); - setCharValue(TRUE_INDICATOR, VTGSentence.TRUE); - setCharValue(MAGNETIC_INDICATOR, VTGSentence.MAGNETIC); - setCharValue(KNOTS_INDICATOR, VTGSentence.KNOT); - setCharValue(KMPH_INDICATOR, VTGSentence.KMPH); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#getMagneticCourse() - */ - public double getMagneticCourse() { - return getDoubleValue(MAGNETIC_COURSE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#getMode() - */ - public FaaMode getMode() { - return FaaMode.valueOf(getCharValue(MODE)); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#getSpeedKmh() - */ - public double getSpeedKmh() { - return getDoubleValue(SPEED_KMPH); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#getSpeedKnots() - */ - public double getSpeedKnots() { - return getDoubleValue(SPEED_KNOTS); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#getTrueCourse() - */ - public double getTrueCourse() { - return getDoubleValue(TRUE_COURSE); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#setMagneticCourse(double) - */ - public void setMagneticCourse(double mcog) { - setDegreesValue(MAGNETIC_COURSE, mcog); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.VTGSentence#setMode(net.sf.marineapi.nmea - * .util.FaaMode) - */ - public void setMode(FaaMode mode) { - setCharValue(MODE, mode.toChar()); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#setSpeedKmh(double) - */ - public void setSpeedKmh(double kmh) { - if (kmh < 0) { - throw new IllegalArgumentException("Speed cannot be negative"); - } - setDoubleValue(SPEED_KMPH, kmh, 1, 2); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#setSpeedKnots(double) - */ - public void setSpeedKnots(double knots) { - if (knots < 0) { - throw new IllegalArgumentException("Speed cannot be negative"); - } - setDoubleValue(SPEED_KNOTS, knots, 1, 2); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.VTGSentence#setTrueCourse(double) - */ - public void setTrueCourse(double tcog) { - setDegreesValue(TRUE_COURSE, tcog); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/WPLParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/WPLParser.java deleted file mode 100644 index 4acd7d2451e..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/WPLParser.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * WPLParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.sentence.WPLSentence; -import net.sf.marineapi.nmea.util.CompassPoint; -import net.sf.marineapi.nmea.util.Waypoint; - -/** - * WPL sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class WPLParser extends PositionParser implements WPLSentence { - - // field ids - private static final int LATITUDE = 0; - private static final int LAT_HEMISPHERE = 1; - private static final int LONGITUDE = 2; - private static final int LON_HEMISPHERE = 3; - private static final int WAYPOINT_ID = 4; - - /** - * Creates a new instance of WPLParser. - * - * @param nmea WPL sentence String. - * @throws IllegalArgumentException If specified sentence is invalid. - */ - public WPLParser(String nmea) { - super(nmea, SentenceId.WPL); - } - - /** - * Creates WPL parser with empty sentence. - * - * @param talker TalkerId to set - */ - public WPLParser(TalkerId talker) { - super(talker, SentenceId.WPL, 5); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.WPLSentence#getWaypoint() - */ - public Waypoint getWaypoint() { - String id = getStringValue(WAYPOINT_ID); - double lat = parseLatitude(LATITUDE); - double lon = parseLongitude(LONGITUDE); - CompassPoint lath = parseHemisphereLat(LAT_HEMISPHERE); - CompassPoint lonh = parseHemisphereLon(LON_HEMISPHERE); - return new Waypoint(id, lat, lath, lon, lonh); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.WPLSentence#setWaypoint(net.sf.marineapi - * .nmea.util.Waypoint) - */ - public void setWaypoint(Waypoint wp) { - setStringValue(WAYPOINT_ID, wp.getId()); - setLatitude(LATITUDE, wp.getLatitude()); - setLongitude(LONGITUDE, wp.getLongitude()); - setLatHemisphere(LAT_HEMISPHERE, wp.getLatHemisphere()); - setLonHemisphere(LON_HEMISPHERE, wp.getLonHemisphere()); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/ZDAParser.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/ZDAParser.java deleted file mode 100644 index 7a5c086456f..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/ZDAParser.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * ZDAParser.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.parser; - -import java.util.Calendar; -import java.util.GregorianCalendar; - -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.sentence.TalkerId; -import net.sf.marineapi.nmea.sentence.ZDASentence; -import net.sf.marineapi.nmea.util.Date; -import net.sf.marineapi.nmea.util.Time; - -/** - * ZDA sentence parser. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class ZDAParser extends SentenceParser implements ZDASentence { - - // field indices - private static final int UTC_TIME = 0; - private static final int DAY = 1; - private static final int MONTH = 2; - private static final int YEAR = 3; - private static final int LOCAL_ZONE_HOURS = 4; - private static final int LOCAL_ZONE_MINUTES = 5; - - /** - * Creates a new instance of ZDAParser. - * - * @param nmea ZDA sentence String - * @throws IllegalArgumentException If specified sentence is invalid. - */ - public ZDAParser(String nmea) { - super(nmea, SentenceId.ZDA); - } - - /** - * Creates WPL parser with empty sentence. - * - * @param talker TalkerId to set - */ - public ZDAParser(TalkerId talker) { - super(talker, SentenceId.ZDA, 6); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.DateSentence#getDate() - */ - public Date getDate() { - int y = getIntValue(YEAR); - int m = getIntValue(MONTH); - int d = getIntValue(DAY); - return new Date(y, m, d); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.ZDASentence#getLocalZoneHours() - */ - public int getLocalZoneHours() { - return getIntValue(LOCAL_ZONE_HOURS); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.ZDASentence#getLocalZoneMinutes() - */ - public int getLocalZoneMinutes() { - return getIntValue(LOCAL_ZONE_MINUTES); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.TimeSentence#getTime() - */ - public Time getTime() { - String str = getStringValue(UTC_TIME); - int h = Integer.parseInt(str.substring(0, 2)); - int m = Integer.parseInt(str.substring(2, 4)); - double s = Double.parseDouble(str.substring(4, 6)); - return new Time(h, m, s); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.DateSentence#setDate(net.sf.marineapi. - * nmea.util.Date) - */ - public void setDate(Date date) { - setIntValue(YEAR, date.getYear()); - setIntValue(MONTH, date.getMonth(), 2); - setIntValue(DAY, date.getDay(), 2); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.ZDASentence#setLocalZoneHours(int) - */ - public void setLocalZoneHours(int hours) { - if (hours < -13 || hours > 13) { - throw new IllegalArgumentException( - "Value must be within range -13..13"); - } - setIntValue(LOCAL_ZONE_HOURS, hours, 2); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.ZDASentence#setLocalZoneMinutes() - */ - public void setLocalZoneMinutes(int minutes) { - if (minutes < -59 || minutes > 59) { - throw new IllegalArgumentException( - "Value must be within range -59..59"); - } - setIntValue(LOCAL_ZONE_MINUTES, minutes, 2); - } - - /* - * (non-Javadoc) - * @see - * net.sf.marineapi.nmea.sentence.TimeSentence#setTime(net.sf.marineapi. - * nmea.util.Time) - */ - public void setTime(Time t) { - int h = t.getHour(); - int m = t.getMinutes(); - int s = (int) Math.floor(t.getSeconds()); - String time = String.format("%02d%02d%02d", h, m, s); - setStringValue(UTC_TIME, time); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.sentence.ZDASentence#toDate() - */ - public java.util.Date toDate() { - Date d = getDate(); - Time t = getTime(); - - GregorianCalendar cal = new GregorianCalendar(); - cal.set(Calendar.YEAR, d.getYear()); - cal.set(Calendar.MONTH, d.getMonth()); - cal.set(Calendar.DAY_OF_MONTH, d.getDay()); - cal.set(Calendar.HOUR_OF_DAY, t.getHour()); - cal.set(Calendar.MINUTE, t.getMinutes()); - cal.set(Calendar.SECOND, (int) Math.floor(t.getSeconds())); - cal.set(Calendar.MILLISECOND, 0); // precision is 1s - - return cal.getTime(); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/package.html b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/package.html deleted file mode 100644 index 3313f6f66ae..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/parser/package.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - package net.sf.marineapi.nmea.parser - - - - -

    -Contains parser base classes, parser implementations and parser factory for -supported NMEA 0183 sentences. Notice that parsers, excluding the base class, -are private and accessed only through sentence factory and interfaces. Custom -parsers may be implemented by extending the base parser and registering it in -the factory. - - - diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/BATSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/BATSentence.java deleted file mode 100755 index 50653a49f4e..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/BATSentence.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * MWVSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - - -/** - * BAT sentence. Used for the proprietary NMEA extension of the SailTimer WindVane's battery indicator message. - * The format of the sentence is:

    - * 
    - * $WIBAT,a,b*hh
    - * 
    - * 1) Wind Vane Battery (‘0’= Low, ‘1’= Good)
    - * 2) Base Unit battery level (‘0’ = Low, ‘9’ = Good)
    - * 3) Checksum
    - * 
    - */ -public interface BATSentence extends Sentence { - public static enum WindVaneBatteryStatus { - LOW(0), GOOD(1); - - private final int value; - - private WindVaneBatteryStatus(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - } - - WindVaneBatteryStatus getWindVaneBatteryStatus(); - - void setWindVaneBatteryStatus(WindVaneBatteryStatus status); - - /** - * Battery status is reported as value ranve 0..9 where 0 means "Low" and 9 means "Good." - */ - int getBaseUnitBatteryLevel(); - - void setBaseUnitBatteryLevel(int level); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/BODSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/BODSentence.java deleted file mode 100644 index 578fae610ef..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/BODSentence.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * BODSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * True and magnetic bearing from origin to destination in degrees. This - * sentence is transmitted by a GPS in the GOTO mode (with or without active - * route). - *

    - * Example:
    - * $GPBOD,234.9,T,228.8,M,RUSKI,*1D - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface BODSentence extends Sentence { - - /** - * Get the ID of destination waypoint. This field should be always available - * in GOTO mode. - * - * @return waypoint id - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - String getDestinationWaypointId(); - - /** - * Get the magnetic bearing from origin to destination. - *

    - * Notice: The bearing is calculated from the origin when GOTO is - * activated and it is not updated dynamically. - * - * @return magnetic bearing value - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getMagneticBearing(); - - /** - * Get the ID of origin waypoint. This field is available only when route is - * active. - * - * @return waypoint id - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - String getOriginWaypointId(); - - /** - * Get the true bearing from origin to destination. - *

    - * Notice: Typically the bearing is calculated when GOTO mode is - * activated and it is not updated dynamically. - * - * @return True bearing - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getTrueBearing(); - - /** - * Sets the destination waypoint ID. - * - * @param id ID to set - */ - void setDestinationWaypointId(String id); - - /** - * Sets the true bearing from origin to destination, in degrees. - * - * @param bearing Bearing value - * @throws IllegalArgumentException If bearing value out range 0..360 - * degrees. - */ - void setMagneticBearing(double bearing); - - /** - * Sets the ID of origin waypoint. - * - * @param id ID to set. - */ - void setOriginWaypointId(String id); - - /** - * Sets the true bearing from origin to destination, in degrees. - * - * @param bearing Bearing value - * @throws IllegalArgumentException If bearing value out range 0..360 - * degrees. - */ - void setTrueBearing(double bearing); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/Checksum.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/Checksum.java deleted file mode 100644 index e492c967381..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/Checksum.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Checksum.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Provides Sentence checksum calculation and utilities. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public final class Checksum { - - private Checksum() { - } - - /** - * Calculates and adds a checksum to specified sentence String. Existing - * checksum will be replaced with the new one. - *

    - * For example,
    - * $GPGLL,6011.552,N,02501.941,E,120045,A
    - * results in
    - * $GPGLL,6011.552,N,02501.941,E,120045,A*26 - *

    - * $GPGLL,6011.552,N,02501.941,E,120045,A*00
    - * results in
    - * $GPGLL,6011.552,N,02501.941,E,120045,A*26 - * - * @param sentence Sentence in String representation - * @return The specified String with checksum added. - */ - public static String add(String sentence) { - - String str = sentence; - - int i = str.indexOf(Sentence.CHECKSUM_DELIMITER); - if (i != -1) { - str = str.substring(0, i); - } - - return str + Sentence.CHECKSUM_DELIMITER + calculate(str); - } - - /** - * Calculates the checksum of sentence String. Checksum is a XOR of each - * character between, but not including, the $ and * characters. The - * resulting hex value is returned as a String in two digit format, padded - * with a leading zero if necessary. The method will calculate the checksum - * for any given String and the sentence validity is not checked. - * - * @param nmea NMEA Sentence with or without checksum. - * @return Checksum hex value, padded with leading zero if necessary. - */ - public static String calculate(String nmea) { - char ch; - int sum = 0; - for (int i = 0; i < nmea.length(); i++) { - ch = nmea.charAt(i); - if (i == 0 && (ch == Sentence.BEGIN_CHAR || ch == Sentence.ALTERNATIVE_BEGIN_CHAR)) { - continue; - } else if (ch == Sentence.CHECKSUM_DELIMITER) { - break; - } else if (sum == 0) { - sum = (byte) ch; - } else { - sum ^= (byte) ch; - } - } - return String.format("%02X", sum); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DBTSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DBTSentence.java deleted file mode 100644 index d226386a03c..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DBTSentence.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * DBTSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Water depth below transducer, in meters, feet and fathoms. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface DBTSentence extends DepthSentence { - - /** - * Get depth in fathoms. - * - * @return Depth value - */ - double getFathoms(); - - /** - * Get depth in feet. - * - * @return Depth value - */ - double getFeet(); - - /** - * Set depth value, in fathoms. - * - * @param depth Depth to set - */ - void setFathoms(double depth); - - /** - * Set depth value, in feet. - * - * @param depth Depth to set - */ - void setFeet(double depth); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DPTSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DPTSentence.java deleted file mode 100644 index 6d0b8980838..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DPTSentence.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * DPTSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Depth of water, measured in meters. Includes offset to transducer, positive - * values for distance from transducer to water line and negative values for - * distance from transducer to keel. The maximum value is included since NMEA - * v3.0, and may thus be missing. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface DPTSentence extends DepthSentence { - - /** - * Get offset to transducer. - * - * @return Offset in meters. - */ - double getOffset(); - - /** - * Set offset to transducer. - * - * @param offset Offset in meters - */ - void setOffset(double offset); - - /** - * Get maximum depth value the sounder can detect. - * - * @return Maximum depth, in meters. - */ - int getMaximum(); - - /** - * Get maximum depth value the sounder can detect. - * - * @param max Maximum depth, in meters. - */ - void setMaximum(int max); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DateSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DateSentence.java deleted file mode 100644 index 134280caa20..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DateSentence.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * DateSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.Date; - -/** - * Sentences that contains date information. Notice that some sentences may - * contain only time without the date. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.TimeSentence - */ -public interface DateSentence extends Sentence { - - /** - * Parses the date information from sentence fields and returns a - * {@link Date}. - * - * @return Date object - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - Date getDate(); - - /** - * Set date. Depending on the sentence type, the values may be inserted to - * multiple fields or combined into one. Four-digit year value may also be - * reduced into two-digit format. - * - * @param date {@link Date} - */ - void setDate(Date date); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DepthSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DepthSentence.java deleted file mode 100644 index 7ec00883156..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/DepthSentence.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * DepthSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Interface for sentences containing the depth of water. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface DepthSentence extends Sentence { - - /** - * Get depth of water, in meters. - * - * @return Depth value - */ - double getDepth(); - - /** - * Set depth of water, in meters. - * - * @param depth Depth value - */ - void setDepth(double depth); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GGASentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GGASentence.java deleted file mode 100644 index 01ed4e7ea51..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GGASentence.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * GGASentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.GpsFixQuality; -import net.sf.marineapi.nmea.util.Units; - -/** - * Global Positioning System fix data. Current position, time and other fix - * related data for a GPS receiver. - *

    - * Example:
    - * $GPGGA,120044,6011.552,N,02501.941,E,1,00,2.0,28.0,M,19.6,M,,*79 - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface GGASentence extends PositionSentence, TimeSentence { - - /** - * Altitude presented in meters. - */ - char ALT_UNIT_METERS = 'M'; - - /** - * Altitude presented in feet. - */ - char ALT_UNIT_FEET = 'f'; - - /** - * Get antenna altitude above mean sea level. - * - * @return Altitude value - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getAltitude(); - - /** - * Gets the altitude units, meters or feet. - * - * @return Units enum - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - Units getAltitudeUnits(); - - /** - * Gets the age of differential GPS data (DGPS). - * - * @return Seconds since last valid RTCM transmission - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getDgpsAge(); - - /** - * Gets the ID of DGPS station. - * - * @return Station ID (0000-1024) - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - String getDgpsStationId(); - - /** - * Get the GPS fix quality. - * - * @return GpsFixQuality enum - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - GpsFixQuality getFixQuality(); - - /** - * Get height/separation of geoid above WGS84 ellipsoid, i.e. difference - * between WGS-84 earth ellipsoid and mean sea level. Negative values are - * below WGS-84 ellipsoid. - * - * @return Height value - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getGeoidalHeight(); - - /** - * Get units of height above geoid. - * - * @return Units of geoidal height value - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - Units getGeoidalHeightUnits(); - - /** - * Get the horizontal dilution of precision (HDOP), i.e. the relative - * accuracy of horizontal position. - * - * @return Horizontal dilution - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getHorizontalDOP(); - - /** - * Get the number of active satellites in use. - * - * @return Number of satellites - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - int getSatelliteCount(); - - /** - * Set the antenna altitude. - * - * @param alt Altitude to set - */ - void setAltitude(double alt); - - /** - * Sets the unit of altitude. - * - * @param unit Units to set - */ - void setAltitudeUnits(Units unit); - - /** - * Sets the age of differential GPS data (DGPS). - * - * @param age Seconds since last valid RTCM transmission to set. - */ - void setDgpsAge(double age); - - /** - * Sets the ID of DGPS station. - * - * @param id Station ID to set - */ - void setDgpsStationId(String id); - - /** - * Sets the GPS fix quality. - * - * @param quality Fix quality to set - */ - void setFixQuality(GpsFixQuality quality); - - /** - * Set height/separation of geoid above WGS84 ellipsoid, i.e. difference - * between WGS-84 earth ellipsoid and mean sea level. Negative values are - * below WGS-84 ellipsoid. - * - * @param height Height value to set - */ - void setGeoidalHeight(double height); - - /** - * Get unit of height above geoid. - * - * @param unit Unit to set - */ - void setGeoidalHeightUnits(Units unit); - - /** - * Set the horizontal dilution of precision (HDOP), i.e. the relative - * accuracy of horizontal position. - * - * @param hdop Horizontal dilution - */ - void setHorizontalDOP(double hdop); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GLLSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GLLSentence.java deleted file mode 100644 index fca9b0db973..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GLLSentence.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * GLLSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.DataStatus; - -/** - * Current geographic position and time. - *

    - * Example:
    - * $GPGLL,6011.552,N,02501.941,E,120045,A*26 - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface GLLSentence extends PositionSentence, TimeSentence { - - /** - * Get the data quality status, valid or invalid. - * - * @return {@link DataStatus#ACTIVE} or {@link DataStatus#VOID} - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - DataStatus getStatus(); - - /** - * Set the data quality status, valid or invalid. - * - * @param status DataStatus to set - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - void setStatus(DataStatus status); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GSASentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GSASentence.java deleted file mode 100644 index 2ce122d641a..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GSASentence.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * GSASentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.FaaMode; -import net.sf.marineapi.nmea.util.GpsFixStatus; - -/** - * Precision of GPS fix and list of active satellites. Dilution of precision - * (DOP) is an indication of the effect of satellite geometry on the accuracy of - * the fix. It is a unitless number where smaller is better. - *

    - * Example:
    - * $GPGSA,A,3,02,,,07,,09,24,26,,,,,1.6,1.6,1.0*3D - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface GSASentence extends Sentence { - - /** - * Get the GPS fix mode; 2D, 3D or no fix. - * - * @return GpsFixStatus enum - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - GpsFixStatus getFixStatus(); - - /** - * Get the horizontal dilution Of precision (HDOP). - * - * @return double - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getHorizontalDOP(); - - /** - * Get the FAA operation mode of GPS. - * - * @return FaaMode enum - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - FaaMode getMode(); - - /** - * Get the dilution of precision (PDOP) for position. - * - * @return double - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getPositionDOP(); - - /** - * Get list of satellites used for acquiring the GPS fix. - * - * @return String array containing satellite IDs. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - String[] getSatellitesIds(); - - /** - * Get the vertical dilution of precision (VDOP). - * - * @return double - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getVerticalDOP(); - - /** - * Set the GPS fix mode; 2D, 3D or no fix. - * - * @param status Status to set - */ - void setFixStatus(GpsFixStatus status); - - /** - * Set the horizontal dilution of precision (HDOP). - * - * @param hdop Precision value to set - */ - void setHorizontalDOP(double hdop); - - /** - * Set the FAA operation mode of GPS. - * - * @param mode Mode to set - */ - void setMode(FaaMode mode); - - /** - * Set the dilution of precision for position. - * - * @param pdop Precision value to set - */ - void setPositionDOP(double pdop); - - /** - * Set list of satellites used for acquiring the GPS fix. - * - * @param ids List of satellite IDs, maximum length of array is 12. - */ - void setSatelliteIds(String[] ids); - - /** - * Set the vertical dilution of precision (VDOP). - * - * @param vdop Precision value to set - */ - void setVerticalDOP(double vdop); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GSVSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GSVSentence.java deleted file mode 100644 index cb9096c53e6..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/GSVSentence.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * GSVSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import java.util.List; - -import net.sf.marineapi.nmea.util.SatelliteInfo; - -/** - * Detailed GPS satellite data; satellites in view, satellite elevation, azimuth - * and signal noise ratio (SNR). GSV sentences are transmitted typically in - * groups of two or three sentences, depending on the number of satellites in - * view. Each GSV sentence may contain information about up to four satellites. - * The last sentence in sequence may contain empty satellite information fields. - * The empty fields may also be omitted, depending on the device model and - * manufacturer. - *

    - * Example:
    - * $GPGSV,3,2,12,15,56,182,51,17,38,163,47,18,63,058,50,21,53,329,47*73 - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface GSVSentence extends Sentence { - - /** - * Get the number of satellites in view. - * - * @return Satellite count - */ - int getSatelliteCount(); - - /** - * Get the satellites information. - * - * @return List of SatelliteInfo objects. - */ - List getSatelliteInfo(); - - /** - * Get the total number of sentences in GSV sequence. - * - * @return Number of sentences - */ - int getSentenceCount(); - - /** - * Get the index of this sentence in GSV sequence. - * - * @return Sentence index - */ - int getSentenceIndex(); - - /** - * Tells if this is the first sentence in GSV sequence. - * - * @return true if first, otherwise false. - * @see #getSentenceCount() - * @see #getSentenceIndex() - */ - boolean isFirst(); - - /** - * Tells if this is the last sentence in GSV sequence. This is a convenience - * method for comparison of - * ({@link #getSentenceCount()} == {@link #getSentenceIndex()}) - * . - * - * @return true if first, otherwise false. - */ - boolean isLast(); - - /** - * Set the number of satellites in view. - * - * @param count Satellite count - * @throws IllegalArgumentException If specified number is negative - */ - void setSatelliteCount(int count); - - /** - * Set the satellite information. - * - * @param info List of SatelliteInfo objects, size from 0 to 4. - * @throws IllegalArgumentException If specified list size is greater that - * maximum allowed number of satellites per sentence (4). - */ - void setSatelliteInfo(List info); - - /** - * Set the total number of sentences in GSV sequence. - * - * @param count Number of sentences - * @throws IllegalArgumentException If specified count is negative - */ - void setSentenceCount(int count); - - /** - * Set the index of this sentence in GSV sequence. - * - * @param index Sentence index to set - * @throws IllegalArgumentException If specified index is negative - */ - void setSentenceIndex(int index); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDGSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDGSentence.java deleted file mode 100644 index 3b14a99e7ea..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDGSentence.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * HDGSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Vessel heading with magnetic deviation and variation. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface HDGSentence extends HeadingSentence { - - /** - * Get magnetic deviation. - * - * @return Deviation, in degrees. - */ - double getDeviation(); - - /** - * Get magnetic variation. Returns negative values for easterly variation - * and positive for westerly. - * - * @return Variation, in degrees. - */ - double getVariation(); - - /** - * Set magnetic deviation. Provide negative values to set easterly deviation - * and positive to set westerly. Sets also the correct direction indicator - * according to value (East/West). - * - * @param deviation Deviation, in degrees. - * @throws IllegalArgumentException If value is out of range [-180..180]. - */ - void setDeviation(double deviation); - - /** - * Set magnetic variation. Provide negative values to set easterly variation - * and positive to set westerly. Sets also the correct direction indicator - * according to value (East/West). - * - * @param variation Variation, in degrees. - * @throws IllegalArgumentException If value is out of range [-180..180]. - */ - void setVariation(double variation); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDMSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDMSentence.java deleted file mode 100644 index cf91d19399c..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDMSentence.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * HDMSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Vessel heading in degrees with respect to magnetic north. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface HDMSentence extends HeadingSentence { -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDTSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDTSentence.java deleted file mode 100644 index 9e3edabfa5c..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HDTSentence.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * HDTSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Actual vessel heading in degrees true produced by any device or system - * producing true heading. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface HDTSentence extends HeadingSentence { -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HeadingSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HeadingSentence.java deleted file mode 100644 index fcbb2023d65..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/HeadingSentence.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * HeadingSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Interface for sentences that provide vessel's true or magnetic heading. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface HeadingSentence extends Sentence { - - /** - * Returns the vessel's current heading. - * - * @return Heading in degrees. - * @see #isTrue() - */ - double getHeading(); - - /** - * Tells if the heading returned and set by {@link #getHeading()} and - * {@link #setHeading(double)} methods is true or magnetic - * . - * - * @return true if true heading, otherwise false - * for magnetic heading. - */ - boolean isTrue(); - - /** - * Sets the heading value. - * - * @param hdt Heading in degrees - * @see #isTrue() - * @throws IllegalArgumentException If heading value out of range [0..360] - */ - void setHeading(double hdt); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MTASentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MTASentence.java deleted file mode 100644 index 0c08e2faa89..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MTASentence.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * MTASentence.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Air temperature in degrees Celsius. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface MTASentence extends Sentence { - - - /** - * Returns the air temperature. - * - * @return Temperature in degrees Celsius. - */ - double getTemperature(); - - /** - * Sets the air temperature. - * - * @param temp Temperature in degrees Celsius. - */ - void setTemperature(double temp); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MTWSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MTWSentence.java deleted file mode 100644 index 1a61768f1f6..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MTWSentence.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * MTWSentence.java - * Copyright (C) 2011 Warren Zahra, Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Water temperature in degrees Celsius. - * - * @author Warren Zahra, Kimmo Tuukkanen - * @version $Revision$ - */ -public interface MTWSentence extends Sentence { - - /** - * Get the water temperature. - * - * @return Temperature in degrees Celsius. - */ - double getTemperature(); - - /** - * Set the water temperature. - * - * @param temp Water temperature in degrees Celsius. - */ - void setTemperature(double temp); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MWVSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MWVSentence.java deleted file mode 100644 index cb291e14265..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/MWVSentence.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * MWVSentence.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.DataStatus; -import net.sf.marineapi.nmea.util.Units; - -/** - * Wind speed and angle. Speed in km/h, m/s, or knots. Wind angle is given in - * degrees relative to bow or true north. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface MWVSentence extends Sentence { - - /** - * Get wind angle. - * - * @return Wind angle in degrees. - */ - double getAngle(); - - /** - * Returns the wind speed. - * - * @return Wind speed value - */ - double getSpeed(); - - /** - * Returns the wind speed unit. - * - * @return {@link Units#METER} for meters per second, {@link Units#KMH} for - * kilometers per hour and {@link Units#KNOT} for knots. - */ - Units getSpeedUnit(); - - /** - * Get data validity status. - * - * @return Data status - */ - DataStatus getStatus(); - - /** - * Tells if the angle is relative or true. - * - * @return True if relative to true north, otherwise false (relative to bow) - */ - boolean isTrue(); - - /** - * Set wind angle. - * - * @param angle Wind angle in degrees. - */ - void setAngle(double angle); - - /** - * Set the wind speed value. - * - * @param speed Wind speed to set. - */ - void setSpeed(double speed); - - /** - * Set wind speed unit. - * - * @param unit {@link Units#METER} for meters per second, {@link Units#KMH} - * for kilometers per hour and {@link Units#KNOT} for knots. - * @throws IllegalArgumentException If trying to set invalid unit - */ - void setSpeedUnit(Units unit); - - /** - * Set data validity status. - * - * @param status Data status to set. - */ - void setStatus(DataStatus status); - - /** - * Set angle to relative or true. - * - * @param isTrue True for true angle, false for relative to bow. - */ - void setTrue(boolean isTrue); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/PositionSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/PositionSentence.java deleted file mode 100644 index 419213752b8..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/PositionSentence.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * PositionSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.Position; - -/** - * Common interface for sentences that contain geographic position. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface PositionSentence extends Sentence { - - /** - * Gets the geographic position. - * - * @return Position - * @throws net.sf.marineapi.parser.DataNotAvailableException If any of the position related fields - * is empty. - * @throws net.sf.marineapi.parser.ParseException If any of the position related fields contains - * unexpected value. - */ - Position getPosition(); - - /** - * Set the geographic position. - * - * @param pos Position to set - */ - void setPosition(Position pos); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RMBSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RMBSentence.java deleted file mode 100644 index 0ea9604686e..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RMBSentence.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * RMBSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.DataStatus; -import net.sf.marineapi.nmea.util.Direction; -import net.sf.marineapi.nmea.util.Waypoint; - -/** - * Recommended minimum navigation information. This sentence is transmitted by a - * GPS receiver when a destination waypoint is active (GOTO mode). - *

    - * Example:
    - * $GPRMB,A,0.00,R,,RUSKI,5536.200,N,01436.500,E,432.3,234.9,,V*58 - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface RMBSentence extends Sentence { - - /** - * Get the arrival to waypoint status. Status is {@link DataStatus#VOID} - * (false) while not arrived at destination, otherwise - * {@link DataStatus#ACTIVE} (true). - * - * @return {@link DataStatus#ACTIVE} or {@link DataStatus#VOID} - * @see #hasArrived() - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - DataStatus getArrivalStatus(); - - /** - * Get true bearing to destination. - * - * @return True bearing in degrees. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getBearing(); - - /** - * Get cross track error (XTE). - * - * @return Cross track error, in nautical miles. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getCrossTrackError(); - - /** - * Get the destination waypoint. - * - * @return Waypoint - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - Waypoint getDestination(); - - /** - * Get the ID of origin waypoint. - * - * @return Id String. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - String getOriginId(); - - /** - * Get range to destination waypoint. - * - * @return Range to destination, in nautical miles. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getRange(); - - /** - * Get the sentence data status, valid or invalid. - * - * @return {@link DataStatus#ACTIVE} or {@link DataStatus#VOID} - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - DataStatus getStatus(); - - /** - * Get the direction to steer to correct error (left/right). - * - * @return Direction.LEFT or Direction.RIGHT - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - Direction getSteerTo(); - - /** - * Get velocity towards destination. Notice that returned value may also be - * negative if vehicle is moving away from destination. - * - * @return Velocity value, in knots (nautical miles per hour). - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getVelocity(); - - /** - * Tells if the destination waypoint has been reached or not. - * - * @return True if has arrived to waypoint, otherwise false. - * @throws net.sf.marineapi.parser.DataNotAvailableException If arrival status is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - boolean hasArrived(); - - /** - * Set the arrival to waypoint status. Set {@link DataStatus#VOID} if not - * arrived at destination, otherwise {@link DataStatus#ACTIVE}. - * - * @param status {@link DataStatus#VOID} or {@link DataStatus#ACTIVE}. - * @throws IllegalArgumentException If status is null. - */ - void setArrivalStatus(DataStatus status); - - /** - * Set true bearing to destination, in degrees. - * - * @param bearing Bearing value, will be rounded to one decimal. - * @throws IllegalArgumentException If bearing value is out of bounds 0..360 - * degrees. - */ - void setBearing(double bearing); - - /** - * Set cross track error (XTE), in nautical miles. Negative values are - * translated to positive, set Steer-To to indicate the direction of error. - * - * @param xte Cross track error value, will be rounded to one decimal. - * @see #setSteerTo(Direction) - */ - void setCrossTrackError(double xte); - - /** - * Set the destination waypoint. - * - * @param dest Waypoint to set - */ - void setDestination(Waypoint dest); - - /** - * Set the ID of origin waypoint. - * - * @param id ID to set - */ - void setOriginId(String id); - - /** - * Set range to destination waypoint. - * - * @param range Range value, in nautical miles. - */ - void setRange(double range); - - /** - * Set status of sentence data, valid or invalid. - * - * @param status {@link DataStatus#ACTIVE} or {@link DataStatus#VOID} - */ - void setStatus(DataStatus status); - - /** - * Set the direction to steer to correct error (left/right). - * - * @param steerTo {@link Direction#LEFT} or {@link Direction#RIGHT} - * @throws IllegalArgumentException If specified direction is any other than - * defined valid for param steer. - */ - void setSteerTo(Direction steerTo); - - /** - * Set velocity towards destination. Notice that value may also be negative - * if vehicle is moving away from the destination. - * - * @param velocity Velocity, in knots (nautical miles per hour). - */ - void setVelocity(double velocity); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RMCSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RMCSentence.java deleted file mode 100644 index 5e6ac549d11..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RMCSentence.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * RMCSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.CompassPoint; -import net.sf.marineapi.nmea.util.DataStatus; -import net.sf.marineapi.nmea.util.FaaMode; - -/** - * Recommended minimum navigation information type C. Current time and date, - * position, speed over ground, true course over ground and magnetic variation. - *

    - * Example:
    - * $GPRMC,120044,A,6011.552,N,02501.941,E,000.0,360.0,160705,006.1,E*7C - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface RMCSentence extends PositionSentence, TimeSentence, - DateSentence { - - /** - * Get the corrected course over ground. Correction is done by subtracting - * or adding the magnetic variation from true course (easterly variation - * subtracted and westerly added). - * - * @return Corrected true course - * @see #getCourse() - * @see #getVariation() - * @throws net.sf.marineapi.parser.DataNotAvailableException If course or variation data is not - * available. - * @throws net.sf.marineapi.parser.ParseException If course or variation field contains unexpected - * or illegal value. - */ - double getCorrectedCourse(); - - /** - * Get true course over ground (COG). - * - * @return True course in degrees - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getCourse(); - - /** - * Get the direction of magnetic variation; east or west. - * - * @return Direction.EAST or Direction.WEST - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - CompassPoint getDirectionOfVariation(); - - /** - * Get the FAA operating mode for GPS. - * - * @return FaaMode enum - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - FaaMode getMode(); - - /** - * Get current speed over ground (SOG). - * - * @return Speed in knots (nautical miles per hour). - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getSpeed(); - - /** - * Gets the data status, valid or invalid. - * - * @return {@link DataStatus#ACTIVE} or {@link DataStatus#VOID} - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - DataStatus getStatus(); - - /** - * Get the magnetic variation. Easterly variation subtracts from true - * course, and is thus returned as negative value. Otherwise, the value is - * positive. - * - * @return Magnetic variation in degrees - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getVariation(); - - /** - * Set true course over ground (COG). - * - * @param cog True course in degrees - */ - void setCourse(double cog); - - /** - * Set the direction of magnetic variation, east or west. - * - * @param dir {@link CompassPoint#EAST} or {@link CompassPoint#WEST} - * @throws IllegalArgumentException If specified Direction is other than - * defined as valid for param dir. - */ - void setDirectionOfVariation(CompassPoint dir); - - /** - * Set the FAA operation mode of GPS. - * - * @param mode Mode to set - */ - void setMode(FaaMode mode); - - /** - * Set current speed over ground (SOG). - * - * @param sog Speed in knots (nautical miles per hour). - */ - void setSpeed(double sog); - - /** - * Set the data status, valid or invalid. - * - * @param status {@link DataStatus#ACTIVE} or {@link DataStatus#VOID} - */ - void setStatus(DataStatus status); - - /** - * Set the magnetic variation. - * - * @param var Magnetic variation in degrees - */ - void setVariation(double var); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RTESentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RTESentence.java deleted file mode 100644 index e1d1dc10947..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/RTESentence.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * RTESentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.RouteType; - -/** - * GPS route data and list of waypoints. - *

    - * Example:
    - * $GPRTE,1,1,c,0,MELIN,RUSKI,KNUDAN*25 - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface RTESentence extends Sentence { - - /** - * Add a waypoint ID at the end of waypoint list. The number of waypoint id - * fields is increased by one on each addition. - * - * @param id Waypoint ID to add. - * @return The total number of waypoint IDs after addition. - */ - int addWaypointId(String id); - - /** - * Get the number or name of the route. - * - * @return Route ID or name as String - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - String getRouteId(); - - /** - * Get the number of sentences in RTE sequence. - * - * @return integer - * @see #getSentenceIndex() - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - int getSentenceCount(); - - /** - * Get the index of sentence in RTE sequence. - * - * @return integer - * @see #getSentenceCount() - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - int getSentenceIndex(); - - /** - * Get the number of waypoints IDs in this sentence. - * - * @return Waypoint count - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - int getWaypointCount(); - - /** - * Get the list of route waypoints. - * - * @return Waypoint IDs as String array - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - String[] getWaypointIds(); - - /** - * Tells if the sentence holds a current active route data. - * - * @return true if active route, otherwise false. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - boolean isActiveRoute(); - - /** - * Tells if this is the first sentence in RTE sequence. - * - * @return true if there's no sentences left, otherwise false. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the sentence index or sentence count - * is not available. - * @throws net.sf.marineapi.parser.ParseException If sentence index or count fields contain - * unexpected or illegal value. - */ - boolean isFirst(); - - /** - * Tells if this is the last sentence in RTE sequence. - * - * @return true if there's no sentences left, otherwise false. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the sentence index or sentence count - * is not available. - * @throws net.sf.marineapi.parser.ParseException If sentence index or count fields contain - * unexpected or illegal value. - */ - boolean isLast(); - - /** - * Tells if the sentence holds a current working route data. - * - * @return true if working route, otherwise false. - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If status field contains illegal value. - */ - boolean isWorkingRoute(); - - /** - * Set the route name or number. - * - * @param id Route ID or name as String - */ - void setRouteId(String id); - - /** - * Set the type of route. - * - * @param type RouteType to set - */ - void setRouteType(RouteType type); - - /** - * Set the number of sentences in RTE sequence. - * - * @param count Sentence count in sequence - * @throws IllegalArgumentException If the specified count is negative. - */ - void setSentenceCount(int count); - - /** - * Set the index of sentence in RTE sequence. - * - * @param index Sentence index in sequence - * @throws IllegalArgumentException If specified index is negative. - */ - void setSentenceIndex(int index); - - /** - * Set the list of route waypoints. - * - * @param ids String array of waypoint IDs - */ - void setWaypointIds(String[] ids); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/Sentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/Sentence.java deleted file mode 100644 index 82a83e7a65c..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/Sentence.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Sentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Base interface and constants for NMEA 0183 sentences. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface Sentence { - - /** - * Address field index, the first field of all sentences. - */ - int ADDRESS_FIELD = 0; - - /** - * Sentence begin character - */ - char BEGIN_CHAR = '$'; - - /** - * Alternative sentence begin character used in VDO and VDM sentences. - */ - char ALTERNATIVE_BEGIN_CHAR = '!'; - - /** - * Checksum field delimiter char - */ - char CHECKSUM_DELIMITER = '*'; - - /** - * Sentence data fields delimiter char - */ - char FIELD_DELIMITER = ','; - - /** - * Maximum length of NMEA 0183 sentences, including BEGIN_CHAR - * and TERMINATOR. - */ - int MAX_LENGTH = 82; - - /** - * Sentence terminator (<CR><LF>) - */ - String TERMINATOR = "\r\n"; - - /** - * Returns the current number of data fields in sentence, excluding ID field - * and checksum. - * - * @return Data field count - */ - int getFieldCount(); - - /** - * Get the sentence begin character. Although most of the sentences start - * with '$', some of them use '!' as begin character. - * - * @return Sentence begin char, e.g. "$" or "!". - */ - char getBeginChar(); - - /** - * Get the sentence ID that specifies the sentence type and data it holds. - * ID is the last three characters in address field. For example, in case of - * $GPGGA the method returns {@link SentenceId#GGA}. - * - * @return Sentence id String, e.g. "GLL" or "GGA". - * @see SentenceId - */ - String getSentenceId(); - - /** - * Gets the talker ID of the sentence. Talker ID is the next two characters - * after $ in sentence address field. For example, in case of - * $GPGGA, the method returns {@link TalkerId#GP}. - * - * @return Talker id enum. - */ - TalkerId getTalkerId(); - - /** - * Tells if the sentence is of proprietary format. - * - * @return True if proprietary, otherwise false. - */ - boolean isProprietary(); - - /** - * Tells if the sentence formatting matches NMEA 0183 format. - * - * @return True if validly formatted, otherwise false. - */ - boolean isValid(); - - /** - * Set the sentence begin character. Although most of the sentences start - * with '$', some of them use '!' as begin character. - * - * @param ch Sentence begin char to set ('$' or '!') - * @see Sentence#BEGIN_CHAR - * @see Sentence#ALTERNATIVE_BEGIN_CHAR - */ - void setBeginChar(char ch); - - /** - * Set the talker ID of the sentence. Typically, the ID might be changed if - * the sentence is to be sent from a computer to an NMEA device. - * - * @param id TalkerId to set - */ - void setTalkerId(TalkerId id); - - /** - * Formats and validates the String representation of sentence without the - * line terminator CR/LF. If formatting results in invalid sentence, e.g. 82 - * character limit exceeds due too long values set in fields, an exception - * is thrown. - * - * @see #toString() - * @return A valid NMEA sentence String - * @throws IllegalStateException If formatting results in invalid sentence. - */ - String toSentence(); - - /** - * Returns the String representation of sentence in NMEA 0183 format. - * - * @return Sentence String - */ - String toString(); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/SentenceId.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/SentenceId.java deleted file mode 100644 index 790e2c30b85..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/SentenceId.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SentenceId.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Defines the supported NMEA 0831 sentence types. Sentence address field is a - * combination of talker and sentence IDs, for example GPBOD, GPGGA or GPGGL. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.TalkerId - */ -public enum SentenceId { - - /** Bearing Origin to Destination */ - BOD, - /** Depth of water below transducer; in meters, feet and fathoms */ - DBT, - /** Depth of water below transducer; in meters. */ - DPT, - /** Global Positioning System fix data */ - GGA, - /** Geographic position (latitude/longitude) */ - GLL, - /** Dilution of precision (DOP) of GPS fix and active satellites */ - GSA, - /** Detailed satellite data */ - GSV, - /** Vessel heading in degrees with magnetic variation and deviation. */ - HDG, - /** Vessel heading in degrees with respect to true north. */ - HDM, - /** Vessel heading in degrees true */ - HDT, - /** Air temperature in degrees centigrade (Celsius). */ - MTA, - /** Water temperature in degrees centigrade (Celsius). */ - MTW, - /** Wind speed and angle */ - MWV, - /** Recommended minimum navigation information */ - RMB, - /** Recommended minimum specific GPS/TRANSIT data */ - RMC, - /** Route data and waypoint list */ - RTE, - /** Track made good and ground speed */ - VTG, - /** Water speed and heading */ - VHW, - /** Waypoint location (latitude/longitude) */ - WPL, - /** UTC time and date with local time zone offset */ - ZDA, - /** Proprietary extension for SailTimer WindVane's battery indicator message */ - BAT; - - /** - * Parses the sentence id from specified sentence String and returns a - * corresponding SentenceId enum (assuming it exists). - * - * @param nmea Sentence String - * @return SentenceId enum - * @throws IllegalArgumentException If specified String is not valid - * sentence - */ - public static SentenceId parse(String nmea) { - String sid = parseStr(nmea); - return SentenceId.valueOf(sid); - } - - /** - * Parses the sentence id from specified sentence String and returns it as - * String. - * - * @param nmea Sentence String - * @return Sentence Id, e.g. "GGA" or "GLL" - * @throws IllegalArgumentException If specified String is not recognized as - * NMEA sentence - */ - public static String parseStr(String nmea) { - - if (!SentenceValidator.isSentence(nmea)) { - throw new IllegalArgumentException("String is not a sentence"); - } - - String id = null; - if (nmea.startsWith("$P")) { - id = nmea.substring(2, 6); - } else { - id = nmea.substring(3, 6); - } - return id; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/SentenceValidator.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/SentenceValidator.java deleted file mode 100644 index 25c7d33dd2e..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/SentenceValidator.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SentenceValidator.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * SentenceValidator checks any String against NMEA 0183 format. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public final class SentenceValidator { - - private SentenceValidator() { - } - - /** - * Tells if the specified String matches the NMEA 0183 sentence format. - *

    - * String is considered as a sentence if it meets the following criteria: - *

      - *
    • Starts with '$' character - *
    • '$' is followed by 5 upper-case chars and a comma (sentence type id) - *
    • Length is max. 205 chars long (excluding <CR><LF>). This is a deviation from the NMEA spec, - * which allows only for 80 characters, which is not sufficient for long decimal values. Allowing for - * more characters is backward-compatible. - *
    • String contains only printable ASCII characters - *
    • Checksum is correct and separated by '*' char (unless omitted) - *
    - * - * @param nmea String to inspect - * @return true if recognized as sentence, otherwise false. - */ - public static boolean isSentence(String nmea) { - - if (nmea == null || "".equals(nmea)) { - return false; - } - - int i = nmea.indexOf(Sentence.CHECKSUM_DELIMITER); - - // printable ASCII chars 0x20 to 0x7E - String re = "^[$|!]{1}[A-Z0-9]{5}[,][\\x20-\\x7F]{0,197}[*][A-F0-9]{2}$"; - if (i < 0) { - re = "^[$|!]{1}[A-Z0-9]{5}[,][\\x20-\\x7F]{0,200}$"; - } - - return nmea.matches(re); - } - - /** - * Tells if the specified String is a valid NMEA 0183 sentence. String is - * considered as valid sentence if it passes the {@link #isSentence(String)} - * test and contains a valid checksum. Sentences without checksum are - * validated only by checking the general sentence characteristics. - * - * @param nmea String to validate - * @return true if valid, otherwise false. - */ - public static boolean isValid(String nmea) { - - boolean isValid = false; - - if (SentenceValidator.isSentence(nmea)) { - int i = nmea.indexOf(Sentence.CHECKSUM_DELIMITER); - if (i > 0) { - String sum = nmea.substring(++i, nmea.length()); - isValid = sum.equals(Checksum.calculate(nmea)); - } else { - // no checksum - isValid = true; - } - } - - return isValid; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/TalkerId.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/TalkerId.java deleted file mode 100644 index 18a27cfb3e8..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/TalkerId.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * TalkerId.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * The enumeration of Talker IDs, i.e. the first two characters in sentence's - * address field. For example, GP in $GPGGA. Notice - * that proprietary sentences are identified by single character {@link #P}. - *

    - * This enum contains also non-NMEA IDs to enable parsing AIS messages; - * {@link #AI}, {@link #AB} and {@link #BS}. However, the correct meaning of - * these are still unconfirmed. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.SentenceId - */ -public enum TalkerId { - - /** AIS (to support AIVDM and AIVDO) */ - AI, - /** AIS "Broadcast" message (to support ABVDM) */ - AB, - /** AIS "Base Station" message (to support BSVDM) */ - BS, - /** Autopilot - General */ - AG, - /** Autopilot - Magnetic */ - AP, - /** Computer - Programmed Calculator (obsolete) */ - @Deprecated - CC, - /** Communications - Digital Selective Calling (DSC) */ - CD, - /** Computer - Memory Data (obsolete) */ - @Deprecated - CM, - /** Communications - Satellite */ - CS, - /** Communications - Radio-Telephone (MF/HF) */ - CT, - /** Communications - Radio-Telephone (VHF) */ - CV, - /** Communications - Scanning Receiver */ - CX, - /** DECCA Navigation (obsolete) */ - @Deprecated - DE, - /** Direction Finder */ - DF, - /** Velocity Sensor, Speed Log, Water, Magnetic */ - DM, - /** Electronic Chart Display & Information System (ECDIS) */ - EC, - /** Emergency Position Indicating Beacon (EPIRB) */ - EP, - /** Engine Room Monitoring Systems */ - ER, - /** Global Positioning System (GPS) */ - GP, - /** Heading - Magnetic Compass */ - HC, - /** Heading - North Seeking Gyro */ - HE, - /** Heading - Non North Seeking Gyro */ - HN, - /** Integrated Instrumentation */ - II, - /** Integrated Navigation */ - IN, - /** Loran A (obsolete) */ - @Deprecated - LA, - /** Loran C (obsolete) */ - @Deprecated - LC, - /** Microwave Positioning System (obsolete) */ - @Deprecated - MP, - /** OMEGA Navigation System (obsolete) */ - @Deprecated - OM, - /** Distress Alarm System (obsolete) */ - @Deprecated - OS, - /** Proprietary sentence format (does not define the talker device). */ - P, - /** RADAR and/or ARPA */ - RA, - /** Sounder, Depth */ - SD, - /** Electronic Positioning System, other/general */ - SN, - /** Sounder, Scanning */ - SS, - /** Turn Rate Indicator */ - TI, - /** TRANSIT Navigation System */ - TR, - /** Velocity Sensor, Doppler, other/general */ - VD, - /** Velocity Sensor, Speed Log, Water, Mechanical */ - VW, - /** Weather Instruments */ - WI, - /** Transducer - Temperature (obsolete) */ - @Deprecated - YC, - /** Transducer - Displacement, Angular or Linear (obsolete) */ - @Deprecated - YD, - /** Transducer - Frequency (obsolete) */ - @Deprecated - YF, - /** Transducer - Level (obsolete) */ - @Deprecated - YL, - /** Transducer - Pressure (obsolete) */ - @Deprecated - YP, - /** Transducer - Flow Rate (obsolete) */ - @Deprecated - YR, - /** Transducer - Tachometer (obsolete) */ - @Deprecated - YT, - /** Transducer - Volume (obsolete) */ - @Deprecated - YV, - /** Transducer */ - YX, - /** Timekeeper - Atomic Clock */ - ZA, - /** Timekeeper - Chronometer */ - ZC, - /** Timekeeper - Quartz */ - ZQ, - /** Timekeeper - Radio Update, WWV or WWVH */ - ZV; - - /** - * Parses the talker id from specified sentence String and returns the - * corresponding TalkerId enum using the {@link #valueOf(String)} method. - * - * @param nmea Sentence String - * @return TalkerId enum - * @throws IllegalArgumentException If specified String is not recognized as - * NMEA sentence - */ - public static TalkerId parse(String nmea) { - - if (!SentenceValidator.isSentence(nmea)) { - throw new IllegalArgumentException("String is not a sentence"); - } - - String tid = ""; - if (nmea.startsWith("$P")) { - tid = "P"; - } else { - tid = nmea.substring(1, 3); - } - return TalkerId.valueOf(tid); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/TimeSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/TimeSentence.java deleted file mode 100644 index fb85887d558..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/TimeSentence.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * TimeSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.Time; - -/** - * Interface for sentences that provide UTC time. Notice that some sentences - * contain only UTC time, while others may provide also date. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.DateSentence - */ -public interface TimeSentence extends Sentence { - - /** - * Get the time of day. - * - * @return Time - */ - Time getTime(); - - /** - * Set the time of day. - * - * @param t Time to set - */ - void setTime(Time t); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/VHWSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/VHWSentence.java deleted file mode 100644 index 2d9fd9ca2e9..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/VHWSentence.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * VHWSentence.java - * Copyright (C) 2011 Warren Zahra, Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -/** - * Water speed and heading in respect to true and magnetic north. - * - * @author Warren Zahra, Kimmo Tuukkanen - * @version $Revision$ - */ -public interface VHWSentence extends HeadingSentence { - - /** - * Returns the current heading. - * - * @return Heading in degrees magnetic. - */ - double getMagneticHeading(); - - /** - * Returns the current water speed. - * - * @return Speed in km/h (kilmetres per hour) - */ - double getSpeedKmh(); - - /** - * Returns the current water speed. - * - * @return Speed in knots (nautical miles per hour) - */ - double getSpeedKnots(); - - /** - * Sets the magnetic heading. - * - * @param hdg Heading in degrees magnetic. - * @throws IllegalArgumentException If value is out of bounds [0..360] - */ - void setMagneticHeading(double hdg); - - /** - * Sets the water speed in km/h. - * - * @param kmh Speed in kilmetres per hour. - */ - void setSpeedKmh(double kmh); - - /** - * Sets the water speed in knots. - * - * @param knots Speed in knots (nautical miles per hour) - */ - void setSpeedKnots(double knots); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/VTGSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/VTGSentence.java deleted file mode 100644 index f9c7022a025..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/VTGSentence.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * VTGSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.FaaMode; - -/** - * Course and speed over the ground. True and magnetic COG, speed provided in - * km/h and knots. Mode (the last "A" in example sentence) was added in NMEA 2.3 - * and may not always be available. - *

    - * Example:
    - * $GPVTG,46.96,T,,,16.89,N,31.28,K,A*43 - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface VTGSentence extends Sentence { - - /** Char indicator for "true" */ - char TRUE = 'T'; - /** Char indicator for "magnetic" */ - char MAGNETIC = 'M'; - /** Units indicator for kilometers per hour */ - char KMPH = 'K'; - /** Units indicator for knots (nautical miles per hour) */ - char KNOT = 'N'; - /** Operating in manual mode (forced 2D or 3D). */ - char MODE_MANUAL = 'M'; - /** Operating in automatic mode (2D/3D). */ - char MODE_AUTOMATIC = 'A'; - - /** - * Get the magnetic course over ground. - * - * @return Magnetic course - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getMagneticCourse(); - - /** - * Get the FAA operating mode of GPS receiver. The field may not be - * available, depending on the NMEA version. - * - * @since NMEA 2.3 - * @return {@link FaaMode} enum - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - FaaMode getMode(); - - /** - * Get current speed over ground, in kilometers per hour. - * - * @return Speed in km/h - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getSpeedKmh(); - - /** - * Get speed over ground in knots. - * - * @return Speed in knots (nautical miles per hour) - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getSpeedKnots(); - - /** - * Get the true course over ground. - * - * @return True course, in degrees - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - double getTrueCourse(); - - /** - * Set the magnetic course over ground. - * - * @param mcog Course in degrees. - */ - void setMagneticCourse(double mcog); - - /** - * Set the FAA operating mode of GPS receiver. - * - * @param mode Mode to set - * @since NMEA 2.3 - */ - void setMode(FaaMode mode); - - /** - * Set the current speed over ground. - * - * @param kmh Speed in kilometers per hour (km/h). - */ - void setSpeedKmh(double kmh); - - /** - * Set the speed over ground, in knots. - * - * @param knots Speed in knots (nautical miles per hour) - */ - void setSpeedKnots(double knots); - - /** - * Set the true course over ground. - * - * @param tcog True course, in degrees - * @throws IllegalArgumentException If specified course is out of bounds - * 0..360 degrees. - */ - void setTrueCourse(double tcog); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/WPLSentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/WPLSentence.java deleted file mode 100644 index 2adbc9df7cb..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/WPLSentence.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * WPLSentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import net.sf.marineapi.nmea.util.Waypoint; - -/** - * Destination waypoint location and ID. This sentence is transmitted by some - * GPS models in GOTO mode. - *

    - * Example:
    - * $GPWPL,5536.200,N,01436.500,E,RUSKI*1F - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface WPLSentence extends Sentence { - - /** - * Get the destination waypoint. - * - * @return Waypoint - * @throws net.sf.marineapi.parser.DataNotAvailableException If any of the waypoint related data is - * not available. - * @throws net.sf.marineapi.parser.ParseException If any of the waypoint related fields contain - * unexpected or illegal value. - */ - Waypoint getWaypoint(); - - /** - * Set the destination waypoint. - * - * @param wp Waypoint to set - */ - void setWaypoint(Waypoint wp); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/ZDASentence.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/ZDASentence.java deleted file mode 100644 index 395d3ab374d..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/ZDASentence.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * ZDASentence.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.sentence; - -import java.util.Date; - -/** - * UTC time and date with local time zone offset. - *

    - * Example:
    - * $GPZDA,032915,07,08,2004,00,00*4D - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface ZDASentence extends TimeSentence, DateSentence { - - /** - * Get offset to local time zone in hours, from +/- 0 to +/- 13 hours. - * - * @return Time zone offset - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - int getLocalZoneHours(); - - /** - * Get offset to local time zone in minutes, from 0 to +/- 59. - * - * @return Time zone offset - * @throws net.sf.marineapi.parser.DataNotAvailableException If the data is not available. - * @throws net.sf.marineapi.parser.ParseException If the field contains unexpected or illegal value. - */ - int getLocalZoneMinutes(); - - /** - * Set offset to local time zone in hours. - * - * @param hours Offset, from 0 to +/- 13 hours. - */ - void setLocalZoneHours(int hours); - - /** - * Set offset to local time zone in minutes. - * - * @param minutes Offset, from 0 to +/- 59 minutes. - */ - void setLocalZoneMinutes(int minutes); - - /** - * Get date and time as {@link java.util.Date}. - * - * @return {@link java.util.Date} - * @throws net.sf.marineapi.parser.DataNotAvailableException If any of the date/time values is not - * available. - * @throws net.sf.marineapi.parser.ParseException If the any of the date/time fields contains - * invalid value. - */ - Date toDate(); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/package.html b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/package.html deleted file mode 100644 index 3e4b8adaca1..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/sentence/package.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - package net.sf.marineapi.nmea.sentence - - - -

    -Contains interfaces for supported NMEA 0183 sentences.

    - - - diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/CompassPoint.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/CompassPoint.java deleted file mode 100644 index 8637d420f89..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/CompassPoint.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Direction.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * Defines the supported compass and relative directions. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public enum CompassPoint { - - /** North */ - NORTH('N'), - /** East */ - EAST('E'), - /** South */ - SOUTH('S'), - /** West */ - WEST('W'); - - private char ch; - - private CompassPoint(char c) { - this.ch = c; - } - - /** - * Returns the corresponding char constant. - * - * @return Char indicator for Direction - */ - public char toChar() { - return ch; - } - - /** - * Get the enum corresponding to specified char. - * - * @param c Char indicator for Direction - * @return Direction - */ - public static CompassPoint valueOf(char c) { - for (CompassPoint d : values()) { - if (d.toChar() == c) { - return d; - } - } - return valueOf(String.valueOf(c)); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/DataStatus.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/DataStatus.java deleted file mode 100644 index 2e1ed990cab..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/DataStatus.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * DataStatus.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * DataStatus defines the validity of data being broadcasted by an NMEA device. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public enum DataStatus { - - /** Valid data available. May also indicate boolean value true. */ - ACTIVE('A'), - - /** - * No valid data available. May also indicate boolean value - * false. - */ - VOID('V'); - - private final char character; - - DataStatus(char ch) { - character = ch; - } - - /** - * Returns the character used in NMEA sentences to indicate the status. - * - * @return Char indicator for DataStatus - */ - public char toChar() { - return character; - } - - /** - * Returns the DataStatus enum for status char used in sentences. - * - * @param ch Status char - * @return DataStatus - */ - public static DataStatus valueOf(char ch) { - for (DataStatus ds : values()) { - if (ds.toChar() == ch) { - return ds; - } - } - return valueOf(String.valueOf(ch)); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Date.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Date.java deleted file mode 100644 index aa38d15631d..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Date.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Date.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -import java.util.Calendar; -import java.util.GregorianCalendar; - -/** - * Represents a calendar date (day-month-year) transmitted in sentences that - * implement {@link net.sf.marineapi.nmea.sentence.DateSentence}. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.DateSentence - * @see net.sf.marineapi.nmea.util.Time - */ -public class Date { - - /** - * A pivot value that is used to determine century for two-digit year - * values. Two-digit values lower than or equal to pivot are assigned to - * 21th century, while greater values are assigned to 20th century. - */ - public static final int PIVOT_YEAR = 50; - - // day of month 1..31 - private int day; - // month 1..12 - private int month; - // four-digit year - private int year; - - /** - * Creates a new instance of Date using the current date. - */ - public Date() { - GregorianCalendar c = new GregorianCalendar(); - this.year = c.get(Calendar.YEAR); - this.month = c.get(Calendar.MONTH) + 1; - this.day = c.get(Calendar.DAY_OF_MONTH); - } - - /** - * Constructor with date values. - * - * @param year Year, two or four digit value [0..99] or [1000..9999] - * @param month Month [1..12] - * @param day Day [1..31] - * @throws IllegalArgumentException If any of the parameter is out of - * bounds. - */ - public Date(int year, int month, int day) { - setYear(year); - setMonth(month); - setDay(day); - } - - /* - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (obj instanceof Date) { - Date d = (Date) obj; - if (d.getDay() == this.day && d.getMonth() == this.month - && d.getYear() == this.year) { - return true; - } - } - return false; - } - - /** - * Get day of month. - * - * @return the day - */ - public int getDay() { - return day; - } - - /** - * Get month, valid values are 1-12 where 1 denotes January, 2 denotes - * February etc. - * - * @return the month - */ - public int getMonth() { - return month; - } - - /** - * Get year. The date fields in NMEA 0183 may present year by using either - * two or four digits. In case of only two digits, the century is determined - * by comparing the value against {@link #PIVOT_YEAR}. Values lower than or - * equal to pivot are added to 2000, while values greater than pivot are - * added to 1900. - * - * @return The four-digit year - * @see #PIVOT_YEAR - */ - public int getYear() { - return year; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - String s = String.format("%d%02d%02d", year, month, day); - return s.hashCode(); - } - - /** - * Set day of month. - * - * @param day the day to set - */ - public void setDay(int day) { - if (day < 1 || day > 31) { - throw new IllegalArgumentException("Day out of bounds [1..31]"); - } - this.day = day; - } - - /** - * Get month, valid values are 1-12 where 1 denotes January, 2 denotes - * February etc. - * - * @param month the month to set - * @throws IllegalArgumentException If specified value is out of bounds - * [1..12] - */ - public void setMonth(int month) { - if (month < 1 || month > 12) { - throw new IllegalArgumentException( - "Month value out of bounds [1..12]"); - } - this.month = month; - } - - /** - * Set year. The date fields in NMEA 0183 may present year by using either - * two or four digits. In case of only two digits, the century is determined - * by comparing the value against {@link #PIVOT_YEAR}. Values lower than or - * equal to pivot are added to 2000, while values greater than pivot are - * added to 1900. - * - * @param year Year to set, two or four digit value. - * @see #PIVOT_YEAR - * @throws IllegalArgumentException If specified value is negative or - * three-digit value. - */ - public void setYear(int year) { - if (year < 0 || (year > 99 && year < 1000) || year > 9999) { - throw new IllegalArgumentException( - "Year must be two or four digit value"); - } - if (year < 100 && year > PIVOT_YEAR) { - this.year = 1900 + year; - } else if (year < 100 && year <= PIVOT_YEAR) { - this.year = 2000 + year; - } else { - this.year = year; - } - } - - /* - * (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - String ptr = "%04d-%02d-%02d"; - return String.format(ptr, getYear(), getMonth(), getDay()); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Datum.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Datum.java deleted file mode 100644 index 60f736d2c93..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Datum.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Datum.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * Defines the supported datums, i.e. the coordinate systems used to specify - * geographic positions. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.util.Position - */ -public enum Datum { - - /** World Geodetic System 1984, the default datum in GPS systems. */ - WGS84, - /** North American Datum 1983 */ - NAD83, - /** North American Datum 1927 */ - NAD27; -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Direction.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Direction.java deleted file mode 100644 index 68192ab5fb6..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Direction.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Direction.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * Defines the relative directions, e.g. "left" and "right". - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public enum Direction { - - /** Left */ - LEFT('L'), - - /** Right */ - RIGHT('R'); - - private char ch; - - private Direction(char c) { - ch = c; - } - - /** - * Returns the corresponding char constant. - * - * @return Char indicator for Direction - */ - public char toChar() { - return ch; - } - - /** - * Get the enum corresponding to specified char. - * - * @param c Char indicator for Direction - * @return Direction - */ - public static Direction valueOf(char c) { - for (Direction d : values()) { - if (d.toChar() == c) { - return d; - } - } - return valueOf(String.valueOf(c)); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/FaaMode.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/FaaMode.java deleted file mode 100644 index e30cb881a31..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/FaaMode.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * FaaMode.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * FaaMode defines the FAA operating modes reported by APB, BWC, BWR, GLL, RMA, - * RMB, RMC, VTG, WCV, and XTE sentences since NMEA 2.3. Also, the mode field in - * GGA was extended to contain these statuses. - *

    - * Notice that FAA mode dominates the {@link DataStatus} fields. Status field - * will be set to {@link DataStatus#ACTIVE} for modes {@link #AUTOMATIC} and - * {@link #DGPS}, and {@link DataStatus#VOID} for all other modes. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see GpsFixQuality - * @see GpsFixStatus - * @see DataStatus - */ -public enum FaaMode { - - /** Operating in autonomous mode (automatic 2D/3D). */ - AUTOMATIC('A'), - - /** Operating in manual mode (forced 2D or 3D). */ - MANUAL('M'), - - /** Operating in differential mode (DGPS). */ - DGPS('D'), - - /** Operating in estimating mode (dead-reckoning). */ - ESTIMATED('E'), - - /** Simulated data (running in simulator/demo mode) */ - SIMULATED('S'), - - /** No valid GPS data available. */ - NONE('N'); - - private final char mode; - - FaaMode(char modeCh) { - mode = modeCh; - } - - /** - * Returns the corresponding char indicator of GPS mode. - * - * @return Mode char used in sentences. - */ - public char toChar() { - return mode; - } - - /** - * Returns the FaaMode enum corresponding the actual char indicator used in - * the sentencess. - * - * @param ch Char mode indicator - * @return FaaMode enum - */ - public static FaaMode valueOf(char ch) { - for (FaaMode gm : values()) { - if (gm.toChar() == ch) { - return gm; - } - } - return valueOf(String.valueOf(ch)); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/GpsFixQuality.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/GpsFixQuality.java deleted file mode 100644 index 876ee787885..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/GpsFixQuality.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * GpsFixQuality.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * GpsFixQuality defines the supported fix quality types. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see FaaMode - * @see GpsFixStatus - * @see DataStatus - */ -public enum GpsFixQuality { - - /** No GPS fix acquired. */ - INVALID(0), - - /** Normal GPS fix, Standard Position Service (SPS). */ - NORMAL(1), - - /** Differential GPS fix. */ - DGPS(2), - - /** Precise Positioning Service fix. */ - PPS(3), - - /** Real Time Kinematic */ - RTK(4), - - /** Float RTK */ - FRTK(5), - - /** Estimated, dead reckoning (2.3 feature) */ - ESTIMATED(6), - - /** Manual input mode */ - MANUAL(7), - - /** Simulation mode */ - SIMULATED(8); - - private final int value; - - GpsFixQuality(int intValue) { - value = intValue; - } - - /** - * Returns the corresponding int indicator for fix quality. - * - * @return Fix quality indicator value as indicated in sentences. - */ - public int toInt() { - return value; - } - - /** - * Get GpsFixQuality enum that corresponds the actual integer identifier - * used in the sentences. - * - * @param val Status identifier value - * @return GpsFixQuality enum - */ - public static GpsFixQuality valueOf(int val) { - for (GpsFixQuality gfq : values()) { - if (gfq.toInt() == val) { - return gfq; - } - } - return valueOf(String.valueOf(val)); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/GpsFixStatus.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/GpsFixStatus.java deleted file mode 100644 index d60f7709af8..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/GpsFixStatus.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * GpsFixStatus.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * GpsFixStatus defines the status of current GPS fix. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see FaaMode - * @see GpsFixQuality - * @see DataStatus - */ -public enum GpsFixStatus { - - /** No GPS fix available */ - GPS_NA(1), - /** 2D GPS fix (lat/lon) */ - GPS_2D(2), - /** 3D GPS fix (lat/lon/alt) */ - GPS_3D(3); - - private final int status; - - GpsFixStatus(int intVal) { - status = intVal; - } - - /** - * Returns the corresponding int value for fix status enum. - * - * @return Fix status integer values as in sentences - */ - public int toInt() { - return status; - } - - /** - * Returns the GpsFixStatus enum corresponding to actual int identifier used - * in the sentences. - * - * @param val Fix status indentifier int - * @return GpsFixStatus enum - */ - public static GpsFixStatus valueOf(int val) { - for (GpsFixStatus st : values()) { - if (st.toInt() == val) { - return st; - } - } - return valueOf(String.valueOf(val)); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Position.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Position.java deleted file mode 100644 index 4988ca3d815..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Position.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Position.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * Represents a geographic position. The default datum is WGS84, unless some - * other datum is explicitly specified. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class Position { - - // latitude degrees - private double latitude; - // longitude degrees - private double longitude; - // hemisphere of latitude - private CompassPoint lathem; - // hemisphere of longitude - private CompassPoint lonhem; - // altitude - private double altitude = -0.0; - // datum/coordinate system - private Datum datum = Datum.WGS84; - - /** - * Creates a new instance of Position. Notice that altitude defaults to 0.0, - * unless set with {@link #setAltitude(double)} method. - * - * @param lat Latitude degrees - * @param lath Hemisphere of latitude - * @param lon Longitude degrees - * @param lonh Hemisphere of longitude - */ - public Position(double lat, CompassPoint lath, double lon, CompassPoint lonh) { - setLatitude(lat); - setLongitude(lon); - setLatHemisphere(lath); - setLonHemisphere(lonh); - } - - /** - * Creates new instance of Position. Notice that altitude defaults to 0.0, - * unless set with {@link #setAltitude(double)} method. - * - * @param lat Latitude degrees - * @param lath Hemisphere of latitude - * @param lon Longitude degrees - * @param lonh Hemisphere of longitude - * @param datum Datum - */ - public Position(double lat, CompassPoint lath, double lon, - CompassPoint lonh, Datum datum) { - this(lat, lath, lon, lonh); - this.datum = datum; - } - - /** - * Calculates the distance to specified Position. - *

    - * Calculation is done by using the Haversine - * formula. The mean earth - * radius used in calculation is 6371.009 km. - *

    - * The implementation is based on example found at codecodex.com. - * - * @param pos Position to which the distance is calculated. - * @return Distance to popos in meters. - */ - public double distanceTo(Position pos) { - return haversine(getLatitude(), getLongitude(), pos.getLatitude(), pos - .getLongitude()); - } - - /** - * Gets the position altitude from mean sea level. - * - * @return Altitude value in meters - */ - public double getAltitude() { - return altitude; - } - - /** - * Gets the datum, i.e. the coordinate system used to define geographic - * position. Default is {@link Datum#WGS84}, unless datum is specified in - * the constructor. Notice also that datum cannot be set afterwards. - * - * @return Datum enum - */ - public Datum getDatum() { - return datum; - } - - /** - * Get the hemisphere of latitude (North/South). - * - * @return Direction.NORTH or Direction.SOUTH - */ - public CompassPoint getLatHemisphere() { - return this.lathem; - } - - /** - * Get latitude value of Position - * - * @return latitude degrees - */ - public double getLatitude() { - return this.latitude; - } - - /** - * Get longitude value of Position - * - * @return longitude degrees - */ - public double getLongitude() { - return this.longitude; - } - - /** - * Get the hemisphere of longitude (East/West). - * - * @return CompassPoint.E or CompassPoint.W - */ - public CompassPoint getLonHemisphere() { - return this.lonhem; - } - - /** - * Sets the altitude of position above mean sea level. Defaults to zero. - * - * @param altitude Altitude value to set, in meters. - */ - public void setAltitude(double altitude) { - this.altitude = altitude; - } - - /** - * Set the hemisphere of latitude (North/South). - * - * @param lathem The hemisphere to set - * @throws IllegalArgumentException If specified hemisphere is other than - * NORTH or SOUTH. - */ - public void setLatHemisphere(CompassPoint lathem) { - if (CompassPoint.NORTH.equals(lathem) - || CompassPoint.SOUTH.equals(lathem)) { - this.lathem = lathem; - } else { - throw new IllegalArgumentException( - "Valid hemisphere for latitude is N or S"); - } - } - - /** - * Set the latitude degrees of Position - * - * @param latitude the latitude to set - * @throws IllegalArgumentException If specified latitude value is out of - * range 0..90 degrees. - */ - public void setLatitude(double latitude) { - if (latitude < 0 || latitude > 90) { - throw new IllegalArgumentException( - "Latitude out of bounds 0..90 degrees"); - } - this.latitude = latitude; - } - - /** - * Set the longitude degrees of Position - * - * @param longitude the longitude to set - * @throws IllegalArgumentException If specified longitude value is out of - * range 0..180 degrees. - */ - public void setLongitude(double longitude) { - if (longitude < 0 || longitude > 180) { - throw new IllegalArgumentException( - "Longitude out of bounds 0..180 degrees"); - } - this.longitude = longitude; - } - - /** - * Set the hemisphere of longitude (East/West). - * - * @param lonhem The hemisphere to set - * @throws IllegalArgumentException If specified hemisphere is other than - * EAST or WEST. - */ - public void setLonHemisphere(CompassPoint lonhem) { - if (CompassPoint.EAST.equals(lonhem) - || CompassPoint.WEST.equals(lonhem)) { - this.lonhem = lonhem; - } else { - throw new IllegalArgumentException( - "Valid hemisphere for longitude is E or W"); - } - } - - /* - * (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("["); - sb.append(String.format("%02.04f", getLatitude())); - sb.append(" "); - sb.append(getLatHemisphere().toChar()); - sb.append(", "); - sb.append(String.format("%03.04f", getLongitude())); - sb.append(" "); - sb.append(getLonHemisphere().toChar()); - sb.append(", "); - sb.append(getAltitude()); - sb.append(" m]"); - return sb.toString(); - } - - /** - * Convenience method for creating a waypoint based in the Position. - * - * @param id Waypoint ID or name - * @return the created Waypoint - */ - public Waypoint toWaypoint(String id) { - return new Waypoint(id, getLatitude(), getLatHemisphere(), - getLongitude(), getLonHemisphere()); - } - - /** - * Haversine formulae, implementation based on example at codecodex. - * - * @param lat1 Origin latitude - * @param lon1 Origin longitude - * @param lat2 Destination latitude - * @param lon2 Destination longitude - * @return Distance in meters - */ - private double haversine(double lat1, double lon1, double lat2, double lon2) { - - // Meridional Earth radius - // final double earthRadius = 6367.4491; - // a bit tweaked radius seems to produce more accurate results..? - final double earthRadius = 6366.70702; - - double dLat = Math.toRadians(lat2 - lat1); - double dLon = Math.toRadians(lon2 - lon1); - - double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) - + Math.cos(Math.toRadians(lat1)) - * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2) - * Math.sin(dLon / 2); - - double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - - double result = earthRadius * c * 1000; - - return result; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/RouteType.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/RouteType.java deleted file mode 100644 index 6f06d463b16..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/RouteType.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * RouteType.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * Defines the supported route types. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.RTESentence - */ -public enum RouteType { - - /** - * Active route: complete, all waypoints in route order. - */ - ACTIVE('c'), - - /** - * Working route: the waypoint you just left, the waypoint you're heading to - * and then all the rest. - */ - WORKING('w'); - - private final char chr; - - private RouteType(char c) { - chr = c; - } - - /** - * Get the corresponding char indicator of enum. - * - * @return Char - */ - public char toChar() { - return chr; - } - - /** - * Get the char indicator corresponding to enum. - * - * @param ch Char - * @return ReturnType corresponding to specified char. - */ - public RouteType valueOf(char ch) { - for (RouteType type : values()) { - if (type.toChar() == ch) { - return type; - } - } - return valueOf(String.valueOf(ch)); - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/SatelliteInfo.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/SatelliteInfo.java deleted file mode 100644 index 5b930769f2d..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/SatelliteInfo.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * SatelliteInfo.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * SatelliteInfo represents the information about a single GPS satellite - * vehicle. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.GSVSentence - */ -public class SatelliteInfo { - - private String id; - private int elevation; - private int azimuth; - private int noise; - - /** - * Creates a new instance of SatelliteInfo - * - * @param id Satellite ID - * @param elevation Current elevation of the satellite - * @param azimuth Current azimuth of the satellite - * @param noise Current noise ratio of the satellite signal - */ - public SatelliteInfo(String id, int elevation, int azimuth, int noise) { - this.id = id; - this.elevation = elevation; - this.azimuth = azimuth; - this.noise = noise; - } - - /** - * Get satellite azimuth, in degrees from true north (0..359°). - * - * @return azimuth value - */ - public int getAzimuth() { - return azimuth; - } - - /** - * Get satellite elevation, in degrees (max. 90°). - * - * @return elevation value - */ - public int getElevation() { - return elevation; - } - - /** - * Get the ID of satellite vehicle, for example "05". - * - * @return ID String - */ - public String getId() { - return id; - } - - /** - * Get satellite the signal noise ratio, in dB (0-99 dB). - * - * @return Noise ratio - */ - public int getNoise() { - return noise; - } - - /** - * Set satellite azimuth, in degrees from true north (0..359°). - * - * @param azimuth the azimuth to set - * @throws IllegalArgumentException If value is out of bounds 0..360 deg. - */ - public void setAzimuth(int azimuth) { - if (azimuth < 0 || azimuth > 360) { - throw new IllegalArgumentException("Value out of bounds 0..360 deg"); - } - this.azimuth = azimuth; - } - - /** - * Set satellite elevation, in degrees (max. 90°). - * - * @param elevation the elevation to set - * @throws IllegalArgumentException If value is out of bounds 0..90 deg. - */ - public void setElevation(int elevation) { - if (elevation < 0 || elevation > 90) { - throw new IllegalArgumentException("Value out of bounds 0..90 deg"); - } - this.elevation = elevation; - } - - /** - * Set the ID of satellite vehicle, for example "05". - * - * @param id the id to set - */ - public void setId(String id) { - this.id = id; - } - - /** - * Set the satellite signal noise ratio, in dB (0-99 dB). - * - * @param noise the noise to set - * @throws IllegalArgumentException If value is out of bounds 0..99 dB. - */ - public void setNoise(int noise) { - if (noise < 0 || noise > 99) { - throw new IllegalArgumentException("Value out of bounds 0..99 dB"); - } - this.noise = noise; - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Time.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Time.java deleted file mode 100644 index 8551829d553..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Time.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Time.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -/** - * Represents a time of day in 24-hour clock, i.e. the UTC time used as default - * in NMEA 0183. Transmitted by - * {@link net.sf.marineapi.nmea.sentence.TimeSentence}. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.sentence.TimeSentence - * @see net.sf.marineapi.nmea.util.Date - */ -public class Time { - - // hour of day - private int hour = 0; - // minute of hour - private int minutes = 0; - // seconds of a minute, may include decimal sub-second in some sentences - private double seconds = 0.0; - - /** - * Creates a new instance of Time using the current system - * time. - */ - public Time() { - GregorianCalendar c = new GregorianCalendar(); - this.hour = c.get(Calendar.HOUR); - this.minutes = c.get(Calendar.MINUTE); - this.seconds = c.get(Calendar.SECOND); - } - - /** - * Creates a new instance of Time. - * - * @param hour Hour of day - * @param min Minute of hour - * @param sec Second of minute - */ - public Time(int hour, int min, double sec) { - setHour(hour); - setMinutes(min); - setSeconds(sec); - } - - /* - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (obj instanceof Time) { - Time d = (Time) obj; - if (d.getHour() == this.hour && d.getMinutes() == this.minutes - && d.getSeconds() == this.seconds) { - return true; - } - } - return false; - } - - /** - * Get the hour of day. - * - * @return the hour - */ - public int getHour() { - return hour; - } - - /** - * Get time as milliseconds since beginning of day. - * - * @return Milliseconds - */ - public long getMilliseconds() { - long m = (long) Math.floor(getSeconds()) * 1000; - m += getMinutes() * 60 * 1000; - m += getHour() * 3600 * 1000; - return m; - } - - /** - * Get the minute of hour. - * - * @return the minute - */ - public int getMinutes() { - return minutes; - } - - /** - * Get the second of minute. - * - * @return the second - */ - public double getSeconds() { - return seconds; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - String s = String.format("%02d%02d%02f", hour, minutes, seconds); - return s.hashCode(); - } - - /** - * Set the hour of day. - * - * @param hour the hour to set - * @throws IllegalArgumentException If hour value out of bounds 0..23 - */ - public void setHour(int hour) { - if (hour < 0 || hour > 23) { - throw new IllegalArgumentException( - "Valid hour value is between 0..23"); - } - this.hour = hour; - } - - /** - * Set the minute of hour. - * - * @param minutes the minute to set - * @throws IllegalArgumentException If minutes value out of bounds 0..59 - */ - public void setMinutes(int minutes) { - if (minutes < 0 || minutes > 59) { - throw new IllegalArgumentException( - "Valid minutes value is between 0..59"); - } - this.minutes = minutes; - } - - /** - * Set seconds of minute. - * - * @param seconds the seconds to set - * @throws IllegalArgumentException If seconds value out of bounds 0..59 - */ - public void setSeconds(double seconds) { - if (seconds < 0 || seconds > 59.999) { - throw new IllegalArgumentException( - "Invalid value for second (0..59)"); - } - this.seconds = seconds; - } - - /** - * Set the time values from specified {@link java.util.Date}. The date - * information of is ignored, only hours, minutes and seconds are relevant. - * - * @param d Date - */ - public void setTime(Date d) { - GregorianCalendar cal = new GregorianCalendar(); - cal.setTime(d); - setHour(cal.get(Calendar.HOUR_OF_DAY)); - setMinutes(cal.get(Calendar.MINUTE)); - setSeconds(cal.get(Calendar.SECOND)); - } - - /** - * Convert to {@link java.util.Date}. - * - * @param d Date that defines year, month and day for time. - * @return A Date that is combination of specified Date and Time - */ - public Date toDate(Date d) { - GregorianCalendar cal = new GregorianCalendar(); - cal.setTime(d); - cal.set(Calendar.HOUR, getHour()); - cal.set(Calendar.MINUTE, getMinutes()); - cal.set(Calendar.SECOND, (int) Math.floor(getSeconds())); - return cal.getTime(); - } - - /* - * (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - String ptr = "%02d:%02d:%02.03f"; - return String.format(ptr, getHour(), getMinutes(), getSeconds()); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Units.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Units.java deleted file mode 100644 index 90c80ab34f0..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Units.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Units.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -/** - * Defines the supported units of measure. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public enum Units { - - /** Temperature in degrees Celsius (centigrade) */ - CELSIUS('C'), - - /** Depth in fathoms */ - FATHOMS('F'), - - /** Length in feet */ - FEET('f'), - - /** Speed in kilometers per hour */ - KMH('K'), - - /** Speed in knots (nautical miles per hour) */ - KNOT('N'), - - /** Length in meter */ - METER('M'); - - private char ch; - - private Units(char c) { - ch = c; - } - - /** - * Returns the corresponding char constant. - * - * @return Char indicator of enum - */ - public char toChar() { - return ch; - } - - /** - * Get the enum corresponding to specified char. - * - * @param ch Char indicator for unit - * @return Units enum - */ - public static Units valueOf(char ch) { - for (Units u : values()) { - if (u.toChar() == ch) { - return u; - } - } - return valueOf(String.valueOf(ch)); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Waypoint.java b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Waypoint.java deleted file mode 100644 index 4a2e071e303..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/Waypoint.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Waypoint.java - * Copyright (C) 2010 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.nmea.util; - -import java.util.Date; - -/** - * Waypoint represents a named geographic location. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.nmea.util.Position - */ -public class Waypoint extends Position { - - /** ID or name of the waypoint */ - private String id; - /** Waypoint description */ - private String description = ""; - /** Time stamp */ - private final Date timeStamp = new Date(); - - /** - * Creates a new instance of Waypoint with default WGS84 datum. - * - * @param id Waypoint identifier - * @param lat Latitude degrees of the waypoint position - * @param lath Hemisphere of latitude - * @param lon Longitude degrees of waypoint position - * @param lonh Hemisphere of longitude - */ - public Waypoint(String id, double lat, CompassPoint lath, double lon, - CompassPoint lonh) { - - super(lat, lath, lon, lonh); - this.id = id; - } - - /** - * Creates a new instance of Waypoint with explicitly specified datum. - * - * @param id Waypoint identifier - * @param lat Latitude degrees of the waypoint position - * @param lath Hemisphere of latitude - * @param lon Longitude degrees of waypoint position - * @param lonh Hemisphere of longitude - * @param datum Position datum, i.e. the coordinate system. - */ - public Waypoint(String id, double lat, CompassPoint lath, double lon, - CompassPoint lonh, Datum datum) { - - super(lat, lath, lon, lonh, datum); - this.id = id; - } - - /** - * Gets the waypoint description/comment. - * - * @return the description - */ - public String getDescription() { - return description; - } - - /** - * Get id of Waypoint - * - * @return id - */ - public String getId() { - return this.id; - } - - /** - * Returns the time stamp when the Waypoint was created. - * - * @return Date - */ - public Date getTimeStamp() { - return timeStamp; - } - - /** - * Sets the waypoint description. - * - * @param description the description to set - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Set the id of Waypoint - * - * @param id the id to set - */ - public void setId(String id) { - this.id = id; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/package.html b/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/package.html deleted file mode 100644 index 83405f5e681..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/nmea/util/package.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - Contains utilities and helper classes for handling the data extracted from - NMEA sentences. - - \ No newline at end of file diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/AbstractProvider.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/AbstractProvider.java deleted file mode 100644 index b9248536f81..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/AbstractProvider.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * AbstractProvider.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.sf.marineapi.nmea.event.SentenceEvent; -import net.sf.marineapi.nmea.event.SentenceListener; -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.provider.event.ProviderEvent; -import net.sf.marineapi.provider.event.ProviderListener; - -/** - * Abstract base class for providers. Defines methods that all providers must - * implement and provides general services for capturing and validating the - * required sentences. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public abstract class AbstractProvider implements - SentenceListener { - - private SentenceReader reader; - private List events = new ArrayList(); - private List> listeners = new ArrayList>(); - - /** - * Creates a new instance of AbstractProvider. - * - * @param reader Sentence reader to be used as data source - * @param ids Types of sentences to capture for creating provider events - */ - public AbstractProvider(SentenceReader reader, String... ids) { - this.reader = reader; - for (String id : ids) { - reader.addSentenceListener(this, id); - } - } - - /** - * Creates a new instance of AbstractProvider. - * - * @param reader Sentence reader to be used as data source - * @param ids Types of sentences to capture for creating provider events - */ - public AbstractProvider(SentenceReader reader, SentenceId... ids) { - this.reader = reader; - for (SentenceId id : ids) { - reader.addSentenceListener(this, id); - } - } - - /** - * Inserts a listener to provider. - * - * @param listener Listener to add - */ - public void addListener(ProviderListener listener) { - listeners.add(listener); - } - - /** - * Creates a ProviderEvent of type T. - * - * @return Created event, or null if failed. - */ - protected abstract T createProviderEvent(); - - /** - * Dispatch the TPV event to all listeners. - * - * @param event TPVUpdateEvent to dispatch - */ - private void fireProviderEvent(T event) { - for (ProviderListener listener : listeners) { - listener.providerUpdate(event); - } - } - - /** - * Returns the collected sentences. - * - * @return List of sentences. - */ - protected final List getSentences() { - List s = new ArrayList(); - for (SentenceEvent e : events) { - s.add(e.getSentence()); - } - return s; - } - - /** - * Tells if the provider has captured all the specified sentences. - * - * @param id Sentence type IDs to look for. - * @return True if all specified IDs match the captured sentences. - */ - protected final boolean hasAll(String... id) { - for (String s : id) { - if (!hasOne(s)) { - return false; - } - } - return true; - } - - /** - * Tells if the provider has captured at least one of the specified - * sentences. - * - * @param id Sentence type IDs to look for, in prioritized order. - * @return True if any of the specified IDs matches the type of at least one - * captured sentences. - */ - protected final boolean hasOne(String... id) { - List ids = Arrays.asList(id); - for (Sentence s : getSentences()) { - if (ids.contains(s.getSentenceId())) { - return true; - } - } - return false; - } - - /** - * Tells if provider has captured the required sentences for creating new - * ProviderEvent. - * - * @return true if ready to create ProviderEvent, otherwise false. - */ - protected abstract boolean isReady(); - - /** - * Tells if the captured sentence events contain valid data to be dispatched - * to ProviderListeners. - * - * @return true if valid, otherwise false. - */ - protected abstract boolean isValid(); - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingPaused() - */ - public void readingPaused() { - // nothing - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingStarted() - */ - public void readingStarted() { - reset(); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#readingStopped() - */ - public void readingStopped() { - reset(); - reader.removeSentenceListener(this); - } - - /** - * Removes the specified listener from provider. - * - * @param listener Listener to remove - */ - public void removeListener(ProviderListener listener) { - listeners.remove(listener); - } - - /** - * Clears the list of collected events. - */ - private void reset() { - events.clear(); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.nmea.event.SentenceListener#sentenceRead( - * net.sf.marineapi.nmea.event.SentenceEvent) - */ - public void sentenceRead(SentenceEvent event) { - events.add(event); - if (isReady()) { - if (validate()) { - T pEvent = createProviderEvent(); - fireProviderEvent(pEvent); - } - reset(); - } - } - - /** - * Validates the collected sentences by checking the ages of each sentence - * and then by calling {@link #isValid()}. If extending implementation has - * no validation criteria, it should return always true. - * - * @return true if valid, otherwise false - */ - private boolean validate() { - long now = System.currentTimeMillis(); - for (SentenceEvent se : events) { - long age = now - se.getTimeStamp(); - if (age > 1000) { - return false; - } - } - return isValid(); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/GSVProvider.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/GSVProvider.java deleted file mode 100644 index 05abd7e8707..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/GSVProvider.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * GSVProvider.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider; - -import java.util.ArrayList; -import java.util.List; - -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.nmea.sentence.GSASentence; -import net.sf.marineapi.nmea.sentence.GSVSentence; -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.util.SatelliteInfo; -import net.sf.marineapi.provider.event.GSVEvent; - -/** - * GSVProvider collects GPS satellite information from sequence of GSV sentences - * and reports all the information in a single event. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class GSVProvider extends AbstractProvider { - - /** - * Creates a new instance of GSVProvider with specified reader. - * - * @param reader Reader to scan for GSV sentences. - */ - public GSVProvider(SentenceReader reader) { - super(reader, "GSA", "GSV"); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#createProviderEvent() - */ - @Override - protected GSVEvent createProviderEvent() { - - GSASentence gsa = null; - List info = new ArrayList(); - - for (Sentence sentence : getSentences()) { - if ("GSA".equals(sentence.getSentenceId())) { - gsa = (GSASentence) sentence; - } else if ("GSV".equals(sentence.getSentenceId())) { - GSVSentence gsv = (GSVSentence) sentence; - info.addAll(gsv.getSatelliteInfo()); - } - } - - return new GSVEvent(this, gsa, info); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#isReady() - */ - @Override - protected boolean isReady() { - - boolean hasFirstGSV = false; - boolean hasLastGSV = false; - - for (Sentence s : getSentences()) { - if ("GSV".equals(s.getSentenceId())) { - GSVSentence gsv = (GSVSentence) s; - if (!hasFirstGSV) { - hasFirstGSV = gsv.isFirst(); - } - if (!hasLastGSV) { - hasLastGSV = gsv.isLast(); - } - } - } - - return hasOne("GSA") && hasFirstGSV && hasLastGSV; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#isValid() - */ - @Override - protected boolean isValid() { - return true; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/HeadingProvider.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/HeadingProvider.java deleted file mode 100644 index c78022a21e8..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/HeadingProvider.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * - */ -package net.sf.marineapi.provider; - -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.nmea.sentence.HeadingSentence; -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.provider.event.HeadingEvent; - -/** - * Heading provider reports the vessel's current heading. Data is captured from - * HDT, HDM or HDG sentences. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.provider.event.HeadingEvent - * @see net.sf.marineapi.provider.event.HeadingListener - */ -public class HeadingProvider extends AbstractProvider { - - - /** - * Creates a new intance of HeadingProvider. - * - * @param reader Reader for capturing heading sentences. - */ - public HeadingProvider(SentenceReader reader) { - super(reader, SentenceId.HDT, SentenceId.HDM, SentenceId.HDG); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#createEvent() - */ - @Override - protected HeadingEvent createProviderEvent() { - for (Sentence s : getSentences()) { - if (s instanceof HeadingSentence) { - return new HeadingEvent(this, (HeadingSentence) s); - } - } - return null; - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#isReady() - */ - @Override - protected boolean isReady() { - return hasOne("HDT", "HDM", "HDG"); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#isValid() - */ - @Override - protected boolean isValid() { - return true; - } - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/TPVProvider.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/TPVProvider.java deleted file mode 100644 index 9f7b8592436..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/TPVProvider.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * TPVProvider.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider; - -import net.sf.marineapi.nmea.io.SentenceReader; -import net.sf.marineapi.nmea.sentence.GGASentence; -import net.sf.marineapi.nmea.sentence.GLLSentence; -import net.sf.marineapi.nmea.sentence.RMCSentence; -import net.sf.marineapi.nmea.sentence.Sentence; -import net.sf.marineapi.nmea.sentence.SentenceId; -import net.sf.marineapi.nmea.util.DataStatus; -import net.sf.marineapi.nmea.util.Date; -import net.sf.marineapi.nmea.util.FaaMode; -import net.sf.marineapi.nmea.util.GpsFixQuality; -import net.sf.marineapi.nmea.util.Position; -import net.sf.marineapi.nmea.util.Time; -import net.sf.marineapi.provider.event.TPVEvent; - -/** - *

    - * Provides Time, Position & Velocity reports from GPS. Data is captured from - * RMC, GGA and GLL sentences. RMC is used for date/time, speed and course. GGA - * is used as primary source for position as it contains also the altitude. When - * GGA is not available, position may be taken from GLL or RMC. If this is the - * case, there is no altitude included in the - * {@link net.sf.marineapi.nmea.util.Position}. GPS data statuses are also - * captured and events are dispatched only when sentences report - * {@link net.sf.marineapi.nmea.util.DataStatus#ACTIVE}. - *

    - * When constructing {@link net.sf.marineapi.provider.event.TPVEvent}, the - * maximum age of captured sentences is 1000 ms, i.e. all sentences are from - * within the default NMEA update rate (1/s). - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.provider.event.TPVListener - * @see net.sf.marineapi.provider.event.TPVEvent - * @see net.sf.marineapi.nmea.io.SentenceReader - */ -public class TPVProvider extends AbstractProvider { - - /** - * Creates a new instance of TPVProvider. - * - * @param reader SentenceReader that provides the required sentences. - */ - public TPVProvider(SentenceReader reader) { - super(reader, SentenceId.RMC, SentenceId.GGA, SentenceId.GLL); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#createProviderEvent() - */ - @Override - protected TPVEvent createProviderEvent() { - Position p = null; - Double sog = null; - Double cog = null; - Date d = null; - Time t = null; - FaaMode mode = null; - GpsFixQuality fix = null; - - for (Sentence s : getSentences()) { - if (s instanceof RMCSentence) { - RMCSentence rmc = (RMCSentence) s; - sog = rmc.getSpeed(); - cog = rmc.getCourse(); - d = rmc.getDate(); - t = rmc.getTime(); - mode = rmc.getMode(); - if (p == null) { - p = rmc.getPosition(); - } - } else if (s instanceof GGASentence) { - // Using GGA as primary position source as it contains both - // position and altitude - GGASentence gga = (GGASentence) s; - p = gga.getPosition(); - fix = gga.getFixQuality(); - } else if (s instanceof GLLSentence && p == null) { - GLLSentence gll = (GLLSentence) s; - p = gll.getPosition(); - } - } - - return new TPVEvent(this, p, sog, cog, d, t, mode, fix); - } - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#isReady() - */ - @Override - protected boolean isReady() { - return hasOne("RMC") && hasOne("GGA", "GLL"); - } - - - /* - * (non-Javadoc) - * @see net.sf.marineapi.provider.AbstractProvider#isValid() - */ - @Override - protected boolean isValid() { - - for (Sentence s : getSentences()) { - - if (s instanceof RMCSentence) { - DataStatus ds = ((RMCSentence) s).getStatus(); - FaaMode gm = ((RMCSentence) s).getMode(); - if (DataStatus.VOID.equals(ds) || FaaMode.NONE.equals(gm)) { - return false; - } - } else if (s instanceof GGASentence) { - GpsFixQuality fq = ((GGASentence) s).getFixQuality(); - if (GpsFixQuality.INVALID.equals(fq)) { - return false; - } - } else if (s instanceof GLLSentence) { - DataStatus ds = ((GLLSentence) s).getStatus(); - if (DataStatus.VOID.equals(ds)) { - return false; - } - } - } - - return true; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/GSVEvent.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/GSVEvent.java deleted file mode 100644 index 3cdc1aab508..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/GSVEvent.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * GSVEvent.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider.event; - -import java.util.List; - -import net.sf.marineapi.nmea.sentence.GSASentence; -import net.sf.marineapi.nmea.util.SatelliteInfo; - -/** - * GSVEvent contains the satellite information collected by - * {@link net.sf.marineapi.provider.GSVProvider}. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public class GSVEvent extends ProviderEvent { - - private static final long serialVersionUID = -5243047395130051907L; - - private GSASentence gsa; - private List info; - - /** - * @param source - */ - public GSVEvent(Object source, GSASentence gsa, List info) { - super(source); - this.gsa = gsa; - this.info = info; - } - - /** - * Returns the satellite information. - * - * @return List of SatelliteInfo objects. - */ - public List getSatelliteInfo() { - return this.info; - } - - /** - * @return - */ - public double getHDOP() { - return gsa.getHorizontalDOP(); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/GSVListener.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/GSVListener.java deleted file mode 100644 index c0081f21373..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/GSVListener.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * GSVListener.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider.event; - -/** - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface GSVListener extends ProviderListener { - - /** - * Invoked when new satellite data is available. - */ - public void providerUpdate(GSVEvent event); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/HeadingEvent.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/HeadingEvent.java deleted file mode 100644 index 11e9161cdbb..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/HeadingEvent.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * HeadingEvent.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider.event; - -import net.sf.marineapi.nmea.sentence.HeadingSentence; - -/** - * HeadingProvider event, reports the current magnetic/true heading of vessel in - * degrees. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.provider.HeadingProvider - */ -public class HeadingEvent extends ProviderEvent { - - private static final long serialVersionUID = 5706774741081575448L; - private double heading; - private boolean isTrue; - - /** - * @param source - */ - public HeadingEvent(Object source, HeadingSentence s) { - super(source); - heading = s.getHeading(); - isTrue= s.isTrue(); - } - - /** - * Returns the current heading. - * - * @return Heading in degrees. - */ - public double getHeading() { - return heading; - } - - /** - * Tells if the heading is relative to true or magnetic north. - * - * @return true if true heading, otherwise false (magnetic). - */ - public boolean isTrue() { - return isTrue; - } - - /* - * (non-Javadoc) - * @see java.util.EventObject#toString() - */ - public String toString() { - return "[" + getHeading() + ", " + (isTrue() ? "T" : "M") + "]"; - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/HeadingListener.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/HeadingListener.java deleted file mode 100644 index d8fc07692c3..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/HeadingListener.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * HeadingListener.java - * Copyright (C) 2012 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider.event; - -/** - * Listener interface for {@link net.sf.marineapi.provider.HeadingProvider}. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public interface HeadingListener extends ProviderListener { - - /* - * (non-Javadoc) - * - * @see - * net.sf.marineapi.provider.event.ProviderListener#providerUpdate(net.sf - * .marineapi.provider.event.ProviderEvent) - */ - public void providerUpdate(HeadingEvent evt); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/ProviderEvent.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/ProviderEvent.java deleted file mode 100644 index 877c6276dc8..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/ProviderEvent.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * ProviderEvent.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider.event; - -import java.util.EventObject; - -/** - * Abstract base class for provider events. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public abstract class ProviderEvent extends EventObject { - - private static final long serialVersionUID = -5207967682036248721L; - - /** - * Constructor - * - * @param source - */ - public ProviderEvent(Object source) { - super(source); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/ProviderListener.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/ProviderListener.java deleted file mode 100644 index 6b0a68e6b0e..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/ProviderListener.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * ProviderListener.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider.event; - -import java.util.EventListener; - -/** - * Base interface for provider listeners. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - */ -public abstract interface ProviderListener extends - EventListener { - - /** - * Invoked when provider has new data available. - * - * @param evt ProviderEvent object - */ - void providerUpdate(T evt); - -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/TPVEvent.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/TPVEvent.java deleted file mode 100644 index 4159a8c817c..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/TPVEvent.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * TPVEvent.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider.event; - -import net.sf.marineapi.nmea.util.Date; -import net.sf.marineapi.nmea.util.FaaMode; -import net.sf.marineapi.nmea.util.GpsFixQuality; -import net.sf.marineapi.nmea.util.Position; -import net.sf.marineapi.nmea.util.Time; - -/** - * GPS time/position/velocity report with current position, altitude, speed, - * course and a time stamp. Notice that altitude may be missing, depending on - * the source sentence of position (only - * {@link net.sf.marineapi.nmea.sentence.GGASentence} contains altitude). - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.provider.TPVProvider - * @see net.sf.marineapi.provider.event.TPVListener - */ -public class TPVEvent extends ProviderEvent implements Cloneable { - - private static final long serialVersionUID = 1L; - private Double course; - private Date date; - private Position position; - private Double speed; - private Time time; - private FaaMode mode; - private GpsFixQuality fix; - - /** - * Creates a new instance of TPVEvent. - * - * @param source Source object of event - */ - public TPVEvent(Object source, Position p, double sog, double cog, Date d, - Time t, FaaMode m, GpsFixQuality fq) { - super(source); - position = p; - speed = sog; - course = cog; - date = d; - time = t; - mode = m; - fix = fq; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#clone() - */ - @Override - public TPVEvent clone() { - return new TPVEvent(getSource(), position, speed, course, date, time, - mode, fix); - } - - /** - * Returns the current (true) course over ground. - * - * @return the course - */ - public Double getCourse() { - return course; - } - - /** - * Returns the date. - * - * @return Date - */ - public Date getDate() { - return date; - } - - /** - * Returns the current GPS fix quality. - * - * @return GpsFixQuality - */ - public GpsFixQuality getFixQuality() { - return fix; - } - - /** - * Returns the current FAA operating mode of GPS receiver. - * - * @return FaaMode - */ - public FaaMode getMode() { - return mode; - } - - /** - * Returns the current position. - * - * @return Position - */ - public Position getPosition() { - return position; - } - - /** - * Returns the current speed over ground, in km/h. - * - * @return the speed - */ - public Double getSpeed() { - return speed; - } - - /** - * Returns the time. - * - * @return Time - */ - public Time getTime() { - return time; - } - - /* - * (non-Javadoc) - * @see java.util.EventObject#toString() - */ - @Override - public String toString() { - String ptr = "t[%s %s] p%s v[%.01f, %.01f]"; - return String.format(ptr, date, time, position, speed, course); - } -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/TPVListener.java b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/TPVListener.java deleted file mode 100644 index 63935ff7388..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/TPVListener.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * TPVListener.java - * Copyright (C) 2011 Kimmo Tuukkanen - * - * This file is part of Java Marine API. - * - * - * Java Marine API is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Java Marine API is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Java Marine API. If not, see . - */ -package net.sf.marineapi.provider.event; - -/** - * Listener interface for GPS time/position/velocity events. - * - * @author Kimmo Tuukkanen - * @version $Revision$ - * @see net.sf.marineapi.provider.TPVProvider - * @see net.sf.marineapi.provider.event.TPVEvent - */ -public interface TPVListener extends ProviderListener { - - /** - * Invoked when fresh time/position/velocity report is available, typically - * once per second. - * - * @param evt TPVEvent - */ - void providerUpdate(TPVEvent evt); -} diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/package.html b/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/package.html deleted file mode 100644 index ed4c2f91f40..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/event/package.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Contains event classes and listener interfaces for Providers. - - \ No newline at end of file diff --git a/java/net.sf.marineapi/src/net/sf/marineapi/provider/package.html b/java/net.sf.marineapi/src/net/sf/marineapi/provider/package.html deleted file mode 100644 index 8896c45eb31..00000000000 --- a/java/net.sf.marineapi/src/net/sf/marineapi/provider/package.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - -

    - High-level APIs that provide data value updates for selected measurements. - - \ No newline at end of file diff --git a/java/pom.xml b/java/pom.xml index bde27680a03..efe12a6d59c 100755 --- a/java/pom.xml +++ b/java/pom.xml @@ -80,8 +80,6 @@ com.sap.sailing.freg.resultimport org.openqa.selenium.osgi com.sap.sailing.monitoring - com.sap.sailing.nmeaconnector - net.sf.marineapi com.sap.sailing.simulator com.sap.sailing.server.trackfiles com.sap.sailing.feature.runtime @@ -103,7 +101,6 @@ com.sap.sailing.domain.racelogtrackingadapter.test com.sap.sailing.xmlexport.test com.sap.sailing.xrr.resultimport.test - net.sf.marineapi.test com.sap.sailing.domain.shared.android.test com.sap.sailing.geocoding.test com.sap.sailing.domain.swisstimingadapter.test @@ -130,7 +127,6 @@ com.sap.sailing.manage2sail com.sap.sailing.manage2sail.resultimport com.sap.sailing.manage2sail.resultimport.test - com.sap.sailing.nmeaconnector.test com.sap.sailing.simulator.test com.sap.sailing.server.trackfiles.test com.sap.sailing.selenium.test diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/NetworkHelper.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/NetworkHelper.java index e4cf0882372..67129183e45 100644 --- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/NetworkHelper.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/NetworkHelper.java @@ -36,7 +36,6 @@ public class NetworkHelper { public void executeHttpJsonRequestAsnchronously(HttpRequest request, NetworkHelperSuccessListener successListener, NetworkHelperFailureListener failureListener) { - NetworkRequestTask task = new NetworkRequestTask(successListener, failureListener); task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, request); } @@ -62,13 +61,10 @@ public class NetworkHelper { try { stream = request.execute(); String responseStr = readStream(stream); - response = null; - if (responseStr.length() > 0) { response = new JSONObject(responseStr); } - isSuccess = true; } catch (IOException e) { error = new NetworkHelperError(e.getMessage()); @@ -76,7 +72,6 @@ public class NetworkHelper { error = new NetworkHelperError(e.getMessage()); ExLog.e(mContext, TAG, "Failed to parse JSON: " + e.getMessage()); } - return null; } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java index 363b06b57e9..6edd2786fcc 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java @@ -58,13 +58,11 @@ public class CheckinManager { public void callServerAndGenerateCheckinData() { Uri uri = Uri.parse(url); - // TODO: assuming scheme is http, is this valid? String scheme = uri.getScheme(); if (scheme != "http" && scheme != "https") { scheme = "http"; } - final URLData urlData = extractRequestParametersFromUri(uri, scheme); if (urlData == null) { setCheckinData(null); @@ -76,7 +74,6 @@ public class CheckinManager { try { HttpGetRequest getLeaderboardRequest = new HttpGetRequest(new URL(urlData.getLeaderboardUrl), mContext); getLeaderBoardFromServer(urlData, getLeaderboardRequest); - } catch (MalformedURLException e) { ExLog.e(mContext, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e.getMessage()); @@ -115,13 +112,9 @@ public class CheckinManager { private void getLeaderBoardFromServer(final URLData urlData, HttpGetRequest getLeaderboardRequest) { NetworkHelper.getInstance(mContext).executeHttpJsonRequestAsnchronously(getLeaderboardRequest, new NetworkHelper.NetworkHelperSuccessListener() { - @Override public void performAction(JSONObject response) { - // TODO Auto-generated method stub - final String leaderboardName; - try { leaderboardName = response.getString("name"); urlData.getMarkUrl = urlData.hostWithPort + prefs.getServerMarkPath(leaderboardName); @@ -143,9 +136,7 @@ public class CheckinManager { ExLog.e(mContext, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e1.getMessage()); } } - }, new NetworkHelper.NetworkHelperFailureListener() { - @Override public void performAction(NetworkHelper.NetworkHelperError e) { ExLog.e(mContext, TAG, "Failed to get event from API: " + e.getMessage()); diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-v21/themes_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-v21/themes_light.xml index f34bf1ac0c7..0e145bec8c1 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/values-v21/themes_light.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/values-v21/themes_light.xml @@ -5,6 +5,7 @@ @color/light_colorPrimary @color/light_colorPrimaryDark @color/light_colorAccent + @color/light_colorPrimary true diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java index 89447313d3d..ee12f71e00c 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java @@ -73,4 +73,6 @@ public class AppConstants { public final static String INTENT_ACTION_IS_TRACKING = PACKAGE_NAME + "action.is.tracking"; public final static String INTENT_ACTION_IS_TRACKING_EXTRA = PACKAGE_NAME + "action.is.tracking.extra"; + + public final static String GWT_MAP_AND_WIND_CHART_HTML = "gwt/EmbeddedMapAndWindChart.html"; } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java index c8e564edaa2..d7d6569d082 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java @@ -49,4 +49,5 @@ public interface DataStore { UUID getCourseUUID(); void setCourseUUID(UUID uuid); + } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java index 602112949ab..a526fec3b8a 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java @@ -1,12 +1,11 @@ package com.sap.sailing.racecommittee.app.data; import java.io.Serializable; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; +import java.net.MalformedURLException; +import java.util.*; +import android.content.Context; +import android.util.Log; import com.sap.sailing.android.shared.util.CollectionUtils; import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier; import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl; @@ -17,14 +16,18 @@ import com.sap.sailing.domain.base.Mark; import com.sap.sailing.domain.base.SharedDomainFactory; import com.sap.sailing.domain.base.impl.SharedDomainFactoryImpl; import com.sap.sailing.domain.base.racegroup.RaceGroup; +import com.sap.sailing.racecommittee.app.AppConstants; import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier; import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl; +import com.sap.sailing.racecommittee.app.utils.UrlHelper; +import com.sap.sse.common.Util; import com.sap.sse.common.Util.Triple; public enum InMemoryDataStore implements DataStore { INSTANCE; + private static String TAG = InMemoryDataStore.class.getName(); private HashMap eventsById; private HashMap managedRaceById; private HashMap marksById; @@ -170,7 +173,7 @@ public enum InMemoryDataStore implements DataStore { * order to allow for retrieving a managed race with exclusively the information provided by a * SimpleRaceLogIdentifier (which is less than the information provided by a ManagedRaceIdentifier) * - * @param id + * @param escapedId * serialized version of a ManagedRaceIdentifier * @return * corresponding SimpleRaceLogIdentifier @@ -260,4 +263,5 @@ public enum InMemoryDataStore implements DataStore { public void setCourseUUID(UUID uuid) { courseUUID = uuid; } + } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java index 1d4701e43c6..0990cacc4de 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java @@ -242,6 +242,12 @@ public class OfflineDataManager extends DataManager { }); } + @Override + public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, + boolean showMapControls) { + throw new IllegalStateException("No wind map in offline mode."); + } + @Override public LoaderCallbacks>> createPositionLoader( PositionListFragment positionListFragment) { diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java index 11f59e96228..04a391761f3 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java @@ -1,9 +1,12 @@ package com.sap.sailing.racecommittee.app.data; import java.io.Serializable; +import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import java.util.concurrent.Callable; import android.app.LoaderManager.LoaderCallbacks; @@ -11,8 +14,11 @@ import android.content.Context; import android.content.Loader; import android.os.Bundle; +import android.util.Log; import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.services.sending.MessageSendingService; +import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier; +import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.CourseBase; @@ -24,6 +30,8 @@ import com.sap.sailing.domain.base.configuration.DeviceConfiguration; import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier; import com.sap.sailing.domain.base.configuration.RegattaConfiguration; import com.sap.sailing.domain.common.racelog.RaceLogServletConstants; +import com.sap.sailing.racecommittee.app.AppConstants; +import com.sap.sailing.racecommittee.app.AppPreferences; import com.sap.sailing.racecommittee.app.data.clients.LoadClient; import com.sap.sailing.racecommittee.app.data.handlers.CompetitorsDataHandler; import com.sap.sailing.racecommittee.app.data.handlers.CourseBaseHandler; @@ -48,7 +56,9 @@ import com.sap.sailing.racecommittee.app.domain.CoursePosition; import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier; import com.sap.sailing.racecommittee.app.domain.configuration.impl.PreferencesRegattaConfigurationLoader; +import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl; import com.sap.sailing.racecommittee.app.ui.fragments.lists.PositionListFragment; +import com.sap.sailing.racecommittee.app.utils.UrlHelper; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.ControlPointDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseBaseDeserializer; @@ -68,6 +78,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.RegattaConfigurationJ import com.sap.sailing.server.gateway.deserialization.impl.TeamJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.racegroup.impl.RaceGroupDeserializer; +import com.sap.sse.common.Util; /** * Enables accessing of data. @@ -111,8 +122,9 @@ public class OnlineDataManager extends DataManager { // ExLog.i(context, TAG, "getEventsLoader created new loader..."); - return new OnlineDataLoader>(context, new URL(preferences.getServerBaseURL() - + "/sailingserver/events"), parser, handler); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/events", new ArrayList()); + return new OnlineDataLoader>(context, + url, parser, handler); } }, getContext()); } @@ -166,10 +178,11 @@ public class OnlineDataManager extends DataManager { globalConfiguration, RaceGroupDeserializer.create(domainFactory, RegattaConfigurationJsonDeserializer.create())); DataHandler> handler = new ManagedRacesDataHandler(OnlineDataManager.this); - return new OnlineDataLoader>(context, new URL(preferences.getServerBaseURL() - + "/sailingserver/rc/racegroups?" + RaceLogServletConstants.PARAM_COURSE_AREA_FILTER + "=" - + courseAreaId.toString() + "&" + RaceLogServletConstants.PARAMS_CLIENT_UUID + "=" - + MessageSendingService.uuid), parser, handler); + List params = new ArrayList<>(); + params.add(new Util.Pair(RaceLogServletConstants.PARAM_COURSE_AREA_FILTER, courseAreaId.toString())); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_CLIENT_UUID, MessageSendingService.uuid)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/racegroups",params); + return new OnlineDataLoader>(context, url, parser, handler); } }, getContext()); } @@ -191,10 +204,12 @@ public class OnlineDataManager extends DataManager { String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName); String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName); - return new OnlineDataLoader>(context, new URL(preferences.getServerBaseURL() - + "/sailingserver/rc/marks?" + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "=" - + raceGroupName + "&" + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName - + "&" + RaceLogServletConstants.PARAMS_RACE_FLEET_NAME + "=" + fleetName), parser, handler); + List params = new ArrayList<>(); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/marks", params); + return new OnlineDataLoader>(context, url, parser, handler); } }, getContext()); } @@ -218,10 +233,13 @@ public class OnlineDataManager extends DataManager { String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName); String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName); - return new OnlineDataLoader(context, new URL(preferences.getServerBaseURL() - + "/sailingserver/rc/currentcourse?" + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "=" - + raceGroupName + "&" + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName - + "&" + RaceLogServletConstants.PARAMS_RACE_FLEET_NAME + "=" + fleetName), parser, handler); + List params = new ArrayList<>(); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/currentcourse", params); + + return new OnlineDataLoader(context, url, parser, handler); } }, getContext()); } @@ -247,10 +265,12 @@ public class OnlineDataManager extends DataManager { String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName); String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName); - return new OnlineDataLoader>(context, new URL(preferences.getServerBaseURL() - + "/sailingserver/rc/competitors?" + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "=" - + raceGroupName + "&" + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName - + "&" + RaceLogServletConstants.PARAMS_RACE_FLEET_NAME + "=" + fleetName), parser, handler); + List params = new ArrayList<>(); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/competitors", params); + return new OnlineDataLoader>(context, url, parser, handler); } }, getContext()); } @@ -270,8 +290,11 @@ public class OnlineDataManager extends DataManager { String encodedIdentifier = URLEncoder.encode(identifier.getClientIdentifier(), MessageSendingService.charsetName); encodedIdentifier = encodedIdentifier.replace("+", "%20"); - return new OnlineDataLoader(context, new URL(preferences.getServerBaseURL() - + "/sailingserver/rc/configuration?client=" + encodedIdentifier), parser, handler); + List params = new ArrayList<>(); + params.add(new Util.Pair("client", encodedIdentifier)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/configuration", params); + return new OnlineDataLoader(context, + url, parser, handler); } }, getContext()); } @@ -282,4 +305,30 @@ public class OnlineDataManager extends DataManager { // TODO Auto-generated method stub return null; } + + @Override + public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls) { + String url = ""; + // get simple race log identifier + Util.Triple triple = FleetIdentifierImpl.unescape(race.getId()); + SimpleRaceLogIdentifier identifier = new SimpleRaceLogIdentifierImpl(triple.getA(), triple.getB(), triple.getC()); + List params = new ArrayList<>(); + params.add(new Util.Pair("regattaLikeName", identifier.getRegattaLikeParentName())); + params.add(new Util.Pair("raceColumnName", identifier.getRaceColumnName())); + params.add(new Util.Pair("fleetName", identifier.getFleetName())); + params.add(new Util.Pair("eventId", eventId)); + params.add(new Util.Pair("viewShowWindChart", showWindCharts)); + params.add(new Util.Pair("viewShowStreamlets", showStreamlets)); + params.add(new Util.Pair("viewShowSimulation", showSimulation)); + params.add(new Util.Pair("viewShowMapControls", showMapControls)); + + try { + url = UrlHelper.generateUrl(AppPreferences.on(context).getServerBaseURL(), AppConstants.GWT_MAP_AND_WIND_CHART_HTML, params).toString(); + } catch (MalformedURLException e) { + Log.e(TAG, "An error occured while generating the map url: " + e.getMessage()); + } + return url; + } + + } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java index da5f612fb1a..ea356c3090d 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java @@ -149,4 +149,6 @@ public interface ReadonlyDataManager { */ public LoaderCallbacks> createConfigurationLoader(DeviceConfigurationIdentifier identifier, LoadClient callback); + + public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/DependentRaceSpinnerAdapter.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/DependentRaceSpinnerAdapter.java index 9f5dc09c12c..2b0ef51af6c 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/DependentRaceSpinnerAdapter.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/DependentRaceSpinnerAdapter.java @@ -116,7 +116,7 @@ public class DependentRaceSpinnerAdapter implements SpinnerAdapter { @Override public int getViewTypeCount() { - return 2; + return 1; } @Override diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/MainPreferenceFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/MainPreferenceFragment.java index 1311ae7b1e9..941b36b6f74 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/MainPreferenceFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/MainPreferenceFragment.java @@ -30,6 +30,7 @@ public class MainPreferenceFragment extends LoggableFragment implements OnClickL for (int i = 0; i < layout.getChildCount(); i++) { Button button = (Button) layout.getChildAt(i); + button.setTextColor(getResources().getColor(R.color.white)); if (button != null) { button.setOnClickListener(this); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/UrlEditTextPreference.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/UrlEditTextPreference.java index 9298304ec8d..2a5ceb996a8 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/UrlEditTextPreference.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/UrlEditTextPreference.java @@ -32,7 +32,7 @@ public class UrlEditTextPreference extends EditTextPreference { private String normalizeUrl(String url) { // add missing protocol - if (!url.startsWith("http://") && !url.startsWith("https://")) { + if (!url.startsWith("http://") || !url.startsWith("https://")) { url = "http://" + url; } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/UrlHelper.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/UrlHelper.java new file mode 100644 index 00000000000..3fbab1d4029 --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/UrlHelper.java @@ -0,0 +1,19 @@ +package com.sap.sailing.racecommittee.app.utils; + +import android.net.Uri; +import com.sap.sse.common.Util; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +public class UrlHelper { + public static URL generateUrl(String baseURL, String path, List params) throws MalformedURLException { + Uri.Builder builder = Uri.parse(baseURL).buildUpon(); + builder.path(path); + for (Util.Pair param : params){ + builder.appendQueryParameter("" + param.getA(), "" + param.getB()); + } + return new URL(builder.build().toString()); + } +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/WindHelper.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/WindHelper.java index 99b7bdd474f..99f3e0171e4 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/WindHelper.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/WindHelper.java @@ -6,12 +6,12 @@ import android.support.v4.content.LocalBroadcastManager; import android.util.Log; import com.sap.sailing.android.shared.data.http.HttpGetRequest; import com.sap.sailing.android.shared.util.NetworkHelper; -import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier; -import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl; import com.sap.sailing.racecommittee.app.AppConstants; import com.sap.sailing.racecommittee.app.AppPreferences; import com.sap.sailing.racecommittee.app.data.DataManager; import com.sap.sailing.racecommittee.app.data.DataStore; +import com.sap.sailing.racecommittee.app.data.OnlineDataManager; +import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager; import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl; import com.sap.sse.common.Util; @@ -21,22 +21,19 @@ import org.json.JSONObject; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; +import java.util.List; public class WindHelper { private static String TAG = WindHelper.class.getName(); - private final static String GWT_MAP_AND_WIND_CHART_HTML = "/gwt/EmbeddedMapAndWindChart.html"; public static void isTrackedRace(final Context context, final ManagedRace race){ try { Util.Triple triple = FleetIdentifierImpl.unescape(race.getId()); - StringBuilder builder = new StringBuilder(); - builder.append(getBaseUrl(context)); - builder.append("/sailingserver/api/v1/events/"); - builder.append(getEventId(context)); - builder.append("/racestates"); - builder.append("?filterByLeaderboard=" + triple.getA()); - - URL serverUrl = new URL(builder.toString()); + String path = "/sailingserver/api/v1/events/"+ getEventId(context) + "/racestates"; + List params = new ArrayList<>(); + params.add(new Util.Pair("filterByLeaderboard", triple.getA())); + URL serverUrl = UrlHelper.generateUrl(getBaseUrl(context), path, params); HttpGetRequest request = new HttpGetRequest(serverUrl, context); NetworkHelper.getInstance(context).executeHttpJsonRequestAsnchronously(request, new NetworkHelper.NetworkHelperSuccessListener() { @@ -103,22 +100,7 @@ public class WindHelper { } public static String generateMapURL(Context context, ManagedRace race ,boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls){ - StringBuilder builder = new StringBuilder(); - - // get simple race log identifier - Util.Triple triple = FleetIdentifierImpl.unescape(race.getId()); - SimpleRaceLogIdentifier identifier = new SimpleRaceLogIdentifierImpl(triple.getA(), triple.getB(), triple.getC()); - - builder.append(getBaseUrl(context)); - builder.append(GWT_MAP_AND_WIND_CHART_HTML); - builder.append("?regattaLikeName=" + identifier.getRegattaLikeParentName()); - builder.append("&raceColumnName=" + identifier.getRaceColumnName()); - builder.append("&fleetName=" + identifier.getFleetName()); - builder.append("&eventId=" + getEventId(context)); - builder.append("&viewShowWindChart=" + showWindCharts); - builder.append("&viewShowStreamlets=" + showStreamlets); - builder.append("&viewShowSimulation=" + showSimulation); - builder.append("&viewShowMapControls=" + showMapControls); - return builder.toString(); + ReadonlyDataManager dataManager = OnlineDataManager.create(context); + return dataManager.getMapUrl(AppPreferences.on(context).getServerBaseURL(), race, getEventId(context), showWindCharts, showStreamlets, showSimulation, showMapControls); } } diff --git a/pom.xml b/pom.xml index 2babac48203..946b2122559 100755 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,13 @@ mobile + + + with-ios + + ios + + diff --git a/wiki/amazon-ec2.md b/wiki/amazon-ec2.md index be4c7a3a6dc..879e4b290db 100644 --- a/wiki/amazon-ec2.md +++ b/wiki/amazon-ec2.md @@ -48,6 +48,10 @@ MONGODB_PORT=10202 MONGODB_NAME=myspecificevent +#### Setting up a new image (AMI) from scratch (more or less) + +See [here](wiki/creating-ec2-image-from-scratch) + #### Receiving wind from Expedition - To receive and forward wind with an Expedition connector, log into webserver as user trac and switch to $HOME/servers/udpmirror. Start the mirror and forward it to the instance you want. In order to receive wind through the Igtimi connector, this step is not required as the wind data is received directly from the Igtimi server. diff --git a/wiki/creating-ec2-image-from-scratch.md b/wiki/creating-ec2-image-from-scratch.md index 492749002ee..da6aab88d2c 100644 --- a/wiki/creating-ec2-image-from-scratch.md +++ b/wiki/creating-ec2-image-from-scratch.md @@ -2,12 +2,21 @@ I started out with a clean "Amazon Linux AMI 2015.03 (HVM), SSD Volume Type - ami-a10897d6" image from Amazon and added the existing Swap and Home snapshots as new volumes. The root/system volume I left as is, to start with. This requires having access to a user key that can be selected when launching the image. +Enable the EPEL repository by issuing `yum-config-manager --enable epel/x86_64`. + I then did a `yum update` and added the following packages: - httpd - mod_proxy_html - tmux - nfs-utils + - chrony + - libstdc++48.i686 (for Android builds) + - glibc.i686 (for Android builds) + - libzip.i686 (for Android builds) + - telnet + - apachetop + - goaccess Then I created a mount point /home/sailing and copied the following lines from the /etc/fstab file from an existing SL instance: @@ -36,4 +45,54 @@ PermitRootLogin without-password PermitRootLogin Yes ``` -to allow root shell login. \ No newline at end of file +to allow root shell login. + +I copied the JDK7/JDK8 installations from an existing SL instance to /opt. + +I linked /etc/init.d/sailing to /home/sailing/code/configuration/sailing and added the following links to it: + +``` +rc0.d/K10sailing +rc1.d/K10sailing +rc2.d/S95sailing +rc3.d/S95sailing +rc4.d/S95sailing +rc5.d/S95sailing +rc6.d/K10sailing +``` + +Linked /etc/profile.d/sailing.sh to /home/sailing/code/configuration/sailing.sh. As this contains a PATH entry for /opt/amazon and the new image has the Amazon scripts at /opt/aws, I aldo created a symbolic link from /opt/amazon to /opt/aws to let this same path configuration find those scripts under the old and the new images. + +Added the lines + +``` +# number of connections the firewall can track +net.ipv4.ip_conntrac_max = 131072 +``` + +to `/etc/sysctl.conf` in order to increase the number of connections that are possible concurrently. + +Added the following two lines to `/etc/security/limits.conf`: + +``` +* hard nproc unlimited +* hard nofile 65000 +``` + +This increases the maximum number of open files allowed from the default 1024 to a more appropriate 65k. + +Copied the httpd configuration files `/etc/httpd/conf/httpd.conf`, `/etc/httpd/conf.d/000-macros.conf` and the skeletal `/etc/httpd/conf.d/001-events.conf` from an existing server. + +Copied /etc/logrotate.conf from an existing SL instance so that `/var/log/logrotate-target` is used to rotate logs to. + +Instead of having the `ANDROID_HOME` environment variable be set in `/etc/profile` as in the old instances, I moved this statement to the `sailing.sh` script in git at `configuration/sailing.sh` and linked to by `/etc/profile.d/sailing.sh`. For old instances this will set the variable redundantly, as they also have it set by a manually adjusted `/etc/profile`, but this shouldn't hurt. + +Had to fiddle a little with the JDK being used. The default installation has an OpenJDK installed, and the AWS tools depend on it. Therefore, it cannot just be removed. As a result, it's important that `env.sh` has the correct `JAVA_HOME` set (/opt/jdk1.8.0_45, in this case). Otherwise, the OSGi environment won't properly start up. + +To ensure that chronyd is started during the boot sequence, issued the command + +``` +chkconfig chrony on +``` + +which creates the necessary entries in the rc*.d directories. \ No newline at end of file