| 
01 /*02  * Copyright 2008-2015 the original author or authors.
 03  *
 04  * Licensed under the Apache License, Version 2.0 (the "License");
 05  * you may not use this file except in compliance with the License.
 06  * You may obtain a copy of the License at
 07  *
 08  *     http://www.apache.org/licenses/LICENSE-2.0
 09  *
 10  * Unless required by applicable law or agreed to in writing, software
 11  * distributed under the License is distributed on an "AS IS" BASIS,
 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  * See the License for the specific language governing permissions and
 14  * limitations under the License.
 15  */
 16 package griffon.builder.core.factory
 17
 18 /**
 19  * Identifies the top level node of a script
 20  *
 21  * @author Andres Almiray
 22  */
 23 @SuppressWarnings("rawtypes")
 24 class RootFactory extends AbstractFactory {
 25     final boolean leaf = true
 26
 27     Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes) {
 28         String rootName = attributes.remove('name') ?: 'root'
 29         attributes.clear()
 30         if (null == value) {
 31             String scriptName = builder.variables[FactoryBuilderSupport.SCRIPT_CLASS_NAME]
 32             if (!scriptName) return null
 33             String varName = scriptName + '-' + rootName
 34             value = builder.variables[varName]
 35         } else if (value instanceof CharSequence) {
 36             String scriptName = builder.variables[FactoryBuilderSupport.SCRIPT_CLASS_NAME]
 37             if (!scriptName) return null
 38             String varName = scriptName + '-' + value.toString()
 39             value = builder.variables[varName]
 40         } else if (value instanceof Class) {
 41             String varName = value.name + '-' + rootName
 42             return builder.variables[varName]
 43         } else {
 44             String scriptName = builder.variables[FactoryBuilderSupport.SCRIPT_CLASS_NAME]
 45             if (!scriptName) return null
 46             String varName = scriptName + '-' + rootName
 47             builder.variables[varName] = value
 48             builder.variables[scriptName + '-root'] = value
 49         }
 50         value
 51     }
 52 }
 |