Re: [XMLPipeDB-developer] GenMAPP multitaxon support - CMSI 486T
Brought to you by:
kdahlquist,
zugzugglug
|
From: Richard B. <rbr...@gm...> - 2011-08-03 17:09:37
|
Hi Dondi,
I checked out the new code and saw the instantiation of List as an
Arrays.asList.
Pretty clever... when we spoke yesterday I thought you were mentioning
Collections as an interface and that when you said Arrays - meant ArrayList
since it implements Collection.
I have swapped in your code which creates the List as a collection of
unknown (supertype of all collections) which then extends
SpeciesProfile, but now when selecting species in the JList a type cast
exception is thrown during event dispatch. The error is that Object cannot
be cast into SpeciesProfile.
I'm not sure how to fix this as I thought that using the wildcard<?> forced
you to stay in terms of Objects and that you weren't able to typecast
further??? Help please! =D
*protected* *void* handleSpeciesProfileSelection(ListSelectionEvent
listSelectionEvent) {
JList list = (JList)listSelectionEvent.getSource();
StringBuilder speciesTextBuilder = *new* StringBuilder("Selected Species
info: ");
*List<? **extends** SpeciesProfile> selectedSpeciesProfiles =
Arrays.asList((SpeciesProfile[])list.getSelectedValues());*
*for** (SpeciesProfile speciesProfile: selectedSpeciesProfiles) {*
// A direct class comparison is required here (as opposed to *instanceof*)
// because we are looking specifically for instances of
UniProtSpeciesProfile,
// and not any of its subclasses.
speciesTextBuilder.append("\n")
.append(speciesProfile)
.append((speciesProfile.getClass() == UniProtSpeciesProfile.*class*) ?
", Generic Profile." : ", Custom Profile.");
}
speciesDescriptionTextArea.setText(speciesTextBuilder.toString());
On Tue, Aug 2, 2011 at 4:25 PM, Richard Brous <rbr...@gm...> wrote:
> OK, submitted new code which added the selected SpeciesProfiles into
> selectedSpecies ArrayList. Using this as the argument for:
> databaseProfile.setSelectedSpeciesProfile( selectedSpecies );
>
> Thought I would snag each value when surfaced in the Object selection loop
> then add to ArrayList.
>
> Richard
>
> On Tue, Aug 2, 2011 at 8:50 AM, Richard Brous <rbr...@gm...>wrote:
>
>> Ah yes, I see why you inlined the conditional and now the code is much
>> more elegant.
>>
>> Btw, neglected to mention i'm starting on chapter 2 in the db textbook
>> today.
>>
>> Look forward to our chat in 15 minutes
>> richard
>> On Tue, Aug 2, 2011 at 8:39 AM, John David N. Dionisio <do...@lm...>wrote:
>>
>>> OK, cool, the changes look good.
>>>
>>> I committed some comments and little tweaks, mainly for style and
>>> succinctness reasons. The primary logic through-line was not touched. If
>>> you have any questions on those changes, we can discuss that sometime; those
>>> are secondary to the main-line issues that you mentioned.
>>>
>>> John David N. Dionisio, PhD
>>> Assistant Professor, Computer Science
>>> Loyola Marymount University
>>>
>>>
>>> On Aug 2, 2011, at 12:31 AM, Richard Brous wrote:
>>>
>>> > Just committed some new code. Mainly adding the logic to append the
>>> selected species with either generic or custom in the
>>> speciesDescriptionTextArea and cleared out more old comments to keep me
>>> focused.
>>> >
>>> > Also read through the first part of the ExportToGenMAPP class to get a
>>> handle on how it is sent the DatabaseProfile databaseProfile with a single
>>> species packaged within. From that effort, I decided to start on the
>>> databaseProfile.setSelectedSpeciesProfile method which would be modified for
>>> a collection of SpeciesProfiles.
>>> >
>>> > But I need to create that collection first back on ExportPanel1,
>>> proceeding the JList selection/display code. I just need to wrap my head
>>> around how to grab them and place them in a newly created SpeciesProfile []
>>> selectedProfiles, which would then be used as the argument in
>>> databaseProfile.setSelectedSpeciesProfiles( selectedProfiles );
>>> >
>>> > We can discuss this further on our call tomorrow.
>>> >
>>> > Richard
>>> >
>>> >
>>> >
>>> >
>>> > On Aug 1, 2011, at 11:13 AM, Kam Dahlquist <kda...@lm...> wrote:
>>> >
>>> >> Hi,
>>> >>
>>> >> That works for me. Talk to you tomorrow,
>>> >> Kam
>>> >>
>>> >> At 11:04 AM 8/1/2011, you wrote:
>>> >>> Greetings,
>>> >>>
>>> >>> No worries...for this week the best day turned out to be Tuesday;
>>> hope that works well for you also. So, tomorrow at 9am unless setting else
>>> comes up.
>>> >>>
>>> >>> John David N. Dionisio, PhD
>>> >>> Associate Professor, Computer Science
>>> >>> Loyola Marymount University
>>> >>>
>>> >>>
>>> >>> On Aug 1, 2011, at 10:46 AM, Kam Dahlquist <kda...@lm...>
>>> wrote:
>>> >>>
>>> >>>> Hi,
>>> >>>>
>>> >>>> I'm so sorry, I was on my "staycation" last week and just completely
>>> forgot about our scheduled phone call.
>>> >>>>
>>> >>>> I'm back in the office--what are the plans for this week's call?
>>> >>>>
>>> >>>> Thanks,
>>> >>>> Kam
>>> >>>>
>>> >>>> At 08:30 AM 7/28/2011, you wrote:
>>> >>>>> yes fri works for me. thank you!
>>> >>>>>
>>> >>>>> richard
>>> >>>>>
>>> >>>>> On Wed, Jul 27, 2011 at 9:42 PM, John David N. Dionisio <
>>> do...@lm...> wrote:
>>> >>>>> Greetings,
>>> >>>>> 3pm Thursday won't work for me unfortunately. How about 9am
>>> Friday? I can't stay too long even then but it will still be better than
>>> not talking at all.
>>> >>>>>
>>> >>>>> John David N. Dionisio, PhD
>>> >>>>> Associate Professor, Computer Science
>>> >>>>> Loyola Marymount University
>>> >>>>>
>>> >>>>> On Jul 27, 2011, at 7:42 PM, Richard Brous <rbr...@gm...>
>>> wrote:
>>> >>>>>
>>> >>>>>> Hi all,
>>> >>>>>>
>>> >>>>>> Sorry to fall out of touch but with finals and papers due this
>>> week and and my mother in law back in the hospital, I'm about at my wits
>>> end.
>>> >>>>>>
>>> >>>>>> That said, I was wondering if we could move our con call to
>>> tomorrow afternoon if possible instead of 9am? ... Say 3pm 'ish? I don't
>>> want to miss it as I would like to discuss a few things but I just can't
>>> make it at 9am and then rushing to a 10am final exam.
>>> >>>>>>
>>> >>>>>> Sorry for the late notice but I hope you both understand... smc
>>> classes will be over tomorrow and I can focus much, much more on this
>>> afterwards.
>>> >>>>>>
>>> >>>>>> Richard
>>> >>>>>> On Wed, Jul 20, 2011 at 10:38 PM, John David N. Dionisio <
>>> do...@lm...> wrote:
>>> >>>>>> Hi Rich,
>>> >>>>>> Congratulations! Welcome to the world of Swing GUI programming
>>> :) It has its share of tics and idiosyncrasies, but with some practice one
>>> gets the hang of it.
>>> >>>>>> I've reviewed your new code and have interspersed commentary in
>>> the context of your notes below. We don't have a lot of time tomorrow, so
>>> perhaps pick and choose the ones that you feel will benefit the most from
>>> synchronous discussion.
>>> >>>>>> John David N. Dionisio, PhD
>>> >>>>>> Associate Professor, Computer Science
>>> >>>>>> Loyola Marymount University
>>> >>>>>>
>>> >>>>>> On Jul 20, 2011, at 9:22 PM, Richard Brous wrote:
>>> >>>>>> > Hallelujah!!! - a list box with multiple species of which any
>>> combination can be selected now exists!!! Thanks Dondi!! (see attachment)
>>> >>>>>> >
>>> >>>>>> >
>>> >>>>>> > OK, had a chance to review the code corrections, other comments
>>> and think on the next steps surrounding the selection of multiple species
>>> and their dynamic text updating. Here is where I am at the moment:
>>> >>>>>> >
>>> >>>>>> > A. Dondis corrections/additions to my last submission
>>> >>>>>> >
>>> >>>>>> > 1. Creating a private class called SpeciesListModel which
>>> extended AbstractListModel
>>> >>>>>> >
>>> >>>>>> > As soon as I saw your code I realized that I had sort of coded
>>> it backwards, thinking about implementing an interface instead of just
>>> extending the abstract object and adding methods... duh. My face turned a
>>> bit red on that one.
>>> >>>>>> >
>>> >>>>>> > The idea still of creating a list model to manage the entries in
>>> the JList still seems a bit complicated and foreign but I guess the more I
>>> work with the java ui stuff, the better I will become with it.
>>> >>>>>>
>>> >>>>>> Yes, it can be unwieldy in simple cases (like this one) and can
>>> sometimes result in repetitive code. However, it is very flexible and truly
>>> encapsulates the list data from the list presentation (for example, with
>>> this approach, you can even create a ListModel that does not have a data
>>> structure behind it; or perhaps one that queries for the list contents
>>> dynamically).
>>> >>>>>> > Additionally I did attempt to add a new method under this class
>>> called clearSpeciesProfiles. This was meant to clear the JList of all
>>> species found each time the export1 panel was opened instead of aggregating
>>> the species in the list. It doesn't seem to be working though so I commented
>>> it out for now. Please let me know if I'm adding this functionality in the
>>> wrong way and/or in the incorrect location.
>>> >>>>>> A couple of notes on this one. Observe how setSpeciesProfile
>>> *replaces* the list of species profiles returned by the list model, and does
>>> not add to it. Thus, I do not think that the duplication occurs at this
>>> level --- I believe it occurs at the
>>> UniProtDatabaseProfile.checkRequirements method. Follow the code from
>>> GenMAPPBuilder.doExportToGenMAPP and see if you spot the issue. Remember
>>> that the symptom occurs when one tries to export more than once. Thus, see
>>> what the code does to the relevant data structures when
>>> GenMAPPBuilder.doExportToGenMAPP is called more than once.
>>> >>>>>> > 2. SpringLayout
>>> >>>>>> >
>>> >>>>>> > I took a look at the website and got a feel for how to adjust
>>> panel component locations. Seems like I can use those commands to make the
>>> adjustment to the species label that you mentioned in comments.
>>> >>>>>> >
>>> >>>>>> > Interesting how the leftPanel uses
>>> SpringUtilities.makeCompactGrid while the rightPanel uses GridLayout...
>>> didn't realize you could combine both kinds on content panel.
>>> >>>>>> Yes, this is the power and complexity of Swing layout management
>>> --- you can nest them as much as you like, and mix and match them as much as
>>> you like. Powerful and flexible, yes; potentially complicated, yes also.
>>> >>>>>> > B. further UI enhancements:
>>> >>>>>> >
>>> >>>>>> > 1. I dug into export1 design in regard to the text description
>>> areas of both the Database and Species profiles. They are both JTextAreas(3,
>>> 15) where 3 denotes rows and 15 denotes columns. I changed both fields to be
>>> editable and compiled just so I could see how big each text field really is.
>>> I was able to type in 23 characters across and 7 rows downward until the
>>> next row was cutoff by the bottom edge of the box. I also changed the row
>>> and column arguments to JTextAreas(2, 15) and JTextAreas(3, 10) and
>>> recompiled but didn't see any change in the volume of text I could enter...
>>> must not understand it completely... are the arguments only to manage
>>> components placed within the textArea maybe while loose text just starts top
>>> left and word/line wraps?
>>> >>>>>> >
>>> >>>>>> > My reason for fooling with this was to see what would happen of
>>> course but really I had the idea that I would shrink the size of the
>>> database profileDescriptiontextArea to allow for a larger
>>> speciesDescriptionTextArea below it. Also I had been thinking of how to
>>> represent the species and its associated custom or default species profile
>>> in a way that made the most sense. The species names are pretty long so was
>>> going to suggest to simply use taxon id, profile type (custom or default)
>>> since the user could cross reference in the JList just to the left.
>>> >>>>>>
>>> >>>>>> This issue rests in some of the tricks behind Swing layout
>>> management. Unlike conventional GUI design, where components are given
>>> fixed, absolute coordinates and sizes, Swing tries to "compute" the layout
>>> dynamically, based on a combination of rules, "preferred sizes," and min/max
>>> sizes. The exact algorithm for determining the final layout is placed in
>>> the LayoutManager class. The row/column settings given to JTextArea
>>> typically pertain to *preferred* sizing, not final sizing. As in, the
>>> JTextArea "asks" its containing panel that "if possible, I prefer to have
>>> this many rows and columns." The rule of thumb is that a layout manager
>>> tries to give its components their preferred sizes *or greater*, if
>>> available (the idea being that most UI components wouldn't mind getting more
>>> space than they originally asked for).
>>> >>>>>> To exercise greater control over this, you'll need to get a better
>>> handle on the behavior or the various layout managers. Certain layout
>>> managers *do* cap a UI component's size to no greater than its preference.
>>> This takes some practice, however, and some familiarity with the layout
>>> manager "zoo." My suggestion: let's leave well enough alone here for now,
>>> get the functionality done first, then come back to this later.
>>> >>>>>> > 2. Dynamic insertion of desired species info into the
>>> speciesDescriptionTextArea
>>> >>>>>> >
>>> >>>>>> > In thinking of how to solve this I went back to code I had
>>> commented out in my last submission - the protected method which detected a
>>> change in species choice occurred within the JComboBox:
>>> speciesProfileSelected( Object selectedItem ) {
>>> >>>>>> Yes, the fundamental change that you are making now is that *more
>>> than one species profile may be active*. What you need to do, then, is to
>>> maintain the selected species profiles as a collection, and not as a single
>>> value. Then, all the code that used to assume that only a species profile
>>> gets selected need to be modified so that they can accommodate a collection
>>> of species profiles. Cases in point...
>>> >>>>>> > I had been struggling with what that method really should be
>>> doing now that we have a JList where multiple species could be selected. And
>>> after some review and then walking away from it for a few, I think it only
>>> needs to handle two things:
>>> >>>>>> > a. ensure that all the selected species are added to the export
>>> dataset. (We then modify the export process itself to account for and
>>> properly process multiple species.)
>>> >>>>>> ...This is the fundamental change that dominoes through the rest
>>> of the export code. Instead of holding on to a single selected species
>>> profile, you need to maintain a collection of them. Also...
>>> >>>>>> > b. use the selected indices to populate/depopulate the
>>> speciesDescriptionTextArea dynamically as a selection/deselection is made
>>> within the JList.
>>> >>>>>> > I have some ideas but would like to talk them through on the
>>> call tomorrow. I'll also submit my latest pass on the code for review.
>>> >>>>>> ...This part requires some rewriting so that the generated
>>> descriptive text can accommodate a collection of species profiles. The
>>> message generation thus gets a little more complicated. But it's just
>>> additional logic, iterating through the species profiles and incrementally
>>> appending a message string until you've gone through all of the selected
>>> profiles. e.g., "This export will use a customized profile for S.
>>> typhimurium, a general-purpose profile for B. anthracis, and a customized
>>> species profile for H. pylori." Hope you can see how that string can be
>>> computed via iteration through a species profile collection.
>>> >>>>>>
>>> >>>>>> OK, that would be my 2 cents...let's see what needs live
>>> discussion tomorrow morning.
>>> >>>>>> > Richard
>>> >>>>>> >
>>> >>>>>> >
>>> >>>>>> >
>>> >>>>>> > On Wed, Jul 20, 2011 at 9:00 AM, John David N. Dionisio <
>>> do...@lm...> wrote:
>>> >>>>>> > Sounds good, talk to everyone Thursday 9am then :)
>>> >>>>>> >
>>> >>>>>> > John David N. Dionisio, PhD
>>> >>>>>> > Associate Professor, Computer Science
>>> >>>>>> > Loyola Marymount University
>>> >>>>>> >
>>> >>>>>> >
>>> >>>>>> > On Jul 20, 2011, at 8:47 AM, Kam Dahlquist <kda...@lm...>
>>> wrote:
>>> >>>>>> >
>>> >>>>>> > > Hi,
>>> >>>>>> > >
>>> >>>>>> > > I'm OK for Thursday, too. Sorry, I don't generally check my
>>> e-mail
>>> >>>>>> > > at night. Hope everything is OK. In the future, don't
>>> hesitate to
>>> >>>>>> > > move things if I'm not responding, I'll catch up eventually :)
>>> >>>>>> > >
>>> >>>>>> > > Best,
>>> >>>>>> > > Kam
>>> >>>>>> > >
>>> >>>>>> > > At 08:29 AM 7/20/2011, John David N. Dionisio wrote:
>>> >>>>>> > >> OK, acknowledged. Take care.
>>> >>>>>> > >>
>>> >>>>>> > >> John David N. Dionisio, PhD
>>> >>>>>> > >> Associate Professor, Computer Science
>>> >>>>>> > >> Loyola Marymount University
>>> >>>>>> > >>
>>> >>>>>> > >>
>>> >>>>>> > >>
>>> >>>>>> > >> On Jul 20, 2011, at 8:25 AM, Richard Brous wrote:
>>> >>>>>> > >>
>>> >>>>>> > >>> OK, I am forced to push to tomorrow now because our nanny is
>>> >>>>>> > >> stuck in traffic, christina is back at the hospital and I
>>> have to
>>> >>>>>> > >> drive my boys to MDR for their camp.
>>> >>>>>> > >>>
>>> >>>>>> > >>> I'm sorry this is so crazy but all is upside down atm.
>>> >>>>>> > >>>
>>> >>>>>> > >>> I already have a bunch of questions which I will lay out via
>>> >>>>>> > >> email since they are more high level than can be placed in
>>> code
>>> >>>>>> > >> comments... at least I think so atm.
>>> >>>>>> > >>>
>>> >>>>>> > >>> Either way come hell or high-water I'll get another
>>> iteration on
>>> >>>>>> > >> this prior to a call.
>>> >>>>>> > >>>
>>> >>>>>> > >>> rb
>>> >>>>>> > >>>
>>> >>>>>> > >>> On Tue, Jul 19, 2011 at 11:21 PM, John David N. Dionisio
>>> >>>>>> > >> <do...@lm...> wrote:
>>> >>>>>> > >>> Hi Rich,
>>> >>>>>> > >>>
>>> >>>>>> > >>> Sorry to hear about your mother-in-law. Hospital wait
>>> states are
>>> >>>>>> > >> never fun.
>>> >>>>>> > >>>
>>> >>>>>> > >>> I can do Thursday morning at 9am if needed. Let's watch the
>>> >>>>>> > >> e-mail in the morning to see if Kam can do that too; if so,
>>> then
>>> >>>>>> > >> Thursday it is, but if not, then we can still push for
>>> Wednesday 9am.
>>> >>>>>> > >>>
>>> >>>>>> > >>> John David N. Dionisio, PhD
>>> >>>>>> > >>> Associate Professor, Computer Science
>>> >>>>>> > >>> Loyola Marymount University
>>> >>>>>> > >>>
>>> >>>>>> > >>>
>>> >>>>>> > >>>
>>> >>>>>> > >>> On Jul 19, 2011, at 10:26 PM, Richard Brous wrote:
>>> >>>>>> > >>>
>>> >>>>>> > >>>> ok, can't get a break... sitting in the ER after admitting
>>> my
>>> >>>>>> > >> mother in law at St. Johns in Santa Monica. We are waiting to
>>> get
>>> >>>>>> > >> her a bed but not sure how long it will take.
>>> >>>>>> > >>>>
>>> >>>>>> > >>>> Luckily I have my laptop with me so I was able to scan the
>>> new
>>> >>>>>> > >> code with all the Dondi comments and compile a build which
>>> runs. I
>>> >>>>>> > >> will review Dondi's changes as best I can from here but
>>> likely
>>> >>>>>> > >> won't be able to do much with it by our call tomorrow.
>>> >>>>>> > >>>>
>>> >>>>>> > >>>> I'm happy to push our call to Thursday morning instead of
>>> >>>>>> > >> tomorrow to allow more time... but it is late so unless I
>>> hear
>>> >>>>>> > >> otherwise, tomorrow at 9am is still a go.
>>> >>>>>> > >>>>
>>> >>>>>> > >>>> Richard
>>> >>>>>> > >>>>
>>> >>>>>> > >>>> On Tue, Jul 19, 2011 at 3:00 PM, Richard Brous
>>> >>>>>> > >> <rbr...@gm...> wrote:
>>> >>>>>> > >>>> Thanks will review later this afternoon. Sorry got hung up
>>> on
>>> >>>>>> > >> this but continuing forward comments in code should speed
>>> this way up.
>>> >>>>>> > >>>>
>>> >>>>>> > >>>> Rb
>>> >>>>>> > >>>>
>>> >>>>>> > >>>> Sent from my iPhone
>>> >>>>>> > >>>>
>>> >>>>>> > >>>> On Jul 19, 2011, at 12:04 AM, "John David N. Dionisio"
>>> >>>>>> > >> <do...@lm...> wrote:
>>> >>>>>> > >>>>
>>> >>>>>> > >>>>> Greetings,
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>> OK, my responses are committed. As noted in my "Dondi -"
>>> >>>>>> > >> comments, you were fairly close. The main miss was how
>>> >>>>>> > >> AbstractListModel was to be used. Give it a gander and
>>> holler if
>>> >>>>>> > >> anything else remains unclear.
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>> At this point, you'll need to start managing what should
>>> >>>>>> > >> happen as the user selects/deselects species. You'll also
>>> want
>>> >>>>>> > >> that little informational panel on the right that summarizes
>>> (for
>>> >>>>>> > >> tech types) whether the selected species will be using a
>>> customized
>>> >>>>>> > >> species profile or the generic one.
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>> Carry on, see how this goes. :)
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>> John David N. Dionisio, PhD
>>> >>>>>> > >>>>> Associate Professor, Computer Science
>>> >>>>>> > >>>>> Loyola Marymount University
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>> On Jul 18, 2011, at 10:14 AM, Richard Brous wrote:
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>>> Ok , took the code as far as I could and submitted export
>>> 1
>>> >>>>>> > >> - unfortunately broken code even though I made a point not
>>> to by
>>> >>>>>> > >> commenting out unfinished blocks. Take a look at the commit
>>> comments for info.
>>> >>>>>> > >>>>>>
>>> >>>>>> > >>>>>> I look forward to your comments which I'm sure will help
>>> >>>>>> > >> straighten this out!
>>> >>>>>> > >>>>>>
>>> >>>>>> > >>>>>> Rb
>>> >>>>>> > >>>>>>
>>> >>>>>> > >>>>>> Sent from my iPhone
>>> >>>>>> > >>>>>>
>>> >>>>>> > >>>>>> On Jul 12, 2011, at 6:35 PM, "John David N. Dionisio"
>>> >>>>>> > >> <do...@lm...> wrote:
>>> >>>>>> > >>>>>>
>>> >>>>>> > >>>>>>> Hi there,
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> A code-oriented session is OK with me, though this
>>> >>>>>> > >> particular question I can take a stab at via e-mail.
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> The trick with full control of a JList is to implement
>>> its
>>> >>>>>> > >> model (a ListModel). For this, I usually create a subclass
>>> of
>>> >>>>>> > >> AbstractListModel and implement the missing methods. This
>>> >>>>>> > >> AbstractListModel subclass should be able to see the list of
>>> >>>>>> > >> species found. Then, the implementations of its missing
>>> methods
>>> >>>>>> > >> would be based on that list of species.
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> With this ListModel class in hand, keeping the JList up
>>> to
>>> >>>>>> > >> date is a matter of instantiating the JList with this model:
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> SpeciesListModel speciesListModel = new
>>> SpeciesListModel();
>>> >>>>>> > >>>>>>> speciesCheckList = new JList(speciesListModel);
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> If the species list changes, have the species list model
>>> >>>>>> > >> fire the appropriate list change event (the JavaDoc API has a
>>> bunch
>>> >>>>>> > >> of fire* methods). To keep things simple, there is a "full
>>> update"
>>> >>>>>> > >> event which just says "rebuild the entire JList." That one
>>> should
>>> >>>>>> > >> be OK. There are finer-grained ones like "something got
>>> inserted"
>>> >>>>>> > >> and "something got removed," but that really is more for
>>> optimization purposes.
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> As for the text display, the simplest approach is to
>>> >>>>>> > >> implement the toString method of the SpeciesProfile class so
>>> that
>>> >>>>>> > >> they return something that is appropriate for a JList.
>>> Sometimes
>>> >>>>>> > >> that is too limiting though. If you want greater
>>> flexibility, you
>>> >>>>>> > >> will want to implement a ListCellRenderer. There is a class
>>> called
>>> >>>>>> > >> DefaultListCellRenderer that you can extend. Typically the
>>> >>>>>> > >> subclass would call the superclass's method, which returns a
>>> >>>>>> > >> JLabel. You can then change the content of the JLabel
>>> according to
>>> >>>>>> > >> the list item that you are trying to display.
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> See if these leads are enough to go on. If not, I can
>>> talk
>>> >>>>>> > >> you through them more during the call.
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> John David N. Dionisio, PhD
>>> >>>>>> > >>>>>>> Associate Professor, Computer Science
>>> >>>>>> > >>>>>>> Loyola Marymount University
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>> On Jul 12, 2011, at 6:00 PM, Richard Brous wrote:
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>>> Update for tomorrow 7/13/11:
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> Clear on what I need to do but can't seem to figure out
>>> a
>>> >>>>>> > >> way to do it. I think the best use of our time tomorrow is to
>>> make
>>> >>>>>> > >> it a code discussion session (giving Dr. Dahlquist the
>>> opportunity
>>> >>>>>> > >> to bow out if so inclined)
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> 1. In regard to the JList, I have been working on the
>>> best
>>> >>>>>> > >> way to implement it but am getting stuck on how to populate
>>> it and
>>> >>>>>> > >> where to do so in the code.
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> I'm currently working in ExportPanel1.java and have
>>> done
>>> >>>>>> > >> the following so far:
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> imported JList;
>>> >>>>>> > >>>>>>>> imported javax.swing.event.*;
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> public class ExportPanel1 extends JPanel {
>>> >>>>>> > >>>>>>>> added: private JList speciesCheckList;
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> private JPanel getContentPanel () {
>>> >>>>>> > >>>>>>>> underneath the species combo box entry // species |
>>> >>>>>> > >> JComboBox | speciesFound |JLabel | Description | ...
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> added: speciesCheckList = new JList (
>>> speciesProfilesFound );
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> // registered the listeners
>>> >>>>>> > >>>>>>>> speciesCheckList.addListSelectionListener ( new
>>> >>>>>> > >> ListSelectionListener () {
>>> >>>>>> > >>>>>>>> // handle list selection
>>> >>>>>> > >>>>>>>> public void valueChanged ( ListSelectionEvent e ) {
>>> >>>>>> > >>>>>>>> // get selected indices
>>> >>>>>> > >>>>>>>> int [] indices = speciesCheckList.getSelectedIndices
>>> ();
>>> >>>>>> > >>>>>>>> }
>>> >>>>>> > >>>>>>>> });
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> added: //leftPanel.add ( speciesComboBox );
>>> >>>>>> > >>>>>>>> leftPanel.add ( speciesCheckList );
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> The real issue here is how to populate the JList... I
>>> took
>>> >>>>>> > >> a look at the constructors but can't determine a way to
>>> populate it
>>> >>>>>> > >> after instantiation... maybe using abstract class somehow?
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> So instead I have been working to add the
>>> >>>>>> > >> speciesProfilesFound [] ArrayList as a constructor argument.
>>> Then I
>>> >>>>>> > >> can pre-populate it prior to the contentPanel being
>>> >>>>>> > >> initialized???... or possibly similar to the init() method
>>> which
>>> >>>>>> > >> pre-populates the Database profileComboBox?
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> Once the initital population of the JList is done we
>>> can
>>> >>>>>> > >> modify it for the later methods which dynamically alter
>>> content in
>>> >>>>>> > >> databaseProfileSelected() and speciesProfileSelected(). This
>>> will
>>> >>>>>> > >> effect the selectedSpeciesProfile() method usage and its
>>> getter and setter.
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> Also we can then work on the text indication which
>>> >>>>>> > >> dynamically shows the selected species and whether a custom
>>> or
>>> >>>>>> > >> generic profile has been associated.
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> Dondi - I'm looking forward to your suggestions and
>>> assistance!!!
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> Richard
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> On Wed, Jul 6, 2011 at 10:58 PM, John David N. Dionisio
>>> >>>>>> > >> <do...@lm...> wrote:
>>> >>>>>> > >>>>>>>> Hi Rich,
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> OK, thanks for the discussion setup. We'll work
>>> through
>>> >>>>>> > >> this during the call.
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> John David N. Dionisio, PhD
>>> >>>>>> > >>>>>>>> Associate Professor, Computer Science
>>> >>>>>> > >>>>>>>> Loyola Marymount University
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> On Jul 6, 2011, at 7:37 PM, Richard Brous wrote:
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>>> Update on status:
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Over the past two weeks I have spent time doing the
>>> following:
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> 1. Reviewed the taxon id code changes which Don Murphy
>>> >>>>>> > >> coded and were merged to create version 2.0 b64
>>> >>>>>> > >>>>>>>>> 2. Reviewed the UniprotDatabaseProfile,
>>> >>>>>> > >> UniprotSpeciesProfile, SpeciesProfile, Profile and
>>> DatabaseProfile files
>>> >>>>>> > >>>>>>>>> 3. Reviewed and discussed the process by which GenMAPP
>>> >>>>>> > >> matches single taxon ids found in a Postgres db with the
>>> known
>>> >>>>>> > >> species profiles.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Current actions:
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> During the last few days I have started coding in the
>>> >>>>>> > >> ability for the species matching functionality to surface
>>> multiple
>>> >>>>>> > >> taxon ids from within a Postgres db.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> The process being the following steps:
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> 1. Grab all the taxon ids from the Postgres db
>>> >>>>>> > >>>>>>>>> The current iteration of the software already does
>>> this.
>>> >>>>>> > >> In the checkRequirements method in
>>> UniprotDatabaseProfile.java, a
>>> >>>>>> > >> query of the Postgres db acquires all taxon id's and stores
>>> them in
>>> >>>>>> > >> ResultSet result variable.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> 2. Check to find match between the taxon ids from
>>> >>>>>> > >> Postgres against existing species profiles for known species.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> The current iteration compares each taxon id in
>>> ResultSet
>>> >>>>>> > >> result variable.
>>> >>>>>> > >>>>>>>>> First taxon id from result:
>>> >>>>>> > >>>>>>>>> If match was found, then that species profile with
>>> >>>>>> > >> associated taxon id was added to the speciesProfilesFound
>>> arraylist.
>>> >>>>>> > >>>>>>>>> If no match was found, a generic species profile
>>> >>>>>> > >> associated with the current taxon id was added to the
>>> >>>>>> > >> speciesProfilesFound arraylist.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Next taxon id from result
>>> >>>>>> > >>>>>>>>> If match was found, then that species profile with
>>> >>>>>> > >> associated taxon id was added to the speciesProfilesFound
>>> arraylist.
>>> >>>>>> > >>>>>>>>> If no match was found, a generic species profile
>>> >>>>>> > >> associated with the current taxon id was added to the
>>> >>>>>> > >> speciesProfilesFound arraylist.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Repeat until no more taxon ids are found in ResultSet
>>> >>>>>> > >> result variable.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> 3. Replace the JComboBox with a JList to allow the
>>> user
>>> >>>>>> > >> to choose a selection of multiple species to export.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Use the getSelectedIndices method for JList to
>>> determine
>>> >>>>>> > >> which species have been selected for export.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> 4. Modify the export process to run a pass for each
>>> >>>>>> > >> species selected to generate a multispecies gdb.
>>> >>>>>> > >>>>>>>>> details to be determined.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>
>>> -----------------------------------------------------------------------------------------------------------------------------------------------------------
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Discussion for tomorrows call:
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> We previously discussed allowing user input to
>>> manually
>>> >>>>>> > >> add taxon ids and associate them to the generic profile.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Unless I don't really understand the reasoning behind
>>> >>>>>> > >> this, it seems to me that it is unnecessary. Why would we add
>>> a
>>> >>>>>> > >> taxon id during the export process that isn't already in the
>>> Postgres data?
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> The current implementation already captures every
>>> taxon
>>> >>>>>> > >> id in speciesProfilesFound regardless if its a known species
>>> or
>>> >>>>>> > >> not. So it seems that we don't need to make any modifications
>>> in
>>> >>>>>> > >> surfacing taxon ids from a Postgres db.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Then we can go directly to #3 above which I have
>>> mostly
>>> >>>>>> > >> coded, but can't seem to figure out how and where to populate
>>> the
>>> >>>>>> > >> JList. In reviewing constructor documentation it indicates 4
>>> ways
>>> >>>>>> > >> to instantiate.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> My first choice was to create an empty JList [ JList
>>> () ]
>>> >>>>>> > >> and populate it later but I don't see a method to do so such
>>> as
>>> >>>>>> > >> addItems or something similar.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> I then tried to instantiate with speciesProfileFound
>>> as
>>> >>>>>> > >> an array argument: JList ( SpeciesProfile[]
>>> speciesProfilesFound )
>>> >>>>>> > >> but can't resolve.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Anyway, I look forward to our call at 9am tomorrow.
>>> >>>>>> > >>>>>>>>>
>>> >>>>>> > >>>>>>>>> Richard
>>> >>>>>> > >>>>>>>>> <ATT00001..txt><ATT00002..txt>
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>
>>> ------------------------------------------------------------------------------
>>> >>>>>> > >>>>>>>> All of the data generated in your IT infrastructure is
>>> >>>>>> > >> seriously valuable.
>>> >>>>>> > >>>>>>>> Why? It contains a definitive record of application
>>> >>>>>> > >> performance, security
>>> >>>>>> > >>>>>>>> threats, fraudulent activity, and more. Splunk takes
>>> this
>>> >>>>>> > >> data and makes
>>> >>>>>> > >>>>>>>> sense of it. IT sense. And common sense.
>>> >>>>>> > >>>>>>>> http://p.sf.net/sfu/splunk-d2d-c2
>>> >>>>>> > >>>>>>>> _______________________________________________
>>> >>>>>> > >>>>>>>> xmlpipedb-developer mailing list
>>> >>>>>> > >>>>>>>> xml...@li...
>>> >>>>>> > >>>>>>>>
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>> > >>>>>>>>
>>> >>>>>> > >>>>>>>> <ATT00001..txt><ATT00002..txt>
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>>>>>>
>>> >>>>>> > >>
>>> ------------------------------------------------------------------------------
>>> >>>>>> > >>>>>>> AppSumo Presents a FREE Video for the SourceForge
>>> Community by Eric
>>> >>>>>> > >>>>>>> Ries, the creator of the Lean Startup Methodology on
>>> "Lean Startup
>>> >>>>>> > >>>>>>> Secrets Revealed." This video shows you how to validate
>>> your ideas,
>>> >>>>>> > >>>>>>> optimize your ideas and identify your business strategy.
>>> >>>>>> > >>>>>>> http://p.sf.net/sfu/appsumosfdev2dev
>>> >>>>>> > >>>>>>> _______________________________________________
>>> >>>>>> > >>>>>>> xmlpipedb-developer mailing list
>>> >>>>>> > >>>>>>> xml...@li...
>>> >>>>>> > >>>>>>>
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>> > >>>>>>
>>> >>>>>> > >>>>>>
>>> >>>>>> > >>
>>> ------------------------------------------------------------------------------
>>> >>>>>> > >>>>>> AppSumo Presents a FREE Video for the SourceForge
>>> Community by Eric
>>> >>>>>> > >>>>>> Ries, the creator of the Lean Startup Methodology on
>>> "Lean Startup
>>> >>>>>> > >>>>>> Secrets Revealed." This video shows you how to validate
>>> your ideas,
>>> >>>>>> > >>>>>> optimize your ideas and identify your business strategy.
>>> >>>>>> > >>>>>> http://p.sf.net/sfu/appsumosfdev2dev
>>> >>>>>> > >>>>>> _______________________________________________
>>> >>>>>> > >>>>>> xmlpipedb-developer mailing list
>>> >>>>>> > >>>>>> xml...@li...
>>> >>>>>> > >>>>>>
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>>
>>> >>>>>> > >>>>>
>>> >>>>>> > >>
>>> ------------------------------------------------------------------------------
>>> >>>>>> > >>>>> Magic Quadrant for Content-Aware Data Loss Prevention
>>> >>>>>> > >>>>> Research study explores the data loss prevention market.
>>> >>>>>> > >> Includes in-depth
>>> >>>>>> > >>>>> analysis on the changes within the DLP market, and the
>>> criteria used to
>>> >>>>>> > >>>>> evaluate the strengths and weaknesses of these DLP
>>> solutions.
>>> >>>>>> > >>>>> http://www.accelacomm.com/jaw/sfnl/114/51385063/
>>> >>>>>> > >>>>> _______________________________________________
>>> >>>>>> > >>>>> xmlpipedb-developer mailing list
>>> >>>>>> > >>>>> xml...@li...
>>> >>>>>> > >>>>>
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>> > >>>>
>>> >>>>>> > >>>> <ATT00001..txt><ATT00002..txt>
>>> >>>>>> > >>>
>>> >>>>>> > >>>
>>> >>>>>> > >>>
>>> >>>>>> > >>
>>> ------------------------------------------------------------------------------
>>> >>>>>> > >>> 10 Tips for Better Web Security
>>> >>>>>> > >>> Learn 10 ways to better secure your business today. Topics
>>> covered include:
>>> >>>>>> > >>> Web security, SSL, hacker attacks & Denial of Service (DoS),
>>> private keys,
>>> >>>>>> > >>> security Microsoft Exchange, secure Instant Messaging, and
>>> much more.
>>> >>>>>> > >>> http://www.accelacomm.com/jaw/sfnl/114/51426210/
>>> >>>>>> > >>> _______________________________________________
>>> >>>>>> > >>> xmlpipedb-developer mailing list
>>> >>>>>> > >>> xml...@li...
>>> >>>>>> > >>>
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>> > >>>
>>> >>>>>> > >>> <ATT00001..txt><ATT00002..txt>
>>> >>>>>> > >>
>>> >>>>>> > >>
>>> >>>>>> > >>
>>> ------------------------------------------------------------------------------
>>> >>>>>> > >> 10 Tips for Better Web Security
>>> >>>>>> > >> Learn 10 ways to better secure your business today. Topics
>>> covered include:
>>> >>>>>> > >> Web security, SSL, hacker attacks & Denial of Service (DoS),
>>> private keys,
>>> >>>>>> > >> security Microsoft Exchange, secure Instant Messaging, and
>>> much more.
>>> >>>>>> > >> http://www.accelacomm.com/jaw/sfnl/114/51426210/
>>> >>>>>> > >> _______________________________________________
>>> >>>>>> > >> xmlpipedb-developer mailing list
>>> >>>>>> > >> xml...@li...
>>> >>>>>> > >>
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>> > >
>>> >>>>>> > >
>>> >>>>>> > >
>>> ------------------------------------------------------------------------------
>>> >>>>>> > > 10 Tips for Better Web Security
>>> >>>>>> > > Learn 10 ways to better secure your business today. Topics
>>> covered include:
>>> >>>>>> > > Web security, SSL, hacker attacks & Denial of Service (DoS),
>>> private keys,
>>> >>>>>> > > security Microsoft Exchange, secure Instant Messaging, and
>>> much more.
>>> >>>>>> > > http://www.accelacomm.com/jaw/sfnl/114/51426210/
>>> >>>>>> > > _______________________________________________
>>> >>>>>> > > xmlpipedb-developer mailing list
>>> >>>>>> > > xml...@li...
>>> >>>>>> > >
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>> >
>>> >>>>>> >
>>> ------------------------------------------------------------------------------
>>> >>>>>> > 10 Tips for Better Web Security
>>> >>>>>> > Learn 10 ways to better secure your business today. Topics
>>> covered include:
>>> >>>>>> > Web security, SSL, hacker attacks & Denial of Service (DoS),
>>> private keys,
>>> >>>>>> > security Microsoft Exchange, secure Instant Messaging, and much
>>> more.
>>> >>>>>> > http://www.accelacomm.com/jaw/sfnl/114/51426210/
>>> >>>>>> > _______________________________________________
>>> >>>>>> > xmlpipedb-developer mailing list
>>> >>>>>> > xml...@li...
>>> >>>>>> >
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>> >
>>> >>>>>> > <export1-crop.jpg><ATT00001..txt><ATT00002..txt>
>>> >>>>>>
>>> >>>>>>
>>> ------------------------------------------------------------------------------
>>> >>>>>> 5 Ways to Improve & Secure Unified Communications
>>> >>>>>> Unified Communications promises greater efficiencies for business.
>>> UC can
>>> >>>>>> improve internal communications as well as offer faster, more
>>> efficient ways
>>> >>>>>> to interact with customers and streamline customer service. Learn
>>> more!
>>> >>>>>> http://www.accelacomm.com/jaw/sfnl/114/51426253/
>>> >>>>>> _______________________________________________
>>> >>>>>> xmlpipedb-developer mailing list
>>> >>>>>> xml...@li...
>>> >>>>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> ------------------------------------------------------------------------------
>>> >>>>>> Got Input? Slashdot Needs You.
>>> >>>>>> Take our quick survey online. Come on, we don't ask for help
>>> often.
>>> >>>>>> Plus, you'll get a chance to win $100 to spend on ThinkGeek.
>>> >>>>>> http://p.sf.net/sfu/slashdot-survey
>>> >>>>>> _______________________________________________
>>> >>>>>> xmlpipedb-developer mailing list
>>> >>>>>> xml...@li...
>>> >>>>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>
>>> ------------------------------------------------------------------------------
>>> >>>>> Got Input? Slashdot Needs You.
>>> >>>>> Take our quick survey online. Come on, we don't ask for help
>>> often.
>>> >>>>> Plus, you'll get a chance to win $100 to spend on ThinkGeek.
>>> >>>>> http://p.sf.net/sfu/slashdot-survey
>>> >>>>> _______________________________________________
>>> >>>>> xmlpipedb-developer mailing list
>>> >>>>> xml...@li...
>>> >>>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>>>
>>> >>>>>
>>> >>>>
>>> ------------------------------------------------------------------------------
>>> >>>> BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
>>> >>>> The must-attend event for mobile developers. Connect with experts.
>>> >>>> Get tools for creating Super Apps. See the latest technologies.
>>> >>>> Sessions, hands-on labs, demos & much more. Register early & save!
>>> >>>> http://p.sf.net/sfu/rim-blackberry-1
>>> >>>> _______________________________________________
>>> >>>> xmlpipedb-developer mailing list
>>> >>>> xml...@li...
>>> >>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> >>>
>>> >>
>>> ------------------------------------------------------------------------------
>>> >> BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
>>> >> The must-attend event for mobile developers. Connect with experts.
>>> >> Get tools for creating Super Apps. See the latest technologies.
>>> >> Sessions, hands-on labs, demos & much more. Register early & save!
>>> >> http://p.sf.net/sfu/rim-blackberry-1
>>> >> _______________________________________________
>>> >> xmlpipedb-developer mailing list
>>> >> xml...@li...
>>> >> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>> > <ATT00001..txt><ATT00002..txt>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
>>> The must-attend event for mobile developers. Connect with experts.
>>> Get tools for creating Super Apps. See the latest technologies.
>>> Sessions, hands-on labs, demos & much more. Register early & save!
>>> http://p.sf.net/sfu/rim-blackberry-1
>>> _______________________________________________
>>> xmlpipedb-developer mailing list
>>> xml...@li...
>>> https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
>>>
>>
>>
>
|