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

it.anyplace.sync.bep.FolderBrowser Maven / Gradle / Ivy

There is a newer version: 1.3
Show newest version
/* 
 * Copyright (C) 2016 Davide Imbriaco
 *
 * This Java file is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/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 it.anyplace.sync.bep;

import com.google.common.base.Function;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.eventbus.Subscribe;
import it.anyplace.sync.core.beans.FolderInfo;
import it.anyplace.sync.core.beans.FolderStats;
import java.io.Closeable;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import static com.google.common.base.Preconditions.checkNotNull;
import it.anyplace.sync.core.interfaces.IndexRepository;

/**
 *
 * @author aleph
 */
public final class FolderBrowser implements Closeable {

    private final IndexHandler indexHandler;
    private final LoadingCache folderStatsCache = CacheBuilder.newBuilder()
        .build(new CacheLoader() {
            @Override
            public FolderStats load(String folder) throws Exception {
                return FolderStats.newBuilder()
                    .setFolder(folder)
                    .build();
            }
        });
    private final Object indexRepositoryEventListener = new Object() {
        @Subscribe
        public void handleFolderStatsUpdatedEvent(IndexRepository.FolderStatsUpdatedEvent event) {
            addFolderStats(event.getFolderStats());
        }
    };

    protected FolderBrowser(IndexHandler indexHandler) {
        checkNotNull(indexHandler);
        this.indexHandler = indexHandler;
        indexHandler.getIndexRepository().getEventBus().register(indexRepositoryEventListener);
        addFolderStats(indexHandler.getIndexRepository().findAllFolderStats());
    }

    private void addFolderStats(List folderStatsList) {
        for (FolderStats folderStats : folderStatsList) {
            folderStatsCache.put(folderStats.getFolder(), folderStats);
        }
    }

    public FolderStats getFolderStats(String folder) {
        return folderStatsCache.getUnchecked(folder);
    }

    public FolderInfo getFolderInfo(String folder) {
        return indexHandler.getFolderInfo(folder);
    }

    public List> getFolderInfoAndStatsList() {
        return Lists.newArrayList(Iterables.transform(indexHandler.getFolderInfoList(), new Function>() {
            @Override
            public Pair apply(FolderInfo folderInfo) {
                return Pair.of(folderInfo, getFolderStats(folderInfo.getFolder()));
            }
        }));
    }

    @Override
    public void close() {
        indexHandler.getIndexRepository().getEventBus().unregister(indexRepositoryEventListener);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy