Android Open Source - dissertation-project Data Piece Endpoint






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.widerst.endpoint;
//w w w.  j  a  va 2s  . co m
import static com.fyp.widerst.WiderstObjectifyService.ofy;

import java.util.logging.Level;
import java.util.logging.Logger;

import com.fyp.widerst.Constants;
import com.fyp.widerst.entity.DataPiece;
import com.fyp.widerst.entity.DataWhole;
import com.fyp.widerst.entity.DeviceInfo;
import com.fyp.widerst.partial.DataPiecePartial;
import com.fyp.widerst.partial.DataWholePartial;
import com.fyp.widerst.response.PostResponse;
import com.fyp.widerst.util.DbHelper;
import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.config.ApiMethod.HttpMethod;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.Work;

/**
 * @author Liam Costello
 */
@Api(name = "widerst", description = "Endpoint for DataPieces to be posted")
public class DataPieceEndpoint {

    private static final Logger logger = Logger.getLogger(DataPieceEndpoint.class.getName());

    /**
     * This receives a {@link DataPiecePartial} which is then translated into a
     * DataPiece Entity. The method checks to see if a key was provided, if so
     * then it assigns the {@link DataPiece} to the correct {@link DataWhole}.
     * If not, then it creates a new {@link DataWhole} to which the
     * {@link DataPiece} is assigned.
     * 
     * @param a {@link DataPiecePartial} that contains a
     *            {@link DataWholePartial}
     * @return {@link PostResponse}
     */
    @ApiMethod(name = "pieces.insert", httpMethod = HttpMethod.POST, path = "pieces")
    public PostResponse insertDataPiece(final DataPiecePartial dataPiecePartial) {
        BlobstoreService blobStore = BlobstoreServiceFactory
                .getBlobstoreService();

        final String stringKey = dataPiecePartial.getWholeParent().getKey();

        final Long deviceId;
        try {
            deviceId = Long.parseLong(dataPiecePartial.getDeviceId());
        } catch (NumberFormatException nmf) {
            return new PostResponse(PostResponse.STATUS_FAILED);
        }

        /*
         * If the stringKey is NOT null then we must query the Datastore for its
         * existence
         */

        logger.log(Level.INFO, "Retry is: " + dataPiecePartial.isRetry());

        if (!dataPiecePartial.isRetry()) {

            Integer dpTransaction = null;
            if (null != stringKey) {

                dpTransaction = ofy().transact(new Work<Integer>() {
                    @Override
                    public Integer run() {

                        Key<DeviceInfo> deviceKey = null;
                        if (null == deviceId) {
                            return PostResponse.STATUS_REGISTRATION_ERROR;
                        } else {
                            deviceKey = Key.create(DeviceInfo.class, deviceId);
                            DeviceInfo deviceInfo = ofy().load().key(deviceKey).get();
                            if (null == deviceInfo) {
                                return PostResponse.STATUS_REGISTRATION_ERROR;
                            }
                        }

                        DataPiece dataPiece;
                        DataWhole dataWhole = DbHelper.findDataWholeByKey(stringKey);

                        if (null == dataWhole) {
                            dataWhole = new DataWhole(dataPiecePartial.getWholeParent());
                            dataPiece = new DataPiece(Key.create(dataWhole), dataPiecePartial);
                            dataWhole.getDataPieceKeyList().add(Key.create(dataPiece));
                            dataWhole.getDeviceInfoKeyList().add(deviceKey);
                        } else {
                            /* Piece belongs to a known DataWhole */

                            if (null != dataWhole.getBlobKey()) {
                                /*
                                 * Check to see if the server has already
                                 * received all required pieces
                                 */
                                logger.log(Level.INFO, "DataWhole " + dataWhole.getKey()
                                        + " is already complete.");
                                return PostResponse.STATUS_WHOLE_COMPLETE;
                            }

                            Key<DataPiece> dpKey = Key.create(Key.create(dataWhole),
                                    DataPiece.class, dataPiecePartial.getKey());
                            
                            if (dataWhole.getDataPieceKeyList().contains(dpKey)) {
                                return PostResponse.STATUS_NOT_REQUIRED;
                            }

                            dataPiece = new DataPiece(Key.create(dataWhole), dataPiecePartial);
                            dataWhole.getDataPieceKeyList().add(Key.create(dataPiece));
                            dataWhole.getDeviceInfoKeyList().add(deviceKey);

                        }

                        ofy().save().entities(dataPiece, dataWhole).now();
                        return PostResponse.STATUS_SUCCESS;
                    }
                });

            }

            PostResponse response;
            if (dpTransaction == PostResponse.STATUS_SUCCESS) {
                response = new PostResponse(blobStore.createUploadUrl(Constants.POSTBACK_URL),
                        dpTransaction);
            } else {
                response = new PostResponse(dpTransaction);
            }

            return response;
        }

        /* This piece is a retry and we must allow an upload to take place */
        return new PostResponse(blobStore.createUploadUrl(Constants.POSTBACK_URL),
                PostResponse.STATUS_SUCCESS);

    }
}




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