Bug 575391 BasicModelSearchService now supports the use of wildcards and
regular expressions

Change-Id: I2cb5ce4b05625d9ee5759bcd4a1f24103a4adcca
diff --git a/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/services/BasicModelSearchService.java b/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/services/BasicModelSearchService.java
index d94b012..ef6a172 100644
--- a/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/services/BasicModelSearchService.java
+++ b/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/services/BasicModelSearchService.java
@@ -1,7 +1,7 @@
 /**

  * <copyright>

  *

- * Copyright (c) 2015-2017 itemis and others.

+ * Copyright (c) 2015-2021 itemis 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

@@ -10,6 +10,7 @@
  * Contributors:

  *     itemis - Initial API and implementation

  *     itemis - [501899] Use base index instead of IncQuery patterns

+ *     Elektrobit - [575391] BasicModelSearchService now supports the use of wildcards and regular expressions

  *

  * </copyright>

  */

@@ -17,7 +18,10 @@
 

 import java.util.ArrayList;

 import java.util.Collection;

+import java.util.HashMap;

 import java.util.List;

+import java.util.Map;

+import java.util.regex.Pattern;

 

 import org.eclipse.emf.common.util.TreeIterator;

 import org.eclipse.emf.ecore.EAttribute;

@@ -32,7 +36,8 @@
 

 public class BasicModelSearchService extends AbstractMetaModelService implements IModelSearchService {

 

-	private RetrieveNameAttributeHelper helper = new RetrieveNameAttributeHelper();

+	protected RetrieveNameAttributeHelper helper = new RetrieveNameAttributeHelper();

+	private Map<Character, String> replacementMap = null;

 

 	public BasicModelSearchService(Collection<IMetaModelDescriptor> mmDescriptors) {

 		super(mmDescriptors);

@@ -46,20 +51,16 @@
 	@Override

 	public List<ModelSearchMatch> getMatches(Collection<Resource> resources, QuerySpecification spec) {

 		List<ModelSearchMatch> result = new ArrayList<ModelSearchMatch>();

+		initReplacementMap();

 		for (Resource resource : resources) {

 			TreeIterator<EObject> allContents = resource.getAllContents();

 			while (allContents.hasNext()) {

 				EObject eObject = allContents.next();

 				EAttribute nameAttribute = helper.getNameAttribute(eObject);

 				if (nameAttribute != null) {

-					Object name = eObject.eGet(nameAttribute);

-					if (name != null) {

-						// TODO Add support for *, ?, \*, \?, \\

-						if (spec.isCaseSensitive()) {

-							if (name.toString().equals(spec.getPattern())) {

-								result.add(createModelSearchMatch(eObject));

-							}

-						} else if (name.toString().equalsIgnoreCase(spec.getPattern())) {

+					Object nameObj = eObject.eGet(nameAttribute);

+					if (nameObj != null) {

+						if (isMatchingPattern(spec, nameObj.toString())) {

 							result.add(createModelSearchMatch(eObject));

 						}

 					}

@@ -69,6 +70,49 @@
 		return result;

 	}

 

+	private boolean isMatchingPattern(QuerySpecification spec, String content) {

+		if (spec == null) {

+			return false;

+		}

+		String specificationPattern = spec.getPattern();

+		if (specificationPattern == null) {

+			return false;

+		}

+		String regularExpression = getRegularExpression(specificationPattern);

+		int flag = spec.isCaseSensitive() ? 0 : Pattern.CASE_INSENSITIVE;

+		return Pattern.compile(regularExpression, flag).matcher(content).find();

+	}

+

+	private String getRegularExpression(String globInput) {

+		StringBuilder sb = new StringBuilder();

+		for (char character : globInput.toCharArray()) {

+			String replacement = replacementMap.get(character);

+			if (replacement == null) {

+				sb.append(character);

+			} else {

+				sb.append(replacement);

+			}

+		}

+		return sb.toString();

+	}

+

+	private void initReplacementMap() {

+		if (replacementMap != null) {

+			return;

+		}

+		replacementMap = new HashMap<>();

+		replacementMap.put('*', ".*"); //$NON-NLS-1$

+		replacementMap.put('?', "."); //$NON-NLS-1$

+		replacementMap.put('(', "\\("); //$NON-NLS-1$

+		replacementMap.put(')', "\\)"); //$NON-NLS-1$

+		replacementMap.put('[', "\\["); //$NON-NLS-1$

+		replacementMap.put(']', "\\]"); //$NON-NLS-1$

+		replacementMap.put('{', "\\}"); //$NON-NLS-1$

+		replacementMap.put('.', "\\."); //$NON-NLS-1$

+		replacementMap.put('$', "\\$"); //$NON-NLS-1$

+		replacementMap.put('^', "\\^"); //$NON-NLS-1$

+	}

+

 	private ModelSearchMatch createModelSearchMatch(EObject eObject) {

 		ModelSearchMatch match = new ModelSearchMatch(eObject);

 		return match;

diff --git a/releng/org.eclipse.sphinx.releng.builds/pom.xml b/releng/org.eclipse.sphinx.releng.builds/pom.xml
index 0f2543d..19f81cf 100644
--- a/releng/org.eclipse.sphinx.releng.builds/pom.xml
+++ b/releng/org.eclipse.sphinx.releng.builds/pom.xml
@@ -108,6 +108,7 @@
 		<module>../../tests/org.eclipse.sphinx.tests.emf.workspace</module>

 		<module>../../tests/org.eclipse.sphinx.tests.emf.workspace.extension</module>

 		<module>../../tests/org.eclipse.sphinx.tests.emf</module>

+		<module>../../tests/org.eclipse.sphinx.tests.emf.search.ui</module>

 		<module>../../tests/org.eclipse.sphinx.tests.emf.validation</module>

 		<module>../../tests/org.eclipse.sphinx.tests.jdt.integration</module>

 		<module>../../tests/org.eclipse.sphinx.tests.jdt</module>

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/.classpath b/tests/org.eclipse.sphinx.tests.emf.search.ui/.classpath
new file mode 100644
index 0000000..cf80e93
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src/">

+		<attributes>

+			<attribute name="test" value="true"/>

+		</attributes>

+	</classpathentry>

+	<classpathentry kind="lib" path="/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/services"/>

+	<classpathentry kind="output" path="target/classes"/>

+</classpath>

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/.project b/tests/org.eclipse.sphinx.tests.emf.search.ui/.project
new file mode 100644
index 0000000..76115ed
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.sphinx.tests.emf.search.ui</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.m2e.core.maven2Builder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.m2e.core.maven2Nature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.core.resources.prefs b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..845273e
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1

+encoding//design/default.ecore=UTF-8

+encoding//design/resources.ecore_diagram=UTF-8

+encoding/<project>=UTF-8

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..5c11488
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,391 @@
+eclipse.preferences.version=1

+org.eclipse.jdt.core.codeComplete.argumentPrefixes=

+org.eclipse.jdt.core.codeComplete.argumentSuffixes=

+org.eclipse.jdt.core.codeComplete.fieldPrefixes=

+org.eclipse.jdt.core.codeComplete.fieldSuffixes=

+org.eclipse.jdt.core.codeComplete.localPrefixes=

+org.eclipse.jdt.core.codeComplete.localSuffixes=

+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=

+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=

+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=

+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8

+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve

+org.eclipse.jdt.core.compiler.compliance=1.8

+org.eclipse.jdt.core.compiler.debug.lineNumber=generate

+org.eclipse.jdt.core.compiler.debug.localVariable=generate

+org.eclipse.jdt.core.compiler.debug.sourceFile=generate

+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore

+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning

+org.eclipse.jdt.core.compiler.problem.deadCode=warning

+org.eclipse.jdt.core.compiler.problem.deprecation=warning

+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled

+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled

+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning

+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore

+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled

+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore

+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning

+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning

+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error

+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore

+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore

+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning

+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning

+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore

+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning

+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled

+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning

+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore

+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning

+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning

+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning

+org.eclipse.jdt.core.compiler.problem.nullReference=ignore

+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning

+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore

+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore

+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore

+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning

+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore

+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore

+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore

+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore

+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore

+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled

+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning

+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled

+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled

+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore

+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning

+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled

+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning

+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore

+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning

+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore

+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning

+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore

+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore

+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled

+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled

+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled

+org.eclipse.jdt.core.compiler.problem.unusedImport=warning

+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning

+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning

+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore

+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore

+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled

+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled

+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled

+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning

+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning

+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning

+org.eclipse.jdt.core.compiler.source=1.8

+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false

+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16

+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16

+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0

+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16

+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16

+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16

+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16

+org.eclipse.jdt.core.formatter.alignment_for_assignment=0

+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16

+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16

+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80

+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0

+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16

+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16

+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0

+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16

+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16

+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16

+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16

+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80

+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16

+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16

+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16

+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16

+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16

+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16

+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16

+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16

+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1

+org.eclipse.jdt.core.formatter.blank_lines_after_package=1

+org.eclipse.jdt.core.formatter.blank_lines_before_field=0

+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0

+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1

+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1

+org.eclipse.jdt.core.formatter.blank_lines_before_method=1

+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1

+org.eclipse.jdt.core.formatter.blank_lines_before_package=0

+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1

+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1

+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line

+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line

+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true

+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true

+org.eclipse.jdt.core.formatter.comment.format_block_comments=true

+org.eclipse.jdt.core.formatter.comment.format_header=false

+org.eclipse.jdt.core.formatter.comment.format_html=true

+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true

+org.eclipse.jdt.core.formatter.comment.format_line_comments=true

+org.eclipse.jdt.core.formatter.comment.format_source_code=true

+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true

+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true

+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert

+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert

+org.eclipse.jdt.core.formatter.comment.line_length=120

+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true

+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true

+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false

+org.eclipse.jdt.core.formatter.compact_else_if=true

+org.eclipse.jdt.core.formatter.continuation_indentation=2

+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2

+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off

+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on

+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false

+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true

+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true

+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true

+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true

+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true

+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true

+org.eclipse.jdt.core.formatter.indent_empty_lines=false

+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true

+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true

+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true

+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false

+org.eclipse.jdt.core.formatter.indentation.size=4

+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert

+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert

+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert

+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert

+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert

+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert

+org.eclipse.jdt.core.formatter.insert_new_line_after_label=insert

+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert

+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert

+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert

+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert

+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert

+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert

+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert

+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert

+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert

+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert

+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert

+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert

+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert

+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert

+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert

+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert

+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert

+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert

+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert

+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert

+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert

+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert

+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert

+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert

+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert

+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert

+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert

+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert

+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert

+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert

+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert

+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert

+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert

+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert

+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert

+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert

+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert

+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert

+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert

+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert

+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert

+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert

+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert

+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert

+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert

+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert

+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert

+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert

+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert

+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert

+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert

+org.eclipse.jdt.core.formatter.join_lines_in_comments=true

+org.eclipse.jdt.core.formatter.join_wrapped_lines=true

+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false

+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false

+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false

+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false

+org.eclipse.jdt.core.formatter.lineSplit=150

+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false

+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false

+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0

+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1

+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true

+org.eclipse.jdt.core.formatter.tabulation.char=tab

+org.eclipse.jdt.core.formatter.tabulation.size=4

+org.eclipse.jdt.core.formatter.use_on_off_tags=true

+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false

+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true

+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true

+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true

+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true

+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true

+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true

+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.jdt.ui.prefs b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..ac920ca
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true

+cleanup.add_generated_serial_version_id=false

+cleanup.add_missing_annotations=true

+cleanup.add_missing_deprecated_annotations=true

+cleanup.add_missing_methods=false

+cleanup.add_missing_nls_tags=false

+cleanup.add_missing_override_annotations=true

+cleanup.add_missing_override_annotations_interface_methods=true

+cleanup.add_serial_version_id=false

+cleanup.always_use_blocks=true

+cleanup.always_use_parentheses_in_expressions=false

+cleanup.always_use_this_for_non_static_field_access=false

+cleanup.always_use_this_for_non_static_method_access=false

+cleanup.convert_to_enhanced_for_loop=true

+cleanup.correct_indentation=false

+cleanup.format_source_code=true

+cleanup.format_source_code_changes_only=false

+cleanup.make_local_variable_final=true

+cleanup.make_parameters_final=false

+cleanup.make_private_fields_final=true

+cleanup.make_type_abstract_if_missing_method=false

+cleanup.make_variable_declarations_final=false

+cleanup.never_use_blocks=false

+cleanup.never_use_parentheses_in_expressions=true

+cleanup.organize_imports=true

+cleanup.qualify_static_field_accesses_with_declaring_class=false

+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true

+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true

+cleanup.qualify_static_member_accesses_with_declaring_class=true

+cleanup.qualify_static_method_accesses_with_declaring_class=false

+cleanup.remove_private_constructors=false

+cleanup.remove_trailing_whitespaces=true

+cleanup.remove_trailing_whitespaces_all=true

+cleanup.remove_trailing_whitespaces_ignore_empty=false

+cleanup.remove_unnecessary_casts=true

+cleanup.remove_unnecessary_nls_tags=true

+cleanup.remove_unused_imports=true

+cleanup.remove_unused_local_variables=false

+cleanup.remove_unused_private_fields=true

+cleanup.remove_unused_private_members=false

+cleanup.remove_unused_private_methods=false

+cleanup.remove_unused_private_types=false

+cleanup.sort_members=false

+cleanup.sort_members_all=false

+cleanup.use_blocks=true

+cleanup.use_blocks_only_for_return_and_throw=false

+cleanup.use_parentheses_in_expressions=true

+cleanup.use_this_for_non_static_field_access=true

+cleanup.use_this_for_non_static_field_access_only_if_necessary=true

+cleanup.use_this_for_non_static_method_access=true

+cleanup.use_this_for_non_static_method_access_only_if_necessary=true

+cleanup_profile=_Unmanaged profile 'Sphinx'

+cleanup_settings_version=2

+eclipse.preferences.version=1

+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true

+formatter_profile=_Sphinx

+formatter_settings_version=12

+org.eclipse.jdt.ui.exception.name=ex

+org.eclipse.jdt.ui.gettersetter.use.is=true

+org.eclipse.jdt.ui.ignorelowercasenames=true

+org.eclipse.jdt.ui.importorder=java;javax;org;com;

+org.eclipse.jdt.ui.javadoc=false

+org.eclipse.jdt.ui.keywordthis=false

+org.eclipse.jdt.ui.ondemandthreshold=99

+org.eclipse.jdt.ui.overrideannotation=true

+org.eclipse.jdt.ui.staticondemandthreshold=99

+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * &lt;copyright&gt;\r\n * \r\n * Copyright (c) {contributing company name} and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\: \r\n *     {contributing company name} - Initial API and implementation\r\n * \r\n * &lt;/copyright&gt;\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/*\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>

+sp_cleanup.add_default_serial_version_id=true

+sp_cleanup.add_generated_serial_version_id=false

+sp_cleanup.add_missing_annotations=true

+sp_cleanup.add_missing_deprecated_annotations=true

+sp_cleanup.add_missing_methods=false

+sp_cleanup.add_missing_nls_tags=false

+sp_cleanup.add_missing_override_annotations=true

+sp_cleanup.add_missing_override_annotations_interface_methods=true

+sp_cleanup.add_serial_version_id=false

+sp_cleanup.always_use_blocks=true

+sp_cleanup.always_use_parentheses_in_expressions=false

+sp_cleanup.always_use_this_for_non_static_field_access=false

+sp_cleanup.always_use_this_for_non_static_method_access=false

+sp_cleanup.convert_to_enhanced_for_loop=true

+sp_cleanup.correct_indentation=false

+sp_cleanup.format_source_code=true

+sp_cleanup.format_source_code_changes_only=false

+sp_cleanup.make_local_variable_final=false

+sp_cleanup.make_parameters_final=false

+sp_cleanup.make_private_fields_final=true

+sp_cleanup.make_type_abstract_if_missing_method=false

+sp_cleanup.make_variable_declarations_final=false

+sp_cleanup.never_use_blocks=false

+sp_cleanup.never_use_parentheses_in_expressions=true

+sp_cleanup.on_save_use_additional_actions=true

+sp_cleanup.organize_imports=true

+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false

+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true

+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true

+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true

+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false

+sp_cleanup.remove_private_constructors=false

+sp_cleanup.remove_trailing_whitespaces=true

+sp_cleanup.remove_trailing_whitespaces_all=true

+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false

+sp_cleanup.remove_unnecessary_casts=true

+sp_cleanup.remove_unnecessary_nls_tags=true

+sp_cleanup.remove_unused_imports=true

+sp_cleanup.remove_unused_local_variables=false

+sp_cleanup.remove_unused_private_fields=true

+sp_cleanup.remove_unused_private_members=false

+sp_cleanup.remove_unused_private_methods=false

+sp_cleanup.remove_unused_private_types=false

+sp_cleanup.sort_members=false

+sp_cleanup.sort_members_all=false

+sp_cleanup.use_blocks=true

+sp_cleanup.use_blocks_only_for_return_and_throw=false

+sp_cleanup.use_parentheses_in_expressions=true

+sp_cleanup.use_this_for_non_static_field_access=true

+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true

+sp_cleanup.use_this_for_non_static_method_access=true

+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.m2e.core.prefs b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..14b697b
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=

+eclipse.preferences.version=1

+resolveWorkspaceProjects=true

+version=1

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.pde.prefs b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..acba0c2
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1

+compilers.f.unresolved-plugins=1

+compilers.incompatible-environment=1

+compilers.p.build=1

+compilers.p.build.bin.includes=1

+compilers.p.build.encodings=2

+compilers.p.build.java.compiler=2

+compilers.p.build.java.compliance=1

+compilers.p.build.missing.output=2

+compilers.p.build.output.library=1

+compilers.p.build.source.library=1

+compilers.p.build.src.includes=1

+compilers.p.deprecated=1

+compilers.p.discouraged-class=1

+compilers.p.internal=1

+compilers.p.missing-packages=1

+compilers.p.missing-version-export-package=2

+compilers.p.missing-version-import-package=2

+compilers.p.missing-version-require-bundle=2

+compilers.p.no-required-att=0

+compilers.p.not-externalized-att=2

+compilers.p.unknown-attribute=1

+compilers.p.unknown-class=1

+compilers.p.unknown-element=1

+compilers.p.unknown-identifier=1

+compilers.p.unknown-resource=1

+compilers.p.unresolved-ex-points=0

+compilers.p.unresolved-import=0

+compilers.s.create-docs=false

+compilers.s.doc-folder=doc

+compilers.s.open-tags=1

+eclipse.preferences.version=1

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.wst.xml.core.prefs b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.wst.xml.core.prefs
new file mode 100644
index 0000000..bc9f2e3
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/.settings/org.eclipse.wst.xml.core.prefs
@@ -0,0 +1,17 @@
+attributeHasNoValue=2

+eclipse.preferences.version=1

+endTagWithAttributes=2

+honourAllSchemaLocations=true

+indicateNoGrammar=1

+indiciateNoDocumentElement=-1

+markupValidation=true

+missingClosingBracket=2

+missingClosingQuote=2

+missingEndTag=2

+missingQuotes=2

+missingStartTag=2

+missingTagName=2

+namespaceInPITarget=2

+whitespaceAtStart=2

+whitespaceBeforeTagName=2

+xinclude=true

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/META-INF/MANIFEST.MF b/tests/org.eclipse.sphinx.tests.emf.search.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c120686
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.sphinx.tests.emf.search.ui;singleton:=true

+Bundle-Version: 0.12.0.qualifier

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: JavaSE-1.8

+Require-Bundle: org.eclipse.sphinx.emf.ui,

+ org.eclipse.sphinx.emf.editors.forms,

+ org.eclipse.sphinx.emf.search.ui,

+ org.easymock,

+ org.eclipse.core.resources,

+ org.eclipse.sphinx.examples.hummingbird20,

+ org.eclipse.sphinx.testutils.integration.referenceworkspace,

+ org.eclipse.emf.ecore

+Bundle-ActivationPolicy: lazy

+Export-Package: org.eclipse.sphinx.tests.emf.search.ui.internal.mock;x-internal:=true,

+ org.eclipse.sphinx.tests.emf.search.ui.services

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/about.html b/tests/org.eclipse.sphinx.tests.emf.search.ui/about.html
new file mode 100644
index 0000000..c258ef5
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2006</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/build.properties b/tests/org.eclipse.sphinx.tests.emf.search.ui/build.properties
new file mode 100644
index 0000000..a8e3182
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/build.properties
@@ -0,0 +1,7 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.properties,\

+               about.html

+src.includes = about.html

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/plugin.properties b/tests/org.eclipse.sphinx.tests.emf.search.ui/plugin.properties
new file mode 100644
index 0000000..4c05fa0
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/plugin.properties
@@ -0,0 +1,27 @@
+# <copyright>
+# 
+# Copyright (c) 2008-2010 See4sys 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: 
+#     See4sys - Initial API and implementation
+# 
+# </copyright>
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName=Sphinx EMF Search UI Test Plug-in (Incubation)
+providerName=Eclipse Sphinx
diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/pom.xml b/tests/org.eclipse.sphinx.tests.emf.search.ui/pom.xml
new file mode 100644
index 0000000..581dacb
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/pom.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

+	<modelVersion>4.0.0</modelVersion>

+	<parent>

+		<groupId>org.eclipse.sphinx.releng</groupId>

+		<artifactId>org.eclipse.sphinx.releng.parent</artifactId>

+		<version>0.12.0-SNAPSHOT</version>

+		<relativePath>../../releng/org.eclipse.sphinx.releng.builds/parent/pom.xml</relativePath>

+	</parent>

+	<groupId>org.eclipse.sphinx.tests</groupId>

+	<artifactId>org.eclipse.sphinx.tests.emf.search.ui</artifactId>

+	<version>0.12.0-SNAPSHOT</version>

+	<packaging>eclipse-test-plugin</packaging>

+	<build>

+		<plugins>

+			<plugin>

+				<groupId>org.eclipse.tycho</groupId>

+				<artifactId>tycho-surefire-plugin</artifactId>

+				<configuration>

+					<useUIHarness>true</useUIHarness>

+				</configuration>

+			</plugin>

+		</plugins>

+	</build>

+</project>

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/internal/mock/BasicModelSearchServiceMock.java b/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/internal/mock/BasicModelSearchServiceMock.java
new file mode 100644
index 0000000..dae04f6
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/internal/mock/BasicModelSearchServiceMock.java
@@ -0,0 +1,14 @@
+package org.eclipse.sphinx.tests.emf.search.ui.internal.mock;

+

+import java.util.Collection;

+

+import org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor;

+import org.eclipse.sphinx.emf.search.ui.services.BasicModelSearchService;

+

+public class BasicModelSearchServiceMock extends BasicModelSearchService {

+

+	public BasicModelSearchServiceMock(Collection<IMetaModelDescriptor> mmDescriptors) {

+		super(mmDescriptors);

+		super.helper = new RetrieveNameAttributeHelperMock();

+	}

+}

diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/internal/mock/RetrieveNameAttributeHelperMock.java b/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/internal/mock/RetrieveNameAttributeHelperMock.java
new file mode 100644
index 0000000..a68924c
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/internal/mock/RetrieveNameAttributeHelperMock.java
@@ -0,0 +1,16 @@
+package org.eclipse.sphinx.tests.emf.search.ui.internal.mock;

+

+import static org.easymock.EasyMock.createNiceMock;

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.sphinx.emf.ui.util.RetrieveNameAttributeHelper;

+

+public class RetrieveNameAttributeHelperMock extends RetrieveNameAttributeHelper {

+

+	@Override

+	public EAttribute getNameAttribute(EObject object) {

+		EAttribute eAttribMock = createNiceMock(EAttribute.class);

+		return eAttribMock;

+	}

+}
\ No newline at end of file
diff --git a/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/services/BasicModelSearchServiceTest.java b/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/services/BasicModelSearchServiceTest.java
new file mode 100644
index 0000000..d36434d
--- /dev/null
+++ b/tests/org.eclipse.sphinx.tests.emf.search.ui/src/org/eclipse/sphinx/tests/emf/search/ui/services/BasicModelSearchServiceTest.java
@@ -0,0 +1,139 @@
+/**

+ * <copyright>

+ *

+ * Copyright (c) 2021 Elektrobit.

+ * 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:

+ *     Elektrobit - [575391] BasicModelSearchService now supports the use of wildcards and regular expressions

+ *

+ * </copyright>

+ */

+package org.eclipse.sphinx.tests.emf.search.ui.services;

+

+import static org.easymock.EasyMock.createNiceMock;

+import static org.easymock.EasyMock.expect;

+import static org.easymock.EasyMock.replay;

+import static org.junit.Assert.assertFalse;

+import static org.junit.Assert.assertTrue;

+

+import java.util.ArrayList;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Set;

+

+import org.easymock.EasyMock;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.emf.common.util.TreeIterator;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor;

+import org.eclipse.sphinx.emf.search.ui.ModelSearchMatch;

+import org.eclipse.sphinx.emf.search.ui.QuerySpecification;

+import org.eclipse.sphinx.emf.search.ui.services.BasicModelSearchService;

+import org.eclipse.sphinx.examples.hummingbird20.Hummingbird20MMDescriptor;

+import org.eclipse.sphinx.tests.emf.search.ui.internal.mock.BasicModelSearchServiceMock;

+import org.junit.Before;

+import org.junit.Test;

+

+/**

+ * This class tests {@link BasicModelSearchService}

+ */

+public final class BasicModelSearchServiceTest {

+

+	private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz"; //$NON-NLS-1$

+	BasicModelSearchService searchService;

+

+	@Before

+	public void setUp() throws Exception {

+		IMetaModelDescriptor descriptor = Hummingbird20MMDescriptor.INSTANCE;

+		List<IMetaModelDescriptor> descriptors = new ArrayList<>();

+		descriptors.add(descriptor);

+		searchService = new BasicModelSearchServiceMock(descriptors);

+	}

+

+	@Test

+	public void testGetMatchesMatchCaseSensitiveFail1() {

+		List<ModelSearchMatch> matches = getMatches("Abc", ALPHABET, true); //$NON-NLS-1$

+		assertTrue(matches.isEmpty());

+	}

+

+	@Test

+	public void testGetMatchesMatchCaseSensitiveFail2() {

+		List<ModelSearchMatch> matches = getMatches("A*c", ALPHABET, true); //$NON-NLS-1$

+		assertTrue(matches.isEmpty());

+	}

+

+	@Test

+	public void testGetMatchesMatchCaseSensitiveSuccess1() {

+		List<ModelSearchMatch> matches = getMatches("abc", ALPHABET, true); //$NON-NLS-1$

+		assertFalse(matches.isEmpty());

+	}

+

+	@Test

+	public void testGetMatchesMatchCaseSensitiveSuccess2() {

+		List<ModelSearchMatch> matches = getMatches("a*defgh", ALPHABET, true); //$NON-NLS-1$

+		assertFalse(matches.isEmpty());

+	}

+

+	@Test

+	public void testGetMatchesMatchCaseInsensitiveFail1() {

+		List<ModelSearchMatch> matches = getMatches("y*a", ALPHABET.toUpperCase(), false); //$NON-NLS-1$

+		assertTrue(matches.isEmpty());

+	}

+

+	@Test

+	public void testGetMatchesMatchCaseInsensitiveFail2() {

+		List<ModelSearchMatch> matches = getMatches("A?bc", ALPHABET.toUpperCase(), false); //$NON-NLS-1$

+		assertTrue(matches.isEmpty());

+	}

+

+	@Test

+	public void testGetMatchesMatchCaseInsensitiveSuccess1() {

+		List<ModelSearchMatch> matches = getMatches("efg*xyz", ALPHABET.toUpperCase(), false); //$NON-NLS-1$

+		assertFalse(matches.isEmpty());

+	}

+

+	@Test

+	public void testGetMatchesMatchCaseInsensitiveSuccess2() {

+		List<ModelSearchMatch> matches = getMatches("a?c", ALPHABET.toUpperCase(), false); //$NON-NLS-1$

+		assertFalse(matches.isEmpty());

+	}

+

+	private List<ModelSearchMatch> getMatches(String searchExpression, String stringToCheck, boolean isCaseSensitive) {

+		// create pattern

+		Set<IProject> projects = new HashSet<>();

+		QuerySpecification pattern = new QuerySpecification(searchExpression, isCaseSensitive, projects);

+

+		// get mocked resource

+		List<Resource> resources = new ArrayList<>();

+		Resource resource = getResourceMock(stringToCheck);

+		resources.add(resource);

+

+		// run and return getMatches method

+		return searchService.getMatches(resources, pattern);

+	}

+

+	private Resource getResourceMock(Object stringToCheck) {

+		// define object to be returned

+		EObject eObjMock = createNiceMock(EObject.class);

+		expect(eObjMock.eGet(EasyMock.anyObject())).andReturn(stringToCheck);

+		replay(eObjMock);

+

+		// define treeIterator behavior

+		@SuppressWarnings("unchecked")

+		TreeIterator<EObject> treeIterator = createNiceMock(TreeIterator.class);

+		expect(treeIterator.hasNext()).andReturn(true);

+		expect(treeIterator.next()).andReturn(eObjMock);

+		replay(treeIterator);

+

+		// set resource behavior

+		Resource resourceMock = createNiceMock(Resource.class);

+		expect(resourceMock.getAllContents()).andReturn(treeIterator);

+		replay(resourceMock);

+		return resourceMock;

+	}

+}

diff --git a/tests/org.eclipse.sphinx.testutils.integration.referenceworkspace/resources/input/referenceWorkspace/hbProject20.workflows/.gitignore b/tests/org.eclipse.sphinx.testutils.integration.referenceworkspace/resources/input/referenceWorkspace/hbProject20.workflows/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/tests/org.eclipse.sphinx.testutils.integration.referenceworkspace/resources/input/referenceWorkspace/hbProject20.workflows/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/tests/org.eclipse.sphinx.testutils.integration.referenceworkspace/resources/input/referenceWorkspace/hbProject20.workflows/bin/.gitignore b/tests/org.eclipse.sphinx.testutils.integration.referenceworkspace/resources/input/referenceWorkspace/hbProject20.workflows/bin/.gitignore
new file mode 100644
index 0000000..43919a6
--- /dev/null
+++ b/tests/org.eclipse.sphinx.testutils.integration.referenceworkspace/resources/input/referenceWorkspace/hbProject20.workflows/bin/.gitignore
@@ -0,0 +1,3 @@
+# Ignore the generated files from git upload
+*
+!.gitignore
\ No newline at end of file