1 /** 2 * Copyright © 2008-2012 NetAllied Systems GmbH, Ravensburg, Germany. 3 * 4 * Licensed under the MIT Open Source License, 5 * for details please see LICENSE file or the website 6 * http://www.opensource.org/licenses/mit-license.php 7 */ 8 package de.netallied.xsd2cppsax.TypeMapping; 9 10 /** 11 * Factory which creates type mappings for XSD string types. Basically defines 12 * one mapping for C++ strings and uses that for other XSD types. Just anyURI 13 * has it's own mapping for variety atomic. 14 * 15 * TODO move type specific code templates in one (or multiple) config file(s). 16 * 17 */ 18 public abstract class TypeMapFactoryString extends TypeMapFactoryNumeric implements ITypeMapFactory { 19 createDefaultTypeMapAnyAtomicType()20 public TypeMap createDefaultTypeMapAnyAtomicType() { 21 TypeMap typeMap = createDefaultTypeMapString(); 22 typeMap.setXsdType("anyAtomicType"); 23 return typeMap; 24 } 25 createDefaultTypeMapAnySimpleType()26 public TypeMap createDefaultTypeMapAnySimpleType() { 27 TypeMap typeMap = createDefaultTypeMapString(); 28 typeMap.setXsdType("anySimpleType"); 29 return typeMap; 30 } 31 createDefaultTypeMapAnyType()32 public TypeMap createDefaultTypeMapAnyType() { 33 TypeMap typeMap = createDefaultTypeMapString(); 34 typeMap.setXsdType("anyType"); 35 return typeMap; 36 } 37 createDefaultTypeMapAnyURI()38 public TypeMap createDefaultTypeMapAnyURI() { 39 TypeMap typeMap = createDefaultTypeMapString(); 40 typeMap.setXsdType("anyURI"); 41 typeMap.setToString(".getURIString().c_str()"); 42 typeMap.setInitialize("COLLADABU::URI(\"#init_value#\")"); 43 typeMap.setInitializePreAtomic("bool failed = false;#nl##ind#"); 44 45 typeMap.setAttrAtomicTypeConversion("#tm_default_attr_atomic_xsd2cpp_rhs#" 46 + "GeneratedSaxParser::Utils::toURI(&attributeValue, failed);"); 47 typeMap.setAttrAtomicType("COLLADABU::URI"); 48 typeMap.setAttrAtomicTypePostConversion("#tm_default_post_attr_atomic_xsd2cpp#"); 49 typeMap.setAttrAtomicTypePreConversion("#tm_default_pre_attr_atomic_xsd2cpp#"); 50 51 // use list handling of xs:string 52 // because of deep copy problem in characterData2Data and 53 // characterData2List 54 // it is the line: 55 // typedBuffer[dataBufferIndex] = dataValue 56 57 // typeMap 58 // .setAttrListTypeConversionItemValidation(TypeMapConstants. 59 // getDEFAULT_ATTR_LIST_XSD_2_CPP_rhs() 60 // + 61 // "characterData2URIList(attributeValue, attributeData->#attrName#, #stv_item_type_vali_func#, #elementNameHash#, #attrNameHash#);" 62 // ); 63 // typeMap.setAttrListTypeConversionNoItemValidation(TypeMapConstants. 64 // getDEFAULT_ATTR_LIST_XSD_2_CPP_rhs() 65 // + 66 // "characterData2URIList(attributeValue, attributeData->#attrName#);"); 67 // typeMap.setAttrListType("XSList<COLLADABU::URI>"); 68 // typeMap.setAttrListTypePostConversion(typeMap. 69 // getAttrAtomicTypePostConversion()); 70 // typeMap.setAttrListTypePreConversion(typeMap. 71 // getAttrAtomicTypePreConversion()); 72 73 typeMap.setDataAtomicDataMethodImpl("#tm_default_data_atomic_data_method_impl#"); 74 typeMap 75 .setDataAtomicTypeConversion("#tm_default_data_atomic_xsd2cpp_rhs#" 76 + "GeneratedSaxParser::Utils::toURI((const ParserChar**)&mLastIncompleteFragmentInCharacterData, mEndOfDataInCurrentObjectOnStack, failed);"); 77 typeMap.setDataAtomicType(typeMap.getAttrAtomicType()); 78 typeMap.setDataAtomicTypePostConversion("#tm_default_post_data_atomic_xsd2cpp#"); 79 typeMap.setDataAtomicTypePreConversion("#tm_default_pre_data_atomic_xsd2cpp#"); 80 typeMap.setDataAtomicValidateEndImpl("#tm_default_data_atomic_conversion#"); 81 82 // use list handling of xs:string 83 // typeMap.setDataListEnd( 84 // "return uriDataEnd( &#className#::#dataMethod# );"); 85 // typeMap 86 // .setDataListEndValidation( 87 // "bool returnValue = uriDataEnd( &#className#::#dataMethod#, #stv_function_name_stream_end#, #stv_get_count_struct_member#, #stv_item_type_vali_func# );" 88 // ); 89 // typeMap.setDataListTypeConversion("return characterData2URIData" 90 // + "#tm_default_data_list_xsd2cpp_lhs#"); 91 // typeMap.setDataListTypeConversionValidation( 92 // "return characterData2URIData" 93 // + "#tm_default_data_list_xsd2cpp_validation_lhs#"); 94 // typeMap.setDataListType("const COLLADABU::URI*"); 95 96 // reuse enum conversion from xs:string 97 98 return typeMap; 99 } 100 createDefaultTypeMapENTITIES()101 public TypeMap createDefaultTypeMapENTITIES() { 102 TypeMap typeMap = createDefaultTypeMapString(); 103 typeMap.setXsdType("ENTITIES"); 104 return typeMap; 105 } 106 createDefaultTypeMapENTITY()107 public TypeMap createDefaultTypeMapENTITY() { 108 TypeMap typeMap = createDefaultTypeMapString(); 109 typeMap.setXsdType("ENTITY"); 110 return typeMap; 111 } 112 createDefaultTypeMapID()113 public TypeMap createDefaultTypeMapID() { 114 TypeMap typeMap = createDefaultTypeMapString(); 115 typeMap.setXsdType("ID"); 116 return typeMap; 117 } 118 createDefaultTypeMapIDREF()119 public TypeMap createDefaultTypeMapIDREF() { 120 TypeMap typeMap = createDefaultTypeMapString(); 121 typeMap.setXsdType("IDREF"); 122 return typeMap; 123 } 124 createDefaultTypeMapIDREFS()125 public TypeMap createDefaultTypeMapIDREFS() { 126 TypeMap typeMap = createDefaultTypeMapString(); 127 typeMap.setXsdType("IDREFS"); 128 return typeMap; 129 } 130 createDefaultTypeMapLanguage()131 public TypeMap createDefaultTypeMapLanguage() { 132 TypeMap typeMap = createDefaultTypeMapString(); 133 typeMap.setXsdType("language"); 134 return typeMap; 135 } 136 createDefaultTypeMapName()137 public TypeMap createDefaultTypeMapName() { 138 TypeMap typeMap = createDefaultTypeMapString(); 139 typeMap.setXsdType("Name"); 140 return typeMap; 141 } 142 createDefaultTypeMapNCName()143 public TypeMap createDefaultTypeMapNCName() { 144 TypeMap typeMap = createDefaultTypeMapString(); 145 typeMap.setXsdType("NCName"); 146 return typeMap; 147 } 148 createDefaultTypeMapNMTOKEN()149 public TypeMap createDefaultTypeMapNMTOKEN() { 150 TypeMap typeMap = createDefaultTypeMapString(); 151 typeMap.setXsdType("NMTOKEN"); 152 return typeMap; 153 } 154 createDefaultTypeMapNMTOKENS()155 public TypeMap createDefaultTypeMapNMTOKENS() { 156 TypeMap typeMap = createDefaultTypeMapString(); 157 typeMap.setXsdType("NMTOKENS"); 158 return typeMap; 159 } 160 createDefaultTypeMapNormalizedString()161 public TypeMap createDefaultTypeMapNormalizedString() { 162 TypeMap typeMap = createDefaultTypeMapString(); 163 typeMap.setXsdType("normalizedString"); 164 return typeMap; 165 } 166 createDefaultTypeMapNOTATION()167 public TypeMap createDefaultTypeMapNOTATION() { 168 TypeMap typeMap = createDefaultTypeMapString(); 169 typeMap.setXsdType("NOTATION"); 170 return typeMap; 171 } 172 createDefaultTypeMapQName()173 public TypeMap createDefaultTypeMapQName() { 174 TypeMap typeMap = createDefaultTypeMapString(); 175 typeMap.setXsdType("QName"); 176 return typeMap; 177 } 178 createDefaultTypeMapString()179 public TypeMap createDefaultTypeMapString() { 180 TypeMap typeMap = new TypeMap(); 181 typeMap.setXsdType("string"); 182 183 typeMap.setAttrAtomicTypeConversion("#tm_default_attr_atomic_xsd2cpp_rhs#" + "attributeValue;"); 184 typeMap.setAttrAtomicType("const ParserChar*"); 185 typeMap.setAttrAtomicTypePostConversion("#simple_type_validation#"); 186 typeMap.setAttrAtomicTypePreConversion(""); 187 188 typeMap 189 .setAttrListTypeConversionItemValidation("#tm_default_attr_list_xsd2cpp_rhs#" 190 + "characterData2StringList(attributeValue, attributeData->#attrName#, #stv_item_type_vali_func#, #elementNameHash#, #attrNameHash#);"); 191 typeMap.setAttrListTypeConversionNoItemValidation("#tm_default_attr_list_xsd2cpp_rhs#" 192 + "characterData2StringList(attributeValue, attributeData->#attrName#);"); 193 typeMap.setAttrListType("XSList<ParserString>"); 194 typeMap.setAttrListTypePostConversion("#tm_default_post_attr_atomic_xsd2cpp#"); 195 typeMap.setAttrListTypePreConversion("#tm_default_pre_attr_atomic_xsd2cpp#"); 196 197 typeMap.setDataAtomicDataMethodImpl("#tm_default_string_data_xsd2cpp#"); 198 typeMap.setDataAtomicTypeConversion("#tm_default_string_data_xsd2cpp#"); 199 typeMap.setDataAtomicType(typeMap.getAttrAtomicType()); 200 typeMap.setDataAtomicTypePostConversion(""); 201 typeMap.setDataAtomicTypePreConversion(""); 202 typeMap.setDataAtomicValidateEndImpl(null); 203 typeMap.setDataAtomicDataMethodImplFacetPattern("#tm_default_data_atomic_data_method_impl#"); 204 typeMap.setDataAtomicValidateEndImplFacetPattern("#tm_default_data_atomic_validate_end_facet_pattern#"); 205 206 typeMap.setDataListEnd("return stringListDataEnd( &#className#::#dataMethod# );"); 207 typeMap 208 .setDataListEndValidation("bool returnValue = stringListDataEnd( &#className#::#dataMethod#, #stv_function_name_stream_end#, #stv_get_count_struct_member#, #stv_item_type_vali_func# );"); 209 typeMap.setDataListTypeConversion("return characterData2StringData" + "#tm_default_data_list_xsd2cpp_lhs#"); 210 typeMap.setDataListTypeConversionValidation("return characterData2StringData" 211 + "#tm_default_data_list_xsd2cpp_validation_lhs#"); 212 typeMap.setDataListType("const ParserString*"); 213 214 typeMap.setEnumAttrAtomicTypeConversion("#tm_default_enum_string_attr_atomic_xsd2cpp#"); 215 typeMap.setEnumAttrAtomicTypePostConversion("#tm_default_post_attr_atomic_xsd2cpp#"); 216 typeMap.setEnumAttrAtomicTypePreConversion("#tm_default_pre_attr_atomic_xsd2cpp#"); 217 typeMap.setEnumDataAtomicTypeConversion("#tm_default_enum_string_data_atomic_xsd2cpp#"); 218 typeMap.setEnumDataListEnd("#tm_default_enum_string_data_list_dataend#"); 219 typeMap.setEnumDataListTypeConversion("#tm_default_enum_string_data_list_xsd2cpp#"); 220 221 typeMap.setUnionAtomicType("UnionString"); 222 typeMap.setUnionAtomicTypeConversion("Utils::toStringListItem"); 223 typeMap.setUnionEnumBaseType("StringHash"); 224 typeMap.setUnionEnumBaseTypeConversion("Utils::calculateStringHash"); 225 226 typeMap.setInitializePreList("bool failed;#nl##ind#"); 227 228 return typeMap; 229 } 230 createDefaultTypeMapToken()231 public TypeMap createDefaultTypeMapToken() { 232 TypeMap typeMap = createDefaultTypeMapString(); 233 typeMap.setXsdType("token"); 234 return typeMap; 235 } 236 237 } 238