private void initGuiComponents() {
    this.setTitle(props.getProperty("title.text"));
    btnConfirm = ComponentFactory.createButton(confirmAction);
    btnCancel = ComponentFactory.createButton(cancelAction);

    txfImageURL = ComponentFactory.createTextField(20);
    txfDatabaseURL = ComponentFactory.createTextField(20);
    txfUserName = ComponentFactory.createTextField(20);
    txfPassword = new JPasswordField(20);
    txfFromMemberNo = ComponentFactory.createTextField(20);
    txfToMemberNo = ComponentFactory.createTextField(20);
    txfProfileDatabase = ComponentFactory.createTextField(20);
    txfMultimediaDatabase = ComponentFactory.createTextField(20);

    libraryList =
        NliUserManagementServiceProxy.getInstance().findAllWorkGroupsByType(LibraryUnit.class);

    tblLibrary = ComponentFactory.createTable();
    initTable(libraryList);

    cmbLocations = ComponentFactory.createComboBox();
    List list = NliProfileServiceProxy.getInstance().findLocationsAtFirstLevel();
    cmbLocations.setModel(new DefaultComboBoxModel(list.toArray()));
    cmbLocations.setRenderer(
        new DefaultListCellRenderer() {
          @Override
          public Component getListCellRendererComponent(
              JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            Location location = (Location) value;
            Component listCellRendererComponent =
                super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            if (location != null) setText(location.getTitle());
            return listCellRendererComponent;
          }
        });

    cbUseUniqueNameToFindUser = new JCheckBox(props.getProperty("useUniqueNameToFindUser.text"));
    cbIsOrg = new JCheckBox(props.getProperty("isOrg.text"));
    cbIsUniversity = new JCheckBox(props.getProperty("isUniversity.text"));
    cbUseProfileSetting = new JCheckBox(props.getProperty("useProfileSetting.text"));

    txfDatabaseURL.setText(
        "jdbc:sqlserver://192.168.1.17:1433;databaseName=ParsProfile_ParsAzarakhsh;integratedSecurity=false");
    txfUserName.setText("digilibadminlogin");
    txfPassword.setText("manager");
    txfImageURL.setText("F:\\pimage");
    txfFromMemberNo.setText("1");
    txfToMemberNo.setText("10");
    txfProfileDatabase.setText("ParsLibrary_ParsAzarakhsh");
    txfMultimediaDatabase.setText("ParsMultimedia_ParsAzarakhsh");
  }
/**
 * <code>CopyRightReportScreen</code> provides a user interface for user to generate different
 * reports by selecting different search keys.
 *
 * @author Mina Naeemi
 */
public class CopyRightReportScreen extends BaseScreen {
  /**
   * Components defined for showing specified TempCopyrightRecord list in a tabular fasion and
   * manipulate its row.
   */
  private UltraGrid grid;

  /** <code>Locale</code> object represents a specific language in this screen. */
  private Locale local;

  /**
   * The instance of <code>AuthorityReportRowData.AuthorityReportDataFetcher</code> for fetching
   * list of <code>TempCopyrightRecord</code> from DB.
   */
  private CopyRightReportRowData.copyRightReportDataFetcher dataFetcher;

  /** Property holds value of search keys for reporting copyright requests. */
  private TempRequestReport filterObject = new TempRequestReport();

  /** Property holds userId. */
  private long userId;

  /** Property holds value of selected radio button. */
  private String radioValue = new String();

  /** Property holds text of print and preview header. */
  private String previewHeaderText = new String();

  private String className = "";

  private String screenTitle;

  /** Components defined for showing labels on this screen. */
  private JLabel lblTitle = ComponentFactory.createLabel(props.getProperty("title.name"));

