public void checkinSuccessful() {
    if (markFixed == null) {
      // no associated work item
      return;
    }
    if (markFixed.isSelected() || (addComment.isSelected() && !comment.getText().isEmpty())) {
      EntityService entityService = project.getComponent(EntityService.class);
      LockingStrategy lockingStrategy = restService.getModelCustomization().getLockingStrategy();
      Entity entity = lockingStrategy.lock(ref.toEntity());
      if (entity != null) {
        Set<String> modified = new HashSet<String>();
        if (markFixed.isSelected()) {
          String value = markFixedSelection.getSelectedItem().toString();
          if (!value.equals(entity.getProperty("status"))) {
            entity.setProperty("status", value);
            modified.add("status");
          }
        }
        if (addComment.isSelected() && !comment.getText().isEmpty()) {
          String userName = project.getComponent(AliProjectConfiguration.class).getUsername();
          String fullName =
              project.getComponent(ProjectUserService.class).getUser(userName).getFullName();

          String commentProperty =
              entity.isInitialized("dev-comments") ? "dev-comments" : "comments";
          String mergedComment =
              CommentField.mergeComment(
                  entity.getPropertyValue(commentProperty), comment.getText(), userName, fullName);
          entity.setProperty(commentProperty, mergedComment);
          modified.add(commentProperty);
        }
        entityService.updateEntity(entity, modified, false);
        lockingStrategy.unlock(entity);
      }
    }
  }
  private void setupPanel(CheckinProjectPanel checkinProjectPanel, final EntityRef ref) {
    // replace commit message only if necessary
    String prefix = ref.toString() + ": ";
    String msg = checkinProjectPanel.getCommitMessage();
    if (!msg.startsWith(prefix)) {
      checkinProjectPanel.setCommitMessage(prefix);
    }

    markFixed = new JCheckBox("Mark " + ref.toString() + " as ");
    if (ref.type.equals("defect")) {
      markFixedSelection = new JComboBox();

      markFixed.setEnabled(false);
      markFixedSelection.setEnabled(false);

      JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
      jPanel.add(markFixed);
      jPanel.add(markFixedSelection);
      panel.add(jPanel, BorderLayout.NORTH);

      final EntityService entityService = project.getComponent(EntityService.class);
      EntityListener callback =
          new EntityAdapter() {
            @Override
            public void entityLoaded(Entity entity, Event event) {
              final List<String> allowedTransitions =
                  projConf
                      .getStatusTransitions()
                      .getAllowedTransitions(entity.getPropertyValue("status"));

              Metadata metadata =
                  project.getComponent(MetadataService.class).getEntityMetadata(ref.type);
              final Field field = metadata.getAllFields().get("status");
              final List<String> list =
                  project.getComponent(ProjectListService.class).getProjectList(ref.type, field);

              UIUtil.invokeAndWaitIfNeeded(
                  new Runnable() {
                    public void run() {
                      for (String state : list) {
                        if (allowedTransitions.contains(state)) {
                          markFixedSelection.addItem(state);
                        }
                      }
                      if (markFixedSelection.getItemCount() > 0) {
                        markFixedSelection.setSelectedIndex(0);
                        markFixed.addActionListener(
                            new ActionListener() {
                              public void actionPerformed(ActionEvent actionEvent) {
                                markFixedSelection.setEnabled(markFixed.isSelected());
                              }
                            });
                        markFixed.setEnabled(true);
                        markFixedSelection.setEnabled(true);
                      }
                    }
                  });
            }
          };
      entityService.requestCachedEntity(ref, Arrays.asList("status"), callback);
    }

    comment = new JTextArea();
    comment.setLineWrap(true);
    comment.setWrapStyleWord(true);
    comment.setBorder(BorderFactory.createEtchedBorder());
    comment.getDocument().addDocumentListener(this);

    final List<String> comments = projConf.getComments();
    if (!comments.isEmpty()) {
      Collections.reverse(comments);
      comment.setText(comments.get(0));
    }

    header = new JPanel(new BorderLayout());
    addComment = new JCheckBox("Add comment to " + ref.toString());
    addComment.addActionListener(this);
    header.add(addComment, BorderLayout.WEST);

    DefaultActionGroup group = new DefaultActionGroup();
    group.add(
        new AnAction(
            "Choose Message",
            "Choose Recent Message",
            IconLoader.getIcon("/actions/consoleHistory.png")) {
          public void update(AnActionEvent e) {
            super.update(e);

            e.getPresentation().setEnabled(!comments.isEmpty());
          }

          public void actionPerformed(AnActionEvent e) {
            ContentChooser<String> chooser =
                new ContentChooser<String>(project, "Choose Message", false) {
                  protected void removeContentAt(final String content) {
                    projConf.getComments().remove(content);
                  }

                  protected String getStringRepresentationFor(String content) {
                    return content;
                  }

                  protected List<String> getContents() {
                    return comments;
                  }
                };

            chooser.show();

            if (chooser.isOK()) {
              if (!addComment.isSelected()) {
                addComment.setSelected(true);
                showCommentPane();
              }

              int selectedIndex = chooser.getSelectedIndex();

              if (selectedIndex >= 0) {
                comment.setText(chooser.getAllContents().get(selectedIndex));
              }
            }
          }
        });

    toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, true);
    header.add(toolbar.getComponent(), BorderLayout.EAST);

    panelComment = new JPanel(new BorderLayout());
    panelComment.add(header, BorderLayout.NORTH);
    commentPane = new JBScrollPane(comment);

    panel.add(panelComment, BorderLayout.CENTER);

    // requirement doesn't show up in Idea12 unless explicitly revalidated
    panel.revalidate();
  }