[flexcoders] Re:Flex Builder 3 for Linux updated

2009-11-25 Thread Michael Slinn
Life is short.  Microsoft is aggressive, and HTML5 looms.  Without 
cross-platform support for developers and users Flex and the Flash 
Platform can't compete.  Flex had a decent chance to become more than a 
promising product, but the end of that opportunity is in sight.  Without 
strong Linux support, Flex will be a casualty of the RIA war; the 
question has become when Flex will cease to be a viable business decision.

This loss was preventable.  I say this in the past tense, because 
dithering only begets more dithering.  Borland's JBuilder died because 
of dithering, and Borland died in large part because they did not 
respond appropriately to Microsoft and Eclipse.  Big Bill is likely to 
win again, using the same tried-and-true script, while playing clean.

Mike


[flexcoders] Re: Developing Flash/Flex on Linux

2009-10-22 Thread Michael Slinn
IntelliJ IDEA for Flex, even v9M1 ("Maia"), doesn't quite work properly  
:( 
You can see for yourself: http://www.jetbrains.com/idea/nextversion/
It's been a while, but the issues remain.  Maia seems stalled.

A free policy for open source projects would speed adoption of any IDE; 
also a free student policy, but this issue is not related to the choice 
of O/S.  Here is the Flex Builder student policy: 
https://freeriatools.adobe.com/flex/

Another idea for speeding adoption would be to get FDT placed into the 
Ubuntu commercial source repositories, like 
{feisty,gutsy,hardy,intrepid,jaunty,karmic,lucid}-commercial.  See 
https://help.ubuntu.com/community/Repositories/Ubuntu

$700 is fairly steep for individuals and small businesses, which is why 
the competition (Flex Builder) has an intermediate price point.  FDT 
would need to carve out features differently, however.  The marketing 
story for IDEs is always productivity.  $700 would be perceived to be 
good value by enterprises and hard-core Flex developers if productivity 
gains justified the expense.  If your bill rate is third-world ($15/hr) 
then productivity is not an issue.  If your bill rate is enterprise 
level ($125-200/hr) then productivity is very important.  The developers 
of successful open source products are very good, and they are 
often/usually employed by large companies.  A product offering that 
addressed open source projects would allow these star developers to 
become familiar with FDT, and if they liked the IDE they would spread 
adoption throughout their (wide) circle of influence.

I hope that a 64 bit version of FDT for Linux would be the goal.  A 
visual design surface is not important, just the basics of an IDE: edit, 
compile, debug, unit test. Strong refactoring features could be 
restricted to the higher price point of a tiered product offering.

Mike


[flexcoders] Re:Need good links for learning LCDS

2009-10-06 Thread Michael Slinn
This book has a lot of useful information for people who want to learn 
LCDS.  Of course, I may be biased ;-)

http://slinnbooks.com

Mike


[flexcoders] Re: Send an automatic Password

2009-08-12 Thread Michael Slinn
I recently set up an IPN responder with PayPal so I can email people
download instructions who buy my book. I blogged about this last week:
http://www.insideria.com/2009/08/certified-adobe-flex-3-with-ai.html
It only took a day and a half to get the proof of concept working, but
another 7 days to make it industrial strength.

BTW, the book is called "*Flex Data Services, Eclipse and Hibernate*"
and it is available now from http://slinnbooks.com

Mike

-- 
*Michael Slinn* +1-415-367-3789
Independent full-service software contractor and author
Certified Adobe Flex 3 with AIR ACE



[flexcoders] Re: Programmaticly created Consumer does not find endpoint

2009-07-15 Thread Michael Slinn

No-one replied to my earlier post, is an Adobean available to look at
this?


The testdrive-datapush sample program uses AMF as the primary channel,so
AMFStreaming was probably never used. I should have previously mentioned
that I had changedmessaging-config.xml as follows so streaming is used
exclusively for messaging:
   
 
 


I modified services-config.xml so my-streaming-amf is now defined as
follows:

