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