Ejemplo n.º 1
0
  private void setupForm(HttpServletRequest request, DynaActionForm form) {
    RequestContext ctx = new RequestContext(request);
    prepDropdowns(ctx);
    Long cid = ctx.getParamAsLong("cid");

    if (cid != null) {
      Channel c = ChannelManager.lookupByIdAndUser(cid, ctx.getCurrentUser());
      if (!UserManager.verifyChannelAdmin(ctx.getCurrentUser(), c)) {
        throw new PermissionException(RoleFactory.CHANNEL_ADMIN);
      }

      form.set("name", c.getName());
      form.set("summary", c.getSummary());
      form.set("description", c.getDescription());
      form.set("org_sharing", c.getAccess());
      form.set("gpg_key_url", c.getGPGKeyUrl());
      form.set("gpg_key_id", c.getGPGKeyId());
      form.set("gpg_key_fingerprint", c.getGPGKeyFp());
      form.set("maintainer_name", c.getMaintainerName());
      form.set("maintainer_phone", c.getMaintainerPhone());
      form.set("maintainer_email", c.getMaintainerEmail());
      form.set("support_policy", c.getSupportPolicy());
      if (c.getChecksumTypeLabel() == null) {
        form.set("checksum", null);
      } else {
        form.set("checksum", c.getChecksumTypeLabel());
      }
      if (c.isGloballySubscribable(ctx.getCurrentUser().getOrg())) {
        form.set("per_user_subscriptions", "all");
      } else {
        form.set("per_user_subscriptions", "selected");
      }

      if (c.getParentChannel() != null) {
        request.setAttribute("parent_name", c.getParentChannel().getName());
        request.setAttribute("parent_id", c.getParentChannel().getId());
      } else {
        request.setAttribute(
            "parent_name", LocalizationService.getInstance().getMessage("generic.jsp.none"));
      }

      if (c.getSources().isEmpty()) {
        request.setAttribute("last_sync", "");
      } else {
        String lastSync =
            LocalizationService.getInstance().getMessage("channel.edit.repo.neversynced");
        if (c.getLastSynced() != null) {
          lastSync = LocalizationService.getInstance().formatCustomDate(c.getLastSynced());
        }
        request.setAttribute("last_sync", lastSync);
        if (!ChannelManager.getLatestSyncLogFiles(c).isEmpty()) {
          request.setAttribute(
              "log_url", DownloadManager.getChannelSyncLogDownloadPath(c, ctx.getCurrentUser()));
        }
      }

      request.setAttribute("channel_label", c.getLabel());
      request.setAttribute("channel_name", c.getName());
      request.setAttribute("channel_arch", c.getChannelArch().getName());
      request.setAttribute("channel_arch_label", c.getChannelArch().getLabel());

    } else {
      // default settings
      String channelName =
          LocalizationService.getInstance().getMessage("frontend.actions.channels.manager.create");
      request.setAttribute("channel_name", channelName);
      form.set("org_sharing", "private");
      form.set("per_user_subscriptions", "all");
      form.set("checksum", "sha1");
    }
  }
  /** {@inheritDoc} */
  @Override
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm formIn,
      HttpServletRequest request,
      HttpServletResponse response) {

    RequestContext requestContext = new RequestContext(request);
    User user = requestContext.getCurrentUser();

    long cid = requestContext.getRequiredParam(RequestContext.CID);
    Channel chan = ChannelFactory.lookupByIdAndUser(cid, user);
    String syncType = request.getParameter(SYNC_TYPE);

    if (!UserManager.verifyChannelAdmin(user, chan)) {
      throw new PermissionException(RoleFactory.CHANNEL_ADMIN);
    }
    if (chan.getOrg() == null) {
      throw new PermissionCheckFailureException();
    }

    String selectedChan = request.getParameter(SELECTED_CHANNEL);
    request.setAttribute(RequestContext.CID, chan.getId());
    request.setAttribute(CHANNEL_NAME, chan.getName());

    if (requestContext.wasDispatched("channel.jsp.package.mergebutton")) {
      Map<String, Object> params = new HashMap<String, Object>();
      params.put(RequestContext.CID, cid);
      params.put(OTHER_ID, selectedChan);
      params.put(SYNC_TYPE, syncType);
      return getStrutsDelegate()
          .forwardParams(mapping.findForward(RhnHelper.CONFIRM_FORWARD), params);
    }

    // selected channel id
    long scid = 0;
    String sname = "";

    // If a channel isn't selected, select one smartly
    if (selectedChan == null) {
      if (chan.isCloned()) {
        scid = chan.getOriginal().getId();
      }
    } else if (!NO_PACKAGES.equals(selectedChan)) {
      scid = Long.parseLong(selectedChan);
    }

    // Add Red Hat Base Channels, and custom base channels to the list, and if one
    //      is selected, select it
    List<SelectableChannel> chanList = findChannels(user, scid);
    DataResult result = null;

    if (scid != 0) {
      sname = ChannelFactory.lookupByIdAndUser(scid, user).getName();

      result = PackageManager.comparePackagesBetweenChannels(cid, scid);

      TagHelper.bindElaboratorTo(listName, result.getElaborator(), request);
    }

    request.setAttribute(CHANNEL_LIST, chanList);
    request.setAttribute(OTHER_CHANNEL, sname);
    request.setAttribute(SYNC_TYPE, syncType);
    request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
    request.setAttribute(RequestContext.PAGE_LIST, result);

    return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
  }
  /** {@inheritDoc} */
  @Override
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm formIn,
      HttpServletRequest request,
      HttpServletResponse response) {

    RequestContext context = new RequestContext(request);
    User user = context.getCurrentUser();

    long cid = context.getRequiredParam("cid");
    Channel chan = ChannelFactory.lookupByIdAndUser(cid, user);
    request.setAttribute("channel_name", chan.getName());
    request.setAttribute("cid", chan.getId());

    Map params = new HashMap();
    params.put(RequestContext.CID, chan.getId().toString());

    ListHelper helper = new ListHelper(this, request, params);
    helper.execute();

    TaskomaticApi taskomatic = new TaskomaticApi();
    String oldCronExpr;
    try {
      oldCronExpr = taskomatic.getRepoSyncSchedule(chan, user);
    } catch (TaskomaticApiException except) {
      params.put("inactive", true);
      request.setAttribute("inactive", true);
      createErrorMessage(request, "repos.jsp.message.taskomaticdown", null);
      return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
    }

    RecurringEventPicker picker =
        RecurringEventPicker.prepopulatePicker(request, "date", oldCronExpr);

    if (context.isSubmitted()) {
      StrutsDelegate strutsDelegate = getStrutsDelegate();

      // check user permissions first
      if (!UserManager.verifyChannelAdmin(user, chan)) {
        createErrorMessage(request, "frontend.actions.channels.manager.add.permsfailure", null);
        return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
      }

      if (chan.getSources().isEmpty()) {
        createErrorMessage(request, "repos.jsp.channel.norepos", null);
        return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
      }

      try {
        if (context.wasDispatched("repos.jsp.button-sync")) {
          // schedule one time repo sync
          taskomatic.scheduleSingleRepoSync(chan, user);
          createSuccessMessage(request, "message.syncscheduled", chan.getName());

        } else if (context.wasDispatched("schedule.button")) {
          if ((picker.isDisabled() || StringUtils.isEmpty(picker.getCronEntry()))
              && oldCronExpr != null) {
            taskomatic.unscheduleRepoSync(chan, user);
            createSuccessMessage(request, "message.syncschedule.disabled", chan.getName());
          } else if (!StringUtils.isEmpty(picker.getCronEntry())) {
            Date date = taskomatic.scheduleRepoSync(chan, user, picker.getCronEntry());
            createSuccessMessage(request, "message.syncscheduled", chan.getName());
          }
        }
      } catch (TaskomaticApiException e) {
        if (e.getMessage().contains("InvalidParamException")) {
          createErrorMessage(request, "repos.jsp.message.invalidcron", picker.getCronEntry());
        } else {
          createErrorMessage(request, "repos.jsp.message.schedulefailed", null);
        }
        return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
      }

      Map forwardParams = new HashMap();
      forwardParams.put("cid", chan.getId());
      return getStrutsDelegate().forwardParams(mapping.findForward("success"), forwardParams);
    }

    return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
  }