float:
   derived_from: tosca.datatypes.Root
 
+range:
+  derived_from: tosca.datatypes.Root
+
 list:
   derived_from: tosca.datatypes.Root
 
 
   derived_from: tosca.datatypes.Root
 float:
   derived_from: tosca.datatypes.Root
+range:
+  derived_from: tosca.datatypes.Root
 list:
   derived_from: tosca.datatypes.Root
 map:
 
 float:
   derived_from: tosca.datatypes.Root
 
+range:
+  derived_from: tosca.datatypes.Root
+
 list:
   derived_from: tosca.datatypes.Root
 
 
   derived_from: tosca.datatypes.Root
 float:
   derived_from: tosca.datatypes.Root
+range:
+  derived_from: tosca.datatypes.Root
 list:
   derived_from: tosca.datatypes.Root
 map:
 
 float:
   derived_from: tosca.datatypes.Root
 
+range:
+  derived_from: tosca.datatypes.Root
+
 list:
   derived_from: tosca.datatypes.Root
 
 
     SIMPLE,
     LIST,
     MAP,
-    COMPLEX
+    COMPLEX,
+    RANGE
 }
 export class PropertyPolicyDetail {
     policyId: string;
         if (this.type === PROPERTY_TYPES.LIST) {
             return DerivedPropertyType.LIST;
         }
+        if (this.type === PROPERTY_TYPES.RANGE) {
+            return DerivedPropertyType.RANGE;
+        }
         if (this.type === PROPERTY_TYPES.MAP) {
             return DerivedPropertyType.MAP;
         }
 
         </li>
       </ul>
     </ng-container>
+    <ng-container *ngIf="isTypeRange(type.name)">
+        <ul *ngIf="isExpanded">
+            <ng-container *ngFor="let value1 of [0, 1]; index as i">
+                <li class="input-value">
+                    <ng-container *ngIf="isViewOnly">
+                        {{valueObjRef[i]}}
+                    </ng-container>
+                    <input type="text" *ngIf="!isViewOnly"
+                    [(ngModel)]="valueObjRef[i]" (ngModelChange)="onListValueChange()" />
+                </li>
+            </ng-container>
+        </ul>
+    </ng-container>
     <ng-container *ngIf="isTypeComplex(type.name)" >
         <ul *ngIf="isExpanded">
           <ng-container *ngFor="let property of this.type.properties">
 
     if (this.valueObjRef[property.name] == undefined) {
       if (this.isTypeComplex(property.type) || this.isTypeMap(property.type)) {
         this.valueObjRef[property.name] = {};
-      } else if (this.isTypeList(property.type)) {
+      } else if (this.isTypeList(property.type) || this.isTypeRange(property.type)) {
         this.valueObjRef[property.name] = [];
       } else {
         this.valueObjRef[property.name] = null;
       return DerivedPropertyType.LIST;
     } else if (typeName === PROPERTY_TYPES.MAP) {
       return DerivedPropertyType.MAP;
+    } else if (typeName === PROPERTY_TYPES.RANGE) {
+      return DerivedPropertyType.RANGE;
     } else {
       return DerivedPropertyType.COMPLEX;
     }
   }
 
+  isTypeWithoutProperties(typeName: string): boolean {
+      if (this.dataTypeMap.get(typeName) === undefined) {
+          return true;
+      }
+      return this.dataTypeMap.get(typeName).properties === undefined ||
+          this.dataTypeMap.get(typeName).properties.length == 0;
+  }
+
+  isTypeDerivedFromSimple(typeName: string): boolean {
+    if (typeName === undefined) {
+      return false;
+    }
+    if (this.dataTypeMap.get(typeName) !== undefined) {
+      if (this.isTypeRange(typeName)) {
+        return false;
+      }
+      if (this.dataTypeMap.get(typeName).derivedFromName == PROPERTY_DATA.ROOT_DATA_TYPE) {
+        return false;
+      } else if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.dataTypeMap.get(typeName).derivedFromName) > -1) {
+        return true;
+      } else {
+        return this.isTypeDerivedFromSimple(this.dataTypeMap.get(typeName).derivedFromName);
+      }
+    }
+    return true;
+  }
+
   isTypeSimple(typeName: string): boolean {
-    return this.getType(typeName) == DerivedPropertyType.SIMPLE;
+    if (this.getType(typeName) == DerivedPropertyType.SIMPLE) {
+      return true;
+    }
+    return this.isTypeDerivedFromSimple(typeName) && (this.isTypeWithoutProperties(typeName));
+  }
+
+  isTypeRange(typeName: string): boolean {
+    return this.getType(typeName) == DerivedPropertyType.RANGE;
   }
 
   isTypeList(typeName: string): boolean {
   }
 
   isTypeComplex(typeName: string): boolean {
-    return !this.isTypeSimple(typeName) && !this.isTypeList(typeName) && !this.isTypeMap(typeName);
+    return !this.isTypeSimple(typeName) && !this.isTypeList(typeName) && !this.isTypeMap(typeName) && !this.isTypeRange(typeName);
   }
 
   expandAndCollapse() {
 
   public static FLOAT = 'float';
   public static BOOLEAN = 'boolean';
   public static JSON = 'json';
+  public static RANGE = 'range';
   public static MAP = 'map';
   public static LIST = 'list';
   public static SCALAR = 'scalar-unit';
 }
 
 export class PROPERTY_DATA {
-  public static TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.BOOLEAN, PROPERTY_TYPES.JSON, PROPERTY_TYPES.SCALAR, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME, PROPERTY_TYPES.LIST, PROPERTY_TYPES.MAP];
+  public static TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.BOOLEAN, PROPERTY_TYPES.JSON, PROPERTY_TYPES.SCALAR, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME, PROPERTY_TYPES.LIST, PROPERTY_TYPES.MAP, PROPERTY_TYPES.RANGE];
   public static SIMPLE_TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.BOOLEAN, PROPERTY_TYPES.JSON, PROPERTY_TYPES.SCALAR, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME];
   public static SIMPLE_TYPES_COMPARABLE = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.FLOAT];
   public static SCALAR_TYPES = [PROPERTY_TYPES.SCALAR, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME];