On 25/08/2010 11:09, Andreas Truszkowski wrote:
I need your help because I won't get the iterative file reader working.
The probelm is still the cumulativ arriving of the data in the
downstream activies. I mean if I divide my file i.e. into parts of size
50, the downstream
activities get first 50 then 100, 150, ... elements.

At a guess, the problem is that the 'dataList' is never being cleared out after registration with the reference service (this is in IterativeSDFileReaderActivity.work()). The easiest way to deal with this is to move the declaration and construction of dataList to inside the code that is guarded by 'if (line == null || counter >= readSize) {' as then the object will naturally have the correct lifetime (and the garbage collector will handle tidying up after you, of course).

To be exact:

        public Map<String, T2Reference> work(Map<String, T2Reference> inputs, 
AsynchronousActivityCallback callback)
                        throws CDKTavernaException {
                int readSize = (Integer) 
this.getConfiguration().getAdditionalProperty(CDKTavernaConstants.PROPERTY_ITERATIVE_READ_SIZE);
                Map<String, T2Reference> outputs = new HashMap<String, 
T2Reference>();
                InvocationContext context = callback.getContext();
                ReferenceService referenceService = 
context.getReferenceService();
                List<CMLChemFile> cmlChemFileList = null;
                List<byte[]> dataList = new ArrayList<byte[]>();

Move from above:

[...]
                                if (line == null || counter >= readSize) {
                                        CMLChemFile cmlChemFile = new 
CMLChemFile();
                                        MDLV2000Reader tmpMDLReader = new 
MDLV2000Reader(new StringReader(SDFilePart));
                                        tmpMDLReader.read(cmlChemFile);
                                        cmlChemFileList = 
CMLChemFileWrapper.wrapInChemModelList(cmlChemFile);

To here:

                                        // Congfigure output
                                        for (CMLChemFile c : cmlChemFileList) {
                                                
dataList.add(CDKObjectHandler.getBytes(c));
                                        }
                                        T2Reference containerRef = 
referenceService.register(dataList, 1, true, context);
[...]

Hope that helps!

Donal.

<<attachment: donal_k_fellows.vcf>>

------------------------------------------------------------------------------
Sell apps to millions through the Intel(R) Atom(Tm) Developer Program
Be part of this innovative community and reach millions of netbook users 
worldwide. Take advantage of special opportunities to increase revenue and 
speed time-to-market. Join now, and jumpstart your future.
http://p.sf.net/sfu/intel-atom-d2d
_______________________________________________
taverna-hackers mailing list
[email protected]
Web site: http://www.taverna.org.uk
Mailing lists: http://www.taverna.org.uk/about/contact-us/
Developers Guide: http://www.taverna.org.uk/developers/

Reply via email to