1212import com .devcycle .sdk .server .local .model .BucketedUserConfig ;
1313import com .devcycle .sdk .server .local .model .DVCLocalOptions ;
1414import com .fasterxml .jackson .core .JsonProcessingException ;
15+ import com .fasterxml .jackson .databind .ObjectMapper ;
1516
1617public final class DVCLocalClient {
1718
@@ -100,10 +101,6 @@ public <T> Variable<T> variable(User user, String key, T defaultValue) {
100101 throw new IllegalArgumentException ("Missing parameter: defaultValue" );
101102 }
102103
103- if (!configManager .isConfigInitialized ()) {
104- System .out .println ("Variable called before DVCClient has initialized, returning default value" );
105- }
106-
107104 TypeEnum variableType = TypeEnum .fromClass (defaultValue .getClass ());
108105 Variable <T > defaultVariable = (Variable <T >) Variable .builder ()
109106 .key (key )
@@ -113,40 +110,41 @@ public <T> Variable<T> variable(User user, String key, T defaultValue) {
113110 .isDefaulted (true )
114111 .build ();
115112
116- if (!isInitialized ) {
113+ if (!configManager .isConfigInitialized () || !isInitialized ) {
114+ System .out .println ("Variable called before DVCClient has initialized, returning default value" );
115+ try {
116+ eventQueueManager .queueAggregateEvent (Event .builder ().type ("aggVariableDefaulted" ).target (key ).build (), null );
117+ } catch (Exception e ) {
118+ System .out .printf ("Unable to parse aggVariableDefaulted event for Variable %s due to error: %s" , key , e .toString ());
119+ }
117120 return defaultVariable ;
118121 }
119122
120123 try {
121- BucketedUserConfig bucketedUserConfig = localBucketing .generateBucketedConfig (sdkKey , user );
122- if (bucketedUserConfig .variables .containsKey (key )) {
123- BaseVariable baseVariable = bucketedUserConfig .variables .get (key );
124+ String variableJSON = localBucketing .getVariable (sdkKey , user , key , variableType , true );
125+ if (variableJSON == null || variableJSON .isEmpty ()) {
126+ return defaultVariable ;
127+ } else {
128+ ObjectMapper mapper = new ObjectMapper ();
129+ Variable baseVariable = mapper .readValue (variableJSON , Variable .class );
130+
124131 Variable <T > variable = (Variable <T >) Variable .builder ()
125- .key (key )
126- .type (baseVariable .getType ())
127- .value (baseVariable .getValue ())
128- .defaultValue (defaultValue )
129- .isDefaulted (false )
130- .build ();
132+ .key (key )
133+ .type (baseVariable .getType ())
134+ .value (baseVariable .getValue ())
135+ .defaultValue (defaultValue )
136+ .isDefaulted (false )
137+ .build ();
131138 if (variable .getType () != variableType ) {
132- throw new IllegalArgumentException ("Variable type mismatch, returning default value" );
139+ System .out .printf ("Variable type mismatch, returning default value" );
140+ return variable ;
133141 }
134142 variable .setDefaultValue (defaultValue );
135143 variable .setIsDefaulted (false );
136- eventQueueManager .queueAggregateEvent (Event .builder ().type ("aggVariableEvaluated" ).target (key ).build (), bucketedUserConfig );
137144 return variable ;
138- } else {
139- eventQueueManager .queueAggregateEvent (Event .builder ().type ("aggVariableDefaulted" ).target (key ).build (), bucketedUserConfig );
140- return defaultVariable ;
141145 }
142146 } catch (Exception e ) {
143- System .out .printf ("Unable to parse JSON for Variable %s due to error: %s" , key , e .toString ());
144- }
145-
146- try {
147- eventQueueManager .queueAggregateEvent (Event .builder ().type ("aggVariableDefaulted" ).target (key ).build (), null );
148- } catch (Exception e ) {
149- System .out .printf ("Unable to parse aggVariableDefaulted event for Variable %s due to error: %s" , key , e .toString ());
147+ System .out .printf ("Unable to parse load Variable %s due to error: %s" , key , e );
150148 }
151149 return defaultVariable ;
152150 }
0 commit comments