added radar, cartesian quadrants and cycles retrieval
[tech-radar.git] / src / models / radar.js
diff --git a/src/models/radar.js b/src/models/radar.js
new file mode 100644 (file)
index 0000000..7e48b63
--- /dev/null
@@ -0,0 +1,65 @@
+tr.models.Radar = function() {
+  var self, quadrants;
+
+  quadrants = { I: null, II: null, III: null, IV: null };
+  self = {};
+
+  self.setFirstQuadrant = function (quadrant) {
+    quadrants.I = quadrant;
+  };
+
+  self.setSecondQuadrant = function (quadrant) {
+    quadrants.II = quadrant;
+  };
+
+  self.setThirdQuadrant = function (quadrant) {
+    quadrants.III = quadrant;
+  };
+
+  self.setFourthQuadrant = function (quadrant) {
+    quadrants.IV = quadrant;
+  };
+
+  function allQuadrants() {
+    var all = [];
+
+    for (var p in quadrants) {
+      if (quadrants.hasOwnProperty(p) && quadrants[p] != null) {
+        all.push(quadrants[p]);
+      }
+    }
+
+    return all;
+  }
+
+  function allBlips() {
+    return allQuadrants().reduce(function (blips, quadrant) {
+      return blips.concat(quadrant.blips());
+    }, []);
+  }
+
+  self.cycles = function () {
+    var cycleHash, cycleArray;
+
+    cycleArray = [];
+    cycleHash = {};
+
+    allBlips().forEach(function (blip) {
+      cycleHash[blip.cycle().name()] = blip.cycle();
+    });
+
+    for (var p in cycleHash) {
+      if (cycleHash.hasOwnProperty(p)) {
+        cycleArray.push(cycleHash[p]);
+      }
+    }
+
+    return cycleArray.slice(0);
+  };
+
+  self.quadrants = function () {
+    return quadrants;
+  };
+
+  return self;
+};