From 5c0c965b32c64a92f4f544d1d0e5c18ad2f2e361 Mon Sep 17 00:00:00 2001 From: Josh Micich Date: Wed, 31 Dec 2008 20:32:47 +0000 Subject: [PATCH] Fix for 45031 - added implementation for CHOOSE function. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@730469 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 1 + src/documentation/content/xdocs/status.xml | 1 + .../hssf/record/formula/functions/Choose.java | 65 ++++++++++++------ .../poi/hssf/data/FormulaEvalTestData.xls | Bin 157184 -> 157184 bytes 4 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 9a1908d994..d138d15031 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -37,6 +37,7 @@ + 45031- added implementation for CHOOSE() function 46361 - resolve licensing issues around the HDGF resource file, chunks_parse_cmds.tbl 46410 - added implementation for TIME() function 46320 - added HSSFPictureData.getFormat() diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index c13cb6cf29..4f1aafec49 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 45031- added implementation for CHOOSE() function 46361 - resolve licensing issues around the HDGF resource file, chunks_parse_cmds.tbl 46410 - added implementation for TIME() function 46320 - added HSSFPictureData.getFormat() diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java b/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java index e7acc93c48..2f3ac240a9 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java @@ -1,25 +1,48 @@ -/* -* 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. -*/ -/* - * Created on May 15, 2005 - * - */ +/* ==================================================================== + 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.hssf.record.formula.functions; -public class Choose extends NotImplementedFunction { +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.EvaluationException; +import org.apache.poi.hssf.record.formula.eval.OperandResolver; +import org.apache.poi.hssf.record.formula.eval.ValueEval; + +/** + * + * @author Josh Micich + */ +public final class Choose implements Function { + + public Eval evaluate(Eval[] args, int srcRowIndex, short srcColumnIndex) { + if (args.length < 2) { + return ErrorEval.VALUE_INVALID; + } + try { + ValueEval ev = OperandResolver.getSingleValue(args[0], srcRowIndex, srcColumnIndex); + int ix = OperandResolver.coerceValueToInt(ev); + if (ix < 1 || ix >= args.length) { + return ErrorEval.VALUE_INVALID; + } + return OperandResolver.getSingleValue(args[ix], srcRowIndex, srcColumnIndex); + } catch (EvaluationException e) { + return e.getErrorEval(); + } + } } diff --git a/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls b/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls index 344a072cdf7e49939e3164aa60a9593222d55b11..29e474abbf863cec6e281fa6f03a339a07557a26 100644 GIT binary patch delta 5773 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 T?m#Drc?sQbrrD3yh)n!HC+#s2 delta 5535 zcmb_g3sltAy5HaaZ*XQ9aFhW?K|n-69`aQ1Jq!pwcqU;H%5w;jL;)+MVl1_D%}&^O z*m&(GdcB3!?P#piczTI0MJ*{x^k|VCPpyQ?=P_62WA69O4C(23*E-#GH*5d*Z-4La z+xx%wpRpWMTaKw)ro)ImGY$jjI^B2)_x*OkiD$*gqfqK@SdnKq3L}9rOOkc9c#0SM zS$`HaUZqd$Sxy|MgtgwSetcfXUI(e=@4}(P?rLh4jxl#Pw#%w^4^q&YHPwBgHP79* zv(0@Thtbxv8iVzQO6@{p)K27UouT${(0r{WLrBY+A8SDyj5CL#X2hN8r)s@dGyqFs z?{SyJr|PjT6Kajqn86yO8FH07gf!FdSUIcl)dHJ!w++2l^*@^3r*WFaXQ$$^I+nk9 z#o9b|lz+TJjy>6e#|I=7z?Gbxh0Vj_B;18Z;AjS&u(Ht-0)5#=78KD)s>r z{lI?s8#*5ZmiPm(vWp;l19)9$!0KSNX!+rOCp;e~EC>A*>!Ro16w_Puigoz!cZl8Nw<*>?{r(lD7iAZ} z@T@r1Q^2i*FH9B%q%^K&v#?ahDxL4PBrBqqgs)k{gyloD6TEqvc!>;_Y)%uU(I%zy zmCfzr#T+s{@0|c~3Z*-1-q{@iN~izV?<*4&rlLK<7z}4Bu4CUYV85oFBbpV?dC&MY z=lgp||8Ni5MWS`)pK}AxTTH_Sa8DZ9IfZrZ8|+oYUnvFa`H8|p=^Z+sC@h~LxOsk- zVDl#`)>#*(i6f_w^3;V%qVFR=rPFpn1ANmkx!())oqxG#9wnAzL8MU)(aI78b!vzb zp@d#`AY%3)Qc69Fa9fMLA3ml{JW35b=(A^4)Uuz>fJT@>)4O zspvCP<)anoU?45k_Id?msDvsUP5ihNu$ZJ6UW<7ZQ@lmB5G^Xn|AtzK@P^yA&SrR8 z0LaN}Aqj`2&Y^uROa-ugu@=02m0-;8^1nlYvNlM2lj~_Q5d$?>l3S(u^QFw!I*UO%xkfU^L*V_U=gr*T9nzaAp3kVQ#gx>!G z0!0#`uL!kKFwl?7nL@OQ{Sc%O$m>UD9A#eL4{@TG9KX_!guyL0vuv6O{o3Ap^7n_G4}Z1CSs}+tA#G0Z0;a$k~Ab zboKygUK@Zgh3(MGpg~k9CQ|+&go#rWNz))kVxdT09mE$)k76fDECml3srn8VvXm5N zdn++ySzje-VA`oqK}wno zd3F=(BgAsh3S7ds;-$q%n|cZ2l?aSr*(FF+HpMG)=Oy@0QB7{=UxtY)VIhSluS1oJ zP}lL772EgMArg3>BK>Yatk+3JP3Igtshn2SYFTgtc7*K;>KS(00?b`7=D`h)laL-E z*x&d&u#bVWA}&7(;LGL4+tAy36Q+CKw%hFnJT>vIVcv4?O_&DJa@|b`9}$C;IP4R# z$6}ASy?+yCgKe=Ll83`C`DOt3ch3}@sdc~De9rdPaDGEO#4Q=g*^9n5^ccuRE!FpO zAb&`NF2y3`1@Q=Bh{Ccx5yb079MP@>@kk{&YMTrS=4B#;eW zA6xoZZs4t<{BeF$$e%;`YIi;6*ums##Na1aj_0{rHzc6~!vyWt{i{RWM&abFygr_% zS*LTIfim|&k}q~g6zu14yCnECdQOrml#i3%kvv>p%jSB1ipfja zd@8R78fPv%g+@s35{^a@=Fq9dxfZD^7Z3LZBRQueNjux!^C4N{c#I5_`zP=*MJcFK zY>#p{AcItM1^+nPNWeic;AnKz$8Il136cv&y*gIu;LoAdD1y6MFvz?}?#pq+BmzMt zpN-`BMI-+l$piH@EQyt|1pJ$XF@ke;WfXE3aVTEDTLV%1u%H;nrv#w}?9wDIW@xboSF$!8Qjw zZ6vhrF|`KFy!=kXieaaZWGYvX}KzaH@Qu5 z!0QC(I;n{~S2YwFy;&X)65W}Hv?uY@|6|;fe`DM=wL@_y{|m*6y?3#u{zj+$=YEUR z|7C?{{zj)&Y5xySP2@C?HH z;(msTd&mWGEqk%M*m=5_c85B_@4B-bmw^qlpmYDvIKJb;)*re1^E9J~w zu9LU3@o^!WPj8-3_h!x2E&Fnx%QokGt-D$2uz@-5eeL6mhu7bl`}Q;Y|Kfh7;IBjU zl=mZUT=i4uwAwDjJbB`g{2_YC&UNKK1y7y5E2XD&%BqCxLv)?VJge=@nb{lC8|aNU?1^vtE!e%n0;32*f4E& zUFFJJbA0&-9aEzlJN{%*GW*f8+LdLEX2WTeUW->VeuZS0Rn*tTpUBZMH<#FbWy>Bm zf3DRrt+t?g>5_(pb@fZj>*|(1@iqBaP;E9h#t)4C1t$#N!HM79!AajER=pA7xJw>c zRcOjsxvU}#bZof8kKJBkDtWZ5zJ$n)OX`+w$(3dKJaRbIW+bPV%m*ukZ$c#Z9y11i zSKus&(>*yBnZwvPF7VYki=JgIly|bjLvNSd%Ks1fveDUI${Tu5Ewd@HojXM;&e@m&Oc+8aA zzQAl8XYN|r$kwE04oe6(jhj2{YyY;mKL42snK4=V1k0js|AZd@1h(sI|C-u9|HK~u z#H0T6X!ypz|J+s2q!Z^olLkGL@M-rfpQo=%8}!tbPr<{-R~ql<0p3_UM{|_liR6m= zxu0BrKc8oK&_!#S&~3rvUi~#S!Pvg*;BCFXRu6#1n>V(B7R5Ew?S? zMPpXEG-*%J=O+D=u-!#dOWy~0ZQu%5q9lU#DM;-X#Wvi$*`n@IbJIL>zmXU*tL zv&4DB<7TnjT?%ZIi*{NDKFCiF$C=~qFJtAbf~Ctf(R`NtAetMbZxIi{{BU#n$ebdc z&|1tJVXs_S%$wcbMOU@*dNJNNhY;q;Rf~9&`$q^3U|U_p*F)=K{!o5ua_S^ga*`>@ zgwJ%7>FyrlsY%Z>%?L@Il$vaslr$wNJ!x{%Y-dMaW*V{*Q{zpENg1ZNNpaMZGHkCc z=6aA_B|Hv-<>eASe?mVxrNRzi_rQJ?yB0fro_P|+kv{wk(p<_*q@|P#RQAWnk@eVM38LZ -- 2.39.5