public Collection createFields()

in Lucas/src/main/java/org/apache/uima/lucas/indexer/FieldBuilder.java [80:147]


	public Collection<Field> createFields(Collection<TokenStream> tokenStreams,
			FieldDescription fieldDescription) throws FieldBuildingException {

		TokenStream tokenStream = createFieldTokenStream(tokenStreams,
				fieldDescription);

		this.fieldDescription = fieldDescription;
		String fieldName = fieldDescription.getName();
		String delimiter = fieldDescription.getDelimiter();
		Collection<Field> fields = new ArrayList<Field>();

		Collection<FilterDescription> filterDescriptions = fieldDescription
				.getFilterDescriptions();
		tokenStream = getFilteredTokenStream(fieldName, tokenStream,
				filterDescriptions);

		// The unique flag means we only want ONE field instance with the
		// name fieldName.
		Boolean unique = fieldDescription.getUnique();
		Boolean coverField = fieldDescription.getTermCoverDescription() != null;
		Field.Store fieldStore = getFieldStore(fieldDescription.getStored());
		Field.Index fieldIndex = getFieldIndex(fieldDescription.getIndex());
		Field.TermVector fieldTermVector = getFieldTermVector(fieldDescription
				.getTermVector());
		boolean omitTF = fieldDescription.getIndex().equals(FIELD_INDEX_NO_TF)
				|| fieldDescription.getIndex().equals(FIELD_INDEX_NO_NORMS_TF);
		boolean store = fieldStore == Field.Store.YES
				|| fieldStore == Field.Store.COMPRESS;

		if (!coverField) {
			// Create stored fields. The parameters unique, fieldIndex and
			// omitTF are only necessary in case of a stored and indexed
			// unique field. Then, the field is instanced stored and indexed,
			// thus only one instance of the field is necessary. This only works
			// with TokenStreams which contain exactly one token (if a
			// TokenStream emits more tokens, several fields will be instanced).
			if (store)
				fields.addAll(createStoredFields(fieldName, tokenStream,
						fieldStore, delimiter, unique, fieldIndex, omitTF));

			// Create indexed fields. If the field is unique and has been
			// stored, there already is an instance of the field and we don't
			// create another.
			if (fieldIndex != Field.Index.NO && (!unique || !store))
				fields.add(createIndexedField(fieldName, tokenStream,
						fieldIndex, fieldTermVector, omitTF));

		} else {

			TermCoverBuilder termCoverBuilder = termCoverBuilderFactory
					.createTermCoverBuilder(tokenStream, fieldDescription.getTermCoverDescription());
			while (termCoverBuilder.increaseCoverSubset()) {
				String coverSubsetName = termCoverBuilder.getCoverSubsetName();
				TokenStream coverSubsetTokenStream = termCoverBuilder
						.getPartitionTokenStream();
				if (store)
					fields.addAll(createStoredFields(coverSubsetName,
							coverSubsetTokenStream, fieldStore, delimiter,
							unique, fieldIndex, omitTF));

				if (fieldIndex != Field.Index.NO && (!unique || !store))
					fields.add(createIndexedField(coverSubsetName,
							coverSubsetTokenStream, fieldIndex, fieldTermVector,
							omitTF));
			}
		}
		return fields;
	}