[DEV] update real separation between the node and the properties
This commit is contained in:
parent
956f78642b
commit
d4b528eedf
@ -7,16 +7,17 @@ import org.atriasoft.exml.exception.ExmlBuilderException;
|
|||||||
|
|
||||||
|
|
||||||
public abstract class IntrospectionModel {
|
public abstract class IntrospectionModel {
|
||||||
|
protected static final Boolean DEFAULT_ATTRIBUTE = false;
|
||||||
protected static final Boolean DEFAULT_CASE_SENSITIVE = true;
|
protected static final Boolean DEFAULT_CASE_SENSITIVE = true;
|
||||||
protected static final Boolean DEFAULT_MANAGED = true;
|
protected static final Boolean DEFAULT_MANAGED = true;
|
||||||
protected static final Boolean DEFAULT_OPTIONAL = false;
|
protected static final Boolean DEFAULT_OPTIONAL = false;
|
||||||
|
|
||||||
protected final Class<?> classType;
|
protected final Class<?> classType;
|
||||||
|
|
||||||
public List<IntrospectionProperty> getMethods() {
|
public List<IntrospectionProperty> getNodes() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public List<IntrospectionProperty> getProperties() {
|
public List<IntrospectionProperty> getAttributes() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public Class<?> getClassType() {
|
public Class<?> getClassType() {
|
||||||
|
@ -16,7 +16,9 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import org.atriasoft.eStringSerialize.StringSerializer;
|
import org.atriasoft.eStringSerialize.StringSerializer;
|
||||||
import org.atriasoft.etk.util.ArraysTools;
|
import org.atriasoft.etk.util.ArraysTools;
|
||||||
|
import org.atriasoft.exml.annotation.XmlAttribute;
|
||||||
import org.atriasoft.exml.annotation.XmlCaseSensitive;
|
import org.atriasoft.exml.annotation.XmlCaseSensitive;
|
||||||
|
import org.atriasoft.exml.annotation.XmlDefaultAttibute;
|
||||||
import org.atriasoft.exml.annotation.XmlDefaultCaseSensitive;
|
import org.atriasoft.exml.annotation.XmlDefaultCaseSensitive;
|
||||||
import org.atriasoft.exml.annotation.XmlDefaultManaged;
|
import org.atriasoft.exml.annotation.XmlDefaultManaged;
|
||||||
import org.atriasoft.exml.annotation.XmlDefaultOptional;
|
import org.atriasoft.exml.annotation.XmlDefaultOptional;
|
||||||
@ -33,23 +35,24 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
|
|
||||||
// TODO Optimize this with external object for basic types....
|
// TODO Optimize this with external object for basic types....
|
||||||
private final Method valueof; // used for the set Text if the object is an end point...
|
private final Method valueof; // used for the set Text if the object is an end point...
|
||||||
private final List<IntrospectionProperty> methods = new ArrayList<>();
|
private final List<IntrospectionProperty> nodes = new ArrayList<>();
|
||||||
|
|
||||||
private final List<IntrospectionProperty> properties = new ArrayList<>();
|
private final List<IntrospectionProperty> attributes = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<IntrospectionProperty> getMethods() {
|
public List<IntrospectionProperty> getNodes() {
|
||||||
return this.methods;
|
return this.nodes;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public List<IntrospectionProperty> getProperties() {
|
public List<IntrospectionProperty> getAttributes() {
|
||||||
return this.properties;
|
return this.attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntrospectionModelComplex(final Class<?> classType) throws ExmlBuilderException {
|
public IntrospectionModelComplex(final Class<?> classType) throws ExmlBuilderException {
|
||||||
super(classType);
|
super(classType);
|
||||||
try {
|
try {
|
||||||
|
final Boolean isDefaultAttribute = getIsDefaultAttribute(classType, IntrospectionModel.DEFAULT_ATTRIBUTE);
|
||||||
final Boolean isDefaultManaged = getIsDefaultManaged(classType, IntrospectionModel.DEFAULT_MANAGED);
|
final Boolean isDefaultManaged = getIsDefaultManaged(classType, IntrospectionModel.DEFAULT_MANAGED);
|
||||||
final Boolean isDefaultOptional = getIsDefaultOptional(classType, IntrospectionModel.DEFAULT_OPTIONAL);
|
final Boolean isDefaultOptional = getIsDefaultOptional(classType, IntrospectionModel.DEFAULT_OPTIONAL);
|
||||||
final Boolean isDefaultCaseSensitive = getIsDefaultCaseSensitive(classType, IntrospectionModel.DEFAULT_CASE_SENSITIVE);
|
final Boolean isDefaultCaseSensitive = getIsDefaultCaseSensitive(classType, IntrospectionModel.DEFAULT_CASE_SENSITIVE);
|
||||||
@ -70,6 +73,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
if (!Modifier.isPublic(elem.getModifiers())) {
|
if (!Modifier.isPublic(elem.getModifiers())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
final Boolean isAttribute = getIsAttribute(elem, isDefaultAttribute);
|
||||||
final Boolean isManaged = getIsManaged(elem, isDefaultManaged);
|
final Boolean isManaged = getIsManaged(elem, isDefaultManaged);
|
||||||
final Boolean isOptionnal = getIsOptional(elem, isDefaultOptional);
|
final Boolean isOptionnal = getIsOptional(elem, isDefaultOptional);
|
||||||
final String[] names = getNames(elem, Tools.decapitalizeFirst(elem.getName()));
|
final String[] names = getNames(elem, Tools.decapitalizeFirst(elem.getName()));
|
||||||
@ -77,7 +81,11 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
final String listName = getListName(elem, null);
|
final String listName = getListName(elem, null);
|
||||||
// TODO check if property does not already exist ...
|
// TODO check if property does not already exist ...
|
||||||
if (isManaged) {
|
if (isManaged) {
|
||||||
this.properties.add(new IntrospectionPropertyField(elem, names, listName, caseSensitive, isOptionnal));
|
if (isAttribute) {
|
||||||
|
this.attributes.add(new IntrospectionPropertyField(elem, names, listName, caseSensitive, isOptionnal));
|
||||||
|
} else {
|
||||||
|
this.nodes.add(new IntrospectionPropertyField(elem, names, listName, caseSensitive, isOptionnal));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Log.verbose(" - " + elem.toGenericString());
|
Log.verbose(" - " + elem.toGenericString());
|
||||||
}
|
}
|
||||||
@ -234,6 +242,13 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
if (elem.setter != null && elem.getter != null) {
|
if (elem.setter != null && elem.getter != null) {
|
||||||
Log.info(" setter: " + elem.setter.toGenericString());
|
Log.info(" setter: " + elem.setter.toGenericString());
|
||||||
Log.info(" getter: " + elem.getter.toGenericString());
|
Log.info(" getter: " + elem.getter.toGenericString());
|
||||||
|
final Boolean isAttributeSet = getIsAttribute(elem.setter, null);
|
||||||
|
final Boolean isAttributeGet = getIsAttribute(elem.getter, null);
|
||||||
|
if (isAttributeSet != null && isAttributeGet != null && isAttributeSet != isAttributeGet) {
|
||||||
|
throw new Exception("Can net set oposite information on getter and setter");
|
||||||
|
}
|
||||||
|
final Boolean isAttribute = isAttributeSet != null ? isAttributeSet : isAttributeGet != null ? isAttributeGet : isDefaultAttribute;
|
||||||
|
|
||||||
final Boolean isManagedSet = getIsManaged(elem.setter, null);
|
final Boolean isManagedSet = getIsManaged(elem.setter, null);
|
||||||
final Boolean isManagedGet = getIsManaged(elem.getter, null);
|
final Boolean isManagedGet = getIsManaged(elem.getter, null);
|
||||||
if (isManagedSet != null && isManagedGet != null && isManagedSet != isManagedGet) {
|
if (isManagedSet != null && isManagedGet != null && isManagedSet != isManagedGet) {
|
||||||
@ -265,15 +280,21 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
final String listNameSet = getListName(elem.setter, null);
|
final String listNameSet = getListName(elem.setter, null);
|
||||||
final String listNameGet = getListName(elem.getter, null);
|
final String listNameGet = getListName(elem.getter, null);
|
||||||
final String listName = listNameSet != null? listNameSet: listNameGet;
|
final String listName = listNameSet != null? listNameSet: listNameGet;
|
||||||
this.methods.add(new IntrospectionPropertyMethod(elem.setter, elem.getter, names, listName, isCaseSensitive, isOptional));
|
if (isAttribute) {
|
||||||
|
this.attributes.add(new IntrospectionPropertyMethod(elem.setter, elem.getter, names, listName, isCaseSensitive, isOptional));
|
||||||
|
} else {
|
||||||
|
this.nodes.add(new IntrospectionPropertyMethod(elem.setter, elem.getter, names, listName, isCaseSensitive, isOptional));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Boolean isManaged = null;
|
Boolean isManaged = null;
|
||||||
Boolean isOptionnal = null;
|
Boolean isOptionnal = null;
|
||||||
String[] names = null;
|
String[] names = null;
|
||||||
Boolean isCaseSensitive = null;
|
Boolean isCaseSensitive = null;
|
||||||
String listName = null;
|
String listName = null;
|
||||||
|
Boolean isAttribute = isDefaultAttribute;
|
||||||
if (elem.setter != null) {
|
if (elem.setter != null) {
|
||||||
Log.info(" setter: " + elem.setter.toGenericString());
|
Log.info(" setter: " + elem.setter.toGenericString());
|
||||||
|
isAttribute = getIsAttribute(elem.setter, isDefaultAttribute);
|
||||||
isManaged = getIsManaged(elem.setter, isDefaultManaged);
|
isManaged = getIsManaged(elem.setter, isDefaultManaged);
|
||||||
isOptionnal = getIsOptional(elem.setter, isDefaultOptional);
|
isOptionnal = getIsOptional(elem.setter, isDefaultOptional);
|
||||||
names = getNames(elem.setter, Tools.decapitalizeFirst(elem.name));
|
names = getNames(elem.setter, Tools.decapitalizeFirst(elem.name));
|
||||||
@ -284,6 +305,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
}
|
}
|
||||||
if (elem.getter != null) {
|
if (elem.getter != null) {
|
||||||
Log.info(" getter: " + elem.getter.toGenericString());
|
Log.info(" getter: " + elem.getter.toGenericString());
|
||||||
|
isAttribute = getIsAttribute(elem.getter, isDefaultAttribute);
|
||||||
isManaged = getIsManaged(elem.getter, isDefaultManaged);
|
isManaged = getIsManaged(elem.getter, isDefaultManaged);
|
||||||
isOptionnal = getIsOptional(elem.getter, isDefaultOptional);
|
isOptionnal = getIsOptional(elem.getter, isDefaultOptional);
|
||||||
names = getNames(elem.getter, Tools.decapitalizeFirst(elem.name));
|
names = getNames(elem.getter, Tools.decapitalizeFirst(elem.name));
|
||||||
@ -293,7 +315,11 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
Log.info(" getter: null");
|
Log.info(" getter: null");
|
||||||
}
|
}
|
||||||
if (isManaged) {
|
if (isManaged) {
|
||||||
this.methods.add(new IntrospectionPropertyMethod(elem.setter, elem.getter, names, listName, isCaseSensitive, isOptionnal));
|
if (isAttribute) {
|
||||||
|
this.attributes.add(new IntrospectionPropertyMethod(elem.setter, elem.getter, names, listName, isCaseSensitive, isOptionnal));
|
||||||
|
} else {
|
||||||
|
this.nodes.add(new IntrospectionPropertyMethod(elem.setter, elem.getter, names, listName, isCaseSensitive, isOptionnal));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -330,16 +356,16 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
@Override
|
@Override
|
||||||
protected List<String> getNodeAvaillable() {
|
protected List<String> getNodeAvaillable() {
|
||||||
List<String> out = new ArrayList<>();
|
List<String> out = new ArrayList<>();
|
||||||
for (final IntrospectionProperty prop : this.methods) {
|
for (final IntrospectionProperty prop : this.nodes) {
|
||||||
out.add(prop.getNames()[0]);
|
|
||||||
}
|
|
||||||
for (final IntrospectionProperty prop : this.properties) {
|
|
||||||
out.add(prop.getNames()[0]);
|
out.add(prop.getNames()[0]);
|
||||||
}
|
}
|
||||||
|
// for (final IntrospectionProperty prop : this.attributes) {
|
||||||
|
// out.add(prop.getNames()[0]);
|
||||||
|
// }
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
protected IntrospectionProperty findMethodDescription(final String propertyName) throws ExmlBuilderException {
|
protected IntrospectionProperty findNodeDescription(final String propertyName) throws ExmlBuilderException {
|
||||||
for (final IntrospectionProperty prop : this.methods) {
|
for (final IntrospectionProperty prop : this.nodes) {
|
||||||
if (prop.isCompatible(propertyName)) {
|
if (prop.isCompatible(propertyName)) {
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
@ -348,7 +374,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected IntrospectionProperty findPropertyDescription(final String propertyName) throws ExmlBuilderException {
|
protected IntrospectionProperty findPropertyDescription(final String propertyName) throws ExmlBuilderException {
|
||||||
for (final IntrospectionProperty prop : this.properties) {
|
for (final IntrospectionProperty prop : this.attributes) {
|
||||||
if (prop.isCompatible(propertyName)) {
|
if (prop.isCompatible(propertyName)) {
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
@ -362,7 +388,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new ExmlBuilderException("Must not hame more that ");
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlCaseSensitive) annotation[0]).value();
|
return ((XmlCaseSensitive) annotation[0]).value();
|
||||||
}
|
}
|
||||||
@ -373,7 +399,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new ExmlBuilderException("Must not hame more that ");
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlCaseSensitive) annotation[0]).value();
|
return ((XmlCaseSensitive) annotation[0]).value();
|
||||||
}
|
}
|
||||||
@ -384,10 +410,21 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new ExmlBuilderException("Must not hame more that ");
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlDefaultCaseSensitive) annotation[0]).value();
|
return ((XmlDefaultCaseSensitive) annotation[0]).value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Boolean getIsDefaultAttribute(final Class<?> classType, final Boolean defaultValue) throws ExmlBuilderException {
|
||||||
|
final Annotation[] annotation = classType.getDeclaredAnnotationsByType(XmlDefaultAttibute.class);
|
||||||
|
if (annotation.length == 0) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
if (annotation.length > 1) {
|
||||||
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
|
}
|
||||||
|
return ((XmlDefaultAttibute) annotation[0]).value();
|
||||||
|
}
|
||||||
|
|
||||||
private Boolean getIsDefaultManaged(final Class<?> classType, final Boolean defaultValue) throws ExmlBuilderException {
|
private Boolean getIsDefaultManaged(final Class<?> classType, final Boolean defaultValue) throws ExmlBuilderException {
|
||||||
final Annotation[] annotation = classType.getDeclaredAnnotationsByType(XmlDefaultManaged.class);
|
final Annotation[] annotation = classType.getDeclaredAnnotationsByType(XmlDefaultManaged.class);
|
||||||
@ -395,7 +432,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new ExmlBuilderException("Must not hame more that ");
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlDefaultManaged) annotation[0]).value();
|
return ((XmlDefaultManaged) annotation[0]).value();
|
||||||
}
|
}
|
||||||
@ -406,18 +443,40 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new ExmlBuilderException("Must not hame more that ");
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlDefaultOptional) annotation[0]).value();
|
return ((XmlDefaultOptional) annotation[0]).value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Boolean getIsAttribute(final Field element, final Boolean parentValue) throws ExmlBuilderException {
|
||||||
|
final Annotation[] annotation = element.getDeclaredAnnotationsByType(XmlAttribute.class);
|
||||||
|
if (annotation.length == 0) {
|
||||||
|
return parentValue;
|
||||||
|
}
|
||||||
|
if (annotation.length > 1) {
|
||||||
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
|
}
|
||||||
|
return ((XmlAttribute) annotation[0]).value();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Boolean getIsAttribute(final Method element, final Boolean parentValue) throws ExmlBuilderException {
|
||||||
|
final Annotation[] annotation = element.getDeclaredAnnotationsByType(XmlAttribute.class);
|
||||||
|
if (annotation.length == 0) {
|
||||||
|
return parentValue;
|
||||||
|
}
|
||||||
|
if (annotation.length > 1) {
|
||||||
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
|
}
|
||||||
|
return ((XmlAttribute) annotation[0]).value();
|
||||||
|
}
|
||||||
|
|
||||||
protected Boolean getIsManaged(final Field element, final Boolean parentValue) throws ExmlBuilderException {
|
protected Boolean getIsManaged(final Field element, final Boolean parentValue) throws ExmlBuilderException {
|
||||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(XmlManaged.class);
|
final Annotation[] annotation = element.getDeclaredAnnotationsByType(XmlManaged.class);
|
||||||
if (annotation.length == 0) {
|
if (annotation.length == 0) {
|
||||||
return parentValue;
|
return parentValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new ExmlBuilderException("Must not hame more that ");
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlManaged) annotation[0]).value();
|
return ((XmlManaged) annotation[0]).value();
|
||||||
}
|
}
|
||||||
@ -428,7 +487,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return parentValue;
|
return parentValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new ExmlBuilderException("Must not hame more that ");
|
throw new ExmlBuilderException("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlManaged) annotation[0]).value();
|
return ((XmlManaged) annotation[0]).value();
|
||||||
}
|
}
|
||||||
@ -439,7 +498,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return parentValue;
|
return parentValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new Exception("Must not hame more that ");
|
throw new Exception("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlOptional) annotation[0]).value();
|
return ((XmlOptional) annotation[0]).value();
|
||||||
}
|
}
|
||||||
@ -450,7 +509,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return parentValue;
|
return parentValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new Exception("Must not hame more that ");
|
throw new Exception("Must not have more that ");
|
||||||
}
|
}
|
||||||
return ((XmlOptional) annotation[0]).value();
|
return ((XmlOptional) annotation[0]).value();
|
||||||
}
|
}
|
||||||
@ -464,7 +523,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return new String[] { defaultValue };
|
return new String[] { defaultValue };
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new Exception("Must not hame more that ");
|
throw new Exception("Must not have more that ");
|
||||||
}
|
}
|
||||||
final String[] tmp = ((XmlName) annotation[0]).value();
|
final String[] tmp = ((XmlName) annotation[0]).value();
|
||||||
if (tmp == null) {
|
if (tmp == null) {
|
||||||
@ -493,7 +552,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return new String[] { defaultValue };
|
return new String[] { defaultValue };
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new Exception("Must not hame more that ");
|
throw new Exception("Must not have more that ");
|
||||||
}
|
}
|
||||||
final String[] tmp = ((XmlName) annotation[0]).value();
|
final String[] tmp = ((XmlName) annotation[0]).value();
|
||||||
if (tmp == null) {
|
if (tmp == null) {
|
||||||
@ -519,7 +578,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new Exception("Must not hame more that ");
|
throw new Exception("Must not have more that ");
|
||||||
}
|
}
|
||||||
final String tmp = ((XmlList) annotation[0]).value();
|
final String tmp = ((XmlList) annotation[0]).value();
|
||||||
if (tmp == null) {
|
if (tmp == null) {
|
||||||
@ -533,7 +592,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
if (annotation.length > 1) {
|
if (annotation.length > 1) {
|
||||||
throw new Exception("Must not hame more that ");
|
throw new Exception("Must not have more that ");
|
||||||
}
|
}
|
||||||
final String tmp = ((XmlList) annotation[0]).value();
|
final String tmp = ((XmlList) annotation[0]).value();
|
||||||
if (tmp == null) {
|
if (tmp == null) {
|
||||||
@ -555,7 +614,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
private void setValue(final Object data, final String name, final Object value) throws ExmlBuilderException {
|
private void setValue(final Object data, final String name, final Object value) throws ExmlBuilderException {
|
||||||
Log.error(" Set value ='" + name + "' propertyValue='" + value + "' " + value.getClass().getCanonicalName());
|
Log.error(" Set value ='" + name + "' propertyValue='" + value + "' " + value.getClass().getCanonicalName());
|
||||||
// by default use setter to set the property
|
// by default use setter to set the property
|
||||||
final IntrospectionProperty propMethode = findMethodDescription(name);
|
final IntrospectionProperty propMethode = findNodeDescription(name);
|
||||||
if (propMethode != null && propMethode.canSetValue()) {
|
if (propMethode != null && propMethode.canSetValue()) {
|
||||||
Log.verbose(" ==> find '" + Arrays.toString(propMethode.getNames()) + " type=" + propMethode.getType() + " sub-type=" + propMethode.getSubType() );
|
Log.verbose(" ==> find '" + Arrays.toString(propMethode.getNames()) + " type=" + propMethode.getType() + " sub-type=" + propMethode.getSubType() );
|
||||||
if (propMethode.getType().isAssignableFrom(value.getClass())) {
|
if (propMethode.getType().isAssignableFrom(value.getClass())) {
|
||||||
@ -676,7 +735,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
public Class<?> getTypeOfSubNode(final Object data, final String nodeName) throws ExmlBuilderException {
|
public Class<?> getTypeOfSubNode(final Object data, final String nodeName) throws ExmlBuilderException {
|
||||||
Log.error(" nodeType='" + nodeName + "'");
|
Log.error(" nodeType='" + nodeName + "'");
|
||||||
// by default use setter to set the property
|
// by default use setter to set the property
|
||||||
final IntrospectionProperty propMethode = findMethodDescription(nodeName);
|
final IntrospectionProperty propMethode = findNodeDescription(nodeName);
|
||||||
if (propMethode != null && propMethode.canSetValue()) {
|
if (propMethode != null && propMethode.canSetValue()) {
|
||||||
Log.error(" ==> find '" + propMethode.getNames());
|
Log.error(" ==> find '" + propMethode.getNames());
|
||||||
return propMethode.getType();
|
return propMethode.getType();
|
||||||
@ -694,7 +753,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
public Class<?> getTypeOfSubNodeList(final Object data, final String nodeName) throws ExmlBuilderException {
|
public Class<?> getTypeOfSubNodeList(final Object data, final String nodeName) throws ExmlBuilderException {
|
||||||
Log.error(" nodeType='" + nodeName + "'");
|
Log.error(" nodeType='" + nodeName + "'");
|
||||||
// by default use setter to set the property
|
// by default use setter to set the property
|
||||||
final IntrospectionProperty propMethode = findMethodDescription(nodeName);
|
final IntrospectionProperty propMethode = findNodeDescription(nodeName);
|
||||||
if (propMethode != null && propMethode.canSetValue()) {
|
if (propMethode != null && propMethode.canSetValue()) {
|
||||||
Log.error(" ==> find '" + propMethode.getNames());
|
Log.error(" ==> find '" + propMethode.getNames());
|
||||||
return propMethode.getSubType();
|
return propMethode.getSubType();
|
||||||
@ -711,7 +770,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
public String getTreeNameOfSubNode(final Object data, final String nodeName) throws ExmlBuilderException {
|
public String getTreeNameOfSubNode(final Object data, final String nodeName) throws ExmlBuilderException {
|
||||||
Log.error(" nodeType='" + nodeName + "'");
|
Log.error(" nodeType='" + nodeName + "'");
|
||||||
// by default use setter to set the property
|
// by default use setter to set the property
|
||||||
final IntrospectionProperty propMethode = findMethodDescription(nodeName);
|
final IntrospectionProperty propMethode = findNodeDescription(nodeName);
|
||||||
if (propMethode != null && propMethode.canSetValue()) {
|
if (propMethode != null && propMethode.canSetValue()) {
|
||||||
Log.error(" ==> find '" + propMethode.getNames());
|
Log.error(" ==> find '" + propMethode.getNames());
|
||||||
return propMethode.getListName();
|
return propMethode.getListName();
|
||||||
@ -780,7 +839,7 @@ public class IntrospectionModelComplex extends IntrospectionModel {
|
|||||||
public Object getValue(final String propertyName, final String propertyValue) throws ExmlBuilderException {
|
public Object getValue(final String propertyName, final String propertyValue) throws ExmlBuilderException {
|
||||||
Log.error(" propertyName='" + propertyName + "' propertyValue='" + propertyValue + "' ");
|
Log.error(" propertyName='" + propertyName + "' propertyValue='" + propertyValue + "' ");
|
||||||
// by default use setter to set the property
|
// by default use setter to set the property
|
||||||
final IntrospectionProperty propMethode = findMethodDescription(propertyName);
|
final IntrospectionProperty propMethode = findNodeDescription(propertyName);
|
||||||
if (propMethode != null && propMethode.canSetValue()) {
|
if (propMethode != null && propMethode.canSetValue()) {
|
||||||
Log.verbose(" ==> find '" + propMethode.getNames());
|
Log.verbose(" ==> find '" + propMethode.getNames());
|
||||||
return propMethode.createValue(propertyValue);
|
return propMethode.createValue(propertyValue);
|
||||||
|
@ -34,7 +34,7 @@ public class GeneratorIntrospection implements Generator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void generateProperties(final Object data, final IntrospectionModel introspection, final StringBuilder tmpp) throws ExmlBuilderException {
|
public void generateProperties(final Object data, final IntrospectionModel introspection, final StringBuilder tmpp) throws ExmlBuilderException {
|
||||||
List<IntrospectionProperty> elements = introspection.getProperties();
|
List<IntrospectionProperty> elements = introspection.getAttributes();
|
||||||
if (elements == null) {
|
if (elements == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@ public class GeneratorIntrospection implements Generator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void generateSubNodes(final Object data, final IntrospectionModel introspection, final StringBuilder tmpp, final int indent) throws ExmlBuilderException {
|
public void generateSubNodes(final Object data, final IntrospectionModel introspection, final StringBuilder tmpp, final int indent) throws ExmlBuilderException {
|
||||||
List<IntrospectionProperty> elements = introspection.getMethods();
|
List<IntrospectionProperty> elements = introspection.getNodes();
|
||||||
for (IntrospectionProperty elem : elements) {
|
for (IntrospectionProperty elem : elements) {
|
||||||
if (!elem.canGetValue()) {
|
if (!elem.canGetValue()) {
|
||||||
continue;
|
continue;
|
||||||
@ -109,7 +109,7 @@ public class GeneratorIntrospection implements Generator {
|
|||||||
tmpp.append("<");
|
tmpp.append("<");
|
||||||
tmpp.append(nodeName);
|
tmpp.append(nodeName);
|
||||||
generateProperties(data, introspection, tmpp);
|
generateProperties(data, introspection, tmpp);
|
||||||
if (introspection.getMethods().size() != 0) {
|
if (introspection.getNodes().size() != 0) {
|
||||||
tmpp.append(">");
|
tmpp.append(">");
|
||||||
generateSubNodes(data, introspection, tmpp, indent + 1);
|
generateSubNodes(data, introspection, tmpp, indent + 1);
|
||||||
Tools.addIndent(tmpp, indent);
|
Tools.addIndent(tmpp, indent);
|
||||||
|
@ -100,19 +100,19 @@ public class ExmlTestIntrospectionBoolean {
|
|||||||
private Boolean valueA;
|
private Boolean valueA;
|
||||||
private Boolean valueB;
|
private Boolean valueB;
|
||||||
private Boolean valueNull;
|
private Boolean valueNull;
|
||||||
public Boolean getValueA() {
|
public Boolean isValueA() {
|
||||||
return this.valueA;
|
return this.valueA;
|
||||||
}
|
}
|
||||||
public void setValueA(final Boolean valueA) {
|
public void setValueA(final Boolean valueA) {
|
||||||
this.valueA = valueA;
|
this.valueA = valueA;
|
||||||
}
|
}
|
||||||
public Boolean getValueB() {
|
public Boolean isValueB() {
|
||||||
return this.valueB;
|
return this.valueB;
|
||||||
}
|
}
|
||||||
public void setValueB(final Boolean valueB) {
|
public void setValueB(final Boolean valueB) {
|
||||||
this.valueB = valueB;
|
this.valueB = valueB;
|
||||||
}
|
}
|
||||||
public Boolean getValueNull() {
|
public Boolean isValueNull() {
|
||||||
return this.valueNull;
|
return this.valueNull;
|
||||||
}
|
}
|
||||||
public void setValueNull(final Boolean valueNull) {
|
public void setValueNull(final Boolean valueNull) {
|
||||||
@ -134,9 +134,9 @@ public class ExmlTestIntrospectionBoolean {
|
|||||||
Assertions.assertEquals("<elem valueA=\"false\" valueB=\"true\"/>", dataTest);
|
Assertions.assertEquals("<elem valueA=\"false\" valueB=\"true\"/>", dataTest);
|
||||||
|
|
||||||
final TestBooleanFunc root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestBooleanFunc.class, ExmlTestIntrospectionBoolean.NODE_NAME));
|
final TestBooleanFunc root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestBooleanFunc.class, ExmlTestIntrospectionBoolean.NODE_NAME));
|
||||||
Assertions.assertEquals(false, root.getValueA());
|
Assertions.assertEquals(false, root.isValueA());
|
||||||
Assertions.assertEquals(true, root.getValueB());
|
Assertions.assertEquals(true, root.isValueB());
|
||||||
Assertions.assertEquals(null, root.getValueNull());
|
Assertions.assertEquals(null, root.isValueNull());
|
||||||
}
|
}
|
||||||
|
|
||||||
@XmlDefaultAttibute
|
@XmlDefaultAttibute
|
||||||
@ -203,6 +203,233 @@ public class ExmlTestIntrospectionBoolean {
|
|||||||
Assertions.assertEquals(false, root.getValues().get(3));
|
Assertions.assertEquals(false, root.getValues().get(3));
|
||||||
Assertions.assertEquals(true, root.getValues().get(4));
|
Assertions.assertEquals(true, root.getValues().get(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class TestNodeBoolean {
|
||||||
|
public Boolean valueA;
|
||||||
|
public Boolean valueB;
|
||||||
|
public Boolean valueNull;
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testModelNodeBoolean() {
|
||||||
|
TestNodeBoolean elem = new TestNodeBoolean();
|
||||||
|
elem.valueA = false;
|
||||||
|
elem.valueB = true;
|
||||||
|
elem.valueNull = null;
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionBoolean.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem>\n"
|
||||||
|
+ " <valueA>false</valueA>\n"
|
||||||
|
+ " <valueB>true</valueB>\n"
|
||||||
|
+ "</elem>", dataTest);
|
||||||
|
|
||||||
|
final TestNodeBoolean root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestNodeBoolean.class, ExmlTestIntrospectionBoolean.NODE_NAME));
|
||||||
|
Assertions.assertEquals(false, root.valueA);
|
||||||
|
Assertions.assertEquals(true, root.valueB);
|
||||||
|
Assertions.assertEquals(null, root.valueNull);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TestArrayNodeBoolean {
|
||||||
|
public Boolean[] values;
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testModelArrayNodeBoolean() {
|
||||||
|
TestArrayNodeBoolean elem = new TestArrayNodeBoolean();
|
||||||
|
elem.values = new Boolean[] {false, false, true, false, true};
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionBoolean.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem>\n"
|
||||||
|
+ " <values>false</values>\n"
|
||||||
|
+ " <values>false</values>\n"
|
||||||
|
+ " <values>true</values>\n"
|
||||||
|
+ " <values>false</values>\n"
|
||||||
|
+ " <values>true</values>\n"
|
||||||
|
+ "</elem>", dataTest);
|
||||||
|
|
||||||
|
final TestArrayNodeBoolean root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestArrayNodeBoolean.class, ExmlTestIntrospectionBoolean.NODE_NAME));
|
||||||
|
Assertions.assertEquals(5, root.values.length);
|
||||||
|
Assertions.assertEquals(false, root.values[0]);
|
||||||
|
Assertions.assertEquals(false, root.values[1]);
|
||||||
|
Assertions.assertEquals(true, root.values[2]);
|
||||||
|
Assertions.assertEquals(false, root.values[3]);
|
||||||
|
Assertions.assertEquals(true, root.values[4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TestListNodeBoolean {
|
||||||
|
public List<Boolean> values;
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testModelListNodeBoolean() {
|
||||||
|
TestListNodeBoolean elem = new TestListNodeBoolean();
|
||||||
|
elem.values = List.of(false, false, true, false, true);
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionBoolean.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem values=\"false;false;true;false;true\"/>", dataTest);
|
||||||
|
|
||||||
|
final TestListNodeBoolean root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestListNodeBoolean.class, ExmlTestIntrospectionBoolean.NODE_NAME));
|
||||||
|
Assertions.assertEquals(5, root.values.size());
|
||||||
|
Assertions.assertEquals(false, root.values.get(0));
|
||||||
|
Assertions.assertEquals(false, root.values.get(1));
|
||||||
|
Assertions.assertEquals(true, root.values.get(2));
|
||||||
|
Assertions.assertEquals(false, root.values.get(3));
|
||||||
|
Assertions.assertEquals(true, root.values.get(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class TestNodeBooleanFunc {
|
||||||
|
private Boolean valueA;
|
||||||
|
private Boolean valueB;
|
||||||
|
private Boolean valueNull;
|
||||||
|
public Boolean isValueA() {
|
||||||
|
return this.valueA;
|
||||||
|
}
|
||||||
|
public void setValueA(final Boolean valueA) {
|
||||||
|
this.valueA = valueA;
|
||||||
|
}
|
||||||
|
public Boolean isValueB() {
|
||||||
|
return this.valueB;
|
||||||
|
}
|
||||||
|
public void setValueB(final Boolean valueB) {
|
||||||
|
this.valueB = valueB;
|
||||||
|
}
|
||||||
|
public Boolean isValueNull() {
|
||||||
|
return this.valueNull;
|
||||||
|
}
|
||||||
|
public void setValueNull(final Boolean valueNull) {
|
||||||
|
this.valueNull = valueNull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testModelNodeBooleanFunc() {
|
||||||
|
TestNodeBooleanFunc elem = new TestNodeBooleanFunc();
|
||||||
|
elem.setValueA(false);
|
||||||
|
elem.setValueB(true);
|
||||||
|
elem.setValueNull(null);
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionBoolean.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem>\n"
|
||||||
|
+ " <valueA>false</valueA>\n"
|
||||||
|
+ " <valueB>true</valueB>\n"
|
||||||
|
+ "</elem>", dataTest);
|
||||||
|
|
||||||
|
final TestNodeBooleanFunc root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestNodeBooleanFunc.class, ExmlTestIntrospectionBoolean.NODE_NAME));
|
||||||
|
Assertions.assertEquals(false, root.isValueA());
|
||||||
|
Assertions.assertEquals(true, root.isValueB());
|
||||||
|
Assertions.assertEquals(null, root.isValueNull());
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TestArrayNodeBooleanFunc {
|
||||||
|
private Boolean[] values;
|
||||||
|
|
||||||
|
public Boolean[] getValues() {
|
||||||
|
return this.values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValues(final Boolean[] values) {
|
||||||
|
this.values = values;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testModelArrayNodeBooleanFunc() {
|
||||||
|
TestArrayNodeBooleanFunc elem = new TestArrayNodeBooleanFunc();
|
||||||
|
elem.setValues(new Boolean[] {false, false, true, false, true});
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionBoolean.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem>\n"
|
||||||
|
+ " <values>false</values>\n"
|
||||||
|
+ " <values>false</values>\n"
|
||||||
|
+ " <values>true</values>\n"
|
||||||
|
+ " <values>false</values>\n"
|
||||||
|
+ " <values>true</values>\n"
|
||||||
|
+ "</elem>", dataTest);
|
||||||
|
|
||||||
|
final TestArrayNodeBooleanFunc root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestArrayNodeBooleanFunc.class, ExmlTestIntrospectionBoolean.NODE_NAME));
|
||||||
|
Assertions.assertEquals(5, root.getValues().length);
|
||||||
|
Assertions.assertEquals(false, root.getValues()[0]);
|
||||||
|
Assertions.assertEquals(false, root.getValues()[1]);
|
||||||
|
Assertions.assertEquals(true, root.getValues()[2]);
|
||||||
|
Assertions.assertEquals(false, root.getValues()[3]);
|
||||||
|
Assertions.assertEquals(true, root.getValues()[4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TestListNodeBooleanFunc {
|
||||||
|
private List<Boolean> values;
|
||||||
|
|
||||||
|
public List<Boolean> getValues() {
|
||||||
|
return this.values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValues(final List<Boolean> values) {
|
||||||
|
this.values = values;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testModelListNodeBooleanFunc() {
|
||||||
|
TestListNodeBooleanFunc elem = new TestListNodeBooleanFunc();
|
||||||
|
elem.setValues(List.of(false, false, true, false, true));
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionBoolean.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem values=\"false;false;true;false;true\"/>", dataTest);
|
||||||
|
|
||||||
|
final TestListNodeBooleanFunc root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestListNodeBooleanFunc.class, ExmlTestIntrospectionBoolean.NODE_NAME));
|
||||||
|
Assertions.assertEquals(5, root.getValues().size());
|
||||||
|
Assertions.assertEquals(false, root.getValues().get(0));
|
||||||
|
Assertions.assertEquals(false, root.getValues().get(1));
|
||||||
|
Assertions.assertEquals(true, root.getValues().get(2));
|
||||||
|
Assertions.assertEquals(false, root.getValues().get(3));
|
||||||
|
Assertions.assertEquals(true, root.getValues().get(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user