/*******************************************************************************
 * Copyright (c) 2015, 2016 EfficiOS Inc., Alexandre Montplaisir
 *
 * All rights reserved. This program and the accompanying materials are
 * made available under the terms of the Eclipse Public License 2.0 which
 * accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *******************************************************************************/

package org.eclipse.tracecompass.internal.provisional.analysis.lami.core.module;

import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;

import java.util.Collection;
import java.util.List;

import org.eclipse.tracecompass.internal.provisional.analysis.lami.core.aspect.LamiTableEntryAspect;

import com.google.common.collect.ImmutableList;

/**
 * The model of a table element in a LAMI analysis script output.
 *
 * Contains all the required information to build the actual UI table layout.
 *
 * @author Alexandre Montplaisir
 */
public class LamiTableClass {

    private final String fTableClassName;
    private final String fTableTitle;
    private final List<LamiTableEntryAspect> fAspects;
    private final Collection<LamiChartModel> fPredefinedViews;

    /**
     * Standard constructor. Build a new table class by specifying all
     * parameters.
     *
     * @param tableClassName
     *            The name of the table's class
     * @param tableTitle
     *            The title of this table
     * @param columnAspects
     *            The list of aspects representing the columns of this table
     * @param predefinedViews
     *            The pre-defined views of this analysis. Viewers will be
     *            created for these views by default.
     */
    public LamiTableClass(String tableClassName, String tableTitle,
            List<LamiTableEntryAspect> columnAspects, Collection<LamiChartModel> predefinedViews) {
        fTableClassName = tableClassName;
        fTableTitle = tableTitle;
        fAspects = checkNotNull(ImmutableList.copyOf(columnAspects));
        fPredefinedViews = ImmutableList.copyOf(predefinedViews);
    }

    /**
     * "Extension" constructor. Use an existing table class but override the
     * table name.
     *
     * @param baseClass
     *            The base table class
     * @param replacementTitle
     *            The new title to use instead
     */
    public LamiTableClass(LamiTableClass baseClass, String replacementTitle) {
        fTableClassName = Messages.LamiAnalysis_ExtendedTableNamePrefix + ' ' + baseClass.fTableClassName;
        fTableTitle = replacementTitle;
        fAspects = baseClass.fAspects; // We know it's an immutable list
        fPredefinedViews = baseClass.fPredefinedViews; // idem
    }

    /**
     * Get the name of the table's class.
     *
     * @return The table class name
     */
    public String getTableClassName() {
        return fTableClassName;
    }

    /**
     * Get the title of this table.
     *
     * @return The table title
     */
    public String getTableTitle() {
        return fTableTitle;
    }

    /**
     * Get the aspects of this table's columns.
     *
     * @return The table aspects
     */
    public List<LamiTableEntryAspect> getAspects() {
        return fAspects;
    }
    /**
     * Get the pre-defined views of this table.
     *
     * @return The predefined views
     */
    public Collection<LamiChartModel> getPredefinedViews() {
        return fPredefinedViews;
    }
}
