public StatesPanel() {
    setLayout(new BorderLayout());

    for (final Currency currency : Currency.values()) {
      final JPanel panelForCurrency = new StatePanelForCurrency(currency);
      jTabbedPaneCurrency.addTab(currency.getIso4217Code(), panelForCurrency);
    }

    jTabbedPaneCurrency.addChangeListener(
        new ChangeListener() {
          @Override
          public void stateChanged(final ChangeEvent e) {
            if (e.getSource() instanceof JTabbedPane) {
              final JTabbedPane pane = (JTabbedPane) e.getSource();
              final StatePanelForCurrency selectedComponent =
                  (StatePanelForCurrency) pane.getSelectedComponent();
              selectedComponent.notifyListener();
            }
          }
        });

    add(jTabbedPaneCurrency, BorderLayout.CENTER);
  }
  @Test
  public void testGetAgentMethods() {
    for (final Currency currency : Currency.values()) {
      // state
      Assert.assertNotNull(ApplicationContext.getInstance().getAgentService().findState(currency));

      // central bank
      Assert.assertNotNull(
          ApplicationContext.getInstance().getAgentService().findCentralBank(currency));

      // credit banks
      Assert.assertEquals(
          2, ApplicationContext.getInstance().getAgentService().findCreditBanks(currency).size());

      // central bank
      Assert.assertNotNull(
          ApplicationContext.getInstance().getAgentService().findRandomCreditBank(currency));

      // factories
      Assert.assertEquals(
          2, ApplicationContext.getInstance().getAgentService().findFactories(currency).size());

      Assert.assertEquals(
          1,
          ApplicationContext.getInstance()
              .getAgentService()
              .findFactories(currency, GoodType.WHEAT)
              .size());

      Assert.assertEquals(
          1,
          ApplicationContext.getInstance()
              .getAgentService()
              .findFactories(currency, GoodType.COAL)
              .size());

      // traders
      Assert.assertEquals(
          1, ApplicationContext.getInstance().getAgentService().findTraders(currency).size());

      // households
      Assert.assertEquals(
          2, ApplicationContext.getInstance().getAgentService().findHouseholds(currency).size());
    }
  }
  @Override
  public void constructAgentsFromConfiguration() {
    for (final Currency currency : Currency.values()) {
      if (ApplicationContext.getInstance().getConfiguration().stateConfig.getNumber(currency)
          == 1) {
        // initialize states
        ApplicationContext.getInstance().getAgentService().findState(currency);
      }
    }

    for (final Currency currency : Currency.values()) {
      if (ApplicationContext.getInstance().getConfiguration().centralBankConfig.getNumber(currency)
          == 1) {
        // initialize central banks
        ApplicationContext.getInstance().getAgentService().findCentralBank(currency);
      }
    }

    for (final Currency currency : Currency.values()) {
      final Set<Currency> offeredCurrencies = new HashSet<Currency>();
      offeredCurrencies.add(currency);

      // initialize credit banks
      for (int i = 0;
          i
              < ApplicationContext.getInstance()
                  .getConfiguration()
                  .creditBankConfig
                  .getNumber(currency);
          i++) {
        ApplicationContext.getInstance()
            .getCreditBankFactory()
            .newInstanceCreditBank(offeredCurrencies, currency);
      }
    }

    for (final Currency currency : Currency.values()) {
      // initialize factories
      for (final GoodType goodType : GoodType.values()) {
        if (!GoodType.LABOURHOUR.equals(goodType)) {
          for (int i = 0;
              i
                  < ApplicationContext.getInstance()
                      .getConfiguration()
                      .factoryConfig
                      .getNumber(currency, goodType);
              i++) {
            ApplicationContext.getInstance()
                .getFactoryFactory()
                .newInstanceFactory(goodType, currency);
          }
        }
      }
    }

    for (final Currency currency : Currency.values()) {
      // initialize traders
      for (int i = 0;
          i < ApplicationContext.getInstance().getConfiguration().traderConfig.getNumber(currency);
          i++) {
        ApplicationContext.getInstance().getTraderFactory().newInstanceTrader(currency);
      }
    }

    final int householdLifeSpanInDays =
        ApplicationContext.getInstance().getConfiguration().householdConfig.getLifespanInDays();
    // division by 2, so that households have time left until
    // retirement
    final int householdAgeLimit = householdLifeSpanInDays / 2;

    for (final Currency currency : Currency.values()) {
      // initialize households
      for (int i = 0;
          i
              < ApplicationContext.getInstance()
                  .getConfiguration()
                  .householdConfig
                  .getNumber(currency);
          i++) {
        final int ageInDays =
            ApplicationContext.getInstance().getRandomNumberGenerator().nextInt(householdAgeLimit);
        ApplicationContext.getInstance()
            .getHouseholdFactory()
            .newInstanceHousehold(currency, ageInDays);
      }
    }

    HibernateUtil.flushSession();
  }