org.zenoss.zep.index.impl.IndexedDetailsConfigurationImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.zenoss.zep.index.impl.IndexedDetailsConfigurationImpl.java

Source

/*****************************************************************************
 * 
 * Copyright (C) Zenoss, Inc. 2011, all rights reserved.
 * 
 * This content is made available according to terms specified in
 * License.zenoss under the directory where your Zenoss product is installed.
 * 
 ****************************************************************************/

package org.zenoss.zep.index.impl;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.context.ApplicationListener;
import org.zenoss.protobufs.zep.Zep.EventDetailItem;
import org.zenoss.zep.ZepException;
import org.zenoss.zep.dao.EventDetailsConfigDao;
import org.zenoss.zep.events.IndexDetailsUpdatedEvent;
import org.zenoss.zep.events.IndexRebuildRequiredEvent;
import org.zenoss.zep.index.IndexedDetailsConfiguration;

import java.util.Map;

/**
 * Used to maintain the current configuration for the indexed event details.
 */
public class IndexedDetailsConfigurationImpl implements IndexedDetailsConfiguration,
        ApplicationListener<IndexDetailsUpdatedEvent>, ApplicationEventPublisherAware {

    private static final Logger logger = LoggerFactory.getLogger(IndexedDetailsConfigurationImpl.class);

    private EventDetailsConfigDao eventDetailsConfigDao;

    private volatile boolean initialized = false;
    private volatile Map<String, EventDetailItem> eventDetailItemsByName;
    private ApplicationEventPublisher applicationEventPublisher;

    public void setEventDetailsConfigDao(EventDetailsConfigDao eventDetailsConfigDao) {
        this.eventDetailsConfigDao = eventDetailsConfigDao;
    }

    @Override
    public Map<String, EventDetailItem> getEventDetailItemsByName() throws ZepException {
        if (!initialized) {
            synchronized (this) {
                // Don't initialize twice
                if (!initialized) {
                    this.eventDetailsConfigDao.init();
                }
                initialized = true;
            }
        }
        if (eventDetailItemsByName == null) {
            synchronized (this) {
                if (eventDetailItemsByName == null) {
                    this.eventDetailItemsByName = eventDetailsConfigDao.getEventDetailItemsByName();
                    for (EventDetailItem item : this.eventDetailItemsByName.values()) {
                        logger.info("Indexed event detail: {} ({})", item.getKey(), item.getType());
                    }
                }
            }
        }
        return this.eventDetailItemsByName;
    }

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }

    @Override
    public void onApplicationEvent(IndexDetailsUpdatedEvent event) {
        this.eventDetailItemsByName = null;
        this.applicationEventPublisher.publishEvent(new IndexRebuildRequiredEvent(this));
    }
}