Major update: Refactor to rename ContentName to Name. Delete KeyName.js. For the moment, the KeyName class is now in KeyLocator.js.
This is done according to the API notes:
http://sea.remap.ucla.edu:8080/attachments/download/23/lwndn_api-notes_21020830.txt
diff --git a/js/Name.js b/js/Name.js
new file mode 100644
index 0000000..69e3098
--- /dev/null
+++ b/js/Name.js
@@ -0,0 +1,109 @@
+/*
+ * @author: ucla-cs
+ * This class represents a Name
+ */
+
+
+var Name = function Name(_components){
+
+ if( typeof _components == 'string') {
+
+ if(LOG>3)console.log('Content Name String '+_components);
+ this.components = Name.makeBlob(Name.createNameArray(_components));
+ }
+ else if(typeof _components === 'object' && _components instanceof Array ){
+
+ if(LOG>4)console.log('Content Name Array '+_components);
+ this.components = Name.makeBlob(_components);
+
+ }
+ else if(_components==null){
+ this.components =[];
+ }
+ else{
+
+ if(LOG>1)console.log("NO CONTENT NAME GIVEN");
+
+ }
+};
+
+Name.prototype.getName=function(){
+
+ var output = "";
+
+ for(var i=0;i<this.components.length;i++){
+ output+= "/"+ DataUtils.toString(this.components[i]);
+ }
+
+ return output;
+
+};
+
+Name.makeBlob=function(name){
+
+ var blobArrays = new Array(name.length);
+
+ for(var i=0;i<name.length;i++){
+ if(typeof name[i] == 'string')
+ blobArrays[i]= DataUtils.toNumbersFromString( name[i] );
+ else if(typeof name[i] == 'object')
+ blobArrays[i]= name[i] ;
+ else
+ if(LOG>4)console.log('NAME COMPONENT INVALID');
+ }
+
+ return blobArrays;
+};
+
+Name.createNameArray=function(name){
+
+
+ name = unescape(name);
+
+ var array = name.split('/');
+
+
+ if(name[0]=="/")
+ array=array.slice(1,array.length);
+
+ if(name[name.length-1]=="/")
+ array=array.slice(0,array.length-1);
+
+ return array;
+}
+
+
+Name.prototype.from_ccnb = function(/*XMLDecoder*/ decoder) {
+ decoder.readStartElement(this.getElementLabel());
+
+
+ this.components = new Array(); //new ArrayList<byte []>();
+
+ while (decoder.peekStartElement(CCNProtocolDTags.Component)) {
+ this.add(decoder.readBinaryElement(CCNProtocolDTags.Component));
+ }
+
+ decoder.readEndElement();
+};
+
+Name.prototype.to_ccnb = function(/*XMLEncoder*/ encoder) {
+
+ if( this.components ==null )
+ throw new Error("CANNOT ENCODE EMPTY CONTENT NAME");
+
+ encoder.writeStartElement(this.getElementLabel());
+ var count = this.components.length;
+ for (var i=0; i < count; i++) {
+ encoder.writeElement(CCNProtocolDTags.Component, this.components[i]);
+ }
+ encoder.writeEndElement();
+};
+
+Name.prototype.getElementLabel = function(){
+ return CCNProtocolDTags.Name;
+};
+
+Name.prototype.add = function(param){
+ return this.components.push(param);
+};
+