Changeset 677


Ignore:
Timestamp:
15/03/06 15:58:41 (14 years ago)
Author:
domlowe
Message:

Phenomenon & ParameterisedPhenomenon? added, composite phenomenon to do

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/newparser/Parser.py

    r672 r677  
    155155     +name[0..*]: Name 
    156156    """ 
    157     def __init__(self,gmlid=None,metaDataProperty=[],description=None,name=[]): 
     157    def __init__(self,gmlid=None,metaDataProperty=[],description=None,name=[],*args,**kwargs): 
    158158        if gmlid: 
    159159            self.id = gmlid 
     
    576576                    if frag.attrib.has_key(XLINK('href')): 
    577577                        self.href = frag.attrib[XLINK('href')] 
    578                 elif frag.getchildren()[0].tag == OM('Phenomenon'): 
    579                     self.parameter = Phenomenon() 
    580                 elif frag.getchildren()[0].tag == OM('CompositePhenomenon'): 
    581                     self.parameter = CompositePhenomenon() 
    582                 elif frag.getchildren()[0].tag == OM('ParametrisedPhenomenon'): 
    583                     self.parameter = ParametrisedPhenomenon() 
     578                else: 
     579                    subFrag=frag.getchildren()[0] 
     580                    if subFrag.tag == OM('Phenomenon'): 
     581                        self.parameter = Phenomenon() 
     582                    elif subFrag.tag == OM('CompositePhenomenon'): 
     583                        self.parameter = CompositePhenomenon() 
     584                    elif subFrag.tag == OM('ParameterisedPhenomenon'): 
     585                        self.parameter = ParameterisedPhenomenon() 
    584586                if hasattr(self,'parameter'): 
    585587                    if self.parameter is not None: 
    586                         self.parameter.fromXML(frag) 
    587  
     588                        self.parameter.fromXML(subFrag) 
     589                         
    588590    def toXML(self,csmlFrag): 
    589591        AbstractDiscreteCoverage.toXML(self,csmlFrag) 
    590          
    591592        if hasattr(self,'parameter'): 
    592593            frag = Element(CSML('parameter')) 
    593             if self.parameter is not None: 
    594                 if type(self.parameter) is not str: 
    595                     self.parameter.toXML(frag) 
     594            if isinstance(self.parameter,ParameterisedPhenomenon): 
     595                subFrag=Element(OM('ParameterisedPhenomenon')) 
     596                ParameterisedPhenomenon.toXML(self.parameter,subFrag) 
     597                frag.append(subFrag) 
     598                csmlFrag.append(frag) 
     599            elif isinstance(self.parameter,CompositePhenomenon): 
     600                subFrag=Element(OM('CompositePhenomenon')) 
     601                CompositePhenomenon.toXML(self.parameter,subFrag) 
     602                frag.append(subFrag) 
     603                csmlFrag.append(frag) 
     604            elif isinstance(self.parameter,Phenomenon): 
     605                subFrag=Element(OM('Phenomenon')) 
     606                Phenomenon.toXML(self.parameter,subFrag) 
     607                frag.append(subFrag) 
     608                csmlFrag.append(frag) 
     609 
    596610            if hasattr(self, 'href'): 
    597611                frag.attrib[XLINK('href')] = self.href 
    598             csmlFrag.append(frag) 
     612 
    599613        return csmlFrag 
    600614 
     
    646660                    self.domainReference=TimeInstant() 
    647661                self.domainReference.fromXML(subfrag) 
     662 
    648663            if frag.tag == CSML('domainComplement'): 
    649664                subfrag=frag.getchildren()[0] 
     
    679694                frag.append(subFrag) 
    680695                csmlFrag.append(frag) 
     696            elif isinstance(self.domainReference,TimeInstant): 
     697                subFrag=Element(GML('TimeInstant')) 
     698                self.domainReference.toXML(subFrag) 
     699                frag.append(subFrag) 
     700                csmlFrag.append(frag) 
    681701        if hasattr(self,'domainComplement'): 
    682702            frag = Element(CSML('domainComplement')) 
     
    907927        return csmlFrag 
    908928 
     929class GridEnvelope: 
     930    def __init__(self, low=None, high = None): 
     931        if low: 
     932            self.low = low 
     933        if high: 
     934            self.high = high 
     935    def fromXML(self, csmlFrag): 
     936        print csmlFrag 
     937        frag = csmlFrag.getchildren()[0] 
     938        for subFrag in frag.getchildren(): 
     939            if subFrag.tag == GML('low'): 
     940                self.low=subFrag.text 
     941            elif subFrag.tag == GML('high'): 
     942                self.high=subFrag.text 
     943    def toXML(self,csmlFrag): 
     944        if hasattr(self, 'low'): 
     945            frag=Element(GML('low')) 
     946            frag.text=self.low 
     947            csmlFrag.append(frag) 
     948        if hasattr(self, 'high'): 
     949            frag=Element(GML('high')) 
     950            frag.text=self.high 
     951            csmlFrag.append(frag) 
     952        return csmlFrag 
    909953 
    910954class GmlGrid(AbstractGeometryType): 
     
    924968        AbstractGeometryType.fromXML(self,csmlFrag) 
    925969        for frag in csmlFrag.getchildren(): 
    926             pass 
    927         #if frag.tag ==  
     970            print frag 
     971        for frag in csmlFrag.getchildren(): 
     972            if frag.tag == GML('limits'): 
     973                self.limits=GridEnvelope() 
     974                GridEnvelope.fromXML(self.limits,frag) 
     975            elif frag.tag == GML('axisName'): 
     976                checkArrayAttrib(self,'axisNames') 
     977                self.axisNames.append(frag.text) 
    928978    def toXML(self,csmlFrag): 
    929979        AbstractGeometryType.toXML(self,csmlFrag) 
    930         return csmlFrag 
     980        if hasattr(self, 'limits'): 
     981            frag=Element(GML('limits')) 
     982            subFrag =Element(GML('GridEnvelope')) 
     983            GridEnvelope.toXML(self.limits, subFrag) 
     984            frag.append(subFrag) 
     985            csmlFrag.append(frag) 
     986        if hasattr(self, 'axisNames'): 
     987            for axis in self.axisNames: 
     988                frag=Element(GML('axisName')) 
     989                frag.text =axis 
     990                csmlFrag.append(frag) 
     991        return csmlFrag 
     992             
     993class GridOrdinateDescription: 
     994    #Class GridOrdinateDescription: 
     995        #+gridAxesSpanned 
     996        #+sequenceRule 
     997        #+definesAxis,attrib -href 
     998        #+axisValues 
     999 
     1000    def __init__(self, gridAxesSpanned=None,sequenceRule=None, definesAxis=None, axisValues=None,href=None): 
     1001        if gridAxesSpanned: 
     1002            self.gridAxesSpanned=gridAxesSpanned 
     1003        if sequenceRule: 
     1004            self.sequenceRule=sequenceRule 
     1005        if definesAxis: 
     1006            self.definesAxis=definesAxis 
     1007            if href: 
     1008                self.href = href 
     1009        if axisValues: 
     1010            self.axisValues=axisValues 
     1011         
     1012    def fromXML(self,csmlFrag): 
     1013        for frag in csmlFrag.getchildren(): 
     1014            if frag.tag ==CSML('gridAxesSpanned'): 
     1015                self.gridAxesSpanned=frag.text 
     1016            elif frag.tag ==CSML('sequenceRule'): 
     1017                self.sequenceRule=frag.text 
     1018            elif frag.tag ==CSML('definesAxis'): 
     1019                self.definesAxis=frag.text 
     1020                if frag.attrib.has_key(XLINK('href')): 
     1021                        self.href = frag.attrib[XLINK('href')] 
     1022            elif frag.tag ==CSML('axisValues'): 
     1023                self.axisValues=frag.text 
     1024                 
     1025    def toXML(self, csmlFrag): 
     1026        if hasattr(self, 'gridAxesSpanned'): 
     1027            frag=Element(CSML('gridAxesSpanned')) 
     1028            frag.text = self.gridAxesSpanned 
     1029            csmlFrag.append(frag) 
     1030        if hasattr(self, 'sequenceRule'): 
     1031            frag=Element(CSML('sequenceRule')) 
     1032            frag.text = self.sequenceRule 
     1033            csmlFrag.append(frag) 
     1034        if hasattr(self, 'definesAxis'): 
     1035            frag=Element(CSML('definesAxis')) 
     1036            frag.text = self.definesAxis 
     1037            if hasattr(self, 'href'): 
     1038                frag.attrib[XLINK('href')] = self.href 
     1039            csmlFrag.append(frag) 
     1040        if hasattr(self, 'axisValues'): 
     1041            frag=Element(CSML('axisValues')) 
     1042            frag.text = self.axisValues 
     1043            csmlFrag.append(frag) 
     1044        return csmlFrag 
     1045     
    9311046 
    9321047class Grid(GmlGrid): 
    933     def __init__(self): 
     1048#Class GmlGrid representing a gml:Grid  
     1049# + dimension(attrib) [1] 
     1050#  +ordinate [1..*] 
     1051    def __init__(self,srsName=None,srsDimension=None,dimension=None,ordinates=None): 
    9341052        GmlGrid.__init__(self) 
     1053        if srsName: 
     1054            self.srsName=srsName 
     1055        if srsDimension: 
     1056            self.srsDimension=srsDimension 
     1057        if dimension: 
     1058            self.dimension=dimension 
     1059        if ordinates: 
     1060            self.ordinates=ordinates 
    9351061    def fromXML(self, csmlFrag): 
    9361062        GmlGrid.fromXML(self,csmlFrag) 
     1063        if csmlFrag.attrib.has_key('srsName'): 
     1064            self.srsName = csmlFrag.attrib['srsName'] 
     1065        if csmlFrag.attrib.has_key('srsDimension'): 
     1066            self.srsDimension = csmlFrag.attrib['srsDimension'] 
     1067        if csmlFrag.attrib.has_key('dimension'): 
     1068            self.dimension = csmlFrag.attrib['dimension'] 
     1069        for frag in csmlFrag: 
     1070            if frag.tag==CSML('ordinate'): 
     1071                checkArrayAttrib(self,'ordinates') 
     1072                ordinate=GridOrdinateDescription() 
     1073                GridOrdinateDescription.fromXML(ordinate, frag) 
     1074                self.ordinates.append(ordinate) 
    9371075    def toXML(self,csmlFrag): 
    9381076        GmlGrid.toXML(self,csmlFrag) 
     1077        if hasattr(self, 'srsName'): 
     1078            csmlFrag.attrib['srsName'] = self.srsName 
     1079        if hasattr(self, 'srsDimension'): 
     1080            csmlFrag.attrib['srsDimension'] = self.srsDimension 
     1081        if hasattr(self, 'dimension'): 
     1082            csmlFrag.attrib['dimension'] = self.dimension 
     1083         
     1084        if hasattr(self, 'ordinates'): 
     1085            for ordinate in self.ordinates: 
     1086                frag=Element(CSML('ordinate')) 
     1087                GridOrdinateDescription.toXML(ordinate, frag) 
     1088                csmlFrag.append(frag) 
    9391089        return csmlFrag 
    9401090 
     
    10301180        return csmlFrag 
    10311181 
    1032 class Phenomenon(AbstractGML): 
     1182class Definition(AbstractGML): 
     1183    #Class definition, restricts AbstractGML 
     1184    #gml:id is mandatory. 
     1185    def __init__(self,*args,**kwargs): 
     1186        AbstractGML.__init__(self,*args,**kwargs) 
     1187    def fromXML(self,csmlFrag): 
     1188        AbstractGML.fromXML(self,csmlFrag) 
     1189        #TO DO: how  best to handle this? 
     1190        if not hasattr(self,'id'): 
     1191            print 'gml:id mandatory value missing in ' + csmlFrag.tag 
     1192            sys.exit() 
     1193    def toXML(self,csmlFrag): 
     1194        csmlFrag=AbstractGML.toXML(self,csmlFrag) 
     1195        return csmlFrag 
     1196 
     1197class TypedCategory: 
     1198#class om:TypedCategory 
     1199    def __init__(self,*args,**kwargs): 
     1200        pass 
     1201    def fromXML(self,csmlFrag): 
     1202        pass 
     1203    def toXML(self,csmlFrag): 
     1204 
     1205        return csmlFrag 
     1206 
     1207     
     1208class Phenomenon(Definition): 
    10331209    #class Obs& Measures: PhenomenonProperty 
    10341210    #Note, in this does not really inherit from AbstractGML, but for CMSL  
     
    10371213         #Unlike things that really inherit from AbstractGML, Phenomenon does not have a MetaDataProperty, so force it to be None. 
    10381214        self.MetaDataProperty=None 
    1039         AbstractGML.__init__(self, self.MetaDataProperty,*args,**kwargs) 
    1040     def fromXML(self,csmlFrag): 
    1041         AbstractGML.fromXML(self,csmlFrag) 
     1215        Definition.__init__(self, MetaDataProperty=self.MetaDataProperty,*args,**kwargs) 
     1216    def fromXML(self,csmlFrag): 
     1217        Definition.fromXML(self,csmlFrag) 
     1218    def toXML(self,csmlFrag): 
     1219        csmlFrag=Definition.toXML(self,csmlFrag) 
     1220        return csmlFrag 
     1221 
    10421222 
    10431223class CompositePhenomenon(Phenomenon): 
     
    10501230        return csmlFrag 
    10511231     
    1052 class ParametrisedPhenomenon(Phenomenon): 
     1232class ParameterisedPhenomenon(Phenomenon): 
    10531233    def __init__(self,*args,**kwargs): 
    10541234        Phenomenon.__init__(self,*args,**kwargs) 
    10551235    def fromXML(self,csmlFrag): 
    10561236        Phenomenon.fromXML(self,csmlFrag) 
    1057     def toXML(self,csmlFrag): 
    1058         Phenomenon.toXML(self,csmlFrag) 
     1237        for frag in csmlFrag.getchildren(): 
     1238            if frag.tag == OM('basePhenomenon'): 
     1239                self.basePhenomenon=frag.text 
     1240                if frag.attrib.has_key(XLINK('href')): 
     1241                    self.href = frag.attrib[XLINK('href')] 
     1242            if frag.tag == OM('constraint'): 
     1243                subFrag=frag.getchildren()[0] 
     1244                if subFrag.tag== OM('TypedCategory'): 
     1245                    self.constraint = TypedCategory() 
     1246                #TO DO: what other types are valid? 
     1247                elif subFrag.tag== OM('??'): 
     1248                    self.constraint = 123 
     1249                self.constraint.fromXML(subFrag) 
     1250    def toXML(self,csmlFrag): 
     1251        csmlFrag=Phenomenon.toXML(self,csmlFrag) 
     1252        if hasattr(self,'basePhenomenon'): 
     1253            frag=Element(OM('basePhenomenon')) 
     1254            frag.text=self.basePhenomenon 
     1255            if hasattr(self, 'href'): 
     1256                frag.attrib[XLINK('href')] = self.href 
     1257            csmlFrag.append(frag) 
     1258        if hasattr(self, 'constraint'): 
     1259            frag=Element(OM('constraint')) 
     1260            subFrag=Element(OM('TypedCategory')) 
     1261            subFrag.text=self.constraint.toXML(subFrag) 
     1262            frag.append(subFrag) 
     1263            csmlFrag.append(frag) 
    10591264        return csmlFrag 
    10601265 
Note: See TracChangeset for help on using the changeset viewer.