[DEV] hirarchic tree
This commit is contained in:
parent
bc83c265b8
commit
a9b4d39fc0
@ -611,6 +611,7 @@ public class StringSerializer {
|
|||||||
Converter conv = StringSerializer.VALUES_OF.get(clazz);
|
Converter conv = StringSerializer.VALUES_OF.get(clazz);
|
||||||
return conv.toString(data);
|
return conv.toString(data);
|
||||||
}
|
}
|
||||||
|
@Deprecated
|
||||||
public static String[] toStringList(final Object data) {
|
public static String[] toStringList(final Object data) {
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -61,7 +61,8 @@ public class BuilderIntrospection implements Builder {
|
|||||||
if (listTreeName == null) {
|
if (listTreeName == null) {
|
||||||
inferData = this.cacheModel.findOrCreate(ModelType.NORMAL, null, subTypeClass);
|
inferData = this.cacheModel.findOrCreate(ModelType.NORMAL, null, subTypeClass);
|
||||||
} else {
|
} else {
|
||||||
inferData = this.cacheModel.findOrCreate(ModelType.ARRAY, listTreeName, subTypeClass);
|
// when we request a list elements, we need to add the element in a list, then we need the return is LIST and not ARRAY
|
||||||
|
inferData = this.cacheModel.findOrCreate(ModelType.LIST, listTreeName, subTypeClass);
|
||||||
}
|
}
|
||||||
// Create the data when object is ended created...
|
// Create the data when object is ended created...
|
||||||
return new IntrospectionObject(inferData);
|
return new IntrospectionObject(inferData);
|
||||||
|
@ -28,22 +28,12 @@ public class IntrospectionModelArray extends IntrospectionModel {
|
|||||||
List<Object> tmp = null;
|
List<Object> tmp = null;
|
||||||
if (this.nodeName == null) {
|
if (this.nodeName == null) {
|
||||||
tmp = nodes.get(IntrospectionObject.STUPID_TOCKEN);
|
tmp = nodes.get(IntrospectionObject.STUPID_TOCKEN);
|
||||||
if (tmp == null) {
|
} else {
|
||||||
return null;
|
tmp = nodes.get(this.nodeName);
|
||||||
}
|
|
||||||
if (tmp.size() == 1) {
|
|
||||||
return tmp.get(0);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
tmp = nodes.get(this.nodeName);
|
|
||||||
if (tmp == null) {
|
if (tmp == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
//return tmp;
|
|
||||||
|
|
||||||
// TODO This is not good at all this is bad ...
|
|
||||||
|
|
||||||
if (this.classType.isPrimitive()) {
|
if (this.classType.isPrimitive()) {
|
||||||
return ArraysTools.listToPrimitiveAuto(this.classType, tmp);
|
return ArraysTools.listToPrimitiveAuto(this.classType, tmp);
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ public abstract class IntrospectionProperty {
|
|||||||
} else {
|
} else {
|
||||||
name = name.toLowerCase();
|
name = name.toLowerCase();
|
||||||
for (final String elem : this.names) {
|
for (final String elem : this.names) {
|
||||||
if (elem.toLowerCase().contentEquals(name)) {
|
if (elem.equalsIgnoreCase(name)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -216,32 +216,49 @@ public class GeneratorIntrospection implements Generator {
|
|||||||
}
|
}
|
||||||
} else if (model.isArray()) {
|
} else if (model.isArray()) {
|
||||||
List<String> baseName = model.getNodeAvaillable();
|
List<String> baseName = model.getNodeAvaillable();
|
||||||
|
IntrospectionModel introspectionSub = findOrCreate(ModelType.NORMAL, null, model.getClassType());
|
||||||
if (baseName == null || baseName.size() == 0) {
|
if (baseName == null || baseName.size() == 0) {
|
||||||
// mode render : <nodeName>aaa</nodeName><nodeName>bbb</nodeName>
|
// mode render : <nodeName>aaa</nodeName><nodeName>bbb</nodeName>
|
||||||
IntrospectionModel introspectionSub = findOrCreate(ModelType.NORMAL, null, model.getClassType());
|
|
||||||
generateArrayNode(model.getClassType(), data, introspectionSub, nodeName, tmpp, indent);
|
generateArrayNode(model.getClassType(), data, introspectionSub, nodeName, tmpp, indent);
|
||||||
} else {
|
} else {
|
||||||
// mode render : <nodeName><val>aaa</val><val>bbb</val></nodeName>
|
// mode render : <nodeName><val>aaa</val><val>bbb</val></nodeName>
|
||||||
|
Tools.addIndent(tmpp, indent);
|
||||||
|
tmpp.append("<");
|
||||||
|
tmpp.append(nodeName);
|
||||||
|
tmpp.append(">");
|
||||||
|
generateArrayNode(model.getClassType(), data, introspectionSub, baseName.get(0), tmpp, indent+1);
|
||||||
|
Tools.addIndent(tmpp, indent);
|
||||||
|
tmpp.append("</");
|
||||||
|
tmpp.append(nodeName);
|
||||||
|
tmpp.append(">");
|
||||||
}
|
}
|
||||||
Log.error("lkjlk");
|
Log.error("lkjlk");
|
||||||
} else if (model.isList()) {
|
} else if (model.isList()) {
|
||||||
List<String> baseName = model.getNodeAvaillable();
|
List<String> baseName = model.getNodeAvaillable();
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
List<Object> datas = (List<Object>)data;
|
||||||
if (baseName == null || baseName.size() == 0) {
|
if (baseName == null || baseName.size() == 0) {
|
||||||
// mode render : <nodeName>aaa</nodeName><nodeName>bbb</nodeName>
|
// mode render : <nodeName>aaa</nodeName><nodeName>bbb</nodeName>
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
List<Object> datas = (List<Object>)data;
|
|
||||||
for (Object elem : datas) {
|
for (Object elem : datas) {
|
||||||
|
// note the type can change in List ...
|
||||||
IntrospectionModel introspectionSub = findOrCreate(ModelType.NORMAL, null, elem.getClass());
|
IntrospectionModel introspectionSub = findOrCreate(ModelType.NORMAL, null, elem.getClass());
|
||||||
generateNode(elem, introspectionSub, nodeName, tmpp, indent);
|
generateNode(elem, introspectionSub, nodeName, tmpp, indent);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// mode render : <nodeName><val>aaa</val><val>bbb</val></nodeName>
|
// mode render : <nodeName><val>aaa</val><val>bbb</val></nodeName>
|
||||||
|
Tools.addIndent(tmpp, indent);
|
||||||
tmpp.append("<");
|
tmpp.append("<");
|
||||||
tmpp.append(baseName.get(0));
|
tmpp.append(nodeName);
|
||||||
tmpp.append(">");
|
tmpp.append(">");
|
||||||
tmpp.append(model.toString(data));
|
for (Object elem : datas) {
|
||||||
|
// note the type can change in List ...
|
||||||
|
IntrospectionModel introspectionSub = findOrCreate(ModelType.NORMAL, null, elem.getClass());
|
||||||
|
generateNode(elem, introspectionSub, baseName.get(0), tmpp, indent+1);
|
||||||
|
}
|
||||||
|
//tmpp.append(model.toString(data));
|
||||||
|
Tools.addIndent(tmpp, indent);
|
||||||
tmpp.append("</");
|
tmpp.append("</");
|
||||||
tmpp.append(baseName.get(0));
|
tmpp.append(nodeName);
|
||||||
tmpp.append(">");
|
tmpp.append(">");
|
||||||
}
|
}
|
||||||
} else if (model.isEnum()) {
|
} else if (model.isEnum()) {
|
||||||
|
@ -9,7 +9,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.atriasoft.exml.Exml;
|
import org.atriasoft.exml.Exml;
|
||||||
import org.atriasoft.exml.annotation.XmlDefaultAttibute;
|
import org.atriasoft.exml.annotation.XmlDefaultAttibute;
|
||||||
|
import org.atriasoft.exml.annotation.XmlList;
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -411,5 +411,81 @@ public class ExmlTestIntrospectionByte {
|
|||||||
Assertions.assertEquals((byte)78, root.getValues().get(3));
|
Assertions.assertEquals((byte)78, root.getValues().get(3));
|
||||||
Assertions.assertEquals((byte)-127, root.getValues().get(4));
|
Assertions.assertEquals((byte)-127, root.getValues().get(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TestListNodeByteStructuredFunc {
|
||||||
|
private List<Byte> values;
|
||||||
|
@XmlList(value="elem")
|
||||||
|
public List<Byte> getValues() {
|
||||||
|
return this.values;
|
||||||
|
}
|
||||||
|
public void setValues(final List<Byte> values) {
|
||||||
|
this.values = values;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testListNodeByteStructuredFunc() {
|
||||||
|
TestListNodeByteStructuredFunc elem = new TestListNodeByteStructuredFunc();
|
||||||
|
elem.setValues(List.of((byte)12, (byte)-13, (byte)33, (byte)78, (byte)-127));
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionByte.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem>\n"
|
||||||
|
+ " <values>\n"
|
||||||
|
+ " <elem>12</elem>\n"
|
||||||
|
+ " <elem>-13</elem>\n"
|
||||||
|
+ " <elem>33</elem>\n"
|
||||||
|
+ " <elem>78</elem>\n"
|
||||||
|
+ " <elem>-127</elem>\n"
|
||||||
|
+ " </values>\n"
|
||||||
|
+ "</elem>", dataTest);
|
||||||
|
|
||||||
|
final TestListNodeByteStructuredFunc root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestListNodeByteStructuredFunc.class, ExmlTestIntrospectionByte.NODE_NAME));
|
||||||
|
Assertions.assertEquals(5, root.getValues().size());
|
||||||
|
Assertions.assertEquals((byte)12, root.getValues().get(0));
|
||||||
|
Assertions.assertEquals((byte)-13, root.getValues().get(1));
|
||||||
|
Assertions.assertEquals((byte)33, root.getValues().get(2));
|
||||||
|
Assertions.assertEquals((byte)78, root.getValues().get(3));
|
||||||
|
Assertions.assertEquals((byte)-127, root.getValues().get(4));
|
||||||
|
}
|
||||||
|
public class TestArrayNodeByteStructuredFunc {
|
||||||
|
private Byte[] values;
|
||||||
|
@XmlList(value="elem")
|
||||||
|
public Byte[] getValues() {
|
||||||
|
return this.values;
|
||||||
|
}
|
||||||
|
public void setValues(final Byte[] values) {
|
||||||
|
this.values = values;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testArrayNodeByteStructuredFunc() {
|
||||||
|
TestArrayNodeByteStructuredFunc elem = new TestArrayNodeByteStructuredFunc();
|
||||||
|
elem.setValues(new Byte[] {12, -13, 33, 78, -127});
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionByte.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem>\n"
|
||||||
|
+ " <values>\n"
|
||||||
|
+ " <elem>12</elem>\n"
|
||||||
|
+ " <elem>-13</elem>\n"
|
||||||
|
+ " <elem>33</elem>\n"
|
||||||
|
+ " <elem>78</elem>\n"
|
||||||
|
+ " <elem>-127</elem>\n"
|
||||||
|
+ " </values>\n"
|
||||||
|
+ "</elem>", dataTest);
|
||||||
|
|
||||||
|
final TestArrayNodeByteStructuredFunc root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestArrayNodeByteStructuredFunc.class, ExmlTestIntrospectionByte.NODE_NAME));
|
||||||
|
Assertions.assertEquals(5, root.getValues().length);
|
||||||
|
Assertions.assertEquals((byte)12, root.getValues()[0]);
|
||||||
|
Assertions.assertEquals((byte)-13, root.getValues()[1]);
|
||||||
|
Assertions.assertEquals((byte)33, root.getValues()[2]);
|
||||||
|
Assertions.assertEquals((byte)78, root.getValues()[3]);
|
||||||
|
Assertions.assertEquals((byte)-127, root.getValues()[4]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,13 +5,18 @@
|
|||||||
*/
|
*/
|
||||||
package test.atriasoft.exml;
|
package test.atriasoft.exml;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.atriasoft.exml.Exml;
|
import org.atriasoft.exml.Exml;
|
||||||
import org.atriasoft.exml.annotation.XmlDefaultAttibute;
|
import org.atriasoft.exml.annotation.XmlDefaultAttibute;
|
||||||
|
import org.atriasoft.exml.annotation.XmlList;
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import test.atriasoft.exml.ExmlTestIntrospectionByte.TestArrayNodeByteStructuredFunc;
|
||||||
|
import test.atriasoft.exml.ExmlTestIntrospectionByte.TestListNodeByteStructuredFunc;
|
||||||
|
|
||||||
public class ExmlTestIntrospectionByteNative {
|
public class ExmlTestIntrospectionByteNative {
|
||||||
static final String NODE_NAME = "elem";
|
static final String NODE_NAME = "elem";
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
@ -260,6 +265,44 @@ public class ExmlTestIntrospectionByteNative {
|
|||||||
Assertions.assertEquals((byte)78, root.getValues()[3]);
|
Assertions.assertEquals((byte)78, root.getValues()[3]);
|
||||||
Assertions.assertEquals((byte)-127, root.getValues()[4]);
|
Assertions.assertEquals((byte)-127, root.getValues()[4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TestArrayNodeByteNativeStructuredFunc {
|
||||||
|
private byte[] values;
|
||||||
|
@XmlList(value="elem")
|
||||||
|
public byte[] getValues() {
|
||||||
|
return this.values;
|
||||||
|
}
|
||||||
|
public void setValues(final byte[] values) {
|
||||||
|
this.values = values;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testArrayNodeByteNativeStructuredFunc() {
|
||||||
|
TestArrayNodeByteNativeStructuredFunc elem = new TestArrayNodeByteNativeStructuredFunc();
|
||||||
|
elem.setValues(new byte[] {12, -13, 33, 78, -127});
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
Assertions.assertDoesNotThrow(() -> Exml.generate(elem, ExmlTestIntrospectionByte.NODE_NAME, builder));
|
||||||
|
String dataTest = builder.toString();
|
||||||
|
Log.warning("data generated: " + builder.toString());
|
||||||
|
Assertions.assertEquals("<elem>\n"
|
||||||
|
+ " <values>\n"
|
||||||
|
+ " <elem>12</elem>\n"
|
||||||
|
+ " <elem>-13</elem>\n"
|
||||||
|
+ " <elem>33</elem>\n"
|
||||||
|
+ " <elem>78</elem>\n"
|
||||||
|
+ " <elem>-127</elem>\n"
|
||||||
|
+ " </values>\n"
|
||||||
|
+ "</elem>", dataTest);
|
||||||
|
|
||||||
|
final TestArrayNodeByteNativeStructuredFunc root = Assertions.assertDoesNotThrow(() -> Exml.parseOne(dataTest, TestArrayNodeByteNativeStructuredFunc.class, ExmlTestIntrospectionByte.NODE_NAME));
|
||||||
|
Assertions.assertEquals(5, root.getValues().length);
|
||||||
|
Assertions.assertEquals((byte)12, root.getValues()[0]);
|
||||||
|
Assertions.assertEquals((byte)-13, root.getValues()[1]);
|
||||||
|
Assertions.assertEquals((byte)33, root.getValues()[2]);
|
||||||
|
Assertions.assertEquals((byte)78, root.getValues()[3]);
|
||||||
|
Assertions.assertEquals((byte)-127, root.getValues()[4]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user