Skip to content

Commit 9cf7635

Browse files
committed
Add missing new properties on attributes
1 parent 4a60fdd commit 9cf7635

File tree

12 files changed

+141
-0
lines changed

12 files changed

+141
-0
lines changed

src/AndroidClient/android/src/main/java/net/servicestack/client/Api.java

+15
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@
1010
public @interface Api {
1111
String value() default "";
1212

13+
/// <summary>
14+
/// The overall description of an API. Used by Swagger.
15+
/// </summary>
1316
public String Description() default "";
17+
18+
/// <summary>
19+
/// Create or not body param for request type when verb is POST or PUT.
20+
/// Value can be one of the constants of `GenerateBodyParam` class:
21+
/// `GenerateBodyParam.IfNotDisabled` (default value), `GenerateBodyParam.Always`, `GenerateBodyParam.Never`
22+
/// </summary>
23+
public int BodyParameter() default 0;
24+
25+
/// <summary>
26+
/// Tells if body param is required
27+
/// </summary>
28+
public boolean IsRequired() default false;
1429
}
1530

src/AndroidClient/android/src/main/java/net/servicestack/client/ApiMember.java

+5
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@
4242
/// </summary>
4343
public String DataType() default "";
4444

45+
/// <summary>
46+
/// Fine-tuned primitive type definition.
47+
/// </summary>
48+
public String Format() default "";
49+
4550
/// <summary>
4651
/// For path, this is always true. Otherwise, this field tells the client whether or not the field must be supplied.
4752
/// </summary>

src/AndroidClient/android/src/main/java/net/servicestack/client/ApiResponse.java

+16
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,23 @@
99
@Retention(RetentionPolicy.RUNTIME)
1010
public @interface ApiResponse {
1111

12+
/// <summary>
13+
/// HTTP status code of response
14+
/// </summary>
1215
public int StatusCode() default 0;
1316

17+
/// <summary>
18+
/// HTTP status code of response
19+
/// </summary>
1420
public String Description() default "";
21+
22+
/// <summary>
23+
/// If set to true, the response is default for all non-explicitly defined status codes
24+
/// </summary>
25+
public boolean IsDefaultResponse() default false;
26+
27+
/// <summary>
28+
/// Open API schema definition type for response
29+
/// </summary>
30+
public Class ResponseType() default Object.class;
1531
}

src/AndroidClient/android/src/main/java/net/servicestack/client/AutoQueryViewer.java

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
@Retention(RetentionPolicy.RUNTIME)
1010
public @interface AutoQueryViewer {
11+
public String Name() default "";
1112
public String Title() default "";
1213
public String Description() default "";
1314
public String IconUrl() default "";
@@ -20,4 +21,5 @@
2021
public String DefaultSearchField() default "";
2122
public String DefaultSearchType() default "";
2223
public String DefaultSearchText() default "";
24+
public String DefaultFields() default "";
2325
}

src/AndroidClient/android/src/main/java/net/servicestack/client/JsonSerializers.java

+52
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,27 @@
33

44
package net.servicestack.client;
55

6+
import com.google.gson.Gson;
67
import com.google.gson.JsonDeserializationContext;
78
import com.google.gson.JsonDeserializer;
89
import com.google.gson.JsonElement;
910
import com.google.gson.JsonParseException;
1011
import com.google.gson.JsonPrimitive;
1112
import com.google.gson.JsonSerializationContext;
1213
import com.google.gson.JsonSerializer;
14+
import com.google.gson.TypeAdapter;
15+
import com.google.gson.TypeAdapterFactory;
16+
import com.google.gson.reflect.TypeToken;
17+
import com.google.gson.stream.JsonReader;
18+
import com.google.gson.stream.JsonToken;
19+
import com.google.gson.stream.JsonWriter;
1320

21+
import java.io.IOException;
1422
import java.lang.reflect.Type;
1523
import java.util.Date;
24+
import java.util.HashMap;
25+
import java.util.Locale;
26+
import java.util.Map;
1627
import java.util.UUID;
1728

1829
public class JsonSerializers {
@@ -69,4 +80,45 @@ public UUID deserialize(JsonElement json, Type typeOfT, JsonDeserializationConte
6980
}
7081
};
7182
}
83+
84+
public static class CaseInsensitiveEnumTypeAdapterFactory implements TypeAdapterFactory {
85+
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
86+
Class<T> rawType = (Class<T>) type.getRawType();
87+
if (!rawType.isEnum()) {
88+
return null;
89+
}
90+
91+
final Map<String, T> lowercaseToConstant = new HashMap<String, T>();
92+
for (T constant : rawType.getEnumConstants()) {
93+
lowercaseToConstant.put(toLowercase(constant), constant);
94+
}
95+
96+
return new TypeAdapter<T>() {
97+
public void write(JsonWriter out, T value) throws IOException {
98+
if (value == null) {
99+
out.nullValue();
100+
} else {
101+
out.value(value.toString());
102+
}
103+
}
104+
105+
public T read(JsonReader reader) throws IOException {
106+
if (reader.peek() == JsonToken.NULL) {
107+
reader.nextNull();
108+
return null;
109+
} else {
110+
return lowercaseToConstant.get(toLowercase(reader.nextString()));
111+
}
112+
}
113+
};
114+
}
115+
116+
private String toLowercase(Object o) {
117+
return o.toString().toLowerCase(Locale.US);
118+
}
119+
}
120+
121+
public static TypeAdapterFactory getCaseInsensitiveEnumTypeAdapterFactory() {
122+
return new CaseInsensitiveEnumTypeAdapterFactory();
123+
}
72124
}

