Re: Q: Pattern for this?



Casper B wrote:
You are right, reflection does not allow one to create fields, etc. dynamically. But I do not understand why you would want to. The advantage of creating fields, methods, etc. is to invoke them by name, in code. If you are doing that, then you already know what the names are and you do not need to make them dynamically.

Perhaps you are looking for a simple java.util.Map implementation?


I apologise if my explanation of the problem was inadequate, I'll try to be a little more verbose.

My flatfile parser accepts a simple grammar (XML file) and an flat file (inputstream) to parse. The result of this is a 2-dimensional array of records (1'st dimension) with fields (2'nd dimension).

However, when time comes to actually use these records in other parts of my applications, the fields within the records have to be accessed through indices.

    Records[record][field];

This is hard to build on and error-prone, especially as I am aiming for a generic loosely-coupled design to parse any kind of flat file.

What I would love is to be able to use methods of the record to access specific fields. This means I would somehow need to encapsulate a simple record array, which currently looks like this:
Record{"Martin", "Short", "37"}


...and wrap, such that I can now access the records by appropiate calls:

    getFirstname() // Returns Record[0] ("Martin")

Rather than letting fields be placed into a record array, I would be happy with a solution where the desired "record object" is passed to the parser, such that it can use this very object (which has the desired accessors) to represent a record in the array.

    parse(InputStream grammar,InputStream flat, RecordType NameAgeRecord );

This allows other parts of program to use the accessors like this:

    ( (NameAgeRecord) Record[31]).getFirstName();

I think this is the best solution for mapping a flat file, using a descriptive grammar, to a Java runtime object. The problem I have with this solution is that while I can pass an interface, class or object, neither allows me to use "new" when creating the records and placing it into the array. My current idea is that perhaps a factory can help here.


OK, it sounds as if this is the only piece of the puzzle you are missing. What you want is part of reflection, in particular the java.lang.Class.newInstance() method. Look over the javadocs for this method, it is not complex.


You may also be interested in the BeanInfo class.

I hope this explains a little better what I am trying to do, and how I am desperately searching for some way to customize accessors rather than indexing [row][field] as I am currently doing.

Thank you so much for reading!

/Casper

HTH, Ray

--
XML is the programmer's duct tape.
.



Relevant Pages

  • Re: newbie question: the steps of a making a ping service
    ... >> I want to store a list of web addresses in a flat file, and then, once ... >> into an array, then loop though that array and open the pages. ... >> cron, but I think doing this in Java would be more portable, and I ... >> So I'm asking what are the steps involved in making this script? ...
    (comp.lang.java)
  • Re: newbie question: the steps of a making a ping service
    ... > I want to store a list of web addresses in a flat file, and then, once ... > into an array, then loop though that array and open the pages. ... > cron, but I think doing this in Java would be more portable, and I ... > So I'm asking what are the steps involved in making this script? ...
    (comp.lang.java)
  • newbie question: the steps of a making a ping service
    ... I want to store a list of web addresses in a flat file, and then, once ... into an array, then loop though that array and open the pages. ... need to use this service from several servers. ... So I'm asking what are the steps involved in making this script? ...
    (comp.lang.java)
  • Re: Q: Pattern for this?
    ... The result of this is a 2-dimensional array of records with fields. ... Rather than letting fields be placed into a record array, I would be happy with a solution where the desired "record object" is passed to the parser, such that it can use this very object (which has the desired accessors) to represent a record in the array. ... I think this is the best solution for mapping a flat file, using a descriptive grammar, to a Java runtime object. ...
    (comp.lang.java)
  • Re: Error on UBound with Dynamic Array
    ... ReDim Preserve arrSplit+ 1) ... is that arrSplit has not yet been dimmed as having any dimension. ... need to use a dynamic array and may be checking the boundries, ... Public Function Split(csvString As String) As Variant ...
    (microsoft.public.access.modulesdaovba)