GarminPluginUtils.js
Summary
Garmin.Device A place-holder for Garmin device information.
Source:
Hosted Distribution
Source Control
Version: 1.0
Author: Richard Easterling developer.connect.at.garmin.com
if (Garmin == undefined) var Garmin = {};
Garmin.PluginUtils = function(){};
Garmin.PluginUtils = {
initialize: function() {
},
parseDeviceXml: function(garminPlugin, getDetailedDeviceData) {
var xmlDevicesString = garminPlugin.getDevicesXml();
var xmlDevicesDoc = Garmin.XmlConverter.toDocument(xmlDevicesString);
var deviceList = xmlDevicesDoc.getElementsByTagName("Device");
var devices = new Array();
var numDevices = deviceList.length;
for( var i=0; i < numDevices; i++ ) {
var displayName = deviceList[i].getAttribute("DisplayName");
var deviceNumber = parseInt( deviceList[i].getAttribute("Number") );
var deviceDescriptionDoc = null;
if (getDetailedDeviceData) {
var deviceDescriptionXml = garminPlugin.getDeviceDescriptionXml(deviceNumber);
deviceDescriptionDoc = Garmin.XmlConverter.toDocument(deviceDescriptionXml);
}
devices.push(Garmin.PluginUtils._createDeviceFromXml(displayName, deviceNumber, deviceDescriptionDoc));
}
return devices;
},
_createDeviceFromXml: function(displayName, deviceNumber, deviceDescriptionDoc) {
var device = new Garmin.Device(displayName, deviceNumber);
if(deviceDescriptionDoc) {
var partNumber = deviceDescriptionDoc.getElementsByTagName("PartNumber")[0].childNodes[0].nodeValue;
var softwareVersion = deviceDescriptionDoc.getElementsByTagName("SoftwareVersion")[0].childNodes[0].nodeValue;
var description = deviceDescriptionDoc.getElementsByTagName("Description")[0].childNodes[0].nodeValue;
var id = deviceDescriptionDoc.getElementsByTagName("Id")[0].childNodes[0].nodeValue;
device.setPartNumber(partNumber);
device.setSoftwareVersion(softwareVersion);
device.setDescription(description);
device.setId(id);
var dataTypeList = deviceDescriptionDoc.getElementsByTagName("MassStorageMode")[0].getElementsByTagName("DataType");
var numOfDataTypes = dataTypeList.length;
for ( var j = 0; j < numOfDataTypes; j++ ) {
var dataName = dataTypeList[j].getElementsByTagName("Name")[0].childNodes[0].nodeValue;
var dataExt = dataTypeList[j].getElementsByTagName("FileExtension")[0].childNodes[0].nodeValue;
var dataType = new Garmin.DeviceDataType(dataName, dataExt);
var fileList = dataTypeList[j].getElementsByTagName("File");
var numOfFiles = fileList.length;
for ( var k = 0; k < numOfFiles; k++ ) {
var transferDir = fileList[k].getElementsByTagName("TransferDirection")[0].childNodes[0].nodeValue;
if ((transferDir == Garmin.DeviceControl.TRANSFER_DIRECTIONS.read)) {
dataType.setReadAccess(true);
} else if ((transferDir == Garmin.DeviceControl.TRANSFER_DIRECTIONS.write)) {
dataType.setWriteAccess(true);
} else if ((transferDir == Garmin.DeviceControl.TRANSFER_DIRECTIONS.both)) {
dataType.setReadAccess(true);
dataType.setWriteAccess(true);
}
}
device.addDeviceDataType(dataType);
}
}
return device;
},
isDeviceErrorXml: function(error) {
var msg = (typeof(error)=="string") ? error : error.name + ": " + error.message;
return ( (msg.indexOf("<ErrorReport") > 0) );
},
getDeviceErrorMessage: function(error) {
var msg = (typeof(error)=="string") ? error : error.name + ": " + error.message;
var startPos = msg.indexOf("<ErrorReport");
if (startPos>0) {
var endPos = msg.indexOf("</ErrorReport>") + "</ErrorReport>".length;
msg = msg.substring(startPos, endPos);
}
var xmlDoc = Garmin.XmlConverter.toDocument(msg);
var errorMessage = Garmin.PluginUtils._getElementValue(xmlDoc, "Extra");
var sourceFileName = Garmin.PluginUtils._getElementValue(xmlDoc, "SourceFileName");
var sourceFileLine = Garmin.PluginUtils._getElementValue(xmlDoc, "SourceFileLine");
var msg = "";
if (errorMessage) {
msg = errorMessage;
} else {
msg = "Plugin error: ";
if (sourceFileName)
msg += "source: "+sourceFileName;
if (sourceFileLine)
msg += ", line: "+sourceFileLine;
}
return msg;
},
_getElementValue: function(doc, elementName) {
var elementNameNodes = doc.getElementsByTagName(elementName);
var value = (elementNameNodes && elementNameNodes.length>0) ? elementNameNodes[0].childNodes[0].nodeValue : null;
return value;
}
};
Garmin.GpiUtil = function(){};
Garmin.GpiUtil = {
buildMultipleDeviceDownloadsXML: function(descriptionArray) {
if(descriptionArray.length % 2 != 0) {
throw new Error("buildMultipleDeviceDownloadsXML expects even sized array with matching source and destination pairs");
}
var xml =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<DeviceDownload xmlns="http://www.garmin.com/xmlschemas/PluginAPI/v1"\n' +
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n' +
' xsi:schemaLocation="http://www.garmin.com/xmlschemas/PluginAPI/v1 http://www.garmin.com/xmlschemas/GarminPluginAPIV1.xsd">\n';
for(var i=0;i<descriptionArray.length;i+=2) {
var source = descriptionArray[i];
var destination = descriptionArray[i+1];
xml += ' <File Source="'+source+'" Destination="'+destination+'" RegionId="46" />\n';
}
xml += '</DeviceDownload>';
return xml;
},
buildDeviceDownloadXML: function(source, destination) {
return Garmin.GpiUtil.buildMultipleDeviceDownloadsXML([source, destination]);
},
isDestinationValid: function(destination) {
var splitPath = destination.split("/");
var filename = splitPath[splitPath.length-1];
var lengthBefore = filename.length;
var stringAfter = Garmin.GpiUtil.cleanUpFilename(filename);
return(lengthBefore == stringAfter.length);
},
cleanUpFilename: function(filename) {
var result = filename;
var replacement = "";
result = result.stripTags();
result = result.replace(/&/, replacement);
result = result.replace(/[\x21-\x2F]/g, replacement);
result = result.replace(/[\x5B-\x60]/g, replacement);
result = result.replace(/[\x3A-\x40]/g, replacement);
result = result.strip();
return result;
}
};
Documentation generated by
JSDoc on Wed Feb 27 11:54:53 2008