001    /*
002     * Copyright © 2008, 2009 Pedro Agulló Soliveres.
003     * 
004     * This file is part of DirectJNgine.
005     *
006     * DirectJNgine is free software: you can redistribute it and/or modify
007     * it under the terms of the GNU General Public License as published by
008     * the Free Software Foundation, either version 3 of the License.
009     *
010     * Commercial use is permitted to the extent that the code/component(s)
011     * do NOT become part of another Open Source or Commercially developed
012     * licensed development library or toolkit without explicit permission.
013     *
014     * DirectJNgine is distributed in the hope that it will be useful,
015     * but WITHOUT ANY WARRANTY; without even the implied warranty of
016     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017     * GNU General Public License for more details.
018     *
019     * You should have received a copy of the GNU General Public License
020     * along with DirectJNgine.  If not, see <http://www.gnu.org/licenses/>.
021     * 
022     * This software uses the ExtJs library (http://extjs.com), which is 
023     * distributed under the GPL v3 license (see http://extjs.com/license).
024     */
025    
026    package com.softwarementors.extjs.djn.api;
027    
028    import java.util.ArrayList;
029    import java.util.HashMap;
030    import java.util.List;
031    import java.util.Map;
032    
033    import com.softwarementors.extjs.djn.StringUtils;
034    
035    public class RegisteredAction {
036    
037      private Class<?> actionClass;
038      private String name;
039      private Map<String, RegisteredMethod> methodsByName; 
040      
041      
042      /* package */ RegisteredAction( Class<?> actionClass, String name ) { 
043        assert actionClass != null;
044        assert !StringUtils.isEmpty(name);
045        
046        this.actionClass = actionClass;
047        this.name = name;
048      }
049      
050      public Class<?> getActionClass() {
051        return this.actionClass;
052      }
053      
054      public String getName() {
055        return this.name;
056      }
057    
058      public RegisteredMethod getMethod(String methodName) {
059        assert !StringUtils.isEmpty(methodName);
060        assert isMethodsSet();
061        
062        return this.methodsByName.get( methodName );
063      }
064    
065      /* package */ boolean isMethodRegistered(String methodName) {
066        assert !StringUtils.isEmpty(methodName);
067        assert isMethodsSet();
068        
069        return this.methodsByName.containsKey(methodName);
070      }
071    
072      // Would have love to be able to set this in the constructor,
073      // but unfortunately we need to create instances of this
074      // class in two phases, calling this method being the second phase.
075      /* package */ void setMethods( Map<String, RegisteredMethod> methodsByName ) {
076        assert methodsByName != null;
077        assert !isMethodsSet();
078        
079        this.methodsByName = new HashMap<String, RegisteredMethod>(methodsByName);
080      }
081    
082      /* package */ boolean isMethodsSet() {
083        return this.methodsByName != null;
084      }
085    
086      public List<RegisteredMethod> getMethods() {
087        return new ArrayList<RegisteredMethod>( this.methodsByName.values() );
088      }
089    }