src/AndroidClient/android/src/main/java/net/servicestack/client/JsonServiceClient.java

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public void setTimeout(int timeoutMs) {
6666

6767
public GsonBuilder getGsonBuilder() {
6868
return new GsonBuilder()
69+
.registerTypeAdapterFactory(JsonSerializers.getCaseInsensitiveEnumTypeAdapterFactory())
6970
.registerTypeAdapter(Date.class, JsonSerializers.getDateSerializer())
7071
.registerTypeAdapter(Date.class, JsonSerializers.getDateDeserializer())
7172
.registerTypeAdapter(TimeSpan.class, JsonSerializers.getTimeSpanSerializer())

src/AndroidClient/android/src/main/java/net/servicestack/client/Route.java

+6
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,10 @@
3838
/// i.e. Priorities below 0 are auto-generated have less precedence.
3939
/// </summary>
4040
public int Priority() default 0;
41+
42+
/// <summary>
43+
/// Must match rule defined in Config.RequestRules or Regex expression with format:
44+
/// "{IHttpRequest.Field} =~ {pattern}", e.g "PathInfo =~ \/[0-9]+$"
45+
/// </summary>
46+
public String Matches() default "";
4147
}

src/AndroidClient/client/src/main/java/net/servicestack/client/Api.java

+15
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@
1010
public @interface Api {
1111
String value() default "";
1212

13+
/// <summary>
14+
/// The overall description of an API. Used by Swagger.
15+
/// </summary>
1316
public String Description() default "";
17+
18+
/// <summary>
19+
/// Create or not body param for request type when verb is POST or PUT.
20+
/// Value can be one of the constants of `GenerateBodyParam` class:
21+
/// `GenerateBodyParam.IfNotDisabled` (default value), `GenerateBodyParam.Always`, `GenerateBodyParam.Never`
22+
/// </summary>
23+
public int BodyParameter() default 0;
24+
25+
/// <summary>
26+
/// Tells if body param is required
27+
/// </summary>
28+
public boolean IsRequired() default false;
1429
}
1530

src/AndroidClient/client/src/main/java/net/servicestack/client/ApiMember.java

+5
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@
4242
/// </summary>
4343
public String DataType() default "";
4444

45+
/// <summary>
46+
/// Fine-tuned primitive type definition.
47+
/// </summary>
48+
public String Format() default "";
49+
4550
/// <summary>
4651
/// For path, this is always true. Otherwise, this field tells the client whether or not the field must be supplied.
4752
/// </summary>

src/AndroidClient/client/src/main/java/net/servicestack/client/ApiResponse.java

+16
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,23 @@
99
@Retention(RetentionPolicy.RUNTIME)
1010
public @interface ApiResponse {
1111

12+
/// <summary>
13+
/// HTTP status code of response
14+
/// </summary>
1215
public int StatusCode() default 0;
1316

17+
/// <summary>
18+
/// HTTP status code of response
19+
/// </summary>
1420
public String Description() default "";
21+
22+
/// <summary>
23+
/// If set to true, the response is default for all non-explicitly defined status codes
24+
/// </summary>
25+
public boolean IsDefaultResponse() default false;
26+
27+
/// <summary>
28+
/// Open API schema definition type for response
29+
/// </summary>
30+
public Class ResponseType() default Object.class;
1531
}

src/AndroidClient/client/src/main/java/net/servicestack/client/AutoQueryViewer.java

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
@Retention(RetentionPolicy.RUNTIME)
1010
public @interface AutoQueryViewer {
11+
public String Name() default "";
1112
public String Title() default "";
1213
public String Description() default "";
1314
public String IconUrl() default "";
@@ -20,4 +21,5 @@
2021
public String DefaultSearchField() default "";
2122
public String DefaultSearchType() default "";
2223
public String DefaultSearchText() default "";
24+
public String DefaultFields() default "";
2325
}

src/AndroidClient/client/src/main/java/net/servicestack/client/Route.java

+6
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,10 @@
3838
/// i.e. Priorities below 0 are auto-generated have less precedence.
3939
/// </summary>
4040
public int Priority() default 0;
41+
42+
/// <summary>
43+
/// Must match rule defined in Config.RequestRules or Regex expression with format:
44+
/// "{IHttpRequest.Field} =~ {pattern}", e.g "PathInfo =~ \/[0-9]+$"
45+
/// </summary>
46+
public String Matches() default "";
4147
}

0 commit comments

Comments
 (0)