Android Open Source - dissertation-project Upload Connectable






From Project

Back to project page dissertation-project.

License

The source code is released under:

MIT License

If you think the Android project dissertation-project 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.fyp.resilience.connection;
/*from w  w  w.  j ava  2 s  .c om*/
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import android.content.Context;

import com.fyp.resilience.database.model.DataPiece;
import com.fyp.resilience.database.model.DataWhole;
import com.fyp.resilience.stream.PiecedRandomAccessFile;
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;

public abstract class UploadConnectable extends Connectable {

    protected final DataPiece mDataPiece;
    protected final PiecedRandomAccessFile mFile;

    protected final long mPieceSize;
    private final long mStartByte;

    /**
     * @param dataPiece
     * @param file
     * @param service
     * @throws IOException
     */
    public UploadConnectable(final Context context, final DataWhole dataWhole, final DataPiece dataPiece, final File file)
            throws FileNotFoundException, IOException, NullPointerException {

        super(context, dataWhole);

        if (null == dataPiece) {
            throw new NullPointerException("DataPiece cannot be NULL");
        }

        if (null == file) {
            throw new NullPointerException("File cannot be NULL");
        }

        mDataPiece = dataPiece;
        long standardSize = dataWhole.getPieces().get(0).getSize();

        /* If the DataPiece has a URI then it is a foreign piece */
        if (mDataWhole.isOwned()) {

            if (mDataPiece.getPieceNo() > 1) {
                mStartByte = ((mDataPiece.getPieceNo() - 1) * standardSize);
            } else {
                mStartByte = 0;
            }

        } else {

            mStartByte = 0;

        }

        mPieceSize = mDataPiece.getSize();
        mFile = new PiecedRandomAccessFile(mStartByte, mPieceSize, file);
        mConnectionStatus = STATUS_WAITING;
    }

    @Override
    public void run() {

        /* Check if the hash has failed. Return if it has */
        if (!performHashIfRequired()) {
            mConnectionStatus = STATUS_HASH_ERROR;
            notifyOfCompletion();
            return;
        }

        mConnectionStatus = STATUS_IN_PROGRESS;
        notifyOfStateChange();
        
        mConnectionStatus = runTask();
        runPostTask();

        notifyOfCompletion();
    }

