1   package com.trendmicro.grid.acl.ds;
2   
3   import com.trendmicro.grid.acl.ds.datatypes.SharedFileDetails;
4   import com.trendmicro.grid.acl.ds.datatypes.SharedFileInformation;
5   import com.trendmicro.grid.acl.l0.datatypes.FileIdentiferListPage;
6   import com.trendmicro.grid.acl.l0.datatypes.FileIdentifier;
7   import com.trendmicro.grid.acl.l0.datatypes.Range;
8   
9   import java.util.Collection;
10  
11  /**
12   * Defines a readonly repository that provides information on files.
13   *
14   * @author juergen_kellerer, 2010-05-06
15   * @version 1.0
16   */
17  public interface FileProvider extends Repository {
18  
19  	/**
20  	 * Returns true if the identified files exist inside the CoreDB and are not marked 'unknown'.
21  	 *
22  	 * @param files the files to check.
23  	 * @return a collection that contains the results of the requested files.
24  	 */
25  	Collection<Boolean> isFilesKnown(Collection<FileIdentifier> files);
26  
27  	/**
28  	 * Returns true if the given files are tagged with the specified tags.
29  	 *
30  	 * @param files The files to verify.
31  	 * @param tags  The tags to check against.
32  	 * @return True if the tags apply to the files, false if not, 'null' if the file is unknown.
33  	 */
34  	Collection<Boolean> isFilesTaggedWith(Collection<FileIdentifier> files, String[] tags);
35  
36  	/**
37  	 * Returns all known files that are matched by the given tag expression.
38  	 *
39  	 * @param expression An expression following the tag query grammar used to identify files.
40  	 * @param range	  A range limiting the output or 'null' if no range is specified.
41  	 * @param pageNumber The number of the list page to return, starting from 0 for the first chunk.
42  	 * @return A chunk of file identifiers for the files, matching the given expression or
43  	 *         'null' if no chunk exists under the given number.
44  	 */
45  	FileIdentiferListPage getMatchingFiles(TagQueryExpression expression, Range range, int pageNumber);
46  
47  	/**
48  	 * Returns the canonical list of identifiers for the given file ids.
49  	 * <p/>
50  	 * Note: This is useful when using identifiers that are missing certain hashes.
51  	 * The method will ensure that SHA1 and MD5 are filled and valid.
52  	 *
53  	 * @param files The files to return the canonical list for.
54  	 * @return the canonical file identifier list for the given file ids. The list may contain 'null'
55  	 *         entries if the corresponding file was unknown.
56  	 */
57  	Collection<FileIdentifier> getCanonicalIdentifiers(Collection<FileIdentifier> files);
58  
59  	/**
60  	 * Returns the file information list for the given files.
61  	 *
62  	 * @param files The files to return the information list for.
63  	 * @return the file information list for the given file. The list may contain 'null'
64  	 *         entries if the corresponding file was unknown.
65  	 */
66  	Collection<SharedFileInformation> getFileInformationList(Collection<FileIdentifier> files);
67  
68  	/**
69  	 * Returns the file details list for the given files.
70  	 *
71  	 * @param files The files to return the details list for.
72  	 * @return the file details list for the given file. The list may contain 'null'
73  	 *         entries if the corresponding file was unknown.
74  	 */
75  	Collection<SharedFileDetails> getFileDetailsList(Collection<FileIdentifier> files);
76  }