]> git.basschouten.com Git - openhab-addons.git/blob
dcbde82e6fcccd4372a5d60adc46b24dfd9413a7
[openhab-addons.git] /
1 /*
2  * Copyright (C) 2016 Gson Type Adapter Authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /*
18  * Imported from https://github.com/google-gson/typeadapters/tree/master/jsr310/src
19  * and repackaged to avoid the default package.
20  */
21 package org.openhab.binding.sleepiq.api.impl.typeadapters;
22
23 import java.io.IOException;
24 import java.util.Objects;
25 import java.util.function.Function;
26
27 import com.google.gson.TypeAdapter;
28 import com.google.gson.stream.JsonReader;
29 import com.google.gson.stream.JsonToken;
30 import com.google.gson.stream.JsonWriter;
31
32 /**
33  * Abstract type adapter for jsr310 date-time types.
34  *
35  * @author Christophe Bornet
36  */
37 abstract class TemporalTypeAdapter<T> extends TypeAdapter<T> {
38
39     Function<String, T> parseFunction;
40
41     TemporalTypeAdapter(Function<String, T> parseFunction) {
42         Objects.requireNonNull(parseFunction);
43         this.parseFunction = parseFunction;
44     }
45
46     @Override
47     public void write(JsonWriter out, T value) throws IOException {
48         if (value == null) {
49             out.nullValue();
50         } else {
51             out.value(value.toString());
52         }
53     }
54
55     @Override
56     public T read(JsonReader in) throws IOException {
57         if (in.peek() == JsonToken.NULL) {
58             in.nextNull();
59             return null;
60         }
61         String temporalString = preProcess(in.nextString());
62         return parseFunction.apply(temporalString);
63     }
64
65     public String preProcess(String in) {
66         return in;
67     }
68 }