Skip to content

Commit b7af7db

Browse files
authored
Merge branch 'main' into je-http-gzip
2 parents 6f7c7e2 + 584742f commit b7af7db

File tree

5 files changed

+587
-0
lines changed

5 files changed

+587
-0
lines changed

src/main/java/com/google/firebase/remoteconfig/ParameterValue.java

Lines changed: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,18 @@
1717
package com.google.firebase.remoteconfig;
1818

1919
import static com.google.common.base.Preconditions.checkNotNull;
20+
import static java.util.stream.Collectors.toList;
2021

2122
import com.google.firebase.internal.NonNull;
23+
import com.google.firebase.internal.Nullable;
24+
import com.google.firebase.remoteconfig.internal.TemplateResponse.ExperimentValueResponse;
25+
import com.google.firebase.remoteconfig.internal.TemplateResponse.ExperimentVariantValueResponse;
2226
import com.google.firebase.remoteconfig.internal.TemplateResponse.ParameterValueResponse;
27+
import com.google.firebase.remoteconfig.internal.TemplateResponse.PersonalizationValueResponse;
28+
import com.google.firebase.remoteconfig.internal.TemplateResponse.RolloutValueResponse;
2329

30+
import java.util.ArrayList;
31+
import java.util.List;
2432
import java.util.Objects;
2533

2634
/**
@@ -47,6 +55,40 @@ public static InAppDefault inAppDefault() {
4755
return new InAppDefault();
4856
}
4957

58+
/**
59+
* Creates a new {@link ParameterValue.RolloutValue} instance.
60+
*
61+
* @param rolloutId The rollout ID.
62+
* @param value The value of the rollout.
63+
* @param percent The percentage of the rollout.
64+
* @return A {@link ParameterValue.RolloutValue} instance.
65+
*/
66+
public static RolloutValue ofRollout(String rolloutId, String value, double percent) {
67+
return new RolloutValue(rolloutId, value, percent);
68+
}
69+
70+
/**
71+
* Creates a new {@link ParameterValue.PersonalizationValue} instance.
72+
*
73+
* @param personalizationId The personalization ID.
74+
* @return A {@link ParameterValue.PersonalizationValue} instance.
75+
*/
76+
public static PersonalizationValue ofPersonalization(String personalizationId) {
77+
return new PersonalizationValue(personalizationId);
78+
}
79+
80+
/**
81+
* Creates a new {@link ParameterValue.ExperimentValue} instance.
82+
*
83+
* @param experimentId The experiment ID.
84+
* @param variantValues The list of experiment variant values.
85+
* @return A {@link ParameterValue.ExperimentValue} instance.
86+
*/
87+
public static ExperimentValue ofExperiment(String experimentId,
88+
List<ExperimentVariantValue> variantValues) {
89+
return new ExperimentValue(experimentId, variantValues);
90+
}
91+
5092
abstract ParameterValueResponse toParameterValueResponse();
5193

