From 9e02ff51c8b6db88e1a0ea0967db13c1b5f41cc1 Mon Sep 17 00:00:00 2001
From: Tristan Cavelier <tristan.cavelier@tiolive.com>
Date: Thu, 29 Aug 2013 11:16:08 +0200
Subject: [PATCH] Metadata.js check method added

---
 src/jio/core/Metadata.js | 60 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/src/jio/core/Metadata.js b/src/jio/core/Metadata.js
index ee6f402..0af4a4e 100644
--- a/src/jio/core/Metadata.js
+++ b/src/jio/core/Metadata.js
@@ -23,6 +23,20 @@ Metadata.prototype.format = function () {
   return this.update(this._dict);
 };
 
+Metadata.prototype.check = function () {
+  var k;
+  for (k in this._dict) {
+    if (this._dict.hasOwnProperty(k)) {
+      if (k[0] !== '_') {
+        if (!Metadata.checkValue(this._dict[k])) {
+          return false;
+        }
+      }
+    }
+  }
+  return true;
+};
+
 Metadata.prototype.update = function (metadata) {
   var k;
   for (k in metadata) {
@@ -251,4 +265,50 @@ Metadata.normalizeValue = function (value) {
   }
 };
 
+Metadata.checkArray = function (value) {
+  var i;
+  for (i = 0; i < value.length; i += 1) {
+    if (Metadata.isDict(value[i])) {
+      if (!Metadata.checkObject(value[i])) {
+        return false;
+      }
+    } else if (!Metadata.isContent(value[i])) {
+      return false;
+    }
+  }
+  return true;
+};
+
+Metadata.checkObject = function (value) {
+  var i, ok = false;
+  for (i in value) {
+    if (value.hasOwnProperty(i)) {
+      if (Metadata.isContent(value[i])) {
+        if (i === 'content') {
+          ok = true;
+        }
+      } else {
+        return false;
+      }
+    }
+  }
+  if (ok === false) {
+    return false;
+  }
+  return true;
+};
+
+Metadata.checkValue = function (value) {
+  if (Metadata.isContent(value)) {
+    return true;
+  }
+  if (Array.isArray(value)) {
+    return Metadata.checkArray(value);
+  }
+  if (Metadata.isDict(value)) {
+    return Metadata.checkObject(value);
+  }
+  return false;
+};
+
 exports.Metadata = Metadata;
-- 
2.30.9