Android Open Source - Look Look Service






From Project

Back to project page Look.

License

The source code is released under:

====================== LOOK! LICENSING TERMS ====================== look! is licensed under the BSD 3-Clause (also known as "BSD New" or "BSD Simplified"), as follows: Copyright (c) 2010-2012, Look...

If you think the Android project Look 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

/**
*-----------------------------------------------------------------------------
* Copyright (c) 2012, Look! Development Team
* All rights reserved.//from  w w  w .ja v  a 2s . co m
*
* Distributed under the terms of the BSD Simplified License.
*
* The full license is in the LICENSE file, distributed with this software.
*-----------------------------------------------------------------------------
*/
package es.ucm.look.data.remote.restful;

import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;
import es.ucm.look.data.EntityData;
import es.ucm.look.data.local.contentprovider.LookContentProvider;
import es.ucm.look.data.remote.ConfigNet;
import es.ucm.look.data.remote.LookProperties;

/**
 * Service of Look!, implements an service Android with the logic to process data from Remote Service
 * 
 * @author Sergio
 *
 */
public class LookService extends Service {

  final RemoteCallbackList<IRemoteServiceCallback> mCallbacks = new RemoteCallbackList<IRemoteServiceCallback>();

  /**
   * The service is started
   */
  @Override
  public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
  }

  @Override
  public IBinder onBind(Intent intent) {
    return binder;
  }

  /**
   * The service is created
   */
  @Override
  public void onCreate() {
    super.onCreate();
  }
  
  /**
   * The service is destroy
   */
  @Override
  public void onDestroy() {
    super.onDestroy();
    mCallbacks.kill();
  }

  /**
   * Implements the methods of service, view {@link RemoteDataHandler}
   */
  private final RemoteDataHandler.Stub binder = new RemoteDataHandler.Stub() {
    // implements setter methods, view RemoteDataHandler.aidl
    public void doLogin(String username, String password) {

      int id = -1;

      Message msg = new Message();
      Bundle data = new Bundle();

      String userQuery = "SELECT e FROM Properties e WHERE e.propertiesPK.property = 'user' AND e.value = '"
          + username + "'";

      JSONObject response = RestMethod.doGet(ConfigNet.getInstance()
          .getURL("propertiess/?max=1&query="
              + URLEncoder.encode(userQuery)));

      try {
        id = response.getJSONObject("properties")
            .getJSONObject("propertiesPK").getInt("id");
      } catch (JSONException e) {
        e.printStackTrace();
      }

      if (id != -1) {
        String passQuery = "SELECT e FROM Properties e WHERE e.propertiesPK.property = 'password' AND e.propertiesPK.id = '"
            + id + "'";

        response = RestMethod.doGet(ConfigNet.getInstance()
            .getURL("propertiess/?query="
                + URLEncoder.encode(passQuery)));
        String passwordBack = "";
        try {
          passwordBack = response.getJSONObject("properties")
              .getString("value");
        } catch (JSONException e) {
          e.printStackTrace();
        }

        if (!passwordBack.equals(password)) {
          id = -2;
        }

      }

      data.putString("response", String.valueOf(id));

      msg.setData(data);

      msg.what = LookProperties.ACTION_LOGIN;
      mHandler.sendMessage(msg);
    }

    @Override
    public void updateElementPosition(int id, float x, float y, float z)
        throws RemoteException {
      // This method don't need update our sql lite
      if (id != -1) {
        JSONObject obj = new JSONObject();
        try {
          obj.put("id", new Integer(id));
          obj.put("x", new Double(x));
          obj.put("y", new Double(y));
          obj.put("z", new Double(z));
          // date falta
        } catch (JSONException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
        

        HttpResponse response = RestMethod.doPut(
            ConfigNet.getInstance().getURL("mains/" + String.valueOf(id)), obj);

        if (response != null) {
          String responseString = RestMethod.decodeResponse(response);
          if (responseString.equalsIgnoreCase("")) {
            Log.i("LookServer", "Element update in server");
          } else {
            Log.i("LookServer", responseString);
          }
        }
      } else {
        Log.e("LookServer", "ERROR The element to update is -1");
      }
    }

    @SuppressWarnings("rawtypes")
    @Override
    public void addElement(String type, float x, float y, float z,
        Map properties) throws RemoteException {

      Message msg = new Message();
      Bundle data = new Bundle();

      JSONObject obj = new JSONObject();
      try {
        obj.put("x", new Double(x));
        obj.put("y", new Double(y));
        obj.put("z", new Double(z));
        // date set DATE
      } catch (JSONException e1) {
        e1.printStackTrace();
      }

      HttpResponse response = RestMethod.doPost(
          ConfigNet.getInstance().getURL("mains/"), obj);

      if (response != null) {
        String responseString = RestMethod.decodeResponse(response);
        if (responseString.equalsIgnoreCase("")) {
          Log.i("LookServer", "Element added to server");
        } else {
          Log.i("LookServer", responseString);
        }

        int id = RestMethod.getLastId();

        if (id != -1) {
          // if the element has been inserted correctly add its
          // properties to server and insert all on the DB
//          LookContentProvider.getInstance().updateOrAddElement(id, x,
//              y, z);

          // format of json properties:
          // {"propertiesPK":{"id":"x","property":"xxx"},"value":"xxx"}
          JSONObject objProp = new JSONObject();
          try {
            JSONObject objPropPK = new JSONObject();
            objPropPK.put("id", new Integer(id));
            objPropPK.put("property", new String("type"));
            objProp.put("propertiesPK", objPropPK);
            objProp.put("value", new String(type));
          } catch (JSONException e1) {
            e1.printStackTrace();
          }
          HttpResponse response2 = RestMethod.doPost(
              ConfigNet.getInstance().getURL("propertiess/"), objProp);
          String responseString2 = RestMethod
              .decodeResponse(response2);
          if (responseString2.equalsIgnoreCase("")) {
            Log.i("LookServer", "Property type added to server");
            LookContentProvider.getInstance().updateOrAddProperty(
                id, LookProperties.PROPERTY_TYPE, type);
          } else {
            Log.i("LookServer", responseString2);
          }

          // send a post for each property
          Iterator itr = properties.entrySet().iterator();
          while (itr.hasNext()) {
            Map.Entry e = (Map.Entry) itr.next();

            String key = (String) e.getKey();
            String value = (String) e.getValue();

            objProp = new JSONObject();
            try {
              JSONObject objPropPK = new JSONObject();
              objPropPK.put("id", new Integer(id));
              objPropPK.put("property", new String(key));
              objProp.put("propertiesPK", objPropPK);
              objProp.put("value", new String(value));
            } catch (JSONException e1) {
              e1.printStackTrace();
            }
            response2 = RestMethod.doPost(
                ConfigNet.getInstance().getURL("propertiess/"), objProp);

            responseString2 = RestMethod.decodeResponse(response2);
            if (responseString2.equalsIgnoreCase("")) {
              Log.i("LookServer", "Property " + key
                  + " added to server");
              LookContentProvider.getInstance()
                  .updateOrAddProperty(id, key, value);

            } else {
              Log.i("LookServer", responseString2);
            }
          }
          
          data.putString("response", String.valueOf(id));
          msg.setData(data);

          msg.what = LookProperties.ACTION_ADD_ELEMENT;
          mHandler.sendMessage(msg);
        }

      } else {
        Log.e("LookServer",
            "Error, To update element the response return null");
      }
    }

    @Override
    public void updateOrAddProperty(int id, String propertyName,
        String propertyValue) throws RemoteException {
      Message msg = new Message();
      Bundle data = new Bundle();

      JSONObject objProp = new JSONObject();
      try {
        JSONObject objPropPK = new JSONObject();
        objPropPK.put("id", new Integer(id));
        objPropPK.put("property", new String(propertyName));
        objProp.put("propertiesPK", objPropPK);
        objProp.put("value", new String(propertyValue));
      } catch (JSONException e1) {
        e1.printStackTrace();
      }
      HttpResponse response = RestMethod.doPost(
          ConfigNet.getInstance().getURL("propertiess/"), objProp);

      if (response != null) {
        String responseString = RestMethod.decodeResponse(response);

        if (responseString.equalsIgnoreCase("")) {
          Log.i("LookServer", "Property " + propertyName
              + " added to server");

          LookContentProvider.getInstance().updateOrAddProperty(id,
              propertyName, propertyValue);

        } else {

          HttpResponse response2 = RestMethod.doPut(
              ConfigNet.getInstance().getURL("propertiess/" + id + ","
                  + propertyName), objProp);

          if (response2 != null) {
            String responseString2 = RestMethod
                .decodeResponse(response2);

            if (responseString2.equalsIgnoreCase("")) {
              Log.i("LookServer", "Property " + propertyName
                  + " modify in server");

              LookContentProvider.getInstance()
                  .updateOrAddProperty(id, propertyName,
                      propertyValue);

              data.putString("response",
                  String.valueOf(propertyName));

              msg.setData(data);

              msg.what = LookProperties.ACTION_MODIFY_PROPERTY;
              mHandler.sendMessage(msg);

            } else {
              Log.e("LookServer", "Error: " + responseString);
            }
          } else {

            Log.e("LookServer",
                "Error, Modifying property, the response return null");
          }
        }

      } else {
        Log.e("LookServer",
            "Error, Adding property, the response return null");
      }
    }

    @Override
    public List getElementsUpdated(float x, float y, float z, float radius, String date)
        throws RemoteException {

      List<EntityData> list = new ArrayList<EntityData>();
      Message msg = new Message();
      Bundle data = new Bundle();

      float x1 = x - (radius / 2);
      float x2 = x + (radius / 2);
      float y1 = y - (radius / 2);
      float y2 = y + (radius / 2);

      // FIXME meter lgica de la fecha
      String query = "SELECT e FROM Main e WHERE (e.x BETWEEN " + x1
          + " AND " + x2 + ") AND (e.y BETWEEN " + y1 + " AND " + y2
          + ") AND (e.z = " + z + ")";

      JSONObject response = RestMethod.doGet(ConfigNet.getInstance()
          .getURL("mains/?max=0&query=" + URLEncoder.encode(query)));

      JSONArray recs;

      try {
        recs = response.getJSONArray("main");

        for (int i = 0; i < recs.length(); i++) {
          EntityData entityData = new EntityData( );

          int resid = recs.getJSONObject(i).getInt("id");
          float resx = (float) recs.getJSONObject(i).getDouble("x");
          float resy = (float) recs.getJSONObject(i).getDouble("y");
          float resz = (float) recs.getJSONObject(i).getDouble("z");
          
          entityData.setId(resid);
          entityData.setLocation(resx, resy, resz);

          // Update all properties of this element
          String propertyQuery = "SELECT e FROM Properties e WHERE e.propertiesPK.id = '"
              + resid + "'";

          JSONObject responseProp = RestMethod.doGet(ConfigNet.getInstance()
              .getURL("propertiess/?query="
                  + URLEncoder.encode(propertyQuery)));

          JSONArray recsProp;

          try {
            recsProp = responseProp.getJSONArray("properties");

            for (int j = 0; j < recsProp.length(); j++) {

              String propertyName = recsProp.getJSONObject(j)
                  .getJSONObject("propertiesPK")
                  .getString("property");

              String propertyValue = recsProp.getJSONObject(j)
                  .getString("value");

              entityData.setPropertyValue(propertyName, propertyValue);
            }
          } catch (JSONException e) {
            // if no result
            Log.i("LookService", "Element without properties");
          }

          Log.i("LookService",
              "Update element and properties of number: " + resid);
          list.add(entityData);
        }

      } catch (JSONException e) {
        // if no result
        Log.i("LookService", "Nothing to update");
      }

      data.putString("response", String.valueOf(1));
      msg.setData(data);
      msg.what = LookProperties.UPDATE_DB;
      mHandler.sendMessage(msg);
      
      return list;

    }

    public void registerCallback(IRemoteServiceCallback cb) {
      if (cb != null)
        mCallbacks.register(cb);
    }

  };

  private final Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {

      // Broadcast to all clients the new value.
      final int N = mCallbacks.beginBroadcast();
      for (int i = 0; i < N; i++) {
        try {
          switch (msg.what) {
          case LookProperties.ACTION_LOGIN:
            String response = msg.getData().getString("response");
            mCallbacks.getBroadcastItem(i).userLogIn(response);
            break;
          case LookProperties.ACTION_ADD_ELEMENT:
            String response1 = msg.getData().getString("response");
            mCallbacks.getBroadcastItem(i).sendResponse1(response1);
            break;
          case LookProperties.ACTION_MODIFY_PROPERTY:
            String response3 = msg.getData().getString("response");
            mCallbacks.getBroadcastItem(i).sendResponse3(response3);
            break;
          case LookProperties.UPDATE_DB:
            String response2 = msg.getData().getString("response");
            mCallbacks.getBroadcastItem(i).sendResponse2(response2);
            break;
          default:
            super.handleMessage(msg);
            return;

          }
        } catch (RemoteException e) {
        }
      }
      mCallbacks.finishBroadcast();
    }
  };

}




