Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java?rev=1618374&r1=1618373&r2=1618374&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java Sat Aug 16 15:21:09 2014 @@ -17,14 +17,11 @@ package org.apache.pdfbox.pdmodel.interactive.form; import java.io.IOException; -import java.util.ArrayList; import java.util.List; -import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSName; - -import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** * Radio button fields contain a set of related buttons that can each be on or off. @@ -33,20 +30,17 @@ import org.apache.pdfbox.pdmodel.common. */ public final class PDRadioButton extends PDButton { - /** - * A Ff flag. - */ - public static final int FLAG_RADIOS_IN_UNISON = 1 << 25; /** - * @param theAcroForm The acroForm for this field. - * @param field The field that makes up the radio collection. - * - * {@inheritDoc} + * Constructor. + * + * @param theAcroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parentNode the parent node of the node to be created */ - public PDRadioButton(PDAcroForm theAcroForm, COSDictionary field) + public PDRadioButton(PDAcroForm theAcroForm, COSDictionary field, PDFieldTreeNode parentNode) { - super(theAcroForm,field); + super(theAcroForm, field, parentNode); } /** @@ -85,13 +79,12 @@ public final class PDRadioButton extends public void setValue(String value) throws IOException { getDictionary().setString( COSName.V, value ); - List kids = getKids(); - for (Object kid : kids) + List<COSObjectable> kids = getKids(); + for (COSObjectable kid : kids) { - PDField field = (PDField) kid; - if ( field instanceof PDCheckbox ) + if ( kid instanceof PDCheckbox ) { - PDCheckbox btn = (PDCheckbox)field; + PDCheckbox btn = (PDCheckbox)kid; if( btn.getOnValue().equals(value) ) { btn.check(); @@ -115,13 +108,12 @@ public final class PDRadioButton extends public String getValue() throws IOException { String retval = null; - List kids = getKids(); - for (Object kid : kids) + List<COSObjectable> kids = getKids(); + for (COSObjectable kid : kids) { - PDField field = (PDField) kid; - if ( field instanceof PDCheckbox ) + if ( kid instanceof PDCheckbox ) { - PDCheckbox btn = (PDCheckbox)field; + PDCheckbox btn = (PDCheckbox)kid; if( btn.isChecked() ) { retval = btn.getOnValue(); @@ -135,34 +127,4 @@ public final class PDRadioButton extends return retval; } - - /** - * This will return a list of PDField objects that are part of this radio collection. - * - * @see PDField#getWidget() - * @return A list of PDWidget objects. - * @throws IOException if there is an error while creating the children objects. - */ - @SuppressWarnings("unchecked") - public List getKids() throws IOException - { - COSArray kids = (COSArray)getDictionary().getDictionaryObject(COSName.KIDS); - if( kids != null ) - { - List kidsList = new ArrayList(); - for (int i = 0; i < kids.size(); i++) - { - PDField field = PDFieldFactory.createField( getAcroForm(), (COSDictionary)kids.getObject(i) ); - if (field != null) - { - kidsList.add( field ); - } - } - return new COSArrayList( kidsList, kids ); - } - else - { - return new ArrayList(); - } - } }
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java?rev=1618374&r1=1618373&r2=1618374&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java Sat Aug 16 15:21:09 2014 @@ -37,15 +37,15 @@ import java.util.Set; public class PDSignatureField extends PDField { /** - * @see PDField#PDField(PDAcroForm,COSDictionary) - * - * @param theAcroForm The acroForm for this field. - * @param field The dictionary for the signature. - * @throws IOException If there is an error while resolving partital name for the signature field + * Constructor. + * + * @param theAcroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parentNode the parent node of the node to be created */ - public PDSignatureField(PDAcroForm theAcroForm, COSDictionary field) throws IOException + public PDSignatureField(PDAcroForm theAcroForm, COSDictionary field, PDFieldTreeNode parentNode) { - super(theAcroForm,field); + super(theAcroForm, field, parentNode); // dirty hack to avoid npe caused through getWidget() method getDictionary().setItem( COSName.TYPE, COSName.ANNOT ); getDictionary().setName( COSName.SUBTYPE, PDAnnotationWidget.SUB_TYPE); @@ -72,31 +72,26 @@ public class PDSignatureField extends PD /** * Generate a unique name for the signature. * @return the signature's unique name - * @throws IOException If there is an error while getting the list of fields. */ - private String generatePartialName() throws IOException + private String generatePartialName() { - PDAcroForm acroForm = getAcroForm(); - List fields = acroForm.getFields(); - - String fieldName = "Signature"; - int i = 1; - - Set<String> sigNames = new HashSet<String>(); - - for ( Object object : fields ) - { - if(object instanceof PDSignatureField) + PDAcroForm acroForm = getAcroForm(); + List<PDFieldTreeNode> fields = acroForm.getFields(); + String fieldName = "Signature"; + Set<String> sigNames = new HashSet<String>(); + for ( PDFieldTreeNode field : fields ) { - sigNames.add(((PDSignatureField) object).getPartialName()); + if(field instanceof PDSignatureField) + { + sigNames.add(field.getPartialName()); + } } - } - - while(sigNames.contains(fieldName+i)) - { - ++i; - } - return fieldName+i; + int i = 1; + while(sigNames.contains(fieldName+i)) + { + ++i; + } + return fieldName+i; } /** @@ -147,7 +142,7 @@ public class PDSignatureField extends PD */ public void setSignature(PDSignature value) { - getDictionary().setItem(COSName.V, value); + getDictionary().setItem(COSName.V, value); } /** @@ -158,12 +153,12 @@ public class PDSignatureField extends PD */ public PDSignature getSignature() { - COSBase dictionary = getDictionary().getDictionaryObject(COSName.V); - if (dictionary == null) - { - return null; - } - return new PDSignature((COSDictionary)dictionary); + COSBase dictionary = getDictionary().getDictionaryObject(COSName.V); + if (dictionary == null) + { + return null; + } + return new PDSignature((COSDictionary)dictionary); } /** @@ -175,13 +170,13 @@ public class PDSignatureField extends PD */ public PDSeedValue getSeedValue() { - COSDictionary dict = (COSDictionary)getDictionary().getDictionaryObject(COSName.SV); - PDSeedValue sv = null; - if (dict != null) - { - sv = new PDSeedValue(dict); - } - return sv; + COSDictionary dict = (COSDictionary)getDictionary().getDictionaryObject(COSName.SV); + PDSeedValue sv = null; + if (dict != null) + { + sv = new PDSeedValue(dict); + } + return sv; } /** @@ -193,9 +188,9 @@ public class PDSignatureField extends PD */ public void setSeedValue(PDSeedValue sv) { - if (sv != null) - { - getDictionary().setItem(COSName.SV, sv.getCOSObject()); - } + if (sv != null) + { + getDictionary().setItem(COSName.SV, sv.getCOSObject()); + } } } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java?rev=1618374&r1=1618373&r2=1618374&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java Sat Aug 16 15:21:09 2014 @@ -27,8 +27,9 @@ import org.apache.pdfbox.cos.COSName; */ public final class PDTextField extends PDVariableText { + /** - * @see PDField#PDField(PDAcroForm,COSDictionary) + * @see PDFieldTreeNode#PDFieldTreeNode(PDAcroForm)(PDAcroForm,COSDictionary) * * @param theAcroForm The acroform. */ @@ -38,14 +39,15 @@ public final class PDTextField extends P } /** - * @see org.apache.pdfbox.pdmodel.interactive.form.PDField#PDField(PDAcroForm,COSDictionary) - * - * @param theAcroForm The acroForm for this field. - * @param field The field's dictionary. + * Constructor. + * + * @param theAcroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parentNode the parent node of the node to be created */ - public PDTextField(PDAcroForm theAcroForm, COSDictionary field) + public PDTextField(PDAcroForm theAcroForm, COSDictionary field, PDFieldTreeNode parentNode) { - super( theAcroForm, field); + super( theAcroForm, field, parentNode); } /** Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java?rev=1618374&r1=1618373&r2=1618374&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java Sat Aug 16 15:21:09 2014 @@ -29,7 +29,7 @@ import java.io.IOException; * * @author Ben Litchfield */ -public abstract class PDVariableText extends PDField // TODO mixin, not really a field +public abstract class PDVariableText extends PDField { /** * A Ff flag. @@ -95,14 +95,15 @@ public abstract class PDVariableText ext } /** - * @see org.apache.pdfbox.pdmodel.interactive.form.PDField#PDField(PDAcroForm,COSDictionary) - * - * @param theAcroForm The acroForm for this field. - * @param field The field's dictionary. + * Constructor. + * + * @param theAcroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parentNode the parent node of the node to be created */ - PDVariableText(PDAcroForm theAcroForm, COSDictionary field) + protected PDVariableText(PDAcroForm theAcroForm, COSDictionary field, PDFieldTreeNode parentNode) { - super( theAcroForm, field); + super( theAcroForm, field, parentNode); da = (COSString) field.getDictionaryObject(COSName.DA); } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java?rev=1618374&r1=1618373&r2=1618374&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Sat Aug 16 15:21:09 2014 @@ -50,8 +50,8 @@ import org.apache.pdfbox.pdmodel.interac import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline; import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; -import org.apache.pdfbox.pdmodel.interactive.form.PDField; import org.apache.pdfbox.pdmodel.interactive.form.PDFieldFactory; +import org.apache.pdfbox.pdmodel.interactive.form.PDFieldTreeNode; /** * This class will take a list of pdf documents and merge them, saving the @@ -544,28 +544,28 @@ public class PDFMergerUtility private void mergeAcroForm(PDFCloneUtility cloner, PDAcroForm destAcroForm, PDAcroForm srcAcroForm) throws IOException { - List destFields = destAcroForm.getFields(); - List srcFields = srcAcroForm.getFields(); + List<PDFieldTreeNode> destFields = destAcroForm.getFields(); + List<PDFieldTreeNode> srcFields = srcAcroForm.getFields(); if (srcFields != null) { if (destFields == null) { - destFields = new COSArrayList(); + destFields = new COSArrayList<PDFieldTreeNode>(); destAcroForm.setFields(destFields); } - Iterator srcFieldsIterator = srcFields.iterator(); + Iterator<PDFieldTreeNode> srcFieldsIterator = srcFields.iterator(); while (srcFieldsIterator.hasNext()) { - PDField srcField = (PDField) srcFieldsIterator.next(); - PDField destField = PDFieldFactory.createField(destAcroForm, - (COSDictionary) cloner.cloneForNewDocument(srcField.getDictionary())); + PDFieldTreeNode srcField = srcFieldsIterator.next(); + PDFieldTreeNode destFieldNode = PDFieldFactory.createField(destAcroForm, + (COSDictionary) cloner.cloneForNewDocument(srcField.getDictionary()), null); // if the form already has a field with this name then we need to rename this field // to prevent merge conflicts. - if (destAcroForm.getField(destField.getFullyQualifiedName()) != null) + if (destAcroForm.getField(destFieldNode.getFullyQualifiedName()) != null) { - destField.setPartialName("dummyFieldName" + (nextFieldNum++)); + destFieldNode.setPartialName("dummyFieldName" + (nextFieldNum++)); } - destFields.add(destField); + destFields.add(destFieldNode); } } } Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java?rev=1618374&r1=1618373&r2=1618374&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java Sat Aug 16 15:21:09 2014 @@ -26,22 +26,24 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.cos.COSStream; import org.apache.pdfbox.cos.COSString; import org.apache.pdfbox.pdfparser.PDFStreamParser; +import org.apache.pdfbox.pdmodel.common.COSObjectable; import org.apache.pdfbox.pdmodel.fdf.FDFDocument; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; -import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDFieldTreeNode; import org.apache.pdfbox.pdmodel.interactive.form.PDRadioButton; import org.apache.pdfbox.pdmodel.interactive.form.PDTextField; /** * This will test the FDF algorithms in PDFBox. * - * @author <a href="mailto:[email protected]">Ben Litchfield</a> - * @version $Revision: 1.7 $ + * @author Ben Litchfield + * */ public class TestFDF extends TestCase { @@ -182,8 +184,6 @@ public class TestFDF extends TestCase PDRadioButton feld3 = (PDRadioButton)form.getField( "Feld.3" ); feld3.setValue("RB1"); assertEquals( "RB1", feld3.getValue() ); - //assertEquals( ((PDCheckbox)feld3.getKids().get( 0 )).getValue(), "RB1" ); - } finally { @@ -215,16 +215,16 @@ public class TestFDF extends TestCase PDAcroForm form = freedom.getDocumentCatalog().getAcroForm(); form.importFDF( fdf ); PDTextField feld2 = (PDTextField)form.getField( "eeFirstName" ); - List kids = feld2.getKids(); - PDField firstKid = (PDField)kids.get( 0 ); - PDField secondKid = (PDField)kids.get( 1 ); + List<COSObjectable> kids = feld2.getKids(); + PDFieldTreeNode firstKid = (PDFieldTreeNode)kids.get( 0 ); + PDFieldTreeNode secondKid = (PDFieldTreeNode)kids.get( 1 ); testContentStreamContains( freedom, firstKid, "Steve" ); testContentStreamContains( freedom, secondKid, "Steve" ); //the appearance stream is suppose to be null because there //is an F action in the AA dictionary that populates that field. - PDField totalAmt = form.getField( "eeSuppTotalAmt" ); - assertTrue( totalAmt.getDictionary().getDictionaryObject( "AP" ) == null ); + PDFieldTreeNode totalAmt = form.getField( "eeSuppTotalAmt" ); + assertTrue( totalAmt.getDictionary().getDictionaryObject( COSName.AP ) == null ); } finally @@ -241,26 +241,26 @@ public class TestFDF extends TestCase } } - private void testContentStreamContains( PDDocument doc, PDField field, String expected ) throws Exception + private void testContentStreamContains( PDDocument doc, PDFieldTreeNode field, String expected ) throws Exception { PDAnnotationWidget widget = field.getWidget(); - Map normalAppearance = widget.getAppearance().getNormalAppearance(); - PDAppearanceStream appearanceStream = (PDAppearanceStream)normalAppearance.get( "default" ); + Map<String,PDAppearanceStream> normalAppearance = widget.getAppearance().getNormalAppearance(); + PDAppearanceStream appearanceStream = normalAppearance.get( "default" ); COSStream actual = appearanceStream.getStream(); - List actualTokens = getStreamTokens( doc, actual ); + List<Object> actualTokens = getStreamTokens( doc, actual ); assertTrue( actualTokens.contains( new COSString( expected ) ) ); } - private void testContentStreams( PDDocument doc, PDField field, String expected ) throws Exception + private void testContentStreams( PDDocument doc, PDFieldTreeNode field, String expected ) throws Exception { PDAnnotationWidget widget = field.getWidget(); - Map normalAppearance = widget.getAppearance().getNormalAppearance(); - PDAppearanceStream appearanceStream = (PDAppearanceStream)normalAppearance.get( "default" ); + Map<String,PDAppearanceStream> normalAppearance = widget.getAppearance().getNormalAppearance(); + PDAppearanceStream appearanceStream = normalAppearance.get( "default" ); COSStream actual = appearanceStream.getStream(); - List actualTokens = getStreamTokens( doc, actual ); - List expectedTokens = getStreamTokens( doc, expected ); + List<Object> actualTokens = getStreamTokens( doc, actual ); + List<Object> expectedTokens = getStreamTokens( doc, expected ); assertEquals( actualTokens.size(), expectedTokens.size() ); for( int i=0; i<actualTokens.size(); i++ ) { @@ -270,11 +270,11 @@ public class TestFDF extends TestCase } } - private List getStreamTokens( PDDocument doc, String string ) throws IOException + private List<Object> getStreamTokens( PDDocument doc, String string ) throws IOException { PDFStreamParser parser; - List tokens = null; + List<Object> tokens = null; if( string != null ) { ByteArrayInputStream stream = new ByteArrayInputStream( string.getBytes() ); @@ -285,11 +285,11 @@ public class TestFDF extends TestCase return tokens; } - private List getStreamTokens( PDDocument doc, COSStream stream ) throws IOException + private List<Object> getStreamTokens( PDDocument doc, COSStream stream ) throws IOException { PDFStreamParser parser; - List tokens = null; + List<Object> tokens = null; if( stream != null ) { parser = new PDFStreamParser( stream );
