blob: f264962fb059199fd77282ad178687a7022f5e34 [file] [log] [blame]
/**
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*
* This copyright notice shows up in the generated Java code
*/
package org.eclipse.osbp.xtext.reportdsl.jvmmodel;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import com.ibm.icu.util.ULocale;
import com.vaadin.data.Container;
import com.vaadin.server.Sizeable;
import com.vaadin.server.StreamResource;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.BrowserFrame;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import java.util.function.BiConsumer;
import org.eclipse.birt.report.model.api.ColumnHandle;
import org.eclipse.birt.report.model.api.DesignElementHandle;
import org.eclipse.birt.report.model.api.DimensionHandle;
import org.eclipse.birt.report.model.api.GridHandle;
import org.eclipse.birt.report.model.api.IDesignEngine;
import org.eclipse.birt.report.model.api.OdaDataSetHandle;
import org.eclipse.birt.report.model.api.OdaDataSourceHandle;
import org.eclipse.birt.report.model.api.ReportItemHandle;
import org.eclipse.birt.report.model.api.RowHandle;
import org.eclipse.birt.report.model.api.SessionHandle;
import org.eclipse.birt.report.model.api.SimpleMasterPageHandle;
import org.eclipse.birt.report.model.api.StructureFactory;
import org.eclipse.birt.report.model.api.command.ContentException;
import org.eclipse.birt.report.model.api.command.CustomMsgException;
import org.eclipse.birt.report.model.api.core.IModuleModel;
import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants;
import org.eclipse.birt.report.model.api.elements.structures.CachedMetaData;
import org.eclipse.birt.report.model.api.elements.structures.ComputedColumn;
import org.eclipse.birt.report.model.api.elements.structures.OdaResultSetColumn;
import org.eclipse.birt.report.model.api.metadata.DimensionValue;
import org.eclipse.birt.report.model.core.ContainerSlot;
import org.eclipse.birt.report.model.core.DesignElement;
import org.eclipse.birt.report.model.elements.interfaces.IDataSetModel;
import org.eclipse.birt.report.model.util.CssPropertyConstants;
import org.eclipse.e4.core.di.extensions.EventUtils;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.osbp.dsl.semantic.common.types.LDataType;
import org.eclipse.osbp.dsl.semantic.common.types.LKeyAndValue;
import org.eclipse.osbp.dsl.semantic.common.types.LPackage;
import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
import org.eclipse.osbp.eventbroker.EventBrokerMsg;
import org.eclipse.osbp.ui.api.datamart.IDataMart;
import org.eclipse.osbp.ui.api.report.IReportProvider;
import org.eclipse.osbp.utils.entityhelper.DataType;
import org.eclipse.osbp.utils.vaadin.ViewLayoutManager;
import org.eclipse.osbp.xtext.action.common.IToolbarAction;
import org.eclipse.osbp.xtext.basic.generator.BasicDslGeneratorUtils;
import org.eclipse.osbp.xtext.datamartdsl.DatamartAttribute;
import org.eclipse.osbp.xtext.datamartdsl.DatamartCube;
import org.eclipse.osbp.xtext.datamartdsl.DatamartDefinition;
import org.eclipse.osbp.xtext.datamartdsl.DatamartEntity;
import org.eclipse.osbp.xtext.datamartdsl.DatamartNavigation;
import org.eclipse.osbp.xtext.datamartdsl.DatamartRole;
import org.eclipse.osbp.xtext.datamartdsl.DatamartSource;
import org.eclipse.osbp.xtext.datamartdsl.DatamartTask;
import org.eclipse.osbp.xtext.datamartdsl.jvmmodel.DatamartDSLJvmModelInferrer;
import org.eclipse.osbp.xtext.datamartdsl.util.DatamartAttributeUtil;
import org.eclipse.osbp.xtext.i18n.DSLOutputConfigurationProvider;
import org.eclipse.osbp.xtext.i18n.I18NKeyGenerator;
import org.eclipse.osbp.xtext.i18n.I18NModelGenerator;
import org.eclipse.osbp.xtext.reportdsl.AutoText;
import org.eclipse.osbp.xtext.reportdsl.AutoTextEnum;
import org.eclipse.osbp.xtext.reportdsl.DatamartTable;
import org.eclipse.osbp.xtext.reportdsl.DatamartTableAttribute;
import org.eclipse.osbp.xtext.reportdsl.DatamartTableGroup;
import org.eclipse.osbp.xtext.reportdsl.Element;
import org.eclipse.osbp.xtext.reportdsl.Grid;
import org.eclipse.osbp.xtext.reportdsl.GridCell;
import org.eclipse.osbp.xtext.reportdsl.GridRow;
import org.eclipse.osbp.xtext.reportdsl.Image;
import org.eclipse.osbp.xtext.reportdsl.Label;
import org.eclipse.osbp.xtext.reportdsl.NonTranslatableText;
import org.eclipse.osbp.xtext.reportdsl.PageDetail;
import org.eclipse.osbp.xtext.reportdsl.PageFooter;
import org.eclipse.osbp.xtext.reportdsl.PageHeader;
import org.eclipse.osbp.xtext.reportdsl.PageTemplate;
import org.eclipse.osbp.xtext.reportdsl.Report;
import org.eclipse.osbp.xtext.reportdsl.ReportDesign;
import org.eclipse.osbp.xtext.reportdsl.ReportDesignTemplate;
import org.eclipse.osbp.xtext.reportdsl.ReportModel;
import org.eclipse.osbp.xtext.reportdsl.ReportPackage;
import org.eclipse.osbp.xtext.reportdsl.StringBinder;
import org.eclipse.osbp.xtext.reportdsl.Style;
import org.eclipse.osbp.xtext.reportdsl.SubSubTitle;
import org.eclipse.osbp.xtext.reportdsl.SubTitle;
import org.eclipse.osbp.xtext.reportdsl.TableAttribute;
import org.eclipse.osbp.xtext.reportdsl.TableValueElement;
import org.eclipse.osbp.xtext.reportdsl.Text;
import org.eclipse.osbp.xtext.reportdsl.Title;
import org.eclipse.osbp.xtext.reportdsl.UnitEnum;
import org.eclipse.osbp.xtext.reportdsl.common.BaseReport;
import org.eclipse.osbp.xtext.reportdsl.common.BirtEngine;
import org.eclipse.osbp.xtext.reportdsl.common.DataTypes;
import org.eclipse.osbp.xtext.reportdsl.common.OdaConnProperties;
import org.eclipse.osbp.xtext.reportdsl.common.attribute.Attribute;
import org.eclipse.osbp.xtext.reportdsl.common.attribute.Width;
import org.eclipse.osbp.xtext.reportdsl.common.item.BaseItem;
import org.eclipse.osbp.xtext.reportdsl.common.item.BodyItem;
import org.eclipse.osbp.xtext.reportdsl.common.item.ContainerItem;
import org.eclipse.osbp.xtext.reportdsl.common.item.DataUtils;
import org.eclipse.osbp.xtext.reportdsl.common.item.GridItem;
import org.eclipse.osbp.xtext.reportdsl.common.item.ImageItem;
import org.eclipse.osbp.xtext.reportdsl.common.item.PageFooterItem;
import org.eclipse.osbp.xtext.reportdsl.common.item.PageHeaderItem;
import org.eclipse.osbp.xtext.reportdsl.jvmmodel.ReportGeneratorWorkSet;
import org.eclipse.osbp.xtext.reportdsl.jvmmodel.Utilities;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.common.types.JvmDeclaredType;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.xbase.compiler.GeneratorConfig;
import org.eclipse.xtext.xbase.compiler.ImportManager;
import org.eclipse.xtext.xbase.compiler.output.TreeAppendable;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Conversions;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.IteratorExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SuppressWarnings("all")
public class ReportModelGenerator extends I18NModelGenerator {
@Inject
@Extension
private IQualifiedNameProvider _iQualifiedNameProvider;
@Inject
@Extension
private DatamartDSLJvmModelInferrer datamartInferrer;
@Inject
@Extension
private BasicDslGeneratorUtils _basicDslGeneratorUtils;
@Inject
@Extension
private DataType dtType;
private final static Logger LOGGER = LoggerFactory.getLogger(ReportModelGenerator.class);
private static Object designEngine = null;
@Override
public void doGenerate(final Resource input, final IFileSystemAccess fsa) {
StringConcatenation _builder = new StringConcatenation();
_builder.append(BaseReport.CAPTION_I18NKEY_SAVE_PDF);
_builder.append(",");
_builder.append(BaseReport.CAPTION_I18NKEY_PRINT_PDF);
this.addTranslatables(_builder.toString());
super.doGenerate(input, fsa);
}
protected void _internalDoGenerate(final ReportModel orgModel, final IFileSystemAccess fsa) {
ReportModelGenerator.designEngine = BirtEngine.createDesignEngine();
EList<ReportPackage> _pckg = orgModel.getPckg();
for (final ReportPackage pkg : _pckg) {
EList<Report> _reports = pkg.getReports();
for (final Report report : _reports) {
try {
this.generateReportFile(pkg, report, fsa);
} catch (final Throwable _t) {
if (_t instanceof Exception) {
final Exception e = (Exception)_t;
ReportModelGenerator.LOGGER.error("{}", e);
} else {
throw Exceptions.sneakyThrow(_t);
}
}
}
}
}
private void generateReportFile(final ReportPackage pckg, final Report report, final IFileSystemAccess fsa) {
ReportDesign _design = report.getDesign();
if ((_design instanceof ReportDesignTemplate)) {
this.generateReportRoleFile(pckg, report, null, fsa);
EList<DatamartRole> _roles = report.getDatamartRef().getRoles();
for (final DatamartRole role : _roles) {
this.generateReportRoleFile(pckg, report, role, fsa);
}
}
}
private void generateReportRoleFile(final ReportPackage pckg, final Report report, final DatamartRole role, final IFileSystemAccess fsa) {
try {
ReportGeneratorWorkSet workSet = new ReportGeneratorWorkSet();
workSet.setGenerator(this);
workSet.setReport(report);
workSet.setRole(role);
workSet.setFsa(fsa);
ReportDesign _design = report.getDesign();
ReportDesignTemplate template = ((ReportDesignTemplate) _design);
String pckgName = this._iQualifiedNameProvider.getFullyQualifiedName(pckg).toString();
String pckgNamePath = pckgName.replaceAll("\\.", "/");
StringConcatenation _builder = new StringConcatenation();
String _name = report.getName();
_builder.append(_name);
{
if ((role != null)) {
String _name_1 = role.getAssignedRole().getName();
_builder.append(_name_1);
}
}
_builder.append(".rptdesign");
String filename = _builder.toString();
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append(pckgNamePath);
_builder_1.append("/");
_builder_1.append(filename);
String fullpath = _builder_1.toString();
SessionHandle session = ((IDesignEngine) ReportModelGenerator.designEngine).newSessionHandle(ULocale.forLocale(Locale.getDefault()));
workSet.setDesign(session.createDesign());
workSet.setFactory(workSet.getDesign().getElementFactory());
workSet.getDesign().setIncludeResource("i18n/I18N");
workSet.getDesign().setProperty(DesignChoiceConstants.CHOICE_UNITS, report.getDefaultUnit().getLiteral());
workSet.setRequestedMedia(report.getMedia());
BodyItem body = new BodyItem(workSet);
this.addDatamartSourceAndSet(report.getDatamartRef(), workSet, null, null);
this.generateMasterPage(report.getDatamartRef(), workSet, report.getPageTemplate(), template.getHeader(), template.getFooter());
this.generateItems(report.getDatamartRef(), workSet, body, ((Element[])Conversions.unwrapArray(template.getDetail().getElements(), Element.class)));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
workSet.getDesign().getModule().prepareToSave();
workSet.getDesign().getModule().getWriter().write(baos);
workSet.getDesign().getModule().onSave();
} catch (final Throwable _t) {
if (_t instanceof Exception) {
final Exception e = (Exception)_t;
ByteArrayOutputStream _byteArrayOutputStream = new ByteArrayOutputStream();
baos = _byteArrayOutputStream;
PrintStream _printStream = new PrintStream(baos);
e.printStackTrace(_printStream);
} else {
throw Exceptions.sneakyThrow(_t);
}
}
fsa.generateFile(fullpath, DSLOutputConfigurationProvider.DEFAULT_REPORT_OUTPUT, baos.toString());
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
private void generateMasterPage(final DatamartDefinition datamart, final ReportGeneratorWorkSet workSet, final PageTemplate pageTemplate, final PageHeader pageHeader, final PageFooter pageFooter) {
try {
PageHeader header = pageHeader;
PageFooter footer = pageFooter;
if ((header == null)) {
header = pageTemplate.getHeader();
}
if ((footer == null)) {
footer = pageTemplate.getFooter();
}
SimpleMasterPageHandle masterPage = workSet.getFactory().newSimpleMasterPage(pageTemplate.getName());
masterPage.setPageType(pageTemplate.getSize().name().toLowerCase());
masterPage.setOrientation(pageTemplate.getOrientation().name().toLowerCase());
DimensionHandle _leftMargin = masterPage.getLeftMargin();
double _leftMarginValue = pageTemplate.getLeftMarginValue();
String _literal = workSet.getReport().getDefaultUnit().getLiteral();
DimensionValue _dimensionValue = new DimensionValue(_leftMarginValue, _literal);
_leftMargin.setValue(_dimensionValue);
DimensionHandle _topMargin = masterPage.getTopMargin();
double _topMarginValue = pageTemplate.getTopMarginValue();
String _literal_1 = workSet.getReport().getDefaultUnit().getLiteral();
DimensionValue _dimensionValue_1 = new DimensionValue(_topMarginValue, _literal_1);
_topMargin.setValue(_dimensionValue_1);
DimensionHandle _bottomMargin = masterPage.getBottomMargin();
double _bottomMarginValue = pageTemplate.getBottomMarginValue();
String _literal_2 = workSet.getReport().getDefaultUnit().getLiteral();
DimensionValue _dimensionValue_2 = new DimensionValue(_bottomMarginValue, _literal_2);
_bottomMargin.setValue(_dimensionValue_2);
DimensionHandle _rightMargin = masterPage.getRightMargin();
double _rightMarginValue = pageTemplate.getRightMarginValue();
String _literal_3 = workSet.getReport().getDefaultUnit().getLiteral();
DimensionValue _dimensionValue_3 = new DimensionValue(_rightMarginValue, _literal_3);
_rightMargin.setValue(_dimensionValue_3);
if ((header != null)) {
masterPage.setShowHeaderOnFirst(header.isShowOnFirst());
DimensionHandle _headerHeight = masterPage.getHeaderHeight();
double _heightValue = header.getHeightValue();
String _literal_4 = workSet.getReport().getDefaultUnit().getLiteral();
DimensionValue _dimensionValue_4 = new DimensionValue(_heightValue, _literal_4);
_headerHeight.setValue(_dimensionValue_4);
PageHeaderItem _pageHeaderItem = new PageHeaderItem(workSet, masterPage);
this.generateItems(datamart, workSet, _pageHeaderItem, ((Element[])Conversions.unwrapArray(header.getElements(), Element.class)));
}
if ((footer != null)) {
masterPage.setShowFooterOnLast(footer.isShowOnLast());
DimensionHandle _footerHeight = masterPage.getFooterHeight();
double _heightValue_1 = footer.getHeightValue();
String _literal_5 = workSet.getReport().getDefaultUnit().getLiteral();
DimensionValue _dimensionValue_5 = new DimensionValue(_heightValue_1, _literal_5);
_footerHeight.setValue(_dimensionValue_5);
PageFooterItem _pageFooterItem = new PageFooterItem(workSet, masterPage);
this.generateItems(datamart, workSet, _pageFooterItem, ((Element[])Conversions.unwrapArray(footer.getElements(), Element.class)));
}
workSet.getDesign().getMasterPages().add(masterPage);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
private void addDatamartSourceAndSet(final DatamartDefinition datamart, final ReportGeneratorWorkSet workSet, final String alias, final DatamartAttribute[] hiddens) {
try {
String dataSourceName = Utilities.getDataSourceName(alias, datamart).toString();
ContainerSlot slot = workSet.getDesign().getModule().getSlot(IModuleModel.DATA_SOURCE_SLOT);
boolean createDataSource = true;
List<DesignElement> _contents = slot.getContents();
for (final DesignElement slotElem : _contents) {
boolean _equals = dataSourceName.equals(slotElem.getName());
if (_equals) {
createDataSource = false;
}
}
if (createDataSource) {
OdaDataSourceHandle odsourceh = workSet.getFactory().newOdaDataSource(dataSourceName, BaseReport.DATASOURCE_EXTENSION_ID);
odsourceh.getElement().setID(workSet.getDesign().getModule().getNextID());
workSet.getDesign().getModule().addElementID(odsourceh.getElement());
workSet.getDesign().getModule().add(odsourceh.getElement(), IModuleModel.DATA_SOURCE_SLOT);
String dataSetName = Utilities.getDataSetName(alias, datamart).toString();
OdaDataSetHandle odseth = workSet.getFactory().newOdaDataSet(dataSetName, BaseReport.DATASOURCE_EXTENSION_ID.concat(".dataSet"));
workSet.getDataSets().put(dataSetName, odseth);
odseth.getElement().setID(workSet.getDesign().getModule().getNextID());
odseth.setProperty(OdaConnProperties.DATAMART_BUNDLENAME, Utilities.getBundleName(datamart));
odseth.setProperty(OdaConnProperties.DATAMART_CLASSNAME, this.getDatamartClassName(alias, datamart));
odseth.setProperty(OdaConnProperties.DATAMART_DATASOURCE, odsourceh.getElement().getName());
odseth.setProperty(OdaConnProperties.DATAMART_DATASOURCENAME, dataSourceName);
odseth.setProperty(OdaConnProperties.DATAMART_DATASETNAME, dataSetName);
DatamartSource _source = datamart.getSource();
boolean _matched = false;
if (_source instanceof DatamartCube) {
_matched=true;
this.addDatamartCubeResultSet(workSet, odseth, dataSetName, datamart);
}
if (!_matched) {
if (_source instanceof DatamartEntity) {
_matched=true;
this.addDatamartEntityResultSet(workSet, odseth, dataSetName, datamart);
}
}
if (!_matched) {
if (_source instanceof DatamartTask) {
_matched=true;
ReportModelGenerator.LOGGER.error("DatamartTask ... todo");
}
}
workSet.getDesign().getModule().addElementID(odseth.getElement());
workSet.getDesign().getModule().add(odseth.getElement(), IModuleModel.DATA_SET_SLOT);
}
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
private void addDatamartCubeResultSet(final ReportGeneratorWorkSet workSet, final OdaDataSetHandle odseth, final String dataSetName, final DatamartDefinition datamart) {
try {
System.err.println("DatamartCube ... todo");
String selectColumns = "";
CachedMetaData cmd = new CachedMetaData();
ArrayList<OdaResultSetColumn> sd = new ArrayList<OdaResultSetColumn>();
StringConcatenation _builder = new StringConcatenation();
_builder.append("select ");
_builder.append(selectColumns);
_builder.append(" from ");
String _name = datamart.getName();
_builder.append(_name);
odseth.setProperty("queryText", _builder.toString());
cmd.setProperty(IDataSetModel.RESULT_SET_PROP, sd);
odseth.setProperty(IDataSetModel.CACHED_METADATA_PROP, cmd);
odseth.getElement().setProperty(IDataSetModel.RESULT_SET_PROP, sd);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
private void addAllDatamartProperties(final ReportGeneratorWorkSet workSet, final ArrayList<OdaResultSetColumn> sd, final ArrayList<ComputedColumn> cc, final EObject eObject) {
boolean _matched = false;
if (eObject instanceof DatamartEntity) {
_matched=true;
EList<DatamartNavigation> _navigations = ((DatamartEntity)eObject).getNavigations();
for (final DatamartNavigation navigation : _navigations) {
final Procedure1<EObject> _function = (EObject element) -> {
this.addAllDatamartProperties(workSet, sd, cc, element);
};
IteratorExtensions.<EObject>forEach(navigation.eAllContents(), _function);
}
boolean _isNullOrEmpty = IterableExtensions.isNullOrEmpty(((DatamartEntity)eObject).getAttributes());
if (_isNullOrEmpty) {
DatamartAttributeUtil.fillEmptyAttributes(((DatamartEntity)eObject));
}
EList<DatamartAttribute> _attributes = ((DatamartEntity)eObject).getAttributes();
for (final DatamartAttribute datamartAttribute : _attributes) {
{
LEntityAttribute attribute = datamartAttribute.getAttributeRef();
if (((((!attribute.isId()) && (!attribute.isUuid())) && (!attribute.isVersion())) && (!attribute.isTransient()))) {
boolean _isAuthorized = this.datamartInferrer.isAuthorized(workSet.getRole(), ((DatamartEntity)eObject).getEntityRef(), attribute.getName());
if (_isAuthorized) {
this.addDatamartAttribute(workSet, sd, cc, datamartAttribute);
}
}
}
}
}
}
private void addDatamartEntityResultSet(final ReportGeneratorWorkSet workSet, final OdaDataSetHandle odseth, final String dataSetName, final DatamartDefinition datamart) {
try {
String selectColumns = "";
CachedMetaData cmd = new CachedMetaData();
ArrayList<OdaResultSetColumn> sd = new ArrayList<OdaResultSetColumn>();
ArrayList<ComputedColumn> cc = new ArrayList<ComputedColumn>();
workSet.setPosition(0);
this.addAllDatamartProperties(workSet, sd, cc, datamart.getSource());
workSet.putResultSetColumns(dataSetName, sd);
workSet.putComputedColumns(dataSetName, cc);
for (final ComputedColumn cc1 : cc) {
boolean _isEmpty = selectColumns.isEmpty();
if (_isEmpty) {
selectColumns = cc1.getName();
} else {
selectColumns = selectColumns.concat(",").concat(cc1.getName());
}
}
StringConcatenation _builder = new StringConcatenation();
_builder.append("select ");
_builder.append(selectColumns);
_builder.append(" from ");
String _name = datamart.getName();
_builder.append(_name);
odseth.setProperty("queryText", _builder.toString());
cmd.setProperty(IDataSetModel.RESULT_SET_PROP, sd);
odseth.setProperty(IDataSetModel.CACHED_METADATA_PROP, cmd);
odseth.getElement().setProperty(IDataSetModel.RESULT_SET_PROP, sd);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
private void addDatamartAttribute(final ReportGeneratorWorkSet workSet, final ArrayList<OdaResultSetColumn> sd, final ArrayList<ComputedColumn> cc, final DatamartAttribute datamartAttribute) {
LEntityAttribute attribute = datamartAttribute.getAttributeRef();
IDataMart.EType etype = this.dtType.getBasicType(attribute);
DataTypes dataType = DataTypes.typeFor(etype);
boolean _equals = Objects.equal(dataType, DataTypes.ANY);
if (_equals) {
dataType = DataTypes.typeFor(attribute.getType());
}
String name = DatamartAttributeUtil.getAliasedAttributeName(datamartAttribute);
for (final OdaResultSetColumn column : sd) {
boolean _equalsIgnoreCase = column.getColumnName().equalsIgnoreCase(name);
if (_equalsIgnoreCase) {
return;
}
}
OdaResultSetColumn st = new OdaResultSetColumn();
st.setColumnName(name);
st.setProperty("name", name);
st.setNativeDataType(Integer.valueOf(dataType.getNativeOdaDataTypeId()));
st.setNativeName(name);
int _position = workSet.getPosition();
int _plus = (_position + 1);
workSet.setPosition(_plus);
st.setPosition(Integer.valueOf(workSet.getPosition()));
st.setDataType(dataType.getNativeOdaDataTypeName());
sd.add(st);
ComputedColumn cs1 = StructureFactory.createComputedColumn();
cs1.setName(name);
cs1.setDisplayName(name);
cs1.setExpression("dataSetRow[\"".concat(name).concat("\"]"));
cs1.setDataType(dataType.getNativeOdaDataTypeName());
this.setProperties(cs1, attribute);
cc.add(cs1);
}
private void setProperties(final ComputedColumn column, final LEntityAttribute attribute) {
LDataType lDataType = this.dtType.getLDataType(attribute);
if ((lDataType != null)) {
EList<LKeyAndValue> _properties = lDataType.getProperties();
for (final LKeyAndValue prop : _properties) {
column.setProperty(prop.getKey(), prop.getValue());
}
}
}
private CharSequence getDatamartClassName(final String alias, final DatamartDefinition datamart) {
StringConcatenation _builder = new StringConcatenation();
EObject _eContainer = datamart.eContainer();
QualifiedName _fullyQualifiedName = this._iQualifiedNameProvider.getFullyQualifiedName(((LPackage) _eContainer));
_builder.append(_fullyQualifiedName);
_builder.append(".");
String _name = datamart.getName();
_builder.append(_name);
_builder.append("Class");
return _builder;
}
public void generateItems(final DatamartDefinition datamart, final ReportGeneratorWorkSet workSet, final ContainerItem container, final Element[] elements) {
if ((elements != null)) {
for (final Element element : elements) {
try {
boolean _matched = false;
if (element instanceof Title) {
_matched=true;
container.addHeader(1, I18NKeyGenerator.key(((Title)element).getText()), ((Title)element).getText().replace("\"", ""), ((Title)element).getStyle());
}
if (!_matched) {
if (element instanceof SubTitle) {
_matched=true;
container.addHeader(2, I18NKeyGenerator.key(((SubTitle)element).getText()), ((SubTitle)element).getText().replace("\"", ""), ((SubTitle)element).getStyle());
}
}
if (!_matched) {
if (element instanceof SubSubTitle) {
_matched=true;
container.addHeader(3, I18NKeyGenerator.key(((SubSubTitle)element).getText()), ((SubSubTitle)element).getText().replace("\"", ""), ((SubSubTitle)element).getStyle());
}
}
if (!_matched) {
if (element instanceof Label) {
_matched=true;
container.addLabel(I18NKeyGenerator.key(((Label)element).getText()), ((Label)element).getText().replace("\"", ""), ((Label)element).getStyle());
}
}
if (!_matched) {
if (element instanceof Text) {
_matched=true;
boolean _equals = ((Text)element).getTextContentType().getLiteral().equals(BaseItem.CONTENT_TYPE_HTML);
if (_equals) {
container.addText(I18NKeyGenerator.key(((Text)element).getText()), ((Text)element).getText(), ((Text)element).getStyle(), BaseItem.CONTENT_TYPE_HTML);
} else {
container.addText(I18NKeyGenerator.key(((Text)element).getText()), ((Text)element).getText().replace("\"", ""), ((Text)element).getStyle());
}
}
}
if (!_matched) {
if (element instanceof NonTranslatableText) {
_matched=true;
container.addText(((NonTranslatableText)element).getValue().replace("\"", ""), null);
}
}
if (!_matched) {
if (element instanceof AutoText) {
_matched=true;
if ((((AutoText)element).getType().equals(AutoTextEnum.ACTUAL_DATE) || ((AutoText)element).getType().equals(AutoTextEnum.ACTUAL_TIME))) {
container.addTextData(((AutoText)element).getType(), ((AutoText)element).getStyle());
} else {
boolean _equals = ((AutoText)element).getType().equals(AutoTextEnum.REPORT_NAME);
if (_equals) {
String text = workSet.getReport().getName();
container.addLabel(text, text.replace("\"", ""), ((AutoText)element).getStyle());
} else {
container.addAutoText(((AutoText)element).getType().toString(), ((AutoText)element).getStyle());
}
}
}
}
if (!_matched) {
if (element instanceof StringBinder) {
_matched=true;
container.addTextData(datamart, ((StringBinder) element), ((StringBinder)element).getStyle());
}
}
if (!_matched) {
if (element instanceof DatamartTableAttribute) {
_matched=true;
EObject eObj = ((DatamartTableAttribute)element).eContainer();
while (((((eObj != null) &&
(!(eObj instanceof PageHeader))) &&
(!(eObj instanceof PageFooter))) &&
(!(eObj instanceof PageDetail)))) {
eObj = eObj.eContainer();
}
if (((eObj instanceof PageHeader) || (eObj instanceof PageFooter))) {
TableValueElement _column = ((DatamartTableAttribute) element).getColumn();
if ((_column instanceof TableAttribute)) {
TableValueElement _column_1 = ((DatamartTableAttribute) element).getColumn();
IDataMart.EType _basicType = this.dtType.getBasicType(((TableAttribute) _column_1).getValueRef().getAttributeRef());
boolean _equals = Objects.equal(_basicType, IDataMart.EType.BLOPMAPPING);
if (_equals) {
container.addDataImage(((DatamartTableAttribute)element), ((DatamartTableAttribute)element).getStyle());
} else {
TableValueElement _column_2 = ((DatamartTableAttribute) element).getColumn();
DatamartAttribute datamartAttribute = ((TableAttribute) _column_2).getValueRef();
ArrayList<DatamartAttribute> datamartAttributes = CollectionLiterals.<DatamartAttribute>newArrayList(datamartAttribute);
container.addTextData(datamart, datamartAttributes, ((DatamartTableAttribute)element).getStyle());
}
}
} else {
if ((element instanceof DatamartTableAttribute)) {
if (((((DatamartTableAttribute) element).getColumn() instanceof TableAttribute) &&
Objects.equal(this.dtType.getBasicType(((TableAttribute) ((DatamartTableAttribute) element).getColumn()).getValueRef().getAttributeRef()), IDataMart.EType.BLOPMAPPING))) {
container.addDataImage(((DatamartTableAttribute)element), ((DatamartTableAttribute)element).getStyle());
} else {
EObject _eContainer = ((DatamartTableAttribute)element).eContainer();
if ((_eContainer instanceof GridCell)) {
container.addData(((DatamartTableAttribute)element), ((DatamartTableAttribute)element).getStyle());
} else {
Object datamartAlias = null;
ArrayList<DatamartAttribute> hiddens = new ArrayList<DatamartAttribute>();
String dataSetName = Utilities.getDataSetName(((String)datamartAlias), datamart).toString();
OdaDataSetHandle dataSet = workSet.getDataSets().get(dataSetName);
if ((dataSet == null)) {
final ArrayList<DatamartAttribute> _converted_hiddens = (ArrayList<DatamartAttribute>)hiddens;
this.addDatamartSourceAndSet(datamart, workSet, ((String)datamartAlias), ((DatamartAttribute[])Conversions.unwrapArray(_converted_hiddens, DatamartAttribute.class)));
dataSet = workSet.getDataSets().get(dataSetName);
}
container.addData(((DatamartTableAttribute)element), dataSet, dataSetName, ((DatamartTableAttribute)element).getStyle());
}
}
}
}
}
}
if (!_matched) {
if (element instanceof Image) {
_matched=true;
this.addImage(workSet, container, ((Image)element), null);
}
}
if (!_matched) {
if (element instanceof DatamartTable) {
_matched=true;
Width _width = new Width("100%");
this.addDatamartTable(datamart, workSet, container, ((DatamartTable)element), _width);
}
}
if (!_matched) {
if (element instanceof Grid) {
_matched=true;
this.addGrid(datamart, workSet, container, ((Grid)element), ((Grid)element).getStyle());
}
}
} catch (final Throwable _t) {
if (_t instanceof ContentException) {
final ContentException ce = (ContentException)_t;
ReportModelGenerator.LOGGER.error("{}", ce);
} else if (_t instanceof Exception) {
final Exception e = (Exception)_t;
ReportModelGenerator.LOGGER.error("{}", e);
} else {
throw Exceptions.sneakyThrow(_t);
}
}
}
}
}
private void addDatamartTable(final DatamartDefinition datamart, final ReportGeneratorWorkSet workSet, final ContainerItem container, final DatamartTable datamartTable, final Attribute... attributes) {
try {
DatamartDefinition newDatamart = datamart;
DatamartDefinition _datamartRef = datamartTable.getDatamartRef();
boolean _tripleNotEquals = (_datamartRef != null);
if (_tripleNotEquals) {
newDatamart = datamartTable.getDatamartRef();
}
ArrayList<DatamartAttribute> hiddens = new ArrayList<DatamartAttribute>();
String alias = datamartTable.getName();
String dataSetName = Utilities.getDataSetName(alias, newDatamart).toString();
OdaDataSetHandle dataSet = workSet.getDataSets().get(dataSetName);
if ((dataSet == null)) {
final ArrayList<DatamartAttribute> _converted_hiddens = (ArrayList<DatamartAttribute>)hiddens;
this.addDatamartSourceAndSet(newDatamart, workSet, alias, ((DatamartAttribute[])Conversions.unwrapArray(_converted_hiddens, DatamartAttribute.class)));
dataSet = workSet.getDataSets().get(dataSetName);
}
container.addTable(newDatamart, dataSet, datamartTable, workSet.getComputedColumns(dataSetName), ((DatamartTableGroup[])Conversions.unwrapArray(datamartTable.getGroups(), DatamartTableGroup.class)), datamartTable.getDetail().getStyle(), ((DatamartTableAttribute[])Conversions.unwrapArray(datamartTable.getDetail().getColumnFormatters(), DatamartTableAttribute.class)), datamartTable.getStyle(), attributes);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
private void addImage(final ReportGeneratorWorkSet workSet, final ContainerItem container, final Image imageData, final Style style, final Attribute... attributes) {
String _literal = imageData.getSize().getLiteral();
double _scale = imageData.getScale();
double _heightValue = imageData.getHeightValue();
UnitEnum _heightUnit = imageData.getHeightUnit();
double _widthValue = imageData.getWidthValue();
UnitEnum _widthUnit = imageData.getWidthUnit();
String _literal_1 = imageData.getSourceType().getLiteral();
String _filename = imageData.getFilename();
ImageItem image = new ImageItem(workSet,
null, _literal, _scale, _heightValue, _heightUnit, _widthValue, _widthUnit, _literal_1, _filename);
container.add(image, style, attributes);
}
private void addGrid(final DatamartDefinition datamart, final ReportGeneratorWorkSet workSet, final ContainerItem container, final Grid grid, final Style style, final Attribute... attributes) {
try {
Object datamartAlias = null;
ArrayList<DatamartAttribute> hiddens = new ArrayList<DatamartAttribute>();
String dataSetName = Utilities.getDataSetName(((String)datamartAlias), datamart).toString();
OdaDataSetHandle dataSet = workSet.getDataSets().get(dataSetName);
if ((dataSet == null)) {
final ArrayList<DatamartAttribute> _converted_hiddens = (ArrayList<DatamartAttribute>)hiddens;
this.addDatamartSourceAndSet(datamart, workSet, ((String)datamartAlias), ((DatamartAttribute[])Conversions.unwrapArray(_converted_hiddens, DatamartAttribute.class)));
dataSet = workSet.getDataSets().get(dataSetName);
}
List<ComputedColumn> _computedColumns = workSet.getComputedColumns(dataSetName);
final GridItem gridItem = new GridItem(workSet, dataSet, _computedColumns, grid);
List<Attribute> attributeList = CollectionLiterals.<Attribute>newArrayList();
for (final Attribute attribute : attributes) {
attributeList.add(attribute);
}
String propValue = "";
double _widthValue = grid.getWidthValue();
boolean _tripleNotEquals = (_widthValue != 0);
if (_tripleNotEquals) {
propValue = workSet.getLocalizedDoubleValue(gridItem.getHandle(), grid.getWidthValue());
} else {
propValue = "100%";
}
Width _width = new Width(propValue);
attributeList.add(_width);
Attribute[] newAttributes = attributeList.<Attribute>toArray(new Attribute[attributeList.size()]);
if (((grid.getVisibilityItem() != null) && grid.getVisibilityItem().isVisibility())) {
DataUtils.addVisibility(gridItem.getHandle(), grid.getVisibilityItem().getVisibilityAttribute());
}
int rowNo = 0;
HashMap<Integer, Double> maxCellWidthMap = CollectionLiterals.<Integer, Double>newHashMap();
EList<GridRow> _rows = grid.getRows();
for (final GridRow row : _rows) {
{
ReportItemHandle _handle = gridItem.getHandle();
DesignElementHandle _get = ((GridHandle) _handle).getRows().get(rowNo);
RowHandle rowHandle = ((RowHandle) _get);
if (((row.getVisibilityItem() != null) && row.getVisibilityItem().isVisibility())) {
DataUtils.addVisibility(rowHandle, row.getVisibilityItem().getVisibilityAttribute());
}
int columnNo = 0;
EList<GridCell> _cells = row.getCells();
for (final GridCell cell : _cells) {
{
double _widthValue_1 = cell.getWidthValue();
boolean _notEquals = (_widthValue_1 != 0);
if (_notEquals) {
DesignElementHandle cellHandle = rowHandle.getCells().get(columnNo);
StringConcatenation _builder = new StringConcatenation();
String _localizedDoubleValue = workSet.getLocalizedDoubleValue(gridItem.getHandle(), cell.getWidthValue());
_builder.append(_localizedDoubleValue);
cellHandle.setStringProperty(CssPropertyConstants.WIDTH, _builder.toString());
if (((maxCellWidthMap.isEmpty() || (maxCellWidthMap.get(Integer.valueOf(columnNo)) == null)) || ((maxCellWidthMap.get(Integer.valueOf(columnNo))).doubleValue() < cell.getWidthValue()))) {
maxCellWidthMap.put(Integer.valueOf(columnNo), Double.valueOf(cell.getWidthValue()));
}
}
Style _style = cell.getStyle();
boolean _tripleNotEquals_1 = (_style != null);
if (_tripleNotEquals_1) {
gridItem.applyCellStyle(rowHandle, columnNo, cell.getStyle());
}
if (((cell.getVisibilityItem() != null) && cell.getVisibilityItem().isVisibility())) {
DesignElementHandle cellHandle_1 = rowHandle.getCells().get(columnNo);
DataUtils.addVisibility(cellHandle_1, cell.getVisibilityItem().getVisibilityAttribute());
}
this.generateItems(datamart, workSet, gridItem.getCell(columnNo, rowNo).setColumnSpan(cell.getColumnspan()), ((Element[])Conversions.unwrapArray(cell.getElements(), Element.class)));
columnNo = (columnNo + 1);
}
}
Style _style = row.getStyle();
boolean _tripleNotEquals_1 = (_style != null);
if (_tripleNotEquals_1) {
gridItem.applyRowStyle(rowNo, row.getStyle());
}
double _heightValue = row.getHeightValue();
boolean _tripleNotEquals_2 = (_heightValue != 0);
if (_tripleNotEquals_2) {
gridItem.setRowHeight(rowNo, row.getHeightValue());
}
rowNo = (rowNo + 1);
}
}
final BiConsumer<Integer, Double> _function = (Integer columnIdx, Double columnWidth) -> {
try {
if (((columnWidth).doubleValue() != 0.0)) {
ReportItemHandle _handle = gridItem.getHandle();
DesignElementHandle _get = ((GridHandle) _handle).getColumns().get((columnIdx).intValue());
StringConcatenation _builder = new StringConcatenation();
String _localizedDoubleValue = workSet.getLocalizedDoubleValue(gridItem.getHandle(), (columnWidth).doubleValue());
_builder.append(_localizedDoubleValue);
((ColumnHandle) _get).setStringProperty(CssPropertyConstants.WIDTH, _builder.toString());
}
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
};
maxCellWidthMap.forEach(_function);
container.add(gridItem, style, newAttributes);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Override
public TreeAppendable createAppendable(final EObject context, final ImportManager importManager, final GeneratorConfig config) {
TreeAppendable _xblockexpression = null;
{
this.setBuilder(context.eResource());
this._basicDslGeneratorUtils.addImportFor(this, importManager, this._typeReferenceBuilder, ReportGeneratorWorkSet.class, HorizontalLayout.class, ViewLayoutManager.class, BrowserFrame.class, StreamResource.class, Sizeable.Unit.class, Button.class, com.vaadin.ui.Label.class, IEventBroker.class, EventHandler.class, Event.class, EventUtils.class, EventBrokerMsg.class, CustomMsgException.class, IReportProvider.Rendering.class, AbstractComponent.class, UUID.class, Container.Filter.class, IToolbarAction.class, HashMap.class);
_xblockexpression = super.createAppendable(context, importManager, config);
}
return _xblockexpression;
}
public void internalDoGenerate(final EObject orgModel, final IFileSystemAccess fsa) {
if (orgModel instanceof JvmDeclaredType) {
_internalDoGenerate((JvmDeclaredType)orgModel, fsa);
return;
} else if (orgModel instanceof ReportModel) {
_internalDoGenerate((ReportModel)orgModel, fsa);
return;
} else if (orgModel != null) {
_internalDoGenerate(orgModel, fsa);
return;
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(orgModel, fsa).toString());
}
}
}