blob: f72870f08a22cd5fc78add6c4f5e450be5f4e6c1 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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
*
* 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.sun.star.wizards.reportbuilder.layout;
import com.sun.star.beans.PropertyValue;
// import com.sun.star.container.NoSuchElementException;
// import com.sun.star.lang.IndexOutOfBoundsException;
// import com.sun.star.lang.WrappedTargetException;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.report.XFixedText;
import com.sun.star.report.XFormattedField;
import com.sun.star.report.XGroup;
import com.sun.star.report.XGroups;
import com.sun.star.report.XReportDefinition;
import com.sun.star.report.XSection;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.wizards.common.Properties;
import com.sun.star.wizards.common.PropertyNames;
/**
*
* @author ll93751
*/
public class DesignTemplate
{
private XReportDefinition m_xReportDefinition;
XMultiServiceFactory m_xGlobalMSF;
String m_sFilename;
private DesignTemplate()
{
}
// -------------------------------------------------------------------------
// All functions from XReportDefinition, we use
// -------------------------------------------------------------------------
XGroups getGroups()
{
return m_xReportDefinition.getGroups();
}
XSection getDetail()
{
return m_xReportDefinition.getDetail();
}
boolean getReportHeaderOn()
{
return m_xReportDefinition.getReportHeaderOn();
}
XSection getReportHeader() throws com.sun.star.container.NoSuchElementException
{
return m_xReportDefinition.getReportHeader();
}
boolean getReportFooterOn()
{
return m_xReportDefinition.getReportFooterOn();
}
XSection getReportFooter() throws com.sun.star.container.NoSuchElementException
{
return m_xReportDefinition.getReportFooter();
}
boolean getPageHeaderOn()
{
return m_xReportDefinition.getPageHeaderOn();
}
XSection getPageHeader() throws com.sun.star.container.NoSuchElementException
{
return m_xReportDefinition.getPageHeader();
}
boolean getPageFooterOn()
{
return m_xReportDefinition.getPageFooterOn();
}
XSection getPageFooter() throws com.sun.star.container.NoSuchElementException
{
return m_xReportDefinition.getPageFooter();
} // -------------------------------------------------------------------------
private SectionObject m_aDetailLabel;
private SectionObject m_aDetailTextField;
private SectionObject[] m_aGroupLabel;
private SectionObject[] m_aGroupTextField;
SectionObject getDetailLabel()
{
if (m_aDetailLabel == null)
{
return SectionEmptyObject.create();
}
return m_aDetailLabel;
}
SectionObject getDetailTextField()
{
if (m_aDetailTextField == null)
{
return SectionEmptyObject.create();
}
return m_aDetailTextField;
}
SectionObject getGroupTextField(int _nGroup)
{
return getGroupSectionObject(m_aGroupTextField, _nGroup);
}
SectionObject getGroupLabel(int _nGroup)
{
return getGroupSectionObject(m_aGroupLabel, _nGroup);
}
private SectionObject getGroupSectionObject(SectionObject _aGroupList[], int _nGroup)
{
SectionObject a = null;
if (_nGroup < _aGroupList.length)
{
a = _aGroupList[_nGroup];
}
else
{
// if there are not enough groups, the last one will win
if (_aGroupList.length > 0)
{
a = _aGroupList[_aGroupList.length - 1];
}
}
// we show if the group is null
if (a == null)
{
a = SectionEmptyObject.create();
// a empty group has to use bold font
a.setPropertyValue("CharWeight", new Float(com.sun.star.awt.FontWeight.BOLD));
}
return a;
}
// we analyse the loaded ReportDefinition, we want to know the FontDescriptor of all XSections
private void analyseReportDefinition()
{
final XSection xDetailSection = m_xReportDefinition.getDetail();
final int nDetailCount = xDetailSection.getCount();
for (int i = 0; i < nDetailCount; i++)
{
try
{
Object aObj = xDetailSection.getByIndex(i);
// is aObj a label
// is aObj a textfield
// m_aDetailLabel_FD
// m_aDetailTextField_FD
XFixedText aFixedText = UnoRuntime.queryInterface(XFixedText.class, aObj);
if (aFixedText != null &&
m_aDetailLabel == null)
{
m_aDetailLabel = SectionLabel.create(aFixedText);
}
else
{
XFormattedField aFormattedField = UnoRuntime.queryInterface(XFormattedField.class, aObj);
if (aFormattedField != null &&
m_aDetailTextField == null)
{
m_aDetailTextField = SectionTextField.create(aFormattedField);
}
}
int dummy = 0;
}
catch (com.sun.star.lang.IndexOutOfBoundsException ex)
{
}
catch (com.sun.star.lang.WrappedTargetException ex)
{
}
}
final XGroups xGroups = m_xReportDefinition.getGroups();
final int nGroupCount = xGroups.getCount();
// create a m_aGroupLabel_FD[]
// create a m_aGroupTextField_FD[]
m_aGroupLabel = new SectionObject[nGroupCount];
m_aGroupTextField = new SectionObject[nGroupCount];
for (int nGroup = 0; nGroup < nGroupCount; nGroup++)
{
try
{
Object aGroup = xGroups.getByIndex(nGroup);
XGroup xGroup = UnoRuntime.queryInterface(XGroup.class, aGroup);
XSection xGroupSection = xGroup.getHeader();
final int nCount = xGroupSection.getCount();
for (int i = 0; i < nCount; i++)
{
try
{
Object aObj = xGroupSection.getByIndex(i);
XFixedText aFixedText = UnoRuntime.queryInterface(XFixedText.class, aObj);
// is aObj a label
// is aObj a textfield
if (aFixedText != null &&
m_aGroupLabel[nGroup] == null)
{
m_aGroupLabel[nGroup] = SectionLabel.create(aFixedText);
}
else
{
XFormattedField aFormattedField = UnoRuntime.queryInterface(XFormattedField.class, aObj);
if (aFormattedField != null &&
m_aGroupTextField[nGroup] == null)
{
m_aGroupTextField[nGroup] = SectionTextField.create(aFormattedField);
}
}
int dummy = 0;
}
catch (com.sun.star.lang.IndexOutOfBoundsException ex)
{
}
catch (com.sun.star.lang.WrappedTargetException ex)
{
}
}
}
catch (com.sun.star.container.NoSuchElementException ex)
{
}
catch (com.sun.star.lang.IndexOutOfBoundsException ex)
{
}
catch (com.sun.star.lang.WrappedTargetException ex)
{
}
}
}
/**
* close our current ReportDefinition
*/
void close()
{
try
{
m_xReportDefinition.close(true);
}
catch (com.sun.star.util.CloseVetoException e)
{
}
}
/**
* create a new DesignTemplate by try to load a otr file from the given path.
* Internally we store the loaded ReportDefinition.
*
* @param _xMSF
* @param _sPath
* @return
*/
public static DesignTemplate create(XMultiServiceFactory _xMSF, String _sPath)
{
DesignTemplate a = new DesignTemplate();
try
{
a.load(_xMSF, _sPath);
}
catch (com.sun.star.lang.WrappedTargetRuntimeException e)
{
// this should not happen
a = null;
throw new java.lang.RuntimeException(e.getMessage());
}
catch (com.sun.star.uno.Exception e)
{
a = null;
}
catch (Exception e)
{
a = null;
}
return a;
}
private void load(XMultiServiceFactory _xMSF, String _sPath) throws com.sun.star.uno.Exception
{
m_xGlobalMSF = _xMSF;
m_sFilename = _sPath;
final Object aObj = _xMSF.createInstance("com.sun.star.report.ReportDefinition");
m_xReportDefinition = UnoRuntime.queryInterface(XReportDefinition.class, aObj);
PropertyValue[] aLoadProps = new PropertyValue[2];
aLoadProps[0] = Properties.createProperty(PropertyNames.URL, _sPath);
aLoadProps[1] = Properties.createProperty(PropertyNames.READ_ONLY, Boolean.TRUE);
m_xReportDefinition.load(aLoadProps);
analyseReportDefinition();
}
public XReportDefinition getReportDefinition()
{
return m_xReportDefinition;
}
}