blob: 4df8d7c24bdfa38ab978fbf1147433e71f9cde5c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2015 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.tasks.core;
import java.util.Date;
import org.eclipse.core.runtime.Assert;
import org.eclipse.mylyn.internal.tasks.core.Messages;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
/**
* @author Mik Kersten
* @author Steffen Pingel
* @since 3.0
* @noimplement This interface is not intended to be implemented by clients.
* @noextend This interface is not intended to be extended by clients.
*/
public interface ITask extends IRepositoryElement, IAttributeContainer {
/**
* @since 3.0
*/
public enum SynchronizationState {
CONFLICT, INCOMING, INCOMING_NEW, OUTGOING, OUTGOING_NEW, SYNCHRONIZED;
/**
* @since 3.0
*/
public boolean isIncoming() {
switch (this) {
case INCOMING:
case INCOMING_NEW:
case CONFLICT:
return true;
default:
return false;
}
}
/**
* @since 3.0
*/
public boolean isOutgoing() {
switch (this) {
case OUTGOING:
case OUTGOING_NEW:
case CONFLICT:
return true;
default:
return false;
}
}
/**
* @since 3.0
*/
public boolean isSynchronized() {
switch (this) {
case SYNCHRONIZED:
return true;
default:
return false;
}
}
}
/**
* Defines an interface for priorities that have an associated integer value.
*
* @author Steffen Pingel
* @since 3.7
* @see PriorityLevel#fromValue(IPriorityValue[], IPriorityValue)
*/
public static interface IPriorityValue {
/**
* Returns the integer value of this priority.
*/
int getPriorityValue();
}
/**
* @since 3.0
*/
public enum PriorityLevel {
P1, P2, P3, P4, P5;
private static final int LEVEL_COUNT = PriorityLevel.values().length;
@Override
public String toString() {
switch (this) {
case P1:
return "P1"; //$NON-NLS-1$
case P2:
return "P2"; //$NON-NLS-1$
case P3:
return "P3"; //$NON-NLS-1$
case P4:
return "P4"; //$NON-NLS-1$
case P5:
return "P5"; //$NON-NLS-1$
default:
return "P3"; //$NON-NLS-1$
}
}
/**
* @since 3.0
*/
public String getDescription() {
switch (this) {
case P1:
return Messages.PriorityLevel_Very_High;
case P2:
return Messages.PriorityLevel_High;
case P3:
return Messages.PriorityLevel_Normal;
case P4:
return Messages.PriorityLevel_Low;
case P5:
return Messages.PriorityLevel_Very_Low;
default:
return ""; //$NON-NLS-1$
}
}
/**
* @since 3.0
*/
public static PriorityLevel fromLevel(int level) {
if (level <= 1) {
return P1;
}
if (level == 2) {
return P2;
}
if (level == 3) {
return P3;
}
if (level == 4) {
return P4;
}
if (level >= 5) {
return P5;
}
return getDefault();
}
/**
* @since 3.0
*/
public static PriorityLevel fromString(String string) {
if ("P1".equals(string)) { //$NON-NLS-1$
return P1;
}
if ("P2".equals(string)) { //$NON-NLS-1$
return P2;
}
if ("P3".equals(string)) { //$NON-NLS-1$
return P3;
}
if ("P4".equals(string)) { //$NON-NLS-1$
return P4;
}
if ("P5".equals(string)) { //$NON-NLS-1$
return P5;
}
return getDefault();
}
/**
* @since 3.0
*/
public static PriorityLevel fromDescription(String string) {
if (string == null) {
return null;
}
if (string.equals(Messages.PriorityLevel_Very_High)) {
return P1;
}
if (string.equals(Messages.PriorityLevel_High)) {
return P2;
}
if (string.equals(Messages.PriorityLevel_Normal)) {
return P3;
}
if (string.equals(Messages.PriorityLevel_Low)) {
return P4;
}
if (string.equals(Messages.PriorityLevel_Very_Low)) {
return P5;
}
return getDefault();
}
/**
* @since 3.20
*/
public static boolean isValidPriority(String string) {
try {
PriorityLevel.valueOf(string);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
/**
* Maps a priority value to a {@link PriorityLevel}. The value needs to be present in <code>priorities</code>,
* otherwise {@link PriorityLevel#getDefault()} is returned.
* <p>
* NOTE: <code>priorities</code> needs to be sorted in ascending order.
*
* @param priorities
* a sorted array of priority levels
* @param value
* the value to map
* @since 3.7
*/
public static PriorityLevel fromValue(IPriorityValue[] priorities, IPriorityValue value) {
Assert.isNotNull(priorities);
if (value != null) {
int minValue = priorities[0].getPriorityValue();
int range = priorities[priorities.length - 1].getPriorityValue() - minValue;
for (IPriorityValue priority : priorities) {
if (value.equals(priority)) {
float relativeValue = (float) (priority.getPriorityValue() - minValue) / range;
int level = (int) (relativeValue * LEVEL_COUNT) + 1;
return PriorityLevel.fromLevel(level);
}
}
}
return PriorityLevel.getDefault();
}
/**
* @since 3.0
*/
public static PriorityLevel getDefault() {
return P3;
}
}
/**
* Returns the date that the task was completed.
*
* @since 3.0
*/
public abstract Date getCompletionDate();
/**
* Returns the identifier that uniquely distinguishes the repository connector associated with this task.
*
* @since 3.0
*/
public abstract String getConnectorKind();
/**
* Returns the date that this task was created.
*
* @since 3.0
*/
public abstract Date getCreationDate();
/**
* Returns the date after which this task will become overdue.
*
* @since 3.0
*/
public abstract Date getDueDate();
/**
* @since 3.0
*/
public abstract String getHandleIdentifier();
/**
* Returns the date that the repository contents of this task were last modified.
*
* @since 3.0
*/
public abstract Date getModificationDate();
/**
* Returns the label of the owner, that is, the <i>option label</i> corresponding to the value of the
* {@link TaskAttribute#USER_ASSIGNED} attribute in the TaskData. If the connector does not provide option labels
* for this attribute, the {@link #getOwnerId() ID} is returned instead.
*
* @since 3.0
*/
public abstract String getOwner();
/**
* Returns the ID of the owner, that is, the <i>value</i> of the {@link TaskAttribute#USER_ASSIGNED} attribute in
* the TaskData.
*
* @since 3.15
*/
public abstract String getOwnerId();
/**
* @since 3.0
*/
public abstract String getPriority();
/**
* @since 3.0
*/
public abstract String getRepositoryUrl();
/**
* @since 3.0
*/
public abstract String getSummary();
/**
* @since 3.0
*/
public abstract SynchronizationState getSynchronizationState();
/**
* @since 3.0
*/
public abstract String getTaskId();
/**
* User identifiable key for the task to be used in UI facilities such as label displays and hyperlinked references.
* Can return the same as the ID (e.g. in the case of Bugzilla). Can return null if no such label exists.
*
* @since 3.0
*/
public abstract String getTaskKey();
/**
* @since 3.0
*/
public abstract String getTaskKind();
/**
* @since 3.0
*/
public abstract boolean isActive();
/**
* @since 3.0
*/
public abstract boolean isCompleted();
/**
* @since 3.0
*/
public abstract void setCompletionDate(Date completionDate);
/**
* @since 3.0
*/
public abstract void setCreationDate(Date date);
/**
* @since 3.0
*/
public abstract void setDueDate(Date date);
/**
* @since 3.0
*/
public abstract void setModificationDate(Date modificationDate);
/**
* @since 3.0
*/
public abstract void setOwner(String owner);
/**
* @since 3.15
*/
public abstract void setOwnerId(String ownerId);
/**
* @since 3.0
*/
public abstract void setPriority(String priority);
/**
* @since 3.0
*/
public abstract void setSummary(String summary);
/**
* @since 3.0
*/
public abstract void setTaskKind(String kind);
/**
* @since 3.0
*/
public abstract void setUrl(String taskUrl);
/**
* @since 3.0
*/
public abstract void setTaskKey(String taskKey);
}