import java.util.List;
-public class CoreController
-{
- static
- {
- try
- {
- String workingPath = System.getProperty( "user.dir" );
-
+public class CoreController {
+ static {
+ try {
+ String workingPath = System.getProperty("user.dir");
+
// for android: not complete method
- if(System.getProperty("os.name").toLowerCase().equals("linux"))
- {
- //System.out.println("System load Android library");
- System.loadLibrary("oc_logger");
- System.loadLibrary("coap");
- System.loadLibrary("octbstack");
- System.loadLibrary("oc");
- System.loadLibrary("SSMCore");
- }
- else
- {
- //System.out.println("System load 32bit library");
- System.load( workingPath + "SSMCore_Windows.dll");
+ if (System.getProperty("os.name").toLowerCase().equals("linux")) {
+ // System.out.println("System load Android library");
+ System.loadLibrary("oc_logger");
+ System.loadLibrary("coap");
+ System.loadLibrary("octbstack");
+ System.loadLibrary("oc");
+ System.loadLibrary("SSMCore");
+ } else {
+ // System.out.println("System load 32bit library");
+ System.load(workingPath + "SSMCore_Windows.dll");
}
- }
- catch(UnsatisfiedLinkError e)
- {
+ } catch (UnsatisfiedLinkError e) {
System.out.println(e.getMessage());
}
}
-
+
static private CoreController coreController;
-
- public static CoreController getInstance()
- {
- if(coreController == null)
+
+ public static CoreController getInstance() {
+ if (coreController == null)
coreController = new CoreController();
-
+
return coreController;
}
-
- public native void InitializeSSMCore(String xmlDescription);
- public native void StartSSMCore();
- public native void StopSSMCore();
- public native void TerminateSSMCore();
- public native QueryEngine CreateQueryEngine();
+
+ public native void InitializeSSMCore(String xmlDescription)
+ throws Exception;
+
+ public native void StartSSMCore() throws Exception;
+
+ public native void StopSSMCore() throws Exception;
+
+ public native void TerminateSSMCore() throws Exception;
+
+ public native QueryEngine CreateQueryEngine() throws Exception;
+
public native int ReleaseQueryEngine(QueryEngine queryEngine);
-
+
// QueryEngine
- public native int ExecuteContextQuery(int pQueryEngineInstance, String contextQuery);
- public native void RegisterQueryEvent(int pQueryEngineInstance, IQueryEngineEvent queryEngineEvent);
- public native void KillContextQuery(int pQueryEngineInstance, int cqid);
-
- //public native void UnregiterQueryEvent(int pQueryEngineInstance, IQueryEngineEvent queryEngineEvent);
-
- //IModelData
- public native int GetDataId(int pIModelDataInstance);
+ public native int ExecuteContextQuery(int pQueryEngineInstance,
+ String contextQuery) throws Exception;
+
+ public native void RegisterQueryEvent(int pQueryEngineInstance,
+ IQueryEngineEvent queryEngineEvent);
+
+ public native void KillContextQuery(int pQueryEngineInstance, int cqid)
+ throws Exception;
+
+ // public native void UnregiterQueryEvent(int pQueryEngineInstance,
+ // IQueryEngineEvent queryEngineEvent);
+
+ // IModelData
+ public native int GetDataId(int pIModelDataInstance);
+
public native int GetPropertyCount(int pIModelDataInstance);
- public native String GetPropertyName(int pIModelDataInstance, int propertyIndex);
- public native String GetPropertyValue(int pIModelDataInstance, int propertyIndex);
-
- //IDataReader
+
+ public native String GetPropertyName(int pIModelDataInstance,
+ int propertyIndex);
+
+ public native String GetPropertyValue(int pIModelDataInstance,
+ int propertyIndex);
+
+ // IDataReader
public native List<String> GetAffectedModels(int pDataReaderInstance);
- public native int GetModelDataCount(int pDataReaderInstance, String modelName);
- public native ModelData GetModelData(int pDataReaderInstance, String modelName, int dataIndex);
-
+
+ public native int GetModelDataCount(int pDataReaderInstance,
+ String modelName) throws Exception;
+
+ public native ModelData GetModelData(int pDataReaderInstance,
+ String modelName, int dataIndex) throws Exception;
+
public native void RegisterReportReceiver(IReportReceiver reportReceiver);
}
\ No newline at end of file
import java.util.concurrent.locks.ReentrantLock;
public class SSMInterface {
- private class QueryEngineEventReceiver extends IQueryEngineEvent
- {
- private Lock mMtxListener = new ReentrantLock();
- private Map<Integer, IQueryEngineEvent> mMapListener = new HashMap<Integer, IQueryEngineEvent>();
-
- public void OnQueryEngineEvent(int cqid, DataReader result)
- {
+ private class QueryEngineEventReceiver extends IQueryEngineEvent {
+ private Lock mMtxListener = new ReentrantLock();
+ private Map<Integer, IQueryEngineEvent> mMapListener = new HashMap<Integer, IQueryEngineEvent>();
+
+ public void OnQueryEngineEvent(int cqid, DataReader result) {
mMtxListener.lock();
mMapListener.get(cqid).OnQueryEngineEvent(cqid, result);
-
+
mMtxListener.unlock();
}
- void lockListener()
- {
+
+ void lockListener() {
mMtxListener.lock();
- }
-
- void unlockListener()
- {
- mMtxListener.unlock();
- }
-
- void addListener(int cqid, IQueryEngineEvent engineEvent)
- {
- mMapListener.put(cqid, engineEvent);
- }
-
- void removeListener(int cqid)
- {
- mMapListener.remove(cqid);
- }
+ }
+
+ void unlockListener() {
+ mMtxListener.unlock();
+ }
+
+ void addListener(int cqid, IQueryEngineEvent engineEvent) {
+ mMapListener.put(cqid, engineEvent);
+ }
+
+ void removeListener(int cqid) {
+ mMapListener.remove(cqid);
+ }
};
-
- private CoreController mSSMCore = null;
- private QueryEngine mQueryEngine = null;
- private QueryEngineEventReceiver mQueryEngineEventListenerReceiver = new QueryEngineEventReceiver();
- private List<Integer> mRunningCQLs = new ArrayList<Integer>();
-
- public SSMInterface()
- {
+
+ private CoreController mSSMCore = null;
+ private QueryEngine mQueryEngine = null;
+ private QueryEngineEventReceiver mQueryEngineEventListenerReceiver = new QueryEngineEventReceiver();
+ private List<Integer> mRunningCQLs = new ArrayList<Integer>();
+
+ public SSMInterface() {
}
-
- public void startSSMCore(String initConfig) throws Exception
- {
+
+ public void startSSMCore(String initConfig) throws Exception {
mSSMCore = CoreController.getInstance();
- mSSMCore.InitializeSSMCore(initConfig);
- mSSMCore.StartSSMCore();
-
- mQueryEngine = mSSMCore.CreateQueryEngine();
-
- if(mQueryEngine == null)
- throw new Exception("Create Query Engine failed");
-
- mQueryEngine.RegisterQueryEvent(mQueryEngineEventListenerReceiver);
+ mSSMCore.InitializeSSMCore(initConfig);
+ mSSMCore.StartSSMCore();
+
+ mQueryEngine = mSSMCore.CreateQueryEngine();
+
+ mQueryEngine.RegisterQueryEvent(mQueryEngineEventListenerReceiver);
}
-
- public void stopSSMCore()
- {
+
+ public void stopSSMCore() throws Exception {
mQueryEngine.RegisterQueryEvent(null);
mSSMCore.ReleaseQueryEngine(mQueryEngine);
mQueryEngineEventListenerReceiver = null;
mSSMCore.StopSSMCore();
mSSMCore.TerminateSSMCore();
}
-
+
public int registerQuery(String contextQuery, IQueryEngineEvent listener)
- {
- int cqid;
-
- mQueryEngineEventListenerReceiver.lockListener();
- cqid = mQueryEngine.ExecuteContextQuery(contextQuery);
- mQueryEngineEventListenerReceiver.addListener(cqid, listener);
- mRunningCQLs.add(cqid);
- mQueryEngineEventListenerReceiver.unlockListener();
-
+ throws Exception {
+ int cqid = 0;
+
+ try {
+ mQueryEngineEventListenerReceiver.lockListener();
+ cqid = mQueryEngine.ExecuteContextQuery(contextQuery);
+ mQueryEngineEventListenerReceiver.addListener(cqid, listener);
+ mRunningCQLs.add(cqid);
+ } catch (Exception e) {
+ throw e;
+ } finally {
+ mQueryEngineEventListenerReceiver.unlockListener();
+ }
+
return cqid;
}
-
- public void unregisterQuery(int cqid)
- {
- mQueryEngineEventListenerReceiver.lockListener();
- mQueryEngine.KillContextQuery(cqid);
- mQueryEngineEventListenerReceiver.removeListener(cqid);
- mRunningCQLs.remove(cqid);
- mQueryEngineEventListenerReceiver.unlockListener();
+
+ public void unregisterQuery(int cqid) throws Exception {
+ try {
+ mQueryEngineEventListenerReceiver.lockListener();
+ mQueryEngine.KillContextQuery(cqid);
+ mQueryEngineEventListenerReceiver.removeListener(cqid);
+ mRunningCQLs.remove((Object) cqid);
+ } catch (Exception e) {
+ throw e;
+ } finally {
+ mQueryEngineEventListenerReceiver.unlockListener();
+ }
}
}
\ No newline at end of file
import java.util.List;
import java.util.UUID;
-import org.iotivity.service.ssm.*;
+import org.iotivity.service.ssm.DataReader;
+import org.iotivity.service.ssm.IQueryEngineEvent;
+import org.iotivity.service.ssm.ModelData;
+import org.iotivity.service.ssm.R;
+import org.iotivity.service.ssm.SSMInterface;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
-//import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
public class MainActivity extends Activity {
-
+
private SSMInterface SoftSensorManager = null;
- private List<Integer> mRunningQueries = new ArrayList<Integer>();
-
- private IQueryEngineEvent mQueryEngineEventListener = new IQueryEngineEvent()
- {
+ private ArrayList<Integer> mRunningQueries = new ArrayList<Integer>();
+
+ private IQueryEngineEvent mQueryEngineEventListener = new IQueryEngineEvent() {
@Override
- public void OnQueryEngineEvent(int cqid, DataReader result)
- {
+ public void OnQueryEngineEvent(int cqid, DataReader result) {
Log.i("[SSM]", "event received! cqid=" + cqid);
PrintLog("Event from cqid " + cqid + " has received");
-
+
List<String> models = result.GetAffectedModels();
-
- for(String modelName : models)
- {
+
+ for (String modelName : models) {
PrintLog("Model: " + modelName);
- int dataCount = result.GetModelDataCount(modelName);
- for(int i=0; i < dataCount; i++)
- {
- ModelData modelData =
- result.GetModelData(modelName, i);
- for(int j=0; j < modelData.GetPropertyCount(); j++)
- {
- PrintLog("Name: " + modelData.GetPropertyName(j) +
- " Value: " + modelData.GetPropertyValue(j));
+ try {
+ int dataCount = result.GetModelDataCount(modelName);
+ for (int i = 0; i < dataCount; i++) {
+ ModelData modelData = result.GetModelData(modelName, i);
+ for (int j = 0; j < modelData.GetPropertyCount(); j++) {
+ PrintLog("Name: " + modelData.GetPropertyName(j)
+ + " Value: "
+ + modelData.GetPropertyValue(j));
+ }
}
+ } catch (Exception e) {
+ e.printStackTrace();
+ PrintLog("Receiving Event from cqid " + cqid + " failed");
}
}
}
};
-
- void PrintLog(String log)
- {
+
+ void PrintLog(String log) {
Message msg = new Message();
Bundle data = new Bundle();
data.putString("Log", log);
msg.setData(data);
logHandler.sendMessage(msg);
}
-
- private Handler logHandler = new Handler()
- {
+
+ private Handler logHandler = new Handler() {
@Override
- public void handleMessage(Message msg)
- {
+ public void handleMessage(Message msg) {
tvLog.append(msg.getData().getString("Log") + "\n");
svLog.fullScroll(ScrollView.FOCUS_DOWN);
}
};
-
- private TextView tvLog = null;
- private ScrollView svLog = null;
- private EditText edtQuery = null;
- private EditText edtUnregisterQuery = null;
-
- View.OnClickListener clickHandler = new View.OnClickListener() {
-
- public void onClick(View v)
- {
- switch(v.getId())
- {
+
+ private TextView tvLog = null;
+ private ScrollView svLog = null;
+ private EditText edtQuery = null;
+ private EditText edtUnregisterQuery = null;
+
+ View.OnClickListener clickHandler = new View.OnClickListener() {
+
+ public void onClick(View v) {
+ switch (v.getId()) {
case R.id.btnRegisterQuery:
- int cqid = SoftSensorManager.registerQuery(edtQuery.getText().toString(), mQueryEngineEventListener);
- mRunningQueries.add(cqid);
- PrintLog(edtQuery.getText().toString() + " has executed, cqid=" + cqid);
+ int cqid = 0;
+ try {
+ cqid = SoftSensorManager.registerQuery(edtQuery.getText()
+ .toString(), mQueryEngineEventListener);
+ mRunningQueries.add(cqid);
+ PrintLog(edtQuery.getText().toString()
+ + " has executed, cqid=" + cqid);
+ } catch (Exception e) {
+ PrintLog("Register Query failed");
+ }
+
break;
-
+
case R.id.btnUnregisterQuery:
Iterator<Integer> it = mRunningQueries.iterator();
- while(it.hasNext())
- {
- if(it.next() == Integer.parseInt(edtUnregisterQuery.getText().toString()))
- {
- SoftSensorManager.unregisterQuery(Integer.parseInt(edtUnregisterQuery.getText().toString()));
- PrintLog("Unregister Query has executed, cqid=" + Integer.parseInt(edtUnregisterQuery.getText().toString()));
- it.remove();
+
+ while (it.hasNext()) {
+ if (it.next() == Integer.parseInt(edtUnregisterQuery
+ .getText().toString())) {
+ try {
+ SoftSensorManager.unregisterQuery(Integer
+ .parseInt(edtUnregisterQuery.getText()
+ .toString()));
+ PrintLog("Unregister Query has executed, cqid="
+ + Integer.parseInt(edtUnregisterQuery
+ .getText().toString()));
+ it.remove();
+ } catch (NumberFormatException e) {
+ PrintLog("Invalid Query Id");
+ } catch (Exception e) {
+ PrintLog("UnRegister Query failed");
+ }
+ break;
}
}
break;
-
+
case R.id.btPlus:
- int queryNum = Integer.parseInt(edtUnregisterQuery.getText().toString()) + 1;
+ int queryNum = Integer.parseInt(edtUnregisterQuery.getText()
+ .toString()) + 1;
edtUnregisterQuery.setText(queryNum + "");
break;
-
+
case R.id.btMinus:
- queryNum = Integer.parseInt(edtUnregisterQuery.getText().toString()) - 1;
+ queryNum = Integer.parseInt(edtUnregisterQuery.getText()
+ .toString()) - 1;
edtUnregisterQuery.setText(queryNum + "");
break;
}
}
};
-
- View.OnClickListener textAddHandler = new View.OnClickListener() {
-
- public void onClick(View v)
- {
- switch(v.getId())
- {
- case R.id.btClear :
- edtQuery.setText("");
- break;
-
- case R.id.btLogClear :
- tvLog.setText("");
- break;
-
- case R.id.btFullDevice:
- edtQuery.setText("subscribe Device if Device.dataId != 0");
- break;
-
- case R.id.btDiscomfortIndex:
- edtQuery.setText("subscribe Device.DiscomfortIndexSensor if Device.DiscomfortIndexSensor.discomfortIndex > 0");
- break;
- }
+
+ View.OnClickListener textAddHandler = new View.OnClickListener() {
+
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btClear:
+ edtQuery.setText("");
+ break;
+
+ case R.id.btLogClear:
+ tvLog.setText("");
+ break;
+
+ case R.id.btFullDevice:
+ edtQuery.setText("subscribe Device if Device.dataId != 0");
+ break;
+
+ case R.id.btDiscomfortIndex:
+ edtQuery.setText("subscribe Device.DiscomfortIndexSensor if Device.DiscomfortIndexSensor.discomfortIndex > 0");
+ break;
}
- };
-
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- tvLog = (TextView)findViewById(R.id.txtLog);
- svLog = (ScrollView)findViewById(R.id.sclLog);
- edtQuery = (EditText)findViewById(R.id.editQuery);
- edtUnregisterQuery = (EditText)findViewById(R.id.editUnregisterQuery);
-
- findViewById(R.id.btnRegisterQuery).setOnClickListener(clickHandler);
- findViewById(R.id.btnUnregisterQuery).setOnClickListener(clickHandler);
- findViewById(R.id.btFullDevice).setOnClickListener(textAddHandler);
- findViewById(R.id.btDiscomfortIndex).setOnClickListener(textAddHandler);
- findViewById(R.id.btPlus).setOnClickListener(clickHandler);
- findViewById(R.id.btMinus).setOnClickListener(clickHandler);
- findViewById(R.id.btClear).setOnClickListener(textAddHandler);
- findViewById(R.id.btLogClear).setOnClickListener(textAddHandler);
-
+ }
+ };
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ tvLog = (TextView) findViewById(R.id.txtLog);
+ svLog = (ScrollView) findViewById(R.id.sclLog);
+ edtQuery = (EditText) findViewById(R.id.editQuery);
+ edtUnregisterQuery = (EditText) findViewById(R.id.editUnregisterQuery);
+
+ findViewById(R.id.btnRegisterQuery).setOnClickListener(clickHandler);
+ findViewById(R.id.btnUnregisterQuery).setOnClickListener(clickHandler);
+ findViewById(R.id.btFullDevice).setOnClickListener(textAddHandler);
+ findViewById(R.id.btDiscomfortIndex).setOnClickListener(textAddHandler);
+ findViewById(R.id.btPlus).setOnClickListener(clickHandler);
+ findViewById(R.id.btMinus).setOnClickListener(clickHandler);
+ findViewById(R.id.btClear).setOnClickListener(textAddHandler);
+ findViewById(R.id.btLogClear).setOnClickListener(textAddHandler);
+
copyFiles("lib");
-
- SoftSensorManager = new SSMInterface();
-
- String initConfig = "<SSMCore>" +
- "<Device>" +
- "<UDN>"+getUUID()+"</UDN>" +
- "<Name>MyMobile</Name>" +
- "<Type>Mobile</Type>" +
- "</Device>" +
- "<Config>" +
- "<SoftSensorRepository>/data/data/" + getPackageName() + "/files/</SoftSensorRepository>" +
- "<SoftSensorDescription>/data/data/" + getPackageName() + "/files/SoftSensorDescription.xml</SoftSensorDescription>" +
- "</Config>" +
- "</SSMCore>";
-
- try
- {
+
+ SoftSensorManager = new SSMInterface();
+
+ String initConfig = "<SSMCore>" + "<Device>" + "<UDN>" + getUUID()
+ + "</UDN>" + "<Name>MyMobile</Name>" + "<Type>Mobile</Type>"
+ + "</Device>" + "<Config>"
+ + "<SoftSensorRepository>/data/data/" + getPackageName()
+ + "/files/</SoftSensorRepository>"
+ + "<SoftSensorDescription>/data/data/" + getPackageName()
+ + "/files/SoftSensorDescription.xml</SoftSensorDescription>"
+ + "</Config>" + "</SSMCore>";
+
+ try {
SoftSensorManager.startSSMCore(initConfig);
- }
- catch (Exception e)
- {
- // TODO Auto-generated catch block
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ try {
+ SoftSensorManager.stopSSMCore();
+ } catch (Exception e) {
e.printStackTrace();
}
- }
-
- @Override
- protected void onDestroy()
- {
- SoftSensorManager.stopSSMCore();
-
- super.onDestroy();
- }
-
- private String getUUID()
- {
- String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
- SharedPreferences sharedPrefs = getSharedPreferences(PREF_UNIQUE_ID, Context.MODE_PRIVATE);
+
+ super.onDestroy();
+ }
+
+ private String getUUID() {
+ String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
+ SharedPreferences sharedPrefs = getSharedPreferences(PREF_UNIQUE_ID,
+ Context.MODE_PRIVATE);
String uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
-
- if (uniqueID == null)
- {
- uniqueID = UUID.randomUUID().toString();
- Editor editor = sharedPrefs.edit();
- editor.putString(PREF_UNIQUE_ID, uniqueID);
- editor.commit();
- }
-
+
+ if (uniqueID == null) {
+ uniqueID = UUID.randomUUID().toString();
+ Editor editor = sharedPrefs.edit();
+ editor.putString(PREF_UNIQUE_ID, uniqueID);
+ editor.commit();
+ }
+
return uniqueID;
}
-
- private void copyFiles(String path)
- {
+
+ private void copyFiles(String path) {
AssetManager assetManager = getAssets();
- String assets[] = null;
-
- try
- {
- assets = assetManager.list(path);
-
- if (assets.length == 0)
- {
- copyFile(path);
- }
- else
- {
- String fullPath = "/data/data/" + this.getClass().getPackage().toString() + "/" + path;
- File dir = new File(fullPath);
-
- if (!dir.exists())
- dir.mkdir();
- for (int i = 0; i < assets.length; ++i)
- {
- copyFiles(path + "/" + assets[i]);
- }
- }
- }
- catch (IOException ex)
- {
- Log.e("tag", "I/O Exception", ex);
- }
+ String assets[] = null;
+
+ try {
+ assets = assetManager.list(path);
+
+ if (assets.length == 0) {
+ copyFile(path);
+ } else {
+ String fullPath = "/data/data/"
+ + this.getClass().getPackage().toString() + "/" + path;
+ File dir = new File(fullPath);
+
+ if (!dir.exists())
+ dir.mkdir();
+ for (int i = 0; i < assets.length; ++i) {
+ copyFiles(path + "/" + assets[i]);
+ }
+ }
+ } catch (IOException ex) {
+ Log.e("tag", "I/O Exception", ex);
+ }
}
-
- private void copyFile(String filename)
- {
- AssetManager assetManager = getAssets();
- InputStream in = null;
- OutputStream out = null;
-
- try
- {
- in = assetManager.open(filename);
- out = openFileOutput(filename.split("/")[1], Context.MODE_PRIVATE);
-
- byte[] buffer = new byte[1024];
- int read;
-
- while ((read = in.read(buffer)) != -1)
- {
- out.write(buffer, 0, read);
- }
-
- in.close();
- in = null;
- out.flush();
- out.close();
- out = null;
- }
- catch (Exception e)
- {
- Log.e("tag", e.getMessage());
- }
+
+ private void copyFile(String filename) {
+ AssetManager assetManager = getAssets();
+ InputStream in = null;
+ OutputStream out = null;
+
+ try {
+ in = assetManager.open(filename);
+ out = openFileOutput(filename.split("/")[1], Context.MODE_PRIVATE);
+
+ byte[] buffer = new byte[1024];
+ int read;
+
+ while ((read = in.read(buffer)) != -1) {
+ out.write(buffer, 0, read);
+ }
+
+ in.close();
+ in = null;
+ out.flush();
+ out.close();
+ out = null;
+ } catch (Exception e) {
+ Log.e("tag", e.getMessage());
+ }
}
}