Package com.springsource.insight.plugin.ehcache

Source Code of com.springsource.insight.plugin.ehcache.EhcacheOperationCollectionAspectTestSupport$TestCacheWriter

/**
* Copyright (c) 2009-2011 VMware, Inc. All Rights Reserved.
*
* 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.springsource.insight.plugin.ehcache;

import java.io.File;
import java.net.URL;
import java.util.Collection;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheEntry;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.config.ConfigurationFactory;
import net.sf.ehcache.config.DiskStoreConfiguration;
import net.sf.ehcache.writer.CacheWriter;

import org.junit.BeforeClass;

import com.springsource.insight.collection.IgnoringOperationCollector;
import com.springsource.insight.collection.OperationCollectionAspectSupport;
import com.springsource.insight.collection.OperationCollector;
import com.springsource.insight.collection.test.OperationCollectionAspectTestSupport;
import com.springsource.insight.intercept.operation.Operation;
import com.springsource.insight.util.FileUtil;

/**
*
*/
public abstract class EhcacheOperationCollectionAspectTestSupport
        extends OperationCollectionAspectTestSupport {
    protected static final String TEST_CACHE_NAME = "ehcacheOperationCollector";
    protected static CacheManager manager;
    protected static Cache cache;

    protected EhcacheOperationCollectionAspectTestSupport() {
        super();
    }

    // neutralizes the argument captor
    protected Element putUncaptured(final Object key, final Object value) {
        assertNotNull("Null key", key);
        assertNotNull("Null value", value);

        final Element elem = new Element(key, value);
        final OperationCollectionAspectSupport collAspect = getAspect();
        final OperationCollector current = collAspect.getCollector();
        try {
            collAspect.setCollector(IgnoringOperationCollector.DEFAULT);
            cache.put(elem);
            return elem;
        } finally {
            collAspect.setCollector(current);
        }

    }

    protected Operation assertEhcacheOperationContents(final String method, final Object key, final Object value) {
        final Operation op = getLastEntered();
        assertNotNull("No operation extracted", op);
        assertEquals("Mismatched operation type", EhcacheDefinitions.CACHE_OPERATION, op.getType());
        assertEquals("Mismatched cache name", TEST_CACHE_NAME, op.get(EhcacheDefinitions.NAME_ATTRIBUTE, String.class));
        assertEquals("Mismatched method", method, op.get(EhcacheDefinitions.METHOD_ATTRIBUTE, String.class));
        assertEquals("Mismatched key", key.getClass().getSimpleName(), op.get(EhcacheDefinitions.KEY_ATTRIBUTE));

        if (value != null) {
            assertEquals("Mismatched value", value.getClass().getSimpleName(), op.get(EhcacheDefinitions.VALUE_ATTRIBUTE));
        }
        return op;
    }

    @BeforeClass
    public static final synchronized void initTestCache() {
        if (manager != null) {
            return;
        }

        final Class<?> anchorClass = EhcacheOperationCollectionAspectTestSupport.class;
        final URL configURL = anchorClass.getResource("/ehcache.xml");
        assertNotNull("Cannot find configuration file URL");

        final File testDir = FileUtil.detectTargetFolder(anchorClass), testStore = new File(testDir, "ehcache-store");
        final Configuration config = ConfigurationFactory.parseConfiguration(configURL);
        final DiskStoreConfiguration diskStore = config.getDiskStoreConfiguration();
        diskStore.setPath(testStore.getAbsolutePath());

        manager = CacheManager.create(config);
        cache = manager.getCache(TEST_CACHE_NAME);
        assertNotNull("Test cache not found", cache);
        cache.registerCacheWriter(new TestCacheWriter(cache));
    }

    @SuppressWarnings("hiding")
    public static class TestCacheWriter implements CacheWriter, Cloneable {
        private Ehcache cache;

        public TestCacheWriter(final Ehcache cache) {
            this.cache = cache;
        }

        public CacheWriter clone(final Ehcache cache) throws CloneNotSupportedException {
            final TestCacheWriter writer = getClass().cast(super.clone());
            writer.cache = cache;
            return writer;
        }

        public void init() {
            System.out.println(toString() + " - initialized");
        }

        public void dispose() throws CacheException {
            System.out.println(toString() + " - disposed");
        }

        public void write(final Element element) throws CacheException {
            if (element == null) {
                throw new CacheException("No element to write");
            }

            System.out.println(toString() + " write[" + element.getObjectKey() + "]=" + element.getObjectValue());
        }

        public void writeAll(final Collection<Element> elements) throws CacheException {
            if ((elements == null) || elements.isEmpty()) {
                return;
            }

            for (final Element elem : elements) {
                write(elem);
            }
        }

        public void delete(final CacheEntry entry) throws CacheException {
            if (entry == null) {
                throw new CacheException("No entry to delete");
            }
            System.out.println(toString() + " - delete[" + entry.getKey() + "]");
        }

        public void deleteAll(final Collection<CacheEntry> entries) throws CacheException {
            if ((entries == null) || entries.isEmpty()) {
                return;
            }

            for (final CacheEntry e : entries) {
                delete(e);
            }
        }

        @Override
        protected Object clone() throws CloneNotSupportedException {
            return super.clone();
        }

        @Override
        public String toString() {
            return getClass().getSimpleName() + "[" + cache.getName() + "]";
        }
    }
}
TOP

Related Classes of com.springsource.insight.plugin.ehcache.EhcacheOperationCollectionAspectTestSupport$TestCacheWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.