  private JLabel lblNumber =
      ComponentFactory.createLabel(props.getProperty("copyright_or_deposit_number.name"));
  private JLabel lbldocType = ComponentFactory.createLabel(props.getProperty("doc_type.name"));
  private JLabel lblFromDate = ComponentFactory.createLabel(props.getProperty("from_date.name"));
  private JLabel lblToDate = ComponentFactory.createLabel(props.getProperty("to_date.name"));
  private JLabel lblUserName = ComponentFactory.createLabel(props.getProperty("user.name"));
  private JLabel lblNumberSufix = ComponentFactory.createLabel("");

  /** Components defined for showing textfields on this screen. */
  private JTextField txfTitle = ComponentFactory.createTextField(17);

  private JTextField txfNumber = ComponentFactory.createLingualDigitTextField(true);
  private JTextField txfUserName = ComponentFactory.createTextField(30);
  private ExtDateField txfFromDate = ComponentFactory.createDateField(getScreenLocale());
  private ExtDateField txfToDate = ComponentFactory.createDateField(getScreenLocale());

  /** Components defined for showing radio buttons on this screen. */
  private JRadioButton rdoCopyrightReq =
      ComponentFactory.createRadioButton(props.getProperty("copy_right_req.name"));

  private JRadioButton rdoDepositReq =
      ComponentFactory.createRadioButton(props.getProperty("deposit_req.name"));
  private JRadioButton rdoNoAnswerReq =
      ComponentFactory.createRadioButton(props.getProperty("no_answered_req.name"));
  private JRadioButton rdoAnswerReq =
      ComponentFactory.createRadioButton(props.getProperty("answered_req.name"));
  private JRadioButton rdoNoNumber =
      ComponentFactory.createRadioButton(props.getProperty("no_number_req.name"));
  private JRadioButton rdoHasNumber =
      ComponentFactory.createRadioButton(props.getProperty("has_number_req.name"));

  /** Components defined for showing checkbox on this screen. */
  private JCheckBox chkRequestDate =
      ComponentFactory.createCheckBox(props.getProperty("request_date.name"));

  private JCheckBox chkAnswerDate =
      ComponentFactory.createCheckBox(props.getProperty("answer_date.name"));
  private JCheckBox chkSetNumberDate =
      ComponentFactory.createCheckBox(props.getProperty("set_number_date.name"));

  /** Components defined for showing combobox on this screen. */
  private ConstantTableComboBox cmbDocType;

  /**
   * Property holds NliAction instance, when triggered used for showing outputformat screen of
   * selected rows info. This action will be fired when user clicked on showInfo button.
   */
  private NliAction selectUserAction =
      new NliAction("selectUserAction", props.getProperty("selectUserAction.name")) {
        public void execute(ActionEvent e) {
          selectProfileActionPerformed();
        }
      };

  /** Components defined for showing buttons on this screen. */
  private JButton btnSelectUser = ComponentFactory.createButton(selectUserAction);

