All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.deepoove.poi.jsonmodel.support.DefaultGsonHandler Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2014-2022 Sayi
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.deepoove.poi.jsonmodel.support;

import java.util.ArrayList;
import java.util.List;

import com.deepoove.poi.data.*;
import com.deepoove.poi.plugin.comment.CommentRenderData;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.typeadapters.RuntimeTypeAdapterFactory;

/**
 * 
 * define type for all render data class 
* Json string to Map and Map to Json string. * */ public class DefaultGsonHandler implements GsonHandler { private static final String BYTES = "bytes"; private static final String URL = "url"; private static final String FILE = "file"; private static final String CHART_SINGLE = "chart-single"; private static final String CHART_MULTI = "chart-multi"; private static final String DOC = "doc"; private static final String ATTACHMENT = "attachment"; private static final String IMPORT = "import"; private static final String COMMENT = "comment"; private static final String TABLE = "table"; private static final String NUMBERING = "numbering"; private static final String PARAGRAPH = "paragraph"; private static final String BOOKMARK = "bookmark"; private static final String LINK = "link"; private static final String TEXT = "text"; private static final String TYPE_NAME = "type"; private Gson parser, writer; @Override public Gson parser() { if (null != parser) return parser; GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapterFactory(createRenderTypeAdapter(true)); gsonBuilder.registerTypeAdapterFactory(createTextTypeAdapter(true)); gsonBuilder.registerTypeAdapterFactory(createPictureTypeAdapter(true)); createTypeAdapters(true).forEach(factory -> gsonBuilder.registerTypeAdapterFactory(factory)); parser = gsonBuilder.create(); return parser; } @Override public Gson writer() { if (null != writer) return writer; GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapterFactory(createRenderTypeAdapter(false)); gsonBuilder.registerTypeAdapterFactory(createTextTypeAdapter(false)); gsonBuilder.registerTypeAdapterFactory(createPictureTypeAdapter(false)); createTypeAdapters(false).forEach(factory -> gsonBuilder.registerTypeAdapterFactory(factory)); writer = gsonBuilder.create(); return writer; } protected RuntimeTypeAdapterFactory createRenderTypeAdapter(boolean readable) { return RuntimeTypeAdapterFactory.of(RenderData.class, TYPE_NAME, readable) .registerSubtype(TextRenderData.class, TEXT) .registerSubtype(HyperlinkTextRenderData.class, LINK) .registerSubtype(BookmarkTextRenderData.class, BOOKMARK) .registerSubtype(ParagraphRenderData.class, PARAGRAPH) .registerSubtype(NumberingRenderData.class, NUMBERING) .registerSubtype(TableRenderData.class, TABLE) .registerSubtype(CommentRenderData.class, COMMENT) .registerSubtype(DocxRenderData.class, IMPORT) .registerSubtype(AttachmentRenderData.class, ATTACHMENT) .registerSubtype(DocumentRenderData.class, DOC) .registerSubtype(ChartMultiSeriesRenderData.class, CHART_MULTI) .registerSubtype(ChartSingleSeriesRenderData.class, CHART_SINGLE) .registerSubtype(FilePictureRenderData.class, FILE) .registerSubtype(UrlPictureRenderData.class, URL) .registerSubtype(ByteArrayPictureRenderData.class, BYTES); } protected List> createTypeAdapters(boolean readable) { List> list = new ArrayList<>(); list.add(RuntimeTypeAdapterFactory.of(ParagraphRenderData.class, TYPE_NAME, readable) .registerSubtype(ParagraphRenderData.class, PARAGRAPH)); list.add(RuntimeTypeAdapterFactory.of(NumberingRenderData.class, TYPE_NAME, readable) .registerSubtype(NumberingRenderData.class, NUMBERING)); list.add(RuntimeTypeAdapterFactory.of(TableRenderData.class, TYPE_NAME, readable) .registerSubtype(TableRenderData.class, TABLE)); list.add(RuntimeTypeAdapterFactory.of(CommentRenderData.class, TYPE_NAME, readable) .registerSubtype(CommentRenderData.class, COMMENT)); list.add(RuntimeTypeAdapterFactory.of(DocxRenderData.class, TYPE_NAME, readable) .registerSubtype(DocxRenderData.class, IMPORT)); list.add(RuntimeTypeAdapterFactory.of(AttachmentRenderData.class, TYPE_NAME, readable) .registerSubtype(AttachmentRenderData.class, ATTACHMENT)); list.add(RuntimeTypeAdapterFactory.of(DocumentRenderData.class, TYPE_NAME, readable) .registerSubtype(DocumentRenderData.class, DOC)); list.add(RuntimeTypeAdapterFactory.of(ChartMultiSeriesRenderData.class, TYPE_NAME, readable) .registerSubtype(ChartMultiSeriesRenderData.class, CHART_MULTI)); list.add(RuntimeTypeAdapterFactory.of(ChartSingleSeriesRenderData.class, TYPE_NAME, readable) .registerSubtype(ChartSingleSeriesRenderData.class, CHART_SINGLE)); list.add(RuntimeTypeAdapterFactory.of(HyperlinkTextRenderData.class, TYPE_NAME, readable) .registerSubtype(HyperlinkTextRenderData.class, LINK)); list.add(RuntimeTypeAdapterFactory.of(BookmarkTextRenderData.class, TYPE_NAME, readable) .registerSubtype(BookmarkTextRenderData.class, BOOKMARK)); list.add(RuntimeTypeAdapterFactory.of(FilePictureRenderData.class, TYPE_NAME, readable) .registerSubtype(FilePictureRenderData.class, FILE)); list.add(RuntimeTypeAdapterFactory.of(UrlPictureRenderData.class, TYPE_NAME, readable) .registerSubtype(UrlPictureRenderData.class, URL)); list.add(RuntimeTypeAdapterFactory.of(ByteArrayPictureRenderData.class, TYPE_NAME, readable) .registerSubtype(ByteArrayPictureRenderData.class, BYTES)); return list; } protected RuntimeTypeAdapterFactory createTextTypeAdapter(boolean readable) { return RuntimeTypeAdapterFactory.of(TextRenderData.class, TYPE_NAME, readable) .registerSubtype(TextRenderData.class, TEXT) .registerSubtype(HyperlinkTextRenderData.class, LINK) .registerSubtype(BookmarkTextRenderData.class, BOOKMARK); } protected RuntimeTypeAdapterFactory createPictureTypeAdapter(boolean readable) { return RuntimeTypeAdapterFactory.of(PictureRenderData.class, TYPE_NAME, readable) .registerSubtype(FilePictureRenderData.class, FILE) .registerSubtype(UrlPictureRenderData.class, URL) .registerSubtype(ByteArrayPictureRenderData.class, BYTES); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy