11package org .gitlab4j .api .models ;
22
3+ import com .fasterxml .jackson .databind .ObjectMapper ;
4+ import com .fasterxml .jackson .databind .node .ObjectNode ;
35import java .io .Serializable ;
6+ import java .lang .reflect .Array ;
7+ import java .util .ArrayList ;
48import java .util .Date ;
59import java .util .HashMap ;
10+ import java .util .List ;
611import java .util .Map ;
712
813import org .gitlab4j .api .GitLabApiException ;
@@ -93,7 +98,7 @@ public Object addSetting(String setting, Object value) throws GitLabApiException
9398 public Object addSetting (Setting setting , Object value ) throws GitLabApiException {
9499
95100 if (value instanceof JsonNode ) {
96- value = jsonNodeToValue ((JsonNode )value );
101+ value = jsonNodeToValue ((JsonNode )value , setting );
97102 }
98103
99104 setting .validate (value );
@@ -113,7 +118,7 @@ public void clearSettings() {
113118 settings .clear ();
114119 }
115120
116- private Object jsonNodeToValue (JsonNode node ) {
121+ private Object jsonNodeToValue (JsonNode node , Setting setting ) {
117122
118123 Object value = node ;
119124 if (node instanceof NullNode ) {
@@ -129,14 +134,20 @@ private Object jsonNodeToValue(JsonNode node) {
129134 } else if (node instanceof DoubleNode ) {
130135 value = (float )((DoubleNode )node ).asDouble ();
131136 } else if (node instanceof ArrayNode ) {
132-
133- int numItems = node .size ();
134- String [] values = new String [numItems ];
135- for (int i = 0 ; i < numItems ; i ++) {
136- values [i ] = node .path (i ).asText ();
137+ if (node .isEmpty ()) {
138+ value = setting .emptyArrayValue ();
139+ } else {
140+ List <Object > values = new ArrayList <>(node .size ());
141+ node .forEach (element -> values .add (jsonNodeToValue (element , setting )));
142+ Class <?> type = values .get (0 ).getClass ();
143+ value = Array .newInstance (type , values .size ());
144+ for (int i = 0 ; i < values .size (); i ++) {
145+ Array .set (value , i , type .cast (values .get (i )));
146+ }
137147 }
138-
139- value = values ;
148+ } else if (node instanceof ObjectNode ) {
149+ ObjectMapper mapper = new ObjectMapper ();
150+ value = mapper .convertValue (node , HashMap .class );
140151 }
141152
142153 return (value );
0 commit comments