Bmgr.java revision 4a627c71ff53a4fca1f961f4b1dcc0461df18a06
1ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate/* 2ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * Copyright (C) 2009 The Android Open Source Project 3ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * 4ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * Licensed under the Apache License, Version 2.0 (the "License"); 5ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * you may not use this file except in compliance with the License. 6ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * You may obtain a copy of the License at 7ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * 8ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * http://www.apache.org/licenses/LICENSE-2.0 9ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * 10ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * Unless required by applicable law or agreed to in writing, software 11ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * distributed under the License is distributed on an "AS IS" BASIS, 12ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * See the License for the specific language governing permissions and 14ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate * limitations under the License. 15ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate */ 16ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 17ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tatepackage com.android.commands.bmgr; 18ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 194528186e0d65fc68ef0dd1941aa2ac8aefcd55a3Christopher Tateimport android.app.backup.RestoreSet; 204528186e0d65fc68ef0dd1941aa2ac8aefcd55a3Christopher Tateimport android.app.backup.IBackupManager; 214528186e0d65fc68ef0dd1941aa2ac8aefcd55a3Christopher Tateimport android.app.backup.IRestoreObserver; 224528186e0d65fc68ef0dd1941aa2ac8aefcd55a3Christopher Tateimport android.app.backup.IRestoreSession; 23ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tateimport android.os.RemoteException; 24ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tateimport android.os.ServiceManager; 25ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 26ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tatepublic final class Bmgr { 27ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate IBackupManager mBmgr; 28ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate IRestoreSession mRestore; 29ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 30ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate static final String BMGR_NOT_RUNNING_ERR = 31ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate "Error: Could not access the Backup Manager. Is the system running?"; 32ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate static final String TRANSPORT_NOT_RUNNING_ERR = 33ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate "Error: Could not access the backup transport. Is the system running?"; 34ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 35ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private String[] mArgs; 36ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private int mNextArg; 37ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 38ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate public static void main(String[] args) { 39f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate try { 40f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate new Bmgr().run(args); 41f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } catch (Exception e) { 42f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate System.err.println("Exception caught:"); 43f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate e.printStackTrace(); 44f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 45ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 46f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate 47ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate public void run(String[] args) { 48ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate boolean validCommand = false; 49ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate if (args.length < 1) { 50ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate showUsage(); 51ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return; 52ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 53ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 54ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate mBmgr = IBackupManager.Stub.asInterface(ServiceManager.getService("backup")); 55ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate if (mBmgr == null) { 56ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 57ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return; 58ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 59ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 60ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate mArgs = args; 61ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate String op = args[0]; 62ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate mNextArg = 1; 63ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 646ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate if ("enabled".equals(op)) { 656ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate doEnabled(); 666ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate return; 676ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } 686ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate 696ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate if ("enable".equals(op)) { 706ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate doEnable(); 716ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate return; 726ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } 736ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate 74ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate if ("run".equals(op)) { 75ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate doRun(); 76ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return; 77ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 78ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 79ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate if ("backup".equals(op)) { 80ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate doBackup(); 81ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return; 82ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 83ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 84ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate if ("list".equals(op)) { 85ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate doList(); 86ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return; 87ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 88f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate 89f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate if ("restore".equals(op)) { 90f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate doRestore(); 91f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate return; 92f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 93abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate 94abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate if ("transport".equals(op)) { 95abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate doTransport(); 96abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate return; 97abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate } 98abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate 99d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate if ("wipe".equals(op)) { 100d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate doWipe(); 101d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate return; 102d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate } 103d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate 104abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate System.err.println("Unknown command"); 105abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate showUsage(); 106ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 107ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 1086ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate private String enableToString(boolean enabled) { 1096ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate return enabled ? "enabled" : "disabled"; 1106ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } 1116ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate 1126ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate private void doEnabled() { 1136ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate try { 1146ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate boolean isEnabled = mBmgr.isBackupEnabled(); 1156ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.out.println("Backup Manager currently " 1166ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate + enableToString(isEnabled)); 1176ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } catch (RemoteException e) { 1186ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println(e.toString()); 1196ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 1206ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } 1216ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } 1226ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate 1236ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate private void doEnable() { 1246ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate String arg = nextArg(); 1256ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate if (arg == null) { 1266ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate showUsage(); 1276ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate return; 1286ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } 1296ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate 1306ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate try { 1316ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate boolean enable = Boolean.parseBoolean(arg); 1326ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate mBmgr.setBackupEnabled(enable); 1336ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.out.println("Backup Manager now " + enableToString(enable)); 1346ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } catch (NumberFormatException e) { 1356ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate showUsage(); 1366ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate return; 1376ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } catch (RemoteException e) { 1386ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println(e.toString()); 1396ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 1406ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } 1416ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate } 1426ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate 143ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private void doRun() { 144ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate try { 145ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate mBmgr.backupNow(); 146ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } catch (RemoteException e) { 147ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(e.toString()); 148ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 149ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 150ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 151ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 152ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private void doBackup() { 153ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate String pkg = nextArg(); 1544a627c71ff53a4fca1f961f4b1dcc0461df18a06Christopher Tate if (pkg == null) { 155ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate showUsage(); 156ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return; 157ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 158ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 159ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate try { 160ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate mBmgr.dataChanged(pkg); 161ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } catch (RemoteException e) { 162ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(e.toString()); 163ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 164ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 165ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 166ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 167abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate private void doTransport() { 168abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate try { 1699171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate String which = nextArg(); 1707e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate if (which == null) { 1717e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate showUsage(); 1727e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate return; 1737e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate } 1747e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate 1759171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate String old = mBmgr.selectBackupTransport(which); 1769171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate if (old == null) { 1779171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.out.println("Unknown transport '" + which 1789171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate + "' specified; no changes made."); 1799171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate } else { 1809171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.out.println("Selected transport " + which + " (formerly " + old + ")"); 1819171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate } 182abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate } catch (RemoteException e) { 183abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate System.err.println(e.toString()); 184abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 185abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate } 186abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate } 187abce4e8714bed26a2b37b20ad3f02cf619d71c9aChristopher Tate 188d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate private void doWipe() { 189d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate String pkg = nextArg(); 190d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate if (pkg == null) { 191d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate showUsage(); 192d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate return; 193d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate } 194d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate 195d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate try { 196d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate mBmgr.clearBackupData(pkg); 197d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate System.out.println("Wiped backup data for " + pkg); 198d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate } catch (RemoteException e) { 199d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate System.err.println(e.toString()); 200d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 201d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate } 202d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate } 203d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate 204ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private void doList() { 205ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate String arg = nextArg(); // sets, transports, packages set# 206ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate if ("transports".equals(arg)) { 207ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate doListTransports(); 208ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return; 209ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 210ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 211ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate // The rest of the 'list' options work with a restore session on the current transport 212ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate try { 21344ab8453e1c4c46790f792a46d026fa1017d8cfeChris Tate mRestore = mBmgr.beginRestoreSession(null, null); 214f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate if (mRestore == null) { 215f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 216f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate return; 217f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 218ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 219ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate if ("sets".equals(arg)) { 220ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate doListRestoreSets(); 2219171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate } else if ("transports".equals(arg)) { 2229171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate doListTransports(); 223ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 224ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 225ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate mRestore.endRestoreSession(); 226ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } catch (RemoteException e) { 227ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(e.toString()); 228ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 229ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 230ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 231ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 232ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private void doListTransports() { 2339171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate try { 2349171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate String current = mBmgr.getCurrentTransport(); 2359171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate String[] transports = mBmgr.listAllTransports(); 2369171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate if (transports == null || transports.length == 0) { 2379171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.out.println("No transports available."); 2389171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate return; 2399171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate } 2409171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate 2419171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate for (String t : transports) { 2429171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate String pad = (t.equals(current)) ? " * " : " "; 2439171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.out.println(pad + t); 2449171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate } 2459171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate } catch (RemoteException e) { 2469171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(e.toString()); 2479171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 2489171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate } 249ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 250ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 251ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private void doListRestoreSets() { 252ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate try { 2532d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate RestoreObserver observer = new RestoreObserver(); 2542d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate int err = mRestore.getAvailableRestoreSets(observer); 2552d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate if (err != 0) { 2562d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate System.out.println("Unable to request restore sets"); 257ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } else { 2582d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate observer.waitForCompletion(); 2592d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate printRestoreSets(observer.sets); 260ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 261ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } catch (RemoteException e) { 262ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(e.toString()); 263ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(TRANSPORT_NOT_RUNNING_ERR); 264ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 265ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 266ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 267c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate private void printRestoreSets(RestoreSet[] sets) { 26804686f428995fde3f6f5f5f12ccdd135f885ac84Fabrice Di Meglio if (sets == null || sets.length == 0) { 26904686f428995fde3f6f5f5f12ccdd135f885ac84Fabrice Di Meglio System.out.println("No restore sets"); 27004686f428995fde3f6f5f5f12ccdd135f885ac84Fabrice Di Meglio return; 27104686f428995fde3f6f5f5f12ccdd135f885ac84Fabrice Di Meglio } 272c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate for (RestoreSet s : sets) { 27377095d49f203eed6a6742f2605ca319e7360af32Christian Sonntag System.out.println(" " + Long.toHexString(s.token) + " : " + s.name); 274c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate } 275c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate } 276c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate 2774a64bded06a0299785c295a975e2818308eb53e2Joe Onorato class RestoreObserver extends IRestoreObserver.Stub { 2784a64bded06a0299785c295a975e2818308eb53e2Joe Onorato boolean done; 2792d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate RestoreSet[] sets = null; 2802d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate 2812d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate public void restoreSetsAvailable(RestoreSet[] result) { 2822d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate synchronized (this) { 2832d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate sets = result; 2842d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate done = true; 2852d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate this.notify(); 2862d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate } 2872d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate } 2882d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate 2894a64bded06a0299785c295a975e2818308eb53e2Joe Onorato public void restoreStarting(int numPackages) { 2904a64bded06a0299785c295a975e2818308eb53e2Joe Onorato System.out.println("restoreStarting: " + numPackages + " packages"); 2914a64bded06a0299785c295a975e2818308eb53e2Joe Onorato } 2924a64bded06a0299785c295a975e2818308eb53e2Joe Onorato 2939c3cee9824026764275e4d84ba9b5d9fdc5da690Christopher Tate public void onUpdate(int nowBeingRestored, String currentPackage) { 2949c3cee9824026764275e4d84ba9b5d9fdc5da690Christopher Tate System.out.println("onUpdate: " + nowBeingRestored + " = " + currentPackage); 2954a64bded06a0299785c295a975e2818308eb53e2Joe Onorato } 2964a64bded06a0299785c295a975e2818308eb53e2Joe Onorato 2974a64bded06a0299785c295a975e2818308eb53e2Joe Onorato public void restoreFinished(int error) { 2984a64bded06a0299785c295a975e2818308eb53e2Joe Onorato System.out.println("restoreFinished: " + error); 2994a64bded06a0299785c295a975e2818308eb53e2Joe Onorato synchronized (this) { 3004a64bded06a0299785c295a975e2818308eb53e2Joe Onorato done = true; 3014a64bded06a0299785c295a975e2818308eb53e2Joe Onorato this.notify(); 3024a64bded06a0299785c295a975e2818308eb53e2Joe Onorato } 3034a64bded06a0299785c295a975e2818308eb53e2Joe Onorato } 3047d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate 3057d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate public void waitForCompletion() { 3067d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate // The restoreFinished() callback will throw the 'done' flag; we 3077d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate // just sit and wait on that notification. 3087d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate synchronized (this) { 3097d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate while (!this.done) { 3107d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate try { 3117d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate this.wait(); 3127d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } catch (InterruptedException ex) { 3137d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3147d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3157d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3167d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3174a64bded06a0299785c295a975e2818308eb53e2Joe Onorato } 3184a64bded06a0299785c295a975e2818308eb53e2Joe Onorato 319f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate private void doRestore() { 3207d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate String arg = nextArg(); 3217e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate if (arg == null) { 3227e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate showUsage(); 3237e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate return; 3247e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate } 3257e76ff1c409bc22e89ed09ef90161164dae40838Christopher Tate 3267d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate if (arg.indexOf('.') >= 0) { 3277d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate // it's a package name 3287d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate doRestorePackage(arg); 3297d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } else { 3307d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate try { 331485c3a16cef38136a821e79a5fe37df4e1779d28Christian Sonntag long token = Long.parseLong(arg, 16); 3327d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate doRestoreAll(token); 3337d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } catch (NumberFormatException e) { 3347d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate showUsage(); 3357d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate return; 3367d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3377d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3387d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate 3397d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.out.println("done"); 3407d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3417d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate 3427d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate private void doRestorePackage(String pkg) { 343f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate try { 34444ab8453e1c4c46790f792a46d026fa1017d8cfeChris Tate mRestore = mBmgr.beginRestoreSession(pkg, null); 3457d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate if (mRestore == null) { 3467d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 3477d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate return; 3487d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3497d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate 3507d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate RestoreObserver observer = new RestoreObserver(); 3517d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate int err = mRestore.restorePackage(pkg, observer); 3527d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate if (err == 0) { 3537d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate // Off and running -- wait for the restore to complete 3547d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate observer.waitForCompletion(); 3557d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } else { 3567d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println("Unable to restore package " + pkg); 3577d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 3587d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate 3597d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate // And finally shut down the session 3607d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate mRestore.endRestoreSession(); 3617d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } catch (RemoteException e) { 3627d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println(e.toString()); 3637d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 364f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 3657d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate } 366f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate 3677d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate private void doRestoreAll(long token) { 3684a64bded06a0299785c295a975e2818308eb53e2Joe Onorato RestoreObserver observer = new RestoreObserver(); 3694a64bded06a0299785c295a975e2818308eb53e2Joe Onorato 370f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate try { 371c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate boolean didRestore = false; 37244ab8453e1c4c46790f792a46d026fa1017d8cfeChris Tate mRestore = mBmgr.beginRestoreSession(null, null); 373f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate if (mRestore == null) { 374f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 375f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate return; 376f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 3772d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate RestoreSet[] sets = null; 3782d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate int err = mRestore.getAvailableRestoreSets(observer); 3791398e27bb0f5768cbbd5b9d9fd7c8675da63ccb0Christopher Tate if (err == 0) { 3802d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate observer.waitForCompletion(); 3812d449afe3d075020bdd1115bcc15c9383cbce122Christopher Tate sets = observer.sets; 3827a0fc8776782a18374ec6e3b4418027c3c685b1aChris Tate if (sets != null) { 3837a0fc8776782a18374ec6e3b4418027c3c685b1aChris Tate for (RestoreSet s : sets) { 3847a0fc8776782a18374ec6e3b4418027c3c685b1aChris Tate if (s.token == token) { 3857a0fc8776782a18374ec6e3b4418027c3c685b1aChris Tate System.out.println("Scheduling restore: " + s.name); 3867a0fc8776782a18374ec6e3b4418027c3c685b1aChris Tate didRestore = (mRestore.restoreAll(token, observer) == 0); 3877a0fc8776782a18374ec6e3b4418027c3c685b1aChris Tate break; 3887a0fc8776782a18374ec6e3b4418027c3c685b1aChris Tate } 38984780f56f441deb4ff736987986daeaf64db17a4Christopher Tate } 390f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 391f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 392c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate if (!didRestore) { 393c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate if (sets == null || sets.length == 0) { 394c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate System.out.println("No available restore sets; no restore performed"); 395c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate } else { 396c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate System.out.println("No matching restore set token. Available sets:"); 397c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate printRestoreSets(sets); 398c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate } 399c73a218c2663e6ae3ec8a9ab8b9524f95702ade9Christopher Tate } 40008e40b858e8a3266c5519a83fda6f7505f1c14dbChristopher Tate 4010e0b4ae5bc5c652c8339d71ed9667e1e37baaa03Christopher Tate // if we kicked off a restore successfully, we have to wait for it 4020e0b4ae5bc5c652c8339d71ed9667e1e37baaa03Christopher Tate // to complete before we can shut down the restore session safely 4030e0b4ae5bc5c652c8339d71ed9667e1e37baaa03Christopher Tate if (didRestore) { 4047d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate observer.waitForCompletion(); 40508e40b858e8a3266c5519a83fda6f7505f1c14dbChristopher Tate } 40608e40b858e8a3266c5519a83fda6f7505f1c14dbChristopher Tate 40708e40b858e8a3266c5519a83fda6f7505f1c14dbChristopher Tate // once the restore has finished, close down the session and we're done 408f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate mRestore.endRestoreSession(); 409f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } catch (RemoteException e) { 410f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate System.err.println(e.toString()); 411f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate System.err.println(BMGR_NOT_RUNNING_ERR); 412f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 413f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate } 414f68eb500f99361541049e09eb7f9ddd6f4ef4efaChristopher Tate 415ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private String nextArg() { 416ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate if (mNextArg >= mArgs.length) { 417ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return null; 418ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 419ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate String arg = mArgs[mNextArg]; 420ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate mNextArg++; 421ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate return arg; 422ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 423ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate 424ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate private static void showUsage() { 425ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println("usage: bmgr [backup|restore|list|transport|run]"); 4269171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(" bmgr backup PACKAGE"); 4276ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println(" bmgr enable BOOL"); 4286ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println(" bmgr enabled"); 4299171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(" bmgr list transports"); 430ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(" bmgr list sets"); 4319171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(" bmgr transport WHICH"); 4329171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(" bmgr restore TOKEN"); 4337d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println(" bmgr restore PACKAGE"); 434ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate System.err.println(" bmgr run"); 435d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate System.err.println(" bmgr wipe PACKAGE"); 4369171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(""); 4379171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("The 'backup' command schedules a backup pass for the named package."); 4389171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("Note that the backup pass will effectively be a no-op if the package"); 4399171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("does not actually have changed data to store."); 4409171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(""); 4416ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println("The 'enable' command enables or disables the entire backup mechanism."); 4426ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println("If the argument is 'true' it will be enabled, otherwise it will be"); 4436ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println("disabled. When disabled, neither backup or restore operations will"); 4446ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println("be performed."); 4456ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println(""); 4466ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println("The 'enabled' command reports the current enabled/disabled state of"); 4476ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println("the backup mechanism."); 4486ef58a1509b9d3348a33ca5686917796c2759aa5Christopher Tate System.err.println(""); 4499171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("The 'list transports' command reports the names of the backup transports"); 4509171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("currently available on the device. These names can be passed as arguments"); 4519171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("to the 'transport' command. The currently selected transport is indicated"); 4529171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("with a '*' character."); 4539171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(""); 4549171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("The 'list sets' command reports the token and name of each restore set"); 4559171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("available to the device via the current transport."); 4569171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(""); 4579171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("The 'transport' command designates the named transport as the currently"); 4589171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("active one. This setting is persistent across reboots."); 4599171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(""); 4607d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println("The 'restore' command when given a restore token initiates a full-system"); 4617d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println("restore operation from the currently active transport. It will deliver"); 4627d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println("the restore set designated by the TOKEN argument to each application"); 4637d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println("that had contributed data to that restore set."); 4647d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println(""); 4657d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println("The 'restore' command when given a package name intiates a restore of"); 4667d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println("just that one package according to the restore set selection algorithm"); 4677d411a3b947ba82d1d57f73c0fa698c3b9c95892Christopher Tate System.err.println("used by the RestoreSession.restorePackage() method."); 4689171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println(""); 4699171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("The 'run' command causes any scheduled backup operation to be initiated"); 4709171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("immediately, without the usual waiting period for batching together"); 4719171749700853305f3e6abbcdbd9e02f3a71d459Christopher Tate System.err.println("data changes."); 472d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate System.err.println(""); 473d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate System.err.println("The 'wipe' command causes all backed-up data for the given package to be"); 474d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate System.err.println("erased from the current transport's storage. The next backup operation"); 475d23d7f2d12c20314e1e8ff206fafc8f21745ca2dChristopher Tate System.err.println("that the given application performs will rewrite its entire data set."); 476ace7f094bf07bbd90cb998b9462e4f2d101a498cChristopher Tate } 4775e8a4b842c20dd47b82e9915f1bd730ee1b0d46dJoe Onorato} 478