restore (merge, cleanup and move to dev. package) XSLT utilities classes for model classes autogeneration.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1155242 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
efceea044f
commit
1c04bacc34
156
src/scratchpad/src/org/apache/poi/hwpf/dev/FieldIterator.java
Normal file
156
src/scratchpad/src/org/apache/poi/hwpf/dev/FieldIterator.java
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.hwpf.dev;
|
||||||
|
|
||||||
|
import org.apache.poi.util.Internal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* For iterating through our fields. Used during model classes autogeneration.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
|
*/
|
||||||
|
@Internal
|
||||||
|
public class FieldIterator
|
||||||
|
{
|
||||||
|
|
||||||
|
protected int offset;
|
||||||
|
|
||||||
|
public FieldIterator()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public String calcSize( int fieldNumber, String fieldName, String size,
|
||||||
|
String type )
|
||||||
|
{
|
||||||
|
String result = " + ";
|
||||||
|
if ( type.startsWith( "custom:" ) )
|
||||||
|
{
|
||||||
|
String javaFieldName = RecordUtil.getFieldName( fieldNumber,
|
||||||
|
fieldName, 0 );
|
||||||
|
return result + javaFieldName + ".getSize()";
|
||||||
|
}
|
||||||
|
else if ( "var".equals( size ) )
|
||||||
|
{
|
||||||
|
String javaFieldName = RecordUtil.getFieldName( fieldNumber,
|
||||||
|
fieldName, 0 );
|
||||||
|
return result + " (" + javaFieldName + ".length() *2)";
|
||||||
|
}
|
||||||
|
else if ( "varword".equals( size ) )
|
||||||
|
{
|
||||||
|
String javaFieldName = RecordUtil.getFieldName( fieldNumber,
|
||||||
|
fieldName, 0 );
|
||||||
|
return result + javaFieldName + ".length * 2 + 2";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return result + size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String fillDecoder( String size, String type )
|
||||||
|
{
|
||||||
|
|
||||||
|
String result = "";
|
||||||
|
|
||||||
|
if ( type.equals( "short[]" ) )
|
||||||
|
result = "LittleEndian.getSimpleShortArray(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset," + size + ")";
|
||||||
|
else if ( type.equals( "byte[]" ) )
|
||||||
|
result = "LittleEndian.getByteArray(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset," + size + ")";
|
||||||
|
else if ( type.equals( "BorderCode" ) )
|
||||||
|
result = "new BorderCode(data, 0x" + Integer.toHexString( offset )
|
||||||
|
+ " + offset)";
|
||||||
|
else if ( type.equals( "DateAndTime" ) )
|
||||||
|
result = "new DateAndTime(data, 0x" + Integer.toHexString( offset )
|
||||||
|
+ " + offset)";
|
||||||
|
else if ( size.equals( "2" ) )
|
||||||
|
result = "LittleEndian.getShort(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset)";
|
||||||
|
else if ( size.equals( "4" ) )
|
||||||
|
result = "LittleEndian.getInt(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset)";
|
||||||
|
else if ( size.equals( "1" ) )
|
||||||
|
result = "data[ 0x" + Integer.toHexString( offset ) + " + offset ]";
|
||||||
|
else if ( type.equals( "double" ) )
|
||||||
|
result = "LittleEndian.getDouble(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset)";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
offset += Integer.parseInt( size );
|
||||||
|
}
|
||||||
|
catch ( NumberFormatException ignore )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String serialiseEncoder( int fieldNumber, String fieldName,
|
||||||
|
String size, String type )
|
||||||
|
{
|
||||||
|
// String javaType = RecordUtil.getType(size, type, 0);
|
||||||
|
String javaFieldName = RecordUtil.getFieldName( fieldNumber, fieldName,
|
||||||
|
0 );
|
||||||
|
|
||||||
|
String result = "";
|
||||||
|
|
||||||
|
if ( type.equals( "short[]" ) )
|
||||||
|
result = "LittleEndian.putShortArray(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset, "
|
||||||
|
+ javaFieldName + ");";
|
||||||
|
else if ( type.equals( "byte[]" ) )
|
||||||
|
result = "System.arraycopy(" + javaFieldName + ", 0, data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset, "
|
||||||
|
+ javaFieldName + ".length);";
|
||||||
|
else if ( type.equals( "BorderCode" ) )
|
||||||
|
result = javaFieldName + ".serialize(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset);";
|
||||||
|
else if ( type.equals( "DateAndTime" ) )
|
||||||
|
result = javaFieldName + ".serialize(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset);";
|
||||||
|
else if ( size.equals( "2" ) )
|
||||||
|
result = "LittleEndian.putShort(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset, (short)"
|
||||||
|
+ javaFieldName + ");";
|
||||||
|
else if ( size.equals( "4" ) )
|
||||||
|
result = "LittleEndian.putInt(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset, "
|
||||||
|
+ javaFieldName + ");";
|
||||||
|
else if ( size.equals( "1" ) )
|
||||||
|
result = "data[ 0x" + Integer.toHexString( offset )
|
||||||
|
+ " + offset] = " + javaFieldName + ";";
|
||||||
|
else if ( type.equals( "double" ) )
|
||||||
|
result = "LittleEndian.putDouble(data, 0x"
|
||||||
|
+ Integer.toHexString( offset ) + " + offset, "
|
||||||
|
+ javaFieldName + ");";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
offset += Integer.parseInt( size );
|
||||||
|
}
|
||||||
|
catch ( NumberFormatException ignore )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
208
src/scratchpad/src/org/apache/poi/hwpf/dev/RecordUtil.java
Normal file
208
src/scratchpad/src/org/apache/poi/hwpf/dev/RecordUtil.java
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.hwpf.dev;
|
||||||
|
|
||||||
|
import org.apache.poi.util.Internal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper functions for the record transformations. Used during model classes
|
||||||
|
* autogeneration.
|
||||||
|
*
|
||||||
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
|
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||||
|
*/
|
||||||
|
@Internal
|
||||||
|
public class RecordUtil
|
||||||
|
{
|
||||||
|
|
||||||
|
public static String getBitFieldFunction( String name, String bitMask,
|
||||||
|
String parentType, String withType )
|
||||||
|
{
|
||||||
|
String type = getBitFieldType( name, bitMask, parentType );
|
||||||
|
|
||||||
|
String retVal = new String();
|
||||||
|
if ( withType.equals( "true" ) )
|
||||||
|
{
|
||||||
|
retVal = type + " ";
|
||||||
|
}
|
||||||
|
if ( type.equals( "boolean" ) )
|
||||||
|
{
|
||||||
|
retVal += "is" + getFieldName1stCap( name, 0 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
retVal += "get" + getFieldName1stCap( name, 0 );
|
||||||
|
}
|
||||||
|
return retVal;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getBitFieldGet( String name, String bitMask,
|
||||||
|
String parentType, String parentField )
|
||||||
|
{
|
||||||
|
String type = getBitFieldType( name, bitMask, parentType );
|
||||||
|
|
||||||
|
String retVal = null;
|
||||||
|
|
||||||
|
if ( type.equals( "boolean" ) )
|
||||||
|
retVal = name + ".isSet(" + parentField + ");";
|
||||||
|
else
|
||||||
|
retVal = "( " + type + " )" + name + ".getValue(" + parentField
|
||||||
|
+ ");";
|
||||||
|
|
||||||
|
return retVal;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getBitFieldSet( String name, String bitMask,
|
||||||
|
String parentType, String parentField )
|
||||||
|
{
|
||||||
|
String type = getBitFieldType( name, bitMask, parentType );
|
||||||
|
|
||||||
|
String retVal = null;
|
||||||
|
|
||||||
|
if ( type.equals( "boolean" ) )
|
||||||
|
retVal = "(" + parentType + ")" + getFieldName( name, 0 )
|
||||||
|
+ ".setBoolean(" + parentField + ", value)";
|
||||||
|
else
|
||||||
|
retVal = "(" + parentType + ")" + getFieldName( name, 0 )
|
||||||
|
+ ".setValue(" + parentField + ", value)";
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getBitFieldType( String name, String bitMask,
|
||||||
|
String parentType )
|
||||||
|
{
|
||||||
|
byte parentSize = 0;
|
||||||
|
byte numBits = 0;
|
||||||
|
int mask = (int) Long.parseLong( bitMask.substring( 2 ), 16 );
|
||||||
|
|
||||||
|
if ( parentType.equals( "byte" ) )
|
||||||
|
parentSize = 8;
|
||||||
|
else if ( parentType.equals( "short" ) )
|
||||||
|
parentSize = 16;
|
||||||
|
else if ( parentType.equals( "int" ) )
|
||||||
|
parentSize = 32;
|
||||||
|
|
||||||
|
for ( int x = 0; x < parentSize; x++ )
|
||||||
|
{
|
||||||
|
int temp = mask;
|
||||||
|
numBits += ( temp >> x ) & 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( numBits == 1 )
|
||||||
|
{
|
||||||
|
return "boolean";
|
||||||
|
}
|
||||||
|
else if ( numBits < 8 )
|
||||||
|
{
|
||||||
|
return "byte";
|
||||||
|
}
|
||||||
|
else if ( numBits < 16 )
|
||||||
|
{
|
||||||
|
return "short";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "int";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getConstName( String parentName, String constName,
|
||||||
|
int padTo )
|
||||||
|
{
|
||||||
|
StringBuffer fieldName = new StringBuffer();
|
||||||
|
toConstIdentifier( parentName, fieldName );
|
||||||
|
fieldName.append( '_' );
|
||||||
|
toConstIdentifier( constName, fieldName );
|
||||||
|
pad( fieldName, padTo );
|
||||||
|
return fieldName.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getFieldName( int position, String name, int padTo )
|
||||||
|
{
|
||||||
|
StringBuffer fieldName = new StringBuffer( "field_" + position + "_" );
|
||||||
|
toIdentifier( name, fieldName );
|
||||||
|
pad( fieldName, padTo );
|
||||||
|
|
||||||
|
return fieldName.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getFieldName( String name, int padTo )
|
||||||
|
{
|
||||||
|
StringBuffer fieldName = new StringBuffer();
|
||||||
|
toIdentifier( name, fieldName );
|
||||||
|
pad( fieldName, padTo );
|
||||||
|
|
||||||
|
return fieldName.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getFieldName1stCap( String name, int padTo )
|
||||||
|
{
|
||||||
|
StringBuffer fieldName = new StringBuffer();
|
||||||
|
toIdentifier( name, fieldName );
|
||||||
|
fieldName.setCharAt( 0, Character.toUpperCase( fieldName.charAt( 0 ) ) );
|
||||||
|
pad( fieldName, padTo );
|
||||||
|
|
||||||
|
return fieldName.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getType1stCap( String size, String type, int padTo )
|
||||||
|
{
|
||||||
|
StringBuffer result = new StringBuffer();
|
||||||
|
result.append( type );
|
||||||
|
result = pad( result, padTo );
|
||||||
|
result.setCharAt( 0, Character.toUpperCase( result.charAt( 0 ) ) );
|
||||||
|
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static StringBuffer pad( StringBuffer fieldName, int padTo )
|
||||||
|
{
|
||||||
|
for ( int i = fieldName.length(); i < padTo; i++ )
|
||||||
|
fieldName.append( ' ' );
|
||||||
|
return fieldName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void toConstIdentifier( String name, StringBuffer fieldName )
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < name.length(); i++ )
|
||||||
|
{
|
||||||
|
if ( name.charAt( i ) == ' ' )
|
||||||
|
fieldName.append( '_' );
|
||||||
|
else
|
||||||
|
fieldName.append( Character.toUpperCase( name.charAt( i ) ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void toIdentifier( String name, StringBuffer fieldName )
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < name.length(); i++ )
|
||||||
|
{
|
||||||
|
if ( name.charAt( i ) == ' ' )
|
||||||
|
fieldName.append( Character.toUpperCase( name.charAt( ++i ) ) );
|
||||||
|
else
|
||||||
|
fieldName.append( name.charAt( i ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public RecordUtil()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -19,8 +19,8 @@
|
|||||||
-->
|
-->
|
||||||
<xsl:stylesheet version="1.0"
|
<xsl:stylesheet version="1.0"
|
||||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
xmlns:recutil="org.apache.poi.hdf.generator.HDFRecordUtil"
|
xmlns:recutil="org.apache.poi.hwpf.dev.RecordUtil"
|
||||||
xmlns:field="org.apache.poi.hdf.generator.HDFFieldIterator"
|
xmlns:field="org.apache.poi.hwpf.dev.FieldIterator"
|
||||||
xmlns:java="java" >
|
xmlns:java="java" >
|
||||||
|
|
||||||
<xsl:output method="text"/>
|
<xsl:output method="text"/>
|
||||||
@ -31,12 +31,8 @@
|
|||||||
package <xsl:value-of select="@package"/>;
|
package <xsl:value-of select="@package"/>;
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
|
||||||
import org.apache.poi.util.BitField;
|
|
||||||
import org.apache.poi.util.Internal;
|
|
||||||
import org.apache.poi.util.LittleEndian;
|
|
||||||
import org.apache.poi.util.StringUtil;
|
|
||||||
import org.apache.poi.util.HexDump;
|
|
||||||
import org.apache.poi.hwpf.usermodel.*;
|
import org.apache.poi.hwpf.usermodel.*;
|
||||||
|
import org.apache.poi.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <xsl:value-of select="/record/description"/>
|
* <xsl:value-of select="/record/description"/>
|
||||||
|
Loading…
Reference in New Issue
Block a user