1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski//
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Copyright 2011 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski//
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#ifndef MOCKFILEFINDER_H
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#define MOCKFILEFINDER_H
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/Vector.h>
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/KeyedVector.h>
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/String8.h>
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "DirectoryWalker.h"
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing namespace android;
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass MockFileFinder : public FileFinder {
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic:
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    MockFileFinder (KeyedVector<String8, KeyedVector<String8,time_t> >& files)
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        : mFiles(files)
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // Nothing left to do
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    };
23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * findFiles implementation for the abstraction.
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * PRECONDITIONS:
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *  No checking is done, so there MUST be an entry in mFiles with
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *  path matching basePath.
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * POSTCONDITIONS:
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *  fileStore is filled with a copy of the data in mFiles corresponding
32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *  to the basePath.
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    virtual bool findFiles(String8 basePath, Vector<String8>& extensions,
36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                           KeyedVector<String8,time_t>& fileStore,
37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                           DirectoryWalker* dw)
38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    {
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        const KeyedVector<String8,time_t>* payload(&mFiles.valueFor(basePath));
40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // Since KeyedVector doesn't implement swap
41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // (who doesn't use swap??) we loop and add one at a time.
42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        for (size_t i = 0; i < payload->size(); ++i) {
43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            fileStore.add(payload->keyAt(i),payload->valueAt(i));
44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return true;
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprivate:
49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // Virtual mapping between "directories" and the "files" contained
50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // in them
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    KeyedVector<String8, KeyedVector<String8,time_t> > mFiles;
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski};
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif // MOCKFILEFINDER_H