// Path: fhir-index-plugin/src/main/java/io/puntanegra/fhir/index/search/datatypes/AbstractSearchParam.java
// public abstract class AbstractSearchParam {
// 
// 	static final int MAX_SP_NAME = 200;
// 
// 	protected String name;
// 	protected String path;
// 	protected SearchParamTypes type;
// 
// 	public AbstractSearchParam() {
// 
// 	}
// 
// 	public AbstractSearchParam(String name, String path, SearchParamTypes type) {
// 		super();
// 		this.name = name;
// 		this.path = path;
// 		this.type = type;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public String getPath() {
// 		return path;
// 	}
// 
// 	public SearchParamTypes getType() {
// 		return type;
// 	}
// 
// 	public String getTypeAsString() {
// 		return type.name();
// 	}
// 
// 	public void setTypeAsString(String type) {
// 		this.type = SearchParamTypes.valueOf(type);
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "ResourceSearchParameters [name=" + name + ", path=" + path + ", type=" + type + "]";
// 	}
// 
// 	// TODO: finish this code
// 	public String getTypeAsCassandraDataType() {
// 		if (this.type == SearchParamTypes.NUMBER) {
// 			return "double";
// 		} else if (this.type == SearchParamTypes.QUANTITY) {
// 			return "double";
// 		} else if (this.type == SearchParamTypes.DATE) {
// 			return "timestamp";
// 		} else {
// 			return "text";
// 		}
// 	}
// 
// 	public abstract boolean hasValue();
// 
// 	public abstract String getValueAsString();
// 
// 	public abstract Object getValue();
// 
// 	public abstract List<Field> createIndexedFields();
// 
// 	public List<Field> createSortedFields() {
// 		return Collections.emptyList();
// 	};
// }
// 
// Path: fhir-index-plugin/src/main/java/io/puntanegra/fhir/index/search/datatypes/SearchParamString.java
// public class SearchParamString extends AbstractSearchParam {
// 
// 	private String value;
// 
// 	public SearchParamString(String name, String path, SearchParamTypes type, String value) {
// 		super(name, path, type);
// 		this.value = value;
// 	}
// 
// 	@Override
// 	public boolean hasValue() {
// 		return value != null;
// 	}
// 
// 	public String getValue() {
// 		return value;
// 	}
// 
// 	public void setValue(String str) {
// 		this.value = str;
// 	}
// 
// 	public String getValueAsString() {
// 		return this.value;
// 	}
// 
// 	@Override
// 	public List<Field> createIndexedFields() {
// 		Field field = new TextField(this.name, this.value, Field.Store.NO);
// 		return Arrays.asList(field);
// 	}
// }
// 
// Path: fhir-index-plugin/src/main/java/io/puntanegra/fhir/index/search/datatypes/SearchParamTypes.java
// public enum SearchParamTypes {
// 	NUMBER, DATE, STRING, TOKEN, REFERENCE, COMPOSITE, QUANTITY, URI;
// }


import static org.apache.commons.lang3.StringUtils.isBlank;
import java.util.HashSet;
import java.util.Set;
import org.hl7.fhir.dstu3.model.Reference;
import org.hl7.fhir.dstu3.model.UriType;
import org.hl7.fhir.instance.model.api.IBase;
import org.hl7.fhir.instance.model.api.IBaseResource;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.RuntimeSearchParam;
import io.puntanegra.fhir.index.search.datatypes.AbstractSearchParam;
import io.puntanegra.fhir.index.search.datatypes.SearchParamString;
import io.puntanegra.fhir.index.search.datatypes.SearchParamTypes;
package io.puntanegra.fhir.index.search.extractor;





/**
 * Extracts information from generic attribute types.
 * 
 * @author Jorge L. Middleton {@literal <jorge.middleton@gmail.com>}
 *
 */
public class UriSearchParameterExtractor extends AbstractSearchParameterExtractor {

