@Override
  public void processSend(PageRequestContext requestContext) {
    PluginDAO pluginDAO = DAOFactory.getInstance().getPluginDAO();
    PluginRepositoryDAO pluginRepositoryDAO = DAOFactory.getInstance().getPluginRepositoryDAO();

    Long pluginsRowCount = requestContext.getLong("pluginsTable.rowCount");
    for (int i = 0; i < pluginsRowCount; i++) {
      String colPrefix = "pluginsTable." + i;

      Long id = requestContext.getLong(colPrefix + ".id");
      Boolean enabled = "1".equals(requestContext.getString(colPrefix + ".enabled"));
      Boolean remove = "1".equals(requestContext.getString(colPrefix + ".remove"));
      String groupId = requestContext.getString(colPrefix + ".groupId");
      String artifactId = requestContext.getString(colPrefix + ".artifactId");
      String version = requestContext.getString(colPrefix + ".version");

      if (id == null) {
        pluginDAO.create(artifactId, groupId, version, enabled);
      } else {
        Plugin plugin = pluginDAO.findById(id);
        if (remove == true) {
          pluginDAO.delete(plugin);
        } else {
          pluginDAO.updateEnabled(plugin, enabled);
          pluginDAO.updateArtifactId(plugin, artifactId);
          pluginDAO.updateGroupId(plugin, groupId);
          pluginDAO.updateVersion(plugin, version);
        }
      }
    }

    Long repositoriesRowCount = requestContext.getLong("repositoriesTable.rowCount");
    for (int i = 0; i < repositoriesRowCount; i++) {
      String colPrefix = "repositoriesTable." + i;

      Long id = requestContext.getLong(colPrefix + ".id");
      String url = requestContext.getString(colPrefix + ".url");
      Boolean remove = "1".equals(requestContext.getString(colPrefix + ".remove"));

      if (id == null) {
        pluginRepositoryDAO.create(url);
      } else {
        PluginRepository repository = pluginRepositoryDAO.findById(id);
        if (remove == true) {
          pluginRepositoryDAO.delete(repository);
        } else {
          pluginRepositoryDAO.updateUrl(repository, url);
        }
      }
    }

    processForm(requestContext);

    //    List<PluginRepository> pluginRepositories = pluginRepositoryDAO.listAll();
    //    List<Plugin> plugins = pluginDAO.listAll();
    //
    //    requestContext.getRequest().setAttribute("repositories", pluginRepositories);
    //    requestContext.getRequest().setAttribute("plugins", plugins);
    //
    //    requestContext.setIncludeJSP("/templates/system/plugins.jsp");
  }
  @Override
  public void processForm(PageRequestContext requestContext) {
    PluginRepositoryDAO pluginRepositoryDAO = DAOFactory.getInstance().getPluginRepositoryDAO();
    PluginDAO pluginDAO = DAOFactory.getInstance().getPluginDAO();

    PluginManager pluginManager = PluginManager.getInstance();

    List<PluginRepository> pluginRepositories = pluginRepositoryDAO.listAll();
    List<Plugin> plugins = pluginDAO.listAll();
    List<PluginBean> pluginBeans = new ArrayList<PluginsViewController.PluginBean>(plugins.size());
    for (Plugin plugin : plugins) {
      String status = "";
      boolean loaded =
          pluginManager.isLoaded(plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion());
      boolean deletable = false;

      if (loaded) {
        if (plugin.getEnabled())
          status =
              Messages.getInstance()
                  .getText(
                      requestContext.getRequest().getLocale(),
                      "system.plugins.pluginsTableStatusLoaded");
        else
          status =
              Messages.getInstance()
                  .getText(
                      requestContext.getRequest().getLocale(),
                      "system.plugins.pluginsTableStatusUnloadOnRestart");
      } else {
        if (plugin.getEnabled())
          status =
              Messages.getInstance()
                  .getText(
                      requestContext.getRequest().getLocale(),
                      "system.plugins.pluginsTableStatusLoadOnRestart");
        else
          status =
              Messages.getInstance()
                  .getText(
                      requestContext.getRequest().getLocale(),
                      "system.plugins.pluginsTableStatusNotLoaded");
        deletable = true;
      }

      PluginBean pluginBean =
          new PluginBean(
              plugin.getId(),
              plugin.getGroupId(),
              plugin.getArtifactId(),
              plugin.getVersion(),
              plugin.getEnabled(),
              deletable,
              status);
      pluginBeans.add(pluginBean);
    }

    requestContext.getRequest().setAttribute("repositories", pluginRepositories);
    requestContext.getRequest().setAttribute("plugins", pluginBeans);
    /**
     * Messages.getInstance().getText(requestContext.getRequest().getLocale(),
     * "system.plugins.pluginsTableStatusNotLoaded");
     * Messages.getInstance().getText(requestContext.getRequest().getLocale(),
     * "system.plugins.pluginsTableStatusUnloadOnRestart");
     * Messages.getInstance().getText(requestContext.getRequest().getLocale(),
     * "system.plugins.pluginsTableStatusLoaded");
     */
    requestContext.setIncludeJSP("/templates/system/plugins.jsp");
  }