10cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard/*
20cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Copyright (C) 2011 The Android Open Source Project
30cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
40cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Licensed under the Apache License, Version 2.0 (the "License"); you may not
50cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * use this file except in compliance with the License. You may obtain a copy of
60cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the License at
70cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
80cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * http://www.apache.org/licenses/LICENSE-2.0
90cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
100cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Unless required by applicable law or agreed to in writing, software
110cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
120cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
130cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * License for the specific language governing permissions and limitations under
140cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the License.
150cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard */
160cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
170cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardpackage com.android.inputmethod.dictionarypack;
180cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
190cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport java.io.File;
200cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
210cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard/**
220cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Immutable class to hold the address of an asset.
230cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * As opposed to a normal file, an asset is usually represented as a contiguous byte array in
240cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the package file. Open it correctly thus requires the name of the package it is in, but
250cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * also the offset in the file and the length of this data. This class encapsulates these three.
260cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard */
270cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardfinal class AssetFileAddress {
280cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final String mFilename;
290cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final long mOffset;
300cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public final long mLength;
310cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
320cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public AssetFileAddress(final String filename, final long offset, final long length) {
330cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mFilename = filename;
340cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mOffset = offset;
350cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        mLength = length;
360cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
370cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
380cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    /**
390cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * Makes an AssetFileAddress. This may return null.
400cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     *
410cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * @param filename the filename.
420cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * @return the address, or null if the file does not exist or the parameters are not valid.
430cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     */
440cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public static AssetFileAddress makeFromFileName(final String filename) {
450cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        if (null == filename) return null;
460cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final File f = new File(filename);
470cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        if (!f.isFile()) return null;
480cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        return new AssetFileAddress(filename, 0l, f.length());
490cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
500cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
510cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    /**
520cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * Makes an AssetFileAddress. This may return null.
530cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     *
540cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * @param filename the filename.
550cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * @param offset the offset.
560cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * @param length the length.
570cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     * @return the address, or null if the file does not exist or the parameters are not valid.
580cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard     */
590cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public static AssetFileAddress makeFromFileNameAndOffset(final String filename,
600cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            final long offset, final long length) {
610cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        if (null == filename) return null;
620cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final File f = new File(filename);
630cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        if (!f.isFile()) return null;
640cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        return new AssetFileAddress(filename, offset, length);
650cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
660cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard}
67