diff --git a/ObjectiveCCodeGenerator.py b/ObjectiveCCodeGenerator.py index e28d2ca..ae52304 100755 --- a/ObjectiveCCodeGenerator.py +++ b/ObjectiveCCodeGenerator.py @@ -22,7 +22,7 @@ THE SOFTWARE. ''' -import datetime, time, os +import datetime, time, os, re class ObjectiveCCodeGenerator : @@ -51,7 +51,7 @@ def getSourceDescriptionString(self, name) : return mDescriptionString def makeVarName(self,schemeObj) : - returnName = schemeObj.type_name + returnName = re.sub('[,.-]', '_', schemeObj.type_name) if str(schemeObj.type_name) == "id" or str(schemeObj.type_name) == "description" : titleName = schemeObj.type_name.upper() titleName = titleName[:1] + schemeObj.type_name[1:] @@ -701,6 +701,8 @@ def getNaturalTypeGetterFromDictionaryCode(self, schemeObj, className, varName, dateObjSubType = schemeObj.getSubType() if len(dateObjSubType) and dateObjSubType[0] == str("ms") : resultString += firstIndent + className + varName + " = [" + self.projectPrefix + "APIParser dateWithMilliSecondsTimeIntervalFromResponseDictionary:" + dicName + " forKey:@\"" + keyName + "\" acceptNil:" + elif len(dateObjSubType) and dateObjSubType[0] == str("iso8601") : + resultString += firstIndent + className + varName + " = [" + self.projectPrefix + "APIParser dateFromResponseDictionary:" + dicName + " forKey:@\"" + keyName + "\" acceptNil:" else : resultString += firstIndent + className + varName + " = [" + self.projectPrefix + "APIParser dateWithTimeIntervalFromResponseDictionary:" + dicName + " forKey:@\"" + keyName + "\" acceptNil:" elif schemeBaseType == "data" : @@ -1015,14 +1017,14 @@ def writeAPIParser(self) : finally : implDstFile.close() - def writeTemplates(self) : + def writeTemplates(self, templatePath) : - if self.dirPath.endswith("/") : - self.dirPath = self.dirPath[:-1] - baseDirPath = self.dirPath - self.dirPath = baseDirPath + "/Utilities/NSString" + if templatePath.endswith("/") : + templatePath = templatePath[:-1] + + self.dirPath = templatePath + "/NSString" self.writeNSStringCategory() - self.dirPath = baseDirPath + "/Utilities/APIParser" + self.dirPath = templatePath + "/APIParser" self.writeAPIParser() diff --git a/doc/MetaJSONProtocol.md b/doc/MetaJSONProtocol.md index a7a75e9..44c5e47 100644 --- a/doc/MetaJSONProtocol.md +++ b/doc/MetaJSONProtocol.md @@ -60,11 +60,19 @@ You can also use just one of those ("minValue" or "maxValue"). "description" : string "minValue" : UTC time interval since 1970 "maxValue" : UTC time interval since 1970 -} +}, +{ + "name" : "myISO8601Date", + "base-type" : "date", + "subType" : "iso8601", + "description" : string + "minValue" : UTC time interval since 1970 + "maxValue" : UTC time interval since 1970 +}, ``` * The value of myDate should be always UTC time interval since 1970. -* "subType" is optional, to specify wheather it's millisecond based timestamp or second based timestamp. +* "subType" is optional, to specify wheather it's millisecond based timestamp, a second based timestamp or an ISO 8601 timestamp. * If "subType" is specified as "ms", "minValue" and "maxValue" should be used like "1382455623.098" * "minValue" and "maxValue" are optional, to validate this type. * "maxValue" should be always same or later than "minValue". diff --git a/readJSON.py b/readJSON.py index eba084b..5448e47 100755 --- a/readJSON.py +++ b/readJSON.py @@ -39,21 +39,23 @@ projectPrefix = '' target = 'iOS' dirPathToSaveCodes = './src' +dirPathToSaveUtility = '' objectSuffix = "JSONObject" -usageString = '\nreadJSON.py [ -p | -t | -o | -s ] [-i]\n' +usageString = '\nreadJSON.py [ -p | -t | -o | -s | -u ] [-i]\n' usageString += 'Options:\n' usageString += ' -h, --help shows help\n' usageString += ' -p, --prefix= project prefix (default: S2M)\n' usageString += ' -s, --suffix= classname suffix (default: JSONObject). Use "-s false" for no suffix\n' usageString += ' -t, --target= target platform iOS or Android (default: iOS)\n' -usageString += ' -i, --input= meta-JSON file to read\n' usageString += ' -o, --output= ouput path of generated source codes\n' +usageString += ' -u, --utility= ouput path of generated Utility codes. Use "-u false" for no utility\n' +usageString += ' -i, --input= meta-JSON file to read\n' if __name__ == "__main__": argv = sys.argv[1:] try: - opts, args = getopt.getopt(argv,"ho:p:s:t:i:",["prefix=","suffix=","target=","input=","output="]) + opts, args = getopt.getopt(argv,"ho:p:s:t:i:u:",["prefix=","suffix=","target=","input=","output=","utility="]) except getopt.GetoptError: print usageString sys.exit(2) @@ -74,7 +76,20 @@ objectSuffix = arg if objectSuffix == "false": objectSuffix = "" + elif opt in ("-u", "--utility"): + dirPathToSaveUtility = arg + + + + if dirPathToSaveUtility == "": + tmpSourcePath = dirPathToSaveCodes + if tmpSourcePath.endswith("/") : + tmpSourcePath = tmpSourcePath[:-1] + dirPathToSaveUtility = tmpSourcePath + "/Utility" + elif dirPathToSaveUtility == "false": + dirPathToSaveUtility = ""; + addFiles = False for arg in argv : if arg.endswith(inputfile) : @@ -142,7 +157,8 @@ def openFileAndParseJSON(filePath): templateCodeGen.templatePath = templatePath templateCodeGen.projectPrefix = projectPrefix templateCodeGen.dirPath = dirPathToSaveCodes - templateCodeGen.writeTemplates() + if len(dirPathToSaveUtility) != 0 : + templateCodeGen.writeTemplates(dirPathToSaveUtility) JSONScheme.projectPrefix = projectPrefix JSONScheme.objectSuffix = objectSuffix