5294
static ParameterValue fromParameterValueResponse(
@@ -55,6 +97,30 @@ static ParameterValue fromParameterValueResponse(
5597
if (parameterValueResponse.isUseInAppDefault()) {
5698
return ParameterValue.inAppDefault();
5799
}
100+
if (parameterValueResponse.getRolloutValue() != null) {
101+
RolloutValueResponse rv = parameterValueResponse.getRolloutValue();
102+
// Protobuf serialization does not set values for fields on the wire when
103+
// they are equal to the default value for the field type. When deserializing,
104+
// can appear as the value not being set. Explicitly handle default value for
105+
// the percent field since 0 is a valid value.
106+
double percent = 0;
107+
if (rv.getPercent() != null) {
108+
percent = rv.getPercent();
109+
}
110+
return ParameterValue.ofRollout(rv.getRolloutId(), rv.getValue(), percent);
111+
}
112+
if (parameterValueResponse.getPersonalizationValue() != null) {
113+
PersonalizationValueResponse pv = parameterValueResponse.getPersonalizationValue();
114+
return ParameterValue.ofPersonalization(pv.getPersonalizationId());
115+
}
116+
if (parameterValueResponse.getExperimentValue() != null) {
117+
ExperimentValueResponse ev = parameterValueResponse.getExperimentValue();
118+
List<ExperimentVariantValue> variantValues = ev.getExperimentVariantValues().stream()
119+
.map(evv -> new ExperimentVariantValue(
120+
evv.getVariantId(), evv.getValue(), evv.getNoChange()))
121+
.collect(toList());
122+
return ParameterValue.ofExperiment(ev.getExperimentId(), variantValues);
123+
}
58124
return ParameterValue.of(parameterValueResponse.getValue());
59125
}
60126

@@ -124,4 +190,224 @@ public boolean equals(Object o) {
124190
return true;
125191
}
126192
}
193+
194+
/**
195+
* Represents a Rollout value.
196+
*/
197+
public static final class RolloutValue extends ParameterValue {
198+
private final String rolloutId;
199+
private final String value;
200+
private final double percent;
201+
202+
private RolloutValue(String rolloutId, String value, double percent) {
203+
this.rolloutId = rolloutId;
204+
this.value = value;
205+
this.percent = percent;
206+
}
207+
208+
public String getRolloutId() {
209+
return rolloutId;
210+
}
211+
212+
public String getValue() {
213+
return value;
214+
}
215+
216+
public double getPercent() {
217+
return percent;
218+
}
219+
220+
@Override
221+
ParameterValueResponse toParameterValueResponse() {
222+
return new ParameterValueResponse().setRolloutValue(
223+
new RolloutValueResponse()
224+
.setRolloutId(this.rolloutId)
225+
.setValue(this.value)
226+
.setPercent(this.percent));
227+
}
228+
229+
@Override
230+
public boolean equals(Object o) {
231+
if (this == o) {
232+
return true;
233+
}
234+
if (o == null || getClass() != o.getClass()) {
235+
return false;
236+
}
237+
RolloutValue that = (RolloutValue) o;
238+
return Double.compare(that.percent, percent) == 0
239+
&& Objects.equals(rolloutId, that.rolloutId)
240+
&& Objects.equals(value, that.value);
241+
}
242+
243+
@Override
244+
public int hashCode() {
245+
return Objects.hash(rolloutId, value, percent);
246+
}
247+
}
248+
249+
/**
250+
* Represents a Personalization value.
251+
*/
252+
public static final class PersonalizationValue extends ParameterValue {
253+
private final String personalizationId;
254+
255+
private PersonalizationValue(String personalizationId) {
256+
this.personalizationId = personalizationId;
257+
}
258+
259+
public String getPersonalizationId() {
260+
return personalizationId;
261+
}
262+
263+
@Override
264+
ParameterValueResponse toParameterValueResponse() {
265+
return new ParameterValueResponse().setPersonalizationValue(
266+
new PersonalizationValueResponse()
267+
.setPersonalizationId(this.personalizationId));
268+
}
269+
270+
@Override
271+
public boolean equals(Object o) {
272+
if (this == o) {
273+
return true;
274+
}
275+
if (o == null || getClass() != o.getClass()) {
276+
return false;
277+
}
278+
PersonalizationValue that = (PersonalizationValue) o;
279+
return Objects.equals(personalizationId, that.personalizationId);
280+
}
281+
282+
@Override
283+
public int hashCode() {
284+
return Objects.hash(personalizationId);
285+
}
286+
}
287+
288+
/**
289+
* Represents a specific variant within an Experiment.
290+
*/
291+
public static final class ExperimentVariantValue {
292+
private final String variantId;
293+
private final String value;
294+
private final Boolean noChange;
295+
296+
ExperimentVariantValue(String variantId, String value, Boolean noChange) {
297+
this.variantId = variantId;
298+
this.value = value;
299+
this.noChange = noChange;
300+
}
301+
302+
/**
303+
* Creates a new {@link ExperimentVariantValue} instance.
304+
*
305+
* @param variantId The variant ID.
306+
* @param value The value of the variant.
307+
* @return A {@link ExperimentVariantValue} instance.
308+
*/
309+
public static ExperimentVariantValue of(String variantId, String value) {
310+
return new ExperimentVariantValue(variantId, value, null);
311+
}
312+
313+
/**
314+
* Creates a new {@link ExperimentVariantValue} instance.
315+
*
316+
* @param variantId The variant ID.
317+
* @return A {@link ExperimentVariantValue} instance.
318+
*/
319+
public static ExperimentVariantValue ofNoChange(String variantId) {
320+
return new ExperimentVariantValue(variantId, null, true);
321+
}
322+
323+
public String getVariantId() {
324+
return variantId;
325+
}
326+
327+
@Nullable
328+
public String getValue() {
329+
return value;
330+
}
331+
332+
@Nullable
333+
Boolean getNoChange() {
334+
return noChange;
335+
}
336+
337+
public boolean isNoChange() {
338+
return Boolean.TRUE.equals(noChange);
339+
}
340+
341+
@Override
342+
public boolean equals(Object o) {
343+
if (this == o) {
344+
return true;
345+
}
346+
if (o == null || getClass() != o.getClass()) {
347+
return false;
348+
}
349+
ExperimentVariantValue that = (ExperimentVariantValue) o;
350+
return noChange == that.noChange
351+
&& Objects.equals(variantId, that.variantId)
352+
&& Objects.equals(value, that.value);
353+
}
354+
355+
@Override
356+
public int hashCode() {
357+
return Objects.hash(variantId, value, noChange);
358+
}
359+
}
360+
361+
/**
362+
* Represents an Experiment value.
363+
*/
364+
public static final class ExperimentValue extends ParameterValue {
365+
private final String experimentId;
366+
private final List<ExperimentVariantValue> variantValues;
367+
368+
private ExperimentValue(String experimentId, List<ExperimentVariantValue> variantValues) {
369+
this.experimentId = experimentId;
370+
this.variantValues = variantValues;
371+
}
372+
373+
public String getExperimentId() {
374+
return experimentId;
375+
}
376+
377+
public List<ExperimentVariantValue> getExperimentVariantValues() {
378+
return variantValues;
379+
}
380+
381+
@Override
382+
ParameterValueResponse toParameterValueResponse() {
383+
List<ExperimentVariantValueResponse> variantValueResponses = variantValues.stream()
384+
.map(variantValue -> new ExperimentVariantValueResponse()
385+
.setVariantId(variantValue.getVariantId())
386+
.setValue(variantValue.getValue())
387+
.setNoChange(variantValue.getNoChange()))
388+
.collect(toList());
389+
return new ParameterValueResponse().setExperimentValue(
390+
new ExperimentValueResponse()
391+
.setExperimentId(this.experimentId)
392+
.setExperimentVariantValues(variantValueResponses));
393+
}
394+
395+
@Override
396+
public boolean equals(Object o) {
397+
if (this == o) {
398+
return true;
399+
}
400+
if (o == null || getClass() != o.getClass()) {
401+
return false;
402+
}
403+
ExperimentValue that = (ExperimentValue) o;
404+
return Objects.equals(experimentId, that.experimentId)
405+
&& Objects.equals(variantValues, that.variantValues);
406+
}
407+
408+
@Override
409+
public int hashCode() {
410+
return Objects.hash(experimentId, variantValues);
411+
}
412+
}
127413
}

0 commit comments

Comments
 (0)