/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.reporting.engine.classic.core.designtime.datafactory; import org.pentaho.reporting.engine.classic.core.AbstractReportDefinition; import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot; import org.pentaho.reporting.engine.classic.core.CompoundDataFactory; import org.pentaho.reporting.engine.classic.core.DataFactory; import org.pentaho.reporting.engine.classic.core.DefaultReportEnvironment; import org.pentaho.reporting.engine.classic.core.MasterReport; import org.pentaho.reporting.engine.classic.core.ReportEnvironment; import org.pentaho.reporting.engine.classic.core.ReportProcessingException; import org.pentaho.reporting.engine.classic.core.ResourceBundleFactory; import org.pentaho.reporting.engine.classic.core.designtime.DesignTimeContext; import org.pentaho.reporting.engine.classic.core.designtime.DesignTimeUtil; import org.pentaho.reporting.engine.classic.core.util.LibLoaderResourceBundleFactory; import org.pentaho.reporting.libraries.base.config.Configuration; import org.pentaho.reporting.libraries.resourceloader.ResourceKey; import org.pentaho.reporting.libraries.resourceloader.ResourceManager; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; import java.util.LinkedHashSet; import java.util.List; public class DataFactoryEditorSupport { public static final String SYNTAX_STYLE_NONE = "text/plain"; public static final String SYNTAX_STYLE_ASSEMBLER_X86 = "text/asm"; public static final String SYNTAX_STYLE_C = "text/c"; public static final String SYNTAX_STYLE_CPLUSPLUS = "text/cpp"; public static final String SYNTAX_STYLE_CSHARP = "text/cs"; public static final String SYNTAX_STYLE_CSS = "text/css"; public static final String SYNTAX_STYLE_FORTRAN = "text/fortran"; public static final String SYNTAX_STYLE_GROOVY = "text/groovy"; public static final String SYNTAX_STYLE_HTML = "text/html"; public static final String SYNTAX_STYLE_JAVA = "text/java"; public static final String SYNTAX_STYLE_JAVASCRIPT = "text/javascript"; public static final String SYNTAX_STYLE_JSP = "text/jsp"; public static final String SYNTAX_STYLE_LUA = "text/lua"; public static final String SYNTAX_STYLE_MAKEFILE = "text/makefile"; public static final String SYNTAX_STYLE_PERL = "text/perl"; public static final String SYNTAX_STYLE_PHP = "text/php"; public static final String SYNTAX_STYLE_PROPERTIES_FILE = "text/properties"; public static final String SYNTAX_STYLE_PYTHON = "text/python"; public static final String SYNTAX_STYLE_RUBY = "text/ruby"; public static final String SYNTAX_STYLE_SAS = "text/sas"; public static final String SYNTAX_STYLE_SQL = "text/sql"; public static final String SYNTAX_STYLE_TCL = "text/tcl"; public static final String SYNTAX_STYLE_UNIX_SHELL = "text/unix"; public static final String SYNTAX_STYLE_WINDOWS_BATCH = "text/bat"; public static final String SYNTAX_STYLE_XML = "text/xml"; public static ScriptEngineFactory[] getScriptEngineLanguages() { final LinkedHashSet<ScriptEngineFactory> langSet = new LinkedHashSet<ScriptEngineFactory>(); langSet.add( null ); final List<ScriptEngineFactory> engineFactories = new ScriptEngineManager().getEngineFactories(); for ( final ScriptEngineFactory engineFactory : engineFactories ) { langSet.add( engineFactory ); } return langSet.toArray( new ScriptEngineFactory[langSet.size()] ); } public static String mapLanguageToSyntaxHighlighting( final ScriptEngineFactory script ) { if ( script == null ) { return SYNTAX_STYLE_NONE; } final String language = script.getLanguageName(); if ( "ECMAScript".equalsIgnoreCase( language ) || "js".equalsIgnoreCase( language ) || "rhino".equalsIgnoreCase( language ) || "javascript".equalsIgnoreCase( language ) ) { return SYNTAX_STYLE_JAVASCRIPT; } if ( "groovy".equalsIgnoreCase( language ) ) { return SYNTAX_STYLE_GROOVY; } return SYNTAX_STYLE_NONE; } public static void configureDataFactoryForPreview( final DataFactory dataFactory, final DesignTimeContext context ) throws ReportProcessingException { configureDataFactoryForPreview( dataFactory, context, new DataFactory[0] ); } public static void configureDataFactoryForPreview( final DataFactory dataFactory, final DesignTimeContext context, final DataFactory[] additionalDataFactories ) throws ReportProcessingException { final AbstractReportDefinition report = context.getReport(); final MasterReport masterReport = DesignTimeUtil.getMasterReport( report ); final Configuration configuration; final ResourceKey contentBase; final ReportEnvironment reportEnvironment; final DataFactory reportDataFactory; final ResourceManager resourceManager; final ResourceBundleFactory resourceBundleFactory; if ( masterReport == null ) { contentBase = null; configuration = ClassicEngineBoot.getInstance().getGlobalConfig(); reportEnvironment = new DefaultReportEnvironment( configuration ); reportDataFactory = null; resourceManager = new ResourceManager(); resourceBundleFactory = new LibLoaderResourceBundleFactory(); } else { contentBase = masterReport.getContentBase(); configuration = masterReport.getConfiguration(); reportEnvironment = masterReport.getReportEnvironment(); reportDataFactory = masterReport.getDataFactory(); resourceManager = masterReport.getResourceManager(); resourceBundleFactory = masterReport.getResourceBundleFactory(); } final CompoundDataFactory compoundDataFactory = new CompoundDataFactory(); compoundDataFactory.add( dataFactory ); for ( int i = 0; i < additionalDataFactories.length; i++ ) { compoundDataFactory.add( additionalDataFactories[i] ); } if ( reportDataFactory != null ) { compoundDataFactory.add( reportDataFactory ); } final DesignTimeDataFactoryContext dataFactoryContext = new DesignTimeDataFactoryContext( configuration, resourceManager, contentBase, MasterReport .computeAndInitResourceBundleFactory( resourceBundleFactory, reportEnvironment ), compoundDataFactory ); dataFactory.initialize( dataFactoryContext ); compoundDataFactory.initialize( dataFactoryContext ); } }