From 16e7939445210884740cd15f89c3633036187cc5 Mon Sep 17 00:00:00 2001 From: administrateur Date: Mon, 5 Feb 2007 05:55:57 +0100 Subject: [PATCH] TagData family class rename IdData. --- build/classes/xid/Presenter.class | Bin 20255 -> 21658 bytes build/classes/xid/TagData$MODE.class | Bin 1016 -> 0 bytes build/classes/xid/TagData.class | Bin 1623 -> 418 bytes build/classes/xid/TagsData.class | Bin 3635 -> 1305 bytes build/classes/xid/TextTagData.class | Bin 1189 -> 0 bytes build_test/classes/xid/test/Test.class | Bin 7701 -> 6993 bytes dist/test.jar | Bin 29816 -> 27834 bytes dist/xid.jar | Bin 44416 -> 44685 bytes src/xid/IdData.java | 139 +++++++++++ src/xid/{TagDataCore.java => IdDataCore.java} | 2 +- src/xid/IdsData.java | 223 ++++++++++++++++++ src/xid/IdsDataById.java | 40 ++++ ...gsDataByIndex.java => IdsDataByIndex.java} | 4 +- src/xid/Presenter.java | 219 ++++++++++++----- src/xid/TagData.java | 122 +--------- src/xid/TagsData.java | 151 +----------- src/xid/TagsDataById.java | 42 +--- test/xid/test/Test.java | 64 ++--- test/xid/test/Test.java~ | 22 +- 19 files changed, 619 insertions(+), 409 deletions(-) delete mode 100644 build/classes/xid/TagData$MODE.class delete mode 100644 build/classes/xid/TextTagData.class create mode 100644 src/xid/IdData.java rename src/xid/{TagDataCore.java => IdDataCore.java} (85%) create mode 100644 src/xid/IdsData.java create mode 100644 src/xid/IdsDataById.java rename src/xid/{TagsDataByIndex.java => IdsDataByIndex.java} (80%) diff --git a/build/classes/xid/Presenter.class b/build/classes/xid/Presenter.class index bc9906899a4c2c6305b7feb55b40ddbfa25613c6..6b26d0c2251bfbc22b2ffa4070d3dd9ba2ba0c81 100644 GIT binary patch literal 21658 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 N@o$l%-E?&5{{b*|9-aUI literal 20255 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 IbH(kB&@PpA5nA=3D09Ayvru*zpVDJTU7 zf4SYRHLLVdf8A^yP?VhPmK$$t9fs(;l@TZ0oQr%Lsq{*MR2d)X455Z$>CO45uTKtn z-=rJaj%>YW*hw{x`3cXO+!|&(vx#913+YwGB8~BYn_WIJL<%R5WbqNDi(Jk@Z4?d5 znC&yfSCpuyyEL5H2ZPiHI>ylAv-yNFc~ion6bGggoOGqGS@TixvbKF1p4u7DCjCs5oMXFsxrpNJwDt4a~7c zg<`3+OJ1vgtPf@+Cg>`_kaxFluRy^S^l#+LH43F1ZPPlfqEt$N^ZH_QwJm>I!B8y>@PQUGoAwUgpIs804_H8f&b3Z;F&5MYXET9)lZBC>9q2TA zSU%6Ae5&RNPdY)iP{~Z?+SJvdT|DX+K`U74(4VUKRuyU_=naA=^{V_trLjLLa-GJb z5?(~B!l3@$3L2AanJ=O{ZH9Rj>%tg4IB<=$1kGQA*kh{u&`cF{OQ_ELNyHr!{bu&W zF=~9Upw2I_7>S~8vASXu#`5wi6sur`k>xebPt2#1|jb z*pO)AD~TUvTzh7qLs8RYpE>)Sv)0;c@BaGz{U?A~tVGd)xd`I85kV9;CESv5JB&NB z-c@lgiZJF>+*dKLVnM~CiX{bs_06@Mg4jdT)N9#_RIdlY3ZgV z$NSnVEmP6Vy-a~z<{pnj3x;V}ROL@iY*Sm-M(WBNroPd5Ues$_TCrkdS4&!DTdNte zcas6@nL)LkUS4AMrOq`iK_>Gej1H=}jk${x#)bF=0xmo(zi zsd|MbzSnk9XwKZEY~E{GOn=;KtsHCVA#1M9`9Nw{czXE0{fI8IEzv@?Q7h>W3~?^z z3Y-!5V@TqB49n<`p-(~&5;2@ZuL8s{fI-SX-Fi0Jqn)GCYT{;bpTj^K?UYf?6m+(y zV!U-)*5!GZt=1@|+mo^9gUxuHdz4?z<}kvU?SPLeIuYQH!Z_#w(Ppny%N3%LF#<&@ zVI1O4=Q|dFvGgI7^jG+r@TZj~0%?B}!Q(_C)P(wl*L=9ZcnK=wFewH}Jc4eF(vmTr zjq~dYF7hJef*3*Ar z$pDBCDNMLn%Ung5%F_Mb(jBlO!O9*m)fE=xqj483jY$`5hjs{9l3;-&#M3_z-Z?}> zrid9Ye1aVWs&w`x9kn=;uRSzLmuA4GNf2Ja6sBF8R{cX9&G!1=QSy5ame))9BM8f1v`kD`1zMfT4~A=2H1Hb*^%r^2@p7pyvAJ-IY#7SP*eb zTH*?h{nea$!wUrBmrCrq6YN*~!14KWd4R@MHa(zK?9>>6Dho)`JPX)Wp%HM*oqr-4 zOda)9!SMv5=gMnn6IHe9_@zE}`?%7m6`ccDI~wm8wx-9Hh$A7n$qj+w&`xcR#3r^R zZemR0HXcYk#3Kva5;K^Rn8y@H=yzXWv_E|Q>5$GE+=swY|7@=dXHGHTB6^;ODZ;A_ z!nX&&uc8MMjP;jxR!;Nd?4xT3FHSPmz6iY>FHb`E-^*Z*S6K3r15uCy37#X2Hu)Ah zo4$bf!jA|>dD?t~UnZ{e0ZUsTByoe0&`$Ey1a)Ezz8BN0O+sxz-~mH#9+hi(P7ElbZ8?SGF%JACTcC ORS*A5d4U~8aPJSTUh{(h literal 3635 zcmb_d&2tlF82@dv*=^HpL(?P}tVj`P=m!3I4h5HCgwF5Xa)*S3^fb$o3{_ryKJ|OCm&rHce?o^{Kn$sUcNMr#K(IJzdH> zw@BSAm?1Xg6CO~Xavg>DOq;hY1dh`-NH(VzSyp_eA~o% z4PBvW4c2t2?Q&VjjW;3J2qKDhgi?)3nOn;~o`${+hOw$7Jh@VGof6B@*Ni}@ zeu8B#)nX#FUPHD?{BNC!TJLeSnzG)XL z%r(;_R}%^0WZ@Y}AGdGZa7y_)vK`(`;C5_orLwx@OcmrPcGOPV9`W14W;|hG0k3Ol z_s^kporMcn)X-gjH2pTW@CGhgxP;3VY~(a-YS@&wFpMP&Tk*7o5pcK_JLEB7!NC<1 z%NE9Qz`_I$ur=$WHSDY(`iS8+^yIrbhf@~HFQ>_%_%z9+2<34Ol5hkG$GWV-QdZQ5~u2U*DgWM zchH2O?mX9ttaqQR&+(?{6i3%*(96rboqrQRCp0NPpBavx<6Gl9+J7I~J$|%c3!gE* zflbiSg(vxCd7IFKr#RB2%6v+KGWSII-q}A;Ma#E{oE&_FO#i?`L>BHtuOd3XzVZb( zdH`ue`Q3vyrs}{pf^Nq%=u=?Zyo5d&Q**tSaBZBCT`h{h4xhm9Bw#Yvf)8Vi>KXkJ zwg?4-6wEpbYORXak!UJ9Vx){7{qiT+oY7N8K(}qp(C+^AM@H|dB1Sp0L+hmb>5Etv z!+ylsg{mEZwSu(ppYt<1I-2##i=|0V## z5*+mew~v|`bEpc7+C3+GI1cRTnE%J>x;LY2EZ{WR&(WK+R60-Q7pP&8-dvqI>?rYFjKE`O(*UhLfVO%l3IQFj!*elH{-6%RO!WyNj^I zON_GNGCcMn;1B80N4!!#R=|h7pa8flP}vm}xyvsylPd~3GqfrSav;We*t~)kedP(| zu?VlCdyr(3jZS|`37;|B-8%7!fI}kSkicQ(G?3u2mPRvKAMsqokE1637FR@k()U~) zw(cPz5W@bP-0z_qU)JeQ2H42}I~nLtDi(6NCKU@g_Ew$#BfkDMvXUc{u9d*Z7<3?` z%h3<7Wj2#YhfMS}}?;SBGL`kjun>S0vR~k?)BA zh!y$%e^un@Mk*4*{*iwE#ESg&c%$1im8S61Y=$6S#X{uRmp?J?}*JH`q< K%WmC!B=a|XE0bIR diff --git a/build/classes/xid/TextTagData.class b/build/classes/xid/TextTagData.class deleted file mode 100644 index 5773284b1c33fd0514d2c2155fdbf689c7189d8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmZuw!A=uV6g_WRI&CRf#)2Ryt)P~o6ciMd5Ve5T6o?j@xE$bF$CN3VnHuzm*tk$5 z(YP?KH1QMMyYm~2=gmx70xbI8yLaw8=iGB&fBpOV4ZsZUCXvA91md_7$JGS#m{36> ziAh}3ab3rhj-rlffwU_f%WTx7<62F7v%DlAo(S}mnzrkiwpTM7E!p+s_n++F*7ux1 z)RX(3fKhp6zBY>u)29!h_tGm)u2yCn_gPtC^Wt%aP%50e$az_vXaVt${*YuY6x8G6y|Y9V6@}isYG<>Sjz(4ekL%0{rU)2 zvsm?~XT1$B|VLmAFZuF<7Xoey*HwR7 zeI2!QOxC3%5Z^N$SNaB?I_olWd~XTREoeB8Zlrkb;p5cMi>R`P=Pu?9oaLHfw8C#1 z_hjKSL}Bs}+6TYBpKC87TnBjb98m{(QjuTH%pfD)^HDh?HGvTGF>5#n7(S*EA!y+v zqKD|}U>igQvRre-xI|@RKE6`Sn<2hn7sDay7I(#+DSU$V6A2?yIY3+mmC5(aYfzd8 z*dH*(M=(v?8FoKQw0R#p%YKsljgU>TWI`5$cY~b3g|;(`%qqUvF;|qgz(ewseAK{^ zSlf|U+mVYH4Yj}EuDnbuxnKB~JwR+#TNr-l>xgqwI#E0NpK^{hW~-dwCg2Fo@6G^$=$d=^dDq4)rkNA diff --git a/build_test/classes/xid/test/Test.class b/build_test/classes/xid/test/Test.class index 9785932d910b80f6faf62a4872d8a39c2f63b11d..a1ac41d6678096c093856df08ffb670f07fbd78d 100644 GIT binary patch delta 1367 zcmY*ZX;52L6#hQ4#x(}6g~hl|$AAGR`gL4yfYHymLB$&xH!1#R9k&=rSNyGv zH3rt=HpcCYI~aE|)-mp4+^xj!QPb~b+{d_IDLlY!NLj9{-4_?qzz<6FjejPDiu1LH>(_c4A_@n^;_27bkF27bpMF8qnVBr3*! z#@~wihcU|dmkBZ>(#d9!Ms}4rbaGnTX=`3ueb3U?K(MuIQ79f-K+xi$HiDR7twG!B zS!bhLCtVPeOIB*bkw}Nx+|e0nEzrpjP&#E;>$RG|L4rKwB}{9Tv%Ab1GaBwTC(N0}CDNZy`kUk}zrDfj zrc5Q~BNSQt^h~SIUZ7>s!PcNX&pAy{HutasQ(r9|J zOCL~RhUIph;Pg`-;Z!T%eVT`>1M$%5k?_%i^2sEWkIAPS8Ogn_+2lS%&@3tvG@FW( z)7@p1D4`;Pw_$PpDJ>^8G&i<12b*eJf{UsIm8weC|0@kAH;os|RMB;8ef?Nhl}?8W znxnS-FhK#Dt5dn4!)czNBj`wi(k3-*E3r0tVs5uB zQ9LG7J3bW&oG)dv9pzYs3#5?gD8Yre2sSN3yKpfskq#F+oLG%ZVaI%j7ne!o&=%8v z^hxBDKbOlV{jZXSmH&BEH;gle(NQ52m?(<&a!IhlLs&AWGI-pnNLj#=snzj1iY zIsip9L&ZWYvtv0{Fz!@w7w%@Pv|*JBE0)=Cj|#>z#=R2nW85#}57_XaiUb*di1DzB zNAM`)F~;MJCm2sMx)>2@_LNM2n$gWzEggCo&oI`6RjkFcjOQ5Z7|+Yz3yc>TFEL(b zyux^uv7WJk@tSmaT{dqp-ekPRc$=}2@eX5?48O~GkMTa^1ICAp&5Vy2TNocRK4ENS ze9HKY@j2rQ#+Qt3jO}5@S5mu!@ipTc#YCOebL6vw17 z#WN)^B{C(cluQnloHW2rDRhivsZ41S)0r}u1~Ltjy}>rhRA~t5vNP01E`r(L+DJ&R zHYhpOSWheTgz9bWcG+fynr`B_S@>l@kzndiz{ou*DnDC|Bw%0dI>>qddwt z7Me?nj@PJwh7-~nM0T5Aq6d7Pdf)Q&oLsTO6tTj828=!Cnz(FoOS?kCFylp=(>TjA z)LcX(j0KiV>qw18QK7NYl4~AKg^`VxbBIUL7>!2Lm{sGgWX`3rkuuv-Nlq}f@?`6Y zR7{v@>{ZWBW{*4Mt@r!JX><~K2t`r*&+UnkXYAP&C&HyPL8CG%kL*_SDLj!T5F9mA zt7ptQt)_1Jth&nDidmKA#TreLBPmCY)SO=1J2+Vm+Dogeqbf1G;%R8^7$;)h^5%{* zzqhT8kWufQeQsm0wLQ>KFuT>?8Z6e2EsTCdQLKUXmU>?}`2T5>Cdss@uS!VNbx%{# zxYmHr;}$3)Hji7*DVReh>CFu#uBd6yC42Y?*Dta5N(dvPr!~B-(ibWXg@VoX z?IE9@*ODlI1bkQB=kfYiiMdw;2^pJgTU7rBYRLgi7pMsBBcB zQKh`ar)X3~)i#=<(NwC@Xd0a=sy#6f@&z?IjoilN+6a9*xy2KZ*EZy93%P4WW20J) zPA88>XHcE7McZL&$}zUZJB_(X7On4oPMBZWV4RxZG^Qjb8-o*Uk+_5|iaV2#6?+24 zhQwNXcK_SjkeF$dCS{mB{Z?jSC6Y2DHzkEB?2O5xZ&R2D8hrDhV}bZN1_&w^;S#~j z;wzr0h+Hn1TObKk@>YYM6vTupL~D%(Ra_~!)|-H+p&KRB-!(a^CjJpRol<3z=>#BXs7pRJf L4p0f5JU;zz(@N2w diff --git a/dist/test.jar b/dist/test.jar index 4d6118d72b1eb77572d2faa09e9be13bd25d87e1..d1eb21deb0b6e44a33e2c49be33564c7cc5dd679 100644 GIT binary patch delta 3203 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 delta 5194 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 O@X(hZkm2`B;Qs(J;yJAV diff --git a/dist/xid.jar b/dist/xid.jar index 4e752e3e54fb70d568d415f9ac2ac1e966200823..31716c8ff63d75799f85839f6fa63c74769f4a19 100644 GIT binary patch delta 17891 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 >8_DcF>x0zAD;pOt%^Q^l^2)6W4 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 delta 17619 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 diff --git a/src/xid/IdData.java b/src/xid/IdData.java new file mode 100644 index 0000000..c217244 --- /dev/null +++ b/src/xid/IdData.java @@ -0,0 +1,139 @@ +package xid; + +import java.util.*; +import java.io.*; + +/** + * IdData class is used to hold application data and + * the business logic that operates on the data. + * + * The only requirement of a IdData class is that it must implement a + * display method. The display method must return a text representation + * of the data, suitable for display in a web page. + * + * XID provides a User Input IdData, Text IdData and ... + * application may also implement it's own IdData classes. + * + */ +public class IdData implements Serializable, IdDataCore +{ + public enum MODE {REPLACE, APPEND, IGNORE}; + + protected Attributes attributes; + protected boolean excludeSection; + protected MODE displayMode = MODE.REPLACE; + protected String content; + + /* + * + */ + public IdData () + { + this.attributes = null; + this.excludeSection = false; + this.displayMode = MODE.REPLACE; + this.content = ""; + } + + + /* + * + */ + public IdData (String text) + { + this.attributes = null; + this.excludeSection = false; + this.displayMode = MODE.REPLACE; + this.content = text; + } + + + /* + * + */ + public String display () + { + String result; + + if (this.content == null) + { + result = ""; + } + else + { + result = this.content; + } + + // + return (result); + } + + + /* + * + */ + public void setContent (String text) + { + this.content = text; + } + + + /* + * + */ + public void setDisplayMode(MODE displayMode) + { + this.displayMode = displayMode; + } + + + /* + * + */ + public MODE getDisplayMode() + { + MODE result; + + result = this.displayMode; + + return (result); + } + + + /* + * + */ + public Attributes getAttributes () + { + Attributes result; + + if (this.attributes == null) + { + this.attributes = new Attributes (); + } + + result = this.attributes; + + // + return (result); + } + + + /* + * + */ + public void setExcludeSection(boolean excludeSection) + { + this.excludeSection = excludeSection; + } + + + /* + * + */ + public boolean getExcludeSection() + { + return excludeSection; + } + +} diff --git a/src/xid/TagDataCore.java b/src/xid/IdDataCore.java similarity index 85% rename from src/xid/TagDataCore.java rename to src/xid/IdDataCore.java index 8865ed8..5fa290c 100644 --- a/src/xid/TagDataCore.java +++ b/src/xid/IdDataCore.java @@ -13,6 +13,6 @@ import java.io.*; * This interface helps to express this fact. * */ -public interface TagDataCore +public interface IdDataCore { } diff --git a/src/xid/IdsData.java b/src/xid/IdsData.java new file mode 100644 index 0000000..503ec5b --- /dev/null +++ b/src/xid/IdsData.java @@ -0,0 +1,223 @@ +package xid; + +import java.util.*; +import java.io.*; + +/* + * + */ +public class IdsData extends IdsDataById +{ + /** + * + */ + public IdsData () + { + super (); + } + + + /** + * + */ + public IdData getIdData (String id) + { + IdData result; + + // Be sure that IdData is existing and get item. + result = (IdData) this.get (id); + + if (result == null) + { + this.put (id, new IdData ()); + + result = (IdData) this.get (id); + } + + + // + return (result); + } + + + /** + * + */ + public IdData getIdData (String id, int line) + { + IdData result; + + // Be sure that IdsData are existing. + IdsDataByIndex tags = (IdsDataByIndex) this.get (id); + if (tags == null) + { + this.put (id, new IdsDataByIndex ()); + + tags = (IdsDataByIndex) this.get (id); + } + + // Be sure that lines are existing. + int nbLines = tags.size (); + for (int nLine = nbLines; nLine < line + 1; nLine++) + { + tags.add (nLine, new IdData ()); + } + + // Get item. + result = (IdData) tags.elementAt (line); + + // + return (result); + } + + + /** + * + */ + public IdData getIdData (String id, int line, String column) + { + IdData result; + + // Be sure that IdsData are existing. + IdsDataByIndex tags = (IdsDataByIndex) this.get (id); + if (tags == null) + { + this.put (id, new IdsDataByIndex ()); + + tags = (IdsDataByIndex) this.get (id); + } + + // Be sure that lines are existing. + int nbLines = tags.size (); + for (int nLine = nbLines; nLine < line + 1; nLine++) + { + tags.add (nLine, new IdsDataById ()); + } + + // Get item. + IdsDataById lineData = (IdsDataById) tags.elementAt (line); + + result = (IdData) lineData.get (column); + + if (result == null) + { + lineData.put (column, new IdData ()); + + result = (IdData) lineData.get (column); + } + + // + return (result); + } + + + /** + * + */ + public void setIterationStrategy (String id, IdsDataByIndex.IterationStrategy strategy) + { + IdsDataByIndex tags = (IdsDataByIndex) this.get (id); + + tags.setIterationStrategy (strategy); + } + + + + /** + * + */ + public void setContent (String id, String content) + { + IdData tag = this.getIdData (id); + + tag.setContent (content); + } + + + /** + * + */ + public void setContent (String id, int line, String content) + { + IdData tag = this.getIdData (id, line); + + tag.setContent (content); + } + + + /** + * + */ + public void setContent (String id, int line, String column, String content) + { + IdData tag = this.getIdData (id, line, column); + + tag.setContent (content); + } + + + /** + * + */ + public void setAttribute (String id, String label, String value) + { + IdData tag = this.getIdData (id); + + tag.getAttributes ().setAttribute (label, value); + } + + + /** + * + */ + public void setAttribute (String id, int line, String label, String value) + { + IdData tag = this.getIdData (id, line); + + tag.getAttributes ().setAttribute (label, value); + } + + + /** + * + */ + public void setAttribute (String id, int line, String column, String label, String value) + { + IdData tag = this.getIdData (id, line, column); + + tag.getAttributes ().setAttribute (label, value); + } + + + /** + * + */ + public void appendAttribute (String id, String label, String value) + { + IdData tag = this.getIdData (id); + + tag.getAttributes ().appendAttribute (label, value); + } + + + /** + * + */ + public void appendContent (String id, int line, String label, String value) + { + IdData tag = this.getIdData (id, line); + + tag.getAttributes ().appendAttribute (label, value); + } + + + /** + * + */ + public void appendContent (String id, int line, String column, String label, String value) + { + IdData tag = this.getIdData (id, line, column); + + tag.getAttributes ().appendAttribute (label, value); + } +} diff --git a/src/xid/IdsDataById.java b/src/xid/IdsDataById.java new file mode 100644 index 0000000..e9f1d1c --- /dev/null +++ b/src/xid/IdsDataById.java @@ -0,0 +1,40 @@ +package xid; + +import java.util.*; +import java.io.*; + +/* + * + */ +public class IdsDataById extends HashMap implements IdDataCore +{ + /* + * + */ + public IdsDataById () + { + super (); + } + + /* + * + */ + public void setId (String id, IdDataCore data) + { + this.put (id, data); + } + + /* + * + */ + public IdDataCore getId (String id) + { + IdDataCore result; + + result = this.get (id); + + // + return (result); + } + +} diff --git a/src/xid/TagsDataByIndex.java b/src/xid/IdsDataByIndex.java similarity index 80% rename from src/xid/TagsDataByIndex.java rename to src/xid/IdsDataByIndex.java index e8ee8d9..6f70081 100644 --- a/src/xid/TagsDataByIndex.java +++ b/src/xid/IdsDataByIndex.java @@ -6,7 +6,7 @@ import java.io.*; /* * */ -public class TagsDataByIndex extends Vector implements TagDataCore +public class IdsDataByIndex extends Vector implements IdDataCore { public enum IterationStrategy {ONLY_FIRST_ROW, ONLY_ROWS_WITH_ID, ONLY_ROWS_WITHOUT_ID, ALL_ROWS} @@ -15,7 +15,7 @@ public class TagsDataByIndex extends Vector implements TagDataCore /** * */ - public TagsDataByIndex () + public IdsDataByIndex () { super (); this.iterationStrategy = IterationStrategy.ONLY_FIRST_ROW; diff --git a/src/xid/Presenter.java b/src/xid/Presenter.java index 280bba9..0f3ce99 100644 --- a/src/xid/Presenter.java +++ b/src/xid/Presenter.java @@ -91,7 +91,15 @@ public class Presenter /* * */ - public StringBuffer doXid (TagsDataById datas, StringBuffer errorOutput) + public StringBuffer doXid (IdsDataById datas, StringBuffer errorOutput) + { + return (doXid (datas, null, errorOutput)); + } + + /* + * + */ + public StringBuffer doXid (IdsDataById datas, TagsDataById tagsData, StringBuffer errorOutput) { StringBuffer result; @@ -127,7 +135,7 @@ public class Presenter } // Build the web page. - result = Presenter.doXid (doc, datas, this.webappPath, errorOutput); + result = Presenter.doXid (doc, datas, tagsData, this.webappPath, errorOutput); // return (result); @@ -151,7 +159,7 @@ public class Presenter { Presenter.addMetaTag (doc, "generator", "XID 0.0"); - result = Presenter.doXid (doc, null, webappPath, errorOutput); + result = Presenter.doXid (doc, null, null, webappPath, errorOutput); } // @@ -162,7 +170,15 @@ public class Presenter /* * Xid a string with html in. */ - static public StringBuffer doXid (String html, TagsDataById datas, String webappPath, StringBuffer errorOutput) + static public StringBuffer doXid (String html, IdsDataById datas, String webappPath, StringBuffer errorOutput) + { + return (doXid (html, datas, null, webappPath, errorOutput)); + } + + /* + * Xid a string with html in. + */ + static public StringBuffer doXid (String html, IdsDataById datas, TagsDataById tagsData, String webappPath, StringBuffer errorOutput) { StringBuffer result; @@ -186,7 +202,7 @@ public class Presenter doc = buildTree (new ByteArrayInputStream (htmlSource.getBytes ()), errorOutput); StringBuffer htmlTarget; - htmlTarget = Presenter.process (doc, datas, webappPath, errorOutput); + htmlTarget = Presenter.process (doc, datas, tagsData, webappPath, errorOutput); if (htmlTarget == null) { @@ -221,11 +237,19 @@ public class Presenter /* * Xid a file with data. */ - static public StringBuffer doXid (Document doc, TagsDataById datas, String webappPath, StringBuffer errorOutput) + static public StringBuffer doXid (Document doc, IdsDataById datas, String webappPath, StringBuffer errorOutput) + { + return (doXid (doc, datas, null, webappPath, errorOutput)); + } + + /* + * Xid a file with data. + */ + static public StringBuffer doXid (Document doc, IdsDataById datas, TagsDataById tagsData, String webappPath, StringBuffer errorOutput) { StringBuffer result; - result = Presenter.process (doc, datas, webappPath, errorOutput); + result = Presenter.process (doc, datas, tagsData, webappPath, errorOutput); // return (result); @@ -313,11 +337,11 @@ public class Presenter /* * */ - static protected StringBuffer processChildren (Node node, TagsDataById datas, String webappPath, StringBuffer errorOutput) + static protected StringBuffer processChildren (Node node, IdsDataById datas, TagsDataById tagsData, String webappPath, StringBuffer errorOutput) { StringBuffer result; - result = processChildren (node, datas, webappPath, "", errorOutput); + result = processChildren (node, datas, tagsData, webappPath, "", errorOutput); // return (result); @@ -327,7 +351,12 @@ public class Presenter /* * */ - static protected StringBuffer processChildren (Node node, TagsDataById datas, String webappPath, String prefix, StringBuffer errorOutput) + static protected StringBuffer processChildren (Node node, + IdsDataById datas, + TagsDataById tagsData, + String webappPath, + String suffix, + StringBuffer errorOutput) { StringBuffer result; result = new StringBuffer (); @@ -342,9 +371,9 @@ public class Presenter else { // - // Is there a TagsDataByIndex associated with the first ELEMENT_NODE child? + // Is there a IdsDataByIndex associated with the first ELEMENT_NODE child? // - TagsDataByIndex tagsData; + IdsDataByIndex idsData; // Find the first ELEMENT_NODE child. int childIndex = 0; @@ -370,7 +399,7 @@ public class Presenter if (child == null) { - tagsData = null; + idsData = null; } else { @@ -402,39 +431,39 @@ public class Presenter // Searching for the datas associated to the childId. if (childId == null) { - tagsData = null; + idsData = null; } else { - // Check if the data is a TagsDataByIndex. - if (datas.getId (childId) instanceof TagsDataByIndex) + // Check if the data is a IdsDataByIndex. + if (datas.getId (childId) instanceof IdsDataByIndex) { - tagsData = (TagsDataByIndex) datas.getId (childId); + idsData = (IdsDataByIndex) datas.getId (childId); } else { - tagsData = null; + idsData = null; } } } // So, is there? - if (tagsData == null) + if (idsData == null) { for (int i = 0; i < childrenCount; i++) { - result.append (process (children.item(i), datas, webappPath, prefix, errorOutput)); + result.append (process (children.item(i), datas, tagsData, webappPath, suffix, errorOutput)); } } else { - switch (tagsData.getIterationStrategy ()) + switch (idsData.getIterationStrategy ()) { case ONLY_FIRST_ROW: for (int i = 0; i <= childIndex; i++) { - result.append (process (children.item (i), datas, webappPath, prefix, errorOutput)); + result.append (process (children.item (i), datas, tagsData, webappPath, suffix, errorOutput)); } break; @@ -446,7 +475,7 @@ public class Presenter if ((attrs2 != null) && (attrs2.getNamedItem ("id") != null)) { - result.append (process (children.item(i), datas, webappPath, prefix, errorOutput)); + result.append (process (children.item(i), datas, tagsData, webappPath, suffix, errorOutput)); } } break; @@ -461,7 +490,7 @@ public class Presenter if ((attrs2 == null) || (attrs2.getNamedItem ("id") == null)) { - result.append (process (children.item(i), datas, webappPath, prefix, errorOutput)); + result.append (process (children.item(i), datas, tagsData, webappPath, suffix, errorOutput)); } } break; @@ -469,7 +498,7 @@ public class Presenter case ALL_ROWS: for (int i = 0; i < childrenCount; i++) { - result.append (process (children.item(i), datas, webappPath, prefix, errorOutput)); + result.append (process (children.item(i), datas, tagsData, webappPath, suffix, errorOutput)); } break; } @@ -489,7 +518,7 @@ public class Presenter * @param attrMap * @param idAttr */ - static protected StringBuffer processObjectTag (Node node, NamedNodeMap attrMap, Node idAttr, TagsDataById datas, String webappPath, StringBuffer errorOutput) + static protected StringBuffer processObjectTag (Node node, NamedNodeMap attrMap, Node idAttr, IdsDataById datas, TagsDataById tagsData, String webappPath, StringBuffer errorOutput) { StringBuffer result; @@ -518,7 +547,7 @@ public class Presenter (attrMap.getNamedItem ("data") == null)) { // STU: do default action. - Presenter.processElementBasically (node, datas, webappPath, errorOutput); + Presenter.processElementBasically (node, datas, tagsData, webappPath, errorOutput); } else { @@ -571,7 +600,7 @@ public class Presenter int childCount = bodyChildren.getLength (); for (int childCounter = 0; childCounter < childCount; childCounter++) { - result.append (process (bodyChildren.item (childCounter), datas, webappPath, errorOutput)); + result.append (process (bodyChildren.item (childCounter), datas, tagsData, webappPath, errorOutput)); } } @@ -599,14 +628,14 @@ public class Presenter static protected StringBuffer processElementWithId (Node node, NamedNodeMap attrs, Node idAttr, - TagsDataById datas, + IdsDataById datas, String webappPath, StringBuffer errorOutput) { StringBuffer result; - result = processElementWithId (node, attrs, idAttr, datas, "", webappPath, errorOutput); + result = processElementWithId (node, attrs, idAttr, datas, null, "", webappPath, errorOutput); // return (result); @@ -627,9 +656,10 @@ public class Presenter static protected StringBuffer processElementWithId (Node node, NamedNodeMap attrs, Node idAttr, - TagsDataById datas, + IdsDataById datas, + TagsDataById tagsData, String webappPath, - String prefix, + String suffix, StringBuffer errorOutput) { StringBuffer result; @@ -641,15 +671,15 @@ public class Presenter log.debug ("tag=" + tag); // Get data of this id. - TagDataCore dataCore = datas.get (idAttr.getNodeValue ()); + IdDataCore dataCore = datas.get (idAttr.getNodeValue ()); if (dataCore == null) { - result.append (Presenter.processElementBasically (node, datas, webappPath, prefix, errorOutput)); + result.append (Presenter.processElementBasically (node, datas, tagsData, webappPath, suffix, errorOutput)); } - else if (dataCore instanceof TagData) + else if (dataCore instanceof IdData) { - TagData data = (TagData) dataCore; + IdData data = (IdData) dataCore; String theClass; if (data == null) @@ -669,7 +699,25 @@ public class Presenter result.append (node.getNodeName()); // Build attributes. - result.append (processAttributes (attrs, data.getAttributes (), datas.getNamedTagAttributes (node.getNodeName ()), prefix)); + Attributes tagAttributes; + if (tagsData == null) + { + tagAttributes = null; + } + else + { + TagData tagData = tagsData.getId (node.getNodeName ()); + if (tagData == null) + { + tagAttributes = null; + } + else + { + tagAttributes = tagData.getAttributes (); + } + } + + result.append (processAttributes (attrs, data.getAttributes (), tagAttributes, suffix)); if ((node.getChildNodes () == null) && ((data == null) || data.display ().equals (""))) @@ -685,7 +733,7 @@ public class Presenter if ((data == null) || (data.display ().equals (""))) { - result.append (processChildren (node, datas, webappPath, prefix, errorOutput)); + result.append (processChildren (node, datas, tagsData, webappPath, suffix, errorOutput)); } else { @@ -699,23 +747,41 @@ public class Presenter } } } - else if (dataCore instanceof TagsDataByIndex) + else if (dataCore instanceof IdsDataByIndex) { - TagsDataByIndex tags = (TagsDataByIndex) dataCore; + IdsDataByIndex tags = (IdsDataByIndex) dataCore; int nbLines = tags.size (); for (int nLine = 0; nLine < nbLines; nLine++) { - if (tags.elementAt (nLine) instanceof TagData) + if (tags.elementAt (nLine) instanceof IdData) { - TagData data = (TagData) tags.elementAt (nLine); + IdData data = (IdData) tags.elementAt (nLine); // Open the tag. result.append ("<"); result.append (node.getNodeName()); // Build attributes. - result.append (processAttributes (attrs, data.getAttributes (), datas.getNamedTagAttributes (node.getNodeName ()), Integer.toString (nLine))); + Attributes tagAttributes; + if (tagsData == null) + { + tagAttributes = null; + } + else + { + TagData tagData = tagsData.getId (node.getNodeName ()); + if (tagData == null) + { + tagAttributes = null; + } + else + { + tagAttributes = tagData.getAttributes (); + } + } + + result.append (processAttributes (attrs, data.getAttributes (), tagAttributes, Integer.toString (nLine))); if ((node.getChildNodes () == null) && ((data == null) || data.display ().equals (""))) @@ -731,7 +797,7 @@ public class Presenter if ((data == null) || (data.display ().equals (""))) { - result.append (processChildren (node, datas, webappPath, prefix, errorOutput)); + result.append (processChildren (node, datas, tagsData, webappPath, suffix, errorOutput)); } else { @@ -747,16 +813,16 @@ public class Presenter else { // Manage a Hashmap. - TagsDataById data = (TagsDataById) tags.elementAt (nLine); + IdsDataById data = (IdsDataById) tags.elementAt (nLine); - result.append (Presenter.processElementWithId (node, attrs, idAttr, data, webappPath, Integer.toString (nLine), errorOutput)); + result.append (Presenter.processElementWithId (node, attrs, idAttr, data, tagsData, webappPath, Integer.toString (nLine), errorOutput)); result.append ('\n'); } } } else { - log.warn ("Unknow type of TagDataId"); + log.warn ("Unknow type of IdDataId"); } // @@ -769,11 +835,11 @@ public class Presenter /** * */ - static protected StringBuffer process (Node node, TagsDataById datas, String webappPath, StringBuffer errorOutput) + static protected StringBuffer process (Node node, IdsDataById datas, TagsDataById tagsData, String webappPath, StringBuffer errorOutput) { StringBuffer result; - result = Presenter.process (node, datas, webappPath, "", errorOutput); + result = Presenter.process (node, datas, tagsData, webappPath, "", errorOutput); // return (result); @@ -784,7 +850,7 @@ public class Presenter * Recursive method that processes a node and any child nodes. * */ - static protected StringBuffer process (Node node, TagsDataById datas, String webappPath, String prefix, StringBuffer errorOutput) + static protected StringBuffer process (Node node, IdsDataById datas, TagsDataById tagsData, String webappPath, String suffix, StringBuffer errorOutput) { log.debug ("Enter"); String TRANSITIONAL_DTD = "xhtml1-transitional.dtd"; @@ -828,7 +894,7 @@ public class Presenter // Log.write(Log.TRACE,"systemId = " + systemId); } - result.append (Presenter.process (((Document) node).getDocumentElement(), datas, webappPath, prefix, errorOutput)); + result.append (Presenter.process (((Document) node).getDocumentElement(), datas, tagsData, webappPath, suffix, errorOutput)); break; } @@ -842,11 +908,18 @@ public class Presenter if (idAttr != null) { - result.append (Presenter.processElementWithId (node, attrs, idAttr, datas, webappPath, prefix, errorOutput)); + result.append (Presenter.processElementWithId (node, + attrs, + idAttr, + datas, + tagsData, + webappPath, + suffix, + errorOutput)); } else { - result.append (Presenter.processElementBasically (node, datas, webappPath, prefix, errorOutput)); + result.append (Presenter.processElementBasically (node, datas, tagsData, webappPath, suffix, errorOutput)); } break; @@ -913,11 +986,11 @@ public class Presenter /* * */ - static StringBuffer processElementBasically (Node node, TagsDataById datas, String webappPath, StringBuffer errorOutput) + static StringBuffer processElementBasically (Node node, IdsDataById datas, TagsDataById tagsData, String webappPath, StringBuffer errorOutput) { StringBuffer result; - result = processElementBasically (node, datas, webappPath, "", errorOutput); + result = processElementBasically (node, datas, tagsData, webappPath, "", errorOutput); // return (result); @@ -927,7 +1000,7 @@ public class Presenter /* * */ - static StringBuffer processElementBasically (Node node, TagsDataById datas, String webappPath, String prefix, StringBuffer errorOutput) + static StringBuffer processElementBasically (Node node, IdsDataById datas, TagsDataById tagsData, String webappPath, String suffix, StringBuffer errorOutput) { StringBuffer result; result = new StringBuffer (); @@ -937,10 +1010,28 @@ public class Presenter result.append (node.getNodeName()); // Build the tag attributes. + Attributes tagAttributes; + if (tagsData == null) + { + tagAttributes = null; + } + else + { + TagData tagData = tagsData.getId (node.getNodeName ()); + if (tagData == null) + { + tagAttributes = null; + } + else + { + tagAttributes = tagData.getAttributes (); + } + } + result.append (processAttributes (node.getAttributes (), - datas.getNamedTagAttributes (node.getNodeName ()), + tagAttributes, null, - prefix)); + suffix)); // if (node.getChildNodes () == null) @@ -951,7 +1042,7 @@ public class Presenter { result.append('>'); - result.append (processChildren (node, datas, webappPath, prefix, errorOutput)); + result.append (processChildren (node, datas, tagsData, webappPath, suffix, errorOutput)); result.append(" attribute = (Map.Entry) iterator.next(); - if ((attribute.getKey ().equals ("id")) && (prefix.length () != 0)) + if ((attribute.getKey ().equals ("id")) && (suffix.length () != 0)) { - result.append(" " + attribute.getKey () + "=\"" + attribute.getValue () + Presenter.INDEX_SEPARATOR + prefix + "\""); + result.append(" " + attribute.getKey () + "=\"" + attribute.getValue () + Presenter.INDEX_SEPARATOR + suffix + "\""); } else { diff --git a/src/xid/TagData.java b/src/xid/TagData.java index 8bdd109..66b54f6 100644 --- a/src/xid/TagData.java +++ b/src/xid/TagData.java @@ -4,137 +4,33 @@ import java.util.*; import java.io.*; /** - * TagData class is used to hold application data and + * IdData class is used to hold application data and * the business logic that operates on the data. * - * The only requirement of a TagData class is that it must implement a + * The only requirement of a IdData class is that it must implement a * display method. The display method must return a text representation * of the data, suitable for display in a web page. * - * XID provides a User Input TagData, Text TagData and ... - * application may also implement it's own TagData classes. + * XID provides a User Input IdData, Text IdData and ... + * application may also implement it's own IdData classes. * */ -public class TagData implements Serializable, TagDataCore +public class TagData extends IdData implements Serializable { - public enum MODE {REPLACE, APPEND, IGNORE}; - - protected Attributes attributes; - protected boolean excludeSection; - protected MODE displayMode = MODE.REPLACE; - - String content; - /* * */ public TagData () { - this.attributes = null; - this.excludeSection = false; - this.displayMode = MODE.REPLACE; - this.content = ""; + super (); } - - + + /* * */ public TagData (String text) { - this.attributes = null; - this.excludeSection = false; - this.displayMode = MODE.REPLACE; - this.content = text; + super (text); } - - - /* - * - */ - public String display () - { - String result; - - if (this.content == null) - { - result = ""; - } - else - { - result = this.content; - } - - // - return (result); - } - - - /* - * - */ - public void setContent (String text) - { - this.content = text; - } - - - /* - * - */ - public void setDisplayMode(MODE displayMode) - { - this.displayMode = displayMode; - } - - - /* - * - */ - public MODE getDisplayMode() - { - MODE result; - - result = this.displayMode; - - return (result); - } - - - /* - * - */ - public Attributes getAttributes () - { - Attributes result; - - if (this.attributes == null) - { - this.attributes = new Attributes (); - } - - result = this.attributes; - - // - return (result); - } - - - /* - * - */ - public void setExcludeSection(boolean excludeSection) - { - this.excludeSection = excludeSection; - } - - - /* - * - */ - public boolean getExcludeSection() - { - return excludeSection; - } - } diff --git a/src/xid/TagsData.java b/src/xid/TagsData.java index cfc7b9c..9cbc888 100644 --- a/src/xid/TagsData.java +++ b/src/xid/TagsData.java @@ -24,7 +24,7 @@ public class TagsData extends TagsDataById { TagData result; - // Be sure that TagData is existing and get item. + // Be sure that data is existing and get item. result = (TagData) this.get (id); if (result == null) @@ -40,89 +40,6 @@ public class TagsData extends TagsDataById } - /** - * - */ - public TagData getTagData (String id, int line) - { - TagData result; - - // Be sure that TagsData are existing. - TagsDataByIndex tags = (TagsDataByIndex) this.get (id); - if (tags == null) - { - this.put (id, new TagsDataByIndex ()); - - tags = (TagsDataByIndex) this.get (id); - } - - // Be sure that lines are existing. - int nbLines = tags.size (); - for (int nLine = nbLines; nLine < line + 1; nLine++) - { - tags.add (nLine, new TagData ()); - } - - // Get item. - result = (TagData) tags.elementAt (line); - - // - return (result); - } - - - /** - * - */ - public TagData getTagData (String id, int line, String column) - { - TagData result; - - // Be sure that TagsData are existing. - TagsDataByIndex tags = (TagsDataByIndex) this.get (id); - if (tags == null) - { - this.put (id, new TagsDataByIndex ()); - - tags = (TagsDataByIndex) this.get (id); - } - - // Be sure that lines are existing. - int nbLines = tags.size (); - for (int nLine = nbLines; nLine < line + 1; nLine++) - { - tags.add (nLine, new TagsDataById ()); - } - - // Get item. - TagsDataById lineData = (TagsDataById) tags.elementAt (line); - - result = (TagData) lineData.get (column); - - if (result == null) - { - lineData.put (column, new TagData ()); - - result = (TagData) lineData.get (column); - } - - // - return (result); - } - - - /** - * - */ - public void setIterationStrategy (String id, TagsDataByIndex.IterationStrategy strategy) - { - TagsDataByIndex tags = (TagsDataByIndex) this.get (id); - - tags.setIterationStrategy (strategy); - } - - - /** * */ @@ -134,28 +51,6 @@ public class TagsData extends TagsDataById } - /** - * - */ - public void setContent (String id, int line, String content) - { - TagData tag = this.getTagData (id, line); - - tag.setContent (content); - } - - - /** - * - */ - public void setContent (String id, int line, String column, String content) - { - TagData tag = this.getTagData (id, line, column); - - tag.setContent (content); - } - - /** * */ @@ -167,28 +62,6 @@ public class TagsData extends TagsDataById } - /** - * - */ - public void setAttribute (String id, int line, String label, String value) - { - TagData tag = this.getTagData (id, line); - - tag.getAttributes ().setAttribute (label, value); - } - - - /** - * - */ - public void setAttribute (String id, int line, String column, String label, String value) - { - TagData tag = this.getTagData (id, line, column); - - tag.getAttributes ().setAttribute (label, value); - } - - /** * */ @@ -198,26 +71,4 @@ public class TagsData extends TagsDataById tag.getAttributes ().appendAttribute (label, value); } - - - /** - * - */ - public void appendContent (String id, int line, String label, String value) - { - TagData tag = this.getTagData (id, line); - - tag.getAttributes ().appendAttribute (label, value); - } - - - /** - * - */ - public void appendContent (String id, int line, String column, String label, String value) - { - TagData tag = this.getTagData (id, line, column); - - tag.getAttributes ().appendAttribute (label, value); - } } diff --git a/src/xid/TagsDataById.java b/src/xid/TagsDataById.java index 6975cc0..8b7d47b 100644 --- a/src/xid/TagsDataById.java +++ b/src/xid/TagsDataById.java @@ -6,7 +6,7 @@ import java.io.*; /* * */ -public class TagsDataById extends HashMap implements TagDataCore +public class TagsDataById extends HashMap { /* * @@ -19,7 +19,7 @@ public class TagsDataById extends HashMap implements TagDat /* * */ - public void setId (String id, TagDataCore data) + public void setId (String id, TagData data) { this.put (id, data); } @@ -27,9 +27,9 @@ public class TagsDataById extends HashMap implements TagDat /* * */ - public TagDataCore getId (String id) + public TagData getId (String id) { - TagDataCore result; + TagData result; result = this.get (id); @@ -37,38 +37,4 @@ public class TagsDataById extends HashMap implements TagDat return (result); } - - /* - * - */ - public Attributes getNamedTagAttributes (String name) - { - Attributes result; - - if (name == null) - { - result = null; - } - else - { - TagDataCore dataCore = this.getId ("<" + name + ">"); - if (dataCore == null) - { - result = null; - } - else if (!(dataCore instanceof TagData)) - { - result = null; - } - else - { - TagData data = (TagData) dataCore; - - result = data.getAttributes (); - } - } - - // - return (result); - } } diff --git a/test/xid/test/Test.java b/test/xid/test/Test.java index 816f07b..4b6e3bc 100644 --- a/test/xid/test/Test.java +++ b/test/xid/test/Test.java @@ -47,8 +47,8 @@ class Test //test (); // - TagsData datas; - TagData tag; + IdsData datas; + IdData tag; @@ -58,16 +58,16 @@ class Test // Populate attributes of Test 03. System.out.println ("----------------------------"); - datas = new TagsData (); - tag = new TagData (); + datas = new IdsData (); + tag = new IdData (); tag.setContent ("Superman"); datas.put ("name", tag); errorMessage = new StringBuffer (); html = Presenter.doXid ("
a name
", datas, "", errorMessage); - System.out.println ("datas = new TagsData ();"); - System.out.println ("tag = new TagData ();"); + System.out.println ("datas = new IdsData ();"); + System.out.println ("tag = new IdData ();"); System.out.println ("tag.setContent (\"Superman\");"); System.out.println ("datas.put (\"name\", tag););"); System.out.println ("+"); @@ -78,13 +78,13 @@ class Test // Populate attributes of Test 03. System.out.println ("----------------------------"); - datas = new TagsData (); + datas = new IdsData (); datas.setContent ("name", "Superman"); errorMessage = new StringBuffer (); html = Presenter.doXid ("
a name
", datas, "", errorMessage); - System.out.println ("datas = new TagsData ();"); + System.out.println ("datas = new IdsData ();"); System.out.println ("datas.setContent (\"name\", \"Superman\");"); System.out.println ("+"); System.out.println ("
a name
"); @@ -94,8 +94,8 @@ class Test // Populate attributes of Test 03. System.out.println ("----------------------------"); - datas = new TagsData (); - tag = new TagData (); + datas = new IdsData (); + tag = new IdData (); tag.setContent ("Spiderman"); tag.getAttributes ().appendAttribute ("style", "background: blue;"); tag.getAttributes ().appendAttribute ("style", "foreground: red;"); @@ -106,8 +106,8 @@ class Test errorMessage = new StringBuffer (); html = Presenter.doXid ("
a last name
", datas, "", errorMessage); - System.out.println ("datas = new TagsData ();"); - System.out.println ("tag = new TagData ();"); + System.out.println ("datas = new IdsData ();"); + System.out.println ("tag = new IdData ();"); System.out.println ("tag.getAttributes ().setAttribute (\"class\", \"lastnameClass\");"); System.out.println ("tag.getAttributes ().appendAttribute (\"style\", \"background: blue;\");"); System.out.println ("tag.getAttributes ().appendAttribute (\"style\", \"foreground: red;\");"); @@ -121,7 +121,7 @@ class Test // Populate attributes of Test 03. System.out.println ("----------------------------"); - datas = new TagsData (); + datas = new IdsData (); datas.setContent ("lastname", "Spiderman"); datas.appendAttribute ("lastname", "style", "background: blue;"); datas.appendAttribute ("lastname", "style", "foreground: red;"); @@ -131,7 +131,7 @@ class Test errorMessage = new StringBuffer (); html = Presenter.doXid ("
a last name
", datas, "", errorMessage); - System.out.println ("datas = new TagsData ();"); + System.out.println ("datas = new IdsData ();"); System.out.println ("datas.setContent (\"lastname\", \"Spiderman\");"); System.out.println ("datas.appendAttribute (\"lastname\", \"style\", \"background: blue;\");"); System.out.println ("datas.appendAttribute (\"lastname\", \"style\", \"foreground: red;\");"); @@ -144,7 +144,7 @@ class Test // Populate attributes of Test 03. System.out.println ("----------------------------"); - datas = new TagsData (); + datas = new IdsData (); datas.setContent ("words", 0, "alpha"); datas.setContent ("words", 1, "bravo"); datas.setContent ("words", 2, "charlie"); @@ -156,7 +156,7 @@ class Test errorMessage = new StringBuffer (); html = Presenter.doXid ("
    \n
  • a word
  • \n
", datas, "", errorMessage); - System.out.println ("datas = new TagsData ();"); + System.out.println ("datas = new IdsData ();"); System.out.println ("datas.setContent (\"words\", 0, \"alpha\");"); System.out.println ("datas.setContent (\"words\", 1, \"bravo\");"); System.out.println ("datas.setContent (\"words\", 2, \"charlie\");"); @@ -173,7 +173,7 @@ class Test // Populate attributes of Test 03. System.out.println ("----------------------------"); - datas = new TagsData (); + datas = new IdsData (); datas.setContent ("identity", 0, "nom", "Jemba"); datas.setContent ("identity", 0, "prenom", "Epo"); datas.setContent ("identity", 1, "nom", "Momon"); @@ -190,7 +190,7 @@ class Test htmlSource = source.toString (); html = Presenter.doXid (htmlSource, datas, "", errorMessage); - System.out.println ("datas = new TagsData ();"); + System.out.println ("datas = new IdsData ();"); System.out.println ("datas.setContent (\"identity\", 0, \"nom\", \"Jemba\");"); System.out.println ("datas.setContent (\"identity\", 0, \"prenom\", \"Epo\");"); System.out.println ("datas.setContent (\"identity\", 1, \"nom\", \"Momon\");"); @@ -206,17 +206,17 @@ class Test // Populate attributes of Test 03. System.out.println ("----------------------------"); - datas = new TagsData (); + datas = new IdsData (); datas.setContent ("identity", 0, "nom", "Jemba"); datas.setContent ("identity", 0, "prenom", "Epo"); datas.setContent ("identity", 1, "nom", "Momon"); datas.setContent ("identity", 1, "prenom", "Christian"); datas.setContent ("identity", 2, "nom", "Tronche"); datas.setContent ("identity", 2, "prenom", "Christophe"); - datas.setIterationStrategy ("identity", TagsDataByIndex.IterationStrategy.ONLY_FIRST_ROW); - //datas.setIterationStrategy ("identity", TagsDataByIndex.IterationStrategy.ONLY_ROWS_WITH_ID); - //datas.setIterationStrategy ("identity", TagsDataByIndex.IterationStrategy.ONLY_ROWS_WITHOUT_ID); - //datas.setIterationStrategy ("identity", TagsDataByIndex.IterationStrategy.ALL_ROWS); + datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ONLY_FIRST_ROW); + //datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ONLY_ROWS_WITH_ID); + //datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ONLY_ROWS_WITHOUT_ID); + //datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ALL_ROWS); errorMessage = new StringBuffer (); @@ -228,7 +228,7 @@ class Test source.append (""); htmlSource = source.toString (); - System.out.println ("datas = new TagsData ();"); + System.out.println ("datas = new IdsData ();"); System.out.println ("datas.setContent (\"identity\", 0, \"nom\", \"Jemba\");"); System.out.println ("datas.setContent (\"identity\", 0, \"prenom\", \"Epo\");"); System.out.println ("datas.setContent (\"identity\", 1, \"nom\", \"Momon\");"); @@ -241,22 +241,22 @@ class Test System.out.println ("=>"); - datas.setIterationStrategy ("identity", TagsDataByIndex.IterationStrategy.ONLY_FIRST_ROW); + datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ONLY_FIRST_ROW); System.out.println ("ONLY_FIRST_ROW:"); html = Presenter.doXid (htmlSource, datas, "", errorMessage); System.out.println (html); - datas.setIterationStrategy ("identity", TagsDataByIndex.IterationStrategy.ONLY_ROWS_WITH_ID); + datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ONLY_ROWS_WITH_ID); System.out.println ("ONLY_ROWS_WITH_ID:"); html = Presenter.doXid (htmlSource, datas, "", errorMessage); System.out.println (html); - datas.setIterationStrategy ("identity", TagsDataByIndex.IterationStrategy.ONLY_ROWS_WITHOUT_ID); + datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ONLY_ROWS_WITHOUT_ID); System.out.println ("ONLY_ROWS_WITHOUT_ID:"); html = Presenter.doXid (htmlSource, datas, "", errorMessage); System.out.println (html); - datas.setIterationStrategy ("identity", TagsDataByIndex.IterationStrategy.ALL_ROWS); + datas.setIterationStrategy ("identity", IdsDataByIndex.IterationStrategy.ALL_ROWS); System.out.println ("ALL_ROWS:"); html = Presenter.doXid (htmlSource, datas, "", errorMessage); System.out.println (html); @@ -264,8 +264,9 @@ class Test // Populate attributes of Test 03. + /* System.out.println ("----------------------------"); - datas = new TagsData (); + datas = new IdsData (); datas.setAttribute ("
", "class", "aDivClass"); datas.setAttribute ("
", "style", "background-color: #000000;"); datas.setAttribute ("number", "style", "background-color: #0000FF;"); @@ -284,14 +285,13 @@ class Test System.out.println (htmlSource); System.out.println ("+"); - System.out.println ("datas = new TagsData ();"); + System.out.println ("datas = new IdsData ();"); System.out.println ("datas.setAttribute (\"
\", \"class\", \"aDivClass\");"); System.out.println ("datas.setAttribute (\"
\", \"style\", \"background-color: #000000;\");"); System.out.println ("datas.setAttribute (\"number\", \"style\", \"background-color: #0000FF;\");"); System.out.println ("=>"); System.out.println (html); - - + */ } } diff --git a/test/xid/test/Test.java~ b/test/xid/test/Test.java~ index 7b4873c..816f07b 100644 --- a/test/xid/test/Test.java~ +++ b/test/xid/test/Test.java~ @@ -57,6 +57,7 @@ class Test StringBuffer errorMessage; // Populate attributes of Test 03. + System.out.println ("----------------------------"); datas = new TagsData (); tag = new TagData (); tag.setContent ("Superman"); @@ -65,7 +66,6 @@ class Test errorMessage = new StringBuffer (); html = Presenter.doXid ("
a name
", datas, "", errorMessage); - System.out.println ("----------------------------"); System.out.println ("datas = new TagsData ();"); System.out.println ("tag = new TagData ();"); System.out.println ("tag.setContent (\"Superman\");"); @@ -77,13 +77,13 @@ class Test // Populate attributes of Test 03. + System.out.println ("----------------------------"); datas = new TagsData (); datas.setContent ("name", "Superman"); errorMessage = new StringBuffer (); html = Presenter.doXid ("
a name
", datas, "", errorMessage); - System.out.println ("----------------------------"); System.out.println ("datas = new TagsData ();"); System.out.println ("datas.setContent (\"name\", \"Superman\");"); System.out.println ("+"); @@ -93,6 +93,7 @@ class Test // Populate attributes of Test 03. + System.out.println ("----------------------------"); datas = new TagsData (); tag = new TagData (); tag.setContent ("Spiderman"); @@ -105,7 +106,6 @@ class Test errorMessage = new StringBuffer (); html = Presenter.doXid ("
a last name
", datas, "", errorMessage); - System.out.println ("----------------------------"); System.out.println ("datas = new TagsData ();"); System.out.println ("tag = new TagData ();"); System.out.println ("tag.getAttributes ().setAttribute (\"class\", \"lastnameClass\");"); @@ -120,6 +120,7 @@ class Test // Populate attributes of Test 03. + System.out.println ("----------------------------"); datas = new TagsData (); datas.setContent ("lastname", "Spiderman"); datas.appendAttribute ("lastname", "style", "background: blue;"); @@ -130,7 +131,6 @@ class Test errorMessage = new StringBuffer (); html = Presenter.doXid ("
a last name
", datas, "", errorMessage); - System.out.println ("----------------------------"); System.out.println ("datas = new TagsData ();"); System.out.println ("datas.setContent (\"lastname\", \"Spiderman\");"); System.out.println ("datas.appendAttribute (\"lastname\", \"style\", \"background: blue;\");"); @@ -143,6 +143,7 @@ class Test // Populate attributes of Test 03. + System.out.println ("----------------------------"); datas = new TagsData (); datas.setContent ("words", 0, "alpha"); datas.setContent ("words", 1, "bravo"); @@ -155,7 +156,6 @@ class Test errorMessage = new StringBuffer (); html = Presenter.doXid ("
    \n
  • a word
  • \n
", datas, "", errorMessage); - System.out.println ("----------------------------"); System.out.println ("datas = new TagsData ();"); System.out.println ("datas.setContent (\"words\", 0, \"alpha\");"); System.out.println ("datas.setContent (\"words\", 1, \"bravo\");"); @@ -172,6 +172,7 @@ class Test // Populate attributes of Test 03. + System.out.println ("----------------------------"); datas = new TagsData (); datas.setContent ("identity", 0, "nom", "Jemba"); datas.setContent ("identity", 0, "prenom", "Epo"); @@ -182,10 +183,13 @@ class Test errorMessage = new StringBuffer (); - htmlSource = "\n \n
noidun nomun prenom
"; + StringBuffer source = new StringBuffer (); + source.append ("\n"); + source.append (" \n"); + source.append ("
noidun nomun prenom
"); + htmlSource = source.toString (); html = Presenter.doXid (htmlSource, datas, "", errorMessage); - System.out.println ("----------------------------"); System.out.println ("datas = new TagsData ();"); System.out.println ("datas.setContent (\"identity\", 0, \"nom\", \"Jemba\");"); System.out.println ("datas.setContent (\"identity\", 0, \"prenom\", \"Epo\");"); @@ -201,6 +205,7 @@ class Test // Populate attributes of Test 03. + System.out.println ("----------------------------"); datas = new TagsData (); datas.setContent ("identity", 0, "nom", "Jemba"); datas.setContent ("identity", 0, "prenom", "Epo"); @@ -215,7 +220,7 @@ class Test errorMessage = new StringBuffer (); - StringBuffer source = new StringBuffer (); + source = new StringBuffer (); source.append ("\n"); source.append (" \n"); source.append (" \n"); @@ -223,7 +228,6 @@ class Test source.append ("
noidun nomun prenom
noidun nomun prenom
"); htmlSource = source.toString (); - System.out.println ("----------------------------"); System.out.println ("datas = new TagsData ();"); System.out.println ("datas.setContent (\"identity\", 0, \"nom\", \"Jemba\");"); System.out.println ("datas.setContent (\"identity\", 0, \"prenom\", \"Epo\");");