// Path: src/main/java/com/cathive/fx/guice/controllerlookup/ControllerLookup.java
// public final class ControllerLookup {
//     
//     private final Collection<IdentifiableController> identifiables;
// 
//     public ControllerLookup(Collection<IdentifiableController> identifiables) {
//         super();
//         this.identifiables = identifiables;
//     }
//     
//     /**
//      * Returns a controller instance with the given ID.
//      * 
//      * @param id
//      *     The string ID of the controller as returned by
//      *     {@link IdentifiableController#getId()}
//      * @return
//      *     The controller with the given ID that has just been
//      *     looked up.
//      * @throws IllegalArgumentException
//      *     thrown if a controller cannot be found with the given ID.
//      */
//     @SuppressWarnings("unchecked")
//     public <T> T lookup(final String id) {
//         for (final IdentifiableController controller : identifiables) {
//             if(controller.getId().equals(id)) {
//                 return (T) controller;
//             }
//         }
//         throw new IllegalArgumentException("Could not find a controller with the ID '" + id + "'");
//     }
// }
// 
// Path: src/test/java/com/cathive/fx/guice/lookupexample/InnerLookupController.java
// @FXMLController
// public class InnerLookupController implements IdentifiableController {
// 
//     @FXML
//     private Parent root;
//     
//     @Override
//     public String getId() {
//         return ParentIDFinder.getParentId(root);
//     }
// }
// 
// Path: src/test/java/com/cathive/fx/guice/lookupexample/OuterLookupController.java
// @FXMLController
// public class OuterLookupController {
// 
//     @Inject
//     private ControllerLookup controllerLookup;
// 
//     public InnerLookupController getControllerForPane1() {
//         return controllerLookup.lookup("examplePane1");
//     }
//     
//     public InnerLookupController getControllerForPane2() {
//         return controllerLookup.lookup("examplePane2");
//     }
//     
//     public IdentifiableController getAnyController(String id) {
//         return controllerLookup.lookup(id);
//     }
// }


import com.cathive.fx.guice.lookupexample.OuterLookupController;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.ProvisionException;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import javafx.stage.Stage;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.cathive.fx.guice.controllerlookup.ControllerLookup;
import com.cathive.fx.guice.lookupexample.InnerLookupController;
/*
 * Copyright (C) 2012 The Cat Hive Developers.
 *
 * 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 com.cathive.fx.guice;






public class ControllerLookupApplicationTest {

    static class ControllerLookupGuiceApplication extends GuiceApplication {
        @Override
        public void start(Stage primaryStage) throws Exception {
            // Do nothing...
        }

        @Override
        public void init(List<Module> modules) throws Exception {
            // Intentionally left empty
        }
    }
    
    private ControllerLookupGuiceApplication app;
    
    private GuiceFXMLLoader loader;

    private GuiceFXMLLoader.Result result;
    
    @BeforeMethod
    public void setup() throws Exception {
        app = new ControllerLookupGuiceApplication();
        app.init();

        loader = app.getInjector().getInstance(GuiceFXMLLoader.class);
        
        result = loader.load(
            getClass().getResource("/OuterLookupPane.fxml"), 
            ResourceBundle.getBundle("ExamplePane", Locale.ENGLISH)
        );
    }

	/**
	 * In JavaFX 8 it seems that you can't overwrite the fx:id in an fx:include tag (which was possible in JavaFX 2).
	 * That's the reason why this test was failing on JDK8 while it was running without problems on JDK7.
	 */
    @Test(enabled = false)
    public void parentControllerCanLookupNestedControllers() throws Exception {
        
// Path: src/main/java/com/cathive/fx/guice/controllerlookup/ControllerLookup.java
// public final class ControllerLookup {
//     
//     private final Collection<IdentifiableController> identifiables;
// 
//     public ControllerLookup(Collection<IdentifiableController> identifiables) {
//         super();
//         this.identifiables = identifiables;
//     }
//     
//     /**
//      * Returns a controller instance with the given ID.
//      * 
//      * @param id
//      *     The string ID of the controller as returned by
//      *     {@link IdentifiableController#getId()}
//      * @return
//      *     The controller with the given ID that has just been
//      *     looked up.
//      * @throws IllegalArgumentException
//      *     thrown if a controller cannot be found with the given ID.
//      */
//     @SuppressWarnings("unchecked")
//     public <T> T lookup(final String id) {
//         for (final IdentifiableController controller : identifiables) {
//             if(controller.getId().equals(id)) {
//                 return (T) controller;
//             }
//         }
//         throw new IllegalArgumentException("Could not find a controller with the ID '" + id + "'");
//     }
// }
// 
// Path: src/test/java/com/cathive/fx/guice/lookupexample/InnerLookupController.java
// @FXMLController
// public class InnerLookupController implements IdentifiableController {
// 
//     @FXML
//     private Parent root;
//     
//     @Override
//     public String getId() {
//         return ParentIDFinder.getParentId(root);
//     }
// }
// 
// Path: src/test/java/com/cathive/fx/guice/lookupexample/OuterLookupController.java
// @FXMLController
// public class OuterLookupController {
// 
//     @Inject
//     private ControllerLookup controllerLookup;
// 
//     public InnerLookupController getControllerForPane1() {
//         return controllerLookup.lookup("examplePane1");
//     }
//     
//     public InnerLookupController getControllerForPane2() {
//         return controllerLookup.lookup("examplePane2");
//     }
//     
//     public IdentifiableController getAnyController(String id) {
//         return controllerLookup.lookup(id);
//     }
// }


// Path: src/test/java/com/cathive/fx/guice/ControllerLookupApplicationTest.java
import com.cathive.fx.guice.lookupexample.OuterLookupController;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.ProvisionException;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import javafx.stage.Stage;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.cathive.fx.guice.controllerlookup.ControllerLookup;
import com.cathive.fx.guice.lookupexample.InnerLookupController;

/*
 * Copyright (C) 2012 The Cat Hive Developers.
 *
 * 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 com.cathive.fx.guice;






public class ControllerLookupApplicationTest {

    static class ControllerLookupGuiceApplication extends GuiceApplication {
        @Override
        public void start(Stage primaryStage) throws Exception {
            // Do nothing...
        }

        @Override
        public void init(List<Module> modules) throws Exception {
            // Intentionally left empty
        }
    }
    
    private ControllerLookupGuiceApplication app;
    
    private GuiceFXMLLoader loader;

    private GuiceFXMLLoader.Result result;
    
    @BeforeMethod
    public void setup() throws Exception {
        app = new ControllerLookupGuiceApplication();
        app.init();

        loader = app.getInjector().getInstance(GuiceFXMLLoader.class);
        
        result = loader.load(
            getClass().getResource("/OuterLookupPane.fxml"), 
            ResourceBundle.getBundle("ExamplePane", Locale.ENGLISH)
        );
    }

	/**
	 * In JavaFX 8 it seems that you can't overwrite the fx:id in an fx:include tag (which was possible in JavaFX 2).
	 * That's the reason why this test was failing on JDK8 while it was running without problems on JDK7.
	 */
    @Test(enabled = false)
    public void parentControllerCanLookupNestedControllers() throws Exception {
        
        OuterLookupController controller = result.getController();