blob: 433011fe72149a37e94f6f26dbeaa4e4a1dfd2a8 [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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*/
package org.eclipse.osbp.xtext.reportdsl.common;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import com.vaadin.data.Container.Filter;
import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelFactory;
import org.eclipse.osbp.ecview.core.extension.model.extension.YBrowserStreamInput;
import com.vaadin.server.StreamResource;
public abstract class AbstractReportBean {
private Filter filter;
public final void setFilter(Filter filter) {
firePropertyChange("query", this.filter, this.filter = filter);
}
@Deprecated
public final Filter getFilter() {
return filter;
}
private Object dto;
public final void setDto(Object dto) {
firePropertyChange("dto", this.dto, this.dto = dto);
}
@Deprecated
public Object getDto() {
return dto;
}
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
this);
private BaseReport report = null;
private YBrowserStreamInput inputStream;
/**
* @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
*/
public final void addPropertyChangeListener(
final PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
/**
* @see PropertyChangeSupport#addPropertyChangeListener(String,
* PropertyChangeListener)
*/
public final void addPropertyChangeListener(final String propertyName,
final PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
/**
* @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
*/
public final void removePropertyChangeListener(
final PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
/**
* @see PropertyChangeSupport#removePropertyChangeListener(String,
* PropertyChangeListener)
*/
public final void removePropertyChangeListener(final String propertyName,
final PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyName,
listener);
}
/**
* @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
*/
public final void firePropertyChange(final String propertyName,
final Object oldValue, final Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue,
newValue);
}
public final void setTrigger(long timestamp) {
setInputStream(generateInputStreamForReport());
}
public final long getTrigger() {
return 0;
}
public final void setInputStream(YBrowserStreamInput inputStream) {
firePropertyChange("inputStream", this.inputStream,
this.inputStream = inputStream);
}
public final YBrowserStreamInput getInputStream() {
return inputStream;
}
protected abstract BaseReport createReport();
protected final YBrowserStreamInput generateInputStreamForReport() {
// YBrowserStreamInput stream = new YBrowserStreamInput();
YBrowserStreamInput stream = ExtensionModelFactory.eINSTANCE
.createYBrowserStreamInput();
if (report == null) {
report = createReport();
}
if (dto != null) {
report.applyBeanDto(dto);
}
else if (filter != null) {
report.applyBeanFilter(filter);
}
else {
report.resetBean();
}
StreamResource streamResource = report.getReportStreamResource();
String filename = report.getClass().getSimpleName() + "-error.html";
InputStream inputStream;
String mimeType;
if (streamResource == null) {
inputStream = new ByteArrayInputStream(("<html><body><h1>"
+ filename + "</h1>error</body></html>").getBytes());
mimeType = "application/xhtml+xml";
} else {
filename = streamResource.getFilename();
inputStream = report.getStream();
mimeType = streamResource.getMIMEType();
}
stream.setInputStream(inputStream);
stream.setFilename(filename);
stream.setMimeType(mimeType);
return stream;
}
}