예제 #1
0
  public InterviewPage() {
    super();

    if (activeInterviewService.getParticipant() == null
        || activeInterviewService.getInterview() == null) {
      setResponsePage(WebApplication.get().getHomePage());
    } else {

      addOrReplace(new EmptyPanel("header"));
      //
      // Modify menu bar.
      //
      remove("menuBar");
      add(new InterviewMenuBar("menuBar"));

      final InterviewLogPanel interviewLogPanel;
      final Dialog interviewLogsDialog;
      interviewLogPanel = new InterviewLogPanel("content", 338, new LoadableInterviewLogModel());
      interviewLogsDialog =
          DialogBuilder.buildDialog(
                  "interviewLogsDialog",
                  new StringResourceModel("Log", this, null),
                  interviewLogPanel)
              .setOptions(Option.CLOSE_OPTION)
              .setFormCssClass("interview-log-dialog-form")
              .getDialog();
      interviewLogsDialog.setHeightUnit("em");
      interviewLogsDialog.setWidthUnit("em");
      interviewLogsDialog.setInitialHeight(34);
      interviewLogsDialog.setInitialWidth(59);
      interviewLogsDialog.setCloseButtonCallback(
          new CloseButtonCallback() {
            private static final long serialVersionUID = 1L;

            public boolean onCloseButtonClicked(AjaxRequestTarget target, Status status) {
              // Update comment count on interview page once the modal window closes. User may have
              // added comments.
              updateCommentCount(target);
              return true;
            }
          });
      interviewLogPanel.setup(interviewLogsDialog);
      interviewLogPanel.add(
          new AttributeModifier("class", true, new Model("interview-log-panel-content")));
      interviewLogPanel.setMarkupId("interviewLogPanel");
      interviewLogPanel.setOutputMarkupId(true);

      add(interviewLogsDialog);

      Participant participant = activeInterviewService.getParticipant();

      add(
          new ParticipantPanel(
              "participant", new DetachableEntityModel(queryService, participant), true));

      // Create modal comments window
      final ModalWindow commentsWindow;
      add(commentsWindow = new ModalWindow("addCommentsModal"));
      commentsWindow.setCssClassName("onyx");
      commentsWindow.setTitle(new StringResourceModel("CommentsWindow", this, null));
      commentsWindow.setHeightUnit("em");
      commentsWindow.setWidthUnit("em");
      commentsWindow.setInitialHeight(34);
      commentsWindow.setInitialWidth(50);

      commentsWindow.setWindowClosedCallback(
          new ModalWindow.WindowClosedCallback() {

            private static final long serialVersionUID = 1L;

            public void onClose(AjaxRequestTarget target) {}
          });

      ViewInterviewLogsLink viewCommentsIconLink =
          createIconLink("viewCommentsIconLink", interviewLogsDialog, interviewLogPanel, true);
      add(viewCommentsIconLink);
      ContextImage commentIcon = createContextImage("commentIcon", "icons/note.png");
      viewCommentsIconLink.add(commentIcon);

      ViewInterviewLogsLink viewLogIconLink =
          createIconLink("viewLogIconLink", interviewLogsDialog, interviewLogPanel, false);
      add(viewLogIconLink);
      ContextImage logIcon = createContextImage("logIcon", "icons/loupe_button.png");
      viewLogIconLink.add(logIcon);

      // Add view interview comments action
      add(
          viewComments =
              new ViewInterviewLogsLink(
                  "viewComments", interviewLogsDialog, interviewLogPanel, true) {

                private static final long serialVersionUID = -5561038138085317724L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                  interviewLogPanel.setCommentsOnly(true);

                  // Disable Show All Button
                  target.appendJavascript(
                      "$('[name=showAll]').attr('disabled','true');$('[name=showAll]').css('color','rgba(0, 0, 0, 0.2)');$('[name=showAll]').css('border-color','rgba(0, 0, 0, 0.2)');");
                  super.onClick(target);
                }
              });
      add(
          new ViewInterviewLogsLink("viewLog", interviewLogsDialog, interviewLogPanel, false) {

            private static final long serialVersionUID = -5561038138085317724L;

            @Override
            public void onClick(AjaxRequestTarget target) {
              interviewLogPanel.setCommentsOnly(false);

              // Disable Show All Button
              target.appendJavascript(
                  "$('[name=showAll]').attr('disabled','true');$('[name=showAll]').css('color','rgba(0, 0, 0, 0.2)');$('[name=showAll]').css('border-color','rgba(0, 0, 0, 0.2)');");
              super.onClick(target);
            }
          });

      // Add create interview comments action
      add(addCommentDialog = createAddCommentDialog());
      add(
          new AjaxLink("addComment") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
              addCommentDialog.show(target);
            }
          });

      // Initialize comments counter
      updateCommentsCount();

      ActiveInterviewModel interviewModel = new ActiveInterviewModel();

      kvPanel = new KeyValueDataPanel("interview");
      kvPanel.addRow(
          new StringResourceModel("StartDate", this, null),
          new PropertyModel(interviewModel, "startDate"));
      kvPanel.addRow(
          new StringResourceModel("EndDate", this, null),
          new PropertyModel(interviewModel, "endDate"));
      kvPanel.addRow(
          new StringResourceModel("Status", this, null),
          new PropertyModel(interviewModel, "status"));
      add(kvPanel);

      // Interview cancellation
      final ActionDefinition cancelInterviewDef =
          actionDefinitionConfiguration.getActionDefinition(
              ActionType.STOP, "Interview", null, null);
      final ActionWindow interviewActionWindow =
          new ActionWindow("modal") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onActionPerformed(AjaxRequestTarget target, Stage stage, Action action) {
              activeInterviewService.setStatus(InterviewStatus.CANCELLED);
              setResponsePage(InterviewPage.class);
            }
          };
      add(interviewActionWindow);

      AjaxLink link =
          new AjaxLink("cancelInterview") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
              Label label =
                  new Label(
                      "content",
                      new StringResourceModel(
                          "ConfirmCancellationOfInterview", InterviewPage.this, null));
              label.add(
                  new AttributeModifier("class", true, new Model("confirmation-dialog-content")));
              ConfirmationDialog confirmationDialog = getConfirmationDialog();

              confirmationDialog.setContent(label);
              confirmationDialog.setTitle(
                  new StringResourceModel("ConfirmCancellationOfInterviewTitle", this, null));
              confirmationDialog.setYesButtonCallback(
                  new OnYesCallback() {

                    private static final long serialVersionUID = -6691702933562884991L;

                    public void onYesButtonClicked(AjaxRequestTarget target) {
                      interviewActionWindow.show(target, null, cancelInterviewDef);
                    }
                  });
              confirmationDialog.show(target);
            }

            @Override
            public boolean isVisible() {
              InterviewStatus status = activeInterviewService.getInterview().getStatus();
              return (status == InterviewStatus.IN_PROGRESS || status == InterviewStatus.COMPLETED);
            }
          };
      MetaDataRoleAuthorizationStrategy.authorize(link, RENDER, "PARTICIPANT_MANAGER");
      add(link);

      // Interview closing
      final ActionDefinition closeInterviewDef =
          actionDefinitionConfiguration.getActionDefinition(
              ActionType.STOP, "Closed.Interview", null, null);
      final ActionWindow closeInterviewActionWindow =
          new ActionWindow("closeModal") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onActionPerformed(AjaxRequestTarget target, Stage stage, Action action) {
              activeInterviewService.setStatus(InterviewStatus.CLOSED);
              setResponsePage(InterviewPage.class);
            }
          };
      add(closeInterviewActionWindow);

      AjaxLink closeLink =
          new AjaxLink("closeInterview") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
              Label label =
                  new Label(
                      "content",
                      new StringResourceModel(
                          "ConfirmClosingOfInterview", InterviewPage.this, null));
              label.add(
                  new AttributeModifier("class", true, new Model("confirmation-dialog-content")));
              ConfirmationDialog confirmationDialog = getConfirmationDialog();

              confirmationDialog.setContent(label);
              confirmationDialog.setTitle(
                  new StringResourceModel("ConfirmClosingOfInterviewTitle", this, null));
              confirmationDialog.setYesButtonCallback(
                  new OnYesCallback() {

                    private static final long serialVersionUID = -6691702933562884991L;

                    public void onYesButtonClicked(AjaxRequestTarget target) {
                      closeInterviewActionWindow.show(target, null, closeInterviewDef);
                    }
                  });
              confirmationDialog.show(target);
            }

            @Override
            public boolean isVisible() {
              InterviewStatus status = activeInterviewService.getInterview().getStatus();
              return (status == InterviewStatus.IN_PROGRESS);
            }
          };
      MetaDataRoleAuthorizationStrategy.authorize(link, RENDER, "PARTICIPANT_MANAGER");
      add(closeLink);

      // Reinstate interview link
      add(createReinstateInterviewLink());

      // Print report link
      class ReportLink extends AjaxLink {

        private static final long serialVersionUID = 1L;

        public ReportLink(String id) {
          super(id);
        }

        @Override
        public void onClick(AjaxRequestTarget target) {
          getPrintableReportsDialog().show(target);
        }
      }

      ReportLink printReportLink = new ReportLink("printReport");
      printReportLink.add(new Label("reportLabel", new ResourceModel("PrintReport")));
      add(printReportLink);

      add(
          new StageSelectionPanel("stage-list", getFeedbackWindow()) {

            private static final long serialVersionUID = 1L;

            @Override
            public void onViewComments(AjaxRequestTarget target, String stage) {

              commentsWindow.setContent(
                  new CommentsModalPanel("content", commentsWindow, stage) {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public void onAddComments(AjaxRequestTarget target) {
                      InterviewPage.this.updateCommentsCount();
                      target.addComponent(InterviewPage.this.commentsCount);
                    }
                  });
              commentsWindow.show(target);
            }

            @Override
            public void onViewLogs(AjaxRequestTarget target, String stage, boolean commentsOnly) {
              interviewLogPanel.setStageName(stage);
              interviewLogPanel.setCommentsOnly(commentsOnly);
              interviewLogPanel.setReadOnly(true);
              interviewLogPanel.addInterviewLogComponent();

              interviewLogsDialog.show(target);
            }

            @Override
            public void onActionPerformed(AjaxRequestTarget target, Stage stage, Action action) {
              if (activeInterviewService.getStageExecution(action.getStage()).isFinal()) {
                setResponsePage(InterviewPage.class);
              } else {
                InterviewPage.this.updateCommentsCount();
                target.addComponent(InterviewPage.this.commentsCount);
              }
            }
          });

      AjaxLink exitLink =
          new AjaxLink("exitInterview") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
              interviewManager.releaseInterview();
              setResponsePage(HomePage.class);
            }
          };
      add(exitLink);
    }
  }
