Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Green2012-01-26 19:30:04 -0500
committerDavid Green2012-02-22 16:26:43 -0500
commite2dabbd18a97fc24e54ee818e90f4d89c28c8d26 (patch)
tree821f5e885fc083c9f87b8965f52f9ab50ccd439c /org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data
parent5b126670ee3f8f3b8e69517a96b7d9f94f99acbc (diff)
downloadorg.eclipse.mylyn.tasks-e2dabbd18a97fc24e54ee818e90f4d89c28c8d26.tar.gz
org.eclipse.mylyn.tasks-e2dabbd18a97fc24e54ee818e90f4d89c28c8d26.tar.xz
org.eclipse.mylyn.tasks-e2dabbd18a97fc24e54ee818e90f4d89c28c8d26.zip
bug 191522: provide full text search functionality over task comments
https://bugs.eclipse.org/bugs/show_bug.cgi?id=191522 Change-Id: I79355f021d7f8d22c21f4e90eb7e2f12ee2b13ca
Diffstat (limited to 'org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data')
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java483
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/DefaultTaskSchema.java33
2 files changed, 302 insertions, 214 deletions
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java
index 42bff0760..8b48c3b56 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java
@@ -1,198 +1,285 @@
-/*******************************************************************************
- * Copyright (c) 2011 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.tasks.core.data;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.eclipse.core.runtime.Assert;
-
-/**
- * Base class for task schemas. Clients should subclass to define a specific schema.
- *
- * @author Steffen Pingel
- * @since 3.5
- */
-public abstract class AbstractTaskSchema {
-
- public static class Field {
-
- private EnumSet<Flag> flags;
-
- private final String key;
-
- private final String label;
-
- private final String type;
-
- protected Field(String key, String label, String type) {
- this(key, label, type, (Flag[]) null);
- }
-
- protected Field(String key, String label, String type, Flag... flags) {
- Assert.isNotNull(key);
- Assert.isNotNull(label);
- Assert.isNotNull(type);
- this.key = key;
- this.label = label;
- this.type = type;
- if (flags == null) {
- this.flags = EnumSet.noneOf(Flag.class);
- } else {
- this.flags = EnumSet.copyOf(Arrays.asList(flags));
- }
- }
-
- public TaskAttribute createAttribute(TaskAttribute parent) {
- TaskAttribute attribute = parent.createMappedAttribute(getKey());
- // meta data
- TaskAttributeMetaData metaData = attribute.getMetaData();
- metaData.setLabel(getLabel());
- metaData.setType(getType());
- metaData.setReadOnly(isReadOnly());
- metaData.setKind(getKind());
- // options
- Map<String, String> options = getDefaultOptions();
- if (options != null) {
- for (Entry<String, String> option : options.entrySet()) {
- attribute.putOption(option.getKey(), option.getValue());
- }
- }
- return attribute;
- }
-
- public Map<String, String> getDefaultOptions() {
- return Collections.emptyMap();
- }
-
- public String getKey() {
- return key;
- }
-
- public String getKind() {
- if (flags.contains(Flag.ATTRIBUTE)) {
- return TaskAttribute.KIND_DEFAULT;
- } else if (flags.contains(Flag.PEOPLE)) {
- return TaskAttribute.KIND_PEOPLE;
- } else if (flags.contains(Flag.OPERATION)) {
- return TaskAttribute.KIND_OPERATION;
- }
- return null;
- }
-
- public String getLabel() {
- return label;
- }
-
- public String getType() {
- return type;
- }
-
- public boolean isReadOnly() {
- return flags.contains(Flag.READ_ONLY);
- }
-
- @Override
- public String toString() {
- return getLabel();
- }
-
- }
-
- public enum Flag {
- ATTRIBUTE, OPERATION, PEOPLE, READ_ONLY
- };
-
- protected class FieldFactory {
-
- private EnumSet<Flag> flags;
-
- private String key;
-
- private String label;
-
- private String type;
-
- public FieldFactory(Field source) {
- this.flags = EnumSet.copyOf(source.flags);
- this.key = source.key;
- this.label = source.label;
- this.type = source.type;
- }
-
- public FieldFactory addFlags(Flag... flags) {
- this.flags.addAll(Arrays.asList(flags));
- return this;
- }
-
- public Field create() {
- return createField(key, label, type, (!flags.isEmpty()) ? flags.toArray(new Flag[0]) : null);
- }
-
- public FieldFactory flags(Flag... flags) {
- this.flags = EnumSet.copyOf(Arrays.asList(flags));
- return this;
- }
-
- public FieldFactory key(String key) {
- this.key = key;
- return this;
- }
-
- public FieldFactory label(String label) {
- this.label = label;
- return this;
- }
-
- public FieldFactory removeFlags(Flag... flags) {
- this.flags.removeAll(Arrays.asList(flags));
- return this;
- }
-
- public FieldFactory type(String type) {
- this.type = type;
- return this;
- }
-
- }
-
- private final Map<String, Field> fieldByKey = new LinkedHashMap<String, Field>();
-
- public Field getFieldByKey(String taskKey) {
- return fieldByKey.get(taskKey);
- }
-
- public void initialize(TaskData taskData) {
- for (Field field : fieldByKey.values()) {
- field.createAttribute(taskData.getRoot());
- }
- }
-
- protected Field createField(String key, String label, String type) {
- return createField(key, label, type, (Flag[]) null);
- }
-
- protected Field createField(String key, String label, String type, Flag... flags) {
- Field field = new Field(key, label, type, flags);
- fieldByKey.put(key, field);
- return field;
- }
-
- protected FieldFactory inheritFrom(Field source) {
- return new FieldFactory(source);
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2011, 2012 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.tasks.core.data;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.core.runtime.Assert;
+
+/**
+ * Base class for task schemas. Clients should subclass to define a specific schema.
+ *
+ * @author Steffen Pingel
+ * @author David Green
+ * @since 3.5
+ */
+public abstract class AbstractTaskSchema {
+
+ public static class Field {
+
+ private EnumSet<Flag> flags;
+
+ private final String key;
+
+ private final String label;
+
+ private final String type;
+
+ private final String indexKey;
+
+ protected Field(String key, String label, String type) {
+ this(key, label, type, (Flag[]) null);
+ }
+
+ protected Field(String key, String label, String type, Flag... flags) {
+ this(key, label, type, null, flags);
+ }
+
+ /**
+ * @param key
+ * the task attribute key, which may be a common task attribute key defined in defined in
+ * {@link TaskAttribute}
+ * @param label
+ * the user-visible label that is used by the user to identify this field
+ * @param type
+ * the type of the field, should be one of the constants defined in TaskAttribute (
+ * <code>TaskAttribute.TYPE_*</code>)
+ * @param indexKey
+ * the index key, or null if this should not be indexed
+ * @param flags
+ * the flags, or null
+ * @since 3.7
+ */
+ public Field(String key, String label, String type, String indexKey, Flag... flags) {
+ this.indexKey = indexKey;
+ Assert.isNotNull(key);
+ Assert.isNotNull(label);
+ Assert.isNotNull(type);
+ this.key = key;
+ this.label = label;
+ this.type = type;
+ if (flags == null || flags.length == 0) {
+ this.flags = EnumSet.noneOf(Flag.class);
+ } else {
+ this.flags = EnumSet.copyOf(Arrays.asList(flags));
+ }
+ }
+
+ public TaskAttribute createAttribute(TaskAttribute parent) {
+ TaskAttribute attribute = parent.createMappedAttribute(getKey());
+ // meta data
+ TaskAttributeMetaData metaData = attribute.getMetaData();
+ metaData.setLabel(getLabel());
+ metaData.setType(getType());
+ metaData.setReadOnly(isReadOnly());
+ metaData.setKind(getKind());
+ // options
+ Map<String, String> options = getDefaultOptions();
+ if (options != null) {
+ for (Entry<String, String> option : options.entrySet()) {
+ attribute.putOption(option.getKey(), option.getValue());
+ }
+ }
+ return attribute;
+ }
+
+ public Map<String, String> getDefaultOptions() {
+ return Collections.emptyMap();
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ /**
+ * the key to use when indexing this field
+ *
+ * @return the index key, or null if this should not be indexed
+ * @since 3.7
+ */
+ public String getIndexKey() {
+ return indexKey;
+ }
+
+ public String getKind() {
+ if (flags.contains(Flag.ATTRIBUTE)) {
+ return TaskAttribute.KIND_DEFAULT;
+ } else if (flags.contains(Flag.PEOPLE)) {
+ return TaskAttribute.KIND_PEOPLE;
+ } else if (flags.contains(Flag.OPERATION)) {
+ return TaskAttribute.KIND_OPERATION;
+ }
+ return null;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public boolean isReadOnly() {
+ return flags.contains(Flag.READ_ONLY);
+ }
+
+ @Override
+ public String toString() {
+ return getLabel();
+ }
+
+ /**
+ * @since 3.7
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((indexKey == null) ? 0 : indexKey.hashCode());
+ result = prime * result + ((key == null) ? 0 : key.hashCode());
+ return result;
+ }
+
+ /**
+ * @since 3.7
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ Field other = (Field) obj;
+ if (indexKey == null) {
+ if (other.indexKey != null) {
+ return false;
+ }
+ } else if (!indexKey.equals(other.indexKey)) {
+ return false;
+ }
+ if (key == null) {
+ if (other.key != null) {
+ return false;
+ }
+ } else if (!key.equals(other.key)) {
+ return false;
+ }
+ return true;
+ }
+
+ }
+
+ public enum Flag {
+ ATTRIBUTE, OPERATION, PEOPLE, READ_ONLY
+ };
+
+ protected class FieldFactory {
+
+ private EnumSet<Flag> flags;
+
+ private String key;
+
+ private String label;
+
+ private String type;
+
+ public FieldFactory(Field source) {
+ this.flags = EnumSet.copyOf(source.flags);
+ this.key = source.key;
+ this.label = source.label;
+ this.type = source.type;
+ }
+
+ public FieldFactory addFlags(Flag... flags) {
+ this.flags.addAll(Arrays.asList(flags));
+ return this;
+ }
+
+ public Field create() {
+ return createField(key, label, type, (!flags.isEmpty()) ? flags.toArray(new Flag[0]) : null);
+ }
+
+ public FieldFactory flags(Flag... flags) {
+ this.flags = EnumSet.copyOf(Arrays.asList(flags));
+ return this;
+ }
+
+ public FieldFactory key(String key) {
+ this.key = key;
+ return this;
+ }
+
+ public FieldFactory label(String label) {
+ this.label = label;
+ return this;
+ }
+
+ public FieldFactory removeFlags(Flag... flags) {
+ this.flags.removeAll(Arrays.asList(flags));
+ return this;
+ }
+
+ public FieldFactory type(String type) {
+ this.type = type;
+ return this;
+ }
+
+ }
+
+ private final Map<String, Field> fieldByKey = new LinkedHashMap<String, Field>();
+
+ public Field getFieldByKey(String taskKey) {
+ return fieldByKey.get(taskKey);
+ }
+
+ public void initialize(TaskData taskData) {
+ for (Field field : fieldByKey.values()) {
+ field.createAttribute(taskData.getRoot());
+ }
+ }
+
+ protected Field createField(String key, String label, String type) {
+ return createField(key, label, type, (Flag[]) null);
+ }
+
+ /**
+ * @since 3.7
+ * @see Field#Field(String, String, String, String, Flag...)
+ */
+ protected Field createField(String key, String label, String type, String indexKey, Flag... flags) {
+ Field field = new Field(key, label, type, indexKey, flags);
+ fieldByKey.put(key, field);
+ return field;
+ }
+
+ protected Field createField(String key, String label, String type, Flag... flags) {
+ Field field = new Field(key, label, type, flags);
+ fieldByKey.put(key, field);
+ return field;
+ }
+
+ protected FieldFactory inheritFrom(Field source) {
+ return new FieldFactory(source);
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/DefaultTaskSchema.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/DefaultTaskSchema.java
index a52f294ae..4033cfc0f 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/DefaultTaskSchema.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/DefaultTaskSchema.java
@@ -95,61 +95,62 @@ public final class DefaultTaskSchema extends AbstractTaskSchema {
TaskAttribute.TYPE_URL, Flag.READ_ONLY);
public final Field COMPONENT = createField(TaskAttribute.COMPONENT, Messages.DefaultTaskSchema_Component_Label,
- TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
+ TaskAttribute.TYPE_SINGLE_SELECT, "component", Flag.ATTRIBUTE); //$NON-NLS-1$
public final Field DATE_COMPLETION = createField(TaskAttribute.DATE_COMPLETION,
- Messages.DefaultTaskSchema_Completion_Label, TaskAttribute.TYPE_DATE, Flag.READ_ONLY);
+ Messages.DefaultTaskSchema_Completion_Label, TaskAttribute.TYPE_DATE, "completion_date", Flag.READ_ONLY); //$NON-NLS-1$
public final Field DATE_CREATION = createField(TaskAttribute.DATE_CREATION,
- Messages.DefaultTaskSchema_Created_Label, TaskAttribute.TYPE_DATE, Flag.READ_ONLY);
+ Messages.DefaultTaskSchema_Created_Label, TaskAttribute.TYPE_DATE, "creation_date", Flag.READ_ONLY); //$NON-NLS-1$
public final Field DATE_DUE = createField(TaskAttribute.DATE_DUE, Messages.DefaultTaskSchema_Due_Label,
- TaskAttribute.TYPE_DATE);
+ TaskAttribute.TYPE_DATE, "due_date"); //$NON-NLS-1$
public final Field DATE_MODIFICATION = createField(TaskAttribute.DATE_MODIFICATION,
- Messages.DefaultTaskSchema_Modified_Label, TaskAttribute.TYPE_DATE, Flag.READ_ONLY);
+ Messages.DefaultTaskSchema_Modified_Label, TaskAttribute.TYPE_DATE, "modification_date", Flag.READ_ONLY); //$NON-NLS-1$
public final Field DESCRIPTION = createField(TaskAttribute.DESCRIPTION,
- Messages.DefaultTaskSchema_Description_Label, TaskAttribute.TYPE_LONG_RICH_TEXT);
+ Messages.DefaultTaskSchema_Description_Label, "description", TaskAttribute.TYPE_LONG_RICH_TEXT); //$NON-NLS-1$
public final Field KEYWORDS = createField(TaskAttribute.KEYWORDS, Messages.DefaultTaskSchema_Keywords_Label,
- TaskAttribute.TYPE_MULTI_SELECT, Flag.ATTRIBUTE);
+ TaskAttribute.TYPE_MULTI_SELECT, "keywords", Flag.ATTRIBUTE); //$NON-NLS-1$
public final Field NEW_COMMENT = createField(TaskAttribute.COMMENT_NEW, Messages.DefaultTaskSchema_Rank_Label,
TaskAttribute.TYPE_LONG_RICH_TEXT);
public final Field PRIORITY = createField(TaskAttribute.PRIORITY, Messages.DefaultTaskSchema_Priority_Label,
- TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
+ TaskAttribute.TYPE_SINGLE_SELECT, "priority", Flag.ATTRIBUTE); //$NON-NLS-1$
public final Field PRODUCT = createField(TaskAttribute.PRODUCT, Messages.DefaultTaskSchema_Product_Label,
- TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
+ TaskAttribute.TYPE_SINGLE_SELECT, "product", Flag.ATTRIBUTE); //$NON-NLS-1$
public final Field RANK = createField(TaskAttribute.RANK, Messages.DefaultTaskSchema_Rank_Label,
TaskAttribute.TYPE_INTEGER, Flag.READ_ONLY);
public final Field RESOLUTION = createField(TaskAttribute.RESOLUTION, Messages.DefaultTaskSchema_Resolution_Label,
- TaskAttribute.TYPE_SINGLE_SELECT, Flag.READ_ONLY);
+ TaskAttribute.TYPE_SINGLE_SELECT, "resolution", Flag.READ_ONLY); //$NON-NLS-1$
public final Field SEVERITY = createField(TaskAttribute.SEVERITY, Messages.DefaultTaskSchema_Severity_Label,
- TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
+ TaskAttribute.TYPE_SINGLE_SELECT, "severity", Flag.ATTRIBUTE); //$NON-NLS-1$
public final Field STATUS = createField(TaskAttribute.STATUS, Messages.DefaultTaskSchema_Status_Label,
- TaskAttribute.TYPE_SHORT_TEXT, Flag.READ_ONLY);
+ TaskAttribute.TYPE_SHORT_TEXT, "status", Flag.READ_ONLY); //$NON-NLS-1$
public final Field SUMMARY = createField(TaskAttribute.SUMMARY, Messages.DefaultTaskSchema_Summary_Label,
- TaskAttribute.TYPE_SHORT_RICH_TEXT);
+ TaskAttribute.TYPE_SHORT_RICH_TEXT, "summary"); //$NON-NLS-1$
public final Field TASK_KEY = createField(TaskAttribute.TASK_KEY, Messages.DefaultTaskSchema_Key_Label,
- TaskAttribute.TYPE_SHORT_TEXT, Flag.READ_ONLY);
+ TaskAttribute.TYPE_SHORT_TEXT, "task_key", Flag.READ_ONLY); //$NON-NLS-1$
public final Field TASK_KIND = createField(TaskAttribute.TASK_KIND, Messages.DefaultTaskSchema_Kind_Label,
TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
public final Field USER_ASSIGNED = createField(TaskAttribute.USER_ASSIGNED, Messages.DefaultTaskSchema_Owner_Label,
- TaskAttribute.TYPE_PERSON, Flag.PEOPLE);
+ TaskAttribute.TYPE_PERSON, "assignee", Flag.PEOPLE); //$NON-NLS-1$
public final Field USER_REPORTER = createField(TaskAttribute.USER_REPORTER,
- Messages.DefaultTaskSchema_Reporter_Label, TaskAttribute.TYPE_PERSON, Flag.PEOPLE, Flag.READ_ONLY);
+ Messages.DefaultTaskSchema_Reporter_Label, TaskAttribute.TYPE_PERSON, "reporter", Flag.PEOPLE, //$NON-NLS-1$
+ Flag.READ_ONLY);
public final Field TASK_URL = createField(TaskAttribute.TASK_URL, Messages.DefaultTaskSchema_URL_Label,
TaskAttribute.TYPE_URL, Flag.READ_ONLY);

Back to the top