Skip navigation

Sebuah perjuangan kembali terjadi, mulai dari meeting jam 19.30 malam. Setelah cekcok cukup sengit, tanya jawab yang cukup panas, akhirnya gw mulai mengerjakan sebuah requirement tambahan. Ngebenerin fitur login, yang selama ini hanya dipass sebagai pergantian state. Malam kemaren semua data harus diambil dari sebuah xml yang merupakan kembalian dari server.

XML ini akan dibinding menjadi sebuah object tertentu. Nah dari object java ini lah gw akan mencocokkan masukan login dari flex dan response dari server.

Googling sana sini.. akhirnya menemukan bahwa ArrayList<Object> di Java yang dikirim ke Flex akan di convert menjadi ArrayCollection.

ArrayCollection ini sendiri akan menjadi sebuah input dataProvider dari beberapa ComboBox yang isinya haruslah bersifat dinamis. Jadi bayangin pas lu ke website sebuah vendor motherboard, ketika milih driver sebuah motherboard, maka lu akan disuruh milih dari jenis paling umum sampai ke jenis yang paling spesifik. Nah gitu juga comboBox yang mau gw bikin ini.

Gw langsung mikirin alur datanya. Karena gw pakenya cairngorm framework untuk pembentukan layering MVC nya, maka gw harus runut tuh process, dari input login, terus gw isi ke UserVO.

Execute tombol Login, maka proses dispatchEvent dimulai. VO tersebut akan dikirim ke Java, setelah proses di delegate dilakukan. Nilai yang yang sudah sampai di Java tidak ditelantarin gitu aja, tapi mulai ada proses ngejelimet, xml parsing dimulai. Gw suruh tuh Java buat nyari ada gak si username di xml. Kalo gada, ngapain lu login. Gw suruh aja balikin null, tapi kalo ada yah balikin lah tuh object, jangan dimakan ndiri aja. :D . Kembalian berupa ArrayList<Object> dari Java ini, ditangkap oleh Flex via BlazeDS menjadi sebuah ArrayCollection.

But, gw dah perkirain suatu hal diluar dugaan bakal terjadi. Ketika gw mau masukin tuh ArrayCollection ke dataProvidernya comboBox, yang nampilnya cuma Object[Object], wukakaka, dataProvider cannot parsing your object to ArrayList<Object>.

Kurang lebih 60 menit gw puter-puter otak gw.. ampe mau ngegelinding ke luar kontrakan. Akhirnya gw nemu. Dengan bantuan seorang Strategy Programmer. Gw nemuin solusinya.. Eng ing eng.. gw looping aja tuh object dengan akses direct ke java nya via serialization lewat si BlazeDS.

Si SP(Strategy Programmer) memberikan contoh parsing object tersebut. Dia ngebuat looping dimana mirip banget seperti yang dilakukan di Java untuk ngeakses tree dari xml. Akhirnya dapet juga tuh Object dan ditampung ke sebuah Array, nah si Array ini yang dimasukin ke dataProvider.

Alhasil, semuanya berjalan baik, nama dari Object didalamnya berhasil ditampilin. Tepat jam 00.00, gw commit tuh kerjaan. After run all test and pass. Always check your test before commit.

Contoh XML yang akan diparsing:

<Response>
	<Person ID="32184320480234">
		<Name>Cupuah</Name>
		<Status>Single</Status>
		<Pacars>
			<Pacar ID="fdaf34324fdsa">
				<Name>Kirin</Name>
				<Status>Married</Status>
				<PacarCeweknyas>
					<PacarCeweknya ID="31234324dfsaf">
						<Name>Boy</Name>
						<Status>Married</Status>
					</PacarCeweknya>
					<PacarCeweknya ID="31234324dfsaf">
						<Name>Cucok</Name>
						<Status>Single</Status>
					</PacarCeweknya>
				</PacarCeweknyas>
			</Pacar>
			<Pacar ID="hstret435rgtegf">
				<Name>Sinjoku</Name>
				<Status>Single</Status>
				<PacarCeweknyas>
					<PacarCeweknya ID="fdasfsaffasdfd">
						<Name>CoyRayo</Name>
						<Status>Single</Status>
					</PacarCeweknya>
				</PacarCeweknyas>
			</Pacar>
		</Pacars>
	</Person>
</Response>

Contoh cara parsing ArrayCollection ke Array dan memasukkan ke dataProvider ComboBox:

var data:Array = new Array(configLocator.pacarCollection.length);
for(var i:int = 0; i < configLocator.pacarCollection.length; i++)
{
	data[i] = configLocator.pacarCollection.getItemAt(i).name;
}
pacarList.dataProvider = data;

Contoh code Java yang mencari dari hasil binding xml ke object:

List<Pacar>pacarList = person.getPacarsList();
	for (Pacar pacar : pacarsList)
	{
		List<PacarCeweknya>selingkuhanList = pacar.getPacarCeweknyasList();
		for (PacarCeweknya selingkuhan : selingkuhanList)
		{
			if (selingkuhan.getName().equalsIgnoreCase(selingkuhanYangDicari))
			{
				return selingkuhan;
			}
		}
	}

Advertisement

4 Comments

  1. hanjrid gw liat code lo rapi rap

    Gak kayak code gw neh acak2an kayak bulu hidung lo pas lagi pilek dan lo korek2in pake telunjuk n kelingking… huakakakaka

    btw gw juga hari ini pengen ngrapihin code gw neh rap, ada saran?

  2. wukakaka, itu juga kan lengket2 gitu wid di bantal kamar lu.. terus gw buangnya di kasur lu.. udah beres semua.. baru deh lu bobo disana.. wukakaka..
    saran gw, code yang post gak sepenuhnya rapi, di bagian kanan itu kalo lu geser kelihatan kalo bagian yang putih dari box code itu hanya support sampai width tertentu, jadi baiknya lu sesuaikan deh panjang nya code lu dengan lebar box. lu bikin baris baru kek, atau apa kek. asal gak lu korek2in aja.. :D .

  3. lucu juga ceritanya. (^_^)

  4. waw, very inspirational.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.