Search in sources :

Example 1 with CacheLoader

use of org.polymap.core.runtime.cache.CacheLoader in project polymap4-core by Polymap4.

the class ContentManager method checkInitContent.

/**
 * Initialize the content tree up to the given path, including the children of
 * the last node.
 *
 * @param path
 * @return
 */
private CachedNode checkInitContent(IPath path) {
    assert path != null;
    IPath initPath = rootNode.getPath();
    CachedNode lastResult = null;
    for (int i = -1; i < path.segmentCount(); i++) {
        // first loop for the root
        initPath = (i >= 0) ? initPath.append(path.segment(i)) : initPath;
        // check cache expiration
        if (lastResult != null) {
            IContentNode node = lastResult.get(initPath.lastSegment());
            if (node instanceof IContentFolder && !node.isValid()) {
                invalidateFolder((IContentFolder) node);
            }
        }
        // get/create
        lastResult = nodes.get(initPath, new CacheLoader<IPath, CachedNode, RuntimeException>() {

            private int memSize = 1024;

            @Override
            public CachedNode load(IPath key) throws RuntimeException {
                CachedNode result = new CachedNode();
                for (IContentProvider provider : providers) {
                    List<? extends IContentNode> children = provider.getChildren(key);
                    if (children != null) {
                        for (IContentNode child : children) {
                            IContentNode old = result.put(child.getName(), child);
                            if (old != null) {
                                log.warn("!!! Child node name already exists: " + child.getName() + "!!!");
                            }
                            memSize += child.getSizeInMemory();
                        }
                    }
                }
                return result;
            }

            @Override
            public int size() throws RuntimeException {
                return memSize;
            }
        });
    }
    return lastResult;
}
Also used : IPath(org.eclipse.core.runtime.IPath) IContentProvider(org.polymap.service.fs.spi.IContentProvider) CacheLoader(org.polymap.core.runtime.cache.CacheLoader) IContentNode(org.polymap.service.fs.spi.IContentNode) IContentFolder(org.polymap.service.fs.spi.IContentFolder)

Aggregations

IPath (org.eclipse.core.runtime.IPath)1 CacheLoader (org.polymap.core.runtime.cache.CacheLoader)1 IContentFolder (org.polymap.service.fs.spi.IContentFolder)1 IContentNode (org.polymap.service.fs.spi.IContentNode)1 IContentProvider (org.polymap.service.fs.spi.IContentProvider)1