/******************************************************************************* * Copyright Technophobia Ltd 2012 * * This file is part of the Substeps Eclipse Plugin. * * The Substeps Eclipse Plugin is free software: you can redistribute it and/or modify * it under the terms of the Eclipse Public License v1.0. * * The Substeps Eclipse Plugin is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * Eclipse Public License for more details. * * You should have received a copy of the Eclipse Public License * along with the Substeps Eclipse Plugin. If not, see <http://www.eclipse.org/legal/epl-v10.html>. ******************************************************************************/ package com.technophobia.substeps.document.content.assist; import org.eclipse.jface.text.contentassist.ContentAssistant; import org.eclipse.jface.text.contentassist.IContentAssistProcessor; import org.eclipse.jface.text.contentassist.IContentAssistant; import com.technophobia.substeps.document.content.feature.definition.DefineContentTypeDefinition; import com.technophobia.substeps.document.content.feature.definition.StepContentTypeDefinition; import com.technophobia.substeps.supplier.Callback1; import com.technophobia.substeps.supplier.Supplier; /** * Implementation of {@link ContentAssistantFactory} that adds a supplied * {@link IContentAssistProcessor} to a new {@link IContentAssistant}, followed * by decorating it using {@link Callback1}'s * * @author sforbes * */ public class ProcessedContentAssistantFactory implements ContentAssistantFactory { private static final String DEFAULT_PARTITION_CONTENT_TYPE = "__dftl_partition_content_type"; private final Supplier<IContentAssistProcessor> processorSupplier; private final Callback1<IContentAssistant>[] contentAssistantDecorators; public ProcessedContentAssistantFactory(final Supplier<IContentAssistProcessor> processorSupplier, final Callback1<IContentAssistant>... contentAssistantDecorators) { this.processorSupplier = processorSupplier; this.contentAssistantDecorators = contentAssistantDecorators; } @Override public IContentAssistant createContentAssist() { final ContentAssistant assistant = new ContentAssistant(); final IContentAssistProcessor processor = processorSupplier.get(); assistant.setContentAssistProcessor(processor, StepContentTypeDefinition.CONTENT_TYPE_ID); assistant.setContentAssistProcessor(processor, DefineContentTypeDefinition.CONTENT_TYPE_ID); assistant.setContentAssistProcessor(processor, DEFAULT_PARTITION_CONTENT_TYPE); for (final Callback1<IContentAssistant> callback : contentAssistantDecorators) { callback.doCallback(assistant); } return assistant; } }