http://{server.name}:{server.port}/{context.root}/messagebroker/str\
eamingamf" class="flex.messaging.endpoints.StreamingAMFEndpoint">

0
10
5000






















The log messages have now changed to: 
my-streaming-amf' channel endpoint set to
http://localhost:8400/samples/messagebroker/amfstreaming
'B48F00D0-58FC-D64F-8F15-7F561D53C000' consumer set destination to
'feed'.
'B48F00D0-58FC-D64F-8F15-7F561D53C000' consumer subscribe.
'my-streaming-amf' pinging endpoint.
'my-streaming-amf' channel got status. (Object)#0
code = "NetConnection.Call.Failed"
description = "HTTP: Failed"
details = "http://localhost:8400/samples/messagebroker/amfstreaming";
level = "error"
'my-streaming-amf' channel polling stopped.
'my-streaming-amf' channel connect failed.
'B48F00D0-58FC-D64F-8F15-7F561D53C000' consumer channel faulted with
Channel.Connect.Failed NetConnection.Call.Failed: HTTP: Failed: url:
'http://localhost:8400/samples/messagebroker/amfstreaming'
Suggestions?

Mike
--- In flexcoders@yahoogroups.com, "Michael Slinn"  wrote:
>
>
> I am able to programmatically create a RemoteObject to call RPCs
> against, and now I am trying to programmatically create a messaging
> Consumer that listens on a streaming AMF channel.
>
> I have cranked up logging verbosity. I note the 404 (not found)
message:
> [SWF] /samples/testdrive-datapush/ProgMsg.swf - 883,736 bytes after
> decompression
> 'my-streaming-amf' channel endpoint set to
> http://localhost:8400/samples/messagebroker/amfstreaming
> 'A9D9B478-E4BB-6C26-196F-7B082707F804' consumer set destination to
> 'feed'.
> 'A9D9B478-E4BB-6C26-196F-7B082707F804' consumer subscribe.
> 'my-streaming-amf' pinging endpoint.
> 'my-streaming-amf' channel got status. (Object)#0
>code = "NetConnection.Call.Failed"
>description = "HTTP: Status 404"
>details =
"http://localhost:8400/samples/messagebroker/amfstreaming";
>level = "error"
> 'my-streaming-amf' channel polling stopped.
> 'my-streaming-amf' channel connect failed.
> The streaming AMF endpoint looks right to me. What am I missing?
>
> Here is the (small) test project source code:
> http://www.mslinn.com/sites/flex/progMsg.zip
>
> For convenience, the SWF and HTML files built by this test project
drop
> into the {BlazeDsTurnkey}/tomcat/webapps/samples/testdrive-datapush
> directory and the project can be run from
> http://localhost:8400/samples/testdrive-datapush/ProgMsg.html
>



[flexcoders] Programmaticly created Consumer does not find endpoint

2009-07-14 Thread Michael Slinn

I am able to programmatically create a RemoteObject to call RPCs
against, and now I am trying to programmatically create a messaging
Consumer that listens on a streaming AMF channel.

I have cranked up logging verbosity. I note the 404 (not found) message:
[SWF] /samples/testdrive-datapush/ProgMsg.swf - 883,736 bytes after
decompression
'my-streaming-amf' channel endpoint set to
http://localhost:8400/samples/messagebroker/amfstreaming
'A9D9B478-E4BB-6C26-196F-7B082707F804' consumer set destination to
'feed'.
'A9D9B478-E4BB-6C26-196F-7B082707F804' consumer subscribe.
'my-streaming-amf' pinging endpoint.
'my-streaming-amf' channel got status. (Object)#0
   code = "NetConnection.Call.Failed"
   description = "HTTP: Status 404"
   details = "http://localhost:8400/samples/messagebroker/amfstreaming";
   level = "error"
'my-streaming-amf' channel polling stopped.
'my-streaming-amf' channel connect failed.
The streaming AMF endpoint looks right to me. What am I missing?

