Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [subversive-dev] subversive extension

Hello Andrey,
it's a pitty that you've given just some peaces of your code, so I can't help you find the problem in it.
 
Everithing should work just fine. The example of adding something to the commit message depending on the option chosen (it can also depend on some input, than not the bolean value should be saved before proceeding but the input string).
 
public class MyCommitActionFactory implements ICommitActionFactory {
 
    public ICommitDialog getCommitDialog(Shell shell, Collection allFilesToCommit, ICommentDialogPanel commentPanel) {
        return new MyCommitDialog(shell, commentPanel);
    }
 
    public void performAfterCommitTasks(CompositeOperation operation, IRevisionProvider revisionProvider, IActionOperation[] dependsOn, IWorkbenchPart part) {
    }
 
    public class MyCommitDialog extends DefaultDialog implements ICommitDialog {
  
        private ICommentDialogPanel panel;
  
        private boolean addTestMessage = false;
  
        public MyCommitDialog(Shell parentShell, ICommentDialogPanel panel) {
            super(parentShell, panel);
            this.panel = panel;
        }
 
        public String getMessage() {
            if (this.addTestMessage) {
                return this.panel.getMessage() + "\ntestCommitMessage";
            }
            return this.panel.getMessage();
        }
  
        public int open() {
            return super.open();
        }
  
        protected void buttonPressed(int buttonId) {
            if (IDialogConstants.OK_ID == buttonId) {
                showMySimpleDialog(buttonId);
            }
            else {
                super.buttonPressed(buttonId);
            }
        }
 
        void showMySimpleDialog(int buttonId) {
            Object[] options = { "Yes", "No" };
            if (JOptionPane.showOptionDialog(null, "Should I add test message to commit message?", "Adding test message",  JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]) == JOptionPane.YES_OPTION) {
                this.addTestMessage = true;
            }
            super.buttonPressed(buttonId);
        }
    }
}
 
This code works just fine for me. So, the clear answers for your questions:
1. To press the OK button in the commit dialog call super.buttonPressed(buttonId), as you are doing now.
2. To add a text to a commit message from your simple dialog you should pass this text in any suitable way to the ICommitDialog implementation and then add it to the appropriate part of the commit comment returned by getMessage().
 
Best regards, Alexei Goncharov.
Subversive Team


From: subversive-dev-bounces@xxxxxxxxxxx [mailto:subversive-dev-bounces@xxxxxxxxxxx] On Behalf Of Андрей Павленко
Sent: Sunday, January 04, 2009 5:15 AM
To: subversive-dev@xxxxxxxxxxx
Subject: [subversive-dev] subversive extension

Greetings.
I want to build subversive extension which shows a simply MySimpleDialog after I press "OK" button on the commit dialog.
Then I can do some actions on MySimpleDialog and press button "go ahead" on it. 
After "go ahead" button pressed -> the commit process begins, 
all the windows closes and some text from MySimpleDialog adds to comment text.

Now I wrote some plugin which extends org.polarion.team.svn.ui.commit,
So, MyCommitActionFactory extends ICommitActionFactoty where "open" method returns MyComitDialog:
MyComitDialog extends DefaulDialog.
In MyComitDialog i overrided "buttonPressed" method to show MySimpleDialog (MySimpleDialog is inner-class in MyComitDialog).
Then I added a simple listener to  "go ahead" button on MySimpleDialog which do the same that "buttonPressed" in DefaulDialog does.

Here is the code:
...
public class MyCommitActionFactory implements ICommitActionFactory {
public ICommitDialog getCommitDialog(final Shell shell, Collection allFilesToCommit, final ICommentDialogPanel commentPanel) {
return new ICommitDialog() {
public String getMessage() {
return "testCommitMessage" + commentPanel.getMessage();
}
public int open() {
dialog = new MyCommitDialog(new Shell(shell), commentPanel);
return dialog.open();
}
};
}
...
}
...
public class MyCommitDialog extends DefaultDialog {
...
protected void buttonPressed(int buttonId) {
if (IDialogConstants.OK_ID == buttonId) {
showMySimpleDialog(buttonId);
} else {
super.buttonPressed(buttonId);
}
}
...
public void preCommitAction() {
JOptionPane.showMessageDialog(...);
//XXX:dont works
super.buttonPressed(IDialogConstants.OK_ID);
}

...
protected class MySimpleDialog {
...
public void addListener() {
buttonGoAhead.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
preCommitAction();
}
});
}
...
}
...
}

So, when I press GoAhead Button, the preCommitAction() invokes. It shows JOptionPane, but the Button in DefaultDialog doesnn't presses!
My questions are:
1. How can I press the button "OK" on DefaultDialog from MySimpeDialog (or how to do commit action)?
2. How can I add some text from MySimpleDialog to comment text?

Thank you!
With best regards, Andrey Pavlenko.

Back to the top