← Back to team overview

mlhim-specs-dev team mailing list archive

[Branch ~cdd-dev/cdd/trunk] Rev 260: Added DvBoolean and DvQuantity to xls2ccd and to the test cases .xls

 

------------------------------------------------------------
revno: 260
committer: Timothy W. Cook <timothywayne.cook@xxxxxxxxx>
branch nick: cdd
timestamp: Tue 2012-09-18 14:09:07 -0300
message:
  Added DvBoolean and DvQuantity to xls2ccd and to the test cases .xls
modified:
  src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls
  src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls
  src/xls2ccd/mlhim2RM.py
  src/xls2ccd/xls2ccd.py


--
lp:cdd
https://code.launchpad.net/~cdd-dev/cdd/trunk

Your team MLHIM Specifications Developers is subscribed to branch lp:cdd.
To unsubscribe from this branch go to https://code.launchpad.net/~cdd-dev/cdd/trunk/+edit-subscription
=== modified file 'src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls'
Binary files src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls	2012-09-18 00:49:33 +0000 and src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls	2012-09-18 17:09:07 +0000 differ
=== modified file 'src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls'
Binary files src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls	2012-09-18 00:49:33 +0000 and src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls	2012-09-18 17:09:07 +0000 differ
=== modified file 'src/xls2ccd/mlhim2RM.py'
--- src/xls2ccd/mlhim2RM.py	2012-09-18 00:49:33 +0000
+++ src/xls2ccd/mlhim2RM.py	2012-09-18 17:09:07 +0000
@@ -1,6 +1,9 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 
+import uuid
+
+
 """
 This map provides the CCD tool developers with RM information to structure the contents of a CCD.
 Returns: (complexTypes,elements)
@@ -192,6 +195,74 @@
     return (complexTypes,elements)
 #====================================================================
 
+def getDvBooleanType(data_name, ct_name, bool_values, docs, indent=0):
+    """
+    data_name - string to use for data_name
+    ct_name - uuid string for complexType.name
+    bool_values = list of tuples containing the boolean (true,false) value(s)
+    docs - string for documentation
+    indent - number of spaces to indent first line
+    """
+    trues = []
+    falses = []
+    dv = []
+    for n in range(0,len(bool_values)):
+        trues.append(bool_values[n][0])
+        falses.append(bool_values[n][1])
+        dv.append(bool_values[n][0])
+        dv.append(bool_values[n][1])
+
+
+    padding = ('').rjust(indent)
+    dt_str = '\n\n'+padding.rjust(indent) + ("<xs:complexType name='ct-"+ct_name+"'>\n")
+    dt_str += padding.rjust(indent+2) + ("<xs:complexContent>\n")
+    dt_str += padding.rjust(indent+4) + ("<xs:restriction base='mlhim2:DvBooleanType'>\n")
+    dt_str += padding.rjust(indent+6) + ("<xs:sequence>\n")
+    #DvAny
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='data-name' type='xs:string' fixed='"+data_name+"'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:ExceptionalValue'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-begin' type='xs:dateTime'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-end' type='xs:dateTime'/>\n")
+    #DvBoolean
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-trues'>\n")
+    dt_str += padding.rjust(indent+10) + ("<xs:simpleType>\n")
+    dt_str += padding.rjust(indent+12) + ("<xs:restriction base='xs:string'>\n")
+    for n in range(len(trues)):
+        dt_str += padding.rjust(indent+16) + ("<xs:enumeration value='"+trues[n]+"'/>\n")
+    dt_str += padding.rjust(indent+12) + ("</xs:restriction>\n")
+    dt_str += padding.rjust(indent+10) + ("</xs:simpleType>\n")
+    dt_str += padding.rjust(indent+8) + ("</xs:element>\n")
+
+
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-falses'>\n")
+    dt_str += padding.rjust(indent+10) + ("<xs:simpleType>\n")
+    dt_str += padding.rjust(indent+12) + ("<xs:restriction base='xs:string'>\n")
+    for n in range(len(falses)):
+        dt_str += padding.rjust(indent+16) + ("<xs:enumeration value='"+falses[n]+"'/>\n")
+    dt_str += padding.rjust(indent+12) + ("</xs:restriction>\n")
+    dt_str += padding.rjust(indent+10) + ("</xs:simpleType>\n")
+    dt_str += padding.rjust(indent+8) + ("</xs:element>\n")
+
+
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='DvBoolean-dv'>\n")
+    dt_str += padding.rjust(indent+10) + ("<xs:simpleType>\n")
+    dt_str += padding.rjust(indent+12) + ("<xs:restriction base='xs:string'>\n")
+    for n in range(len(dv)):
+        dt_str += padding.rjust(indent+16) + ("<xs:enumeration value='"+dv[n]+"'/>\n")
+    dt_str += padding.rjust(indent+12) + ("</xs:restriction>\n")
+    dt_str += padding.rjust(indent+10) + ("</xs:simpleType>\n")
+    dt_str += padding.rjust(indent+8) + ("</xs:element>\n")
+
+    dt_str += padding.rjust(indent+8) + ("</xs:sequence>\n")
+    dt_str += padding.rjust(indent+6) + ("</xs:restriction>\n")
+    dt_str += padding.rjust(indent+4) + ("</xs:complexContent>\n")
+    dt_str += padding.rjust(indent+2) + ("</xs:complexType>\n")
+
+
+
+    return dt_str
+
+
 def getDvCodedStringType(data_name, ct_name, docs, indent,ta,tn,tv,tc,cs):
     """
     data_name - string to use for data_name
