Skip to content

Commit 2c979f4

Browse files
committed
Issues #50, #40, #33.
1 parent 5e4641b commit 2c979f4

File tree

4 files changed

+76
-3
lines changed

4 files changed

+76
-3
lines changed

compiler/src/main/java/org/hisrc/jsonix/compilation/mapping/PropertyInfoVisitor.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.hisrc.jsonix.compilation.mapping;
22

3+
import java.math.BigInteger;
4+
35
import javax.xml.namespace.QName;
46

57
import org.apache.commons.lang3.Validate;
@@ -9,6 +11,8 @@
911
import org.hisrc.jscm.codemodel.expression.JSMemberExpression;
1012
import org.hisrc.jscm.codemodel.expression.JSObjectLiteral;
1113
import org.hisrc.jsonix.naming.Naming;
14+
import org.hisrc.jsonix.xml.xsom.ParticleMultiplicityCounter;
15+
import org.hisrc.xml.xsom.XSFunctionApplier;
1216
import org.jvnet.jaxb2_commons.xml.bind.model.MAnyAttributePropertyInfo;
1317
import org.jvnet.jaxb2_commons.xml.bind.model.MAnyElementPropertyInfo;
1418
import org.jvnet.jaxb2_commons.xml.bind.model.MAttributePropertyInfo;
@@ -29,12 +33,16 @@
2933
import org.jvnet.jaxb2_commons.xml.bind.model.MWrappable;
3034
import org.jvnet.jaxb2_commons.xml.bind.model.util.DefaultTypeInfoVisitor;
3135

36+
import com.sun.tools.xjc.model.Multiplicity;
37+
3238
final class PropertyInfoVisitor<T, C extends T> implements
3339
MPropertyInfoVisitor<T, C, JSObjectLiteral> {
3440

3541
private final JSCodeModel codeModel;
3642
private final MappingCompiler<T, C> mappingCompiler;
3743
private final Naming naming;
44+
private final XSFunctionApplier<Multiplicity> multiplicityCounter = new XSFunctionApplier<Multiplicity>(
45+
ParticleMultiplicityCounter.INSTANCE);
3846

3947
public PropertyInfoVisitor(MappingCompiler<T, C> mappingCompiler) {
4048
Validate.notNull(mappingCompiler);
@@ -47,6 +55,28 @@ private void createPropertyInfoOptions(MPropertyInfo<T, C> propertyInfo,
4755
JSObjectLiteral options) {
4856
options.append(naming.name(),
4957
this.codeModel.string(propertyInfo.getPrivateName()));
58+
59+
final Multiplicity multiplicity = multiplicityCounter
60+
.apply(propertyInfo.getOrigin());
61+
if (multiplicity != null) {
62+
if (multiplicity.min != null
63+
&& !BigInteger.ZERO.equals(multiplicity.min)) {
64+
options.append(naming.required(), this.codeModel._boolean(true));
65+
}
66+
if (propertyInfo.isCollection()) {
67+
if (multiplicity.min != null) {
68+
if (!BigInteger.ONE.equals(multiplicity.min)) {
69+
options.append(naming.minOccurs(), this.codeModel
70+
.integer(multiplicity.min.longValue()));
71+
}
72+
}
73+
if (multiplicity.max != null) {
74+
options.append(naming.maxOccurs(), this.codeModel
75+
.integer(multiplicity.max.longValue()));
76+
}
77+
}
78+
}
79+
5080
if (propertyInfo.isCollection()) {
5181
options.append(naming.collection(), this.codeModel._boolean(true));
5282
}

compiler/src/main/java/org/hisrc/jsonix/naming/CompactNaming.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public class CompactNaming implements Naming {
4848
public static final String ELEMENT_REF = "er";
4949
public static final String ELEMENT_REFS = "ers";
5050

51+
public static final String REQUIRED = "rq";
52+
public static final String MINOCCURS = "mno";
53+
public static final String MAXOCCURS = "mxo";
54+
5155
public static final String NAMING_NAME = "compact";
5256

5357
public CompactNaming() {
@@ -245,4 +249,19 @@ public String elementInfos() {
245249
public String typeInfos() {
246250
return TYPE_INFOS;
247251
}
252+
253+
@Override
254+
public String required() {
255+
return REQUIRED;
256+
}
257+
258+
@Override
259+
public String minOccurs() {
260+
return MINOCCURS;
261+
}
262+
263+
@Override
264+
public String maxOccurs() {
265+
return MAXOCCURS;
266+
}
248267
}

compiler/src/main/java/org/hisrc/jsonix/naming/Naming.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,9 @@ public interface Naming {
8686

8787
String localPart();
8888

89+
String required();
90+
91+
String minOccurs();
92+
93+
String maxOccurs();
8994
}

compiler/src/main/java/org/hisrc/jsonix/naming/StandardNaming.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class StandardNaming implements Naming {
99
public static final String LIST = "list"; // li
1010
public static final String CLASS_INFO = "classInfo"; // ci
1111
public static final String LOCAL_NAME = "localName"; // ln
12-
public static final String TYPE_NAME = "typeName"; // tn
12+
public static final String TYPE_NAME = "typeName"; // tn
1313
public static final String BASE_TYPE_INFO = "baseTypeInfo"; // base
1414
public static final String PROPERTY_INFOS = "propertyInfos"; // ps
1515
public static final String ENUM_INFO = "enumInfo"; // ei
@@ -43,6 +43,10 @@ public class StandardNaming implements Naming {
4343
public static final String ELEMENT_REFS = "elementRefs";// rfs
4444
public static final String COLLECTION = "collection";// col
4545

46+
public static final String REQUIRED = "required";
47+
public static final String MINOCCURS = "minOccurs";
48+
public static final String MAXOCCURS = "maxOccurs";
49+
4650
public static final String NAMING_NAME = "standard";
4751

4852
public StandardNaming() {
@@ -68,7 +72,7 @@ public String list() {
6872
public String localName() {
6973
return LOCAL_NAME;
7074
}
71-
75+
7276
@Override
7377
public String typeName() {
7478
return TYPE_NAME;
@@ -216,7 +220,7 @@ public String localPart() {
216220
public String dependencies() {
217221
return DEPENDENCIES;
218222
}
219-
223+
220224
@Override
221225
public String targetNamespaceURI() {
222226
return TARGET_NAMESPACE_URI;
@@ -242,4 +246,19 @@ public String typeInfos() {
242246
return TYPE_INFOS;
243247
}
244248

249+
@Override
250+
public String required() {
251+
return REQUIRED;
252+
}
253+
254+
@Override
255+
public String minOccurs() {
256+
return MINOCCURS;
257+
}
258+
259+
@Override
260+
public String maxOccurs() {
261+
return MAXOCCURS;
262+
}
263+
245264
}

0 commit comments

Comments
 (0)