Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/**
* Copyright (C) 2011-2015 The XDocReport Team
*
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package fr.opensagres.xdocreport.template.utils;
import fr.opensagres.xdocreport.core.io.IEntryInfo;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.cache.ITemplateCacheInfoProvider;
import fr.opensagres.xdocreport.template.internal.DynamicBean;
/**
* Utilities for template cache, context.
*/
public class TemplateUtils
{
// ---------------- Template cache utilities ---------------
/**
* Returns the template cache name used to cache the given entry name (which is a template) of the given report id.
*
* @param reportId report id.
* @param entryName entry name.
* @return
*/
public static String getCachedTemplateName( String reportId, String entryName )
{
StringBuilder templateName = new StringBuilder( reportId );
templateName.append( '!' );
templateName.append( entryName );
return templateName.toString();
}
/**
* Returns the last index of the token '!' from the cachedTemplateName which delimit reportId and entryName.
*
* @param cachedTemplateName cached template name which follow pattern ($reportId '!' $entryName).
* @return
*/
public static int getIndexReportEntryName( String cachedTemplateName )
{
return cachedTemplateName.lastIndexOf( '!' );
}
/**
* Returns the report of of the given cached template name.
*
* @param cachedTemplateName cached template name which follow pattern ($reportId '!' $entryName).
* @param index of the '!' character.
* @return
*/
public static String getReportId( String cachedTemplateName, int index )
{
return cachedTemplateName.substring( 0, index );
}
/**
* Returns the entry name of of the given cached template name.
*
* @param cachedTemplateName cached template name which follow pattern ($reportId '!' $entryName).
* @param index of the '!' character.
* @return
*/
public static String getEntryName( String cachedTemplateName, int index )
{
return cachedTemplateName.substring( index + 1, cachedTemplateName.length() );
}
/**
* @param templateCacheInfoProvider
* @param templateName
* @return
*/
public static IEntryInfo getTemplateCacheInfo( ITemplateCacheInfoProvider templateCacheInfoProvider,
String templateName )
{
if ( templateCacheInfoProvider == null )
{
return null;
}
int index = TemplateUtils.getIndexReportEntryName( templateName );
if ( index == -1 )
{
return null;
}
String reportId = TemplateUtils.getReportId( templateName, index );
String entryName = TemplateUtils.getEntryName( templateName, index );
return templateCacheInfoProvider.getTemplateCacheInfo( reportId, entryName );
}
// /**
// * Returns the last modified of the entry identified with the given cached
// * template name by using {@link XDocReportRegistry}.
// *
// * @param cachedTemplateName
// * cached template name which follow pattern ($reportId '!'
// * $entryName).
// * @return
// */
// public static long getEntryLastModified(String cachedTemplateName) {
// int index = getIndexReportEntryName(cachedTemplateName);
// if (index == -1) {
// return 0;
// }
// String reportId = getReportId(cachedTemplateName, index);
// XDocArchive archive = TemplateUtils.getXDocArchive(reportId);
// if (archive == null) {
// return 0;
// }
// String entryName = getEntryName(cachedTemplateName, index);
// return archive.getLastModifiedEntry(entryName);
// }
/**
* Returns true if cached template name is an entry and false otherwise by using {@link XDocReportRegistry}.
*
* @param cachedTemplateName cached template name which follow pattern ($reportId '!' $entryName).
* @return
*/
// public static boolean hasEntry(String cachedTemplateName) {
// int index = getIndexReportEntryName(cachedTemplateName);
// if (index == -1) {
// return false;
// }
// String reportId = getReportId(cachedTemplateName, index);
// XDocArchive archive = TemplateUtils.getXDocArchive(reportId);
// if (archive == null) {
// return false;
// }
// String entryName = getEntryName(cachedTemplateName, index);
// return archive.hasEntry(entryName);
// }
/**
* Returns the input stream of the cached template name by using {@link XDocReportRegistry} and null if entry is not
* found.
*
* @param cachedTemplateName cached template name which follow pattern ($reportId '!' $entryName).
* @return
*/
// public static InputStream getEntryInputStream(String cachedTemplateName)
// {
// int index = getIndexReportEntryName(cachedTemplateName);
// if (index == -1) {
// return null;
// }
// String reportId = getReportId(cachedTemplateName, index);
// XDocArchive archive = TemplateUtils.getXDocArchive(reportId);
// if (archive == null) {
// return null;
// }
// String entryName = getEntryName(cachedTemplateName, index);
// if (!archive.hasEntry(entryName)) {
// return null;
// }
// return archive.getEntryInputStream(entryName);
// }
/**
* Returns the reader of the cached template name by using {@link XDocReportRegistry} and null if entry is not
* found.
*
* @param cachedTemplateName cached template name which follow pattern ($reportId '!' $entryName).
* @return
*/
// public static Reader getEntryReader(String cachedTemplateName) {
// int index = getIndexReportEntryName(cachedTemplateName);
// if (index == -1) {
// return null;
// }
// String reportId = getReportId(cachedTemplateName, index);
// XDocArchive archive = TemplateUtils.getXDocArchive(reportId);
// if (archive == null) {
// return null;
// }
// String entryName = getEntryName(cachedTemplateName, index);
// if (!archive.hasEntry(entryName)) {
// return null;
// }
// return archive.getEntryReader(entryName);
// }
// /**
// * Returns the {@link XDocArchive} of the report id by using
// * {@link XDocReportRegistry} and null if report is not found.
// *
// * @param reportId
// * report id
// * @return
// */
// public static XDocArchive getXDocArchive(String reportId) {
// IXDocReport report = XDocReportRegistry.getRegistry().getReport(
// reportId);
// if (report == null) {
// return null;
// }
// return report.getDocumentArchive();
// }
// ---------------- Template context utilities ---------------
/**
* If key has '.' character in the key (ex : project.name), this method create a {@link DynamicBean} instance to
* emulate the bean Project#getName().
*
* @param context
* @param key
* @param value
* @return
*/
public static Object putContextForDottedKey( IContext context, String key, Object value )
{
int index = key.indexOf( '.' );
if ( index != -1 )
{
// key has '.' character ((ex : project.name)).
String[] keys = key.split( "[.]" );
// Get the key (ex : project)
String newKey = keys[0];
// Create or get a DynamicBean instance to register the value for
// the next properties after key name (ex : name)
DynamicBean bean = getDynamicBean( context, newKey );
if ( bean != null )
{
bean.setValue( keys, value, 1 );
}
return bean;
}
return null;
}
/**
* Returns DynamicBean from the context with the given key or create it if not exists.
*
* @param context
* @param key
* @return
*/
private static DynamicBean getDynamicBean( IContext context, String key )
{
Object result = context.get( key );
if ( result == null )
{
DynamicBean bean = new DynamicBean();
context.put( key, bean );
return bean;
}
else if ( result instanceof DynamicBean )
{
return (DynamicBean) result;
}
return null;
}
}