@@ -287,10 +358,6 @@
     return dt_str
 
 
-
-
-
-
 def getDvCountType(data_name, ct_name, uom, docs, indent=0):
     """
     data_name - string to use for data_name
@@ -393,7 +460,56 @@
 
     return dt_str
 
-
+def getDvQuantityType(data_name, ct_name, docs, indent, ta,tn,tv,tc,cs):
+    """
+    data_name - string to use for data_name
+    ct_name - uuid string for complexType.name
+    docs - string for documentation
+    indent - number of spaces to indent first line
+    ta - list of terminology abbreviated names
+    tn - list of terminology names
+    tv - list of terminology versions
+    tc - list of terminology codes
+    cs - list of code strings
+    """
+    if not indent: indent = 0
+
+    padding = ('').rjust(indent)
+    # UUID for DvCodedStringType
+    dcs_id = str(uuid.uuid4())
+
+    dt_str = '\n\n'+padding.rjust(indent) + ("<xs:complexType name='ct-"+ct_name+"'>\n")
+    dt_str += padding.rjust(indent+2) + ("<xs:complexContent>\n")
+    dt_str += padding.rjust(indent+4) + ("<xs:restriction base='mlhim2:DvQuantityType'>\n")
+    dt_str += padding.rjust(indent+6) + ("<xs:sequence>\n")
+    #DvAny
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='data-name' type='xs:string' fixed='"+data_name+"'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:ExceptionalValue'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-begin' type='xs:dateTime'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-end' type='xs:dateTime'/>\n")
+    #DvOrdered
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:normal-range'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='unbounded' minOccurs='0' ref='mlhim2:other-reference-ranges'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='normal-status' type='xs:string'/>\n")
+    #DvQuantified
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1'  name='magnitude' type='xs:decimal'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='min-magnitude' type='xs:decimal'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='max-magnitude' type='xs:decimal'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='magnitude-status' type='xs:string'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='error'  type='xs:int' default='0'/>\n")
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='accuracy' type='xs:int' default='0'/>\n")
+    #DvQuantity
+    dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' ref='mlhim2:el-"+dcs_id+"'/>\n")
+
+    dt_str += padding.rjust(indent+8) + ("</xs:sequence>\n")
+    dt_str += padding.rjust(indent+6) + ("</xs:restriction>\n")
+    dt_str += padding.rjust(indent+4) + ("</xs:complexContent>\n")
+    dt_str += padding.rjust(indent+2) + ("</xs:complexType>\n")
+    dt_str += padding.rjust(indent+2) + ("<xs:element name='el-"+dcs_id+"' substitutionGroup='mlhim2:DvQuantity-units' type='mlhim2:ct-"+dcs_id+"'/>\n\n")
+
+    dt_str += getDvCodedStringType(data_name, dcs_id, docs, indent,ta,tn,tv,tc,cs)
+
+    return dt_str
 
 
 def getDvStringType(data_name, ct_name, default, docs, indent=0, enumList=None):
@@ -456,10 +572,6 @@
     return dt_str
 
 
-
-
-
-
 def getDvTimeType(data_name, ct_name, default, docs, indent=0):
     """
     data_name - string to use for data_name

