EmbASP-Java
DLV2AndroidReasoner.java
1 package it.unical.mat.embasp.specializations.dlv2.android;
2 
3 import android.app.IntentService;
4 import android.content.Intent;
5 import android.util.Log;
6 import it.unical.mat.embasp.specializations.dlv.android.DLVAndroidReasoner;
7 
8 import java.io.File;
9 import java.io.FileOutputStream;
10 import java.util.concurrent.TimeUnit;
11 
12 public class DLV2AndroidReasoner extends IntentService {
13 
14  //load the static library that contains DLV code compiled for arm processors
15  static{
16  System.loadLibrary("dlv2jni");
17  }
18 
19  public DLV2AndroidReasoner() {
20  super("dlv2_service");
21  }
22 
23 
24  @Override
25  protected void onHandleIntent(Intent intent) {
26  Log.i("DLV2",(intent!=null)+"");
27  if (intent != null) {
28  final String action = intent.getAction();
29  if (DLVAndroidReasoner.ACTION_SOLVE.equals(action)) {
30  //get a String with PROGRAM tag that indentify program String
31  //get a String with OPTION tag that indentify options String
32  //call the abstract method that handle a specific solve action
33  //Send the result with a Broadcast Intent
34  final String program = intent.getStringExtra(DLVAndroidReasoner.PROGRAM);
35  final String options = intent.getStringExtra(DLVAndroidReasoner.OPTION);
36  final String files = intent.getStringExtra(DLVAndroidReasoner.FILES);
37  final String result = handleActionSolve(program, options, files);
38  publishResults(result);
39  }
40  }
41  }
42 
43  private void publishResults(String result) {
44  Intent intent = new Intent(DLVAndroidReasoner.RESULT_NOTIFICATION);
45  intent.putExtra(DLVAndroidReasoner.SOLVER_RESULT, result);
46  sendBroadcast(intent);
47  }
48 
49  public String handleActionSolve(String program, String options, String filesPath) {
50  Log.i("DLV2", "Launching DLV2");
51  File file = new File(this.getFilesDir(), DLVAndroidReasoner.FILENAME);
52 
53  FileOutputStream outputStream;
54 
55  try {
56  outputStream = new FileOutputStream(file);
57  outputStream.write(program.getBytes());
58  outputStream.close();
59 
60  } catch (Exception e) {
61  e.printStackTrace();
62  }
63 
64  StringBuilder completeProgram = new StringBuilder();
65  completeProgram.append(options).append(" ");
66  completeProgram.append(file.getAbsolutePath()).append(" ");
67 
68  completeProgram.append(filesPath).append(" ");
69 
70  long startTime = System.nanoTime();
71  String result = dlv2main(completeProgram.toString());
72  long stopTime = System.nanoTime();
73  Log.i("DLV2", "Execution Time: "+Long.toString(TimeUnit.NANOSECONDS.toMillis(stopTime - startTime)));
74  return result;
75  }
76 
77 
78  private native String dlv2main(String filePath);
79 
80  @Override
81  public void onDestroy() {
82  super.onDestroy();
83  android.os.Process.killProcess(android.os.Process.myPid());//kill the process corresponding to this DLV2Service
84  }
85 
86 }
it.unical.mat.embasp.specializations.dlv2.android.DLV2AndroidReasoner
Definition: DLV2AndroidReasoner.java:12
it.unical.mat.embasp.specializations.dlv.android.DLVAndroidReasoner
Definition: DLVAndroidReasoner.java:10