Changeset 519 for trunk

Show
Ignore:
Timestamp:
06/05/11 13:04:06 (12 months ago)
Author:
martijn
Message:

Allow concurrent modification of IDMapperStack;
Thanks to Leon Mei from BioAssist? for suggesting this fix.

Location:
trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/org.bridgedb.rdb/src/org/bridgedb/rdb/GdbProvider.java

    r513 r519  
    5656                        organism2gdb.put(organism, l = new IDMapperStack()); 
    5757                        l.setTransitive(transitive); 
     58                        for (IDMapper globalGdb : globalGdbs) 
     59                        { 
     60                                l.addIDMapper(globalGdb); 
     61                        } 
    5862                } 
    5963                l.addIDMapper(gdb); 
     
    6872         
    6973        public void addGlobalGdb(IDMapper gdb) { 
    70                 if(!globalGdbs.contains(gdb)) globalGdbs.add(gdb); 
     74                if(!globalGdbs.contains(gdb))  
     75                { 
     76                        globalGdbs.add(gdb); 
     77                        for (Organism org : organism2gdb.keySet()) 
     78                        { 
     79                                organism2gdb.get(org).addIDMapper(gdb); 
     80                        } 
     81                } 
    7182        } 
    7283         
    7384        public void removeGlobalGdb(IDMapper gdb) { 
    74                 globalGdbs.remove(gdb); 
     85                if (globalGdbs.contains(gdb)) 
     86                { 
     87                        globalGdbs.remove(gdb); 
     88                        for (Organism org : organism2gdb.keySet()) 
     89                        { 
     90                                organism2gdb.get(org).removeIDMapper(gdb); 
     91                        } 
     92                } 
    7593        } 
    7694         
     
    86104                        gdbs = new IDMapperStack(); 
    87105                        gdbs.setTransitive(transitive); 
    88                 } 
    89                 for (IDMapper globalGdb : globalGdbs) 
    90                 { 
    91                         gdbs.addIDMapper(globalGdb); 
     106                        for (IDMapper globalGdb : globalGdbs) 
     107                        { 
     108                                gdbs.addIDMapper(globalGdb); 
     109                        } 
    92110                } 
    93111                return gdbs; 
     
    97115         
    98116        private final boolean transitive; 
    99         GdbProvider() { this(false); } 
    100         GdbProvider(boolean transitive) 
     117        public GdbProvider() { this(false); } 
     118        public GdbProvider(boolean transitive) 
    101119        { 
    102120                this.transitive = transitive; 
  • trunk/org.bridgedb/src/org/bridgedb/IDMapperStack.java

    r506 r519  
    1717package org.bridgedb; 
    1818 
    19 import java.util.ArrayList; 
    2019import java.util.Arrays; 
    2120import java.util.Collection; 
     
    2625import java.util.Map; 
    2726import java.util.Set; 
     27import java.util.concurrent.CopyOnWriteArrayList; 
    2828 
    2929/** 
     
    4242public class IDMapperStack implements IDMapper, AttributeMapper 
    4343{ 
    44         private List<IDMapper> gdbs = new ArrayList<IDMapper>(); 
     44        private List<IDMapper> gdbs = new CopyOnWriteArrayList<IDMapper>(); 
    4545 
    4646        /**