PanelFactory.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.lanterna.factory
17 
18 import com.googlecode.lanterna.gui.component.Panel
19 
20 /**
21  @author Andres Almiray
22  */
23 class PanelFactory extends ComponentFactory {
24     PanelFactory() {
25         super(Panel)
26     }
27 
28     Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributesthrows InstantiationException, IllegalAccessException {
29         def orientation = attributes.remove('orientation') ?: Panel.Orientation.HORISONTAL
30         if (orientation instanceof CharSequence) {
31             orientation = orientation.toString().toLowerCase()
32             switch (orientation) {
33                 case 'vertical':
34                     orientation = Panel.Orientation.VERTICAL
35                     break
36                 case 'horizontal':
37                 case 'horisontal':
38                 default:
39                     orientation = Panel.Orientation.HORISONTAL
40             }
41         else if (!(orientation instanceof Panel.Orientation)) {
42             throw new IllegalArgumentException("In $name the value of orientation: must be either 'horisontal' or 'vertical'.")
43         }
44 
45         value instanceof CharSequence ? new Panel(value.toString(), orientationnew Panel(orientation)
46     }
47 }