    private boolean performHashIfRequired() {

        String pieceHash = mDataPiece.getHash();

        if (null != pieceHash) {
            return true;
        }

        mConnectionStatus = STATUS_HASHING;
        notifyOfStateChange();

        final Hasher md5Hasher = Hashing.md5().newHasher();
        try {

            int length;
            final byte[] buffer = new byte[4096];
            while ((length = mFile.read(buffer)) != -1) {
                md5Hasher.putBytes(buffer, 0, length);
            }

            pieceHash = md5Hasher.hash().toString();
            mDataPiece.setHash(pieceHash);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != mFile) {
                    mFile.resetToStart();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null == pieceHash ? false : true;
    }

    /**
     * Abstract method enforced by the Runnable interface
     */
    @Override
    protected abstract int runTask();

    @Override
    protected abstract void runPostTask();

    protected abstract void notifyOfCompletion();

    public DataPiece getDataPiece() {
        return mDataPiece;
    }
}




Java Source Code List

com.fyp.resilience.Constants.java
com.fyp.resilience.Flags.java
com.fyp.resilience.GCMIntentService.java
com.fyp.resilience.PreferenceConstants.java
com.fyp.resilience.ResilienceApplication.java
com.fyp.resilience.ResilienceController.java
com.fyp.resilience.activity.LicenceActivity.java
com.fyp.resilience.activity.ResilienceActivity.java
com.fyp.resilience.activity.SettingsActivity.java
com.fyp.resilience.adapter.ClientListAdapter.java
com.fyp.resilience.adapter.ConnectionListAdapter.java
com.fyp.resilience.adapter.FileListAdapter.java
com.fyp.resilience.connection.Connectable.java
com.fyp.resilience.connection.ServerDownloadConnectable.java
com.fyp.resilience.connection.ServerUploadConnectable.java
com.fyp.resilience.connection.UploadConnectable.java
com.fyp.resilience.connection.WifiDownloadConnectable.java
com.fyp.resilience.connection.WifiUploadConnectable.java
com.fyp.resilience.database.ResilienceDbHelper.java
com.fyp.resilience.database.ResilienceDbManager.java
com.fyp.resilience.database.model.DataPiece.java
com.fyp.resilience.database.model.DataWhole.java
com.fyp.resilience.event.ClientListChanged.java
com.fyp.resilience.event.ClientModified.java
com.fyp.resilience.event.ConnectionProgressChange.java
com.fyp.resilience.event.ConnectionStateChange.java
com.fyp.resilience.event.ConnectionsModified.java
com.fyp.resilience.event.PieceStateChange.java
com.fyp.resilience.event.ServerRegistrationChanged.java
com.fyp.resilience.event.ServerUploadFinished.java
com.fyp.resilience.event.WholeModified.java
com.fyp.resilience.event.WifiDownloadFinished.java
com.fyp.resilience.event.WifiUploadFinished.java
com.fyp.resilience.fragment.ClientsFragment.java
com.fyp.resilience.fragment.ConnectionsFragment.java
com.fyp.resilience.fragment.FilesFragment.java
com.fyp.resilience.interfaces.Messagable.java
com.fyp.resilience.interfaces.Partialable.java
com.fyp.resilience.proto.ProtoBuffSpecification.java
com.fyp.resilience.receiver.AbstractConnectivityBroadcastReceiver.java
com.fyp.resilience.receiver.BootReceiver.java
com.fyp.resilience.receiver.ConnectivityBroadcastReceiver.java
com.fyp.resilience.receiver.WiFiDirectBroadcastReceiver.java
com.fyp.resilience.register.RegisterRequestInitializer.java
com.fyp.resilience.register.RegisterRequest.java
com.fyp.resilience.register.RegisterScopes.java
com.fyp.resilience.register.Register.java
com.fyp.resilience.register.model.DeviceInfo.java
com.fyp.resilience.service.PieceUploadService.java
com.fyp.resilience.stream.PiecedRandomAccessFile.java
com.fyp.resilience.swarm.helper.NsdHelper.java
com.fyp.resilience.swarm.helper.SwarmHelperInterface.java
com.fyp.resilience.swarm.helper.WifiDirectSdHelper.java
com.fyp.resilience.swarm.model.SwarmClient.java
com.fyp.resilience.thread.ResilienceRunnable.java
com.fyp.resilience.thread.ResilienceThreadFactory.java
com.fyp.resilience.util.ConnectionUtils.java
com.fyp.resilience.util.Utils.java
com.fyp.resilience.view.ClientView.java
com.fyp.resilience.view.ConnectionView.java
com.fyp.resilience.view.FileView.java
com.fyp.resilience.view.PieceProgressIndicator.java
com.fyp.resilience.widerst.WiderstRequestInitializer.java
com.fyp.resilience.widerst.WiderstRequest.java
com.fyp.resilience.widerst.WiderstScopes.java
com.fyp.resilience.widerst.Widerst.java
com.fyp.resilience.widerst.model.DataPiecePartial.java
com.fyp.resilience.widerst.model.DataWholePartial.java
com.fyp.resilience.widerst.model.PostResponse.java
com.fyp.widerst.Constants.java
com.fyp.widerst.WiderstObjectifyService.java
com.fyp.widerst.backend.FileJoinerBackend.java
com.fyp.widerst.cron.CronJobServlet.java
com.fyp.widerst.endpoint.DataPieceEndpoint.java
com.fyp.widerst.endpoint.DeviceInfoEndpoint.java
com.fyp.widerst.entity.DataPiece.java
com.fyp.widerst.entity.DataWhole.java
com.fyp.widerst.entity.DeviceInfo.java
com.fyp.widerst.handler.BlobstoreUploadHandler.java
com.fyp.widerst.partial.DataPiecePartial.java
com.fyp.widerst.partial.DataWholePartial.java
com.fyp.widerst.response.PostResponse.java
com.fyp.widerst.servlet.WholeFileServer.java
com.fyp.widerst.util.DbHelper.java
com.fyp.widerst.util.GcmHelper.java