Here is the (small) test project source code:
http://www.mslinn.com/sites/flex/progMsg.zip

For convenience, the SWF and HTML files built by this test project drop
into the {BlazeDsTurnkey}/tomcat/webapps/samples/testdrive-datapush
directory and the project can be run from
http://localhost:8400/samples/testdrive-datapush/ProgMsg.html



[flexcoders] Re: mx:VideoDisplay does not return QuickTime metadata

2009-06-11 Thread Michael Slinn

Thank you for the information.  It is helpful to understand.

Because I want to size the player at the start of loading the file, and
I do not want to have to rearrange the contents of every file that is
uploaded, I think a server-side Java program that reads the metadata and
sends it to a custom player via RPC or POST is the best way for me to
go.  Here is a first attempt at such a program:
import javax.media.CannotRealizeException; import
javax.media.MediaLocator; import javax.media.NoPlayerException; import
javax.media.Player; import javax.media.Manager; import
java.awt.Component; import java.awt.Dimension; import
java.io.IOException; import java.net.URL;  public class
MediaMetadataReader {  public MediaMetadataReader(URL
mediaLocator) throws NoPlayerException, IOException,
CannotRealizeException { Player player =
Manager.createPlayer(mediaLocator); Component mediaViewer =
player.getVisualComponent(); Dimension mediaDimension =
mediaViewer.getPreferredSize(); double width =
mediaDimension.getWidth(); double height =
mediaDimension.getHeight(); System.out.println("width=" + width
+ ", height=" + height); }  public static void main(String[]
args) throws NoPlayerException, IOException, CannotRealizeException {
if (args.length==0) { System.out.println("Usage:
MediaMetadataReader fileToRead"); System.exit(-1); }
MediaMetadataReader metaReader = new MediaMetadataReader(new
URL(args[0])); } }
If anyone has a finished version of something similar, I'd like to hear
about it.



[flexcoders] mx:VideoDisplay does not return QuickTime metadata

2009-06-10 Thread Michael Slinn

The docs say that mx:VideoDisplay should play MOV files with Flash
Player 10.  I created a file with QuickTime Pro 7.  I can see that the
MOV file loads, but the metatdata property is null, and videoHeight and
videoWidth are zero.  Not only that, but onMetaDataReceived(event) is
never invoked:

Any suggestions?



[flexcoders] e4x challenge

2009-04-22 Thread Michael Slinn
I would like to filter out all elements with type="file" from the following 
XML.  That turns out to be rather difficult because  elements are 
nested.  Any suggestions?





Mike



[flexcoders] Re: Flex 3.3 SDK and AdvancedDataGrid

2009-03-16 Thread Michael Slinn
The online docs and the previous posting suffer from invalid characters.  Also, 
the path needs to be in quotes.  Try this:

java -jar DMV-source.jar "C:\Documents and Settings\All Users\Application 
Data\Adobe\Flex"



[flexcoders] Re: Programmatically managing BlazeDS ServerConfig

2008-12-21 Thread Michael Slinn
Cornel,

You are doing the opposite of what I am doing.  Instead of letting the
compiler generate the code to read the XML configuration files, and
then examining the variables, I am attempting to set the XML directly
and configure BlazeDS that way, without using data files bound into
the SWF.  The following comment in the ServerConfig source code led me
to believe that this should be possible: "The XML source is provided
during the compilation process. However, there is currently no
internal restriction preventing the acquisition of this XML data by
other means, such as network, local file system, or shared object at
runtime." (Second paragraph of
http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/config/ServerConfig.as)

Here is a related bug: http://bugs.adobe.com/jira/browse/SDK-16073



[flexcoders] Re: How does Flex Builder validate a BlazeDS/LCDS J2EE project?

2008-12-21 Thread Michael Slinn
Filed as http://bugs.adobe.com/jira/browse/FB-16422



[flexcoders] Re: Programmatically managing BlazeDS ServerConfig

2008-12-16 Thread Michael Slinn
That produces a null result, as it should.  The problem seems to be
with the call to ServerConfig.getChannel(channelName).  As I trace
through the call, I see a call to ServerConfig.createChannel('my-amf').

It evaluates xml.channels.channel.(@id == channelId); which of course
returns nothing because the appropriate E4X expression for the
supplied data should be
xml.channels.elements("channel-definition").(@id == channelId).

The only way I could imagine this working is if the XML were
rewritten, converting all 'channel-definition' elements to 'channel'
elements - or perhaps something along the call chain discards the
remainder of the element name when it encounters a dash.

I tested this out by renaming the channel-definition elements to
channel, and modifying the E4X expression to suit, but createChannel()
fails due to an empty string returned from the call to
channelConfig.attribute(CLASS_ATTR).toString().  CLASS_ATTR is defined
as "type", and an attribute with that name is optional.

What's the secret?



[flexcoders] Re: How does Flex Builder validate a BlazeDS/LCDS J2EE project?

2008-12-16 Thread Michael Slinn
Cornel,

Thanks for confirming my suspicions.  I realized I was checking the
wrong directory for disk activity.  Flex Builder does not probe the
Root Folder that Flex Builder presents in Project Properties / Flex
Server, it probes the deployment folder, which resides in the workspace.

My test setup is:
Root folder:
C:\sites\slinnbooks.com\www\production\webapps\ROOT\books\serverSide\examples\blazeDS\echoTest\echoServer\WebContent
Root URL: http://localhost:8080/echoServer/  (this works ... serves up
content properly)
Context Root: /echoServer

