001    /*
002    @license.text@
003     */
004    package biz.hammurapi.util;
005    
006    import java.util.Arrays;
007    import java.util.Collection;
008    import java.util.Iterator;
009    import java.util.LinkedList;
010    
011    /**
012     * Accepts element if all included acceptors accept.
013     * @author Pavel Vlasov 
014     * @version $Revision: 1.1 $
015     */
016    public class CompositeAcceptor implements Acceptor {
017            private Collection acceptors=new LinkedList();
018    
019            /**
020             * Default constructor. 
021             */
022            public CompositeAcceptor() {
023            }
024            
025            /**
026             * 
027             */
028            public CompositeAcceptor(Collection acceptors) {
029                    if (acceptors!=null) {
030                            this.acceptors.addAll(acceptors);
031                    }
032            }
033            
034            /**
035             * 
036             */
037            public CompositeAcceptor(Acceptor[] acceptors) {
038                    if (acceptors!=null) {
039                            this.acceptors.addAll(Arrays.asList(acceptors));
040                    }
041            }
042            
043            public void addAcceptor(Acceptor acceptor) {
044                    if (acceptor!=null) {
045                            acceptors.add(acceptor);
046                    }
047            }
048            
049            public void removeAcceptor(Acceptor acceptor) {
050                    acceptors.remove(acceptor);
051            }
052            
053            /* (non-Javadoc)
054             * @see biz.hammurapi.uml.Acceptor#accept(biz.hammurapi.uml.ModelElement)
055             */
056            public boolean accept(Object element) {
057                    Iterator it=acceptors.iterator();
058                    while (it.hasNext()) {
059                            Acceptor acceptor=(Acceptor) it.next();
060                            if (!acceptor.accept(element))  {
061                                    return false;
062                            }
063                    }
064                    return true;
065            }
066    }