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

com.metaeffekt.artifact.analysis.dashboard.elements.TableBuilder Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2021-2024 the original author or authors.
 *
 * 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.metaeffekt.artifact.analysis.dashboard.elements;

import j2html.tags.DomContent;
import j2html.tags.specialized.TableTag;

import java.util.*;

import static j2html.TagCreator.*;

public class TableBuilder {

    private final String tableClass;
    private final List> content = new ArrayList<>();

    public TableBuilder() {
        this.tableClass = null;
    }

    public TableBuilder(String tableClass) {
        this.tableClass = tableClass;
    }

    public List> getRows() {
        return content;
    }

    private List getHeaders(List order) {
        final List headers = new ArrayList<>();
        for (Map row : content) {
            for (String header : row.keySet()) {
                if (!headers.contains(header)) {
                    headers.add(header);
                }
            }
        }

        final List orderedHeaders = new ArrayList<>();
        for (String header : order) {
            if (headers.contains(header)) {
                orderedHeaders.add(header);
            }
        }
        for (String header : headers) {
            if (!orderedHeaders.contains(header)) {
                orderedHeaders.add(header);
            }
        }
        return orderedHeaders;
    }

    public void removeColumn(String column) {
        for (Map row : content) {
            row.remove(column);
        }
    }

    public TableTag generate() {
        return generate(Collections.emptyList());
    }

    public TableTag generate(List order) {
        List headers = getHeaders(order);
        TableTag table = table(
                thead(
                        tr(each(headers, header -> th(header)))
                ),
                tbody(
                        each(content, row -> tr(each(headers, header -> td(row.getOrDefault(header, text(""))))))
                )
        );
        if (tableClass != null) {
            table.withClass(tableClass);
        }
        return table;
    }

    public Map createRow() {
        Map row = new LinkedHashMap<>();
        content.add(row);
        return row;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy