forked from loafle/openapi-generator-original
[Java][MicroProfile] Use jsonb imports for serializing and deserializing enum (#6064)
* Use jsonb imports for serializing and deserializing pojo * Fix: Exclude jsonbProperty class when withXml=true Co-authored-by: Ravisankar Challa <ravisankar.challa@qantas.com.au>
This commit is contained in:
parent
380b173e50
commit
42784ee1cc
@ -1,13 +1,24 @@
|
|||||||
|
{{#withXml}}
|
||||||
@XmlType(name="{{datatypeWithEnum}}")
|
@XmlType(name="{{datatypeWithEnum}}")
|
||||||
@XmlEnum({{dataType}}.class)
|
@XmlEnum({{dataType}}.class)
|
||||||
|
{{/withXml}}
|
||||||
|
{{^withXml}}
|
||||||
|
@JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
|
||||||
|
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
|
||||||
|
{{/withXml}}
|
||||||
public enum {{datatypeWithEnum}} {
|
public enum {{datatypeWithEnum}} {
|
||||||
|
|
||||||
{{#allowableValues}}
|
{{#allowableValues}}
|
||||||
|
{{#withXml}}
|
||||||
{{#enumVars}}@XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}) {{name}}({{dataType}}.valueOf({{{value}}})){{^-last}}, {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}
|
{{#enumVars}}@XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}) {{name}}({{dataType}}.valueOf({{{value}}})){{^-last}}, {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}
|
||||||
|
{{/withXml}}
|
||||||
|
{{^withXml}}
|
||||||
|
{{#enumVars}}{{name}}({{dataType}}.valueOf({{{value}}})){{^-last}}, {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}
|
||||||
|
{{/withXml}}
|
||||||
{{/allowableValues}}
|
{{/allowableValues}}
|
||||||
|
|
||||||
|
|
||||||
private {{dataType}} value;
|
{{dataType}} value;
|
||||||
|
|
||||||
{{datatypeWithEnum}} ({{dataType}} v) {
|
{{datatypeWithEnum}} ({{dataType}} v) {
|
||||||
value = v;
|
value = v;
|
||||||
@ -22,6 +33,7 @@ public enum {{datatypeWithEnum}} {
|
|||||||
return String.valueOf(value);
|
return String.valueOf(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{{#withXml}}
|
||||||
public static {{datatypeWithEnum}} fromValue(String v) {
|
public static {{datatypeWithEnum}} fromValue(String v) {
|
||||||
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
|
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
|
||||||
if (String.valueOf(b.value).equals(v)) {
|
if (String.valueOf(b.value).equals(v)) {
|
||||||
@ -30,4 +42,25 @@ public enum {{datatypeWithEnum}} {
|
|||||||
}
|
}
|
||||||
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + v + "'");{{/useNullForUnknownEnumValue}}
|
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + v + "'");{{/useNullForUnknownEnumValue}}
|
||||||
}
|
}
|
||||||
|
{{/withXml}}
|
||||||
|
{{^withXml}}
|
||||||
|
public static final class Deserializer implements JsonbDeserializer<{{datatypeWithEnum}}> {
|
||||||
|
@Override
|
||||||
|
public {{datatypeWithEnum}} deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
|
||||||
|
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
|
||||||
|
if (String.valueOf(b.value).equals(parser.getString())) {
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");{{/useNullForUnknownEnumValue}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class Serializer implements JsonbSerializer<{{datatypeWithEnum}}> {
|
||||||
|
@Override
|
||||||
|
public void serialize({{datatypeWithEnum}} obj, JsonGenerator generator, SerializationContext ctx) {
|
||||||
|
generator.write(obj.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{{/withXml}}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
{{#withXml}}
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
@ -5,7 +6,19 @@ import javax.xml.bind.annotation.XmlAccessorType;
|
|||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.xml.bind.annotation.XmlType;
|
||||||
import javax.xml.bind.annotation.XmlEnum;
|
import javax.xml.bind.annotation.XmlEnum;
|
||||||
import javax.xml.bind.annotation.XmlEnumValue;
|
import javax.xml.bind.annotation.XmlEnumValue;
|
||||||
|
{{/withXml}}
|
||||||
|
{{^withXml}}
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import javax.json.bind.annotation.JsonbTypeDeserializer;
|
||||||
|
import javax.json.bind.annotation.JsonbTypeSerializer;
|
||||||
|
import javax.json.bind.serializer.DeserializationContext;
|
||||||
|
import javax.json.bind.serializer.JsonbDeserializer;
|
||||||
|
import javax.json.bind.serializer.JsonbSerializer;
|
||||||
|
import javax.json.bind.serializer.SerializationContext;
|
||||||
|
import javax.json.stream.JsonGenerator;
|
||||||
|
import javax.json.stream.JsonParser;
|
||||||
import javax.json.bind.annotation.JsonbProperty;
|
import javax.json.bind.annotation.JsonbProperty;
|
||||||
|
{{/withXml}}
|
||||||
|
|
||||||
{{#withXml}}
|
{{#withXml}}
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
@ -56,7 +69,9 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}}{{#serializ
|
|||||||
{{/maximum}}
|
{{/maximum}}
|
||||||
* @return {{name}}
|
* @return {{name}}
|
||||||
**/
|
**/
|
||||||
|
{{^withXml}}
|
||||||
@JsonbProperty("{{baseName}}")
|
@JsonbProperty("{{baseName}}")
|
||||||
|
{{/withXml}}
|
||||||
{{#vendorExtensions.x-extra-annotation}}
|
{{#vendorExtensions.x-extra-annotation}}
|
||||||
{{{vendorExtensions.x-extra-annotation}}}
|
{{{vendorExtensions.x-extra-annotation}}}
|
||||||
{{/vendorExtensions.x-extra-annotation}}
|
{{/vendorExtensions.x-extra-annotation}}
|
||||||
|
@ -102,6 +102,11 @@
|
|||||||
<artifactId>javax.json.bind-api</artifactId>
|
<artifactId>javax.json.bind-api</artifactId>
|
||||||
<version>1.0</version>
|
<version>1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.json</groupId>
|
||||||
|
<artifactId>javax.json-api</artifactId>
|
||||||
|
<version>1.1.4</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.xml.bind</groupId>
|
<groupId>javax.xml.bind</groupId>
|
||||||
<artifactId>jaxb-api</artifactId>
|
<artifactId>jaxb-api</artifactId>
|
||||||
|
@ -89,6 +89,11 @@
|
|||||||
<artifactId>javax.json.bind-api</artifactId>
|
<artifactId>javax.json.bind-api</artifactId>
|
||||||
<version>1.0</version>
|
<version>1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.json</groupId>
|
||||||
|
<artifactId>javax.json-api</artifactId>
|
||||||
|
<version>1.1.4</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.xml.bind</groupId>
|
<groupId>javax.xml.bind</groupId>
|
||||||
<artifactId>jaxb-api</artifactId>
|
<artifactId>jaxb-api</artifactId>
|
||||||
|
@ -25,13 +25,15 @@
|
|||||||
package org.openapitools.client.model;
|
package org.openapitools.client.model;
|
||||||
|
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import java.lang.reflect.Type;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.json.bind.annotation.JsonbTypeDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.json.bind.annotation.JsonbTypeSerializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.json.bind.serializer.DeserializationContext;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.json.bind.serializer.JsonbDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlEnum;
|
import javax.json.bind.serializer.JsonbSerializer;
|
||||||
import javax.xml.bind.annotation.XmlEnumValue;
|
import javax.json.bind.serializer.SerializationContext;
|
||||||
|
import javax.json.stream.JsonGenerator;
|
||||||
|
import javax.json.stream.JsonParser;
|
||||||
import javax.json.bind.annotation.JsonbProperty;
|
import javax.json.bind.annotation.JsonbProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,13 +25,15 @@
|
|||||||
package org.openapitools.client.model;
|
package org.openapitools.client.model;
|
||||||
|
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import java.lang.reflect.Type;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.json.bind.annotation.JsonbTypeDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.json.bind.annotation.JsonbTypeSerializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.json.bind.serializer.DeserializationContext;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.json.bind.serializer.JsonbDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlEnum;
|
import javax.json.bind.serializer.JsonbSerializer;
|
||||||
import javax.xml.bind.annotation.XmlEnumValue;
|
import javax.json.bind.serializer.SerializationContext;
|
||||||
|
import javax.json.stream.JsonGenerator;
|
||||||
|
import javax.json.stream.JsonParser;
|
||||||
import javax.json.bind.annotation.JsonbProperty;
|
import javax.json.bind.annotation.JsonbProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,13 +26,15 @@ package org.openapitools.client.model;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import java.lang.reflect.Type;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.json.bind.annotation.JsonbTypeDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.json.bind.annotation.JsonbTypeSerializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.json.bind.serializer.DeserializationContext;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.json.bind.serializer.JsonbDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlEnum;
|
import javax.json.bind.serializer.JsonbSerializer;
|
||||||
import javax.xml.bind.annotation.XmlEnumValue;
|
import javax.json.bind.serializer.SerializationContext;
|
||||||
|
import javax.json.stream.JsonGenerator;
|
||||||
|
import javax.json.stream.JsonParser;
|
||||||
import javax.json.bind.annotation.JsonbProperty;
|
import javax.json.bind.annotation.JsonbProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,14 +50,14 @@ public class Order {
|
|||||||
|
|
||||||
private Date shipDate;
|
private Date shipDate;
|
||||||
|
|
||||||
@XmlType(name="StatusEnum")
|
@JsonbTypeSerializer(StatusEnum.Serializer.class)
|
||||||
@XmlEnum(String.class)
|
@JsonbTypeDeserializer(StatusEnum.Deserializer.class)
|
||||||
public enum StatusEnum {
|
public enum StatusEnum {
|
||||||
|
|
||||||
@XmlEnumValue("placed") PLACED(String.valueOf("placed")), @XmlEnumValue("approved") APPROVED(String.valueOf("approved")), @XmlEnumValue("delivered") DELIVERED(String.valueOf("delivered"));
|
PLACED(String.valueOf("placed")), APPROVED(String.valueOf("approved")), DELIVERED(String.valueOf("delivered"));
|
||||||
|
|
||||||
|
|
||||||
private String value;
|
String value;
|
||||||
|
|
||||||
StatusEnum (String v) {
|
StatusEnum (String v) {
|
||||||
value = v;
|
value = v;
|
||||||
@ -70,13 +72,23 @@ public enum StatusEnum {
|
|||||||
return String.valueOf(value);
|
return String.valueOf(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StatusEnum fromValue(String v) {
|
public static final class Deserializer implements JsonbDeserializer<StatusEnum> {
|
||||||
|
@Override
|
||||||
|
public StatusEnum deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
|
||||||
for (StatusEnum b : StatusEnum.values()) {
|
for (StatusEnum b : StatusEnum.values()) {
|
||||||
if (String.valueOf(b.value).equals(v)) {
|
if (String.valueOf(b.value).equals(parser.getString())) {
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException("Unexpected value '" + v + "'");
|
throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class Serializer implements JsonbSerializer<StatusEnum> {
|
||||||
|
@Override
|
||||||
|
public void serialize(StatusEnum obj, JsonGenerator generator, SerializationContext ctx) {
|
||||||
|
generator.write(obj.value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,13 +29,15 @@ import java.util.List;
|
|||||||
import org.openapitools.client.model.Category;
|
import org.openapitools.client.model.Category;
|
||||||
import org.openapitools.client.model.Tag;
|
import org.openapitools.client.model.Tag;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import java.lang.reflect.Type;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.json.bind.annotation.JsonbTypeDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.json.bind.annotation.JsonbTypeSerializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.json.bind.serializer.DeserializationContext;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.json.bind.serializer.JsonbDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlEnum;
|
import javax.json.bind.serializer.JsonbSerializer;
|
||||||
import javax.xml.bind.annotation.XmlEnumValue;
|
import javax.json.bind.serializer.SerializationContext;
|
||||||
|
import javax.json.stream.JsonGenerator;
|
||||||
|
import javax.json.stream.JsonParser;
|
||||||
import javax.json.bind.annotation.JsonbProperty;
|
import javax.json.bind.annotation.JsonbProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,14 +55,14 @@ public class Pet {
|
|||||||
|
|
||||||
private List<Tag> tags = null;
|
private List<Tag> tags = null;
|
||||||
|
|
||||||
@XmlType(name="StatusEnum")
|
@JsonbTypeSerializer(StatusEnum.Serializer.class)
|
||||||
@XmlEnum(String.class)
|
@JsonbTypeDeserializer(StatusEnum.Deserializer.class)
|
||||||
public enum StatusEnum {
|
public enum StatusEnum {
|
||||||
|
|
||||||
@XmlEnumValue("available") AVAILABLE(String.valueOf("available")), @XmlEnumValue("pending") PENDING(String.valueOf("pending")), @XmlEnumValue("sold") SOLD(String.valueOf("sold"));
|
AVAILABLE(String.valueOf("available")), PENDING(String.valueOf("pending")), SOLD(String.valueOf("sold"));
|
||||||
|
|
||||||
|
|
||||||
private String value;
|
String value;
|
||||||
|
|
||||||
StatusEnum (String v) {
|
StatusEnum (String v) {
|
||||||
value = v;
|
value = v;
|
||||||
@ -75,13 +77,23 @@ public enum StatusEnum {
|
|||||||
return String.valueOf(value);
|
return String.valueOf(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StatusEnum fromValue(String v) {
|
public static final class Deserializer implements JsonbDeserializer<StatusEnum> {
|
||||||
|
@Override
|
||||||
|
public StatusEnum deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
|
||||||
for (StatusEnum b : StatusEnum.values()) {
|
for (StatusEnum b : StatusEnum.values()) {
|
||||||
if (String.valueOf(b.value).equals(v)) {
|
if (String.valueOf(b.value).equals(parser.getString())) {
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException("Unexpected value '" + v + "'");
|
throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class Serializer implements JsonbSerializer<StatusEnum> {
|
||||||
|
@Override
|
||||||
|
public void serialize(StatusEnum obj, JsonGenerator generator, SerializationContext ctx) {
|
||||||
|
generator.write(obj.value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,13 +25,15 @@
|
|||||||
package org.openapitools.client.model;
|
package org.openapitools.client.model;
|
||||||
|
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import java.lang.reflect.Type;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.json.bind.annotation.JsonbTypeDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.json.bind.annotation.JsonbTypeSerializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.json.bind.serializer.DeserializationContext;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.json.bind.serializer.JsonbDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlEnum;
|
import javax.json.bind.serializer.JsonbSerializer;
|
||||||
import javax.xml.bind.annotation.XmlEnumValue;
|
import javax.json.bind.serializer.SerializationContext;
|
||||||
|
import javax.json.stream.JsonGenerator;
|
||||||
|
import javax.json.stream.JsonParser;
|
||||||
import javax.json.bind.annotation.JsonbProperty;
|
import javax.json.bind.annotation.JsonbProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,13 +25,15 @@
|
|||||||
package org.openapitools.client.model;
|
package org.openapitools.client.model;
|
||||||
|
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import java.lang.reflect.Type;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.json.bind.annotation.JsonbTypeDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.json.bind.annotation.JsonbTypeSerializer;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.json.bind.serializer.DeserializationContext;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.json.bind.serializer.JsonbDeserializer;
|
||||||
import javax.xml.bind.annotation.XmlEnum;
|
import javax.json.bind.serializer.JsonbSerializer;
|
||||||
import javax.xml.bind.annotation.XmlEnumValue;
|
import javax.json.bind.serializer.SerializationContext;
|
||||||
|
import javax.json.stream.JsonGenerator;
|
||||||
|
import javax.json.stream.JsonParser;
|
||||||
import javax.json.bind.annotation.JsonbProperty;
|
import javax.json.bind.annotation.JsonbProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user