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;
/*fromwww.java2s.com*/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;
publicabstractclass UploadConnectable extends Connectable {
protectedfinal DataPiece mDataPiece;
protectedfinal PiecedRandomAccessFile mFile;
protectedfinallong mPieceSize;
privatefinallong mStartByte;
/**
* @param dataPiece
* @param file
* @param service
* @throws IOException
*/public UploadConnectable(final Context context, final DataWhole dataWhole, final DataPiece dataPiece, finalFile file)
throws FileNotFoundException, IOException, NullPointerException {
super(context, dataWhole);
if (null == dataPiece) {
thrownew NullPointerException("DataPiece cannot be NULL");
}
if (null == file) {
thrownew 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
publicvoid 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();
}
privateboolean performHashIfRequired() {
String pieceHash = mDataPiece.getHash();
if (null != pieceHash) {
return true;
}
mConnectionStatus = STATUS_HASHING;
notifyOfStateChange();
final Hasher md5Hasher = Hashing.md5().newHasher();
try {
int length;
finalbyte[] buffer = newbyte[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
protectedabstractint runTask();
@Override
protectedabstractvoid runPostTask();
protectedabstractvoid notifyOfCompletion();
public DataPiece getDataPiece() {
return mDataPiece;
}
}