BackupHelperDispatcher.java revision efd0fab04b96d7ab0c1d8bf3b79397c8621e31c5
15f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato/*
25f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * Copyright (C) 2009 The Android Open Source Project
35f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato *
45f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
55f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * you may not use this file except in compliance with the License.
65f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * You may obtain a copy of the License at
75f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato *
85f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
95f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato *
105f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * Unless required by applicable law or agreed to in writing, software
115f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
125f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * See the License for the specific language governing permissions and
145f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato * limitations under the License.
155f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato */
165f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato
175f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onoratopackage android.backup;
185f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato
195f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onoratoimport java.io.IOException;
205f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onoratoimport java.util.HashMap;
215f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato
225f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato/** @hide */
235f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onoratopublic class RestoreHelperDispatcher {
24efd0fab04b96d7ab0c1d8bf3b79397c8621e31c5Joe Onorato    HashMap<String,RestoreHelper> mHelpers = new HashMap<String,RestoreHelper>();
255f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato
265f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato    public void addHelper(String keyPrefix, RestoreHelper helper) {
275f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato        mHelpers.put(keyPrefix, helper);
285f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato    }
295f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato
305f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato    public void dispatch(BackupDataInput input) throws IOException {
315f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato        BackupDataInputStream stream = new BackupDataInputStream(input);
325f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato        while (input.readNextHeader()) {
335f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato            String rawKey = input.getKey();
345f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato            int pos = rawKey.indexOf(':');
355f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato            if (pos > 0) {
365f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato                String prefix = rawKey.substring(0, pos);
375f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato                RestoreHelper helper = mHelpers.get(prefix);
385f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato                if (helper != null) {
395f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato                    stream.dataSize = input.getDataSize();
405f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato                    stream.key = rawKey.substring(pos+1);
41efd0fab04b96d7ab0c1d8bf3b79397c8621e31c5Joe Onorato                    helper.restoreEntity(stream);
425f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato                }
435f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato            }
445f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato            input.skipEntityData(); // In case they didn't consume the data.
455f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato        }
465f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato    }
475f15d151b5101fadfe6cba1e8f4aa6367e8c603eJoe Onorato}
48