1919import static com .google .common .base .Preconditions .checkNotNull ;
2020
2121import com .google .firebase .internal .NonNull ;
22+ import com .google .firebase .internal .Nullable ;
23+ import com .google .firebase .remoteconfig .internal .TemplateResponse .ExperimentValueResponse ;
24+ import com .google .firebase .remoteconfig .internal .TemplateResponse .ExperimentVariantValueResponse ;
2225import com .google .firebase .remoteconfig .internal .TemplateResponse .ParameterValueResponse ;
26+ import com .google .firebase .remoteconfig .internal .TemplateResponse .PersonalizationValueResponse ;
27+ import com .google .firebase .remoteconfig .internal .TemplateResponse .RolloutValueResponse ;
2328
29+ import java .util .ArrayList ;
30+ import java .util .List ;
2431import java .util .Objects ;
2532
2633/**
@@ -47,6 +54,40 @@ public static InAppDefault inAppDefault() {
4754 return new InAppDefault ();
4855 }
4956
57+ /**
58+ * Creates a new {@link ParameterValue.RolloutValue} instance.
59+ *
60+ * @param rolloutId The rollout ID.
61+ * @param value The value of the rollout.
62+ * @param percent The percentage of the rollout.
63+ * @return A {@link ParameterValue.RolloutValue} instance.
64+ */
65+ public static RolloutValue ofRollout (String rolloutId , String value , double percent ) {
66+ return new RolloutValue (rolloutId , value , percent );
67+ }
68+
69+ /**
70+ * Creates a new {@link ParameterValue.PersonalizationValue} instance.
71+ *
72+ * @param personalizationId The personalization ID.
73+ * @return A {@link ParameterValue.PersonalizationValue} instance.
74+ */
75+ public static PersonalizationValue ofPersonalization (String personalizationId ) {
76+ return new PersonalizationValue (personalizationId );
77+ }
78+
79+ /**
80+ * Creates a new {@link ParameterValue.ExperimentValue} instance.
81+ *
82+ * @param experimentId The experiment ID.
83+ * @param variantValues The list of experiment variant values.
84+ * @return A {@link ParameterValue.ExperimentValue} instance.
85+ */
86+ public static ExperimentValue ofExperiment (String experimentId ,
87+ List <ExperimentVariantValue > variantValues ) {
88+ return new ExperimentValue (experimentId , variantValues );
89+ }
90+
5091 abstract ParameterValueResponse toParameterValueResponse ();
5192
5293 static ParameterValue fromParameterValueResponse (
@@ -55,6 +96,24 @@ static ParameterValue fromParameterValueResponse(
5596 if (parameterValueResponse .isUseInAppDefault ()) {
5697 return ParameterValue .inAppDefault ();
5798 }
99+ if (parameterValueResponse .getRolloutValue () != null ) {
100+ RolloutValueResponse rv = parameterValueResponse .getRolloutValue ();
101+ return ParameterValue .ofRollout (rv .getRolloutId (), rv .getValue (), rv .getPercent ());
102+ }
103+ if (parameterValueResponse .getPersonalizationValue () != null ) {
104+ PersonalizationValueResponse pv = parameterValueResponse .getPersonalizationValue ();
105+ return ParameterValue .ofPersonalization (pv .getPersonalizationId ());
106+ }
107+ if (parameterValueResponse .getExperimentValue () != null ) {
108+ ExperimentValueResponse ev = parameterValueResponse .getExperimentValue ();
109+ List <ExperimentVariantValue > variantValues = new ArrayList <>();
110+ for (ExperimentVariantValueResponse evv : ev .getExperimentVariantValues ()) {
111+ variantValues .add (
112+ new ExperimentVariantValue (evv .getVariantId (), evv .getValue (),
113+ evv .getNoChange ()));
114+ }
115+ return ParameterValue .ofExperiment (ev .getExperimentId (), variantValues );
116+ }
58117 return ParameterValue .of (parameterValueResponse .getValue ());
59118 }
60119
@@ -124,4 +183,220 @@ public boolean equals(Object o) {
124183 return true ;
125184 }
126185 }
186+
187+ /**
188+ * Represents a Rollout value.
189+ */
190+ public static final class RolloutValue extends ParameterValue {
191+ private final String rolloutId ;
192+ private final String value ;
193+ private final double percent ;
194+
195+ private RolloutValue (String rolloutId , String value , double percent ) {
196+ this .rolloutId = rolloutId ;
197+ this .value = value ;
198+ this .percent = percent ;
199+ }
200+
201+ public String getRolloutId () {
202+ return rolloutId ;
203+ }
204+
205+ public String getValue () {
206+ return value ;
207+ }
208+
209+ public double getPercent () {
210+ return percent ;
211+ }
212+
213+ @ Override
214+ ParameterValueResponse toParameterValueResponse () {
215+ return new ParameterValueResponse ().setRolloutValue (
216+ new RolloutValueResponse ()
217+ .setRolloutId (this .rolloutId )
218+ .setValue (this .value )
219+ .setPercent (this .percent ));
220+ }
221+
222+ @ Override
223+ public boolean equals (Object o ) {
224+ if (this == o ) {
225+ return true ;
226+ }
227+ if (o == null || getClass () != o .getClass ()) {
228+ return false ;
229+ }
230+ RolloutValue that = (RolloutValue ) o ;
231+ return Double .compare (that .percent , percent ) == 0
232+ && Objects .equals (rolloutId , that .rolloutId )
233+ && Objects .equals (value , that .value );
234+ }
235+
236+ @ Override
237+ public int hashCode () {
238+ return Objects .hash (rolloutId , value , percent );
239+ }
240+ }
241+
242+ /**
243+ * Represents a Personalization value.
244+ */
245+ public static final class PersonalizationValue extends ParameterValue {
246+ private final String personalizationId ;
247+
248+ private PersonalizationValue (String personalizationId ) {
249+ this .personalizationId = personalizationId ;
250+ }
251+
252+ public String getPersonalizationId () {
253+ return personalizationId ;
254+ }
255+
256+ @ Override
257+ ParameterValueResponse toParameterValueResponse () {
258+ return new ParameterValueResponse ().setPersonalizationValue (
259+ new PersonalizationValueResponse ()
260+ .setPersonalizationId (this .personalizationId ));
261+ }
262+
263+ @ Override
264+ public boolean equals (Object o ) {
265+ if (this == o ) {
266+ return true ;
267+ }
268+ if (o == null || getClass () != o .getClass ()) {
269+ return false ;
270+ }
271+ PersonalizationValue that = (PersonalizationValue ) o ;
272+ return Objects .equals (personalizationId , that .personalizationId );
273+ }
274+
275+ @ Override
276+ public int hashCode () {
277+ return Objects .hash (personalizationId );
278+ }
279+ }
280+
281+ /**
282+ * Represents a specific variant within an Experiment.
283+ */
284+ public static final class ExperimentVariantValue {
285+ private final String variantId ;
286+ private final String value ;
287+ private final boolean noChange ;
288+
289+ ExperimentVariantValue (String variantId , String value , Boolean noChange ) {
290+ this .variantId = variantId ;
291+ this .value = value ;
292+ this .noChange = Boolean .TRUE .equals (noChange );
293+ }
294+
295+ /**
296+ * Creates a new {@link ExperimentVariantValue} instance.
297+ *
298+ * @param variantId The variant ID.
299+ * @param value The value of the variant.
300+ * @return A {@link ExperimentVariantValue} instance.
301+ */
302+ public static ExperimentVariantValue of (String variantId , String value ) {
303+ return new ExperimentVariantValue (variantId , value , false );
304+ }
305+
306+ /**
307+ * Creates a new {@link ExperimentVariantValue} instance.
308+ *
309+ * @param variantId The variant ID.
310+ * @return A {@link ExperimentVariantValue} instance.
311+ */
312+ public static ExperimentVariantValue ofNoChange (String variantId ) {
313+ return new ExperimentVariantValue (variantId , null , true );
314+ }
315+
316+ public String getVariantId () {
317+ return variantId ;
318+ }
319+
320+ @ Nullable
321+ public String getValue () {
322+ return value ;
323+ }
324+
325+ public boolean isNoChange () {
326+ return noChange ;
327+ }
328+
329+ @ Override
330+ public boolean equals (Object o ) {
331+ if (this == o ) {
332+ return true ;
333+ }
334+ if (o == null || getClass () != o .getClass ()) {
335+ return false ;
336+ }
337+ ExperimentVariantValue that = (ExperimentVariantValue ) o ;
338+ return noChange == that .noChange
339+ && Objects .equals (variantId , that .variantId )
340+ && Objects .equals (value , that .value );
341+ }
342+
343+ @ Override
344+ public int hashCode () {
345+ return Objects .hash (variantId , value , noChange );
346+ }
347+ }
348+
349+ /**
350+ * Represents an Experiment value.
351+ */
352+ public static final class ExperimentValue extends ParameterValue {
353+ private final String experimentId ;
354+ private final List <ExperimentVariantValue > variantValues ;
355+
356+ private ExperimentValue (String experimentId , List <ExperimentVariantValue > variantValues ) {
357+ this .experimentId = experimentId ;
358+ this .variantValues = variantValues ;
359+ }
360+
361+ public String getExperimentId () {
362+ return experimentId ;
363+ }
364+
365+ public List <ExperimentVariantValue > getExperimentVariantValues () {
366+ return variantValues ;
367+ }
368+
369+ @ Override
370+ ParameterValueResponse toParameterValueResponse () {
371+ List <ExperimentVariantValueResponse > variantValueResponses = new ArrayList <>();
372+ for (ExperimentVariantValue variantValue : variantValues ) {
373+ variantValueResponses .add (new ExperimentVariantValueResponse ()
374+ .setVariantId (variantValue .getVariantId ())
375+ .setValue (variantValue .getValue ())
376+ .setNoChange (variantValue .isNoChange ()));
377+ }
378+ return new ParameterValueResponse ().setExperimentValue (
379+ new ExperimentValueResponse ()
380+ .setExperimentId (this .experimentId )
381+ .setExperimentVariantValues (variantValueResponses ));
382+ }
383+
384+ @ Override
385+ public boolean equals (Object o ) {
386+ if (this == o ) {
387+ return true ;
388+ }
389+ if (o == null || getClass () != o .getClass ()) {
390+ return false ;
391+ }
392+ ExperimentValue that = (ExperimentValue ) o ;
393+ return Objects .equals (experimentId , that .experimentId )
394+ && Objects .equals (variantValues , that .variantValues );
395+ }
396+
397+ @ Override
398+ public int hashCode () {
399+ return Objects .hash (experimentId , variantValues );
400+ }
401+ }
127402}
0 commit comments