content: /*
   * Copyright (C) 2017 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License
   */
  
  package com.android.server.backup;
  
  import static com.android.server.backup.BackupManagerService.TAG;
  
  import android.app.backup.BackupAgent;
  import android.util.Slog;
  
  import java.text.SimpleDateFormat;
  import java.util.Date;
  
  /**
   * Description of a file in the restore datastream.
   */
  public class FileMetadata {
      public String packageName;             // name of the owning app
      public String installerPackageName;    // name of the market-type app that installed the owner
      public int type;                       // e.g. BackupAgent.TYPE_DIRECTORY
      public String domain;                  // e.g. FullBackup.DATABASE_TREE_TOKEN
      public String path;                    // subpath within the semantic domain
      public long mode;                      // e.g. 0666 (actually int)
      public long mtime;                     // last mod time, UTC time_t (actually int)
      public long size;                      // bytes of content
      public long version;                   // App version.
      public boolean hasApk;                 // Whether backup file contains apk.
  
      @Override
      public String toString() {
          // TODO: Clean this up.
          StringBuilder sb = new StringBuilder(128);
          sb.append("FileMetadata{");
          sb.append(packageName);
          sb.append(',');
          sb.append(type);
          sb.append(',');
          sb.append(domain);
          sb.append(':');
          sb.append(path);
          sb.append(',');
          sb.append(size);
          sb.append('}');
          return sb.toString();
      }
  
      public void dump() {
          StringBuilder b = new StringBuilder(128);
  
          // mode string
          b.append((type == BackupAgent.TYPE_DIRECTORY) ? 'd' : '-');
          b.append(((mode & 0400) != 0) ? 'r' : '-');
          b.append(((mode & 0200) != 0) ? 'w' : '-');
          b.append(((mode & 0100) != 0) ? 'x' : '-');
          b.append(((mode & 0040) != 0) ? 'r' : '-');
          b.append(((mode & 0020) != 0) ? 'w' : '-');
          b.append(((mode & 0010) != 0) ? 'x' : '-');
          b.append(((mode & 0004) != 0) ? 'r' : '-');
          b.append(((mode & 0002) != 0) ? 'w' : '-');
          b.append(((mode & 0001) != 0) ? 'x' : '-');
          b.append(String.format(" %9d ", size));
  
          Date stamp = new Date(mtime);
          b.append(new SimpleDateFormat("MMM dd HH:mm:ss ").format(stamp));
  
          b.append(packageName);
          b.append(" :: ");
          b.append(domain);
          b.append(" :: ");
          b.append(path);
  
          Slog.i(TAG, b.toString());
      }
  
  }
  