return Q.Promise(function(resolve, reject) { try { log.verbose(TAG, 'parse'); log.info(TAG, 'parsing %j', val); self.base.parse(val); var bh = new self.base.bitsHelper(val, 96); if (bh.bits.slice(0, 8) !== header) throw new Error(val + ' is not a valid GSRN.'); self.parts.Header = bh.bits.slice(0, 8); self.parts.Filter = parseInt(bh.bits.slice(8, 11), 2); self.parts.Partition = parseInt(bh.bits.slice(11, 14), 2); var companyPrefixEnd = 14 + partition.bits.company[self.parts.Partition]; var company = parseInt(bh.bits.slice(14, companyPrefixEnd), 2).toString(); company = Array(partition.digits.company[self.parts.Partition] - company.length + 1).join('0') + company; self.parts.CompanyPrefix = company; var reference = parseInt(bh.bits.slice(companyPrefixEnd, companyPrefixEnd + partition.bits.reference[self.parts.Partition]), 2).toString(); reference = Array(partition.digits.reference[self.parts.Partition] - reference.length + 1).join('0') + reference; self.parts.ServiceReference = reference; resolve(self); } catch (e) { log.error(TAG, e); reject(e); } });
return Q.Promise(function(resolve, reject) { try { log.verbose(TAG, 'canParse'); var bh = new self.base.bitsHelper(val, 96); resolve(bh.bits.slice(0, 8) === header); } catch (e) { log.error(TAG, e); reject(e); } });
return Q.Promise(function(resolve, reject) { try { log.verbose(TAG, 'getUri'); self.base.getUri(val); self.parse(val) .then(function(parsed) { resolve('urn:epc:tag:grai:' + parsed.parts.CompanyPrefix + '.' + parsed.parts.AssetType + '.' + parsed.parts.SerialNumber); }); } catch (e) { log.error(TAG, e); reject(e); } });
return Q.Promise(function(resolve, reject) { try { log.verbose(TAG, 'getUri'); self.base.getUri(val); self.parse(val) .then(function(parsed) { resolve('urn:epc:tag:gid:' + parsed.parts.ManagerNumber + '.' + parsed.parts.ObjectClass + '.' + parsed.parts.SerialNumber); }); } catch (e) { log.error(TAG, e); reject(e); } });
return Q.Promise(function(resolve, reject) { try { log.verbose(TAG, 'getUri'); self.base.getUri(val); self.parse(val) .then(function(parsed) { resolve('urn:epc:tag:gsrn:' + parsed.parts.CompanyPrefix + '.' + parsed.parts.ServiceReference); }); } catch (e) { log.error(TAG, e); reject(e); } });
return Q.Promise(function(resolve, reject) { try { log.verbose(TAG, 'parse'); log.info(TAG, 'parsing %j', val); // initialize base self.base.parse(val); // initalize the bit helper var bh = new self.base.bitsHelper(val, 96); // make sure the incoming value is really SGTIN by checking the header if (bh.bits.slice(0, 8) !== header) throw new Error(val + ' is not a valid SGTIN.'); // ok, looks good. parse the stuff we'll need to figure out the rest self.parts.Header = bh.bits.slice(0, 8); self.parts.Filter = parseInt(bh.bits.slice(8, 11), 2); self.parts.Partition = parseInt(bh.bits.slice(11, 14), 2); // find the end of the company portion by calculating the number of bits // and adding it to the starting offset var companyPrefixEnd = 14 + partition.bits.company[self.parts.Partition]; // get the company value from the bits, convert to a string var company = parseInt(bh.bits.slice(14, companyPrefixEnd), 2).toString(); // pad the string with leading zeros to make-up the length according to the calculate length company = Array(partition.digits.company[self.parts.Partition] - company.length + 1).join('0') + company; self.parts.CompanyPrefix = company; var item = parseInt(bh.bits.slice(companyPrefixEnd, companyPrefixEnd + partition.bits.reference[self.parts.Partition]), 2).toString(); item = Array(partition.digits.reference[self.parts.Partition] - item.length + 1).join('0') + item; self.parts.ItemReference = item; self.parts.SerialNumber = parseInt(bh.bits.slice(58), 2); resolve(self); } catch (e) { log.error(TAG, e); reject(e); } });
return Q.Promise(function(resolve, reject) { try { log.verbose(TAG, 'parse'); log.info(TAG, 'parsing %j', val); self.base.parse(val); var bh = new self.base.bitsHelper(val, 96); if (bh.bits.slice(0, 8) !== header) throw new Error(val + ' is not a valid GID.'); self.parts.Header = bh.bits.slice(0, 8); self.parts.ManagerNumber = parseInt(bh.bits.slice(8, 36), 2); self.parts.ObjectClass = parseInt(bh.bits.slice(36, 60), 2); self.parts.SerialNumber = parseInt(bh.bits.slice(60), 2); resolve(self); } catch (e) { log.error(TAG, e); reject(e); } });
value: function() { log.verbose(TAG, 'getName'); return 'GRAI'; }
value: function() { log.verbose(TAG, 'getName'); return 'SGTIN'; }