Package slash.navigation.tcx

Source Code of slash.navigation.tcx.TcxFormat

/*
    This file is part of RouteConverter.

    RouteConverter is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    RouteConverter 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 General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with RouteConverter; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

    Copyright (C) 2007 Christian Pesch. All Rights Reserved.
*/

package slash.navigation.tcx;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import slash.navigation.base.MultipleRoutesFormat;
import slash.navigation.common.NavigationPosition;
import slash.navigation.base.RouteCharacteristics;
import slash.navigation.base.Wgs84Position;
import slash.navigation.base.XmlNavigationFormat;
import slash.navigation.gpx.binding11.WptType;
import slash.navigation.tcx.binding2.HeartRateInBeatsPerMinuteT;

import java.util.List;
import java.util.Set;
import java.util.prefs.Preferences;

import static slash.common.io.Transfer.parseDouble;
import static slash.common.io.Transfer.trim;

/**
* The base of all Training Center Database formats.
*
* @author Christian Pesch
*/

public abstract class TcxFormat extends XmlNavigationFormat<TcxRoute> implements MultipleRoutesFormat<TcxRoute> {
    private static final Preferences preferences = Preferences.userNodeForPackage(TcxFormat.class);

    public String getExtension() {
        return ".tcx";
    }

    public boolean isSupportsMultipleRoutes() {
        return true;
    }

    public boolean isWritingRouteCharacteristics() {
        return true;
    }

    @SuppressWarnings({"unchecked"})
    public <P extends NavigationPosition> TcxRoute createRoute(RouteCharacteristics characteristics, String name, List<P> positions) {
        return new TcxRoute(this, characteristics, name, (List<Wgs84Position>) positions);
    }

    protected Short getHeartBeatRate(Wgs84Position position) {
        if (position != null) {
            WptType wpt = position.getOrigin(WptType.class);
            if (wpt != null) {
                Double heartBeatRate = getHeartBeatRate(wpt);
                if (heartBeatRate != null)
                    return heartBeatRate.shortValue();
            }
            slash.navigation.tcx.binding1.TrackpointT trackpointT1 = position.getOrigin(slash.navigation.tcx.binding1.TrackpointT.class);
            if (trackpointT1 != null) {
                return trackpointT1.getHeartRateBpm();
            }
            slash.navigation.tcx.binding2.TrackpointT trackpointT2 = position.getOrigin(slash.navigation.tcx.binding2.TrackpointT.class);
            if (trackpointT2 != null) {
                HeartRateInBeatsPerMinuteT heartRateBpm = trackpointT2.getHeartRateBpm();
                if (heartRateBpm != null)
                    return heartRateBpm.getValue();
            }
        }
        return null;
    }

    private Double getHeartBeatRate(WptType wptType) {
        Double heartBeatRate = null;
        if (wptType.getExtensions() != null) {
            for (Object any : wptType.getExtensions().getAny()) {
                if (any instanceof Element) {
                    Element extension = (Element) any;
                    if ("TrackPointExtension".equals(extension.getLocalName())) {
                        for (int i = 0; i < extension.getChildNodes().getLength(); i++) {
                            Node hr = extension.getChildNodes().item(i);
                            if ("hr".equals(hr.getLocalName()))
                                heartBeatRate = parseDouble(hr.getTextContent());
                        }
                    }
                }
            }
        }
        return heartBeatRate;
    }

    public int getMaximumRouteNameLength() {
        return preferences.getInt("maximumRouteNameLength", 15);
    }

    protected String createUniqueRouteName(String routeName, Set<String> routeNames) {
        String result = asRouteName(routeName);
        int index = 2;
        while (routeNames.contains(result)) {
            String suffix = " (" + index + ")";
            result = asRouteName(trim(routeName, getMaximumRouteNameLength() - suffix.length()) + suffix);
            index++;
        }
        return result;
    }
}
TOP

Related Classes of slash.navigation.tcx.TcxFormat

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.