Show:
                        import Ember from "ember";
                        import EmberObjectUtis from "ember-object-utils";
                        import EmptyValidation from "./EmptyValidation";
                        import RegexValidation from "./RegexValidation";
                        import CSVRegexValidation from "./CSVRegexValidation";
                        import CSVDuplicateValidation from "./CSVDuplicateValidation";
                        import DuplicateAcrossRecordsValidation from "./DuplicateAcrossRecordsValidation";
                        import NumberRangeValidation from "./NumberRangeValidation";
                        
                        var ColumnDataValidationsMap = {
                          0 : EmptyValidation,
                          1 : RegexValidation,
                          2 : CSVRegexValidation,
                          3 : CSVDuplicateValidation,
                          4 : DuplicateAcrossRecordsValidation,
                          5 : NumberRangeValidation,
                        };
                        
                        /**
                         * Validation class that goes as 'validation' on column data.
                         *
                         * @class EmberColumnData.ColumnDataValidation
                         * @module ember-column-data
                         * @submodule ember-column-data-validation
                         */
                        var ColumnDataValidation = Ember.Object.extend({
                          init : function() {
                            this._super();
                            this.canBeEmpty();
                          },
                        
                          /**
                           * Array of validations to run. Passed as objects while creating.
                           *
                           * @property validations
                           * @type Array
                           */
                          validations : EmberObjectUtis.hasMany(ColumnDataValidationsMap, "type"),
                        
                          /**
                           * @property validate
                           * @type Boolean
                           * @private
                           */
                          validate : Ember.computed.notEmpty('validations'),
                        
                          /**
                           * Method to validate a value on record.
                           *
                           * @method validateValue
                           * @param {any} value Value to validate.
                           * @param {Class} record Record to validate on.
                           * @param {Array} [validations] Optional override of the validations to run.
                           * @returns {Array} Returns an array with 1st element as a boolean which says whether validations passed or not, 2nd element is the invalid message if it failed.
                           */
                          validateValue : function(value, record, validations) {
                            var invalid = [false, ""];
                            validations = validations || this.get("validations");
                            for(var i = 0; i < validations.length; i++) {
                              var inv = validations[i].validateValue(value, record);
                              if(inv[0]) {
                                invalid = inv;
                                break;
                              }
                            }
                            return invalid;
                          },
                        
                          canBeEmpty : Ember.observer("validations.@each", function() {
                            if(this.get("validations") && !Ember.A(this.get("validations").mapBy("type")).contains(0)) {
                              this.set("mandatory", false);
                              this.get("validations").forEach(function(item) {
                                item.set('canBeEmpty', true);
                              });
                            }
                            else {
                              this.set("mandatory", true);
                            }
                          }),
                        
                          /**
                           * Boolean to denote whether the property is mandatory or not.
                           *
                           * @property mandatory
                           * @type Boolean
                           */
                          mandatory : false,
                        });
                        
                        /**
                         * Column Data Validation Types Map.
                         *
                         * @static
                         * @property ColumnDataValidationsMap
                         */
                        ColumnDataValidation.ColumnDataValidationsMap = ColumnDataValidationsMap;
                        
                        export default ColumnDataValidation;