public void testNonBlankEndsInComma() {
   assertEquals("", ApplicationConfiguration.nonBlankEndsInComma(null));
   assertEquals("", ApplicationConfiguration.nonBlankEndsInComma(""));
   assertEquals("goose,", ApplicationConfiguration.nonBlankEndsInComma("goose"));
   assertEquals("goose,", ApplicationConfiguration.nonBlankEndsInComma("goose,"));
   assertEquals("goose,", ApplicationConfiguration.nonBlankEndsInComma("goose, "));
 }
 @Override
 protected RunnerAndConfigurationSettings findExistingByElement(
     Location location,
     @NotNull RunnerAndConfigurationSettings[] existingConfigurations,
     ConfigurationContext context) {
   final PsiClass aClass = ApplicationConfigurationType.getMainClass(location.getPsiElement());
   if (aClass == null) {
     return null;
   }
   final Module predefinedModule =
       ((ApplicationConfiguration)
               ((RunManagerImpl) RunManagerEx.getInstanceEx(location.getProject()))
                   .getConfigurationTemplate(getConfigurationFactory())
                   .getConfiguration())
           .getConfigurationModule()
           .getModule();
   for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
     final ApplicationConfiguration appConfiguration =
         (ApplicationConfiguration) existingConfiguration.getConfiguration();
     if (Comparing.equal(
         JavaExecutionUtil.getRuntimeQualifiedName(aClass), appConfiguration.MAIN_CLASS_NAME)) {
       if (Comparing.equal(
           location.getModule(), appConfiguration.getConfigurationModule().getModule())) {
         return existingConfiguration;
       }
       final Module configurationModule = appConfiguration.getConfigurationModule().getModule();
       if (Comparing.equal(location.getModule(), configurationModule))
         return existingConfiguration;
       if (Comparing.equal(predefinedModule, configurationModule)) {
         return existingConfiguration;
       }
     }
   }
   return null;
 }
 private RunnerAndConfigurationSettings createConfiguration(
     final PsiClass aClass, final ConfigurationContext context, Location location) {
   final Project project = aClass.getProject();
   RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(project, context);
   final ApplicationConfiguration configuration =
       (ApplicationConfiguration) settings.getConfiguration();
   configuration.MAIN_CLASS_NAME = JavaExecutionUtil.getRuntimeQualifiedName(aClass);
   configuration.setName(configuration.getGeneratedName());
   setupConfigurationModule(context, configuration);
   JavaRunConfigurationExtensionManager.getInstance()
       .extendCreatedConfiguration(configuration, location);
   return settings;
 }
 @Override
 public void run(ApplicationConfiguration crawlerConfiguration, Environment environment)
     throws Exception {
   final TodoService todoServiceResource = new TodoService();
   final TemplateHealthCheck templateHealthCheck =
       new TemplateHealthCheck(crawlerConfiguration.getTemplate());
   environment.healthChecks().register("template", templateHealthCheck);
   environment.jersey().register(todoServiceResource);
 }
  /*
  @Autowired
  private DatabaseConfiguration databaseConfiguration;

  @Bean(name = "remoteStatsDatabaseService")
  public RemoteStatsDatabaseService remoteStatsDatabaseService() {
  	RemoteStatsDatabaseServiceImpl remoteStatsImpl =
  			new RemoteStatsDatabaseServiceImpl();
  	remoteStatsImpl.setStatsDao(databaseConfiguration.statsDao());
  	return remoteStatsImpl;
  }

  @Bean(name = "statsRmiServiceExporter")
  public RmiServiceExporter statsRmiServiceExporter() {
  	RmiServiceExporter rmiServiceExporter = new RmiServiceExporter();
  	rmiServiceExporter.setServiceName(ServiceLocator.STATS_SERVICE_RMI_SERVICE_NAME);
  	rmiServiceExporter.setService(remoteStatsDatabaseService());
  	rmiServiceExporter.setServiceInterface(RemoteStatsDatabaseService.class);
  	rmiServiceExporter.setRegistryPort(ServiceLocator.RMI_REGISTRY_PORT);
  	return rmiServiceExporter;
  }
  */
  @Bean
  public RmiServiceExporter statsRmiServiceExporter() {
    RmiServiceExporter rmiServiceExporter = new RmiServiceExporter();
    rmiServiceExporter.setServiceName(ServiceLocator.STATS_SERVICE_RMI_SERVICE_NAME);
    rmiServiceExporter.setService(applicationConfiguration.statsDatabaseService());
    rmiServiceExporter.setServiceInterface(StatsDatabaseService.class);
    rmiServiceExporter.setServicePort(ServiceLocator.STATS_SERVICE_RMI_SERVICE_PORT);
    rmiServiceExporter.setRegistryPort(ServiceLocator.RMI_REGISTRY_PORT);
    return rmiServiceExporter;
  }
  private void initialiseGUI() {
    setLayout(new GridBagLayout());

    JLabel label1 = new JLabel("Session History Count");
    GridBagConstraints cons = new GridBagConstraints();
    cons.anchor = GridBagConstraints.WEST;
    cons.gridx = 0;
    cons.gridy = 0;
    // cons.gridwidth = 2;
    cons.weighty = 0.1;
    add(label1, cons);

    ApplicationConfiguration config = ApplicationConfiguration.getInstance();

    String count =
        config.getProperty(ApplicationConfiguration.SESSION_HISTORY_SESSIONCOUNT_PROPERTY);
    JTextField textfield1 = new JTextField(count);
    textfield1.setColumns(3);
    cons.gridx = 1;
    cons.gridy = 0;
    // cons.gridwidth = 2;
    cons.weighty = 0.1;
    add(textfield1, cons);

    JLabel label2 = new JLabel("Session History Item Count");
    cons.gridx = 0;
    cons.gridy = 1;
    // cons.gridwidth = 2;
    cons.weighty = 0.1;
    add(label2, cons);

    String item =
        config.getProperty(ApplicationConfiguration.SESSION_HISTORY_SESSIONCMDCOUNT_PROPERTY);
    JTextField textfield2 = new JTextField(item);
    textfield2.setColumns(3);
    cons.gridx = 1;
    cons.gridy = 1;
    // cons.gridwidth = 2;
    cons.weighty = 0.1;
    add(textfield2, cons);

    JLabel label3 = new JLabel("Search Path");
    cons.gridx = 0;
    cons.gridy = 2;
    // cons.gridwidth = 2;
    cons.weighty = 0.1;
    add(label3, cons);

    String search = config.getProperty(ApplicationConfiguration.SEARCH_PATH_PROPERTY);
    JTextField textfield3 = new JTextField(search);
    textfield3.setColumns(20);
    cons.gridx = 1;
    cons.gridy = 2;
    // cons.gridwidth = 2;
    cons.weighty = 0.1;
    add(textfield3, cons);

    JLabel label4 = new JLabel("Current Working Directory");
    cons.gridx = 0;
    cons.gridy = 3;
    // cons.gridwidth = 2;
    cons.weighty = 0.1;
    add(label4, cons);

    String directory =
        config.getProperty(ApplicationConfiguration.CURRENT_WORKING_DIRECTORY_PROPERTY);
    JTextField textfield4 = new JTextField(directory);
    textfield4.setColumns(20);
    cons.gridx = 1;
    cons.gridy = 3;
    // cons.gridwidth = 2;
    cons.weighty = 0.1;
    add(textfield4, cons);
  }