The server project folder is of course:
C:\sites\slinnbooks.com\www\production\webapps\ROOT\books\serverSide\examples\blazeDS\echoTest\echoServer
The BlazeDS client folder is
C:\sites\slinnbooks.com\www\production\webapps\ROOT\books\serverSide\examples\blazeDS\echoTest\echoClient
The Eclipse workspace is: C:\work\eclipseWorkspaces\Europa2
This directory is the deployment folder, and has the necessary Flex
xml files in it:
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex

Pressing the Validate Location button generates this error message:
Cannot access the web server. The server may not be running, or the
web root folder or root URL may be invalid.

FileMon shows a hundreds of disk accesses after I click on Validate
Location.  Here is some of the activity:
10:02:39 AMexplorer.exe:3864OPEN   
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\:{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}:$DATA
   NOT FOUNDOptions: Open  Access: Read   
10:02:39 AMexplorer.exe:3864OPEN   
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\:SummaryInformation:$DATA
   NOT FOUNDOptions: Open  Access: Read   
10:02:46 AMexplorer.exe:3864DIRECTORY   
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\
   SUCCESSFileBothDirectoryInformation: services-config.xml   
10:02:46 AMexplorer.exe:3864OPEN   
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\services-config.xml
   SUCCESSOptions: Open  Access: Read   
10:02:46 AMexplorer.exe:3864OPEN   
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\services-config.xml:Raec25ph4sudbf0hAaq5ehw3Nf:$DATA
   NOT FOUNDOptions: Open  Access: Read   
10:02:46 AMexplorer.exe:3864OPEN   
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\services-config.xml\:Docf_SummaryInformation:$DATA
   NOT FOUNDOptions: Open  Access: Read   
10:02:47 AMexplorer.exe:3864QUERY INFORMATION   
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\services-config.xml
   SUCCESSAttributes: A   
10:02:47 AMexplorer.exe:3864CLOSE  
10:02:46 AMexplorer.exe:3864OPEN   
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\services-config.xml\:Docf_SummaryInformation:$DATA
   NOT FOUNDOptions: Open  Access: Read
C:\work\eclipseWorkspaces\Europa2\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\echoServer\WEB-INF\flex\services-config.xml
   SUCCESS   

