/*
 * Copyright 2014-2015 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package demo;

import javafx.application.Application;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Import;

/**
 * @author Thomas Darimont
 */
public abstract class AbstractJavaFxApplicationSupport extends Application {

	private static String[] savedArgs;

	private final ConfigurableApplicationContext applicationContext;

	public AbstractJavaFxApplicationSupport() {
		
		Import configClass = getClass().getAnnotation(Import.class);
		Class<?>[] configClasses = configClass.value();

		applicationContext = SpringApplication.run(configClasses, savedArgs);

		AutowireCapableBeanFactory bf = applicationContext.getAutowireCapableBeanFactory();
		bf.autowireBean(this);
	}

	@Override
	public void stop() throws Exception {
		
		super.stop();
		applicationContext.close();
	}

	protected static void launchApp(Class<? extends AbstractJavaFxApplicationSupport> appClass, String[] args) {
		
		AbstractJavaFxApplicationSupport.savedArgs = args;
		Application.launch(appClass, args);
	}
}

@@ -629,16 +629,93 @@
  demo;%0A%0A
+import java.util.ArrayList;%0Aimport java.util.Arrays;%0Aimport java.util.List;%0A%0A
 import j
@@ -737,32 +737,33 @@
 on.Application;%0A
+%0A
 import org.sprin
@@ -1264,71 +1264,8 @@
 %0A%09%09%0A
-%09%09Import configClass = getClass().getAnnotation(Import.class);%0A
 %09%09Cl
@@ -1289,17 +1289,20 @@
 asses = 
-c
+getC
 onfigCla
@@ -1307,18 +1307,47 @@
 lass
-.value(
+es().stream().toArray(Class%5B%5D::new
 );%0A
+%09%09
 %0A%09%09a
@@ -1419,43 +1419,10 @@
 s);%0A
-%0A
 %09%09
-AutowireCapableBeanFactory bf = 
 appl
@@ -1471,14 +1471,8 @@
 ry()
-;%0A%09%09bf
 .aut
@@ -1486,16 +1486,265 @@
 an(this)
+;%0A%09%7D%0A%0A%09protected List%3CClass%3C?%3E%3E getConfigClasses() %7B%0A%09%09%0A%09%09List%3CClass%3C?%3E%3E classes = new ArrayList%3CClass%3C?%3E%3E();%0A%09%09%0A%09%09Import configClass = getClass().getAnnotation(Import.class);%0A%09%09classes.addAll(Arrays.asList(configClass.value()));%0A%09%09%0A%09%09return classes
 ;%0A%09%7D%0A%0A%09@

Allow programatic customisation of config classes.