Android Open Source - vocabulary-list File Getter Impl






From Project

Back to project page vocabulary-list.

License

The source code is released under:

Apache License

If you think the Android project vocabulary-list listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.rulych.vocabularylist.model.persistence.impl;
//from w  ww  .  j  ava  2  s.co m
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.drive.Drive;
import com.google.android.gms.drive.DriveApi;
import com.google.android.gms.drive.DriveFile;
import com.google.android.gms.drive.DriveFolder;
import com.google.android.gms.drive.Metadata;
import com.google.android.gms.drive.MetadataChangeSet;
import com.google.android.gms.drive.query.Filters;
import com.google.android.gms.drive.query.Query;
import com.google.android.gms.drive.query.SearchableField;

import com.rulych.vocabularylist.model.persistence.impl.exception.CouldNotGetFileException;

import java.util.Iterator;
import java.util.Locale;

import rx.Observable;
import rx.functions.Func0;
import rx.schedulers.Schedulers;
import rx.util.async.Async;
import timber.log.Timber;

public class FileGetterImpl implements FileGetter {

    private static final String FILE_MIME = "application/json";

    private GoogleApiClient mApiClient;

    public FileGetterImpl(GoogleApiClient apiClient) {
        mApiClient = apiClient;
    }

    @Override public Observable<DriveFile> getFileFor(Locale locale) {
        String language = locale.getLanguage();
        return Async.start(new GetFileFunc(language), Schedulers.io());
    }

    private DriveFolder getFolder() {
        return Drive.DriveApi.getAppFolder(mApiClient);
    }

    private class GetFileFunc implements Func0<DriveFile> {
        private String mFileTitle;

        private GetFileFunc(String fileTitle) {
            mFileTitle = fileTitle;
        }

        @Override public DriveFile call() {
            try {
                return getExistingFile();
            } catch (Exception e) {
                Timber.i("File %s not found. Will create it.", mFileTitle);
                return createNewFile();
            }
        }

        private DriveFile getExistingFile() {
            Query query = new Query.Builder()
                    .addFilter(Filters.eq(SearchableField.TITLE, mFileTitle))
                    .build();

            Timber.d("Will look for file with title '%s'.", mFileTitle);
            DriveApi.MetadataBufferResult result =
                    getFolder().queryChildren(mApiClient, query).await();

            if (!result.getStatus().isSuccess()) {
                throw new CouldNotGetFileException("Couldn't query for file: (%d) %s",
                        result.getStatus().getStatusCode(),
                        result.getStatus().getStatusMessage());
            }

            Iterator<Metadata> metadataIterator = result.getMetadataBuffer().iterator();
            if (!metadataIterator.hasNext()) {
                result.getMetadataBuffer().close();
                throw new CouldNotGetFileException("File %s does not exist.", mFileTitle);
            }

            Metadata metadata = metadataIterator.next();
            DriveFile file = Drive.DriveApi.getFile(mApiClient, metadata.getDriveId());

            result.getMetadataBuffer().close();
            return file;
        }

        private DriveFile createNewFile() {
            DriveApi.ContentsResult result = Drive.DriveApi.newContents(mApiClient).await();
            if (!result.getStatus().isSuccess()) {
                throw new CouldNotGetFileException(
                        "Error while trying to create new file contents: (%d) %s",
                        result.getStatus().getStatusCode(),
                        result.getStatus().getStatusMessage());
            }

            MetadataChangeSet changeSet = new MetadataChangeSet.Builder().setTitle(mFileTitle)
                    .setMimeType(FILE_MIME)
                    .setPinned(true)
                    .build();

            DriveFolder.DriveFileResult fileResult = getFolder().createFile(mApiClient,
                    changeSet,
                    result.getContents()).await();
            if (!fileResult.getStatus().isSuccess()) {
                throw new CouldNotGetFileException("Error while trying to create the file: (%d) %s",
                        fileResult.getStatus().getStatusCode(),
                        fileResult.getStatus().getStatusMessage());
            }

            DriveFile driveFile = fileResult.getDriveFile();
            Timber.i("Created a file with ID: %s", driveFile.getDriveId().encodeToString());

            return driveFile;
        }
    }

}




Java Source Code List

com.rulych.vocabularylist.AppModule.java
com.rulych.vocabularylist.VocabularyListApplication.java
com.rulych.vocabularylist.activities.VocabularyListActivity.java
com.rulych.vocabularylist.adapters.CardAdapter.java
com.rulych.vocabularylist.fragments.BaseCardFragment.java
com.rulych.vocabularylist.fragments.CardFragment.java
com.rulych.vocabularylist.fragments.DriveApiFragment.java
com.rulych.vocabularylist.fragments.NewCardFragment.java
com.rulych.vocabularylist.fragments.VocabularyListFragment.java
com.rulych.vocabularylist.model.Card.java
com.rulych.vocabularylist.model.comparation.CardComparator.java
com.rulych.vocabularylist.model.persistence.CardDAO.java
com.rulych.vocabularylist.model.persistence.PersistenceModule.java
com.rulych.vocabularylist.model.persistence.impl.CardDAOImpl.java
com.rulych.vocabularylist.model.persistence.impl.CardListReaderImpl.java
com.rulych.vocabularylist.model.persistence.impl.CardListReader.java
com.rulych.vocabularylist.model.persistence.impl.CardListWriterImpl.java
com.rulych.vocabularylist.model.persistence.impl.CardListWriter.java
com.rulych.vocabularylist.model.persistence.impl.FileGetterImpl.java
com.rulych.vocabularylist.model.persistence.impl.FileGetter.java
com.rulych.vocabularylist.model.persistence.impl.exception.CardNotFoundException.java
com.rulych.vocabularylist.model.persistence.impl.exception.CouldNotGetFileException.java
com.rulych.vocabularylist.model.persistence.impl.exception.CouldNotReadFileException.java
com.rulych.vocabularylist.model.persistence.impl.exception.CouldNotWriteFileException.java
com.rulych.vocabularylist.util.BaseRuntimeException.java
com.rulych.vocabularylist.util.FloatingActionButtonAnimator.java
com.rulych.vocabularylist.util.ThreadLoggingTree.java
com.rulych.vocabularylist.util.UtilModule.java
com.rulych.vocabularylist.util.impl.FloatingActionButtonAnimatorImpl.java