blob: 47adee5ac3c05d65d808cd7635dc31c4523bc5bb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 IBM Corporation and others.
* 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:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.ptp.rdt.server.dstore.core;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.ptp.internal.rdt.core.callhierarchy.ICallHierarchyService;
import org.eclipse.ptp.internal.rdt.core.callhierarchy.RemoteCallHierarchyService;
import org.eclipse.ptp.internal.rdt.core.includebrowser.IIncludeBrowserService;
import org.eclipse.ptp.internal.rdt.core.includebrowser.RemoteIncludeBrowserService;
import org.eclipse.ptp.internal.rdt.core.index.IIndexLifecycleService;
import org.eclipse.ptp.internal.rdt.core.index.RemoteIndexLifecycleService;
import org.eclipse.ptp.internal.rdt.core.model.IModelBuilderService;
import org.eclipse.ptp.internal.rdt.core.model.RemoteModelBuilderService;
import org.eclipse.ptp.internal.rdt.core.navigation.INavigationService;
import org.eclipse.ptp.internal.rdt.core.navigation.RemoteNavigationService;
import org.eclipse.ptp.internal.rdt.core.typehierarchy.ITypeHierarchyService;
import org.eclipse.ptp.internal.rdt.core.typehierarchy.RemoteTypeHierarchyService;
import org.eclipse.ptp.internal.rdt.ui.contentassist.IContentAssistService;
import org.eclipse.ptp.internal.rdt.ui.contentassist.RemoteContentAssistService;
import org.eclipse.ptp.internal.rdt.ui.search.ISearchService;
import org.eclipse.ptp.internal.rdt.ui.search.RemoteSearchService;
import org.eclipse.ptp.rdt.server.dstore.messages.Messages;
import org.eclipse.ptp.rdt.ui.serviceproviders.IRemoteToolsIndexServiceProvider;
import org.eclipse.ptp.remote.core.IRemoteConnection;
import org.eclipse.ptp.remote.core.IRemoteServices;
import org.eclipse.ptp.remote.core.PTPRemoteCorePlugin;
import org.eclipse.ptp.services.core.IServiceProvider;
import org.eclipse.ptp.services.core.IServiceProviderWorkingCopy;
import org.eclipse.ptp.services.core.ServiceProvider;
public class RemoteToolsCIndexServiceProvider extends ServiceProvider implements IRemoteToolsIndexServiceProvider,
IServiceProviderWorkingCopy {
protected IIndexLifecycleService fIndexLifecycleService = null;
protected INavigationService fNavigationService = null;
protected ICallHierarchyService fCallHierarchyService = null;
protected ITypeHierarchyService fTypeHierarchyService = null;
protected IIncludeBrowserService fIncludeBrowserService = null;
protected IModelBuilderService fModelBuilderService = null;
protected RemoteSearchService fSearchService = null;
protected IContentAssistService fContentAssistService = null;
protected RemoteToolsCIndexSubsystem fSubsystem = null;
protected boolean fIsDirty = false;
protected RemoteToolsCIndexServiceProvider fProvider = null;
protected boolean fIsConfigured = false;
public static final String NAME = Messages.RemoteToolsCIndexServiceProvider_0;
public static final String SERVICE_ID = "org.eclipse.ptp.rdt.core.CIndexingService"; //$NON-NLS-1$
private static final String SERVICE_ID_KEY = "service-name"; //$NON-NLS-1$
private static final String CONNECTION_NAME_KEY = "connection-name"; //$NON-NLS-1$
private static final String INDEX_LOCATION_KEY = "index-location"; //$NON-NLS-1$
public RemoteToolsCIndexServiceProvider() {
}
public RemoteToolsCIndexServiceProvider(RemoteToolsCIndexServiceProvider provider) {
fProvider = provider;
setProperties(provider.getProperties());
setDescriptor(provider.getDescriptor());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.services.core.ServiceProvider#copy()
*/
@Override
public IServiceProviderWorkingCopy copy() {
return new RemoteToolsCIndexServiceProvider(this);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.core.serviceproviders.IIndexServiceProvider#
* getCallHierarchyService()
*/
public synchronized ICallHierarchyService getCallHierarchyService() {
if (!isConfigured())
return null;
if (fCallHierarchyService == null)
fCallHierarchyService = new RemoteCallHierarchyService(fSubsystem);
return fCallHierarchyService;
}
/**
* Get the host name for this connection.
*
* @return host name
*/
public String getConnectionName() {
return getString(CONNECTION_NAME_KEY, null);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.ui.serviceproviders.IIndexServiceProvider2#
* getContentAssistService()
*/
public IContentAssistService getContentAssistService() {
if (!isConfigured())
return null;
if (fContentAssistService == null)
fContentAssistService = new RemoteContentAssistService(fSubsystem);
return fContentAssistService;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.core.serviceproviders.IIndexServiceProvider#
* getIncludeBrowserService()
*/
public synchronized IIncludeBrowserService getIncludeBrowserService() {
if (!isConfigured())
return null;
if (fIncludeBrowserService == null)
fIncludeBrowserService = new RemoteIncludeBrowserService(fSubsystem);
return fIncludeBrowserService;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.core.serviceproviders.IIndexServiceProvider#
* getIndexLifeCycleService()
*/
public synchronized IIndexLifecycleService getIndexLifeCycleService() {
if (!isConfigured())
return null;
if (fIndexLifecycleService == null)
fIndexLifecycleService = new RemoteIndexLifecycleService(fSubsystem);
return fIndexLifecycleService;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.core.serviceproviders.IIndexServiceProvider#
* getIndexLocation()
*/
public String getIndexLocation() {
initialize();
return getString(INDEX_LOCATION_KEY, ""); //$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.core.serviceproviders.IIndexServiceProvider#
* getModelBuilderService()
*/
public synchronized IModelBuilderService getModelBuilderService() {
if (!isConfigured())
return null;
if (fModelBuilderService == null)
fModelBuilderService = new RemoteModelBuilderService(fSubsystem);
return fModelBuilderService;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.core.serviceproviders.IIndexServiceProvider#
* getNavigationService()
*/
public synchronized INavigationService getNavigationService() {
if (!isConfigured())
return null;
if (fNavigationService == null)
fNavigationService = new RemoteNavigationService(fSubsystem);
return fNavigationService;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ptp.services.core.IServiceProviderWorkingCopy#getOriginal()
*/
public IServiceProvider getOriginal() {
return fProvider;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ptp.rdt.ui.serviceproviders.IRemoteToolsIndexServiceProvider#
* getConnection()
*/
public IRemoteConnection getConnection() {
if (!isConfigured()) {
return null;
}
return getRemoteServices().getConnectionManager().getConnection(getConnectionName());
}
private IRemoteServices getRemoteServices() {
if (!isConfigured()) {
return null;
}
return PTPRemoteCorePlugin.getDefault().getRemoteServices(getServiceId());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.ui.serviceproviders.IIndexServiceProvider2#
* getSearchService()
*/
public ISearchService getSearchService() {
if (!isConfigured())
return null;
if (fSearchService == null)
fSearchService = new RemoteSearchService(fSubsystem);
return fSearchService;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.services.core.ServiceProvider#getServiceId()
*/
@Override
public String getServiceId() {
return getString(SERVICE_ID_KEY, null);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.core.serviceproviders.IIndexServiceProvider#
* getTypeHierarchyService()
*/
public synchronized ITypeHierarchyService getTypeHierarchyService() {
if (!isConfigured())
return null;
if (fTypeHierarchyService == null)
fTypeHierarchyService = new RemoteTypeHierarchyService(fSubsystem);
return fTypeHierarchyService;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.services.core.IServiceProvider#isConfigured()
*/
public boolean isConfigured() {
initialize();
return fIsConfigured;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.services.core.IServiceProviderWorkingCopy#isDirty()
*/
public boolean isDirty() {
return fIsDirty;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ptp.services.core.ServiceProvider#putString(java.lang.String,
* java.lang.String)
*/
@Override
public void putString(String key, String value) {
fIsDirty = true;
super.putString(key, value);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.services.core.IServiceProviderWorkingCopy#save()
*/
public void save() {
if (fProvider != null) {
fProvider.setProperties(getProperties());
fIsDirty = false;
}
}
/**
* @param isConfigured
*/
public void setConfigured(boolean isConfigured) {
fIsConfigured = isConfigured;
}
/**
* Set a new connection for this service provider. This will reset the index
* and DStore server locations to their default values.
*
* @param connection
* new connection
*/
public void setConnection(IRemoteConnection connection) {
setConnection(connection, true);
}
/**
* Set the host name for this connection
*
* @param hostName
*/
public void setConnectionName(String connectionName) {
putString(CONNECTION_NAME_KEY, connectionName);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.rdt.core.serviceproviders.IIndexServiceProvider#
* setIndexLocation(java.lang.String)
*/
public void setIndexLocation(String path) {
putString(INDEX_LOCATION_KEY, path);
}
/**
* @param serviceId
*/
public void setServiceId(String serviceId) {
putString(SERVICE_ID_KEY, serviceId);
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "RemoteToolsCIndexServiceProvider(" + getIndexLocation() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
private void initialize() {
if (fSubsystem == null && getServiceId() != null) {
IRemoteServices services = PTPRemoteCorePlugin.getDefault().getRemoteServices(getServiceId());
if (services != null && getConnectionName() != null) {
IRemoteConnection connection = services.getConnectionManager().getConnection(getConnectionName());
setConnection(connection, false);
}
}
}
/**
* Set a new connection for this service provider. If reset is true the
* index and DStore server locations will be reset to their default values.
*
* @param connection
* new connection
* @param reset
* reset locations to defaults
*/
private void setConnection(IRemoteConnection connection, boolean reset) {
setServiceId(connection.getRemoteServices().getId());
setConnectionName(connection.getName());
if (reset) {
IPath workingDir = new Path(connection.getWorkingDirectory());
setIndexLocation(workingDir.append(".eclipsesettings").toString()); //$NON-NLS-1$
}
if (fSubsystem != null) {
fSubsystem.dispose();
}
fSubsystem = new RemoteToolsCIndexSubsystem(this);
setConfigured(true);
}
}