Search in sources :

Example 1 with IContentProvider

use of org.polymap.service.fs.spi.IContentProvider 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)

Example 2 with IContentProvider

use of org.polymap.service.fs.spi.IContentProvider in project polymap4-core by Polymap4.

the class ContentManager method dispose.

public void dispose() {
    for (IContentProvider provider : providers) {
        provider.dispose();
    }
    providers = null;
    for (Map<String, IContentNode> children : nodes.values()) {
        for (IContentNode child : children.values()) {
            child.dispose();
        }
    }
    nodes.clear();
    nodes.dispose();
    nodes = null;
}
Also used : IContentProvider(org.polymap.service.fs.spi.IContentProvider) IContentNode(org.polymap.service.fs.spi.IContentNode)

Aggregations

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