RootFactory.groovy
01 /*
02  * Copyright 2008-2016 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 (!scriptNamereturn 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 (!scriptNamereturn 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 (!scriptNamereturn null
46             String varName = scriptName + '-' + rootName
47             builder.variables[varName= value
48             builder.variables[scriptName + '-root'] = value
49         }
50         value
51     }
52 }