The attempts to write random data to the $DATA forks all fail, yet the
necessary files are all there.  I'm running Windows XP SP3.  Is this a
bug?  I can reproduce this problem on several Windows systems.

Mike



[flexcoders] Channel documentation errors?

2008-12-16 Thread Michael Slinn
The documentation for Channel.applySettings() says:
Subclasses should override this method to apply any settings that may
be necessary for an individual channel. Make sure to call
super.applySettings() to apply common settings for the channel.

Parameters
settings:XML — XML fragment of the services-config.xml file for this
channel. The following fragement includes the  tag with all
of its configuration settings:




  false

  

Ignoring the spelling error ("fragement"), the documentation appears
to be quite incorrect, if I read the source code correctly.
I'm looking at
flex_sdk_3.0.0.477\frameworks\projects\rpc\src\mx\messaging\Channel.as, and
I see code that references the following properties:
connect-timeout-seconds
record-message-times
record-message-sizes
serialization
enable-small-messages

The polling-enabled property is not mentioned in the Channel code.

PollingChannel extends Channel, and it references the following config
file properties:
polling-enabled
polling-interval-millis
polling-interval-seconds
piggybacking-enabled
login-after-disconnect

None of the above properties are mentioned in the PollingChannel docs.
 The polling-enabled property mentioned in the Channel docs is
actually handled by the PollingChannel subclass.

NetConnection extends PollingChannel, and does not reference any new
properties.

AMFChannel extends NetConnection.  The AMFChannel docs say that the
config file's property called polling-interval-seconds is read into
the AMFChannel.pollingInterval property.
Also, the docs say that the polling-enabled property in the config
file sets the AMFChannel.pollingEnabled property.  As I discovered,
PollingChannel handles these properties, not AMFChannel.

Should I log a bug?



[flexcoders] Programmatically managing BlazeDS ServerConfig

2008-12-14 Thread Michael Slinn
ServerConfig has static methods and properties that I would like to
invoke.  Seems that setting the xml property is a way to configure
BlazeDS.  Pardon the length of this bit of code - it's an interleaving
of flex/services-config.xml and flex/remoting-config.xml:

ServerConfig.xml = 













   com.mslinn.echo.Echo












http://localhost:8080/unboundConfig/messagebroker/amf";
class="flex.messaging.endpoints.AMFEndpoint"/>



https://localhost:8080/unboundConfig/messagebroker/amfsecure";
class="flex.messaging.endpoints.SecureAMFEndpoint"/>

false




http://localhost:8080/unboundConfig/messagebroker/amfpolling";
class="flex.messaging.endpoints.AMFEndpoint"/>

true
4




  http://localhost:8080/unboundConfig/messagebroker/amflongpolling";
class="flex.messaging.endpoints.AMFEndpoint"/>
  
 true
 3
 6

1

200
  






[BlazeDS] 
false
false
false
false


Endpoint.*
Service.*
Configuration






false


;

I can get the names of all the defined channels using E4X:
ServerConfig.serverConfigData.channels.elements("channel-definition")@["id"])

Now for my question.  I want to get the channel objects, not just
their names.  A big fat nothing gets printed out from this:
for each (var channelName:String in
ServerConfig.serverConfigData.channels.elements("channel-definition")@["id"])
trace(ServerConfig.getChannel(channelName));

What is the correct way to retrieve channel objects from ServerConfig?



[flexcoders] How does Flex Builder validate a BlazeDS/LCDS J2EE project?

2008-12-14 Thread Michael Slinn
I imagined that Flex Builder validates a J2EE project by writing a
file into the root folder, and reading it back via the root URL, but
when I used SysInternals FileMon and a TCP monitor to check, I did not
see any such activity.  Exactly how does the Validate Configuration
button perform validation?



[flexcoders] CreatePopUp encounters null nativeWindow error

2008-06-02 Thread Michael Slinn
The following short AIR application dies:


http://www.adobe.com/2006/mxml";>







