001    /*
002      GRANITE DATA SERVICES
003      Copyright (C) 2011 GRANITE DATA SERVICES S.A.S.
004    
005      This file is part of Granite Data Services.
006    
007      Granite Data Services is free software; you can redistribute it and/or modify
008      it under the terms of the GNU Library General Public License as published by
009      the Free Software Foundation; either version 2 of the License, or (at your
010      option) any later version.
011    
012      Granite Data Services is distributed in the hope that it will be useful, but
013      WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014      FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
015      for more details.
016    
017      You should have received a copy of the GNU Library General Public License
018      along with this library; if not, see <http://www.gnu.org/licenses/>.
019    */
020    
021    package org.granite.config;
022    
023    import java.util.List;
024    
025    import org.granite.messaging.amf.io.util.ActionScriptClassDescriptor;
026    import org.granite.util.ClassUtil;
027    
028    /**
029     * @author Franck WOLFF
030     */
031    public class ActionScriptClassDescriptorFactory implements ConfigurableFactory<Class<? extends ActionScriptClassDescriptor>> {
032    
033        private static final class NullActionScriptClassDescriptor extends ActionScriptClassDescriptor {
034            public NullActionScriptClassDescriptor(String type, byte encoding) {
035                super(type, encoding);
036                throw new RuntimeException("Not implemented");
037            }
038            @Override
039            public void defineProperty(String name) {
040            }
041            @Override
042            public Object newJavaInstance() {
043                return null;
044            }
045        }
046        private static final Class<? extends ActionScriptClassDescriptor> NULL_ASC_DESCRIPTOR
047            = NullActionScriptClassDescriptor.class;
048    
049        public Class<? extends ActionScriptClassDescriptor> getNullInstance() {
050            return NULL_ASC_DESCRIPTOR;
051        }
052    
053        public Class<? extends ActionScriptClassDescriptor> getInstance(String type, GraniteConfig config) throws GraniteConfigException {
054            try {
055                return ClassUtil.forName(type, ActionScriptClassDescriptor.class);
056            } catch (Exception e) {
057                throw new GraniteConfigException("Could not load ActionScriptClassDescriptor type: " + type, e);
058            }
059        }
060    
061        public Class<? extends ActionScriptClassDescriptor> getInstanceForBean(
062            List<Class<? extends ActionScriptClassDescriptor>> scannedConfigurables,
063            Class<?> beanClass,
064            GraniteConfig config) throws GraniteConfigException {
065    
066            return NULL_ASC_DESCRIPTOR;
067        }
068    }