/**
* Copyright (c) 2013-2016 Angelo ZERR and Genuitec LLC.
* 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:
* Piotr Tomiak <piotr@genuitec.com> - initial API and implementation
*/
package tern.server.protocol;
import java.text.MessageFormat;
import tern.TernException;
import tern.server.DefaultResponseHandler;
import tern.server.ITernServer;
import tern.server.protocol.completions.ITernCompletionCollector;
import tern.server.protocol.completions.TernCompletionsResultProcessor;
import tern.server.protocol.definition.ITernDefinitionCollector;
import tern.server.protocol.definition.TernDefinitionResultProcessor;
import tern.server.protocol.guesstypes.ITernGuessTypesCollector;
import tern.server.protocol.guesstypes.TernGuessTypesResultProcessor;
import tern.server.protocol.highlight.ITernHighlightCollector;
import tern.server.protocol.highlight.TernHighlightResultProcessor;
import tern.server.protocol.lint.ITernLintCollector;
import tern.server.protocol.lint.TernLintResultProcessor;
import tern.server.protocol.outline.ITernOutlineCollector;
import tern.server.protocol.outline.TernOutlineResultProcessor;
import tern.server.protocol.refs.ITernRefCollector;
import tern.server.protocol.refs.TernRefsResultProcessor;
import tern.server.protocol.type.ITernTypeCollector;
import tern.server.protocol.type.TernTypeResultProcessor;
public class TernResultsProcessorsFactory {
private TernResultsProcessorsFactory() {
}
public static <T extends ITernResultsCollector> void makeRequestAndProcess(
TernDoc doc, ITernServer server, T collector) throws TernException {
ITernResultProcessor<T> resultProcesor = TernResultsProcessorsFactory
.getProcessor(collector);
DefaultResponseHandler handler = new DefaultResponseHandler(true);
server.request(doc, handler);
Object jsonObject = handler.getData();
if (jsonObject != null) {
resultProcesor.process(doc, server.getJSONObjectHelper(),
jsonObject, collector);
}
}
@SuppressWarnings("unchecked")
private static <T extends ITernResultsCollector> ITernResultProcessor<T> getProcessor(
T collector) throws TernException {
if (collector instanceof ITernCustomResultsCollector) {
return (ITernResultProcessor<T>) ((ITernCustomResultsCollector)collector).getResultsProcessor();
} else if (collector instanceof ITernCompletionCollector) {
return (ITernResultProcessor<T>) TernCompletionsResultProcessor.INSTANCE;
} else if (collector instanceof ITernRefCollector) {
return (ITernResultProcessor<T>) TernRefsResultProcessor.INSTANCE;
} else if (collector instanceof ITernDefinitionCollector) {
return (ITernResultProcessor<T>) TernDefinitionResultProcessor.INSTANCE;
} else if (collector instanceof ITernTypeCollector) {
return (ITernResultProcessor<T>) TernTypeResultProcessor.INSTANCE;
} else if (collector instanceof ITernLintCollector) {
return (ITernResultProcessor<T>) TernLintResultProcessor.INSTANCE;
} else if (collector instanceof ITernGuessTypesCollector) {
return (ITernResultProcessor<T>) TernGuessTypesResultProcessor.INSTANCE;
} else if (collector instanceof ITernOutlineCollector) {
return (ITernResultProcessor<T>) TernOutlineResultProcessor.INSTANCE;
} else if (collector instanceof ITernHighlightCollector) {
return (ITernResultProcessor<T>) TernHighlightResultProcessor.INSTANCE;
} else {
throw new TernException(
MessageFormat
.format("Tern results collector {0} does not implement any of the supported interfaces nor does it provide the processor through ITernCustomResultsCollector interface.", //$NON-NLS-1$
collector.getClass().getName()));
}
}
}