The error is:
[SWF] Main.swf - 902,561 bytes after decompression
TypeError: Error #1009: Cannot access a property or method of a null
object reference.
at mx.core::Window/get
visible()[E:\dev\3.0.x\frameworks\projects\airframework\src\mx\core\Wind\
ow.as:897]
at
mx.managers::PopUpManagerImpl/addPopUp()[E:\dev\3.0.x\frameworks\project\
s\framework\src\mx\managers\PopUpManagerImpl.as:229]
at
mx.managers::PopUpManagerImpl/createPopUp()[E:\dev\3.0.x\frameworks\proj\
ects\framework\src\mx\managers\PopUpManagerImpl.as:178]
at
mx.managers::PopUpManager$/createPopUp()[E:\dev\3.0.x\frameworks\project\
s\framework\src\mx\managers\PopUpManager.as:124]
at
Main/___Main_WindowedApplication1_applicationComplete()[C:\work\AirTest\\
src\Main.mxml:3]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at
mx.core::UIComponent/dispatchEvent()[E:\dev\3.0.x\frameworks\projects\fr\
amework\src\mx\core\UIComponent.as:9051]
at
mx.managers::SystemManager/preloader_preloaderDoneHandler()[E:\dev\3.0.x\
\frameworks\projects\framework\src\mx\managers\SystemManager.as:2251]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at
mx.preloaders::Preloader/displayClassCompleteHandler()[E:\dev\3.0.x\fram\
eworks\projects\framework\src\mx\preloaders\Preloader.as:434]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at
mx.preloaders::DownloadProgressBar/timerHandler()[E:\dev\3.0.x\framework\
s\projects\framework\src\mx\preloaders\DownloadProgressBar.as:1451]
at
mx.preloaders::DownloadProgressBar/initCompleteHandler()[E:\dev\3.0.x\fr\
ameworks\projects\framework\src\mx\preloaders\DownloadProgressBar.as:150\
3]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at
mx.preloaders::Preloader/dispatchAppEndEvent()[E:\dev\3.0.x\frameworks\p\
rojects\framework\src\mx\preloaders\Preloader.as:291]
at
mx.preloaders::Preloader/appCreationCompleteHandler()[E:\dev\3.0.x\frame\
works\projects\framework\src\mx\preloaders\Preloader.as:442]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at
mx.core::UIComponent/dispatchEvent()[E:\dev\3.0.x\frameworks\projects\fr\
amework\src\mx\core\UIComponent.as:9051]
at mx.core::UIComponent/set
initialized()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIC\
omponent.as:1167]
at
mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\3.0.x\framewor\
ks\projects\framework\src\mx\managers\LayoutManager.as:698]
at Function/http://adobe.com/AS3/2006/builtin::apply()

at
mx.core::UIComponent/callLaterDispatcher2()[E:\dev\3.0.x\frameworks\proj\
ects\framework\src\mx\core\UIComponent.as:8460]
at
mx.core::UIComponent/callLaterDispatcher()[E:\dev\3.0.x\frameworks\proje\
cts\framework\src\mx\core\UIComponent.as:8403]

What is wrong?


[flexcoders] ContextMenuEvent over a List

2008-05-15 Thread Michael Slinn
I want to detect if the user right-clicked over a list item.  The
following throws an error (mouseEventToItemRenderer wants a
MouseEvent, not a ContextMenuEvent, and the cast to MouseEvent is
illegal), but the following code shows what I mean:

private function handleMenuSelect(event:ContextMenuEvent):void {
   var renderer:IListItemRenderer = mouseEventToItemRenderer(event as
MouseEvent);
   if (renderer==null) {
   trace("clicked on empty part of list");
   } else {
   trace("clicked on list item");
   var value:Object = listItemRenderer.data;
   var dropInListItemRenderer:IDropInListItemRenderer =
IDropInListItemRenderer(listItemRenderer);
   currentRow = dropInListItemRenderer.listData.rowIndex;
   }
}

What is the right way of doing this?

Mike