Import initial din SVN ROAAUTO/Trunk @HEAD
This commit is contained in:
359
COMUN/utile/web/wwConfig.PRG
Normal file
359
COMUN/utile/web/wwConfig.PRG
Normal file
@@ -0,0 +1,359 @@
|
||||
#INCLUDE WCONNECT.h
|
||||
|
||||
SET PROCEDURE TO wwConfig ADDITIVE
|
||||
|
||||
*** Dependencies
|
||||
SET CLASSLIB TO wwXML ADDITIVE
|
||||
SET PROCEDURE TO wwAPI ADDITIVE
|
||||
SET PROCEDURE TO wwUtils ADDITIVE
|
||||
|
||||
*!* #IF .F.
|
||||
*!* *** Test/demo code
|
||||
*!* CLEAR
|
||||
*!* o=create("MyConfig")
|
||||
*!* o.cFileName = "Config.xml"
|
||||
*!* o.cMode = "XML"
|
||||
|
||||
*!* IF .F.
|
||||
*!* o.cFileName = "Config.ini"
|
||||
*!* o.cAppName = "Ini File Test"
|
||||
*!* ? o.Save()
|
||||
*!* ENDIF
|
||||
*!* IF .F.
|
||||
*!* o.cFileName = "Config.ini"
|
||||
*!* ? o.LoadIni()
|
||||
*!* ? o.cAppName
|
||||
*!* ? o.oTest.cHTMLPagePath
|
||||
*!* ENDIF
|
||||
*!* IF .F.
|
||||
*!* o.cAppName = "Default Application - Not yet set"
|
||||
*!* o.nTimerInterval = 100
|
||||
*!* o.cTemplate="cfg_"
|
||||
*!* ? o.Save()
|
||||
*!* modi comm config.xml
|
||||
*!* ENDIF
|
||||
*!* IF .F.
|
||||
*!* o.Load()
|
||||
*!* ENDIF
|
||||
|
||||
*!* IF .F.
|
||||
*!* o.cAppName = "Test Application"
|
||||
*!* o.nTimerInterval = 100
|
||||
|
||||
*!* o.cRegPath = "Software\West Wind Technologies\TestConfig"
|
||||
*!* o.cRegNode = "Parameters"
|
||||
*!* ? o.SaveRegistry()
|
||||
*!* ENDIF
|
||||
*!* IF .F.
|
||||
*!* o.cRegPath = "Software\West Wind Technologies\TestConfig"
|
||||
*!* o.cRegNode = "Parameters"
|
||||
*!*
|
||||
*!* ? o.LoadRegistry()
|
||||
*!* ENDIF
|
||||
|
||||
*!* ? o.cAppName
|
||||
*!* ? o.nTimerInterval
|
||||
*!* ? o.cTemplate
|
||||
|
||||
*!* RETURN
|
||||
|
||||
*!* *** All you have to do is add properties
|
||||
*!* *** for the config items and type them properly
|
||||
*!* *** with default values for first startup
|
||||
*!* DEFINE CLASS MyConfig AS wwConfig
|
||||
*!* cPath="d:\temp\"
|
||||
*!* cTemplate="wc_"
|
||||
*!* nPriority=1
|
||||
*!* lDebugMode=.F.
|
||||
*!* lLogToFile=.T.
|
||||
*!* lShowStatus=.T.
|
||||
*!* nScriptMode=3
|
||||
*!* nTimerInterval=250
|
||||
*!* lSaveRequestFiles=.F.
|
||||
*!* cAppName = ""
|
||||
*!* oTest = .NULL.
|
||||
*!* FUNCTION Init
|
||||
*!* *THIS.oTest = CREATE("cTest")
|
||||
*!* *THIS.oTest.cHTMLPagePath = "d:\westwind\wconnect\"
|
||||
*!* RETURN
|
||||
*!* ENDFUNC
|
||||
*!* ENDDEFINE
|
||||
|
||||
*!* DEFINE CLASS cTest as Relation
|
||||
*!* cHTMLPagePath = "Test Path"
|
||||
*!* *cDataPath = "d:\westwind\data"
|
||||
*!* ENDDEFINE
|
||||
*!* #ENDIF
|
||||
*************************************************************
|
||||
DEFINE CLASS wwConfig AS Relation
|
||||
*************************************************************
|
||||
|
||||
*** These values are not part of the XML exported
|
||||
*** interface.
|
||||
cFileName = ""
|
||||
cSubName = "config"
|
||||
oXML = .NULL.
|
||||
cRegPath = "SOFTWARE\West Wind Technologies\Config"
|
||||
cRegNode = "Parameters"
|
||||
cMode = "INI"
|
||||
|
||||
PROTECTED cPropertyExclusionList
|
||||
cPropertyExclusionList = ",cfilename,oxml,cregpath,cregnode,"+;
|
||||
"csubname,cmode,cpropertyexclusionlist,loverwriteini"
|
||||
|
||||
|
||||
****************************************************************
|
||||
FUNCTION Save
|
||||
*************
|
||||
LPARAMETER loObject
|
||||
|
||||
THIS.cMode = UPPER(THIS.cMode)
|
||||
|
||||
DO CASE
|
||||
CASE THIS.cMode = "XML"
|
||||
IF EMPTY(THIS.cFileName)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
STRTOFILE(THIS.CreateXML(),THIS.cFileName)
|
||||
CASE THIS.cMode = "INI"
|
||||
IF EMPTY(THIS.cFileName)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
*ERASE (FULLPATH(THIS.cFileName))
|
||||
THIS.SaveIni(this)
|
||||
CASE THIS.cMode = "REGISTRY"
|
||||
THIS.SaveRegistry()
|
||||
ENDCASE
|
||||
|
||||
RETURN .T.
|
||||
|
||||
****************************************************************
|
||||
FUNCTION Load
|
||||
*************
|
||||
LPARAMETER loOBject
|
||||
|
||||
THIS.cMode = UPPER(THIS.cMode)
|
||||
|
||||
DO CASE
|
||||
CASE THIS.cMode = "XML"
|
||||
IF EMPTY(THIS.cFileName) or !FILE(THIS.cFileName)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
lcXML = FILETOSTR(THIS.cFileName)
|
||||
THIS.LoadFromXML(lcXML)
|
||||
CASE THIS.cMode = "INI"
|
||||
RETURN THIS.LoadIni(loObject)
|
||||
CASE THIS.cMode = "REGISTRY"
|
||||
RETURN THIS.LOADREGISTRY()
|
||||
ENDCASE
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
****************************************************************
|
||||
FUNCTION SaveRegistry
|
||||
*********************
|
||||
loAPi = CREATE("wwAPI")
|
||||
|
||||
lcXML = THIS.CreateXML()
|
||||
|
||||
RETURN loAPI.WriteRegistryString(,THIS.cRegPath,THIS.cRegNode,lcXML,.T.)
|
||||
|
||||
|
||||
****************************************************************
|
||||
FUNCTION LoadRegistry
|
||||
*********************
|
||||
|
||||
loAPI = CREATE("wwAPI")
|
||||
lcXML = loAPI.ReadRegistryString(,THIS.cRegPath,THIS.cRegNode)
|
||||
IF ISNULL(lcXML)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
RETURN THIS.LoadFromXML(lcXML)
|
||||
|
||||
****************************************************************
|
||||
PROTECTED FUNCTION CreateXML
|
||||
****************************
|
||||
|
||||
loXML = CREATE("wwXML")
|
||||
loXML.lRecurseObjects = .T.
|
||||
loXML.lStripTypePrefix = .T.
|
||||
|
||||
loXML.cDocRootName = lower(JustStem(THIS.cFileName))
|
||||
IF loXML.cDocRootName="config"
|
||||
loXML.cDocRootName = "wwConfig"
|
||||
ENDIF
|
||||
|
||||
*** We have to exclude these internal properties
|
||||
loXML.cPropertyExclusionList = loXML.cPropertyExclusionList + ;
|
||||
THIS.cPropertyExclusionList
|
||||
|
||||
RETURN loXML.ObjectToXML(THIS,THIS.cSubName)
|
||||
|
||||
****************************************************************
|
||||
PROTECTED FUNCTION LoadFromXML
|
||||
******************************
|
||||
LPARAMETER lcXML
|
||||
|
||||
loXML = CREATE("wwXML")
|
||||
loXML.lRecurseObjects = .T.
|
||||
loXML.lStripTypePrefix = .T.
|
||||
|
||||
*** Simply reload the object properties from the XML
|
||||
loXML.XMLToObject(lcXML,THIS)
|
||||
|
||||
RETURN loXML.lError
|
||||
|
||||
****************************************************************
|
||||
FUNCTION SaveIni
|
||||
*********************
|
||||
LPARAMETER loObject, lcName
|
||||
LOCAL lcOutput, lnX, lnCount, laFields(1), lcField, lcType, lvValue, loXML
|
||||
|
||||
loXML = CREATE("wwXML")
|
||||
*** We have to exclude these internal properties
|
||||
loXML.cPropertyExclusionList = loXML.cPropertyExclusionList + ;
|
||||
THIS.cPropertyExclusionList
|
||||
|
||||
lcName=IIF(EMPTY(lcName),THIS.cSubName,lcName)
|
||||
lcFileName = FULLPATH(THIS.cFileName)
|
||||
|
||||
EXTERNAL ARRAY la_array
|
||||
|
||||
IF VARTYPE(loObject)#"O"
|
||||
loObject = THIS
|
||||
ENDIF
|
||||
|
||||
loAPI = CREATE("wwAPI")
|
||||
|
||||
lnCount = AMEMBERS(laFields, loObject)
|
||||
|
||||
FOR lnX=1 TO lnCount
|
||||
lcField = LOWER(laFields[lnX])
|
||||
IF AT("," + lcField + ",", "," + loXML.cPropertyExclusionList + ",")>0
|
||||
LOOP
|
||||
ENDIF
|
||||
lcType = TYPE("loObject."+lcField)
|
||||
lvValue = EVAL("loObject."+lcField)
|
||||
|
||||
IF .T. &&THIS.lStripTypePrefix
|
||||
lcDispField = Proper(SUBSTR(lcField,2))
|
||||
ELSE
|
||||
lcDispField = Proper(lcField)
|
||||
ENDIF
|
||||
|
||||
DO CASE
|
||||
CASE ISNULL(lvValue)
|
||||
loAPI.WriteProfileString(lcFileName,lcName,lcDispField,"NULL")
|
||||
CASE lcType = "C"
|
||||
loAPI.WriteProfileString(lcFileName,lcName,lcDispField,TRIM(lvValue))
|
||||
CASE lcType = "D" OR lcType = "T"
|
||||
loAPI.WriteProfileString(lcFileName,lcName,lcDispField,TRANSFORM(lvValue))
|
||||
CASE lcType = "L"
|
||||
loAPI.WriteProfileString(lcFileName,lcName,lcDispField,IIF(lvValue,"On","Off"))
|
||||
CASE lcType = "O"
|
||||
THIS.SaveIni(loObject.&lcField,lcDispField)
|
||||
CASE lcType = "U"
|
||||
loAPI.WriteProfileString(lcFileName,lcName,lcDispField,"NULL")
|
||||
OTHERWISE
|
||||
loAPI.WriteProfileString(lcFileName,lcName,lcDispField,TRANSFORM(lvValue))
|
||||
ENDCASE
|
||||
ENDFOR
|
||||
|
||||
RETURN .T.
|
||||
|
||||
****************************************************************
|
||||
FUNCTION LoadIni
|
||||
*********************
|
||||
LPARAMETER loObject, lcName
|
||||
LOCAL lcName, lcFileName, loAPI, loXML, lnProperties, lnX,;
|
||||
lcField, lcXMLField, lcType, lcValue, loObject,;
|
||||
laProperties[1]
|
||||
|
||||
IF VARTYPE(loObject) # "O"
|
||||
loObject=THIS
|
||||
ENDIF
|
||||
|
||||
lcName=IIF(EMPTY(lcName),THIS.cSubName,lcName)
|
||||
lcFileName = FULLPATH(THIS.cFileName)
|
||||
|
||||
loAPI = CREATE("wwAPI")
|
||||
loXML = CREATE("wwXML")
|
||||
*** We have to exclude these internal properties
|
||||
loXML.cPropertyExclusionList = loXML.cPropertyExclusionList + ;
|
||||
THIS.cPropertyExclusionList
|
||||
|
||||
*** Walk the object and then pull properties
|
||||
*** from the INI to repopulate it
|
||||
lnProperties = AMEMBERS(laProperties,loObject)
|
||||
|
||||
lnX=0
|
||||
FOR lnX=1 TO lnProperties
|
||||
lcField = lower(laProperties[lnX])
|
||||
if "," + lower(lcField) + "," $ "," + loXML.cPropertyExclusionList + ","
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
lcXMLField = SUBSTR(lcField,2)
|
||||
lcType = TYPE("loObject." + lcField)
|
||||
lcValue = loAPI.GetProfileString(lcFileName,lcName,lcXMLField)
|
||||
IF ISNULL(lcValue) AND lcType # "O"
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
DO CASE
|
||||
CASE lcType $ "CM"
|
||||
loObject.&lcField = lcValue
|
||||
CASE lcType $ "NIF"
|
||||
loObject.&lcField = VAL(lcValue)
|
||||
CASE lcType = "T"
|
||||
loObject.&lcField = CTOT(lcValue)
|
||||
CASE lcType = "D"
|
||||
loObject.&lcField = CTOD(lcValue)
|
||||
CASE lcType = "L"
|
||||
IF lcValue = "1" or UPPER(lcValue) = "ON"
|
||||
loObject.&lcField = .T.
|
||||
ELSE
|
||||
loObject.&lcField = .F.
|
||||
ENDIF
|
||||
CASE lcType = "O"
|
||||
THIS.LoadIni(loObject.&lcField,lcXMLField)
|
||||
ENDCASE
|
||||
ENDFOR
|
||||
|
||||
RETURN .T.
|
||||
|
||||
|
||||
ENDDEFINE
|
||||
|
||||
|
||||
*** CODE TO CREATE A NEW SUBTREE IN THE HELP HIERARCHY
|
||||
|
||||
*!* loAPI = THIS.oAPI
|
||||
|
||||
*!* this.cSubTree = "SOFTWARE\"+THIS.cCompany+"\"+THIS.cAppName
|
||||
*!* IF VARTYPE(THIS.cVersion) # "C"
|
||||
*!* this.cVersion = TRANS(THIS.cVersion)
|
||||
*!* ENDIF
|
||||
|
||||
*!* lcValue = loAPI.ReadRegistryString(,THIS.cSubTree,"")
|
||||
|
||||
*!* lcValue = loAPI.ReadRegistryString(,"SOFTWARE\"+THIS.cCompany+"\"+THIS.cAppName+"\Parameters","CurrentVersion")
|
||||
*!* IF ISNULL(lcValue)
|
||||
*!* loAPI.WriteRegistryString(,"SOFTWARE\"+THIS.cCompany,"","",.T.)
|
||||
*!* loAPI.WriteRegistryString(,THIS.cSubTree,"","",.T.)
|
||||
*!* loAPI.WriteRegistryString(,THIS.cSubTree+"\Parameters","CurrentVersion",THIS.cVersion,.T.)
|
||||
*!* ELSE
|
||||
*!* *** Update the version if its different
|
||||
*!* IF lcValue # THIS.cVersion
|
||||
*!* loAPI.WriteRegistryString(,THIS.cSubTree+"\Parameters","CurrentVersion",THIS.cVersion,.T.)
|
||||
*!* ENDIF
|
||||
*!* ENDIF
|
||||
|
||||
*!* RETURN
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user