Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 221965
Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/jira/ui/JiraAttribute.java (-19 / +37 lines)
Lines 17-49 Link Here
17
public enum JiraAttribute {
17
public enum JiraAttribute {
18
	ISSUE_KEY(RepositoryTaskAttribute.TASK_KEY, JiraFieldType.TEXTFIELD, "Issue ID:"),
18
	ISSUE_KEY(RepositoryTaskAttribute.TASK_KEY, JiraFieldType.TEXTFIELD, "Issue ID:"),
19
19
20
	SUMMARY(RepositoryTaskAttribute.SUMMARY, JiraFieldType.TEXTFIELD, "Summary:", true, false, "summary"), DESCRIPTION(
20
	SUMMARY(RepositoryTaskAttribute.SUMMARY, JiraFieldType.TEXTFIELD, "Summary:", true, false, "summary"),
21
			RepositoryTaskAttribute.DESCRIPTION, JiraFieldType.TEXTFIELD, "Description:", true, false, "description"), STATUS(
22
			RepositoryTaskAttribute.STATUS, JiraFieldType.SELECT, "Status:"), RESOLUTION(
23
			RepositoryTaskAttribute.RESOLUTION, JiraFieldType.SELECT, "Resolution:", true, false, "resolution"),
24
21
25
	DATE_CREATION(RepositoryTaskAttribute.DATE_CREATION, JiraFieldType.TEXTFIELD, "Created:"), DATE_MODIFIED(
22
	DESCRIPTION(RepositoryTaskAttribute.DESCRIPTION, JiraFieldType.TEXTFIELD, "Description:", true, false,
26
			RepositoryTaskAttribute.DATE_MODIFIED, JiraFieldType.TEXTFIELD, "Modified:"),
23
			"description"),
24
25
	STATUS(RepositoryTaskAttribute.STATUS, JiraFieldType.SELECT, "Status:"),
26
27
	RESOLUTION(RepositoryTaskAttribute.RESOLUTION, JiraFieldType.SELECT, "Resolution:", true, false, "resolution"),
28
29
	DATE_CREATION(RepositoryTaskAttribute.DATE_CREATION, JiraFieldType.TEXTFIELD, "Created:"),
30
31
	DATE_MODIFIED(RepositoryTaskAttribute.DATE_MODIFIED, JiraFieldType.TEXTFIELD, "Modified:"),
27
32
28
	USER_ASSIGNED(RepositoryTaskAttribute.USER_ASSIGNED, JiraFieldType.USERPICKER, "Assigned to:", true, false,
33
	USER_ASSIGNED(RepositoryTaskAttribute.USER_ASSIGNED, JiraFieldType.USERPICKER, "Assigned to:", true, false,
29
			"assignee"), USER_REPORTER(RepositoryTaskAttribute.USER_REPORTER, JiraFieldType.USERPICKER, "Reported by:"),
34
			"assignee"),
35
36
	USER_REPORTER(RepositoryTaskAttribute.USER_REPORTER, JiraFieldType.USERPICKER, "Reported by:"),
37
38
	PRODUCT(RepositoryTaskAttribute.PRODUCT, JiraFieldType.PROJECT, "Project:", false, true),
39
40
	PRIORITY(RepositoryTaskAttribute.PRIORITY, JiraFieldType.SELECT, "Priority:", false, false, "priority"),
30
41
31
	PRODUCT(RepositoryTaskAttribute.PRODUCT, JiraFieldType.PROJECT, "Project:", false, true), PRIORITY(
42
	TYPE(JiraAttributeFactory.ATTRIBUTE_TYPE, JiraFieldType.SELECT, "Type:", false, false, "issuetype"),
32
			RepositoryTaskAttribute.PRIORITY, JiraFieldType.SELECT, "Priority:", false, false, "priority"),
33
43
34
	TYPE(JiraAttributeFactory.ATTRIBUTE_TYPE, JiraFieldType.SELECT, "Type:", false, false, "issuetype"), PARENT_KEY(
44
	PARENT_KEY(JiraAttributeFactory.ATTRIBUTE_ISSUE_PARENT_KEY, JiraFieldType.ISSUELINK, "Parent:", false, true),
35
			JiraAttributeFactory.ATTRIBUTE_ISSUE_PARENT_KEY, JiraFieldType.ISSUELINK, "Parent:", false, true),
36
45
37
	PARENT_ID(JiraAttributeFactory.ATTRIBUTE_ISSUE_PARENT_ID, JiraFieldType.ISSUELINK, "Parent ID:", true, true),
46
	PARENT_ID(JiraAttributeFactory.ATTRIBUTE_ISSUE_PARENT_ID, JiraFieldType.ISSUELINK, "Parent ID:", true, true),
38
47
39
	COMPONENTS(JiraAttributeFactory.ATTRIBUTE_COMPONENTS, JiraFieldType.MULTISELECT, "Components:", false, false,
48
	COMPONENTS(JiraAttributeFactory.ATTRIBUTE_COMPONENTS, JiraFieldType.MULTISELECT, "Components:", false, false,
40
			"components"), AFFECTSVERSIONS(JiraAttributeFactory.ATTRIBUTE_AFFECTSVERSIONS, JiraFieldType.MULTISELECT,
49
			"components"),
41
			"Affects Versions:", false, false, "versions"), FIXVERSIONS(JiraAttributeFactory.ATTRIBUTE_FIXVERSIONS,
50
42
			JiraFieldType.MULTISELECT, "Fix Versions:", false, false, "fixVersions"),
51
	AFFECTSVERSIONS(JiraAttributeFactory.ATTRIBUTE_AFFECTSVERSIONS, JiraFieldType.MULTISELECT, "Affects Versions:",
52
			false, false, "versions"),
53
54
	FIXVERSIONS(JiraAttributeFactory.ATTRIBUTE_FIXVERSIONS, JiraFieldType.MULTISELECT, "Fix Versions:", false, false,
55
			"fixVersions"),
43
56
44
	ESTIMATE(JiraAttributeFactory.ATTRIBUTE_ESTIMATE, JiraFieldType.TEXTFIELD, "Estimate:", false, false,
57
	ESTIMATE(JiraAttributeFactory.ATTRIBUTE_ESTIMATE, JiraFieldType.TEXTFIELD, "Estimate:", false, false,
45
			"timetracking"),
58
			"timetracking"),
46
59
60
	ACTUAL(JiraAttributeFactory.ATTRIBUTE_ACTUAL, JiraFieldType.TEXTFIELD, "Time Spent:", false, true, "timespent"),
61
47
	DUE(JiraAttributeFactory.ATTRIBUTE_DUE_DATE, JiraFieldType.TEXTFIELD, "Due Date:", true, false, "duedate"),
62
	DUE(JiraAttributeFactory.ATTRIBUTE_DUE_DATE, JiraFieldType.TEXTFIELD, "Due Date:", true, false, "duedate"),
48
63
49
	ENVIRONMENT(JiraAttributeFactory.ATTRIBUTE_ENVIRONMENT, JiraFieldType.TEXTAREA, "Environment:", false, false,
64
	ENVIRONMENT(JiraAttributeFactory.ATTRIBUTE_ENVIRONMENT, JiraFieldType.TEXTAREA, "Environment:", false, false,
Lines 51-62 Link Here
51
66
52
	COMMENT_NEW(RepositoryTaskAttribute.COMMENT_NEW, JiraFieldType.TEXTAREA, "New Comment:", true, false, "comment"),
67
	COMMENT_NEW(RepositoryTaskAttribute.COMMENT_NEW, JiraFieldType.TEXTAREA, "New Comment:", true, false, "comment"),
53
68
54
	COMMENT_AUTHOR(RepositoryTaskAttribute.COMMENT_AUTHOR, JiraFieldType.TEXTAREA, "Author:"), COMMENT_TEXT(
69
	COMMENT_AUTHOR(RepositoryTaskAttribute.COMMENT_AUTHOR, JiraFieldType.TEXTAREA, "Author:"),
55
			RepositoryTaskAttribute.COMMENT_TEXT, JiraFieldType.TEXTAREA, "Comment:"), COMMENT_DATE(
70
56
			RepositoryTaskAttribute.COMMENT_DATE, JiraFieldType.TEXTAREA, "Date:"),
71
	COMMENT_TEXT(RepositoryTaskAttribute.COMMENT_TEXT, JiraFieldType.TEXTAREA, "Comment:"),
72
73
	COMMENT_DATE(RepositoryTaskAttribute.COMMENT_DATE, JiraFieldType.TEXTAREA, "Date:"),
74
75
	SUBTASK_IDS(JiraAttributeFactory.ATTRIBUTE_SUBTASK_IDS, JiraFieldType.TEXTFIELD, "Subtask ids:", true, true),
57
76
58
	SUBTASK_IDS(JiraAttributeFactory.ATTRIBUTE_SUBTASK_IDS, JiraFieldType.TEXTFIELD, "Subtask ids:", true, true), SUBTASK_KEYS(
77
	SUBTASK_KEYS(JiraAttributeFactory.ATTRIBUTE_SUBTASK_KEYS, JiraFieldType.ISSUELINKS, "Subtasks:", false, true),
59
			JiraAttributeFactory.ATTRIBUTE_SUBTASK_KEYS, JiraFieldType.ISSUELINKS, "Subtasks:", false, true),
60
78
61
	SECURITY_LEVEL(JiraAttributeFactory.ATTRIBUTE_SECURITY_LEVEL, JiraFieldType.SELECT, "Security Level:", false, true),
79
	SECURITY_LEVEL(JiraAttributeFactory.ATTRIBUTE_SECURITY_LEVEL, JiraFieldType.SELECT, "Security Level:", false, true),
62
80
(-)src/org/eclipse/mylyn/internal/jira/ui/JiraTaskDataHandler.java (+5 lines)
Lines 195-200 Link Here
195
			fixVersions.addOption(version.getName(), version.getId());
195
			fixVersions.addOption(version.getName(), version.getId());
196
		}
196
		}
197
197
198
		addAttribute(data, JiraAttributeFactory.ATTRIBUTE_ACTUAL);
199
198
		RepositoryTaskAttribute environment = addAttribute(data, JiraAttributeFactory.ATTRIBUTE_ENVIRONMENT);
200
		RepositoryTaskAttribute environment = addAttribute(data, JiraAttributeFactory.ATTRIBUTE_ENVIRONMENT);
199
		environment.putMetaDataValue(JiraAttributeFactory.TYPE_KEY, JiraFieldType.TEXTAREA.getKey());
201
		environment.putMetaDataValue(JiraAttributeFactory.TYPE_KEY, JiraFieldType.TEXTAREA.getKey());
200
202
Lines 305-310 Link Here
305
307
306
		data.setAttributeValue(JiraAttributeFactory.ATTRIBUTE_ESTIMATE, Long.toString(jiraIssue.getEstimate() / 60));
308
		data.setAttributeValue(JiraAttributeFactory.ATTRIBUTE_ESTIMATE, Long.toString(jiraIssue.getEstimate() / 60));
307
309
310
		JiraTimeFormat f = new JiraTimeFormat();
311
		data.setAttributeValue(JiraAttributeFactory.ATTRIBUTE_ACTUAL, f.format(jiraIssue.getActual()));
312
308
		if (jiraIssue.getDue() != null) {
313
		if (jiraIssue.getDue() != null) {
309
			data.setAttributeValue(JiraAttributeFactory.ATTRIBUTE_DUE_DATE, JiraUtils.dateToString(jiraIssue.getDue()));
314
			data.setAttributeValue(JiraAttributeFactory.ATTRIBUTE_DUE_DATE, JiraUtils.dateToString(jiraIssue.getDue()));
310
		} else {
315
		} else {
(-)src/org/eclipse/mylyn/internal/jira/ui/JiraAttributeFactory.java (+2 lines)
Lines 42-47 Link Here
42
42
43
	public static final String ATTRIBUTE_ESTIMATE = "attribute.jira.estimate";
43
	public static final String ATTRIBUTE_ESTIMATE = "attribute.jira.estimate";
44
44
45
	public static final String ATTRIBUTE_ACTUAL = "attribute.jira.actual";
46
45
	public static final String ATTRIBUTE_DUE_DATE = "attribute.jira.due";
47
	public static final String ATTRIBUTE_DUE_DATE = "attribute.jira.due";
46
48
47
	public static final String ATTRIBUTE_SUBTASK_IDS = "attribute.jira.subtask_ids";
49
	public static final String ATTRIBUTE_SUBTASK_IDS = "attribute.jira.subtask_ids";
(-)src/org/eclipse/mylyn/internal/jira/ui/JiraTimeFormat.java (+86 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004, 2007 Mylyn project committers and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *******************************************************************************/
8
9
package org.eclipse.mylyn.internal.jira.ui;
10
11
import java.text.FieldPosition;
12
import java.text.Format;
13
import java.text.ParsePosition;
14
import java.util.regex.Matcher;
15
import java.util.regex.Pattern;
16
17
/**
18
 * JIRA time format to convert Long value in seconds to JIRA time format:
19
 * 
20
 * <blockquote> The format of this is '*w *d *h *m' (representing weeks, days, hours and minutes - where * can be any
21
 * number) Examples: 4d, 5h 30m, 60m and 3w. Note: Your current conversion rates are 1w = 7d and 1d = 24h </blockquote>
22
 * 
23
 * @author Eugene Kuleshov
24
 */
25
public class JiraTimeFormat extends Format {
26
27
	private static final long serialVersionUID = 1L;
28
29
	/**
30
	 * A simplified conversion from seconds to '*h *m' format
31
	 * 
32
	 * @param a
33
	 *            Long seconds value to format
34
	 */
35
	@Override
36
	public StringBuffer format(Object obj, StringBuffer sb, FieldPosition pos) {
37
		if (obj instanceof Long) {
38
			format(sb, (Long) obj);
39
		} else if (obj instanceof Integer) {
40
			format(sb, (Integer) obj);
41
		}
42
		return sb;
43
	}
44
45
	private void format(StringBuffer sb, long seconds) {
46
		long hours = seconds / (60 * 60);
47
		if (hours > 0) {
48
			sb.append(Long.toString(hours)).append('h');
49
		}
50
		long minutes = (seconds % (60 * 60)) / 60;
51
		if (minutes > 0) {
52
			if (sb.length() > 0) {
53
				sb.append(' ');
54
			}
55
			sb.append(Long.toString(minutes)).append('m');
56
		} else if (sb.length() == 0) {
57
			sb.append("0m");
58
		}
59
	}
60
61
	@Override
62
	public Object parseObject(String source, ParsePosition pos) {
63
		Pattern pattern = Pattern.compile("(\\d+w)?\\s?(\\d+d)?\\s?(\\d+h)?\\s?(\\d+m)?");
64
		Matcher matcher = pattern.matcher(source);
65
		long value = 0;
66
		if (matcher.find()) {
67
			for (int i = 1; i <= matcher.groupCount(); i++) {
68
				String group = matcher.group(i);
69
				if (group != null) {
70
					if (group.endsWith("m")) {
71
						value += Long.parseLong(group.substring(0, group.length() - 1)) * 60;
72
					} else if (group.endsWith("h")) {
73
						value += Long.parseLong(group.substring(0, group.length() - 1)) * 60 * 60;
74
					} else if (group.endsWith("d")) {
75
						value += Long.parseLong(group.substring(0, group.length() - 1)) * 60 * 60 * 24;
76
					} else if (group.endsWith("w")) {
77
						value += Long.parseLong(group.substring(0, group.length() - 1)) * 60 * 60 * 24 * 7;
78
					}
79
				}
80
			}
81
		}
82
		pos.setIndex(source.length() + 1);
83
		return Long.valueOf(value);
84
	}
85
86
}
(-)src/org/eclipse/mylyn/internal/jira/ui/JiraTimeFormatTest.java (+44 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004, 2007 Mylyn project committers and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *******************************************************************************/
8
9
package org.eclipse.mylyn.internal.jira.ui;
10
11
import junit.framework.TestCase;
12
13
/**
14
 * @author Eugene Kuleshov
15
 */
16
public class JiraTimeFormatTest extends TestCase {
17
18
	public void testFormat() {
19
		JiraTimeFormat f = new JiraTimeFormat();
20
21
		assertEquals("0m", f.format(1));
22
		assertEquals("1m", f.format(60));
23
		assertEquals("30m", f.format(60 * 30));
24
		assertEquals("1h", f.format(60 * 60));
25
		assertEquals("1h 30m", f.format(60 * 90));
26
	}
27
28
	public void testParse() throws Exception {
29
		JiraTimeFormat f = new JiraTimeFormat();
30
31
		assertEquals(0L, f.parseObject(""));
32
		assertEquals(0L, f.parseObject("0m"));
33
		assertEquals(60L, f.parseObject("1m"));
34
		assertEquals(60L * 30, f.parseObject("30m"));
35
		assertEquals(60L * 60, f.parseObject("60m"));
36
		assertEquals(60L * 60, f.parseObject("1h"));
37
		assertEquals(60L * 90, f.parseObject("1h 30m"));
38
		assertEquals(60L * 60 * 25, f.parseObject("1d 1h"));
39
		assertEquals(60L * 60 * 25 + 60, f.parseObject("1d 1h 1m"));
40
		assertEquals(60L * 60 * 24 * 7, f.parseObject("1w"));
41
		assertEquals(60L * (60 * 24 * 7 + 60 * 24 + 61), f.parseObject("1w 1d 1h 1m"));
42
	}
43
44
}

Return to bug 221965