ProcessesReportsBuilder.java
/*
** Module : ProcessesReportsBuilder.java
** Abstract : ProcessesReportsBuilder is a PDF report builder to produce Process Accounts reports.
**
** Copyright (c) 2017, Golden Code Development Corporation.
**
** -#- -I- --Date-- ----------------Description----------------------
** 001 SBI 20170601 Created initial version.
*/
/*
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU Affero General Public License as
** published by the Free Software Foundation, either version 3 of the
** License, or (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU Affero General Public License for more details.
**
** You may find a copy of the GNU Affero GPL version 3 at the following
** location: https://www.gnu.org/licenses/agpl-3.0.en.html
**
** Additional terms under GNU Affero GPL version 3 section 7:
**
** Under Section 7 of the GNU Affero GPL version 3, the following additional
** terms apply to the works covered under the License. These additional terms
** are non-permissive additional terms allowed under Section 7 of the GNU
** Affero GPL version 3 and may not be removed by you.
**
** 0. Attribution Requirement.
**
** You must preserve all legal notices or author attributions in the covered
** work or Appropriate Legal Notices displayed by works containing the covered
** work. You may not remove from the covered work any author or developer
** credit already included within the covered work.
**
** 1. No License To Use Trademarks.
**
** This license does not grant any license or rights to use the trademarks
** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks
** of Golden Code Development Corporation. You are not authorized to use the
** name Golden Code, FWD, or the names of any author or contributor, for
** publicity purposes without written authorization.
**
** 2. No Misrepresentation of Affiliation.
**
** You may not represent yourself as Golden Code Development Corporation or FWD.
**
** You may not represent yourself for publicity purposes as associated with
** Golden Code Development Corporation, FWD, or any author or contributor to
** the covered work, without written authorization.
**
** 3. No Misrepresentation of Source or Origin.
**
** You may not represent the covered work as solely your work. All modified
** versions of the covered work must be marked in a reasonable way to make it
** clear that the modified work is not originating from Golden Code Development
** Corporation or FWD. All modified versions must contain the notices of
** attribution required in this license.
*/
package com.goldencode.p2j.admin.server.reports;
import java.io.*;
import java.util.*;
import java.util.stream.Stream;
import com.goldencode.p2j.admin.AdminServerImpl;
import com.goldencode.p2j.admin.ProcessDef;
import com.goldencode.p2j.admin.TaggedName;
import com.goldencode.p2j.admin.shared.ReportRequest;
import com.goldencode.p2j.admin.shared.Reports;
import com.goldencode.p2j.security.*;
/**
* ProcessesReportsBuilder is a PDF report builder to produce Process Accounts reports.
*/
class ProcessesReportsBuilder
extends AccountsReportBuilder<ProcessAccountData>
{
/** the core column count that will be displayed in the extended rows mode */
private static final int CORE_COLUMN_COUNT = 4;
/** The number of attribute-value column pairs displayed in the extended rows mode */
private static final int TUPLE_COUNT = 2;
/** extended columns */
private List<ColumnInfo<ProcessAccountData>> extColumns;
/**
* Instantiates the processes reports builder.
*
* @param request
* The target report request
*/
public ProcessesReportsBuilder(ReportRequest request)
{
super(Reports.PROCESSES.name(),
request.getFilter(),
request.getSelectedRows(),
request.getReportParameters());
}
/**
* Returns the stream of {@link ProcessAccountData} objects.
*
* @return see above
*/
protected Stream<ProcessAccountData> getDataStream()
{
SecurityAdmin sa = AdminServerImpl.getSecurityAdmin();
AccountReportsExtension ext = sa.getAccountReportsExtension();
TaggedName[] accounts = AdminServerImpl.listProcesses();
Object[] ctxt = new Object[]
{
0, // record index
0, // row index
null, // ProcessAccountData for current record
};
Stream<ProcessAccountData> res = Stream.generate(() ->
{
ProcessAccountData ad;
int recIdx = (int) ctxt[0];
int rowIdx = (int) ctxt[1];
if (recIdx == 0 || rowIdx >= numExtendedRows)
{
rowIdx = 0;
TaggedName tn = accounts[recIdx];
String name = tn.getName();
ProcessDef proc = AdminServerImpl.getProcess(name);
Serializable extDef = ext == null ? null : ext.getAccountExtData(name);
ad = new ProcessAccountData(tn, proc, extDef);
ctxt[2] = ad;
recIdx++;
ctxt[0] = recIdx;
}
else
{
ad = (ProcessAccountData) ctxt[2];
ad = new ProcessAccountData(ad.tn, ad.procDef, ad.extDef);
ad.extRowIndex = rowIdx;
}
rowIdx++;
ctxt[1] = rowIdx;
return ad;
});
int limit = 0;
if (hasSelectedRows())
{
res = res.filter(ad -> getSelectedRows().contains(ad.tn.getName()));
limit = getSelectedRows().size();
}
else
{
limit = accounts.length;
}
return res.limit(limit * Math.max(numExtendedRows, 1));
}
/**
* Returns report columns.
*
* @return see above
*/
@Override
protected List<ColumnInfo<ProcessAccountData>> getColumns()
{
ArrayList<ColumnInfo<ProcessAccountData>> columns = new ArrayList<>();
columns.add(new AccountColumnInfo<>("Account ID", entry -> entry.procDef.subjectId));
columns.add(new AccountColumnInfo<>("Description", entry -> {
if (entry.procDef == null)
{
return "*** possibly deleted ***";
}
return entry.tn.getTag();
}));
columns.add(new AccountColumnInfo<>("Disabled", entry -> {
if (entry.procDef == null)
{
return "";
}
return entry.procDef.enabled ? "" : "yes";
}));
columns.add(new AccountColumnInfo<>("Certificate", entry -> {
if (entry.procDef == null)
{
return "";
}
return entry.procDef.alias;
}));
columns.add(new AccountColumnInfo<>("Status", entry -> {
if (entry.procDef == null)
{
return "";
}
return entry.procDef.server ? "server" : "app";
}));
columns.add(new AccountColumnInfo<>("Groups", entry -> {
if (entry.procDef == null)
{
return "";
}
return entry.procDef.master && entry.procDef.server ? "master" : "";
}));
SecurityAdmin sa = AdminServerImpl.getSecurityAdmin();
AccountReportsExtension ext = sa.getAccountReportsExtension();
if (ext != null)
{
extColumns = ext.getAccountReportColumns();
}
if (showExtendedColumns && extColumns != null)
{
return buildColumns(columns, extColumns, CORE_COLUMN_COUNT, TUPLE_COUNT);
}
else
{
return columns;
}
}
}