package org.nightlabs.jfire.issuetracking.ui.issuelink.person;
import java.io.ByteArrayInputStream;
import javax.jdo.FetchPlan;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.nightlabs.base.ui.job.Job;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.issue.Issue;
import org.nightlabs.jfire.issue.IssueLink;
import org.nightlabs.jfire.issue.dao.IssueDAO;
import org.nightlabs.jfire.issue.issuemarker.IssueMarker;
import org.nightlabs.jfire.issuetracking.ui.resource.Messages;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
/**
*
* An action that addes the Issue Markers to the Issue link.
*
* @author Fitas Amine - fitas at nightlabs dot de
*
*/
public class AddIssueMarkerMenuAction extends Action {
private static String[] FETCH_GROUP_ISSUE = new String[]{
FetchPlan.DEFAULT,
Issue.FETCH_GROUP_ISSUE_MARKERS
};
public AddIssueMarkerMenuAction() {
super();
}
private IIssueLinkSelection issueLinkSelection;
private IssueMarker issueMarker;
public void init(IIssueLinkSelection issueLinkSelection, IssueMarker issueMarker) {
this.issueLinkSelection = issueLinkSelection;
this.issueMarker = issueMarker;
}
@Override
public void run() {
if (issueLinkSelection == null && issueLinkSelection.getSelectedIssueLink() == null)
return;
final IssueLink issueLink = issueLinkSelection.getSelectedIssueLink();
final Issue issue = issueLink.getIssue();
Job job = new Job(Messages.getString(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.person.AddIssueMarkerMenuAction.job.addRemoveIssueMarker"))) { //$NON-NLS-1$
@Override
protected IStatus run(ProgressMonitor monitor)
{
monitor.beginTask(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.person.AddIssueMarkerMenuAction.job.addRemoveIssueMarker"), 100); //$NON-NLS-1$
// reverse state of the GUI CheckBox
if(isChecked())
issue.addIssueMarker(issueMarker);
else
issue.removeIssueMarker(issueMarker);
monitor.worked(30);
IssueDAO.sharedInstance().storeIssue(issue,false,FETCH_GROUP_ISSUE,
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new SubProgressMonitor(monitor, 70));
monitor.done();
return Status.OK_STATUS;
}
};
job.setPriority(Job.SHORT);
job.schedule();
}
@Override
public ImageDescriptor getImageDescriptor() {
byte[] iconByte = issueMarker.getIcon16x16Data();
if (iconByte != null) {
ByteArrayInputStream in = new ByteArrayInputStream( iconByte );
Image icon = new Image(Display.getCurrent(), in);
return ImageDescriptor.createFromImage(icon);
}
return null;
}
@Override
public String getText() {
return issueMarker.getName().getText();
}
@Override
public String getToolTipText() {
return issueMarker.getDescription().getText();
}
}