diff --git a/EclipseBIRT.setup b/EclipseBIRT.setup index 1c0d30aa8e8..c1e0d2d61a9 100644 --- a/EclipseBIRT.setup +++ b/EclipseBIRT.setup @@ -104,7 +104,7 @@ + remoteURI="hvbtup/birt"> Set an Oomph redirection system property to redirect the logical location of this setup to its physical location in the Git clone. diff --git a/README.md b/README.md index 952bd7e08a7..0b425088c70 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,13 @@ -# Eclipse BIRT [![Build Status](https://travis-ci.com/Flugtiger/birt.svg?branch=flugtiger_master)](https://travis-ci.com/Flugtiger/birt) +# Eclipse BIRT [![Build Status](https://travis-ci.com/hvbtup/birt.svg?branch=flugtiger_master)](https://travis-ci.com/hvbtup/birt) The open source Eclipse BIRT reporting and data visualization project. **This is not the official Eclipse repository, nevertheless feel free to open tickets and pull requests!** +## Reasons for this fork and differences to the official Eclipse repository + +For more information about this repository see our [wiki pages](https://github.com/hvbtup/birt/wiki) + ## Building BIRT -See our wiki pages [How to build Eclipse BIRT](https://github.com/Flugtiger/birt/wiki/How-to-build-Eclipse-BIRT) and [How to setup an Eclipse IDE for Eclipse BIRT](https://github.com/Flugtiger/birt/wiki/How-to-setup-an-Eclipse-IDE-for-Eclipse-BIRT) +See the wiki pages on flugtiger/birt [How to build Eclipse BIRT](https://github.com/Flugtiger/birt/wiki/How-to-build-Eclipse-BIRT) and [How to setup an Eclipse IDE for Eclipse BIRT](https://github.com/Flugtiger/birt/wiki/How-to-setup-an-Eclipse-IDE-for-Eclipse-BIRT). + +Just remember to replace flugtiger/birt with hvbtup/birt diff --git a/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/DocxEmitterDescriptor.java b/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/DocxEmitterDescriptor.java index e94f6aba6ba..0d960f6fa2b 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/DocxEmitterDescriptor.java +++ b/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/DocxEmitterDescriptor.java @@ -12,6 +12,7 @@ package org.eclipse.birt.report.engine.emitter.config.docx; import static org.eclipse.birt.report.engine.api.DocxRenderOption.OPTION_EMBED_HTML; +import static org.eclipse.birt.report.engine.api.DocxRenderOption.OPTION_WORD_VERSION; import org.eclipse.birt.report.engine.api.IRenderOption; import org.eclipse.birt.report.engine.api.RenderOption; import org.eclipse.birt.report.engine.emitter.config.AbstractConfigurableOptionObserver; @@ -20,6 +21,7 @@ import org.eclipse.birt.report.engine.emitter.config.IConfigurableOption; import org.eclipse.birt.report.engine.emitter.config.IConfigurableOptionObserver; import org.eclipse.birt.report.engine.emitter.config.IOptionValue; +import org.eclipse.birt.report.engine.emitter.config.OptionValue; import org.eclipse.birt.report.engine.emitter.config.docx.i18n.Messages; @@ -30,6 +32,7 @@ public class DocxEmitterDescriptor extends AbstractEmitterDescriptor { protected static final String CHART_DPI = "ChartDpi"; protected static final String EMBED_HTML = "EmbedHtml"; + protected static final String WORD_VERSION = "WordVersion"; protected void initOptions( ) { @@ -50,8 +53,18 @@ protected void initOptions( ) embedHtml.setDefaultValue( new Boolean(Boolean.TRUE) ); embedHtml.setToolTip( getMessage( "Tooltip.EmbedHtml" ) ); embedHtml.setDescription( getMessage( "OptionDescription.EmbedHtml" ) ); //$NON-NLS-1$ - - options = new IConfigurableOption[]{chartDpi, embedHtml}; + + ConfigurableOption wordVersion = new ConfigurableOption( WORD_VERSION ); + wordVersion.setDisplayName( getMessage( "OptionDisplayValue.WordVersion" ) ); //$NON-NLS-1$ + wordVersion.setDataType( IConfigurableOption.DataType.INTEGER ); + wordVersion.setDisplayType( IConfigurableOption.DisplayType.TEXT ); + wordVersion.setDefaultValue( new Integer( 2016 ) ); + IOptionValue[] choices = { new OptionValue(2010), new OptionValue(2016) }; + wordVersion.setChoices(choices); + wordVersion.setToolTip( getMessage( "Tooltip.WordVersion" ) ); + wordVersion.setDescription( getMessage( "OptionDescription.WordVersion" ) ); //$NON-NLS-1$ + + options = new IConfigurableOption[]{chartDpi, embedHtml, wordVersion}; applyDefaultValues( ); } @Override @@ -110,6 +123,11 @@ public String getRenderOptionName( String name ) { return OPTION_EMBED_HTML; } + + if ( WORD_VERSION.equals( name ) ) + { + return OPTION_WORD_VERSION; + } return name; } diff --git a/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/i18n/messages.properties b/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/i18n/messages.properties index 575d5ba754d..9cfd407eb49 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/i18n/messages.properties +++ b/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/i18n/messages.properties @@ -18,13 +18,16 @@ DocxEmitter.DisplayName=Word (DOCX) #Option Display Value OptionDisplayValue.ChartDpi=Chart DPI OptionDisplayValue.EmbedHtml=Embed HTML +OptionDisplayValue.WordVersion=Word Version ########################################################### #Option Description OptionDescription.ChartDpi=The DPI used to generate chart. OptionDescription.EmbedHtml=Allow DOCX to use embedded HTML +OptionDescription.WordVersion=Compatibility of .docx to which word version ########################################################### #tooltip Tooltip.ChartDpi=The DPI which chart engine uses to generate charts. For example, 192. -Tooltip.EmbedHtml=If HTML content should be embedded directly to DOCX output \ No newline at end of file +Tooltip.EmbedHtml=If HTML content should be embedded directly to DOCX output +Tooltip.WordVersion=MS changed word behavior with Word 2013, so usually 2016 is the best choice. \ No newline at end of file diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java index 53916399743..3c0fe390a96 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java @@ -34,7 +34,7 @@ public class DocxEmitterImpl extends AbstractEmitterImpl { private static final String OUTPUT_FORMAT = "docx"; - + private boolean embedHtml = true; public DocxEmitterImpl( ContentEmitterVisitor contentVisitor ) @@ -47,14 +47,22 @@ public void initialize( IEmitterServices service ) throws EngineException super.initialize( service ); String tempFileDir = service.getReportEngine( ).getConfig( ) .getTempDir( ); - wordWriter = new DocxWriter( out, tempFileDir, getCompressionMode( service ) - .getValue( ) ); + IRenderOption renderOption = service.getRenderOption( ); - Object value = renderOption.getOption( DocxRenderOption.OPTION_EMBED_HTML ); + Object value = renderOption.getOption( DocxRenderOption.OPTION_WORD_VERSION ); + if (value instanceof Integer) { + setWordVersion((Integer)value); + } else { + setWordVersion(2016); + } + value = renderOption.getOption( DocxRenderOption.OPTION_EMBED_HTML ); if ( value instanceof Boolean ) { this.embedHtml = (Boolean) value; } + + wordWriter = new DocxWriter( out, tempFileDir, getCompressionMode( service ) + .getValue( ), getWordVersion() ); } private CompressionMode getCompressionMode( IEmitterServices service ) @@ -105,7 +113,7 @@ public void startForeign( IForeignContent foreign ) throws BirtException wordWriter.writeForeign( foreign ); if ( isInSpannedCell( foreign ) ) { - //insert empty line after embed html + //insert empty line after embed html wordWriter.endTableCell( true, true ); } else diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/BasicComponent.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/BasicComponent.java index ba9129386ec..61a12ec8946 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/BasicComponent.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/BasicComponent.java @@ -274,7 +274,7 @@ protected void writeTOC( String tocText, int level ) { writeTOC( tocText, null, level, false ); } - + protected void writeTOC( String tocText, String color, int level, boolean middleInline) { if ( !middleInline ) @@ -457,6 +457,7 @@ private String normalize( String foreignText, Map appContext ) throws Unsupporte Element body = null; ByteArrayOutputStream byteOut = new ByteArrayOutputStream( ); HTMLWriter htmlWriter = new HTMLWriter( ); + htmlWriter.setEnableCompactMode(true); // HVB, bug 519375 htmlWriter.open( byteOut ); if ( doc != null ) { @@ -664,7 +665,7 @@ private void buildBox( StringBuffer styleBuffer, IStyle style ) /** * Build the margins. - * + * * @param styleBuffer * @param style */ @@ -733,7 +734,7 @@ private void buildMargins( StringBuffer styleBuffer, IStyle style ) /** * Build the paddings. - * + * * @param styleBuffer * @param style */ @@ -1066,7 +1067,7 @@ public void endNode( Node node, HTMLWriter writer ) /** * test if the text node is in the script - * + * * @param node * text node * @return true if the text is a script, otherwise, false. @@ -1152,19 +1153,19 @@ protected void writeIndent( int leftMargin, int rightMargin, int textIndent ) { writer.attribute( "w:left", leftMargin ); } - + if ( rightMargin != 0 ) { writer.attribute( "w:right", rightMargin ); } - + if ( textIndent != 0 ) { writer.attribute( "w:firstLine", textIndent ); } writer.closeTag( "w:ind" ); } - + abstract void start( ); abstract void end( ); diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java index 64200f89cdb..b8b113f7526 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java @@ -41,18 +41,21 @@ public class Document extends BasicComponent private int headerId = 1; private int footerId = 1; - + private int mhtId = 1; + private int wordVersion; + Document( IPart part, String backgroundColor, String backgroundImageUrl, String backgroundHeight, String backgroundWidth, - boolean rtl ) throws IOException + boolean rtl, int wordVersion ) throws IOException { super( part ); this.backgroundColor = backgroundColor; this.backgroundImageImgUrl = backgroundImageUrl; this.backgroundHeight = backgroundHeight; this.backgroundWidth = backgroundWidth; + this.wordVersion = wordVersion; this.rtl = rtl; writeStylesPart( ); writeSettingsPart( ); @@ -204,21 +207,71 @@ private void writeSettingsPart( ) throws IOException { settingsPartWriter = settingsPart.getWriter( ); settingsPartWriter.startWriter( ); - settingsPartWriter.openTag( "w:settings" ); - settingsPartWriter.nameSpace( "w", NameSpaces.WORD_PROCESSINGML ); - settingsPartWriter.openTag( "w:zoom" ); - settingsPartWriter.attribute( "w:percent", "100" ); - settingsPartWriter.closeTag( "w:zoom" ); - settingsPartWriter.openTag( "w:displayBackgroundShape" ); - settingsPartWriter.closeTag( "w:displayBackgroundShape" ); - // settingsPartWriter.openTag( "w:proofState" ); - // settingsPartWriter.attribute( "w:spelling", "clean" ); - // settingsPartWriter.attribute( "w:grammar", "clean" ); - // settingsPartWriter.closeTag( "w:proofState" ); - settingsPartWriter.openTag( "w:view" ); - settingsPartWriter.attribute( "w:val", "print" ); - settingsPartWriter.closeTag( "w:view" ); - settingsPartWriter.closeTag( "w:settings" ); + switch(wordVersion) { + case 2010: + settingsPartWriter.openTag( "w:settings" ); + settingsPartWriter.nameSpace( "w", NameSpaces.WORD_PROCESSINGML ); + settingsPartWriter.nameSpace( "o", NameSpaces.OFFICE ); + settingsPartWriter.nameSpace( "r", NameSpaces.RELATIONSHIPS); + settingsPartWriter.openTag( "w:zoom" ); + settingsPartWriter.attribute( "w:percent", "100" ); + settingsPartWriter.closeTag( "w:zoom" ); + settingsPartWriter.openTag( "w:displayBackgroundShape" ); + settingsPartWriter.closeTag( "w:displayBackgroundShape" ); + // settingsPartWriter.openTag( "w:proofState" ); + // settingsPartWriter.attribute( "w:spelling", "clean" ); + // settingsPartWriter.attribute( "w:grammar", "clean" ); + // settingsPartWriter.closeTag( "w:proofState" ); + settingsPartWriter.openTag( "w:view" ); + settingsPartWriter.attribute( "w:val", "print" ); + settingsPartWriter.closeTag( "w:view" ); + settingsPartWriter.openTag( "w:compat" ); + settingsPartWriter.openTag( "w:compatSetting" ); + settingsPartWriter.attribute( "w:name", "w:compatibilityMode" ); + settingsPartWriter.attribute( "w:uri", "http://schemas.microsoft.com/office/word" ); + settingsPartWriter.attribute( "w:val", "12" ); + settingsPartWriter.closeTag( "w:compatSetting" ); + settingsPartWriter.closeTag( "w:compat" ); + settingsPartWriter.closeTag( "w:settings" ); + break; + default: + settingsPartWriter.openTag( "w:settings" ); + settingsPartWriter.nameSpace( "mc", NameSpaces.MARKUP_COMPATIBILITY ); + settingsPartWriter.nameSpace( "o", NameSpaces.OFFICE ); + settingsPartWriter.nameSpace( "r", NameSpaces.RELATIONSHIPS); + settingsPartWriter.nameSpace( "m", NameSpaces.MATH ); + settingsPartWriter.nameSpace( "v", NameSpaces.VML); + settingsPartWriter.nameSpace( "w10", NameSpaces.W10 ); + settingsPartWriter.nameSpace( "w", NameSpaces.WORD_PROCESSINGML ); + settingsPartWriter.nameSpace( "w14", NameSpaces.W14 ); + settingsPartWriter.nameSpace( "w15", NameSpaces.W15 ); + settingsPartWriter.nameSpace( "w16cex", NameSpaces.W16CEX ); + settingsPartWriter.nameSpace( "w16cid", NameSpaces.W16CID ); + settingsPartWriter.nameSpace( "w16", NameSpaces.W16 ); + settingsPartWriter.nameSpace( "w16se", NameSpaces.W16SE ); + settingsPartWriter.nameSpace( "sl", NameSpaces.SCHEMA_LIBRARY ); + settingsPartWriter.attribute( "mc:Ignorable", "w14 w15 w16se w16cid w16 w16cex" ); + settingsPartWriter.openTag( "w:zoom" ); + settingsPartWriter.attribute( "w:percent", "100" ); + settingsPartWriter.closeTag( "w:zoom" ); + settingsPartWriter.openTag( "w:displayBackgroundShape" ); + settingsPartWriter.closeTag( "w:displayBackgroundShape" ); + // settingsPartWriter.openTag( "w:proofState" ); + // settingsPartWriter.attribute( "w:spelling", "clean" ); + // settingsPartWriter.attribute( "w:grammar", "clean" ); + // settingsPartWriter.closeTag( "w:proofState" ); + settingsPartWriter.openTag( "w:view" ); + settingsPartWriter.attribute( "w:val", "print" ); + settingsPartWriter.closeTag( "w:view" ); + settingsPartWriter.openTag( "w:compat" ); + settingsPartWriter.openTag( "w:compatSetting" ); + settingsPartWriter.attribute( "w:name", "compatibilityMode" ); + settingsPartWriter.attribute( "w:uri", "http://schemas.microsoft.com/office/word" ); + settingsPartWriter.attribute( "w:val", "15" ); + settingsPartWriter.closeTag( "w:compatSetting" ); + settingsPartWriter.closeTag( "w:compat" ); + settingsPartWriter.closeTag( "w:settings" ); + } settingsPartWriter.endWriter( ); } finally @@ -291,16 +344,29 @@ void writeHeaderReference( BasicComponent header, boolean showHeaderOnFirst ) writer.closeTag( "w:headerReference" ); } - void writeFooterReference( BasicComponent footer ) + void writeFooterReference( BasicComponent footer, boolean showHeaderOnFirst ) { + String type = showHeaderOnFirst ? "first" : "default"; writer.openTag( "w:footerReference" ); + writer.attribute( "w:type", type ); writer.attribute( "r:id", footer.getRelationshipId( ) ); writer.closeTag( "w:footerReference" ); } - Header createHeader( int headerHeight, int headerWidth ) throws IOException + Header createHeader( boolean showHeaderOnFirst, int headerHeight, int headerWidth ) throws IOException { - String uri = "header" + getHeaderID( ) + ".xml"; + if (showHeaderOnFirst) { + String uri = "header" + nextHeaderID( ) + ".xml"; + String type = ContentTypes.WORD_HEADER; + String relationshipType = RelationshipTypes.HEADER; + IPart headerPart = part.getPart( uri, type, relationshipType ); + Header firstPageHeader = new Header( headerPart, this, headerHeight, headerWidth ); + firstPageHeader.start(); + firstPageHeader.end(); + writeHeaderReference( firstPageHeader, true ); + + } + String uri = "header" + nextHeaderID( ) + ".xml"; String type = ContentTypes.WORD_HEADER; String relationshipType = RelationshipTypes.HEADER; IPart headerPart = part.getPart( uri, type, relationshipType ); @@ -309,19 +375,19 @@ Header createHeader( int headerHeight, int headerWidth ) throws IOException Footer createFooter( int footerHeight, int footerWidth ) throws IOException { - String uri = "footer" + getFooterID( ) + ".xml"; + String uri = "footer" + nextFooterID( ) + ".xml"; String type = ContentTypes.WORD_FOOTER; String relationshipType = RelationshipTypes.FOOTER; IPart footerPart = part.getPart( uri, type, relationshipType ); return new Footer( footerPart, this, footerHeight, footerWidth ); } - private int getHeaderID( ) + private int nextHeaderID( ) { return headerId++; } - private int getFooterID( ) + private int nextFooterID( ) { return footerId++; } @@ -346,4 +412,11 @@ void writePageBorders( IStyle style, int topMargin, int bottomMargin, rightMargin ); writer.closeTag( "w:pgBorders" ); } + + @Override + public void writeEmptyElement( String tag ) + { + writer.openTag( tag ); + writer.closeTag( tag ); + } } diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java index 1f8505d756d..57f43839131 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java @@ -43,11 +43,14 @@ public class DocxWriter implements IWordWriter private boolean rtl = false; private boolean showHeaderOnFirst; + + private int wordVersion; - public DocxWriter( OutputStream out, String tempFileDir, int compressionMode ) + public DocxWriter( OutputStream out, String tempFileDir, int compressionMode, int wordVersion ) { pkg = Package.createInstance( out, tempFileDir, compressionMode ); pkg.setExtensionData( new ImageManager( ) ); + this.wordVersion = wordVersion; } public void start( boolean rtl, String creator, String title, @@ -119,7 +122,7 @@ private void initializeDocumentPart( String backgroundColor, String relationshipType = RelationshipTypes.DOCUMENT; IPart documentPart = pkg.getPart( uri, type, relationshipType ); document = new Document( documentPart, backgroundColor, - backgroundImageUrl, backgroundHeight, backgroundWidth, rtl ); + backgroundImageUrl, backgroundHeight, backgroundWidth, rtl, wordVersion ); document.start( ); currentComponent = document; } @@ -147,7 +150,7 @@ public void endSection( ) public void startHeader( boolean showHeaderOnFirst, int headerHeight, int headerWidth ) throws IOException { - currentComponent = document.createHeader( headerHeight, headerWidth ); + currentComponent = document.createHeader( showHeaderOnFirst, headerHeight, headerWidth ); currentComponent.start( ); this.showHeaderOnFirst = showHeaderOnFirst; } @@ -155,21 +158,36 @@ public void startHeader( boolean showHeaderOnFirst, int headerHeight, public void endHeader( ) { currentComponent.end( ); - document.writeHeaderReference( currentComponent, showHeaderOnFirst ); + document.writeHeaderReference( currentComponent, false ); currentComponent = document; } - public void startFooter( int footerHeight, int footerWidth ) + public boolean mustCloneFooter( ) { + return false; + } + + public void startFooter( boolean isFirstPage, int footerHeight, int footerWidth ) throws IOException { - currentComponent = document.createFooter( footerHeight, footerWidth ); - currentComponent.start( ); + if ( !isFirstPage ) { + currentComponent = document.createFooter( footerHeight, footerWidth ); + currentComponent.start( ); + } else { + currentComponent = null; + } } public void endFooter( ) { - currentComponent.end( ); - document.writeFooterReference( currentComponent ); + if ( currentComponent == null ) { + ; // nothing to do. + } else { + currentComponent.end( ); + if (!this.showHeaderOnFirst) { + document.writeFooterReference( currentComponent, true ); + } + document.writeFooterReference( currentComponent, false ); + } currentComponent = document; } @@ -194,7 +212,7 @@ public void startTable( IStyle style, int tableWidth ) { currentComponent.startTable( style, tableWidth, false ); } - + public void startTable( IStyle style, int tableWidth, boolean inForeign ) { currentComponent.startTable( style, tableWidth, inForeign ); @@ -211,10 +229,10 @@ public void writeColumn( int[] cols ) } public void startTableRow( double height, boolean isHeader, - boolean repeatHeader, boolean fixedLayout ) + boolean repeatHeader, boolean fixedLayout, boolean cantSplit ) { currentComponent.startTableRow( height, isHeader, repeatHeader, - fixedLayout ); + fixedLayout, cantSplit ); } public void startTableRow( double height ) @@ -236,7 +254,7 @@ public void endTableCell( boolean needEmptyP ) { currentComponent.endTableCell( needEmptyP ); } - + public void endTableCell( boolean needEmptyp, boolean inForeign ) { currentComponent.endTableCell( needEmptyp, inForeign ); @@ -280,7 +298,7 @@ public void writeTOC( String toc, int tocLevel ) { currentComponent.writeTOC( toc, tocLevel ); } - + public void writeTOC( String toc, String color, int tocLevel, boolean middleInline ) { @@ -291,7 +309,7 @@ public void insertHiddenParagraph( ) { currentComponent.insertHiddenParagraph( ); } - + public void insertEmptyParagraph( ) { currentComponent.insertEmptyParagraph( ); @@ -347,4 +365,9 @@ public void drawDocumentBackgroundImage( String backgroundImageUrl, topMargin, leftMargin, pageHeight, pageWidth ); } + + public void writeEmptyElement(String tag) { + currentComponent.writeEmptyElement(tag); + } + } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java index b844e1e1d76..a841f441b21 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java @@ -18,6 +18,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; import java.util.Stack; import java.util.logging.Level; @@ -67,6 +68,8 @@ import org.eclipse.birt.report.engine.i18n.MessageConstants; import org.eclipse.birt.report.engine.ir.DimensionType; import org.eclipse.birt.report.engine.ir.EngineIRConstants; +import org.eclipse.birt.report.engine.ir.Expression; +import org.eclipse.birt.report.engine.ir.ReportItemDesign; import org.eclipse.birt.report.engine.ir.SimpleMasterPageDesign; import org.eclipse.birt.report.engine.layout.emitter.Image; import org.eclipse.birt.report.engine.layout.pdf.font.FontMappingManager; @@ -80,7 +83,6 @@ import org.eclipse.birt.report.engine.util.FlashFile; import org.eclipse.birt.report.model.api.ReportDesignHandle; import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants; - import org.w3c.dom.css.CSSValue; import org.w3c.dom.css.CSSValueList; @@ -90,6 +92,7 @@ public abstract class AbstractEmitterImpl { public final static int NORMAL = -1; + public final static int CUSTOM_FIELD = -2; public static enum InlineFlag { FIRST_INLINE, MIDDLE_INLINE, BLOCK @@ -101,6 +104,11 @@ public static enum TextFlag { private static Set nonInherityStyles = new HashSet( ); + private static final String LAYOUTMODE_NONE = "NONE"; //$NON-NLS-1$ + private static final String PROP_NAME_LAYOUTMODE = "WordEmitter.LayoutMode"; //$NON-NLS-1$ + private static final String PROP_NAME_FIELDFUNCTION = "WordEmitter.FieldFunction"; //$NON-NLS-1$ + protected static final String PROP_NAME_NESTED_TABLE = "WordEmitter.NestedTable"; //$NON-NLS-1$ + static { nonInherityStyles.add( IStyle.STYLE_BORDER_BOTTOM_COLOR ); @@ -116,7 +124,7 @@ public static enum TextFlag { nonInherityStyles.add( IStyle.STYLE_BORDER_RIGHT_STYLE ); nonInherityStyles.add( IStyle.STYLE_BORDER_RIGHT_WIDTH ); } - + private static final HashMap genericFontMapping = new HashMap( ); static @@ -145,6 +153,8 @@ public static enum TextFlag { protected Stack styles = new Stack( ); + protected Stack listLayouts = new Stack( ); + private int pageWidth = 0; private int pageHeight = 0; @@ -162,13 +172,13 @@ public static enum TextFlag { private int leftMargin = 0; private int rightMargin = 0; - + private int pageTopBorderWidth = 0; - + private int pageBottomBorderWidth = 0; - + private int pageLeftBorderWidth = 0; - + private int pageRightBorderWidth = 0; private String orientation = "portrait"; @@ -188,9 +198,9 @@ public static enum TextFlag { private IHTMLActionHandler actionHandler; private IReportContext reportContext; - + private String messageFlashObjectNotSupported; - + private String messageReportItemNotSupported; private String layoutPreference = null; @@ -198,6 +208,25 @@ public static enum TextFlag { private boolean fixedLayout; protected int reportDpi; + + /** + * The original DOCX emitters generated output for word version 2010. + * Newer version of Microsoft Word render these files incorrectly + * the compatibility mode is activated manually after opening the file. + * + * The original WPML emitter generated the same WordProcessing ML. + * + * When wordVersion is set to a value of 2016, the resulting XML file + * is a bit different (mainly some XML schema names changed). + * + * If you want the document generated by BIRT to look correctly + * in MS Word, you should no longer user 2010, but 2016. + * + * Since this file is shared by the DOCX emitter and the WPML emitter + * (Word 2003 XML, uncompressed) and we don't want to touch the WPML + * emitter, the default here is still 2010. + */ + private int wordVersion = 2010; protected static final String EMPTY_FOOTER = " "; @@ -365,29 +394,59 @@ public void computePageProperties( IPageContent page ) leftMargin = WordUtil.convertTo( page.getMarginLeft( ), 0, reportDpi ); rightMargin = WordUtil.convertTo( page.getMarginRight( ), 0, reportDpi ); - + pageTopBorderWidth = WordUtil.parseBorderSize( PropertyUtil .getDimensionValue( page.getComputedStyle( ).getProperty( - StyleConstants.STYLE_BORDER_TOP_WIDTH ) ) ); - + StyleConstants.STYLE_BORDER_TOP_WIDTH ) ) ); + pageBottomBorderWidth = WordUtil.parseBorderSize( PropertyUtil .getDimensionValue( page.getComputedStyle( ).getProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ) ) ); - + pageLeftBorderWidth = WordUtil.parseBorderSize( PropertyUtil .getDimensionValue( page.getComputedStyle( ).getProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH ) ) ); - + pageRightBorderWidth = WordUtil.parseBorderSize( PropertyUtil .getDimensionValue( page.getComputedStyle( ).getProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH ) ) ); - + contentWidth = pageWidth - leftMargin - rightMargin - pageLeftBorderWidth - pageRightBorderWidth; orientation = page.getOrientation( ); } + /** + * @param elem a report element, e.g. a IListContent + * @param propName a property name. + * @return + */ + protected Object getUserProperty(IContent elem, String propName) { + Object val = null; + Map userprops = elem.getUserProperties(); + if (userprops != null) { + val = userprops.get(propName); + } + if (val == null) { + // Necessary for BIRT 4.2.1: + // This version does not promote automatically the user-properties + // from the design Element to the runtime element (4.3 does!). + ReportItemDesign designElem = (ReportItemDesign )elem.getGenerateBy(); + if (designElem != null) { + Map designUserprops = designElem.getUserProperties(); + if (designUserprops != null) { + Expression expression = designUserprops.get(propName); + if( expression instanceof Expression.Constant ) { + Expression.Constant constant = (Expression.Constant)expression; + val = constant.getValue(); + } + } + } + } + return val; + } + public void startAutoText( IAutoTextContent autoText ) { writeContent( autoText.getType( ), autoText.getText( ), autoText ); @@ -403,7 +462,13 @@ public void startLabel( ILabelContent label ) String txt = label.getText( ) == null ? label.getLabelText( ) : label .getText( ); txt = txt == null ? "" : txt; - writeContent( AbstractEmitterImpl.NORMAL, txt, label ); + int type = AbstractEmitterImpl.NORMAL; + String fieldFunction = (String) getUserProperty(label, PROP_NAME_FIELDFUNCTION); + if (fieldFunction != null && !(fieldFunction.isEmpty())){ + type = AbstractEmitterImpl.CUSTOM_FIELD; + // TODO It would be nice to use fieldFunction as the the Word field funtion and output the label text as a placeholder. + } + writeContent( type, txt, label ); } public void startText( ITextContent text ) @@ -414,35 +479,49 @@ public void startText( ITextContent text ) public void startList( IListContent list ) { adjustInline( ); - + String layoutMode = (String) getUserProperty(list, PROP_NAME_LAYOUTMODE); + listLayouts.push(layoutMode); styles.push( list.getComputedStyle( ) ); - writeBookmark( list ); - Object listToc = list.getTOC( ); - if ( listToc != null && !hasTocOutputed( list ) ) - { - tableTocs.add( new TocInfo( listToc.toString( ), tocLevel ) ); - } - increaseTOCLevel( list ); + if (LAYOUTMODE_NONE.equals(layoutMode)) { + ; + } else { + writeBookmark( list ); + Object listToc = list.getTOC( ); + if ( listToc != null && !hasTocOutputed( list ) ) + { + tableTocs.add( new TocInfo( listToc.toString( ), tocLevel ) ); + } + increaseTOCLevel( list ); - if ( context.isAfterTable( ) ) - { - wordWriter.insertHiddenParagraph( ); - context.setIsAfterTable( false ); - } + if ( context.isAfterTable( ) ) + { + wordWriter.insertHiddenParagraph( ); + context.setIsAfterTable( false ); + } - int width = WordUtil.convertTo( list.getWidth( ), context - .getCurrentWidth( ), reportDpi ); - width = Math.min( width, context.getCurrentWidth( ) ); - wordWriter.startTable( list.getComputedStyle( ), width ); - context.startCell( ); - wordWriter.startTableRow( -1 ); - IStyle style = computeStyle( list.getComputedStyle( ) ); - wordWriter.startTableCell( context.getCurrentWidth( ), style, null ); - writeTableToc( ); + int width = WordUtil.convertTo( list.getWidth( ), context + .getCurrentWidth( ), reportDpi ); + width = Math.min( width, context.getCurrentWidth( ) ); + if (LAYOUTMODE_NONE.equals(layoutMode)) { + ; + } else { + wordWriter.startTable( list.getComputedStyle( ), width ); + } + } } public void startListBand( IListBandContent listBand ) { + if (!listLayouts.empty() && LAYOUTMODE_NONE.equals(listLayouts.peek())) { + ; + } else { + context.startCell( ); + wordWriter.startTableRow( -1 ); + + IStyle style = computeStyle( listBand.getComputedStyle( ) ); + wordWriter.startTableCell( context.getCurrentWidth( ), style, null ); + writeTableToc( ); + } } public void startListGroup( IListGroupContent group ) @@ -457,7 +536,8 @@ public void startRow( IRowContent row ) writeBookmark( row ); rowFilledFlag = false; boolean isHeader = false; - styles.push( row.getComputedStyle( ) ); + IStyle style = row.getComputedStyle( ); + styles.push( style ); if ( row.getBand( ) != null && row.getBand( ).getBandType( ) == IBandContent.BAND_HEADER ) { @@ -466,8 +546,13 @@ public void startRow( IRowContent row ) double height = WordUtil.convertTo( row.getHeight( ), reportDpi ); + boolean cantSplit = false; + if ("avoid".equals(computeStyle(style).getPageBreakInside())) { // $NON-NLS-1$ + cantSplit = true; + } + wordWriter.startTableRow( height, isHeader, row.getTable( ) - .isHeaderRepeat( ), fixedLayout ); + .isHeaderRepeat( ), fixedLayout, cantSplit ); context.newRow( ); } } @@ -501,8 +586,7 @@ public void startCell( ICellContent cell ) int cellWidth = context.getCellWidth( columnId, columnSpan ); IStyle style = computeStyle( cell.getComputedStyle( ) ); -// style.get - + if ( rowSpan > 1 ) { context.addSpan( columnId, columnSpan, cellWidth, rowSpan, style ); @@ -524,11 +608,6 @@ public void startCell( ICellContent cell ) } } - private boolean hasBorder( String borderStyle ) - { - return !( borderStyle == null || "none".equalsIgnoreCase( borderStyle ) ); - } - private void drawDiagonalLine( ICellContent cell, double cellWidth ) { if ( cellWidth == 0 ) @@ -676,23 +755,35 @@ public void endGroup( IGroupContent group ) public void endList( IListContent list ) { - adjustInline( ); - wordWriter.endTableCell( context.needEmptyP( ) ); - context.endCell( ); - wordWriter.endTableRow( ); + String layoutMode = null; + if ( !listLayouts.isEmpty( ) ) + { + layoutMode = listLayouts.pop( ); + } if ( !styles.isEmpty( ) ) { styles.pop( ); } - context.addContainer( true ); - wordWriter.endTable( ); - context.setIsAfterTable( true ); - decreaseTOCLevel( list ); + if (LAYOUTMODE_NONE.equals(layoutMode)) { + ; + } else { + wordWriter.endTable( ); + context.setIsAfterTable( true ); + decreaseTOCLevel( list ); + } } public void endListBand( IListBandContent listBand ) { + adjustInline( ); + if (!listLayouts.empty() && LAYOUTMODE_NONE.equals(listLayouts.peek())) { + ; + } else { + wordWriter.endTableCell( context.needEmptyP() ); + context.endCell( ); + wordWriter.endTableRow( ); + } } public void endListGroup( IListGroupContent group ) @@ -909,7 +1000,7 @@ protected void writeToc( IContent content ) { writeToc( content, false ); } - + protected void writeToc( IContent content, boolean middleInline ) { if ( content != null ) @@ -1171,7 +1262,7 @@ private boolean isHidden( IContent content ) /** * if the content is hidden - * + * * @return */ private boolean isHiddenByVisibility( IContent content ) @@ -1254,12 +1345,14 @@ private void writeHeaderFooter( ) throws IOException, BirtException SimpleMasterPageDesign master = (SimpleMasterPageDesign) previousPage .getGenerateBy( ); - + + boolean showHeaderOnFirst = true; + if ( previousPage.getPageHeader( ) != null || backgroundHeight != null || backgroundWidth != null ) { - wordWriter.startHeader( !master.isShowHeaderOnFirst( ) && previousPage.getPageNumber( ) == 1, - headerHeight, contentWidth ); + showHeaderOnFirst = master.isShowHeaderOnFirst( ) || previousPage.getPageNumber( ) > 1; + wordWriter.startHeader( showHeaderOnFirst, headerHeight, contentWidth ); if ( backgroundHeight != null || backgroundWidth != null ) { @@ -1279,39 +1372,47 @@ private void writeHeaderFooter( ) throws IOException, BirtException } if ( previousPage.getPageFooter( ) != null ) { - if ( !master.isShowFooterOnLast( ) - && previousPage.getPageNumber( ) == reportContent - .getTotalPage( ) ) + // MS word does not support hiding the footer on the last page. + // The only option would be to create a different section just + // for the last page. + // This in turn could only work with separate RunTask and RenderTask + // and it would prevent the user from making page-breaking changes. + // Thus supporting showFooterOnLast is more dangerous than useful. + if ( !master.isShowFooterOnLast( ) ) { - IContent footer = previousPage.getPageFooter( ); - ILabelContent emptyContent = footer.getReportContent( ) - .createLabelContent( ); - emptyContent.setText( this.EMPTY_FOOTER ); - wordWriter.startFooter( footerHeight, contentWidth ); - contentVisitor.visit( emptyContent, null ); - wordWriter.endFooter( ); + logger.warning("Hiding the footer on the last page is not supported for MS Word output."); } - else - { - wordWriter.startFooter( footerHeight, contentWidth ); - contentVisitor.visitChildren( previousPage.getPageFooter( ), - null ); + wordWriter.startFooter( false, footerHeight, contentWidth ); + contentVisitor.visitChildren( previousPage.getPageFooter( ), + null ); + wordWriter.endFooter( ); + if (!showHeaderOnFirst) { + wordWriter.startFooter( true, footerHeight, contentWidth); + if (wordWriter.mustCloneFooter()) { + contentVisitor.visitChildren( previousPage.getPageFooter( ), + null ); + } wordWriter.endFooter( ); } } + + if (!showHeaderOnFirst) { + wordWriter.writeEmptyElement("w:titlePg"); + } + } /** * Transfer background for current page to Doc format. Now, the exported * file will apply the first background properties, and followed background * will ignore. - * + * * In addition, Since the Word only support fill-in background, the * background attach, pos, posX, posY and repeat are not mapped to Word * easyly. At present, ignore those properties. - * + * * @throws IOException - * + * * @TODO support background properties. attach, pos, posx, posy and repeat. */ @@ -1395,6 +1496,14 @@ private int[] computeTblColumnWidths( ITableContent table, int tblWidth ) total ); } + public int getWordVersion() { + return wordVersion; + } + + public void setWordVersion(int wordVersion) { + this.wordVersion = wordVersion; + } + static class TocInfo { diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java index cc9ef1dfce2..991504b90b2 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java @@ -20,6 +20,7 @@ import org.eclipse.birt.report.engine.content.IForeignContent; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.content.ITableContent; +import org.eclipse.birt.report.engine.content.impl.CellContent; import org.eclipse.birt.report.engine.css.dom.CompositeStyle; import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; @@ -81,7 +82,7 @@ public void endContainer( IContainerContent container ) inlineStyles.pop( ); } } - + if ( !CSSConstants.CSS_INLINE_VALUE.equalsIgnoreCase( container .getComputedStyle( ).getDisplay( ) ) ) { @@ -148,11 +149,14 @@ public void startForeign( IForeignContent foreign ) throws BirtException { if ( IForeignContent.HTML_TYPE.equalsIgnoreCase( foreign.getRawType( ) ) ) { + + Boolean userDecision = (Boolean)getUserProperty(foreign, PROP_NAME_NESTED_TABLE); + inForeign = true; // store the inline state before the HTML foreign. boolean inlineBrother = !context.isFirstInline( ); // the inline state needs be recalculated in the HTML foreign. - + // if the foreign itself is not inline if ( !"inline".equalsIgnoreCase( foreign.getComputedStyle( ) //$NON-NLS-1$ .getDisplay( ) ) ) @@ -169,34 +173,61 @@ public void startForeign( IForeignContent foreign ) throws BirtException HTML2Content.html2Content( foreign ); - context.startCell( ); - - if ( context.isAfterTable( ) ) - { - wordWriter.insertHiddenParagraph( ); - context.setIsAfterTable( false ); + // Should we create a 1x1-sized nested table for the content? + + // Note that *without* the nested table, the HTML text item's + // border, padding and margin properties will be ignored. + // However, the resulting file is smaller and it is a lot easier + // to actually edit it later. + + boolean createNestedTable = true; // this is how BIRT 4.3.2 works + + // Allow the client to decide explicitly what's to do here, using a UserProperty + if (userDecision != null) { + createNestedTable = userDecision; + } else { + // Detect what's usually best automatically: + // Create a nested table unless the Foreign is directly located in a Cell. + createNestedTable = ! (foreign.getParent() instanceof CellContent); } - int width = WordUtil.convertTo( foreign.getWidth( ), - context.getCurrentWidth( ), reportDpi ); - width = Math.min( width, context.getCurrentWidth( ) ); - wordWriter.startTable( foreign.getComputedStyle( ), width, inForeign ); - wordWriter.startTableRow( -1 ); - wordWriter - .startTableCell( width, foreign.getComputedStyle( ), null ); - writeBookmark(foreign); - writeToc( foreign ); - contentVisitor.visitChildren( foreign, null ); + + if (createNestedTable) { + context.startCell( ); + if ( context.isAfterTable( ) ) + { + wordWriter.insertHiddenParagraph( ); + context.setIsAfterTable( false ); + } + int width = WordUtil.convertTo( foreign.getWidth( ), + context.getCurrentWidth( ), reportDpi ); + width = Math.min( width, context.getCurrentWidth( ) ); + wordWriter.startTable( foreign.getComputedStyle( ), width, inForeign ); + wordWriter.startTableRow( -1 ); + wordWriter + .startTableCell( width, foreign.getComputedStyle( ), null ); + writeBookmark(foreign); + writeToc( foreign ); + contentVisitor.visitChildren( foreign, null ); - adjustInline( ); + adjustInline( ); - wordWriter.endTableCell( context.needEmptyP( ) ); + wordWriter.endTableCell( context.needEmptyP( ) ); - context.endCell( ); - wordWriter.endTableRow( ); - wordWriter.endTable( ); - context.setIsAfterTable( true ); - context.addContainer( true ); - hasPInside = false; + context.endCell( ); + wordWriter.endTableRow( ); + wordWriter.endTable( ); + context.setIsAfterTable( true ); + context.addContainer( true ); + hasPInside = false; + } else { + writeBookmark(foreign); + writeToc( foreign ); + // Note that margin, padding, border, background of the dynamic text item + // will be ignored. + contentVisitor.visitChildren( foreign, null ); + adjustInline( ); + hasPInside = true; + } // restore the inline state after the HTML foreign. if ( inlineBrother ) { diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java index 173f91fc6bd..e721c3a993c 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java @@ -52,7 +52,7 @@ void writePageBorders( IStyle style, int topMargin, int bottomMargin, int leftMargin, int rightMargin ); void startTable( IStyle style, int tableWidth ); - + void startTable( IStyle style, int tableWidth, boolean inForeign ); void endTable( ); @@ -60,7 +60,7 @@ void writePageBorders( IStyle style, int topMargin, int bottomMargin, void writeColumn( int[] cols ); void startTableRow( double height, boolean isHeader, boolean repeatHeader, - boolean fixedLayout ); + boolean fixedLayout, boolean cantSplit ); void startTableRow( double height ); @@ -69,7 +69,7 @@ void startTableRow( double height, boolean isHeader, boolean repeatHeader, void startTableCell( int width, IStyle style, SpanInfo info ); void endTableCell( boolean needEmptyP ); - + void endTableCell( boolean needEmptyP, boolean inForeign ); void writeSpanCell( SpanInfo info ); @@ -77,7 +77,7 @@ void startTableRow( double height, boolean isHeader, boolean repeatHeader, void writeEmptyCell( ); void writeTOC( String toc, int tocLevel ); - + void writeTOC( String toc, String color, int tocLevel, boolean middleInline ); void insertHiddenParagraph( ); @@ -101,7 +101,9 @@ void startHeader( boolean showHeaderOnFirst, int headerHeight, void endHeader( ); - void startFooter( int footerHeight, int footerWidth ) throws IOException; + boolean mustCloneFooter( ); + + void startFooter( boolean isFirstPage, int footerHeight, int footerWidth ) throws IOException; void endFooter( ); @@ -115,4 +117,7 @@ void writeContent( int type, String txt, IStyle style, IStyle inlineStyle, void startPage( ); void endPage( ); + + void writeEmptyElement(String tag); + } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/WordUtil.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/WordUtil.java index 756a37d9815..522bdedf0df 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/WordUtil.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/WordUtil.java @@ -326,7 +326,8 @@ private static String getPercentValue( String height, double pageHeight ) public static boolean isField( int autoTextType ) { return autoTextType == IAutoTextContent.PAGE_NUMBER - || autoTextType == IAutoTextContent.TOTAL_PAGE; + || autoTextType == IAutoTextContent.TOTAL_PAGE + || autoTextType == AbstractEmitterImpl.CUSTOM_FIELD; } public static boolean isField( IContent content ) diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java index 1eb720c8f68..c71b93d7f3a 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java @@ -20,6 +20,7 @@ import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.eclipse.birt.report.engine.emitter.XMLWriter; +import org.eclipse.birt.report.engine.emitter.wpml.AbstractEmitterImpl; import org.eclipse.birt.report.engine.emitter.wpml.AbstractEmitterImpl.TextFlag; import org.eclipse.birt.report.engine.emitter.wpml.DiagonalLineInfo; import org.eclipse.birt.report.engine.emitter.wpml.DiagonalLineInfo.Line; @@ -27,6 +28,7 @@ import org.eclipse.birt.report.engine.emitter.wpml.SpanInfo; import org.eclipse.birt.report.engine.emitter.wpml.WordUtil; import org.eclipse.birt.report.engine.layout.pdf.util.PropertyUtil; + import org.w3c.dom.css.CSSValue; public abstract class AbstractWordXmlWriter @@ -41,11 +43,11 @@ public abstract class AbstractWordXmlWriter protected final String TOP = "top"; protected final String BOTTOM = "bottom"; - + public static final char SPACE = ' '; - + public static final String EMPTY_STRING = ""; - + public static final int INDEX_NOTFOUND = -1; protected int imageId = 75; @@ -76,7 +78,7 @@ public abstract class AbstractWordXmlWriter protected abstract void writeIndent( int indent ); protected abstract void writeIndent( int leftMargin, int rightMargin, int textIndent ); - + public void startSectionInParagraph( ) { writer.openTag( "w:p" ); @@ -245,7 +247,7 @@ public void startTable( IStyle style, int tablewidth, boolean inForeign ) writeTableLayout( ); writeTableBorders( style ); writeBackgroundColor( style.getBackgroundColor( ) ); - + //"justify" is not an option for table alignment in word if ( "justify".equalsIgnoreCase( style.getTextAlign( ) ) ) { @@ -491,6 +493,7 @@ private boolean needNewParagraph( String txt ) .equals( txt ) ); } + @SuppressWarnings("deprecation") public void startParagraph( IStyle style, boolean isInline, int paragraphWidth ) { @@ -499,19 +502,20 @@ public void startParagraph( IStyle style, boolean isInline, writeSpacing( ( style.getProperty( StyleConstants.STYLE_MARGIN_TOP ) ), ( style.getProperty( StyleConstants.STYLE_MARGIN_BOTTOM ) ) ); writeAlign( style.getTextAlign( ), style.getDirection( ) ); + int indent = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_TEXT_INDENT ), paragraphWidth ) / 1000 * 20; - + int leftMargin = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_MARGIN_LEFT ), paragraphWidth ) / 1000 * 20; - + int rightMargin = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_MARGIN_RIGHT ), paragraphWidth ) / 1000 * 20; writeIndent( leftMargin, rightMargin, indent ); - + if ( !isInline ) { writeBackgroundColor( style.getBackgroundColor( ) ); @@ -522,13 +526,14 @@ public void startParagraph( IStyle style, boolean isInline, } /** - * Used only in inline text .The text align style of inline text + * Used only in inline text .The text align style of inline text * is ignored,but its parent text align should be applied. * @param style * @param isInline * @param paragraphWidth - * @param textAlign parent text align of inline text + * @param textAlign parent text align of inline text */ + @SuppressWarnings("deprecation") public void startParagraph( IStyle style, boolean isInline, int paragraphWidth, String textAlign ) { @@ -540,16 +545,16 @@ public void startParagraph( IStyle style, boolean isInline, int indent = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_TEXT_INDENT ), paragraphWidth ) / 1000 * 20; - + int leftMargin = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_MARGIN_LEFT ), paragraphWidth ) / 1000 * 20; - + int rightMargin = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_MARGIN_RIGHT ), paragraphWidth ) / 1000 * 20; writeIndent( leftMargin, rightMargin, indent ); - + if ( !isInline ) { writeBackgroundColor( style.getBackgroundColor( ) ); @@ -599,6 +604,14 @@ else if ( type == IAutoTextContent.TOTAL_PAGE ) writer.closeTag( "w:instrText" ); } + protected void writeSimpleField( String fieldFunction){ + if (fieldFunction != null){ + writer.openTag( "w:instrText" ); + writer.text( fieldFunction ); + writer.closeTag( "w:instrText" ); + } + } + private void writeString( String txt, IStyle style ) { if ( txt == null ) @@ -649,7 +662,7 @@ else if ( CSSConstants.CSS_LOWERCASE_VALUE writer.closeTag("w:t"); } - + /** * Word have extra limitation on text in run: * a. it must following xml format. @@ -746,6 +759,16 @@ protected void writeField( boolean isStart, IStyle style, String fontName ) writer.closeTag( "w:r" ); } + protected void writeFieldSeparator( IStyle style, String fontName ) + { + writer.openTag( "w:r" ); + writeFieldRunProperties( style, fontName ); + writer.openTag( "w:fldChar" ); + writer.attribute( "w:fldCharType", "separate" ); + writer.closeTag( "w:fldChar" ); + writer.closeTag( "w:r" ); + } + public void writeColumn( int[] cols ) { // unit: twips @@ -769,7 +792,7 @@ public void writeColumn( int[] cols ) */ public void startTableRow( double height, boolean isHeader, - boolean repeatHeader, boolean fixedLayout ) + boolean repeatHeader, boolean fixedLayout, boolean cantSplit ) { writer.openTag( "w:tr" ); @@ -793,6 +816,11 @@ public void startTableRow( double height, boolean isHeader, String headerOnOff = repeatHeader ? "on" : "off"; writeAttrTag( "w:tblHeader", headerOnOff ); } + + if (cantSplit) { + writer.openTag("w:cantSplit"); + writer.closeTag("w:cantSplit"); + } writer.closeTag( "w:trPr" ); } @@ -862,9 +890,15 @@ public void writeSpanCell( SpanInfo info ) public void endTableCell( boolean empty ) { - endTableCell( empty, false ); + // The resulting doc looks more sane than with the original code + // endTableCell( empty, false ); + // because an empty table cell now contains the "cell marker" (a bit like a small o). + // and enables the user to tab into the cell and enter text directly; + // whereas with the old code, the cell was completely empty and the text caret + // could only be placed into the cell using a mouse double-click. + endTableCell( empty, true ); } - + public void endTableCell( boolean empty, boolean inForeign ) { @@ -912,7 +946,7 @@ public void insertEmptyParagraphInForeign( ) writer.openTag("w:p"); writer.closeTag("w:p"); } - + public void insertHiddenParagraph( ) { writer.openTag( "w:p" ); @@ -1042,6 +1076,7 @@ protected int getImageID( ) return imageId++; } + @SuppressWarnings("deprecation") private void writeTextInParagraph( int type, String txt, IStyle style, String fontFamily, HyperlinkInfo info, int paragraphWidth, boolean runIsRtl ) @@ -1154,7 +1189,31 @@ public void writeTextInRun( int type, String txt, IStyle style, if ( isField ) { - writeAutoText( type ); + if (!(type == AbstractEmitterImpl.CUSTOM_FIELD)) + writeAutoText( type ); + else{ + writeSimpleField( txt ); + writer.closeTag( "w:r" ); + writeFieldSeparator(style, fontFamily); + writer.openTag( "w:r" ); + writer.openTag( "w:rPr" ); + writeRunProperties( style, fontFamily, info ); + if ( isInline ) + { + writeAlign( style.getTextAlign( ), direction ); + writeBackgroundColor( style.getBackgroundColor( ) ); + writePosition( style.getVerticalAlign( ), style + .getProperty( StyleConstants.STYLE_FONT_SIZE ) ); + writeRunBorders( style ); + } + if ( !isField && runIsRtl ) + { + writer.openTag( "w:rtl" ); + writer.closeTag( "w:rtl" ); + } + writer.closeTag( "w:rPr" ); + writeString( txt, style ); + } } else { @@ -1175,10 +1234,9 @@ public void writeTextInRun( int type, String txt, IStyle style, } closeHyperlink( info ); } - /** * function emulate the overflow hidden behavior on table cell - * + * * @param text * String to check * @param style @@ -1218,10 +1276,10 @@ public String cropOverflowString( String text, IStyle style, sb.append( cropOverflowWord( text, fm, cellWidthInPointAdv ) ); return sb.toString( ); } - + /** * crop words according to the given container point advance - * + * * @param text * it is a given word * @param fm @@ -1287,7 +1345,32 @@ public void writeTextInRun( int type, String txt, IStyle style, if ( isField ) { - writeAutoText( type ); + if (!(type == AbstractEmitterImpl.CUSTOM_FIELD)) + writeAutoText( type ); + else{ + writeSimpleField( txt ); + writer.closeTag( "w:r" ); + writeFieldSeparator(style, fontFamily); + writer.openTag( "w:r" ); + writer.openTag( "w:rPr" ); + writeRunProperties( style, fontFamily, info ); + if ( isInline ) + { + writeAlign( textAlign, direction ); + writeBackgroundColor( style.getBackgroundColor( ) ); + writePosition( style.getVerticalAlign( ), style + .getProperty( StyleConstants.STYLE_FONT_SIZE ) ); + writeRunBorders( style ); + } + if ( !isField && runIsRtl ) + { + writer.openTag( "w:rtl" ); + writer.closeTag( "w:rtl" ); + } + writer.closeTag( "w:rPr" ); + writeString( txt, style ); + } + } else { @@ -1457,4 +1540,9 @@ private int getLineId( ) { return lineId++; } + + public void writeEmptyElement(String tag) { + writer.openTag(tag); + writer.closeTag(tag); + } } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java index 063d0add0d4..47b528ac7b9 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java @@ -195,7 +195,7 @@ private void writeCoreProperties( String creator, String title, } /** - * + * * @param data * image data * @param height @@ -371,7 +371,7 @@ protected void writeFont( String fontFamily ) writer.attribute( "w:cs", fontFamily ); writer.closeTag( "w:rFonts" ); } - + protected void writeFontStyle( IStyle style ) { String val = WordUtil.removeQuote( style.getFontStyle( ) ); @@ -495,7 +495,7 @@ private void drawDocumentBackgroundColor( String data ) public void startTableRow( double height ) { - startTableRow( height, false, false, false ); + startTableRow( height, false, false, false, false ); } public void startPage( ) @@ -518,17 +518,18 @@ public void end( ) public void startHeader( boolean showHeaderOnFirst, int headerHeight, int headerWidth ) { - writer.openTag( "w:hdr" ); - if ( showHeaderOnFirst ) + if ( !showHeaderOnFirst ) { + writer.openTag( "w:hdr" ); writer.attribute( "w:type", "first" ); writer.openTag( "w:p" ); writer.openTag( "w:r" ); writer.closeTag( "w:r" ); writer.closeTag( "w:p" ); + writer.closeTag("w:hdr"); } - else - writer.attribute( "w:type", "odd" ); + writer.openTag( "w:hdr" ); + writer.attribute( "w:type", "odd" ); startHeaderFooterContainer( headerHeight, headerWidth ); } @@ -538,10 +539,14 @@ public void endHeader( ) writer.closeTag( "w:hdr" ); } - public void startFooter( int footerHeight, int footerWidth ) + public boolean mustCloneFooter( ) { + return true; + } + + public void startFooter( boolean isFirstPage, int footerHeight, int footerWidth ) { writer.openTag( "w:ftr" ); - writer.attribute( "w:type", "odd" ); + writer.attribute( "w:type", (isFirstPage ? "first" : "odd") ); startHeaderFooterContainer( footerHeight, footerWidth ); } @@ -555,7 +560,7 @@ public void writeTOC( String tocText, int level ) { writeTOC( tocText, null, level, false ); } - + public void writeTOC( String tocText, String color, int level, boolean middleInline ) { @@ -643,7 +648,7 @@ protected void writeIndent( int textIndent ) writer.attribute( "w:first-line", textIndent ); writer.closeTag( "w:ind" ); } - + protected void writeIndent( int leftMargin, int rightMargin, int textIndent ) { if ( leftMargin == 0 && rightMargin == 0 && textIndent == 0 ) @@ -655,16 +660,17 @@ protected void writeIndent( int leftMargin, int rightMargin, int textIndent ) { writer.attribute( "w:left", leftMargin ); } - + if ( rightMargin != 0 ) { writer.attribute( "w:right", rightMargin ); } - + if ( textIndent != 0 ) { writer.attribute( "w:first-line", textIndent ); } writer.closeTag( "w:ind" ); } + } diff --git a/engine/org.eclipse.birt.report.engine.ooxml/src/org/eclipse/birt/report/engine/ooxml/constants/NameSpaces.java b/engine/org.eclipse.birt.report.engine.ooxml/src/org/eclipse/birt/report/engine/ooxml/constants/NameSpaces.java index f525c2c5558..40b5197847e 100644 --- a/engine/org.eclipse.birt.report.engine.ooxml/src/org/eclipse/birt/report/engine/ooxml/constants/NameSpaces.java +++ b/engine/org.eclipse.birt.report.engine.ooxml/src/org/eclipse/birt/report/engine/ooxml/constants/NameSpaces.java @@ -35,5 +35,13 @@ public class NameSpaces public static final String SPREADSHEETML = "http://schemas.openxmlformats.org/spreadsheetml/2006/main"; public static final String PACKAGE_RELATIONSHIPS = "http://schemas.openxmlformats.org/package/2006/relationships"; public static final String CONTENT_TYPES = "http://schemas.openxmlformats.org/package/2006/content-types"; + public static final String MARKUP_COMPATIBILITY = "http://schemas.openxmlformats.org/markup-compatibility/2006"; + public static final String W10 = "urn:schemas-microsoft-com:office:word"; + public static final String W14 = "http://schemas.microsoft.com/office/word/2010/wordml"; + public static final String W15 = "http://schemas.microsoft.com/office/word/2012/wordml"; + public static final String W16 = "http://schemas.microsoft.com/office/word/2018/wordml"; + public static final String W16CID = "http://schemas.microsoft.com/office/word/2016/wordml/cid"; + public static final String W16SE = "http://schemas.microsoft.com/office/word/2015/wordml/symex"; + public static final String W16CEX = "http://schemas.microsoft.com/office/word/2018/wordml/cex"; } diff --git a/engine/org.eclipse.birt.report.engine/META-INF/MANIFEST.MF b/engine/org.eclipse.birt.report.engine/META-INF/MANIFEST.MF index ea6531ad298..9794e66d4cb 100644 --- a/engine/org.eclipse.birt.report.engine/META-INF/MANIFEST.MF +++ b/engine/org.eclipse.birt.report.engine/META-INF/MANIFEST.MF @@ -50,6 +50,7 @@ Export-Package: org.eclipse.birt.report.engine.adapter, org.eclipse.birt.report.engine.internal.index.v0, org.eclipse.birt.report.engine.internal.index.v1, org.eclipse.birt.report.engine.internal.index.v2, + org.eclipse.birt.report.engine.internal.presentation, org.eclipse.birt.report.engine.internal.util, org.eclipse.birt.report.engine.ir, org.eclipse.birt.report.engine.layout, diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/api/DocxRenderOption.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/api/DocxRenderOption.java index 57af5926f7c..a76a24ae39e 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/api/DocxRenderOption.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/api/DocxRenderOption.java @@ -19,6 +19,8 @@ public class DocxRenderOption extends RenderOption public static final String OPTION_COMPRESSION_MODE = "BEST_COMPRESSION"; //$NON-NLS-1$ public static final String OPTION_EMBED_HTML = "EmbedHtml"; + + public static final String OPTION_WORD_VERSION = "WordVersion"; @SuppressWarnings("unchecked") public void setCompressionMode( CompressionMode compressionMode ) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/AreaFactory.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/AreaFactory.java index c5e5e46e008..78ed931d0d1 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/AreaFactory.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/AreaFactory.java @@ -193,7 +193,7 @@ protected AbstractArea createNewArea( ContainerArea parent, { area = new BlockContainerArea( parent, context, content ); } - if ( context.isFixedLayout( ) && context.getEngineTaskType( ) == IEngineTask.TASK_RUN ) + if ( context.isFixedLayout( ) ) { area.setPageBreakInside( IStyle.AVOID_VALUE ); } diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/BlockContainerArea.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/BlockContainerArea.java index 839c0904ea2..d206aa7fd10 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/BlockContainerArea.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/BlockContainerArea.java @@ -16,6 +16,7 @@ import java.util.LinkedList; import java.util.List; import java.util.ListIterator; +import java.util.logging.Logger; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.content.IContent; @@ -57,6 +58,33 @@ public BlockContainerArea( ) public void add( AbstractArea area ) { + if (area instanceof ContainerArea) { + ContainerArea c = (ContainerArea)area; + if (c.getContent() != null && c.getContent().getUserProperties() != null) { + // Variant 1 (not suitable for MS Word). The property has to be set for a + // Label, a Dynamic Text Item or similar (not for a table row or cell). + // A possible structure: + // Table + // Header + // Details + // Footer Row with Dynamic Text Item with FixYPosition=20cm. + // Footer Row with data which should be displayed starting at y=20cm. + String fixYPosition = (String)c.getContent().getUserProperties().get("FixYPosition"); + if (fixYPosition != null) { + Logger log = Logger.getLogger(getClass().getName()); + log.info("FixYPosition(a)=" + fixYPosition); + int grenze = getDimensionValue(fixYPosition); + int absBP = getAbsoluteBP(); + log.info("Detected UserProperty FixYPosition=" + grenze + ", currentBP=" + currentBP + ", absBP=" + absBP); + if (absBP > grenze) { + log.fine("Page break required"); + } else if (absBP < grenze) { + log.info("Increment currentBP"); + currentBP += (grenze - absBP); + } + } + } + } children.add( area ); area.setAllocatedPosition( currentIP + getOffsetX( ), currentBP + getOffsetY( ) ); diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ContainerArea.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ContainerArea.java index 19a0ae74327..e1461c1e572 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ContainerArea.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ContainerArea.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.logging.Level; +import java.util.logging.Logger; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.content.IContent; @@ -25,6 +26,7 @@ import org.eclipse.birt.report.engine.executor.ExecutionContext; import org.eclipse.birt.report.engine.ir.DimensionType; import org.eclipse.birt.report.engine.ir.EngineIRConstants; +import org.eclipse.birt.report.engine.ir.ReportElementDesign; import org.eclipse.birt.report.engine.layout.PDFConstants; import org.eclipse.birt.report.engine.layout.pdf.util.PropertyUtil; import org.eclipse.birt.report.engine.nLayout.LayoutContext; @@ -348,6 +350,50 @@ public void relayout( ) // FIXME to implement } + // copied from AbstractLM + public int getDimensionValue( String d ) + { + + if ( d == null ) + { + return 0; + } + try + { + if ( d.endsWith( "in" ) || d.endsWith( "in" ) ) //$NON-NLS-1$ //$NON-NLS-2$ + { + return (int) ( ( Float.valueOf( d + .substring( 0, d.length( ) - 2 ) ).floatValue( ) ) * 72000.0f ); + } + else if ( d.endsWith( "cm" ) || d.endsWith( "CM" ) ) //$NON-NLS-1$//$NON-NLS-2$ + { + return (int) ( ( Float.valueOf( d + .substring( 0, d.length( ) - 2 ) ).floatValue( ) ) * 72000.0f / 2.54f ); + } + else if ( d.endsWith( "mm" ) || d.endsWith( "MM" ) ) //$NON-NLS-1$ //$NON-NLS-2$ + { + return (int) ( ( Float.valueOf( d + .substring( 0, d.length( ) - 2 ) ).floatValue( ) ) * 7200.0f / 2.54f ); + } + else if ( d.endsWith( "px" ) || d.endsWith( "PX" ) ) //$NON-NLS-1$//$NON-NLS-2$ + { + return (int) ( ( Float.valueOf( d + .substring( 0, d.length( ) - 2 ) ).floatValue( ) ) / 96.0f * 72000.0f );// set + // as + // 96dpi + } + else // angenommen werden pt + { + return (int) ( ( Float.valueOf( d ).floatValue( ) ) ); + } + } + catch ( NumberFormatException ex ) + { + logger.log( Level.WARNING, ex.getLocalizedMessage( ) ); + return 0; + } + } + protected void checkDisplayNone( ) { if ( context.isDisplayNone( ) ) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHTMLRegionLayout.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHTMLRegionLayout.java index 3efacae76f6..4994cce931b 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHTMLRegionLayout.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHTMLRegionLayout.java @@ -77,13 +77,12 @@ public void layout( ) throws BirtException class ForeignHTMLRegionLayoutEngine extends LayoutEngine { - protected ContainerArea root; + public ForeignHTMLRegionLayoutEngine( ContainerArea container, LayoutContext context ) { super( context ); current = container; - root = container; if ( parent != null ) { current.setMaxAvaWidth( parent.getMaxAvaWidth( ) ); @@ -93,20 +92,10 @@ public ForeignHTMLRegionLayoutEngine( ContainerArea container, public void layout( IContent content ) throws BirtException { current.initialize( ); - //if width is specified. set MAX width - if (current.specifiedWidth > 0) - { - current.setMaxAvaWidth(current.specifiedWidth); - } if ( current.getSpecifiedHeight( ) <= 0 ) { visitChildren( content, this ); } - while (current != root) - { - current.close(); - current = current.getParent(); - } current.close( ); } } diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHtmlRegionArea.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHtmlRegionArea.java index 716c244495b..ccee5459003 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHtmlRegionArea.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHtmlRegionArea.java @@ -54,7 +54,7 @@ public void close( ) throws BirtException } else { - height = currentBP + localProperties.getPaddingBottom( ); + height = currentBP; } if ( null != parent ) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/RowArea.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/RowArea.java index 52142f1714a..5a89500af5c 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/RowArea.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/RowArea.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Iterator; +import java.util.logging.Logger; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.content.IContent; @@ -204,6 +205,32 @@ public void add( AbstractArea area ) { cArea.flipPositionForRtl( ); } + // Variante 2 . Die Property muss bei einer Cell gesetzt werden. + // Eine mögliche Struktur: + // Tabelle + // Header + // Details + // Footer-Row mit Cell mit VerticalTab=20cm. + // Footer-Row mit Daten die ab y=20cm ausgegeben werden sollen. + if (cArea.getContent()!=null && cArea.getContent().getUserProperties() != null) { + String verticalTab = (String)cArea.getContent().getUserProperties().get("VerticalTab"); + if (verticalTab != null) { + Logger log = Logger.getLogger(getClass().getName()); + log.info("VerticalTab=" + verticalTab); + int grenze = getDimensionValue(verticalTab); + log.info("Detected UserProperty VerticalTab=" + grenze + ", currentBP=" + currentBP); + int absBP = getAbsoluteBP(); + log.info("absBP=" + absBP); + if (absBP > grenze) { + log.warning("Page break required"); + } else if (absBP < grenze) { + log.info("Setting paddingTop and allocatedHeight..."); + cArea.localProperties.paddingTop += (grenze - absBP); + cArea.setAllocatedHeight(cArea.getAllocatedHeight() + (grenze - absBP)); + } + } + } + } public void addChild( IArea area ) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TableLayout.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TableLayout.java index e437bd62e2b..4687fb1e906 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TableLayout.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TableLayout.java @@ -44,13 +44,13 @@ public class TableLayout protected int startCol; protected int endCol; - + protected RowArea unresolvedRow; - + private RowArea currentRow; - + private boolean isRTL = false; - + public TableLayout( ITableContent tableContent, TableLayoutInfo layoutInfo, int startCol, int endCol ) { @@ -72,7 +72,7 @@ public void setUnresolvedRow( RowArea row ) unresolvedRow = row; } } - + public RowArea getNextRow(RowArea row) { int index = rows.indexOf( row ); @@ -82,7 +82,7 @@ public RowArea getNextRow(RowArea row) } return null; } - + protected int resolveBottomBorder( CellArea cell ) { IStyle tableStyle = tableContent.getComputedStyle( ); @@ -141,7 +141,7 @@ public void remove( TableArea table ) } rows.resetCursor( ); } - + public void clear() { rows.clear( ); @@ -151,7 +151,7 @@ public void clear() protected IStyle getLeftCellContentStyle( RowArea lastRow, CellArea currentCell ) { RowArea currentRow = (RowArea) currentCell.getParent( ); - int columnID = currentCell.getColumnID( ); + int columnID = currentCell.getColumnID( ); CellArea cell = null; // if ( isRTL ) // { @@ -188,7 +188,7 @@ protected IStyle getLeftCellContentStyle( RowArea lastRow, CellArea currentCell /** * resolve cell border conflict - * + * * @param cellArea */ public void resolveBorderConflict( CellArea cellArea, boolean isFirst ) @@ -242,7 +242,7 @@ public void resolveBorderConflict( CellArea cellArea, boolean isFirst ) rowStyle, columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -258,7 +258,7 @@ public void resolveBorderConflict( CellArea cellArea, boolean isFirst ) null, columnStyle, null ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -278,7 +278,7 @@ public void resolveBorderConflict( CellArea cellArea, boolean isFirst ) rowStyle, columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -295,7 +295,7 @@ else if ( !isRTL ) cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -316,7 +316,7 @@ else if ( !isRTL ) columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -334,7 +334,7 @@ else if ( isRTL preColumnStyle, cellContentStyle, leftCellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -354,7 +354,7 @@ else if ( isRTL rowStyle, topCellStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -370,7 +370,7 @@ else if ( isRTL null, topCellStyle, null ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -390,7 +390,7 @@ else if ( isRTL rowStyle, columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -408,7 +408,7 @@ else if ( !isRTL ) cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -428,7 +428,7 @@ else if ( !isRTL ) columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -446,7 +446,7 @@ else if ( isRTL preColumnStyle, cellContentStyle, leftCellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -459,7 +459,7 @@ else if ( isRTL /** * get column style - * + * * @param columnID * @return */ @@ -586,7 +586,7 @@ public void reset( TableArea table ) /** * When pagination happens, if drop cells should be finished by force, we * need to end these cells and vertical align for them. - * + * */ public int resolveAll( RowArea row ) { @@ -610,7 +610,7 @@ public int resolveAll( RowArea row ) { DummyCell dummyCell = (DummyCell) cell; int delta = dummyCell.getDelta( ); - //FIXME + //FIXME //height = Math.max( height, dummyCell.getCell( ).getHeight( ) - delta ); } else @@ -738,7 +738,7 @@ public void addRow( RowArea rowArea, boolean isFixedLayout ) updateRow( rowArea, isFixedLayout ); rows.add( rowArea ); } - + protected boolean isUnresolved(RowArea row) { if ( !row.finished ) @@ -755,8 +755,8 @@ protected boolean isUnresolved(RowArea row) } return false; } - - + + public void setMergeUnresolvedRowHint( ) { @@ -786,7 +786,7 @@ public void setMergeUnresolvedRowHint( ) } } } - + protected boolean isSpecifiedHeight( RowArea area ) { IContent content = area.getContent( ); @@ -802,7 +802,7 @@ protected boolean isSpecifiedHeight( RowArea area ) } return false; } - + private boolean isEmptyRow( RowArea rowArea ) { for ( int i = startCol; i <= endCol; i++ ) @@ -820,7 +820,7 @@ private boolean isEmptyRow( RowArea rowArea ) * 1) Creates row wrapper. 2) For the null cell in the row wrapper, fills * the relevant position with dummy cell or empty cell. 3) Updates the * height of the row and the cells in the row. - * + * * @param rowArea * current rowArea. */ @@ -847,8 +847,7 @@ private void updateRow( RowArea rowArea, boolean isFixedLayout ) lastRow = (RowArea) rows.getCurrent( ); } currentRow = rowArea; - // Do not use specified height if row is empty to avoid endless page break - int sheight = isEmptyRow( rowArea ) ? 0 : rowArea.getSpecifiedHeight( ); + int sheight = rowArea.getSpecifiedHeight( ); int height = sheight; /* * In this case, the row should be the first row of new page. 1. this @@ -926,7 +925,7 @@ private void updateRow( RowArea rowArea, boolean isFixedLayout ) { cell = createEmptyCell( null, i, rowArea ); } - + } if ( cell != null ) { @@ -949,7 +948,7 @@ private void updateRow( RowArea rowArea, boolean isFixedLayout ) } updateRowHeight( rowArea, height, isFixedLayout ); } - + private CellArea createEmptyCell( CellArea upperCell, int columnId, RowArea row ) { @@ -961,7 +960,7 @@ private CellArea createEmptyCell( CellArea upperCell, cellContent = (ICellContent) upperCell.getContent( ); rowSpan = upperCell.getRowSpan( ) - 1; } - + if ( cellContent == null ) { cellContent = tableContent.getReportContent( ) @@ -983,7 +982,7 @@ private CellArea createEmptyCell( CellArea upperCell, emptyCell = new CellArea( ); emptyCell.content = cellContent; } - + //clear border BoxStyle bs = emptyCell.getBoxStyle( ); if ( bs != BoxStyle.DEFAULT ) @@ -991,16 +990,16 @@ private CellArea createEmptyCell( CellArea upperCell, bs.setRightBorder( null ); bs.setBottomBorder( null ); } - + emptyCell.setHeight( 0 ); emptyCell.setRowSpan( rowSpan ); - + CellArea originalCell = upperCell; if ( upperCell instanceof DummyCell ) { originalCell = ( (DummyCell) upperCell ).getCell( ); } - + CellArea leftSideCellArea = null; if ( emptyCellColID > startCol ) { @@ -1039,10 +1038,10 @@ private CellArea createEmptyCell( CellArea upperCell, emptyCell.isDummy = true; return emptyCell; } - + /** * Creates dummy cell and updates its delta value. - * + * * @param upperCell * the upper cell. * @return the created dummy cell. @@ -1081,7 +1080,7 @@ private DummyCell createDummyCell( CellArea upperCell, RowArea lastRow ) /** * Updates the row height and the height of the cells in the row. - * + * * @param rowArea * @param height */ @@ -1136,13 +1135,13 @@ public CursorableList getRows( ) { return rows; } - + /* //---------debug - - + + // a method for debugging. - + public static void getInfo( IArea area, int offsetX, int offsetY ) { if( area instanceof CellArea ) @@ -1190,9 +1189,9 @@ private static void traverse( IArea area, int offsetX, int offsetY ) offsetX = offsetX - area.getX( ); offsetY = offsetY - area.getY( ); } - -*/ - - + +*/ + + } diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TextCompositor.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TextCompositor.java index 337596a7a84..523888e9aed 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TextCompositor.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TextCompositor.java @@ -335,16 +335,18 @@ private void addWordIntoTextArea( TextArea textArea, Word word ) wordVestige = null; insertFirstExceedWord = false; } - if ( isNewLine && context.isEnableWordbreak( )) + if ( isNewLine && textArea.isEmpty( ) ) { - doWordBreak( word.getValue( ), textArea ); - } - else if ( isNewLine && textArea.isEmpty( ) ) - { - // If width of a word is larger than the max line width, add - // it into the line directly. - addWord( textArea, textLength, wordWidth ); - + if ( context.isEnableWordbreak( ) ) + { + doWordBreak( word.getValue( ), textArea ); + } + else + { + // If width of a word is larger than the max line width, add + // it into the line directly. + addWord( textArea, textLength, wordWidth ); + } } else { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedExecutorManager.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedExecutorManager.java new file mode 100644 index 00000000000..2dfd846b429 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedExecutorManager.java @@ -0,0 +1,36 @@ +package uk.co.spudsoft.birt.emitters.bugfix; + +import org.eclipse.birt.report.engine.executor.ExecutorManager; +import org.eclipse.birt.report.engine.executor.ReportExecutor; +import org.eclipse.birt.report.engine.executor.ReportItemExecutor; + +public class FixedExecutorManager extends ExecutorManager { + + public FixedExecutorManager(ReportExecutor executor) { + super(executor); + } + + @Override + protected ReportItemExecutor getItemExecutor(int type) { + if ((type == LISTITEM)||(type == TABLEITEM)) { + assert ( type >= 0 ) && ( type < NUMBER ); + if ( !freeList[type].isEmpty( ) ) + { + // the free list is non-empty + return (ReportItemExecutor) freeList[type].remove( ); + } + if(type == LISTITEM) { + return new FixedListItemExecutor( this ); + } else { + return new FixedTableItemExecutor( this ); + } + } else { + return super.getItemExecutor(type); + } + } + + + + + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedListItemExecutor.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedListItemExecutor.java new file mode 100644 index 00000000000..43e0e69ae34 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedListItemExecutor.java @@ -0,0 +1,23 @@ +package uk.co.spudsoft.birt.emitters.bugfix; + +import org.eclipse.birt.report.engine.content.IContent; +import org.eclipse.birt.report.engine.executor.ExecutorManager; +import org.eclipse.birt.report.engine.executor.ListItemExecutor; +import org.eclipse.birt.report.engine.ir.ListingDesign; +import org.eclipse.birt.report.engine.ir.ReportElementDesign; + +public class FixedListItemExecutor extends ListItemExecutor { + + public FixedListItemExecutor(ExecutorManager manager) { + super(manager); + } + + @Override + protected void initializeContent(ReportElementDesign design, + IContent content) { + super.initializeContent(design, content); + pageBreakInterval = ( (ListingDesign) design ) + .getPageBreakInterval( ); + } + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java index 15004abda9a..f2d342e52b0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java @@ -1,12 +1,12 @@ /************************************************************************************* * Copyright (c) 2011, 2012, 2013 James Talbut. * jim-emitters@spudsoft.co.uk - * - * All rights reserved. This program and the accompanying materials + * + * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * James Talbut - Initial implementation. ************************************************************************************/ @@ -84,7 +84,7 @@ public class FixedRenderTask extends EngineTask implements IRenderTask protected ITOCReader tocReader; protected boolean designLoaded = false; protected boolean variablesLoaded = false; - + //the flag of render page by page protected boolean PDFRenderPageByPage = true; @@ -115,7 +115,7 @@ public FixedRenderTask( ReportEngine engine, IReportRunnable runnable, this.reportRunnable = runnable; initRenderTask(); } - + protected void initRenderTask() { executionContext.setFactoryMode( false ); @@ -146,7 +146,7 @@ protected void initRenderTask() } } - + /** * Loads parameters and global variables from report document. Since the * application context is not available and application class loader can't @@ -198,7 +198,7 @@ protected void loadReportVariable( ) throws IOException /* * (non-Javadoc) - * + * * @see org.eclipse.birt.report.engine.api.IRenderTask#render(long) */ public void render( long pageNumber ) throws EngineException @@ -239,7 +239,7 @@ public void render( InstanceID iid ) throws EngineException /* * (non-Javadoc) - * + * * @see org.eclipse.birt.report.engine.api.IRenderTask#render() */ public void render( ) throws EngineException @@ -280,7 +280,7 @@ public void render( ) throws EngineException } updateRtLFlag( ); - + ReportDesignHandle design = executionContext.getReportDesign( ); if ( DesignChoiceConstants.REPORT_LAYOUT_PREFERENCE_FIXED_LAYOUT .equals( design.getLayoutPreference( ) ) ) @@ -345,7 +345,7 @@ public long getPageCount( ) throws EngineException /* * (non-Javadoc) - * + * * @see org.eclipse.birt.report.engine.api.IRenderTask#render() */ public void setPageNumber( long pageNumber ) throws EngineException @@ -450,7 +450,7 @@ protected boolean needPagedExecutor(List pageSequences ) { return true; } - + // the output pages is sequential or there is no page sequence, // in this case, we can output the report content as a whole and // the HTML layout engine may re-paginate the content into @@ -579,7 +579,7 @@ public void render( ) throws Exception pagination, renderOptions ); layoutEngine.setLocale( executionContext.getLocale( ) ); - + ReportDesignHandle design = executionContext.getReportDesign( ); if ( DesignChoiceConstants.REPORT_LAYOUT_PREFERENCE_FIXED_LAYOUT .equals( design.getLayoutPreference( ) ) ) @@ -593,7 +593,7 @@ public void render( ) throws Exception emitter, renderOptions, executionContext, getDocumentTotalPage( ) ); - + emitter = pdfEmitter; initializeContentEmitter( emitter ); } @@ -875,7 +875,7 @@ public ITreeNode getRawTOCTree( ) } return tocTree; } - + public long getTotalPage( ) throws EngineException { LogicalPageSequence visiblePages = loadVisiblePages( ); @@ -885,7 +885,7 @@ public long getTotalPage( ) throws EngineException } return reportDocument.getPageCount( ); } - + @SuppressWarnings("rawtypes") public HashMap getParameterValues( ) { @@ -1011,7 +1011,7 @@ private void unloadVisiblePages( ) visiblePageLoaded = false; logicalPageSequence = null; } - + protected IReportExecutor createRenderExtensionExecutor( IReportExecutor executor ) throws EngineException { @@ -1037,5 +1037,5 @@ protected IReportExecutor createRenderExtensionExecutor( } return executor; } - + } \ No newline at end of file diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedReportExecutor.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedReportExecutor.java new file mode 100644 index 00000000000..eec2af2276a --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedReportExecutor.java @@ -0,0 +1,14 @@ +package uk.co.spudsoft.birt.emitters.bugfix; + +import org.eclipse.birt.report.engine.executor.ExecutionContext; +import org.eclipse.birt.report.engine.executor.ReportExecutor; + +public class FixedReportExecutor extends ReportExecutor { + + public FixedReportExecutor(ExecutionContext context) { + super(context); + this.manager = new FixedExecutorManager( this ); + } + + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRunTask.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRunTask.java new file mode 100644 index 00000000000..c29ddf2cf34 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRunTask.java @@ -0,0 +1,401 @@ +/******************************************************************************* + * Copyright (c) 2004, 2008 Actuate Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Actuate Corporation - initial API and implementation + *******************************************************************************/ + +package uk.co.spudsoft.birt.emitters.bugfix; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.birt.core.archive.FileArchiveWriter; +import org.eclipse.birt.core.archive.FolderArchive; +import org.eclipse.birt.core.archive.FolderArchiveWriter; +import org.eclipse.birt.core.archive.IDocArchiveWriter; +import org.eclipse.birt.core.archive.compound.ArchiveWriter; +import org.eclipse.birt.core.archive.compound.IArchiveFile; +import org.eclipse.birt.report.engine.api.EngineException; +import org.eclipse.birt.report.engine.api.IEngineTask; +import org.eclipse.birt.report.engine.api.IProgressMonitor; +import org.eclipse.birt.report.engine.api.IReportDocumentInfo; +import org.eclipse.birt.report.engine.api.IReportRunnable; +import org.eclipse.birt.report.engine.api.IRunTask; +import org.eclipse.birt.report.engine.api.impl.EngineTask; +import org.eclipse.birt.report.engine.api.impl.ReportDocumentConstants; +import org.eclipse.birt.report.engine.api.impl.ReportDocumentWriter; +import org.eclipse.birt.report.engine.api.impl.ReportEngine; +import org.eclipse.birt.report.engine.api.impl.ReportRunnable; +import org.eclipse.birt.report.engine.api.impl.RunStatusWriter; +import org.eclipse.birt.report.engine.data.dte.DocumentDataSource; +import org.eclipse.birt.report.engine.emitter.IContentEmitter; +import org.eclipse.birt.report.engine.executor.IReportExecutor; +import org.eclipse.birt.report.engine.i18n.MessageConstants; +import org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplciateReportExecutor; +import org.eclipse.birt.report.engine.internal.executor.emitter.ReportEmitterExecutor; +import org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportExecutor; +import org.eclipse.birt.report.engine.internal.presentation.ReportDocumentInfo; +import org.eclipse.birt.report.engine.presentation.ReportDocumentBuilder; +import org.eclipse.birt.report.model.api.ReportDesignHandle; +import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants; + +/** + * A task for running a report design to get a report document + */ +public class FixedRunTask extends EngineTask implements IRunTask +{ + + private String documentName; + private IDocArchiveWriter archiveWriter; + private ReportDocumentWriter writer; + private ReportDocumentBuilder documentBuilder; + private IArchiveFile archive; + + /** + * @param engine + * the report engine + * @param runnable + * the report runnable instance + */ + public FixedRunTask( ReportEngine engine, IReportRunnable runnable ) + { + super( engine, runnable, IEngineTask.TASK_RUN ); + executionContext.setFactoryMode( true ); + executionContext.setPresentationMode( false ); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.birt.report.engine.api.IRunTask#run(java.lang.String) + */ + public void run( String reportDocName ) throws EngineException + { + try + { + switchToOsgiClassLoader( ); + changeStatusToRunning( ); + if ( reportDocName == null || reportDocName.length( ) == 0 ) + { + throw new EngineException( + MessageConstants.REPORT_DOCNAME_NOT_SPECIFIED_ERROR ); //$NON-NLS-1$ + } + this.documentName = reportDocName; + doRun( ); + } + finally + { + changeStatusToStopped( ); + switchClassLoaderBack( ); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.birt.report.engine.api.IRunTask#run(org.eclipse.birt.core.archive.IDocumentArchive) + */ + public void run( IDocArchiveWriter archive ) throws EngineException + { + try + { + switchToOsgiClassLoader( ); + changeStatusToRunning( ); + if ( archive == null ) + { + throw new EngineException( + MessageConstants.REPORT_ARCHIVE_ERROR ); //$NON-NLS-1$ + } + this.archiveWriter = archive; + doRun( ); + } + finally + { + changeStatusToStopped( ); + switchClassLoaderBack( ); + } + } + + private void openArchive( ) throws IOException + { + if ( archive != null ) + { + archiveWriter = new ArchiveWriter( archive ); + return; + } + File file = new File( documentName ); + if ( file.exists( ) ) + { + if ( file.isDirectory( ) ) + { + archiveWriter = new FolderArchiveWriter( documentName ); + } + else + { + archiveWriter = new FileArchiveWriter( documentName ); + } + } + else + { + if ( documentName.endsWith( "\\" ) || documentName.endsWith( "/" ) ) + { + archiveWriter = new FolderArchiveWriter( documentName ); + } + else + { + archiveWriter = new FileArchiveWriter( documentName ); + } + } + } + + private void openReportDocument( ) throws EngineException + { + try + { + if ( archiveWriter == null ) + { + openArchive( ); + } + String[] exts = executionContext.getEngineExtensions( ); + writer = new ReportDocumentWriter( engine, archiveWriter, exts ); + executionContext.setReportDocWriter( writer ); + DocumentDataSource ds = executionContext.getDataSource( ); + if ( ds != null) + { + //avoid the auto-generated bookmark will be changed at generation time + if ( ds.getInstanceID( ) != null ) + { + executionContext + .setReportletBookmark( ds.getInstanceID( ).getComponentID( ), ds.getBookmark( ) ); + } + if( ds.isReportletDocument( )) + { + writer.saveReportletDocument( ds.getBookmark( ), ds + .getInstanceID( ) ); + } + else + { + writer.removeReportletDoucment( ); + } + } + } + catch ( IOException ex ) + { + throw new EngineException( + MessageConstants.REPORT_ARCHIVE_OPEN_ERROR, ex ); + } + } + + private void closeReportDocument( ) + { + writer.close( ); + writer = null; + archive = null; + archiveWriter = null; + documentName = null; + } + + /** + * runs the report + * + * @throws EngineException + * throws exception when there is a run error + */ + protected void doRun( ) throws EngineException + { + if ( progressMonitor != null ) + { + progressMonitor.onProgress( IProgressMonitor.START_TASK, TASK_RUN ); + } + loadDataSource( ); + loadScripts( ); + doValidateParameters( ); + ReportDesignHandle design = executionContext.getReportDesign( ); + if ( DesignChoiceConstants.REPORT_LAYOUT_PREFERENCE_FIXED_LAYOUT + .equals( design.getLayoutPreference( ) ) ) + { + executionContext.setFixedLayout( true ); + setupRenderOption( ); + updateRtLFlag( ); + } + initReportVariable( ); + loadDesign( ); + prepareDesign( ); + startFactory( ); + openReportDocument( ); + ArrayList errList = new ArrayList( ); + try + { + ReportRunnable newRunnable = writer.saveDesign( executionContext + .getRunnable( ), executionContext.getOriginalRunnable( ) ); + executionContext.updateRunnable( newRunnable ); + writer.saveReportIR( executionContext.getReport( ) ); + writer.saveParamters( inputValues ); + + executionContext.openDataEngine( ); + + synchronized(this) + { + if (!executionContext.isCanceled( )) + { + documentBuilder = new ReportDocumentBuilder( + executionContext, writer ); + } + } + + if ( documentBuilder != null ) + { + if ( pageHandler != null ) + { + documentBuilder.setPageHandler( pageHandler ); + } + + IContentEmitter emitter = documentBuilder.getContentEmitter( ); + IReportExecutor executor = new FixedReportExecutor( executionContext ); + // prepare the extension executor + executor = createReportExtensionExecutor( executor ); + executor = new ReportEmitterExecutor( executor, emitter ); + executor = new SuppressDuplciateReportExecutor( executor ); + if ( executionContext.isFixedLayout( ) ) + { + executor = new LocalizedReportExecutor( executionContext, + executor ); + } + executionContext.setExecutor( executor ); + + initializeContentEmitter( emitter ); + documentBuilder.build( ); + } + + executionContext.closeDataEngine( ); + } + catch ( Throwable t ) + { + errList.add( t.getLocalizedMessage( ) ); + handleFatalExceptions( t ); + } + finally + { + documentBuilder = null; + closeFactory(); + + List list = (List) executionContext + .getAllErrors( ); + if ( list != null ) + { + for ( Exception ex : list ) + { + errList.add( ex.getLocalizedMessage( ) ); + } + } + if ( !errList.isEmpty( ) ) + { + // status writer never throws out exception + RunStatusWriter statusWriter = new RunStatusWriter( + archiveWriter ); + statusWriter.writeRunTaskStatus( errList ); + statusWriter.close( ); + } + else + { + //TODO: need clear all related stream at the beginning of generation task + if ( archiveWriter + .exists( ReportDocumentConstants.RUN_STATUS_STREAM ) ) + { + archiveWriter + .dropStream( ReportDocumentConstants.RUN_STATUS_STREAM ); + } + } + + writer.savePersistentObjects( executionContext.getGlobalBeans( ) ); + writer.finish( ); + + // notify that the document has been finished + if ( pageHandler != null && !executionContext.isCanceled( ) ) + { + int totalPage = (int) executionContext.getTotalPage( ); + IReportDocumentInfo docInfo = new ReportDocumentInfo( + executionContext, totalPage, true ); + pageHandler.onPage( totalPage, true, docInfo ); + } + if ( progressMonitor != null ) + { + progressMonitor.onProgress( IProgressMonitor.END_TASK, TASK_RUN ); + } + closeReportDocument(); + } + } + + public void close( ) + { + super.close( ); + } + + /** + * @deprecated + */ + public void run( FolderArchive fArchive ) throws EngineException + { + try + { + changeStatusToRunning( ); + setDataSource( fArchive ); + run( (IDocArchiveWriter) fArchive ); + } + finally + { + changeStatusToStopped( ); + } + } + + public void cancel( ) + { + super.cancel( ); + if ( documentBuilder != null ) + { + documentBuilder.cancel( ); + } + } + + public void setMaxRowsPerQuery( int maxRows ) + { + executionContext.setMaxRowsPerQuery( maxRows ); + } + + public void enableProgressiveViewing( boolean enabled ) + { + executionContext.enableProgressiveViewing( enabled ); + } + + public void setReportDocument( IArchiveFile archive ) + { + this.archive = archive; + } + + public void setReportDocument( String name ) + { + documentName = name; + } + + public void run( ) throws EngineException + { + try + { + switchToOsgiClassLoader( ); + changeStatusToRunning( ); + doRun( ); + } + finally + { + changeStatusToStopped( ); + switchClassLoaderBack( ); + } + } +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedTableItemExecutor.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedTableItemExecutor.java new file mode 100644 index 00000000000..850168613fe --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedTableItemExecutor.java @@ -0,0 +1,23 @@ +package uk.co.spudsoft.birt.emitters.bugfix; + +import org.eclipse.birt.report.engine.content.IContent; +import org.eclipse.birt.report.engine.executor.ExecutorManager; +import org.eclipse.birt.report.engine.executor.TableItemExecutor; +import org.eclipse.birt.report.engine.ir.ListingDesign; +import org.eclipse.birt.report.engine.ir.ReportElementDesign; + +public class FixedTableItemExecutor extends TableItemExecutor { + + public FixedTableItemExecutor(ExecutorManager manager) { + super(manager); + } + + @Override + protected void initializeContent(ReportElementDesign design, + IContent content) { + super.initializeContent(design, content); + pageBreakInterval = ( (ListingDesign) design ) + .getPageBreakInterval( ); + } + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/AutoFilterTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/AutoFilterTest.java index 3d324f0cd8c..d9f45907c3e 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/AutoFilterTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/AutoFilterTest.java @@ -30,7 +30,6 @@ public class AutoFilterTest extends ReportRunner { @Test public void autoFilter() throws Exception { debug = false; - autoFilter = true; InputStream inputStream = runAndRenderReport("SideBySideMultiColumns.rptdesign", "xlsx"); assertNotNull(inputStream); try { @@ -63,7 +62,7 @@ public void autoFilter() throws Exception { XSSFName name = workbook.getName( XSSFName.BUILTIN_FILTER_DB ); assertEquals( 0, name.getSheetIndex() ); - assertEquals( "Sheet0!$A$1:$M$2", name.getRefersToFormula() ); + assertEquals( "Sheet0!$A$2:$M$124", name.getRefersToFormula() ); } finally { inputStream.close(); } @@ -123,7 +122,7 @@ public void autoFilterMultiTables() throws Exception { assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); Sheet sheet = workbook.getSheetAt(0); - assertEquals(22, this.firstNullRow(sheet)); + assertEquals(26, this.firstNullRow(sheet)); assertEquals( 3035, sheet.getColumnWidth( 0 ) ); assertEquals( 3913, sheet.getColumnWidth( 1 ) ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/BigCrosstab.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/BigCrosstab.rptdesign index 7aead9fa456..f2ad5022b5d 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/BigCrosstab.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/BigCrosstab.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Big Crosstab Report 1 Reporting for duty! - Mission Cube @@ -612,6 +612,7 @@ this.getDataSource( "Mission Data Source" ).setPrivateDriverProperty( "HOME", pa + 0 LaunchVehicle_LaunchVehicle diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Borders2ReportTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Borders2ReportTest.java index 96ca3551e2c..f337c8eed76 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Borders2ReportTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Borders2ReportTest.java @@ -53,9 +53,6 @@ public static void assertBorder( Sheet sheet, int row, int col, short bottom, sh CellStyle styleLeft = ( cellLeft == null ) ? null : cellLeft.getCellStyle(); CellStyle styleRight = ( cellRight == null ) ? null : cellRight.getCellStyle(); - System.out.println( "style == " + style ); - System.out.println( "style == " + style ); - if( ( top != style.getBorderTop() ) && ( ( styleUp == null ) || ( top != styleUp.getBorderBottom() ) ) ) { assertEquals( top, style.getBorderTop() ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Hyperlinks.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Hyperlinks.rptdesign index 3127404bdac..74cce7b4be0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Hyperlinks.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Hyperlinks.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Number Formats Test Report in "BK" + row["Integer"] + row["Integer"] + "_" + row["Name"] Name diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/HyperlinksTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/HyperlinksTest.java index 9479b953cea..d6e0f0b8979 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/HyperlinksTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/HyperlinksTest.java @@ -23,6 +23,8 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Name; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -157,7 +159,7 @@ public void testBookmarksXlsx() throws BirtException, IOException { } assertEquals( 7, rangesValidated ); - assertEquals( 18, workbook.getNumberOfNames() ); + assertEquals( 18, workbook.getNumberOfNames() ); int index = 0; validateNamedRange( workbook, index++, "DataItemOne", -1, 1, 0, 1, 0 ); @@ -199,11 +201,17 @@ public void testHyperlinksXlsx() throws BirtException, IOException { Sheet sheet = workbook.getSheetAt(0); assertEquals( 2002, this.firstNullRow(sheet)); + assertEquals( 8, workbook.getNumCellStyles() ); + + assertTrue( Font.U_SINGLE != workbook.getFontAt( sheet.getRow(0).getCell(1).getCellStyle().getFontIndex() ).getUnderline() ); + assertTrue( IndexedColors.BLUE.getIndex() != workbook.getFontAt( sheet.getRow(0).getCell(1).getCellStyle().getFontIndex() ).getColor() ); for(int i = 1; i < 2000; ++i ) { assertEquals( "http://www.spudsoft.co.uk/?p=" + i, sheet.getRow(i).getCell(0).getHyperlink().getAddress()); assertEquals( "_BK" + (i + 1000), sheet.getRow(i).getCell(1).getHyperlink().getAddress()); + assertEquals( Font.U_SINGLE, workbook.getFontAt( sheet.getRow(i).getCell(1).getCellStyle().getFontIndex() ).getUnderline() ); + assertEquals( "FF0000FF", workbook.getFontAt( sheet.getRow(i).getCell(1).getCellStyle().getFontIndex() ).getXSSFColor().getARGBHex() ); } } finally { @@ -225,11 +233,17 @@ public void testHyperlinksXls() throws BirtException, IOException { Sheet sheet = workbook.getSheetAt(0); assertEquals( 2002, this.firstNullRow(sheet)); + assertEquals( 28, workbook.getNumCellStyles() ); + + assertTrue( Font.U_SINGLE != workbook.getFontAt( sheet.getRow(0).getCell(1).getCellStyle().getFontIndex() ).getUnderline() ); + assertTrue( IndexedColors.BLUE.getIndex() != workbook.getFontAt( sheet.getRow(0).getCell(1).getCellStyle().getFontIndex() ).getColor() ); for(int i = 1; i < 2000; ++i ) { assertEquals( "http://www.spudsoft.co.uk/?p=" + i, sheet.getRow(i).getCell(0).getHyperlink().getAddress()); assertEquals( "_BK" + (i + 1000), sheet.getRow(i).getCell(1).getHyperlink().getAddress()); + assertEquals( Font.U_SINGLE, workbook.getFontAt( sheet.getRow(i).getCell(1).getCellStyle().getFontIndex() ).getUnderline() ); + assertEquals( IndexedColors.BLUE.getIndex(), workbook.getFontAt( sheet.getRow(i).getCell(1).getCellStyle().getFontIndex() ).getColor() ); } } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.java new file mode 100644 index 00000000000..437f69839e7 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.java @@ -0,0 +1,46 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.junit.Test; + +public class Issue100ClassCastExceptionIfCrosstabHasNoData extends ReportRunner { + + @Test + public void testHeader() throws Exception { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 2, this.firstNullRow( sheet )); + } finally { + inputStream.close(); + } + + } +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign new file mode 100644 index 00000000000..e6494fd62b3 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign @@ -0,0 +1,575 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + Data Cube.Data Set.x + integer + false + + + Data Cube.Data Set.y + integer + false + + + 135 + 80 + in + /templates/blank_report.gif + auto layout + ltr + 99 + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 3 + THEMONTH + THEMONTH + integer + 4 + + + 4 + THEYEAR + THEYEAR + integer + 4 + + + 5 + ORDER_COUNT + ORDER_COUNT + integer + 4 + + + 6 + PAYMENT_COUNT + PAYMENT_COUNT + integer + 4 + + + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + THEMONTH + measure + THEMONTH + THEMONTH + + + THEYEAR + measure + THEYEAR + THEYEAR + + + ORDER_COUNT + measure + ORDER_COUNT + ORDER_COUNT + + + PAYMENT_COUNT + measure + PAYMENT_COUNT + PAYMENT_COUNT + + + + + + + + 1 + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + THEMONTH + integer + + + 4 + THEYEAR + integer + + + 5 + ORDER_COUNT + integer + + + 6 + PAYMENT_COUNT + integer + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + + + 3 + THEMONTH + THEMONTH + integer + + + 4 + THEYEAR + THEYEAR + integer + + + 5 + ORDER_COUNT + ORDER_COUNT + integer + + + 6 + PAYMENT_COUNT + PAYMENT_COUNT + integer + + + + + + + + + + NewTabularHierarchy + + + + + integer + CUSTOMERNUMBER + + + string + CUSTOMERNAME + + + + + + + NewTabularHierarchy1 + + + + + integer + THEYEAR + + + integer + THEMONTH + + + + + + + + + + + dataSetRow["ORDER_COUNT"] + integer + + + dataSetRow["PAYMENT_COUNT"] + integer + + + + + Data Set + + + + + + + + + + landscape + 1in + 1.25in + 1in + 1.25in + + + html + new Date()]]> + + + + + + + Data Cube + + + ORDER_COUNT + + + Group/CUSTOMERNAME + Group1/THEMONTH + + + yellow + ORDER_COUNT_Group/CUSTOMERNAME_Group1/THEMONTH + + + + + + + + + + PAYMENT_COUNT + + + Group/CUSTOMERNAME + Group1/THEMONTH + + + yellow + PAYMENT_COUNT_Group/CUSTOMERNAME_Group1/THEMONTH + + + + + + + + + + + + + + Group + + + Group/CUSTOMERNUMBER + + + + + CUSTOMERNUMBER + + + yellow + + + + + Group/CUSTOMERNAME + + + data["CUSTOMERNAME"] + eq + + "Bob" + + true + + + + + + + yellow + CUSTOMERNAME + + + + + + + + + + + + + + + Group1 + + + Group1/THEYEAR + + + + + THEYEAR + + + orange + + + + + Group1/THEMONTH + + + + + orange + THEMONTH + + + + + + + + + + + + + + + + + + + 1 + 1 + + + + 1 + 1 + + + + + + #FFA500 + + + true + + + CUSTOMERNUMBER + dimension["Group"]["CUSTOMERNUMBER"] + integer + + + CUSTOMERNAME + dimension["Group"]["CUSTOMERNAME"] + string + + + THEYEAR + dimension["Group1"]["THEYEAR"] + integer + + + THEMONTH + dimension["Group1"]["THEMONTH"] + integer + + + ORDER_COUNT_Group1/THEMONTH + measure["ORDER_COUNT"] + integer + + Group1/THEMONTH + + SUM + + + PAYMENT_COUNT_Group1/THEMONTH + measure["PAYMENT_COUNT"] + integer + + Group1/THEMONTH + + SUM + + + ORDER_COUNT_Group/CUSTOMERNAME + measure["ORDER_COUNT"] + integer + + Group/CUSTOMERNAME + + SUM + + + PAYMENT_COUNT_Group/CUSTOMERNAME + measure["PAYMENT_COUNT"] + integer + + Group/CUSTOMERNAME + + SUM + + + ORDER_COUNT_Group/CUSTOMERNAME_Group1/THEMONTH + measure["ORDER_COUNT"] + integer + + Group/CUSTOMERNAME + Group1/THEMONTH + + SUM + + + PAYMENT_COUNT_Group/CUSTOMERNAME_Group1/THEMONTH + measure["PAYMENT_COUNT"] + integer + + Group/CUSTOMERNAME + Group1/THEMONTH + + SUM + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.java new file mode 100644 index 00000000000..7e50e0b230b --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.java @@ -0,0 +1,49 @@ +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue102Wrapping extends ReportRunner { + + @Test + public void testRunReport() throws BirtException, IOException { + + removeEmptyRows = false; + InputStream inputStream = runAndRenderReport("Issue102Wrapping.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + + assertEquals( "Sheet0", sheet.getSheetName()); + assertEquals( 4231, sheet.getColumnWidth(0) ); + + assertTrue( sheet.getRow(0).getCell(0).getCellStyle().getWrapText()); + assertTrue( sheet.getRow(1).getCell(0).getCellStyle().getWrapText()); + + assertTrue( ! sheet.getRow(2).getCell(0).getCellStyle().getWrapText()); + assertTrue( ! sheet.getRow(3).getCell(0).getCellStyle().getWrapText()); + assertTrue( ! sheet.getRow(4).getCell(0).getCellStyle().getWrapText()); + + assertEquals( 300, sheet.getRow(0).getHeight() ); + assertEquals( 300, sheet.getRow(2).getHeight() ); + + assertEquals( 116, firstNullRow(sheet)); + } finally { + inputStream.close(); + } + } + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.rptdesign new file mode 100644 index 00000000000..5c602fa22e4 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.rptdesign @@ -0,0 +1,500 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + PRODUCTCODE + dimension + PRODUCTCODE + PRODUCTCODE + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTLINE + dimension + PRODUCTLINE + PRODUCTLINE + + + PRODUCTSCALE + dimension + PRODUCTSCALE + PRODUCTSCALE + + + PRODUCTVENDOR + dimension + PRODUCTVENDOR + PRODUCTVENDOR + + + PRODUCTDESCRIPTION + dimension + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + + + QUANTITYINSTOCK + measure + QUANTITYINSTOCK + QUANTITYINSTOCK + + + BUYPRICE + measure + BUYPRICE + BUYPRICE + + + MSRP + measure + MSRP + MSRP + + + + + + + 1 + PRODUCTCODE + string + + + 2 + PRODUCTNAME + string + + + 3 + PRODUCTLINE + string + + + 4 + PRODUCTSCALE + string + + + 5 + PRODUCTVENDOR + string + + + 6 + PRODUCTDESCRIPTION + string + + + 7 + QUANTITYINSTOCK + integer + + + 8 + BUYPRICE + float + + + 9 + MSRP + float + + + + Data Source + + + 1 + PRODUCTCODE + PRODUCTCODE + string + 12 + + + 2 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 3 + PRODUCTLINE + PRODUCTLINE + string + 12 + + + 4 + PRODUCTSCALE + PRODUCTSCALE + string + 12 + + + 5 + PRODUCTVENDOR + PRODUCTVENDOR + string + 12 + + + 6 + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + string + 12 + + + 7 + QUANTITYINSTOCK + QUANTITYINSTOCK + integer + 4 + + + 8 + BUYPRICE + BUYPRICE + float + 8 + + + 9 + MSRP + MSRP + float + 8 + + + + + + + + + + + + + + + html + new Date()]]> + + + + + + + + + + + + + + + + + + + + + + 4 + 1 + + + + + + + + + + + + + + + + + + + + + + + 6 + 1 + + + + + + + + + + + + ExcelEmitter.AutoColWidthsIncludeTableHeader + boolean + + + true + Data Set + + + PRODUCTCODE + PRODUCTCODE + dataSetRow["PRODUCTCODE"] + string + + + PRODUCTNAME + PRODUCTNAME + dataSetRow["PRODUCTNAME"] + string + + + PRODUCTLINE + PRODUCTLINE + dataSetRow["PRODUCTLINE"] + string + + + PRODUCTSCALE + PRODUCTSCALE + dataSetRow["PRODUCTSCALE"] + string + + + PRODUCTVENDOR + PRODUCTVENDOR + dataSetRow["PRODUCTVENDOR"] + string + + + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + dataSetRow["PRODUCTDESCRIPTION"] + string + + + QUANTITYINSTOCK + QUANTITYINSTOCK + dataSetRow["QUANTITYINSTOCK"] + integer + + + BUYPRICE + BUYPRICE + dataSetRow["BUYPRICE"] + float + + + MSRP + MSRP + dataSetRow["MSRP"] + float + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + PRODUCTCODE + + + + + PRODUCTNAME + + + + + PRODUCTLINE + + + + + PRODUCTSCALE + + + + + PRODUCTVENDOR + + + + + PRODUCTDESCRIPTION + + + + + QUANTITYINSTOCK + + + + + BUYPRICE + + + + + MSRP + + + + +
+ + + + + + + + + + + +
+
+
+
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java new file mode 100644 index 00000000000..3f5f411ceab --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java @@ -0,0 +1,67 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue107ForceRecalculation extends ReportRunner { + + @Test + public void testWithoutOption() throws BirtException, IOException { + + debug = false; + forceRecalculation = false; + InputStream inputStream = runAndRenderReport("Issue107ForceRecalculation.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 2, workbook.getNumberOfSheets() ); + + // assertTrue( ! workbook.getForceFormulaRecalculation() ); + } finally { + inputStream.close(); + } + } + + @Test + public void testWithOption() throws BirtException, IOException { + + debug = false; + forceRecalculation = true; + InputStream inputStream = runAndRenderReport("Issue107ForceRecalculation.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 2, workbook.getNumberOfSheets() ); + + // assertTrue( workbook.getForceFormulaRecalculation() ); + } finally { + inputStream.close(); + } + } + + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.rptdesign new file mode 100644 index 00000000000..993e0cd3624 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.rptdesign @@ -0,0 +1,542 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + ExcelEmitter.TemplateFile + string + + + Issue107ForceRecalculation.xls + in + /templates/blank_report.gif + ltr + 120 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + + + 1 + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + CONTACTLASTNAME + string + + + 4 + CONTACTFIRSTNAME + string + + + 5 + PHONE + string + + + 6 + ADDRESSLINE1 + string + + + 7 + ADDRESSLINE2 + string + + + 8 + CITY + string + + + 9 + STATE + string + + + 10 + POSTALCODE + string + + + 11 + COUNTRY + string + + + 12 + SALESREPEMPLOYEENUMBER + integer + + + 13 + CREDITLIMIT + float + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + + + 3 + CONTACTLASTNAME + CONTACTLASTNAME + string + + + 4 + CONTACTFIRSTNAME + CONTACTFIRSTNAME + string + + + 5 + PHONE + PHONE + string + + + 6 + ADDRESSLINE1 + ADDRESSLINE1 + string + + + 7 + ADDRESSLINE2 + ADDRESSLINE2 + string + + + 8 + CITY + CITY + string + + + 9 + STATE + STATE + string + + + 10 + POSTALCODE + POSTALCODE + string + + + 11 + COUNTRY + COUNTRY + string + + + 12 + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + integer + + + 13 + CREDITLIMIT + CREDITLIMIT + float + + + + + + + + + 1 + ORDERNUMBER + integer + + + 2 + ORDERDATE + date + + + 3 + REQUIREDDATE + date + + + 4 + SHIPPEDDATE + date + + + 5 + STATUS + string + + + 6 + COMMENTS + string + + + 7 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + + + 2 + ORDERDATE + ORDERDATE + date + + + 3 + REQUIREDDATE + REQUIREDDATE + date + + + 4 + SHIPPEDDATE + SHIPPEDDATE + date + + + 5 + STATUS + STATUS + string + + + 6 + COMMENTS + COMMENTS + string + + + 7 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + + + + + + + + + + + + + + + html + new Date()]]> + + + + + + + "Arial" + top + Orders + + + ORDERNUMBER + ORDERNUMBER + dataSetRow["ORDERNUMBER"] + integer + + + ORDERDATE + ORDERDATE + dataSetRow["ORDERDATE"] + date + + + REQUIREDDATE + REQUIREDDATE + dataSetRow["REQUIREDDATE"] + date + + + SHIPPEDDATE + SHIPPEDDATE + dataSetRow["SHIPPEDDATE"] + date + + + STATUS + STATUS + dataSetRow["STATUS"] + string + + + COMMENTS + COMMENTS + dataSetRow["COMMENTS"] + string + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + + 0 + + + + + + + + 50mm + +
+ + top + + + + + + + + + + + + + + + + + + + + + + +
+ + TableGroupCustomer + row["CUSTOMERNUMBER"] + + row["CUSTOMERNUMBER"] + + false +
+ + 0in + top + + detail + + CUSTOMERNUMBER + + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + +
+
+ + + + + + + + + +
+
+ + + top + + 0pt + 0pt + 0pt + 0pt + + + + ORDERNUMBER + + + + + ORDERDATE + + + + + REQUIREDDATE + + + + + SHIPPEDDATE + + + + + STATUS + + + + pre + + COMMENTS + + + + +
+ + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.xls b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.xls new file mode 100644 index 00000000000..e63dba57e3b Binary files /dev/null and b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.xls differ diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue109FormulaParseExceptionEmptyList.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue109FormulaParseExceptionEmptyList.java new file mode 100644 index 00000000000..5fdaa7a3baa --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue109FormulaParseExceptionEmptyList.java @@ -0,0 +1,45 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue109FormulaParseExceptionEmptyList extends ReportRunner { + + @Test + public void testIssue109FormulaParseExceptionEmptyList() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue109FormulaParseExceptionEmptyList.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + } finally { + inputStream.close(); + } + } + +} + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue109FormulaParseExceptionEmptyList.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue109FormulaParseExceptionEmptyList.rptdesign new file mode 100644 index 00000000000..081729dba41 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue109FormulaParseExceptionEmptyList.rptdesign @@ -0,0 +1,532 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + EMPLOYEENUMBER + EMPLOYEENUMBER + EMPLOYEENUMBER + + + LASTNAME + LASTNAME + LASTNAME + + + FIRSTNAME + FIRSTNAME + FIRSTNAME + + + EXTENSION + EXTENSION + EXTENSION + + + EMAIL + EMAIL + EMAIL + + + OFFICECODE + OFFICECODE + OFFICECODE + + + REPORTSTO + REPORTSTO + REPORTSTO + + + JOBTITLE + JOBTITLE + JOBTITLE + + + + + + 1 + EMPLOYEENUMBER + integer + + + 2 + LASTNAME + string + + + 3 + FIRSTNAME + string + + + 4 + EXTENSION + string + + + 5 + EMAIL + string + + + 6 + OFFICECODE + string + + + 7 + REPORTSTO + integer + + + 8 + JOBTITLE + string + + + + Data Source + + + 1 + EMPLOYEENUMBER + EMPLOYEENUMBER + integer + 4 + + + 2 + LASTNAME + LASTNAME + string + 12 + + + 3 + FIRSTNAME + FIRSTNAME + string + 12 + + + 4 + EXTENSION + EXTENSION + string + 12 + + + 5 + EMAIL + EMAIL + string + 12 + + + 6 + OFFICECODE + OFFICECODE + string + 12 + + + 7 + REPORTSTO + REPORTSTO + integer + 4 + + + 8 + JOBTITLE + JOBTITLE + string + 12 + + + + + + 2.0 + + + + + + + EMPLOYEENUMBER + 1 + + 4 + 10 + 0 + Nullable + + EMPLOYEENUMBER + + + + EMPLOYEENUMBER + + 11 + + + + + + + LASTNAME + 2 + + 12 + 50 + 0 + Nullable + + LASTNAME + + + + LASTNAME + + 50 + + + + + + + FIRSTNAME + 3 + + 12 + 50 + 0 + Nullable + + FIRSTNAME + + + + FIRSTNAME + + 50 + + + + + + + EXTENSION + 4 + + 12 + 10 + 0 + Nullable + + EXTENSION + + + + EXTENSION + + 10 + + + + + + + EMAIL + 5 + + 12 + 100 + 0 + Nullable + + EMAIL + + + + EMAIL + + 100 + + + + + + + OFFICECODE + 6 + + 12 + 10 + 0 + Nullable + + OFFICECODE + + + + OFFICECODE + + 10 + + + + + + + REPORTSTO + 7 + + 4 + 10 + 0 + Nullable + + REPORTSTO + + + + REPORTSTO + + 11 + + + + + + + JOBTITLE + 8 + + 12 + 50 + 0 + Nullable + + JOBTITLE + + + + JOBTITLE + + 50 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + OFFICECODE + + + integer + REPORTSTO + + + string + EMAIL + + + + + + + NewTabularHierarchy1 + + + + + string + JOBTITLE + + + + + + + + + + + first + false + dataSetRow["LASTNAME"] + string + true + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + Data Set + + + EMPLOYEENUMBER + EMPLOYEENUMBER + dataSetRow["EMPLOYEENUMBER"] + integer + + + LASTNAME + LASTNAME + dataSetRow["LASTNAME"] + string + + + FIRSTNAME + FIRSTNAME + dataSetRow["FIRSTNAME"] + string + + + EXTENSION + EXTENSION + dataSetRow["EXTENSION"] + string + + + EMAIL + EMAIL + dataSetRow["EMAIL"] + string + + + OFFICECODE + OFFICECODE + dataSetRow["OFFICECODE"] + string + + + REPORTSTO + REPORTSTO + dataSetRow["REPORTSTO"] + integer + + + JOBTITLE + JOBTITLE + dataSetRow["JOBTITLE"] + string + + + + + eq + row["OFFICECODE"] + + 999 + + true + + + + Office + row["OFFICECODE"] + + "Office " + row["OFFICECODE"] + + false + always +
+ + OFFICECODE + +
+
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.java new file mode 100644 index 00000000000..17d7637fe8d --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.java @@ -0,0 +1,160 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue110ListElementsOffset extends ReportRunner { + + @Test + public void testIssue110ListOnly() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffsetListOnly.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 112, this.firstNullRow(sheet)); + assertEquals( "18th Century Vintage Horse Carriage", sheet.getRow(2).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + + @Test + public void testIssue110XlsListOnly() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffsetListOnly.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 112, this.firstNullRow(sheet)); + assertEquals( "18th Century Vintage Horse Carriage", sheet.getRow(2).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + @Test + public void testIssue110() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffset.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 224, this.firstNullRow(sheet)); + assertEquals( "18th Century Vintage Horse Carriage", sheet.getRow(114).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + + @Test + public void testIssue110Xls() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffset.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 224, this.firstNullRow(sheet)); + assertEquals( "18th Century Vintage Horse Carriage", sheet.getRow(114).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + @Test + public void testIssue110MultiNested() throws BirtException, IOException { + + debug = true; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffsetMultiNestedTables.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 17, this.firstNullRow(sheet)); + assertEquals( "1969 Harley Davidson Ultimate Chopper", sheet.getRow(10).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + + @Test + public void testIssue110MultiNestedXls() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffsetMultiNestedTables.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 17, this.firstNullRow(sheet)); + assertEquals( "1969 Harley Davidson Ultimate Chopper", sheet.getRow(10).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + +} + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.rptdesign new file mode 100644 index 00000000000..3a0b4590ecb --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.rptdesign @@ -0,0 +1,879 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + Data Cube.Data Set.x + integer + false + + + Data Cube.Data Set.y + integer + false + + + 135 + 80 + in + /templates/blank_report.gif + ltr + 72 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + LINE + dimension + LINE + LINE + + + NAME + dimension + NAME + NAME + + + PERCENT + measure + PERCENT + PERCENT + + + + + + + 1 + LINE + string + + + 2 + NAME + string + + + 3 + PERCENT + float + + + + Data Source + + + 1 + LINE + LINE + string + 12 + + + 2 + NAME + NAME + string + 12 + + + 3 + PERCENT + PERCENT + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + +]]> + + + nulls lowest + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + + 1 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + NAME + + + + + + + NewTabularHierarchy1 + + + + + string + LINE + + + + + + + + + + + dataSetRow["PERCENT"] + float + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + + list-ds + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + +
+ +
+ + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + +
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetListOnly.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetListOnly.rptdesign new file mode 100644 index 00000000000..0460be9cf95 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetListOnly.rptdesign @@ -0,0 +1,766 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + Data Cube.Data Set.x + integer + false + + + Data Cube.Data Set.y + integer + false + + + 135 + 80 + in + /templates/blank_report.gif + ltr + 72 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + LINE + dimension + LINE + LINE + + + NAME + dimension + NAME + NAME + + + PERCENT + measure + PERCENT + PERCENT + + + + + + + 1 + LINE + string + + + 2 + NAME + string + + + 3 + PERCENT + float + + + + Data Source + + + 1 + LINE + LINE + string + 12 + + + 2 + NAME + NAME + string + 12 + + + 3 + PERCENT + PERCENT + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + +]]> + + + nulls lowest + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + + 1 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + NAME + + + + + + + NewTabularHierarchy1 + + + + + string + LINE + + + + + + + + + + + dataSetRow["PERCENT"] + float + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + list-ds + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + +
+ +
+ + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + +
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetMultiNestedTables.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetMultiNestedTables.rptdesign new file mode 100644 index 00000000000..808f35ee255 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetMultiNestedTables.rptdesign @@ -0,0 +1,1098 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + Data Cube.Data Set.x + integer + false + + + Data Cube.Data Set.y + integer + false + + + 135 + 80 + in + /templates/blank_report.gif + ltr + 72 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + LINE + dimension + LINE + LINE + + + NAME + dimension + NAME + NAME + + + PERCENT + measure + PERCENT + PERCENT + + + + + + + 1 + LINE + string + + + 2 + NAME + string + + + 3 + PERCENT + float + + + + Data Source + + + 1 + LINE + LINE + string + 12 + + + 2 + NAME + NAME + string + 12 + + + 3 + PERCENT + PERCENT + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + +]]> + + + nulls lowest + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + + 1 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + NAME + + + + + + + NewTabularHierarchy1 + + + + + string + LINE + + + + + + + + + + + dataSetRow["PERCENT"] + float + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + list-ds + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + +
+ +
+ + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + +
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112BetterDesign.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112BetterDesign.rptdesign new file mode 100644 index 00000000000..e9e345954c5 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112BetterDesign.rptdesign @@ -0,0 +1,2069 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + EMPLOYEENUMBER + EMPLOYEENUMBER + EMPLOYEENUMBER + + + LASTNAME + LASTNAME + LASTNAME + + + FIRSTNAME + FIRSTNAME + FIRSTNAME + + + EXTENSION + EXTENSION + EXTENSION + + + EMAIL + EMAIL + EMAIL + + + OFFICECODE + OFFICECODE + OFFICECODE + + + REPORTSTO + REPORTSTO + REPORTSTO + + + JOBTITLE + JOBTITLE + JOBTITLE + + + + + + 1 + EMPLOYEENUMBER + integer + + + 2 + LASTNAME + string + + + 3 + FIRSTNAME + string + + + 4 + EXTENSION + string + + + 5 + EMAIL + string + + + 6 + OFFICECODE + string + + + 7 + REPORTSTO + integer + + + 8 + JOBTITLE + string + + + + Data Source + + + 1 + EMPLOYEENUMBER + EMPLOYEENUMBER + integer + 4 + + + 2 + LASTNAME + LASTNAME + string + 12 + + + 3 + FIRSTNAME + FIRSTNAME + string + 12 + + + 4 + EXTENSION + EXTENSION + string + 12 + + + 5 + EMAIL + EMAIL + string + 12 + + + 6 + OFFICECODE + OFFICECODE + string + 12 + + + 7 + REPORTSTO + REPORTSTO + integer + 4 + + + 8 + JOBTITLE + JOBTITLE + string + 12 + + + + + + 2.0 + + + + + + + EMPLOYEENUMBER + 1 + + 4 + 10 + 0 + Nullable + + EMPLOYEENUMBER + + + + EMPLOYEENUMBER + + 11 + + + + + + + LASTNAME + 2 + + 12 + 50 + 0 + Nullable + + LASTNAME + + + + LASTNAME + + 50 + + + + + + + FIRSTNAME + 3 + + 12 + 50 + 0 + Nullable + + FIRSTNAME + + + + FIRSTNAME + + 50 + + + + + + + EXTENSION + 4 + + 12 + 10 + 0 + Nullable + + EXTENSION + + + + EXTENSION + + 10 + + + + + + + EMAIL + 5 + + 12 + 100 + 0 + Nullable + + EMAIL + + + + EMAIL + + 100 + + + + + + + OFFICECODE + 6 + + 12 + 10 + 0 + Nullable + + OFFICECODE + + + + OFFICECODE + + 10 + + + + + + + REPORTSTO + 7 + + 4 + 10 + 0 + Nullable + + REPORTSTO + + + + REPORTSTO + + 11 + + + + + + + JOBTITLE + 8 + + 12 + 50 + 0 + Nullable + + JOBTITLE + + + + JOBTITLE + + 50 + + + + + + + +]]> + + + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + CONTACTLASTNAME + dimension + CONTACTLASTNAME + CONTACTLASTNAME + + + CONTACTFIRSTNAME + dimension + CONTACTFIRSTNAME + CONTACTFIRSTNAME + + + PHONE + dimension + PHONE + PHONE + + + ADDRESSLINE1 + dimension + ADDRESSLINE1 + ADDRESSLINE1 + + + ADDRESSLINE2 + dimension + ADDRESSLINE2 + ADDRESSLINE2 + + + CITY + dimension + CITY + CITY + + + STATE + dimension + STATE + STATE + + + POSTALCODE + dimension + POSTALCODE + POSTALCODE + + + COUNTRY + dimension + COUNTRY + COUNTRY + + + SALESREPEMPLOYEENUMBER + measure + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + + + CREDITLIMIT + measure + CREDITLIMIT + CREDITLIMIT + + + + + SalesRep + + integer + 4 + 1 + null + true + true + true + false + + + + + + 1 + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + CONTACTLASTNAME + string + + + 4 + CONTACTFIRSTNAME + string + + + 5 + PHONE + string + + + 6 + ADDRESSLINE1 + string + + + 7 + ADDRESSLINE2 + string + + + 8 + CITY + string + + + 9 + STATE + string + + + 10 + POSTALCODE + string + + + 11 + COUNTRY + string + + + 12 + SALESREPEMPLOYEENUMBER + integer + + + 13 + CREDITLIMIT + float + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 3 + CONTACTLASTNAME + CONTACTLASTNAME + string + 12 + + + 4 + CONTACTFIRSTNAME + CONTACTFIRSTNAME + string + 12 + + + 5 + PHONE + PHONE + string + 12 + + + 6 + ADDRESSLINE1 + ADDRESSLINE1 + string + 12 + + + 7 + ADDRESSLINE2 + ADDRESSLINE2 + string + 12 + + + 8 + CITY + CITY + string + 12 + + + 9 + STATE + STATE + string + 12 + + + 10 + POSTALCODE + POSTALCODE + string + 12 + + + 11 + COUNTRY + COUNTRY + string + 12 + + + 12 + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + integer + 4 + + + 13 + CREDITLIMIT + CREDITLIMIT + float + 8 + + + + + + 2.0 + + + + In + + + + 1 + + 4 + 10 + 0 + Nullable + + + + true + + + + + + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + ORDERNUMBER + ORDERNUMBER + ORDERNUMBER + + + ORDERDATE + ORDERDATE + ORDERDATE + + + REQUIREDDATE + REQUIREDDATE + REQUIREDDATE + + + SHIPPEDDATE + SHIPPEDDATE + SHIPPEDDATE + + + STATUS + STATUS + STATUS + + + COMMENTS + COMMENTS + COMMENTS + + + CUSTOMERNUMBER + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + 1 + ORDERNUMBER + integer + + + 2 + ORDERDATE + date + + + 3 + REQUIREDDATE + date + + + 4 + SHIPPEDDATE + date + + + 5 + STATUS + string + + + 6 + COMMENTS + string + + + 7 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + ORDERDATE + ORDERDATE + date + 91 + + + 3 + REQUIREDDATE + REQUIREDDATE + date + 91 + + + 4 + SHIPPEDDATE + SHIPPEDDATE + date + 91 + + + 5 + STATUS + STATUS + string + 12 + + + 6 + COMMENTS + COMMENTS + string + 12 + + + 7 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + ORDERDATE + 2 + + 91 + 10 + 0 + Nullable + + ORDERDATE + + + + ORDERDATE + + 10 + + + + + + + REQUIREDDATE + 3 + + 91 + 10 + 0 + Nullable + + REQUIREDDATE + + + + REQUIREDDATE + + 10 + + + + + + + SHIPPEDDATE + 4 + + 91 + 10 + 0 + Nullable + + SHIPPEDDATE + + + + SHIPPEDDATE + + 10 + + + + + + + STATUS + 5 + + 12 + 15 + 0 + Nullable + + STATUS + + + + STATUS + + 15 + + + + + + + COMMENTS + 6 + + 12 + 32700 + 0 + Nullable + + COMMENTS + + + + COMMENTS + + 32700 + + + + + + + CUSTOMERNUMBER + 7 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + +]]> + + + + + ORDERNUMBER + measure + ORDERNUMBER + ORDERNUMBER + + + PRODUCTCODE + dimension + PRODUCTCODE + PRODUCTCODE + + + QUANTITYORDERED + measure + QUANTITYORDERED + QUANTITYORDERED + + + PRICEEACH + measure + PRICEEACH + PRICEEACH + + + ORDERLINENUMBER + measure + ORDERLINENUMBER + ORDERLINENUMBER + + + PRODUCTCODE_6 + dimension + PRODUCTCODE + PRODUCTCODE + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTLINE + dimension + PRODUCTLINE + PRODUCTLINE + + + PRODUCTSCALE + dimension + PRODUCTSCALE + PRODUCTSCALE + + + PRODUCTVENDOR + dimension + PRODUCTVENDOR + PRODUCTVENDOR + + + PRODUCTDESCRIPTION + dimension + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + + + QUANTITYINSTOCK + measure + QUANTITYINSTOCK + QUANTITYINSTOCK + + + BUYPRICE + measure + BUYPRICE + BUYPRICE + + + MSRP + measure + MSRP + MSRP + + + + + + 1 + ORDERNUMBER + integer + + + 2 + PRODUCTCODE + string + + + 3 + QUANTITYORDERED + integer + + + 4 + PRICEEACH + float + + + 5 + ORDERLINENUMBER + integer + + + 6 + PRODUCTCODE_6 + string + + + 7 + PRODUCTNAME + string + + + 8 + PRODUCTLINE + string + + + 9 + PRODUCTSCALE + string + + + 10 + PRODUCTVENDOR + string + + + 11 + PRODUCTDESCRIPTION + string + + + 12 + QUANTITYINSTOCK + integer + + + 13 + BUYPRICE + float + + + 14 + MSRP + float + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + PRODUCTCODE + PRODUCTCODE + string + 12 + + + 3 + QUANTITYORDERED + QUANTITYORDERED + integer + 4 + + + 4 + PRICEEACH + PRICEEACH + float + 8 + + + 5 + ORDERLINENUMBER + ORDERLINENUMBER + integer + 5 + + + 6 + PRODUCTCODE_6 + PRODUCTCODE + string + 12 + + + 7 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 8 + PRODUCTLINE + PRODUCTLINE + string + 12 + + + 9 + PRODUCTSCALE + PRODUCTSCALE + string + 12 + + + 10 + PRODUCTVENDOR + PRODUCTVENDOR + string + 12 + + + 11 + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + string + 12 + + + 12 + QUANTITYINSTOCK + QUANTITYINSTOCK + integer + 4 + + + 13 + BUYPRICE + BUYPRICE + float + 8 + + + 14 + MSRP + MSRP + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + PRODUCTCODE + 6 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + PRODUCTNAME + 7 + + 12 + 70 + 0 + Nullable + + PRODUCTNAME + + + + PRODUCTNAME + + 70 + + + + + + + PRODUCTLINE + 8 + + 12 + 50 + 0 + Nullable + + PRODUCTLINE + + + + PRODUCTLINE + + 50 + + + + + + + PRODUCTSCALE + 9 + + 12 + 10 + 0 + Nullable + + PRODUCTSCALE + + + + PRODUCTSCALE + + 10 + + + + + + + PRODUCTVENDOR + 10 + + 12 + 50 + 0 + Nullable + + PRODUCTVENDOR + + + + PRODUCTVENDOR + + 50 + + + + + + + PRODUCTDESCRIPTION + 11 + + 12 + 32700 + 0 + Nullable + + PRODUCTDESCRIPTION + + + + PRODUCTDESCRIPTION + + 32700 + + + + + + + QUANTITYINSTOCK + 12 + + 4 + 10 + 0 + Nullable + + QUANTITYINSTOCK + + + + QUANTITYINSTOCK + + 11 + + + + + + + BUYPRICE + 13 + + 8 + 15 + 0 + Nullable + + BUYPRICE + + + + BUYPRICE + + 22 + + + + + + + MSRP + 14 + + 8 + 15 + 0 + Nullable + + MSRP + + + + MSRP + + 22 + + + + + + + +]]> + + + + + + + + + + + + html + new Date()]]> + + + + + + + + + + + + + + 5 + 1 + + Employees + + + EMPLOYEENUMBER + EMPLOYEENUMBER + dataSetRow["EMPLOYEENUMBER"] + integer + + + LASTNAME + LASTNAME + dataSetRow["LASTNAME"] + string + + + FIRSTNAME + FIRSTNAME + dataSetRow["FIRSTNAME"] + string + + + EXTENSION + EXTENSION + dataSetRow["EXTENSION"] + string + + + EMAIL + EMAIL + dataSetRow["EMAIL"] + string + + + OFFICECODE + OFFICECODE + dataSetRow["OFFICECODE"] + string + + + REPORTSTO + REPORTSTO + dataSetRow["REPORTSTO"] + integer + + + JOBTITLE + JOBTITLE + dataSetRow["JOBTITLE"] + string + + + Column Binding + dataSetRow["LASTNAME"] + string + true + + + + + + + + + + + + + + + 3 + 1 + + Column Binding + + + + + + + + 3 + 1 + + + + + + + 3 + 1 + + Customers + + + SalesRep + + row["EMPLOYEENUMBER"] + + + + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + + CUSTOMERNAME + CUSTOMERNAME + dataSetRow["CUSTOMERNAME"] + string + + + CONTACTLASTNAME + CONTACTLASTNAME + dataSetRow["CONTACTLASTNAME"] + string + + + CONTACTFIRSTNAME + CONTACTFIRSTNAME + dataSetRow["CONTACTFIRSTNAME"] + string + + + PHONE + PHONE + dataSetRow["PHONE"] + string + + + ADDRESSLINE1 + ADDRESSLINE1 + dataSetRow["ADDRESSLINE1"] + string + + + ADDRESSLINE2 + ADDRESSLINE2 + dataSetRow["ADDRESSLINE2"] + string + + + CITY + CITY + dataSetRow["CITY"] + string + + + STATE + STATE + dataSetRow["STATE"] + string + + + POSTALCODE + POSTALCODE + dataSetRow["POSTALCODE"] + string + + + COUNTRY + COUNTRY + dataSetRow["COUNTRY"] + string + + + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + dataSetRow["SALESREPEMPLOYEENUMBER"] + integer + + + CREDITLIMIT + CREDITLIMIT + dataSetRow["CREDITLIMIT"] + float + + + Column Binding + dataSetRow["CUSTOMERNAME"] + string + true + + + + + + + + + + + + + + Column Binding + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.java new file mode 100644 index 00000000000..af8be70b41b --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.java @@ -0,0 +1,72 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue112MethodNotImplementedDeeplyNestedTables extends ReportRunner { + + @Test + public void testIssue112MethodNotImplementedDeeplyNestedTables() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue112MethodNotImplementedDeeplyNestedTables.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 69, this.firstNullRow(sheet)); + + } finally { + inputStream.close(); + } + } + + @Test + public void testIssue112BetterDesign() throws BirtException, IOException { + + debug = true; + InputStream inputStream = runAndRenderReport("Issue112BetterDesign.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 169, this.firstNullRow(sheet)); + assertEquals( "Mini Gifts Distributors Ltd.", sheet.getRow(20).getCell(2).getStringCellValue() ); + + } finally { + inputStream.close(); + } + } + + +} + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.rptdesign new file mode 100644 index 00000000000..adda8f37323 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.rptdesign @@ -0,0 +1,2047 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + EMPLOYEENUMBER + EMPLOYEENUMBER + EMPLOYEENUMBER + + + LASTNAME + LASTNAME + LASTNAME + + + FIRSTNAME + FIRSTNAME + FIRSTNAME + + + EXTENSION + EXTENSION + EXTENSION + + + EMAIL + EMAIL + EMAIL + + + OFFICECODE + OFFICECODE + OFFICECODE + + + REPORTSTO + REPORTSTO + REPORTSTO + + + JOBTITLE + JOBTITLE + JOBTITLE + + + + + + 1 + EMPLOYEENUMBER + integer + + + 2 + LASTNAME + string + + + 3 + FIRSTNAME + string + + + 4 + EXTENSION + string + + + 5 + EMAIL + string + + + 6 + OFFICECODE + string + + + 7 + REPORTSTO + integer + + + 8 + JOBTITLE + string + + + + Data Source + + + 1 + EMPLOYEENUMBER + EMPLOYEENUMBER + integer + 4 + + + 2 + LASTNAME + LASTNAME + string + 12 + + + 3 + FIRSTNAME + FIRSTNAME + string + 12 + + + 4 + EXTENSION + EXTENSION + string + 12 + + + 5 + EMAIL + EMAIL + string + 12 + + + 6 + OFFICECODE + OFFICECODE + string + 12 + + + 7 + REPORTSTO + REPORTSTO + integer + 4 + + + 8 + JOBTITLE + JOBTITLE + string + 12 + + + + + + 2.0 + + + + + + + EMPLOYEENUMBER + 1 + + 4 + 10 + 0 + Nullable + + EMPLOYEENUMBER + + + + EMPLOYEENUMBER + + 11 + + + + + + + LASTNAME + 2 + + 12 + 50 + 0 + Nullable + + LASTNAME + + + + LASTNAME + + 50 + + + + + + + FIRSTNAME + 3 + + 12 + 50 + 0 + Nullable + + FIRSTNAME + + + + FIRSTNAME + + 50 + + + + + + + EXTENSION + 4 + + 12 + 10 + 0 + Nullable + + EXTENSION + + + + EXTENSION + + 10 + + + + + + + EMAIL + 5 + + 12 + 100 + 0 + Nullable + + EMAIL + + + + EMAIL + + 100 + + + + + + + OFFICECODE + 6 + + 12 + 10 + 0 + Nullable + + OFFICECODE + + + + OFFICECODE + + 10 + + + + + + + REPORTSTO + 7 + + 4 + 10 + 0 + Nullable + + REPORTSTO + + + + REPORTSTO + + 11 + + + + + + + JOBTITLE + 8 + + 12 + 50 + 0 + Nullable + + JOBTITLE + + + + JOBTITLE + + 50 + + + + + + + +]]> + + + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + CONTACTLASTNAME + dimension + CONTACTLASTNAME + CONTACTLASTNAME + + + CONTACTFIRSTNAME + dimension + CONTACTFIRSTNAME + CONTACTFIRSTNAME + + + PHONE + dimension + PHONE + PHONE + + + ADDRESSLINE1 + dimension + ADDRESSLINE1 + ADDRESSLINE1 + + + ADDRESSLINE2 + dimension + ADDRESSLINE2 + ADDRESSLINE2 + + + CITY + dimension + CITY + CITY + + + STATE + dimension + STATE + STATE + + + POSTALCODE + dimension + POSTALCODE + POSTALCODE + + + COUNTRY + dimension + COUNTRY + COUNTRY + + + SALESREPEMPLOYEENUMBER + measure + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + + + CREDITLIMIT + measure + CREDITLIMIT + CREDITLIMIT + + + + + SalesRep + + integer + 4 + 1 + null + true + true + true + false + + + + + + 1 + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + CONTACTLASTNAME + string + + + 4 + CONTACTFIRSTNAME + string + + + 5 + PHONE + string + + + 6 + ADDRESSLINE1 + string + + + 7 + ADDRESSLINE2 + string + + + 8 + CITY + string + + + 9 + STATE + string + + + 10 + POSTALCODE + string + + + 11 + COUNTRY + string + + + 12 + SALESREPEMPLOYEENUMBER + integer + + + 13 + CREDITLIMIT + float + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 3 + CONTACTLASTNAME + CONTACTLASTNAME + string + 12 + + + 4 + CONTACTFIRSTNAME + CONTACTFIRSTNAME + string + 12 + + + 5 + PHONE + PHONE + string + 12 + + + 6 + ADDRESSLINE1 + ADDRESSLINE1 + string + 12 + + + 7 + ADDRESSLINE2 + ADDRESSLINE2 + string + 12 + + + 8 + CITY + CITY + string + 12 + + + 9 + STATE + STATE + string + 12 + + + 10 + POSTALCODE + POSTALCODE + string + 12 + + + 11 + COUNTRY + COUNTRY + string + 12 + + + 12 + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + integer + 4 + + + 13 + CREDITLIMIT + CREDITLIMIT + float + 8 + + + + + + 2.0 + + + + In + + + + 1 + + 4 + 10 + 0 + Nullable + + + + true + + + + + + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + ORDERNUMBER + ORDERNUMBER + ORDERNUMBER + + + ORDERDATE + ORDERDATE + ORDERDATE + + + REQUIREDDATE + REQUIREDDATE + REQUIREDDATE + + + SHIPPEDDATE + SHIPPEDDATE + SHIPPEDDATE + + + STATUS + STATUS + STATUS + + + COMMENTS + COMMENTS + COMMENTS + + + CUSTOMERNUMBER + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + 1 + ORDERNUMBER + integer + + + 2 + ORDERDATE + date + + + 3 + REQUIREDDATE + date + + + 4 + SHIPPEDDATE + date + + + 5 + STATUS + string + + + 6 + COMMENTS + string + + + 7 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + ORDERDATE + ORDERDATE + date + 91 + + + 3 + REQUIREDDATE + REQUIREDDATE + date + 91 + + + 4 + SHIPPEDDATE + SHIPPEDDATE + date + 91 + + + 5 + STATUS + STATUS + string + 12 + + + 6 + COMMENTS + COMMENTS + string + 12 + + + 7 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + ORDERDATE + 2 + + 91 + 10 + 0 + Nullable + + ORDERDATE + + + + ORDERDATE + + 10 + + + + + + + REQUIREDDATE + 3 + + 91 + 10 + 0 + Nullable + + REQUIREDDATE + + + + REQUIREDDATE + + 10 + + + + + + + SHIPPEDDATE + 4 + + 91 + 10 + 0 + Nullable + + SHIPPEDDATE + + + + SHIPPEDDATE + + 10 + + + + + + + STATUS + 5 + + 12 + 15 + 0 + Nullable + + STATUS + + + + STATUS + + 15 + + + + + + + COMMENTS + 6 + + 12 + 32700 + 0 + Nullable + + COMMENTS + + + + COMMENTS + + 32700 + + + + + + + CUSTOMERNUMBER + 7 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + +]]> + + + + + ORDERNUMBER + measure + ORDERNUMBER + ORDERNUMBER + + + PRODUCTCODE + dimension + PRODUCTCODE + PRODUCTCODE + + + QUANTITYORDERED + measure + QUANTITYORDERED + QUANTITYORDERED + + + PRICEEACH + measure + PRICEEACH + PRICEEACH + + + ORDERLINENUMBER + measure + ORDERLINENUMBER + ORDERLINENUMBER + + + PRODUCTCODE_6 + dimension + PRODUCTCODE + PRODUCTCODE + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTLINE + dimension + PRODUCTLINE + PRODUCTLINE + + + PRODUCTSCALE + dimension + PRODUCTSCALE + PRODUCTSCALE + + + PRODUCTVENDOR + dimension + PRODUCTVENDOR + PRODUCTVENDOR + + + PRODUCTDESCRIPTION + dimension + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + + + QUANTITYINSTOCK + measure + QUANTITYINSTOCK + QUANTITYINSTOCK + + + BUYPRICE + measure + BUYPRICE + BUYPRICE + + + MSRP + measure + MSRP + MSRP + + + + + + 1 + ORDERNUMBER + integer + + + 2 + PRODUCTCODE + string + + + 3 + QUANTITYORDERED + integer + + + 4 + PRICEEACH + float + + + 5 + ORDERLINENUMBER + integer + + + 6 + PRODUCTCODE_6 + string + + + 7 + PRODUCTNAME + string + + + 8 + PRODUCTLINE + string + + + 9 + PRODUCTSCALE + string + + + 10 + PRODUCTVENDOR + string + + + 11 + PRODUCTDESCRIPTION + string + + + 12 + QUANTITYINSTOCK + integer + + + 13 + BUYPRICE + float + + + 14 + MSRP + float + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + PRODUCTCODE + PRODUCTCODE + string + 12 + + + 3 + QUANTITYORDERED + QUANTITYORDERED + integer + 4 + + + 4 + PRICEEACH + PRICEEACH + float + 8 + + + 5 + ORDERLINENUMBER + ORDERLINENUMBER + integer + 5 + + + 6 + PRODUCTCODE_6 + PRODUCTCODE + string + 12 + + + 7 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 8 + PRODUCTLINE + PRODUCTLINE + string + 12 + + + 9 + PRODUCTSCALE + PRODUCTSCALE + string + 12 + + + 10 + PRODUCTVENDOR + PRODUCTVENDOR + string + 12 + + + 11 + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + string + 12 + + + 12 + QUANTITYINSTOCK + QUANTITYINSTOCK + integer + 4 + + + 13 + BUYPRICE + BUYPRICE + float + 8 + + + 14 + MSRP + MSRP + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + PRODUCTCODE + 6 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + PRODUCTNAME + 7 + + 12 + 70 + 0 + Nullable + + PRODUCTNAME + + + + PRODUCTNAME + + 70 + + + + + + + PRODUCTLINE + 8 + + 12 + 50 + 0 + Nullable + + PRODUCTLINE + + + + PRODUCTLINE + + 50 + + + + + + + PRODUCTSCALE + 9 + + 12 + 10 + 0 + Nullable + + PRODUCTSCALE + + + + PRODUCTSCALE + + 10 + + + + + + + PRODUCTVENDOR + 10 + + 12 + 50 + 0 + Nullable + + PRODUCTVENDOR + + + + PRODUCTVENDOR + + 50 + + + + + + + PRODUCTDESCRIPTION + 11 + + 12 + 32700 + 0 + Nullable + + PRODUCTDESCRIPTION + + + + PRODUCTDESCRIPTION + + 32700 + + + + + + + QUANTITYINSTOCK + 12 + + 4 + 10 + 0 + Nullable + + QUANTITYINSTOCK + + + + QUANTITYINSTOCK + + 11 + + + + + + + BUYPRICE + 13 + + 8 + 15 + 0 + Nullable + + BUYPRICE + + + + BUYPRICE + + 22 + + + + + + + MSRP + 14 + + 8 + 15 + 0 + Nullable + + MSRP + + + + MSRP + + 22 + + + + + + + +]]> + + + + + + + + + + + + html + new Date()]]> + + + + + + + Employees + + + EMPLOYEENUMBER + EMPLOYEENUMBER + dataSetRow["EMPLOYEENUMBER"] + integer + + + LASTNAME + LASTNAME + dataSetRow["LASTNAME"] + string + + + FIRSTNAME + FIRSTNAME + dataSetRow["FIRSTNAME"] + string + + + EXTENSION + EXTENSION + dataSetRow["EXTENSION"] + string + + + EMAIL + EMAIL + dataSetRow["EMAIL"] + string + + + OFFICECODE + OFFICECODE + dataSetRow["OFFICECODE"] + string + + + REPORTSTO + REPORTSTO + dataSetRow["REPORTSTO"] + integer + + + JOBTITLE + JOBTITLE + dataSetRow["JOBTITLE"] + string + + + Column Binding + dataSetRow["LASTNAME"] + string + true + + + + + + + + + + + + + + Column Binding + + + + + + + + + Customers + + + SalesRep + + row["EMPLOYEENUMBER"] + + + + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + + CUSTOMERNAME + CUSTOMERNAME + dataSetRow["CUSTOMERNAME"] + string + + + CONTACTLASTNAME + CONTACTLASTNAME + dataSetRow["CONTACTLASTNAME"] + string + + + CONTACTFIRSTNAME + CONTACTFIRSTNAME + dataSetRow["CONTACTFIRSTNAME"] + string + + + PHONE + PHONE + dataSetRow["PHONE"] + string + + + ADDRESSLINE1 + ADDRESSLINE1 + dataSetRow["ADDRESSLINE1"] + string + + + ADDRESSLINE2 + ADDRESSLINE2 + dataSetRow["ADDRESSLINE2"] + string + + + CITY + CITY + dataSetRow["CITY"] + string + + + STATE + STATE + dataSetRow["STATE"] + string + + + POSTALCODE + POSTALCODE + dataSetRow["POSTALCODE"] + string + + + COUNTRY + COUNTRY + dataSetRow["COUNTRY"] + string + + + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + dataSetRow["SALESREPEMPLOYEENUMBER"] + integer + + + CREDITLIMIT + CREDITLIMIT + dataSetRow["CREDITLIMIT"] + float + + + Column Binding + dataSetRow["CUSTOMERNAME"] + string + true + + + + + + + + + + + + + + Column Binding + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.java new file mode 100644 index 00000000000..bbf920d2249 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.java @@ -0,0 +1,71 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue114IncorrectHeightCalculation extends ReportRunner { + + @Test + public void testIssue114IncorrectHeightCalculation() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue114IncorrectHeightCalculation.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 100, this.firstNullRow(sheet)); + + } finally { + inputStream.close(); + } + } + + @Test + public void testIssue114IncorrectHeightCalculationExample() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue114IncorrectHeightCalculationExample.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 110, this.firstNullRow(sheet)); + + } finally { + inputStream.close(); + } + } + +} + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.rptdesign new file mode 100644 index 00000000000..8f94770d806 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.rptdesign @@ -0,0 +1,556 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + EMPLOYEENAME + dimension + EMPLOYEENAME + EMPLOYEENAME + + + EMPLOYEENUMBER + measure + EMPLOYEENUMBER + EMPLOYEENUMBER + + + EMAIL + dimension + EMAIL + EMAIL + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + ORDERNUMBER + measure + ORDERNUMBER + ORDERNUMBER + + + ORDERDATE + dimension + ORDERDATE + ORDERDATE + + + ORDERNUMBER_7 + measure + ORDERNUMBER + ORDERNUMBER + + + QUANTITYORDERED + measure + QUANTITYORDERED + QUANTITYORDERED + + + PRICEEACH + measure + PRICEEACH + PRICEEACH + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTDESCRIPTION + dimension + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + + + LINEPRICE + measure + LINEPRICE + LINEPRICE + + + + + + + 1 + EMPLOYEENAME + string + + + 2 + EMPLOYEENUMBER + integer + + + 3 + EMAIL + string + + + 4 + CUSTOMERNAME + string + + + 5 + ORDERNUMBER + integer + + + 6 + ORDERDATE + date + + + 7 + ORDERNUMBER_7 + integer + + + 8 + QUANTITYORDERED + integer + + + 9 + PRICEEACH + float + + + 10 + PRODUCTNAME + string + + + 11 + PRODUCTDESCRIPTION + string + + + 12 + LINEPRICE + float + + + + Data Source + + + 1 + EMPLOYEENAME + EMPLOYEENAME + string + 12 + + + 2 + EMPLOYEENUMBER + EMPLOYEENUMBER + integer + 4 + + + 3 + EMAIL + EMAIL + string + 12 + + + 4 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 5 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 6 + ORDERDATE + ORDERDATE + date + 91 + + + 7 + ORDERNUMBER_7 + ORDERNUMBER + integer + 4 + + + 8 + QUANTITYORDERED + QUANTITYORDERED + integer + 4 + + + 9 + PRICEEACH + PRICEEACH + float + 8 + + + 10 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 11 + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + string + 12 + + + 12 + LINEPRICE + LINEPRICE + float + 8 + + + + + + 2.0 + + + + + + + 1 + 1 + + 12 + 102 + 0 + Nullable + + 1 + + + + 1 + + 102 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + CUSTOMERNAME + + + + + + + NewTabularHierarchy1 + + + + + string + EMPLOYEENAME + + + + + + + NewTabularHierarchy2 + + + + + string + PRODUCTNAME + + + + + + + + + + + dataSetRow["LINEPRICE"] + float + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + + + + + Data Cube + + + LINEPRICE + + + Group/CUSTOMERNAME + Group2/PRODUCTNAME + + + LINEPRICE_Group/CUSTOMERNAME_Group2/PRODUCTNAME + + + + + + + + + + + + + + + + + + Group + + + Group/CUSTOMERNAME + + + + + CUSTOMERNAME + + + + + + + + + + + + + + + Group1 + + + Group1/EMPLOYEENAME + + + + + EMPLOYEENAME + + + + + + + + + Group2 + + + Group2/PRODUCTNAME + + + + + PRODUCTNAME + + + + + + + + + + + + + + true + + + CUSTOMERNAME + dimension["Group"]["CUSTOMERNAME"] + string + + + PRODUCTNAME + dimension["Group2"]["PRODUCTNAME"] + string + + + LINEPRICE_Group2/PRODUCTNAME + measure["LINEPRICE"] + float + + Group2/PRODUCTNAME + + SUM + + + LINEPRICE_Group/CUSTOMERNAME_Group2/PRODUCTNAME + measure["LINEPRICE"] + float + + Group/CUSTOMERNAME + Group2/PRODUCTNAME + + SUM + + + EMPLOYEENAME + dimension["Group1"]["EMPLOYEENAME"] + string + + + LINEPRICE_Group/CUSTOMERNAME_Group1/EMPLOYEENAME + measure["LINEPRICE"] + float + + Group/CUSTOMERNAME + Group1/EMPLOYEENAME + + SUM + + + + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculationExample.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculationExample.rptdesign new file mode 100644 index 00000000000..6b7e209111c --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculationExample.rptdesign @@ -0,0 +1,371 @@ + + + Eclipse BIRT Designer Version 4.2.1.v201209101448 Build <4.2.1.v20120912-1721> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + CUSTOMERNAME + CUSTOMERNAME + CUSTOMERNAME + + + CONTACTLASTNAME + CONTACTLASTNAME + CONTACTLASTNAME + + + CUSTOMERNUMBER + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + 1 + CUSTOMERNAME + string + + + 2 + CONTACTLASTNAME + string + + + 3 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 2 + CONTACTLASTNAME + CONTACTLASTNAME + string + 12 + + + 3 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + CUSTOMERNAME + 1 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 2 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CUSTOMERNUMBER + 3 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + CONTACTLASTNAME + + + + + + + NewTabularHierarchy1 + + + + + string + CUSTOMERNAME + + + + + + + + + + + dataSetRow["CUSTOMERNUMBER"] + integer + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + Data Cube + + + CUSTOMERNUMBER + + + Group/CONTACTLASTNAME + Group1/CUSTOMERNAME + + + CUSTOMERNUMBER_Group/CONTACTLASTNAME_Group1/CUSTOMERNAME + + + + + + + + + + + + + + + + + + Group + + + Group/CONTACTLASTNAME + + + + + CONTACTLASTNAME + + + + + + + + + + + + + + + Group1 + + + Group1/CUSTOMERNAME + + + + + CUSTOMERNAME + + + + + + + + + + + + + + + + CONTACTLASTNAME + dimension["Group"]["CONTACTLASTNAME"] + string + + + CUSTOMERNAME + dimension["Group1"]["CUSTOMERNAME"] + string + + + CUSTOMERNUMBER_Group1/CUSTOMERNAME + measure["CUSTOMERNUMBER"] + integer + + Group1/CUSTOMERNAME + + SUM + + + CUSTOMERNUMBER_Group/CONTACTLASTNAME + measure["CUSTOMERNUMBER"] + integer + + Group/CONTACTLASTNAME + + SUM + + + CUSTOMERNUMBER_Group/CONTACTLASTNAME_Group1/CUSTOMERNAME + measure["CUSTOMERNUMBER"] + integer + + Group/CONTACTLASTNAME + Group1/CUSTOMERNAME + + SUM + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue43StructuredHeader.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue43StructuredHeader.java index ef75d09c4ee..3f39e06feef 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue43StructuredHeader.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue43StructuredHeader.java @@ -18,6 +18,9 @@ import java.io.InputStream; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFPrintSetup; +import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.Test; @@ -38,6 +41,18 @@ public void testWithoutOption() throws Exception { assertEquals( 4, this.firstNullRow(workbook.getSheetAt(0))); assertEquals( 4, this.firstNullRow(workbook.getSheetAt(1))); assertEquals( 4, this.firstNullRow(workbook.getSheetAt(2))); + + XSSFSheet sheet0 = workbook.getSheetAt(0); + XSSFPrintSetup printSetup = sheet0.getPrintSetup(); + assertEquals( XSSFPrintSetup.A4_PAPERSIZE, printSetup.getPaperSize() ); + assertEquals( false, printSetup.getLandscape() ); + + assertEquals( 0.7 / 2.54, printSetup.getHeaderMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getFooterMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.LeftMargin ), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.RightMargin ), 0.01 ); + assertEquals( 2.7 / 2.54, sheet0.getMargin( Sheet.TopMargin ), 0.01 ); + assertEquals( 1.7 / 2.54, sheet0.getMargin( Sheet.BottomMargin ), 0.01 ); } finally { inputStream.close(); @@ -62,6 +77,17 @@ public void testWithOption() throws Exception { assertEquals( 8, this.firstNullRow(workbook.getSheetAt(1))); assertEquals( 8, this.firstNullRow(workbook.getSheetAt(2))); + XSSFSheet sheet0 = workbook.getSheetAt(0); + XSSFPrintSetup printSetup = sheet0.getPrintSetup(); + assertEquals( XSSFPrintSetup.A4_PAPERSIZE, printSetup.getPaperSize() ); + assertEquals( false, printSetup.getLandscape() ); + + assertEquals( 0.7 / 2.54, printSetup.getHeaderMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getFooterMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.LeftMargin ), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.RightMargin ), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.TopMargin ), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.BottomMargin ), 0.01 ); } finally { inputStream.close(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.java index 0562bcfb3bd..9c275fa5bb2 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.java @@ -41,11 +41,11 @@ public void testIssue61() throws BirtException, IOException { Sheet firstSheet = workbook.getSheetAt(0); assertEquals( 7, this.firstNullRow(firstSheet)); - assertEquals( "10100", firstSheet.getSheetName() ); + assertEquals( "Sheet +10100", firstSheet.getSheetName() ); for( Sheet sheet : workbook ) { if( ! "Sheet326".equals( sheet.getSheetName() ) ) { - assertEquals( Integer.toString( (int)sheet.getRow(1).getCell(0).getNumericCellValue() ), sheet.getSheetName() ); + assertEquals( "Sheet +" + Integer.toString( (int)sheet.getRow(1).getCell(0).getNumericCellValue() ), sheet.getSheetName() ); } } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.rptdesign index ad806406235..872d6dc4a3e 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.rptdesign @@ -1,6 +1,6 @@ - Eclipse BIRT Designer Version 3.7.2.v20120213 Build <3.7.2.v20120214-1408> + Eclipse BIRT Designer Version 4.3.0.v201306041519 Build <4.3.0.v20130611-1045> in /templates/blank_report.gif ltr @@ -447,7 +447,7 @@ from orderdetails]]> row["ORDERNUMBER"] row["ORDERNUMBER"] - row["ORDERNUMBER"] + 'Sheet[/\\*\'?[\]:]+' + row["ORDERNUMBER"] false always diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.java new file mode 100644 index 00000000000..55388768c0e --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.java @@ -0,0 +1,49 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue65DynamicImageSize extends ReportRunner { + + @Test + public void test() throws BirtException, IOException { + + debug = true; + InputStream inputStream = runAndRenderReport("Issue65DynamicImageSize.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 110, this.firstNullRow(sheet)); + assertEquals( 109, this.lastRow(sheet)); + + } finally { + inputStream.close(); + } + } +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.rptdesign new file mode 100644 index 00000000000..ffdcf542e97 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.rptdesign @@ -0,0 +1,733 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + queryText + 8 + + + queryTimeOut + 8 + + + rowFetchSize + 8 + + + in + /templates/blank_report.gif + auto layout + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + ORDERNUMBER + measure + ORDERNUMBER + ORDERNUMBER + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + ORDERDATE + dimension + ORDERDATE + ORDERDATE + + + STATUS + dimension + STATUS + STATUS + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTLINE + dimension + PRODUCTLINE + PRODUCTLINE + + + QUANTITYORDERED + measure + QUANTITYORDERED + QUANTITYORDERED + + + + + + + 1 + ORDERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + ORDERDATE + date + + + 4 + STATUS + string + + + 5 + PRODUCTNAME + string + + + 6 + PRODUCTLINE + string + + + 7 + QUANTITYORDERED + integer + + + + 100 + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 3 + ORDERDATE + ORDERDATE + date + 91 + + + 4 + STATUS + STATUS + string + 12 + + + 5 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 6 + PRODUCTLINE + PRODUCTLINE + string + 12 + + + 7 + QUANTITYORDERED + QUANTITYORDERED + integer + 4 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + PRODUCTCODE + 6 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + PRODUCTNAME + 7 + + 12 + 70 + 0 + Nullable + + PRODUCTNAME + + + + PRODUCTNAME + + 70 + + + + + + + PRODUCTLINE + 8 + + 12 + 50 + 0 + Nullable + + PRODUCTLINE + + + + PRODUCTLINE + + 50 + + + + + + + PRODUCTSCALE + 9 + + 12 + 10 + 0 + Nullable + + PRODUCTSCALE + + + + PRODUCTSCALE + + 10 + + + + + + + PRODUCTVENDOR + 10 + + 12 + 50 + 0 + Nullable + + PRODUCTVENDOR + + + + PRODUCTVENDOR + + 50 + + + + + + + PRODUCTDESCRIPTION + 11 + + 12 + 32700 + 0 + Nullable + + PRODUCTDESCRIPTION + + + + PRODUCTDESCRIPTION + + 32700 + + + + + + + QUANTITYINSTOCK + 12 + + 4 + 10 + 0 + Nullable + + QUANTITYINSTOCK + + + + QUANTITYINSTOCK + + 11 + + + + + + + BUYPRICE + 13 + + 8 + 15 + 0 + Nullable + + BUYPRICE + + + + BUYPRICE + + 22 + + + + + + + MSRP + 14 + + 8 + 15 + 0 + Nullable + + MSRP + + + + MSRP + + 22 + + + + + + + +]]> + + + + + + + + + + + + html + new Date()]]> + + + + + + + + + ExcelEmitter.GroupSummaryHeader + boolean + + + ExcelEmitter.AllowImageAspectRatioChange + boolean + + + true + false + Data Set + + + ORDERNUMBER + ORDERNUMBER + dataSetRow["ORDERNUMBER"] + integer + + + CUSTOMERNAME + CUSTOMERNAME + dataSetRow["CUSTOMERNAME"] + string + + + ORDERDATE + ORDERDATE + dataSetRow["ORDERDATE"] + date + + + STATUS + STATUS + dataSetRow["STATUS"] + string + + + PRODUCTNAME + PRODUCTNAME + dataSetRow["PRODUCTNAME"] + string + + + PRODUCTLINE + PRODUCTLINE + dataSetRow["PRODUCTLINE"] + string + + + QUANTITYORDERED + QUANTITYORDERED + dataSetRow["QUANTITYORDERED"] + integer + + + 0 + + + + + + + + 10cm + + + OrderGroup + row["ORDERNUMBER"] + + row["ORDERNUMBER"] + + false +
+ + + + ORDERNUMBER + + + + + + Custom + yyyy-MM-dd + + ORDERDATE + + + + + CUSTOMERNAME + + + + + STATUS + + + + + + +
+
+ + + + + + + + + +
+
+ + + + + 2 + 1 + + PRODUCTLINE + + + + 2 + 1 + + PRODUCTNAME + + + + + QUANTITYORDERED + + + + + 0.4cm + 0.1cm + 0) { + unit = found[ 0 ]; +} +var w = orgWidth.replaceAll(unit, ""); +var width = s * w; +width = width < 1 ? 1 : width; +this.width = width + unit;]]> + embed + image.png + + + + +
+ + + + + + + + + +
+
+ + + + image.png + image/png + + iVBORw0KGgoAAAANSUhEUgAAAAgAAAAMCAYAAABfnvydAAAAH0lEQVR4nGP8z8DwnwEPYMInOaqARAUn + GBgYPuJSAABSZwPPGDmftwAAAABJRU5ErkJggg== + + + +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue66SingleSheetWithPageBreaks.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue66SingleSheetWithPageBreaks.java index 81fb64df1b1..f52169a112f 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue66SingleSheetWithPageBreaks.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue66SingleSheetWithPageBreaks.java @@ -155,7 +155,7 @@ public void testNoNames() throws BirtException, IOException { assertEquals( 2, workbook.getSheetAt(0).getRowBreaks().length ); assertEquals( 3, workbook.getSheetAt(0).getRowBreaks()[0] ); assertEquals( 7, workbook.getSheetAt(0).getRowBreaks()[1] ); - assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); + assertEquals( "Sheet0", workbook.getSheetAt(0).getSheetName()); assertEquals(11, firstNullRow(workbook.getSheetAt(0))); } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.java index 6e92cbbce60..16e5668630c 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.java @@ -74,7 +74,7 @@ public void testVariousOptions() throws BirtException, IOException { assertEquals( 3, workbook.getNumberOfSheets() ); assertTrue( workbook.getSheetAt(0) instanceof XSSFChartSheet ); assertEquals( 280, firstNullRow( workbook.getSheetAt(1) ) ); - assertEquals( 5, firstNullRow( workbook.getSheetAt(2) ) ); + // Can't check any more here because the pivot table isn't updated until Excel loads it :( } finally { inputStream.close(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.rptdesign index 908c9272964..d03b23348c2 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.rptdesign @@ -1,6 +1,6 @@ - Eclipse BIRT Designer Version 4.2.1.v201209101448 Build <4.2.1.v20120912-1721> + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Big Crosstab Report 1 +this.getDataSource( "Mission Data Source" ).setPrivateDriverProperty( "HOME", path ); +]]>
+ . diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.java new file mode 100644 index 00000000000..533017e5669 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.java @@ -0,0 +1,94 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Locale; + +import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue85Formulae extends ReportRunner { + + @Test + public void testRunReport() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue85Formulae.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals(4, this.firstNullRow(sheet)); + + assertEquals( 3035, sheet.getColumnWidth( 0 ) ); + assertEquals( 2157, sheet.getColumnWidth( 1 ) ); + assertEquals( 7021, sheet.getColumnWidth( 2 ) ); + assertEquals( 4205, sheet.getColumnWidth( 3 ) ); + assertEquals( 3474, sheet.getColumnWidth( 4 ) ); + assertEquals( 2852, sheet.getColumnWidth( 5 ) ); + assertEquals( 3510, sheet.getColumnWidth( 6 ) ); + assertEquals( 2889, sheet.getColumnWidth( 7 ) ); + assertEquals( 2048, sheet.getColumnWidth( 8 ) ); + + DataFormatter formatter = new DataFormatter(); + Locale locale = Locale.getDefault(); + + assertEquals( "1", formatter.formatCellValue(sheet.getRow(1).getCell(1))); + assertEquals( "2019-10-11 13:18:46", formatter.formatCellValue(sheet.getRow(1).getCell(2))); + assertEquals( "3.1415926536", formatter.formatCellValue(sheet.getRow(1).getCell(3))); + assertEquals( "3.1415926536", formatter.formatCellValue(sheet.getRow(1).getCell(4))); + assertEquals( "false", formatter.formatCellValue(sheet.getRow(1).getCell(5))); + if( locale.getDisplayName().equals( "en-US" ) ) { + assertEquals( "Oct 11, 2019", formatter.formatCellValue(sheet.getRow(1).getCell(6))); + assertEquals( "1:18:46 PM", formatter.formatCellValue(sheet.getRow(1).getCell(7))); + } else if( locale.getDisplayName().equals( "en-GB" ) ) { + assertEquals( "11-Oct-2019", formatter.formatCellValue(sheet.getRow(1).getCell(6))); + assertEquals( "13:18:46", formatter.formatCellValue(sheet.getRow(1).getCell(7))); + } + + assertEquals( "2", formatter.formatCellValue(sheet.getRow(2).getCell(1))); + assertEquals( "2019-10-11 13:18:46", formatter.formatCellValue(sheet.getRow(2).getCell(2))); + assertEquals( "6.2831853072", formatter.formatCellValue(sheet.getRow(2).getCell(3))); + assertEquals( "6.2831853072", formatter.formatCellValue(sheet.getRow(2).getCell(4))); + assertEquals( "true", formatter.formatCellValue(sheet.getRow(2).getCell(5))); + if( locale.getDisplayName().equals( "en-US" ) ) { + assertEquals( "Oct 11, 2019", formatter.formatCellValue(sheet.getRow(1).getCell(6))); + assertEquals( "1:18:46 PM", formatter.formatCellValue(sheet.getRow(1).getCell(7))); + } else if( locale.getDisplayName().equals( "en-GB" ) ) { + assertEquals( "11-Oct-2019", formatter.formatCellValue(sheet.getRow(1).getCell(6))); + assertEquals( "13:18:46", formatter.formatCellValue(sheet.getRow(1).getCell(7))); + } + + assertEquals( "B2+B3", formatter.formatCellValue(sheet.getRow(3).getCell(1))); + assertEquals( "D2+D3", formatter.formatCellValue(sheet.getRow(3).getCell(3))); + } finally { + inputStream.close(); + } + } + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.rptdesign new file mode 100644 index 00000000000..44d2575231a --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.rptdesign @@ -0,0 +1,449 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + Number Formats Test Report + in + + /templates/blank_report.gif + ltr + 96 + + + + + + + + 0 + Name + string + + + 1 + Integer + integer + + + 2 + DateTime + date-time + + + 3 + Decimal + decimal + + + 4 + Float + float + + + 5 + Boolean + boolean + + + 6 + Date + date + + + 7 + Time + time + + + + + Name + + + Integer + + + DateTime + + + Decimal + + + Float + + + Boolean + + + Date + + + Time + + + + + + 1 + Name + string + + + 2 + Integer + integer + + + 3 + DateTime + date-time + + + 4 + Decimal + decimal + + + 5 + Float + float + + + 6 + Boolean + boolean + + + 7 + Date + date + + + 8 + Time + time + + + + Data Source + " : rowCount ) ); +if( rowCount < 2 ) { + ++rowCount; + + var pi = 3.1415926535897932384626433832795; + + row[ "Name" ] = "Row " + rowCount; + row[ "Integer" ] = rowCount; + row[ "Float" ] = rowCount * pi; + row[ "Decimal" ] = rowCount * pi; + row[ "Boolean" ] = (rowCount % 2 == 0); + row[ "DateTime" ] = new Date(pi * 500000000000); + row[ "Date" ] = new Date(pi * 500000000000); + row[ "Time" ] = new Date(pi * 500000000000); + + // java.lang.System.out.println( "Date: " + row[ "Date" ] + " / " + row["Date"].getTime()); + + return true; +} else { + // java.lang.System.out.println( "rowCount: " + rowCount ); + return false; +} +]]> + + + + + + + + + + + + + a4 + 0.5cm + 0.5cm + 0.5cm + 0.5cm + + + html + new Date()]]> + + + + + + + 7.614583333333333in + Data Set + + + Name + Name + dataSetRow["Name"] + string + + + Integer + Integer + dataSetRow["Integer"] + integer + + + DateTime + DateTime + dataSetRow["DateTime"] + date-time + + + Decimal + Decimal + dataSetRow["Decimal"] + decimal + + + Float + Float + dataSetRow["Float"] + float + + + Boolean + Boolean + dataSetRow["Boolean"] + boolean + + + Date + Date + dataSetRow["Date"] + date + + + Time + Time + dataSetRow["Time"] + time + + + + 0.8645833333333334in + + + 0.6145833333333334in + + + 2in + + + 1.1979166666666667in + + + 0.9895833333333334in + + + 0.8125in + + + 1in + + + 0.8229166666666666in + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + Name + + + + + Integer + + + + + + Custom + yyyy-MM-dd hh:mm:ss + + DateTime + + + + + Decimal + + + + + + Unformatted + + Float + + + + + Boolean + + + + + + Medium Date + Medium Date + + Date + + + + + + Medium Time + Medium Time + + Time + + + + +
+ + #0000FF + solid + + + + + + + + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue87PrintSettings.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue87PrintSettings.java index c272648a8a3..3ff2c03e2d0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue87PrintSettings.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue87PrintSettings.java @@ -15,6 +15,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.FileOutputStream; @@ -22,6 +23,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.eclipse.birt.report.engine.api.RenderOption; import org.junit.Test; @@ -35,7 +37,6 @@ public class Issue87PrintSettings extends ReportRunner { @Override protected RenderOption prepareRenderOptions(String outputFormat, FileOutputStream outputStream) { - // TODO Auto-generated method stub RenderOption options = super.prepareRenderOptions(outputFormat, outputStream); if( scale ) { options.setOption( ExcelEmitter.PRINT_SCALE, 27 ); @@ -76,6 +77,13 @@ public void testPrintPagesXlsx() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals( 236, firstNullRow(sheet)); + CellRangeAddress repCols = sheet.getRepeatingColumns(); + CellRangeAddress repRows = sheet.getRepeatingRows(); + assertNull( repCols ); +// assertNotNull( repRows ); +// assertEquals( 1, repCols.getFirstRow() ); +// assertEquals( 2, repCols.getLastRow() ); + assertEquals(28, greatestNumColumns(sheet)); } finally { @@ -112,6 +120,13 @@ public void testPrintPagesXls() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals( 236, firstNullRow(sheet)); + + CellRangeAddress repCols = sheet.getRepeatingColumns(); + CellRangeAddress repRows = sheet.getRepeatingRows(); + assertNull( repCols ); + assertNotNull( repRows ); + assertEquals( 1, repRows.getFirstRow() ); + assertEquals( 2, repRows.getLastRow() ); assertEquals(28, greatestNumColumns(sheet)); @@ -150,6 +165,13 @@ public void testPrintScaleXlsx() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals( 236, firstNullRow(sheet)); + CellRangeAddress repCols = sheet.getRepeatingColumns(); + CellRangeAddress repRows = sheet.getRepeatingRows(); + assertNull( repCols ); +// assertNotNull( repRows ); +// assertEquals( 1, repRows.getFirstRow() ); +// assertEquals( 2, repRows.getLastRow() ); + assertEquals(28, greatestNumColumns(sheet)); } finally { @@ -186,6 +208,13 @@ public void testPrintScaleXls() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals( 236, firstNullRow(sheet)); + CellRangeAddress repCols = sheet.getRepeatingColumns(); + CellRangeAddress repRows = sheet.getRepeatingRows(); + assertNotNull( repRows ); + assertNull( repCols ); + assertEquals( 1, repRows.getFirstRow() ); + assertEquals( 2, repRows.getLastRow() ); + assertEquals(28, greatestNumColumns(sheet)); } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MannedSpaceMissions.xlsx b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MannedSpaceMissions.xlsx index 716bd144dde..d5528c98029 100644 Binary files a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MannedSpaceMissions.xlsx and b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MannedSpaceMissions.xlsx differ diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize.rptdesign index 7f585daaa70..d33748abac1 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize.rptdesign @@ -18,6 +18,7 @@
in /templates/blank_report.gif + auto layout ltr 96 @@ -324,10516 +325,10516 @@ from join CLASSICMODELS.CUSTOMERS c3 on 1=1 ]]> - - - 2.0 - - - - - - - Col1 - 1 - - 4 - 11 - 0 - NotNullable - - Col1 - - - - Col1 - - 11 - - - - - - - Col2 - 2 - - 4 - 11 - 0 - NotNullable - - Col2 - - - - Col2 - - 11 - - - - - - - Col3 - 3 - - 4 - 11 - 0 - NotNullable - - Col3 - - - - Col3 - - 11 - - - - - - - Col4 - 4 - - 4 - 11 - 0 - NotNullable - - Col4 - - - - Col4 - - 11 - - - - - - - Col5 - 5 - - 4 - 11 - 0 - NotNullable - - Col5 - - - - Col5 - - 11 - - - - - - - Col6 - 6 - - 4 - 11 - 0 - NotNullable - - Col6 - - - - Col6 - - 11 - - - - - - - Col7 - 7 - - 4 - 11 - 0 - NotNullable - - Col7 - - - - Col7 - - 11 - - - - - - - Col8 - 8 - - 4 - 11 - 0 - NotNullable - - Col8 - - - - Col8 - - 11 - - - - - - - Col9 - 9 - - 4 - 11 - 0 - NotNullable - - Col9 - - - - Col9 - - 11 - - - - - - - Col10 - 10 - - 4 - 11 - 0 - NotNullable - - Col10 - - - - Col10 - - 11 - - - - - - - Col11 - 11 - - 4 - 11 - 0 - NotNullable - - Col11 - - - - Col11 - - 11 - - - - - - - Col12 - 12 - - 4 - 11 - 0 - NotNullable - - Col12 - - - - Col12 - - 11 - - - - - - - Col13 - 13 - - 4 - 11 - 0 - NotNullable - - Col13 - - - - Col13 - - 11 - - - - - - - Col14 - 14 - - 4 - 11 - 0 - NotNullable - - Col14 - - - - Col14 - - 11 - - - - - - - Col15 - 15 - - 4 - 11 - 0 - NotNullable - - Col15 - - - - Col15 - - 11 - - - - - - - Col16 - 16 - - 4 - 11 - 0 - NotNullable - - Col16 - - - - Col16 - - 11 - - - - - - - Col17 - 17 - - 4 - 11 - 0 - NotNullable - - Col17 - - - - Col17 - - 11 - - - - - - - Col18 - 18 - - 4 - 11 - 0 - NotNullable - - Col18 - - - - Col18 - - 11 - - - - - - - Col19 - 19 - - 4 - 11 - 0 - NotNullable - - Col19 - - - - Col19 - - 11 - - - - - - - Col20 - 20 - - 4 - 11 - 0 - NotNullable - - Col20 - - - - Col20 - - 11 - - - - - - - Col21 - 21 - - 4 - 11 - 0 - NotNullable - - Col21 - - - - Col21 - - 11 - - - - - - - Col22 - 22 - - 4 - 11 - 0 - NotNullable - - Col22 - - - - Col22 - - 11 - - - - - - - Col23 - 23 - - 4 - 11 - 0 - NotNullable - - Col23 - - - - Col23 - - 11 - - - - - - - Col24 - 24 - - 4 - 11 - 0 - NotNullable - - Col24 - - - - Col24 - - 11 - - - - - - - Col25 - 25 - - 4 - 11 - 0 - NotNullable - - Col25 - - - - Col25 - - 11 - - - - - - - Col26 - 26 - - 4 - 11 - 0 - NotNullable - - Col26 - - - - Col26 - - 11 - - - - - - - Col27 - 27 - - 4 - 11 - 0 - NotNullable - - Col27 - - - - Col27 - - 11 - - - - - - - Col28 - 28 - - 4 - 11 - 0 - NotNullable - - Col28 - - - - Col28 - - 11 - - - - - - - Col29 - 29 - - 4 - 11 - 0 - NotNullable - - Col29 - - - - Col29 - - 11 - - - - - - - Col30 - 30 - - 4 - 11 - 0 - NotNullable - - Col30 - - - - Col30 - - 11 - - - - - - - Col31 - 31 - - 4 - 11 - 0 - NotNullable - - Col31 - - - - Col31 - - 11 - - - - - - - Col32 - 32 - - 4 - 11 - 0 - NotNullable - - Col32 - - - - Col32 - - 11 - - - - - - - Col33 - 33 - - 4 - 11 - 0 - NotNullable - - Col33 - - - - Col33 - - 11 - - - - - - - Col34 - 34 - - 4 - 11 - 0 - NotNullable - - Col34 - - - - Col34 - - 11 - - - - - - - Col35 - 35 - - 4 - 11 - 0 - NotNullable - - Col35 - - - - Col35 - - 11 - - - - - - - Col36 - 36 - - 4 - 11 - 0 - NotNullable - - Col36 - - - - Col36 - - 11 - - - - - - - Col37 - 37 - - 4 - 11 - 0 - NotNullable - - Col37 - - - - Col37 - - 11 - - - - - - - Col38 - 38 - - 4 - 11 - 0 - NotNullable - - Col38 - - - - Col38 - - 11 - - - - - - - Col39 - 39 - - 4 - 11 - 0 - NotNullable - - Col39 - - - - Col39 - - 11 - - - - - - - Col40 - 40 - - 4 - 11 - 0 - NotNullable - - Col40 - - - - Col40 - - 11 - - - - - - - Col41 - 41 - - 4 - 11 - 0 - NotNullable - - Col41 - - - - Col41 - - 11 - - - - - - - Col42 - 42 - - 4 - 11 - 0 - NotNullable - - Col42 - - - - Col42 - - 11 - - - - - - - Col43 - 43 - - 4 - 11 - 0 - NotNullable - - Col43 - - - - Col43 - - 11 - - - - - - - Col44 - 44 - - 4 - 11 - 0 - NotNullable - - Col44 - - - - Col44 - - 11 - - - - - - - Col45 - 45 - - 4 - 11 - 0 - NotNullable - - Col45 - - - - Col45 - - 11 - - - - - - - Col46 - 46 - - 4 - 11 - 0 - NotNullable - - Col46 - - - - Col46 - - 11 - - - - - - - Col47 - 47 - - 4 - 11 - 0 - NotNullable - - Col47 - - - - Col47 - - 11 - - - - - - - Col48 - 48 - - 4 - 11 - 0 - NotNullable - - Col48 - - - - Col48 - - 11 - - - - - - - Col49 - 49 - - 4 - 11 - 0 - NotNullable - - Col49 - - - - Col49 - - 11 - - - - - - - Col50 - 50 - - 4 - 11 - 0 - NotNullable - - Col50 - - - - Col50 - - 11 - - - - - - - Col51 - 51 - - 4 - 11 - 0 - NotNullable - - Col51 - - - - Col51 - - 11 - - - - - - - Col52 - 52 - - 4 - 11 - 0 - NotNullable - - Col52 - - - - Col52 - - 11 - - - - - - - Col53 - 53 - - 4 - 11 - 0 - NotNullable - - Col53 - - - - Col53 - - 11 - - - - - - - Col54 - 54 - - 4 - 11 - 0 - NotNullable - - Col54 - - - - Col54 - - 11 - - - - - - - Col55 - 55 - - 4 - 11 - 0 - NotNullable - - Col55 - - - - Col55 - - 11 - - - - - - - Col56 - 56 - - 4 - 11 - 0 - NotNullable - - Col56 - - - - Col56 - - 11 - - - - - - - Col57 - 57 - - 4 - 11 - 0 - NotNullable - - Col57 - - - - Col57 - - 11 - - - - - - - Col58 - 58 - - 4 - 11 - 0 - NotNullable - - Col58 - - - - Col58 - - 11 - - - - - - - Col59 - 59 - - 4 - 11 - 0 - NotNullable - - Col59 - - - - Col59 - - 11 - - - - - - - Col60 - 60 - - 4 - 11 - 0 - NotNullable - - Col60 - - - - Col60 - - 11 - - - - - - - Col61 - 61 - - 4 - 11 - 0 - NotNullable - - Col61 - - - - Col61 - - 11 - - - - - - - Col62 - 62 - - 4 - 11 - 0 - NotNullable - - Col62 - - - - Col62 - - 11 - - - - - - - Col63 - 63 - - 4 - 11 - 0 - NotNullable - - Col63 - - - - Col63 - - 11 - - - - - - - Col64 - 64 - - 4 - 11 - 0 - NotNullable - - Col64 - - - - Col64 - - 11 - - - - - - - Col65 - 65 - - 4 - 11 - 0 - NotNullable - - Col65 - - - - Col65 - - 11 - - - - - - - Col66 - 66 - - 4 - 11 - 0 - NotNullable - - Col66 - - - - Col66 - - 11 - - - - - - - Col67 - 67 - - 4 - 11 - 0 - NotNullable - - Col67 - - - - Col67 - - 11 - - - - - - - Col68 - 68 - - 4 - 11 - 0 - NotNullable - - Col68 - - - - Col68 - - 11 - - - - - - - Col69 - 69 - - 4 - 11 - 0 - NotNullable - - Col69 - - - - Col69 - - 11 - - - - - - - Col70 - 70 - - 4 - 11 - 0 - NotNullable - - Col70 - - - - Col70 - - 11 - - - - - - - Col71 - 71 - - 4 - 11 - 0 - NotNullable - - Col71 - - - - Col71 - - 11 - - - - - - - Col72 - 72 - - 4 - 11 - 0 - NotNullable - - Col72 - - - - Col72 - - 11 - - - - - - - Col73 - 73 - - 4 - 11 - 0 - NotNullable - - Col73 - - - - Col73 - - 11 - - - - - - - Col74 - 74 - - 4 - 11 - 0 - NotNullable - - Col74 - - - - Col74 - - 11 - - - - - - - Col75 - 75 - - 4 - 11 - 0 - NotNullable - - Col75 - - - - Col75 - - 11 - - - - - - - Col76 - 76 - - 4 - 11 - 0 - NotNullable - - Col76 - - - - Col76 - - 11 - - - - - - - Col77 - 77 - - 4 - 11 - 0 - NotNullable - - Col77 - - - - Col77 - - 11 - - - - - - - Col78 - 78 - - 4 - 11 - 0 - NotNullable - - Col78 - - - - Col78 - - 11 - - - - - - - Col79 - 79 - - 4 - 11 - 0 - NotNullable - - Col79 - - - - Col79 - - 11 - - - - - - - Col80 - 80 - - 4 - 11 - 0 - NotNullable - - Col80 - - - - Col80 - - 11 - - - - - - - Col81 - 81 - - 4 - 11 - 0 - NotNullable - - Col81 - - - - Col81 - - 11 - - - - - - - Col82 - 82 - - 4 - 11 - 0 - NotNullable - - Col82 - - - - Col82 - - 11 - - - - - - - Col83 - 83 - - 4 - 11 - 0 - NotNullable - - Col83 - - - - Col83 - - 11 - - - - - - - Col84 - 84 - - 4 - 11 - 0 - NotNullable - - Col84 - - - - Col84 - - 11 - - - - - - - Col85 - 85 - - 4 - 11 - 0 - NotNullable - - Col85 - - - - Col85 - - 11 - - - - - - - Col86 - 86 - - 4 - 11 - 0 - NotNullable - - Col86 - - - - Col86 - - 11 - - - - - - - Col87 - 87 - - 4 - 11 - 0 - NotNullable - - Col87 - - - - Col87 - - 11 - - - - - - - Col88 - 88 - - 4 - 11 - 0 - NotNullable - - Col88 - - - - Col88 - - 11 - - - - - - - Col89 - 89 - - 4 - 11 - 0 - NotNullable - - Col89 - - - - Col89 - - 11 - - - - - - - Col90 - 90 - - 4 - 11 - 0 - NotNullable - - Col90 - - - - Col90 - - 11 - - - - - - - Col91 - 91 - - 4 - 11 - 0 - NotNullable - - Col91 - - - - Col91 - - 11 - - - - - - - Col92 - 92 - - 4 - 11 - 0 - NotNullable - - Col92 - - - - Col92 - - 11 - - - - - - - Col93 - 93 - - 4 - 11 - 0 - NotNullable - - Col93 - - - - Col93 - - 11 - - - - - - - Col94 - 94 - - 4 - 11 - 0 - NotNullable - - Col94 - - - - Col94 - - 11 - - - - - - - Col95 - 95 - - 4 - 11 - 0 - NotNullable - - Col95 - - - - Col95 - - 11 - - - - - - - Col96 - 96 - - 4 - 11 - 0 - NotNullable - - Col96 - - - - Col96 - - 11 - - - - - - - Col97 - 97 - - 4 - 11 - 0 - NotNullable - - Col97 - - - - Col97 - - 11 - - - - - - - Col98 - 98 - - 4 - 11 - 0 - NotNullable - - Col98 - - - - Col98 - - 11 - - - - - - - Col99 - 99 - - 4 - 11 - 0 - NotNullable - - Col99 - - - - Col99 - - 11 - - - - - - - Col100 - 100 - - 4 - 11 - 0 - NotNullable - - Col100 - - - - Col100 - - 11 - - - - - - - Col101 - 101 - - 4 - 11 - 0 - NotNullable - - Col101 - - - - Col101 - - 11 - - - - - - - Col102 - 102 - - 4 - 11 - 0 - NotNullable - - Col102 - - - - Col102 - - 11 - - - - - - - Col103 - 103 - - 4 - 11 - 0 - NotNullable - - Col103 - - - - Col103 - - 11 - - - - - - - Col104 - 104 - - 4 - 11 - 0 - NotNullable - - Col104 - - - - Col104 - - 11 - - - - - - - Col105 - 105 - - 4 - 11 - 0 - NotNullable - - Col105 - - - - Col105 - - 11 - - - - - - - Col106 - 106 - - 4 - 11 - 0 - NotNullable - - Col106 - - - - Col106 - - 11 - - - - - - - Col107 - 107 - - 4 - 11 - 0 - NotNullable - - Col107 - - - - Col107 - - 11 - - - - - - - Col108 - 108 - - 4 - 11 - 0 - NotNullable - - Col108 - - - - Col108 - - 11 - - - - - - - Col109 - 109 - - 4 - 11 - 0 - NotNullable - - Col109 - - - - Col109 - - 11 - - - - - - - Col110 - 110 - - 4 - 11 - 0 - NotNullable - - Col110 - - - - Col110 - - 11 - - - - - - - Col111 - 111 - - 4 - 11 - 0 - NotNullable - - Col111 - - - - Col111 - - 11 - - - - - - - Col112 - 112 - - 4 - 11 - 0 - NotNullable - - Col112 - - - - Col112 - - 11 - - - - - - - Col113 - 113 - - 4 - 11 - 0 - NotNullable - - Col113 - - - - Col113 - - 11 - - - - - - - Col114 - 114 - - 4 - 11 - 0 - NotNullable - - Col114 - - - - Col114 - - 11 - - - - - - - Col115 - 115 - - 4 - 11 - 0 - NotNullable - - Col115 - - - - Col115 - - 11 - - - - - - - Col116 - 116 - - 4 - 11 - 0 - NotNullable - - Col116 - - - - Col116 - - 11 - - - - - - - Col117 - 117 - - 4 - 11 - 0 - NotNullable - - Col117 - - - - Col117 - - 11 - - - - - - - Col118 - 118 - - 4 - 11 - 0 - NotNullable - - Col118 - - - - Col118 - - 11 - - - - - - - Col119 - 119 - - 4 - 11 - 0 - NotNullable - - Col119 - - - - Col119 - - 11 - - - - - - - Col120 - 120 - - 4 - 11 - 0 - NotNullable - - Col120 - - - - Col120 - - 11 - - - - - - - Col121 - 121 - - 4 - 11 - 0 - NotNullable - - Col121 - - - - Col121 - - 11 - - - - - - - Col122 - 122 - - 4 - 11 - 0 - NotNullable - - Col122 - - - - Col122 - - 11 - - - - - - - Col123 - 123 - - 4 - 11 - 0 - NotNullable - - Col123 - - - - Col123 - - 11 - - - - - - - Col124 - 124 - - 4 - 11 - 0 - NotNullable - - Col124 - - - - Col124 - - 11 - - - - - - - Col125 - 125 - - 4 - 11 - 0 - NotNullable - - Col125 - - - - Col125 - - 11 - - - - - - - Col126 - 126 - - 4 - 11 - 0 - NotNullable - - Col126 - - - - Col126 - - 11 - - - - - - - Col127 - 127 - - 4 - 11 - 0 - NotNullable - - Col127 - - - - Col127 - - 11 - - - - - - - Col128 - 128 - - 4 - 11 - 0 - NotNullable - - Col128 - - - - Col128 - - 11 - - - - - - - Col129 - 129 - - 4 - 11 - 0 - NotNullable - - Col129 - - - - Col129 - - 11 - - - - - - - Col130 - 130 - - 4 - 11 - 0 - NotNullable - - Col130 - - - - Col130 - - 11 - - - - - - - Col131 - 131 - - 4 - 11 - 0 - NotNullable - - Col131 - - - - Col131 - - 11 - - - - - - - Col132 - 132 - - 4 - 11 - 0 - NotNullable - - Col132 - - - - Col132 - - 11 - - - - - - - Col133 - 133 - - 4 - 11 - 0 - NotNullable - - Col133 - - - - Col133 - - 11 - - - - - - - Col134 - 134 - - 4 - 11 - 0 - NotNullable - - Col134 - - - - Col134 - - 11 - - - - - - - Col135 - 135 - - 4 - 11 - 0 - NotNullable - - Col135 - - - - Col135 - - 11 - - - - - - - Col136 - 136 - - 4 - 11 - 0 - NotNullable - - Col136 - - - - Col136 - - 11 - - - - - - - Col137 - 137 - - 4 - 11 - 0 - NotNullable - - Col137 - - - - Col137 - - 11 - - - - - - - Col138 - 138 - - 4 - 11 - 0 - NotNullable - - Col138 - - - - Col138 - - 11 - - - - - - - Col139 - 139 - - 4 - 11 - 0 - NotNullable - - Col139 - - - - Col139 - - 11 - - - - - - - Col140 - 140 - - 4 - 11 - 0 - NotNullable - - Col140 - - - - Col140 - - 11 - - - - - - - Col141 - 141 - - 4 - 11 - 0 - NotNullable - - Col141 - - - - Col141 - - 11 - - - - - - - Col142 - 142 - - 4 - 11 - 0 - NotNullable - - Col142 - - - - Col142 - - 11 - - - - - - - Col143 - 143 - - 4 - 11 - 0 - NotNullable - - Col143 - - - - Col143 - - 11 - - - - - - - Col144 - 144 - - 4 - 11 - 0 - NotNullable - - Col144 - - - - Col144 - - 11 - - - - - - - Col145 - 145 - - 4 - 11 - 0 - NotNullable - - Col145 - - - - Col145 - - 11 - - - - - - - Col146 - 146 - - 4 - 11 - 0 - NotNullable - - Col146 - - - - Col146 - - 11 - - - - - - - Col147 - 147 - - 4 - 11 - 0 - NotNullable - - Col147 - - - - Col147 - - 11 - - - - - - - Col148 - 148 - - 4 - 11 - 0 - NotNullable - - Col148 - - - - Col148 - - 11 - - - - - - - Col149 - 149 - - 4 - 11 - 0 - NotNullable - - Col149 - - - - Col149 - - 11 - - - - - - - Col150 - 150 - - 4 - 11 - 0 - NotNullable - - Col150 - - - - Col150 - - 11 - - - - - - - Col151 - 151 - - 4 - 11 - 0 - NotNullable - - Col151 - - - - Col151 - - 11 - - - - - - - Col152 - 152 - - 4 - 11 - 0 - NotNullable - - Col152 - - - - Col152 - - 11 - - - - - - - Col153 - 153 - - 4 - 11 - 0 - NotNullable - - Col153 - - - - Col153 - - 11 - - - - - - - Col154 - 154 - - 4 - 11 - 0 - NotNullable - - Col154 - - - - Col154 - - 11 - - - - - - - Col155 - 155 - - 4 - 11 - 0 - NotNullable - - Col155 - - - - Col155 - - 11 - - - - - - - Col156 - 156 - - 4 - 11 - 0 - NotNullable - - Col156 - - - - Col156 - - 11 - - - - - - - Col157 - 157 - - 4 - 11 - 0 - NotNullable - - Col157 - - - - Col157 - - 11 - - - - - - - Col158 - 158 - - 4 - 11 - 0 - NotNullable - - Col158 - - - - Col158 - - 11 - - - - - - - Col159 - 159 - - 4 - 11 - 0 - NotNullable - - Col159 - - - - Col159 - - 11 - - - - - - - Col160 - 160 - - 4 - 11 - 0 - NotNullable - - Col160 - - - - Col160 - - 11 - - - - - - - Col161 - 161 - - 4 - 11 - 0 - NotNullable - - Col161 - - - - Col161 - - 11 - - - - - - - Col162 - 162 - - 4 - 11 - 0 - NotNullable - - Col162 - - - - Col162 - - 11 - - - - - - - Col163 - 163 - - 4 - 11 - 0 - NotNullable - - Col163 - - - - Col163 - - 11 - - - - - - - Col164 - 164 - - 4 - 11 - 0 - NotNullable - - Col164 - - - - Col164 - - 11 - - - - - - - Col165 - 165 - - 4 - 11 - 0 - NotNullable - - Col165 - - - - Col165 - - 11 - - - - - - - Col166 - 166 - - 4 - 11 - 0 - NotNullable - - Col166 - - - - Col166 - - 11 - - - - - - - Col167 - 167 - - 4 - 11 - 0 - NotNullable - - Col167 - - - - Col167 - - 11 - - - - - - - Col168 - 168 - - 4 - 11 - 0 - NotNullable - - Col168 - - - - Col168 - - 11 - - - - - - - Col169 - 169 - - 4 - 11 - 0 - NotNullable - - Col169 - - - - Col169 - - 11 - - - - - - - Col170 - 170 - - 4 - 11 - 0 - NotNullable - - Col170 - - - - Col170 - - 11 - - - - - - - Col171 - 171 - - 4 - 11 - 0 - NotNullable - - Col171 - - - - Col171 - - 11 - - - - - - - Col172 - 172 - - 4 - 11 - 0 - NotNullable - - Col172 - - - - Col172 - - 11 - - - - - - - Col173 - 173 - - 4 - 11 - 0 - NotNullable - - Col173 - - - - Col173 - - 11 - - - - - - - Col174 - 174 - - 4 - 11 - 0 - NotNullable - - Col174 - - - - Col174 - - 11 - - - - - - - Col175 - 175 - - 4 - 11 - 0 - NotNullable - - Col175 - - - - Col175 - - 11 - - - - - - - Col176 - 176 - - 4 - 11 - 0 - NotNullable - - Col176 - - - - Col176 - - 11 - - - - - - - Col177 - 177 - - 4 - 11 - 0 - NotNullable - - Col177 - - - - Col177 - - 11 - - - - - - - Col178 - 178 - - 4 - 11 - 0 - NotNullable - - Col178 - - - - Col178 - - 11 - - - - - - - Col179 - 179 - - 4 - 11 - 0 - NotNullable - - Col179 - - - - Col179 - - 11 - - - - - - - Col180 - 180 - - 4 - 11 - 0 - NotNullable - - Col180 - - - - Col180 - - 11 - - - - - - - Col181 - 181 - - 4 - 11 - 0 - NotNullable - - Col181 - - - - Col181 - - 11 - - - - - - - Col182 - 182 - - 4 - 11 - 0 - NotNullable - - Col182 - - - - Col182 - - 11 - - - - - - - Col183 - 183 - - 4 - 11 - 0 - NotNullable - - Col183 - - - - Col183 - - 11 - - - - - - - Col184 - 184 - - 4 - 11 - 0 - NotNullable - - Col184 - - - - Col184 - - 11 - - - - - - - Col185 - 185 - - 4 - 11 - 0 - NotNullable - - Col185 - - - - Col185 - - 11 - - - - - - - Col186 - 186 - - 4 - 11 - 0 - NotNullable - - Col186 - - - - Col186 - - 11 - - - - - - - Col187 - 187 - - 4 - 11 - 0 - NotNullable - - Col187 - - - - Col187 - - 11 - - - - - - - Col188 - 188 - - 4 - 11 - 0 - NotNullable - - Col188 - - - - Col188 - - 11 - - - - - - - Col189 - 189 - - 4 - 11 - 0 - NotNullable - - Col189 - - - - Col189 - - 11 - - - - - - - Col190 - 190 - - 4 - 11 - 0 - NotNullable - - Col190 - - - - Col190 - - 11 - - - - - - - Col191 - 191 - - 4 - 11 - 0 - NotNullable - - Col191 - - - - Col191 - - 11 - - - - - - - Col192 - 192 - - 4 - 11 - 0 - NotNullable - - Col192 - - - - Col192 - - 11 - - - - - - - Col193 - 193 - - 4 - 11 - 0 - NotNullable - - Col193 - - - - Col193 - - 11 - - - - - - - Col194 - 194 - - 4 - 11 - 0 - NotNullable - - Col194 - - - - Col194 - - 11 - - - - - - - Col195 - 195 - - 4 - 11 - 0 - NotNullable - - Col195 - - - - Col195 - - 11 - - - - - - - Col196 - 196 - - 4 - 11 - 0 - NotNullable - - Col196 - - - - Col196 - - 11 - - - - - - - Col197 - 197 - - 4 - 11 - 0 - NotNullable - - Col197 - - - - Col197 - - 11 - - - - - - - Col198 - 198 - - 4 - 11 - 0 - NotNullable - - Col198 - - - - Col198 - - 11 - - - - - - - Col199 - 199 - - 4 - 11 - 0 - NotNullable - - Col199 - - - - Col199 - - 11 - - - - - - - Col200 - 200 - - 4 - 11 - 0 - NotNullable - - Col200 - - - - Col200 - - 11 - - - - - - - Col201 - 201 - - 4 - 11 - 0 - NotNullable - - Col201 - - - - Col201 - - 11 - - - - - - - Col202 - 202 - - 4 - 11 - 0 - NotNullable - - Col202 - - - - Col202 - - 11 - - - - - - - Col203 - 203 - - 4 - 11 - 0 - NotNullable - - Col203 - - - - Col203 - - 11 - - - - - - - Col204 - 204 - - 4 - 11 - 0 - NotNullable - - Col204 - - - - Col204 - - 11 - - - - - - - Col205 - 205 - - 4 - 11 - 0 - NotNullable - - Col205 - - - - Col205 - - 11 - - - - - - - Col206 - 206 - - 4 - 11 - 0 - NotNullable - - Col206 - - - - Col206 - - 11 - - - - - - - Col207 - 207 - - 4 - 11 - 0 - NotNullable - - Col207 - - - - Col207 - - 11 - - - - - - - Col208 - 208 - - 4 - 11 - 0 - NotNullable - - Col208 - - - - Col208 - - 11 - - - - - - - Col209 - 209 - - 4 - 11 - 0 - NotNullable - - Col209 - - - - Col209 - - 11 - - - - - - - Col210 - 210 - - 4 - 11 - 0 - NotNullable - - Col210 - - - - Col210 - - 11 - - - - - - - Col211 - 211 - - 4 - 11 - 0 - NotNullable - - Col211 - - - - Col211 - - 11 - - - - - - - Col212 - 212 - - 4 - 11 - 0 - NotNullable - - Col212 - - - - Col212 - - 11 - - - - - - - Col213 - 213 - - 4 - 11 - 0 - NotNullable - - Col213 - - - - Col213 - - 11 - - - - - - - Col214 - 214 - - 4 - 11 - 0 - NotNullable - - Col214 - - - - Col214 - - 11 - - - - - - - Col215 - 215 - - 4 - 11 - 0 - NotNullable - - Col215 - - - - Col215 - - 11 - - - - - - - Col216 - 216 - - 4 - 11 - 0 - NotNullable - - Col216 - - - - Col216 - - 11 - - - - - - - Col217 - 217 - - 4 - 11 - 0 - NotNullable - - Col217 - - - - Col217 - - 11 - - - - - - - Col218 - 218 - - 4 - 11 - 0 - NotNullable - - Col218 - - - - Col218 - - 11 - - - - - - - Col219 - 219 - - 4 - 11 - 0 - NotNullable - - Col219 - - - - Col219 - - 11 - - - - - - - Col220 - 220 - - 4 - 11 - 0 - NotNullable - - Col220 - - - - Col220 - - 11 - - - - - - - Col221 - 221 - - 4 - 11 - 0 - NotNullable - - Col221 - - - - Col221 - - 11 - - - - - - - Col222 - 222 - - 4 - 11 - 0 - NotNullable - - Col222 - - - - Col222 - - 11 - - - - - - - Col223 - 223 - - 4 - 11 - 0 - NotNullable - - Col223 - - - - Col223 - - 11 - - - - - - - Col224 - 224 - - 4 - 11 - 0 - NotNullable - - Col224 - - - - Col224 - - 11 - - - - - - - Col225 - 225 - - 4 - 11 - 0 - NotNullable - - Col225 - - - - Col225 - - 11 - - - - - - - Col226 - 226 - - 4 - 11 - 0 - NotNullable - - Col226 - - - - Col226 - - 11 - - - - - - - Col227 - 227 - - 4 - 11 - 0 - NotNullable - - Col227 - - - - Col227 - - 11 - - - - - - - Col228 - 228 - - 4 - 11 - 0 - NotNullable - - Col228 - - - - Col228 - - 11 - - - - - - - Col229 - 229 - - 4 - 11 - 0 - NotNullable - - Col229 - - - - Col229 - - 11 - - - - - - - Col230 - 230 - - 4 - 11 - 0 - NotNullable - - Col230 - - - - Col230 - - 11 - - - - - - - Col231 - 231 - - 4 - 11 - 0 - NotNullable - - Col231 - - - - Col231 - - 11 - - - - - - - Col232 - 232 - - 4 - 11 - 0 - NotNullable - - Col232 - - - - Col232 - - 11 - - - - - - - Col233 - 233 - - 4 - 11 - 0 - NotNullable - - Col233 - - - - Col233 - - 11 - - - - - - - Col234 - 234 - - 4 - 11 - 0 - NotNullable - - Col234 - - - - Col234 - - 11 - - - - - - - Col235 - 235 - - 4 - 11 - 0 - NotNullable - - Col235 - - - - Col235 - - 11 - - - - - - - Col236 - 236 - - 4 - 11 - 0 - NotNullable - - Col236 - - - - Col236 - - 11 - - - - - - - Col237 - 237 - - 4 - 11 - 0 - NotNullable - - Col237 - - - - Col237 - - 11 - - - - - - - Col238 - 238 - - 4 - 11 - 0 - NotNullable - - Col238 - - - - Col238 - - 11 - - - - - - - Col239 - 239 - - 4 - 11 - 0 - NotNullable - - Col239 - - - - Col239 - - 11 - - - - - - - Col240 - 240 - - 4 - 11 - 0 - NotNullable - - Col240 - - - - Col240 - - 11 - - - - - - - Col241 - 241 - - 4 - 11 - 0 - NotNullable - - Col241 - - - - Col241 - - 11 - - - - - - - Col242 - 242 - - 4 - 11 - 0 - NotNullable - - Col242 - - - - Col242 - - 11 - - - - - - - Col243 - 243 - - 4 - 11 - 0 - NotNullable - - Col243 - - - - Col243 - - 11 - - - - - - - Col244 - 244 - - 4 - 11 - 0 - NotNullable - - Col244 - - - - Col244 - - 11 - - - - - - - Col245 - 245 - - 4 - 11 - 0 - NotNullable - - Col245 - - - - Col245 - - 11 - - - - - - - Col246 - 246 - - 4 - 11 - 0 - NotNullable - - Col246 - - - - Col246 - - 11 - - - - - - - Col247 - 247 - - 4 - 11 - 0 - NotNullable - - Col247 - - - - Col247 - - 11 - - - - - - - Col248 - 248 - - 4 - 11 - 0 - NotNullable - - Col248 - - - - Col248 - - 11 - - - - - - - Col249 - 249 - - 4 - 11 - 0 - NotNullable - - Col249 - - - - Col249 - - 11 - - - - - - - Col250 - 250 - - 4 - 11 - 0 - NotNullable - - Col250 - - - - Col250 - - 11 - - - - - - - Col251 - 251 - - 4 - 11 - 0 - NotNullable - - Col251 - - - - Col251 - - 11 - - - - - - - Col252 - 252 - - 4 - 11 - 0 - NotNullable - - Col252 - - - - Col252 - - 11 - - - - - - - Col253 - 253 - - 4 - 11 - 0 - NotNullable - - Col253 - - - - Col253 - - 11 - - - - - - - Col254 - 254 - - 4 - 11 - 0 - NotNullable - - Col254 - - - - Col254 - - 11 - - - - - - - Col255 - 255 - - 4 - 11 - 0 - NotNullable - - Col255 - - - - Col255 - - 11 - - - - - - - Col256 - 256 - - 4 - 11 - 0 - NotNullable - - Col256 - - - - Col256 - - 11 - - - - - - - Col257 - 257 - - 4 - 11 - 0 - NotNullable - - Col257 - - - - Col257 - - 11 - - - - - - - Col258 - 258 - - 4 - 11 - 0 - NotNullable - - Col258 - - - - Col258 - - 11 - - - - - - - Col259 - 259 - - 4 - 11 - 0 - NotNullable - - Col259 - - - - Col259 - - 11 - - - - - - - Col260 - 260 - - 4 - 11 - 0 - NotNullable - - Col260 - - - - Col260 - - 11 - - - - - - - Col261 - 261 - - 4 - 11 - 0 - NotNullable - - Col261 - - - - Col261 - - 11 - - - - - - - Col262 - 262 - - 4 - 11 - 0 - NotNullable - - Col262 - - - - Col262 - - 11 - - - - - - - Col263 - 263 - - 4 - 11 - 0 - NotNullable - - Col263 - - - - Col263 - - 11 - - - - - - - Col264 - 264 - - 4 - 11 - 0 - NotNullable - - Col264 - - - - Col264 - - 11 - - - - - - - Col265 - 265 - - 4 - 11 - 0 - NotNullable - - Col265 - - - - Col265 - - 11 - - - - - - - Col266 - 266 - - 4 - 11 - 0 - NotNullable - - Col266 - - - - Col266 - - 11 - - - - - - - Col267 - 267 - - 4 - 11 - 0 - NotNullable - - Col267 - - - - Col267 - - 11 - - - - - - - Col268 - 268 - - 4 - 11 - 0 - NotNullable - - Col268 - - - - Col268 - - 11 - - - - - - - Col269 - 269 - - 4 - 11 - 0 - NotNullable - - Col269 - - - - Col269 - - 11 - - - - - - - Col270 - 270 - - 4 - 11 - 0 - NotNullable - - Col270 - - - - Col270 - - 11 - - - - - - - Col271 - 271 - - 4 - 11 - 0 - NotNullable - - Col271 - - - - Col271 - - 11 - - - - - - - Col272 - 272 - - 4 - 11 - 0 - NotNullable - - Col272 - - - - Col272 - - 11 - - - - - - - Col273 - 273 - - 4 - 11 - 0 - NotNullable - - Col273 - - - - Col273 - - 11 - - - - - - - Col274 - 274 - - 4 - 11 - 0 - NotNullable - - Col274 - - - - Col274 - - 11 - - - - - - - Col275 - 275 - - 4 - 11 - 0 - NotNullable - - Col275 - - - - Col275 - - 11 - - - - - - - Col276 - 276 - - 4 - 11 - 0 - NotNullable - - Col276 - - - - Col276 - - 11 - - - - - - - Col277 - 277 - - 4 - 11 - 0 - NotNullable - - Col277 - - - - Col277 - - 11 - - - - - - - Col278 - 278 - - 4 - 11 - 0 - NotNullable - - Col278 - - - - Col278 - - 11 - - - - - - - Col279 - 279 - - 4 - 11 - 0 - NotNullable - - Col279 - - - - Col279 - - 11 - - - - - - - Col280 - 280 - - 4 - 11 - 0 - NotNullable - - Col280 - - - - Col280 - - 11 - - - - - - - Col281 - 281 - - 4 - 11 - 0 - NotNullable - - Col281 - - - - Col281 - - 11 - - - - - - - Col282 - 282 - - 4 - 11 - 0 - NotNullable - - Col282 - - - - Col282 - - 11 - - - - - - - Col283 - 283 - - 4 - 11 - 0 - NotNullable - - Col283 - - - - Col283 - - 11 - - - - - - - Col284 - 284 - - 4 - 11 - 0 - NotNullable - - Col284 - - - - Col284 - - 11 - - - - - - - Col285 - 285 - - 4 - 11 - 0 - NotNullable - - Col285 - - - - Col285 - - 11 - - - - - - - Col286 - 286 - - 4 - 11 - 0 - NotNullable - - Col286 - - - - Col286 - - 11 - - - - - - - Col287 - 287 - - 4 - 11 - 0 - NotNullable - - Col287 - - - - Col287 - - 11 - - - - - - - Col288 - 288 - - 4 - 11 - 0 - NotNullable - - Col288 - - - - Col288 - - 11 - - - - - - - Col289 - 289 - - 4 - 11 - 0 - NotNullable - - Col289 - - - - Col289 - - 11 - - - - - - - Col290 - 290 - - 4 - 11 - 0 - NotNullable - - Col290 - - - - Col290 - - 11 - - - - - - - Col291 - 291 - - 4 - 11 - 0 - NotNullable - - Col291 - - - - Col291 - - 11 - - - - - - - Col292 - 292 - - 4 - 11 - 0 - NotNullable - - Col292 - - - - Col292 - - 11 - - - - - - - Col293 - 293 - - 4 - 11 - 0 - NotNullable - - Col293 - - - - Col293 - - 11 - - - - - - - Col294 - 294 - - 4 - 11 - 0 - NotNullable - - Col294 - - - - Col294 - - 11 - - - - - - - Col295 - 295 - - 4 - 11 - 0 - NotNullable - - Col295 - - - - Col295 - - 11 - - - - - - - Col296 - 296 - - 4 - 11 - 0 - NotNullable - - Col296 - - - - Col296 - - 11 - - - - - - - Col297 - 297 - - 4 - 11 - 0 - NotNullable - - Col297 - - - - Col297 - - 11 - - - - - - - Col298 - 298 - - 4 - 11 - 0 - NotNullable - - Col298 - - - - Col298 - - 11 - - - - - - - Col299 - 299 - - 4 - 11 - 0 - NotNullable - - Col299 - - - - Col299 - - 11 - - - - - - - Col300 - 300 - - 4 - 11 - 0 - NotNullable - - Col300 - - - - Col300 - - 11 - - - - - - - Col301 - 301 - - 4 - 11 - 0 - NotNullable - - Col301 - - - - Col301 - - 11 - - - - - - - Col302 - 302 - - 4 - 11 - 0 - NotNullable - - Col302 - - - - Col302 - - 11 - - - - - - - Col303 - 303 - - 4 - 11 - 0 - NotNullable - - Col303 - - - - Col303 - - 11 - - - - - - - Col304 - 304 - - 4 - 11 - 0 - NotNullable - - Col304 - - - - Col304 - - 11 - - - - - - - Col305 - 305 - - 4 - 11 - 0 - NotNullable - - Col305 - - - - Col305 - - 11 - - - - - - - Col306 - 306 - - 4 - 11 - 0 - NotNullable - - Col306 - - - - Col306 - - 11 - - - - - - - Col307 - 307 - - 4 - 11 - 0 - NotNullable - - Col307 - - - - Col307 - - 11 - - - - - - - Col308 - 308 - - 4 - 11 - 0 - NotNullable - - Col308 - - - - Col308 - - 11 - - - - - - - Col309 - 309 - - 4 - 11 - 0 - NotNullable - - Col309 - - - - Col309 - - 11 - - - - - - - Col310 - 310 - - 4 - 11 - 0 - NotNullable - - Col310 - - - - Col310 - - 11 - - - - - - - Col311 - 311 - - 4 - 11 - 0 - NotNullable - - Col311 - - - - Col311 - - 11 - - - - - - - Col312 - 312 - - 4 - 11 - 0 - NotNullable - - Col312 - - - - Col312 - - 11 - - - - - - - Col313 - 313 - - 4 - 11 - 0 - NotNullable - - Col313 - - - - Col313 - - 11 - - - - - - - Col314 - 314 - - 4 - 11 - 0 - NotNullable - - Col314 - - - - Col314 - - 11 - - - - - - - Col315 - 315 - - 4 - 11 - 0 - NotNullable - - Col315 - - - - Col315 - - 11 - - - - - - - Col316 - 316 - - 4 - 11 - 0 - NotNullable - - Col316 - - - - Col316 - - 11 - - - - - - - Col317 - 317 - - 4 - 11 - 0 - NotNullable - - Col317 - - - - Col317 - - 11 - - - - - - - Col318 - 318 - - 4 - 11 - 0 - NotNullable - - Col318 - - - - Col318 - - 11 - - - - - - - Col319 - 319 - - 4 - 11 - 0 - NotNullable - - Col319 - - - - Col319 - - 11 - - - - - - - Col320 - 320 - - 4 - 11 - 0 - NotNullable - - Col320 - - - - Col320 - - 11 - - - - - - - Col321 - 321 - - 4 - 11 - 0 - NotNullable - - Col321 - - - - Col321 - - 11 - - - - - - - Col322 - 322 - - 4 - 11 - 0 - NotNullable - - Col322 - - - - Col322 - - 11 - - - - - - - Col323 - 323 - - 4 - 11 - 0 - NotNullable - - Col323 - - - - Col323 - - 11 - - - - - - - Col324 - 324 - - 4 - 11 - 0 - NotNullable - - Col324 - - - - Col324 - - 11 - - - - - - - Col325 - 325 - - 4 - 11 - 0 - NotNullable - - Col325 - - - - Col325 - - 11 - - - - - - - Col326 - 326 - - 4 - 11 - 0 - NotNullable - - Col326 - - - - Col326 - - 11 - - - - - - - Col327 - 327 - - 4 - 11 - 0 - NotNullable - - Col327 - - - - Col327 - - 11 - - - - - - - Col328 - 328 - - 4 - 11 - 0 - NotNullable - - Col328 - - - - Col328 - - 11 - - - - - - - Col329 - 329 - - 4 - 11 - 0 - NotNullable - - Col329 - - - - Col329 - - 11 - - - - - - - Col330 - 330 - - 4 - 11 - 0 - NotNullable - - Col330 - - - - Col330 - - 11 - - - - - - - Col331 - 331 - - 4 - 11 - 0 - NotNullable - - Col331 - - - - Col331 - - 11 - - - - - - - Col332 - 332 - - 4 - 11 - 0 - NotNullable - - Col332 - - - - Col332 - - 11 - - - - - - - Col333 - 333 - - 4 - 11 - 0 - NotNullable - - Col333 - - - - Col333 - - 11 - - - - - - - Col334 - 334 - - 4 - 11 - 0 - NotNullable - - Col334 - - - - Col334 - - 11 - - - - - - - Col335 - 335 - - 4 - 11 - 0 - NotNullable - - Col335 - - - - Col335 - - 11 - - - - - - - Col336 - 336 - - 4 - 11 - 0 - NotNullable - - Col336 - - - - Col336 - - 11 - - - - - - - Col337 - 337 - - 4 - 11 - 0 - NotNullable - - Col337 - - - - Col337 - - 11 - - - - - - - Col338 - 338 - - 4 - 11 - 0 - NotNullable - - Col338 - - - - Col338 - - 11 - - - - - - - Col339 - 339 - - 4 - 11 - 0 - NotNullable - - Col339 - - - - Col339 - - 11 - - - - - - - Col340 - 340 - - 4 - 11 - 0 - NotNullable - - Col340 - - - - Col340 - - 11 - - - - - - - Col341 - 341 - - 4 - 11 - 0 - NotNullable - - Col341 - - - - Col341 - - 11 - - - - - - - Col342 - 342 - - 4 - 11 - 0 - NotNullable - - Col342 - - - - Col342 - - 11 - - - - - - - Col343 - 343 - - 4 - 11 - 0 - NotNullable - - Col343 - - - - Col343 - - 11 - - - - - - - Col344 - 344 - - 4 - 11 - 0 - NotNullable - - Col344 - - - - Col344 - - 11 - - - - - - - Col345 - 345 - - 4 - 11 - 0 - NotNullable - - Col345 - - - - Col345 - - 11 - - - - - - - Col346 - 346 - - 4 - 11 - 0 - NotNullable - - Col346 - - - - Col346 - - 11 - - - - - - - Col347 - 347 - - 4 - 11 - 0 - NotNullable - - Col347 - - - - Col347 - - 11 - - - - - - - Col348 - 348 - - 4 - 11 - 0 - NotNullable - - Col348 - - - - Col348 - - 11 - - - - - - - Col349 - 349 - - 4 - 11 - 0 - NotNullable - - Col349 - - - - Col349 - - 11 - - - - - - - Col350 - 350 - - 4 - 11 - 0 - NotNullable - - Col350 - - - - Col350 - - 11 - - - - - - - Col351 - 351 - - 4 - 11 - 0 - NotNullable - - Col351 - - - - Col351 - - 11 - - - - - - - Col352 - 352 - - 4 - 11 - 0 - NotNullable - - Col352 - - - - Col352 - - 11 - - - - - - - Col353 - 353 - - 4 - 11 - 0 - NotNullable - - Col353 - - - - Col353 - - 11 - - - - - - - Col354 - 354 - - 4 - 11 - 0 - NotNullable - - Col354 - - - - Col354 - - 11 - - - - - - - Col355 - 355 - - 4 - 11 - 0 - NotNullable - - Col355 - - - - Col355 - - 11 - - - - - - - Col356 - 356 - - 4 - 11 - 0 - NotNullable - - Col356 - - - - Col356 - - 11 - - - - - - - Col357 - 357 - - 4 - 11 - 0 - NotNullable - - Col357 - - - - Col357 - - 11 - - - - - - - Col358 - 358 - - 4 - 11 - 0 - NotNullable - - Col358 - - - - Col358 - - 11 - - - - - - - Col359 - 359 - - 4 - 11 - 0 - NotNullable - - Col359 - - - - Col359 - - 11 - - - - - - - Col360 - 360 - - 4 - 11 - 0 - NotNullable - - Col360 - - - - Col360 - - 11 - - - - - - - Col361 - 361 - - 4 - 11 - 0 - NotNullable - - Col361 - - - - Col361 - - 11 - - - - - - - Col362 - 362 - - 4 - 11 - 0 - NotNullable - - Col362 - - - - Col362 - - 11 - - - - - - - Col363 - 363 - - 4 - 11 - 0 - NotNullable - - Col363 - - - - Col363 - - 11 - - - - - - - Col364 - 364 - - 4 - 11 - 0 - NotNullable - - Col364 - - - - Col364 - - 11 - - - - - - - Col365 - 365 - - 4 - 11 - 0 - NotNullable - - Col365 - - - - Col365 - - 11 - - - - - - - Col366 - 366 - - 4 - 11 - 0 - NotNullable - - Col366 - - - - Col366 - - 11 - - - - - - - Col367 - 367 - - 4 - 11 - 0 - NotNullable - - Col367 - - - - Col367 - - 11 - - - - - - - Col368 - 368 - - 4 - 11 - 0 - NotNullable - - Col368 - - - - Col368 - - 11 - - - - - - - Col369 - 369 - - 4 - 11 - 0 - NotNullable - - Col369 - - - - Col369 - - 11 - - - - - - - Col370 - 370 - - 4 - 11 - 0 - NotNullable - - Col370 - - - - Col370 - - 11 - - - - - - - Col371 - 371 - - 4 - 11 - 0 - NotNullable - - Col371 - - - - Col371 - - 11 - - - - - - - Col372 - 372 - - 4 - 11 - 0 - NotNullable - - Col372 - - - - Col372 - - 11 - - - - - - - Col373 - 373 - - 4 - 11 - 0 - NotNullable - - Col373 - - - - Col373 - - 11 - - - - - - - Col374 - 374 - - 4 - 11 - 0 - NotNullable - - Col374 - - - - Col374 - - 11 - - - - - - - Col375 - 375 - - 4 - 11 - 0 - NotNullable - - Col375 - - - - Col375 - - 11 - - - - - - - Col376 - 376 - - 4 - 11 - 0 - NotNullable - - Col376 - - - - Col376 - - 11 - - - - - - - Col377 - 377 - - 4 - 11 - 0 - NotNullable - - Col377 - - - - Col377 - - 11 - - - - - - - Col378 - 378 - - 4 - 11 - 0 - NotNullable - - Col378 - - - - Col378 - - 11 - - - - - - - Col379 - 379 - - 4 - 11 - 0 - NotNullable - - Col379 - - - - Col379 - - 11 - - - - - - - Col380 - 380 - - 4 - 11 - 0 - NotNullable - - Col380 - - - - Col380 - - 11 - - - - - - - Col381 - 381 - - 4 - 11 - 0 - NotNullable - - Col381 - - - - Col381 - - 11 - - - - - - - Col382 - 382 - - 4 - 11 - 0 - NotNullable - - Col382 - - - - Col382 - - 11 - - - - - - - Col383 - 383 - - 4 - 11 - 0 - NotNullable - - Col383 - - - - Col383 - - 11 - - - - - - - Col384 - 384 - - 4 - 11 - 0 - NotNullable - - Col384 - - - - Col384 - - 11 - - - - - - - Col385 - 385 - - 4 - 11 - 0 - NotNullable - - Col385 - - - - Col385 - - 11 - - - - - - - Col386 - 386 - - 4 - 11 - 0 - NotNullable - - Col386 - - - - Col386 - - 11 - - - - - - - Col387 - 387 - - 4 - 11 - 0 - NotNullable - - Col387 - - - - Col387 - - 11 - - - - - - - Col388 - 388 - - 4 - 11 - 0 - NotNullable - - Col388 - - - - Col388 - - 11 - - - - - - - Col389 - 389 - - 4 - 11 - 0 - NotNullable - - Col389 - - - - Col389 - - 11 - - - - - - - Col390 - 390 - - 4 - 11 - 0 - NotNullable - - Col390 - - - - Col390 - - 11 - - - - - - - Col391 - 391 - - 4 - 11 - 0 - NotNullable - - Col391 - - - - Col391 - - 11 - - - - - - - Col392 - 392 - - 4 - 11 - 0 - NotNullable - - Col392 - - - - Col392 - - 11 - - - - - - - Col393 - 393 - - 4 - 11 - 0 - NotNullable - - Col393 - - - - Col393 - - 11 - - - - - - - Col394 - 394 - - 4 - 11 - 0 - NotNullable - - Col394 - - - - Col394 - - 11 - - - - - - - Col395 - 395 - - 4 - 11 - 0 - NotNullable - - Col395 - - - - Col395 - - 11 - - - - - - - Col396 - 396 - - 4 - 11 - 0 - NotNullable - - Col396 - - - - Col396 - - 11 - - - - - - - Col397 - 397 - - 4 - 11 - 0 - NotNullable - - Col397 - - - - Col397 - - 11 - - - - - - - Col398 - 398 - - 4 - 11 - 0 - NotNullable - - Col398 - - - - Col398 - - 11 - - - - - - - Col399 - 399 - - 4 - 11 - 0 - NotNullable - - Col399 - - - - Col399 - - 11 - - - - - - - Col400 - 400 - - 4 - 11 - 0 - NotNullable - - Col400 - - - - Col400 - - 11 - - - - - - - Col401 - 401 - - 4 - 11 - 0 - NotNullable - - Col401 - - - - Col401 - - 11 - - - - - - - Col402 - 402 - - 4 - 11 - 0 - NotNullable - - Col402 - - - - Col402 - - 11 - - - - - - - Col403 - 403 - - 4 - 11 - 0 - NotNullable - - Col403 - - - - Col403 - - 11 - - - - - - - Col404 - 404 - - 4 - 11 - 0 - NotNullable - - Col404 - - - - Col404 - - 11 - - - - - - - Col405 - 405 - - 4 - 11 - 0 - NotNullable - - Col405 - - - - Col405 - - 11 - - - - - - - Col406 - 406 - - 4 - 11 - 0 - NotNullable - - Col406 - - - - Col406 - - 11 - - - - - - - Col407 - 407 - - 4 - 11 - 0 - NotNullable - - Col407 - - - - Col407 - - 11 - - - - - - - Col408 - 408 - - 4 - 11 - 0 - NotNullable - - Col408 - - - - Col408 - - 11 - - - - - - - Col409 - 409 - - 4 - 11 - 0 - NotNullable - - Col409 - - - - Col409 - - 11 - - - - - - - Col410 - 410 - - 4 - 11 - 0 - NotNullable - - Col410 - - - - Col410 - - 11 - - - - - - - Col411 - 411 - - 4 - 11 - 0 - NotNullable - - Col411 - - - - Col411 - - 11 - - - - - - - Col412 - 412 - - 4 - 11 - 0 - NotNullable - - Col412 - - - - Col412 - - 11 - - - - - - - Col413 - 413 - - 4 - 11 - 0 - NotNullable - - Col413 - - - - Col413 - - 11 - - - - - - - Col414 - 414 - - 4 - 11 - 0 - NotNullable - - Col414 - - - - Col414 - - 11 - - - - - - - Col415 - 415 - - 4 - 11 - 0 - NotNullable - - Col415 - - - - Col415 - - 11 - - - - - - - Col416 - 416 - - 4 - 11 - 0 - NotNullable - - Col416 - - - - Col416 - - 11 - - - - - - - Col417 - 417 - - 4 - 11 - 0 - NotNullable - - Col417 - - - - Col417 - - 11 - - - - - - - Col418 - 418 - - 4 - 11 - 0 - NotNullable - - Col418 - - - - Col418 - - 11 - - - - - - - Col419 - 419 - - 4 - 11 - 0 - NotNullable - - Col419 - - - - Col419 - - 11 - - - - - - - Col420 - 420 - - 4 - 11 - 0 - NotNullable - - Col420 - - - - Col420 - - 11 - - - - - - - Col421 - 421 - - 4 - 11 - 0 - NotNullable - - Col421 - - - - Col421 - - 11 - - - - - - - Col422 - 422 - - 4 - 11 - 0 - NotNullable - - Col422 - - - - Col422 - - 11 - - - - - - - Col423 - 423 - - 4 - 11 - 0 - NotNullable - - Col423 - - - - Col423 - - 11 - - - - - - - Col424 - 424 - - 4 - 11 - 0 - NotNullable - - Col424 - - - - Col424 - - 11 - - - - - - - Col425 - 425 - - 4 - 11 - 0 - NotNullable - - Col425 - - - - Col425 - - 11 - - - - - - - Col426 - 426 - - 4 - 11 - 0 - NotNullable - - Col426 - - - - Col426 - - 11 - - - - - - - Col427 - 427 - - 4 - 11 - 0 - NotNullable - - Col427 - - - - Col427 - - 11 - - - - - - - Col428 - 428 - - 4 - 11 - 0 - NotNullable - - Col428 - - - - Col428 - - 11 - - - - - - - Col429 - 429 - - 4 - 11 - 0 - NotNullable - - Col429 - - - - Col429 - - 11 - - - - - - - Col430 - 430 - - 4 - 11 - 0 - NotNullable - - Col430 - - - - Col430 - - 11 - - - - - - - Col431 - 431 - - 4 - 11 - 0 - NotNullable - - Col431 - - - - Col431 - - 11 - - - - - - - Col432 - 432 - - 4 - 11 - 0 - NotNullable - - Col432 - - - - Col432 - - 11 - - - - - - - Col433 - 433 - - 4 - 11 - 0 - NotNullable - - Col433 - - - - Col433 - - 11 - - - - - - - Col434 - 434 - - 4 - 11 - 0 - NotNullable - - Col434 - - - - Col434 - - 11 - - - - - - - Col435 - 435 - - 4 - 11 - 0 - NotNullable - - Col435 - - - - Col435 - - 11 - - - - - - - Col436 - 436 - - 4 - 11 - 0 - NotNullable - - Col436 - - - - Col436 - - 11 - - - - - - - Col437 - 437 - - 4 - 11 - 0 - NotNullable - - Col437 - - - - Col437 - - 11 - - - - - - - Col438 - 438 - - 4 - 11 - 0 - NotNullable - - Col438 - - - - Col438 - - 11 - - - - - - - Col439 - 439 - - 4 - 11 - 0 - NotNullable - - Col439 - - - - Col439 - - 11 - - - - - - - Col440 - 440 - - 4 - 11 - 0 - NotNullable - - Col440 - - - - Col440 - - 11 - - - - - - - Col441 - 441 - - 4 - 11 - 0 - NotNullable - - Col441 - - - - Col441 - - 11 - - - - - - - Col442 - 442 - - 4 - 11 - 0 - NotNullable - - Col442 - - - - Col442 - - 11 - - - - - - - Col443 - 443 - - 4 - 11 - 0 - NotNullable - - Col443 - - - - Col443 - - 11 - - - - - - - Col444 - 444 - - 4 - 11 - 0 - NotNullable - - Col444 - - - - Col444 - - 11 - - - - - - - Col445 - 445 - - 4 - 11 - 0 - NotNullable - - Col445 - - - - Col445 - - 11 - - - - - - - Col446 - 446 - - 4 - 11 - 0 - NotNullable - - Col446 - - - - Col446 - - 11 - - - - - - - Col447 - 447 - - 4 - 11 - 0 - NotNullable - - Col447 - - - - Col447 - - 11 - - - - - - - Col448 - 448 - - 4 - 11 - 0 - NotNullable - - Col448 - - - - Col448 - - 11 - - - - - - - Col449 - 449 - - 4 - 11 - 0 - NotNullable - - Col449 - - - - Col449 - - 11 - - - - - - - Col450 - 450 - - 4 - 11 - 0 - NotNullable - - Col450 - - - - Col450 - - 11 - - - - - - - Col451 - 451 - - 4 - 11 - 0 - NotNullable - - Col451 - - - - Col451 - - 11 - - - - - - - Col452 - 452 - - 4 - 11 - 0 - NotNullable - - Col452 - - - - Col452 - - 11 - - - - - - - Col453 - 453 - - 4 - 11 - 0 - NotNullable - - Col453 - - - - Col453 - - 11 - - - - - - - Col454 - 454 - - 4 - 11 - 0 - NotNullable - - Col454 - - - - Col454 - - 11 - - - - - - - Col455 - 455 - - 4 - 11 - 0 - NotNullable - - Col455 - - - - Col455 - - 11 - - - - - - - Col456 - 456 - - 4 - 11 - 0 - NotNullable - - Col456 - - - - Col456 - - 11 - - - - - - - Col457 - 457 - - 4 - 11 - 0 - NotNullable - - Col457 - - - - Col457 - - 11 - - - - - - - Col458 - 458 - - 4 - 11 - 0 - NotNullable - - Col458 - - - - Col458 - - 11 - - - - - - - Col459 - 459 - - 4 - 11 - 0 - NotNullable - - Col459 - - - - Col459 - - 11 - - - - - - - Col460 - 460 - - 4 - 11 - 0 - NotNullable - - Col460 - - - - Col460 - - 11 - - - - - - - Col461 - 461 - - 4 - 11 - 0 - NotNullable - - Col461 - - - - Col461 - - 11 - - - - - - - Col462 - 462 - - 4 - 11 - 0 - NotNullable - - Col462 - - - - Col462 - - 11 - - - - - - - Col463 - 463 - - 4 - 11 - 0 - NotNullable - - Col463 - - - - Col463 - - 11 - - - - - - - Col464 - 464 - - 4 - 11 - 0 - NotNullable - - Col464 - - - - Col464 - - 11 - - - - - - - Col465 - 465 - - 4 - 11 - 0 - NotNullable - - Col465 - - - - Col465 - - 11 - - - - - - - Col466 - 466 - - 4 - 11 - 0 - NotNullable - - Col466 - - - - Col466 - - 11 - - - - - - - Col467 - 467 - - 4 - 11 - 0 - NotNullable - - Col467 - - - - Col467 - - 11 - - - - - - - Col468 - 468 - - 4 - 11 - 0 - NotNullable - - Col468 - - - - Col468 - - 11 - - - - - - - Col469 - 469 - - 4 - 11 - 0 - NotNullable - - Col469 - - - - Col469 - - 11 - - - - - - - Col470 - 470 - - 4 - 11 - 0 - NotNullable - - Col470 - - - - Col470 - - 11 - - - - - - - Col471 - 471 - - 4 - 11 - 0 - NotNullable - - Col471 - - - - Col471 - - 11 - - - - - - - Col472 - 472 - - 4 - 11 - 0 - NotNullable - - Col472 - - - - Col472 - - 11 - - - - - - - Col473 - 473 - - 4 - 11 - 0 - NotNullable - - Col473 - - - - Col473 - - 11 - - - - - - - Col474 - 474 - - 4 - 11 - 0 - NotNullable - - Col474 - - - - Col474 - - 11 - - - - - - - Col475 - 475 - - 4 - 11 - 0 - NotNullable - - Col475 - - - - Col475 - - 11 - - - - - - - Col476 - 476 - - 4 - 11 - 0 - NotNullable - - Col476 - - - - Col476 - - 11 - - - - - - - Col477 - 477 - - 4 - 11 - 0 - NotNullable - - Col477 - - - - Col477 - - 11 - - - - - - - Col478 - 478 - - 4 - 11 - 0 - NotNullable - - Col478 - - - - Col478 - - 11 - - - - - - - Col479 - 479 - - 4 - 11 - 0 - NotNullable - - Col479 - - - - Col479 - - 11 - - - - - - - Col480 - 480 - - 4 - 11 - 0 - NotNullable - - Col480 - - - - Col480 - - 11 - - - - - - - Col481 - 481 - - 4 - 11 - 0 - NotNullable - - Col481 - - - - Col481 - - 11 - - - - - - - Col482 - 482 - - 4 - 11 - 0 - NotNullable - - Col482 - - - - Col482 - - 11 - - - - - - - Col483 - 483 - - 4 - 11 - 0 - NotNullable - - Col483 - - - - Col483 - - 11 - - - - - - - Col484 - 484 - - 4 - 11 - 0 - NotNullable - - Col484 - - - - Col484 - - 11 - - - - - - - Col485 - 485 - - 4 - 11 - 0 - NotNullable - - Col485 - - - - Col485 - - 11 - - - - - - - Col486 - 486 - - 4 - 11 - 0 - NotNullable - - Col486 - - - - Col486 - - 11 - - - - - - - Col487 - 487 - - 4 - 11 - 0 - NotNullable - - Col487 - - - - Col487 - - 11 - - - - - - - Col488 - 488 - - 4 - 11 - 0 - NotNullable - - Col488 - - - - Col488 - - 11 - - - - - - - Col489 - 489 - - 4 - 11 - 0 - NotNullable - - Col489 - - - - Col489 - - 11 - - - - - - - Col490 - 490 - - 4 - 11 - 0 - NotNullable - - Col490 - - - - Col490 - - 11 - - - - - - - Col491 - 491 - - 4 - 11 - 0 - NotNullable - - Col491 - - - - Col491 - - 11 - - - - - - - Col492 - 492 - - 4 - 11 - 0 - NotNullable - - Col492 - - - - Col492 - - 11 - - - - - - - Col493 - 493 - - 4 - 11 - 0 - NotNullable - - Col493 - - - - Col493 - - 11 - - - - - - - Col494 - 494 - - 4 - 11 - 0 - NotNullable - - Col494 - - - - Col494 - - 11 - - - - - - - Col495 - 495 - - 4 - 11 - 0 - NotNullable - - Col495 - - - - Col495 - - 11 - - - - - - - Col496 - 496 - - 4 - 11 - 0 - NotNullable - - Col496 - - - - Col496 - - 11 - - - - - - - Col497 - 497 - - 4 - 11 - 0 - NotNullable - - Col497 - - - - Col497 - - 11 - - - - - - - Col498 - 498 - - 4 - 11 - 0 - NotNullable - - Col498 - - - - Col498 - - 11 - - - - - - - Col499 - 499 - - 4 - 11 - 0 - NotNullable - - Col499 - - - - Col499 - - 11 - - - - - - - Col500 - 500 - - 4 - 11 - 0 - NotNullable - - Col500 - - - - Col500 - - 11 - - - - - - - + + + 2.0 + + + + + + + Col1 + 1 + + 4 + 11 + 0 + NotNullable + + Col1 + + + + Col1 + + 11 + + + + + + + Col2 + 2 + + 4 + 11 + 0 + NotNullable + + Col2 + + + + Col2 + + 11 + + + + + + + Col3 + 3 + + 4 + 11 + 0 + NotNullable + + Col3 + + + + Col3 + + 11 + + + + + + + Col4 + 4 + + 4 + 11 + 0 + NotNullable + + Col4 + + + + Col4 + + 11 + + + + + + + Col5 + 5 + + 4 + 11 + 0 + NotNullable + + Col5 + + + + Col5 + + 11 + + + + + + + Col6 + 6 + + 4 + 11 + 0 + NotNullable + + Col6 + + + + Col6 + + 11 + + + + + + + Col7 + 7 + + 4 + 11 + 0 + NotNullable + + Col7 + + + + Col7 + + 11 + + + + + + + Col8 + 8 + + 4 + 11 + 0 + NotNullable + + Col8 + + + + Col8 + + 11 + + + + + + + Col9 + 9 + + 4 + 11 + 0 + NotNullable + + Col9 + + + + Col9 + + 11 + + + + + + + Col10 + 10 + + 4 + 11 + 0 + NotNullable + + Col10 + + + + Col10 + + 11 + + + + + + + Col11 + 11 + + 4 + 11 + 0 + NotNullable + + Col11 + + + + Col11 + + 11 + + + + + + + Col12 + 12 + + 4 + 11 + 0 + NotNullable + + Col12 + + + + Col12 + + 11 + + + + + + + Col13 + 13 + + 4 + 11 + 0 + NotNullable + + Col13 + + + + Col13 + + 11 + + + + + + + Col14 + 14 + + 4 + 11 + 0 + NotNullable + + Col14 + + + + Col14 + + 11 + + + + + + + Col15 + 15 + + 4 + 11 + 0 + NotNullable + + Col15 + + + + Col15 + + 11 + + + + + + + Col16 + 16 + + 4 + 11 + 0 + NotNullable + + Col16 + + + + Col16 + + 11 + + + + + + + Col17 + 17 + + 4 + 11 + 0 + NotNullable + + Col17 + + + + Col17 + + 11 + + + + + + + Col18 + 18 + + 4 + 11 + 0 + NotNullable + + Col18 + + + + Col18 + + 11 + + + + + + + Col19 + 19 + + 4 + 11 + 0 + NotNullable + + Col19 + + + + Col19 + + 11 + + + + + + + Col20 + 20 + + 4 + 11 + 0 + NotNullable + + Col20 + + + + Col20 + + 11 + + + + + + + Col21 + 21 + + 4 + 11 + 0 + NotNullable + + Col21 + + + + Col21 + + 11 + + + + + + + Col22 + 22 + + 4 + 11 + 0 + NotNullable + + Col22 + + + + Col22 + + 11 + + + + + + + Col23 + 23 + + 4 + 11 + 0 + NotNullable + + Col23 + + + + Col23 + + 11 + + + + + + + Col24 + 24 + + 4 + 11 + 0 + NotNullable + + Col24 + + + + Col24 + + 11 + + + + + + + Col25 + 25 + + 4 + 11 + 0 + NotNullable + + Col25 + + + + Col25 + + 11 + + + + + + + Col26 + 26 + + 4 + 11 + 0 + NotNullable + + Col26 + + + + Col26 + + 11 + + + + + + + Col27 + 27 + + 4 + 11 + 0 + NotNullable + + Col27 + + + + Col27 + + 11 + + + + + + + Col28 + 28 + + 4 + 11 + 0 + NotNullable + + Col28 + + + + Col28 + + 11 + + + + + + + Col29 + 29 + + 4 + 11 + 0 + NotNullable + + Col29 + + + + Col29 + + 11 + + + + + + + Col30 + 30 + + 4 + 11 + 0 + NotNullable + + Col30 + + + + Col30 + + 11 + + + + + + + Col31 + 31 + + 4 + 11 + 0 + NotNullable + + Col31 + + + + Col31 + + 11 + + + + + + + Col32 + 32 + + 4 + 11 + 0 + NotNullable + + Col32 + + + + Col32 + + 11 + + + + + + + Col33 + 33 + + 4 + 11 + 0 + NotNullable + + Col33 + + + + Col33 + + 11 + + + + + + + Col34 + 34 + + 4 + 11 + 0 + NotNullable + + Col34 + + + + Col34 + + 11 + + + + + + + Col35 + 35 + + 4 + 11 + 0 + NotNullable + + Col35 + + + + Col35 + + 11 + + + + + + + Col36 + 36 + + 4 + 11 + 0 + NotNullable + + Col36 + + + + Col36 + + 11 + + + + + + + Col37 + 37 + + 4 + 11 + 0 + NotNullable + + Col37 + + + + Col37 + + 11 + + + + + + + Col38 + 38 + + 4 + 11 + 0 + NotNullable + + Col38 + + + + Col38 + + 11 + + + + + + + Col39 + 39 + + 4 + 11 + 0 + NotNullable + + Col39 + + + + Col39 + + 11 + + + + + + + Col40 + 40 + + 4 + 11 + 0 + NotNullable + + Col40 + + + + Col40 + + 11 + + + + + + + Col41 + 41 + + 4 + 11 + 0 + NotNullable + + Col41 + + + + Col41 + + 11 + + + + + + + Col42 + 42 + + 4 + 11 + 0 + NotNullable + + Col42 + + + + Col42 + + 11 + + + + + + + Col43 + 43 + + 4 + 11 + 0 + NotNullable + + Col43 + + + + Col43 + + 11 + + + + + + + Col44 + 44 + + 4 + 11 + 0 + NotNullable + + Col44 + + + + Col44 + + 11 + + + + + + + Col45 + 45 + + 4 + 11 + 0 + NotNullable + + Col45 + + + + Col45 + + 11 + + + + + + + Col46 + 46 + + 4 + 11 + 0 + NotNullable + + Col46 + + + + Col46 + + 11 + + + + + + + Col47 + 47 + + 4 + 11 + 0 + NotNullable + + Col47 + + + + Col47 + + 11 + + + + + + + Col48 + 48 + + 4 + 11 + 0 + NotNullable + + Col48 + + + + Col48 + + 11 + + + + + + + Col49 + 49 + + 4 + 11 + 0 + NotNullable + + Col49 + + + + Col49 + + 11 + + + + + + + Col50 + 50 + + 4 + 11 + 0 + NotNullable + + Col50 + + + + Col50 + + 11 + + + + + + + Col51 + 51 + + 4 + 11 + 0 + NotNullable + + Col51 + + + + Col51 + + 11 + + + + + + + Col52 + 52 + + 4 + 11 + 0 + NotNullable + + Col52 + + + + Col52 + + 11 + + + + + + + Col53 + 53 + + 4 + 11 + 0 + NotNullable + + Col53 + + + + Col53 + + 11 + + + + + + + Col54 + 54 + + 4 + 11 + 0 + NotNullable + + Col54 + + + + Col54 + + 11 + + + + + + + Col55 + 55 + + 4 + 11 + 0 + NotNullable + + Col55 + + + + Col55 + + 11 + + + + + + + Col56 + 56 + + 4 + 11 + 0 + NotNullable + + Col56 + + + + Col56 + + 11 + + + + + + + Col57 + 57 + + 4 + 11 + 0 + NotNullable + + Col57 + + + + Col57 + + 11 + + + + + + + Col58 + 58 + + 4 + 11 + 0 + NotNullable + + Col58 + + + + Col58 + + 11 + + + + + + + Col59 + 59 + + 4 + 11 + 0 + NotNullable + + Col59 + + + + Col59 + + 11 + + + + + + + Col60 + 60 + + 4 + 11 + 0 + NotNullable + + Col60 + + + + Col60 + + 11 + + + + + + + Col61 + 61 + + 4 + 11 + 0 + NotNullable + + Col61 + + + + Col61 + + 11 + + + + + + + Col62 + 62 + + 4 + 11 + 0 + NotNullable + + Col62 + + + + Col62 + + 11 + + + + + + + Col63 + 63 + + 4 + 11 + 0 + NotNullable + + Col63 + + + + Col63 + + 11 + + + + + + + Col64 + 64 + + 4 + 11 + 0 + NotNullable + + Col64 + + + + Col64 + + 11 + + + + + + + Col65 + 65 + + 4 + 11 + 0 + NotNullable + + Col65 + + + + Col65 + + 11 + + + + + + + Col66 + 66 + + 4 + 11 + 0 + NotNullable + + Col66 + + + + Col66 + + 11 + + + + + + + Col67 + 67 + + 4 + 11 + 0 + NotNullable + + Col67 + + + + Col67 + + 11 + + + + + + + Col68 + 68 + + 4 + 11 + 0 + NotNullable + + Col68 + + + + Col68 + + 11 + + + + + + + Col69 + 69 + + 4 + 11 + 0 + NotNullable + + Col69 + + + + Col69 + + 11 + + + + + + + Col70 + 70 + + 4 + 11 + 0 + NotNullable + + Col70 + + + + Col70 + + 11 + + + + + + + Col71 + 71 + + 4 + 11 + 0 + NotNullable + + Col71 + + + + Col71 + + 11 + + + + + + + Col72 + 72 + + 4 + 11 + 0 + NotNullable + + Col72 + + + + Col72 + + 11 + + + + + + + Col73 + 73 + + 4 + 11 + 0 + NotNullable + + Col73 + + + + Col73 + + 11 + + + + + + + Col74 + 74 + + 4 + 11 + 0 + NotNullable + + Col74 + + + + Col74 + + 11 + + + + + + + Col75 + 75 + + 4 + 11 + 0 + NotNullable + + Col75 + + + + Col75 + + 11 + + + + + + + Col76 + 76 + + 4 + 11 + 0 + NotNullable + + Col76 + + + + Col76 + + 11 + + + + + + + Col77 + 77 + + 4 + 11 + 0 + NotNullable + + Col77 + + + + Col77 + + 11 + + + + + + + Col78 + 78 + + 4 + 11 + 0 + NotNullable + + Col78 + + + + Col78 + + 11 + + + + + + + Col79 + 79 + + 4 + 11 + 0 + NotNullable + + Col79 + + + + Col79 + + 11 + + + + + + + Col80 + 80 + + 4 + 11 + 0 + NotNullable + + Col80 + + + + Col80 + + 11 + + + + + + + Col81 + 81 + + 4 + 11 + 0 + NotNullable + + Col81 + + + + Col81 + + 11 + + + + + + + Col82 + 82 + + 4 + 11 + 0 + NotNullable + + Col82 + + + + Col82 + + 11 + + + + + + + Col83 + 83 + + 4 + 11 + 0 + NotNullable + + Col83 + + + + Col83 + + 11 + + + + + + + Col84 + 84 + + 4 + 11 + 0 + NotNullable + + Col84 + + + + Col84 + + 11 + + + + + + + Col85 + 85 + + 4 + 11 + 0 + NotNullable + + Col85 + + + + Col85 + + 11 + + + + + + + Col86 + 86 + + 4 + 11 + 0 + NotNullable + + Col86 + + + + Col86 + + 11 + + + + + + + Col87 + 87 + + 4 + 11 + 0 + NotNullable + + Col87 + + + + Col87 + + 11 + + + + + + + Col88 + 88 + + 4 + 11 + 0 + NotNullable + + Col88 + + + + Col88 + + 11 + + + + + + + Col89 + 89 + + 4 + 11 + 0 + NotNullable + + Col89 + + + + Col89 + + 11 + + + + + + + Col90 + 90 + + 4 + 11 + 0 + NotNullable + + Col90 + + + + Col90 + + 11 + + + + + + + Col91 + 91 + + 4 + 11 + 0 + NotNullable + + Col91 + + + + Col91 + + 11 + + + + + + + Col92 + 92 + + 4 + 11 + 0 + NotNullable + + Col92 + + + + Col92 + + 11 + + + + + + + Col93 + 93 + + 4 + 11 + 0 + NotNullable + + Col93 + + + + Col93 + + 11 + + + + + + + Col94 + 94 + + 4 + 11 + 0 + NotNullable + + Col94 + + + + Col94 + + 11 + + + + + + + Col95 + 95 + + 4 + 11 + 0 + NotNullable + + Col95 + + + + Col95 + + 11 + + + + + + + Col96 + 96 + + 4 + 11 + 0 + NotNullable + + Col96 + + + + Col96 + + 11 + + + + + + + Col97 + 97 + + 4 + 11 + 0 + NotNullable + + Col97 + + + + Col97 + + 11 + + + + + + + Col98 + 98 + + 4 + 11 + 0 + NotNullable + + Col98 + + + + Col98 + + 11 + + + + + + + Col99 + 99 + + 4 + 11 + 0 + NotNullable + + Col99 + + + + Col99 + + 11 + + + + + + + Col100 + 100 + + 4 + 11 + 0 + NotNullable + + Col100 + + + + Col100 + + 11 + + + + + + + Col101 + 101 + + 4 + 11 + 0 + NotNullable + + Col101 + + + + Col101 + + 11 + + + + + + + Col102 + 102 + + 4 + 11 + 0 + NotNullable + + Col102 + + + + Col102 + + 11 + + + + + + + Col103 + 103 + + 4 + 11 + 0 + NotNullable + + Col103 + + + + Col103 + + 11 + + + + + + + Col104 + 104 + + 4 + 11 + 0 + NotNullable + + Col104 + + + + Col104 + + 11 + + + + + + + Col105 + 105 + + 4 + 11 + 0 + NotNullable + + Col105 + + + + Col105 + + 11 + + + + + + + Col106 + 106 + + 4 + 11 + 0 + NotNullable + + Col106 + + + + Col106 + + 11 + + + + + + + Col107 + 107 + + 4 + 11 + 0 + NotNullable + + Col107 + + + + Col107 + + 11 + + + + + + + Col108 + 108 + + 4 + 11 + 0 + NotNullable + + Col108 + + + + Col108 + + 11 + + + + + + + Col109 + 109 + + 4 + 11 + 0 + NotNullable + + Col109 + + + + Col109 + + 11 + + + + + + + Col110 + 110 + + 4 + 11 + 0 + NotNullable + + Col110 + + + + Col110 + + 11 + + + + + + + Col111 + 111 + + 4 + 11 + 0 + NotNullable + + Col111 + + + + Col111 + + 11 + + + + + + + Col112 + 112 + + 4 + 11 + 0 + NotNullable + + Col112 + + + + Col112 + + 11 + + + + + + + Col113 + 113 + + 4 + 11 + 0 + NotNullable + + Col113 + + + + Col113 + + 11 + + + + + + + Col114 + 114 + + 4 + 11 + 0 + NotNullable + + Col114 + + + + Col114 + + 11 + + + + + + + Col115 + 115 + + 4 + 11 + 0 + NotNullable + + Col115 + + + + Col115 + + 11 + + + + + + + Col116 + 116 + + 4 + 11 + 0 + NotNullable + + Col116 + + + + Col116 + + 11 + + + + + + + Col117 + 117 + + 4 + 11 + 0 + NotNullable + + Col117 + + + + Col117 + + 11 + + + + + + + Col118 + 118 + + 4 + 11 + 0 + NotNullable + + Col118 + + + + Col118 + + 11 + + + + + + + Col119 + 119 + + 4 + 11 + 0 + NotNullable + + Col119 + + + + Col119 + + 11 + + + + + + + Col120 + 120 + + 4 + 11 + 0 + NotNullable + + Col120 + + + + Col120 + + 11 + + + + + + + Col121 + 121 + + 4 + 11 + 0 + NotNullable + + Col121 + + + + Col121 + + 11 + + + + + + + Col122 + 122 + + 4 + 11 + 0 + NotNullable + + Col122 + + + + Col122 + + 11 + + + + + + + Col123 + 123 + + 4 + 11 + 0 + NotNullable + + Col123 + + + + Col123 + + 11 + + + + + + + Col124 + 124 + + 4 + 11 + 0 + NotNullable + + Col124 + + + + Col124 + + 11 + + + + + + + Col125 + 125 + + 4 + 11 + 0 + NotNullable + + Col125 + + + + Col125 + + 11 + + + + + + + Col126 + 126 + + 4 + 11 + 0 + NotNullable + + Col126 + + + + Col126 + + 11 + + + + + + + Col127 + 127 + + 4 + 11 + 0 + NotNullable + + Col127 + + + + Col127 + + 11 + + + + + + + Col128 + 128 + + 4 + 11 + 0 + NotNullable + + Col128 + + + + Col128 + + 11 + + + + + + + Col129 + 129 + + 4 + 11 + 0 + NotNullable + + Col129 + + + + Col129 + + 11 + + + + + + + Col130 + 130 + + 4 + 11 + 0 + NotNullable + + Col130 + + + + Col130 + + 11 + + + + + + + Col131 + 131 + + 4 + 11 + 0 + NotNullable + + Col131 + + + + Col131 + + 11 + + + + + + + Col132 + 132 + + 4 + 11 + 0 + NotNullable + + Col132 + + + + Col132 + + 11 + + + + + + + Col133 + 133 + + 4 + 11 + 0 + NotNullable + + Col133 + + + + Col133 + + 11 + + + + + + + Col134 + 134 + + 4 + 11 + 0 + NotNullable + + Col134 + + + + Col134 + + 11 + + + + + + + Col135 + 135 + + 4 + 11 + 0 + NotNullable + + Col135 + + + + Col135 + + 11 + + + + + + + Col136 + 136 + + 4 + 11 + 0 + NotNullable + + Col136 + + + + Col136 + + 11 + + + + + + + Col137 + 137 + + 4 + 11 + 0 + NotNullable + + Col137 + + + + Col137 + + 11 + + + + + + + Col138 + 138 + + 4 + 11 + 0 + NotNullable + + Col138 + + + + Col138 + + 11 + + + + + + + Col139 + 139 + + 4 + 11 + 0 + NotNullable + + Col139 + + + + Col139 + + 11 + + + + + + + Col140 + 140 + + 4 + 11 + 0 + NotNullable + + Col140 + + + + Col140 + + 11 + + + + + + + Col141 + 141 + + 4 + 11 + 0 + NotNullable + + Col141 + + + + Col141 + + 11 + + + + + + + Col142 + 142 + + 4 + 11 + 0 + NotNullable + + Col142 + + + + Col142 + + 11 + + + + + + + Col143 + 143 + + 4 + 11 + 0 + NotNullable + + Col143 + + + + Col143 + + 11 + + + + + + + Col144 + 144 + + 4 + 11 + 0 + NotNullable + + Col144 + + + + Col144 + + 11 + + + + + + + Col145 + 145 + + 4 + 11 + 0 + NotNullable + + Col145 + + + + Col145 + + 11 + + + + + + + Col146 + 146 + + 4 + 11 + 0 + NotNullable + + Col146 + + + + Col146 + + 11 + + + + + + + Col147 + 147 + + 4 + 11 + 0 + NotNullable + + Col147 + + + + Col147 + + 11 + + + + + + + Col148 + 148 + + 4 + 11 + 0 + NotNullable + + Col148 + + + + Col148 + + 11 + + + + + + + Col149 + 149 + + 4 + 11 + 0 + NotNullable + + Col149 + + + + Col149 + + 11 + + + + + + + Col150 + 150 + + 4 + 11 + 0 + NotNullable + + Col150 + + + + Col150 + + 11 + + + + + + + Col151 + 151 + + 4 + 11 + 0 + NotNullable + + Col151 + + + + Col151 + + 11 + + + + + + + Col152 + 152 + + 4 + 11 + 0 + NotNullable + + Col152 + + + + Col152 + + 11 + + + + + + + Col153 + 153 + + 4 + 11 + 0 + NotNullable + + Col153 + + + + Col153 + + 11 + + + + + + + Col154 + 154 + + 4 + 11 + 0 + NotNullable + + Col154 + + + + Col154 + + 11 + + + + + + + Col155 + 155 + + 4 + 11 + 0 + NotNullable + + Col155 + + + + Col155 + + 11 + + + + + + + Col156 + 156 + + 4 + 11 + 0 + NotNullable + + Col156 + + + + Col156 + + 11 + + + + + + + Col157 + 157 + + 4 + 11 + 0 + NotNullable + + Col157 + + + + Col157 + + 11 + + + + + + + Col158 + 158 + + 4 + 11 + 0 + NotNullable + + Col158 + + + + Col158 + + 11 + + + + + + + Col159 + 159 + + 4 + 11 + 0 + NotNullable + + Col159 + + + + Col159 + + 11 + + + + + + + Col160 + 160 + + 4 + 11 + 0 + NotNullable + + Col160 + + + + Col160 + + 11 + + + + + + + Col161 + 161 + + 4 + 11 + 0 + NotNullable + + Col161 + + + + Col161 + + 11 + + + + + + + Col162 + 162 + + 4 + 11 + 0 + NotNullable + + Col162 + + + + Col162 + + 11 + + + + + + + Col163 + 163 + + 4 + 11 + 0 + NotNullable + + Col163 + + + + Col163 + + 11 + + + + + + + Col164 + 164 + + 4 + 11 + 0 + NotNullable + + Col164 + + + + Col164 + + 11 + + + + + + + Col165 + 165 + + 4 + 11 + 0 + NotNullable + + Col165 + + + + Col165 + + 11 + + + + + + + Col166 + 166 + + 4 + 11 + 0 + NotNullable + + Col166 + + + + Col166 + + 11 + + + + + + + Col167 + 167 + + 4 + 11 + 0 + NotNullable + + Col167 + + + + Col167 + + 11 + + + + + + + Col168 + 168 + + 4 + 11 + 0 + NotNullable + + Col168 + + + + Col168 + + 11 + + + + + + + Col169 + 169 + + 4 + 11 + 0 + NotNullable + + Col169 + + + + Col169 + + 11 + + + + + + + Col170 + 170 + + 4 + 11 + 0 + NotNullable + + Col170 + + + + Col170 + + 11 + + + + + + + Col171 + 171 + + 4 + 11 + 0 + NotNullable + + Col171 + + + + Col171 + + 11 + + + + + + + Col172 + 172 + + 4 + 11 + 0 + NotNullable + + Col172 + + + + Col172 + + 11 + + + + + + + Col173 + 173 + + 4 + 11 + 0 + NotNullable + + Col173 + + + + Col173 + + 11 + + + + + + + Col174 + 174 + + 4 + 11 + 0 + NotNullable + + Col174 + + + + Col174 + + 11 + + + + + + + Col175 + 175 + + 4 + 11 + 0 + NotNullable + + Col175 + + + + Col175 + + 11 + + + + + + + Col176 + 176 + + 4 + 11 + 0 + NotNullable + + Col176 + + + + Col176 + + 11 + + + + + + + Col177 + 177 + + 4 + 11 + 0 + NotNullable + + Col177 + + + + Col177 + + 11 + + + + + + + Col178 + 178 + + 4 + 11 + 0 + NotNullable + + Col178 + + + + Col178 + + 11 + + + + + + + Col179 + 179 + + 4 + 11 + 0 + NotNullable + + Col179 + + + + Col179 + + 11 + + + + + + + Col180 + 180 + + 4 + 11 + 0 + NotNullable + + Col180 + + + + Col180 + + 11 + + + + + + + Col181 + 181 + + 4 + 11 + 0 + NotNullable + + Col181 + + + + Col181 + + 11 + + + + + + + Col182 + 182 + + 4 + 11 + 0 + NotNullable + + Col182 + + + + Col182 + + 11 + + + + + + + Col183 + 183 + + 4 + 11 + 0 + NotNullable + + Col183 + + + + Col183 + + 11 + + + + + + + Col184 + 184 + + 4 + 11 + 0 + NotNullable + + Col184 + + + + Col184 + + 11 + + + + + + + Col185 + 185 + + 4 + 11 + 0 + NotNullable + + Col185 + + + + Col185 + + 11 + + + + + + + Col186 + 186 + + 4 + 11 + 0 + NotNullable + + Col186 + + + + Col186 + + 11 + + + + + + + Col187 + 187 + + 4 + 11 + 0 + NotNullable + + Col187 + + + + Col187 + + 11 + + + + + + + Col188 + 188 + + 4 + 11 + 0 + NotNullable + + Col188 + + + + Col188 + + 11 + + + + + + + Col189 + 189 + + 4 + 11 + 0 + NotNullable + + Col189 + + + + Col189 + + 11 + + + + + + + Col190 + 190 + + 4 + 11 + 0 + NotNullable + + Col190 + + + + Col190 + + 11 + + + + + + + Col191 + 191 + + 4 + 11 + 0 + NotNullable + + Col191 + + + + Col191 + + 11 + + + + + + + Col192 + 192 + + 4 + 11 + 0 + NotNullable + + Col192 + + + + Col192 + + 11 + + + + + + + Col193 + 193 + + 4 + 11 + 0 + NotNullable + + Col193 + + + + Col193 + + 11 + + + + + + + Col194 + 194 + + 4 + 11 + 0 + NotNullable + + Col194 + + + + Col194 + + 11 + + + + + + + Col195 + 195 + + 4 + 11 + 0 + NotNullable + + Col195 + + + + Col195 + + 11 + + + + + + + Col196 + 196 + + 4 + 11 + 0 + NotNullable + + Col196 + + + + Col196 + + 11 + + + + + + + Col197 + 197 + + 4 + 11 + 0 + NotNullable + + Col197 + + + + Col197 + + 11 + + + + + + + Col198 + 198 + + 4 + 11 + 0 + NotNullable + + Col198 + + + + Col198 + + 11 + + + + + + + Col199 + 199 + + 4 + 11 + 0 + NotNullable + + Col199 + + + + Col199 + + 11 + + + + + + + Col200 + 200 + + 4 + 11 + 0 + NotNullable + + Col200 + + + + Col200 + + 11 + + + + + + + Col201 + 201 + + 4 + 11 + 0 + NotNullable + + Col201 + + + + Col201 + + 11 + + + + + + + Col202 + 202 + + 4 + 11 + 0 + NotNullable + + Col202 + + + + Col202 + + 11 + + + + + + + Col203 + 203 + + 4 + 11 + 0 + NotNullable + + Col203 + + + + Col203 + + 11 + + + + + + + Col204 + 204 + + 4 + 11 + 0 + NotNullable + + Col204 + + + + Col204 + + 11 + + + + + + + Col205 + 205 + + 4 + 11 + 0 + NotNullable + + Col205 + + + + Col205 + + 11 + + + + + + + Col206 + 206 + + 4 + 11 + 0 + NotNullable + + Col206 + + + + Col206 + + 11 + + + + + + + Col207 + 207 + + 4 + 11 + 0 + NotNullable + + Col207 + + + + Col207 + + 11 + + + + + + + Col208 + 208 + + 4 + 11 + 0 + NotNullable + + Col208 + + + + Col208 + + 11 + + + + + + + Col209 + 209 + + 4 + 11 + 0 + NotNullable + + Col209 + + + + Col209 + + 11 + + + + + + + Col210 + 210 + + 4 + 11 + 0 + NotNullable + + Col210 + + + + Col210 + + 11 + + + + + + + Col211 + 211 + + 4 + 11 + 0 + NotNullable + + Col211 + + + + Col211 + + 11 + + + + + + + Col212 + 212 + + 4 + 11 + 0 + NotNullable + + Col212 + + + + Col212 + + 11 + + + + + + + Col213 + 213 + + 4 + 11 + 0 + NotNullable + + Col213 + + + + Col213 + + 11 + + + + + + + Col214 + 214 + + 4 + 11 + 0 + NotNullable + + Col214 + + + + Col214 + + 11 + + + + + + + Col215 + 215 + + 4 + 11 + 0 + NotNullable + + Col215 + + + + Col215 + + 11 + + + + + + + Col216 + 216 + + 4 + 11 + 0 + NotNullable + + Col216 + + + + Col216 + + 11 + + + + + + + Col217 + 217 + + 4 + 11 + 0 + NotNullable + + Col217 + + + + Col217 + + 11 + + + + + + + Col218 + 218 + + 4 + 11 + 0 + NotNullable + + Col218 + + + + Col218 + + 11 + + + + + + + Col219 + 219 + + 4 + 11 + 0 + NotNullable + + Col219 + + + + Col219 + + 11 + + + + + + + Col220 + 220 + + 4 + 11 + 0 + NotNullable + + Col220 + + + + Col220 + + 11 + + + + + + + Col221 + 221 + + 4 + 11 + 0 + NotNullable + + Col221 + + + + Col221 + + 11 + + + + + + + Col222 + 222 + + 4 + 11 + 0 + NotNullable + + Col222 + + + + Col222 + + 11 + + + + + + + Col223 + 223 + + 4 + 11 + 0 + NotNullable + + Col223 + + + + Col223 + + 11 + + + + + + + Col224 + 224 + + 4 + 11 + 0 + NotNullable + + Col224 + + + + Col224 + + 11 + + + + + + + Col225 + 225 + + 4 + 11 + 0 + NotNullable + + Col225 + + + + Col225 + + 11 + + + + + + + Col226 + 226 + + 4 + 11 + 0 + NotNullable + + Col226 + + + + Col226 + + 11 + + + + + + + Col227 + 227 + + 4 + 11 + 0 + NotNullable + + Col227 + + + + Col227 + + 11 + + + + + + + Col228 + 228 + + 4 + 11 + 0 + NotNullable + + Col228 + + + + Col228 + + 11 + + + + + + + Col229 + 229 + + 4 + 11 + 0 + NotNullable + + Col229 + + + + Col229 + + 11 + + + + + + + Col230 + 230 + + 4 + 11 + 0 + NotNullable + + Col230 + + + + Col230 + + 11 + + + + + + + Col231 + 231 + + 4 + 11 + 0 + NotNullable + + Col231 + + + + Col231 + + 11 + + + + + + + Col232 + 232 + + 4 + 11 + 0 + NotNullable + + Col232 + + + + Col232 + + 11 + + + + + + + Col233 + 233 + + 4 + 11 + 0 + NotNullable + + Col233 + + + + Col233 + + 11 + + + + + + + Col234 + 234 + + 4 + 11 + 0 + NotNullable + + Col234 + + + + Col234 + + 11 + + + + + + + Col235 + 235 + + 4 + 11 + 0 + NotNullable + + Col235 + + + + Col235 + + 11 + + + + + + + Col236 + 236 + + 4 + 11 + 0 + NotNullable + + Col236 + + + + Col236 + + 11 + + + + + + + Col237 + 237 + + 4 + 11 + 0 + NotNullable + + Col237 + + + + Col237 + + 11 + + + + + + + Col238 + 238 + + 4 + 11 + 0 + NotNullable + + Col238 + + + + Col238 + + 11 + + + + + + + Col239 + 239 + + 4 + 11 + 0 + NotNullable + + Col239 + + + + Col239 + + 11 + + + + + + + Col240 + 240 + + 4 + 11 + 0 + NotNullable + + Col240 + + + + Col240 + + 11 + + + + + + + Col241 + 241 + + 4 + 11 + 0 + NotNullable + + Col241 + + + + Col241 + + 11 + + + + + + + Col242 + 242 + + 4 + 11 + 0 + NotNullable + + Col242 + + + + Col242 + + 11 + + + + + + + Col243 + 243 + + 4 + 11 + 0 + NotNullable + + Col243 + + + + Col243 + + 11 + + + + + + + Col244 + 244 + + 4 + 11 + 0 + NotNullable + + Col244 + + + + Col244 + + 11 + + + + + + + Col245 + 245 + + 4 + 11 + 0 + NotNullable + + Col245 + + + + Col245 + + 11 + + + + + + + Col246 + 246 + + 4 + 11 + 0 + NotNullable + + Col246 + + + + Col246 + + 11 + + + + + + + Col247 + 247 + + 4 + 11 + 0 + NotNullable + + Col247 + + + + Col247 + + 11 + + + + + + + Col248 + 248 + + 4 + 11 + 0 + NotNullable + + Col248 + + + + Col248 + + 11 + + + + + + + Col249 + 249 + + 4 + 11 + 0 + NotNullable + + Col249 + + + + Col249 + + 11 + + + + + + + Col250 + 250 + + 4 + 11 + 0 + NotNullable + + Col250 + + + + Col250 + + 11 + + + + + + + Col251 + 251 + + 4 + 11 + 0 + NotNullable + + Col251 + + + + Col251 + + 11 + + + + + + + Col252 + 252 + + 4 + 11 + 0 + NotNullable + + Col252 + + + + Col252 + + 11 + + + + + + + Col253 + 253 + + 4 + 11 + 0 + NotNullable + + Col253 + + + + Col253 + + 11 + + + + + + + Col254 + 254 + + 4 + 11 + 0 + NotNullable + + Col254 + + + + Col254 + + 11 + + + + + + + Col255 + 255 + + 4 + 11 + 0 + NotNullable + + Col255 + + + + Col255 + + 11 + + + + + + + Col256 + 256 + + 4 + 11 + 0 + NotNullable + + Col256 + + + + Col256 + + 11 + + + + + + + Col257 + 257 + + 4 + 11 + 0 + NotNullable + + Col257 + + + + Col257 + + 11 + + + + + + + Col258 + 258 + + 4 + 11 + 0 + NotNullable + + Col258 + + + + Col258 + + 11 + + + + + + + Col259 + 259 + + 4 + 11 + 0 + NotNullable + + Col259 + + + + Col259 + + 11 + + + + + + + Col260 + 260 + + 4 + 11 + 0 + NotNullable + + Col260 + + + + Col260 + + 11 + + + + + + + Col261 + 261 + + 4 + 11 + 0 + NotNullable + + Col261 + + + + Col261 + + 11 + + + + + + + Col262 + 262 + + 4 + 11 + 0 + NotNullable + + Col262 + + + + Col262 + + 11 + + + + + + + Col263 + 263 + + 4 + 11 + 0 + NotNullable + + Col263 + + + + Col263 + + 11 + + + + + + + Col264 + 264 + + 4 + 11 + 0 + NotNullable + + Col264 + + + + Col264 + + 11 + + + + + + + Col265 + 265 + + 4 + 11 + 0 + NotNullable + + Col265 + + + + Col265 + + 11 + + + + + + + Col266 + 266 + + 4 + 11 + 0 + NotNullable + + Col266 + + + + Col266 + + 11 + + + + + + + Col267 + 267 + + 4 + 11 + 0 + NotNullable + + Col267 + + + + Col267 + + 11 + + + + + + + Col268 + 268 + + 4 + 11 + 0 + NotNullable + + Col268 + + + + Col268 + + 11 + + + + + + + Col269 + 269 + + 4 + 11 + 0 + NotNullable + + Col269 + + + + Col269 + + 11 + + + + + + + Col270 + 270 + + 4 + 11 + 0 + NotNullable + + Col270 + + + + Col270 + + 11 + + + + + + + Col271 + 271 + + 4 + 11 + 0 + NotNullable + + Col271 + + + + Col271 + + 11 + + + + + + + Col272 + 272 + + 4 + 11 + 0 + NotNullable + + Col272 + + + + Col272 + + 11 + + + + + + + Col273 + 273 + + 4 + 11 + 0 + NotNullable + + Col273 + + + + Col273 + + 11 + + + + + + + Col274 + 274 + + 4 + 11 + 0 + NotNullable + + Col274 + + + + Col274 + + 11 + + + + + + + Col275 + 275 + + 4 + 11 + 0 + NotNullable + + Col275 + + + + Col275 + + 11 + + + + + + + Col276 + 276 + + 4 + 11 + 0 + NotNullable + + Col276 + + + + Col276 + + 11 + + + + + + + Col277 + 277 + + 4 + 11 + 0 + NotNullable + + Col277 + + + + Col277 + + 11 + + + + + + + Col278 + 278 + + 4 + 11 + 0 + NotNullable + + Col278 + + + + Col278 + + 11 + + + + + + + Col279 + 279 + + 4 + 11 + 0 + NotNullable + + Col279 + + + + Col279 + + 11 + + + + + + + Col280 + 280 + + 4 + 11 + 0 + NotNullable + + Col280 + + + + Col280 + + 11 + + + + + + + Col281 + 281 + + 4 + 11 + 0 + NotNullable + + Col281 + + + + Col281 + + 11 + + + + + + + Col282 + 282 + + 4 + 11 + 0 + NotNullable + + Col282 + + + + Col282 + + 11 + + + + + + + Col283 + 283 + + 4 + 11 + 0 + NotNullable + + Col283 + + + + Col283 + + 11 + + + + + + + Col284 + 284 + + 4 + 11 + 0 + NotNullable + + Col284 + + + + Col284 + + 11 + + + + + + + Col285 + 285 + + 4 + 11 + 0 + NotNullable + + Col285 + + + + Col285 + + 11 + + + + + + + Col286 + 286 + + 4 + 11 + 0 + NotNullable + + Col286 + + + + Col286 + + 11 + + + + + + + Col287 + 287 + + 4 + 11 + 0 + NotNullable + + Col287 + + + + Col287 + + 11 + + + + + + + Col288 + 288 + + 4 + 11 + 0 + NotNullable + + Col288 + + + + Col288 + + 11 + + + + + + + Col289 + 289 + + 4 + 11 + 0 + NotNullable + + Col289 + + + + Col289 + + 11 + + + + + + + Col290 + 290 + + 4 + 11 + 0 + NotNullable + + Col290 + + + + Col290 + + 11 + + + + + + + Col291 + 291 + + 4 + 11 + 0 + NotNullable + + Col291 + + + + Col291 + + 11 + + + + + + + Col292 + 292 + + 4 + 11 + 0 + NotNullable + + Col292 + + + + Col292 + + 11 + + + + + + + Col293 + 293 + + 4 + 11 + 0 + NotNullable + + Col293 + + + + Col293 + + 11 + + + + + + + Col294 + 294 + + 4 + 11 + 0 + NotNullable + + Col294 + + + + Col294 + + 11 + + + + + + + Col295 + 295 + + 4 + 11 + 0 + NotNullable + + Col295 + + + + Col295 + + 11 + + + + + + + Col296 + 296 + + 4 + 11 + 0 + NotNullable + + Col296 + + + + Col296 + + 11 + + + + + + + Col297 + 297 + + 4 + 11 + 0 + NotNullable + + Col297 + + + + Col297 + + 11 + + + + + + + Col298 + 298 + + 4 + 11 + 0 + NotNullable + + Col298 + + + + Col298 + + 11 + + + + + + + Col299 + 299 + + 4 + 11 + 0 + NotNullable + + Col299 + + + + Col299 + + 11 + + + + + + + Col300 + 300 + + 4 + 11 + 0 + NotNullable + + Col300 + + + + Col300 + + 11 + + + + + + + Col301 + 301 + + 4 + 11 + 0 + NotNullable + + Col301 + + + + Col301 + + 11 + + + + + + + Col302 + 302 + + 4 + 11 + 0 + NotNullable + + Col302 + + + + Col302 + + 11 + + + + + + + Col303 + 303 + + 4 + 11 + 0 + NotNullable + + Col303 + + + + Col303 + + 11 + + + + + + + Col304 + 304 + + 4 + 11 + 0 + NotNullable + + Col304 + + + + Col304 + + 11 + + + + + + + Col305 + 305 + + 4 + 11 + 0 + NotNullable + + Col305 + + + + Col305 + + 11 + + + + + + + Col306 + 306 + + 4 + 11 + 0 + NotNullable + + Col306 + + + + Col306 + + 11 + + + + + + + Col307 + 307 + + 4 + 11 + 0 + NotNullable + + Col307 + + + + Col307 + + 11 + + + + + + + Col308 + 308 + + 4 + 11 + 0 + NotNullable + + Col308 + + + + Col308 + + 11 + + + + + + + Col309 + 309 + + 4 + 11 + 0 + NotNullable + + Col309 + + + + Col309 + + 11 + + + + + + + Col310 + 310 + + 4 + 11 + 0 + NotNullable + + Col310 + + + + Col310 + + 11 + + + + + + + Col311 + 311 + + 4 + 11 + 0 + NotNullable + + Col311 + + + + Col311 + + 11 + + + + + + + Col312 + 312 + + 4 + 11 + 0 + NotNullable + + Col312 + + + + Col312 + + 11 + + + + + + + Col313 + 313 + + 4 + 11 + 0 + NotNullable + + Col313 + + + + Col313 + + 11 + + + + + + + Col314 + 314 + + 4 + 11 + 0 + NotNullable + + Col314 + + + + Col314 + + 11 + + + + + + + Col315 + 315 + + 4 + 11 + 0 + NotNullable + + Col315 + + + + Col315 + + 11 + + + + + + + Col316 + 316 + + 4 + 11 + 0 + NotNullable + + Col316 + + + + Col316 + + 11 + + + + + + + Col317 + 317 + + 4 + 11 + 0 + NotNullable + + Col317 + + + + Col317 + + 11 + + + + + + + Col318 + 318 + + 4 + 11 + 0 + NotNullable + + Col318 + + + + Col318 + + 11 + + + + + + + Col319 + 319 + + 4 + 11 + 0 + NotNullable + + Col319 + + + + Col319 + + 11 + + + + + + + Col320 + 320 + + 4 + 11 + 0 + NotNullable + + Col320 + + + + Col320 + + 11 + + + + + + + Col321 + 321 + + 4 + 11 + 0 + NotNullable + + Col321 + + + + Col321 + + 11 + + + + + + + Col322 + 322 + + 4 + 11 + 0 + NotNullable + + Col322 + + + + Col322 + + 11 + + + + + + + Col323 + 323 + + 4 + 11 + 0 + NotNullable + + Col323 + + + + Col323 + + 11 + + + + + + + Col324 + 324 + + 4 + 11 + 0 + NotNullable + + Col324 + + + + Col324 + + 11 + + + + + + + Col325 + 325 + + 4 + 11 + 0 + NotNullable + + Col325 + + + + Col325 + + 11 + + + + + + + Col326 + 326 + + 4 + 11 + 0 + NotNullable + + Col326 + + + + Col326 + + 11 + + + + + + + Col327 + 327 + + 4 + 11 + 0 + NotNullable + + Col327 + + + + Col327 + + 11 + + + + + + + Col328 + 328 + + 4 + 11 + 0 + NotNullable + + Col328 + + + + Col328 + + 11 + + + + + + + Col329 + 329 + + 4 + 11 + 0 + NotNullable + + Col329 + + + + Col329 + + 11 + + + + + + + Col330 + 330 + + 4 + 11 + 0 + NotNullable + + Col330 + + + + Col330 + + 11 + + + + + + + Col331 + 331 + + 4 + 11 + 0 + NotNullable + + Col331 + + + + Col331 + + 11 + + + + + + + Col332 + 332 + + 4 + 11 + 0 + NotNullable + + Col332 + + + + Col332 + + 11 + + + + + + + Col333 + 333 + + 4 + 11 + 0 + NotNullable + + Col333 + + + + Col333 + + 11 + + + + + + + Col334 + 334 + + 4 + 11 + 0 + NotNullable + + Col334 + + + + Col334 + + 11 + + + + + + + Col335 + 335 + + 4 + 11 + 0 + NotNullable + + Col335 + + + + Col335 + + 11 + + + + + + + Col336 + 336 + + 4 + 11 + 0 + NotNullable + + Col336 + + + + Col336 + + 11 + + + + + + + Col337 + 337 + + 4 + 11 + 0 + NotNullable + + Col337 + + + + Col337 + + 11 + + + + + + + Col338 + 338 + + 4 + 11 + 0 + NotNullable + + Col338 + + + + Col338 + + 11 + + + + + + + Col339 + 339 + + 4 + 11 + 0 + NotNullable + + Col339 + + + + Col339 + + 11 + + + + + + + Col340 + 340 + + 4 + 11 + 0 + NotNullable + + Col340 + + + + Col340 + + 11 + + + + + + + Col341 + 341 + + 4 + 11 + 0 + NotNullable + + Col341 + + + + Col341 + + 11 + + + + + + + Col342 + 342 + + 4 + 11 + 0 + NotNullable + + Col342 + + + + Col342 + + 11 + + + + + + + Col343 + 343 + + 4 + 11 + 0 + NotNullable + + Col343 + + + + Col343 + + 11 + + + + + + + Col344 + 344 + + 4 + 11 + 0 + NotNullable + + Col344 + + + + Col344 + + 11 + + + + + + + Col345 + 345 + + 4 + 11 + 0 + NotNullable + + Col345 + + + + Col345 + + 11 + + + + + + + Col346 + 346 + + 4 + 11 + 0 + NotNullable + + Col346 + + + + Col346 + + 11 + + + + + + + Col347 + 347 + + 4 + 11 + 0 + NotNullable + + Col347 + + + + Col347 + + 11 + + + + + + + Col348 + 348 + + 4 + 11 + 0 + NotNullable + + Col348 + + + + Col348 + + 11 + + + + + + + Col349 + 349 + + 4 + 11 + 0 + NotNullable + + Col349 + + + + Col349 + + 11 + + + + + + + Col350 + 350 + + 4 + 11 + 0 + NotNullable + + Col350 + + + + Col350 + + 11 + + + + + + + Col351 + 351 + + 4 + 11 + 0 + NotNullable + + Col351 + + + + Col351 + + 11 + + + + + + + Col352 + 352 + + 4 + 11 + 0 + NotNullable + + Col352 + + + + Col352 + + 11 + + + + + + + Col353 + 353 + + 4 + 11 + 0 + NotNullable + + Col353 + + + + Col353 + + 11 + + + + + + + Col354 + 354 + + 4 + 11 + 0 + NotNullable + + Col354 + + + + Col354 + + 11 + + + + + + + Col355 + 355 + + 4 + 11 + 0 + NotNullable + + Col355 + + + + Col355 + + 11 + + + + + + + Col356 + 356 + + 4 + 11 + 0 + NotNullable + + Col356 + + + + Col356 + + 11 + + + + + + + Col357 + 357 + + 4 + 11 + 0 + NotNullable + + Col357 + + + + Col357 + + 11 + + + + + + + Col358 + 358 + + 4 + 11 + 0 + NotNullable + + Col358 + + + + Col358 + + 11 + + + + + + + Col359 + 359 + + 4 + 11 + 0 + NotNullable + + Col359 + + + + Col359 + + 11 + + + + + + + Col360 + 360 + + 4 + 11 + 0 + NotNullable + + Col360 + + + + Col360 + + 11 + + + + + + + Col361 + 361 + + 4 + 11 + 0 + NotNullable + + Col361 + + + + Col361 + + 11 + + + + + + + Col362 + 362 + + 4 + 11 + 0 + NotNullable + + Col362 + + + + Col362 + + 11 + + + + + + + Col363 + 363 + + 4 + 11 + 0 + NotNullable + + Col363 + + + + Col363 + + 11 + + + + + + + Col364 + 364 + + 4 + 11 + 0 + NotNullable + + Col364 + + + + Col364 + + 11 + + + + + + + Col365 + 365 + + 4 + 11 + 0 + NotNullable + + Col365 + + + + Col365 + + 11 + + + + + + + Col366 + 366 + + 4 + 11 + 0 + NotNullable + + Col366 + + + + Col366 + + 11 + + + + + + + Col367 + 367 + + 4 + 11 + 0 + NotNullable + + Col367 + + + + Col367 + + 11 + + + + + + + Col368 + 368 + + 4 + 11 + 0 + NotNullable + + Col368 + + + + Col368 + + 11 + + + + + + + Col369 + 369 + + 4 + 11 + 0 + NotNullable + + Col369 + + + + Col369 + + 11 + + + + + + + Col370 + 370 + + 4 + 11 + 0 + NotNullable + + Col370 + + + + Col370 + + 11 + + + + + + + Col371 + 371 + + 4 + 11 + 0 + NotNullable + + Col371 + + + + Col371 + + 11 + + + + + + + Col372 + 372 + + 4 + 11 + 0 + NotNullable + + Col372 + + + + Col372 + + 11 + + + + + + + Col373 + 373 + + 4 + 11 + 0 + NotNullable + + Col373 + + + + Col373 + + 11 + + + + + + + Col374 + 374 + + 4 + 11 + 0 + NotNullable + + Col374 + + + + Col374 + + 11 + + + + + + + Col375 + 375 + + 4 + 11 + 0 + NotNullable + + Col375 + + + + Col375 + + 11 + + + + + + + Col376 + 376 + + 4 + 11 + 0 + NotNullable + + Col376 + + + + Col376 + + 11 + + + + + + + Col377 + 377 + + 4 + 11 + 0 + NotNullable + + Col377 + + + + Col377 + + 11 + + + + + + + Col378 + 378 + + 4 + 11 + 0 + NotNullable + + Col378 + + + + Col378 + + 11 + + + + + + + Col379 + 379 + + 4 + 11 + 0 + NotNullable + + Col379 + + + + Col379 + + 11 + + + + + + + Col380 + 380 + + 4 + 11 + 0 + NotNullable + + Col380 + + + + Col380 + + 11 + + + + + + + Col381 + 381 + + 4 + 11 + 0 + NotNullable + + Col381 + + + + Col381 + + 11 + + + + + + + Col382 + 382 + + 4 + 11 + 0 + NotNullable + + Col382 + + + + Col382 + + 11 + + + + + + + Col383 + 383 + + 4 + 11 + 0 + NotNullable + + Col383 + + + + Col383 + + 11 + + + + + + + Col384 + 384 + + 4 + 11 + 0 + NotNullable + + Col384 + + + + Col384 + + 11 + + + + + + + Col385 + 385 + + 4 + 11 + 0 + NotNullable + + Col385 + + + + Col385 + + 11 + + + + + + + Col386 + 386 + + 4 + 11 + 0 + NotNullable + + Col386 + + + + Col386 + + 11 + + + + + + + Col387 + 387 + + 4 + 11 + 0 + NotNullable + + Col387 + + + + Col387 + + 11 + + + + + + + Col388 + 388 + + 4 + 11 + 0 + NotNullable + + Col388 + + + + Col388 + + 11 + + + + + + + Col389 + 389 + + 4 + 11 + 0 + NotNullable + + Col389 + + + + Col389 + + 11 + + + + + + + Col390 + 390 + + 4 + 11 + 0 + NotNullable + + Col390 + + + + Col390 + + 11 + + + + + + + Col391 + 391 + + 4 + 11 + 0 + NotNullable + + Col391 + + + + Col391 + + 11 + + + + + + + Col392 + 392 + + 4 + 11 + 0 + NotNullable + + Col392 + + + + Col392 + + 11 + + + + + + + Col393 + 393 + + 4 + 11 + 0 + NotNullable + + Col393 + + + + Col393 + + 11 + + + + + + + Col394 + 394 + + 4 + 11 + 0 + NotNullable + + Col394 + + + + Col394 + + 11 + + + + + + + Col395 + 395 + + 4 + 11 + 0 + NotNullable + + Col395 + + + + Col395 + + 11 + + + + + + + Col396 + 396 + + 4 + 11 + 0 + NotNullable + + Col396 + + + + Col396 + + 11 + + + + + + + Col397 + 397 + + 4 + 11 + 0 + NotNullable + + Col397 + + + + Col397 + + 11 + + + + + + + Col398 + 398 + + 4 + 11 + 0 + NotNullable + + Col398 + + + + Col398 + + 11 + + + + + + + Col399 + 399 + + 4 + 11 + 0 + NotNullable + + Col399 + + + + Col399 + + 11 + + + + + + + Col400 + 400 + + 4 + 11 + 0 + NotNullable + + Col400 + + + + Col400 + + 11 + + + + + + + Col401 + 401 + + 4 + 11 + 0 + NotNullable + + Col401 + + + + Col401 + + 11 + + + + + + + Col402 + 402 + + 4 + 11 + 0 + NotNullable + + Col402 + + + + Col402 + + 11 + + + + + + + Col403 + 403 + + 4 + 11 + 0 + NotNullable + + Col403 + + + + Col403 + + 11 + + + + + + + Col404 + 404 + + 4 + 11 + 0 + NotNullable + + Col404 + + + + Col404 + + 11 + + + + + + + Col405 + 405 + + 4 + 11 + 0 + NotNullable + + Col405 + + + + Col405 + + 11 + + + + + + + Col406 + 406 + + 4 + 11 + 0 + NotNullable + + Col406 + + + + Col406 + + 11 + + + + + + + Col407 + 407 + + 4 + 11 + 0 + NotNullable + + Col407 + + + + Col407 + + 11 + + + + + + + Col408 + 408 + + 4 + 11 + 0 + NotNullable + + Col408 + + + + Col408 + + 11 + + + + + + + Col409 + 409 + + 4 + 11 + 0 + NotNullable + + Col409 + + + + Col409 + + 11 + + + + + + + Col410 + 410 + + 4 + 11 + 0 + NotNullable + + Col410 + + + + Col410 + + 11 + + + + + + + Col411 + 411 + + 4 + 11 + 0 + NotNullable + + Col411 + + + + Col411 + + 11 + + + + + + + Col412 + 412 + + 4 + 11 + 0 + NotNullable + + Col412 + + + + Col412 + + 11 + + + + + + + Col413 + 413 + + 4 + 11 + 0 + NotNullable + + Col413 + + + + Col413 + + 11 + + + + + + + Col414 + 414 + + 4 + 11 + 0 + NotNullable + + Col414 + + + + Col414 + + 11 + + + + + + + Col415 + 415 + + 4 + 11 + 0 + NotNullable + + Col415 + + + + Col415 + + 11 + + + + + + + Col416 + 416 + + 4 + 11 + 0 + NotNullable + + Col416 + + + + Col416 + + 11 + + + + + + + Col417 + 417 + + 4 + 11 + 0 + NotNullable + + Col417 + + + + Col417 + + 11 + + + + + + + Col418 + 418 + + 4 + 11 + 0 + NotNullable + + Col418 + + + + Col418 + + 11 + + + + + + + Col419 + 419 + + 4 + 11 + 0 + NotNullable + + Col419 + + + + Col419 + + 11 + + + + + + + Col420 + 420 + + 4 + 11 + 0 + NotNullable + + Col420 + + + + Col420 + + 11 + + + + + + + Col421 + 421 + + 4 + 11 + 0 + NotNullable + + Col421 + + + + Col421 + + 11 + + + + + + + Col422 + 422 + + 4 + 11 + 0 + NotNullable + + Col422 + + + + Col422 + + 11 + + + + + + + Col423 + 423 + + 4 + 11 + 0 + NotNullable + + Col423 + + + + Col423 + + 11 + + + + + + + Col424 + 424 + + 4 + 11 + 0 + NotNullable + + Col424 + + + + Col424 + + 11 + + + + + + + Col425 + 425 + + 4 + 11 + 0 + NotNullable + + Col425 + + + + Col425 + + 11 + + + + + + + Col426 + 426 + + 4 + 11 + 0 + NotNullable + + Col426 + + + + Col426 + + 11 + + + + + + + Col427 + 427 + + 4 + 11 + 0 + NotNullable + + Col427 + + + + Col427 + + 11 + + + + + + + Col428 + 428 + + 4 + 11 + 0 + NotNullable + + Col428 + + + + Col428 + + 11 + + + + + + + Col429 + 429 + + 4 + 11 + 0 + NotNullable + + Col429 + + + + Col429 + + 11 + + + + + + + Col430 + 430 + + 4 + 11 + 0 + NotNullable + + Col430 + + + + Col430 + + 11 + + + + + + + Col431 + 431 + + 4 + 11 + 0 + NotNullable + + Col431 + + + + Col431 + + 11 + + + + + + + Col432 + 432 + + 4 + 11 + 0 + NotNullable + + Col432 + + + + Col432 + + 11 + + + + + + + Col433 + 433 + + 4 + 11 + 0 + NotNullable + + Col433 + + + + Col433 + + 11 + + + + + + + Col434 + 434 + + 4 + 11 + 0 + NotNullable + + Col434 + + + + Col434 + + 11 + + + + + + + Col435 + 435 + + 4 + 11 + 0 + NotNullable + + Col435 + + + + Col435 + + 11 + + + + + + + Col436 + 436 + + 4 + 11 + 0 + NotNullable + + Col436 + + + + Col436 + + 11 + + + + + + + Col437 + 437 + + 4 + 11 + 0 + NotNullable + + Col437 + + + + Col437 + + 11 + + + + + + + Col438 + 438 + + 4 + 11 + 0 + NotNullable + + Col438 + + + + Col438 + + 11 + + + + + + + Col439 + 439 + + 4 + 11 + 0 + NotNullable + + Col439 + + + + Col439 + + 11 + + + + + + + Col440 + 440 + + 4 + 11 + 0 + NotNullable + + Col440 + + + + Col440 + + 11 + + + + + + + Col441 + 441 + + 4 + 11 + 0 + NotNullable + + Col441 + + + + Col441 + + 11 + + + + + + + Col442 + 442 + + 4 + 11 + 0 + NotNullable + + Col442 + + + + Col442 + + 11 + + + + + + + Col443 + 443 + + 4 + 11 + 0 + NotNullable + + Col443 + + + + Col443 + + 11 + + + + + + + Col444 + 444 + + 4 + 11 + 0 + NotNullable + + Col444 + + + + Col444 + + 11 + + + + + + + Col445 + 445 + + 4 + 11 + 0 + NotNullable + + Col445 + + + + Col445 + + 11 + + + + + + + Col446 + 446 + + 4 + 11 + 0 + NotNullable + + Col446 + + + + Col446 + + 11 + + + + + + + Col447 + 447 + + 4 + 11 + 0 + NotNullable + + Col447 + + + + Col447 + + 11 + + + + + + + Col448 + 448 + + 4 + 11 + 0 + NotNullable + + Col448 + + + + Col448 + + 11 + + + + + + + Col449 + 449 + + 4 + 11 + 0 + NotNullable + + Col449 + + + + Col449 + + 11 + + + + + + + Col450 + 450 + + 4 + 11 + 0 + NotNullable + + Col450 + + + + Col450 + + 11 + + + + + + + Col451 + 451 + + 4 + 11 + 0 + NotNullable + + Col451 + + + + Col451 + + 11 + + + + + + + Col452 + 452 + + 4 + 11 + 0 + NotNullable + + Col452 + + + + Col452 + + 11 + + + + + + + Col453 + 453 + + 4 + 11 + 0 + NotNullable + + Col453 + + + + Col453 + + 11 + + + + + + + Col454 + 454 + + 4 + 11 + 0 + NotNullable + + Col454 + + + + Col454 + + 11 + + + + + + + Col455 + 455 + + 4 + 11 + 0 + NotNullable + + Col455 + + + + Col455 + + 11 + + + + + + + Col456 + 456 + + 4 + 11 + 0 + NotNullable + + Col456 + + + + Col456 + + 11 + + + + + + + Col457 + 457 + + 4 + 11 + 0 + NotNullable + + Col457 + + + + Col457 + + 11 + + + + + + + Col458 + 458 + + 4 + 11 + 0 + NotNullable + + Col458 + + + + Col458 + + 11 + + + + + + + Col459 + 459 + + 4 + 11 + 0 + NotNullable + + Col459 + + + + Col459 + + 11 + + + + + + + Col460 + 460 + + 4 + 11 + 0 + NotNullable + + Col460 + + + + Col460 + + 11 + + + + + + + Col461 + 461 + + 4 + 11 + 0 + NotNullable + + Col461 + + + + Col461 + + 11 + + + + + + + Col462 + 462 + + 4 + 11 + 0 + NotNullable + + Col462 + + + + Col462 + + 11 + + + + + + + Col463 + 463 + + 4 + 11 + 0 + NotNullable + + Col463 + + + + Col463 + + 11 + + + + + + + Col464 + 464 + + 4 + 11 + 0 + NotNullable + + Col464 + + + + Col464 + + 11 + + + + + + + Col465 + 465 + + 4 + 11 + 0 + NotNullable + + Col465 + + + + Col465 + + 11 + + + + + + + Col466 + 466 + + 4 + 11 + 0 + NotNullable + + Col466 + + + + Col466 + + 11 + + + + + + + Col467 + 467 + + 4 + 11 + 0 + NotNullable + + Col467 + + + + Col467 + + 11 + + + + + + + Col468 + 468 + + 4 + 11 + 0 + NotNullable + + Col468 + + + + Col468 + + 11 + + + + + + + Col469 + 469 + + 4 + 11 + 0 + NotNullable + + Col469 + + + + Col469 + + 11 + + + + + + + Col470 + 470 + + 4 + 11 + 0 + NotNullable + + Col470 + + + + Col470 + + 11 + + + + + + + Col471 + 471 + + 4 + 11 + 0 + NotNullable + + Col471 + + + + Col471 + + 11 + + + + + + + Col472 + 472 + + 4 + 11 + 0 + NotNullable + + Col472 + + + + Col472 + + 11 + + + + + + + Col473 + 473 + + 4 + 11 + 0 + NotNullable + + Col473 + + + + Col473 + + 11 + + + + + + + Col474 + 474 + + 4 + 11 + 0 + NotNullable + + Col474 + + + + Col474 + + 11 + + + + + + + Col475 + 475 + + 4 + 11 + 0 + NotNullable + + Col475 + + + + Col475 + + 11 + + + + + + + Col476 + 476 + + 4 + 11 + 0 + NotNullable + + Col476 + + + + Col476 + + 11 + + + + + + + Col477 + 477 + + 4 + 11 + 0 + NotNullable + + Col477 + + + + Col477 + + 11 + + + + + + + Col478 + 478 + + 4 + 11 + 0 + NotNullable + + Col478 + + + + Col478 + + 11 + + + + + + + Col479 + 479 + + 4 + 11 + 0 + NotNullable + + Col479 + + + + Col479 + + 11 + + + + + + + Col480 + 480 + + 4 + 11 + 0 + NotNullable + + Col480 + + + + Col480 + + 11 + + + + + + + Col481 + 481 + + 4 + 11 + 0 + NotNullable + + Col481 + + + + Col481 + + 11 + + + + + + + Col482 + 482 + + 4 + 11 + 0 + NotNullable + + Col482 + + + + Col482 + + 11 + + + + + + + Col483 + 483 + + 4 + 11 + 0 + NotNullable + + Col483 + + + + Col483 + + 11 + + + + + + + Col484 + 484 + + 4 + 11 + 0 + NotNullable + + Col484 + + + + Col484 + + 11 + + + + + + + Col485 + 485 + + 4 + 11 + 0 + NotNullable + + Col485 + + + + Col485 + + 11 + + + + + + + Col486 + 486 + + 4 + 11 + 0 + NotNullable + + Col486 + + + + Col486 + + 11 + + + + + + + Col487 + 487 + + 4 + 11 + 0 + NotNullable + + Col487 + + + + Col487 + + 11 + + + + + + + Col488 + 488 + + 4 + 11 + 0 + NotNullable + + Col488 + + + + Col488 + + 11 + + + + + + + Col489 + 489 + + 4 + 11 + 0 + NotNullable + + Col489 + + + + Col489 + + 11 + + + + + + + Col490 + 490 + + 4 + 11 + 0 + NotNullable + + Col490 + + + + Col490 + + 11 + + + + + + + Col491 + 491 + + 4 + 11 + 0 + NotNullable + + Col491 + + + + Col491 + + 11 + + + + + + + Col492 + 492 + + 4 + 11 + 0 + NotNullable + + Col492 + + + + Col492 + + 11 + + + + + + + Col493 + 493 + + 4 + 11 + 0 + NotNullable + + Col493 + + + + Col493 + + 11 + + + + + + + Col494 + 494 + + 4 + 11 + 0 + NotNullable + + Col494 + + + + Col494 + + 11 + + + + + + + Col495 + 495 + + 4 + 11 + 0 + NotNullable + + Col495 + + + + Col495 + + 11 + + + + + + + Col496 + 496 + + 4 + 11 + 0 + NotNullable + + Col496 + + + + Col496 + + 11 + + + + + + + Col497 + 497 + + 4 + 11 + 0 + NotNullable + + Col497 + + + + Col497 + + 11 + + + + + + + Col498 + 498 + + 4 + 11 + 0 + NotNullable + + Col498 + + + + Col498 + + 11 + + + + + + + Col499 + 499 + + 4 + 11 + 0 + NotNullable + + Col499 + + + + Col499 + + 11 + + + + + + + Col500 + 500 + + 4 + 11 + 0 + NotNullable + + Col500 + + + + Col500 + + 11 + + + + + + + ]]> @@ -10998,6 +10999,7 @@ from string + 0 diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize60000.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize60000.rptdesign new file mode 100644 index 00000000000..ea17f1895ff --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize60000.rptdesign @@ -0,0 +1,11185 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + Number Formats Test Report + + + queryText + 15112 + + + queryTimeOut + 15112 + + + rowFetchSize + 15112 + + + in + /templates/blank_report.gif + auto layout + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + COL1 + measure + COL1 + COL1 + + + COL2 + measure + COL2 + COL2 + + + COL3 + measure + COL3 + COL3 + + + COL4 + measure + COL4 + COL4 + + + COL5 + measure + COL5 + COL5 + + + COL6 + measure + COL6 + COL6 + + + COL7 + measure + COL7 + COL7 + + + COL8 + measure + COL8 + COL8 + + + COL9 + measure + COL9 + COL9 + + + COL10 + measure + COL10 + COL10 + + + COL11 + measure + COL11 + COL11 + + + COL12 + measure + COL12 + COL12 + + + COL13 + measure + COL13 + COL13 + + + COL14 + measure + COL14 + COL14 + + + + + + + 1 + COL1 + integer + + + 2 + COL2 + integer + + + 3 + COL3 + integer + + + 4 + COL4 + integer + + + 5 + COL5 + integer + + + 6 + COL6 + integer + + + 7 + COL7 + integer + + + 8 + COL8 + integer + + + 9 + COL9 + integer + + + 10 + COL10 + integer + + + 11 + COL11 + integer + + + 12 + COL12 + integer + + + 13 + COL13 + integer + + + 14 + COL14 + integer + + + + 100000 + Data Source + + + 1 + COL1 + COL1 + integer + 4 + + + 2 + COL2 + COL2 + integer + 4 + + + 3 + COL3 + COL3 + integer + 4 + + + 4 + COL4 + COL4 + integer + 4 + + + 5 + COL5 + COL5 + integer + 4 + + + 6 + COL6 + COL6 + integer + 4 + + + 7 + COL7 + COL7 + integer + 4 + + + 8 + COL8 + COL8 + integer + 4 + + + 9 + COL9 + COL9 + integer + 4 + + + 10 + COL10 + COL10 + integer + 4 + + + 11 + COL11 + COL11 + integer + 4 + + + 12 + COL12 + COL12 + integer + 4 + + + 13 + COL13 + COL13 + integer + 4 + + + 14 + COL14 + COL14 + integer + 4 + + + + + + 2.0 + + + + + + + Col1 + 1 + + 4 + 11 + 0 + NotNullable + + Col1 + + + + Col1 + + 11 + + + + + + + Col2 + 2 + + 4 + 11 + 0 + NotNullable + + Col2 + + + + Col2 + + 11 + + + + + + + Col3 + 3 + + 4 + 11 + 0 + NotNullable + + Col3 + + + + Col3 + + 11 + + + + + + + Col4 + 4 + + 4 + 11 + 0 + NotNullable + + Col4 + + + + Col4 + + 11 + + + + + + + Col5 + 5 + + 4 + 11 + 0 + NotNullable + + Col5 + + + + Col5 + + 11 + + + + + + + Col6 + 6 + + 4 + 11 + 0 + NotNullable + + Col6 + + + + Col6 + + 11 + + + + + + + Col7 + 7 + + 4 + 11 + 0 + NotNullable + + Col7 + + + + Col7 + + 11 + + + + + + + Col8 + 8 + + 4 + 11 + 0 + NotNullable + + Col8 + + + + Col8 + + 11 + + + + + + + Col9 + 9 + + 4 + 11 + 0 + NotNullable + + Col9 + + + + Col9 + + 11 + + + + + + + Col10 + 10 + + 4 + 11 + 0 + NotNullable + + Col10 + + + + Col10 + + 11 + + + + + + + Col11 + 11 + + 4 + 11 + 0 + NotNullable + + Col11 + + + + Col11 + + 11 + + + + + + + Col12 + 12 + + 4 + 11 + 0 + NotNullable + + Col12 + + + + Col12 + + 11 + + + + + + + Col13 + 13 + + 4 + 11 + 0 + NotNullable + + Col13 + + + + Col13 + + 11 + + + + + + + Col14 + 14 + + 4 + 11 + 0 + NotNullable + + Col14 + + + + Col14 + + 11 + + + + + + + Col15 + 15 + + 4 + 11 + 0 + NotNullable + + Col15 + + + + Col15 + + 11 + + + + + + + Col16 + 16 + + 4 + 11 + 0 + NotNullable + + Col16 + + + + Col16 + + 11 + + + + + + + Col17 + 17 + + 4 + 11 + 0 + NotNullable + + Col17 + + + + Col17 + + 11 + + + + + + + Col18 + 18 + + 4 + 11 + 0 + NotNullable + + Col18 + + + + Col18 + + 11 + + + + + + + Col19 + 19 + + 4 + 11 + 0 + NotNullable + + Col19 + + + + Col19 + + 11 + + + + + + + Col20 + 20 + + 4 + 11 + 0 + NotNullable + + Col20 + + + + Col20 + + 11 + + + + + + + Col21 + 21 + + 4 + 11 + 0 + NotNullable + + Col21 + + + + Col21 + + 11 + + + + + + + Col22 + 22 + + 4 + 11 + 0 + NotNullable + + Col22 + + + + Col22 + + 11 + + + + + + + Col23 + 23 + + 4 + 11 + 0 + NotNullable + + Col23 + + + + Col23 + + 11 + + + + + + + Col24 + 24 + + 4 + 11 + 0 + NotNullable + + Col24 + + + + Col24 + + 11 + + + + + + + Col25 + 25 + + 4 + 11 + 0 + NotNullable + + Col25 + + + + Col25 + + 11 + + + + + + + Col26 + 26 + + 4 + 11 + 0 + NotNullable + + Col26 + + + + Col26 + + 11 + + + + + + + Col27 + 27 + + 4 + 11 + 0 + NotNullable + + Col27 + + + + Col27 + + 11 + + + + + + + Col28 + 28 + + 4 + 11 + 0 + NotNullable + + Col28 + + + + Col28 + + 11 + + + + + + + Col29 + 29 + + 4 + 11 + 0 + NotNullable + + Col29 + + + + Col29 + + 11 + + + + + + + Col30 + 30 + + 4 + 11 + 0 + NotNullable + + Col30 + + + + Col30 + + 11 + + + + + + + Col31 + 31 + + 4 + 11 + 0 + NotNullable + + Col31 + + + + Col31 + + 11 + + + + + + + Col32 + 32 + + 4 + 11 + 0 + NotNullable + + Col32 + + + + Col32 + + 11 + + + + + + + Col33 + 33 + + 4 + 11 + 0 + NotNullable + + Col33 + + + + Col33 + + 11 + + + + + + + Col34 + 34 + + 4 + 11 + 0 + NotNullable + + Col34 + + + + Col34 + + 11 + + + + + + + Col35 + 35 + + 4 + 11 + 0 + NotNullable + + Col35 + + + + Col35 + + 11 + + + + + + + Col36 + 36 + + 4 + 11 + 0 + NotNullable + + Col36 + + + + Col36 + + 11 + + + + + + + Col37 + 37 + + 4 + 11 + 0 + NotNullable + + Col37 + + + + Col37 + + 11 + + + + + + + Col38 + 38 + + 4 + 11 + 0 + NotNullable + + Col38 + + + + Col38 + + 11 + + + + + + + Col39 + 39 + + 4 + 11 + 0 + NotNullable + + Col39 + + + + Col39 + + 11 + + + + + + + Col40 + 40 + + 4 + 11 + 0 + NotNullable + + Col40 + + + + Col40 + + 11 + + + + + + + Col41 + 41 + + 4 + 11 + 0 + NotNullable + + Col41 + + + + Col41 + + 11 + + + + + + + Col42 + 42 + + 4 + 11 + 0 + NotNullable + + Col42 + + + + Col42 + + 11 + + + + + + + Col43 + 43 + + 4 + 11 + 0 + NotNullable + + Col43 + + + + Col43 + + 11 + + + + + + + Col44 + 44 + + 4 + 11 + 0 + NotNullable + + Col44 + + + + Col44 + + 11 + + + + + + + Col45 + 45 + + 4 + 11 + 0 + NotNullable + + Col45 + + + + Col45 + + 11 + + + + + + + Col46 + 46 + + 4 + 11 + 0 + NotNullable + + Col46 + + + + Col46 + + 11 + + + + + + + Col47 + 47 + + 4 + 11 + 0 + NotNullable + + Col47 + + + + Col47 + + 11 + + + + + + + Col48 + 48 + + 4 + 11 + 0 + NotNullable + + Col48 + + + + Col48 + + 11 + + + + + + + Col49 + 49 + + 4 + 11 + 0 + NotNullable + + Col49 + + + + Col49 + + 11 + + + + + + + Col50 + 50 + + 4 + 11 + 0 + NotNullable + + Col50 + + + + Col50 + + 11 + + + + + + + Col51 + 51 + + 4 + 11 + 0 + NotNullable + + Col51 + + + + Col51 + + 11 + + + + + + + Col52 + 52 + + 4 + 11 + 0 + NotNullable + + Col52 + + + + Col52 + + 11 + + + + + + + Col53 + 53 + + 4 + 11 + 0 + NotNullable + + Col53 + + + + Col53 + + 11 + + + + + + + Col54 + 54 + + 4 + 11 + 0 + NotNullable + + Col54 + + + + Col54 + + 11 + + + + + + + Col55 + 55 + + 4 + 11 + 0 + NotNullable + + Col55 + + + + Col55 + + 11 + + + + + + + Col56 + 56 + + 4 + 11 + 0 + NotNullable + + Col56 + + + + Col56 + + 11 + + + + + + + Col57 + 57 + + 4 + 11 + 0 + NotNullable + + Col57 + + + + Col57 + + 11 + + + + + + + Col58 + 58 + + 4 + 11 + 0 + NotNullable + + Col58 + + + + Col58 + + 11 + + + + + + + Col59 + 59 + + 4 + 11 + 0 + NotNullable + + Col59 + + + + Col59 + + 11 + + + + + + + Col60 + 60 + + 4 + 11 + 0 + NotNullable + + Col60 + + + + Col60 + + 11 + + + + + + + Col61 + 61 + + 4 + 11 + 0 + NotNullable + + Col61 + + + + Col61 + + 11 + + + + + + + Col62 + 62 + + 4 + 11 + 0 + NotNullable + + Col62 + + + + Col62 + + 11 + + + + + + + Col63 + 63 + + 4 + 11 + 0 + NotNullable + + Col63 + + + + Col63 + + 11 + + + + + + + Col64 + 64 + + 4 + 11 + 0 + NotNullable + + Col64 + + + + Col64 + + 11 + + + + + + + Col65 + 65 + + 4 + 11 + 0 + NotNullable + + Col65 + + + + Col65 + + 11 + + + + + + + Col66 + 66 + + 4 + 11 + 0 + NotNullable + + Col66 + + + + Col66 + + 11 + + + + + + + Col67 + 67 + + 4 + 11 + 0 + NotNullable + + Col67 + + + + Col67 + + 11 + + + + + + + Col68 + 68 + + 4 + 11 + 0 + NotNullable + + Col68 + + + + Col68 + + 11 + + + + + + + Col69 + 69 + + 4 + 11 + 0 + NotNullable + + Col69 + + + + Col69 + + 11 + + + + + + + Col70 + 70 + + 4 + 11 + 0 + NotNullable + + Col70 + + + + Col70 + + 11 + + + + + + + Col71 + 71 + + 4 + 11 + 0 + NotNullable + + Col71 + + + + Col71 + + 11 + + + + + + + Col72 + 72 + + 4 + 11 + 0 + NotNullable + + Col72 + + + + Col72 + + 11 + + + + + + + Col73 + 73 + + 4 + 11 + 0 + NotNullable + + Col73 + + + + Col73 + + 11 + + + + + + + Col74 + 74 + + 4 + 11 + 0 + NotNullable + + Col74 + + + + Col74 + + 11 + + + + + + + Col75 + 75 + + 4 + 11 + 0 + NotNullable + + Col75 + + + + Col75 + + 11 + + + + + + + Col76 + 76 + + 4 + 11 + 0 + NotNullable + + Col76 + + + + Col76 + + 11 + + + + + + + Col77 + 77 + + 4 + 11 + 0 + NotNullable + + Col77 + + + + Col77 + + 11 + + + + + + + Col78 + 78 + + 4 + 11 + 0 + NotNullable + + Col78 + + + + Col78 + + 11 + + + + + + + Col79 + 79 + + 4 + 11 + 0 + NotNullable + + Col79 + + + + Col79 + + 11 + + + + + + + Col80 + 80 + + 4 + 11 + 0 + NotNullable + + Col80 + + + + Col80 + + 11 + + + + + + + Col81 + 81 + + 4 + 11 + 0 + NotNullable + + Col81 + + + + Col81 + + 11 + + + + + + + Col82 + 82 + + 4 + 11 + 0 + NotNullable + + Col82 + + + + Col82 + + 11 + + + + + + + Col83 + 83 + + 4 + 11 + 0 + NotNullable + + Col83 + + + + Col83 + + 11 + + + + + + + Col84 + 84 + + 4 + 11 + 0 + NotNullable + + Col84 + + + + Col84 + + 11 + + + + + + + Col85 + 85 + + 4 + 11 + 0 + NotNullable + + Col85 + + + + Col85 + + 11 + + + + + + + Col86 + 86 + + 4 + 11 + 0 + NotNullable + + Col86 + + + + Col86 + + 11 + + + + + + + Col87 + 87 + + 4 + 11 + 0 + NotNullable + + Col87 + + + + Col87 + + 11 + + + + + + + Col88 + 88 + + 4 + 11 + 0 + NotNullable + + Col88 + + + + Col88 + + 11 + + + + + + + Col89 + 89 + + 4 + 11 + 0 + NotNullable + + Col89 + + + + Col89 + + 11 + + + + + + + Col90 + 90 + + 4 + 11 + 0 + NotNullable + + Col90 + + + + Col90 + + 11 + + + + + + + Col91 + 91 + + 4 + 11 + 0 + NotNullable + + Col91 + + + + Col91 + + 11 + + + + + + + Col92 + 92 + + 4 + 11 + 0 + NotNullable + + Col92 + + + + Col92 + + 11 + + + + + + + Col93 + 93 + + 4 + 11 + 0 + NotNullable + + Col93 + + + + Col93 + + 11 + + + + + + + Col94 + 94 + + 4 + 11 + 0 + NotNullable + + Col94 + + + + Col94 + + 11 + + + + + + + Col95 + 95 + + 4 + 11 + 0 + NotNullable + + Col95 + + + + Col95 + + 11 + + + + + + + Col96 + 96 + + 4 + 11 + 0 + NotNullable + + Col96 + + + + Col96 + + 11 + + + + + + + Col97 + 97 + + 4 + 11 + 0 + NotNullable + + Col97 + + + + Col97 + + 11 + + + + + + + Col98 + 98 + + 4 + 11 + 0 + NotNullable + + Col98 + + + + Col98 + + 11 + + + + + + + Col99 + 99 + + 4 + 11 + 0 + NotNullable + + Col99 + + + + Col99 + + 11 + + + + + + + Col100 + 100 + + 4 + 11 + 0 + NotNullable + + Col100 + + + + Col100 + + 11 + + + + + + + Col101 + 101 + + 4 + 11 + 0 + NotNullable + + Col101 + + + + Col101 + + 11 + + + + + + + Col102 + 102 + + 4 + 11 + 0 + NotNullable + + Col102 + + + + Col102 + + 11 + + + + + + + Col103 + 103 + + 4 + 11 + 0 + NotNullable + + Col103 + + + + Col103 + + 11 + + + + + + + Col104 + 104 + + 4 + 11 + 0 + NotNullable + + Col104 + + + + Col104 + + 11 + + + + + + + Col105 + 105 + + 4 + 11 + 0 + NotNullable + + Col105 + + + + Col105 + + 11 + + + + + + + Col106 + 106 + + 4 + 11 + 0 + NotNullable + + Col106 + + + + Col106 + + 11 + + + + + + + Col107 + 107 + + 4 + 11 + 0 + NotNullable + + Col107 + + + + Col107 + + 11 + + + + + + + Col108 + 108 + + 4 + 11 + 0 + NotNullable + + Col108 + + + + Col108 + + 11 + + + + + + + Col109 + 109 + + 4 + 11 + 0 + NotNullable + + Col109 + + + + Col109 + + 11 + + + + + + + Col110 + 110 + + 4 + 11 + 0 + NotNullable + + Col110 + + + + Col110 + + 11 + + + + + + + Col111 + 111 + + 4 + 11 + 0 + NotNullable + + Col111 + + + + Col111 + + 11 + + + + + + + Col112 + 112 + + 4 + 11 + 0 + NotNullable + + Col112 + + + + Col112 + + 11 + + + + + + + Col113 + 113 + + 4 + 11 + 0 + NotNullable + + Col113 + + + + Col113 + + 11 + + + + + + + Col114 + 114 + + 4 + 11 + 0 + NotNullable + + Col114 + + + + Col114 + + 11 + + + + + + + Col115 + 115 + + 4 + 11 + 0 + NotNullable + + Col115 + + + + Col115 + + 11 + + + + + + + Col116 + 116 + + 4 + 11 + 0 + NotNullable + + Col116 + + + + Col116 + + 11 + + + + + + + Col117 + 117 + + 4 + 11 + 0 + NotNullable + + Col117 + + + + Col117 + + 11 + + + + + + + Col118 + 118 + + 4 + 11 + 0 + NotNullable + + Col118 + + + + Col118 + + 11 + + + + + + + Col119 + 119 + + 4 + 11 + 0 + NotNullable + + Col119 + + + + Col119 + + 11 + + + + + + + Col120 + 120 + + 4 + 11 + 0 + NotNullable + + Col120 + + + + Col120 + + 11 + + + + + + + Col121 + 121 + + 4 + 11 + 0 + NotNullable + + Col121 + + + + Col121 + + 11 + + + + + + + Col122 + 122 + + 4 + 11 + 0 + NotNullable + + Col122 + + + + Col122 + + 11 + + + + + + + Col123 + 123 + + 4 + 11 + 0 + NotNullable + + Col123 + + + + Col123 + + 11 + + + + + + + Col124 + 124 + + 4 + 11 + 0 + NotNullable + + Col124 + + + + Col124 + + 11 + + + + + + + Col125 + 125 + + 4 + 11 + 0 + NotNullable + + Col125 + + + + Col125 + + 11 + + + + + + + Col126 + 126 + + 4 + 11 + 0 + NotNullable + + Col126 + + + + Col126 + + 11 + + + + + + + Col127 + 127 + + 4 + 11 + 0 + NotNullable + + Col127 + + + + Col127 + + 11 + + + + + + + Col128 + 128 + + 4 + 11 + 0 + NotNullable + + Col128 + + + + Col128 + + 11 + + + + + + + Col129 + 129 + + 4 + 11 + 0 + NotNullable + + Col129 + + + + Col129 + + 11 + + + + + + + Col130 + 130 + + 4 + 11 + 0 + NotNullable + + Col130 + + + + Col130 + + 11 + + + + + + + Col131 + 131 + + 4 + 11 + 0 + NotNullable + + Col131 + + + + Col131 + + 11 + + + + + + + Col132 + 132 + + 4 + 11 + 0 + NotNullable + + Col132 + + + + Col132 + + 11 + + + + + + + Col133 + 133 + + 4 + 11 + 0 + NotNullable + + Col133 + + + + Col133 + + 11 + + + + + + + Col134 + 134 + + 4 + 11 + 0 + NotNullable + + Col134 + + + + Col134 + + 11 + + + + + + + Col135 + 135 + + 4 + 11 + 0 + NotNullable + + Col135 + + + + Col135 + + 11 + + + + + + + Col136 + 136 + + 4 + 11 + 0 + NotNullable + + Col136 + + + + Col136 + + 11 + + + + + + + Col137 + 137 + + 4 + 11 + 0 + NotNullable + + Col137 + + + + Col137 + + 11 + + + + + + + Col138 + 138 + + 4 + 11 + 0 + NotNullable + + Col138 + + + + Col138 + + 11 + + + + + + + Col139 + 139 + + 4 + 11 + 0 + NotNullable + + Col139 + + + + Col139 + + 11 + + + + + + + Col140 + 140 + + 4 + 11 + 0 + NotNullable + + Col140 + + + + Col140 + + 11 + + + + + + + Col141 + 141 + + 4 + 11 + 0 + NotNullable + + Col141 + + + + Col141 + + 11 + + + + + + + Col142 + 142 + + 4 + 11 + 0 + NotNullable + + Col142 + + + + Col142 + + 11 + + + + + + + Col143 + 143 + + 4 + 11 + 0 + NotNullable + + Col143 + + + + Col143 + + 11 + + + + + + + Col144 + 144 + + 4 + 11 + 0 + NotNullable + + Col144 + + + + Col144 + + 11 + + + + + + + Col145 + 145 + + 4 + 11 + 0 + NotNullable + + Col145 + + + + Col145 + + 11 + + + + + + + Col146 + 146 + + 4 + 11 + 0 + NotNullable + + Col146 + + + + Col146 + + 11 + + + + + + + Col147 + 147 + + 4 + 11 + 0 + NotNullable + + Col147 + + + + Col147 + + 11 + + + + + + + Col148 + 148 + + 4 + 11 + 0 + NotNullable + + Col148 + + + + Col148 + + 11 + + + + + + + Col149 + 149 + + 4 + 11 + 0 + NotNullable + + Col149 + + + + Col149 + + 11 + + + + + + + Col150 + 150 + + 4 + 11 + 0 + NotNullable + + Col150 + + + + Col150 + + 11 + + + + + + + Col151 + 151 + + 4 + 11 + 0 + NotNullable + + Col151 + + + + Col151 + + 11 + + + + + + + Col152 + 152 + + 4 + 11 + 0 + NotNullable + + Col152 + + + + Col152 + + 11 + + + + + + + Col153 + 153 + + 4 + 11 + 0 + NotNullable + + Col153 + + + + Col153 + + 11 + + + + + + + Col154 + 154 + + 4 + 11 + 0 + NotNullable + + Col154 + + + + Col154 + + 11 + + + + + + + Col155 + 155 + + 4 + 11 + 0 + NotNullable + + Col155 + + + + Col155 + + 11 + + + + + + + Col156 + 156 + + 4 + 11 + 0 + NotNullable + + Col156 + + + + Col156 + + 11 + + + + + + + Col157 + 157 + + 4 + 11 + 0 + NotNullable + + Col157 + + + + Col157 + + 11 + + + + + + + Col158 + 158 + + 4 + 11 + 0 + NotNullable + + Col158 + + + + Col158 + + 11 + + + + + + + Col159 + 159 + + 4 + 11 + 0 + NotNullable + + Col159 + + + + Col159 + + 11 + + + + + + + Col160 + 160 + + 4 + 11 + 0 + NotNullable + + Col160 + + + + Col160 + + 11 + + + + + + + Col161 + 161 + + 4 + 11 + 0 + NotNullable + + Col161 + + + + Col161 + + 11 + + + + + + + Col162 + 162 + + 4 + 11 + 0 + NotNullable + + Col162 + + + + Col162 + + 11 + + + + + + + Col163 + 163 + + 4 + 11 + 0 + NotNullable + + Col163 + + + + Col163 + + 11 + + + + + + + Col164 + 164 + + 4 + 11 + 0 + NotNullable + + Col164 + + + + Col164 + + 11 + + + + + + + Col165 + 165 + + 4 + 11 + 0 + NotNullable + + Col165 + + + + Col165 + + 11 + + + + + + + Col166 + 166 + + 4 + 11 + 0 + NotNullable + + Col166 + + + + Col166 + + 11 + + + + + + + Col167 + 167 + + 4 + 11 + 0 + NotNullable + + Col167 + + + + Col167 + + 11 + + + + + + + Col168 + 168 + + 4 + 11 + 0 + NotNullable + + Col168 + + + + Col168 + + 11 + + + + + + + Col169 + 169 + + 4 + 11 + 0 + NotNullable + + Col169 + + + + Col169 + + 11 + + + + + + + Col170 + 170 + + 4 + 11 + 0 + NotNullable + + Col170 + + + + Col170 + + 11 + + + + + + + Col171 + 171 + + 4 + 11 + 0 + NotNullable + + Col171 + + + + Col171 + + 11 + + + + + + + Col172 + 172 + + 4 + 11 + 0 + NotNullable + + Col172 + + + + Col172 + + 11 + + + + + + + Col173 + 173 + + 4 + 11 + 0 + NotNullable + + Col173 + + + + Col173 + + 11 + + + + + + + Col174 + 174 + + 4 + 11 + 0 + NotNullable + + Col174 + + + + Col174 + + 11 + + + + + + + Col175 + 175 + + 4 + 11 + 0 + NotNullable + + Col175 + + + + Col175 + + 11 + + + + + + + Col176 + 176 + + 4 + 11 + 0 + NotNullable + + Col176 + + + + Col176 + + 11 + + + + + + + Col177 + 177 + + 4 + 11 + 0 + NotNullable + + Col177 + + + + Col177 + + 11 + + + + + + + Col178 + 178 + + 4 + 11 + 0 + NotNullable + + Col178 + + + + Col178 + + 11 + + + + + + + Col179 + 179 + + 4 + 11 + 0 + NotNullable + + Col179 + + + + Col179 + + 11 + + + + + + + Col180 + 180 + + 4 + 11 + 0 + NotNullable + + Col180 + + + + Col180 + + 11 + + + + + + + Col181 + 181 + + 4 + 11 + 0 + NotNullable + + Col181 + + + + Col181 + + 11 + + + + + + + Col182 + 182 + + 4 + 11 + 0 + NotNullable + + Col182 + + + + Col182 + + 11 + + + + + + + Col183 + 183 + + 4 + 11 + 0 + NotNullable + + Col183 + + + + Col183 + + 11 + + + + + + + Col184 + 184 + + 4 + 11 + 0 + NotNullable + + Col184 + + + + Col184 + + 11 + + + + + + + Col185 + 185 + + 4 + 11 + 0 + NotNullable + + Col185 + + + + Col185 + + 11 + + + + + + + Col186 + 186 + + 4 + 11 + 0 + NotNullable + + Col186 + + + + Col186 + + 11 + + + + + + + Col187 + 187 + + 4 + 11 + 0 + NotNullable + + Col187 + + + + Col187 + + 11 + + + + + + + Col188 + 188 + + 4 + 11 + 0 + NotNullable + + Col188 + + + + Col188 + + 11 + + + + + + + Col189 + 189 + + 4 + 11 + 0 + NotNullable + + Col189 + + + + Col189 + + 11 + + + + + + + Col190 + 190 + + 4 + 11 + 0 + NotNullable + + Col190 + + + + Col190 + + 11 + + + + + + + Col191 + 191 + + 4 + 11 + 0 + NotNullable + + Col191 + + + + Col191 + + 11 + + + + + + + Col192 + 192 + + 4 + 11 + 0 + NotNullable + + Col192 + + + + Col192 + + 11 + + + + + + + Col193 + 193 + + 4 + 11 + 0 + NotNullable + + Col193 + + + + Col193 + + 11 + + + + + + + Col194 + 194 + + 4 + 11 + 0 + NotNullable + + Col194 + + + + Col194 + + 11 + + + + + + + Col195 + 195 + + 4 + 11 + 0 + NotNullable + + Col195 + + + + Col195 + + 11 + + + + + + + Col196 + 196 + + 4 + 11 + 0 + NotNullable + + Col196 + + + + Col196 + + 11 + + + + + + + Col197 + 197 + + 4 + 11 + 0 + NotNullable + + Col197 + + + + Col197 + + 11 + + + + + + + Col198 + 198 + + 4 + 11 + 0 + NotNullable + + Col198 + + + + Col198 + + 11 + + + + + + + Col199 + 199 + + 4 + 11 + 0 + NotNullable + + Col199 + + + + Col199 + + 11 + + + + + + + Col200 + 200 + + 4 + 11 + 0 + NotNullable + + Col200 + + + + Col200 + + 11 + + + + + + + Col201 + 201 + + 4 + 11 + 0 + NotNullable + + Col201 + + + + Col201 + + 11 + + + + + + + Col202 + 202 + + 4 + 11 + 0 + NotNullable + + Col202 + + + + Col202 + + 11 + + + + + + + Col203 + 203 + + 4 + 11 + 0 + NotNullable + + Col203 + + + + Col203 + + 11 + + + + + + + Col204 + 204 + + 4 + 11 + 0 + NotNullable + + Col204 + + + + Col204 + + 11 + + + + + + + Col205 + 205 + + 4 + 11 + 0 + NotNullable + + Col205 + + + + Col205 + + 11 + + + + + + + Col206 + 206 + + 4 + 11 + 0 + NotNullable + + Col206 + + + + Col206 + + 11 + + + + + + + Col207 + 207 + + 4 + 11 + 0 + NotNullable + + Col207 + + + + Col207 + + 11 + + + + + + + Col208 + 208 + + 4 + 11 + 0 + NotNullable + + Col208 + + + + Col208 + + 11 + + + + + + + Col209 + 209 + + 4 + 11 + 0 + NotNullable + + Col209 + + + + Col209 + + 11 + + + + + + + Col210 + 210 + + 4 + 11 + 0 + NotNullable + + Col210 + + + + Col210 + + 11 + + + + + + + Col211 + 211 + + 4 + 11 + 0 + NotNullable + + Col211 + + + + Col211 + + 11 + + + + + + + Col212 + 212 + + 4 + 11 + 0 + NotNullable + + Col212 + + + + Col212 + + 11 + + + + + + + Col213 + 213 + + 4 + 11 + 0 + NotNullable + + Col213 + + + + Col213 + + 11 + + + + + + + Col214 + 214 + + 4 + 11 + 0 + NotNullable + + Col214 + + + + Col214 + + 11 + + + + + + + Col215 + 215 + + 4 + 11 + 0 + NotNullable + + Col215 + + + + Col215 + + 11 + + + + + + + Col216 + 216 + + 4 + 11 + 0 + NotNullable + + Col216 + + + + Col216 + + 11 + + + + + + + Col217 + 217 + + 4 + 11 + 0 + NotNullable + + Col217 + + + + Col217 + + 11 + + + + + + + Col218 + 218 + + 4 + 11 + 0 + NotNullable + + Col218 + + + + Col218 + + 11 + + + + + + + Col219 + 219 + + 4 + 11 + 0 + NotNullable + + Col219 + + + + Col219 + + 11 + + + + + + + Col220 + 220 + + 4 + 11 + 0 + NotNullable + + Col220 + + + + Col220 + + 11 + + + + + + + Col221 + 221 + + 4 + 11 + 0 + NotNullable + + Col221 + + + + Col221 + + 11 + + + + + + + Col222 + 222 + + 4 + 11 + 0 + NotNullable + + Col222 + + + + Col222 + + 11 + + + + + + + Col223 + 223 + + 4 + 11 + 0 + NotNullable + + Col223 + + + + Col223 + + 11 + + + + + + + Col224 + 224 + + 4 + 11 + 0 + NotNullable + + Col224 + + + + Col224 + + 11 + + + + + + + Col225 + 225 + + 4 + 11 + 0 + NotNullable + + Col225 + + + + Col225 + + 11 + + + + + + + Col226 + 226 + + 4 + 11 + 0 + NotNullable + + Col226 + + + + Col226 + + 11 + + + + + + + Col227 + 227 + + 4 + 11 + 0 + NotNullable + + Col227 + + + + Col227 + + 11 + + + + + + + Col228 + 228 + + 4 + 11 + 0 + NotNullable + + Col228 + + + + Col228 + + 11 + + + + + + + Col229 + 229 + + 4 + 11 + 0 + NotNullable + + Col229 + + + + Col229 + + 11 + + + + + + + Col230 + 230 + + 4 + 11 + 0 + NotNullable + + Col230 + + + + Col230 + + 11 + + + + + + + Col231 + 231 + + 4 + 11 + 0 + NotNullable + + Col231 + + + + Col231 + + 11 + + + + + + + Col232 + 232 + + 4 + 11 + 0 + NotNullable + + Col232 + + + + Col232 + + 11 + + + + + + + Col233 + 233 + + 4 + 11 + 0 + NotNullable + + Col233 + + + + Col233 + + 11 + + + + + + + Col234 + 234 + + 4 + 11 + 0 + NotNullable + + Col234 + + + + Col234 + + 11 + + + + + + + Col235 + 235 + + 4 + 11 + 0 + NotNullable + + Col235 + + + + Col235 + + 11 + + + + + + + Col236 + 236 + + 4 + 11 + 0 + NotNullable + + Col236 + + + + Col236 + + 11 + + + + + + + Col237 + 237 + + 4 + 11 + 0 + NotNullable + + Col237 + + + + Col237 + + 11 + + + + + + + Col238 + 238 + + 4 + 11 + 0 + NotNullable + + Col238 + + + + Col238 + + 11 + + + + + + + Col239 + 239 + + 4 + 11 + 0 + NotNullable + + Col239 + + + + Col239 + + 11 + + + + + + + Col240 + 240 + + 4 + 11 + 0 + NotNullable + + Col240 + + + + Col240 + + 11 + + + + + + + Col241 + 241 + + 4 + 11 + 0 + NotNullable + + Col241 + + + + Col241 + + 11 + + + + + + + Col242 + 242 + + 4 + 11 + 0 + NotNullable + + Col242 + + + + Col242 + + 11 + + + + + + + Col243 + 243 + + 4 + 11 + 0 + NotNullable + + Col243 + + + + Col243 + + 11 + + + + + + + Col244 + 244 + + 4 + 11 + 0 + NotNullable + + Col244 + + + + Col244 + + 11 + + + + + + + Col245 + 245 + + 4 + 11 + 0 + NotNullable + + Col245 + + + + Col245 + + 11 + + + + + + + Col246 + 246 + + 4 + 11 + 0 + NotNullable + + Col246 + + + + Col246 + + 11 + + + + + + + Col247 + 247 + + 4 + 11 + 0 + NotNullable + + Col247 + + + + Col247 + + 11 + + + + + + + Col248 + 248 + + 4 + 11 + 0 + NotNullable + + Col248 + + + + Col248 + + 11 + + + + + + + Col249 + 249 + + 4 + 11 + 0 + NotNullable + + Col249 + + + + Col249 + + 11 + + + + + + + Col250 + 250 + + 4 + 11 + 0 + NotNullable + + Col250 + + + + Col250 + + 11 + + + + + + + Col251 + 251 + + 4 + 11 + 0 + NotNullable + + Col251 + + + + Col251 + + 11 + + + + + + + Col252 + 252 + + 4 + 11 + 0 + NotNullable + + Col252 + + + + Col252 + + 11 + + + + + + + Col253 + 253 + + 4 + 11 + 0 + NotNullable + + Col253 + + + + Col253 + + 11 + + + + + + + Col254 + 254 + + 4 + 11 + 0 + NotNullable + + Col254 + + + + Col254 + + 11 + + + + + + + Col255 + 255 + + 4 + 11 + 0 + NotNullable + + Col255 + + + + Col255 + + 11 + + + + + + + Col256 + 256 + + 4 + 11 + 0 + NotNullable + + Col256 + + + + Col256 + + 11 + + + + + + + Col257 + 257 + + 4 + 11 + 0 + NotNullable + + Col257 + + + + Col257 + + 11 + + + + + + + Col258 + 258 + + 4 + 11 + 0 + NotNullable + + Col258 + + + + Col258 + + 11 + + + + + + + Col259 + 259 + + 4 + 11 + 0 + NotNullable + + Col259 + + + + Col259 + + 11 + + + + + + + Col260 + 260 + + 4 + 11 + 0 + NotNullable + + Col260 + + + + Col260 + + 11 + + + + + + + Col261 + 261 + + 4 + 11 + 0 + NotNullable + + Col261 + + + + Col261 + + 11 + + + + + + + Col262 + 262 + + 4 + 11 + 0 + NotNullable + + Col262 + + + + Col262 + + 11 + + + + + + + Col263 + 263 + + 4 + 11 + 0 + NotNullable + + Col263 + + + + Col263 + + 11 + + + + + + + Col264 + 264 + + 4 + 11 + 0 + NotNullable + + Col264 + + + + Col264 + + 11 + + + + + + + Col265 + 265 + + 4 + 11 + 0 + NotNullable + + Col265 + + + + Col265 + + 11 + + + + + + + Col266 + 266 + + 4 + 11 + 0 + NotNullable + + Col266 + + + + Col266 + + 11 + + + + + + + Col267 + 267 + + 4 + 11 + 0 + NotNullable + + Col267 + + + + Col267 + + 11 + + + + + + + Col268 + 268 + + 4 + 11 + 0 + NotNullable + + Col268 + + + + Col268 + + 11 + + + + + + + Col269 + 269 + + 4 + 11 + 0 + NotNullable + + Col269 + + + + Col269 + + 11 + + + + + + + Col270 + 270 + + 4 + 11 + 0 + NotNullable + + Col270 + + + + Col270 + + 11 + + + + + + + Col271 + 271 + + 4 + 11 + 0 + NotNullable + + Col271 + + + + Col271 + + 11 + + + + + + + Col272 + 272 + + 4 + 11 + 0 + NotNullable + + Col272 + + + + Col272 + + 11 + + + + + + + Col273 + 273 + + 4 + 11 + 0 + NotNullable + + Col273 + + + + Col273 + + 11 + + + + + + + Col274 + 274 + + 4 + 11 + 0 + NotNullable + + Col274 + + + + Col274 + + 11 + + + + + + + Col275 + 275 + + 4 + 11 + 0 + NotNullable + + Col275 + + + + Col275 + + 11 + + + + + + + Col276 + 276 + + 4 + 11 + 0 + NotNullable + + Col276 + + + + Col276 + + 11 + + + + + + + Col277 + 277 + + 4 + 11 + 0 + NotNullable + + Col277 + + + + Col277 + + 11 + + + + + + + Col278 + 278 + + 4 + 11 + 0 + NotNullable + + Col278 + + + + Col278 + + 11 + + + + + + + Col279 + 279 + + 4 + 11 + 0 + NotNullable + + Col279 + + + + Col279 + + 11 + + + + + + + Col280 + 280 + + 4 + 11 + 0 + NotNullable + + Col280 + + + + Col280 + + 11 + + + + + + + Col281 + 281 + + 4 + 11 + 0 + NotNullable + + Col281 + + + + Col281 + + 11 + + + + + + + Col282 + 282 + + 4 + 11 + 0 + NotNullable + + Col282 + + + + Col282 + + 11 + + + + + + + Col283 + 283 + + 4 + 11 + 0 + NotNullable + + Col283 + + + + Col283 + + 11 + + + + + + + Col284 + 284 + + 4 + 11 + 0 + NotNullable + + Col284 + + + + Col284 + + 11 + + + + + + + Col285 + 285 + + 4 + 11 + 0 + NotNullable + + Col285 + + + + Col285 + + 11 + + + + + + + Col286 + 286 + + 4 + 11 + 0 + NotNullable + + Col286 + + + + Col286 + + 11 + + + + + + + Col287 + 287 + + 4 + 11 + 0 + NotNullable + + Col287 + + + + Col287 + + 11 + + + + + + + Col288 + 288 + + 4 + 11 + 0 + NotNullable + + Col288 + + + + Col288 + + 11 + + + + + + + Col289 + 289 + + 4 + 11 + 0 + NotNullable + + Col289 + + + + Col289 + + 11 + + + + + + + Col290 + 290 + + 4 + 11 + 0 + NotNullable + + Col290 + + + + Col290 + + 11 + + + + + + + Col291 + 291 + + 4 + 11 + 0 + NotNullable + + Col291 + + + + Col291 + + 11 + + + + + + + Col292 + 292 + + 4 + 11 + 0 + NotNullable + + Col292 + + + + Col292 + + 11 + + + + + + + Col293 + 293 + + 4 + 11 + 0 + NotNullable + + Col293 + + + + Col293 + + 11 + + + + + + + Col294 + 294 + + 4 + 11 + 0 + NotNullable + + Col294 + + + + Col294 + + 11 + + + + + + + Col295 + 295 + + 4 + 11 + 0 + NotNullable + + Col295 + + + + Col295 + + 11 + + + + + + + Col296 + 296 + + 4 + 11 + 0 + NotNullable + + Col296 + + + + Col296 + + 11 + + + + + + + Col297 + 297 + + 4 + 11 + 0 + NotNullable + + Col297 + + + + Col297 + + 11 + + + + + + + Col298 + 298 + + 4 + 11 + 0 + NotNullable + + Col298 + + + + Col298 + + 11 + + + + + + + Col299 + 299 + + 4 + 11 + 0 + NotNullable + + Col299 + + + + Col299 + + 11 + + + + + + + Col300 + 300 + + 4 + 11 + 0 + NotNullable + + Col300 + + + + Col300 + + 11 + + + + + + + Col301 + 301 + + 4 + 11 + 0 + NotNullable + + Col301 + + + + Col301 + + 11 + + + + + + + Col302 + 302 + + 4 + 11 + 0 + NotNullable + + Col302 + + + + Col302 + + 11 + + + + + + + Col303 + 303 + + 4 + 11 + 0 + NotNullable + + Col303 + + + + Col303 + + 11 + + + + + + + Col304 + 304 + + 4 + 11 + 0 + NotNullable + + Col304 + + + + Col304 + + 11 + + + + + + + Col305 + 305 + + 4 + 11 + 0 + NotNullable + + Col305 + + + + Col305 + + 11 + + + + + + + Col306 + 306 + + 4 + 11 + 0 + NotNullable + + Col306 + + + + Col306 + + 11 + + + + + + + Col307 + 307 + + 4 + 11 + 0 + NotNullable + + Col307 + + + + Col307 + + 11 + + + + + + + Col308 + 308 + + 4 + 11 + 0 + NotNullable + + Col308 + + + + Col308 + + 11 + + + + + + + Col309 + 309 + + 4 + 11 + 0 + NotNullable + + Col309 + + + + Col309 + + 11 + + + + + + + Col310 + 310 + + 4 + 11 + 0 + NotNullable + + Col310 + + + + Col310 + + 11 + + + + + + + Col311 + 311 + + 4 + 11 + 0 + NotNullable + + Col311 + + + + Col311 + + 11 + + + + + + + Col312 + 312 + + 4 + 11 + 0 + NotNullable + + Col312 + + + + Col312 + + 11 + + + + + + + Col313 + 313 + + 4 + 11 + 0 + NotNullable + + Col313 + + + + Col313 + + 11 + + + + + + + Col314 + 314 + + 4 + 11 + 0 + NotNullable + + Col314 + + + + Col314 + + 11 + + + + + + + Col315 + 315 + + 4 + 11 + 0 + NotNullable + + Col315 + + + + Col315 + + 11 + + + + + + + Col316 + 316 + + 4 + 11 + 0 + NotNullable + + Col316 + + + + Col316 + + 11 + + + + + + + Col317 + 317 + + 4 + 11 + 0 + NotNullable + + Col317 + + + + Col317 + + 11 + + + + + + + Col318 + 318 + + 4 + 11 + 0 + NotNullable + + Col318 + + + + Col318 + + 11 + + + + + + + Col319 + 319 + + 4 + 11 + 0 + NotNullable + + Col319 + + + + Col319 + + 11 + + + + + + + Col320 + 320 + + 4 + 11 + 0 + NotNullable + + Col320 + + + + Col320 + + 11 + + + + + + + Col321 + 321 + + 4 + 11 + 0 + NotNullable + + Col321 + + + + Col321 + + 11 + + + + + + + Col322 + 322 + + 4 + 11 + 0 + NotNullable + + Col322 + + + + Col322 + + 11 + + + + + + + Col323 + 323 + + 4 + 11 + 0 + NotNullable + + Col323 + + + + Col323 + + 11 + + + + + + + Col324 + 324 + + 4 + 11 + 0 + NotNullable + + Col324 + + + + Col324 + + 11 + + + + + + + Col325 + 325 + + 4 + 11 + 0 + NotNullable + + Col325 + + + + Col325 + + 11 + + + + + + + Col326 + 326 + + 4 + 11 + 0 + NotNullable + + Col326 + + + + Col326 + + 11 + + + + + + + Col327 + 327 + + 4 + 11 + 0 + NotNullable + + Col327 + + + + Col327 + + 11 + + + + + + + Col328 + 328 + + 4 + 11 + 0 + NotNullable + + Col328 + + + + Col328 + + 11 + + + + + + + Col329 + 329 + + 4 + 11 + 0 + NotNullable + + Col329 + + + + Col329 + + 11 + + + + + + + Col330 + 330 + + 4 + 11 + 0 + NotNullable + + Col330 + + + + Col330 + + 11 + + + + + + + Col331 + 331 + + 4 + 11 + 0 + NotNullable + + Col331 + + + + Col331 + + 11 + + + + + + + Col332 + 332 + + 4 + 11 + 0 + NotNullable + + Col332 + + + + Col332 + + 11 + + + + + + + Col333 + 333 + + 4 + 11 + 0 + NotNullable + + Col333 + + + + Col333 + + 11 + + + + + + + Col334 + 334 + + 4 + 11 + 0 + NotNullable + + Col334 + + + + Col334 + + 11 + + + + + + + Col335 + 335 + + 4 + 11 + 0 + NotNullable + + Col335 + + + + Col335 + + 11 + + + + + + + Col336 + 336 + + 4 + 11 + 0 + NotNullable + + Col336 + + + + Col336 + + 11 + + + + + + + Col337 + 337 + + 4 + 11 + 0 + NotNullable + + Col337 + + + + Col337 + + 11 + + + + + + + Col338 + 338 + + 4 + 11 + 0 + NotNullable + + Col338 + + + + Col338 + + 11 + + + + + + + Col339 + 339 + + 4 + 11 + 0 + NotNullable + + Col339 + + + + Col339 + + 11 + + + + + + + Col340 + 340 + + 4 + 11 + 0 + NotNullable + + Col340 + + + + Col340 + + 11 + + + + + + + Col341 + 341 + + 4 + 11 + 0 + NotNullable + + Col341 + + + + Col341 + + 11 + + + + + + + Col342 + 342 + + 4 + 11 + 0 + NotNullable + + Col342 + + + + Col342 + + 11 + + + + + + + Col343 + 343 + + 4 + 11 + 0 + NotNullable + + Col343 + + + + Col343 + + 11 + + + + + + + Col344 + 344 + + 4 + 11 + 0 + NotNullable + + Col344 + + + + Col344 + + 11 + + + + + + + Col345 + 345 + + 4 + 11 + 0 + NotNullable + + Col345 + + + + Col345 + + 11 + + + + + + + Col346 + 346 + + 4 + 11 + 0 + NotNullable + + Col346 + + + + Col346 + + 11 + + + + + + + Col347 + 347 + + 4 + 11 + 0 + NotNullable + + Col347 + + + + Col347 + + 11 + + + + + + + Col348 + 348 + + 4 + 11 + 0 + NotNullable + + Col348 + + + + Col348 + + 11 + + + + + + + Col349 + 349 + + 4 + 11 + 0 + NotNullable + + Col349 + + + + Col349 + + 11 + + + + + + + Col350 + 350 + + 4 + 11 + 0 + NotNullable + + Col350 + + + + Col350 + + 11 + + + + + + + Col351 + 351 + + 4 + 11 + 0 + NotNullable + + Col351 + + + + Col351 + + 11 + + + + + + + Col352 + 352 + + 4 + 11 + 0 + NotNullable + + Col352 + + + + Col352 + + 11 + + + + + + + Col353 + 353 + + 4 + 11 + 0 + NotNullable + + Col353 + + + + Col353 + + 11 + + + + + + + Col354 + 354 + + 4 + 11 + 0 + NotNullable + + Col354 + + + + Col354 + + 11 + + + + + + + Col355 + 355 + + 4 + 11 + 0 + NotNullable + + Col355 + + + + Col355 + + 11 + + + + + + + Col356 + 356 + + 4 + 11 + 0 + NotNullable + + Col356 + + + + Col356 + + 11 + + + + + + + Col357 + 357 + + 4 + 11 + 0 + NotNullable + + Col357 + + + + Col357 + + 11 + + + + + + + Col358 + 358 + + 4 + 11 + 0 + NotNullable + + Col358 + + + + Col358 + + 11 + + + + + + + Col359 + 359 + + 4 + 11 + 0 + NotNullable + + Col359 + + + + Col359 + + 11 + + + + + + + Col360 + 360 + + 4 + 11 + 0 + NotNullable + + Col360 + + + + Col360 + + 11 + + + + + + + Col361 + 361 + + 4 + 11 + 0 + NotNullable + + Col361 + + + + Col361 + + 11 + + + + + + + Col362 + 362 + + 4 + 11 + 0 + NotNullable + + Col362 + + + + Col362 + + 11 + + + + + + + Col363 + 363 + + 4 + 11 + 0 + NotNullable + + Col363 + + + + Col363 + + 11 + + + + + + + Col364 + 364 + + 4 + 11 + 0 + NotNullable + + Col364 + + + + Col364 + + 11 + + + + + + + Col365 + 365 + + 4 + 11 + 0 + NotNullable + + Col365 + + + + Col365 + + 11 + + + + + + + Col366 + 366 + + 4 + 11 + 0 + NotNullable + + Col366 + + + + Col366 + + 11 + + + + + + + Col367 + 367 + + 4 + 11 + 0 + NotNullable + + Col367 + + + + Col367 + + 11 + + + + + + + Col368 + 368 + + 4 + 11 + 0 + NotNullable + + Col368 + + + + Col368 + + 11 + + + + + + + Col369 + 369 + + 4 + 11 + 0 + NotNullable + + Col369 + + + + Col369 + + 11 + + + + + + + Col370 + 370 + + 4 + 11 + 0 + NotNullable + + Col370 + + + + Col370 + + 11 + + + + + + + Col371 + 371 + + 4 + 11 + 0 + NotNullable + + Col371 + + + + Col371 + + 11 + + + + + + + Col372 + 372 + + 4 + 11 + 0 + NotNullable + + Col372 + + + + Col372 + + 11 + + + + + + + Col373 + 373 + + 4 + 11 + 0 + NotNullable + + Col373 + + + + Col373 + + 11 + + + + + + + Col374 + 374 + + 4 + 11 + 0 + NotNullable + + Col374 + + + + Col374 + + 11 + + + + + + + Col375 + 375 + + 4 + 11 + 0 + NotNullable + + Col375 + + + + Col375 + + 11 + + + + + + + Col376 + 376 + + 4 + 11 + 0 + NotNullable + + Col376 + + + + Col376 + + 11 + + + + + + + Col377 + 377 + + 4 + 11 + 0 + NotNullable + + Col377 + + + + Col377 + + 11 + + + + + + + Col378 + 378 + + 4 + 11 + 0 + NotNullable + + Col378 + + + + Col378 + + 11 + + + + + + + Col379 + 379 + + 4 + 11 + 0 + NotNullable + + Col379 + + + + Col379 + + 11 + + + + + + + Col380 + 380 + + 4 + 11 + 0 + NotNullable + + Col380 + + + + Col380 + + 11 + + + + + + + Col381 + 381 + + 4 + 11 + 0 + NotNullable + + Col381 + + + + Col381 + + 11 + + + + + + + Col382 + 382 + + 4 + 11 + 0 + NotNullable + + Col382 + + + + Col382 + + 11 + + + + + + + Col383 + 383 + + 4 + 11 + 0 + NotNullable + + Col383 + + + + Col383 + + 11 + + + + + + + Col384 + 384 + + 4 + 11 + 0 + NotNullable + + Col384 + + + + Col384 + + 11 + + + + + + + Col385 + 385 + + 4 + 11 + 0 + NotNullable + + Col385 + + + + Col385 + + 11 + + + + + + + Col386 + 386 + + 4 + 11 + 0 + NotNullable + + Col386 + + + + Col386 + + 11 + + + + + + + Col387 + 387 + + 4 + 11 + 0 + NotNullable + + Col387 + + + + Col387 + + 11 + + + + + + + Col388 + 388 + + 4 + 11 + 0 + NotNullable + + Col388 + + + + Col388 + + 11 + + + + + + + Col389 + 389 + + 4 + 11 + 0 + NotNullable + + Col389 + + + + Col389 + + 11 + + + + + + + Col390 + 390 + + 4 + 11 + 0 + NotNullable + + Col390 + + + + Col390 + + 11 + + + + + + + Col391 + 391 + + 4 + 11 + 0 + NotNullable + + Col391 + + + + Col391 + + 11 + + + + + + + Col392 + 392 + + 4 + 11 + 0 + NotNullable + + Col392 + + + + Col392 + + 11 + + + + + + + Col393 + 393 + + 4 + 11 + 0 + NotNullable + + Col393 + + + + Col393 + + 11 + + + + + + + Col394 + 394 + + 4 + 11 + 0 + NotNullable + + Col394 + + + + Col394 + + 11 + + + + + + + Col395 + 395 + + 4 + 11 + 0 + NotNullable + + Col395 + + + + Col395 + + 11 + + + + + + + Col396 + 396 + + 4 + 11 + 0 + NotNullable + + Col396 + + + + Col396 + + 11 + + + + + + + Col397 + 397 + + 4 + 11 + 0 + NotNullable + + Col397 + + + + Col397 + + 11 + + + + + + + Col398 + 398 + + 4 + 11 + 0 + NotNullable + + Col398 + + + + Col398 + + 11 + + + + + + + Col399 + 399 + + 4 + 11 + 0 + NotNullable + + Col399 + + + + Col399 + + 11 + + + + + + + Col400 + 400 + + 4 + 11 + 0 + NotNullable + + Col400 + + + + Col400 + + 11 + + + + + + + Col401 + 401 + + 4 + 11 + 0 + NotNullable + + Col401 + + + + Col401 + + 11 + + + + + + + Col402 + 402 + + 4 + 11 + 0 + NotNullable + + Col402 + + + + Col402 + + 11 + + + + + + + Col403 + 403 + + 4 + 11 + 0 + NotNullable + + Col403 + + + + Col403 + + 11 + + + + + + + Col404 + 404 + + 4 + 11 + 0 + NotNullable + + Col404 + + + + Col404 + + 11 + + + + + + + Col405 + 405 + + 4 + 11 + 0 + NotNullable + + Col405 + + + + Col405 + + 11 + + + + + + + Col406 + 406 + + 4 + 11 + 0 + NotNullable + + Col406 + + + + Col406 + + 11 + + + + + + + Col407 + 407 + + 4 + 11 + 0 + NotNullable + + Col407 + + + + Col407 + + 11 + + + + + + + Col408 + 408 + + 4 + 11 + 0 + NotNullable + + Col408 + + + + Col408 + + 11 + + + + + + + Col409 + 409 + + 4 + 11 + 0 + NotNullable + + Col409 + + + + Col409 + + 11 + + + + + + + Col410 + 410 + + 4 + 11 + 0 + NotNullable + + Col410 + + + + Col410 + + 11 + + + + + + + Col411 + 411 + + 4 + 11 + 0 + NotNullable + + Col411 + + + + Col411 + + 11 + + + + + + + Col412 + 412 + + 4 + 11 + 0 + NotNullable + + Col412 + + + + Col412 + + 11 + + + + + + + Col413 + 413 + + 4 + 11 + 0 + NotNullable + + Col413 + + + + Col413 + + 11 + + + + + + + Col414 + 414 + + 4 + 11 + 0 + NotNullable + + Col414 + + + + Col414 + + 11 + + + + + + + Col415 + 415 + + 4 + 11 + 0 + NotNullable + + Col415 + + + + Col415 + + 11 + + + + + + + Col416 + 416 + + 4 + 11 + 0 + NotNullable + + Col416 + + + + Col416 + + 11 + + + + + + + Col417 + 417 + + 4 + 11 + 0 + NotNullable + + Col417 + + + + Col417 + + 11 + + + + + + + Col418 + 418 + + 4 + 11 + 0 + NotNullable + + Col418 + + + + Col418 + + 11 + + + + + + + Col419 + 419 + + 4 + 11 + 0 + NotNullable + + Col419 + + + + Col419 + + 11 + + + + + + + Col420 + 420 + + 4 + 11 + 0 + NotNullable + + Col420 + + + + Col420 + + 11 + + + + + + + Col421 + 421 + + 4 + 11 + 0 + NotNullable + + Col421 + + + + Col421 + + 11 + + + + + + + Col422 + 422 + + 4 + 11 + 0 + NotNullable + + Col422 + + + + Col422 + + 11 + + + + + + + Col423 + 423 + + 4 + 11 + 0 + NotNullable + + Col423 + + + + Col423 + + 11 + + + + + + + Col424 + 424 + + 4 + 11 + 0 + NotNullable + + Col424 + + + + Col424 + + 11 + + + + + + + Col425 + 425 + + 4 + 11 + 0 + NotNullable + + Col425 + + + + Col425 + + 11 + + + + + + + Col426 + 426 + + 4 + 11 + 0 + NotNullable + + Col426 + + + + Col426 + + 11 + + + + + + + Col427 + 427 + + 4 + 11 + 0 + NotNullable + + Col427 + + + + Col427 + + 11 + + + + + + + Col428 + 428 + + 4 + 11 + 0 + NotNullable + + Col428 + + + + Col428 + + 11 + + + + + + + Col429 + 429 + + 4 + 11 + 0 + NotNullable + + Col429 + + + + Col429 + + 11 + + + + + + + Col430 + 430 + + 4 + 11 + 0 + NotNullable + + Col430 + + + + Col430 + + 11 + + + + + + + Col431 + 431 + + 4 + 11 + 0 + NotNullable + + Col431 + + + + Col431 + + 11 + + + + + + + Col432 + 432 + + 4 + 11 + 0 + NotNullable + + Col432 + + + + Col432 + + 11 + + + + + + + Col433 + 433 + + 4 + 11 + 0 + NotNullable + + Col433 + + + + Col433 + + 11 + + + + + + + Col434 + 434 + + 4 + 11 + 0 + NotNullable + + Col434 + + + + Col434 + + 11 + + + + + + + Col435 + 435 + + 4 + 11 + 0 + NotNullable + + Col435 + + + + Col435 + + 11 + + + + + + + Col436 + 436 + + 4 + 11 + 0 + NotNullable + + Col436 + + + + Col436 + + 11 + + + + + + + Col437 + 437 + + 4 + 11 + 0 + NotNullable + + Col437 + + + + Col437 + + 11 + + + + + + + Col438 + 438 + + 4 + 11 + 0 + NotNullable + + Col438 + + + + Col438 + + 11 + + + + + + + Col439 + 439 + + 4 + 11 + 0 + NotNullable + + Col439 + + + + Col439 + + 11 + + + + + + + Col440 + 440 + + 4 + 11 + 0 + NotNullable + + Col440 + + + + Col440 + + 11 + + + + + + + Col441 + 441 + + 4 + 11 + 0 + NotNullable + + Col441 + + + + Col441 + + 11 + + + + + + + Col442 + 442 + + 4 + 11 + 0 + NotNullable + + Col442 + + + + Col442 + + 11 + + + + + + + Col443 + 443 + + 4 + 11 + 0 + NotNullable + + Col443 + + + + Col443 + + 11 + + + + + + + Col444 + 444 + + 4 + 11 + 0 + NotNullable + + Col444 + + + + Col444 + + 11 + + + + + + + Col445 + 445 + + 4 + 11 + 0 + NotNullable + + Col445 + + + + Col445 + + 11 + + + + + + + Col446 + 446 + + 4 + 11 + 0 + NotNullable + + Col446 + + + + Col446 + + 11 + + + + + + + Col447 + 447 + + 4 + 11 + 0 + NotNullable + + Col447 + + + + Col447 + + 11 + + + + + + + Col448 + 448 + + 4 + 11 + 0 + NotNullable + + Col448 + + + + Col448 + + 11 + + + + + + + Col449 + 449 + + 4 + 11 + 0 + NotNullable + + Col449 + + + + Col449 + + 11 + + + + + + + Col450 + 450 + + 4 + 11 + 0 + NotNullable + + Col450 + + + + Col450 + + 11 + + + + + + + Col451 + 451 + + 4 + 11 + 0 + NotNullable + + Col451 + + + + Col451 + + 11 + + + + + + + Col452 + 452 + + 4 + 11 + 0 + NotNullable + + Col452 + + + + Col452 + + 11 + + + + + + + Col453 + 453 + + 4 + 11 + 0 + NotNullable + + Col453 + + + + Col453 + + 11 + + + + + + + Col454 + 454 + + 4 + 11 + 0 + NotNullable + + Col454 + + + + Col454 + + 11 + + + + + + + Col455 + 455 + + 4 + 11 + 0 + NotNullable + + Col455 + + + + Col455 + + 11 + + + + + + + Col456 + 456 + + 4 + 11 + 0 + NotNullable + + Col456 + + + + Col456 + + 11 + + + + + + + Col457 + 457 + + 4 + 11 + 0 + NotNullable + + Col457 + + + + Col457 + + 11 + + + + + + + Col458 + 458 + + 4 + 11 + 0 + NotNullable + + Col458 + + + + Col458 + + 11 + + + + + + + Col459 + 459 + + 4 + 11 + 0 + NotNullable + + Col459 + + + + Col459 + + 11 + + + + + + + Col460 + 460 + + 4 + 11 + 0 + NotNullable + + Col460 + + + + Col460 + + 11 + + + + + + + Col461 + 461 + + 4 + 11 + 0 + NotNullable + + Col461 + + + + Col461 + + 11 + + + + + + + Col462 + 462 + + 4 + 11 + 0 + NotNullable + + Col462 + + + + Col462 + + 11 + + + + + + + Col463 + 463 + + 4 + 11 + 0 + NotNullable + + Col463 + + + + Col463 + + 11 + + + + + + + Col464 + 464 + + 4 + 11 + 0 + NotNullable + + Col464 + + + + Col464 + + 11 + + + + + + + Col465 + 465 + + 4 + 11 + 0 + NotNullable + + Col465 + + + + Col465 + + 11 + + + + + + + Col466 + 466 + + 4 + 11 + 0 + NotNullable + + Col466 + + + + Col466 + + 11 + + + + + + + Col467 + 467 + + 4 + 11 + 0 + NotNullable + + Col467 + + + + Col467 + + 11 + + + + + + + Col468 + 468 + + 4 + 11 + 0 + NotNullable + + Col468 + + + + Col468 + + 11 + + + + + + + Col469 + 469 + + 4 + 11 + 0 + NotNullable + + Col469 + + + + Col469 + + 11 + + + + + + + Col470 + 470 + + 4 + 11 + 0 + NotNullable + + Col470 + + + + Col470 + + 11 + + + + + + + Col471 + 471 + + 4 + 11 + 0 + NotNullable + + Col471 + + + + Col471 + + 11 + + + + + + + Col472 + 472 + + 4 + 11 + 0 + NotNullable + + Col472 + + + + Col472 + + 11 + + + + + + + Col473 + 473 + + 4 + 11 + 0 + NotNullable + + Col473 + + + + Col473 + + 11 + + + + + + + Col474 + 474 + + 4 + 11 + 0 + NotNullable + + Col474 + + + + Col474 + + 11 + + + + + + + Col475 + 475 + + 4 + 11 + 0 + NotNullable + + Col475 + + + + Col475 + + 11 + + + + + + + Col476 + 476 + + 4 + 11 + 0 + NotNullable + + Col476 + + + + Col476 + + 11 + + + + + + + Col477 + 477 + + 4 + 11 + 0 + NotNullable + + Col477 + + + + Col477 + + 11 + + + + + + + Col478 + 478 + + 4 + 11 + 0 + NotNullable + + Col478 + + + + Col478 + + 11 + + + + + + + Col479 + 479 + + 4 + 11 + 0 + NotNullable + + Col479 + + + + Col479 + + 11 + + + + + + + Col480 + 480 + + 4 + 11 + 0 + NotNullable + + Col480 + + + + Col480 + + 11 + + + + + + + Col481 + 481 + + 4 + 11 + 0 + NotNullable + + Col481 + + + + Col481 + + 11 + + + + + + + Col482 + 482 + + 4 + 11 + 0 + NotNullable + + Col482 + + + + Col482 + + 11 + + + + + + + Col483 + 483 + + 4 + 11 + 0 + NotNullable + + Col483 + + + + Col483 + + 11 + + + + + + + Col484 + 484 + + 4 + 11 + 0 + NotNullable + + Col484 + + + + Col484 + + 11 + + + + + + + Col485 + 485 + + 4 + 11 + 0 + NotNullable + + Col485 + + + + Col485 + + 11 + + + + + + + Col486 + 486 + + 4 + 11 + 0 + NotNullable + + Col486 + + + + Col486 + + 11 + + + + + + + Col487 + 487 + + 4 + 11 + 0 + NotNullable + + Col487 + + + + Col487 + + 11 + + + + + + + Col488 + 488 + + 4 + 11 + 0 + NotNullable + + Col488 + + + + Col488 + + 11 + + + + + + + Col489 + 489 + + 4 + 11 + 0 + NotNullable + + Col489 + + + + Col489 + + 11 + + + + + + + Col490 + 490 + + 4 + 11 + 0 + NotNullable + + Col490 + + + + Col490 + + 11 + + + + + + + Col491 + 491 + + 4 + 11 + 0 + NotNullable + + Col491 + + + + Col491 + + 11 + + + + + + + Col492 + 492 + + 4 + 11 + 0 + NotNullable + + Col492 + + + + Col492 + + 11 + + + + + + + Col493 + 493 + + 4 + 11 + 0 + NotNullable + + Col493 + + + + Col493 + + 11 + + + + + + + Col494 + 494 + + 4 + 11 + 0 + NotNullable + + Col494 + + + + Col494 + + 11 + + + + + + + Col495 + 495 + + 4 + 11 + 0 + NotNullable + + Col495 + + + + Col495 + + 11 + + + + + + + Col496 + 496 + + 4 + 11 + 0 + NotNullable + + Col496 + + + + Col496 + + 11 + + + + + + + Col497 + 497 + + 4 + 11 + 0 + NotNullable + + Col497 + + + + Col497 + + 11 + + + + + + + Col498 + 498 + + 4 + 11 + 0 + NotNullable + + Col498 + + + + Col498 + + 11 + + + + + + + Col499 + 499 + + 4 + 11 + 0 + NotNullable + + Col499 + + + + Col499 + + 11 + + + + + + + Col500 + 500 + + 4 + 11 + 0 + NotNullable + + Col500 + + + + Col500 + + 11 + + + + + + + +]]> + + + + + + + + + + + + + a4 + landscape + 0.5cm + 0.5cm + 0.5cm + 0.5cm + + + html + new Date()]]> + + + + + + + Mega Data Set + + + COL1 + COL1 + dataSetRow["COL1"] + integer + + + COL2 + COL2 + dataSetRow["COL2"] + string + + + COL3 + COL3 + dataSetRow["COL3"] + string + + + COL4 + COL4 + dataSetRow["COL4"] + string + + + COL5 + COL5 + dataSetRow["COL5"] + string + + + COL6 + COL6 + dataSetRow["COL6"] + integer + + + COL7 + COL7 + dataSetRow["COL7"] + string + + + COL8 + COL8 + dataSetRow["COL8"] + string + + + COL9 + COL9 + dataSetRow["COL9"] + string + + + COL10 + COL10 + dataSetRow["COL10"] + string + + + COL11 + COL11 + dataSetRow["COL11"] + integer + + + COL12 + COL12 + dataSetRow["COL12"] + string + + + COL13 + COL13 + dataSetRow["COL13"] + string + + + COL14 + COL14 + dataSetRow["COL14"] + string + + + 60000 + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + COL1 + + + + + COL2 + + + + + COL3 + + + + + COL4 + + + + + COL5 + + + + + COL6 + + + + + COL7 + + + + + COL8 + + + + + COL9 + + + + + COL10 + + + + + COL11 + + + + + COL12 + + + + + COL13 + + + + + COL14 + + + + +
+ + + + + + + + + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeFixedLayout.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeFixedLayout.rptdesign new file mode 100644 index 00000000000..f7555d6547b --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeFixedLayout.rptdesign @@ -0,0 +1,11185 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + Number Formats Test Report + + + queryText + 15112 + + + queryTimeOut + 15112 + + + rowFetchSize + 15112 + + + in + /templates/blank_report.gif + fixed layout + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + COL1 + measure + COL1 + COL1 + + + COL2 + measure + COL2 + COL2 + + + COL3 + measure + COL3 + COL3 + + + COL4 + measure + COL4 + COL4 + + + COL5 + measure + COL5 + COL5 + + + COL6 + measure + COL6 + COL6 + + + COL7 + measure + COL7 + COL7 + + + COL8 + measure + COL8 + COL8 + + + COL9 + measure + COL9 + COL9 + + + COL10 + measure + COL10 + COL10 + + + COL11 + measure + COL11 + COL11 + + + COL12 + measure + COL12 + COL12 + + + COL13 + measure + COL13 + COL13 + + + COL14 + measure + COL14 + COL14 + + + + + + + 1 + COL1 + integer + + + 2 + COL2 + integer + + + 3 + COL3 + integer + + + 4 + COL4 + integer + + + 5 + COL5 + integer + + + 6 + COL6 + integer + + + 7 + COL7 + integer + + + 8 + COL8 + integer + + + 9 + COL9 + integer + + + 10 + COL10 + integer + + + 11 + COL11 + integer + + + 12 + COL12 + integer + + + 13 + COL13 + integer + + + 14 + COL14 + integer + + + + 100000 + Data Source + + + 1 + COL1 + COL1 + integer + 4 + + + 2 + COL2 + COL2 + integer + 4 + + + 3 + COL3 + COL3 + integer + 4 + + + 4 + COL4 + COL4 + integer + 4 + + + 5 + COL5 + COL5 + integer + 4 + + + 6 + COL6 + COL6 + integer + 4 + + + 7 + COL7 + COL7 + integer + 4 + + + 8 + COL8 + COL8 + integer + 4 + + + 9 + COL9 + COL9 + integer + 4 + + + 10 + COL10 + COL10 + integer + 4 + + + 11 + COL11 + COL11 + integer + 4 + + + 12 + COL12 + COL12 + integer + 4 + + + 13 + COL13 + COL13 + integer + 4 + + + 14 + COL14 + COL14 + integer + 4 + + + + + + 2.0 + + + + + + + Col1 + 1 + + 4 + 11 + 0 + NotNullable + + Col1 + + + + Col1 + + 11 + + + + + + + Col2 + 2 + + 4 + 11 + 0 + NotNullable + + Col2 + + + + Col2 + + 11 + + + + + + + Col3 + 3 + + 4 + 11 + 0 + NotNullable + + Col3 + + + + Col3 + + 11 + + + + + + + Col4 + 4 + + 4 + 11 + 0 + NotNullable + + Col4 + + + + Col4 + + 11 + + + + + + + Col5 + 5 + + 4 + 11 + 0 + NotNullable + + Col5 + + + + Col5 + + 11 + + + + + + + Col6 + 6 + + 4 + 11 + 0 + NotNullable + + Col6 + + + + Col6 + + 11 + + + + + + + Col7 + 7 + + 4 + 11 + 0 + NotNullable + + Col7 + + + + Col7 + + 11 + + + + + + + Col8 + 8 + + 4 + 11 + 0 + NotNullable + + Col8 + + + + Col8 + + 11 + + + + + + + Col9 + 9 + + 4 + 11 + 0 + NotNullable + + Col9 + + + + Col9 + + 11 + + + + + + + Col10 + 10 + + 4 + 11 + 0 + NotNullable + + Col10 + + + + Col10 + + 11 + + + + + + + Col11 + 11 + + 4 + 11 + 0 + NotNullable + + Col11 + + + + Col11 + + 11 + + + + + + + Col12 + 12 + + 4 + 11 + 0 + NotNullable + + Col12 + + + + Col12 + + 11 + + + + + + + Col13 + 13 + + 4 + 11 + 0 + NotNullable + + Col13 + + + + Col13 + + 11 + + + + + + + Col14 + 14 + + 4 + 11 + 0 + NotNullable + + Col14 + + + + Col14 + + 11 + + + + + + + Col15 + 15 + + 4 + 11 + 0 + NotNullable + + Col15 + + + + Col15 + + 11 + + + + + + + Col16 + 16 + + 4 + 11 + 0 + NotNullable + + Col16 + + + + Col16 + + 11 + + + + + + + Col17 + 17 + + 4 + 11 + 0 + NotNullable + + Col17 + + + + Col17 + + 11 + + + + + + + Col18 + 18 + + 4 + 11 + 0 + NotNullable + + Col18 + + + + Col18 + + 11 + + + + + + + Col19 + 19 + + 4 + 11 + 0 + NotNullable + + Col19 + + + + Col19 + + 11 + + + + + + + Col20 + 20 + + 4 + 11 + 0 + NotNullable + + Col20 + + + + Col20 + + 11 + + + + + + + Col21 + 21 + + 4 + 11 + 0 + NotNullable + + Col21 + + + + Col21 + + 11 + + + + + + + Col22 + 22 + + 4 + 11 + 0 + NotNullable + + Col22 + + + + Col22 + + 11 + + + + + + + Col23 + 23 + + 4 + 11 + 0 + NotNullable + + Col23 + + + + Col23 + + 11 + + + + + + + Col24 + 24 + + 4 + 11 + 0 + NotNullable + + Col24 + + + + Col24 + + 11 + + + + + + + Col25 + 25 + + 4 + 11 + 0 + NotNullable + + Col25 + + + + Col25 + + 11 + + + + + + + Col26 + 26 + + 4 + 11 + 0 + NotNullable + + Col26 + + + + Col26 + + 11 + + + + + + + Col27 + 27 + + 4 + 11 + 0 + NotNullable + + Col27 + + + + Col27 + + 11 + + + + + + + Col28 + 28 + + 4 + 11 + 0 + NotNullable + + Col28 + + + + Col28 + + 11 + + + + + + + Col29 + 29 + + 4 + 11 + 0 + NotNullable + + Col29 + + + + Col29 + + 11 + + + + + + + Col30 + 30 + + 4 + 11 + 0 + NotNullable + + Col30 + + + + Col30 + + 11 + + + + + + + Col31 + 31 + + 4 + 11 + 0 + NotNullable + + Col31 + + + + Col31 + + 11 + + + + + + + Col32 + 32 + + 4 + 11 + 0 + NotNullable + + Col32 + + + + Col32 + + 11 + + + + + + + Col33 + 33 + + 4 + 11 + 0 + NotNullable + + Col33 + + + + Col33 + + 11 + + + + + + + Col34 + 34 + + 4 + 11 + 0 + NotNullable + + Col34 + + + + Col34 + + 11 + + + + + + + Col35 + 35 + + 4 + 11 + 0 + NotNullable + + Col35 + + + + Col35 + + 11 + + + + + + + Col36 + 36 + + 4 + 11 + 0 + NotNullable + + Col36 + + + + Col36 + + 11 + + + + + + + Col37 + 37 + + 4 + 11 + 0 + NotNullable + + Col37 + + + + Col37 + + 11 + + + + + + + Col38 + 38 + + 4 + 11 + 0 + NotNullable + + Col38 + + + + Col38 + + 11 + + + + + + + Col39 + 39 + + 4 + 11 + 0 + NotNullable + + Col39 + + + + Col39 + + 11 + + + + + + + Col40 + 40 + + 4 + 11 + 0 + NotNullable + + Col40 + + + + Col40 + + 11 + + + + + + + Col41 + 41 + + 4 + 11 + 0 + NotNullable + + Col41 + + + + Col41 + + 11 + + + + + + + Col42 + 42 + + 4 + 11 + 0 + NotNullable + + Col42 + + + + Col42 + + 11 + + + + + + + Col43 + 43 + + 4 + 11 + 0 + NotNullable + + Col43 + + + + Col43 + + 11 + + + + + + + Col44 + 44 + + 4 + 11 + 0 + NotNullable + + Col44 + + + + Col44 + + 11 + + + + + + + Col45 + 45 + + 4 + 11 + 0 + NotNullable + + Col45 + + + + Col45 + + 11 + + + + + + + Col46 + 46 + + 4 + 11 + 0 + NotNullable + + Col46 + + + + Col46 + + 11 + + + + + + + Col47 + 47 + + 4 + 11 + 0 + NotNullable + + Col47 + + + + Col47 + + 11 + + + + + + + Col48 + 48 + + 4 + 11 + 0 + NotNullable + + Col48 + + + + Col48 + + 11 + + + + + + + Col49 + 49 + + 4 + 11 + 0 + NotNullable + + Col49 + + + + Col49 + + 11 + + + + + + + Col50 + 50 + + 4 + 11 + 0 + NotNullable + + Col50 + + + + Col50 + + 11 + + + + + + + Col51 + 51 + + 4 + 11 + 0 + NotNullable + + Col51 + + + + Col51 + + 11 + + + + + + + Col52 + 52 + + 4 + 11 + 0 + NotNullable + + Col52 + + + + Col52 + + 11 + + + + + + + Col53 + 53 + + 4 + 11 + 0 + NotNullable + + Col53 + + + + Col53 + + 11 + + + + + + + Col54 + 54 + + 4 + 11 + 0 + NotNullable + + Col54 + + + + Col54 + + 11 + + + + + + + Col55 + 55 + + 4 + 11 + 0 + NotNullable + + Col55 + + + + Col55 + + 11 + + + + + + + Col56 + 56 + + 4 + 11 + 0 + NotNullable + + Col56 + + + + Col56 + + 11 + + + + + + + Col57 + 57 + + 4 + 11 + 0 + NotNullable + + Col57 + + + + Col57 + + 11 + + + + + + + Col58 + 58 + + 4 + 11 + 0 + NotNullable + + Col58 + + + + Col58 + + 11 + + + + + + + Col59 + 59 + + 4 + 11 + 0 + NotNullable + + Col59 + + + + Col59 + + 11 + + + + + + + Col60 + 60 + + 4 + 11 + 0 + NotNullable + + Col60 + + + + Col60 + + 11 + + + + + + + Col61 + 61 + + 4 + 11 + 0 + NotNullable + + Col61 + + + + Col61 + + 11 + + + + + + + Col62 + 62 + + 4 + 11 + 0 + NotNullable + + Col62 + + + + Col62 + + 11 + + + + + + + Col63 + 63 + + 4 + 11 + 0 + NotNullable + + Col63 + + + + Col63 + + 11 + + + + + + + Col64 + 64 + + 4 + 11 + 0 + NotNullable + + Col64 + + + + Col64 + + 11 + + + + + + + Col65 + 65 + + 4 + 11 + 0 + NotNullable + + Col65 + + + + Col65 + + 11 + + + + + + + Col66 + 66 + + 4 + 11 + 0 + NotNullable + + Col66 + + + + Col66 + + 11 + + + + + + + Col67 + 67 + + 4 + 11 + 0 + NotNullable + + Col67 + + + + Col67 + + 11 + + + + + + + Col68 + 68 + + 4 + 11 + 0 + NotNullable + + Col68 + + + + Col68 + + 11 + + + + + + + Col69 + 69 + + 4 + 11 + 0 + NotNullable + + Col69 + + + + Col69 + + 11 + + + + + + + Col70 + 70 + + 4 + 11 + 0 + NotNullable + + Col70 + + + + Col70 + + 11 + + + + + + + Col71 + 71 + + 4 + 11 + 0 + NotNullable + + Col71 + + + + Col71 + + 11 + + + + + + + Col72 + 72 + + 4 + 11 + 0 + NotNullable + + Col72 + + + + Col72 + + 11 + + + + + + + Col73 + 73 + + 4 + 11 + 0 + NotNullable + + Col73 + + + + Col73 + + 11 + + + + + + + Col74 + 74 + + 4 + 11 + 0 + NotNullable + + Col74 + + + + Col74 + + 11 + + + + + + + Col75 + 75 + + 4 + 11 + 0 + NotNullable + + Col75 + + + + Col75 + + 11 + + + + + + + Col76 + 76 + + 4 + 11 + 0 + NotNullable + + Col76 + + + + Col76 + + 11 + + + + + + + Col77 + 77 + + 4 + 11 + 0 + NotNullable + + Col77 + + + + Col77 + + 11 + + + + + + + Col78 + 78 + + 4 + 11 + 0 + NotNullable + + Col78 + + + + Col78 + + 11 + + + + + + + Col79 + 79 + + 4 + 11 + 0 + NotNullable + + Col79 + + + + Col79 + + 11 + + + + + + + Col80 + 80 + + 4 + 11 + 0 + NotNullable + + Col80 + + + + Col80 + + 11 + + + + + + + Col81 + 81 + + 4 + 11 + 0 + NotNullable + + Col81 + + + + Col81 + + 11 + + + + + + + Col82 + 82 + + 4 + 11 + 0 + NotNullable + + Col82 + + + + Col82 + + 11 + + + + + + + Col83 + 83 + + 4 + 11 + 0 + NotNullable + + Col83 + + + + Col83 + + 11 + + + + + + + Col84 + 84 + + 4 + 11 + 0 + NotNullable + + Col84 + + + + Col84 + + 11 + + + + + + + Col85 + 85 + + 4 + 11 + 0 + NotNullable + + Col85 + + + + Col85 + + 11 + + + + + + + Col86 + 86 + + 4 + 11 + 0 + NotNullable + + Col86 + + + + Col86 + + 11 + + + + + + + Col87 + 87 + + 4 + 11 + 0 + NotNullable + + Col87 + + + + Col87 + + 11 + + + + + + + Col88 + 88 + + 4 + 11 + 0 + NotNullable + + Col88 + + + + Col88 + + 11 + + + + + + + Col89 + 89 + + 4 + 11 + 0 + NotNullable + + Col89 + + + + Col89 + + 11 + + + + + + + Col90 + 90 + + 4 + 11 + 0 + NotNullable + + Col90 + + + + Col90 + + 11 + + + + + + + Col91 + 91 + + 4 + 11 + 0 + NotNullable + + Col91 + + + + Col91 + + 11 + + + + + + + Col92 + 92 + + 4 + 11 + 0 + NotNullable + + Col92 + + + + Col92 + + 11 + + + + + + + Col93 + 93 + + 4 + 11 + 0 + NotNullable + + Col93 + + + + Col93 + + 11 + + + + + + + Col94 + 94 + + 4 + 11 + 0 + NotNullable + + Col94 + + + + Col94 + + 11 + + + + + + + Col95 + 95 + + 4 + 11 + 0 + NotNullable + + Col95 + + + + Col95 + + 11 + + + + + + + Col96 + 96 + + 4 + 11 + 0 + NotNullable + + Col96 + + + + Col96 + + 11 + + + + + + + Col97 + 97 + + 4 + 11 + 0 + NotNullable + + Col97 + + + + Col97 + + 11 + + + + + + + Col98 + 98 + + 4 + 11 + 0 + NotNullable + + Col98 + + + + Col98 + + 11 + + + + + + + Col99 + 99 + + 4 + 11 + 0 + NotNullable + + Col99 + + + + Col99 + + 11 + + + + + + + Col100 + 100 + + 4 + 11 + 0 + NotNullable + + Col100 + + + + Col100 + + 11 + + + + + + + Col101 + 101 + + 4 + 11 + 0 + NotNullable + + Col101 + + + + Col101 + + 11 + + + + + + + Col102 + 102 + + 4 + 11 + 0 + NotNullable + + Col102 + + + + Col102 + + 11 + + + + + + + Col103 + 103 + + 4 + 11 + 0 + NotNullable + + Col103 + + + + Col103 + + 11 + + + + + + + Col104 + 104 + + 4 + 11 + 0 + NotNullable + + Col104 + + + + Col104 + + 11 + + + + + + + Col105 + 105 + + 4 + 11 + 0 + NotNullable + + Col105 + + + + Col105 + + 11 + + + + + + + Col106 + 106 + + 4 + 11 + 0 + NotNullable + + Col106 + + + + Col106 + + 11 + + + + + + + Col107 + 107 + + 4 + 11 + 0 + NotNullable + + Col107 + + + + Col107 + + 11 + + + + + + + Col108 + 108 + + 4 + 11 + 0 + NotNullable + + Col108 + + + + Col108 + + 11 + + + + + + + Col109 + 109 + + 4 + 11 + 0 + NotNullable + + Col109 + + + + Col109 + + 11 + + + + + + + Col110 + 110 + + 4 + 11 + 0 + NotNullable + + Col110 + + + + Col110 + + 11 + + + + + + + Col111 + 111 + + 4 + 11 + 0 + NotNullable + + Col111 + + + + Col111 + + 11 + + + + + + + Col112 + 112 + + 4 + 11 + 0 + NotNullable + + Col112 + + + + Col112 + + 11 + + + + + + + Col113 + 113 + + 4 + 11 + 0 + NotNullable + + Col113 + + + + Col113 + + 11 + + + + + + + Col114 + 114 + + 4 + 11 + 0 + NotNullable + + Col114 + + + + Col114 + + 11 + + + + + + + Col115 + 115 + + 4 + 11 + 0 + NotNullable + + Col115 + + + + Col115 + + 11 + + + + + + + Col116 + 116 + + 4 + 11 + 0 + NotNullable + + Col116 + + + + Col116 + + 11 + + + + + + + Col117 + 117 + + 4 + 11 + 0 + NotNullable + + Col117 + + + + Col117 + + 11 + + + + + + + Col118 + 118 + + 4 + 11 + 0 + NotNullable + + Col118 + + + + Col118 + + 11 + + + + + + + Col119 + 119 + + 4 + 11 + 0 + NotNullable + + Col119 + + + + Col119 + + 11 + + + + + + + Col120 + 120 + + 4 + 11 + 0 + NotNullable + + Col120 + + + + Col120 + + 11 + + + + + + + Col121 + 121 + + 4 + 11 + 0 + NotNullable + + Col121 + + + + Col121 + + 11 + + + + + + + Col122 + 122 + + 4 + 11 + 0 + NotNullable + + Col122 + + + + Col122 + + 11 + + + + + + + Col123 + 123 + + 4 + 11 + 0 + NotNullable + + Col123 + + + + Col123 + + 11 + + + + + + + Col124 + 124 + + 4 + 11 + 0 + NotNullable + + Col124 + + + + Col124 + + 11 + + + + + + + Col125 + 125 + + 4 + 11 + 0 + NotNullable + + Col125 + + + + Col125 + + 11 + + + + + + + Col126 + 126 + + 4 + 11 + 0 + NotNullable + + Col126 + + + + Col126 + + 11 + + + + + + + Col127 + 127 + + 4 + 11 + 0 + NotNullable + + Col127 + + + + Col127 + + 11 + + + + + + + Col128 + 128 + + 4 + 11 + 0 + NotNullable + + Col128 + + + + Col128 + + 11 + + + + + + + Col129 + 129 + + 4 + 11 + 0 + NotNullable + + Col129 + + + + Col129 + + 11 + + + + + + + Col130 + 130 + + 4 + 11 + 0 + NotNullable + + Col130 + + + + Col130 + + 11 + + + + + + + Col131 + 131 + + 4 + 11 + 0 + NotNullable + + Col131 + + + + Col131 + + 11 + + + + + + + Col132 + 132 + + 4 + 11 + 0 + NotNullable + + Col132 + + + + Col132 + + 11 + + + + + + + Col133 + 133 + + 4 + 11 + 0 + NotNullable + + Col133 + + + + Col133 + + 11 + + + + + + + Col134 + 134 + + 4 + 11 + 0 + NotNullable + + Col134 + + + + Col134 + + 11 + + + + + + + Col135 + 135 + + 4 + 11 + 0 + NotNullable + + Col135 + + + + Col135 + + 11 + + + + + + + Col136 + 136 + + 4 + 11 + 0 + NotNullable + + Col136 + + + + Col136 + + 11 + + + + + + + Col137 + 137 + + 4 + 11 + 0 + NotNullable + + Col137 + + + + Col137 + + 11 + + + + + + + Col138 + 138 + + 4 + 11 + 0 + NotNullable + + Col138 + + + + Col138 + + 11 + + + + + + + Col139 + 139 + + 4 + 11 + 0 + NotNullable + + Col139 + + + + Col139 + + 11 + + + + + + + Col140 + 140 + + 4 + 11 + 0 + NotNullable + + Col140 + + + + Col140 + + 11 + + + + + + + Col141 + 141 + + 4 + 11 + 0 + NotNullable + + Col141 + + + + Col141 + + 11 + + + + + + + Col142 + 142 + + 4 + 11 + 0 + NotNullable + + Col142 + + + + Col142 + + 11 + + + + + + + Col143 + 143 + + 4 + 11 + 0 + NotNullable + + Col143 + + + + Col143 + + 11 + + + + + + + Col144 + 144 + + 4 + 11 + 0 + NotNullable + + Col144 + + + + Col144 + + 11 + + + + + + + Col145 + 145 + + 4 + 11 + 0 + NotNullable + + Col145 + + + + Col145 + + 11 + + + + + + + Col146 + 146 + + 4 + 11 + 0 + NotNullable + + Col146 + + + + Col146 + + 11 + + + + + + + Col147 + 147 + + 4 + 11 + 0 + NotNullable + + Col147 + + + + Col147 + + 11 + + + + + + + Col148 + 148 + + 4 + 11 + 0 + NotNullable + + Col148 + + + + Col148 + + 11 + + + + + + + Col149 + 149 + + 4 + 11 + 0 + NotNullable + + Col149 + + + + Col149 + + 11 + + + + + + + Col150 + 150 + + 4 + 11 + 0 + NotNullable + + Col150 + + + + Col150 + + 11 + + + + + + + Col151 + 151 + + 4 + 11 + 0 + NotNullable + + Col151 + + + + Col151 + + 11 + + + + + + + Col152 + 152 + + 4 + 11 + 0 + NotNullable + + Col152 + + + + Col152 + + 11 + + + + + + + Col153 + 153 + + 4 + 11 + 0 + NotNullable + + Col153 + + + + Col153 + + 11 + + + + + + + Col154 + 154 + + 4 + 11 + 0 + NotNullable + + Col154 + + + + Col154 + + 11 + + + + + + + Col155 + 155 + + 4 + 11 + 0 + NotNullable + + Col155 + + + + Col155 + + 11 + + + + + + + Col156 + 156 + + 4 + 11 + 0 + NotNullable + + Col156 + + + + Col156 + + 11 + + + + + + + Col157 + 157 + + 4 + 11 + 0 + NotNullable + + Col157 + + + + Col157 + + 11 + + + + + + + Col158 + 158 + + 4 + 11 + 0 + NotNullable + + Col158 + + + + Col158 + + 11 + + + + + + + Col159 + 159 + + 4 + 11 + 0 + NotNullable + + Col159 + + + + Col159 + + 11 + + + + + + + Col160 + 160 + + 4 + 11 + 0 + NotNullable + + Col160 + + + + Col160 + + 11 + + + + + + + Col161 + 161 + + 4 + 11 + 0 + NotNullable + + Col161 + + + + Col161 + + 11 + + + + + + + Col162 + 162 + + 4 + 11 + 0 + NotNullable + + Col162 + + + + Col162 + + 11 + + + + + + + Col163 + 163 + + 4 + 11 + 0 + NotNullable + + Col163 + + + + Col163 + + 11 + + + + + + + Col164 + 164 + + 4 + 11 + 0 + NotNullable + + Col164 + + + + Col164 + + 11 + + + + + + + Col165 + 165 + + 4 + 11 + 0 + NotNullable + + Col165 + + + + Col165 + + 11 + + + + + + + Col166 + 166 + + 4 + 11 + 0 + NotNullable + + Col166 + + + + Col166 + + 11 + + + + + + + Col167 + 167 + + 4 + 11 + 0 + NotNullable + + Col167 + + + + Col167 + + 11 + + + + + + + Col168 + 168 + + 4 + 11 + 0 + NotNullable + + Col168 + + + + Col168 + + 11 + + + + + + + Col169 + 169 + + 4 + 11 + 0 + NotNullable + + Col169 + + + + Col169 + + 11 + + + + + + + Col170 + 170 + + 4 + 11 + 0 + NotNullable + + Col170 + + + + Col170 + + 11 + + + + + + + Col171 + 171 + + 4 + 11 + 0 + NotNullable + + Col171 + + + + Col171 + + 11 + + + + + + + Col172 + 172 + + 4 + 11 + 0 + NotNullable + + Col172 + + + + Col172 + + 11 + + + + + + + Col173 + 173 + + 4 + 11 + 0 + NotNullable + + Col173 + + + + Col173 + + 11 + + + + + + + Col174 + 174 + + 4 + 11 + 0 + NotNullable + + Col174 + + + + Col174 + + 11 + + + + + + + Col175 + 175 + + 4 + 11 + 0 + NotNullable + + Col175 + + + + Col175 + + 11 + + + + + + + Col176 + 176 + + 4 + 11 + 0 + NotNullable + + Col176 + + + + Col176 + + 11 + + + + + + + Col177 + 177 + + 4 + 11 + 0 + NotNullable + + Col177 + + + + Col177 + + 11 + + + + + + + Col178 + 178 + + 4 + 11 + 0 + NotNullable + + Col178 + + + + Col178 + + 11 + + + + + + + Col179 + 179 + + 4 + 11 + 0 + NotNullable + + Col179 + + + + Col179 + + 11 + + + + + + + Col180 + 180 + + 4 + 11 + 0 + NotNullable + + Col180 + + + + Col180 + + 11 + + + + + + + Col181 + 181 + + 4 + 11 + 0 + NotNullable + + Col181 + + + + Col181 + + 11 + + + + + + + Col182 + 182 + + 4 + 11 + 0 + NotNullable + + Col182 + + + + Col182 + + 11 + + + + + + + Col183 + 183 + + 4 + 11 + 0 + NotNullable + + Col183 + + + + Col183 + + 11 + + + + + + + Col184 + 184 + + 4 + 11 + 0 + NotNullable + + Col184 + + + + Col184 + + 11 + + + + + + + Col185 + 185 + + 4 + 11 + 0 + NotNullable + + Col185 + + + + Col185 + + 11 + + + + + + + Col186 + 186 + + 4 + 11 + 0 + NotNullable + + Col186 + + + + Col186 + + 11 + + + + + + + Col187 + 187 + + 4 + 11 + 0 + NotNullable + + Col187 + + + + Col187 + + 11 + + + + + + + Col188 + 188 + + 4 + 11 + 0 + NotNullable + + Col188 + + + + Col188 + + 11 + + + + + + + Col189 + 189 + + 4 + 11 + 0 + NotNullable + + Col189 + + + + Col189 + + 11 + + + + + + + Col190 + 190 + + 4 + 11 + 0 + NotNullable + + Col190 + + + + Col190 + + 11 + + + + + + + Col191 + 191 + + 4 + 11 + 0 + NotNullable + + Col191 + + + + Col191 + + 11 + + + + + + + Col192 + 192 + + 4 + 11 + 0 + NotNullable + + Col192 + + + + Col192 + + 11 + + + + + + + Col193 + 193 + + 4 + 11 + 0 + NotNullable + + Col193 + + + + Col193 + + 11 + + + + + + + Col194 + 194 + + 4 + 11 + 0 + NotNullable + + Col194 + + + + Col194 + + 11 + + + + + + + Col195 + 195 + + 4 + 11 + 0 + NotNullable + + Col195 + + + + Col195 + + 11 + + + + + + + Col196 + 196 + + 4 + 11 + 0 + NotNullable + + Col196 + + + + Col196 + + 11 + + + + + + + Col197 + 197 + + 4 + 11 + 0 + NotNullable + + Col197 + + + + Col197 + + 11 + + + + + + + Col198 + 198 + + 4 + 11 + 0 + NotNullable + + Col198 + + + + Col198 + + 11 + + + + + + + Col199 + 199 + + 4 + 11 + 0 + NotNullable + + Col199 + + + + Col199 + + 11 + + + + + + + Col200 + 200 + + 4 + 11 + 0 + NotNullable + + Col200 + + + + Col200 + + 11 + + + + + + + Col201 + 201 + + 4 + 11 + 0 + NotNullable + + Col201 + + + + Col201 + + 11 + + + + + + + Col202 + 202 + + 4 + 11 + 0 + NotNullable + + Col202 + + + + Col202 + + 11 + + + + + + + Col203 + 203 + + 4 + 11 + 0 + NotNullable + + Col203 + + + + Col203 + + 11 + + + + + + + Col204 + 204 + + 4 + 11 + 0 + NotNullable + + Col204 + + + + Col204 + + 11 + + + + + + + Col205 + 205 + + 4 + 11 + 0 + NotNullable + + Col205 + + + + Col205 + + 11 + + + + + + + Col206 + 206 + + 4 + 11 + 0 + NotNullable + + Col206 + + + + Col206 + + 11 + + + + + + + Col207 + 207 + + 4 + 11 + 0 + NotNullable + + Col207 + + + + Col207 + + 11 + + + + + + + Col208 + 208 + + 4 + 11 + 0 + NotNullable + + Col208 + + + + Col208 + + 11 + + + + + + + Col209 + 209 + + 4 + 11 + 0 + NotNullable + + Col209 + + + + Col209 + + 11 + + + + + + + Col210 + 210 + + 4 + 11 + 0 + NotNullable + + Col210 + + + + Col210 + + 11 + + + + + + + Col211 + 211 + + 4 + 11 + 0 + NotNullable + + Col211 + + + + Col211 + + 11 + + + + + + + Col212 + 212 + + 4 + 11 + 0 + NotNullable + + Col212 + + + + Col212 + + 11 + + + + + + + Col213 + 213 + + 4 + 11 + 0 + NotNullable + + Col213 + + + + Col213 + + 11 + + + + + + + Col214 + 214 + + 4 + 11 + 0 + NotNullable + + Col214 + + + + Col214 + + 11 + + + + + + + Col215 + 215 + + 4 + 11 + 0 + NotNullable + + Col215 + + + + Col215 + + 11 + + + + + + + Col216 + 216 + + 4 + 11 + 0 + NotNullable + + Col216 + + + + Col216 + + 11 + + + + + + + Col217 + 217 + + 4 + 11 + 0 + NotNullable + + Col217 + + + + Col217 + + 11 + + + + + + + Col218 + 218 + + 4 + 11 + 0 + NotNullable + + Col218 + + + + Col218 + + 11 + + + + + + + Col219 + 219 + + 4 + 11 + 0 + NotNullable + + Col219 + + + + Col219 + + 11 + + + + + + + Col220 + 220 + + 4 + 11 + 0 + NotNullable + + Col220 + + + + Col220 + + 11 + + + + + + + Col221 + 221 + + 4 + 11 + 0 + NotNullable + + Col221 + + + + Col221 + + 11 + + + + + + + Col222 + 222 + + 4 + 11 + 0 + NotNullable + + Col222 + + + + Col222 + + 11 + + + + + + + Col223 + 223 + + 4 + 11 + 0 + NotNullable + + Col223 + + + + Col223 + + 11 + + + + + + + Col224 + 224 + + 4 + 11 + 0 + NotNullable + + Col224 + + + + Col224 + + 11 + + + + + + + Col225 + 225 + + 4 + 11 + 0 + NotNullable + + Col225 + + + + Col225 + + 11 + + + + + + + Col226 + 226 + + 4 + 11 + 0 + NotNullable + + Col226 + + + + Col226 + + 11 + + + + + + + Col227 + 227 + + 4 + 11 + 0 + NotNullable + + Col227 + + + + Col227 + + 11 + + + + + + + Col228 + 228 + + 4 + 11 + 0 + NotNullable + + Col228 + + + + Col228 + + 11 + + + + + + + Col229 + 229 + + 4 + 11 + 0 + NotNullable + + Col229 + + + + Col229 + + 11 + + + + + + + Col230 + 230 + + 4 + 11 + 0 + NotNullable + + Col230 + + + + Col230 + + 11 + + + + + + + Col231 + 231 + + 4 + 11 + 0 + NotNullable + + Col231 + + + + Col231 + + 11 + + + + + + + Col232 + 232 + + 4 + 11 + 0 + NotNullable + + Col232 + + + + Col232 + + 11 + + + + + + + Col233 + 233 + + 4 + 11 + 0 + NotNullable + + Col233 + + + + Col233 + + 11 + + + + + + + Col234 + 234 + + 4 + 11 + 0 + NotNullable + + Col234 + + + + Col234 + + 11 + + + + + + + Col235 + 235 + + 4 + 11 + 0 + NotNullable + + Col235 + + + + Col235 + + 11 + + + + + + + Col236 + 236 + + 4 + 11 + 0 + NotNullable + + Col236 + + + + Col236 + + 11 + + + + + + + Col237 + 237 + + 4 + 11 + 0 + NotNullable + + Col237 + + + + Col237 + + 11 + + + + + + + Col238 + 238 + + 4 + 11 + 0 + NotNullable + + Col238 + + + + Col238 + + 11 + + + + + + + Col239 + 239 + + 4 + 11 + 0 + NotNullable + + Col239 + + + + Col239 + + 11 + + + + + + + Col240 + 240 + + 4 + 11 + 0 + NotNullable + + Col240 + + + + Col240 + + 11 + + + + + + + Col241 + 241 + + 4 + 11 + 0 + NotNullable + + Col241 + + + + Col241 + + 11 + + + + + + + Col242 + 242 + + 4 + 11 + 0 + NotNullable + + Col242 + + + + Col242 + + 11 + + + + + + + Col243 + 243 + + 4 + 11 + 0 + NotNullable + + Col243 + + + + Col243 + + 11 + + + + + + + Col244 + 244 + + 4 + 11 + 0 + NotNullable + + Col244 + + + + Col244 + + 11 + + + + + + + Col245 + 245 + + 4 + 11 + 0 + NotNullable + + Col245 + + + + Col245 + + 11 + + + + + + + Col246 + 246 + + 4 + 11 + 0 + NotNullable + + Col246 + + + + Col246 + + 11 + + + + + + + Col247 + 247 + + 4 + 11 + 0 + NotNullable + + Col247 + + + + Col247 + + 11 + + + + + + + Col248 + 248 + + 4 + 11 + 0 + NotNullable + + Col248 + + + + Col248 + + 11 + + + + + + + Col249 + 249 + + 4 + 11 + 0 + NotNullable + + Col249 + + + + Col249 + + 11 + + + + + + + Col250 + 250 + + 4 + 11 + 0 + NotNullable + + Col250 + + + + Col250 + + 11 + + + + + + + Col251 + 251 + + 4 + 11 + 0 + NotNullable + + Col251 + + + + Col251 + + 11 + + + + + + + Col252 + 252 + + 4 + 11 + 0 + NotNullable + + Col252 + + + + Col252 + + 11 + + + + + + + Col253 + 253 + + 4 + 11 + 0 + NotNullable + + Col253 + + + + Col253 + + 11 + + + + + + + Col254 + 254 + + 4 + 11 + 0 + NotNullable + + Col254 + + + + Col254 + + 11 + + + + + + + Col255 + 255 + + 4 + 11 + 0 + NotNullable + + Col255 + + + + Col255 + + 11 + + + + + + + Col256 + 256 + + 4 + 11 + 0 + NotNullable + + Col256 + + + + Col256 + + 11 + + + + + + + Col257 + 257 + + 4 + 11 + 0 + NotNullable + + Col257 + + + + Col257 + + 11 + + + + + + + Col258 + 258 + + 4 + 11 + 0 + NotNullable + + Col258 + + + + Col258 + + 11 + + + + + + + Col259 + 259 + + 4 + 11 + 0 + NotNullable + + Col259 + + + + Col259 + + 11 + + + + + + + Col260 + 260 + + 4 + 11 + 0 + NotNullable + + Col260 + + + + Col260 + + 11 + + + + + + + Col261 + 261 + + 4 + 11 + 0 + NotNullable + + Col261 + + + + Col261 + + 11 + + + + + + + Col262 + 262 + + 4 + 11 + 0 + NotNullable + + Col262 + + + + Col262 + + 11 + + + + + + + Col263 + 263 + + 4 + 11 + 0 + NotNullable + + Col263 + + + + Col263 + + 11 + + + + + + + Col264 + 264 + + 4 + 11 + 0 + NotNullable + + Col264 + + + + Col264 + + 11 + + + + + + + Col265 + 265 + + 4 + 11 + 0 + NotNullable + + Col265 + + + + Col265 + + 11 + + + + + + + Col266 + 266 + + 4 + 11 + 0 + NotNullable + + Col266 + + + + Col266 + + 11 + + + + + + + Col267 + 267 + + 4 + 11 + 0 + NotNullable + + Col267 + + + + Col267 + + 11 + + + + + + + Col268 + 268 + + 4 + 11 + 0 + NotNullable + + Col268 + + + + Col268 + + 11 + + + + + + + Col269 + 269 + + 4 + 11 + 0 + NotNullable + + Col269 + + + + Col269 + + 11 + + + + + + + Col270 + 270 + + 4 + 11 + 0 + NotNullable + + Col270 + + + + Col270 + + 11 + + + + + + + Col271 + 271 + + 4 + 11 + 0 + NotNullable + + Col271 + + + + Col271 + + 11 + + + + + + + Col272 + 272 + + 4 + 11 + 0 + NotNullable + + Col272 + + + + Col272 + + 11 + + + + + + + Col273 + 273 + + 4 + 11 + 0 + NotNullable + + Col273 + + + + Col273 + + 11 + + + + + + + Col274 + 274 + + 4 + 11 + 0 + NotNullable + + Col274 + + + + Col274 + + 11 + + + + + + + Col275 + 275 + + 4 + 11 + 0 + NotNullable + + Col275 + + + + Col275 + + 11 + + + + + + + Col276 + 276 + + 4 + 11 + 0 + NotNullable + + Col276 + + + + Col276 + + 11 + + + + + + + Col277 + 277 + + 4 + 11 + 0 + NotNullable + + Col277 + + + + Col277 + + 11 + + + + + + + Col278 + 278 + + 4 + 11 + 0 + NotNullable + + Col278 + + + + Col278 + + 11 + + + + + + + Col279 + 279 + + 4 + 11 + 0 + NotNullable + + Col279 + + + + Col279 + + 11 + + + + + + + Col280 + 280 + + 4 + 11 + 0 + NotNullable + + Col280 + + + + Col280 + + 11 + + + + + + + Col281 + 281 + + 4 + 11 + 0 + NotNullable + + Col281 + + + + Col281 + + 11 + + + + + + + Col282 + 282 + + 4 + 11 + 0 + NotNullable + + Col282 + + + + Col282 + + 11 + + + + + + + Col283 + 283 + + 4 + 11 + 0 + NotNullable + + Col283 + + + + Col283 + + 11 + + + + + + + Col284 + 284 + + 4 + 11 + 0 + NotNullable + + Col284 + + + + Col284 + + 11 + + + + + + + Col285 + 285 + + 4 + 11 + 0 + NotNullable + + Col285 + + + + Col285 + + 11 + + + + + + + Col286 + 286 + + 4 + 11 + 0 + NotNullable + + Col286 + + + + Col286 + + 11 + + + + + + + Col287 + 287 + + 4 + 11 + 0 + NotNullable + + Col287 + + + + Col287 + + 11 + + + + + + + Col288 + 288 + + 4 + 11 + 0 + NotNullable + + Col288 + + + + Col288 + + 11 + + + + + + + Col289 + 289 + + 4 + 11 + 0 + NotNullable + + Col289 + + + + Col289 + + 11 + + + + + + + Col290 + 290 + + 4 + 11 + 0 + NotNullable + + Col290 + + + + Col290 + + 11 + + + + + + + Col291 + 291 + + 4 + 11 + 0 + NotNullable + + Col291 + + + + Col291 + + 11 + + + + + + + Col292 + 292 + + 4 + 11 + 0 + NotNullable + + Col292 + + + + Col292 + + 11 + + + + + + + Col293 + 293 + + 4 + 11 + 0 + NotNullable + + Col293 + + + + Col293 + + 11 + + + + + + + Col294 + 294 + + 4 + 11 + 0 + NotNullable + + Col294 + + + + Col294 + + 11 + + + + + + + Col295 + 295 + + 4 + 11 + 0 + NotNullable + + Col295 + + + + Col295 + + 11 + + + + + + + Col296 + 296 + + 4 + 11 + 0 + NotNullable + + Col296 + + + + Col296 + + 11 + + + + + + + Col297 + 297 + + 4 + 11 + 0 + NotNullable + + Col297 + + + + Col297 + + 11 + + + + + + + Col298 + 298 + + 4 + 11 + 0 + NotNullable + + Col298 + + + + Col298 + + 11 + + + + + + + Col299 + 299 + + 4 + 11 + 0 + NotNullable + + Col299 + + + + Col299 + + 11 + + + + + + + Col300 + 300 + + 4 + 11 + 0 + NotNullable + + Col300 + + + + Col300 + + 11 + + + + + + + Col301 + 301 + + 4 + 11 + 0 + NotNullable + + Col301 + + + + Col301 + + 11 + + + + + + + Col302 + 302 + + 4 + 11 + 0 + NotNullable + + Col302 + + + + Col302 + + 11 + + + + + + + Col303 + 303 + + 4 + 11 + 0 + NotNullable + + Col303 + + + + Col303 + + 11 + + + + + + + Col304 + 304 + + 4 + 11 + 0 + NotNullable + + Col304 + + + + Col304 + + 11 + + + + + + + Col305 + 305 + + 4 + 11 + 0 + NotNullable + + Col305 + + + + Col305 + + 11 + + + + + + + Col306 + 306 + + 4 + 11 + 0 + NotNullable + + Col306 + + + + Col306 + + 11 + + + + + + + Col307 + 307 + + 4 + 11 + 0 + NotNullable + + Col307 + + + + Col307 + + 11 + + + + + + + Col308 + 308 + + 4 + 11 + 0 + NotNullable + + Col308 + + + + Col308 + + 11 + + + + + + + Col309 + 309 + + 4 + 11 + 0 + NotNullable + + Col309 + + + + Col309 + + 11 + + + + + + + Col310 + 310 + + 4 + 11 + 0 + NotNullable + + Col310 + + + + Col310 + + 11 + + + + + + + Col311 + 311 + + 4 + 11 + 0 + NotNullable + + Col311 + + + + Col311 + + 11 + + + + + + + Col312 + 312 + + 4 + 11 + 0 + NotNullable + + Col312 + + + + Col312 + + 11 + + + + + + + Col313 + 313 + + 4 + 11 + 0 + NotNullable + + Col313 + + + + Col313 + + 11 + + + + + + + Col314 + 314 + + 4 + 11 + 0 + NotNullable + + Col314 + + + + Col314 + + 11 + + + + + + + Col315 + 315 + + 4 + 11 + 0 + NotNullable + + Col315 + + + + Col315 + + 11 + + + + + + + Col316 + 316 + + 4 + 11 + 0 + NotNullable + + Col316 + + + + Col316 + + 11 + + + + + + + Col317 + 317 + + 4 + 11 + 0 + NotNullable + + Col317 + + + + Col317 + + 11 + + + + + + + Col318 + 318 + + 4 + 11 + 0 + NotNullable + + Col318 + + + + Col318 + + 11 + + + + + + + Col319 + 319 + + 4 + 11 + 0 + NotNullable + + Col319 + + + + Col319 + + 11 + + + + + + + Col320 + 320 + + 4 + 11 + 0 + NotNullable + + Col320 + + + + Col320 + + 11 + + + + + + + Col321 + 321 + + 4 + 11 + 0 + NotNullable + + Col321 + + + + Col321 + + 11 + + + + + + + Col322 + 322 + + 4 + 11 + 0 + NotNullable + + Col322 + + + + Col322 + + 11 + + + + + + + Col323 + 323 + + 4 + 11 + 0 + NotNullable + + Col323 + + + + Col323 + + 11 + + + + + + + Col324 + 324 + + 4 + 11 + 0 + NotNullable + + Col324 + + + + Col324 + + 11 + + + + + + + Col325 + 325 + + 4 + 11 + 0 + NotNullable + + Col325 + + + + Col325 + + 11 + + + + + + + Col326 + 326 + + 4 + 11 + 0 + NotNullable + + Col326 + + + + Col326 + + 11 + + + + + + + Col327 + 327 + + 4 + 11 + 0 + NotNullable + + Col327 + + + + Col327 + + 11 + + + + + + + Col328 + 328 + + 4 + 11 + 0 + NotNullable + + Col328 + + + + Col328 + + 11 + + + + + + + Col329 + 329 + + 4 + 11 + 0 + NotNullable + + Col329 + + + + Col329 + + 11 + + + + + + + Col330 + 330 + + 4 + 11 + 0 + NotNullable + + Col330 + + + + Col330 + + 11 + + + + + + + Col331 + 331 + + 4 + 11 + 0 + NotNullable + + Col331 + + + + Col331 + + 11 + + + + + + + Col332 + 332 + + 4 + 11 + 0 + NotNullable + + Col332 + + + + Col332 + + 11 + + + + + + + Col333 + 333 + + 4 + 11 + 0 + NotNullable + + Col333 + + + + Col333 + + 11 + + + + + + + Col334 + 334 + + 4 + 11 + 0 + NotNullable + + Col334 + + + + Col334 + + 11 + + + + + + + Col335 + 335 + + 4 + 11 + 0 + NotNullable + + Col335 + + + + Col335 + + 11 + + + + + + + Col336 + 336 + + 4 + 11 + 0 + NotNullable + + Col336 + + + + Col336 + + 11 + + + + + + + Col337 + 337 + + 4 + 11 + 0 + NotNullable + + Col337 + + + + Col337 + + 11 + + + + + + + Col338 + 338 + + 4 + 11 + 0 + NotNullable + + Col338 + + + + Col338 + + 11 + + + + + + + Col339 + 339 + + 4 + 11 + 0 + NotNullable + + Col339 + + + + Col339 + + 11 + + + + + + + Col340 + 340 + + 4 + 11 + 0 + NotNullable + + Col340 + + + + Col340 + + 11 + + + + + + + Col341 + 341 + + 4 + 11 + 0 + NotNullable + + Col341 + + + + Col341 + + 11 + + + + + + + Col342 + 342 + + 4 + 11 + 0 + NotNullable + + Col342 + + + + Col342 + + 11 + + + + + + + Col343 + 343 + + 4 + 11 + 0 + NotNullable + + Col343 + + + + Col343 + + 11 + + + + + + + Col344 + 344 + + 4 + 11 + 0 + NotNullable + + Col344 + + + + Col344 + + 11 + + + + + + + Col345 + 345 + + 4 + 11 + 0 + NotNullable + + Col345 + + + + Col345 + + 11 + + + + + + + Col346 + 346 + + 4 + 11 + 0 + NotNullable + + Col346 + + + + Col346 + + 11 + + + + + + + Col347 + 347 + + 4 + 11 + 0 + NotNullable + + Col347 + + + + Col347 + + 11 + + + + + + + Col348 + 348 + + 4 + 11 + 0 + NotNullable + + Col348 + + + + Col348 + + 11 + + + + + + + Col349 + 349 + + 4 + 11 + 0 + NotNullable + + Col349 + + + + Col349 + + 11 + + + + + + + Col350 + 350 + + 4 + 11 + 0 + NotNullable + + Col350 + + + + Col350 + + 11 + + + + + + + Col351 + 351 + + 4 + 11 + 0 + NotNullable + + Col351 + + + + Col351 + + 11 + + + + + + + Col352 + 352 + + 4 + 11 + 0 + NotNullable + + Col352 + + + + Col352 + + 11 + + + + + + + Col353 + 353 + + 4 + 11 + 0 + NotNullable + + Col353 + + + + Col353 + + 11 + + + + + + + Col354 + 354 + + 4 + 11 + 0 + NotNullable + + Col354 + + + + Col354 + + 11 + + + + + + + Col355 + 355 + + 4 + 11 + 0 + NotNullable + + Col355 + + + + Col355 + + 11 + + + + + + + Col356 + 356 + + 4 + 11 + 0 + NotNullable + + Col356 + + + + Col356 + + 11 + + + + + + + Col357 + 357 + + 4 + 11 + 0 + NotNullable + + Col357 + + + + Col357 + + 11 + + + + + + + Col358 + 358 + + 4 + 11 + 0 + NotNullable + + Col358 + + + + Col358 + + 11 + + + + + + + Col359 + 359 + + 4 + 11 + 0 + NotNullable + + Col359 + + + + Col359 + + 11 + + + + + + + Col360 + 360 + + 4 + 11 + 0 + NotNullable + + Col360 + + + + Col360 + + 11 + + + + + + + Col361 + 361 + + 4 + 11 + 0 + NotNullable + + Col361 + + + + Col361 + + 11 + + + + + + + Col362 + 362 + + 4 + 11 + 0 + NotNullable + + Col362 + + + + Col362 + + 11 + + + + + + + Col363 + 363 + + 4 + 11 + 0 + NotNullable + + Col363 + + + + Col363 + + 11 + + + + + + + Col364 + 364 + + 4 + 11 + 0 + NotNullable + + Col364 + + + + Col364 + + 11 + + + + + + + Col365 + 365 + + 4 + 11 + 0 + NotNullable + + Col365 + + + + Col365 + + 11 + + + + + + + Col366 + 366 + + 4 + 11 + 0 + NotNullable + + Col366 + + + + Col366 + + 11 + + + + + + + Col367 + 367 + + 4 + 11 + 0 + NotNullable + + Col367 + + + + Col367 + + 11 + + + + + + + Col368 + 368 + + 4 + 11 + 0 + NotNullable + + Col368 + + + + Col368 + + 11 + + + + + + + Col369 + 369 + + 4 + 11 + 0 + NotNullable + + Col369 + + + + Col369 + + 11 + + + + + + + Col370 + 370 + + 4 + 11 + 0 + NotNullable + + Col370 + + + + Col370 + + 11 + + + + + + + Col371 + 371 + + 4 + 11 + 0 + NotNullable + + Col371 + + + + Col371 + + 11 + + + + + + + Col372 + 372 + + 4 + 11 + 0 + NotNullable + + Col372 + + + + Col372 + + 11 + + + + + + + Col373 + 373 + + 4 + 11 + 0 + NotNullable + + Col373 + + + + Col373 + + 11 + + + + + + + Col374 + 374 + + 4 + 11 + 0 + NotNullable + + Col374 + + + + Col374 + + 11 + + + + + + + Col375 + 375 + + 4 + 11 + 0 + NotNullable + + Col375 + + + + Col375 + + 11 + + + + + + + Col376 + 376 + + 4 + 11 + 0 + NotNullable + + Col376 + + + + Col376 + + 11 + + + + + + + Col377 + 377 + + 4 + 11 + 0 + NotNullable + + Col377 + + + + Col377 + + 11 + + + + + + + Col378 + 378 + + 4 + 11 + 0 + NotNullable + + Col378 + + + + Col378 + + 11 + + + + + + + Col379 + 379 + + 4 + 11 + 0 + NotNullable + + Col379 + + + + Col379 + + 11 + + + + + + + Col380 + 380 + + 4 + 11 + 0 + NotNullable + + Col380 + + + + Col380 + + 11 + + + + + + + Col381 + 381 + + 4 + 11 + 0 + NotNullable + + Col381 + + + + Col381 + + 11 + + + + + + + Col382 + 382 + + 4 + 11 + 0 + NotNullable + + Col382 + + + + Col382 + + 11 + + + + + + + Col383 + 383 + + 4 + 11 + 0 + NotNullable + + Col383 + + + + Col383 + + 11 + + + + + + + Col384 + 384 + + 4 + 11 + 0 + NotNullable + + Col384 + + + + Col384 + + 11 + + + + + + + Col385 + 385 + + 4 + 11 + 0 + NotNullable + + Col385 + + + + Col385 + + 11 + + + + + + + Col386 + 386 + + 4 + 11 + 0 + NotNullable + + Col386 + + + + Col386 + + 11 + + + + + + + Col387 + 387 + + 4 + 11 + 0 + NotNullable + + Col387 + + + + Col387 + + 11 + + + + + + + Col388 + 388 + + 4 + 11 + 0 + NotNullable + + Col388 + + + + Col388 + + 11 + + + + + + + Col389 + 389 + + 4 + 11 + 0 + NotNullable + + Col389 + + + + Col389 + + 11 + + + + + + + Col390 + 390 + + 4 + 11 + 0 + NotNullable + + Col390 + + + + Col390 + + 11 + + + + + + + Col391 + 391 + + 4 + 11 + 0 + NotNullable + + Col391 + + + + Col391 + + 11 + + + + + + + Col392 + 392 + + 4 + 11 + 0 + NotNullable + + Col392 + + + + Col392 + + 11 + + + + + + + Col393 + 393 + + 4 + 11 + 0 + NotNullable + + Col393 + + + + Col393 + + 11 + + + + + + + Col394 + 394 + + 4 + 11 + 0 + NotNullable + + Col394 + + + + Col394 + + 11 + + + + + + + Col395 + 395 + + 4 + 11 + 0 + NotNullable + + Col395 + + + + Col395 + + 11 + + + + + + + Col396 + 396 + + 4 + 11 + 0 + NotNullable + + Col396 + + + + Col396 + + 11 + + + + + + + Col397 + 397 + + 4 + 11 + 0 + NotNullable + + Col397 + + + + Col397 + + 11 + + + + + + + Col398 + 398 + + 4 + 11 + 0 + NotNullable + + Col398 + + + + Col398 + + 11 + + + + + + + Col399 + 399 + + 4 + 11 + 0 + NotNullable + + Col399 + + + + Col399 + + 11 + + + + + + + Col400 + 400 + + 4 + 11 + 0 + NotNullable + + Col400 + + + + Col400 + + 11 + + + + + + + Col401 + 401 + + 4 + 11 + 0 + NotNullable + + Col401 + + + + Col401 + + 11 + + + + + + + Col402 + 402 + + 4 + 11 + 0 + NotNullable + + Col402 + + + + Col402 + + 11 + + + + + + + Col403 + 403 + + 4 + 11 + 0 + NotNullable + + Col403 + + + + Col403 + + 11 + + + + + + + Col404 + 404 + + 4 + 11 + 0 + NotNullable + + Col404 + + + + Col404 + + 11 + + + + + + + Col405 + 405 + + 4 + 11 + 0 + NotNullable + + Col405 + + + + Col405 + + 11 + + + + + + + Col406 + 406 + + 4 + 11 + 0 + NotNullable + + Col406 + + + + Col406 + + 11 + + + + + + + Col407 + 407 + + 4 + 11 + 0 + NotNullable + + Col407 + + + + Col407 + + 11 + + + + + + + Col408 + 408 + + 4 + 11 + 0 + NotNullable + + Col408 + + + + Col408 + + 11 + + + + + + + Col409 + 409 + + 4 + 11 + 0 + NotNullable + + Col409 + + + + Col409 + + 11 + + + + + + + Col410 + 410 + + 4 + 11 + 0 + NotNullable + + Col410 + + + + Col410 + + 11 + + + + + + + Col411 + 411 + + 4 + 11 + 0 + NotNullable + + Col411 + + + + Col411 + + 11 + + + + + + + Col412 + 412 + + 4 + 11 + 0 + NotNullable + + Col412 + + + + Col412 + + 11 + + + + + + + Col413 + 413 + + 4 + 11 + 0 + NotNullable + + Col413 + + + + Col413 + + 11 + + + + + + + Col414 + 414 + + 4 + 11 + 0 + NotNullable + + Col414 + + + + Col414 + + 11 + + + + + + + Col415 + 415 + + 4 + 11 + 0 + NotNullable + + Col415 + + + + Col415 + + 11 + + + + + + + Col416 + 416 + + 4 + 11 + 0 + NotNullable + + Col416 + + + + Col416 + + 11 + + + + + + + Col417 + 417 + + 4 + 11 + 0 + NotNullable + + Col417 + + + + Col417 + + 11 + + + + + + + Col418 + 418 + + 4 + 11 + 0 + NotNullable + + Col418 + + + + Col418 + + 11 + + + + + + + Col419 + 419 + + 4 + 11 + 0 + NotNullable + + Col419 + + + + Col419 + + 11 + + + + + + + Col420 + 420 + + 4 + 11 + 0 + NotNullable + + Col420 + + + + Col420 + + 11 + + + + + + + Col421 + 421 + + 4 + 11 + 0 + NotNullable + + Col421 + + + + Col421 + + 11 + + + + + + + Col422 + 422 + + 4 + 11 + 0 + NotNullable + + Col422 + + + + Col422 + + 11 + + + + + + + Col423 + 423 + + 4 + 11 + 0 + NotNullable + + Col423 + + + + Col423 + + 11 + + + + + + + Col424 + 424 + + 4 + 11 + 0 + NotNullable + + Col424 + + + + Col424 + + 11 + + + + + + + Col425 + 425 + + 4 + 11 + 0 + NotNullable + + Col425 + + + + Col425 + + 11 + + + + + + + Col426 + 426 + + 4 + 11 + 0 + NotNullable + + Col426 + + + + Col426 + + 11 + + + + + + + Col427 + 427 + + 4 + 11 + 0 + NotNullable + + Col427 + + + + Col427 + + 11 + + + + + + + Col428 + 428 + + 4 + 11 + 0 + NotNullable + + Col428 + + + + Col428 + + 11 + + + + + + + Col429 + 429 + + 4 + 11 + 0 + NotNullable + + Col429 + + + + Col429 + + 11 + + + + + + + Col430 + 430 + + 4 + 11 + 0 + NotNullable + + Col430 + + + + Col430 + + 11 + + + + + + + Col431 + 431 + + 4 + 11 + 0 + NotNullable + + Col431 + + + + Col431 + + 11 + + + + + + + Col432 + 432 + + 4 + 11 + 0 + NotNullable + + Col432 + + + + Col432 + + 11 + + + + + + + Col433 + 433 + + 4 + 11 + 0 + NotNullable + + Col433 + + + + Col433 + + 11 + + + + + + + Col434 + 434 + + 4 + 11 + 0 + NotNullable + + Col434 + + + + Col434 + + 11 + + + + + + + Col435 + 435 + + 4 + 11 + 0 + NotNullable + + Col435 + + + + Col435 + + 11 + + + + + + + Col436 + 436 + + 4 + 11 + 0 + NotNullable + + Col436 + + + + Col436 + + 11 + + + + + + + Col437 + 437 + + 4 + 11 + 0 + NotNullable + + Col437 + + + + Col437 + + 11 + + + + + + + Col438 + 438 + + 4 + 11 + 0 + NotNullable + + Col438 + + + + Col438 + + 11 + + + + + + + Col439 + 439 + + 4 + 11 + 0 + NotNullable + + Col439 + + + + Col439 + + 11 + + + + + + + Col440 + 440 + + 4 + 11 + 0 + NotNullable + + Col440 + + + + Col440 + + 11 + + + + + + + Col441 + 441 + + 4 + 11 + 0 + NotNullable + + Col441 + + + + Col441 + + 11 + + + + + + + Col442 + 442 + + 4 + 11 + 0 + NotNullable + + Col442 + + + + Col442 + + 11 + + + + + + + Col443 + 443 + + 4 + 11 + 0 + NotNullable + + Col443 + + + + Col443 + + 11 + + + + + + + Col444 + 444 + + 4 + 11 + 0 + NotNullable + + Col444 + + + + Col444 + + 11 + + + + + + + Col445 + 445 + + 4 + 11 + 0 + NotNullable + + Col445 + + + + Col445 + + 11 + + + + + + + Col446 + 446 + + 4 + 11 + 0 + NotNullable + + Col446 + + + + Col446 + + 11 + + + + + + + Col447 + 447 + + 4 + 11 + 0 + NotNullable + + Col447 + + + + Col447 + + 11 + + + + + + + Col448 + 448 + + 4 + 11 + 0 + NotNullable + + Col448 + + + + Col448 + + 11 + + + + + + + Col449 + 449 + + 4 + 11 + 0 + NotNullable + + Col449 + + + + Col449 + + 11 + + + + + + + Col450 + 450 + + 4 + 11 + 0 + NotNullable + + Col450 + + + + Col450 + + 11 + + + + + + + Col451 + 451 + + 4 + 11 + 0 + NotNullable + + Col451 + + + + Col451 + + 11 + + + + + + + Col452 + 452 + + 4 + 11 + 0 + NotNullable + + Col452 + + + + Col452 + + 11 + + + + + + + Col453 + 453 + + 4 + 11 + 0 + NotNullable + + Col453 + + + + Col453 + + 11 + + + + + + + Col454 + 454 + + 4 + 11 + 0 + NotNullable + + Col454 + + + + Col454 + + 11 + + + + + + + Col455 + 455 + + 4 + 11 + 0 + NotNullable + + Col455 + + + + Col455 + + 11 + + + + + + + Col456 + 456 + + 4 + 11 + 0 + NotNullable + + Col456 + + + + Col456 + + 11 + + + + + + + Col457 + 457 + + 4 + 11 + 0 + NotNullable + + Col457 + + + + Col457 + + 11 + + + + + + + Col458 + 458 + + 4 + 11 + 0 + NotNullable + + Col458 + + + + Col458 + + 11 + + + + + + + Col459 + 459 + + 4 + 11 + 0 + NotNullable + + Col459 + + + + Col459 + + 11 + + + + + + + Col460 + 460 + + 4 + 11 + 0 + NotNullable + + Col460 + + + + Col460 + + 11 + + + + + + + Col461 + 461 + + 4 + 11 + 0 + NotNullable + + Col461 + + + + Col461 + + 11 + + + + + + + Col462 + 462 + + 4 + 11 + 0 + NotNullable + + Col462 + + + + Col462 + + 11 + + + + + + + Col463 + 463 + + 4 + 11 + 0 + NotNullable + + Col463 + + + + Col463 + + 11 + + + + + + + Col464 + 464 + + 4 + 11 + 0 + NotNullable + + Col464 + + + + Col464 + + 11 + + + + + + + Col465 + 465 + + 4 + 11 + 0 + NotNullable + + Col465 + + + + Col465 + + 11 + + + + + + + Col466 + 466 + + 4 + 11 + 0 + NotNullable + + Col466 + + + + Col466 + + 11 + + + + + + + Col467 + 467 + + 4 + 11 + 0 + NotNullable + + Col467 + + + + Col467 + + 11 + + + + + + + Col468 + 468 + + 4 + 11 + 0 + NotNullable + + Col468 + + + + Col468 + + 11 + + + + + + + Col469 + 469 + + 4 + 11 + 0 + NotNullable + + Col469 + + + + Col469 + + 11 + + + + + + + Col470 + 470 + + 4 + 11 + 0 + NotNullable + + Col470 + + + + Col470 + + 11 + + + + + + + Col471 + 471 + + 4 + 11 + 0 + NotNullable + + Col471 + + + + Col471 + + 11 + + + + + + + Col472 + 472 + + 4 + 11 + 0 + NotNullable + + Col472 + + + + Col472 + + 11 + + + + + + + Col473 + 473 + + 4 + 11 + 0 + NotNullable + + Col473 + + + + Col473 + + 11 + + + + + + + Col474 + 474 + + 4 + 11 + 0 + NotNullable + + Col474 + + + + Col474 + + 11 + + + + + + + Col475 + 475 + + 4 + 11 + 0 + NotNullable + + Col475 + + + + Col475 + + 11 + + + + + + + Col476 + 476 + + 4 + 11 + 0 + NotNullable + + Col476 + + + + Col476 + + 11 + + + + + + + Col477 + 477 + + 4 + 11 + 0 + NotNullable + + Col477 + + + + Col477 + + 11 + + + + + + + Col478 + 478 + + 4 + 11 + 0 + NotNullable + + Col478 + + + + Col478 + + 11 + + + + + + + Col479 + 479 + + 4 + 11 + 0 + NotNullable + + Col479 + + + + Col479 + + 11 + + + + + + + Col480 + 480 + + 4 + 11 + 0 + NotNullable + + Col480 + + + + Col480 + + 11 + + + + + + + Col481 + 481 + + 4 + 11 + 0 + NotNullable + + Col481 + + + + Col481 + + 11 + + + + + + + Col482 + 482 + + 4 + 11 + 0 + NotNullable + + Col482 + + + + Col482 + + 11 + + + + + + + Col483 + 483 + + 4 + 11 + 0 + NotNullable + + Col483 + + + + Col483 + + 11 + + + + + + + Col484 + 484 + + 4 + 11 + 0 + NotNullable + + Col484 + + + + Col484 + + 11 + + + + + + + Col485 + 485 + + 4 + 11 + 0 + NotNullable + + Col485 + + + + Col485 + + 11 + + + + + + + Col486 + 486 + + 4 + 11 + 0 + NotNullable + + Col486 + + + + Col486 + + 11 + + + + + + + Col487 + 487 + + 4 + 11 + 0 + NotNullable + + Col487 + + + + Col487 + + 11 + + + + + + + Col488 + 488 + + 4 + 11 + 0 + NotNullable + + Col488 + + + + Col488 + + 11 + + + + + + + Col489 + 489 + + 4 + 11 + 0 + NotNullable + + Col489 + + + + Col489 + + 11 + + + + + + + Col490 + 490 + + 4 + 11 + 0 + NotNullable + + Col490 + + + + Col490 + + 11 + + + + + + + Col491 + 491 + + 4 + 11 + 0 + NotNullable + + Col491 + + + + Col491 + + 11 + + + + + + + Col492 + 492 + + 4 + 11 + 0 + NotNullable + + Col492 + + + + Col492 + + 11 + + + + + + + Col493 + 493 + + 4 + 11 + 0 + NotNullable + + Col493 + + + + Col493 + + 11 + + + + + + + Col494 + 494 + + 4 + 11 + 0 + NotNullable + + Col494 + + + + Col494 + + 11 + + + + + + + Col495 + 495 + + 4 + 11 + 0 + NotNullable + + Col495 + + + + Col495 + + 11 + + + + + + + Col496 + 496 + + 4 + 11 + 0 + NotNullable + + Col496 + + + + Col496 + + 11 + + + + + + + Col497 + 497 + + 4 + 11 + 0 + NotNullable + + Col497 + + + + Col497 + + 11 + + + + + + + Col498 + 498 + + 4 + 11 + 0 + NotNullable + + Col498 + + + + Col498 + + 11 + + + + + + + Col499 + 499 + + 4 + 11 + 0 + NotNullable + + Col499 + + + + Col499 + + 11 + + + + + + + Col500 + 500 + + 4 + 11 + 0 + NotNullable + + Col500 + + + + Col500 + + 11 + + + + + + + +]]> + + + + + + + + + + + + + a4 + landscape + 0.5cm + 0.5cm + 0.5cm + 0.5cm + + + html + new Date()]]> + + + + + + + Mega Data Set + + + COL1 + COL1 + dataSetRow["COL1"] + integer + + + COL2 + COL2 + dataSetRow["COL2"] + string + + + COL3 + COL3 + dataSetRow["COL3"] + string + + + COL4 + COL4 + dataSetRow["COL4"] + string + + + COL5 + COL5 + dataSetRow["COL5"] + string + + + COL6 + COL6 + dataSetRow["COL6"] + integer + + + COL7 + COL7 + dataSetRow["COL7"] + string + + + COL8 + COL8 + dataSetRow["COL8"] + string + + + COL9 + COL9 + dataSetRow["COL9"] + string + + + COL10 + COL10 + dataSetRow["COL10"] + string + + + COL11 + COL11 + dataSetRow["COL11"] + integer + + + COL12 + COL12 + dataSetRow["COL12"] + string + + + COL13 + COL13 + dataSetRow["COL13"] + string + + + COL14 + COL14 + dataSetRow["COL14"] + string + + + 0 + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + COL1 + + + + + COL2 + + + + + COL3 + + + + + COL4 + + + + + COL5 + + + + + COL6 + + + + + COL7 + + + + + COL8 + + + + + COL9 + + + + + COL10 + + + + + COL11 + + + + + COL12 + + + + + COL13 + + + + + COL14 + + + + +
+ + + + + + + + + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeNoStyles.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeNoStyles.rptdesign new file mode 100644 index 00000000000..0bcaeff1a7b --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeNoStyles.rptdesign @@ -0,0 +1,11193 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + Number Formats Test Report + + + queryText + 15112 + + + queryTimeOut + 15112 + + + rowFetchSize + 15112 + + + in + /templates/blank_report.gif + auto layout + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + COL1 + measure + COL1 + COL1 + + + COL2 + measure + COL2 + COL2 + + + COL3 + measure + COL3 + COL3 + + + COL4 + measure + COL4 + COL4 + + + COL5 + measure + COL5 + COL5 + + + COL6 + measure + COL6 + COL6 + + + COL7 + measure + COL7 + COL7 + + + COL8 + measure + COL8 + COL8 + + + COL9 + measure + COL9 + COL9 + + + COL10 + measure + COL10 + COL10 + + + COL11 + measure + COL11 + COL11 + + + COL12 + measure + COL12 + COL12 + + + COL13 + measure + COL13 + COL13 + + + COL14 + measure + COL14 + COL14 + + + + + + + 1 + COL1 + integer + + + 2 + COL2 + integer + + + 3 + COL3 + integer + + + 4 + COL4 + integer + + + 5 + COL5 + integer + + + 6 + COL6 + integer + + + 7 + COL7 + integer + + + 8 + COL8 + integer + + + 9 + COL9 + integer + + + 10 + COL10 + integer + + + 11 + COL11 + integer + + + 12 + COL12 + integer + + + 13 + COL13 + integer + + + 14 + COL14 + integer + + + + 100000 + Data Source + + + 1 + COL1 + COL1 + integer + 4 + + + 2 + COL2 + COL2 + integer + 4 + + + 3 + COL3 + COL3 + integer + 4 + + + 4 + COL4 + COL4 + integer + 4 + + + 5 + COL5 + COL5 + integer + 4 + + + 6 + COL6 + COL6 + integer + 4 + + + 7 + COL7 + COL7 + integer + 4 + + + 8 + COL8 + COL8 + integer + 4 + + + 9 + COL9 + COL9 + integer + 4 + + + 10 + COL10 + COL10 + integer + 4 + + + 11 + COL11 + COL11 + integer + 4 + + + 12 + COL12 + COL12 + integer + 4 + + + 13 + COL13 + COL13 + integer + 4 + + + 14 + COL14 + COL14 + integer + 4 + + + + + + 2.0 + + + + + + + Col1 + 1 + + 4 + 11 + 0 + NotNullable + + Col1 + + + + Col1 + + 11 + + + + + + + Col2 + 2 + + 4 + 11 + 0 + NotNullable + + Col2 + + + + Col2 + + 11 + + + + + + + Col3 + 3 + + 4 + 11 + 0 + NotNullable + + Col3 + + + + Col3 + + 11 + + + + + + + Col4 + 4 + + 4 + 11 + 0 + NotNullable + + Col4 + + + + Col4 + + 11 + + + + + + + Col5 + 5 + + 4 + 11 + 0 + NotNullable + + Col5 + + + + Col5 + + 11 + + + + + + + Col6 + 6 + + 4 + 11 + 0 + NotNullable + + Col6 + + + + Col6 + + 11 + + + + + + + Col7 + 7 + + 4 + 11 + 0 + NotNullable + + Col7 + + + + Col7 + + 11 + + + + + + + Col8 + 8 + + 4 + 11 + 0 + NotNullable + + Col8 + + + + Col8 + + 11 + + + + + + + Col9 + 9 + + 4 + 11 + 0 + NotNullable + + Col9 + + + + Col9 + + 11 + + + + + + + Col10 + 10 + + 4 + 11 + 0 + NotNullable + + Col10 + + + + Col10 + + 11 + + + + + + + Col11 + 11 + + 4 + 11 + 0 + NotNullable + + Col11 + + + + Col11 + + 11 + + + + + + + Col12 + 12 + + 4 + 11 + 0 + NotNullable + + Col12 + + + + Col12 + + 11 + + + + + + + Col13 + 13 + + 4 + 11 + 0 + NotNullable + + Col13 + + + + Col13 + + 11 + + + + + + + Col14 + 14 + + 4 + 11 + 0 + NotNullable + + Col14 + + + + Col14 + + 11 + + + + + + + Col15 + 15 + + 4 + 11 + 0 + NotNullable + + Col15 + + + + Col15 + + 11 + + + + + + + Col16 + 16 + + 4 + 11 + 0 + NotNullable + + Col16 + + + + Col16 + + 11 + + + + + + + Col17 + 17 + + 4 + 11 + 0 + NotNullable + + Col17 + + + + Col17 + + 11 + + + + + + + Col18 + 18 + + 4 + 11 + 0 + NotNullable + + Col18 + + + + Col18 + + 11 + + + + + + + Col19 + 19 + + 4 + 11 + 0 + NotNullable + + Col19 + + + + Col19 + + 11 + + + + + + + Col20 + 20 + + 4 + 11 + 0 + NotNullable + + Col20 + + + + Col20 + + 11 + + + + + + + Col21 + 21 + + 4 + 11 + 0 + NotNullable + + Col21 + + + + Col21 + + 11 + + + + + + + Col22 + 22 + + 4 + 11 + 0 + NotNullable + + Col22 + + + + Col22 + + 11 + + + + + + + Col23 + 23 + + 4 + 11 + 0 + NotNullable + + Col23 + + + + Col23 + + 11 + + + + + + + Col24 + 24 + + 4 + 11 + 0 + NotNullable + + Col24 + + + + Col24 + + 11 + + + + + + + Col25 + 25 + + 4 + 11 + 0 + NotNullable + + Col25 + + + + Col25 + + 11 + + + + + + + Col26 + 26 + + 4 + 11 + 0 + NotNullable + + Col26 + + + + Col26 + + 11 + + + + + + + Col27 + 27 + + 4 + 11 + 0 + NotNullable + + Col27 + + + + Col27 + + 11 + + + + + + + Col28 + 28 + + 4 + 11 + 0 + NotNullable + + Col28 + + + + Col28 + + 11 + + + + + + + Col29 + 29 + + 4 + 11 + 0 + NotNullable + + Col29 + + + + Col29 + + 11 + + + + + + + Col30 + 30 + + 4 + 11 + 0 + NotNullable + + Col30 + + + + Col30 + + 11 + + + + + + + Col31 + 31 + + 4 + 11 + 0 + NotNullable + + Col31 + + + + Col31 + + 11 + + + + + + + Col32 + 32 + + 4 + 11 + 0 + NotNullable + + Col32 + + + + Col32 + + 11 + + + + + + + Col33 + 33 + + 4 + 11 + 0 + NotNullable + + Col33 + + + + Col33 + + 11 + + + + + + + Col34 + 34 + + 4 + 11 + 0 + NotNullable + + Col34 + + + + Col34 + + 11 + + + + + + + Col35 + 35 + + 4 + 11 + 0 + NotNullable + + Col35 + + + + Col35 + + 11 + + + + + + + Col36 + 36 + + 4 + 11 + 0 + NotNullable + + Col36 + + + + Col36 + + 11 + + + + + + + Col37 + 37 + + 4 + 11 + 0 + NotNullable + + Col37 + + + + Col37 + + 11 + + + + + + + Col38 + 38 + + 4 + 11 + 0 + NotNullable + + Col38 + + + + Col38 + + 11 + + + + + + + Col39 + 39 + + 4 + 11 + 0 + NotNullable + + Col39 + + + + Col39 + + 11 + + + + + + + Col40 + 40 + + 4 + 11 + 0 + NotNullable + + Col40 + + + + Col40 + + 11 + + + + + + + Col41 + 41 + + 4 + 11 + 0 + NotNullable + + Col41 + + + + Col41 + + 11 + + + + + + + Col42 + 42 + + 4 + 11 + 0 + NotNullable + + Col42 + + + + Col42 + + 11 + + + + + + + Col43 + 43 + + 4 + 11 + 0 + NotNullable + + Col43 + + + + Col43 + + 11 + + + + + + + Col44 + 44 + + 4 + 11 + 0 + NotNullable + + Col44 + + + + Col44 + + 11 + + + + + + + Col45 + 45 + + 4 + 11 + 0 + NotNullable + + Col45 + + + + Col45 + + 11 + + + + + + + Col46 + 46 + + 4 + 11 + 0 + NotNullable + + Col46 + + + + Col46 + + 11 + + + + + + + Col47 + 47 + + 4 + 11 + 0 + NotNullable + + Col47 + + + + Col47 + + 11 + + + + + + + Col48 + 48 + + 4 + 11 + 0 + NotNullable + + Col48 + + + + Col48 + + 11 + + + + + + + Col49 + 49 + + 4 + 11 + 0 + NotNullable + + Col49 + + + + Col49 + + 11 + + + + + + + Col50 + 50 + + 4 + 11 + 0 + NotNullable + + Col50 + + + + Col50 + + 11 + + + + + + + Col51 + 51 + + 4 + 11 + 0 + NotNullable + + Col51 + + + + Col51 + + 11 + + + + + + + Col52 + 52 + + 4 + 11 + 0 + NotNullable + + Col52 + + + + Col52 + + 11 + + + + + + + Col53 + 53 + + 4 + 11 + 0 + NotNullable + + Col53 + + + + Col53 + + 11 + + + + + + + Col54 + 54 + + 4 + 11 + 0 + NotNullable + + Col54 + + + + Col54 + + 11 + + + + + + + Col55 + 55 + + 4 + 11 + 0 + NotNullable + + Col55 + + + + Col55 + + 11 + + + + + + + Col56 + 56 + + 4 + 11 + 0 + NotNullable + + Col56 + + + + Col56 + + 11 + + + + + + + Col57 + 57 + + 4 + 11 + 0 + NotNullable + + Col57 + + + + Col57 + + 11 + + + + + + + Col58 + 58 + + 4 + 11 + 0 + NotNullable + + Col58 + + + + Col58 + + 11 + + + + + + + Col59 + 59 + + 4 + 11 + 0 + NotNullable + + Col59 + + + + Col59 + + 11 + + + + + + + Col60 + 60 + + 4 + 11 + 0 + NotNullable + + Col60 + + + + Col60 + + 11 + + + + + + + Col61 + 61 + + 4 + 11 + 0 + NotNullable + + Col61 + + + + Col61 + + 11 + + + + + + + Col62 + 62 + + 4 + 11 + 0 + NotNullable + + Col62 + + + + Col62 + + 11 + + + + + + + Col63 + 63 + + 4 + 11 + 0 + NotNullable + + Col63 + + + + Col63 + + 11 + + + + + + + Col64 + 64 + + 4 + 11 + 0 + NotNullable + + Col64 + + + + Col64 + + 11 + + + + + + + Col65 + 65 + + 4 + 11 + 0 + NotNullable + + Col65 + + + + Col65 + + 11 + + + + + + + Col66 + 66 + + 4 + 11 + 0 + NotNullable + + Col66 + + + + Col66 + + 11 + + + + + + + Col67 + 67 + + 4 + 11 + 0 + NotNullable + + Col67 + + + + Col67 + + 11 + + + + + + + Col68 + 68 + + 4 + 11 + 0 + NotNullable + + Col68 + + + + Col68 + + 11 + + + + + + + Col69 + 69 + + 4 + 11 + 0 + NotNullable + + Col69 + + + + Col69 + + 11 + + + + + + + Col70 + 70 + + 4 + 11 + 0 + NotNullable + + Col70 + + + + Col70 + + 11 + + + + + + + Col71 + 71 + + 4 + 11 + 0 + NotNullable + + Col71 + + + + Col71 + + 11 + + + + + + + Col72 + 72 + + 4 + 11 + 0 + NotNullable + + Col72 + + + + Col72 + + 11 + + + + + + + Col73 + 73 + + 4 + 11 + 0 + NotNullable + + Col73 + + + + Col73 + + 11 + + + + + + + Col74 + 74 + + 4 + 11 + 0 + NotNullable + + Col74 + + + + Col74 + + 11 + + + + + + + Col75 + 75 + + 4 + 11 + 0 + NotNullable + + Col75 + + + + Col75 + + 11 + + + + + + + Col76 + 76 + + 4 + 11 + 0 + NotNullable + + Col76 + + + + Col76 + + 11 + + + + + + + Col77 + 77 + + 4 + 11 + 0 + NotNullable + + Col77 + + + + Col77 + + 11 + + + + + + + Col78 + 78 + + 4 + 11 + 0 + NotNullable + + Col78 + + + + Col78 + + 11 + + + + + + + Col79 + 79 + + 4 + 11 + 0 + NotNullable + + Col79 + + + + Col79 + + 11 + + + + + + + Col80 + 80 + + 4 + 11 + 0 + NotNullable + + Col80 + + + + Col80 + + 11 + + + + + + + Col81 + 81 + + 4 + 11 + 0 + NotNullable + + Col81 + + + + Col81 + + 11 + + + + + + + Col82 + 82 + + 4 + 11 + 0 + NotNullable + + Col82 + + + + Col82 + + 11 + + + + + + + Col83 + 83 + + 4 + 11 + 0 + NotNullable + + Col83 + + + + Col83 + + 11 + + + + + + + Col84 + 84 + + 4 + 11 + 0 + NotNullable + + Col84 + + + + Col84 + + 11 + + + + + + + Col85 + 85 + + 4 + 11 + 0 + NotNullable + + Col85 + + + + Col85 + + 11 + + + + + + + Col86 + 86 + + 4 + 11 + 0 + NotNullable + + Col86 + + + + Col86 + + 11 + + + + + + + Col87 + 87 + + 4 + 11 + 0 + NotNullable + + Col87 + + + + Col87 + + 11 + + + + + + + Col88 + 88 + + 4 + 11 + 0 + NotNullable + + Col88 + + + + Col88 + + 11 + + + + + + + Col89 + 89 + + 4 + 11 + 0 + NotNullable + + Col89 + + + + Col89 + + 11 + + + + + + + Col90 + 90 + + 4 + 11 + 0 + NotNullable + + Col90 + + + + Col90 + + 11 + + + + + + + Col91 + 91 + + 4 + 11 + 0 + NotNullable + + Col91 + + + + Col91 + + 11 + + + + + + + Col92 + 92 + + 4 + 11 + 0 + NotNullable + + Col92 + + + + Col92 + + 11 + + + + + + + Col93 + 93 + + 4 + 11 + 0 + NotNullable + + Col93 + + + + Col93 + + 11 + + + + + + + Col94 + 94 + + 4 + 11 + 0 + NotNullable + + Col94 + + + + Col94 + + 11 + + + + + + + Col95 + 95 + + 4 + 11 + 0 + NotNullable + + Col95 + + + + Col95 + + 11 + + + + + + + Col96 + 96 + + 4 + 11 + 0 + NotNullable + + Col96 + + + + Col96 + + 11 + + + + + + + Col97 + 97 + + 4 + 11 + 0 + NotNullable + + Col97 + + + + Col97 + + 11 + + + + + + + Col98 + 98 + + 4 + 11 + 0 + NotNullable + + Col98 + + + + Col98 + + 11 + + + + + + + Col99 + 99 + + 4 + 11 + 0 + NotNullable + + Col99 + + + + Col99 + + 11 + + + + + + + Col100 + 100 + + 4 + 11 + 0 + NotNullable + + Col100 + + + + Col100 + + 11 + + + + + + + Col101 + 101 + + 4 + 11 + 0 + NotNullable + + Col101 + + + + Col101 + + 11 + + + + + + + Col102 + 102 + + 4 + 11 + 0 + NotNullable + + Col102 + + + + Col102 + + 11 + + + + + + + Col103 + 103 + + 4 + 11 + 0 + NotNullable + + Col103 + + + + Col103 + + 11 + + + + + + + Col104 + 104 + + 4 + 11 + 0 + NotNullable + + Col104 + + + + Col104 + + 11 + + + + + + + Col105 + 105 + + 4 + 11 + 0 + NotNullable + + Col105 + + + + Col105 + + 11 + + + + + + + Col106 + 106 + + 4 + 11 + 0 + NotNullable + + Col106 + + + + Col106 + + 11 + + + + + + + Col107 + 107 + + 4 + 11 + 0 + NotNullable + + Col107 + + + + Col107 + + 11 + + + + + + + Col108 + 108 + + 4 + 11 + 0 + NotNullable + + Col108 + + + + Col108 + + 11 + + + + + + + Col109 + 109 + + 4 + 11 + 0 + NotNullable + + Col109 + + + + Col109 + + 11 + + + + + + + Col110 + 110 + + 4 + 11 + 0 + NotNullable + + Col110 + + + + Col110 + + 11 + + + + + + + Col111 + 111 + + 4 + 11 + 0 + NotNullable + + Col111 + + + + Col111 + + 11 + + + + + + + Col112 + 112 + + 4 + 11 + 0 + NotNullable + + Col112 + + + + Col112 + + 11 + + + + + + + Col113 + 113 + + 4 + 11 + 0 + NotNullable + + Col113 + + + + Col113 + + 11 + + + + + + + Col114 + 114 + + 4 + 11 + 0 + NotNullable + + Col114 + + + + Col114 + + 11 + + + + + + + Col115 + 115 + + 4 + 11 + 0 + NotNullable + + Col115 + + + + Col115 + + 11 + + + + + + + Col116 + 116 + + 4 + 11 + 0 + NotNullable + + Col116 + + + + Col116 + + 11 + + + + + + + Col117 + 117 + + 4 + 11 + 0 + NotNullable + + Col117 + + + + Col117 + + 11 + + + + + + + Col118 + 118 + + 4 + 11 + 0 + NotNullable + + Col118 + + + + Col118 + + 11 + + + + + + + Col119 + 119 + + 4 + 11 + 0 + NotNullable + + Col119 + + + + Col119 + + 11 + + + + + + + Col120 + 120 + + 4 + 11 + 0 + NotNullable + + Col120 + + + + Col120 + + 11 + + + + + + + Col121 + 121 + + 4 + 11 + 0 + NotNullable + + Col121 + + + + Col121 + + 11 + + + + + + + Col122 + 122 + + 4 + 11 + 0 + NotNullable + + Col122 + + + + Col122 + + 11 + + + + + + + Col123 + 123 + + 4 + 11 + 0 + NotNullable + + Col123 + + + + Col123 + + 11 + + + + + + + Col124 + 124 + + 4 + 11 + 0 + NotNullable + + Col124 + + + + Col124 + + 11 + + + + + + + Col125 + 125 + + 4 + 11 + 0 + NotNullable + + Col125 + + + + Col125 + + 11 + + + + + + + Col126 + 126 + + 4 + 11 + 0 + NotNullable + + Col126 + + + + Col126 + + 11 + + + + + + + Col127 + 127 + + 4 + 11 + 0 + NotNullable + + Col127 + + + + Col127 + + 11 + + + + + + + Col128 + 128 + + 4 + 11 + 0 + NotNullable + + Col128 + + + + Col128 + + 11 + + + + + + + Col129 + 129 + + 4 + 11 + 0 + NotNullable + + Col129 + + + + Col129 + + 11 + + + + + + + Col130 + 130 + + 4 + 11 + 0 + NotNullable + + Col130 + + + + Col130 + + 11 + + + + + + + Col131 + 131 + + 4 + 11 + 0 + NotNullable + + Col131 + + + + Col131 + + 11 + + + + + + + Col132 + 132 + + 4 + 11 + 0 + NotNullable + + Col132 + + + + Col132 + + 11 + + + + + + + Col133 + 133 + + 4 + 11 + 0 + NotNullable + + Col133 + + + + Col133 + + 11 + + + + + + + Col134 + 134 + + 4 + 11 + 0 + NotNullable + + Col134 + + + + Col134 + + 11 + + + + + + + Col135 + 135 + + 4 + 11 + 0 + NotNullable + + Col135 + + + + Col135 + + 11 + + + + + + + Col136 + 136 + + 4 + 11 + 0 + NotNullable + + Col136 + + + + Col136 + + 11 + + + + + + + Col137 + 137 + + 4 + 11 + 0 + NotNullable + + Col137 + + + + Col137 + + 11 + + + + + + + Col138 + 138 + + 4 + 11 + 0 + NotNullable + + Col138 + + + + Col138 + + 11 + + + + + + + Col139 + 139 + + 4 + 11 + 0 + NotNullable + + Col139 + + + + Col139 + + 11 + + + + + + + Col140 + 140 + + 4 + 11 + 0 + NotNullable + + Col140 + + + + Col140 + + 11 + + + + + + + Col141 + 141 + + 4 + 11 + 0 + NotNullable + + Col141 + + + + Col141 + + 11 + + + + + + + Col142 + 142 + + 4 + 11 + 0 + NotNullable + + Col142 + + + + Col142 + + 11 + + + + + + + Col143 + 143 + + 4 + 11 + 0 + NotNullable + + Col143 + + + + Col143 + + 11 + + + + + + + Col144 + 144 + + 4 + 11 + 0 + NotNullable + + Col144 + + + + Col144 + + 11 + + + + + + + Col145 + 145 + + 4 + 11 + 0 + NotNullable + + Col145 + + + + Col145 + + 11 + + + + + + + Col146 + 146 + + 4 + 11 + 0 + NotNullable + + Col146 + + + + Col146 + + 11 + + + + + + + Col147 + 147 + + 4 + 11 + 0 + NotNullable + + Col147 + + + + Col147 + + 11 + + + + + + + Col148 + 148 + + 4 + 11 + 0 + NotNullable + + Col148 + + + + Col148 + + 11 + + + + + + + Col149 + 149 + + 4 + 11 + 0 + NotNullable + + Col149 + + + + Col149 + + 11 + + + + + + + Col150 + 150 + + 4 + 11 + 0 + NotNullable + + Col150 + + + + Col150 + + 11 + + + + + + + Col151 + 151 + + 4 + 11 + 0 + NotNullable + + Col151 + + + + Col151 + + 11 + + + + + + + Col152 + 152 + + 4 + 11 + 0 + NotNullable + + Col152 + + + + Col152 + + 11 + + + + + + + Col153 + 153 + + 4 + 11 + 0 + NotNullable + + Col153 + + + + Col153 + + 11 + + + + + + + Col154 + 154 + + 4 + 11 + 0 + NotNullable + + Col154 + + + + Col154 + + 11 + + + + + + + Col155 + 155 + + 4 + 11 + 0 + NotNullable + + Col155 + + + + Col155 + + 11 + + + + + + + Col156 + 156 + + 4 + 11 + 0 + NotNullable + + Col156 + + + + Col156 + + 11 + + + + + + + Col157 + 157 + + 4 + 11 + 0 + NotNullable + + Col157 + + + + Col157 + + 11 + + + + + + + Col158 + 158 + + 4 + 11 + 0 + NotNullable + + Col158 + + + + Col158 + + 11 + + + + + + + Col159 + 159 + + 4 + 11 + 0 + NotNullable + + Col159 + + + + Col159 + + 11 + + + + + + + Col160 + 160 + + 4 + 11 + 0 + NotNullable + + Col160 + + + + Col160 + + 11 + + + + + + + Col161 + 161 + + 4 + 11 + 0 + NotNullable + + Col161 + + + + Col161 + + 11 + + + + + + + Col162 + 162 + + 4 + 11 + 0 + NotNullable + + Col162 + + + + Col162 + + 11 + + + + + + + Col163 + 163 + + 4 + 11 + 0 + NotNullable + + Col163 + + + + Col163 + + 11 + + + + + + + Col164 + 164 + + 4 + 11 + 0 + NotNullable + + Col164 + + + + Col164 + + 11 + + + + + + + Col165 + 165 + + 4 + 11 + 0 + NotNullable + + Col165 + + + + Col165 + + 11 + + + + + + + Col166 + 166 + + 4 + 11 + 0 + NotNullable + + Col166 + + + + Col166 + + 11 + + + + + + + Col167 + 167 + + 4 + 11 + 0 + NotNullable + + Col167 + + + + Col167 + + 11 + + + + + + + Col168 + 168 + + 4 + 11 + 0 + NotNullable + + Col168 + + + + Col168 + + 11 + + + + + + + Col169 + 169 + + 4 + 11 + 0 + NotNullable + + Col169 + + + + Col169 + + 11 + + + + + + + Col170 + 170 + + 4 + 11 + 0 + NotNullable + + Col170 + + + + Col170 + + 11 + + + + + + + Col171 + 171 + + 4 + 11 + 0 + NotNullable + + Col171 + + + + Col171 + + 11 + + + + + + + Col172 + 172 + + 4 + 11 + 0 + NotNullable + + Col172 + + + + Col172 + + 11 + + + + + + + Col173 + 173 + + 4 + 11 + 0 + NotNullable + + Col173 + + + + Col173 + + 11 + + + + + + + Col174 + 174 + + 4 + 11 + 0 + NotNullable + + Col174 + + + + Col174 + + 11 + + + + + + + Col175 + 175 + + 4 + 11 + 0 + NotNullable + + Col175 + + + + Col175 + + 11 + + + + + + + Col176 + 176 + + 4 + 11 + 0 + NotNullable + + Col176 + + + + Col176 + + 11 + + + + + + + Col177 + 177 + + 4 + 11 + 0 + NotNullable + + Col177 + + + + Col177 + + 11 + + + + + + + Col178 + 178 + + 4 + 11 + 0 + NotNullable + + Col178 + + + + Col178 + + 11 + + + + + + + Col179 + 179 + + 4 + 11 + 0 + NotNullable + + Col179 + + + + Col179 + + 11 + + + + + + + Col180 + 180 + + 4 + 11 + 0 + NotNullable + + Col180 + + + + Col180 + + 11 + + + + + + + Col181 + 181 + + 4 + 11 + 0 + NotNullable + + Col181 + + + + Col181 + + 11 + + + + + + + Col182 + 182 + + 4 + 11 + 0 + NotNullable + + Col182 + + + + Col182 + + 11 + + + + + + + Col183 + 183 + + 4 + 11 + 0 + NotNullable + + Col183 + + + + Col183 + + 11 + + + + + + + Col184 + 184 + + 4 + 11 + 0 + NotNullable + + Col184 + + + + Col184 + + 11 + + + + + + + Col185 + 185 + + 4 + 11 + 0 + NotNullable + + Col185 + + + + Col185 + + 11 + + + + + + + Col186 + 186 + + 4 + 11 + 0 + NotNullable + + Col186 + + + + Col186 + + 11 + + + + + + + Col187 + 187 + + 4 + 11 + 0 + NotNullable + + Col187 + + + + Col187 + + 11 + + + + + + + Col188 + 188 + + 4 + 11 + 0 + NotNullable + + Col188 + + + + Col188 + + 11 + + + + + + + Col189 + 189 + + 4 + 11 + 0 + NotNullable + + Col189 + + + + Col189 + + 11 + + + + + + + Col190 + 190 + + 4 + 11 + 0 + NotNullable + + Col190 + + + + Col190 + + 11 + + + + + + + Col191 + 191 + + 4 + 11 + 0 + NotNullable + + Col191 + + + + Col191 + + 11 + + + + + + + Col192 + 192 + + 4 + 11 + 0 + NotNullable + + Col192 + + + + Col192 + + 11 + + + + + + + Col193 + 193 + + 4 + 11 + 0 + NotNullable + + Col193 + + + + Col193 + + 11 + + + + + + + Col194 + 194 + + 4 + 11 + 0 + NotNullable + + Col194 + + + + Col194 + + 11 + + + + + + + Col195 + 195 + + 4 + 11 + 0 + NotNullable + + Col195 + + + + Col195 + + 11 + + + + + + + Col196 + 196 + + 4 + 11 + 0 + NotNullable + + Col196 + + + + Col196 + + 11 + + + + + + + Col197 + 197 + + 4 + 11 + 0 + NotNullable + + Col197 + + + + Col197 + + 11 + + + + + + + Col198 + 198 + + 4 + 11 + 0 + NotNullable + + Col198 + + + + Col198 + + 11 + + + + + + + Col199 + 199 + + 4 + 11 + 0 + NotNullable + + Col199 + + + + Col199 + + 11 + + + + + + + Col200 + 200 + + 4 + 11 + 0 + NotNullable + + Col200 + + + + Col200 + + 11 + + + + + + + Col201 + 201 + + 4 + 11 + 0 + NotNullable + + Col201 + + + + Col201 + + 11 + + + + + + + Col202 + 202 + + 4 + 11 + 0 + NotNullable + + Col202 + + + + Col202 + + 11 + + + + + + + Col203 + 203 + + 4 + 11 + 0 + NotNullable + + Col203 + + + + Col203 + + 11 + + + + + + + Col204 + 204 + + 4 + 11 + 0 + NotNullable + + Col204 + + + + Col204 + + 11 + + + + + + + Col205 + 205 + + 4 + 11 + 0 + NotNullable + + Col205 + + + + Col205 + + 11 + + + + + + + Col206 + 206 + + 4 + 11 + 0 + NotNullable + + Col206 + + + + Col206 + + 11 + + + + + + + Col207 + 207 + + 4 + 11 + 0 + NotNullable + + Col207 + + + + Col207 + + 11 + + + + + + + Col208 + 208 + + 4 + 11 + 0 + NotNullable + + Col208 + + + + Col208 + + 11 + + + + + + + Col209 + 209 + + 4 + 11 + 0 + NotNullable + + Col209 + + + + Col209 + + 11 + + + + + + + Col210 + 210 + + 4 + 11 + 0 + NotNullable + + Col210 + + + + Col210 + + 11 + + + + + + + Col211 + 211 + + 4 + 11 + 0 + NotNullable + + Col211 + + + + Col211 + + 11 + + + + + + + Col212 + 212 + + 4 + 11 + 0 + NotNullable + + Col212 + + + + Col212 + + 11 + + + + + + + Col213 + 213 + + 4 + 11 + 0 + NotNullable + + Col213 + + + + Col213 + + 11 + + + + + + + Col214 + 214 + + 4 + 11 + 0 + NotNullable + + Col214 + + + + Col214 + + 11 + + + + + + + Col215 + 215 + + 4 + 11 + 0 + NotNullable + + Col215 + + + + Col215 + + 11 + + + + + + + Col216 + 216 + + 4 + 11 + 0 + NotNullable + + Col216 + + + + Col216 + + 11 + + + + + + + Col217 + 217 + + 4 + 11 + 0 + NotNullable + + Col217 + + + + Col217 + + 11 + + + + + + + Col218 + 218 + + 4 + 11 + 0 + NotNullable + + Col218 + + + + Col218 + + 11 + + + + + + + Col219 + 219 + + 4 + 11 + 0 + NotNullable + + Col219 + + + + Col219 + + 11 + + + + + + + Col220 + 220 + + 4 + 11 + 0 + NotNullable + + Col220 + + + + Col220 + + 11 + + + + + + + Col221 + 221 + + 4 + 11 + 0 + NotNullable + + Col221 + + + + Col221 + + 11 + + + + + + + Col222 + 222 + + 4 + 11 + 0 + NotNullable + + Col222 + + + + Col222 + + 11 + + + + + + + Col223 + 223 + + 4 + 11 + 0 + NotNullable + + Col223 + + + + Col223 + + 11 + + + + + + + Col224 + 224 + + 4 + 11 + 0 + NotNullable + + Col224 + + + + Col224 + + 11 + + + + + + + Col225 + 225 + + 4 + 11 + 0 + NotNullable + + Col225 + + + + Col225 + + 11 + + + + + + + Col226 + 226 + + 4 + 11 + 0 + NotNullable + + Col226 + + + + Col226 + + 11 + + + + + + + Col227 + 227 + + 4 + 11 + 0 + NotNullable + + Col227 + + + + Col227 + + 11 + + + + + + + Col228 + 228 + + 4 + 11 + 0 + NotNullable + + Col228 + + + + Col228 + + 11 + + + + + + + Col229 + 229 + + 4 + 11 + 0 + NotNullable + + Col229 + + + + Col229 + + 11 + + + + + + + Col230 + 230 + + 4 + 11 + 0 + NotNullable + + Col230 + + + + Col230 + + 11 + + + + + + + Col231 + 231 + + 4 + 11 + 0 + NotNullable + + Col231 + + + + Col231 + + 11 + + + + + + + Col232 + 232 + + 4 + 11 + 0 + NotNullable + + Col232 + + + + Col232 + + 11 + + + + + + + Col233 + 233 + + 4 + 11 + 0 + NotNullable + + Col233 + + + + Col233 + + 11 + + + + + + + Col234 + 234 + + 4 + 11 + 0 + NotNullable + + Col234 + + + + Col234 + + 11 + + + + + + + Col235 + 235 + + 4 + 11 + 0 + NotNullable + + Col235 + + + + Col235 + + 11 + + + + + + + Col236 + 236 + + 4 + 11 + 0 + NotNullable + + Col236 + + + + Col236 + + 11 + + + + + + + Col237 + 237 + + 4 + 11 + 0 + NotNullable + + Col237 + + + + Col237 + + 11 + + + + + + + Col238 + 238 + + 4 + 11 + 0 + NotNullable + + Col238 + + + + Col238 + + 11 + + + + + + + Col239 + 239 + + 4 + 11 + 0 + NotNullable + + Col239 + + + + Col239 + + 11 + + + + + + + Col240 + 240 + + 4 + 11 + 0 + NotNullable + + Col240 + + + + Col240 + + 11 + + + + + + + Col241 + 241 + + 4 + 11 + 0 + NotNullable + + Col241 + + + + Col241 + + 11 + + + + + + + Col242 + 242 + + 4 + 11 + 0 + NotNullable + + Col242 + + + + Col242 + + 11 + + + + + + + Col243 + 243 + + 4 + 11 + 0 + NotNullable + + Col243 + + + + Col243 + + 11 + + + + + + + Col244 + 244 + + 4 + 11 + 0 + NotNullable + + Col244 + + + + Col244 + + 11 + + + + + + + Col245 + 245 + + 4 + 11 + 0 + NotNullable + + Col245 + + + + Col245 + + 11 + + + + + + + Col246 + 246 + + 4 + 11 + 0 + NotNullable + + Col246 + + + + Col246 + + 11 + + + + + + + Col247 + 247 + + 4 + 11 + 0 + NotNullable + + Col247 + + + + Col247 + + 11 + + + + + + + Col248 + 248 + + 4 + 11 + 0 + NotNullable + + Col248 + + + + Col248 + + 11 + + + + + + + Col249 + 249 + + 4 + 11 + 0 + NotNullable + + Col249 + + + + Col249 + + 11 + + + + + + + Col250 + 250 + + 4 + 11 + 0 + NotNullable + + Col250 + + + + Col250 + + 11 + + + + + + + Col251 + 251 + + 4 + 11 + 0 + NotNullable + + Col251 + + + + Col251 + + 11 + + + + + + + Col252 + 252 + + 4 + 11 + 0 + NotNullable + + Col252 + + + + Col252 + + 11 + + + + + + + Col253 + 253 + + 4 + 11 + 0 + NotNullable + + Col253 + + + + Col253 + + 11 + + + + + + + Col254 + 254 + + 4 + 11 + 0 + NotNullable + + Col254 + + + + Col254 + + 11 + + + + + + + Col255 + 255 + + 4 + 11 + 0 + NotNullable + + Col255 + + + + Col255 + + 11 + + + + + + + Col256 + 256 + + 4 + 11 + 0 + NotNullable + + Col256 + + + + Col256 + + 11 + + + + + + + Col257 + 257 + + 4 + 11 + 0 + NotNullable + + Col257 + + + + Col257 + + 11 + + + + + + + Col258 + 258 + + 4 + 11 + 0 + NotNullable + + Col258 + + + + Col258 + + 11 + + + + + + + Col259 + 259 + + 4 + 11 + 0 + NotNullable + + Col259 + + + + Col259 + + 11 + + + + + + + Col260 + 260 + + 4 + 11 + 0 + NotNullable + + Col260 + + + + Col260 + + 11 + + + + + + + Col261 + 261 + + 4 + 11 + 0 + NotNullable + + Col261 + + + + Col261 + + 11 + + + + + + + Col262 + 262 + + 4 + 11 + 0 + NotNullable + + Col262 + + + + Col262 + + 11 + + + + + + + Col263 + 263 + + 4 + 11 + 0 + NotNullable + + Col263 + + + + Col263 + + 11 + + + + + + + Col264 + 264 + + 4 + 11 + 0 + NotNullable + + Col264 + + + + Col264 + + 11 + + + + + + + Col265 + 265 + + 4 + 11 + 0 + NotNullable + + Col265 + + + + Col265 + + 11 + + + + + + + Col266 + 266 + + 4 + 11 + 0 + NotNullable + + Col266 + + + + Col266 + + 11 + + + + + + + Col267 + 267 + + 4 + 11 + 0 + NotNullable + + Col267 + + + + Col267 + + 11 + + + + + + + Col268 + 268 + + 4 + 11 + 0 + NotNullable + + Col268 + + + + Col268 + + 11 + + + + + + + Col269 + 269 + + 4 + 11 + 0 + NotNullable + + Col269 + + + + Col269 + + 11 + + + + + + + Col270 + 270 + + 4 + 11 + 0 + NotNullable + + Col270 + + + + Col270 + + 11 + + + + + + + Col271 + 271 + + 4 + 11 + 0 + NotNullable + + Col271 + + + + Col271 + + 11 + + + + + + + Col272 + 272 + + 4 + 11 + 0 + NotNullable + + Col272 + + + + Col272 + + 11 + + + + + + + Col273 + 273 + + 4 + 11 + 0 + NotNullable + + Col273 + + + + Col273 + + 11 + + + + + + + Col274 + 274 + + 4 + 11 + 0 + NotNullable + + Col274 + + + + Col274 + + 11 + + + + + + + Col275 + 275 + + 4 + 11 + 0 + NotNullable + + Col275 + + + + Col275 + + 11 + + + + + + + Col276 + 276 + + 4 + 11 + 0 + NotNullable + + Col276 + + + + Col276 + + 11 + + + + + + + Col277 + 277 + + 4 + 11 + 0 + NotNullable + + Col277 + + + + Col277 + + 11 + + + + + + + Col278 + 278 + + 4 + 11 + 0 + NotNullable + + Col278 + + + + Col278 + + 11 + + + + + + + Col279 + 279 + + 4 + 11 + 0 + NotNullable + + Col279 + + + + Col279 + + 11 + + + + + + + Col280 + 280 + + 4 + 11 + 0 + NotNullable + + Col280 + + + + Col280 + + 11 + + + + + + + Col281 + 281 + + 4 + 11 + 0 + NotNullable + + Col281 + + + + Col281 + + 11 + + + + + + + Col282 + 282 + + 4 + 11 + 0 + NotNullable + + Col282 + + + + Col282 + + 11 + + + + + + + Col283 + 283 + + 4 + 11 + 0 + NotNullable + + Col283 + + + + Col283 + + 11 + + + + + + + Col284 + 284 + + 4 + 11 + 0 + NotNullable + + Col284 + + + + Col284 + + 11 + + + + + + + Col285 + 285 + + 4 + 11 + 0 + NotNullable + + Col285 + + + + Col285 + + 11 + + + + + + + Col286 + 286 + + 4 + 11 + 0 + NotNullable + + Col286 + + + + Col286 + + 11 + + + + + + + Col287 + 287 + + 4 + 11 + 0 + NotNullable + + Col287 + + + + Col287 + + 11 + + + + + + + Col288 + 288 + + 4 + 11 + 0 + NotNullable + + Col288 + + + + Col288 + + 11 + + + + + + + Col289 + 289 + + 4 + 11 + 0 + NotNullable + + Col289 + + + + Col289 + + 11 + + + + + + + Col290 + 290 + + 4 + 11 + 0 + NotNullable + + Col290 + + + + Col290 + + 11 + + + + + + + Col291 + 291 + + 4 + 11 + 0 + NotNullable + + Col291 + + + + Col291 + + 11 + + + + + + + Col292 + 292 + + 4 + 11 + 0 + NotNullable + + Col292 + + + + Col292 + + 11 + + + + + + + Col293 + 293 + + 4 + 11 + 0 + NotNullable + + Col293 + + + + Col293 + + 11 + + + + + + + Col294 + 294 + + 4 + 11 + 0 + NotNullable + + Col294 + + + + Col294 + + 11 + + + + + + + Col295 + 295 + + 4 + 11 + 0 + NotNullable + + Col295 + + + + Col295 + + 11 + + + + + + + Col296 + 296 + + 4 + 11 + 0 + NotNullable + + Col296 + + + + Col296 + + 11 + + + + + + + Col297 + 297 + + 4 + 11 + 0 + NotNullable + + Col297 + + + + Col297 + + 11 + + + + + + + Col298 + 298 + + 4 + 11 + 0 + NotNullable + + Col298 + + + + Col298 + + 11 + + + + + + + Col299 + 299 + + 4 + 11 + 0 + NotNullable + + Col299 + + + + Col299 + + 11 + + + + + + + Col300 + 300 + + 4 + 11 + 0 + NotNullable + + Col300 + + + + Col300 + + 11 + + + + + + + Col301 + 301 + + 4 + 11 + 0 + NotNullable + + Col301 + + + + Col301 + + 11 + + + + + + + Col302 + 302 + + 4 + 11 + 0 + NotNullable + + Col302 + + + + Col302 + + 11 + + + + + + + Col303 + 303 + + 4 + 11 + 0 + NotNullable + + Col303 + + + + Col303 + + 11 + + + + + + + Col304 + 304 + + 4 + 11 + 0 + NotNullable + + Col304 + + + + Col304 + + 11 + + + + + + + Col305 + 305 + + 4 + 11 + 0 + NotNullable + + Col305 + + + + Col305 + + 11 + + + + + + + Col306 + 306 + + 4 + 11 + 0 + NotNullable + + Col306 + + + + Col306 + + 11 + + + + + + + Col307 + 307 + + 4 + 11 + 0 + NotNullable + + Col307 + + + + Col307 + + 11 + + + + + + + Col308 + 308 + + 4 + 11 + 0 + NotNullable + + Col308 + + + + Col308 + + 11 + + + + + + + Col309 + 309 + + 4 + 11 + 0 + NotNullable + + Col309 + + + + Col309 + + 11 + + + + + + + Col310 + 310 + + 4 + 11 + 0 + NotNullable + + Col310 + + + + Col310 + + 11 + + + + + + + Col311 + 311 + + 4 + 11 + 0 + NotNullable + + Col311 + + + + Col311 + + 11 + + + + + + + Col312 + 312 + + 4 + 11 + 0 + NotNullable + + Col312 + + + + Col312 + + 11 + + + + + + + Col313 + 313 + + 4 + 11 + 0 + NotNullable + + Col313 + + + + Col313 + + 11 + + + + + + + Col314 + 314 + + 4 + 11 + 0 + NotNullable + + Col314 + + + + Col314 + + 11 + + + + + + + Col315 + 315 + + 4 + 11 + 0 + NotNullable + + Col315 + + + + Col315 + + 11 + + + + + + + Col316 + 316 + + 4 + 11 + 0 + NotNullable + + Col316 + + + + Col316 + + 11 + + + + + + + Col317 + 317 + + 4 + 11 + 0 + NotNullable + + Col317 + + + + Col317 + + 11 + + + + + + + Col318 + 318 + + 4 + 11 + 0 + NotNullable + + Col318 + + + + Col318 + + 11 + + + + + + + Col319 + 319 + + 4 + 11 + 0 + NotNullable + + Col319 + + + + Col319 + + 11 + + + + + + + Col320 + 320 + + 4 + 11 + 0 + NotNullable + + Col320 + + + + Col320 + + 11 + + + + + + + Col321 + 321 + + 4 + 11 + 0 + NotNullable + + Col321 + + + + Col321 + + 11 + + + + + + + Col322 + 322 + + 4 + 11 + 0 + NotNullable + + Col322 + + + + Col322 + + 11 + + + + + + + Col323 + 323 + + 4 + 11 + 0 + NotNullable + + Col323 + + + + Col323 + + 11 + + + + + + + Col324 + 324 + + 4 + 11 + 0 + NotNullable + + Col324 + + + + Col324 + + 11 + + + + + + + Col325 + 325 + + 4 + 11 + 0 + NotNullable + + Col325 + + + + Col325 + + 11 + + + + + + + Col326 + 326 + + 4 + 11 + 0 + NotNullable + + Col326 + + + + Col326 + + 11 + + + + + + + Col327 + 327 + + 4 + 11 + 0 + NotNullable + + Col327 + + + + Col327 + + 11 + + + + + + + Col328 + 328 + + 4 + 11 + 0 + NotNullable + + Col328 + + + + Col328 + + 11 + + + + + + + Col329 + 329 + + 4 + 11 + 0 + NotNullable + + Col329 + + + + Col329 + + 11 + + + + + + + Col330 + 330 + + 4 + 11 + 0 + NotNullable + + Col330 + + + + Col330 + + 11 + + + + + + + Col331 + 331 + + 4 + 11 + 0 + NotNullable + + Col331 + + + + Col331 + + 11 + + + + + + + Col332 + 332 + + 4 + 11 + 0 + NotNullable + + Col332 + + + + Col332 + + 11 + + + + + + + Col333 + 333 + + 4 + 11 + 0 + NotNullable + + Col333 + + + + Col333 + + 11 + + + + + + + Col334 + 334 + + 4 + 11 + 0 + NotNullable + + Col334 + + + + Col334 + + 11 + + + + + + + Col335 + 335 + + 4 + 11 + 0 + NotNullable + + Col335 + + + + Col335 + + 11 + + + + + + + Col336 + 336 + + 4 + 11 + 0 + NotNullable + + Col336 + + + + Col336 + + 11 + + + + + + + Col337 + 337 + + 4 + 11 + 0 + NotNullable + + Col337 + + + + Col337 + + 11 + + + + + + + Col338 + 338 + + 4 + 11 + 0 + NotNullable + + Col338 + + + + Col338 + + 11 + + + + + + + Col339 + 339 + + 4 + 11 + 0 + NotNullable + + Col339 + + + + Col339 + + 11 + + + + + + + Col340 + 340 + + 4 + 11 + 0 + NotNullable + + Col340 + + + + Col340 + + 11 + + + + + + + Col341 + 341 + + 4 + 11 + 0 + NotNullable + + Col341 + + + + Col341 + + 11 + + + + + + + Col342 + 342 + + 4 + 11 + 0 + NotNullable + + Col342 + + + + Col342 + + 11 + + + + + + + Col343 + 343 + + 4 + 11 + 0 + NotNullable + + Col343 + + + + Col343 + + 11 + + + + + + + Col344 + 344 + + 4 + 11 + 0 + NotNullable + + Col344 + + + + Col344 + + 11 + + + + + + + Col345 + 345 + + 4 + 11 + 0 + NotNullable + + Col345 + + + + Col345 + + 11 + + + + + + + Col346 + 346 + + 4 + 11 + 0 + NotNullable + + Col346 + + + + Col346 + + 11 + + + + + + + Col347 + 347 + + 4 + 11 + 0 + NotNullable + + Col347 + + + + Col347 + + 11 + + + + + + + Col348 + 348 + + 4 + 11 + 0 + NotNullable + + Col348 + + + + Col348 + + 11 + + + + + + + Col349 + 349 + + 4 + 11 + 0 + NotNullable + + Col349 + + + + Col349 + + 11 + + + + + + + Col350 + 350 + + 4 + 11 + 0 + NotNullable + + Col350 + + + + Col350 + + 11 + + + + + + + Col351 + 351 + + 4 + 11 + 0 + NotNullable + + Col351 + + + + Col351 + + 11 + + + + + + + Col352 + 352 + + 4 + 11 + 0 + NotNullable + + Col352 + + + + Col352 + + 11 + + + + + + + Col353 + 353 + + 4 + 11 + 0 + NotNullable + + Col353 + + + + Col353 + + 11 + + + + + + + Col354 + 354 + + 4 + 11 + 0 + NotNullable + + Col354 + + + + Col354 + + 11 + + + + + + + Col355 + 355 + + 4 + 11 + 0 + NotNullable + + Col355 + + + + Col355 + + 11 + + + + + + + Col356 + 356 + + 4 + 11 + 0 + NotNullable + + Col356 + + + + Col356 + + 11 + + + + + + + Col357 + 357 + + 4 + 11 + 0 + NotNullable + + Col357 + + + + Col357 + + 11 + + + + + + + Col358 + 358 + + 4 + 11 + 0 + NotNullable + + Col358 + + + + Col358 + + 11 + + + + + + + Col359 + 359 + + 4 + 11 + 0 + NotNullable + + Col359 + + + + Col359 + + 11 + + + + + + + Col360 + 360 + + 4 + 11 + 0 + NotNullable + + Col360 + + + + Col360 + + 11 + + + + + + + Col361 + 361 + + 4 + 11 + 0 + NotNullable + + Col361 + + + + Col361 + + 11 + + + + + + + Col362 + 362 + + 4 + 11 + 0 + NotNullable + + Col362 + + + + Col362 + + 11 + + + + + + + Col363 + 363 + + 4 + 11 + 0 + NotNullable + + Col363 + + + + Col363 + + 11 + + + + + + + Col364 + 364 + + 4 + 11 + 0 + NotNullable + + Col364 + + + + Col364 + + 11 + + + + + + + Col365 + 365 + + 4 + 11 + 0 + NotNullable + + Col365 + + + + Col365 + + 11 + + + + + + + Col366 + 366 + + 4 + 11 + 0 + NotNullable + + Col366 + + + + Col366 + + 11 + + + + + + + Col367 + 367 + + 4 + 11 + 0 + NotNullable + + Col367 + + + + Col367 + + 11 + + + + + + + Col368 + 368 + + 4 + 11 + 0 + NotNullable + + Col368 + + + + Col368 + + 11 + + + + + + + Col369 + 369 + + 4 + 11 + 0 + NotNullable + + Col369 + + + + Col369 + + 11 + + + + + + + Col370 + 370 + + 4 + 11 + 0 + NotNullable + + Col370 + + + + Col370 + + 11 + + + + + + + Col371 + 371 + + 4 + 11 + 0 + NotNullable + + Col371 + + + + Col371 + + 11 + + + + + + + Col372 + 372 + + 4 + 11 + 0 + NotNullable + + Col372 + + + + Col372 + + 11 + + + + + + + Col373 + 373 + + 4 + 11 + 0 + NotNullable + + Col373 + + + + Col373 + + 11 + + + + + + + Col374 + 374 + + 4 + 11 + 0 + NotNullable + + Col374 + + + + Col374 + + 11 + + + + + + + Col375 + 375 + + 4 + 11 + 0 + NotNullable + + Col375 + + + + Col375 + + 11 + + + + + + + Col376 + 376 + + 4 + 11 + 0 + NotNullable + + Col376 + + + + Col376 + + 11 + + + + + + + Col377 + 377 + + 4 + 11 + 0 + NotNullable + + Col377 + + + + Col377 + + 11 + + + + + + + Col378 + 378 + + 4 + 11 + 0 + NotNullable + + Col378 + + + + Col378 + + 11 + + + + + + + Col379 + 379 + + 4 + 11 + 0 + NotNullable + + Col379 + + + + Col379 + + 11 + + + + + + + Col380 + 380 + + 4 + 11 + 0 + NotNullable + + Col380 + + + + Col380 + + 11 + + + + + + + Col381 + 381 + + 4 + 11 + 0 + NotNullable + + Col381 + + + + Col381 + + 11 + + + + + + + Col382 + 382 + + 4 + 11 + 0 + NotNullable + + Col382 + + + + Col382 + + 11 + + + + + + + Col383 + 383 + + 4 + 11 + 0 + NotNullable + + Col383 + + + + Col383 + + 11 + + + + + + + Col384 + 384 + + 4 + 11 + 0 + NotNullable + + Col384 + + + + Col384 + + 11 + + + + + + + Col385 + 385 + + 4 + 11 + 0 + NotNullable + + Col385 + + + + Col385 + + 11 + + + + + + + Col386 + 386 + + 4 + 11 + 0 + NotNullable + + Col386 + + + + Col386 + + 11 + + + + + + + Col387 + 387 + + 4 + 11 + 0 + NotNullable + + Col387 + + + + Col387 + + 11 + + + + + + + Col388 + 388 + + 4 + 11 + 0 + NotNullable + + Col388 + + + + Col388 + + 11 + + + + + + + Col389 + 389 + + 4 + 11 + 0 + NotNullable + + Col389 + + + + Col389 + + 11 + + + + + + + Col390 + 390 + + 4 + 11 + 0 + NotNullable + + Col390 + + + + Col390 + + 11 + + + + + + + Col391 + 391 + + 4 + 11 + 0 + NotNullable + + Col391 + + + + Col391 + + 11 + + + + + + + Col392 + 392 + + 4 + 11 + 0 + NotNullable + + Col392 + + + + Col392 + + 11 + + + + + + + Col393 + 393 + + 4 + 11 + 0 + NotNullable + + Col393 + + + + Col393 + + 11 + + + + + + + Col394 + 394 + + 4 + 11 + 0 + NotNullable + + Col394 + + + + Col394 + + 11 + + + + + + + Col395 + 395 + + 4 + 11 + 0 + NotNullable + + Col395 + + + + Col395 + + 11 + + + + + + + Col396 + 396 + + 4 + 11 + 0 + NotNullable + + Col396 + + + + Col396 + + 11 + + + + + + + Col397 + 397 + + 4 + 11 + 0 + NotNullable + + Col397 + + + + Col397 + + 11 + + + + + + + Col398 + 398 + + 4 + 11 + 0 + NotNullable + + Col398 + + + + Col398 + + 11 + + + + + + + Col399 + 399 + + 4 + 11 + 0 + NotNullable + + Col399 + + + + Col399 + + 11 + + + + + + + Col400 + 400 + + 4 + 11 + 0 + NotNullable + + Col400 + + + + Col400 + + 11 + + + + + + + Col401 + 401 + + 4 + 11 + 0 + NotNullable + + Col401 + + + + Col401 + + 11 + + + + + + + Col402 + 402 + + 4 + 11 + 0 + NotNullable + + Col402 + + + + Col402 + + 11 + + + + + + + Col403 + 403 + + 4 + 11 + 0 + NotNullable + + Col403 + + + + Col403 + + 11 + + + + + + + Col404 + 404 + + 4 + 11 + 0 + NotNullable + + Col404 + + + + Col404 + + 11 + + + + + + + Col405 + 405 + + 4 + 11 + 0 + NotNullable + + Col405 + + + + Col405 + + 11 + + + + + + + Col406 + 406 + + 4 + 11 + 0 + NotNullable + + Col406 + + + + Col406 + + 11 + + + + + + + Col407 + 407 + + 4 + 11 + 0 + NotNullable + + Col407 + + + + Col407 + + 11 + + + + + + + Col408 + 408 + + 4 + 11 + 0 + NotNullable + + Col408 + + + + Col408 + + 11 + + + + + + + Col409 + 409 + + 4 + 11 + 0 + NotNullable + + Col409 + + + + Col409 + + 11 + + + + + + + Col410 + 410 + + 4 + 11 + 0 + NotNullable + + Col410 + + + + Col410 + + 11 + + + + + + + Col411 + 411 + + 4 + 11 + 0 + NotNullable + + Col411 + + + + Col411 + + 11 + + + + + + + Col412 + 412 + + 4 + 11 + 0 + NotNullable + + Col412 + + + + Col412 + + 11 + + + + + + + Col413 + 413 + + 4 + 11 + 0 + NotNullable + + Col413 + + + + Col413 + + 11 + + + + + + + Col414 + 414 + + 4 + 11 + 0 + NotNullable + + Col414 + + + + Col414 + + 11 + + + + + + + Col415 + 415 + + 4 + 11 + 0 + NotNullable + + Col415 + + + + Col415 + + 11 + + + + + + + Col416 + 416 + + 4 + 11 + 0 + NotNullable + + Col416 + + + + Col416 + + 11 + + + + + + + Col417 + 417 + + 4 + 11 + 0 + NotNullable + + Col417 + + + + Col417 + + 11 + + + + + + + Col418 + 418 + + 4 + 11 + 0 + NotNullable + + Col418 + + + + Col418 + + 11 + + + + + + + Col419 + 419 + + 4 + 11 + 0 + NotNullable + + Col419 + + + + Col419 + + 11 + + + + + + + Col420 + 420 + + 4 + 11 + 0 + NotNullable + + Col420 + + + + Col420 + + 11 + + + + + + + Col421 + 421 + + 4 + 11 + 0 + NotNullable + + Col421 + + + + Col421 + + 11 + + + + + + + Col422 + 422 + + 4 + 11 + 0 + NotNullable + + Col422 + + + + Col422 + + 11 + + + + + + + Col423 + 423 + + 4 + 11 + 0 + NotNullable + + Col423 + + + + Col423 + + 11 + + + + + + + Col424 + 424 + + 4 + 11 + 0 + NotNullable + + Col424 + + + + Col424 + + 11 + + + + + + + Col425 + 425 + + 4 + 11 + 0 + NotNullable + + Col425 + + + + Col425 + + 11 + + + + + + + Col426 + 426 + + 4 + 11 + 0 + NotNullable + + Col426 + + + + Col426 + + 11 + + + + + + + Col427 + 427 + + 4 + 11 + 0 + NotNullable + + Col427 + + + + Col427 + + 11 + + + + + + + Col428 + 428 + + 4 + 11 + 0 + NotNullable + + Col428 + + + + Col428 + + 11 + + + + + + + Col429 + 429 + + 4 + 11 + 0 + NotNullable + + Col429 + + + + Col429 + + 11 + + + + + + + Col430 + 430 + + 4 + 11 + 0 + NotNullable + + Col430 + + + + Col430 + + 11 + + + + + + + Col431 + 431 + + 4 + 11 + 0 + NotNullable + + Col431 + + + + Col431 + + 11 + + + + + + + Col432 + 432 + + 4 + 11 + 0 + NotNullable + + Col432 + + + + Col432 + + 11 + + + + + + + Col433 + 433 + + 4 + 11 + 0 + NotNullable + + Col433 + + + + Col433 + + 11 + + + + + + + Col434 + 434 + + 4 + 11 + 0 + NotNullable + + Col434 + + + + Col434 + + 11 + + + + + + + Col435 + 435 + + 4 + 11 + 0 + NotNullable + + Col435 + + + + Col435 + + 11 + + + + + + + Col436 + 436 + + 4 + 11 + 0 + NotNullable + + Col436 + + + + Col436 + + 11 + + + + + + + Col437 + 437 + + 4 + 11 + 0 + NotNullable + + Col437 + + + + Col437 + + 11 + + + + + + + Col438 + 438 + + 4 + 11 + 0 + NotNullable + + Col438 + + + + Col438 + + 11 + + + + + + + Col439 + 439 + + 4 + 11 + 0 + NotNullable + + Col439 + + + + Col439 + + 11 + + + + + + + Col440 + 440 + + 4 + 11 + 0 + NotNullable + + Col440 + + + + Col440 + + 11 + + + + + + + Col441 + 441 + + 4 + 11 + 0 + NotNullable + + Col441 + + + + Col441 + + 11 + + + + + + + Col442 + 442 + + 4 + 11 + 0 + NotNullable + + Col442 + + + + Col442 + + 11 + + + + + + + Col443 + 443 + + 4 + 11 + 0 + NotNullable + + Col443 + + + + Col443 + + 11 + + + + + + + Col444 + 444 + + 4 + 11 + 0 + NotNullable + + Col444 + + + + Col444 + + 11 + + + + + + + Col445 + 445 + + 4 + 11 + 0 + NotNullable + + Col445 + + + + Col445 + + 11 + + + + + + + Col446 + 446 + + 4 + 11 + 0 + NotNullable + + Col446 + + + + Col446 + + 11 + + + + + + + Col447 + 447 + + 4 + 11 + 0 + NotNullable + + Col447 + + + + Col447 + + 11 + + + + + + + Col448 + 448 + + 4 + 11 + 0 + NotNullable + + Col448 + + + + Col448 + + 11 + + + + + + + Col449 + 449 + + 4 + 11 + 0 + NotNullable + + Col449 + + + + Col449 + + 11 + + + + + + + Col450 + 450 + + 4 + 11 + 0 + NotNullable + + Col450 + + + + Col450 + + 11 + + + + + + + Col451 + 451 + + 4 + 11 + 0 + NotNullable + + Col451 + + + + Col451 + + 11 + + + + + + + Col452 + 452 + + 4 + 11 + 0 + NotNullable + + Col452 + + + + Col452 + + 11 + + + + + + + Col453 + 453 + + 4 + 11 + 0 + NotNullable + + Col453 + + + + Col453 + + 11 + + + + + + + Col454 + 454 + + 4 + 11 + 0 + NotNullable + + Col454 + + + + Col454 + + 11 + + + + + + + Col455 + 455 + + 4 + 11 + 0 + NotNullable + + Col455 + + + + Col455 + + 11 + + + + + + + Col456 + 456 + + 4 + 11 + 0 + NotNullable + + Col456 + + + + Col456 + + 11 + + + + + + + Col457 + 457 + + 4 + 11 + 0 + NotNullable + + Col457 + + + + Col457 + + 11 + + + + + + + Col458 + 458 + + 4 + 11 + 0 + NotNullable + + Col458 + + + + Col458 + + 11 + + + + + + + Col459 + 459 + + 4 + 11 + 0 + NotNullable + + Col459 + + + + Col459 + + 11 + + + + + + + Col460 + 460 + + 4 + 11 + 0 + NotNullable + + Col460 + + + + Col460 + + 11 + + + + + + + Col461 + 461 + + 4 + 11 + 0 + NotNullable + + Col461 + + + + Col461 + + 11 + + + + + + + Col462 + 462 + + 4 + 11 + 0 + NotNullable + + Col462 + + + + Col462 + + 11 + + + + + + + Col463 + 463 + + 4 + 11 + 0 + NotNullable + + Col463 + + + + Col463 + + 11 + + + + + + + Col464 + 464 + + 4 + 11 + 0 + NotNullable + + Col464 + + + + Col464 + + 11 + + + + + + + Col465 + 465 + + 4 + 11 + 0 + NotNullable + + Col465 + + + + Col465 + + 11 + + + + + + + Col466 + 466 + + 4 + 11 + 0 + NotNullable + + Col466 + + + + Col466 + + 11 + + + + + + + Col467 + 467 + + 4 + 11 + 0 + NotNullable + + Col467 + + + + Col467 + + 11 + + + + + + + Col468 + 468 + + 4 + 11 + 0 + NotNullable + + Col468 + + + + Col468 + + 11 + + + + + + + Col469 + 469 + + 4 + 11 + 0 + NotNullable + + Col469 + + + + Col469 + + 11 + + + + + + + Col470 + 470 + + 4 + 11 + 0 + NotNullable + + Col470 + + + + Col470 + + 11 + + + + + + + Col471 + 471 + + 4 + 11 + 0 + NotNullable + + Col471 + + + + Col471 + + 11 + + + + + + + Col472 + 472 + + 4 + 11 + 0 + NotNullable + + Col472 + + + + Col472 + + 11 + + + + + + + Col473 + 473 + + 4 + 11 + 0 + NotNullable + + Col473 + + + + Col473 + + 11 + + + + + + + Col474 + 474 + + 4 + 11 + 0 + NotNullable + + Col474 + + + + Col474 + + 11 + + + + + + + Col475 + 475 + + 4 + 11 + 0 + NotNullable + + Col475 + + + + Col475 + + 11 + + + + + + + Col476 + 476 + + 4 + 11 + 0 + NotNullable + + Col476 + + + + Col476 + + 11 + + + + + + + Col477 + 477 + + 4 + 11 + 0 + NotNullable + + Col477 + + + + Col477 + + 11 + + + + + + + Col478 + 478 + + 4 + 11 + 0 + NotNullable + + Col478 + + + + Col478 + + 11 + + + + + + + Col479 + 479 + + 4 + 11 + 0 + NotNullable + + Col479 + + + + Col479 + + 11 + + + + + + + Col480 + 480 + + 4 + 11 + 0 + NotNullable + + Col480 + + + + Col480 + + 11 + + + + + + + Col481 + 481 + + 4 + 11 + 0 + NotNullable + + Col481 + + + + Col481 + + 11 + + + + + + + Col482 + 482 + + 4 + 11 + 0 + NotNullable + + Col482 + + + + Col482 + + 11 + + + + + + + Col483 + 483 + + 4 + 11 + 0 + NotNullable + + Col483 + + + + Col483 + + 11 + + + + + + + Col484 + 484 + + 4 + 11 + 0 + NotNullable + + Col484 + + + + Col484 + + 11 + + + + + + + Col485 + 485 + + 4 + 11 + 0 + NotNullable + + Col485 + + + + Col485 + + 11 + + + + + + + Col486 + 486 + + 4 + 11 + 0 + NotNullable + + Col486 + + + + Col486 + + 11 + + + + + + + Col487 + 487 + + 4 + 11 + 0 + NotNullable + + Col487 + + + + Col487 + + 11 + + + + + + + Col488 + 488 + + 4 + 11 + 0 + NotNullable + + Col488 + + + + Col488 + + 11 + + + + + + + Col489 + 489 + + 4 + 11 + 0 + NotNullable + + Col489 + + + + Col489 + + 11 + + + + + + + Col490 + 490 + + 4 + 11 + 0 + NotNullable + + Col490 + + + + Col490 + + 11 + + + + + + + Col491 + 491 + + 4 + 11 + 0 + NotNullable + + Col491 + + + + Col491 + + 11 + + + + + + + Col492 + 492 + + 4 + 11 + 0 + NotNullable + + Col492 + + + + Col492 + + 11 + + + + + + + Col493 + 493 + + 4 + 11 + 0 + NotNullable + + Col493 + + + + Col493 + + 11 + + + + + + + Col494 + 494 + + 4 + 11 + 0 + NotNullable + + Col494 + + + + Col494 + + 11 + + + + + + + Col495 + 495 + + 4 + 11 + 0 + NotNullable + + Col495 + + + + Col495 + + 11 + + + + + + + Col496 + 496 + + 4 + 11 + 0 + NotNullable + + Col496 + + + + Col496 + + 11 + + + + + + + Col497 + 497 + + 4 + 11 + 0 + NotNullable + + Col497 + + + + Col497 + + 11 + + + + + + + Col498 + 498 + + 4 + 11 + 0 + NotNullable + + Col498 + + + + Col498 + + 11 + + + + + + + Col499 + 499 + + 4 + 11 + 0 + NotNullable + + Col499 + + + + Col499 + + 11 + + + + + + + Col500 + 500 + + 4 + 11 + 0 + NotNullable + + Col500 + + + + Col500 + + 11 + + + + + + + +]]> + + + + + + + + + + + + + a4 + landscape + 0.5cm + 0.5cm + 0.5cm + 0.5cm + + + html + new Date()]]> + + + + + + + Mega Data Set + + + COL1 + COL1 + dataSetRow["COL1"] + integer + + + COL2 + COL2 + dataSetRow["COL2"] + string + + + COL3 + COL3 + dataSetRow["COL3"] + string + + + COL4 + COL4 + dataSetRow["COL4"] + string + + + COL5 + COL5 + dataSetRow["COL5"] + string + + + COL6 + COL6 + dataSetRow["COL6"] + integer + + + COL7 + COL7 + dataSetRow["COL7"] + string + + + COL8 + COL8 + dataSetRow["COL8"] + string + + + COL9 + COL9 + dataSetRow["COL9"] + string + + + COL10 + COL10 + dataSetRow["COL10"] + string + + + COL11 + COL11 + dataSetRow["COL11"] + integer + + + COL12 + COL12 + dataSetRow["COL12"] + string + + + COL13 + COL13 + dataSetRow["COL13"] + string + + + COL14 + COL14 + dataSetRow["COL14"] + string + + + + 0 + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + ExcelEmitter.NoStyles + boolean + + + true + + + COL1 + + + + + COL2 + + + + + COL3 + + + + + COL4 + + + + + COL5 + + + + + COL6 + + + + + COL7 + + + + + COL8 + + + + + COL9 + + + + + COL10 + + + + + COL11 + + + + + COL12 + + + + + COL13 + + + + + COL14 + + + + +
+ + + + + + + + + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTemplate.xlsx b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTemplate.xlsx new file mode 100644 index 00000000000..423bcb15123 Binary files /dev/null and b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTemplate.xlsx differ diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTest.java index 850a8ad31ef..4f129ee7112 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.*; +import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -23,8 +24,10 @@ public class MegaSizeTest extends ReportRunner { + /* + * No point in trying to do this warmup until using junit 4.11 which allows the order of tests to be controlled. @Test - public void testWarmup() throws BirtException, IOException { + public void testFirstWarmup() throws BirtException, IOException { debug = false; InputStream inputStream = runAndRenderReport("MegaSize.rptdesign", "xlsx"); @@ -36,6 +39,7 @@ public void testWarmup() throws BirtException, IOException { inputStream.close(); } } + */ @Test public void testMegaXlsx() throws BirtException, IOException { @@ -51,6 +55,114 @@ public void testMegaXlsx() throws BirtException, IOException { } } + @Test + public void testMegaXlsxExtract() throws BirtException, IOException { + + debug = false; + extractMode= true; + try { + InputStream inputStream = runAndRenderReport("MegaSize.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + + } finally { + inputStream.close(); + } + } finally { + extractMode = false; + } + } + + @Test + public void testMegaXlsxExtractNoStyles() throws BirtException, IOException { + + debug = false; + extractMode= true; + noStyles = true; + try { + InputStream inputStream = runAndRenderReport("MegaSize.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + + } finally { + inputStream.close(); + } + } finally { + extractMode = false; + noStyles = false; + } + } + + @Test + public void testMegaXlsxNoStyles() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("MegaSizeNoStyles.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + + } finally { + inputStream.close(); + } + } + + @Test + public void testMegaXlsxTemplateNoStyles() throws BirtException, IOException { + + debug = false; + String file = deriveFilepath( "MegaSizeTemplate.xlsx" ); + File template = new File( file ); + + assertTrue( template.exists() ); + templateFile = template.getAbsolutePath(); + + InputStream inputStream = runAndRenderReport("MegaSizeNoStyles.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + + } finally { + inputStream.close(); + } + } + + @Test + public void testMegaXlsxTemplate() throws BirtException, IOException { + + debug = false; + String file = deriveFilepath( "MegaSizeTemplate.xlsx" ); + File template = new File( file ); + + assertTrue( template.exists() ); + templateFile = template.getAbsolutePath(); + + InputStream inputStream = runAndRenderReport("MegaSize.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + + } finally { + inputStream.close(); + } + } + + @Test + public void testMegaXlsxFixedLayout() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("MegaSizeFixedLayout.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + + } finally { + inputStream.close(); + } + } + @Test public void testMegaXls() throws BirtException, IOException { @@ -64,4 +176,16 @@ public void testMegaXls() throws BirtException, IOException { } } + @Test + public void testMegaXls60000() throws BirtException, IOException { + + InputStream inputStream = runAndRenderReport("MegaSize60000.rptdesign", "xls"); + assertNotNull(inputStream); + try { + + } finally { + inputStream.close(); + } + } + } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsNoNames.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsNoNames.rptdesign index a6c5cd5fbe6..14cfdbc3a12 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsNoNames.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsNoNames.rptdesign @@ -1,7 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> - Number Formats Test Report + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> in diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsReportTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsReportTest.java index f5150bb8e27..ff990a1a39c 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsReportTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsReportTest.java @@ -165,7 +165,7 @@ public void testTwoNames() throws BirtException, IOException { assertNotNull(workbook); assertEquals( 2, workbook.getNumberOfSheets() ); - assertEquals( "Number Formats 2", workbook.getSheetAt(0).getSheetName()); + assertEquals( "Number Formats 1", workbook.getSheetAt(0).getSheetName()); assertEquals( "Number Formats 3", workbook.getSheetAt(1).getSheetName()); assertEquals(8, firstNullRow(workbook.getSheetAt(0))); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormats.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormats.rptdesign index 169c2906a3b..144567bc45b 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormats.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormats.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Number Formats Test Report in + + 7.614583333333333in + Data Set + + + Name + Name + dataSetRow["Name"] + string + + + Integer + Integer + dataSetRow["Integer"] + integer + + + DateTime + DateTime + dataSetRow["DateTime"] + date-time + + + Decimal + Decimal + dataSetRow["Decimal"] + decimal + + + Float + Float + dataSetRow["Float"] + float + + + Boolean + Boolean + dataSetRow["Boolean"] + boolean + + + Date + Date + dataSetRow["Date"] + date + + + Time + Time + dataSetRow["Time"] + time + + + + 0.8645833333333334in + + + 1in + + + 0.9270833333333334in + + + 1.1979166666666667in + + + 0.9895833333333334in + + + 0.8125in + + + 1in + + + 0.8229166666666666in + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + Name + + + + + + Unformatted + + Float + + + + + + General Number + General Number + + Float + + + + + + Currency + Currency + + Float + + + + + + Fixed + Fixed + + Float + + + + + + Percent + Percent + + Float + + + + + + Scientific + Scientific + + Float + + + + + + Custom + 0.00E00 + + Float + + + + +
+ + #0000FF + solid + + + + + + + + + + + +
+
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormatsTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormatsTest.java index e3c70aca2d6..f316c270fe4 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormatsTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormatsTest.java @@ -31,7 +31,7 @@ public class NumberFormatsTest extends ReportRunner { @Test public void testRunReport() throws BirtException, IOException { - debug = false; + debug = true; InputStream inputStream = runAndRenderReport("NumberFormats.rptdesign", "xlsx"); assertNotNull(inputStream); try { @@ -43,7 +43,7 @@ public void testRunReport() throws BirtException, IOException { assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); Sheet sheet = workbook.getSheetAt(0); - assertEquals(22, this.firstNullRow(sheet)); + assertEquals(26, this.firstNullRow(sheet)); assertEquals( 3035, sheet.getColumnWidth( 0 ) ); assertEquals( 3913, sheet.getColumnWidth( 1 ) ); @@ -142,6 +142,32 @@ public void testRunReport() throws BirtException, IOException { assertEquals( sheet.getRow(18).getCell(6).getStringCellValue(), sheet.getRow(19).getCell(6).getCellStyle().getDataFormatString()); assertEquals( sheet.getRow(18).getCell(7).getStringCellValue(), sheet.getRow(19).getCell(7).getCellStyle().getDataFormatString()); + assertEquals( "\"\"#,##0.00", sheet.getRow(23).getCell(3).getCellStyle().getDataFormatString()); + assertEquals( "\"\"###0.00", sheet.getRow(23).getCell(4).getCellStyle().getDataFormatString()); + assertEquals( "\"\"###0.00%", sheet.getRow(23).getCell(5).getCellStyle().getDataFormatString()); + assertEquals( "\"\"0.00E+00", sheet.getRow(23).getCell(6).getCellStyle().getDataFormatString()); + + assertEquals( "\"\"#,##0.00", sheet.getRow(24).getCell(3).getCellStyle().getDataFormatString()); + assertEquals( "\"\"###0.00", sheet.getRow(24).getCell(4).getCellStyle().getDataFormatString()); + assertEquals( "\"\"###0.00%", sheet.getRow(24).getCell(5).getCellStyle().getDataFormatString()); + assertEquals( "\"\"0.00E+00", sheet.getRow(24).getCell(6).getCellStyle().getDataFormatString()); + + assertEquals( "3.1415926536", formatter.formatCellValue(sheet.getRow(23).getCell(1))); + assertEquals( "3.1415926536", formatter.formatCellValue(sheet.getRow(23).getCell(2))); + assertEquals( "3.14", formatter.formatCellValue(sheet.getRow(23).getCell(3))); + assertEquals( "3.14", formatter.formatCellValue(sheet.getRow(23).getCell(4))); + assertEquals( "314.16%", formatter.formatCellValue(sheet.getRow(23).getCell(5))); + assertEquals( "3.14E00", formatter.formatCellValue(sheet.getRow(23).getCell(6))); + assertEquals( "3.14E00", formatter.formatCellValue(sheet.getRow(23).getCell(7))); + + assertEquals( "6.2831853072", formatter.formatCellValue(sheet.getRow(24).getCell(1))); + assertEquals( "6.2831853072", formatter.formatCellValue(sheet.getRow(24).getCell(2))); + assertEquals( "6.28", formatter.formatCellValue(sheet.getRow(24).getCell(3))); + assertEquals( "6.28", formatter.formatCellValue(sheet.getRow(24).getCell(4))); + assertEquals( "628.32%", formatter.formatCellValue(sheet.getRow(24).getCell(5))); + assertEquals( "6.28E00", formatter.formatCellValue(sheet.getRow(24).getCell(6))); + assertEquals( "6.28E00", formatter.formatCellValue(sheet.getRow(24).getCell(7))); + } finally { inputStream.close(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/OutputFileNotStreamTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/OutputFileNotStreamTest.java index cbf522c8c5a..47c333eff5a 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/OutputFileNotStreamTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/OutputFileNotStreamTest.java @@ -40,7 +40,7 @@ public void testRunReport() throws BirtException, IOException { assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); Sheet sheet = workbook.getSheetAt(0); - assertEquals(22, this.firstNullRow(sheet)); + assertEquals(26, this.firstNullRow(sheet)); } finally { inputStream.close(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayout.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayout.rptdesign index 62bde2024a1..440d94cd28c 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayout.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayout.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Page Layout Test cm /templates/blank_report.gif @@ -56,6 +56,7 @@ 1cm @@ -68,6 +69,7 @@ diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayoutTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayoutTest.java index 081920bce93..7c6968ca015 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayoutTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayoutTest.java @@ -50,8 +50,8 @@ public void testRunReportXlsx() throws BirtException, IOException { XSSFPrintSetup printSetup = sheet0.getPrintSetup(); assertEquals( PaperSize.A4_PAPER, printSetup.getPaperSizeEnum() ); assertEquals( PrintOrientation.LANDSCAPE, printSetup.getOrientation() ); - assertEquals( 1.0 / 2.54, printSetup.getHeaderMargin(), 0.01 ); - assertEquals( 1.0 / 2.54, printSetup.getFooterMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getHeaderMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getFooterMargin(), 0.01 ); assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.LeftMargin ), 0.01 ); assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.RightMargin ), 0.01 ); assertEquals( 1.7 / 2.54, sheet0.getMargin( Sheet.TopMargin ), 0.01 ); @@ -79,8 +79,8 @@ public void testRunReportXls() throws BirtException, IOException { HSSFPrintSetup printSetup = sheet0.getPrintSetup(); assertEquals( HSSFPrintSetup.A4_PAPERSIZE, printSetup.getPaperSize() ); assertEquals( true, printSetup.getLandscape() ); - assertEquals( 1.0 / 2.54, printSetup.getHeaderMargin(), 0.01 ); - assertEquals( 1.0 / 2.54, printSetup.getFooterMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getHeaderMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getFooterMargin(), 0.01 ); assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.LeftMargin ), 0.01 ); assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.RightMargin ), 0.01 ); assertEquals( 1.7 / 2.54, sheet0.getMargin( Sheet.TopMargin ), 0.01 ); @@ -90,7 +90,7 @@ public void testRunReportXls() throws BirtException, IOException { inputStream.close(); } } - + @Test public void testRunReportPixelsXlsx() throws BirtException, IOException { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java index 07212557275..357d9fa5c1b 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java @@ -1,12 +1,12 @@ /************************************************************************************* * Copyright (c) 2011, 2012, 2013 James Talbut. * jim-emitters@spudsoft.co.uk - * - * All rights reserved. This program and the accompanying materials + * + * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * James Talbut - Initial implementation. ************************************************************************************/ @@ -27,6 +27,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; @@ -51,13 +52,16 @@ import org.eclipse.birt.report.engine.api.RenderOption; import org.eclipse.birt.report.engine.api.impl.ReportEngine; import org.eclipse.birt.report.model.api.IResourceLocator; +import org.junit.Rule; +import org.junit.rules.TestName; import uk.co.spudsoft.birt.emitters.bugfix.FixedRenderTask; +import uk.co.spudsoft.birt.emitters.bugfix.FixedRunTask; import uk.co.spudsoft.birt.emitters.excel.ExcelEmitter; import uk.co.spudsoft.birt.emitters.excel.tests.framework.Activator; public class ReportRunner { - + protected boolean debug; protected boolean removeEmptyRows = true; protected boolean htmlPagination; @@ -66,7 +70,11 @@ public class ReportRunner { protected boolean nestTableInLastCell; protected boolean autoFilter; protected boolean blankLineAfterTopLevelTable; - + protected boolean extractMode; + protected boolean noStyles; + protected boolean forceRecalculation; + + protected Boolean displayFormulas = null; protected Boolean displayGridlines = null; protected Boolean displayRowColHeadings = null; @@ -74,16 +82,21 @@ public class ReportRunner { protected Boolean disableGrouping = null; protected Boolean structuredHeader = null; protected Boolean groupSummaryHeader = null; - + protected Integer spannedRowHeight = null; - + protected String templateFile = null; - + + protected Locale defaultLocale = Locale.UK; + protected Map parameters = new HashMap(); protected long startTime; protected long runTime; protected long renderTime; - + + @Rule + public TestName testName = new TestName(); + private static byte[] getBytesFromFile(File file) throws IOException { InputStream is = new FileInputStream(file); try { @@ -98,7 +111,7 @@ private static byte[] getBytesFromFile(File file) throws IOException { is.close(); } } - + public boolean mergedRegion( Sheet sheet, int top, int left, int bottom, int right ) { for( int i = 0; i < sheet.getNumMergedRegions(); ++i ) { CellRangeAddress curRegion = sheet.getMergedRegion(i); @@ -111,7 +124,7 @@ public boolean mergedRegion( Sheet sheet, int top, int left, int bottom, int rig } return false; } - + protected int firstNullRow(Sheet sheet) { int i = 0; while( sheet.getRow(i) != null ) { @@ -119,7 +132,7 @@ protected int firstNullRow(Sheet sheet) { } return i; } - + protected int lastRow(Sheet sheet) { int max = 0; for(Row row : sheet) { @@ -127,7 +140,7 @@ protected int lastRow(Sheet sheet) { } return max; } - + protected int greatestNumColumns(Sheet sheet) { int result = 0; for(Row row : sheet) { @@ -137,7 +150,7 @@ protected int greatestNumColumns(Sheet sheet) { } return result; } - + private void addParameters( IEngineTask reportRunTask ) { for( Entry entry : parameters.entrySet() ) { reportRunTask.setParameterValue(entry.getKey(), entry.getValue()); @@ -151,7 +164,7 @@ protected InputStream runAndRenderReport( String filename, String outputFormat ) protected File createTempFile( String base, String extension ) throws IOException { String tempDir = System.getProperty( "java.io.tmpdir" ); - + for( int i = 0; i < Integer.MAX_VALUE; ++i ) { File result = new File( tempDir + File.separator + base + Integer.toString(i) + extension ); if( ! result.exists() ) { @@ -160,7 +173,7 @@ protected File createTempFile( String base, String extension ) throws IOExceptio } throw new IOException( "Temporary file not available" ); } - + protected String baseFilename( String filename ) { int index = filename.lastIndexOf( File.separatorChar ); if( index > 0 ) { @@ -172,49 +185,51 @@ protected String baseFilename( String filename ) { } return filename; } - + protected InputStream runAndRenderReportDefaultTask( String filename, String outputFormat ) throws BirtException, IOException { - IReportEngine reportEngine = createReportEngine(); - + Locale.setDefault(defaultLocale); + + IReportEngine reportEngine = createReportEngine(); + String filepath = deriveFilepath(filename); InputStream resourceStream = openFileStream( filename ); - + assertNotNull( resourceStream ); try { IReportRunnable reportRunnable = reportEngine.openReportDesign( resourceStream ); assertNotNull(reportRunnable); - + File tempDoc = createTempFile( baseFilename( filename ), ".rptdocument"); assertNotNull(tempDoc); - + try { IRunTask reportRunTask = reportEngine.createRunTask( reportRunnable ); assertNotNull(reportRunTask); try { addParameters( reportRunTask ); addFilepathToAppContext(filepath, reportRunTask); - + startTime = System.currentTimeMillis(); IReportDocument reportDocument = runReport(reportEngine, reportRunTask, tempDoc); runTime = System.currentTimeMillis(); - + IRenderTask renderTask = reportEngine.createRenderTask( reportDocument ); assertNotNull(renderTask); try { File tempOutput = createTempFile(baseFilename( filename ), "." + outputFormat); System.err.println( tempOutput ); - FileOutputStream outputStream = new FileOutputStream( tempOutput ); - + FileOutputStream outputStream = new FileOutputStream( tempOutput ); + assertNotNull(outputStream); try { renderTask.setRenderOption(prepareRenderOptions( outputFormat, outputStream )); - + renderTask.render(); renderTime = System.currentTimeMillis(); - assertEquals(0, renderTask.getErrors().size()); + assertEquals(0, renderTask.getErrors().size()); } finally { outputStream.close(); } @@ -236,48 +251,50 @@ protected InputStream runAndRenderReportDefaultTask( String filename, String out protected InputStream runAndRenderReportFileNotStream( String filename, String outputFormat ) throws BirtException, IOException { - IReportEngine reportEngine = createReportEngine(); - + Locale.setDefault(defaultLocale); + + IReportEngine reportEngine = createReportEngine(); + String filepath = deriveFilepath(filename); InputStream resourceStream = openFileStream( filename ); - + assertNotNull( resourceStream ); try { IReportRunnable reportRunnable = reportEngine.openReportDesign( resourceStream ); assertNotNull(reportRunnable); - + File tempDoc = createTempFile(baseFilename( filename ), ".rptdocument"); assertNotNull(tempDoc); - + try { IRunTask reportRunTask = reportEngine.createRunTask( reportRunnable ); assertNotNull(reportRunTask); try { addParameters( reportRunTask ); addFilepathToAppContext(filepath, reportRunTask); - + IReportDocument reportDocument = runReport(reportEngine, reportRunTask, tempDoc); - + IRenderTask renderTask = reportEngine.createRenderTask( reportDocument ); assertNotNull(renderTask); try { File outputFile = createTempFile(baseFilename( filename ), "." + outputFormat); System.err.println( outputFile ); - + assertNotNull( outputFile ); renderTask.setRenderOption(prepareRenderOptions( outputFormat, null )); renderTask.getRenderOption().setOutputFileName( outputFile.getCanonicalPath() ); - + renderTask.render(); - assertEquals(0, renderTask.getErrors().size()); + assertEquals(0, renderTask.getErrors().size()); InputStream result = new ByteArrayInputStream(getBytesFromFile(outputFile)); - + boolean deleted = outputFile.delete(); assertTrue( deleted ); - + return result; } finally { renderTask.close(); @@ -295,38 +312,40 @@ protected InputStream runAndRenderReportFileNotStream( String filename, String o protected InputStream runAndRenderReportAsOne( String filename, String outputFormat ) throws BirtException, IOException { + Locale.setDefault(defaultLocale); + IReportEngine reportEngine = createReportEngine(); - + String filepath = deriveFilepath(filename); InputStream resourceStream = openFileStream( filename ); - + assertNotNull( resourceStream ); try { IReportRunnable reportRunnable = reportEngine.openReportDesign( resourceStream ); assertNotNull(reportRunnable); - + File tempDoc = createTempFile(baseFilename( filename ), ".rptdocument"); assertNotNull(tempDoc); - + try { IRunAndRenderTask reportRunRenderTask = reportEngine.createRunAndRenderTask( reportRunnable ); assertNotNull(reportRunRenderTask); try { addParameters( reportRunRenderTask ); addFilepathToAppContext(filepath, reportRunRenderTask); - + File tempOutput = createTempFile(baseFilename( filename ), "." + outputFormat); System.err.println( tempOutput ); - FileOutputStream outputStream = new FileOutputStream( tempOutput ); - + FileOutputStream outputStream = new FileOutputStream( tempOutput ); + assertNotNull(outputStream); try { - + reportRunRenderTask.setRenderOption(prepareRenderOptions( outputFormat, outputStream )); - + reportRunRenderTask.run(); - assertEquals(0, reportRunRenderTask.getErrors().size()); + assertEquals(0, reportRunRenderTask.getErrors().size()); } finally { outputStream.close(); } @@ -345,63 +364,66 @@ protected InputStream runAndRenderReportAsOne( String filename, String outputFor protected InputStream runAndRenderReportCustomTask( String filename, String outputFormat ) throws BirtException, IOException { - IReportEngine reportEngine = createReportEngine(); - + Locale.setDefault(defaultLocale); + + IReportEngine reportEngine = createReportEngine(); + String filepath = deriveFilepath(filename); InputStream resourceStream = openFileStream( filename ); - + assertNotNull( resourceStream ); try { - File designFile = new File( filepath ); - IResourceLocator resourceLocator = new ResourceLocator(designFile.getParentFile()); - + File designFile = new File( filepath ); + IResourceLocator resourceLocator = new ResourceLocator(designFile.getParentFile()); + IReportRunnable reportRunnable = reportEngine.openReportDesign( filename, resourceStream, resourceLocator ); assertNotNull(reportRunnable); - + File tempDoc = createTempFile(baseFilename( filename ), ".rptdocument"); assertNotNull(tempDoc); - + try { - IRunTask reportRunTask = reportEngine.createRunTask( reportRunnable ); + IRunTask reportRunTask = new FixedRunTask((ReportEngine)reportEngine, reportRunnable); + // reportEngine.createRunTask( reportRunnable ); // reportRunTask.enableProgressiveViewing(true); - + assertNotNull(reportRunTask); try { addParameters( reportRunTask ); addFilepathToAppContext(filepath, reportRunTask); addToAppContext(reportRunTask, "org.eclipse.birt.data.query.ResultBufferSize", 256 ); - + startTime = System.currentTimeMillis(); IReportDocument reportDocument = runReport(reportEngine, reportRunTask, tempDoc); runTime = System.currentTimeMillis(); - System.err.println( "Run " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); - + System.err.println( "Initial run " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); + // IRenderTask renderTask = reportEngine.createRenderTask( reportDocument ); IRenderTask renderTask = new FixedRenderTask( (ReportEngine)reportEngine, reportRunnable, reportDocument ); assertNotNull(renderTask); try { File tempOutput = createTempFile(baseFilename( filename ), "." + outputFormat); - System.err.println( tempOutput ); - FileOutputStream outputStream = new FileOutputStream( tempOutput ); - + FileOutputStream outputStream = new FileOutputStream( tempOutput ); + assertNotNull(outputStream); try { - + renderTask.setRenderOption(prepareRenderOptions( outputFormat, outputStream )); - + System.err.println( "Starting Render"); renderTask.render(); - assertEquals(0, renderTask.getErrors().size()); + assertEquals(0, renderTask.getErrors().size()); } finally { renderTime = System.currentTimeMillis(); - System.err.println( "Run " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); - System.err.println( "Render " + baseFilename( filename ) + " : " + ((renderTime - runTime) / 1000.0) + "s"); + System.err.println( "File " + testName.getMethodName() + ": " + baseFilename( filename ) + " : " + tempOutput ); + System.err.println( "Run " + testName.getMethodName() + ": " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); + System.err.println( "Render " + testName.getMethodName() + ": " + baseFilename( filename ) + " : " + ((renderTime - runTime) / 1000.0) + "s"); outputStream.close(); } - + return new ByteArrayInputStream(getBytesFromFile(tempOutput)); } finally { renderTask.close(); @@ -422,7 +444,7 @@ protected IReportEngine createReportEngine() { IReportEngineFactory engineFactory = (IReportEngineFactory)Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY ); assertNotNull(engineFactory); - + IReportEngine reportEngine = engineFactory.createReportEngine( config ); assertNotNull(reportEngine); return reportEngine; @@ -430,12 +452,12 @@ protected IReportEngine createReportEngine() { protected String deriveFilepath(String filename) throws MalformedURLException { String filepath = null; - + File file = new File(filename); if( ( file.isAbsolute() ) && ( file.exists() ) ) { return filename; } else if( Activator.getContext() != null ) { - URL bundleLocation = new URL(Activator.getContext().getBundle().getLocation()); + URL bundleLocation = new URL(Activator.getContext().getBundle().getLocation()); // System.err.println( "Activator.getContext().getBundle().getLocation() = " + bundleLocation ); String bundleLocationFile = bundleLocation.getFile(); if(bundleLocationFile.startsWith("file:/")) { @@ -446,14 +468,14 @@ protected String deriveFilepath(String filename) throws MalformedURLException { URL resourceLocation = this.getClass().getResource( filename ); String resourceLocationFile = resourceLocation.getFile(); // System.err.println( "resourceLocationFile = " + resourceLocationFile ); - - + + filepath = bundleLocationFile + "bin" + resourceLocationFile; // System.err.println( "filepath = " + filepath ); } return filepath; } - + protected InputStream openFileStream( String filename ) throws FileNotFoundException { File file = new File( filename ); if( file.exists() ) { @@ -468,7 +490,7 @@ protected void addFilepathToAppContext(String filepath, IEngineTask task) { addToAppContext(task, "__report", filepath); } } - + private void addToAppContext( IEngineTask task, String key, Object value ) { @SuppressWarnings("unchecked") Map appContext = (Map)task.getAppContext(); @@ -476,7 +498,7 @@ private void addToAppContext( IEngineTask task, String key, Object value ) { appContext = new HashMap(); task.setAppContext(appContext); } - appContext.put(key, value); + appContext.put(key, value); } protected IReportDocument runReport(IReportEngine reportEngine, @@ -490,9 +512,9 @@ protected IReportDocument runReport(IReportEngine reportEngine, System.err.println( "Error: " + errorObject ); } assertEquals( 0, reportRunTask.getErrors().size() ); - + reportRunTask.close(); - + IReportDocument reportDocument = reportEngine.openReportDocument( tempDoc.getCanonicalPath() ); assertNotNull(reportDocument); return reportDocument; @@ -504,6 +526,11 @@ protected RenderOption prepareRenderOptions(String outputFormat, FileOutputStrea if( outputStream != null ) { renderOptions.setOutputStream( outputStream ); } + if( "xls".equals(outputFormat)) { + renderOptions.setEmitterID("uk.co.spudsoft.birt.emitters.excel.XlsEmitter"); + } else if ( "xlsx".equals(outputFormat)) { + renderOptions.setEmitterID("uk.co.spudsoft.birt.emitters.excel.XlsxEmitter"); + } if( debug ) { renderOptions.setOption( "ExcelEmitter.DEBUG", Boolean.TRUE); debug = false; @@ -551,12 +578,21 @@ protected RenderOption prepareRenderOptions(String outputFormat, FileOutputStrea renderOptions.setOption( ExcelEmitter.BLANK_ROW_AFTER_TOP_LEVEL_TABLE, true ); } if( spannedRowHeight != null ) { - renderOptions.setOption( ExcelEmitter.SPANNED_ROW_HEIGHT, spannedRowHeight ); + renderOptions.setOption( ExcelEmitter.SPANNED_ROW_HEIGHT, spannedRowHeight ); } if( templateFile != null ) { renderOptions.setOption( ExcelEmitter.TEMPLATE_FILE, templateFile ); } - + if( extractMode ) { + renderOptions.setOption( ExcelEmitter.EXTRACT_MODE, true ); + } + if( noStyles ) { + renderOptions.setOption( ExcelEmitter.NO_STYLES, true ); + } + if( forceRecalculation ) { + renderOptions.setOption( ExcelEmitter.FORCE_RECALCULATION, true ); + } + return renderOptions; } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySide.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySide.java index 372b6319c74..25ef3e12ce0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySide.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySide.java @@ -38,7 +38,7 @@ public void singleCells() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals(1, this.firstNullRow(sheet)); - assertEquals( 305, sheet.getRow( 0 ).getHeightInPoints(), 1.0 ); + assertEquals( 297, sheet.getRow( 0 ).getHeightInPoints(), 1.0 ); assertEquals( 19346, sheet.getColumnWidth( 0 ) ); assertEquals( 19346, sheet.getColumnWidth( 1 ) ); } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySideMultiColumns.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySideMultiColumns.rptdesign index 0c54d59e63f..bf8500b9388 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySideMultiColumns.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySideMultiColumns.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> in /templates/blank_report.gif ltr @@ -370,289 +370,289 @@ group by * from CLASSICMODELS.CUSTOMERS]]>
- - - 2.0 - - - - - - - CUSTOMERNUMBER - 1 - - 4 - 10 - 0 - Nullable - - CUSTOMERNUMBER - - - - CUSTOMERNUMBER - - 11 - - - - - - - CUSTOMERNAME - 2 - - 12 - 50 - 0 - Nullable - - CUSTOMERNAME - - - - CUSTOMERNAME - - 50 - - - - - - - CONTACTLASTNAME - 3 - - 12 - 50 - 0 - Nullable - - CONTACTLASTNAME - - - - CONTACTLASTNAME - - 50 - - - - - - - CONTACTFIRSTNAME - 4 - - 12 - 50 - 0 - Nullable - - CONTACTFIRSTNAME - - - - CONTACTFIRSTNAME - - 50 - - - - - - - PHONE - 5 - - 12 - 50 - 0 - Nullable - - PHONE - - - - PHONE - - 50 - - - - - - - ADDRESSLINE1 - 6 - - 12 - 50 - 0 - Nullable - - ADDRESSLINE1 - - - - ADDRESSLINE1 - - 50 - - - - - - - ADDRESSLINE2 - 7 - - 12 - 50 - 0 - Nullable - - ADDRESSLINE2 - - - - ADDRESSLINE2 - - 50 - - - - - - - CITY - 8 - - 12 - 50 - 0 - Nullable - - CITY - - - - CITY - - 50 - - - - - - - STATE - 9 - - 12 - 50 - 0 - Nullable - - STATE - - - - STATE - - 50 - - - - - - - POSTALCODE - 10 - - 12 - 15 - 0 - Nullable - - POSTALCODE - - - - POSTALCODE - - 15 - - - - - - - COUNTRY - 11 - - 12 - 50 - 0 - Nullable - - COUNTRY - - - - COUNTRY - - 50 - - - - - - - SALESREPEMPLOYEENUMBER - 12 - - 4 - 10 - 0 - Nullable - - SALESREPEMPLOYEENUMBER - - - - SALESREPEMPLOYEENUMBER - - 11 - - - - - - - CREDITLIMIT - 13 - - 8 - 15 - 0 - Nullable - - CREDITLIMIT - - - - CREDITLIMIT - - 22 - - - - - - - + + + 2.0 + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + ]]> @@ -2442,6 +2442,13 @@ CLASSICMODELS.CUSTOMERS]]> + + + ExcelEmitter.AutoFilter + boolean + + + trueData Set 3 diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SingleSheetsReportTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SingleSheetsReportTest.java index e42d82c2557..032478de057 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SingleSheetsReportTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SingleSheetsReportTest.java @@ -121,7 +121,7 @@ public void testNoNames() throws BirtException, IOException { assertNotNull(workbook); assertEquals( 1, workbook.getNumberOfSheets() ); - assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); + assertEquals( "Sheet0", workbook.getSheetAt(0).getSheetName()); assertEquals(11, firstNullRow(workbook.getSheetAt(0))); } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/AreaBorders.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/AreaBorders.java index 3e27ab17ec0..0dfa14bea65 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/AreaBorders.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/AreaBorders.java @@ -13,7 +13,6 @@ package uk.co.spudsoft.birt.emitters.excel; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.w3c.dom.css.CSSValue; @@ -51,18 +50,18 @@ public static AreaBorders createForMergedCells(int bottom, int left, int right, public static AreaBorders create(boolean isMergedCells, int bottom, int left, int right, int top, BirtStyle borderStyle) { - CSSValue borderStyleBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE ); - CSSValue borderWidthBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ); - CSSValue borderColourBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); - CSSValue borderStyleLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_STYLE ); - CSSValue borderWidthLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH ); - CSSValue borderColourLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_COLOR ); - CSSValue borderStyleRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_STYLE ); - CSSValue borderWidthRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH ); - CSSValue borderColourRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_COLOR ); - CSSValue borderStyleTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_STYLE ); - CSSValue borderWidthTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_WIDTH ); - CSSValue borderColourTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_COLOR ); + CSSValue borderStyleBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE ); + CSSValue borderWidthBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH ); + CSSValue borderColourBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ); + CSSValue borderStyleLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE ); + CSSValue borderWidthLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH ); + CSSValue borderColourLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR ); + CSSValue borderStyleRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE ); + CSSValue borderWidthRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH ); + CSSValue borderColourRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR ); + CSSValue borderStyleTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_STYLE ); + CSSValue borderWidthTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH ); + CSSValue borderColourTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_COLOR ); /* borderMsg.append( ", Bottom:" ).append( borderStyleBottom ).append( "/" ).append( borderWidthBottom ).append( "/" + borderColourBottom ); borderMsg.append( ", Left:" ).append( borderStyleLeft ).append( "/" ).append( borderWidthLeft ).append( "/" + borderColourLeft ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/BirtStyle.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/BirtStyle.java index 819b52d3432..eabfb9cc775 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/BirtStyle.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/BirtStyle.java @@ -14,14 +14,12 @@ package uk.co.spudsoft.birt.emitters.excel; -import java.util.BitSet; import java.util.Map; import org.eclipse.birt.report.engine.content.IContent; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.dom.AbstractStyle; import org.eclipse.birt.report.engine.css.engine.CSSEngine; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.DataFormatValue; import org.eclipse.birt.report.engine.css.engine.value.FloatValue; import org.eclipse.birt.report.engine.css.engine.value.StringValue; @@ -33,75 +31,9 @@ public class BirtStyle { - public static final int NUMBER_OF_STYLES = StyleConstants.NUMBER_OF_STYLE + 1; - public static final int TEXT_ROTATION = StyleConstants.NUMBER_OF_STYLE; - - protected static final String cssProperties[] = { - "margin-left" - , "margin-right" - , "margin-top" - , "DATA_FORMAT" - , "border-right-color" - , "direction" - , "border-top-width" - , "padding-left" - , "border-right-width" - , "padding-bottom" - , "padding-top" - , "NUMBER_ALIGN" - , "padding-right" - , "CAN_SHRINK" - , "border-top-color" - , "background-repeat" - , "margin-bottom" - , "background-width" - , "background-height" - , "border-right-style" - , "border-bottom-color" - , "text-indent" - , "line-height" - , "border-bottom-width" - , "text-align" - , "background-color" - , "color" - , "overflow" - , "TEXT_LINETHROUGH" - , "border-left-color" - , "widows" - , "border-left-width" - , "border-bottom-style" - , "font-weight" - , "font-variant" - , "text-transform" - , "white-space" - , "TEXT_OVERLINE" - , "vertical-align" - , "BACKGROUND_POSITION_X" - , "border-left-style" - , "VISIBLE_FORMAT" - , "MASTER_PAGE" - , "orphans" - , "font-size" - , "font-style" - , "border-top-style" - , "page-break-before" - , "SHOW_IF_BLANK" - , "background-image" - , "BACKGROUND_POSITION_Y" - , "word-spacing" - , "background-attachment" - , "TEXT_UNDERLINE" - , "display" - , "font-family" - , "letter-spacing" - , "page-break-inside" - , "page-break-after" - - , "Rotation" - }; - + public static final int NUMBER_OF_STYLES = StylePropertyIndexes.NUMBER_OF_BIRT_PROPERTIES + 1; + public static final int TEXT_ROTATION = StylePropertyIndexes.NUMBER_OF_BIRT_PROPERTIES; - private IStyle elemStyle; private CSSValue[] propertyOverride = new CSSValue[ BirtStyle.NUMBER_OF_STYLES ]; private CSSEngine cssEngine; @@ -110,7 +42,7 @@ public BirtStyle( CSSEngine cssEngine ) { } public BirtStyle(IContent element) { - elemStyle = element.getComputedStyle(); + IStyle elemStyle = element.getComputedStyle(); if( elemStyle instanceof AbstractStyle ) { cssEngine = ((AbstractStyle)elemStyle).getCSSEngine(); @@ -128,14 +60,75 @@ public BirtStyle(IContent element) { int prop = StyleManager.COMPARE_CSS_PROPERTIES[ i ]; propertyOverride[ prop ] = elemStyle.getProperty( prop ); } - propertyOverride[ StyleConstants.STYLE_DATA_FORMAT ] = elemStyle.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + propertyOverride[ StylePropertyIndexes.STYLE_DATA_FORMAT ] = elemStyle.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); for( int i = 0; i < FontManager.COMPARE_CSS_PROPERTIES.length; ++i ) { int prop = FontManager.COMPARE_CSS_PROPERTIES[ i ]; propertyOverride[ prop ] = elemStyle.getProperty( prop ); } - } + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + for( int i = 0; i < propertyOverride.length; ++i ) { + CSSValue value = propertyOverride[ i ]; + if( value != null ) { + if( value instanceof DataFormatValue ) { + result = prime * result + StyleManagerUtils.dataFormatHash( (DataFormatValue)value ); + } else { + String cssText = value.getCssText(); + if ( cssText != null ) { + result = prime * result + cssText.hashCode(); + } + } + } + } + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BirtStyle other = (BirtStyle) obj; + + for( int i = 0; i < StyleManager.COMPARE_CSS_PROPERTIES.length; ++i ) { + int prop = StyleManager.COMPARE_CSS_PROPERTIES[ i ]; + CSSValue value1 = getProperty( prop ); + CSSValue value2 = other.getProperty( prop ); + if( ! StyleManagerUtils.objectsEqual( value1, value2 ) ) { + // System.out.println( "Differ on " + i + " because " + value1 + " != " + value2 ); + return false; + } + } + if( ! StyleManagerUtils.objectsEqual( getProperty( BirtStyle.TEXT_ROTATION ), other.getProperty( BirtStyle.TEXT_ROTATION ) ) ) { + // System.out.println( "Differ on BirtStyle.TEXT_ROTATION because " + getProperty( BirtStyle.TEXT_ROTATION ) + " != " + other.getProperty( BirtStyle.TEXT_ROTATION ) ); + return false; + } + + + // Number format + if( ! StyleManagerUtils.dataFormatsEquivalent( (DataFormatValue)getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ) + , (DataFormatValue)other.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ) ) ) { + // System.out.println( "Differ on DataFormat" ); + return false; + } + + // Font + if( ! FontManager.fontsEquivalent( this, other ) ) { + // System.out.println( "Differ on font" ); + return false; + } + return true; + } + private static Float extractRotation(IContent element) { Object generatorObject = element.getGenerateBy(); if( generatorObject instanceof ReportElementDesign ) { @@ -155,10 +148,7 @@ private static Float extractRotation(IContent element) { } public void setProperty( int propIndex, CSSValue newValue ) { - if( propertyOverride == null ) { - propertyOverride = new CSSValue[ BirtStyle.NUMBER_OF_STYLES ]; - } - propertyOverride[ propIndex ] = newValue; + propertyOverride[ propIndex ] = newValue; } public CSSValue getProperty( int propIndex ) { @@ -168,7 +158,7 @@ public CSSValue getProperty( int propIndex ) { && ( propertyOverride[ propIndex ] != null ) ) { return propertyOverride[ propIndex ]; } - if( ( elemStyle != null ) && ( propIndex < StyleConstants.NUMBER_OF_STYLE ) ) { + if( ( elemStyle != null ) && ( propIndex < StylePropertyIndexes.NUMBER_OF_STYLE ) ) { return elemStyle.getProperty( propIndex ); } else { return null; @@ -177,18 +167,11 @@ public CSSValue getProperty( int propIndex ) { } public void setFloat( int propIndex, short units, float newValue ) { - if( propertyOverride == null ) { - propertyOverride = new CSSValue[ BirtStyle.NUMBER_OF_STYLES ]; - } propertyOverride[ propIndex ] = new FloatValue( units, newValue ); } public void parseString( int propIndex, String newValue ) { - if( propertyOverride == null ) { - propertyOverride = new CSSValue[ BirtStyle.NUMBER_OF_STYLES ]; - } - - if( propIndex < StyleConstants.NUMBER_OF_STYLE ) { + if( propIndex < StylePropertyIndexes.NUMBER_OF_BIRT_PROPERTIES ) { propertyOverride[ propIndex ] = cssEngine.parsePropertyValue( propIndex , newValue ); } else { propertyOverride[ propIndex ] = new StringValue( StringValue.CSS_STRING, newValue); @@ -224,25 +207,25 @@ protected BirtStyle clone() { return result; } - private static final BitSet SPECIAL_OVERLAY_PROPERTIES = PrepareSpecialOverlayProperties(); + private static final boolean[] SPECIAL_OVERLAY_PROPERTIES = PrepareSpecialOverlayProperties(); - private static BitSet PrepareSpecialOverlayProperties() { - BitSet result = new BitSet( BirtStyle.NUMBER_OF_STYLES ); - result.set( StyleConstants.STYLE_BACKGROUND_COLOR ); - result.set( StyleConstants.STYLE_BORDER_BOTTOM_STYLE ); - result.set( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ); - result.set( StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); - result.set( StyleConstants.STYLE_BORDER_LEFT_STYLE ); - result.set( StyleConstants.STYLE_BORDER_LEFT_WIDTH ); - result.set( StyleConstants.STYLE_BORDER_LEFT_COLOR ); - result.set( StyleConstants.STYLE_BORDER_RIGHT_STYLE ); - result.set( StyleConstants.STYLE_BORDER_RIGHT_WIDTH ); - result.set( StyleConstants.STYLE_BORDER_RIGHT_COLOR ); - result.set( StyleConstants.STYLE_BORDER_TOP_STYLE ); - result.set( StyleConstants.STYLE_BORDER_TOP_WIDTH ); - result.set( StyleConstants.STYLE_BORDER_TOP_COLOR ); - result.set( StyleConstants.STYLE_VERTICAL_ALIGN ); - result.set( StyleConstants.STYLE_DATA_FORMAT ); + private static boolean[] PrepareSpecialOverlayProperties() { + boolean[] result = new boolean[ BirtStyle.NUMBER_OF_STYLES ]; + result[ StylePropertyIndexes.STYLE_BACKGROUND_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_TOP_STYLE ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_TOP_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_VERTICAL_ALIGN ] = true; + result[ StylePropertyIndexes.STYLE_DATA_FORMAT ] = true; return result; } @@ -265,45 +248,40 @@ public void overlay( IContent element ) { // System.out.println( "overlay: Before - " + this.toString() ); IStyle style = element.getComputedStyle(); - for(int propIndex = 0; propIndex < StyleConstants.NUMBER_OF_STYLE; ++propIndex ) { - if( ! SPECIAL_OVERLAY_PROPERTIES.get(propIndex) ) { + for(int propIndex = 0; propIndex < StylePropertyIndexes.NUMBER_OF_BIRT_PROPERTIES; ++propIndex ) { + if( ! SPECIAL_OVERLAY_PROPERTIES[ propIndex ] ) { CSSValue overlayValue = style.getProperty( propIndex ); - CSSValue localValue = getProperty( propIndex ); - if( ( overlayValue != null ) && ! overlayValue.equals( localValue ) ) { + if( overlayValue != null ) { setProperty( propIndex, overlayValue ); } } } // Background colour, only overlay if not null and not transparent - CSSValue overlayBgColour = style.getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); - CSSValue localBgColour = getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); + CSSValue overlayBgColour = style.getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); if( ( overlayBgColour != null ) && ( ! CSSConstants.CSS_TRANSPARENT_VALUE.equals( overlayBgColour.getCssText() ) ) - && ( ! overlayBgColour.equals( localBgColour ) ) ) { - setProperty( StyleConstants.STYLE_BACKGROUND_COLOR, overlayBgColour ); + ) { + setProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR, overlayBgColour ); } // Borders, only overlay if all three components are not null - and then overlay all three - overlayBorder( style, StyleConstants.STYLE_BORDER_BOTTOM_STYLE, StyleConstants.STYLE_BORDER_BOTTOM_WIDTH, StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); - overlayBorder( style, StyleConstants.STYLE_BORDER_LEFT_STYLE, StyleConstants.STYLE_BORDER_LEFT_WIDTH, StyleConstants.STYLE_BORDER_LEFT_COLOR ); - overlayBorder( style, StyleConstants.STYLE_BORDER_RIGHT_STYLE, StyleConstants.STYLE_BORDER_RIGHT_WIDTH, StyleConstants.STYLE_BORDER_RIGHT_COLOR ); - overlayBorder( style, StyleConstants.STYLE_BORDER_TOP_STYLE, StyleConstants.STYLE_BORDER_TOP_WIDTH, StyleConstants.STYLE_BORDER_TOP_COLOR ); + overlayBorder( style, StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE, StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH, StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ); + overlayBorder( style, StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE, StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH, StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR ); + overlayBorder( style, StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE, StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH, StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR ); + overlayBorder( style, StylePropertyIndexes.STYLE_BORDER_TOP_STYLE, StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH, StylePropertyIndexes.STYLE_BORDER_TOP_COLOR ); // Vertical align, not computed safely, so only check immediate style - CSSValue verticalAlign = element.getStyle().getProperty( StyleConstants.STYLE_VERTICAL_ALIGN ); + CSSValue verticalAlign = element.getStyle().getProperty( StylePropertyIndexes.STYLE_VERTICAL_ALIGN ); if( verticalAlign != null ) { - CSSValue localValue = getProperty( StyleConstants.STYLE_VERTICAL_ALIGN ); - if( ! verticalAlign.equals( localValue ) ) { - setProperty( StyleConstants.STYLE_VERTICAL_ALIGN, verticalAlign ); - } + setProperty( StylePropertyIndexes.STYLE_VERTICAL_ALIGN, verticalAlign ); } // Data format - CSSValue overlayDataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); - CSSValue localDataFormat = getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue overlayDataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); + CSSValue localDataFormat = getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( ! StyleManagerUtils.dataFormatsEquivalent((DataFormatValue)overlayDataFormat, (DataFormatValue)localDataFormat) ) { - setProperty( StyleConstants.STYLE_DATA_FORMAT, StyleManagerUtils.cloneDataFormatValue((DataFormatValue)overlayDataFormat) ); + setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, StyleManagerUtils.cloneDataFormatValue((DataFormatValue)overlayDataFormat) ); } // Rotation @@ -311,7 +289,7 @@ public void overlay( IContent element ) { if( rotation != null ) { setFloat(TEXT_ROTATION, CSSPrimitiveValue.CSS_DEG, rotation); } - + // System.out.println( "overlay: After - " + this.toString() ); } @@ -322,9 +300,9 @@ public String toString() { CSSValue val = getProperty( i ); if( val != null ) { try { - result.append(cssProperties[i]).append(':').append(val.getCssText()).append("; "); + result.append(StylePropertyIndexes.getPropertyName(i)).append(':').append(val.getCssText()).append("; "); } catch(Exception ex) { - result.append(cssProperties[i]).append(":{").append(ex.getMessage()).append("}; "); + result.append(StylePropertyIndexes.getPropertyName(i)).append(":{").append(ex.getMessage()).append("}; "); } } } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/ExcelEmitter.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/ExcelEmitter.java index c8642502c55..5b5bb9f47ef 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/ExcelEmitter.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/ExcelEmitter.java @@ -22,6 +22,7 @@ import java.net.URL; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.api.IRenderOption; import org.eclipse.birt.report.engine.content.IAutoTextContent; @@ -57,6 +58,8 @@ public abstract class ExcelEmitter implements IContentEmitter { public static final String REMOVE_BLANK_ROWS = "ExcelEmitter.RemoveBlankRows"; public static final String ROTATION_PROP = "ExcelEmitter.Rotation"; public static final String FORCEAUTOCOLWIDTHS_PROP = "ExcelEmitter.ForceAutoColWidths"; + public static final String AUTO_COL_WIDTHS_HEADER = "ExcelEmitter.AutoColWidthsIncludeTableHeader"; + public static final String AUTO_COL_WIDTHS_FOOTER = "ExcelEmitter.AutoColWidthsIncludeTableFooter"; public static final String SINGLE_SHEET = "ExcelEmitter.SingleSheet"; public static final String SINGLE_SHEET_PAGE_BREAKS = "ExcelEmitter.SingleSheetWithPageBreaks"; public static final String PRINT_BREAK_AFTER = "ExcelEmitter.InsertPrintBreakAfter"; @@ -70,6 +73,7 @@ public abstract class ExcelEmitter implements IContentEmitter { public static final String BLANK_ROW_AFTER_TOP_LEVEL_TABLE = "ExcelEmitter.BlankRowAfterTopLevelTable"; public static final String SPANNED_ROW_HEIGHT = "ExcelEmitter.SpannedRowHeight"; public static final String NEST_TABLE_IN_LAST_CELL = "ExcelEmitter.NestedTableInLastCell"; + public static final String NO_STYLES = "ExcelEmitter.NoStyles"; public static final int SPANNED_ROW_HEIGHT_SPREAD = 0; public static final int SPANNED_ROW_HEIGHT_FIRST = 1; public static final int SPANNED_ROW_HEIGHT_IGNORED = 2; @@ -83,7 +87,13 @@ public abstract class ExcelEmitter implements IContentEmitter { public static final String DISPLAYROWCOLHEADINGS_PROP = "ExcelEmitter.DisplayRowColHeadings"; public static final String DISPLAYZEROS_PROP = "ExcelEmitter.DisplayZeros"; + public static final String VALUE_AS_FORMULA = "ExcelEmitter.ValueAsFormula"; + public static final String FORMULA = "ExcelEmitter.Formula"; + public static final String TEMPLATE_FILE = "ExcelEmitter.TemplateFile"; + public static final String FORCE_RECALCULATION = "ExcelEmitter.ForceRecalculation"; + + public static final String EXTRACT_MODE = "ExcelEmitter.ExtractMode"; /** * Logger. @@ -128,6 +138,11 @@ public abstract class ExcelEmitter implements IContentEmitter { */ private StyleManagerUtils.Factory utilsFactory; + /** + * Extract mode is enabled + */ + protected boolean extractMode; + protected ExcelEmitter(StyleManagerUtils.Factory utilsFactory) { this.utilsFactory = utilsFactory; try { @@ -163,6 +178,12 @@ protected ExcelEmitter(StyleManagerUtils.Factory utilsFactory) { */ protected abstract Workbook openWorkbook( File templateFile ) throws IOException; + /** + * Return true if the emitter is in ExtractMode + */ + public boolean isExtractMode() { + return extractMode; + } public void initialize( IEmitterServices service ) throws BirtException { renderOptions = service.getRenderOption(); @@ -183,18 +204,25 @@ public void initialize( IEmitterServices service ) throws BirtException { public void start( IReportContent report ) throws BirtException { log.addPrefix('>'); - log.info( 0, "start:" + report.toString(), null); + log.info( 0, "start:" + report.getTitle(), null); - String templatePath = EmitterServices.stringOption( renderOptions, report, TEMPLATE_FILE, null ); + extractMode = EmitterServices.booleanOption( renderOptions, report, EXTRACT_MODE, false ); + String templatePath = extractMode ? null : EmitterServices.stringOption( renderOptions, report, TEMPLATE_FILE, null ); Workbook wb; if( templatePath != null ) { URL templateURL = report.getReportContext().getResource( templatePath ); + if( templateURL == null ) { + throw new BirtException( EmitterServices.getPluginName() + , "Unable locate template resource for " + templatePath + , null + ); + } File templateFile; try { templateFile = new File( templateURL.toURI() ); } catch( URISyntaxException ex ) { throw new BirtException( EmitterServices.getPluginName() - , "Unable locate template resource for " + templatePath + , "Unable locate template file for " + templatePath , ex ); } @@ -210,6 +238,10 @@ public void start( IReportContent report ) throws BirtException { wb = createWorkbook(); } + if( EmitterServices.booleanOption( renderOptions, report, ExcelEmitter.FORCE_RECALCULATION, false ) ) { + wb.setForceFormulaRecalculation(true); + } + CSSEngine cssEngine = report.getRoot().getCSSEngine(); StyleManagerUtils smu = utilsFactory.create(log); @@ -262,9 +294,9 @@ public void end( IReportContent report ) throws BirtException { ex.printStackTrace(); throw new BirtException( EmitterServices.getPluginName() - , "Unable to save file (\"{}\")" - , new Object[] { reportOutputFilename } - , null + , reportOutputStream == null ? + "Unable to save file (\"" + reportOutputFilename + "\")" + : "Unable to save file to stream" , ex ); } finally { @@ -275,6 +307,15 @@ public void end( IReportContent report ) throws BirtException { log.debug("ex:", ex.toString()); } } + + if (handlerState.getWb() instanceof SXSSFWorkbook) { + // dispose SXSSFWorkbook to let it removing temporary files + SXSSFWorkbook wb = (SXSSFWorkbook) handlerState.getWb(); + if (!wb.dispose()) { + log.error(0, "Failed to dispose SXSSFWorkbook.", new Exception("SXSSFWorkbook.dispose() has returned false.")); + } + } + handlerState = null; reportOutputFilename = null; reportOutputStream = null; @@ -398,7 +439,9 @@ public void startForeign( IForeignContent foreign ) throws BirtException { public void startImage( IImageContent image ) throws BirtException { log.debug( handlerState, "startImage: " ); - handlerState.getHandler().emitImage(handlerState,image); + if( ! extractMode ) { + handlerState.getHandler().emitImage(handlerState,image); + } } public void startContent( IContent content ) throws BirtException { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/FontManager.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/FontManager.java index dc56773b71a..4e41e848b80 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/FontManager.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/FontManager.java @@ -22,7 +22,6 @@ import org.apache.poi.ss.usermodel.Workbook; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.engine.CSSEngine; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.ListValue; import org.eclipse.birt.report.engine.css.engine.value.StringValue; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; @@ -106,12 +105,12 @@ private static String cleanupQuotes( CSSValue value ) { } static int COMPARE_CSS_PROPERTIES[] = { - StyleConstants.STYLE_FONT_FAMILY, - StyleConstants.STYLE_FONT_SIZE, - StyleConstants.STYLE_FONT_WEIGHT, - StyleConstants.STYLE_FONT_STYLE, - StyleConstants.STYLE_TEXT_UNDERLINE, - StyleConstants.STYLE_COLOR, + StylePropertyIndexes.STYLE_FONT_FAMILY, + StylePropertyIndexes.STYLE_FONT_SIZE, + StylePropertyIndexes.STYLE_FONT_WEIGHT, + StylePropertyIndexes.STYLE_FONT_STYLE, + StylePropertyIndexes.STYLE_TEXT_UNDERLINE, + StylePropertyIndexes.STYLE_COLOR, }; /** @@ -149,33 +148,33 @@ private Font createFont(BirtStyle birtStyle) { Font font = workbook.createFont(); // Family - String fontName = smu.poiFontNameFromBirt(cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_FONT_FAMILY ))); + String fontName = smu.poiFontNameFromBirt(cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_FAMILY ))); if( fontName == null ) { fontName = "Calibri"; } font.setFontName(fontName); // Size - short fontSize = smu.fontSizeInPoints(cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_FONT_SIZE ))); + short fontSize = smu.fontSizeInPoints(cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_SIZE ))); if(fontSize > 0) { font.setFontHeightInPoints(fontSize); } // Weight - short fontWeight = smu.poiFontWeightFromBirt(cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_FONT_WEIGHT ))); + short fontWeight = smu.poiFontWeightFromBirt(cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_WEIGHT ))); if(fontWeight > 0) { font.setBoldweight(fontWeight); } // Style - String fontStyle = cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_FONT_STYLE ) ); + String fontStyle = cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_STYLE ) ); if( CSSConstants.CSS_ITALIC_VALUE.equals(fontStyle) || CSSConstants.CSS_OBLIQUE_VALUE.equals(fontStyle)) { font.setItalic(true); } // Underline - String fontUnderline = cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_TEXT_UNDERLINE ) ); + String fontUnderline = cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_TEXT_UNDERLINE ) ); if( CSSConstants.CSS_UNDERLINE_VALUE.equals(fontUnderline) ) { font.setUnderline(FontUnderline.SINGLE.getByteValue()); } // Colour - smu.addColourToFont( workbook, font, cleanupQuotes( birtStyle.getProperty( StyleConstants.STYLE_COLOR ) ) ); + smu.addColourToFont( workbook, font, cleanupQuotes( birtStyle.getProperty( StylePropertyIndexes.STYLE_COLOR ) ) ); fonts.add(new FontPair(birtStyle, font)); return font; @@ -211,12 +210,12 @@ public Font getFont( BirtStyle birtStyle ) { return getDefaultFont(); } - if( ( birtStyle.getProperty( StyleConstants.STYLE_FONT_FAMILY ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_FONT_SIZE ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_FONT_WEIGHT ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_FONT_STYLE ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_TEXT_UNDERLINE ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_COLOR ) == null ) + if( ( birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_FAMILY ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_SIZE ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_WEIGHT ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_STYLE ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_TEXT_UNDERLINE ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_COLOR ) == null ) ) { return getDefaultFont(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/HandlerState.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/HandlerState.java index 59f262d3d38..f667c4c8f98 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/HandlerState.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/HandlerState.java @@ -22,7 +22,6 @@ import org.apache.poi.ss.usermodel.Workbook; import org.eclipse.birt.report.engine.api.IRenderOption; import org.eclipse.birt.report.engine.api.ReportEngine; -import org.eclipse.birt.report.engine.emitter.IContentEmitter; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; import uk.co.spudsoft.birt.emitters.excel.handlers.IHandler; @@ -32,7 +31,7 @@ public class HandlerState { /** * The emitter itself */ - private IContentEmitter emitter; + private ExcelEmitter emitter; /** * Logger. */ @@ -74,7 +73,7 @@ public class HandlerState { */ public List images = new ArrayList(); /** - * Possible name for the current sheet + * Possible rename for the current sheet */ public String sheetName; /** @@ -128,7 +127,7 @@ public class HandlerState { * @param wb * @param sm */ - public HandlerState(IContentEmitter emitter, Logger log, StyleManagerUtils smu, Workbook wb, StyleManager sm, IRenderOption renderOptions) { + public HandlerState(ExcelEmitter emitter, Logger log, StyleManagerUtils smu, Workbook wb, StyleManager sm, IRenderOption renderOptions) { super(); this.emitter = emitter; this.log = log; @@ -138,7 +137,7 @@ public HandlerState(IContentEmitter emitter, Logger log, StyleManagerUtils smu, this.renderOptions = renderOptions; } - public IContentEmitter getEmitter() { + public ExcelEmitter getEmitter() { return emitter; } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManager.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManager.java index 54003a52892..c26e58f21c9 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManager.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManager.java @@ -13,9 +13,10 @@ package uk.co.spudsoft.birt.emitters.excel; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; @@ -23,8 +24,6 @@ import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.engine.CSSEngine; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; -import org.eclipse.birt.report.engine.css.engine.value.DataFormatValue; import org.eclipse.birt.report.engine.css.engine.value.FloatValue; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.w3c.dom.css.CSSValue; @@ -42,7 +41,7 @@ public class StyleManager { * StylePair maintains the relationship between a BIRT style and a POI style. * @author Jim Talbut * - */ + * private class StylePair { public BirtStyle birtStyle; public CellStyle poiStyle; @@ -51,13 +50,15 @@ public StylePair(BirtStyle birtStyle, CellStyle poiStyle) { this.birtStyle = birtStyle; this.poiStyle = poiStyle; } - } + }*/ private Workbook workbook; private FontManager fm; - private List styles = new ArrayList(); + // private List styles = new ArrayList(); + private Map< BirtStyle, CellStyle > styleMap = new HashMap< BirtStyle, CellStyle >(); private StyleManagerUtils smu; private CSSEngine cssEngine; + @SuppressWarnings("unused") private Logger log; private Locale locale; @@ -92,22 +93,22 @@ public CSSEngine getCssEngine() { static int COMPARE_CSS_PROPERTIES[] = { - StyleConstants.STYLE_TEXT_ALIGN, - StyleConstants.STYLE_BACKGROUND_COLOR, - StyleConstants.STYLE_BORDER_TOP_STYLE, - StyleConstants.STYLE_BORDER_TOP_WIDTH, - StyleConstants.STYLE_BORDER_TOP_COLOR, - StyleConstants.STYLE_BORDER_LEFT_STYLE, - StyleConstants.STYLE_BORDER_LEFT_WIDTH, - StyleConstants.STYLE_BORDER_LEFT_COLOR, - StyleConstants.STYLE_BORDER_RIGHT_STYLE, - StyleConstants.STYLE_BORDER_RIGHT_WIDTH, - StyleConstants.STYLE_BORDER_RIGHT_COLOR, - StyleConstants.STYLE_BORDER_BOTTOM_STYLE, - StyleConstants.STYLE_BORDER_BOTTOM_WIDTH, - StyleConstants.STYLE_BORDER_BOTTOM_COLOR, - StyleConstants.STYLE_WHITE_SPACE, - StyleConstants.STYLE_VERTICAL_ALIGN, + StylePropertyIndexes.STYLE_TEXT_ALIGN, + StylePropertyIndexes.STYLE_BACKGROUND_COLOR, + StylePropertyIndexes.STYLE_BORDER_TOP_STYLE, + StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH, + StylePropertyIndexes.STYLE_BORDER_TOP_COLOR, + StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE, + StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH, + StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR, + StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE, + StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH, + StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR, + StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE, + StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH, + StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR, + StylePropertyIndexes.STYLE_WHITE_SPACE, + StylePropertyIndexes.STYLE_VERTICAL_ALIGN, }; /** @@ -120,12 +121,12 @@ public CSSEngine getCssEngine() { * The second BIRT style to be compared. * @return * true if style1 and style2 would produce identical CellStyles if passed to createStyle. - */ + * private boolean stylesEquivalent( BirtStyle style1, BirtStyle style2) { // System.out.println( "style1: " + style1 ); // System.out.println( "style2: " + style2 ); - + for( int i = 0; i < COMPARE_CSS_PROPERTIES.length; ++i ) { int prop = COMPARE_CSS_PROPERTIES[ i ]; CSSValue value1 = style1.getProperty( prop ); @@ -142,8 +143,8 @@ private boolean stylesEquivalent( BirtStyle style1, BirtStyle style2) { // Number format - if( ! StyleManagerUtils.dataFormatsEquivalent( (DataFormatValue)style1.getProperty( StyleConstants.STYLE_DATA_FORMAT ) - , (DataFormatValue)style2.getProperty( StyleConstants.STYLE_DATA_FORMAT ) ) ) { + if( ! StyleManagerUtils.dataFormatsEquivalent( (DataFormatValue)style1.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ) + , (DataFormatValue)style2.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ) ) ) { // System.out.println( "Differ on DataFormat" ); return false; } @@ -154,7 +155,7 @@ private boolean stylesEquivalent( BirtStyle style1, BirtStyle style2) { return false; } return true; - } + }*/ /** * Create a new POI CellStyle based upon a BIRT style. @@ -171,29 +172,29 @@ private CellStyle createStyle( BirtStyle birtStyle ) { poiStyle.setFont(font); } // Alignment - poiStyle.setAlignment(smu.poiAlignmentFromBirtAlignment(birtStyle.getString( StyleConstants.STYLE_TEXT_ALIGN ))); + poiStyle.setAlignment(smu.poiAlignmentFromBirtAlignment(birtStyle.getString( StylePropertyIndexes.STYLE_TEXT_ALIGN ))); // Background colour - smu.addBackgroundColourToStyle(workbook, poiStyle, birtStyle.getString( StyleConstants.STYLE_BACKGROUND_COLOR )); + smu.addBackgroundColourToStyle(workbook, poiStyle, birtStyle.getString( StylePropertyIndexes.STYLE_BACKGROUND_COLOR )); // Top border - smu.applyBorderStyle(workbook, poiStyle, BorderSide.TOP, birtStyle.getProperty(StyleConstants.STYLE_BORDER_TOP_COLOR), birtStyle.getProperty(StyleConstants.STYLE_BORDER_TOP_STYLE), birtStyle.getProperty(StyleConstants.STYLE_BORDER_TOP_WIDTH)); + smu.applyBorderStyle(workbook, poiStyle, BorderSide.TOP, birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_TOP_COLOR), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_TOP_STYLE), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH)); // Left border - smu.applyBorderStyle(workbook, poiStyle, BorderSide.LEFT, birtStyle.getProperty(StyleConstants.STYLE_BORDER_LEFT_COLOR), birtStyle.getProperty(StyleConstants.STYLE_BORDER_LEFT_STYLE), birtStyle.getProperty(StyleConstants.STYLE_BORDER_LEFT_WIDTH)); + smu.applyBorderStyle(workbook, poiStyle, BorderSide.LEFT, birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH)); // Right border - smu.applyBorderStyle(workbook, poiStyle, BorderSide.RIGHT, birtStyle.getProperty(StyleConstants.STYLE_BORDER_RIGHT_COLOR), birtStyle.getProperty(StyleConstants.STYLE_BORDER_RIGHT_STYLE), birtStyle.getProperty(StyleConstants.STYLE_BORDER_RIGHT_WIDTH)); + smu.applyBorderStyle(workbook, poiStyle, BorderSide.RIGHT, birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH)); // Bottom border - smu.applyBorderStyle(workbook, poiStyle, BorderSide.BOTTOM, birtStyle.getProperty(StyleConstants.STYLE_BORDER_BOTTOM_COLOR), birtStyle.getProperty(StyleConstants.STYLE_BORDER_BOTTOM_STYLE), birtStyle.getProperty(StyleConstants.STYLE_BORDER_BOTTOM_WIDTH)); + smu.applyBorderStyle(workbook, poiStyle, BorderSide.BOTTOM, birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH)); // Number format smu.applyNumberFormat(workbook, birtStyle, poiStyle, locale); // Whitespace/wrap - if( CSSConstants.CSS_PRE_VALUE.equals( birtStyle.getString( StyleConstants.STYLE_WHITE_SPACE ) ) ) { + if( CSSConstants.CSS_PRE_VALUE.equals( birtStyle.getString( StylePropertyIndexes.STYLE_WHITE_SPACE ) ) ) { poiStyle.setWrapText( true ); } // Vertical alignment - if( CSSConstants.CSS_TOP_VALUE.equals( birtStyle.getString( StyleConstants.STYLE_VERTICAL_ALIGN ) ) ) { + if( CSSConstants.CSS_TOP_VALUE.equals( birtStyle.getString( StylePropertyIndexes.STYLE_VERTICAL_ALIGN ) ) ) { poiStyle.setVerticalAlignment( CellStyle.VERTICAL_TOP ); - } else if ( CSSConstants.CSS_MIDDLE_VALUE.equals( birtStyle.getString( StyleConstants.STYLE_VERTICAL_ALIGN ) ) ) { + } else if ( CSSConstants.CSS_MIDDLE_VALUE.equals( birtStyle.getString( StylePropertyIndexes.STYLE_VERTICAL_ALIGN ) ) ) { poiStyle.setVerticalAlignment( CellStyle.VERTICAL_CENTER ); - } else if ( CSSConstants.CSS_BOTTOM_VALUE.equals( birtStyle.getString( StyleConstants.STYLE_VERTICAL_ALIGN ) ) ) { + } else if ( CSSConstants.CSS_BOTTOM_VALUE.equals( birtStyle.getString( StylePropertyIndexes.STYLE_VERTICAL_ALIGN ) ) ) { poiStyle.setVerticalAlignment( CellStyle.VERTICAL_BOTTOM ); } // Rotation @@ -202,25 +203,22 @@ private CellStyle createStyle( BirtStyle birtStyle ) { poiStyle.setRotation( (short) ((FloatValue)rotation).getFloatValue() ); } - styles.add(new StylePair( birtStyle.clone(), poiStyle ) ); + styleMap.put( birtStyle, poiStyle ); return poiStyle; } public CellStyle getStyle( BirtStyle birtStyle ) { - for(StylePair stylePair : styles) { - if(stylesEquivalent(birtStyle, stylePair.birtStyle)) { - // System.err.println( "Equivalent :\n\t" + birtStyle + "\n\t" + stylePair.birtStyle ); - return stylePair.poiStyle; - } + CellStyle poiStyle = styleMap.get(birtStyle); + if( poiStyle == null ) { + poiStyle = createStyle( birtStyle ); } - - return createStyle(birtStyle); + return poiStyle; } private BirtStyle birtStyleFromCellStyle( CellStyle source ) { - for(StylePair stylePair : styles) { - if( source.equals(stylePair.poiStyle) ) { - return stylePair.birtStyle.clone(); + for( Entry< BirtStyle, CellStyle > stylePair : styleMap.entrySet() ) { + if( source.equals(stylePair.getValue()) ) { + return stylePair.getKey().clone(); } } @@ -267,24 +265,24 @@ public CellStyle getStyleWithBorders( CellStyle source BirtStyle birtStyle = birtStyleFromCellStyle( source ); if( ( borderStyleBottom != null ) && ( borderWidthBottom != null ) && ( borderColourBottom != null ) ){ - birtStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE, borderStyleBottom ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH, borderWidthBottom ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR, borderColourBottom ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE, borderStyleBottom ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH, borderWidthBottom ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR, borderColourBottom ); } if( ( borderStyleLeft != null ) && ( borderWidthLeft != null ) && ( borderColourLeft != null ) ){ - birtStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_STYLE, borderStyleLeft ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH, borderWidthLeft ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_COLOR, borderColourLeft ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE, borderStyleLeft ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH, borderWidthLeft ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR, borderColourLeft ); } if( ( borderStyleRight != null ) && ( borderWidthRight != null ) && ( borderColourRight != null ) ){ - birtStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_STYLE, borderStyleRight ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH, borderWidthRight ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_COLOR, borderColourRight ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE, borderStyleRight ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH, borderWidthRight ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR, borderColourRight ); } if( ( borderStyleTop != null ) && ( borderWidthTop != null ) && ( borderColourTop != null ) ){ - birtStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_STYLE, borderStyleTop ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_WIDTH, borderWidthTop ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_COLOR, borderColourTop ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_STYLE, borderStyleTop ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH, borderWidthTop ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_COLOR, borderColourTop ); } CellStyle newStyle = getStyle( birtStyle ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerHUtils.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerHUtils.java index 3734eef682d..85a0b20386f 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerHUtils.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerHUtils.java @@ -22,13 +22,10 @@ import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.RichTextString; -import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide; -import org.eclipse.birt.report.engine.content.IPageContent; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.dom.AreaStyle; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.ir.DimensionType; import org.eclipse.birt.report.model.api.util.ColorUtil; import org.w3c.dom.css.CSSValue; @@ -224,7 +221,7 @@ public void addBackgroundColourToStyle(Workbook workbook, CellStyle style, Strin public Font correctFontColorIfBackground(FontManager fm, Workbook wb, BirtStyle birtStyle, Font font) { HSSFPalette palette = ((HSSFWorkbook)wb).getCustomPalette(); - CSSValue bgColour = birtStyle.getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); + CSSValue bgColour = birtStyle.getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); int bgRgb[] = parseColour( bgColour == null ? null : bgColour.getCssText(), "white" ); short fgRgb[] = HSSFColor.BLACK.triplet; @@ -258,30 +255,4 @@ public int anchorDyFromPoints( float height, float rowHeight ) { return (int)( 255.0 * height / rowHeight ); } - @Override - public void prepareMarginDimensions(Sheet sheet, IPageContent page) { - double headerHeight = 0.5; - double footerHeight = 0.5; - if( ( page.getHeaderHeight() != null ) && isAbsolute( page.getHeaderHeight() ) ) { - headerHeight = page.getHeaderHeight().convertTo(DimensionType.UNITS_IN); - sheet.getPrintSetup().setHeaderMargin(headerHeight); - } - if( ( page.getFooterHeight() != null ) && isAbsolute( page.getFooterHeight() ) ) { - footerHeight = page.getFooterHeight().convertTo(DimensionType.UNITS_IN); - sheet.getPrintSetup().setFooterMargin(footerHeight); - } - if( ( page.getMarginBottom() != null ) && isAbsolute( page.getMarginBottom() ) ) { - sheet.setMargin(Sheet.BottomMargin, footerHeight + page.getMarginBottom().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginLeft() != null ) && isAbsolute( page.getMarginLeft() ) ) { - sheet.setMargin(Sheet.LeftMargin, page.getMarginLeft().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginRight() != null ) && isAbsolute( page.getMarginRight() ) ) { - sheet.setMargin(Sheet.RightMargin, page.getMarginRight().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginTop() != null ) && isAbsolute( page.getMarginTop() ) ) { - sheet.setMargin(Sheet.TopMargin, headerHeight + page.getMarginTop().convertTo(DimensionType.UNITS_IN)); - } - } - } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerUtils.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerUtils.java index 886c558117d..1c60a63c19a 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerUtils.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerUtils.java @@ -17,6 +17,7 @@ import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; +import java.awt.font.TextMeasurer; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -40,11 +41,11 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide; import org.eclipse.birt.report.engine.content.IPageContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.DataFormatValue; import org.eclipse.birt.report.engine.css.engine.value.StringValue; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.eclipse.birt.report.engine.ir.DimensionType; +import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants; import org.eclipse.birt.report.model.api.util.ColorUtil; import org.w3c.dom.css.CSSValue; @@ -100,6 +101,29 @@ public static boolean objectsEqual(Object lhs, Object rhs) { return (lhs == null) ? (rhs == null) : lhs.equals(rhs); } + + + public static int dataFormatHash( DataFormatValue dataFormat ) { + final int prime = 31; + int result = 1; + + result = prime * result + ((dataFormat.getStringLocale() == null) ? 0 : dataFormat.getStringLocale().hashCode()); + result = prime * result + ((dataFormat.getStringPattern() == null) ? 0 : dataFormat.getStringPattern().hashCode()); + + result = prime * result + ((dataFormat.getDateLocale() == null) ? 0 : dataFormat.getDateLocale().hashCode()); + result = prime * result + ((dataFormat.getDatePattern() == null) ? 0 : dataFormat.getDatePattern().hashCode()); + + result = prime * result + ((dataFormat.getDateTimeLocale() == null) ? 0 : dataFormat.getDateTimeLocale().hashCode()); + result = prime * result + ((dataFormat.getDateTimePattern() == null) ? 0 : dataFormat.getDateTimePattern().hashCode()); + + result = prime * result + ((dataFormat.getTimeLocale() == null) ? 0 : dataFormat.getTimeLocale().hashCode()); + result = prime * result + ((dataFormat.getTimePattern() == null) ? 0 : dataFormat.getTimePattern().hashCode()); + + result = prime * result + ((dataFormat.getNumberLocale() == null) ? 0 : dataFormat.getNumberLocale().hashCode()); + result = prime * result + ((dataFormat.getNumberPattern() == null) ? 0 : dataFormat.getNumberPattern().hashCode()); + return result; + } + public static boolean dataFormatsEquivalent( DataFormatValue dataFormat1, DataFormatValue dataFormat2 ) { if( dataFormat1 == null ) { return ( dataFormat2 == null ); @@ -335,8 +359,6 @@ public int poiImageTypeFromMimeType( String mimeType, byte[] data ) { return Workbook.PICTURE_TYPE_JPEG; } else if( "image/png".equals(mimeType) ) { return Workbook.PICTURE_TYPE_PNG; - } else if ( "image/bmp".equals( mimeType ) ) { - return Workbook.PICTURE_TYPE_DIB; } else { if( null != data ) { log.debug( "Data bytes: " @@ -485,7 +507,23 @@ public boolean isPixels( DimensionType dim ) { * A string representing a data format in Excel. */ private String poiNumberFormatFromBirt(String birtFormat) { - if( "General Number".equalsIgnoreCase(birtFormat)) { + // The following formats are hard-coded copies of the non-localised values stored in + // org.eclipse.birt.report.designer.util.FormatNumberPattern. + // Accessing the subclasses directly, or using getPatternForCategory from FormatNumberPattern would + // introduce unacceptable dependencies. + if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_CURRENCY ) ) { + birtFormat = "#,##0.00"; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_FIXED ) ) { + birtFormat = "###0.00"; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_GENERAL_NUMBER ) ) { + return null; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_PERCENT ) ) { + birtFormat = "###0.00%"; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_SCIENTIFIC ) ) { + birtFormat = "0.00E00"; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_STANDARD ) ) { + return null; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_UNFORMATTED ) ) { return null; } if( birtFormat.startsWith( ExcelEmitter.CUSTOM_NUMBER_FORMAT ) ) { @@ -539,7 +577,7 @@ private String poiDateTimeFormatFromBirt(String birtFormat, Locale locale) { } public static String getNumberFormat( BirtStyle style ) { - CSSValue dataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue dataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dataFormat instanceof DataFormatValue ) { DataFormatValue dataFormatValue = (DataFormatValue)dataFormat; return dataFormatValue.getNumberPattern(); @@ -548,7 +586,7 @@ public static String getNumberFormat( BirtStyle style ) { } public static String getDateFormat( BirtStyle style ) { - CSSValue dataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue dataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dataFormat instanceof DataFormatValue ) { DataFormatValue dataFormatValue = (DataFormatValue)dataFormat; return dataFormatValue.getDatePattern(); @@ -557,7 +595,7 @@ public static String getDateFormat( BirtStyle style ) { } public static String getDateTimeFormat( BirtStyle style ) { - CSSValue dataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue dataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dataFormat instanceof DataFormatValue ) { DataFormatValue dataFormatValue = (DataFormatValue)dataFormat; return dataFormatValue.getDateTimePattern(); @@ -566,7 +604,7 @@ public static String getDateTimeFormat( BirtStyle style ) { } public static String getTimeFormat( BirtStyle style ) { - CSSValue dataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue dataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dataFormat instanceof DataFormatValue ) { DataFormatValue dataFormatValue = (DataFormatValue)dataFormat; return dataFormatValue.getTimePattern(); @@ -585,47 +623,47 @@ public static DataFormatValue cloneDataFormatValue(DataFormatValue dataValue) { } public static void setNumberFormat( BirtStyle style, String pattern, String locale ) { - DataFormatValue dfv = (DataFormatValue)style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + DataFormatValue dfv = (DataFormatValue)style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dfv == null ) { dfv = new DataFormatValue(); } else { dfv = cloneDataFormatValue( dfv ); } dfv.setNumberFormat( pattern, locale ); - style.setProperty( StyleConstants.STYLE_DATA_FORMAT, dfv); + style.setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, dfv); } public static void setDateFormat( BirtStyle style, String pattern, String locale ) { - DataFormatValue dfv = (DataFormatValue)style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + DataFormatValue dfv = (DataFormatValue)style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dfv == null ) { dfv = new DataFormatValue(); } else { dfv = cloneDataFormatValue( dfv ); } dfv.setDateFormat( pattern, locale ); - style.setProperty( StyleConstants.STYLE_DATA_FORMAT, dfv); + style.setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, dfv); } public static void setDateTimeFormat( BirtStyle style, String pattern, String locale ) { - DataFormatValue dfv = (DataFormatValue)style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + DataFormatValue dfv = (DataFormatValue)style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dfv == null ) { dfv = new DataFormatValue(); } else { dfv = cloneDataFormatValue( dfv ); } dfv.setDateTimeFormat( pattern, locale ); - style.setProperty( StyleConstants.STYLE_DATA_FORMAT, dfv); + style.setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, dfv); } public static void setTimeFormat( BirtStyle style, String pattern, String locale ) { - DataFormatValue dfv = (DataFormatValue)style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + DataFormatValue dfv = (DataFormatValue)style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dfv == null ) { dfv = new DataFormatValue(); } else { dfv = cloneDataFormatValue( dfv ); } dfv.setTimeFormat( pattern, locale ); - style.setProperty( StyleConstants.STYLE_DATA_FORMAT, dfv); + style.setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, dfv); } /** @@ -722,7 +760,7 @@ protected int getRichTextRunIndexForStart( List< RichTextRun> richTextRuns, int * @return * The heigh, in points, of a box big enough to contain the formatted sourceText. */ - public float calculateTextHeightPoints( String sourceText, Font defaultFont, double widthMM, List< RichTextRun> richTextRuns ) { + public float calculateTextHeightPoints( String sourceText, Font defaultFont, double widthMM, List< RichTextRun> richTextRuns, boolean wrap ) { log.debug( "Calculating height for ", sourceText); final float widthPt = (float)(72 * Math.max( 0, widthMM - 6 ) / 25.4); @@ -768,20 +806,34 @@ public float calculateTextHeightPoints( String sourceText, Font defaultFont, dou } } - LineBreakMeasurer measurer = new LineBreakMeasurer( attrString.getIterator(), frc); - - float heightAdjustment = 0.0F; - int lineLength = textLine.isEmpty() ? 1 : textLine.length(); - while (measurer.getPosition() < lineLength) { - TextLayout layout = measurer.nextLayout( widthPt ); - float lineHeight = layout.getAscent() + layout.getDescent() + layout.getLeading(); - if( layout.getDescent() + layout.getLeading() > heightAdjustment ) { - heightAdjustment = layout.getDescent() + layout.getLeading(); - } - log.debug ( "Line: ", textLine, " gives height ", lineHeight, "(", layout.getAscent(), "/", layout.getDescent(), "/", layout.getLeading(), ")"); - totalHeight += lineHeight; + try { + if( wrap ) { + LineBreakMeasurer measurer = new LineBreakMeasurer( attrString.getIterator(), frc); + + float heightAdjustment = 0.0F; + int lineLength = textLine.isEmpty() ? 1 : textLine.length(); + while (measurer.getPosition() < lineLength) { + TextLayout layout = measurer.nextLayout( widthPt ); + float lineHeight = layout.getAscent() + layout.getDescent() + layout.getLeading(); + if( layout.getDescent() + layout.getLeading() > heightAdjustment ) { + heightAdjustment = layout.getDescent() + layout.getLeading(); + } + log.debug ( "Line: ", textLine, " gives height ", lineHeight, "(", layout.getAscent(), "/", layout.getDescent(), "/", layout.getLeading(), ")"); + totalHeight += lineHeight; + } + totalHeight += heightAdjustment; + } else { + if( textLine.length() > 0 ) { + TextMeasurer measurer = new TextMeasurer( attrString.getIterator(), frc ); + TextLayout layout = measurer.getLayout(0, textLine.length()); + float lineHeight = layout.getAscent() + 2 * ( layout.getDescent() + layout.getLeading() ); + log.debug ( "Line: ", textLine, " gives height ", lineHeight, "(", layout.getAscent(), "/", layout.getDescent(), "/", layout.getLeading(), ")"); + totalHeight += lineHeight; + } + } + } catch( Throwable ex ) { + log.error( 0, "Calculating height of line \"" + textLine + "\" threw: ", ex ); } - totalHeight += heightAdjustment; } log.debug( "Height calculated as ", totalHeight ); @@ -840,15 +892,17 @@ int[] parseColour( String colour, String defaultColour ) { public abstract Font correctFontColorIfBackground( FontManager fm, Workbook wb, BirtStyle birtStyle, Font font ); public void correctFontColorIfBackground( BirtStyle birtStyle ) { - CSSValue bgColour = birtStyle.getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); - CSSValue fgColour = birtStyle.getProperty( StyleConstants.STYLE_COLOR ); - - int bgRgb[] = parseColour( bgColour == null ? null : bgColour.getCssText(), "white" ); - int fgRgb[] = parseColour( fgColour == null ? null : fgColour.getCssText(), "black" ); - - if( ( bgRgb[ 0 ] == fgRgb[ 0 ] ) && ( bgRgb[ 1 ] == fgRgb[ 1 ] ) && ( bgRgb[ 2 ] == fgRgb[ 2 ] ) ) { - CSSValue newColour = new StringValue( StringValue.CSS_STRING, contrastColour(bgRgb) ); - birtStyle.setProperty( StyleConstants.STYLE_COLOR, newColour); + if( birtStyle != null ) { + CSSValue bgColour = birtStyle.getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); + CSSValue fgColour = birtStyle.getProperty( StylePropertyIndexes.STYLE_COLOR ); + + int bgRgb[] = parseColour( bgColour == null ? null : bgColour.getCssText(), "white" ); + int fgRgb[] = parseColour( fgColour == null ? null : fgColour.getCssText(), "black" ); + + if( ( bgRgb[ 0 ] == fgRgb[ 0 ] ) && ( bgRgb[ 1 ] == fgRgb[ 1 ] ) && ( bgRgb[ 2 ] == fgRgb[ 2 ] ) ) { + CSSValue newColour = new StringValue( StringValue.CSS_STRING, contrastColour(bgRgb) ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_COLOR, newColour); + } } } @@ -878,7 +932,42 @@ public void correctFontColorIfBackground( BirtStyle birtStyle ) { * @param page * The BIRT page. */ - public abstract void prepareMarginDimensions(Sheet sheet, IPageContent page); + public void prepareMarginDimensions(Sheet sheet, IPageContent page, boolean includeHeaderAndFooter) { + + if( ( page.getMarginLeft() != null ) && isAbsolute( page.getMarginLeft() ) ) { + sheet.setMargin(Sheet.LeftMargin, page.getMarginLeft().convertTo(DimensionType.UNITS_IN)); + } + + if( ( page.getMarginRight() != null ) && isAbsolute( page.getMarginRight() ) ) { + sheet.setMargin(Sheet.RightMargin, page.getMarginRight().convertTo(DimensionType.UNITS_IN)); + } + + double headerHeight = 0; + if( includeHeaderAndFooter && ( page.getHeaderHeight() != null ) && isAbsolute( page.getHeaderHeight() ) ) { + headerHeight = page.getHeaderHeight().convertTo(DimensionType.UNITS_IN); + } + double topMargin = 0; + if( ( page.getMarginTop() != null ) && isAbsolute( page.getMarginTop() ) ) { + topMargin = page.getMarginTop().convertTo(DimensionType.UNITS_IN); + } + if( ( topMargin > 0 ) || ( headerHeight > 0 ) ) { + sheet.setMargin(Sheet.TopMargin, headerHeight + topMargin); + sheet.setMargin(Sheet.HeaderMargin, topMargin); + } + + double footerHeight = 0; + if( includeHeaderAndFooter && ( page.getFooterHeight() != null ) && isAbsolute( page.getFooterHeight() ) ) { + footerHeight = page.getFooterHeight().convertTo(DimensionType.UNITS_IN); + } + double bottomMargin = 0; + if( ( page.getMarginBottom() != null ) && isAbsolute( page.getMarginBottom() ) ) { + bottomMargin = page.getMarginBottom().convertTo(DimensionType.UNITS_IN); + } + if( ( bottomMargin > 0 ) || ( footerHeight > 0 ) ) { + sheet.setMargin(Sheet.BottomMargin, footerHeight + bottomMargin ); + sheet.setMargin(Sheet.FooterMargin, bottomMargin); + } + } /** @@ -899,18 +988,18 @@ public void applyBordersToArea( StyleManager sm, Sheet sheet, int colStart, int StringBuilder borderMsg = new StringBuilder(); borderMsg.append( "applyBordersToArea [" ).append( colStart ).append( "," ).append( rowStart ).append( "]-[" ).append( colEnd ).append( "," ).append( rowEnd ).append( "]"); - CSSValue borderStyleBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE ); - CSSValue borderWidthBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ); - CSSValue borderColourBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); - CSSValue borderStyleLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_STYLE ); - CSSValue borderWidthLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH ); - CSSValue borderColourLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_COLOR ); - CSSValue borderStyleRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_STYLE ); - CSSValue borderWidthRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH ); - CSSValue borderColourRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_COLOR ); - CSSValue borderStyleTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_STYLE ); - CSSValue borderWidthTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_WIDTH ); - CSSValue borderColourTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_COLOR ); + CSSValue borderStyleBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE ); + CSSValue borderWidthBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH ); + CSSValue borderColourBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ); + CSSValue borderStyleLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE ); + CSSValue borderWidthLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH ); + CSSValue borderColourLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR ); + CSSValue borderStyleRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE ); + CSSValue borderWidthRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH ); + CSSValue borderColourRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR ); + CSSValue borderStyleTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_STYLE ); + CSSValue borderWidthTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH ); + CSSValue borderColourTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_COLOR ); /* borderMsg.append( ", Bottom:" ).append( borderStyleBottom ).append( "/" ).append( borderWidthBottom ).append( "/" + borderColourBottom ); borderMsg.append( ", Left:" ).append( borderStyleLeft ).append( "/" ).append( borderWidthLeft ).append( "/" + borderColourLeft ); @@ -996,9 +1085,9 @@ public void applyBordersToArea( StyleManager sm, Sheet sheet, int colStart, int * The BIRT border style to apply to the region. */ public void applyBottomBorderToRow( StyleManager sm, Sheet sheet, int colStart, int colEnd, int row, BirtStyle borderStyle ) { - CSSValue borderStyleBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE ); - CSSValue borderWidthBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ); - CSSValue borderColourBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); + CSSValue borderStyleBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE ); + CSSValue borderWidthBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH ); + CSSValue borderColourBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ); if( ( borderStyleBottom == null ) || ( CSSConstants.CSS_NONE_VALUE.equals( borderStyleBottom.getCssText() ) ) || ( borderWidthBottom == null ) || ( "0".equals(borderWidthBottom) ) @@ -1035,30 +1124,30 @@ public int applyAreaBordersToCell(Collection knownAreaBorders, Cell for( AreaBorders areaBorders : knownAreaBorders ) { if( ( areaBorders.bottom == rowIndex ) && ( ( areaBorders.left <= colIndex ) && ( areaBorders.right >= colIndex ) ) ) { if( ( areaBorders.cssStyle[ 0 ] != null ) && ( areaBorders.cssWidth[ 0 ] != null ) && ( areaBorders.cssColour[ 0 ] != null ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE, areaBorders.cssStyle[0] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH, areaBorders.cssWidth[0] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR, areaBorders.cssColour[0] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE, areaBorders.cssStyle[0] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH, areaBorders.cssWidth[0] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR, areaBorders.cssColour[0] ); } } if( ( areaBorders.left == colIndex ) && ( ( areaBorders.top <= rowIndex ) && ( ( areaBorders.bottom < 0 ) || ( areaBorders.bottom >= rowIndex ) ) ) ) { if( ( areaBorders.cssStyle[ 1 ] != null ) && ( areaBorders.cssWidth[ 1 ] != null ) && ( areaBorders.cssColour[ 1 ] != null ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_STYLE, areaBorders.cssStyle[1] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH, areaBorders.cssWidth[1] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_COLOR, areaBorders.cssColour[1] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE, areaBorders.cssStyle[1] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH, areaBorders.cssWidth[1] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR, areaBorders.cssColour[1] ); } } if( ( areaBorders.right == colIndex ) && ( ( areaBorders.top <= rowIndex ) && ( ( areaBorders.bottom < 0 ) || ( areaBorders.bottom >= rowIndex ) ) ) ) { if( ( areaBorders.cssStyle[ 2 ] != null ) && ( areaBorders.cssWidth[ 2 ] != null ) && ( areaBorders.cssColour[ 2 ] != null ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_STYLE, areaBorders.cssStyle[2] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH, areaBorders.cssWidth[2] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_COLOR, areaBorders.cssColour[2] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE, areaBorders.cssStyle[2] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH, areaBorders.cssWidth[2] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR, areaBorders.cssColour[2] ); } } if( ( areaBorders.top == rowIndex ) && ( ( areaBorders.left <= colIndex ) && ( areaBorders.right >= colIndex ) ) ) { if( ( areaBorders.cssStyle[ 3 ] != null ) && ( areaBorders.cssWidth[ 3 ] != null ) && ( areaBorders.cssColour[ 3 ] != null ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_STYLE, areaBorders.cssStyle[3] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_WIDTH, areaBorders.cssWidth[3] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_COLOR, areaBorders.cssColour[3] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_STYLE, areaBorders.cssStyle[3] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH, areaBorders.cssWidth[3] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_COLOR, areaBorders.cssColour[3] ); } } } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerXUtils.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerXUtils.java index 56b70efd975..26066a6b8e2 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerXUtils.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerXUtils.java @@ -18,7 +18,6 @@ import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.RichTextString; -import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFColor; @@ -26,10 +25,8 @@ import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFShape; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide; -import org.eclipse.birt.report.engine.content.IPageContent; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.dom.AreaStyle; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.eclipse.birt.report.engine.ir.DimensionType; import org.eclipse.birt.report.model.api.util.ColorUtil; @@ -209,7 +206,7 @@ public void addBackgroundColourToStyle(Workbook workbook, CellStyle style, Strin @Override public Font correctFontColorIfBackground( FontManager fm, Workbook wb, BirtStyle birtStyle, Font font ) { - CSSValue bgColour = birtStyle.getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); + CSSValue bgColour = birtStyle.getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); int bgRgb[] = parseColour( bgColour == null ? null : bgColour.getCssText(), "white" ); XSSFColor colour = ((XSSFFont)font).getXSSFColor(); @@ -240,31 +237,5 @@ public int anchorDxFromMM( double widthMM, double colWidthMM ) { public int anchorDyFromPoints( float height, float rowHeight ) { return (int)( height * XSSFShape.EMU_PER_POINT ); } - - @Override - public void prepareMarginDimensions(Sheet sheet, IPageContent page) { - double headerHeight = 0.5; - double footerHeight = 0.5; - if( ( page.getHeaderHeight() != null ) && isAbsolute( page.getHeaderHeight() ) ) { - headerHeight = page.getHeaderHeight().convertTo(DimensionType.UNITS_IN); - sheet.setMargin(Sheet.HeaderMargin, headerHeight); - } - if( ( page.getFooterHeight() != null ) && isAbsolute( page.getFooterHeight() ) ) { - footerHeight = page.getFooterHeight().convertTo(DimensionType.UNITS_IN); - sheet.setMargin(Sheet.FooterMargin, footerHeight); - } - if( ( page.getMarginBottom() != null ) && isAbsolute( page.getMarginBottom() ) ) { - sheet.setMargin(Sheet.BottomMargin, footerHeight + page.getMarginBottom().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginLeft() != null ) && isAbsolute( page.getMarginLeft() ) ) { - sheet.setMargin(Sheet.LeftMargin, page.getMarginLeft().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginRight() != null ) && isAbsolute( page.getMarginRight() ) ) { - sheet.setMargin(Sheet.RightMargin, page.getMarginRight().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginTop() != null ) && isAbsolute( page.getMarginTop() ) ) { - sheet.setMargin(Sheet.TopMargin, headerHeight + page.getMarginTop().convertTo(DimensionType.UNITS_IN)); - } - } } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StylePropertyIndexes.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StylePropertyIndexes.java new file mode 100644 index 00000000000..c9b79853814 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StylePropertyIndexes.java @@ -0,0 +1,79 @@ +package uk.co.spudsoft.birt.emitters.excel; + +import org.eclipse.birt.report.engine.css.engine.BIRTPropertyManagerFactory; +import org.eclipse.birt.report.engine.css.engine.value.birt.BIRTConstants; +import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; + +public class StylePropertyIndexes { + + private static final BIRTPropertyManagerFactory propMgr = new BIRTPropertyManagerFactory(); + + public static final int NUMBER_OF_BIRT_PROPERTIES = propMgr.getNumberOfProperties(); + + public static String getPropertyName(int index) { + return propMgr.getPropertyName(index); + } + + public static final int STYLE_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_COLOR_PROPERTY); + public static final int STYLE_DATA_FORMAT = propMgr.getPropertyIndex(BIRTConstants.BIRT_STYLE_DATA_FORMAT); + public static final int STYLE_LINE_HEIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_LINE_HEIGHT_PROPERTY); + public static final int STYLE_PADDING_LEFT = propMgr.getPropertyIndex(CSSConstants.CSS_PADDING_LEFT_PROPERTY); + public static final int STYLE_PADDING_RIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_PADDING_RIGHT_PROPERTY); + public static final int STYLE_DIRECTION = propMgr.getPropertyIndex(CSSConstants.CSS_DIRECTION_PROPERTY); + public static final int STYLE_PADDING_TOP = propMgr.getPropertyIndex(CSSConstants.CSS_PADDING_TOP_PROPERTY); + public static final int STYLE_BACKGROUND_HEIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_HEIGHT_PROPERTY); + public static final int STYLE_BACKGROUND_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_COLOR_PROPERTY); + public static final int STYLE_BACKGROUND_REPEAT = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_REPEAT_PROPERTY); + public static final int STYLE_BORDER_RIGHT_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_RIGHT_WIDTH_PROPERTY); + public static final int STYLE_BORDER_BOTTOM_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_BOTTOM_WIDTH_PROPERTY); + public static final int STYLE_CAN_SHRINK = propMgr.getPropertyIndex(BIRTConstants.BIRT_CAN_SHRINK_PROPERTY); + public static final int STYLE_BORDER_TOP_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_TOP_COLOR_PROPERTY); + public static final int STYLE_BORDER_RIGHT_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_RIGHT_COLOR_PROPERTY); + public static final int STYLE_BORDER_BOTTOM_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_BOTTOM_COLOR_PROPERTY); + public static final int STYLE_MARGIN_LEFT = propMgr.getPropertyIndex(CSSConstants.CSS_MARGIN_LEFT_PROPERTY); + public static final int STYLE_MARGIN_RIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_MARGIN_RIGHT_PROPERTY); + public static final int STYLE_PADDING_BOTTOM = propMgr.getPropertyIndex(CSSConstants.CSS_PADDING_BOTTOM_PROPERTY); + public static final int STYLE_MARGIN_TOP = propMgr.getPropertyIndex(CSSConstants.CSS_MARGIN_TOP_PROPERTY); + public static final int STYLE_TEXT_INDENT = propMgr.getPropertyIndex(CSSConstants.CSS_TEXT_INDENT_PROPERTY); + public static final int STYLE_BORDER_RIGHT_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_RIGHT_STYLE_PROPERTY); + public static final int STYLE_BORDER_BOTTOM_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_BOTTOM_STYLE_PROPERTY); + public static final int STYLE_TEXT_ALIGN = propMgr.getPropertyIndex(CSSConstants.CSS_TEXT_ALIGN_PROPERTY); + // public static final int STYLE_HEIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_HEIGHT_PROPERTY); + public static final int STYLE_NUMBER_ALIGN = propMgr.getPropertyIndex(BIRTConstants.BIRT_NUMBER_ALIGN_PROPERTY); + // public static final int STYLE_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_WIDTH_PROPERTY); + public static final int STYLE_TEXT_LINETHROUGH = propMgr.getPropertyIndex(BIRTConstants.BIRT_TEXT_LINETHROUGH_PROPERTY); + public static final int STYLE_ORPHANS = propMgr.getPropertyIndex(CSSConstants.CSS_ORPHANS_PROPERTY); + public static final int STYLE_FONT_WEIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_WEIGHT_PROPERTY); + public static final int STYLE_FONT_VARIANT = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_VARIANT_PROPERTY); + public static final int STYLE_MARGIN_BOTTOM = propMgr.getPropertyIndex(CSSConstants.CSS_MARGIN_BOTTOM_PROPERTY); + public static final int STYLE_BACKGROUND_POSITION_X = propMgr.getPropertyIndex(BIRTConstants.BIRT_BACKGROUND_POSITION_X_PROPERTY); + public static final int STYLE_PAGE_BREAK_BEFORE = propMgr.getPropertyIndex(CSSConstants.CSS_PAGE_BREAK_BEFORE_PROPERTY); + public static final int STYLE_TEXT_OVERLINE = propMgr.getPropertyIndex(BIRTConstants.BIRT_TEXT_OVERLINE_PROPERTY); + public static final int STYLE_TEXT_TRANSFORM = propMgr.getPropertyIndex(CSSConstants.CSS_TEXT_TRANSFORM_PROPERTY); + public static final int STYLE_BACKGROUND_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_WIDTH_PROPERTY); + public static final int STYLE_BACKGROUND_POSITION_Y = propMgr.getPropertyIndex(BIRTConstants.BIRT_BACKGROUND_POSITION_Y_PROPERTY); + public static final int STYLE_OVERFLOW = propMgr.getPropertyIndex(CSSConstants.CSS_OVERFLOW_PROPERTY); + public static final int STYLE_FONT_SIZE = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_SIZE_PROPERTY); + public static final int STYLE_FONT_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_STYLE_PROPERTY); + public static final int STYLE_BORDER_TOP_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_TOP_WIDTH_PROPERTY); + public static final int STYLE_BORDER_LEFT_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_LEFT_WIDTH_PROPERTY); + public static final int STYLE_SHOW_IF_BLANK = propMgr.getPropertyIndex(BIRTConstants.BIRT_SHOW_IF_BLANK_PROPERTY); + public static final int STYLE_LETTER_SPACING = propMgr.getPropertyIndex(CSSConstants.CSS_LETTER_SPACING_PROPERTY); + public static final int STYLE_BACKGROUND_IMAGE = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_IMAGE_PROPERTY); + public static final int STYLE_BORDER_LEFT_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_LEFT_COLOR_PROPERTY); + public static final int STYLE_BACKGROUND_ATTACHMENT = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_ATTACHMENT_PROPERTY); + public static final int STYLE_VERTICAL_ALIGN = propMgr.getPropertyIndex(CSSConstants.CSS_VERTICAL_ALIGN_PROPERTY); + public static final int STYLE_BORDER_TOP_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_TOP_STYLE_PROPERTY); + public static final int STYLE_DISPLAY = propMgr.getPropertyIndex(CSSConstants.CSS_DISPLAY_PROPERTY); + public static final int STYLE_MASTER_PAGE = propMgr.getPropertyIndex(BIRTConstants.BIRT_MASTER_PAGE_PROPERTY); + public static final int STYLE_BORDER_LEFT_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_LEFT_STYLE_PROPERTY); + public static final int STYLE_VISIBLE_FORMAT = propMgr.getPropertyIndex(BIRTConstants.BIRT_VISIBLE_FORMAT_PROPERTY); + public static final int STYLE_WIDOWS = propMgr.getPropertyIndex(CSSConstants.CSS_WIDOWS_PROPERTY); + public static final int STYLE_FONT_FAMILY = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_FAMILY_PROPERTY); + public static final int STYLE_PAGE_BREAK_INSIDE = propMgr.getPropertyIndex(CSSConstants.CSS_PAGE_BREAK_INSIDE_PROPERTY); + public static final int STYLE_PAGE_BREAK_AFTER = propMgr.getPropertyIndex(CSSConstants.CSS_PAGE_BREAK_AFTER_PROPERTY); + public static final int STYLE_TEXT_UNDERLINE = propMgr.getPropertyIndex(BIRTConstants.BIRT_TEXT_UNDERLINE_PROPERTY); + public static final int STYLE_WORD_SPACING = propMgr.getPropertyIndex(CSSConstants.CSS_WORD_SPACING_PROPERTY); + public static final int STYLE_WHITE_SPACE = propMgr.getPropertyIndex(CSSConstants.CSS_WHITE_SPACE_PROPERTY); + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/XlsxEmitter.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/XlsxEmitter.java index a42134a6e4e..3c8449e7a85 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/XlsxEmitter.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/XlsxEmitter.java @@ -19,6 +19,7 @@ import java.io.InputStream; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** @@ -40,7 +41,11 @@ public String getOutputFormat() { } protected Workbook createWorkbook() { - return new XSSFWorkbook(); + if( extractMode ) { + return new SXSSFWorkbook(); + } else { + return new XSSFWorkbook(); + } } protected Workbook openWorkbook( File templateFile ) throws IOException { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractHandler.java index 53314e1cac9..e1707d9fe42 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractHandler.java @@ -38,11 +38,11 @@ import org.eclipse.birt.report.engine.content.ITableContent; import org.eclipse.birt.report.engine.content.ITableGroupContent; import org.eclipse.birt.report.engine.content.ITextContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.w3c.dom.css.CSSValue; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class AbstractHandler implements IHandler { @@ -90,7 +90,7 @@ public CSSValue getBackgroundColour() { return backgroundColour; } if( element != null ) { - CSSValue elemColour = element.getComputedStyle().getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); + CSSValue elemColour = element.getComputedStyle().getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); if( ( elemColour != null ) && ! CSSConstants.CSS_TRANSPARENT_VALUE.equals( elemColour.getCssText() ) ) { backgroundColour = elemColour; } @@ -112,6 +112,10 @@ protected static String getStyleProperty( IStyledElement element, int property, protected static String prepareName( String name ) { char c = name.charAt(0); + if( Character.isDigit(c) ) { + name = "_" + name; + } + boolean requirePreparation = (!(c == '_' || Character.isLetter(c)) || name.indexOf(' ') != -1); if( !requirePreparation ) { for( int i = 1; i < name.length(); ++i ) { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealListHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealListHandler.java index 828954ee0a1..9558383f51a 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealListHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealListHandler.java @@ -30,19 +30,34 @@ public class AbstractRealListHandler extends AbstractHandler implements NestedTableContainer { - protected int startRow; - protected int startCol; + protected int startRow = -1; + protected int startCol = -1; + @SuppressWarnings("unused") private IListGroupContent currentGroup; + @SuppressWarnings("unused") private IListBandContent currentBand; private AreaBorders borderDefn; private List< NestedTableHandler > nestedTables; + private NestedTableHandler lastNestedTable; public AbstractRealListHandler(Logger log, IHandler parent, IListContent list) { super(log, parent, list); } + + @Override + public void notifyHandler(HandlerState state) { + super.notifyHandler(state); + if( startCol >= 0 ) { + state.colNum = startCol; + if( lastNestedTable != null ) { + state.rowNum = lastNestedTable.endDetailsRow + 1; + lastNestedTable = null; + } + } + } public void addNestedTable( NestedTableHandler nestedTableHandler ) { if( nestedTables == null ) { @@ -50,6 +65,7 @@ public void addNestedTable( NestedTableHandler nestedTableHandler ) { } log.debug( "Adding nested table: ", nestedTableHandler ); nestedTables.add(nestedTableHandler); + lastNestedTable = nestedTableHandler; } public boolean rowHasNestedTable( int rowNum ) { @@ -109,7 +125,7 @@ public void endList(HandlerState state, IListContent list) throws BirtException state.removeBorderOverload(borderDefn); } - if( list.getBookmark() != null ) { + if( ( list.getBookmark() != null ) && ( state.rowNum > startRow ) ) { createName(state, prepareName( list.getBookmark() ), startRow, 0, state.rowNum - 1, 0); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableCellHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableCellHandler.java index 2e39a8144e0..3b69f383686 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableCellHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableCellHandler.java @@ -29,7 +29,6 @@ import org.eclipse.birt.report.engine.content.ITextContent; import org.eclipse.birt.report.engine.content.impl.CellContent; import org.eclipse.birt.report.engine.content.impl.TableContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; import org.eclipse.birt.report.engine.ir.CellDesign; import org.eclipse.birt.report.engine.layout.pdf.util.HTML2Content; @@ -39,6 +38,7 @@ import uk.co.spudsoft.birt.emitters.excel.EmitterServices; import uk.co.spudsoft.birt.emitters.excel.ExcelEmitter; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class AbstractRealTableCellHandler extends CellContentHandler { @@ -113,6 +113,10 @@ public void interruptCell(HandlerState state, boolean includeFormatOnly) throws Area area = null; if(( cell.getColSpan() > 1 )||( cell.getRowSpan() > 1 )) { + + if( state.getEmitter().isExtractMode() ) { + throw new IllegalArgumentException( "Merged cells encountered in extract mode, not currently supported" ); + } int endRow = state.rowNum + cell.getRowSpan() - 1; int endCol = state.colNum + cell.getColSpan() - 1; @@ -158,16 +162,16 @@ public void interruptCell(HandlerState state, boolean includeFormatOnly) throws @Override public void startContainer(HandlerState state, IContainerContent container) throws BirtException { - // log.debug( "Container display = " + getStyleProperty( container, StyleConstants.STYLE_DISPLAY, "block") ); - if( ! "inline".equals( getStyleProperty( container, StyleConstants.STYLE_DISPLAY, "block") ) ) { + // log.debug( "Container display = " + getStyleProperty( container, StylePropertyIndexes.STYLE_DISPLAY, "block") ); + if( ! "inline".equals( getStyleProperty( container, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) { lastCellContentsWasBlock = true; } } @Override public void endContainer(HandlerState state, IContainerContent container) throws BirtException { - // log.debug( "Container display = " + getStyleProperty( container, StyleConstants.STYLE_DISPLAY, "block") ); - if( ! "inline".equals( getStyleProperty( container, StyleConstants.STYLE_DISPLAY, "block") ) ) { + // log.debug( "Container display = " + getStyleProperty( container, StylePropertyIndexes.STYLE_DISPLAY, "block") ); + if( ! "inline".equals( getStyleProperty( container, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) { lastCellContentsWasBlock = true; } } @@ -189,6 +193,8 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep if( ( tableHandler != null ) && ( tableHandler.getColumnCount() == colSpan ) + && ( table.getParent() instanceof CellContent ) + && ( ( (CellContent)table.getParent() ).getGenerateBy() instanceof CellDesign ) && ( 1 == ( (CellDesign)( (CellContent)table.getParent() ).getGenerateBy()).getContentCount() ) ) { // Parent row contains only one item @@ -266,25 +272,25 @@ public void startList(HandlerState state, IListContent list) throws BirtExceptio public void emitText(HandlerState state, ITextContent text) throws BirtException { String textText = text.getText(); log.debug( "text:", textText ); - emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override public void emitData(HandlerState state, IDataContent data) throws BirtException { - emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } - + @Override public void emitLabel(HandlerState state, ILabelContent label) throws BirtException { // String labelText = ( label.getLabelText() != null ) ? label.getLabelText() : label.getText(); String labelText = ( label.getText() != null ) ? label.getText() : label.getLabelText(); log.debug( "labelText:", labelText ); - emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StyleConstants.STYLE_DISPLAY, "block") ) )); + emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StylePropertyIndexes.STYLE_DISPLAY, "block") ) )); } @Override public void emitAutoText(HandlerState state, IAutoTextContent autoText) throws BirtException { - emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableHandler.java index 6a93ccfad66..79e1a37b5a5 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableHandler.java @@ -16,13 +16,18 @@ import java.util.ArrayList; import java.util.List; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.SheetUtil; import org.eclipse.birt.core.exception.BirtException; +import org.eclipse.birt.report.engine.content.IContent; import org.eclipse.birt.report.engine.content.ITableBandContent; import org.eclipse.birt.report.engine.content.ITableContent; import org.eclipse.birt.report.engine.content.ITableGroupContent; import org.eclipse.birt.report.engine.ir.DimensionType; +import org.eclipse.birt.report.engine.ir.ExtendedItemDesign; import org.eclipse.birt.report.engine.ir.GridItemDesign; +import org.eclipse.birt.report.engine.ir.TableItemDesign; +import org.eclipse.birt.report.model.api.DesignElementHandle; import uk.co.spudsoft.birt.emitters.excel.AreaBorders; import uk.co.spudsoft.birt.emitters.excel.BirtStyle; @@ -38,13 +43,18 @@ public class AbstractRealTableHandler extends AbstractHandler implements ITableH protected int startCol; protected int startDetailsRow = -1; protected int endDetailsRow; + protected int startHeaderRow = -1; + @SuppressWarnings("unused") private ITableGroupContent currentGroup; + @SuppressWarnings("unused") private ITableBandContent currentBand; private BirtStyle tableStyle; private AreaBorders borderDefn; + private boolean repeatHeader = false; + private List< NestedTableHandler > nestedTables; public AbstractRealTableHandler(Logger log, IHandler parent, ITableContent table) { @@ -97,6 +107,29 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep log.debug( "startTable @ [", startRow, ",", startCol, "]" ); + repeatHeader = false; + Object genBy = ((IContent)table).getGenerateBy(); + if( genBy instanceof TableItemDesign ) { + TableItemDesign design = (TableItemDesign)genBy; + repeatHeader = ( design.getPageBreakInterval() == 0 ) && design.isRepeatHeader(); + } else if( genBy instanceof ExtendedItemDesign ) { + ExtendedItemDesign extDesign = (ExtendedItemDesign)genBy; + DesignElementHandle handle = extDesign.getHandle(); + Object rowPageBreakInterval = handle.getProperty( "rowPageBreakInterval" ); + if( rowPageBreakInterval == null ) { + rowPageBreakInterval = 40; + } + Object repeatRowHeader = handle.getProperty( "repeatRowHeader" ); + if( repeatRowHeader == null ) { + repeatRowHeader = Boolean.TRUE; + } + + if( ( rowPageBreakInterval instanceof Integer ) && ( repeatRowHeader instanceof Boolean ) ) { + repeatHeader = (((Integer)rowPageBreakInterval).intValue() == 0) && (((Boolean)repeatRowHeader).booleanValue()); + } + } + + for( int col = 0; col < table.getColumnCount(); ++col ) { DimensionType width = table.getColumn(col).getWidth(); if( width != null ) { @@ -123,7 +156,7 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep @Override public void endTable(HandlerState state, ITableContent table) throws BirtException { if( table.getGenerateBy() instanceof GridItemDesign ) { - endDetailsRow = state.rowNum; + endDetailsRow = state.rowNum - 1; } log.debug( "Applying bottom border to [", state.rowNum - 1, ",", startCol, "] - [", state.rowNum - 1, ",", startCol + table.getColumnCount() - 1, "]" ); @@ -135,12 +168,21 @@ public void endTable(HandlerState state, ITableContent table) throws BirtExcepti log.debug( "Details rows from ", startDetailsRow, " to ", endDetailsRow ); - if( ( startDetailsRow > 0 ) && ( endDetailsRow > startDetailsRow ) ) { + int autoWidthStartRow = startDetailsRow; + if( EmitterServices.booleanOption( state.getRenderOptions(), table, ExcelEmitter.AUTO_COL_WIDTHS_HEADER, false ) ) { + autoWidthStartRow = startRow; + } + int autoWidthEndRow = endDetailsRow; + if( EmitterServices.booleanOption( state.getRenderOptions(), table, ExcelEmitter.AUTO_COL_WIDTHS_FOOTER, false ) ) { + autoWidthEndRow = state.rowNum - 1; + } + + if( ( autoWidthStartRow >= 0 ) && ( autoWidthEndRow > autoWidthStartRow ) ) { boolean forceAutoColWidths = EmitterServices.booleanOption( state.getRenderOptions(), table, ExcelEmitter.FORCEAUTOCOLWIDTHS_PROP, false ); for( int col = 0; col < table.getColumnCount(); ++col ) { int oldWidth = state.currentSheet.getColumnWidth(col); if( forceAutoColWidths || ( oldWidth == 256 * state.currentSheet.getDefaultColumnWidth() ) ) { - FilteredSheet filteredSheet = new FilteredSheet( state.currentSheet, startDetailsRow, Math.min(endDetailsRow, startDetailsRow + 12) ); + FilteredSheet filteredSheet = new FilteredSheet( state.currentSheet, autoWidthStartRow, Math.min(autoWidthEndRow, autoWidthStartRow + 12) ); double calcWidth = SheetUtil.getColumnWidth( filteredSheet, col, false ); if (calcWidth > 1.0) { @@ -172,7 +214,7 @@ public void endTable(HandlerState state, ITableContent table) throws BirtExcepti } if( ! EmitterServices.booleanOption( state.getRenderOptions(), table, ExcelEmitter.DISPLAYZEROS_PROP, true ) ) { state.currentSheet.setDisplayZeros(false); - } + } } @Override @@ -180,6 +222,9 @@ public void startTableBand(HandlerState state, ITableBandContent band) throws Bi if( ( band.getBandType() == ITableBandContent.BAND_DETAIL ) && ( startDetailsRow < 0 ) ) { startDetailsRow = state.rowNum; } + if( ( band.getBandType() == ITableBandContent.BAND_HEADER ) && ( startHeaderRow < 0 )) { + startHeaderRow = state.rowNum; + } currentBand = band; } @@ -188,6 +233,15 @@ public void endTableBand(HandlerState state, ITableBandContent band) throws Birt if( band.getBandType() == ITableBandContent.BAND_DETAIL ) { endDetailsRow = state.rowNum - 1; } + if( ( band.getBandType() == ITableBandContent.BAND_HEADER ) && repeatHeader && (state.rowNum > startHeaderRow) ) { + int endHeaderRow = state.rowNum - 1; + + if( state.currentSheet.getRepeatingRows() == null ) { + CellRangeAddress repeatingRows = new CellRangeAddress(startHeaderRow, endHeaderRow, -1, -1); + // repeatingRows = CellRangeAddress.valueOf( Integer.toString(startHeaderRow+1) + ":" + Integer.toString(endHeaderRow+1) ); + state.currentSheet.setRepeatingRows(repeatingRows); + } + } currentBand = null; } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableRowHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableRowHandler.java index c75e581e2c7..096500efd45 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableRowHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableRowHandler.java @@ -76,11 +76,10 @@ public void resumeRow(HandlerState state) { log.debug( "Resume row at ", state.rowNum ); myRow = state.rowNum; - if( state.currentSheet.getRow(state.rowNum) == null ) { + currentRow = state.currentSheet.getRow(state.rowNum); + if( currentRow == null ) { log.debug( "Creating row ", state.rowNum ); currentRow = state.currentSheet.createRow( state.rowNum ); - } else { - currentRow = state.currentSheet.getRow( state.rowNum ); } state.requiredRowHeightInPoints = 0; diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/CellContentHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/CellContentHandler.java index c93e99c2346..e9a918ba9c2 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/CellContentHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/CellContentHandler.java @@ -38,7 +38,6 @@ import org.eclipse.birt.report.engine.content.IContent; import org.eclipse.birt.report.engine.content.IHyperlinkAction; import org.eclipse.birt.report.engine.content.IImageContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.StringValue; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; @@ -59,6 +58,7 @@ import uk.co.spudsoft.birt.emitters.excel.RichTextRun; import uk.co.spudsoft.birt.emitters.excel.StyleManager; import uk.co.spudsoft.birt.emitters.excel.StyleManagerUtils; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class CellContentHandler extends AbstractHandler { @@ -72,6 +72,10 @@ public class CellContentHandler extends AbstractHandler { * The last value added to a cell */ protected Object lastValue; + /** + * The last value added to a cell + */ + protected String lastFormula; /** * The BIRT element that provided the lastValue */ @@ -132,38 +136,47 @@ public void startCell(HandlerState state, ICellContent cell) throws BirtExceptio protected void endCellContent(HandlerState state, ICellContent birtCell, IContent element, Cell cell, Area area ) { StyleManager sm = state.getSm(); StyleManagerUtils smu = state.getSmu(); - + BirtStyle birtCellStyle = null; - if( birtCell != null ) { - birtCellStyle = new BirtStyle( birtCell ); - if( element != null ) { - // log.debug( "Overlaying style from ", element ); - birtCellStyle.overlay( element ); + if( ! EmitterServices.booleanOption( state.getRenderOptions(), element, ExcelEmitter.NO_STYLES, false ) ) { + if( birtCell != null ) { + birtCellStyle = new BirtStyle( birtCell ); + if( element != null ) { + // log.debug( "Overlaying style from ", element ); + birtCellStyle.overlay( element ); + } + } else if( element != null ) { + birtCellStyle = new BirtStyle( element ); + } else { + birtCellStyle = new BirtStyle( state.getSm().getCssEngine() ); } - } else if( element != null ) { - birtCellStyle = new BirtStyle( element ); - } else { - birtCellStyle = new BirtStyle( state.getSm().getCssEngine() ); - } - if( preferredAlignment != null ) { - birtCellStyle.setProperty( StyleConstants.STYLE_TEXT_ALIGN, preferredAlignment ); - } - if( CSSConstants.CSS_TRANSPARENT_VALUE.equals(birtCellStyle.getString(StyleConstants.STYLE_BACKGROUND_COLOR))) { - if( parent != null ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BACKGROUND_COLOR, parent.getBackgroundColour() ); + if( preferredAlignment != null ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_TEXT_ALIGN, preferredAlignment ); + } + if( CSSConstants.CSS_TRANSPARENT_VALUE.equals(birtCellStyle.getString(StylePropertyIndexes.STYLE_BACKGROUND_COLOR))) { + if( parent != null ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR, parent.getBackgroundColour() ); + } } } if( hyperlinkUrl != null ) { Hyperlink hyperlink = cell.getSheet().getWorkbook().getCreationHelper().createHyperlink(Hyperlink.LINK_URL); hyperlink.setAddress(hyperlinkUrl); cell.setHyperlink(hyperlink); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_COLOR, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_BLUE_VALUE ) ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_TEXT_UNDERLINE, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_UNDERLINE_VALUE ) ); } if( hyperlinkBookmark != null ) { Hyperlink hyperlink = cell.getSheet().getWorkbook().getCreationHelper().createHyperlink(Hyperlink.LINK_DOCUMENT); hyperlink.setAddress(prepareName( hyperlinkBookmark )); cell.setHyperlink(hyperlink); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_COLOR, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_BLUE_VALUE ) ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_TEXT_UNDERLINE, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_UNDERLINE_VALUE ) ); } + if( ( lastFormula != null ) && ( lastValue == null ) ) { + setCellContents( cell, null, lastFormula ); + } if( lastValue != null ) { if( lastValue instanceof String ) { String lastString = (String)lastValue; @@ -191,30 +204,34 @@ protected void endCellContent(HandlerState state, ICellContent birtCell, IConten log.debug("Finalising with ", runStart, " - ", lastString.length() ); rich.applyFont(runStart, lastString.length(), lastFont); - setCellContents( cell, rich ); + setCellContents( cell, rich, lastFormula ); } else { - setCellContents( cell, lastString ); + setCellContents( cell, lastString, lastFormula ); } - if( lastString.contains("\n") ) { - if( ! CSSConstants.CSS_NOWRAP_VALUE.equals( lastElement.getStyle().getWhiteSpace() ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_WHITE_SPACE, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_PRE_VALUE ) ); + if( birtCell != null ) { + if( lastString.contains("\n") ) { + if( ! CSSConstants.CSS_NOWRAP_VALUE.equals( lastElement.getStyle().getWhiteSpace() ) ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_WHITE_SPACE, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_PRE_VALUE ) ); + } + } + if( ! richTextRuns.isEmpty() ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_VERTICAL_ALIGN, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_TOP_VALUE ) ); + } + if( preferredAlignment != null ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_TEXT_ALIGN, preferredAlignment ); } - } - if( ! richTextRuns.isEmpty() ) { - birtCellStyle.setProperty( StyleConstants.STYLE_VERTICAL_ALIGN, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_TOP_VALUE ) ); - } - if( preferredAlignment != null ) { - birtCellStyle.setProperty( StyleConstants.STYLE_TEXT_ALIGN, preferredAlignment ); } } else { - setCellContents( cell, lastValue ); + setCellContents( cell, lastValue, lastFormula ); } } int colIndex = cell.getColumnIndex(); - state.getSmu().applyAreaBordersToCell(state.areaBorders, cell, birtCellStyle, state.rowNum, colIndex); + if( birtCellStyle != null ) { + state.getSmu().applyAreaBordersToCell(state.areaBorders, cell, birtCellStyle, state.rowNum, colIndex); + } if((birtCell != null) && (( birtCell.getColSpan() > 1 )||( birtCell.getRowSpan() > 1 ))) { AreaBorders mergedRegionBorders = AreaBorders.createForMergedCells( state.rowNum + birtCell.getRowSpan() - 1, colIndex, colIndex + birtCell.getColSpan() - 1, state.rowNum, birtCellStyle ); @@ -223,19 +240,21 @@ protected void endCellContent(HandlerState state, ICellContent birtCell, IConten } } - String customNumberFormat = EmitterServices.stringOption(state.getRenderOptions(), element, ExcelEmitter.CUSTOM_NUMBER_FORMAT, null); - if( customNumberFormat != null ) { - StyleManagerUtils.setNumberFormat(birtCellStyle, ExcelEmitter.CUSTOM_NUMBER_FORMAT + customNumberFormat, null); + if( birtCellStyle != null ) { + String customNumberFormat = EmitterServices.stringOption(state.getRenderOptions(), element, ExcelEmitter.CUSTOM_NUMBER_FORMAT, null); + if( customNumberFormat != null ) { + StyleManagerUtils.setNumberFormat(birtCellStyle, ExcelEmitter.CUSTOM_NUMBER_FORMAT + customNumberFormat, null); + } + + setCellStyle(sm, cell, birtCellStyle, lastValue); } - - setCellStyle(sm, cell, birtCellStyle, lastValue); // Excel auto calculates the row height (if it isn't specified) as long as the cell isn't merged - if it is merged I have to do it if( ( ( colSpan > 1 ) || ( state.rowHasSpans( state.rowNum ) ) ) && ( ( lastValue instanceof String ) || ( lastValue instanceof RichTextString ) ) ) { int spannedRowAlgorithm = EmitterServices.integerOption(state.getRenderOptions(), element, ExcelEmitter.SPANNED_ROW_HEIGHT, ExcelEmitter.SPANNED_ROW_HEIGHT_SPREAD); Font defaultFont = state.getWb().getFontAt(cell.getCellStyle().getFontIndex()); double cellWidth = spanWidthMillimetres( state.currentSheet, cell.getColumnIndex(), cell.getColumnIndex() + colSpan - 1 ); - float cellDesiredHeight = smu.calculateTextHeightPoints( cell.getStringCellValue(), defaultFont, cellWidth, richTextRuns ); + float cellDesiredHeight = smu.calculateTextHeightPoints( cell.getStringCellValue(), defaultFont, cellWidth, richTextRuns, cell.getCellStyle().getWrapText() ); if( cellDesiredHeight > state.requiredRowHeightInPoints ) { int rowSpan = birtCell.getRowSpan(); if( rowSpan < 2 ) { @@ -269,6 +288,7 @@ protected void endCellContent(HandlerState state, ICellContent birtCell, IConten } lastValue = null; + lastFormula = null; lastElement = null; richTextRuns.clear(); } @@ -299,8 +319,17 @@ private double spanWidthMillimetres( Sheet sheet, int startCol, int endCol ) { * @param element * The BIRT element supplying the value, used to set the style of the cell. */ - private void setCellContents(Cell cell, Object value) { + private void setCellContents(Cell cell, Object value, String formula) { log.debug( "Setting cell[", cell.getRow().getRowNum(), ",", cell.getColumnIndex(), "] value to ", value ); + + if( formula != null ) { + formula = formula.trim(); + if( formula.startsWith("=") ) { + formula = formula.substring(1).trim(); + } + cell.setCellFormula(formula); + } + if( value instanceof Double ) { // cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellValue((Double)value); @@ -374,7 +403,7 @@ private void setCellStyle( StyleManager sm, Cell cell, BirtStyle birtStyle, Obje } private CSSValue preferredAlignment( BirtStyle elementStyle ) { - CSSValue newAlign = elementStyle.getProperty(StyleConstants.STYLE_TEXT_ALIGN); + CSSValue newAlign = elementStyle.getProperty(StylePropertyIndexes.STYLE_TEXT_ALIGN); if( newAlign == null ) { newAlign = new StringValue(StringValue.CSS_STRING, CSSConstants.CSS_LEFT_VALUE); } @@ -402,14 +431,24 @@ private CSSValue preferredAlignment( BirtStyle elementStyle ) { * The value to put into the current cell. */ protected void emitContent(HandlerState state, IContent element, Object value, boolean asBlock) { - if( value == null ) { - return ; - } if( element.getBookmark() != null ) { createName(state, prepareName( element.getBookmark() ), state.rowNum, state.colNum, state.rowNum, state.colNum); } - if( lastValue == null ) { + String formula = EmitterServices.stringOption( null, element, ExcelEmitter.FORMULA, null); + if( ( formula == null ) && EmitterServices.booleanOption( null, element, ExcelEmitter.VALUE_AS_FORMULA, false ) ) { + formula = value != null ? value.toString() : null; + value = null; + } + if( formula != null ) { + lastFormula = formula; + } + + if( value == null ) { + return ; + } + + if( ( lastValue == null ) && ( value != null ) ) { lastValue = value; lastElement = element; lastCellContentsWasBlock = asBlock; @@ -439,32 +478,34 @@ protected void emitContent(HandlerState state, IContent element, Object value, b StyleManager sm = state.getSm(); - // Both to be improved to include formatting - String oldValue = lastValue.toString(); - String newComponent = value.toString(); - - if( lastCellContentsWasBlock - && ! newComponent.startsWith("\n") - && ! oldValue.endsWith("\n") ) { - oldValue = oldValue + "\n"; - lastCellContentsWasBlock = false; - } - if( lastCellContentsRequiresSpace - && ! newComponent.startsWith("\n") - && ! oldValue.endsWith("\n") ) { - oldValue = oldValue + " "; - lastCellContentsRequiresSpace = false; - } - - String newValue = oldValue + newComponent; - lastValue = newValue; - - if( element != null ) { - BirtStyle elementStyle = new BirtStyle(element); - Font newFont = sm.getFontManager().getFont( elementStyle ); - richTextRuns.add(new RichTextRun(oldValue.length(), newFont)); - - preferredAlignment = preferredAlignment(elementStyle); + if( lastValue != null ) { + // Both to be improved to include formatting + String oldValue = lastValue.toString(); + String newComponent = value.toString(); + + if( lastCellContentsWasBlock + && ! newComponent.startsWith("\n") + && ! oldValue.endsWith("\n") ) { + oldValue = oldValue + "\n"; + lastCellContentsWasBlock = false; + } + if( lastCellContentsRequiresSpace + && ! newComponent.startsWith("\n") + && ! oldValue.endsWith("\n") ) { + oldValue = oldValue + " "; + lastCellContentsRequiresSpace = false; + } + + String newValue = oldValue + newComponent; + lastValue = newValue; + + if( element != null ) { + BirtStyle elementStyle = new BirtStyle(element); + Font newFont = sm.getFontManager().getFont( elementStyle ); + richTextRuns.add(new RichTextRun(oldValue.length(), newFont)); + + preferredAlignment = preferredAlignment(elementStyle); + } } lastCellContentsWasBlock = asBlock; diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedListHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedListHandler.java index fa3c9aa8e82..5930143ab66 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedListHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedListHandler.java @@ -23,6 +23,7 @@ import org.eclipse.birt.report.engine.content.IListBandContent; import org.eclipse.birt.report.engine.content.IListContent; import org.eclipse.birt.report.engine.content.IListGroupContent; +import org.eclipse.birt.report.engine.content.ITableContent; import org.eclipse.birt.report.engine.content.ITextContent; import uk.co.spudsoft.birt.emitters.excel.HandlerState; @@ -37,6 +38,14 @@ public FlattenedListHandler(CellContentHandler contentHandler, Logger log, IHand this.contentHandler = contentHandler; } + + @Override + public void startTable(HandlerState state, ITableContent table) throws BirtException { + state.setHandler(new FlattenedTableHandler(contentHandler, log, this, table)); + state.getHandler().startTable(state, table); + } + + @Override public void startList(HandlerState state, IListContent list) throws BirtException { } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedTableHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedTableHandler.java index 3a0ccdadb2f..fc001a31ded 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedTableHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedTableHandler.java @@ -14,6 +14,7 @@ package uk.co.spudsoft.birt.emitters.excel.handlers; import org.eclipse.birt.core.exception.BirtException; +import org.eclipse.birt.report.engine.content.IListContent; import org.eclipse.birt.report.engine.content.IRowContent; import org.eclipse.birt.report.engine.content.ITableBandContent; import org.eclipse.birt.report.engine.content.ITableContent; @@ -33,14 +34,18 @@ public FlattenedTableHandler(CellContentHandler contentHandler, Logger log, IHan this.contentHandler = contentHandler; } + + + @Override + public void startList(HandlerState state, IListContent list) throws BirtException { + state.setHandler(new FlattenedListHandler(contentHandler, log, this, list)); + state.getHandler().startList(state, list); + } + + + @Override public void startTable(HandlerState state, ITableContent table) throws BirtException { - if( ( state.sheetName == null ) || state.sheetName.isEmpty() ) { - String name = table.getName(); - if( ( name != null ) && ! name.isEmpty() ) { - state.sheetName = name; - } - } if( ( state.sheetPassword == null ) || state.sheetPassword.isEmpty() ) { String password = EmitterServices.stringOption( state.getRenderOptions(), table, ExcelEmitter.SHEET_PASSWORD, null); if( ( password != null ) && ! password.isEmpty() ) { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListContentHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListContentHandler.java index 99d58aa460c..38b973dd0f6 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListContentHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListContentHandler.java @@ -21,12 +21,12 @@ import org.eclipse.birt.report.engine.content.ILabelContent; import org.eclipse.birt.report.engine.content.IListContent; import org.eclipse.birt.report.engine.content.ITextContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; import org.eclipse.birt.report.engine.layout.pdf.util.HTML2Content; import uk.co.spudsoft.birt.emitters.excel.Coordinate; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class NestedListContentHandler extends CellContentHandler { @@ -43,13 +43,13 @@ public NestedListContentHandler(IContentEmitter emitter, Logger log, IHandler pa public void emitText(HandlerState state, ITextContent text) throws BirtException { String textText = text.getText(); log.debug( "text:", textText ); - emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); state.setHandler(parent); } @Override public void emitData(HandlerState state, IDataContent data) throws BirtException { - emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); state.setHandler(parent); } @@ -58,13 +58,13 @@ public void emitLabel(HandlerState state, ILabelContent label) throws BirtExcept // String labelText = ( label.getLabelText() != null ) ? label.getLabelText() : label.getText(); String labelText = ( label.getText() != null ) ? label.getText() : label.getLabelText(); log.debug( "labelText:", labelText ); - emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StyleConstants.STYLE_DISPLAY, "block") ) )); + emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StylePropertyIndexes.STYLE_DISPLAY, "block") ) )); state.setHandler(parent); } @Override public void emitAutoText(HandlerState state, IAutoTextContent autoText) throws BirtException { - emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); state.setHandler(parent); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListHandler.java index 0783baec734..83a39a20406 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListHandler.java @@ -13,8 +13,10 @@ package uk.co.spudsoft.birt.emitters.excel.handlers; +import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.content.IListContent; +import uk.co.spudsoft.birt.emitters.excel.HandlerState; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class NestedListHandler extends TopLevelListHandler { @@ -23,4 +25,16 @@ public NestedListHandler(Logger log, IHandler parent, IListContent list) { super(log, parent, list); } + @Override + public void startList(HandlerState state, IListContent list) throws BirtException { + String name = list.getName(); + if( ( name != null ) && ! name.isEmpty() ) { + state.sheetName = name; + } + super.startList(state, list); + + } + + + } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedTableHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedTableHandler.java index 8e12b8e27da..1e26f27f4b0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedTableHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedTableHandler.java @@ -66,12 +66,11 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep topLeft = new Coordinate(state.rowNum, state.colNum); log.debug( "startTable called with topLeft = [", topLeft.getRow(), ", ", topLeft.getCol(), "]" ); super.startTable(state, table); - if( ( state.sheetName == null ) || state.sheetName.isEmpty() ) { - String name = table.getName(); - if( ( name != null ) && ! name.isEmpty() ) { - state.sheetName = name; - } + String name = table.getName(); + if( ( name != null ) && ! name.isEmpty() ) { + state.sheetName = name; } + if( ( state.sheetPassword == null ) || state.sheetPassword.isEmpty() ) { String password = EmitterServices.stringOption( state.getRenderOptions(), table, ExcelEmitter.SHEET_PASSWORD, null); if( ( password != null ) && ! password.isEmpty() ) { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/PageHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/PageHandler.java index 31f618c7a20..48743fc36d6 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/PageHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/PageHandler.java @@ -14,15 +14,19 @@ package uk.co.spudsoft.birt.emitters.excel.handlers; import java.util.Collection; +import java.util.regex.Pattern; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.Drawing; import org.apache.poi.ss.usermodel.HeaderFooter; import org.apache.poi.ss.usermodel.PrintSetup; +import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.eclipse.birt.core.exception.BirtException; +import org.eclipse.birt.report.engine.api.script.IReportContext; import org.eclipse.birt.report.engine.content.IAutoTextContent; import org.eclipse.birt.report.engine.content.IContent; import org.eclipse.birt.report.engine.content.IDataContent; @@ -49,6 +53,10 @@ public class PageHandler extends AbstractHandler { + private static Pattern INVALID_CHARS_REGEX = Pattern.compile( "[/\\\\*'?\\[\\]:]+" ); + + boolean created; + public PageHandler(Logger log, IPageContent page) { super(log, null, page); } @@ -123,9 +131,21 @@ private void outputStructuredHeaderFooter( HandlerState state, Collection birtHe } + private void cleanSheet( Sheet sheet ) { + for( int i = 0; i < sheet.getNumMergedRegions(); ++i ) { + sheet.removeMergedRegion(i); + } + while( sheet.getPhysicalNumberOfRows() > 0 ) { + Row row = sheet.getRow(sheet.getLastRowNum()); + sheet.removeRow(row); + } + } + @Override public void startPage(HandlerState state, IPageContent page) throws BirtException { + element = page; + if( state.getWb().getNumberOfSheets() > 0 ) { if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.SINGLE_SHEET_PAGE_BREAKS, false ) ) { state.currentSheet.setRowBreak( state.rowNum - 1 ); @@ -135,7 +155,56 @@ public void startPage(HandlerState state, IPageContent page) throws BirtExceptio } } - state.currentSheet = state.getWb().createSheet(); + state.currentSheet = null; + created = false; + } + + private void createSheet(HandlerState state, IContent newElement) throws BirtException { + if( created ) { + return ; + } + IPageContent page = (IPageContent)element; + if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.SINGLE_SHEET, false ) + && state.getWb().getNumberOfSheets() > 0 ) { + return ; + } + + String pageLabel = null; + IReportContext reportContext = page.getReportContent().getReportContext(); + if( reportContext != null ) { + Object pageLabelObject = reportContext.getPageVariable( IReportContext.PAGE_VAR_PAGE_LABEL ); + if( pageLabelObject instanceof String ) { + pageLabel = (String)pageLabel; + } + } + if( pageLabel == null ) { + String name = newElement.getName(); + if( ( name != null ) && ! name.isEmpty() ) { + pageLabel = name; + } + } + if( pageLabel == null ) { + String name = page.getReportContent().getTitle(); + if( ( name != null ) && ! name.isEmpty() ) { + pageLabel = name; + } + } + + if( pageLabel != null ) { + state.sheetName = null; + String sheetName = prepareSheetName(state, pageLabel); + int sheetIndex = findNamedSheetIndex( state.getWb(), sheetName ); + if( sheetIndex >= 0 ) { + state.currentSheet = state.getWb().getSheetAt( sheetIndex ); + cleanSheet( state.currentSheet ); + } else { + state.currentSheet = state.getWb().createSheet( sheetName ); + } + } else { + state.currentSheet = state.getWb().createSheet(); + } + created = true; + log.debug("Page type: ", page.getPageType()); if( page.getPageType() != null ) { @@ -169,35 +238,81 @@ public void startPage(HandlerState state, IPageContent page) throws BirtExceptio state.currentSheet.getPrintSetup().setScale((short)printScale); } - if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.STRUCTURED_HEADER, false ) ) { + boolean structuredHeader = + ! state.getEmitter().isExtractMode() + && EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.STRUCTURED_HEADER, false ); + if( structuredHeader ) { outputStructuredHeaderFooter(state, page.getHeader()); } else { processHeaderFooter(state, page.getHeader(), state.currentSheet.getHeader() ); processHeaderFooter(state, page.getFooter(), state.currentSheet.getFooter() ); } - state.getSmu().prepareMarginDimensions(state.currentSheet, page); + state.getSmu().prepareMarginDimensions(state.currentSheet, page, !structuredHeader); } - private String prepareSheetName( HandlerState state ) { - if( state.sheetName != null ) { - String preparedName = state.sheetName; - Integer nameCount = state.sheetNames.get(preparedName); - if( nameCount != null ) { - ++nameCount; - state.sheetNames.put(preparedName, nameCount); - preparedName = preparedName + " " + nameCount; + private String prepareSheetName( HandlerState state, String proposedName ) { + // Strip invalid chars + proposedName = INVALID_CHARS_REGEX.matcher(proposedName).replaceAll(" "); + + String preparedName = proposedName.length() > 31 ? proposedName.substring(0,31) : proposedName; + + // Check whether there are really any sheets with that name + boolean found = false; + Workbook wb = state.getWb(); + for( int i = 0; i < wb.getNumberOfSheets(); ++i ) { + if( wb.getSheetName( i ).startsWith( preparedName ) ) { + found = true; + break; + } + } + if( ! found ) { + state.sheetNames.remove(preparedName); + } + + Integer nameCount = state.sheetNames.get(preparedName); + if( nameCount != null ) { + ++nameCount; + String suffix = " " + nameCount; + state.sheetNames.put(preparedName, nameCount); + if( preparedName.length() > 31 - suffix.length() ) { + preparedName = preparedName.substring(0,31 - suffix.length()) + " " + nameCount; } else { - state.sheetNames.put(preparedName,1); + preparedName = preparedName + " " + nameCount; } - return preparedName; - } - return null; + } else { + state.sheetNames.put(preparedName,1); + } + return preparedName; + } + + private int findNamedSheetIndex( Workbook workbook, String sheetName ) { + for( int i = 0; i < workbook.getNumberOfSheets(); ++i ) { + if( workbook.getSheetName(i).equalsIgnoreCase(sheetName)) { + log.debug("Found matching sheet at ", i, " \"", workbook.getSheetName(i), "\"" ); + return i; + } + } + return -1; + } + + private int sheetIndex( Workbook workbook, Sheet sheet ) { + for( int i = 0; i < workbook.getNumberOfSheets(); ++i ) { + if( workbook.getSheetAt(i) == sheet ) { + return i; + } + } + return -1; } @Override public void endPage(HandlerState state, IPageContent page) throws BirtException { + if( ( state.sheetName != null ) && ! state.sheetName.isEmpty() ) { + String newSheetName = prepareSheetName( state, state.sheetName ); + state.getWb().setSheetName( sheetIndex( state.getWb(), state.currentSheet ), newSheetName ); + } + if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.SINGLE_SHEET, false ) && ! state.reportEnding ) { return ; @@ -207,27 +322,6 @@ public void endPage(HandlerState state, IPageContent page) throws BirtException outputStructuredHeaderFooter(state, page.getFooter()); } - String sheetName = prepareSheetName( state ); - if( sheetName != null ) { - log.debug("Attempting to name sheet ", ( state.getWb().getNumberOfSheets() - 1 ), " \"", sheetName, "\" "); - int existingSheetIndex = -1; - for( int i = 0; i < state.getWb().getNumberOfSheets() - 1; ++i ) { - if( state.getWb().getSheetName(i).equals(sheetName)) { - log.debug("Found matching sheet at ", i, " \"", state.getWb().getSheetName(i), "\"" ); - existingSheetIndex = i; - break; - } - } - if (existingSheetIndex >= 0) { - log.debug("Deleting sheet at ", existingSheetIndex, " \"", state.getWb().getSheetName(existingSheetIndex), "\"" ); - state.getWb().removeSheetAt(existingSheetIndex); - } - state.getWb().setSheetName(state.getWb().getNumberOfSheets() - 1, sheetName); - if (existingSheetIndex >= 0) { - state.getWb().setSheetOrder(sheetName,existingSheetIndex); - } - state.sheetName = null; - } if( state.sheetPassword != null ) { log.debug("Attempting to protect sheet ", ( state.getWb().getNumberOfSheets() - 1 ) ); state.currentSheet.protectSheet( state.sheetPassword ); @@ -247,7 +341,9 @@ public void endPage(HandlerState state, IPageContent page) throws BirtException state.clearRowSpans(); state.areaBorders.clear(); + created = false; state.currentSheet = null; + state.sheetName = null; } private CellRangeAddress getMergedRegionBegunBy( Sheet sheet, int row, int col ) { @@ -272,6 +368,12 @@ private CellRangeAddress getMergedRegionBegunBy( Sheet sheet, int row, int col ) private void processCellImage( HandlerState state, Drawing drawing, CellImage cellImage ) { Coordinate location = cellImage.location; + if( state.currentSheet.getRow( location.getRow() ) == null ) { + state.currentSheet.createRow( location.getRow() ); + } + if( state.currentSheet.getRow( location.getRow() ).getCell( location.getCol() ) == null ) { + state.currentSheet.getRow( location.getRow() ).createCell( location.getCol() ); + } Cell cell = state.currentSheet.getRow( location.getRow() ).getCell( location.getCol() ); IImageContent image = cellImage.image; @@ -286,13 +388,13 @@ private void processCellImage( HandlerState state, Drawing drawing, CellImage ce int endCol = cell.getColumnIndex(); double lastColWidth = ClientAnchorConversions.widthUnits2Millimetres( (short)state.currentSheet.getColumnWidth( endCol ) ) + 2.0; - int dx = smu.anchorDxFromMM( lastColWidth, lastColWidth ); double mmWidth = 0.0; if( smu.isAbsolute(image.getWidth())) { mmWidth = image.getWidth().convertTo(DimensionType.UNITS_MM); } else if(smu.isPixels(image.getWidth())) { mmWidth = ClientAnchorConversions.pixels2Millimetres( image.getWidth().getMeasure() ); } + int dx = smu.anchorDxFromMM( mmWidth, lastColWidth ); // Allow image to span multiple columns CellRangeAddress mergedRegion = getMergedRegionBegunBy( state.currentSheet, location.getRow(), location.getCol() ); if( (cellImage.spanColumns) || ( mergedRegion != null ) ) { @@ -313,9 +415,6 @@ private void processCellImage( HandlerState state, Drawing drawing, CellImage ce dx = smu.anchorDxFromMM( mmShort, lastColWidth ); } } - } else { - float widthRatio = (float)(mmWidth / lastColWidth); - ptHeight = ptHeight / widthRatio; } int rowsSpanned = state.findRowsSpanned( cell.getRowIndex(), cell.getColumnIndex() ); @@ -323,7 +422,9 @@ private void processCellImage( HandlerState state, Drawing drawing, CellImage ce for( int i = 0; i < rowsSpanned; ++i ) { int rowIndex = cell.getRowIndex() + 1 + i; - neededRowHeightPoints -= state.currentSheet.getRow(rowIndex).getHeightInPoints(); + if( state.currentSheet.getRow(rowIndex) != null ) { + neededRowHeightPoints -= state.currentSheet.getRow(rowIndex).getHeightInPoints(); + } } if( neededRowHeightPoints > cell.getRow().getHeightInPoints()) { @@ -345,48 +446,56 @@ private void processCellImage( HandlerState state, Drawing drawing, CellImage ce @Override public void startList(HandlerState state, IListContent list) throws BirtException { + createSheet( state, list ); state.setHandler(new TopLevelListHandler(log,this,list)); state.getHandler().startList(state, list); } @Override public void startTable(HandlerState state, ITableContent table) throws BirtException { + createSheet( state, table ); state.setHandler(new TopLevelTableHandler(log,this,table)); state.getHandler().startTable(state, table); } @Override public void emitText(HandlerState state, ITextContent text) throws BirtException { + createSheet( state, text ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitText(state, text); } @Override public void emitData(HandlerState state, IDataContent data) throws BirtException { + createSheet( state, data ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitData(state, data); } @Override public void emitLabel(HandlerState state, ILabelContent label) throws BirtException { + createSheet( state, label ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitLabel(state, label); } @Override public void emitAutoText(HandlerState state, IAutoTextContent autoText) throws BirtException { + createSheet( state, autoText ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitAutoText(state, autoText); } @Override public void emitForeign(HandlerState state, IForeignContent foreign) throws BirtException { + createSheet( state, foreign ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitForeign(state, foreign); } @Override public void emitImage(HandlerState state, IImageContent image) throws BirtException { + createSheet( state, image ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitImage(state, image); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/StringCellHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/StringCellHandler.java index 193f1342b56..4255ae38fcf 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/StringCellHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/StringCellHandler.java @@ -25,12 +25,12 @@ import org.eclipse.birt.report.engine.content.ILabelContent; import org.eclipse.birt.report.engine.content.ITableContent; import org.eclipse.birt.report.engine.content.ITextContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; import org.eclipse.birt.report.engine.layout.pdf.util.HTML2Content; import uk.co.spudsoft.birt.emitters.excel.Area; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class StringCellHandler extends CellContentHandler { @@ -100,24 +100,24 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep public void emitText(HandlerState state, ITextContent text) throws BirtException { String textText = text.getText(); log.debug( "text:", textText ); - emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override public void emitData(HandlerState state, IDataContent data) throws BirtException { - emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override public void emitLabel(HandlerState state, ILabelContent label) throws BirtException { String labelText = ( label.getLabelText() != null ) ? label.getLabelText() : label.getText(); log.debug( "labelText:" + labelText ); - emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StyleConstants.STYLE_DISPLAY, "block") ) )); + emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StylePropertyIndexes.STYLE_DISPLAY, "block") ) )); } @Override public void emitAutoText(HandlerState state, IAutoTextContent autoText) throws BirtException { - emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override @@ -137,7 +137,7 @@ public void emitImage(HandlerState state, IImageContent image) throws BirtExcept @Override public void endContainer(HandlerState state, IContainerContent container) throws BirtException { - lastCellContentsWasBlock = ( ! "inline".equals( getStyleProperty(container, StyleConstants.STYLE_DISPLAY, "block") ) ); + lastCellContentsWasBlock = ( ! "inline".equals( getStyleProperty(container, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelContentHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelContentHandler.java index 38d11cd9af4..e4d1d88eae6 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelContentHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelContentHandler.java @@ -20,12 +20,12 @@ import org.eclipse.birt.report.engine.content.IImageContent; import org.eclipse.birt.report.engine.content.ILabelContent; import org.eclipse.birt.report.engine.content.ITextContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; import org.eclipse.birt.report.engine.layout.pdf.util.HTML2Content; import uk.co.spudsoft.birt.emitters.excel.Coordinate; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class TopLevelContentHandler extends CellContentHandler { @@ -40,10 +40,10 @@ public void emitText(HandlerState state, ITextContent text) throws BirtException log.debug( "Creating row ", state.rowNum, " for text" ); state.currentSheet.createRow( state.rowNum ); - emitContent(state, text, text.getText(), ( ! "inline".equals( getStyleProperty(text, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state, text, text.getText(), ( ! "inline".equals( getStyleProperty(text, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); Cell currentCell = state.currentSheet.getRow(state.rowNum).createCell( 0 ); - currentCell.setCellType(Cell.CELL_TYPE_BLANK); + // currentCell.setCellType(Cell.CELL_TYPE_BLANK); endCellContent(state, null, text, currentCell, null); @@ -56,10 +56,10 @@ public void emitData(HandlerState state, IDataContent data) throws BirtException log.debug( "Creating row ", state.rowNum, " for data" ); state.currentSheet.createRow( state.rowNum ); - emitContent(state, data, data.getValue(), ( ! "inline".equals( getStyleProperty(data, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state, data, data.getValue(), ( ! "inline".equals( getStyleProperty(data, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); Cell currentCell = state.currentSheet.getRow(state.rowNum).createCell( 0 ); - currentCell.setCellType(Cell.CELL_TYPE_BLANK); + // currentCell.setCellType(Cell.CELL_TYPE_BLANK); endCellContent(state, null, data, currentCell, null); @@ -73,10 +73,10 @@ public void emitLabel(HandlerState state, ILabelContent label) throws BirtExcept state.currentSheet.createRow( state.rowNum ); String labelText = ( label.getLabelText() != null ) ? label.getLabelText() : label.getText(); - emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StyleConstants.STYLE_DISPLAY, "block") ) )); + emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StylePropertyIndexes.STYLE_DISPLAY, "block") ) )); Cell currentCell = state.currentSheet.getRow(state.rowNum).createCell( 0 ); - currentCell.setCellType(Cell.CELL_TYPE_BLANK); + // currentCell.setCellType(Cell.CELL_TYPE_BLANK); endCellContent(state, null, label, currentCell, null); @@ -104,7 +104,7 @@ public void emitImage(HandlerState state, IImageContent image) throws BirtExcept recordImage(state, new Coordinate( state.rowNum, 0 ), image, true); Cell currentCell = state.currentSheet.getRow(state.rowNum).createCell( 0 ); - currentCell.setCellType(Cell.CELL_TYPE_BLANK); + // currentCell.setCellType(Cell.CELL_TYPE_BLANK); endCellContent(state, null, image, currentCell, null); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelListHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelListHandler.java index 353238191a1..aee5511ebb8 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelListHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelListHandler.java @@ -47,10 +47,6 @@ public TopLevelListHandler(Logger log,IHandler parent, IListContent list) { public void startList(HandlerState state, IListContent list) throws BirtException { log.debug( "Call startList on ", this ); super.startList(state, list); - String name = list.getName(); - if( ( name != null ) && ! name.isEmpty() ) { - state.sheetName = name; - } String password = EmitterServices.stringOption( state.getRenderOptions(), list, ExcelEmitter.SHEET_PASSWORD, null); if( ( password != null ) && ! password.isEmpty() ) { @@ -75,7 +71,6 @@ public void startListGroup(HandlerState state, IListGroupContent group) throws B } groupStarts.push(state.rowNum); - Object groupDesignObject = group.getGenerateBy(); if( groupDesignObject instanceof ListGroupDesign ) { ListGroupDesign groupDesign = (ListGroupDesign)groupDesignObject; diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelTableHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelTableHandler.java index 2952d60e6fc..3df88f8631c 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelTableHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelTableHandler.java @@ -40,10 +40,6 @@ public TopLevelTableHandler(Logger log,IHandler parent, ITableContent table) { public void startTable(HandlerState state, ITableContent table) throws BirtException { state.colNum = 0; super.startTable(state, table); - String name = table.getName(); - if( ( name != null ) && ! name.isEmpty() ) { - state.sheetName = name; - } String password = EmitterServices.stringOption( state.getRenderOptions(), table, ExcelEmitter.SHEET_PASSWORD, null); if( ( password != null ) && ! password.isEmpty() ) { @@ -71,6 +67,8 @@ public void endTable(HandlerState state, ITableContent table) throws BirtExcepti } state.setHandler(parent); + + state.colNum = 0; } @Override @@ -78,7 +76,7 @@ public void startRow(HandlerState state, IRowContent row) throws BirtException { state.setHandler(new TopLevelTableRowHandler(log, this, row)); state.getHandler().startRow(state, row); } - + @Override public void startTableGroup(HandlerState state, ITableGroupContent group) throws BirtException { log.debug( "startTableGroup @" + state.rowNum + " called " + group.getBookmark() );