001    // Copyright 2004, 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry.engine;
016    
017    import org.apache.hivemind.util.Defense;
018    import org.apache.tapestry.IDirect;
019    import org.apache.tapestry.IDynamicInvoker;
020    
021    import java.util.Collection;
022    
023    /**
024     * Parameter object used by {@link org.apache.tapestry.engine.DirectService}.
025     * 
026     * @author Howard M. Lewis Ship
027     * @since 4.0
028     */
029    public class DirectServiceParameter
030    {
031        private IDirect _direct;
032    
033        private Object[] _serviceParameters;
034    
035        private String[] _updateParts;
036        
037        private boolean _json;
038        
039        private boolean _async;
040        
041        public DirectServiceParameter(IDirect direct)
042        {
043            this(direct, null);
044        }
045        
046        public DirectServiceParameter(IDirect direct, Object[] serviceParameters)
047        {
048            this(direct, serviceParameters, null);
049        }
050        
051        public DirectServiceParameter(IDirect direct, Object[] serviceParameters, IDynamicInvoker invoker)
052        {
053            Defense.notNull(direct, "direct");
054            
055            _direct = direct;
056            _serviceParameters = serviceParameters;
057            
058            if (invoker == null) {
059                
060                Collection comps = direct.getUpdateComponents();
061                if (comps == null)
062                    _updateParts = new String[0];
063                else
064                    _updateParts = (String[])comps.toArray(new String[comps.size()]);
065                
066                _json = direct.isJson();
067                _async = direct.isAsync();
068            } else {
069                
070                Collection comps = invoker.getUpdateComponents();
071                if (comps == null)
072                    _updateParts = new String[0];
073                else
074                    _updateParts = (String[])comps.toArray(new String[comps.size()]);
075                
076                _json = invoker.isJson();
077                _async = invoker.isAsync();
078            }
079            
080            // if they gave only an updateComponents param make it async by default
081            
082            if (!_json && !_async && _updateParts.length > 0)
083                _async = true;
084        }
085        
086        public IDirect getDirect()
087        {
088            return _direct;
089        }
090    
091        public Object[] getServiceParameters()
092        {
093            return _serviceParameters;
094        }
095    
096        public String[] getUpdateParts()
097        {
098            return _updateParts;
099        }
100        
101        public boolean isJson()
102        {
103            return _json;
104        }
105        
106        public boolean isAsync()
107        {
108            return _async;
109        }
110    }