package org.nightlabs.jfire.issuetimetracking.ui; import javax.jdo.FetchPlan; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.eclipse.ui.dialog.ResizableTitleAreaDialog; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.issue.Issue; import org.nightlabs.jfire.issue.IssueLocal; import org.nightlabs.jfire.issue.dao.IssueDAO; import org.nightlabs.jfire.issuetimetracking.ui.resource.Messages; import org.nightlabs.jfire.jbpm.graph.def.Statable; import org.nightlabs.jfire.jbpm.graph.def.StatableLocal; import org.nightlabs.jfire.jbpm.graph.def.State; import org.nightlabs.progress.NullProgressMonitor; public class CreateIssueQuickDialog extends ResizableTitleAreaDialog { public CreateIssueQuickDialog(Shell shell) { super(shell, null); } private static final String DEFAULT_MESSAGE = Messages.getString("org.nightlabs.jfire.issuetimetracking.ui.CreateIssueQuickDialog.message"); //$NON-NLS-1$ private QuickCreateIssueComposite quickCreateComposite; @Override protected Control createDialogArea(Composite parent) { setTitle(Messages.getString("org.nightlabs.jfire.issuetimetracking.ui.CreateIssueQuickDialog.title")); //$NON-NLS-1$ setMessage(DEFAULT_MESSAGE); Composite wrapper = new XComposite(parent, SWT.NONE, LayoutMode.ORDINARY_WRAPPER) { @Override public boolean setFocus() { return getButton(OK).forceFocus(); } }; quickCreateComposite = new QuickCreateIssueComposite(this, wrapper, SWT.NONE); GridData gridData = new GridData(GridData.FILL_BOTH); quickCreateComposite.setLayoutData(gridData); return wrapper; } /* (non-Javadoc) * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(Messages.getString("org.nightlabs.jfire.issuetimetracking.ui.CreateIssueQuickDialog.dialogTitle")); //$NON-NLS-1$ } private static String[] FETCH_GROUP_ISSUE = new String[]{ FetchPlan.DEFAULT, Issue.FETCH_GROUP_STATE, Issue.FETCH_GROUP_STATES, Issue.FETCH_GROUP_ISSUE_LOCAL, Issue.FETCH_GROUP_ISSUE_TYPE, IssueLocal.FETCH_GROUP_STATE, IssueLocal.FETCH_GROUP_STATES, Statable.FETCH_GROUP_STATE, StatableLocal.FETCH_GROUP_STATE, State.FETCH_GROUP_STATE_DEFINITION, }; private Issue newIssue; @Override protected void okPressed() { newIssue = quickCreateComposite.getCreatingIssue(); getButton(OK).setEnabled(false); try { Job job = new Job(Messages.getString("org.nightlabs.jfire.issuetimetracking.ui.CreateIssueQuickDialog.settingValueJob")) { //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { newIssue.getPropertySet().deflate(); newIssue = IssueDAO.sharedInstance().storeIssue(newIssue, true, FETCH_GROUP_ISSUE, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor()); quickCreateComposite.initData(); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { if (newIssue != null) setMessage(Messages.getString("org.nightlabs.jfire.issuetimetracking.ui.CreateIssueQuickDialog.afterSavingMessage")); //$NON-NLS-1$ // Commented so the user will see that a new issue was created // Timer timer = new Timer(); // TimerTask timerTask = new TimerTask(){ // @Override // public void run() { // Display.getDefault().asyncExec(new Runnable() { // @Override // public void run() { // setMessage(DEFAULT_MESSAGE); // } // }); // } // }; // timer.schedule(timerTask, 1000 * 2); quickCreateComposite.initUI(); } }); return Status.OK_STATUS; } }; job.setPriority(Job.SHORT); job.schedule(); } catch (Exception e) { throw new RuntimeException(e); } } @Override protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == OK) button.setEnabled(false); return button; } public void setOKButtonEnabled(boolean enabled) { getButton(OK).setEnabled(enabled); } }