mlhim-specs-dev team mailing list archive
-
mlhim-specs-dev team
-
Mailing list archive
-
Message #00801
[Branch ~cdd-dev/cdd/trunk] Rev 312: Added back exportation of XSDs on menu, now reading from the tree
------------------------------------------------------------
revno: 312
committer: Eduardo Ribeiro <xcesar@xxxxxxxxx>
branch nick: devel
timestamp: Mon 2013-02-04 14:06:31 -0200
message:
Added back exportation of XSDs on menu, now reading from the tree
added:
src/2.0/ccdRMAdapter.py
src/2.0/ccdgen.py
modified:
src/2.0/aux_gui.py
src/2.0/cdd.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/2.0/aux_gui.py'
--- src/2.0/aux_gui.py 2013-02-01 19:30:12 +0000
+++ src/2.0/aux_gui.py 2013-02-04 16:06:31 +0000
@@ -106,12 +106,13 @@
return l2
-def save_file_diag(self, filename, dir):
+def save_file_diag(self, filename, dir, wildcard='All files (*.*)|*.*'):
dlg = wx.FileDialog(
self, message="Save as...",
defaultDir=dir,
defaultFile=filename,
- style=wx.SAVE
+ wildcard=wildcard,
+ style=wx.SAVE,
)
if dlg.ShowModal() == wx.ID_OK:
@@ -128,7 +129,7 @@
defaultDir=dir,
defaultFile='',
wildcard=wildcard,
- style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
+ style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR,
)
if dlg.ShowModal() == wx.ID_OK:
=== added file 'src/2.0/ccdRMAdapter.py'
--- src/2.0/ccdRMAdapter.py 1970-01-01 00:00:00 +0000
+++ src/2.0/ccdRMAdapter.py 2013-02-04 16:06:31 +0000
@@ -0,0 +1,84 @@
+import xls2ccdRM
+
+class Adapter(object):
+ def __init__(self):
+ self.indent = 4
+
+ def set_indent(self, indent):
+ self.indent = indent
+
+ def get_type_string(self, name, data, defin_id, ct_name, dt_id, docs):
+
+ e_data_type = 'ClusterType'
+
+## if name == 'AdminEntry':
+## data_name = data
+## result = xls2ccdRM.getCareEntryType(data_name, ct_name, docs, dt_id, e_data_type, self.indent):
+
+ if name == 'CareEntry':
+ data_name = name
+ data_name = ''
+ result = xls2ccdRM.getCareEntryType(data_name, ct_name, docs, dt_id, e_data_type, indent=self.indent)
+ return result
+## elif name == 'DemographicEntry':
+## pass
+
+ elif name == 'Cluster':
+ data_name = name
+ cluster_subject = ''
+ ed_id = ct_name
+ result = xls2ccdRM.getClusterType(data_name, ed_id, dt_id, cluster_subject, indent=self.indent)
+ return result
+## elif name == 'DvBoolean':
+## pass
+
+ elif name == 'DvCodedString':
+ data_name = data['data_name']
+ terminology = data['terminology']
+
+ ta = [] ; tn = [] ; tv = [] ; tc = [] ; cs = []
+ for lista in terminology:
+ ta.append(lista[2])
+ tn.append(lista[1])
+ tv.append(lista[3])
+ tc.append(lista[0])
+ cs.append(lista[4])
+
+ result = xls2ccdRM.getDvCodedStringType(data_name, ct_name, docs, self.indent,ta,tn,tv,tc,cs)
+ return result
+## elif name == 'DvCount':
+## pass
+##
+## elif name == 'DvDate':
+## pass
+##
+## elif name == 'DvInterval':
+## pass
+##
+## elif name == 'DvOrdinal':
+## pass
+##
+## elif name == 'DvQuantity':
+## pass
+##
+## elif name == 'DvString':
+## pass
+##
+## elif name == 'DvTime':
+## pass
+
+ elif name == 'Element':
+ result = xls2ccdRM.getElementType(defin_id, dt_id, indent=self.indent)
+ return result
+
+ elif name == 'PartIdentified':
+ result = xls2ccdRM.getPartIdentifiedType(dt_id, indent)
+ return result
+
+ elif name == 'PartySelf':
+ result = xls2ccdRM.getPartySelfType(dt_id, indent)
+ return result
+## elif name == 'ReferenceRange':
+## pass
+ else:
+ return ''
=== added file 'src/2.0/ccdgen.py'
--- src/2.0/ccdgen.py 1970-01-01 00:00:00 +0000
+++ src/2.0/ccdgen.py 2013-02-04 16:06:31 +0000
@@ -0,0 +1,215 @@
+# -*- coding: utf-8 -*-
+import string
+import uuid
+import copy
+from xml.sax.saxutils import escape
+
+import ccdRMAdapter
+
+
+class CCDGen(object):
+ def __init__(self):
+
+ self.formatter = string.Formatter()
+
+ # Config Data
+ self.version = ''
+
+ # Metadata
+ self.title = ''
+ self.description = ''
+ self.creator = ''
+ self.creator_email = ''
+ self.contributors = ''
+ self.publisher = ''
+ self.subject = ''
+ self.source = ''
+ self.rights = ''
+ self.relation = ''
+ self.coverage = ''
+ self.language = ''
+ self.date = ''
+
+ self.structure = None
+ self.fd = None
+
+ self.ccd_id = 'ccd-' + str(uuid.uuid4())
+
+ def open_file(self, filename):
+ self.fd = open(filename, 'wb')
+
+ def close_file(self):
+ self.fd.close()
+
+ def update_ccd_id(self, ccd_id):
+ self.ccd_id = ccd_id
+
+ # Depends on container module design
+ def get_container_data(self, structure):
+ self.structure = copy.copy(structure)
+ metadata = self.structure.pop('metadata')
+
+ self.title = metadata.get('title')
+ self.description = metadata.get('description')
+ self.creator = metadata.get('creator')
+ self.creator_email = metadata.get('creator_email')
+ self.contributors = metadata.get('contributors')
+ self.publisher = metadata.get('publisher')
+ self.subject = metadata.get('subject')
+ self.source = metadata.get('source')
+ self.rights = metadata.get('rights')
+ self.relation = metadata.get('relation')
+ self.coverage = metadata.get('coverage')
+ self.language = metadata.get('language')
+ self.date = metadata.get('date')
+
+
+ # Depends on config module design
+ def get_version(self, rm_version):
+ self.version = rm_version.replace('.','_')
+
+ def _print_header(self):
+ self._test_open_file()
+ txt = \
+"""<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:mlhim2="http://www.mlhim.org/xmlns/mlhim2/{version}"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:owl="http://www.w3.org/2002/07/owl#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:sawsdl="http://www.w3.org/ns/sawsdl"
+ xmlns:sawsdlrdf="http://www.w3.org/ns/sawsdl#"
+ id="mlhim2-{ccd_id}"
+ elementFormDefault="qualified"
+ targetNamespace="http://www.mlhim.org/xmlns/mlhim2/{version}"
+ xmlns:data-view="http://www.w3.org/2003/g/data-view#"
+ data-view:transformation="http://www.mlhim.org/ccd/ccd_md_view.xsl">"""
+
+ self.fd.write(self.formatter.format(txt,
+ version = self.version,
+ ccd_id = self.ccd_id,
+ )
+ )
+ def _print_metadata(self):
+ self._test_open_file()
+ txt = \
+"""
+
+ <xs:annotation>
+ <xs:appinfo>
+ <rdf:RDF>
+
+ <rdf:Description rdf:about="http://www.hkcr.net/ccd/{ccd_id}">
+ <dc:title>{title}</dc:title>
+ <dc:creator>{creator} <{creator_email}> </dc:creator>
+ {contributors}
+ <dc:subject>{subject}</dc:subject>
+ <dc:source>{source}</dc:source>
+ <dc:rights>{rights}</dc:rights>
+ <dc:relation>{relation}</dc:relation>
+ <dc:coverage>{coverage}</dc:coverage>
+ <dc:type>{resource_type}</dc:type>
+ <dc:identifier>{identifier}</dc:identifier>
+ <dc:description>{description}</dc:description>
+ <dc:publisher>{publisher}</dc:publisher>
+ <dc:date>{date}</dc:date>
+ <dc:format>{resource_format}</dc:format>
+ <dc:language>{language}</dc:language>
+ </rdf:Description>
+ </rdf:RDF>
+ </xs:appinfo>
+ </xs:annotation>"""
+
+ contributors_formated = '<dc:contributor>' + \
+ '</dc:contributor>\n <dc:contributor>'.join([ escape(i).strip() for i in self.contributors.split(';')]) + \
+ '</dc:contributor>'
+
+
+
+ self.fd.write(self.formatter.format(txt,
+ title = self.title,
+ description = self.description,
+ creator = self.creator,
+ creator_email = self.creator_email,
+
+ contributors = contributors_formated,
+
+ publisher = self.publisher,
+ subject = self.subject,
+ source = self.source,
+ rights = self.rights,
+ relation = self.relation,
+ coverage = self.coverage,
+ language = self.language,
+ date = self.date,
+
+ ccd_id = self.ccd_id,
+ identifier = self.ccd_id,
+
+ resource_type = "MLHIM Concept Constraint Definition (CCD)",
+ resource_format = "text/xml",
+ )
+ )
+
+ def _print_structure(self):
+ self._test_open_file()
+ txt = \
+"""
+
+ <xs:include schemaLocation="http://www.mlhim.org/xmlns/mlhim2/{version}/mlhim2.xsd"/>
+
+ <xs:element name="{ccd_id}" type="mlhim2:ct-{UUID_complex}"/>
+
+ <xs:complexType name="ct-{UUID_complex}">
+ <xs:complexContent>
+ <xs:restriction base="mlhim2:CCDType">
+ <xs:sequence>
+ <xs:element minOccurs="1" maxOccurs="1" ref="mlhim2:el-{UUID_definition}"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name='el-{UUID_definition}' substitutionGroup="mlhim2:definition" type='mlhim2:ct-{UUID_definition}'/>
+
+"""
+ UUID_definition = str(uuid.uuid4())
+ UUID_complex = str(uuid.uuid4())
+
+
+ self.fd.write(self.formatter.format(txt,
+ version = self.version,
+ UUID_complex = UUID_complex,
+ UUID_definition = UUID_definition,
+ ccd_id = self.ccd_id,
+ )
+ )
+
+ adapter = ccdRMAdapter.Adapter()
+ adapter.set_indent = 2
+
+ for node in self.structure.items():
+ name = node[1][0]
+ data = node[1][1]
+ ct = str(uuid.uuid4())
+ dt_id = str(uuid.uuid4())
+ defin_id = self.ccd_id[4:]
+ docs = ''
+ xsd_type_string = adapter.get_type_string(name, data, defin_id, ct, dt_id, docs)
+ #print xsd_type_string
+ self.fd.write(xsd_type_string)
+
+
+ def _test_open_file(self):
+ if not self.fd:
+ raise IOError('File not defined')
+
+ def get_information(self, structure, version):
+ self.get_version(version)
+ self.get_container_data(structure)
+
+ def export_ccd(self):
+
+ self._print_header()
+ self._print_metadata()
+ self._print_structure()
+ self.fd.flush()
=== modified file 'src/2.0/cdd.py'
--- src/2.0/cdd.py 2013-02-01 19:30:12 +0000
+++ src/2.0/cdd.py 2013-02-04 16:06:31 +0000
@@ -40,6 +40,9 @@
import config
ConfigDialog = config.ConfigDialog
+import ccdgen
+xsd_generator = ccdgen.CCDGen()
+
import container
container = container.Container()
@@ -63,6 +66,12 @@
# Setup the tree
self.setup_tree()
+
+ # Store ccd metadata in container
+ self.metadata.get_panel_configs()
+ md = self.metadata.get_as_dict()
+ container.set_metadata(md)
+
def setup_tree(self):
self.root, self.metadata_item, self.definition_item = self.tree_ctrl_ccd.setup_tree()
@@ -301,7 +310,7 @@
def file_open(self, event): # wxGlade: MainFrame.<event_handler>
wildcard = \
- "Pickle files (*.pickle)|*.pickle|" \
+ "CDD files (*.cdd)|*.cdd|" \
"All files (*.*)|*.*"
path = self.config_dialog.workspace
@@ -317,13 +326,17 @@
self.tree_ctrl_ccd.SelectItem(self.metadata_item)
def file_save(self, event, ask=False): # wxGlade: MainFrame.<event_handler>
+ wildcard = \
+ "CDD files (*.cdd)|*.cdd|" \
+ "All files (*.*)|*.*"
+
path = self.config_dialog.workspace
try:
self.first_save
if ask or not self.pickle_name:
- self.pickle_name = save_file_diag(self, 'CDD.pickle', path)
+ self.pickle_name = save_file_diag(self, 'current.cdd', path, wildcard)
except AttributeError, e:
- self.pickle_name = save_file_diag(self, 'CDD.pickle', path)
+ self.pickle_name = save_file_diag(self, 'current.cdd', path, wildcard)
if self.pickle_name:
self.first_save = False
@@ -391,9 +404,18 @@
# Then we call wx.AboutBox giving it that info object
wx.AboutBox(about)
-
def export_xsd(self, event): # wxGlade: MainFrame.<event_handler>
- not_implemented_diag(self)
+ wildcard = \
+ "XSD files (*.xsd)|*.xsd|" \
+ "All files (*.*)|*.*"
+
+ path = self.config_dialog.workspace
+ if not path: return
+ filename = save_file_diag(self, xsd_generator.ccd_id + '.xsd', path, wildcard)
+
+ xsd_generator.open_file(filename)
+ xsd_generator.get_information(container.structure, self.config_dialog.rm_version)
+ xsd_generator.export_ccd()
def export_xform(self, event): # wxGlade: MainFrame.<event_handler>
not_implemented_diag(self)
@@ -478,7 +500,7 @@
return False
def set_lang(self):
- self.choice_language.SetSelection(int(self.top_panel.metadata.language) | 0)
+ self.choice_language.SetSelection(self.top_panel.metadata.language_num)
# Relies in default name defined in GUI
def evt_radiobox_language(self, event): # wxGlade: DvCodedString.<event_handler>
@@ -598,6 +620,23 @@
cdd_gui.PartySelf.__init__(self, *args, **kwds)
CommonPanel.__init__(self)
+ self.define_attributes()
+
+ def evt_button_ok(self):
+ self.get_panel_data()
+ self.store_in_container()
+
+ def get_panel_data(self):
+ self.data = dict(
+ external_ref = self.text_ctrl_external_ref.GetValue(),
+ feeder_audit = self.text_ctrl_feeder_audit.GetValue(),
+ )
+
+ def set_panel_data(self, data):
+ self.text_ctrl_external_ref.SetValue(data['external_ref'])
+ self.text_ctrl_feeder_audit.SetValue(data['feeder_audit'])
+
+
# end of class PartySelf
class PartyIdentified(CommonPanel, cdd_gui.PartyIdentified):
@@ -605,6 +644,31 @@
cdd_gui.PartyIdentified.__init__(self, *args, **kwds)
CommonPanel.__init__(self)
+ self.define_attributes()
+
+ def evt_button_ok(self):
+ self.get_panel_data()
+ self.store_in_container()
+
+ self.text_ctrl_details = wx.TextCtrl(self, -1, "")
+ self.text_ctrl_party_name = wx.TextCtrl(self, -1, "")
+
+ def get_panel_data(self):
+ self.data = dict(
+ details = self.text_ctrl_details.GetValue(),
+ party_name = self.text_ctrl_party_name.GetValue(),
+ external_ref = self.text_ctrl_external_ref.GetValue(),
+ feeder_audit = self.text_ctrl_feeder_audit.GetValue(),
+
+ )
+
+ def set_panel_data(self, data):
+ self.text_ctrl_details.SetValue(data['details'])
+ self.text_ctrl_party_name.SetValue(data['party_name'])
+ self.text_ctrl_external_ref.SetValue(data['external_ref'])
+ self.text_ctrl_feeder_audit.SetValue(data['feeder_audit'])
+
+
# end of class PartyIdentified
class FeederAudit(CommonPanel, cdd_gui.FeederAudit):