1cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard/*
2cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * Copyright (C) 2011 The Android Open Source Project
3cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard *
48aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License");
58aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * you may not use this file except in compliance with the License.
68aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * You may obtain a copy of the License at
7cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard *
88aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka *      http://www.apache.org/licenses/LICENSE-2.0
9cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard *
10cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * Unless required by applicable law or agreed to in writing, software
118aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS,
128aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * See the License for the specific language governing permissions and
148aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * limitations under the License.
15cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard */
16cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard
17cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalardpackage com.android.inputmethod.latin;
18cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard
195b91b551e5ffaf2c2e691dfbd434f21c82293986Jean Chalardimport com.android.inputmethod.latin.common.FileUtils;
202fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
21cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalardimport java.io.File;
22cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard
23cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard/**
24cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * Immutable class to hold the address of an asset.
25cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * As opposed to a normal file, an asset is usually represented as a contiguous byte array in
26cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * the package file. Open it correctly thus requires the name of the package it is in, but
27cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * also the offset in the file and the length of this data. This class encapsulates these three.
28cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard */
291562fc91f015616f900b82bb44e6f1493be92c5aJean Chalardpublic final class AssetFileAddress {
30cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    public final String mFilename;
31cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    public final long mOffset;
32cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    public final long mLength;
33cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard
34cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    public AssetFileAddress(final String filename, final long offset, final long length) {
35cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard        mFilename = filename;
36cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard        mOffset = offset;
37cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard        mLength = length;
38cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    }
39cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard
40d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard    public static AssetFileAddress makeFromFile(final File file) {
41d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard        if (!file.isFile()) return null;
42d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard        return new AssetFileAddress(file.getAbsolutePath(), 0L, file.length());
43d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard    }
44d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard
45cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    public static AssetFileAddress makeFromFileName(final String filename) {
46cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard        if (null == filename) return null;
47d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard        return makeFromFile(new File(filename));
48cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    }
49cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard
50cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    public static AssetFileAddress makeFromFileNameAndOffset(final String filename,
51cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard            final long offset, final long length) {
52cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard        if (null == filename) return null;
53ab72a97d7ce44230a0c824797d1675a5ca354a56Tadashi G. Takaoka        final File f = new File(filename);
54ab72a97d7ce44230a0c824797d1675a5ca354a56Tadashi G. Takaoka        if (!f.isFile()) return null;
55cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard        return new AssetFileAddress(filename, offset, length);
56cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard    }
572fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
582fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    public boolean pointsToPhysicalFile() {
592fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa        return 0 == mOffset;
602fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    }
612fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
622fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    public void deleteUnderlyingFile() {
632fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa        FileUtils.deleteRecursively(new File(mFilename));
642fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    }
6591a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu
6691a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu    @Override
6791a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu    public String toString() {
6891a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu        return String.format("%s (offset=%d, length=%d)", mFilename, mOffset, mLength);
6991a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu    }
70cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard}
71