001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019package lucee.runtime.type.cfc;
020
021import java.util.Iterator;
022import java.util.Map.Entry;
023
024import lucee.runtime.Component;
025import lucee.runtime.type.Collection.Key;
026import lucee.runtime.type.it.EntryIterator;
027import lucee.runtime.type.util.ComponentProUtil;
028
029public class ComponentEntryIterator extends EntryIterator implements Iterator<Entry<Key, Object>> {
030
031        private Component cfc;
032        private int access;
033
034        public ComponentEntryIterator(Component cfc, Key[] keys, int access) { 
035                super(cfc,keys);
036                this.cfc=cfc;
037                this.access=access;
038        }
039
040        @Override
041        public Entry<Key, Object> next() {
042                Key key = keys[pos++];
043                if(key==null) return null;
044                return new CAEntryImpl(cfc,key,access);
045        }
046        
047        public class CAEntryImpl extends EntryImpl implements Entry<Key, Object> {
048                
049                private Component cfc;
050                private int access;
051
052                public CAEntryImpl(Component cfc, Key key, int access) {
053                        super(cfc,key);
054                        this.cfc=cfc;
055                        this.access=access;
056                }
057
058                @Override
059                public Object getValue() {
060                        return ComponentProUtil.get(cfc,access,key,null);
061                }
062
063                @Override
064                public Object setValue(Object value) {
065                        return cfc.setEL(key, value);
066                }
067
068        }
069}