blob: 3d5cfcecd39459a5255e0f4d594cf59e1c568cd8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2011 Frank Becker and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Frank Becker - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.bugzilla.ui;
import java.text.MessageFormat;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.mylyn.commons.workbench.WorkbenchUtil;
import org.eclipse.mylyn.internal.bugzilla.core.IBugzillaConstants;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.editor.IFormPage;
/**
* @since 3.2
*/
public final class TaskAttachmentTableEditorHyperlink implements IHyperlink {
private final IRegion region;
private final TaskRepository repository;
private final String attachmentId;
public TaskAttachmentTableEditorHyperlink(IRegion region, TaskRepository repository, String attachmentId) {
Assert.isNotNull(repository);
this.region = region;
this.repository = repository;
this.attachmentId = attachmentId;
}
public IRegion getHyperlinkRegion() {
return region;
}
public String getHyperlinkText() {
return MessageFormat.format(Messages.TaskAttachmentTableEditorHyperlink_Show_Attachment_X_in_Y, attachmentId);
}
public String getTypeLabel() {
return null;
}
public void open() {
AbstractTaskEditorPage page = getTaskEditorPage();
if (page != null) {
if (!page.selectReveal(TaskAttribute.PREFIX_ATTACHMENT + attachmentId)) {
String msg = NLS.bind(Messages.TaskAttachmentTableEditorHyperlink_QuestionMsg, attachmentId);
if (MessageDialog.openQuestion(WorkbenchUtil.getShell(),
Messages.TaskAttachmentTableEditorHyperlink_AttachmentNotFound, msg)) {
String url = repository.getUrl() + IBugzillaConstants.URL_GET_ATTACHMENT_SUFFIX + attachmentId;
TasksUiUtil.openUrl(url);
}
}
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((attachmentId == null) ? 0 : attachmentId.hashCode());
result = prime * result + ((region == null) ? 0 : region.hashCode());
result = prime * result + ((repository == null) ? 0 : repository.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
TaskAttachmentTableEditorHyperlink other = (TaskAttachmentTableEditorHyperlink) obj;
if (attachmentId == null) {
if (other.attachmentId != null) {
return false;
}
} else if (!attachmentId.equals(other.attachmentId)) {
return false;
}
if (region == null) {
if (other.region != null) {
return false;
}
} else if (!region.equals(other.region)) {
return false;
}
if (repository == null) {
if (other.repository != null) {
return false;
}
} else if (!repository.equals(other.repository)) {
return false;
}
return true;
}
@Override
public String toString() {
return "TaskAttachmentHyperlink [attachmentId=" + attachmentId + ", region=" + region + ", repository=" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ repository + "]"; //$NON-NLS-1$
}
protected AbstractTaskEditorPage getTaskEditorPage() {
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
if (activePage == null) {
return null;
}
IEditorPart editorPart = activePage.getActiveEditor();
AbstractTaskEditorPage taskEditorPage = null;
if (editorPart instanceof TaskEditor) {
TaskEditor taskEditor = (TaskEditor) editorPart;
IFormPage formPage = taskEditor.getActivePageInstance();
if (formPage instanceof AbstractTaskEditorPage) {
taskEditorPage = (AbstractTaskEditorPage) formPage;
}
}
return taskEditorPage;
}
}