001/**
002 * Copyright (C) 2006-2024 Talend Inc. - www.talend.com
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.talend.sdk.component.runtime.manager.service;
017
018import java.io.InputStream;
019import java.io.ObjectStreamException;
020import java.io.OutputStream;
021import java.io.Reader;
022import java.io.Serializable;
023import java.io.Writer;
024import java.lang.reflect.Type;
025import java.util.Objects;
026import java.util.stream.Stream;
027
028import javax.json.bind.Jsonb;
029import javax.json.bind.JsonbException;
030
031import org.talend.sdk.component.runtime.record.json.PojoJsonbProvider;
032import org.talend.sdk.component.runtime.serialization.SerializableService;
033
034import lombok.Getter;
035import lombok.RequiredArgsConstructor;
036import lombok.extern.slf4j.Slf4j;
037
038@Slf4j
039@RequiredArgsConstructor
040public class GenericOrPojoJsonb implements Jsonb, PojoJsonbProvider, Serializable {
041
042    private final String plugin;
043
044    private final Jsonb jsonb;
045
046    @Getter
047    private final Jsonb pojoMapper;
048
049    @Override
050    public Jsonb get() {
051        return pojoMapper;
052    }
053
054    @Override
055    public void close() {
056        Stream.of(jsonb, pojoMapper).filter(Objects::nonNull).forEach(it -> {
057            try {
058                it.close();
059            } catch (final Exception e) {
060                log.warn(e.getMessage(), e);
061            }
062        });
063    }
064
065    @Override
066    public <T> T fromJson(final String str, final Class<T> type) throws JsonbException {
067        return jsonb.fromJson(str, type);
068    }
069
070    @Override
071    public <T> T fromJson(final String str, final Type runtimeType) throws JsonbException {
072        return jsonb.fromJson(str, runtimeType);
073    }
074
075    @Override
076    public <T> T fromJson(final Reader reader, final Class<T> type) throws JsonbException {
077        return jsonb.fromJson(reader, type);
078    }
079
080    @Override
081    public <T> T fromJson(final Reader reader, final Type runtimeType) throws JsonbException {
082        return jsonb.fromJson(reader, runtimeType);
083    }
084
085    @Override
086    public <T> T fromJson(final InputStream stream, final Class<T> type) throws JsonbException {
087        return jsonb.fromJson(stream, type);
088    }
089
090    @Override
091    public <T> T fromJson(final InputStream stream, final Type runtimeType) throws JsonbException {
092        return jsonb.fromJson(stream, runtimeType);
093    }
094
095    @Override
096    public String toJson(final Object object) throws JsonbException {
097        return jsonb.toJson(object);
098    }
099
100    @Override
101    public String toJson(final Object object, final Type runtimeType) throws JsonbException {
102        return jsonb.toJson(object, runtimeType);
103    }
104
105    @Override
106    public void toJson(final Object object, final Writer writer) throws JsonbException {
107        jsonb.toJson(object, writer);
108    }
109
110    @Override
111    public void toJson(final Object object, final Type runtimeType, final Writer writer) throws JsonbException {
112        jsonb.toJson(object, runtimeType, writer);
113    }
114
115    @Override
116    public void toJson(final Object object, final OutputStream stream) throws JsonbException {
117        jsonb.toJson(object, stream);
118    }
119
120    @Override
121    public void toJson(final Object object, final Type runtimeType, final OutputStream stream) throws JsonbException {
122        jsonb.toJson(object, runtimeType, stream);
123    }
124
125    Object writeReplace() throws ObjectStreamException {
126        return new SerializableService(plugin, Jsonb.class.getName());
127    }
128}