=== modified file 'src/xls2ccd/xls2ccd.py'
--- src/xls2ccd/xls2ccd.py	2012-09-18 00:49:33 +0000
+++ src/xls2ccd/xls2ccd.py	2012-09-18 17:09:07 +0000
@@ -50,20 +50,26 @@
 print 'Sheet:',s.name
 print 'Cols.: ',s.ncols
 print 'Rows: ', s.nrows
+
+bool_vals = []
+
 for row in range(1,s.nrows):
     values = []
     for col in range(s.ncols):
         values.append(s.cell(row,col).value)
     if values[9]:  #title, must be unique
         currkey = values[9]
-        ccd_dict[currkey] = [values[0],values[1],values[2],values[3],values[4],values[5],values[6],values[7],values[8],values[9],values[10],values[11],values[12],values[13],values[14],values[15],values[16],[],[],[]] # New Entry values
-    elif currkey:
+
+        ccd_dict[currkey] = [values[0],values[1],values[2],values[3],values[4],values[5],values[6],values[7],values[8],values[9],values[10],values[11],values[12],values[13],values[14],values[15],values[16],[],[]] # New Entry values
+    else:
         if values[17]: #DvString Enumerations
             ccd_dict[currkey][17].append((values[17],values[18],values[19]))
-        if values[20]: #DvCodedString Codes
+
+        elif values[20]: #DvCodedString Codes
             ccd_dict[currkey][18].append((values[20],values[21],values[22],values[23],values[24]))
-        if values[25]: #DvBoolean true/false values
-            ccd_dict[currkey][19].append((values[25],values[26]))
+        elif values[25] != '': #DvBoolean true/false values
+            bool_vals.append((values[25],values[26]))
+
 
 for k in ccd_dict.keys():
     size = len(ccd_dict[k])
@@ -86,9 +92,11 @@
 
     # Is the datatype a valid MLHIM Type?
     if ccd_dict[k][14] not in complexTypes:
-        ccd_id = "UnknownType-"+ccd_id
         print "Could not validate type: " + ccd_dict[k][14]
-        continue
+        print "The row data is: ",ccd_dict[k]
+        ccd_catalog.write("\n\nCould not validate datatype: " + repr(ccd_dict[k][14]))
+        ccd_catalog.write("\nThe row data is: "+repr(ccd_dict[k]))
+        continue  # do not produce a CCD for invalid types
 
 
     ccdct = "ct-"+str(uuid.uuid4())
@@ -212,7 +220,9 @@
     if dt == "DvBooleanType":
         default = None
         indent = 4
-        print "DvBooleanType: ",ccd_dict[k]
+        xsd_file.write(mlhim2RM.getDvBooleanType(data_name, d_id, bool_vals, dt_docs, indent))
+        bool_vals = []  #reset
+
 
     elif dt == "DvCountType":
         default = None
@@ -231,10 +241,20 @@
         xsd_file.write(mlhim2RM.getDvTimeType(data_name, d_id, default, dt_docs, indent))
 
 
-    #elif dt == "DvQuantityType":
-        #default = None
-        #indent = 4
-        #xsd_file.write(mlhim2RM.getDvQuantityType(data_name, d_id, uom, dt_docs, indent))
+    elif dt == "DvQuantityType":
+        ta=[]
+        tn=[]
+        tv=[]
+        tc=[]
+        cs=[]
+        for n in range(0,len(ccd_dict[k][18])): #Code Sets
+            ta.append(ccd_dict[k][18][n][0])
+            tn.append(ccd_dict[k][18][n][1])
+            tv.append(ccd_dict[k][18][n][2])
+            tc.append(ccd_dict[k][18][n][3])
+            cs.append(ccd_dict[k][18][n][4])
+        indent = 4
+        xsd_file.write(mlhim2RM.getDvQuantityType(data_name, d_id, dt_docs, indent,ta,tn,tv,tc,cs))
 
     elif dt =="DvCodedStringType":
         ta=[]