Java Source Code List

es.ucm.look.ar.LookAR.java
es.ucm.look.ar.Preview.java
es.ucm.look.ar.ar2D.AR2D.java
es.ucm.look.ar.ar2D.Drawable2D.java
es.ucm.look.ar.ar2D.HUDElement.java
es.ucm.look.ar.ar2D.drawables.Circle2D.java
es.ucm.look.ar.ar2D.drawables.Image2D.java
es.ucm.look.ar.ar2D.drawables.Text2D.java
es.ucm.look.ar.ar3D.Drawable3D.java
es.ucm.look.ar.ar3D.Renderer3D.java
es.ucm.look.ar.ar3D.core.Color4.java
es.ucm.look.ar.ar3D.core.TextureFactory.java
es.ucm.look.ar.ar3D.core.camera.Camera3D.java
es.ucm.look.ar.ar3D.core.camera.OrientedCamera.java
es.ucm.look.ar.ar3D.core.drawables.DrawablesDataBase.java
es.ucm.look.ar.ar3D.core.drawables.Entity3D.java
es.ucm.look.ar.ar3D.core.drawables.Mesh3D.java
es.ucm.look.ar.ar3D.core.drawables.primitives.CirclePrimitive.java
es.ucm.look.ar.ar3D.core.drawables.primitives.Cube.java
es.ucm.look.ar.ar3D.core.drawables.primitives.Grid.java
es.ucm.look.ar.ar3D.core.drawables.primitives.LinePrimitive.java
es.ucm.look.ar.ar3D.core.drawables.primitives.LinesLoopPrimitive.java
es.ucm.look.ar.ar3D.core.drawables.primitives.ObjMesh3D.java
es.ucm.look.ar.ar3D.core.drawables.primitives.PointPrimitive.java
es.ucm.look.ar.ar3D.core.drawables.primitives.Ring.java
es.ucm.look.ar.ar3D.core.drawables.primitives.SquarePrimitive.java
es.ucm.look.ar.ar3D.core.drawables.primitives.TrianglePrimitive.java
es.ucm.look.ar.ar3D.core.drawables.primitives.extra.ImagePrimitive.java
es.ucm.look.ar.ar3D.parser.MeshObjParser.java
es.ucm.look.ar.hud.ActionListener.java
es.ucm.look.ar.hud.BasicHud.java
es.ucm.look.ar.hud.Button.java
es.ucm.look.ar.hud.HUD.java
es.ucm.look.ar.listeners.CameraListener.java
es.ucm.look.ar.listeners.TouchListener.java
es.ucm.look.ar.math.collision.Armature.java
es.ucm.look.ar.math.collision.SphericalArmature.java
es.ucm.look.ar.math.collision.SquareArmature.java
es.ucm.look.ar.math.collision.debug.DebugArmature.java
es.ucm.look.ar.math.collision.debug.SphericalDebugArmature.java
es.ucm.look.ar.math.collision.debug.SquareDebugArmature.java
es.ucm.look.ar.math.geom.Matrix3.java
es.ucm.look.ar.math.geom.Plane.java
es.ucm.look.ar.math.geom.Point2.java
es.ucm.look.ar.math.geom.Point3.java
es.ucm.look.ar.math.geom.Ray.java
es.ucm.look.ar.math.geom.Triangle.java
es.ucm.look.ar.math.geom.Vector3.java
es.ucm.look.ar.util.CameraParametersHelper.java
es.ucm.look.ar.util.DeviceOrientation.java
es.ucm.look.ar.util.LookARUtil.java
es.ucm.look.ar.util.PositionTimerTask.java
es.ucm.look.data.EntityData.java
es.ucm.look.data.LookData.java
es.ucm.look.data.WorldEntityFactory.java
es.ucm.look.data.WorldEntity.java
es.ucm.look.data.World.java
es.ucm.look.data.filesManager.LookFilesManager.java
es.ucm.look.data.interfaces.DataGetter.java
es.ucm.look.data.interfaces.DataHandler.java
es.ucm.look.data.interfaces.DataSetter.java
es.ucm.look.data.local.BasicDataHandler.java
es.ucm.look.data.local.DBDataHandler.java
es.ucm.look.data.local.contentprovider.LookContentProvider.java
es.ucm.look.data.local.contentprovider.sql.LookSQLContentProvider.java
es.ucm.look.data.local.contentprovider.sql.LookSQLHelper.java
es.ucm.look.data.remote.ConfigNet.java
es.ucm.look.data.remote.LookProperties.java
es.ucm.look.data.remote.RemoteDBHandler.java
es.ucm.look.data.remote.restful.LookService.java
es.ucm.look.data.remote.restful.RestMethod.java
es.ucm.look.data.remote.restful.ServiceManager.java
es.ucm.look.location.LocationManager.java
es.ucm.look.locationProvider.DeviceSensor.java
es.ucm.look.locationProvider.InertialNavigationSystem.java
es.ucm.look.locationProvider.LocationProvider.java
es.ucm.look.locationProvider.Motion.java
es.ucm.look.locationProvider.Positioning.java
es.ucm.look.locationProvider.Util.java
es.ucm.look.locationProviderWifi.Cliente.java
es.ucm.look.locationProviderWifi.WifiLocation.java
es.ucm.look.locationProviderWifi.WifiService.java
es.ucm.look.locationProviderWifi.util.DateUtils.java
es.ucm.look.locationProviderWifi.util.DeviceReader.java
es.ucm.look.locationProviderWifi.util.DeviceWriter.java
es.ucm.look.locationProviderWifi.wifi.Lugar.java
es.ucm.look.locationProviderWifi.wifi.Lugares.java
es.ucm.look.locationProviderWifi.wifi.NodoWifi.java
es.ucm.look.locationProvider.map.Mapa.java
es.ucm.look.locationProvider.test.java