예제 #2
0
  private AjaxLink createReinstateInterviewLink() {
    String stateName = null;
    if (activeInterviewService.getInterview().getStatus() == InterviewStatus.CANCELLED) {
      stateName = "Cancelled";
    } else if (activeInterviewService.getInterview().getStatus() == InterviewStatus.CLOSED) {
      stateName = "Closed";
    }

    final ActionDefinition reinstateInterviewDef =
        actionDefinitionConfiguration.getActionDefinition(
            ActionType.EXECUTE, stateName, null, null);

    final ActionWindow reinstateInterviewActionWindow =
        new ActionWindow("reinstateModal") {

          private static final long serialVersionUID = 1L;

          @Override
          public void onActionPerformed(AjaxRequestTarget target, Stage stage, Action action) {
            activeInterviewService.reinstateInterview();
            setResponsePage(InterviewPage.class);
          }
        };
    add(reinstateInterviewActionWindow);

    AjaxLink reinstateLink =
        new AjaxLink("reinstateInterview") {

          private static final long serialVersionUID = 1L;

          @Override
          public void onClick(AjaxRequestTarget target) {
            Label label =
                new Label(
                    "content",
                    new StringResourceModel(
                        "ConfirmReinstatementOfInterview", InterviewPage.this, null));
            label.add(
                new AttributeModifier("class", true, new Model("confirmation-dialog-content")));
            ConfirmationDialog confirmationDialog = getConfirmationDialog();

            confirmationDialog.setContent(label);
            confirmationDialog.setTitle(
                new StringResourceModel("ConfirmReinstatementOfInterviewTitle", this, null));
            confirmationDialog.setYesButtonCallback(
                new OnYesCallback() {

                  private static final long serialVersionUID = -6691702933562884991L;

                  public void onYesButtonClicked(AjaxRequestTarget target) {
                    reinstateInterviewActionWindow.show(target, null, reinstateInterviewDef);
                  }
                });
            confirmationDialog.show(target);
          }

          @Override
          public boolean isVisible() {
            InterviewStatus status = activeInterviewService.getInterview().getStatus();
            return (status == InterviewStatus.CANCELLED || status == InterviewStatus.CLOSED);
          }
        };

    MetaDataRoleAuthorizationStrategy.authorize(reinstateLink, RENDER, "PARTICIPANT_MANAGER");

    return reinstateLink;
  }