com.google.enterprise.connector.persist.HybridPersistentStore.java Source code

Java tutorial

Introduction

Here is the source code for com.google.enterprise.connector.persist.HybridPersistentStore.java

Source

// 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.persist;

import com.google.common.collect.ImmutableMap;
import com.google.enterprise.connector.instantiator.Configuration;
import com.google.enterprise.connector.scheduler.Schedule;

import java.util.HashSet;

public class HybridPersistentStore implements PersistentStore {
    private final PersistentStore configurationStore;
    private final PersistentStore scheduleStore;
    private final PersistentStore stateStore;

    public HybridPersistentStore(PersistentStore configurationStore, PersistentStore scheduleStore,
            PersistentStore stateStore) {
        this.configurationStore = configurationStore;
        this.scheduleStore = scheduleStore;
        this.stateStore = stateStore;
    }

    @Override
    public boolean isDisabled() {
        return (configurationStore.isDisabled() && scheduleStore.isDisabled() && stateStore.isDisabled());
    }

    @Override
    public ImmutableMap<StoreContext, ConnectorStamps> getInventory() {
        ImmutableMap<StoreContext, ConnectorStamps> scheduleInventory = scheduleStore.getInventory();
        ImmutableMap<StoreContext, ConnectorStamps> stateInventory = stateStore.getInventory();
        ImmutableMap<StoreContext, ConnectorStamps> configurationInventory = configurationStore.getInventory();

        // TODO: This won't work for JdbcStore, as its StoreContext is
        // missing connectorDir.  This will correct itself when StoreContext
        // is changed to use ConnectorTypeName, rather than connectorDir.
        HashSet<StoreContext> contexts = new HashSet<StoreContext>();
        contexts.addAll(scheduleInventory.keySet());
        contexts.addAll(stateInventory.keySet());
        contexts.addAll(configurationInventory.keySet());

        ImmutableMap.Builder<StoreContext, ConnectorStamps> builder = ImmutableMap.builder();

        for (StoreContext context : contexts) {
            Stamp configurationStamp = null;
            Stamp checkpointStamp = null;
            Stamp scheduleStamp = null;
            ConnectorStamps stamps = configurationInventory.get(context);
            if (stamps != null) {
                configurationStamp = stamps.getConfigurationStamp();
            }
            stamps = scheduleInventory.get(context);
            if (stamps != null) {
                scheduleStamp = stamps.getScheduleStamp();
            }
            stamps = stateInventory.get(context);
            if (stamps != null) {
                checkpointStamp = stamps.getCheckpointStamp();
            }
            builder.put(context, new ConnectorStamps(checkpointStamp, configurationStamp, scheduleStamp));
        }
        return builder.build();
    }

    @Override
    public String getConnectorState(StoreContext context) {
        return stateStore.getConnectorState(context);
    }

    @Override
    public void storeConnectorState(StoreContext context, String connectorState) {
        stateStore.storeConnectorState(context, connectorState);
    }

    @Override
    public void removeConnectorState(StoreContext context) {
        stateStore.removeConnectorState(context);
    }

    @Override
    public Configuration getConnectorConfiguration(StoreContext context) {
        return configurationStore.getConnectorConfiguration(context);
    }

    @Override
    public void storeConnectorConfiguration(StoreContext context, Configuration config) {
        configurationStore.storeConnectorConfiguration(context, config);
    }

    @Override
    public void removeConnectorConfiguration(StoreContext context) {
        configurationStore.removeConnectorConfiguration(context);
    }

    @Override
    public Schedule getConnectorSchedule(StoreContext context) {
        return scheduleStore.getConnectorSchedule(context);
    }

    @Override
    public void storeConnectorSchedule(StoreContext context, Schedule schedule) {
        scheduleStore.storeConnectorSchedule(context, schedule);
    }

    @Override
    public void removeConnectorSchedule(StoreContext context) {
        scheduleStore.removeConnectorSchedule(context);
    }
}