/******************************************************************************* * Copyright (c) 2008 IBM Corporation. * 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: * Robert Fuhrer (rfuhrer@watson.ibm.com) - initial API and implementation *******************************************************************************/ package org.eclipse.imp.editor; import org.eclipse.imp.editor.internal.CompletionProcessor; import org.eclipse.imp.editor.internal.FormattingController; import org.eclipse.imp.editor.internal.HoverHelpController; import org.eclipse.imp.editor.internal.OutlineController; import org.eclipse.imp.editor.internal.PresentationController; import org.eclipse.imp.editor.internal.SourceHyperlinkController; import org.eclipse.imp.parser.IModelListener; import org.eclipse.imp.services.ISourceFormatter; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.ui.texteditor.ITextEditor; public class ServiceControllerManager { private LanguageServiceManager fLanguageServiceManager; private SourceHyperlinkController fHyperLinkController; private HoverHelpController fHoverHelpController; private FormattingController fFormattingController; private IModelListener fOutlineController; private PresentationController fPresentationController; private CompletionProcessor fCompletionProcessor; private final ITextEditor fTextEditor; private ISourceViewer fSourceViewer; public ServiceControllerManager(ITextEditor textEditor, LanguageServiceManager serviceMgr) { fTextEditor= textEditor; fLanguageServiceManager= serviceMgr; if (fLanguageServiceManager.getHyperLinkDetector() != null) { fHyperLinkController= new SourceHyperlinkController(fLanguageServiceManager.getHyperLinkDetector(), fTextEditor); } } public void initialize() { IRegionSelectionService regionSelector= (IRegionSelectionService) fTextEditor.getAdapter(IRegionSelectionService.class); fHoverHelpController= new HoverHelpController(fLanguageServiceManager.getLanguage()); ISourceFormatter formattingStrategy = fLanguageServiceManager.getFormattingStrategy(); if (formattingStrategy != null) { fFormattingController= new FormattingController(formattingStrategy); fFormattingController.setParseController(fLanguageServiceManager.getParseController()); } if (fLanguageServiceManager.getModelBuilder() != null) { fOutlineController= new IMPOutlinePage(fLanguageServiceManager.getParseController(), fLanguageServiceManager.getModelBuilder(), fLanguageServiceManager.getLabelProvider(), fLanguageServiceManager.getImageProvider(), fLanguageServiceManager.getEntityNameLocator(), regionSelector); } else { fOutlineController= new OutlineController(fTextEditor, fLanguageServiceManager.getLanguage()); } fCompletionProcessor= new CompletionProcessor(fLanguageServiceManager.getLanguage()); } public void setSourceViewer(ISourceViewer sourceViewer) { fSourceViewer= sourceViewer; if (fLanguageServiceManager.getTokenColorer() != null) { fPresentationController= new PresentationController(fSourceViewer, fLanguageServiceManager); } } public void setupModelListeners(ParserScheduler parserScheduler) { if (fOutlineController != null) { parserScheduler.addModelListener(fOutlineController); } if (fPresentationController != null) { parserScheduler.addModelListener(fPresentationController); } if (fHoverHelpController != null) { parserScheduler.addModelListener(fHoverHelpController); } if (fHyperLinkController != null) { parserScheduler.addModelListener(fHyperLinkController); } if (fCompletionProcessor != null) { parserScheduler.addModelListener(fCompletionProcessor); } } public SourceHyperlinkController getHyperLinkController() { return fHyperLinkController; } public HoverHelpController getHoverHelpController() { return fHoverHelpController; } public FormattingController getFormattingController() { return fFormattingController; } public IModelListener getOutlineController() { return fOutlineController; } public PresentationController getPresentationController() { return fPresentationController; } public ITextEditor getTextEditor() { return fTextEditor; } public ISourceViewer getSourceViewer() { return fSourceViewer; } public CompletionProcessor getCompletionProcessor() { return fCompletionProcessor; } }