package org.nightlabs.jfire.issuetracking.ui.issue.editor; import javax.jdo.FetchPlan; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jdo.ObjectIDUtil; import org.nightlabs.jfire.base.login.ui.part.ICloseOnLogoutEditorPart; import org.nightlabs.jfire.base.ui.editlock.EditLockCallback; import org.nightlabs.jfire.base.ui.editlock.EditLockCarrier; import org.nightlabs.jfire.base.ui.editlock.EditLockHandle; import org.nightlabs.jfire.base.ui.editlock.EditLockMan; import org.nightlabs.jfire.base.ui.editlock.InactivityAction; import org.nightlabs.jfire.base.ui.entity.editor.ActiveEntityEditor; import org.nightlabs.jfire.issue.EditLockTypeIssue; import org.nightlabs.jfire.issue.Issue; import org.nightlabs.jfire.issue.dao.IssueDAO; import org.nightlabs.jfire.issue.id.IssueID; import org.nightlabs.progress.ProgressMonitor; public class IssueEditor extends ActiveEntityEditor implements ICloseOnLogoutEditorPart { public static final String EDITOR_ID = IssueEditor.class.getName(); private static final String[] FETCH_GROUPS = new String[] { FetchPlan.DEFAULT, Issue.FETCH_GROUP_SUBJECT, Issue.FETCH_GROUP_ISSUE_FILELIST, }; private final EditLockCallback editLockCallback = new EditLockCallback() { @Override public InactivityAction getEditLockAction(EditLockCarrier editLockCarrier) { return InactivityAction.REFRESH_LOCK; } @Override public void doDiscardAndRelease() { close(false); } @Override public void doSaveAndRelease() { doSave(new NullProgressMonitor()); close(false); } }; private EditLockHandle editLockHandle; @Override public void init(final IEditorSite site, final IEditorInput input) throws PartInitException { super.init(site, input); editLockHandle = EditLockMan.sharedInstance().acquireEditLockAsynchronously( EditLockTypeIssue.EDIT_LOCK_TYPE_ID, ((IssueEditorInput)getEditorInput()).getJDOObjectID(), "TODO", //$NON-NLS-1$ editLockCallback ); } // :: --- [ ~~ ActiveEntiyEditor ] -------------------------------------------------------------------------->>---| @Override protected String getEditorTitleFromEntity(Object entity) { // return entity instanceof Issue ? ((Issue)entity).getSubject().getText() : null; if (entity instanceof Issue) { Issue issue = (Issue)entity; // Note: It seems that having the (rigid and stable) ID of the Issue being displayed on the // title tab is quite useful. Kai return "(ID:" + ObjectIDUtil.longObjectIDFieldToString(issue.getIssueID()) + ") " + issue.getSubject().getText(); } return null; } @Override protected String getEditorTooltipFromEntity(Object entity) { return getEditorTitleFromEntity(entity); } @Override protected Object retrieveEntityForEditorTitle(ProgressMonitor monitor) { IssueID issueID = ((IssueEditorInput)getEditorInput()).getJDOObjectID(); assert issueID != null; return IssueDAO.sharedInstance().getIssue(issueID, FETCH_GROUPS, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); } // :: --- [ ~~ ActiveEntiyEditor ] --------------------------------------------------------------------------<<---| // @Override // public void init(IEditorSite site, IEditorInput input) throws PartInitException // { // super.init(site, input); // issueEditorInput = (IssueEditorInput)input; // Job job = new Job(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueEditor.job.loadingIssueType.text")) //$NON-NLS-1$ // { // @Override // protected IStatus run(ProgressMonitor monitor) // throws Exception // { // final Issue issue = IssueDAO.sharedInstance().getIssue( // issueEditorInput.getJDOObjectID(), // FETCH_GROUPS, // NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); // Display.getDefault().asyncExec(new Runnable() // { // public void run() // { // setPartName(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueEditor.editor.partName.text") + issue.getIssueIDAsString()); //$NON-NLS-1$ // setTitleToolTip(issue.getSubject().getText()); // } // }); // // editLockHandle = EditLockMan.sharedInstance().acquireEditLock( // EditLockTypeIssue.EDIT_LOCK_TYPE_ID, // (ObjectID)JDOHelper.getObjectId(issue), // "TODO", //$NON-NLS-1$ // new EditLockCallback() { // @Override // public InactivityAction getEditLockAction(EditLockCarrier editLockCarrier) { // return InactivityAction.REFRESH_LOCK; // } // }, getSite().getShell(), monitor); // // return Status.OK_STATUS; // } // }; // job.setPriority(org.eclipse.core.runtime.jobs.Job.SHORT); // job.schedule(); // } @Override public void dispose() { super.dispose(); editLockHandle.release(); } }