  ///////////////////////////////////////////////// G U I   M E T H O D S
  // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  public CopyRightReportScreen(SubsystemApp subsystemApp, String screenTitle, Locale local) {
    super(subsystemApp);
    className = getClass().getName();
    this.screenTitle = screenTitle;
    this.local = local;
    dataFetcher = new CopyRightReportRowData.copyRightReportDataFetcher(local);
    dataFetcher.setReportObject(null);
    guiInit();
    layoutComponents();
  }

  /**
   * <code>guiInit()</code> defined for component initialization and setting up actions and models
   * of each component
   */
  private void guiInit() {
    setTitle(props.getProperty("page.name"));

    ButtonGroup typeButtonGroup = new ButtonGroup();
    typeButtonGroup.add(rdoCopyrightReq);
    typeButtonGroup.add(rdoDepositReq);

    ButtonGroup isAnsweredButtonGroup = new ButtonGroup();
    isAnsweredButtonGroup.add(rdoAnswerReq);
    isAnsweredButtonGroup.add(rdoNoAnswerReq);

    ButtonGroup hasNumberButtonGroup = new ButtonGroup();
    hasNumberButtonGroup.add(rdoHasNumber);
    hasNumberButtonGroup.add(rdoNoNumber);

    lblNumberSufix.setText(
        StringConsts.LRM
            + String.valueOf('\u062D')
            + " "
            + StringConsts.LRM
            + WorkflowConstants.NO_DATA);

    ConstantTableDefinition docType =
        ConstantPool.getInstance().findConstantTableByName(ConstantTables.COPYRIGHT_NONE_BOOK_TYPE);
    cmbDocType =
        ComponentFactory.createConstantTableCombo(
            docType, new Dimension(150, 16), true, screenLocale);
    cmbDocType.setSelectedIndex(0);

    componentsInit();

    btnSelectUser.setIcon(WorkflowUiUtils.SELECT_USER_ICON);
    btnSelectUser.setBorder(null);

    setGridColumns();

    setGridActions();
  }

  /** <code> layoutComponents() </code> defined for layout components in this screen. */
  private void layoutComponents() {
    this.setLayout(new GridBagLayout());
    JPanel panel1 = new JPanel(new GridBagLayout());
    panel1.setBorder(BorderFactory.createTitledBorder(""));
    ComponentFactory.addComponent(
        panel1,
        rdoCopyrightReq,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel1,
        rdoDepositReq,
        new GridBagConstraints(
            1,
            0,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel1,
        rdoAnswerReq,
        new GridBagConstraints(
            0,
            1,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel1,
        rdoNoAnswerReq,
        new GridBagConstraints(
            1,
            1,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel1,
        rdoHasNumber,
        new GridBagConstraints(
            0,
            2,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 4, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel1,
        rdoNoNumber,
        new GridBagConstraints(
            1,
            2,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        this,
        panel1,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.CENTER,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));

    JPanel panel2 = new JPanel(new GridBagLayout());
    JPanel panel3 = new JPanel(new GridBagLayout());
    JPanel panel4 = new JPanel(new GridBagLayout());
    panel4.setBorder(BorderFactory.createTitledBorder(props.getProperty("search_base.name")));
    ComponentFactory.addComponent(
        panel2,
        chkRequestDate,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            0.3,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel2,
        chkAnswerDate,
        new GridBagConstraints(
            1,
            0,
            1,
            1,
            0.3,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel2,
        chkSetNumberDate,
        new GridBagConstraints(
            2,
            0,
            1,
            1,
            0.3,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel3,
        panel2,
        new GridBagConstraints(
            0,
            0,
            2,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel3,
        lblFromDate,
        new GridBagConstraints(
            0,
            1,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.NONE,
            new Insets(4, 8, 0, 8),
            0,
            0));
    txfFromDate.setPreferredSize(new Dimension(140, 20));
    txfToDate.setPreferredSize(new Dimension(140, 20));
    ComponentFactory.addComponent(
        panel3,
        txfFromDate,
        new GridBagConstraints(
            1,
            1,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.NONE,
            new Insets(4, 2, 0, 10),
            0,
            0));
    ComponentFactory.addComponent(
        panel3,
        lblToDate,
        new GridBagConstraints(
            0,
            2,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.NONE,
            new Insets(4, 8, 0, 8),
            0,
            0));
    ComponentFactory.addComponent(
        panel3,
        txfToDate,
        new GridBagConstraints(
            1,
            2,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.NONE,
            new Insets(4, 2, 0, 10),
            0,
            0));
    ComponentFactory.addComponent(
        panel4,
        panel3,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));

    JPanel panel5 = new JPanel(new GridBagLayout());
    ComponentFactory.addComponent(
        panel5,
        lbldocType,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_END,
            GridBagConstraints.NONE,
            new Insets(10, 2, 8, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel5,
        cmbDocType,
        new GridBagConstraints(
            1,
            0,
            2,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel5,
        lblTitle,
        new GridBagConstraints(
            0,
            1,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_END,
            GridBagConstraints.NONE,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel5,
        txfTitle,
        new GridBagConstraints(
            1,
            1,
            2,
            1,
            0.3,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel5,
        lblNumber,
        new GridBagConstraints(
            0,
            2,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.NONE,
            new Insets(4, 8, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel5,
        txfNumber,
        new GridBagConstraints(
            1,
            2,
            1,
            1,
            0.5,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel5,
        lblNumberSufix,
        new GridBagConstraints(
            2,
            2,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_END,
            GridBagConstraints.NONE,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel4,
        panel5,
        new GridBagConstraints(
            1,
            0,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));

    JPanel panel8 = new JPanel(new GridBagLayout());
    ComponentFactory.addComponent(
        panel8,
        lblUserName,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_END,
            GridBagConstraints.NONE,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel8,
        txfUserName,
        new GridBagConstraints(
            1,
            0,
            2,
            1,
            2.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel8,
        btnSelectUser,
        new GridBagConstraints(
            3,
            0,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.NONE,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        panel4,
        panel8,
        new GridBagConstraints(
            0,
            1,
            2,
            1,
            2.0,
            0.0,
            GridBagConstraints.LINE_START,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));
    ComponentFactory.addComponent(
        this,
        panel4,
        new GridBagConstraints(
            0,
            1,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.CENTER,
            GridBagConstraints.HORIZONTAL,
            new Insets(4, 2, 0, 2),
            0,
            0));

    ComponentFactory.addComponent(
        this,
        grid,
        new GridBagConstraints(
            0,
            4,
            1,
            1,
            1.0,
            1.0,
            GridBagConstraints.CENTER,
            GridBagConstraints.BOTH,
            new Insets(4, 2, 0, 2),
            0,
            0));
  }

  private void componentsInit() {
    rdoCopyrightReq.setSelected(true);
    rdoNoAnswerReq.setSelected(true);
    rdoHasNumber.setSelected(true);
    cmbDocType.setEnabled(false);
    txfFromDate.setEnabled(false);
    txfToDate.setEnabled(false);
    txfUserName.setEnabled(false);

    chkAnswerDate.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            if (chkAnswerDate.isSelected()) {
              txfFromDate.setEnabled(true);
              txfToDate.setEnabled(true);
            } else {
              if (!chkRequestDate.isSelected() && !chkSetNumberDate.isSelected()) {
                txfFromDate.setEnabled(false);
                txfToDate.setEnabled(false);
              }
            }
          }
        });

    chkRequestDate.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            if (chkRequestDate.isSelected()) {
              txfFromDate.setEnabled(true);
              txfToDate.setEnabled(true);
            } else {
              if (!chkAnswerDate.isSelected() && !chkSetNumberDate.isSelected()) {
                txfFromDate.setEnabled(false);
                txfToDate.setEnabled(false);
              }
            }
          }
        });

    chkSetNumberDate.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            if (chkSetNumberDate.isSelected()) {
              txfFromDate.setEnabled(true);
              txfToDate.setEnabled(true);
            } else {
              if (!chkAnswerDate.isSelected() && !chkRequestDate.isSelected()) {
                txfFromDate.setEnabled(false);
                txfToDate.setEnabled(false);
              }
            }
          }
        });

    GuiUtils.switchKeyboardOnFocus(txfTitle, LocaleUtils.PERSIAN_LOCALE);
    GuiUtils.switchKeyboardOnFocus(txfNumber, LocaleUtils.ENGLISH_LOCALE);
    txfTitle.addKeyListener(
        new KeyAdapter() {
          public void keyTyped(KeyEvent e) {
            if (!(e.getSource() instanceof JTextComponent) || !Character.isDigit(e.getKeyChar()))
              return;
            JTextComponent tc = (JTextComponent) e.getSource();
            if (tc.getInputContext() == null || tc.getInputContext().getLocale() == null) return;
            Locale locale = tc.getInputContext().getLocale();
            if ("fa".equals(locale.getLanguage()))
              e.setKeyChar(StringUtils.latinToExtendedArabicDigit(e.getKeyChar()));
            else if ("ar".equals(locale.getLanguage()))
              e.setKeyChar(StringUtils.latinToArabicDigit(e.getKeyChar()));
          }
        });

    ActionListener actionListener =
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            if (rdoCopyrightReq.isSelected()) {
              cmbDocType.setEnabled(false);
              lblNumberSufix.setText(
                  StringConsts.LRM
                      + String.valueOf('\u062D')
                      + " "
                      + StringConsts.LRM
                      + WorkflowConstants.NO_DATA);
            }
            if (rdoDepositReq.isSelected()) {
              cmbDocType.setEnabled(true);
              lblNumberSufix.setText(
                  StringConsts.LRM
                      + String.valueOf('\u0648')
                      + " "
                      + StringConsts.LRM
                      + WorkflowConstants.NO_DATA);
            }
          }
        };
    rdoCopyrightReq.addActionListener(actionListener);
    rdoDepositReq.addActionListener(actionListener);
  }

  private void setGridColumns() {
    CopyRightReportRowData rowData = new CopyRightReportRowData(local);
    GridColumnModel model = new GridColumnModel();
    GridColumn column = null;

    column =
        new GridColumn(
            CopyRightReportRowData.TITLE_COL,
            rowData.getDisplayName(CopyRightReportRowData.TITLE_COL),
            65);
    column.setAlignment(SwingConstants.RIGHT);
    model.addColumn(column);

    column =
        new GridColumn(
            CopyRightReportRowData.WRITER_COL,
            rowData.getDisplayName(CopyRightReportRowData.WRITER_COL),
            65);
    column.setAlignment(SwingConstants.RIGHT);
    model.addColumn(column);

    column =
        new GridColumn(
            CopyRightReportRowData.PUBLISHER_COL,
            rowData.getDisplayName(CopyRightReportRowData.PUBLISHER_COL),
            65);
    column.setAlignment(SwingConstants.RIGHT);
    model.addColumn(column);

    column =
        new GridColumn(
            CopyRightReportRowData.REQUEST_DATE_COL,
            rowData.getDisplayName(CopyRightReportRowData.REQUEST_DATE_COL),
            65);
    model.addColumn(column);

    column =
        new GridColumn(
            CopyRightReportRowData.ANSWER_DATE_COL,
            rowData.getDisplayName(CopyRightReportRowData.ANSWER_DATE_COL),
            65);
    model.addColumn(column);

    column =
        new GridColumn(
            CopyRightReportRowData.NUMBER_DATE_COL,
            rowData.getDisplayName(CopyRightReportRowData.NUMBER_DATE_COL),
            65);
    model.addColumn(column);

    column =
        new GridColumn(
            CopyRightReportRowData.NUMBER_COL,
            rowData.getDisplayName(CopyRightReportRowData.NUMBER_COL),
            65);
    model.addColumn(column);

    column =
        new GridColumn(
            CopyRightReportRowData.USER_COL,
            rowData.getDisplayName(CopyRightReportRowData.USER_COL),
            65);
    column.setAlignment(SwingConstants.RIGHT);
    model.addColumn(column);

    grid = new UltraGrid(screenTitle, model, dataFetcher, local);
  }

  private void setGridActions() {
    java.util.List actions = grid.getActions();

    actions.add(
        0,
        new GridAction(
            "reportAction", props.getProperty("reportAction.name"), WorkflowUiUtils.REPORT_ICON) {
          public void execute(ActionEvent e) {
            reportActionPerformed();
          }
        });

    actions.add(
        1,
        new GridAction(
            "showInfoAction",
            props.getProperty("showInfoAction.name"),
            WorkflowUiUtils.PREVIEW_ICON) {
          public void execute(ActionEvent e) {
            showInfoActionPerformed();
          }
        });

    actions.add(
        2,
        new GridAction(
            "printAction", props.getProperty("printAction.name"), WorkflowUiUtils.PRINT_ICON) {
          public void execute(ActionEvent e) {
            printActionPerformed();
          }
        });

    actions.add(
        3,
        new GridAction(
            "clearAction", props.getProperty("clearAction.name"), WorkflowUiUtils.CLEAR_ICON) {
          public void execute(ActionEvent e) {
            clearActionPerformed();
          }
        });

    actions.add(
        4,
        new GridAction(
            "helpAction", props.getProperty("helpAction.name"), WorkflowUiUtils.HELP_ICON) {
          public void execute(ActionEvent e) {
            try {
              Main.getHelpSystem().showHelp(className);
            } catch (HelpException e1) {
              e1.printStackTrace();
            }
          }
        });

    grid.setActions(actions);
  }

  ////////////////////////////////////////// G E N E R A L S    M E T H O D S
  // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

  /** <code>clearActionPerformed()</code> defines for reseting all components. */
  private void clearActionPerformed() {
    txfTitle.setText("");
    txfNumber.setText("");
    txfFromDate.setDate(null);
    txfToDate.setDate(null);
    txfUserName.setText("");
    rdoCopyrightReq.setSelected(true);
    rdoNoAnswerReq.setSelected(true);
    rdoHasNumber.setSelected(true);
    chkAnswerDate.setSelected(false);
    chkRequestDate.setSelected(false);
    chkSetNumberDate.setSelected(false);
    txfFromDate.setEnabled(false);
    txfToDate.setEnabled(false);
    cmbDocType.setEnabled(false);
    userId = 0;
    dataFetcher.setReportObject(null);
    grid.refresh();
  }

  private void showInfoActionPerformed() {
    java.util.List itemList = grid.getCheckedRows();
    if (itemList.size() > 0) {
      ViewRecordScreen screen = new ViewRecordScreen(getSubsystemApp());
      List selectedRows = new ArrayList();
      for (int i = 0; i < itemList.size(); i++) {
        CopyRightReportRowData data = (CopyRightReportRowData) itemList.get(i);
        TempCopyrightRecord copyrightRecord = (TempCopyrightRecord) data.getEntity();
        selectedRows.add(copyrightRecord);
      }
      screen.setData(selectedRows);
      screen.showModal();
    } else {
      MessagePanes.showWarningDialog(
          this, props.getProperty(StandardActionNames.SELECT_ONE_ROW), local);
    }
  }

  private void selectProfileActionPerformed() {
    WorkflowUiUtils.selectProfile(this, Sections.COPY_RIGHT_SECTION, 0);
  }

  public void setProfile(long profileId) {
    String profileName = WorkflowUiUtils.getProfileName(profileId);
    txfUserName.setText(profileName);
    this.userId = profileId;
  }

  /**
   * <code>reportActionPerformed()</code> defiens for searching copyrights in DB according to search
   * keys.
   */
  private void reportActionPerformed() {
    filterObject = new TempRequestReport();
    int counter = 0;
    previewHeaderText = new String();
    radioValue = new String();

    if (!txfTitle.getText().equals(""))
      filterObject.setTitle((txfTitle.getText().toUpperCase().trim()));

    if (!txfNumber.getText().equals(""))
      filterObject.setNumber(StringUtils.arabicToLatinDigit(txfNumber.getText()).trim());

    if (rdoAnswerReq.isSelected()) {
      filterObject.setIsAnswered(WorkflowConstants.IS_ANSWERED_REQUEST);
      radioValue = props.getProperty("print_answered_req.name");
    } else if (rdoNoAnswerReq.isSelected()) {
      filterObject.setIsAnswered(WorkflowConstants.IS_NOT_ANSWERED_REQUEST);
      radioValue = props.getProperty("print_no_answered_req.name");
    }

    if (rdoHasNumber.isSelected()) {
      filterObject.setHasNumber(WorkflowConstants.HAS_NUMBER);
      radioValue += " " + props.getProperty("print_has_number_req.name");
    } else if (rdoNoNumber.isSelected()) {
      filterObject.setHasNumber(WorkflowConstants.NO_NUMBER);
      radioValue += " " + props.getProperty("print_no_number_req.name");
    }

    if (txfUserName.getText() != null
        && txfUserName.getText() != ""
        && txfUserName.getText().length() != 0) filterObject.setUserId(userId);

    if (rdoCopyrightReq.isSelected()) {
      filterObject.setType(WorkflowConstants.COPY_RIGHT_BOOK_TYPE);
      filterObject.setDocType("");
      radioValue += " " + props.getProperty("print_copy_right_req.name");
    } else if (rdoDepositReq.isSelected()) {
      filterObject.setType(WorkflowConstants.COPY_RIGHT_NON_BOOK_TYPE);
      if (cmbDocType.getSelectedIndex() != 0) {
        filterObject.setDocType(((ConstantTableItem) cmbDocType.getSelected()).getCode());
      } else filterObject.setDocType("");
      radioValue += " " + props.getProperty("print_deposit_req.name");
    }

    if (chkAnswerDate.isSelected()) {
      filterObject.setAnswerDate(WorkflowConstants.SELECTED);
      previewHeaderText = props.getProperty("answer_date.name");
      counter++;
    }
    if (chkRequestDate.isSelected()) {
      filterObject.setRequestDate(WorkflowConstants.SELECTED);
      if (counter > 0)
        previewHeaderText += " " + '\u060c' + " " + props.getProperty("request_date.name");
      else previewHeaderText += " " + props.getProperty("request_date.name");
      counter++;
    }

    if (chkSetNumberDate.isSelected()) {
      filterObject.setSetNumberDate(WorkflowConstants.SELECTED);
      if (counter > 0)
        previewHeaderText += " " + '\u060c' + " " + props.getProperty("set_number_date.name");
      else previewHeaderText += " " + props.getProperty("set_number_date.name");
    }

    if (txfFromDate.getDate() != null && txfToDate.getDate() != null) {
      if (txfFromDate.getDate().getTime() > txfToDate.getDate().getTime()) {
        MessagePanes.showErrorDialog(
            this, props.getProperty("from_date_larger.name"), LocaleUtils.PERSIAN);
        return;
      }
    }

    if (txfFromDate.getDate() != null) {
      filterObject.setFromDate(txfFromDate.getDate());
      if (!previewHeaderText.equals(""))
        previewHeaderText +=
            " "
                + props.getProperty("from_date.name")
                + " "
                + StringUtils.RTL_MARK
                + txfFromDate.getDate();
    }
    if (txfToDate.getDate() != null) {
      filterObject.setToDate(txfToDate.getDate());
      if (!previewHeaderText.equals(""))
        previewHeaderText +=
            " "
                + props.getProperty("to_date.name")
                + " "
                + StringUtils.RTL_MARK
                + txfToDate.getDate();
    }
    if (txfToDate.getDate() == null && txfFromDate.getDate() == null)
      previewHeaderText = new String();

    dataFetcher.setReportObject(filterObject);
    grid.refresh();
    if (grid.getDataModel().getData().getDataList() == null
        || grid.getDataModel().getData().getDataList().size() == 0)
      MessagePanes.showInfoDialog(this, props.getProperty("empty_list.name"), LocaleUtils.PERSIAN);
  }

  /** <code>print()</code> defines for showing print or print preview of results. */
  private void printActionPerformed() {
    Hashtable parameters = new Hashtable();
    parameters.put(props.getProperty("printHeader.name"), radioValue);
    if (StringUtils.isNotEmpty(previewHeaderText))
      parameters.put(props.getProperty("header1.name"), previewHeaderText);
    ReportData reportData = new ReportData(grid, new HashMap(), grid.getLocale());
    java.util.List itemList = new ArrayList();
    itemList = grid.getDataModel().getData().getDataList();
    reportData.setTitle(getTitle());
    reportData.setConditionMap(parameters);
    reportData.setSelectedRows(itemList);
    PrintSetupScreen.showPrintSetupScreen(this.getSubsystemApp(), screenLocale, reportData);
  }
}