/*
* 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 ro.nextreports.designer.template.report;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.io.InputStreamReader;
import java.util.List;
import java.awt.*;
import ro.nextreports.engine.ReportLayout;
import ro.nextreports.engine.XStreamFactory;
import ro.nextreports.engine.ReleaseInfoAdapter;
import ro.nextreports.engine.template.ReportTemplate;
import ro.nextreports.engine.band.BandElement;
import ro.nextreports.engine.band.Band;
import ro.nextreports.engine.band.Padding;
import ro.nextreports.engine.band.Border;
import ro.nextreports.engine.band.RowElement;
import ro.nextreports.engine.util.xstream.FontConverter;
import com.thoughtworks.xstream.XStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import ro.nextreports.designer.Globals;
import ro.nextreports.designer.LayoutHelper;
import javax.swing.*;
/**
* Created by IntelliJ IDEA.
* User: mihai.panaitescu
* Date: Jan 22, 2007
* Time: 5:48:32 PM
*/
public class TemplateManager {
private static final Log LOG = LogFactory.getLog(TemplateManager.class);
public static void saveTemplate(ReportTemplate template, String path) throws Exception {
XStream xstream = XStreamFactory.createTemplateXStream();
xstream.registerConverter(new FontConverter());
Writer writer = new FileWriter(path);
xstream.toXML(template, writer);
writer.close();
}
public static ReportTemplate getTemplate(ReportLayout layout) {
ReportTemplate template = new ReportTemplate();
BandElement title = layout.getHeaderBand().getElements().get(0).getElements().get(0);
template.setTitleBand(title);
BandElement header = layout.getDetailBand().getRow(0).get(0);
template.setHeaderBand(header);
BandElement detail = layout.getDetailBand().getRow(1).get(0);
template.setDetailBand(detail);
BandElement footer = layout.getFooterBand().getRow(0).get(0);
template.setFooterBand(footer);
return template;
}
public static ReportTemplate loadTemplate(File file) {
if (file == null) {
return null;
}
// System.out.println("***path="+file.getAbsolutePath());
FileInputStream fis = null;
InputStreamReader reader = null;
try {
XStream xstream = XStreamFactory.createTemplateXStream();
fis = new FileInputStream(file);
reader = new InputStreamReader(fis, "UTF-8");
return (ReportTemplate) xstream.fromXML(reader);
} catch (Exception e1) {
LOG.error(e1.getMessage(), e1);
e1.printStackTrace();
return null;
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e1) {
LOG.error(e1.getMessage(), e1);
e1.printStackTrace();
}
}
}
}
public static void restoreBandElement(BandElement current, BandElement from) {
if (current == null) {
return;
}
current.setBackground(from.getBackground());
current.setBorder(from.getBorder());
current.setFont(from.getFont());
current.setForeground(from.getForeground());
current.setHorizontalAlign(from.getHorizontalAlign());
current.setVerticalAlign(from.getVerticalAlign());
current.setPadding(from.getPadding());
}
// try to apply a basic template on any report
public static void applyGeneralTemplate(ReportLayout layout, ReportTemplate template) {
boolean dirty =false;
Band headerBand = layout.getHeaderBand();
if (headerBand != null) {
List<RowElement> headerRows = headerBand.getElements();
// title
if (headerRows.size() > 0) {
RowElement titleElements = headerRows.get(0);
for (BandElement titleElement : titleElements.getElements()) {
dirty=true;
TemplateManager.restoreBandElement(titleElement, template.getTitleBand());
}
}
// header
if (headerRows.size() > 1) {
RowElement headerElems = headerRows.get(1);
for (BandElement headerElem : headerElems.getElements()) {
dirty=true;
TemplateManager.restoreBandElement(headerElem, template.getHeaderBand());
}
}
}
// detail
Band detailBand = layout.getDetailBand();
if (detailBand != null) {
List<RowElement> detailRows = detailBand.getElements();
if (detailRows.size() > 0) {
List<BandElement> detailElems = detailBand.getRow(0);
for (BandElement detailElem : detailElems) {
dirty=true;
TemplateManager.restoreBandElement(detailElem, template.getDetailBand());
}
}
}
// footer
Band footerBand = layout.getFooterBand();
if (footerBand != null) {
List<RowElement> footerRows = footerBand.getElements();
if (footerRows.size() > 0) {
List<BandElement> footerElems = footerBand.getRow(0);
for (BandElement footerElem : footerElems) {
dirty=true;
TemplateManager.restoreBandElement(footerElem, template.getFooterBand());
}
}
}
if (dirty) {
Globals.getMainFrame().getQueryBuilderPanel().loadReport(LayoutHelper.getReportLayout());
}
}
public static ReportTemplate createDefaultReportTemplate() {
ReportTemplate template = new ReportTemplate();
template.setVersion(ReleaseInfoAdapter.getVersionNumber());
BandElement title = new BandElement("Title");
title.setBackground(Color.WHITE);
title.setForeground(Color.BLACK);
Font font = (Font) UIManager.getDefaults().get("Panel.font");
title.setFont(font);
title.setPadding(new Padding(0, 0, 0, 0));
Border border = new Border();
border.setLeftColor(Color.BLACK);
border.setRightColor(Color.BLACK);
border.setTopColor(Color.BLACK);
border.setBottomColor(Color.BLACK);
title.setBorder(border);
template.setTitleBand(title);
BandElement header = new BandElement("Header");
TemplateManager.restoreBandElement(header, title);
template.setHeaderBand(header);
BandElement detail = new BandElement("Detail");
TemplateManager.restoreBandElement(detail, title);
template.setDetailBand(detail);
BandElement footer = new BandElement("Footer");
TemplateManager.restoreBandElement(footer, title);
template.setFooterBand(footer);
return template;
}
public static ReportTemplate getGeneralTemplate(ReportLayout layout) {
ReportTemplate template = createDefaultReportTemplate();
Band headerBand = layout.getHeaderBand();
if (headerBand != null) {
List<RowElement> headerRows = headerBand.getElements();
// title
if (headerRows.size() > 0) {
RowElement titleElements = headerRows.get(0);
if (titleElements != null) {
for (BandElement titleElem : titleElements.getElements()) {
if (titleElem != null) {
template.setTitleBand(titleElem);
break;
}
}
}
}
// header
if (headerRows.size() > 1) {
RowElement headerElems = headerRows.get(1);
if (headerElems != null) {
for (BandElement headerElem : headerElems.getElements()) {
if (headerElem != null) {
template.setHeaderBand(headerElem);
}
}
}
}
}
// detail
Band detailBand = layout.getDetailBand();
if (detailBand != null) {
List<RowElement> detailRows = detailBand.getElements();
if (detailRows.size() > 0) {
List<BandElement> detailElems = detailBand.getRow(0);
if (detailElems != null) {
for (BandElement detailElem : detailElems) {
if (detailElem != null) {
template.setDetailBand(detailElem);
break;
}
}
}
}
}
// footer
Band footerBand = layout.getFooterBand();
if (footerBand != null) {
List<RowElement> footerRows = footerBand.getElements();
if (footerRows.size() > 0) {
List<BandElement> footerElems = footerBand.getRow(0);
if (footerElems != null) {
for (BandElement footerElem : footerElems) {
if (footerElem != null) {
template.setFooterBand(footerElem);
break;
}
}
}
}
}
return template;
}
public static void main(String[] args) {
ReportTemplate template = loadTemplate(new File("E:\\Public\\next-reports\\templates\\Caribbean.ntempl"));
System.out.println(template);
}
}