	public UriSearchParameterExtractor(FhirContext ctx) {
// Path: fhir-index-plugin/src/main/java/io/puntanegra/fhir/index/search/datatypes/AbstractSearchParam.java
// public abstract class AbstractSearchParam {
// 
// 	static final int MAX_SP_NAME = 200;
// 
// 	protected String name;
// 	protected String path;
// 	protected SearchParamTypes type;
// 
// 	public AbstractSearchParam() {
// 
// 	}
// 
// 	public AbstractSearchParam(String name, String path, SearchParamTypes type) {
// 		super();
// 		this.name = name;
// 		this.path = path;
// 		this.type = type;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public String getPath() {
// 		return path;
// 	}
// 
// 	public SearchParamTypes getType() {
// 		return type;
// 	}
// 
// 	public String getTypeAsString() {
// 		return type.name();
// 	}
// 
// 	public void setTypeAsString(String type) {
// 		this.type = SearchParamTypes.valueOf(type);
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "ResourceSearchParameters [name=" + name + ", path=" + path + ", type=" + type + "]";
// 	}
// 
// 	// TODO: finish this code
// 	public String getTypeAsCassandraDataType() {
// 		if (this.type == SearchParamTypes.NUMBER) {
// 			return "double";
// 		} else if (this.type == SearchParamTypes.QUANTITY) {
// 			return "double";
// 		} else if (this.type == SearchParamTypes.DATE) {
// 			return "timestamp";
// 		} else {
// 			return "text";
// 		}
// 	}
// 
// 	public abstract boolean hasValue();
// 
// 	public abstract String getValueAsString();
// 
// 	public abstract Object getValue();
// 
// 	public abstract List<Field> createIndexedFields();
// 
// 	public List<Field> createSortedFields() {
// 		return Collections.emptyList();
// 	};
// }
// 
// Path: fhir-index-plugin/src/main/java/io/puntanegra/fhir/index/search/datatypes/SearchParamString.java
// public class SearchParamString extends AbstractSearchParam {
// 
// 	private String value;
// 
// 	public SearchParamString(String name, String path, SearchParamTypes type, String value) {
// 		super(name, path, type);
// 		this.value = value;
// 	}
// 
// 	@Override
// 	public boolean hasValue() {
// 		return value != null;
// 	}
// 
// 	public String getValue() {
// 		return value;
// 	}
// 
// 	public void setValue(String str) {
// 		this.value = str;
// 	}
// 
// 	public String getValueAsString() {
// 		return this.value;
// 	}
// 
// 	@Override
// 	public List<Field> createIndexedFields() {
// 		Field field = new TextField(this.name, this.value, Field.Store.NO);
// 		return Arrays.asList(field);
// 	}
// }
// 
// Path: fhir-index-plugin/src/main/java/io/puntanegra/fhir/index/search/datatypes/SearchParamTypes.java
// public enum SearchParamTypes {
// 	NUMBER, DATE, STRING, TOKEN, REFERENCE, COMPOSITE, QUANTITY, URI;
// }


// Path: fhir-index-plugin/src/main/java/io/puntanegra/fhir/index/search/extractor/UriSearchParameterExtractor.java
import static org.apache.commons.lang3.StringUtils.isBlank;
import java.util.HashSet;
import java.util.Set;
import org.hl7.fhir.dstu3.model.Reference;
import org.hl7.fhir.dstu3.model.UriType;
import org.hl7.fhir.instance.model.api.IBase;
import org.hl7.fhir.instance.model.api.IBaseResource;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.RuntimeSearchParam;
import io.puntanegra.fhir.index.search.datatypes.AbstractSearchParam;
import io.puntanegra.fhir.index.search.datatypes.SearchParamString;
import io.puntanegra.fhir.index.search.datatypes.SearchParamTypes;

package io.puntanegra.fhir.index.search.extractor;





/**
 * Extracts information from generic attribute types.
 * 
 * @author Jorge L. Middleton {@literal <jorge.middleton@gmail.com>}
 *
 */
public class UriSearchParameterExtractor extends AbstractSearchParameterExtractor {

	public UriSearchParameterExtractor(FhirContext ctx) {
		super(ctx);