| /** |
| * |
| * 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; |
| } |
| } |