1c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski/*
2c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * Copyright (C) 2016 The Android Open Source Project
3c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski *
4c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * Licensed under the Apache License, Version 2.0 (the "License");
5c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * you may not use this file except in compliance with the License.
6c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * You may obtain a copy of the License at
7c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski *
8c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski *      http://www.apache.org/licenses/LICENSE-2.0
9c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski *
10c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * Unless required by applicable law or agreed to in writing, software
11c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * distributed under the License is distributed on an "AS IS" BASIS,
12c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * See the License for the specific language governing permissions and
14c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * limitations under the License.
15c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski */
16c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski
17c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewskipackage com.android.documentsui.archives;
18c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski
19c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewskiimport android.net.Uri;
20c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski
21c6e98ffffc3091741f158e2050ba0a3f76f6f087Tomasz Mikolajewskipublic class ArchiveId {
22c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski    private final static char DELIMITER = '#';
23c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski
24c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski    public final Uri mArchiveUri;
25d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski    public final int mAccessMode;
26c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski    public final String mPath;
27c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski
28d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski    public ArchiveId(Uri archiveUri, int accessMode, String path) {
29d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        assert(archiveUri.toString().indexOf(DELIMITER) == -1);
30d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        assert(!path.isEmpty());
31d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski
32c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski        mArchiveUri = archiveUri;
33d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        mAccessMode = accessMode;
34c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski        mPath = path;
35c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski    }
36c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski
37c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski    static public ArchiveId fromDocumentId(String documentId) {
38c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski        final int delimiterPosition = documentId.indexOf(DELIMITER);
39c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski        assert(delimiterPosition != -1);
40d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski
41d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        final int secondDelimiterPosition = documentId.indexOf(DELIMITER, delimiterPosition + 1);
42d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        assert(secondDelimiterPosition != -1);
43d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski
44d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        final String archiveUriPart = documentId.substring(0, delimiterPosition);
45d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        final String accessModePart = documentId.substring(delimiterPosition + 1,
46d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski                secondDelimiterPosition);
47d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski
48d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        final String pathPart = documentId.substring(secondDelimiterPosition + 1);
49d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski
50d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        return new ArchiveId(Uri.parse(archiveUriPart), Integer.parseInt(accessModePart),
51d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski                pathPart);
52c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski    }
53c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski
54c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski    public String toDocumentId() {
55d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski        return mArchiveUri.toString() + DELIMITER + mAccessMode + DELIMITER + mPath;
56c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski    }
57c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski};
58