]> git.basschouten.com Git - openhab-addons.git/blob
2d5b74d84af956d4667116ec45d2c0f06d15236e
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.lametrictime.internal.api.common.impl;
14
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.openhab.binding.lametrictime.internal.api.common.impl.typeadapters.ActionTypeAdapterFactory;
17 import org.openhab.binding.lametrictime.internal.api.common.impl.typeadapters.ApplicationTypeAdapterFactory;
18 import org.openhab.binding.lametrictime.internal.api.common.impl.typeadapters.UpdateActionTypeAdapterFactory;
19 import org.openhab.binding.lametrictime.internal.api.common.impl.typeadapters.imported.JSR310TypeAdapters;
20 import org.openhab.binding.lametrictime.internal.api.common.impl.typeadapters.imported.RuntimeTypeAdapterFactory;
21 import org.openhab.binding.lametrictime.internal.api.local.dto.BooleanParameter;
22 import org.openhab.binding.lametrictime.internal.api.local.dto.IntegerParameter;
23 import org.openhab.binding.lametrictime.internal.api.local.dto.Parameter;
24 import org.openhab.binding.lametrictime.internal.api.local.dto.StringParameter;
25
26 import com.google.gson.FieldNamingPolicy;
27 import com.google.gson.Gson;
28 import com.google.gson.GsonBuilder;
29
30 /**
31  * Class for json generation support.
32  *
33  * @author Gregory Moyer - Initial contribution
34  */
35 @NonNullByDefault
36 public class GsonGenerator {
37     public static Gson create() {
38         return create(false);
39     }
40
41     public static Gson create(boolean prettyPrint) {
42         GsonBuilder builder = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
43                 .registerTypeAdapterFactory(new ApplicationTypeAdapterFactory())
44                 .registerTypeAdapterFactory(new ActionTypeAdapterFactory())
45                 .registerTypeAdapterFactory(new UpdateActionTypeAdapterFactory())
46                 .registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(Parameter.class, "data_type")
47                         .registerSubtype(BooleanParameter.class, "bool")
48                         .registerSubtype(StringParameter.class, "string")
49                         .registerSubtype(IntegerParameter.class, "int"));
50
51         // add Java 8 Time API support
52         JSR310TypeAdapters.registerJSR310TypeAdapters(builder);
53
54         if (prettyPrint) {
55             builder.setPrettyPrinting();
56         }
57
58         return builder.create();
59     }
60
61     // @formatter:off
62     private GsonGenerator() {}
63     // @formatter:on
64 }