You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2015/01/01 19:26:51 UTC
svn commit: r1648916 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form:
PDChoice.java PDComboBox.java
Author: msahyoun
Date: Thu Jan 1 18:26:51 2015
New Revision: 1648916
URL: http://svn.apache.org/r1648916
Log:
PDFBOX-2516 use Java types instead of COS model types
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java?rev=1648916&r1=1648915&r2=1648916&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java Thu Jan 1 18:26:51 2015
@@ -16,12 +16,16 @@
*/
package org.apache.pdfbox.pdmodel.interactive.form;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSInteger;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSString;
+import org.apache.pdfbox.pdmodel.common.COSArrayList;
/**
* A choice field contains several text items, one or more of which shall be selected as the field value.
@@ -57,9 +61,20 @@ public abstract class PDChoice extends P
*
* @return COSArray containing all options.
*/
- public COSArray getOptions()
+ public List<String> getOptions()
{
- return (COSArray) getDictionary().getDictionaryObject(COSName.OPT);
+ COSBase value = getDictionary().getDictionaryObject(COSName.V);
+ if (value instanceof COSString)
+ {
+ List<String> array = new ArrayList<String>();
+ array.add(((COSString) value).getString());
+ return array;
+ }
+ else if (value instanceof COSArray)
+ {
+ return COSArrayList.convertCOSStringCOSArrayToList((COSArray)value);
+ }
+ return new ArrayList<String>();
}
/**
@@ -67,11 +82,11 @@ public abstract class PDChoice extends P
*
* @param values COSArray containing all possible options.
*/
- public void setOptions(COSArray values)
+ public void setOptions(List<String> values)
{
if (values != null)
{
- getDictionary().setItem(COSName.OPT, values);
+ getDictionary().setItem(COSName.OPT, COSArrayList.convertStringListToCOSStringCOSArray(values));
}
else
{
@@ -234,24 +249,18 @@ public abstract class PDChoice extends P
/**
* setValue sets the entry "V" to the given value.
*
- * @param value the value
+ * @param values the list of values
*
*/
- public void setValue(String[] value)
+ public void setValue(List<String> values)
{
- if (value != null)
+ if (values != null)
{
if (!isMultiSelect())
{
throw new IllegalArgumentException("The list box does not allow multiple selection.");
}
- String[] stringValues = (String[])value;
- COSArray stringArray = new COSArray();
- for (int i =0; i<stringValues.length;i++)
- {
- stringArray.add(new COSString(stringValues[i]));
- }
- getDictionary().setItem(COSName.V, stringArray);
+ getDictionary().setItem(COSName.V, COSArrayList.convertStringListToCOSStringCOSArray(values));
}
else
{
@@ -268,50 +277,34 @@ public abstract class PDChoice extends P
*
*/
@Override
- public COSArray getValue()
+ public List<String> getValue()
{
COSBase value = getDictionary().getDictionaryObject( COSName.V);
if (value instanceof COSString)
{
- COSArray array = new COSArray();
- array.add(value);
+ List<String> array = new ArrayList<String>();
+ array.add(((COSString) value).getString());
return array;
}
else if (value instanceof COSArray)
{
- return (COSArray)value;
+ return COSArrayList.convertCOSStringCOSArrayToList((COSArray)value);
}
- return null;
+ return new ArrayList<String>();
}
// returns the "Opt" index for the given string
private int getSelectedIndex(String optionValue)
{
int indexSelected = -1;
- COSArray options = getOptions();
- // YXJ: Changed the order of the loops. Acrobat produces PDF's
- // where sometimes there is 1 string and the rest arrays.
- // This code works either way.
+ List<String> options = getOptions();
+
for (int i = 0; i < options.size() && indexSelected == -1; i++)
{
- COSBase option = options.getObject(i);
- if (option instanceof COSArray)
- {
- COSArray keyValuePair = (COSArray) option;
- COSString key = (COSString) keyValuePair.getObject(0);
- COSString value = (COSString) keyValuePair.getObject(1);
- if (optionValue.equals(key.getString()) || optionValue.equals(value.getString()))
- {
- indexSelected = i;
- }
- }
- else
+ String option = options.get(i);
+ if (option.compareTo(optionValue) == 0)
{
- COSString value = (COSString) option;
- if (optionValue.equals(value.getString()))
- {
- indexSelected = i;
- }
+ return i;
}
}
return indexSelected;
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java?rev=1648916&r1=1648915&r2=1648916&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java Thu Jan 1 18:26:51 2015
@@ -16,6 +16,8 @@
*/
package org.apache.pdfbox.pdmodel.interactive.form;
+import java.util.List;
+
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
@@ -109,15 +111,15 @@ public final class PDComboBox extends PD
/**
* setValue sets the entry "V" to the given value.
*
- * @param value the value
+ * @param values the value
*
*/
- public void setValue(String[] value)
+ public void setValue(List<String> values)
{
if ((getFieldFlags() & FLAG_EDIT) != 0)
{
throw new IllegalArgumentException("The combo box isn't editable.");
}
- super.setValue(value);
+ super.setValue(values);
}
}