/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.vfs.impl.memory; import org.eclipse.che.api.core.ServerException; import org.eclipse.che.api.vfs.AbstractVirtualFileSystemProvider; import org.eclipse.che.api.vfs.ArchiverFactory; import org.eclipse.che.api.vfs.VirtualFile; import org.eclipse.che.api.vfs.VirtualFileSystem; import org.eclipse.che.api.vfs.search.Searcher; import org.eclipse.che.api.vfs.search.SearcherProvider; import java.util.concurrent.atomic.AtomicInteger; /** * In-memory implementation of VirtualFileSystem. * <p/> * NOTE: This implementation is not thread safe. * * @author andrew00x */ public class MemoryVirtualFileSystem implements VirtualFileSystem { private static final AtomicInteger ID = new AtomicInteger(); private final ArchiverFactory archiverFactory; private final SearcherProvider searcherProvider; private final AbstractVirtualFileSystemProvider.CloseCallback closeCallback; private final int id = ID.incrementAndGet(); private VirtualFile root; public MemoryVirtualFileSystem(ArchiverFactory archiverFactory, SearcherProvider searcherProvider) { this(archiverFactory, searcherProvider, null); } MemoryVirtualFileSystem(ArchiverFactory archiverFactory, SearcherProvider searcherProvider, AbstractVirtualFileSystemProvider.CloseCallback closeCallback) { this.archiverFactory = archiverFactory; this.searcherProvider = searcherProvider; this.closeCallback = closeCallback; root = new MemoryVirtualFile(this); } @Override public VirtualFile getRoot() { return root; } @Override public void close() throws ServerException { root = null; if (searcherProvider != null) { Searcher searcher = searcherProvider.getSearcher(this, false); if (searcher != null) { searcher.close(); } } if (closeCallback != null) { closeCallback.onClose(); } } @Override public SearcherProvider getSearcherProvider() { return searcherProvider; } @Override public boolean equals(Object o) { if (this == o) { return true; } if ((o instanceof MemoryVirtualFileSystem)) { MemoryVirtualFileSystem other = (MemoryVirtualFileSystem)o; return id == other.id; } return false; } @Override public int hashCode() { return id; } ArchiverFactory getArchiverFactory() { return archiverFactory; } }