// Copyright 2010 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.enterprise.connector.instantiator;
import com.google.enterprise.connector.database.ConnectorPersistentStoreFactory;
import com.google.enterprise.connector.pusher.PusherFactory;
import com.google.enterprise.connector.scheduler.LoadManagerFactory;
import com.google.enterprise.connector.spi.Connector;
import com.google.enterprise.connector.util.Clock;
/**
* Factory for constructing ConnectorCoordinatorImpl instances.
*/
public class ConnectorCoordinatorImplFactory
implements ConnectorCoordinatorFactory {
// State that is filled in by Spring.
private PusherFactory pusherFactory;
private LoadManagerFactory loadManagerFactory;
private ConnectorPersistentStoreFactory connectorPersistentStoreFactory;
private ThreadPool threadPool;
private ChangeDetector changeDetector;
private Clock clock;
/**
* Sets the {@link PusherFactory} used to create instances of
* {@link com.google.enterprise.connector.pusher.Pusher Pusher}
* for pushing documents to the GSA.
*
* @param pusherFactory a {@link PusherFactory} implementation.
*/
public void setPusherFactory(PusherFactory pusherFactory) {
this.pusherFactory = pusherFactory;
}
/**
* Sets the {@link LoadManagerFactory} used to create instances of
* {@link com.google.enterprise.connector.scheduler.LoadManager LoadManager}
* for controlling feed rate.
*
* @param loadManagerFactory a {@link LoadManagerFactory}.
*/
public void setLoadManagerFactory(LoadManagerFactory loadManagerFactory) {
this.loadManagerFactory = loadManagerFactory;
}
/**
* Sets the {@link ConnectorPersistentStoreFactory} used to create instances
* of {@link com.google.enterprise.connector.spi.ConnectorPersistentStore}
* for providing database access to Connectors that request it.
*
* @param connectorPersistentStoreFactory a
* {@link ConnectorPersistentStoreFactory} implementation.
*/
public void setConnectorPersistentStoreFactory(
ConnectorPersistentStoreFactory connectorPersistentStoreFactory) {
this.connectorPersistentStoreFactory = connectorPersistentStoreFactory;
}
/**
* Sets the {@link ThreadPool} used for running traversals.
*
* @param threadPool a {@link ThreadPool} implementation.
*/
public void setThreadPool(ThreadPool threadPool) {
this.threadPool = threadPool;
}
/**
* Sets the {@link Clock} used for timing traversals.
*
* @param clock a {@link Clock} implementation.
*/
public void setClock(Clock clock) {
this.clock = clock;
}
/**
* Sets the {@link ChangeDetector} used for invoking the local
* {@link ChangeHandler} for connector configuration, schedule, and
* checkpoint changes that are initiated by this Manager instance.
*
* @param changeDetector a {@link ChangeDetector} implementation.
*/
/* It should be noted that there is a circular dependency here.
* ConnectorCoordinatorMap -> ConnectorCoordinatorFactory ->
* ChangeDetector -> ChangeListener -> ConnectorCoordinatorMap.
* ConnectorCoordinatorMap uses this Factory,supplies the
* ChangeDetector to the ConnectorCoordinatorImpl where it is used
* to trigger calls to its ChangeHandler methods.
* ChangeListenerImpl needs the ConnectorCoordinatorMap to locate
* the appropriate ChangeHandler for a named connector.
*/
public void setChangeDetector(ChangeDetector changeDetector) {
this.changeDetector = changeDetector;
}
/**
* Factory method constructs a new {@link ConnectorCoordinator}
* for the named {@link Connector} instance.
*
* @param connectorName the Connector instance name.
* @return a new ConnectorCoordinator.
*/
@Override
public ConnectorCoordinator newConnectorCoordinator(String connectorName) {
return new ConnectorCoordinatorImpl(connectorName,
pusherFactory, loadManagerFactory, connectorPersistentStoreFactory,
threadPool, changeDetector, clock);
}
}