All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.maxifier.mxcache.impl.resource.CollectingChangedDependencyNodeVisitor Maven / Gradle / Ivy

/*
 * Copyright (c) 2008-2014 Maxifier Ltd. All Rights Reserved.
 */
package com.maxifier.mxcache.impl.resource;

import com.maxifier.mxcache.impl.resource.nodes.ResourceViewable;
import gnu.trove.map.hash.TCustomHashMap;
import gnu.trove.strategy.IdentityHashingStrategy;

import java.util.Map;
import java.util.Queue;
import java.util.Set;

/**
 * @author Elena Saymanina ([email protected]) (04.06.13)
 */
public class CollectingChangedDependencyNodeVisitor implements DependencyNodeVisitor {
    private final Set nodes;
    private final Queue queue;

    private final Map changedCache = new TCustomHashMap(IdentityHashingStrategy.INSTANCE);

    public CollectingChangedDependencyNodeVisitor(Set nodes, Queue queue) {
        this.nodes = nodes;
        this.queue = queue;
    }

    @Override
    public void visit(DependencyNode node) {
        if (node instanceof ResourceViewable) {
            ResourceViewable resourceViewable = (ResourceViewable) node;
            if (nodes.contains(node) || !isChanged(resourceViewable)) {
                return;
            }
        }
        if (nodes.add(node)) {
            queue.add(node);
        }
    }

    private boolean isChanged(ResourceViewable resourceViewable) {
        Boolean res = changedCache.get(resourceViewable);
        if (res == null) {
            res = resourceViewable.isChanged();
            changedCache.put(resourceViewable, res);
        }
        return res;
    }

    @Override
    public Set getNodes() {
        return nodes;
    }

    @Override
    public Queue getQueue() {
        return queue;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy