/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you 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 the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>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 org.apereo.portal.portlets.statistics; import com.google.visualization.datasource.datatable.ColumnDescription; import java.util.List; /** * Interface to define the strategies used to determine the text of the statistics report titles and * column headings. Various implementations will generate the text as they see fit based upon * available data. * */ public interface ReportTitleAndColumnDescriptionStrategy { /** * Create a title that augments the report's standard title. The items that have a single * multi-valued criteria are typically added to the report title so they are not listed * redundantly in each column. You typically wouldn't have a report with columns Weather Portlet * (ALL), Weather Portlet (RENDER), Weather Portlet (ACTION). You'd want the title to include * 'Weather Portlet' and the columns to be ALL, RENDER, ACTION. * * <p>Implementing classes can format the data * * @param items Array of report items in order of importance. The item the report is for is * typically the first in the array, and the other items in order of 'preference' to being * in the title (last item least likely to be in the title). * @return String to add to the report's standard title, typically including report item * descriptions that would be duplicated in each column */ String getReportTitleAugmentation(TitleAndCount[] items); /** * Create column descriptions for the portlet report. The column descriptions are typically the * opposite of the title description changes. If an item appears in the title it typically does * not appear in the column heading as well. * * <p>Output is dependent upon the implementing class. * * @param items ordered array of items in the report. NOTE: item ordering must be the same as * with getReportTitleAugmentation * @param showAll true to include all item descriptions in the column headings. Useful if report * is being written to CSV, XML, HTML, etc. for importing into another tool * @param form statistics report form * @return List of column descriptions for the report */ List<ColumnDescription> getColumnDescriptions( TitleAndCount[] items, boolean showAll, BaseReportForm form); public class TitleAndCount { private String criteriaItem; private int criteriaValuesSelected; public TitleAndCount(String criteriaItem, int criteriaValuesSelected) { this.criteriaItem = criteriaItem; this.criteriaValuesSelected = criteriaValuesSelected; } public String getCriteriaItem() { return criteriaItem; } public int getCriteriaValuesSelected() { return criteriaValuesSelected; } } }