Upload project.

This commit is contained in:
StevenJW
2020-06-09 21:02:14 +01:00
parent 656abcf9ad
commit 1164c93622
520 changed files with 28059 additions and 0 deletions

1
syski_client_android/app/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,48 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "uk.co.syski.client.android"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.5.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
compile 'com.android.support:support-annotations:27.1.1'
compile 'com.android.volley:volley:1.1.1'
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
implementation 'com.android.support:gridlayout-v7:26.1.0'
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
def lifecycle_version = "1.1.1"
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"
debugImplementation 'com.amitshekhar.android:debug-db:1.0.6'
implementation 'com.jjoe64:graphview:4.2.1'
testImplementation 'org.mockito:mockito-core:1.10.19'
}
apply plugin: 'com.google.gms.google-services'

View File

@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -0,0 +1,26 @@
package uk.co.syski.client.android;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("uk.co.syski.client.android", appContext.getPackageName());
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class CPUActivityTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void onCreateOptionsMenu() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class GPUActivityTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void onCreateOptionsMenu() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class MOBOActivityTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void onCreateOptionsMenu() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class RAMActivityTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void onCreateOptionsMenu() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
}

View File

@@ -0,0 +1,28 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class SettingsActivityTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
@Test
public void onIsMultiPane() throws Exception {
}
@Test
public void onBuildHeaders() throws Exception {
}
@Test
public void isValidFragment() throws Exception {
}
}

View File

@@ -0,0 +1,32 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class SystemListMenuTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void onBackPressed() throws Exception {
}
@Test
public void onCreateOptionsMenu() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
@Test
public void onNavigationItemSelected() throws Exception {
}
@Test
public void onActivityResult() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class SystemOSActivityTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void onCreateOptionsMenu() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
}

View File

@@ -0,0 +1,28 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class SystemOverviewActivityTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void shutdownOnClick() throws Exception {
}
@Test
public void restartOnClick() throws Exception {
}
@Test
public void onCreateOptionsMenu() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view;
import org.junit.Test;
import static org.junit.Assert.*;
public class SystemStorageActivityTest {
@Test
public void onCreate() throws Exception {
}
@Test
public void onCreateOptionsMenu() throws Exception {
}
@Test
public void onOptionsItemSelected() throws Exception {
}
}

View File

@@ -0,0 +1,12 @@
package uk.co.syski.client.android.view.adapter;
import org.junit.Test;
import static org.junit.Assert.*;
public class CPUAdapterTest {
@Test
public void getView() throws Exception {
}
}

View File

@@ -0,0 +1,16 @@
package uk.co.syski.client.android.view.adapter;
import org.junit.Test;
import static org.junit.Assert.*;
public class DoubleHeadedValueListAdapterTest {
@Test
public void getView() throws Exception {
}
@Test
public void initViews() throws Exception {
}
}

View File

@@ -0,0 +1,16 @@
package uk.co.syski.client.android.view.adapter;
import org.junit.Test;
import static org.junit.Assert.*;
public class HeadedValueListAdapterTest {
@Test
public void getView() throws Exception {
}
@Test
public void initViews() throws Exception {
}
}

View File

@@ -0,0 +1,16 @@
package uk.co.syski.client.android.view.adapter;
import org.junit.Test;
import static org.junit.Assert.*;
public class RAMAdapterTest {
@Test
public void getView() throws Exception {
}
@Test
public void formatBytes() throws Exception {
}
}

View File

@@ -0,0 +1,16 @@
package uk.co.syski.client.android.view.adapter;
import org.junit.Test;
import static org.junit.Assert.*;
public class StorageAdapterTest {
@Test
public void getView() throws Exception {
}
@Test
public void formatBytes() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view.fragment;
import org.junit.Test;
import static org.junit.Assert.*;
public class DoubleHeadedValueFragmentTest {
@Test
public void newInstance() throws Exception {
}
@Test
public void onCreateView() throws Exception {
}
@Test
public void onViewCreated() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view.fragment;
import org.junit.Test;
import static org.junit.Assert.*;
public class HeadedValueFragmentTest {
@Test
public void newInstance() throws Exception {
}
@Test
public void onCreateView() throws Exception {
}
@Test
public void onViewCreated() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.view.fragment;
import org.junit.Test;
import static org.junit.Assert.*;
public class OverviewFragmentTest {
@Test
public void newInstance() throws Exception {
}
@Test
public void onCreateView() throws Exception {
}
@Test
public void onViewCreated() throws Exception {
}
}

View File

@@ -0,0 +1,12 @@
package uk.co.syski.client.android.view.graph;
import org.junit.Test;
import static org.junit.Assert.*;
public class VariableCPULoadGraphTest {
@Test
public void onCreate() throws Exception {
}
}

View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="uk.co.syski.client.android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" />
<application
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/syski_sys_icon_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/syski_sys_icon_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".view.activity.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".view.activity.SystemListMenu"
android:label="@string/title_activity_sys_list_menu"
android:parentActivityName=".view.activity.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="uk.co.syski.client.android.view.activity.MainActivity" />
</activity>
<activity
android:name=".view.activity.SettingsActivity"
android:label="@string/title_activity_settings"
android:parentActivityName=".view.activity.SystemListMenu"
android:screenOrientation="portrait" />
<activity
android:name=".view.activity.SystemOverviewActivity"
android:label="@string/sys_overview_lbl"
android:parentActivityName=".view.activity.SystemListMenu"
android:screenOrientation="portrait" />
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="fullSensor"
tools:replace="screenOrientation" />
<activity
android:name=".view.activity.CPUActivity"
android:label="@string/sys_cpu_lbl"
android:parentActivityName=".view.activity.SystemOverviewActivity"
android:screenOrientation="portrait" />
<activity
android:name=".view.activity.RAMActivity"
android:label="@string/sys_ram_lbl"
android:parentActivityName=".view.activity.SystemOverviewActivity"
android:screenOrientation="portrait" />
<activity
android:name=".view.activity.SystemStorageActivity"
android:label="@string/sys_stg_lbl"
android:parentActivityName=".view.activity.SystemOverviewActivity"
android:screenOrientation="portrait" />
<activity
android:name=".view.activity.GPUActivity"
android:label="@string/sys_gpu_lbl"
android:parentActivityName=".view.activity.SystemOverviewActivity"
android:screenOrientation="portrait" />
<activity
android:name=".view.activity.MOBOActivity"
android:label="@string/sys_mobo_lbl"
android:parentActivityName=".view.activity.SystemOverviewActivity"
android:screenOrientation="portrait" />
<activity
android:name=".view.activity.SystemOSActivity"
android:label="@string/sys_os_lbl"
android:parentActivityName=".view.activity.SystemOverviewActivity"
android:screenOrientation="portrait" />
<activity
android:name=".view.graph.VariableCPULoadGraph"
android:label="CPU Load"
android:parentActivityName=".view.activity.CPUActivity" />
<activity
android:name=".view.graph.VariableStorageTimeGraph"
android:label="Storage Time"
android:parentActivityName=".view.activity.SystemStorageActivity" />
<activity android:name=".view.graph.VariableNetworkGraph" />
<activity
android:name=".view.graph.VariableCPUProcessesGraph"
android:label="CPU Processes"
android:parentActivityName=".view.activity.CPUActivity" />
<activity
android:name=".view.graph.VariableRAMGraph"
android:label="Free RAM"
android:parentActivityName=".view.activity.RAMActivity" />
<activity
android:name=".view.graph.VariableStorageTransfersGraph"
android:label="Storage Transfers"
android:parentActivityName=".view.activity.SystemStorageActivity" />
<activity
android:name=".view.graph.VariableStorageReadWriteGraph"
android:label="Storage Reads and Writes"
android:parentActivityName=".view.activity.SystemStorageActivity" />
<activity
android:name=".view.graph.VariableStorageByteReadWriteGraph"
android:label="Storage Byte Reads and Writes"
android:parentActivityName=".view.activity.SystemStorageActivity" />
<activity
android:name=".view.activity.NFCReceiverActivity"
android:label="@string/nfc_lbl"
android:parentActivityName=".view.activity.SystemListMenu">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<data android:mimeType="text/plain" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<service android:name=".FCM.FCMService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/logo_sys_144" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorPrimary" />
<activity
android:name=".view.activity.BIOSActivity"
android:label="BIOS"
android:parentActivityName=".view.activity.SystemOverviewActivity" />
<activity
android:name=".view.activity.ProcessListActivity"
android:label="Processes"
android:parentActivityName=".view.activity.SystemOverviewActivity"
/>
</application>
</manifest>

View File

@@ -0,0 +1,36 @@
package uk.co.syski.client.android.FCM;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
/**
* Service for handling Firebase Cloud Messaging (Notifications) For the App
* Only functions when a message is received from Firebase, which is parsed and handled
*/
public class FCMService extends FirebaseMessagingService {
private static final String TAG = "FCMService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.i(TAG, "Message Received");
//Check Message Payload
if(remoteMessage.getData().size() > 0){
//handle the data message here
}
//get title and the body
String title = remoteMessage.getNotification().getTitle();
Log.i(TAG, "Title: "+title);
String body = remoteMessage.getNotification().getBody();
Log.i(TAG, "Body: "+body);
// build notification
NotifManager.getInstance(this).displayNotification(title,body);
}
}

View File

@@ -0,0 +1,59 @@
package uk.co.syski.client.android.FCM;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import uk.co.syski.client.android.R;
import uk.co.syski.client.android.view.activity.MainActivity;
import static android.content.Context.NOTIFICATION_SERVICE;
/**
* Used to manage Notifications for the app, allowing notifications to be displayed
*/
public class NotifManager {
private static final String TAG = "NotifManager";
private Context mContext;
private static NotifManager mInstance;
private NotifManager(Context context) {
mContext = context;
}
public static synchronized NotifManager getInstance(Context context) {
if (mInstance == null) {
mInstance = new NotifManager(context);
}
return mInstance;
}
/**
* Used to display a notification while the application is running
* @param title the title of the notification, appearing on the notification bar
* @param body the body (main text) of the notification
*/
public void displayNotification(String title, String body) {
Log.i(TAG, "Displaying Notification: " +title);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(mContext, "syskinotif")
.setSmallIcon(R.drawable.logo_sys_144)
.setContentTitle(title)
.setContentText(body);
Intent resultIntent = new Intent(mContext, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pendingIntent);
NotificationManager mNotifyMgr =
(NotificationManager) mContext.getSystemService(NOTIFICATION_SERVICE);
if (mNotifyMgr != null) {
mNotifyMgr.notify(1, mBuilder.build());
}
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.model.api;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import uk.co.syski.client.android.R;
public class APIPaths
{
public static String getURL(Context context)
{
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
String api_url = sp.getString("pref_api_url", context.getString(R.string.pref_api_url_default));
String api_port = sp.getString("pref_api_port", context.getString(R.string.pref_api_port_default));
String api_path = sp.getString("pref_api_path", context.getString(R.string.pref_api_path_default));
return "https://" + api_url + ":" + api_port + api_path;
}
}

View File

@@ -0,0 +1,38 @@
package uk.co.syski.client.android.model.api;
import android.content.Context;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
public class VolleySingleton {
private static VolleySingleton mInstance;
private RequestQueue mRequestQueue;
private static Context mCtx;
private VolleySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
}
public static synchronized VolleySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new VolleySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
}

View File

@@ -0,0 +1,7 @@
/**
* Contains all of the classes for API communication
* <p>
* Including API requests and <i>Volley</i>
* </p>
*/
package uk.co.syski.client.android.model.api;

View File

@@ -0,0 +1,30 @@
package uk.co.syski.client.android.model.api.requests;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import java.util.HashMap;
import java.util.Map;
import uk.co.syski.client.android.model.repository.Repository;
public class APIAuthorizationRequest<T> extends APIRequest<T> {
private Context mContext;
public APIAuthorizationRequest(Context context, int method, String url, @Nullable String requestBody, Response.Listener<T> listener, @Nullable Response.ErrorListener errorListener) {
super(context, method, url, requestBody, listener, errorListener);
mContext = context;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "Bearer " + Repository.getInstance().getUserRepository().getUser().AccessToken);
return params;
}
}

View File

@@ -0,0 +1,23 @@
package uk.co.syski.client.android.model.api.requests;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.NetworkResponse;
import com.android.volley.Response;
import com.android.volley.toolbox.JsonRequest;
import uk.co.syski.client.android.model.api.APIPaths;
public class APIRequest<T> extends JsonRequest<T> {
public APIRequest(Context context, int method, String url, @Nullable String requestBody, Response.Listener<T> listener, @Nullable Response.ErrorListener errorListener) {
super(method, APIPaths.getURL(context) + url, requestBody, listener, errorListener);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
return null;
}
}

View File

@@ -0,0 +1,77 @@
package uk.co.syski.client.android.model.api.requests.auth;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.UUID;
import uk.co.syski.client.android.R;
import uk.co.syski.client.android.model.api.requests.APIRequest;
import uk.co.syski.client.android.model.database.entity.UserEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APILoginRequest extends APIRequest<JSONObject> {
private String mEmail;
private String mPassword;
private Context mContext;
public APILoginRequest(Context context, String email, String password, Response.Listener<JSONObject> listener, @Nullable Response.ErrorListener errorListener) {
super(context, Method.POST, "auth/user/login", null, listener, errorListener);
mContext = context;
mEmail = email;
mPassword = password;
}
@Override
public byte[] getBody() {
try {
JSONObject jsonBody = null;
try {
jsonBody = new JSONObject();
jsonBody.put("email", mEmail);
jsonBody.put("password", mPassword);
} catch (JSONException e) {
e.printStackTrace();
}
String requestBody = jsonBody.toString();
return requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
return null;
}
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
JSONObject jsonObject = new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
UserEntity userEntity = new UserEntity();
userEntity.Id = UUID.fromString(jsonObject.getString("id"));
userEntity.Email = jsonObject.getString("email");
userEntity.AccessToken = jsonObject.getString("access_token");
userEntity.RefreshToken = jsonObject.getString("refresh_token");
userEntity.TokenExpiry = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ").parse(jsonObject.getString("expiry"));
Repository.getInstance().getUserRepository().insert(userEntity);
Repository.getInstance().getUserRepository().setActiveUserId(userEntity.Id);
mContext.getSharedPreferences(mContext.getString(R.string.preference_usrID_key), Context.MODE_PRIVATE).edit().putString(mContext.getString(R.string.preference_usrID_key), userEntity.Id.toString()).apply();
return Response.success(jsonObject, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
} catch (ParseException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,78 @@
package uk.co.syski.client.android.model.api.requests.auth;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.UUID;
import uk.co.syski.client.android.R;
import uk.co.syski.client.android.model.api.requests.APIRequest;
import uk.co.syski.client.android.model.database.entity.UserEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APIRegisterRequest extends APIRequest<JSONObject> {
private String mEmail;
private String mPassword;
private Context mContext;
public APIRegisterRequest(Context context, String email, String password, Response.Listener<JSONObject> listener, @Nullable Response.ErrorListener errorListener) {
super(context, Method.POST, "auth/user/register", null, listener, errorListener);
mContext = context;
mEmail = email;
mPassword = password;
}
@Override
public byte[] getBody() {
try {
JSONObject jsonBody = null;
try {
jsonBody = new JSONObject();
jsonBody.put("email", mEmail);
jsonBody.put("password", mPassword);
} catch (JSONException e) {
e.printStackTrace();
}
String requestBody = jsonBody.toString();
return requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
return null;
}
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
JSONObject jsonObject = new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
UserEntity userEntity = new UserEntity();
userEntity.Id = UUID.fromString(jsonObject.getString("id"));
userEntity.Email = jsonObject.getString("email");
userEntity.AccessToken = jsonObject.getString("access_token");
userEntity.RefreshToken = jsonObject.getString("refresh_token");
userEntity.TokenExpiry = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ").parse(jsonObject.getString("expiry"));
Repository.getInstance().getUserRepository().insert(userEntity);
Repository.getInstance().getUserRepository().setActiveUserId(userEntity.Id);
mContext.getSharedPreferences(mContext.getString(R.string.preference_usrID_key), Context.MODE_PRIVATE).edit().putString(mContext.getString(R.string.preference_usrID_key), userEntity.Id.toString()).apply();
return Response.success(jsonObject, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
} catch (ParseException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,78 @@
package uk.co.syski.client.android.model.api.requests.auth;
import android.content.Context;
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIRequest;
import uk.co.syski.client.android.model.database.entity.UserEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APITokenRequest extends APIRequest<JSONObject> {
private UUID mUUID;
public APITokenRequest(Context context, UUID userId) {
super(context, Method.POST, "auth/user/token/refresh", null, null, null);
mUUID = userId;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
//params.put("User-Agent", "Syski APP");
params.put("Authorization", "Bearer " + Repository.getInstance().getUserRepository().getUser().AccessToken);
return params;
}
@Override
public byte[] getBody() {
try {
JSONObject jsonBody = null;
try {
jsonBody = new JSONObject();
jsonBody.put("refresh_token", Repository.getInstance().getUserRepository().getUser().RefreshToken);
} catch (JSONException e) {
e.printStackTrace();
}
String requestBody = jsonBody.toString();
return requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
return null;
}
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
JSONObject jsonObject = new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
UserEntity userEntity = Repository.getInstance().getUserRepository().getUser();
userEntity.AccessToken = jsonObject.getString("access_token");
userEntity.RefreshToken = jsonObject.getString("refresh_token");
userEntity.TokenExpiry = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ").parse(jsonObject.getString("expiry"));
Repository.getInstance().getUserRepository().update(userEntity);
return Response.success(jsonObject, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
} catch (ParseException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,60 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
import uk.co.syski.client.android.model.database.entity.BIOSEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemBIOSEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APISystemBIOSRequest extends APIAuthorizationRequest<JSONArray> {
private UUID mSystemId;
public APISystemBIOSRequest(Context context, UUID systemId) {
super(context, Method.GET, "system/" + systemId.toString() + "/bios", null, null, null);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONObject jsonObject = new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
BIOSEntity biosEntity = Repository.getInstance().getBIOSRepository().getBIOS(UUID.fromString(jsonObject.getString("id")));
if (biosEntity == null) {
biosEntity = new BIOSEntity();
}
biosEntity.Id = UUID.fromString(jsonObject.getString("id"));
biosEntity.ManufacturerName = jsonObject.getString("manufacturerName");
biosEntity.Caption = jsonObject.getString("caption");
biosEntity.Version = jsonObject.getString("version");
biosEntity.Date = jsonObject.getString("date");
SystemBIOSEntity systemBIOSEntity = new SystemBIOSEntity();
systemBIOSEntity.SystemId = mSystemId;
systemBIOSEntity.BIOSId = biosEntity.Id;
Repository.getInstance().getBIOSRepository().upsert(mSystemId, systemBIOSEntity, biosEntity);
return Response.success(jsonObject, HttpHeaderParser.parseCacheHeaders(response));
} catch (JSONException | UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,39 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemCPUDataRequest extends APIAuthorizationRequest<JSONArray>
{
private UUID mSystemId;
public APISystemCPUDataRequest(Context context, UUID systemId, Response.Listener<JSONArray> listener, @Nullable Response.ErrorListener errorListener) {
super(context, Method.GET, "system/" + systemId.toString() + "/cpu/data", null, listener, errorListener);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,77 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
import uk.co.syski.client.android.model.database.entity.CPUEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemCPUEntity;
import uk.co.syski.client.android.model.repository.CPURepository;
import uk.co.syski.client.android.model.repository.Repository;
public class APISystemCPURequest extends APIAuthorizationRequest<JSONArray> {
private UUID mSystemId;
private CPURepository mCPURepository;
public APISystemCPURequest(Context context, UUID systemId) {
super(context, Method.GET, "system/" + systemId.toString() + "/cpu", null, null, null);
mSystemId = systemId;
mCPURepository = Repository.getInstance().getCPURepository();
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
List<CPUEntity> newCPUEntities = new LinkedList<>();
List<SystemCPUEntity> newSystemCPUEntities = new LinkedList<>();
for (int i = 0; i < jsonArray.length(); i++) {
// Load from Database
//CPUEntity cpuEntity = SyskiCache.GetDatabase().CPUDao().get());
// Load from Repository (Using Cache)
CPUEntity cpuEntity = Repository.getInstance().getCPURepository().getCPU(UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id")));
if (cpuEntity == null)
{
cpuEntity = new CPUEntity();
}
cpuEntity.Id = UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id"));
cpuEntity.ManufacturerName = ((JSONObject) jsonArray.get(i)).getString("manufacturerName");
cpuEntity.ModelName = ((JSONObject) jsonArray.get(i)).getString("modelName");
cpuEntity.ArchitectureName = ((JSONObject) jsonArray.get(i)).getString("architectureName");
cpuEntity.ClockSpeed = (int) Double.parseDouble(((JSONObject) jsonArray.get(i)).getString("clockSpeed"));
cpuEntity.CoreCount = (int) Double.parseDouble(((JSONObject) jsonArray.get(i)).getString("coreCount"));
cpuEntity.ThreadCount = (int) Double.parseDouble(((JSONObject) jsonArray.get(i)).getString("threadCount"));
newCPUEntities.add(cpuEntity);
SystemCPUEntity systemCPUEntity = new SystemCPUEntity();
systemCPUEntity.SystemId = mSystemId;
systemCPUEntity.CPUId = cpuEntity.Id;
newSystemCPUEntities.add(systemCPUEntity);
}
Repository.getInstance().getCPURepository().upsert(mSystemId, newSystemCPUEntities, newCPUEntities);
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,69 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
import uk.co.syski.client.android.model.database.entity.GPUEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemGPUEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APISystemGPURequest extends APIAuthorizationRequest<JSONArray> {
private UUID mSystemId;
public APISystemGPURequest(Context context, UUID systemId) {
super(context, Method.GET, "system/" + systemId.toString() + "/gpu", null, null, null);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
List<GPUEntity> newGPUEntities = new LinkedList<>();
List<SystemGPUEntity> newSystemGPUEntities = new LinkedList<>();
for (int i = 0; i < jsonArray.length(); i++) {
// Load from Database
//GPUEntity gpuEntity = SyskiCache.GetDatabase().GPUDao().get());
// Load from Repository (Using Cache)
GPUEntity gpuEntity = Repository.getInstance().getGPURepository().getGPU(UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id")));
if (gpuEntity == null) {
gpuEntity = new GPUEntity();
}
gpuEntity.Id = UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id"));
gpuEntity.ManufacturerName = ((JSONObject) jsonArray.get(i)).getString("manufacturerName");
gpuEntity.ModelName = ((JSONObject) jsonArray.get(i)).getString("modelName");
newGPUEntities.add(gpuEntity);
SystemGPUEntity systemGPUEntity = new SystemGPUEntity();
systemGPUEntity.SystemId = mSystemId;
systemGPUEntity.GPUId = gpuEntity.Id;
newSystemGPUEntities.add(systemGPUEntity);
}
Repository.getInstance().getGPURepository().upsert(mSystemId, newSystemGPUEntities, newGPUEntities);
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,54 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemKillProcess extends APIAuthorizationRequest<JSONObject> {
private int processId;
public APISystemKillProcess(Context context, UUID systemId, int processId){
super(context,Method.POST,"system/"+systemId+"/processes/kill",null,null,null);
this.processId = processId;
}
@Override
public byte[] getBody() {
try {
JSONObject jsonBody = null;
try {
jsonBody = new JSONObject();
jsonBody.put("id", processId);
} catch (JSONException e) {
e.printStackTrace();
}
String requestBody = jsonBody.toString();
return requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
return null;
}
}
@Override
protected Response parseNetworkResponse(NetworkResponse response){
try{
JSONObject jsonArray=new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers,PROTOCOL_CHARSET)));
return Response.success(jsonArray,HttpHeaderParser.parseCacheHeaders(response));
}catch(UnsupportedEncodingException |JSONException e){
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,57 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
import uk.co.syski.client.android.model.database.entity.MotherboardEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemMotherboardEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APISystemMotherboardRequest extends APIAuthorizationRequest<JSONObject> {
private UUID mSystemId;
public APISystemMotherboardRequest(Context context, UUID systemId) {
super(context, Method.GET, "system/" + systemId.toString() + "/motherboard", null, null, null);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONObject jsonObject = new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
//MotherboardEntity motherboardEntity = SyskiCache.GetDatabase().MotherboardDao().get(UUID.fromString(jsonObject.getString("id")));
MotherboardEntity motherboardEntity = Repository.getInstance().getMOBORepository().getMotherboard(UUID.fromString(jsonObject.getString("id")));
if (motherboardEntity == null) {
motherboardEntity = new MotherboardEntity();
}
motherboardEntity.Id = UUID.fromString(jsonObject.getString("id"));
motherboardEntity.ManufacturerName = jsonObject.getString("manufacturerName");
motherboardEntity.ModelName = jsonObject.getString("modelName");
motherboardEntity.Version = jsonObject.getString("version");
SystemMotherboardEntity systemMotherboardEntity = new SystemMotherboardEntity();
systemMotherboardEntity.SystemId = mSystemId;
systemMotherboardEntity.MotherboardId = motherboardEntity.Id;
Repository.getInstance().getMOBORepository().upsert(mSystemId, systemMotherboardEntity, motherboardEntity);
return Response.success(jsonObject, HttpHeaderParser.parseCacheHeaders(response));
} catch (JSONException | UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,66 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
import uk.co.syski.client.android.model.database.entity.OperatingSystemEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemOSEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APISystemOperatingSystemRequest extends APIAuthorizationRequest<JSONArray> {
private UUID mSystemId;
public APISystemOperatingSystemRequest(Context context, UUID systemId) {
super(context, Method.GET, "system/" + systemId.toString() + "/operatingsystem", null, null, null);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
List<OperatingSystemEntity> newOSEntities = new LinkedList<>();
List<SystemOSEntity> newSystemOSEntities = new LinkedList<>();
for (int i = 0; i < jsonArray.length(); i++) {
//OperatingSystemEntity osEntity = SyskiCache.GetDatabase().OperatingSystemDao().GetOperatingSystems(UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id")));
OperatingSystemEntity osEntity = Repository.getInstance().getOSRepository().getOS(mSystemId);
if (osEntity == null) {
osEntity = new OperatingSystemEntity();
}
osEntity.Id = UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id"));
osEntity.Name = ((JSONObject) jsonArray.get(i)).getString("name");
newOSEntities.add(osEntity);
SystemOSEntity systemOSEntity = new SystemOSEntity();
systemOSEntity.SystemId = mSystemId;
systemOSEntity.OSId = osEntity.Id;
systemOSEntity.ArchitectureName = ((JSONObject) jsonArray.get(i)).getString("architectureName");
systemOSEntity.Version = ((JSONObject) jsonArray.get(i)).getString("version");
newSystemOSEntities.add(systemOSEntity);
}
Repository.getInstance().getOSRepository().upsert(mSystemId, newSystemOSEntities, newOSEntities);
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,39 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemPingRequest extends APIAuthorizationRequest<JSONObject> {
private UUID mSystemId;
public APISystemPingRequest(Context context, UUID systemId, Response.Listener<JSONObject> listener, @Nullable Response.ErrorListener errorListener) {
super(context, Method.GET, "system/" + systemId.toString() + "/ping", null, listener, errorListener);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONObject jsonArray = new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,39 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemProcessDataRequest extends APIAuthorizationRequest<JSONArray>
{
private UUID mSystemId;
public APISystemProcessDataRequest(Context context, UUID systemId, Response.Listener<JSONArray> listener, @Nullable Response.ErrorListener errorListener) {
super(context, Method.GET, "system/" + systemId.toString() + "/processes", null, listener, errorListener);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,39 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemRAMDataRequest extends APIAuthorizationRequest<JSONArray>
{
private UUID mSystemId;
public APISystemRAMDataRequest(Context context, UUID systemId, Response.Listener<JSONArray> listener, @Nullable Response.ErrorListener errorListener) {
super(context, Method.GET, "system/" + systemId.toString() + "/ram/data", null, listener, errorListener);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,73 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
import uk.co.syski.client.android.model.database.entity.RAMEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemRAMEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APISystemRAMRequest extends APIAuthorizationRequest<JSONArray> {
private UUID mSystemId;
public APISystemRAMRequest(Context context, UUID systemId) {
super(context, Method.GET, "system/" + systemId.toString() + "/ram", null, null, null);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
List<RAMEntity> newRAMEntities = new LinkedList<>();
List<SystemRAMEntity> newSystemRAMEntities = new LinkedList<>();
for (int i = 0; i < jsonArray.length(); i++) {
// Load from Database
//RAMEntity ramEntity = SyskiCache.GetDatabase().RAMDao().GetRAM(UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id")));
// Load from Repository (Using Cache)
RAMEntity ramEntity = Repository.getInstance().getRAMRepository().get(UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id")));
if (ramEntity == null) {
ramEntity = new RAMEntity();
}
ramEntity.Id = UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id"));
ramEntity.ManufacturerName = ((JSONObject) jsonArray.get(i)).getString("manufacturerName");
ramEntity.ModelName = ((JSONObject) jsonArray.get(i)).getString("modelName");
ramEntity.MemoryBytes = Long.parseLong(((JSONObject) jsonArray.get(i)).getString("memoryBytes"));
newRAMEntities.add(ramEntity);
SystemRAMEntity systemRAMEntity = new SystemRAMEntity();
systemRAMEntity.SystemId = mSystemId;
systemRAMEntity.RAMId = ramEntity.Id;
systemRAMEntity.DimmSlot = i;
newSystemRAMEntities.add(systemRAMEntity);
}
Repository.getInstance().getRAMRepository().upsert(mSystemId, newSystemRAMEntities, newRAMEntities);
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,34 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import android.util.Log;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemRemove extends APIAuthorizationRequest<JSONObject> {
public APISystemRemove(Context context, UUID systemId) {
super(context, Method.POST, "system/" + systemId + "/remove", null, null, null);
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONObject jsonArray = new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,34 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import android.util.Log;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemRestartRequest extends APIAuthorizationRequest<JSONArray> {
public APISystemRestartRequest(Context context, UUID systemId) {
super(context, Method.POST, "system/" + systemId + "/restart", null, null, null);
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
if (response.statusCode == 200) {
Log.v("Syski_Restart", "Status Worked!");
return Response.success(null, HttpHeaderParser.parseCacheHeaders(response));
} else {
Log.v("Syski_Restart", "Status Didn't Worked!");
}
return Response.error(new ParseError());
}
}

View File

@@ -0,0 +1,33 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import android.util.Log;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemShutdownRequest extends APIAuthorizationRequest<JSONArray> {
public APISystemShutdownRequest(Context context, UUID systemId) {
super(context, Method.POST, "system/" + systemId + "/shutdown", null, null, null);
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
if (response.statusCode == 200) {
Log.v("Syski_Shutdown", "Status Worked!");
return Response.success(null, HttpHeaderParser.parseCacheHeaders(response));
} else {
Log.v("Syski_Shutdown", "Status Didn't Worked!");
}
return Response.error(new ParseError());
}
}

View File

@@ -0,0 +1,39 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import android.support.annotation.Nullable;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
public class APISystemStorageDataRequest extends APIAuthorizationRequest<JSONArray>
{
private UUID mSystemId;
public APISystemStorageDataRequest(Context context, UUID systemId, Response.Listener<JSONArray> listener, @Nullable Response.ErrorListener errorListener) {
super(context, Method.GET, "system/" + systemId.toString() + "/storage/data", null, listener, errorListener);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,69 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
import uk.co.syski.client.android.model.database.entity.StorageEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemStorageEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APISystemStorageRequest extends APIAuthorizationRequest<JSONArray> {
private UUID mSystemId;
public APISystemStorageRequest(Context context, UUID systemId) {
super(context, Method.GET, "system/" + systemId.toString() + "/storage", null, null, null);
mSystemId = systemId;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
List<StorageEntity> newStorageEntities = new LinkedList<>();
List<SystemStorageEntity> newSystemStorageEntities = new LinkedList<>();
for (int i = 0; i < jsonArray.length(); i++) {
//StorageEntity storageEntity = SyskiCache.GetDatabase().StorageDao().get());
StorageEntity storageEntity = Repository.getInstance().getStorageRepository().get(UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id")));
if (storageEntity == null) {
storageEntity = new StorageEntity();
}
storageEntity.Id = UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id"));
storageEntity.ManufacturerName = ((JSONObject) jsonArray.get(i)).getString("manufacturerName");
storageEntity.ModelName = ((JSONObject) jsonArray.get(i)).getString("modelName");
storageEntity.MemoryTypeName = ((JSONObject) jsonArray.get(i)).getString("memoryTypeName");
storageEntity.MemoryBytes = Long.parseLong(((JSONObject) jsonArray.get(i)).getString("memoryBytes"));
newStorageEntities.add(storageEntity);
SystemStorageEntity systemStorageEntity = new SystemStorageEntity();
systemStorageEntity.SystemId = mSystemId;
systemStorageEntity.StorageId = storageEntity.Id;
systemStorageEntity.Slot = i;
newSystemStorageEntities.add(systemStorageEntity);
}
Repository.getInstance().getStorageRepository().upsert(mSystemId, newSystemStorageEntities, newStorageEntities);
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,62 @@
package uk.co.syski.client.android.model.api.requests.system;
import android.content.Context;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.UUID;
import uk.co.syski.client.android.model.api.requests.APIAuthorizationRequest;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import uk.co.syski.client.android.model.repository.Repository;
public class APISystemsRequest extends APIAuthorizationRequest<JSONArray> {
public APISystemsRequest(Context context) {
super(context, Method.GET, "system/all", null, null, null);
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
JSONArray jsonArray = new JSONArray(new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)));
for (int i = 0; i < jsonArray.length(); i++) {
// Load from Database
//SystemEntity systemEntity = SyskiCache.GetDatabase().SystemDao().get(UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id")));
// Load from Repository (Using Cache)
SystemEntity systemEntity = Repository.getInstance().getSystemRepository().get(UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id")));
if (systemEntity == null)
{
systemEntity = new SystemEntity();
}
systemEntity.Id = UUID.fromString(((JSONObject) jsonArray.get(i)).getString("id"));
systemEntity.HostName = ((JSONObject) jsonArray.get(i)).getString("hostName");
systemEntity.ModelName = ((JSONObject) jsonArray.get(i)).getString("modelName");
systemEntity.ManufacturerName = ((JSONObject) jsonArray.get(i)).getString("manufacturerName");
systemEntity.LastUpdated = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS").parse(((JSONObject) jsonArray.get(i)).getString("lastUpdated"));
Repository.getInstance().getSystemRepository().upsert(systemEntity);
}
return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
} catch (ParseException e) {
return Response.error(new ParseError(e));
}
}
}

View File

@@ -0,0 +1,88 @@
package uk.co.syski.client.android.model.database;
import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;
import android.arch.persistence.room.TypeConverters;
import uk.co.syski.client.android.model.database.dao.BIOSDao;
import uk.co.syski.client.android.model.database.dao.CPUDao;
import uk.co.syski.client.android.model.database.dao.GPUDao;
import uk.co.syski.client.android.model.database.dao.MotherboardDao;
import uk.co.syski.client.android.model.database.dao.OperatingSystemDao;
import uk.co.syski.client.android.model.database.dao.RAMDao;
import uk.co.syski.client.android.model.database.dao.StorageDao;
import uk.co.syski.client.android.model.database.dao.SystemDao;
import uk.co.syski.client.android.model.database.dao.TypeDao;
import uk.co.syski.client.android.model.database.dao.UserDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemBIOSDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemCPUDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemGPUDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemMotherboardDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemOSDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemRAMDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemStorageDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemTypeDao;
import uk.co.syski.client.android.model.database.entity.BIOSEntity;
import uk.co.syski.client.android.model.database.entity.CPUEntity;
import uk.co.syski.client.android.model.database.entity.GPUEntity;
import uk.co.syski.client.android.model.database.entity.MotherboardEntity;
import uk.co.syski.client.android.model.database.entity.OperatingSystemEntity;
import uk.co.syski.client.android.model.database.entity.RAMEntity;
import uk.co.syski.client.android.model.database.entity.StorageEntity;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import uk.co.syski.client.android.model.database.entity.TypeEntity;
import uk.co.syski.client.android.model.database.entity.UserEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemBIOSEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemCPUEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemGPUEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemMotherboardEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemOSEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemRAMEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemStorageEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemTypeEntity;
@Database(
entities = {
UserEntity.class,
SystemEntity.class,
SystemTypeEntity.class,
TypeEntity.class,
CPUEntity.class,
SystemCPUEntity.class,
OperatingSystemEntity.class,
SystemOSEntity.class,
RAMEntity.class,
SystemRAMEntity.class,
GPUEntity.class,
SystemGPUEntity.class,
StorageEntity.class,
SystemStorageEntity.class,
MotherboardEntity.class,
SystemMotherboardEntity.class,
BIOSEntity.class,
SystemBIOSEntity.class
},
version = 1
)
@TypeConverters({Converters.class})
public abstract class CacheDatabase extends RoomDatabase {
public abstract UserDao UserDao();
public abstract SystemDao SystemDao();
public abstract SystemTypeDao SystemTypeDao();
public abstract TypeDao TypeDao();
public abstract CPUDao CPUDao();
public abstract SystemCPUDao SystemCPUDao();
public abstract OperatingSystemDao OperatingSystemDao();
public abstract SystemOSDao SystemOSDao();
public abstract RAMDao RAMDao();
public abstract SystemRAMDao SystemRAMDao();
public abstract GPUDao GPUDao();
public abstract SystemGPUDao SystemGPUDao();
public abstract StorageDao StorageDao();
public abstract SystemStorageDao SystemStorageDao();
public abstract MotherboardDao MotherboardDao();
public abstract SystemMotherboardDao SystemMotherboardDao();
public abstract BIOSDao BIOSDao();
public abstract SystemBIOSDao SystemBIOSDao();
}

View File

@@ -0,0 +1,28 @@
package uk.co.syski.client.android.model.database;
import android.arch.persistence.room.TypeConverter;
import java.util.Date;
import java.util.UUID;
public class Converters {
@TypeConverter
public static Date LongToDate(Long Long) {
return Long == null ? null : new Date(Long);
}
@TypeConverter
public static Long DateToLong(Date Date) {
return Date == null ? null : Date.getTime();
}
@TypeConverter
public static String UUIDToString(UUID Id) {
return Id == null ? null : Id.toString();
}
@TypeConverter
public static UUID StringToUUID(String String) {
return String == null ? null : UUID.fromString(String);
}
}

View File

@@ -0,0 +1,24 @@
package uk.co.syski.client.android.model.database;
import android.arch.persistence.room.Room;
import android.content.Context;
public class SyskiCache {
private SyskiCache() {
}
private static CacheDatabase Database;
/**
* Only works if the Database does not yet exist.
*/
public static void BuildDatabase(Context Context) {
if (Database == null)
Database = Room.databaseBuilder(Context, CacheDatabase.class, "SyskiCache.db").build();
}
public static CacheDatabase GetDatabase() {
return Database;
}
}

View File

@@ -0,0 +1,58 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import android.database.sqlite.SQLiteConstraintException;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.BIOSEntity;
import uk.co.syski.client.android.model.database.entity.CPUEntity;
@Dao
public abstract class BIOSDao {
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(BIOSEntity biosEntity);
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(BIOSEntity... biosEntities);
@Query("SELECT * FROM BIOSEntity")
public abstract List<BIOSEntity> get();
@Query("SELECT * FROM BIOSEntity WHERE Id == :Id")
public abstract BIOSEntity get(UUID Id);
@Query("SELECT * FROM BIOSEntity WHERE Id in (:Ids)")
public abstract List<BIOSEntity> get(UUID... Ids);
@Query("SELECT * FROM BIOSEntity INNER JOIN SystemBIOSEntity ON Id = BIOSId WHERE SystemId IN (:Ids)")
public abstract List<BIOSEntity> getSystemBIOSs(UUID... Ids);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update(BIOSEntity biosEntity);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update(BIOSEntity... biosEntities);
@Delete
public abstract void delete(BIOSEntity biosEntity);
@Delete
public abstract void delete(BIOSEntity... biosEntities);
public void upsert(BIOSEntity biosEntity) {
try {
insert(biosEntity);
} catch (SQLiteConstraintException exception) {
update(biosEntity);
}
}
}

View File

@@ -0,0 +1,57 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import android.database.sqlite.SQLiteConstraintException;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.CPUEntity;
@Dao
public abstract class CPUDao {
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(CPUEntity cpuEntity);
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(CPUEntity... cpuEntities);
@Query("SELECT * FROM CPUEntity")
public abstract List<CPUEntity> get();
@Query("SELECT * FROM CPUEntity WHERE Id == :Id")
public abstract CPUEntity get(UUID Id);
@Query("SELECT * FROM CPUEntity WHERE Id in (:Ids)")
public abstract List<CPUEntity> get(UUID... Ids);
@Query("SELECT * FROM CPUEntity INNER JOIN SystemCPUEntity ON Id = CPUId WHERE SystemId IN (:Ids)")
public abstract List<CPUEntity> getSystemCPUs(UUID... Ids);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update(CPUEntity cpuEntity);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update(CPUEntity... cpuEntities);
@Delete
public abstract void delete(CPUEntity cpuEntity);
@Delete
public abstract void delete(CPUEntity... cpuEntities);
public void upsert(CPUEntity cpuEntitiy) {
try {
insert(cpuEntitiy);
} catch (SQLiteConstraintException exception) {
update(cpuEntitiy);
}
}
}

View File

@@ -0,0 +1,53 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import android.database.sqlite.SQLiteConstraintException;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.GPUEntity;
@Dao
public abstract class GPUDao {
@Insert
public abstract void insert(GPUEntity gpuEntity);
@Insert
public abstract void insert(GPUEntity... gpuEntities);
@Query("SELECT * FROM GPUEntity INNER JOIN SystemGPUEntity ON Id = GPUId WHERE SystemId IN (:Ids)")
public abstract List<GPUEntity> getSystemGPUs(UUID... Ids);
@Query("SELECT * FROM GPUEntity")
public abstract List<GPUEntity> get();
@Query("SELECT * FROM GPUEntity WHERE Id == :Id")
public abstract GPUEntity get(UUID Id);
@Update
public abstract void update (GPUEntity gpuEntity);
@Update
public abstract void update (GPUEntity... gpuEntities);
@Delete
public abstract void delete(GPUEntity gpuEntity);
@Delete
public abstract void delete(GPUEntity... gpuEntities);
public void upsert(GPUEntity gpuEntity) {
try {
insert(gpuEntity);
} catch (SQLiteConstraintException exception) {
update(gpuEntity);
}
}
}

View File

@@ -0,0 +1,57 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import android.database.sqlite.SQLiteConstraintException;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.MotherboardEntity;
@Dao
public abstract class MotherboardDao {
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(MotherboardEntity motherboardEntitiy);
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(MotherboardEntity... motherboardEntities);
@Query("SELECT * FROM MotherboardEntity")
public abstract List<MotherboardEntity> get();
@Query("SELECT * FROM MotherboardEntity WHERE Id == :Id")
public abstract MotherboardEntity get(UUID Id);
@Query("SELECT * FROM MotherboardEntity WHERE Id in (:Ids)")
public abstract List<MotherboardEntity> get(UUID... Ids);
@Query("SELECT * FROM MotherboardEntity INNER JOIN SystemMotherboardEntity ON Id = MotherboardId WHERE SystemId IN (:Ids)")
public abstract List<MotherboardEntity> getSystemMotherboards(UUID... Ids);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update(MotherboardEntity motherboardEntities);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update(MotherboardEntity... cpuEntities);
@Delete
public abstract void delete(MotherboardEntity motherboardEntity);
@Delete
public abstract void delete(MotherboardEntity... motherboardEntities);
public void upsert(MotherboardEntity motherboardEntitiy) {
try {
insert(motherboardEntitiy);
} catch (SQLiteConstraintException exception) {
update(motherboardEntitiy);
}
}
}

View File

@@ -0,0 +1,57 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import android.database.sqlite.SQLiteConstraintException;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.OperatingSystemEntity;
@Dao
public abstract class OperatingSystemDao {
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(OperatingSystemEntity osEntity);
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(OperatingSystemEntity... osEntities);
@Query("SELECT * FROM OperatingSystemEntity")
public abstract List<OperatingSystemEntity> get();
@Query("SELECT * FROM OperatingSystemEntity WHERE Id == :Id")
public abstract OperatingSystemEntity get(UUID Id);
@Query("SELECT * FROM OperatingSystemEntity WHERE Id in (:Ids)")
public abstract List<OperatingSystemEntity> get(UUID... Ids);
//@Query("SELECT * FROM OperatingSystemEntity INNER JOIN SystemOSEntity ON Id = OSId WHERE SystemId IN (:Ids)")
//public abstract List<OperatingSystemModel> getSystemOperatingSystems(UUID... Ids);
@Update
public abstract void update (OperatingSystemEntity osEntity);
@Update
public abstract void update (OperatingSystemEntity... osEntities);
@Delete
public abstract void delete(OperatingSystemEntity osEntity);
@Delete
public abstract void delete(OperatingSystemEntity... osEntities);
public void upsert(OperatingSystemEntity osEntity) {
try {
insert(osEntity);
} catch (SQLiteConstraintException exception) {
update(osEntity);
}
}
}

View File

@@ -0,0 +1,47 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import android.database.sqlite.SQLiteConstraintException;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.RAMEntity;
@Dao
public abstract class RAMDao {
@Query("SELECT * FROM RAMEntity WHERE Id == :Id")
public abstract RAMEntity get(UUID Id);
@Query("SELECT * FROM RAMEntity")
public abstract List<RAMEntity> get();
@Query("SELECT Id, ModelName, ManufacturerName, MemoryTypeName, MemoryBytes FROM RAMEntity INNER JOIN SystemRAMEntity ON Id = RAMId WHERE SystemId IN (:Ids)")
public abstract List<RAMEntity> getSystemRAMs(UUID... Ids);
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(RAMEntity... ramEntities);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update (RAMEntity... ramEntities);
@Delete
public abstract void delete(RAMEntity... RAMEntities);
public void upsert(RAMEntity ramEntity) {
try {
insert(ramEntity);
} catch (SQLiteConstraintException exception) {
update(ramEntity);
}
}
}

View File

@@ -0,0 +1,57 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import android.database.sqlite.SQLiteConstraintException;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.StorageEntity;
@Dao
public abstract class StorageDao {
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(StorageEntity storageEntity);
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(StorageEntity... storageEntities);
@Query("SELECT * FROM StorageEntity")
public abstract List<StorageEntity> get();
@Query("SELECT * FROM StorageEntity WHERE Id == :Id")
public abstract StorageEntity get(UUID Id);
@Query("SELECT * FROM StorageEntity WHERE Id in (:Ids)")
public abstract List<StorageEntity> get(UUID... Ids);
@Query("SELECT * FROM StorageEntity INNER JOIN SystemStorageEntity ON Id = StorageId WHERE SystemId IN (:Ids)")
public abstract List<StorageEntity> getSystemStorages(UUID... Ids);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update (StorageEntity storageEntity);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update (StorageEntity... storageEntities);
@Delete
public abstract void delete(StorageEntity storageEntity);
@Delete
public abstract void delete(StorageEntity... storageEntities);
public void upsert(StorageEntity storageEntity) {
try {
insert(storageEntity);
} catch (SQLiteConstraintException exception) {
update(storageEntity);
}
}
}

View File

@@ -0,0 +1,54 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import android.database.sqlite.SQLiteConstraintException;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
@Dao
public abstract class SystemDao {
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(SystemEntity systemEntity);
@Insert(onConflict = OnConflictStrategy.FAIL)
public abstract void insert(SystemEntity... systemEntities);
@Query("SELECT * FROM SystemEntity")
public abstract List<SystemEntity> get();
@Query("SELECT * FROM SystemEntity WHERE Id = :uuid")
public abstract SystemEntity get(UUID uuid);
@Query("SELECT * FROM SystemEntity WHERE Id IN (:Ids)")
public abstract List<SystemEntity> get(UUID... Ids);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update (SystemEntity systemEntity);
@Update(onConflict = OnConflictStrategy.FAIL)
public abstract void update (SystemEntity... systemEntities);
@Delete
public abstract void delete(SystemEntity systemEntity);
@Delete
public abstract void delete(SystemEntity... systemEntities);
public void upsert(SystemEntity systemEntity) {
try {
insert(systemEntity);
} catch (SQLiteConstraintException exception) {
update(systemEntity);
}
}
}

View File

@@ -0,0 +1,20 @@
package uk.co.syski.client.android.model.database.dao;
import java.util.List;
import java.util.UUID;
import android.arch.persistence.room.*;
import uk.co.syski.client.android.model.database.entity.TypeEntity;
@Dao
public interface TypeDao {
@Query("SELECT Name FROM TypeEntity INNER JOIN SystemTypeEntity WHERE SystemId IN (:Ids)")
List<String> getTypeNames(UUID... Ids);
@Insert
void InsertAll(TypeEntity... typeEntities);
@Delete
void DeleteAll(TypeEntity... typeEntities);
}

View File

@@ -0,0 +1,43 @@
package uk.co.syski.client.android.model.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.UserEntity;
@Dao
public interface UserDao {
@Insert
void insert(UserEntity UserEntity);
@Insert
void insert(UserEntity... userEntities);
@Query("SELECT * FROM UserEntity")
List<UserEntity> get();
@Query("SELECT * FROM UserEntity WHERE Id == :Id")
UserEntity get(UUID Id);
@Query("SELECT * FROM UserEntity WHERE Id in (:Ids)")
List<UserEntity> get(UUID... Ids);
@Update
void update (UserEntity UserEntity);
@Update
void update (UserEntity... userEntities);
@Delete
void delete(UserEntity UserEntity);
@Delete
void delete(UserEntity... userEntities);
}

View File

@@ -0,0 +1,41 @@
package uk.co.syski.client.android.model.database.dao.linking;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.linking.SystemBIOSEntity;
@Dao
public interface SystemBIOSDao {
@Insert
void insert(SystemBIOSEntity... systemBIOSEntities);
@Insert
void insert(SystemBIOSEntity systemBIOSEntity);
@Query("SELECT * FROM SystemBIOSEntity")
List<SystemBIOSEntity> get();
@Update
void update(SystemBIOSEntity... systemBIOSEntities);
@Update
void update(SystemBIOSEntity systemBIOSEntity);
@Query("DELETE FROM SystemBIOSEntity WHERE SystemId = :systemId")
void deleteBySystemId(UUID systemId);
@Delete
void delete(SystemBIOSEntity... systemBIOSEntities);
@Delete
void delete(SystemBIOSEntity systemBIOSEntity);
}

View File

@@ -0,0 +1,41 @@
package uk.co.syski.client.android.model.database.dao.linking;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.linking.SystemCPUEntity;
@Dao
public interface SystemCPUDao {
@Insert
void insert(SystemCPUEntity... systemCPUEntities);
@Insert
void insert(SystemCPUEntity systemCPUEntity);
@Query("SELECT * FROM SystemCPUEntity")
List<SystemCPUEntity> get();
@Update
void update(SystemCPUEntity... systemCPUEntities);
@Update
void update(SystemCPUEntity systemCPUEntity);
@Query("DELETE FROM SystemCPUEntity WHERE SystemId = :systemId")
void deleteBySystemId(UUID systemId);
@Delete
void delete(SystemCPUEntity... systemCPUEntities);
@Delete
void delete(SystemCPUEntity systemCPUEntity);
}

View File

@@ -0,0 +1,41 @@
package uk.co.syski.client.android.model.database.dao.linking;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.linking.SystemGPUEntity;
@Dao
public interface SystemGPUDao {
@Insert
void insert(SystemGPUEntity... systemGPUEntities);
@Insert
void insert(SystemGPUEntity systemGPUEntity);
@Query("SELECT * FROM SystemGPUEntity")
List<SystemGPUEntity> get();
@Update
void update(SystemGPUEntity... systemGPUEntities);
@Update
void update(SystemGPUEntity systemGPUEntity);
@Query("DELETE FROM SystemGPUEntity WHERE SystemId = :systemId")
void deleteBySystemId(UUID systemId);
@Delete
void delete(SystemGPUEntity... systemGPUEntities);
@Delete
void delete(SystemGPUEntity systemGPUEntity);
}

View File

@@ -0,0 +1,41 @@
package uk.co.syski.client.android.model.database.dao.linking;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.linking.SystemMotherboardEntity;
@Dao
public interface SystemMotherboardDao {
@Insert
void insert(SystemMotherboardEntity... systemMotherboardEntities);
@Insert
void insert(SystemMotherboardEntity systemMotherboardEntity);
@Query("SELECT * FROM SystemMotherboardEntity")
List<SystemMotherboardEntity> get();
@Update
void update(SystemMotherboardEntity... systemMotherboardEntities);
@Update
void update(SystemMotherboardEntity systemMotherboardEntity);
@Query("DELETE FROM SystemMotherboardEntity WHERE SystemId = :systemId")
void deleteBySystemId(UUID systemId);
@Delete
void delete(SystemMotherboardEntity... systemMotherboardEntities);
@Delete
void delete(SystemMotherboardEntity systemMotherboardEntity);
}

View File

@@ -0,0 +1,41 @@
package uk.co.syski.client.android.model.database.dao.linking;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.linking.SystemOSEntity;
@Dao
public interface SystemOSDao {
@Insert
void insert(SystemOSEntity... systemOSEntities);
@Insert
void insert(SystemOSEntity systemOSEntity);
@Query("SELECT * FROM SystemOSEntity")
List<SystemOSEntity> get();
@Update
void update(SystemOSEntity... systemOSEntities);
@Update
void update(SystemOSEntity systemOSEntity);
@Query("DELETE FROM SystemOSEntity WHERE SystemId = :systemId")
void deleteBySystemId(UUID systemId);
@Delete
void delete(SystemOSEntity... systemOSEntities);
@Delete
void delete(SystemOSEntity systemOSEntity);
}

View File

@@ -0,0 +1,41 @@
package uk.co.syski.client.android.model.database.dao.linking;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.linking.SystemRAMEntity;
@Dao
public interface SystemRAMDao {
@Insert
void insert(SystemRAMEntity... systemRAMEntities);
@Insert
void insert(SystemRAMEntity systemCPUEntity);
@Query("SELECT * FROM SystemRAMEntity")
List<SystemRAMEntity> get();
@Update
void update(SystemRAMEntity... systemRAMEntities);
@Update
void update(SystemRAMEntity systemRAMEntity);
@Query("DELETE FROM SystemRAMEntity WHERE SystemId = :systemId")
void deleteBySystemId(UUID systemId);
@Delete
void delete(SystemRAMEntity... systemRAMEntities);
@Delete
void delete(SystemRAMEntity systemRAMEntity);
}

View File

@@ -0,0 +1,41 @@
package uk.co.syski.client.android.model.database.dao.linking;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.linking.SystemStorageEntity;
@Dao
public interface SystemStorageDao {
@Insert
void insert(SystemStorageEntity... systemStorageEntities);
@Insert
void insert(SystemStorageEntity systemStorageEntity);
@Query("SELECT * FROM SystemStorageEntity")
List<SystemStorageEntity> get();
@Update
void update(SystemStorageEntity... systemStorageEntities);
@Update
void update(SystemStorageEntity systemStorageEntity);
@Query("DELETE FROM SystemStorageEntity WHERE SystemId = :systemId")
void deleteBySystemId(UUID systemId);
@Delete
void delete(SystemStorageEntity... systemStorageEntities);
@Delete
void delete(SystemStorageEntity systemStorageEntity);
}

View File

@@ -0,0 +1,11 @@
package uk.co.syski.client.android.model.database.dao.linking;
import android.arch.persistence.room.*;
import uk.co.syski.client.android.model.database.entity.linking.SystemTypeEntity;
@Dao
public interface SystemTypeDao {
@Insert
void InsertAll(SystemTypeEntity... systemTypeEntities);
}

View File

@@ -0,0 +1,23 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.UUID;
@Entity
public class BIOSEntity
{
@PrimaryKey
@NonNull
public UUID Id;
public String ManufacturerName;
public String Caption;
public String Version;
public String Date;
}

View File

@@ -0,0 +1,25 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.UUID;
@Entity
public class CPUEntity {
@PrimaryKey @NonNull
public UUID Id;
public String ModelName;
public String ManufacturerName;
public String ArchitectureName;
public int ClockSpeed;
public int CoreCount;
public int ThreadCount;
}

View File

@@ -0,0 +1,17 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.UUID;
@Entity
public class GPUEntity {
@PrimaryKey @NonNull
public UUID Id;
public String ModelName;
public String ManufacturerName;
}

View File

@@ -0,0 +1,19 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.UUID;
@Entity
public class MotherboardEntity {
@PrimaryKey @NonNull
public UUID Id;
public String ModelName;
public String ManufacturerName;
public String Version;
}

View File

@@ -0,0 +1,17 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.UUID;
@Entity
public class OperatingSystemEntity {
@PrimaryKey
@NonNull
public UUID Id;
public String Name;
}

View File

@@ -0,0 +1,22 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.UUID;
@Entity
public class RAMEntity {
@PrimaryKey @NonNull
public UUID Id;
public String ModelName;
public String ManufacturerName;
public String MemoryTypeName;
public long MemoryBytes;
}

View File

@@ -0,0 +1,21 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.UUID;
@Entity
public class StorageEntity {
@PrimaryKey @NonNull
public UUID Id;
public String ModelName;
public String ManufacturerName;
public String MemoryTypeName;
public long MemoryBytes;
}

View File

@@ -0,0 +1,23 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.Date;
import java.util.UUID;
@Entity
public class SystemEntity {
@PrimaryKey
@NonNull
public UUID Id;
public String HostName;
public String ModelName;
public String ManufacturerName;
public Date LastUpdated;
}

View File

@@ -0,0 +1,13 @@
package uk.co.syski.client.android.model.database.entity;
import java.util.UUID;
import android.arch.persistence.room.*;
import android.support.annotation.NonNull;
@Entity
public class TypeEntity {
@PrimaryKey @NonNull
public UUID Id;
public String Name;
}

View File

@@ -0,0 +1,23 @@
package uk.co.syski.client.android.model.database.entity;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import java.util.Date;
import java.util.UUID;
@Entity
public class UserEntity {
@PrimaryKey
@NonNull
public UUID Id;
public String Email;
public String RefreshToken;
public String AccessToken;
public Date TokenExpiry;
}

View File

@@ -0,0 +1,40 @@
package uk.co.syski.client.android.model.database.entity.data;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.Date;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"CollectionDateTime"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
}
)
public class CPUDataEntity {
@NonNull
public UUID SystemId;
@NonNull
public Float Load;
@NonNull
public Float Processes;
@NonNull
public Date CollectionDateTime;
}

View File

@@ -0,0 +1,37 @@
package uk.co.syski.client.android.model.database.entity.data;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.Date;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"CollectionDateTime"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
}
)
public class RAMDataEntity {
@NonNull
public UUID SystemId;
@NonNull
public int Free;
@NonNull
public Date CollectionDateTime;
}

View File

@@ -0,0 +1,52 @@
package uk.co.syski.client.android.model.database.entity.data;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.Date;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"CollectionDateTime"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
}
)
public class StorageDataEntity {
@NonNull
public UUID SystemId;
@NonNull
public float Time;
@NonNull
public float Transfers;
@NonNull
public float Reads;
@NonNull
public float Writes;
@NonNull
public float ByteReads;
@NonNull
public float ByteWrites;
@NonNull
public Date CollectionDateTime;
}

View File

@@ -0,0 +1,59 @@
package uk.co.syski.client.android.model.database.entity.data;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.Date;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"CollectionDateTime"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
}
)
public class SystemProcessesEntity {
@NonNull
public UUID SystemId;
@NonNull
public int Id;
@NonNull
public String Name;
@NonNull
public long MemSize;
@NonNull
public long KernelTime;
@NonNull
public String Path;
@NonNull
public int Threads;
@NonNull
public long UpTime;
@NonNull
public int ParentId;
@NonNull
public Date CollectionDateTime;
}

View File

@@ -0,0 +1,39 @@
package uk.co.syski.client.android.model.database.entity.linking;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.BIOSEntity;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
@ForeignKey(
entity = BIOSEntity.class,
parentColumns = "Id",
childColumns = "BIOSId",
onDelete = CASCADE
)
}
)
public class SystemBIOSEntity {
@NonNull
public UUID SystemId;
@NonNull
public UUID BIOSId;
}

View File

@@ -0,0 +1,40 @@
package uk.co.syski.client.android.model.database.entity.linking;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.CPUEntity;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"CPUId"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
@ForeignKey(
entity = CPUEntity.class,
parentColumns = "Id",
childColumns = "CPUId",
onDelete = CASCADE
)
}
)
public class SystemCPUEntity {
@NonNull
public UUID SystemId;
@NonNull
public UUID CPUId;
}

View File

@@ -0,0 +1,40 @@
package uk.co.syski.client.android.model.database.entity.linking;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.GPUEntity;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"GPUId"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
@ForeignKey(
entity = GPUEntity.class,
parentColumns = "Id",
childColumns = "GPUId",
onDelete = CASCADE
)
}
)
public class SystemGPUEntity {
@NonNull
public UUID SystemId;
@NonNull
public UUID GPUId;
}

View File

@@ -0,0 +1,41 @@
package uk.co.syski.client.android.model.database.entity.linking;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.MotherboardEntity;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
@ForeignKey(
entity = MotherboardEntity.class,
parentColumns = "Id",
childColumns = "MotherboardId",
onDelete = CASCADE
)
}
)
public class SystemMotherboardEntity {
@NonNull
public UUID SystemId;
@NonNull
public UUID MotherboardId;
}

View File

@@ -0,0 +1,44 @@
package uk.co.syski.client.android.model.database.entity.linking;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.OperatingSystemEntity;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"OSId"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
@ForeignKey(
entity = OperatingSystemEntity.class,
parentColumns = "Id",
childColumns = "OSId",
onDelete = CASCADE
)
}
)
public class SystemOSEntity {
@NonNull
public UUID SystemId;
@NonNull
public UUID OSId;
public String ArchitectureName;
public String Version;
}

View File

@@ -0,0 +1,44 @@
package uk.co.syski.client.android.model.database.entity.linking;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.RAMEntity;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"RAMId",
"DimmSlot"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
@ForeignKey(
entity = RAMEntity.class,
parentColumns = "Id",
childColumns = "RAMId",
onDelete = CASCADE
)
}
)
public class SystemRAMEntity {
@NonNull
public UUID SystemId;
@NonNull
public UUID RAMId;
@NonNull
public int DimmSlot;
}

View File

@@ -0,0 +1,44 @@
package uk.co.syski.client.android.model.database.entity.linking;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.StorageEntity;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"StorageId",
"Slot"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
@ForeignKey(
entity = StorageEntity.class,
parentColumns = "Id",
childColumns = "StorageId",
onDelete = CASCADE
)
}
)
public class SystemStorageEntity {
@NonNull
public UUID SystemId;
@NonNull
public UUID StorageId;
@NonNull
public int Slot;
}

View File

@@ -0,0 +1,40 @@
package uk.co.syski.client.android.model.database.entity.linking;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.support.annotation.NonNull;
import java.util.UUID;
import uk.co.syski.client.android.model.database.entity.SystemEntity;
import uk.co.syski.client.android.model.database.entity.TypeEntity;
import static android.arch.persistence.room.ForeignKey.CASCADE;
@Entity(
primaryKeys = {
"SystemId",
"TypeId"
},
foreignKeys = {
@ForeignKey(
entity = SystemEntity.class,
parentColumns = "Id",
childColumns = "SystemId",
onDelete = CASCADE
),
@ForeignKey(
entity = TypeEntity.class,
parentColumns = "Id",
childColumns = "TypeId",
onDelete = CASCADE
)
}
)
public class SystemTypeEntity {
@NonNull
public UUID SystemId;
@NonNull
public UUID TypeId;
}

View File

@@ -0,0 +1,7 @@
/**
* Classes used to create the application database using <i>Room</i>
* <p>
* Contains Data Access Objects (DAOs) and Database Entities
* </p>
*/
package uk.co.syski.client.android.model.database;

View File

@@ -0,0 +1,195 @@
package uk.co.syski.client.android.model.repository;
import android.arch.core.util.Function;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.Transformations;
import android.content.Context;
import android.os.AsyncTask;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import uk.co.syski.client.android.model.api.VolleySingleton;
import uk.co.syski.client.android.model.api.requests.system.APISystemBIOSRequest;
import uk.co.syski.client.android.model.database.SyskiCache;
import uk.co.syski.client.android.model.database.dao.BIOSDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemBIOSDao;
import uk.co.syski.client.android.model.database.entity.BIOSEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemBIOSEntity;
import uk.co.syski.client.android.model.viewmodel.SystemBIOSModel;
public enum BIOSRepository {
INSTANCE;
// Database DAO's
private BIOSDao mBIOSDao;
private SystemBIOSDao mSystemBIOSDao;
// BIOS Cache in Memory
private HashMap<UUID, BIOSEntity> mBIOSEntities;
private HashMap<UUID, SystemBIOSEntity> mSystemBIOSEntities;
private HashMap<UUID, SystemBIOSModel> mSystemBIOSModels;
// LiveData
private MutableLiveData<HashMap<UUID, SystemBIOSModel>> mLiveDataSystemBIOSModels;
BIOSRepository() {
mBIOSDao = SyskiCache.GetDatabase().BIOSDao();
mSystemBIOSDao = SyskiCache.GetDatabase().SystemBIOSDao();
mBIOSEntities = new HashMap<>();
mSystemBIOSEntities = new HashMap<>();
mSystemBIOSModels = new HashMap<>();
mLiveDataSystemBIOSModels = new MutableLiveData<>();
loadFromDatabase();
}
private void loadFromDatabase()
{
try {
// Load data from Database for OS's
mBIOSEntities = new loadBIOSEntitiesAsyncTask(mBIOSDao, mBIOSEntities).execute().get();
// Load data from Database for System OS's
mSystemBIOSEntities = new loadSystemBIOSEntitiesAsyncTask(mSystemBIOSDao, mSystemBIOSEntities).execute().get();
// Set Data in LiveData
for (Map.Entry<UUID, SystemBIOSEntity> entry : mSystemBIOSEntities.entrySet())
{
SystemBIOSEntity systemBIOSEntity = entry.getValue();
BIOSEntity biosEntity = mBIOSEntities.get(systemBIOSEntity.BIOSId);
mSystemBIOSModels.put(entry.getKey(), new SystemBIOSModel(biosEntity.ManufacturerName, biosEntity.Caption, biosEntity.Version, biosEntity.Date));
}
mLiveDataSystemBIOSModels.postValue(mSystemBIOSModels);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
private void loadFromAPI(Context context, UUID systemId)
{
//TODO Load from API every user defined time.
VolleySingleton.getInstance(context).addToRequestQueue(new APISystemBIOSRequest(context, systemId));
}
public LiveData<SystemBIOSModel> getSystemBIOSLiveData(final UUID systemId, Context context)
{
loadFromAPI(context, systemId);
return Transformations.map(mLiveDataSystemBIOSModels, new Function<HashMap<UUID, SystemBIOSModel>, SystemBIOSModel>() {
@Override
public SystemBIOSModel apply(HashMap<UUID, SystemBIOSModel> input) {
SystemBIOSModel moboModel = input.get(systemId);
if (moboModel == null)
{
moboModel = new SystemBIOSModel();
}
return moboModel;
}
});
}
public BIOSEntity getBIOS(UUID id)
{
return mBIOSEntities.get(id);
}
public void upsert(UUID systemId, SystemBIOSEntity systemBIOSEntity, BIOSEntity biosEntity)
{
try {
new upsertBIOSAsyncTask(mBIOSDao, biosEntity).execute().get();
new upsertSystemBIOSAsyncTask(mSystemBIOSDao, systemId, systemBIOSEntity).execute().get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
mBIOSEntities.put(biosEntity.Id, biosEntity);
mSystemBIOSEntities.put(systemId, systemBIOSEntity);
mSystemBIOSModels.put(systemId, new SystemBIOSModel(biosEntity.ManufacturerName, biosEntity.Caption, biosEntity.Version, biosEntity.Date));
mLiveDataSystemBIOSModels.postValue(mSystemBIOSModels);
}
private static class loadBIOSEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, BIOSEntity>> {
private BIOSDao mBIOSDao;
private HashMap<UUID, BIOSEntity> mBIOSEntities;
loadBIOSEntitiesAsyncTask(BIOSDao motherboardDao, HashMap<UUID, BIOSEntity> moboEntities) {
mBIOSDao = motherboardDao;
mBIOSEntities = moboEntities;
}
protected HashMap<UUID, BIOSEntity> doInBackground(final Void... voids) {
for (BIOSEntity motherboardEntity : mBIOSDao.get())
{
mBIOSEntities.put(motherboardEntity.Id, motherboardEntity);
}
return mBIOSEntities;
}
}
private static class loadSystemBIOSEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, SystemBIOSEntity>> {
private SystemBIOSDao mSystemBIOSDao;
private HashMap<UUID, SystemBIOSEntity> mSystemBIOSEntities;
loadSystemBIOSEntitiesAsyncTask(SystemBIOSDao systemBIOSDao, HashMap<UUID, SystemBIOSEntity> systemBIOSEntities) {
mSystemBIOSDao = systemBIOSDao;
mSystemBIOSEntities = systemBIOSEntities;
}
protected HashMap<UUID, SystemBIOSEntity> doInBackground(final Void... voids) {
for (SystemBIOSEntity systemBIOSEntity : mSystemBIOSDao.get())
{
mSystemBIOSEntities.put(systemBIOSEntity.SystemId, systemBIOSEntity);
}
return mSystemBIOSEntities;
}
}
private static class upsertBIOSAsyncTask extends AsyncTask<Void , Void, Void> {
private BIOSDao mBIOSDao;
private BIOSEntity mBIOSEntity;
upsertBIOSAsyncTask(BIOSDao motherboardDao, BIOSEntity motherboardEntity) {
mBIOSDao = motherboardDao;
mBIOSEntity = motherboardEntity;
}
protected Void doInBackground(final Void... voids) {
mBIOSDao.upsert(mBIOSEntity);
return null;
}
}
private static class upsertSystemBIOSAsyncTask extends AsyncTask<Void , Void, Void> {
private SystemBIOSDao mSystemBIOSDao;
private UUID mSystemId;
private SystemBIOSEntity mSystemBIOSEntity;
upsertSystemBIOSAsyncTask(SystemBIOSDao systemBIOSDao, UUID systemId, SystemBIOSEntity systemBIOSEntity) {
mSystemBIOSDao = systemBIOSDao;
mSystemId = systemId;
mSystemBIOSEntity = systemBIOSEntity;
}
protected Void doInBackground(final Void... voids) {
mSystemBIOSDao.deleteBySystemId(mSystemId);
mSystemBIOSDao.insert(mSystemBIOSEntity);
return null;
}
}
}

View File

@@ -0,0 +1,231 @@
package uk.co.syski.client.android.model.repository;
import android.arch.core.util.Function;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.Transformations;
import android.content.Context;
import android.os.AsyncTask;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import uk.co.syski.client.android.model.api.VolleySingleton;
import uk.co.syski.client.android.model.api.requests.system.APISystemCPURequest;
import uk.co.syski.client.android.model.database.SyskiCache;
import uk.co.syski.client.android.model.database.dao.CPUDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemCPUDao;
import uk.co.syski.client.android.model.database.entity.CPUEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemCPUEntity;
import uk.co.syski.client.android.model.viewmodel.SystemCPUModel;
public enum CPURepository {
INSTANCE;
// Database DAO's
private CPUDao mCPUDao;
private SystemCPUDao mSystemCPUDao;
// CPU Cache in Memory
private HashMap<UUID, CPUEntity> mCPUEntities;
private HashMap<UUID, List<SystemCPUEntity>> mSystemCPUEntities;
private HashMap<UUID, List<SystemCPUModel>> mSystemCPUModels;
// LiveData
private MutableLiveData<HashMap<UUID, List<SystemCPUModel>>> mLiveDataSystemCPUModels;
CPURepository() {
mCPUDao = SyskiCache.GetDatabase().CPUDao();
mSystemCPUDao = SyskiCache.GetDatabase().SystemCPUDao();
mCPUEntities = new HashMap<>();
mSystemCPUEntities = new HashMap<>();
mSystemCPUModels = new HashMap<>();
mLiveDataSystemCPUModels = new MutableLiveData<>();
loadFromDatabase();
}
private void loadFromDatabase()
{
try {
// Load data from Database for CPU's
mCPUEntities = new loadCPUEntitiesAsyncTask(mCPUDao, mCPUEntities).execute().get();
// Load data from Database for System CPU's
mSystemCPUEntities = new loadSystemCPUEntitiesAsyncTask(mSystemCPUDao, mSystemCPUEntities).execute().get();
// Set Data in LiveData
for (Map.Entry<UUID, List<SystemCPUEntity>> entry : mSystemCPUEntities.entrySet())
{
List<SystemCPUModel> CPUModels = mSystemCPUModels.get(entry.getKey());
if (CPUModels == null)
{
CPUModels = new LinkedList<>();
}
for (SystemCPUEntity systemCPUEntity : entry.getValue())
{
CPUEntity cpuEntity = mCPUEntities.get(systemCPUEntity.CPUId);
CPUModels.add(new SystemCPUModel(cpuEntity.ModelName, cpuEntity.ManufacturerName, cpuEntity.ArchitectureName, cpuEntity.ClockSpeed, cpuEntity.CoreCount, cpuEntity.ThreadCount));
}
mSystemCPUModels.put(entry.getKey(), CPUModels);
}
mLiveDataSystemCPUModels.postValue(mSystemCPUModels);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
private void loadFromAPI(Context context, UUID systemId)
{
//TODO Load from API every user defined time.
VolleySingleton.getInstance(context).addToRequestQueue(new APISystemCPURequest(context, systemId));
}
public LiveData<List<SystemCPUModel>> getSystemCPUsLiveData(final UUID systemId, Context context)
{
loadFromAPI(context, systemId);
return Transformations.map(mLiveDataSystemCPUModels, new Function<HashMap<UUID, List<SystemCPUModel>>, List<SystemCPUModel>>() {
@Override
public List<SystemCPUModel> apply(HashMap<UUID, List<SystemCPUModel>> input) {
List<SystemCPUModel> cpuModelList = input.get(systemId);
if (cpuModelList == null)
{
cpuModelList = new LinkedList<>();
}
if (cpuModelList.isEmpty())
{
cpuModelList.add(new SystemCPUModel());
}
return cpuModelList;
}
});
}
public List<SystemCPUEntity> getSystemCPUs(UUID systemId)
{
return mSystemCPUEntities.get(systemId);
}
public CPUEntity getCPU(UUID id)
{
return mCPUEntities.get(id);
}
public void upsert(UUID systemId, List<SystemCPUEntity> systemCPUEntities, List<CPUEntity> cpuEntities)
{
try {
new upsertCPUAsyncTask(mCPUDao, cpuEntities).execute().get();
new upsertSystemCPUAsyncTask(mSystemCPUDao, systemId, systemCPUEntities).execute().get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
List<SystemCPUModel> systemCPUModels = new LinkedList<>();
for (CPUEntity cpuEntity : cpuEntities)
{
mCPUEntities.put(cpuEntity.Id, cpuEntity);
}
for (SystemCPUEntity systemCPUEntity : systemCPUEntities)
{
CPUEntity cpuEntity = mCPUEntities.get(systemCPUEntity.CPUId);
systemCPUModels.add(new SystemCPUModel(cpuEntity.ModelName, cpuEntity.ManufacturerName, cpuEntity.ArchitectureName, cpuEntity.ClockSpeed, cpuEntity.CoreCount, cpuEntity.ThreadCount));
}
mSystemCPUEntities.put(systemId, systemCPUEntities);
mSystemCPUModels.put(systemId, systemCPUModels);
mLiveDataSystemCPUModels.postValue(mSystemCPUModels);
}
private static class loadCPUEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, CPUEntity>> {
private CPUDao mCPUDao;
private HashMap<UUID, CPUEntity> mCPUEntities;
loadCPUEntitiesAsyncTask(CPUDao cpuDao, HashMap<UUID, CPUEntity> CPUEntities) {
mCPUDao = cpuDao;
mCPUEntities = CPUEntities;
}
protected HashMap<UUID, CPUEntity> doInBackground(final Void... voids) {
for (CPUEntity cpuEntity : mCPUDao.get())
{
mCPUEntities.put(cpuEntity.Id, cpuEntity);
}
return mCPUEntities;
}
}
private static class loadSystemCPUEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, List<SystemCPUEntity>>> {
private SystemCPUDao mSystemCPUDao;
private HashMap<UUID, List<SystemCPUEntity>> mSystemCPUEntities;
loadSystemCPUEntitiesAsyncTask(SystemCPUDao systemCPUDao, HashMap<UUID, List<SystemCPUEntity>> systemCPUEntities) {
mSystemCPUDao = systemCPUDao;
mSystemCPUEntities = systemCPUEntities;
}
protected HashMap<UUID, List<SystemCPUEntity>> doInBackground(final Void... voids) {
for (SystemCPUEntity SystemCPUEntity : mSystemCPUDao.get())
{
List<SystemCPUEntity> CPUEntities = mSystemCPUEntities.get(SystemCPUEntity.SystemId);
if (CPUEntities == null)
{
CPUEntities = new LinkedList<>();
}
CPUEntities.add(SystemCPUEntity);
mSystemCPUEntities.put(SystemCPUEntity.SystemId, CPUEntities);
}
return mSystemCPUEntities;
}
}
private static class upsertCPUAsyncTask extends AsyncTask<Void , Void, Void> {
private CPUDao mCPUDao;
private List<CPUEntity> mCPUEntities;
upsertCPUAsyncTask(CPUDao cpuDao, List<CPUEntity> cpuEntities) {
mCPUDao = cpuDao;
mCPUEntities = cpuEntities;
}
protected Void doInBackground(final Void... voids) {
for (CPUEntity cpuEntity: mCPUEntities) {
mCPUDao.upsert(cpuEntity);
}
return null;
}
}
private static class upsertSystemCPUAsyncTask extends AsyncTask<Void , Void, Void> {
private SystemCPUDao mSystemCPUDao;
private UUID mSystemId;
private List<SystemCPUEntity> mSystemCPUEntities;
upsertSystemCPUAsyncTask(SystemCPUDao systemCPUDao, UUID systemId, List<SystemCPUEntity> systemCPUEntities) {
mSystemCPUDao = systemCPUDao;
mSystemId = systemId;
mSystemCPUEntities = systemCPUEntities;
}
protected Void doInBackground(final Void... voids) {
mSystemCPUDao.deleteBySystemId(mSystemId);
for (SystemCPUEntity systemCPUEntity: mSystemCPUEntities) {
mSystemCPUDao.insert(systemCPUEntity);
}
return null;
}
}
}

View File

@@ -0,0 +1,225 @@
package uk.co.syski.client.android.model.repository;
import android.arch.core.util.Function;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.Transformations;
import android.content.Context;
import android.os.AsyncTask;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import uk.co.syski.client.android.model.api.VolleySingleton;
import uk.co.syski.client.android.model.api.requests.system.APISystemGPURequest;
import uk.co.syski.client.android.model.database.SyskiCache;
import uk.co.syski.client.android.model.database.dao.GPUDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemGPUDao;
import uk.co.syski.client.android.model.database.entity.GPUEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemGPUEntity;
import uk.co.syski.client.android.model.viewmodel.SystemGPUModel;
public enum GPURepository {
INSTANCE;
// Database DAO's
private GPUDao mGPUDao;
private SystemGPUDao mSystemGPUDao;
// GPU Cache in Memory
private HashMap<UUID, GPUEntity> mGPUEntities;
private HashMap<UUID, List<SystemGPUEntity>> mSystemGPUEntities;
private HashMap<UUID, List<SystemGPUModel>> mSystemGPUModels;
private MutableLiveData<HashMap<UUID, List<SystemGPUModel>>> mLiveDataSystemGPUModels;
GPURepository() {
mGPUDao = SyskiCache.GetDatabase().GPUDao();
mSystemGPUDao = SyskiCache.GetDatabase().SystemGPUDao();
mGPUEntities = new HashMap<>();
mSystemGPUEntities = new HashMap<>();
mSystemGPUModels = new HashMap<>();
mLiveDataSystemGPUModels = new MutableLiveData<>();
loadFromDatabase();
}
private void loadFromDatabase()
{
try {
// Load data from Database for OS's
mGPUEntities = new loadGPUEntitiesAsyncTask(mGPUDao, mGPUEntities).execute().get();
// Load data from Database for System OS's
mSystemGPUEntities = new loadSystemGPUEntitiesAsyncTask(mSystemGPUDao, mSystemGPUEntities).execute().get();
// Set Data in LiveData
for (Map.Entry<UUID, List<SystemGPUEntity>> entry : mSystemGPUEntities.entrySet())
{
List<SystemGPUModel> GPUModels = mSystemGPUModels.get(entry.getKey());
if (GPUModels == null)
{
GPUModels = new LinkedList<>();
}
for (SystemGPUEntity systemGPUEntity : entry.getValue())
{
GPUEntity gpuEntity = mGPUEntities.get(systemGPUEntity.GPUId);
GPUModels.add(new SystemGPUModel(gpuEntity.ModelName, gpuEntity.ManufacturerName));
}
mSystemGPUModels.put(entry.getKey(), GPUModels);
}
mLiveDataSystemGPUModels.postValue(mSystemGPUModels);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
private void loadFromAPI(Context context, UUID systemId)
{
//TODO Load from API every user defined time.
VolleySingleton.getInstance(context).addToRequestQueue(new APISystemGPURequest(context, systemId));
}
public LiveData<List<SystemGPUModel>> getSystemGPUsLiveData(final UUID systemId, Context context)
{
loadFromAPI(context, systemId);
return Transformations.map(mLiveDataSystemGPUModels, new Function<HashMap<UUID, List<SystemGPUModel>>, List<SystemGPUModel>>() {
@Override
public List<SystemGPUModel> apply(HashMap<UUID, List<SystemGPUModel>> input) {
List<SystemGPUModel> gpuModelList = input.get(systemId);
if (gpuModelList == null)
{
gpuModelList = new LinkedList<>();
}
if (gpuModelList.isEmpty())
{
gpuModelList.add(new SystemGPUModel());
}
return gpuModelList;
}
});
}
public GPUEntity getGPU(UUID id)
{
return mGPUEntities.get(id);
}
public void upsert(UUID systemId, List<SystemGPUEntity> systemGPUEntities, List<GPUEntity> gpuEntities)
{
try {
new upsertGPUAsyncTask(mGPUDao, gpuEntities).execute().get();
new upsertSystemGPUAsyncTask(mSystemGPUDao, systemId, systemGPUEntities).execute().get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
List<SystemGPUModel> systemGPUModels = new LinkedList<>();
for (GPUEntity gpuEntity : gpuEntities)
{
mGPUEntities.put(gpuEntity.Id, gpuEntity);
}
for (SystemGPUEntity systemGPUEntity : systemGPUEntities)
{
GPUEntity gpuEntity = mGPUEntities.get(systemGPUEntity.GPUId);
systemGPUModels.add(new SystemGPUModel(gpuEntity.ModelName, gpuEntity.ManufacturerName));
}
mSystemGPUEntities.put(systemId, systemGPUEntities);
mSystemGPUModels.put(systemId, systemGPUModels);
mLiveDataSystemGPUModels.postValue(mSystemGPUModels);
}
private static class loadGPUEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, GPUEntity>> {
private GPUDao mGPUDao;
private HashMap<UUID, GPUEntity> mGPUEntities;
loadGPUEntitiesAsyncTask(GPUDao cpuDao, HashMap<UUID, GPUEntity> GPUEntities) {
mGPUDao = cpuDao;
mGPUEntities = GPUEntities;
}
protected HashMap<UUID, GPUEntity> doInBackground(final Void... voids) {
for (GPUEntity cpuEntity : mGPUDao.get())
{
mGPUEntities.put(cpuEntity.Id, cpuEntity);
}
return mGPUEntities;
}
}
private static class loadSystemGPUEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, List<SystemGPUEntity>>> {
private SystemGPUDao mSystemGPUDao;
private HashMap<UUID, List<SystemGPUEntity>> mSystemGPUEntities;
loadSystemGPUEntitiesAsyncTask(SystemGPUDao systemGPUDao, HashMap<UUID, List<SystemGPUEntity>> systemGPUEntities) {
mSystemGPUDao = systemGPUDao;
mSystemGPUEntities = systemGPUEntities;
}
protected HashMap<UUID, List<SystemGPUEntity>> doInBackground(final Void... voids) {
for (SystemGPUEntity SystemGPUEntity : mSystemGPUDao.get())
{
List<SystemGPUEntity> GPUEntities = mSystemGPUEntities.get(SystemGPUEntity.SystemId);
if (GPUEntities == null)
{
GPUEntities = new LinkedList<>();
}
GPUEntities.add(SystemGPUEntity);
mSystemGPUEntities.put(SystemGPUEntity.SystemId, GPUEntities);
}
return mSystemGPUEntities;
}
}
private static class upsertGPUAsyncTask extends AsyncTask<Void, Void, Void> {
private GPUDao mGPUDao;
private List<GPUEntity> mGPUEntities;
upsertGPUAsyncTask(GPUDao gpuDao, List<GPUEntity> gpuEntities) {
mGPUDao = gpuDao;
mGPUEntities = gpuEntities;
}
protected Void doInBackground(final Void... voids) {
for (GPUEntity gpuEntity: mGPUEntities) {
mGPUDao.upsert(gpuEntity);
}
return null;
}
}
private static class upsertSystemGPUAsyncTask extends AsyncTask<Void, Void, Void> {
private SystemGPUDao mSystemGPUDao;
private UUID mSystemId;
private List<SystemGPUEntity> mSystemGPUEntities;
upsertSystemGPUAsyncTask(SystemGPUDao systemGPUDao, UUID systemId, List<SystemGPUEntity> systemGPUEntities) {
mSystemGPUDao = systemGPUDao;
mSystemId = systemId;
mSystemGPUEntities = systemGPUEntities;
}
protected Void doInBackground(final Void... voids) {
mSystemGPUDao.deleteBySystemId(mSystemId);
for (SystemGPUEntity systemGPUEntity: mSystemGPUEntities) {
mSystemGPUDao.insert(systemGPUEntity);
}
return null;
}
}
}

View File

@@ -0,0 +1,195 @@
package uk.co.syski.client.android.model.repository;
import android.arch.core.util.Function;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.Transformations;
import android.content.Context;
import android.os.AsyncTask;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import uk.co.syski.client.android.model.api.VolleySingleton;
import uk.co.syski.client.android.model.api.requests.system.APISystemMotherboardRequest;
import uk.co.syski.client.android.model.database.SyskiCache;
import uk.co.syski.client.android.model.database.dao.MotherboardDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemMotherboardDao;
import uk.co.syski.client.android.model.database.entity.MotherboardEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemMotherboardEntity;
import uk.co.syski.client.android.model.viewmodel.SystemMotherboardModel;
public enum MOBORepository {
INSTANCE;
// Database DAO's
private MotherboardDao mMOBODao;
private SystemMotherboardDao mSystemMOBODao;
// MOBO Cache in Memory
private HashMap<UUID, MotherboardEntity> mMOBOEntities;
private HashMap<UUID, SystemMotherboardEntity> mSystemMOBOEntities;
private HashMap<UUID, SystemMotherboardModel> mSystemMOBOModels;
// LiveData
private MutableLiveData<HashMap<UUID, SystemMotherboardModel>> mLiveDataSystemMOBOModels;
MOBORepository() {
mMOBODao = SyskiCache.GetDatabase().MotherboardDao();
mSystemMOBODao = SyskiCache.GetDatabase().SystemMotherboardDao();
mMOBOEntities = new HashMap<>();
mSystemMOBOEntities = new HashMap<>();
mSystemMOBOModels = new HashMap<>();
mLiveDataSystemMOBOModels = new MutableLiveData<>();
loadFromDatabase();
}
private void loadFromDatabase()
{
try {
// Load data from Database for OS's
mMOBOEntities = new loadMOBOEntitiesAsyncTask(mMOBODao, mMOBOEntities).execute().get();
// Load data from Database for System OS's
mSystemMOBOEntities = new loadSystemMOBOEntitiesAsyncTask(mSystemMOBODao, mSystemMOBOEntities).execute().get();
// Set Data in LiveData
for (Map.Entry<UUID, SystemMotherboardEntity> entry : mSystemMOBOEntities.entrySet())
{
SystemMotherboardEntity systemMOBOEntity = entry.getValue();
MotherboardEntity moboEntity = mMOBOEntities.get(systemMOBOEntity.MotherboardId);
mSystemMOBOModels.put(entry.getKey(), new SystemMotherboardModel(moboEntity.ModelName, moboEntity.ManufacturerName, moboEntity.Version));
}
mLiveDataSystemMOBOModels.postValue(mSystemMOBOModels);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
private void loadFromAPI(Context context, UUID systemId)
{
//TODO Load from API every user defined time.
VolleySingleton.getInstance(context).addToRequestQueue(new APISystemMotherboardRequest(context, systemId));
}
public LiveData<SystemMotherboardModel> getSystemMotherboardLiveData(final UUID systemId, Context context)
{
loadFromAPI(context, systemId);
return Transformations.map(mLiveDataSystemMOBOModels, new Function<HashMap<UUID, SystemMotherboardModel>, SystemMotherboardModel>() {
@Override
public SystemMotherboardModel apply(HashMap<UUID, SystemMotherboardModel> input) {
SystemMotherboardModel moboModel = input.get(systemId);
if (moboModel == null)
{
moboModel = new SystemMotherboardModel();
}
return moboModel;
}
});
}
public MotherboardEntity getMotherboard(UUID id)
{
return mMOBOEntities.get(id);
}
public void upsert(UUID systemId, SystemMotherboardEntity systemMOBOEntity, MotherboardEntity moboEntity)
{
try {
new upsertMOBOAsyncTask(mMOBODao, moboEntity).execute().get();
new upsertSystemMOBOAsyncTask(mSystemMOBODao, systemId, systemMOBOEntity).execute().get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
mMOBOEntities.put(moboEntity.Id, moboEntity);
mSystemMOBOEntities.put(systemId, systemMOBOEntity);
mSystemMOBOModels.put(systemId, new SystemMotherboardModel(moboEntity.ModelName, moboEntity.ManufacturerName, moboEntity.Version));
mLiveDataSystemMOBOModels.postValue(mSystemMOBOModels);
}
private static class loadMOBOEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, MotherboardEntity>> {
private MotherboardDao mMotherboardDao;
private HashMap<UUID, MotherboardEntity> mMOBOEntities;
loadMOBOEntitiesAsyncTask(MotherboardDao motherboardDao, HashMap<UUID, MotherboardEntity> moboEntities) {
mMotherboardDao = motherboardDao;
mMOBOEntities = moboEntities;
}
protected HashMap<UUID, MotherboardEntity> doInBackground(final Void... voids) {
for (MotherboardEntity motherboardEntity : mMotherboardDao.get())
{
mMOBOEntities.put(motherboardEntity.Id, motherboardEntity);
}
return mMOBOEntities;
}
}
private static class loadSystemMOBOEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, SystemMotherboardEntity>> {
private SystemMotherboardDao mSystemMotherboardDao;
private HashMap<UUID, SystemMotherboardEntity> mSystemMOBOEntities;
loadSystemMOBOEntitiesAsyncTask(SystemMotherboardDao systemMotherboardDao, HashMap<UUID, SystemMotherboardEntity> systemMotherboardEntities) {
mSystemMotherboardDao = systemMotherboardDao;
mSystemMOBOEntities = systemMotherboardEntities;
}
protected HashMap<UUID, SystemMotherboardEntity> doInBackground(final Void... voids) {
for (SystemMotherboardEntity systemMotherboardEntity : mSystemMotherboardDao.get())
{
mSystemMOBOEntities.put(systemMotherboardEntity.SystemId, systemMotherboardEntity);
}
return mSystemMOBOEntities;
}
}
private static class upsertMOBOAsyncTask extends AsyncTask<Void , Void, Void> {
private MotherboardDao mMotherboardDao;
private MotherboardEntity mMotherboardEntity;
upsertMOBOAsyncTask(MotherboardDao motherboardDao, MotherboardEntity motherboardEntity) {
mMotherboardDao = motherboardDao;
mMotherboardEntity = motherboardEntity;
}
protected Void doInBackground(final Void... voids) {
mMotherboardDao.upsert(mMotherboardEntity);
return null;
}
}
private static class upsertSystemMOBOAsyncTask extends AsyncTask<Void , Void, Void> {
private SystemMotherboardDao mSystemMotherboardDao;
private UUID mSystemId;
private SystemMotherboardEntity mSystemMotherboardEntity;
upsertSystemMOBOAsyncTask(SystemMotherboardDao systemMotherboardDao, UUID systemId, SystemMotherboardEntity systemMotherboardEntity) {
mSystemMotherboardDao = systemMotherboardDao;
mSystemId = systemId;
mSystemMotherboardEntity = systemMotherboardEntity;
}
protected Void doInBackground(final Void... voids) {
mSystemMotherboardDao.deleteBySystemId(mSystemId);
mSystemMotherboardDao.insert(mSystemMotherboardEntity);
return null;
}
}
}

View File

@@ -0,0 +1,239 @@
package uk.co.syski.client.android.model.repository;
import android.arch.core.util.Function;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.Transformations;
import android.content.Context;
import android.os.AsyncTask;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import uk.co.syski.client.android.model.api.VolleySingleton;
import uk.co.syski.client.android.model.api.requests.system.APISystemOperatingSystemRequest;
import uk.co.syski.client.android.model.database.SyskiCache;
import uk.co.syski.client.android.model.database.dao.OperatingSystemDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemOSDao;
import uk.co.syski.client.android.model.database.entity.OperatingSystemEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemOSEntity;
import uk.co.syski.client.android.model.viewmodel.OperatingSystemModel;
public enum OSRepository {
INSTANCE;
// Database DAO's
private OperatingSystemDao mOperatingSystemDao;
private SystemOSDao mSystemOSDao;
// OS Cache in Memory
private HashMap<UUID, OperatingSystemEntity> mOSEntities;
private HashMap<UUID, List<SystemOSEntity>> mSystemOSEntities;
private HashMap<UUID, List<OperatingSystemModel>> mSystemOSModels;
// LiveData
private MutableLiveData<HashMap<UUID, List<OperatingSystemModel>>> mLiveDataSystemOSModels;
OSRepository() {
mOperatingSystemDao = SyskiCache.GetDatabase().OperatingSystemDao();
mSystemOSDao = SyskiCache.GetDatabase().SystemOSDao();
mOSEntities = new HashMap<>();
mSystemOSEntities = new HashMap<>();
mSystemOSModels = new HashMap<>();
mLiveDataSystemOSModels = new MutableLiveData<>();
loadFromDatabase();
}
private void loadFromDatabase()
{
try {
// Load data from Database for OS's
mOSEntities = new loadOSEntitiesAsyncTask(mOperatingSystemDao, mOSEntities).execute().get();
// Load data from Database for System OS's
mSystemOSEntities = new loadSystemOSEntitiesAsyncTask(mSystemOSDao, mSystemOSEntities).execute().get();
// Set Data in LiveData
for (Map.Entry<UUID, List<SystemOSEntity>> entry : mSystemOSEntities.entrySet())
{
List<OperatingSystemModel> OSModels = mSystemOSModels.get(entry.getKey());
if (OSModels == null)
{
OSModels = new LinkedList<>();
}
for (SystemOSEntity systemOSEntity : entry.getValue())
{
OperatingSystemEntity osEntity = mOSEntities.get(systemOSEntity.OSId);
OSModels.add(new OperatingSystemModel(osEntity.Name, systemOSEntity.ArchitectureName, systemOSEntity.Version));
}
mSystemOSModels.put(entry.getKey(), OSModels);
}
mLiveDataSystemOSModels.postValue(mSystemOSModels);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private void loadFromAPI(Context context, UUID systemId)
{
//TODO Load from API every user defined time.
VolleySingleton.getInstance(context).addToRequestQueue(new APISystemOperatingSystemRequest(context, systemId));
}
public LiveData<List<OperatingSystemModel>> getSystemOSsLiveData(final UUID systemId, Context context)
{
loadFromAPI(context, systemId);
return Transformations.map(mLiveDataSystemOSModels, new Function<HashMap<UUID, List<OperatingSystemModel>>, List<OperatingSystemModel>>() {
@Override
public List<OperatingSystemModel> apply(HashMap<UUID, List<OperatingSystemModel>> input) {
List<OperatingSystemModel> osModelList = input.get(systemId);
if (osModelList == null)
{
osModelList = new LinkedList<>();
}
if (osModelList.isEmpty())
{
osModelList.add(new OperatingSystemModel());
}
return osModelList;
}
});
}
public List<SystemOSEntity> getSystemOSs(UUID systemId)
{
return mSystemOSEntities.get(systemId);
}
public OperatingSystemEntity getOS(UUID id)
{
return mOSEntities.get(id);
}
public void upsert(UUID systemId, List<SystemOSEntity> systemOSEntities, List<OperatingSystemEntity> osEntities)
{
try {
new upsertOSAsyncTask(mOperatingSystemDao, systemId, osEntities).execute().get();
new upsertSystemOSAsyncTask(mSystemOSDao, systemId, systemOSEntities).execute().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
List<OperatingSystemModel> systemOSModels = new LinkedList<>();
for (OperatingSystemEntity osEntity : osEntities)
{
mOSEntities.put(osEntity.Id, osEntity);
}
for (SystemOSEntity systemOSEntity : systemOSEntities)
{
OperatingSystemEntity osEntity = mOSEntities.get(systemOSEntity.OSId);
systemOSModels.add(new OperatingSystemModel(osEntity.Name, systemOSEntity.ArchitectureName, systemOSEntity.Version));
}
mSystemOSEntities.put(systemId, systemOSEntities);
mSystemOSModels.put(systemId, systemOSModels);
mLiveDataSystemOSModels.postValue(mSystemOSModels);
}
private static class loadOSEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, OperatingSystemEntity>> {
private OperatingSystemDao mOperatingSystemDao;
private HashMap<UUID, OperatingSystemEntity> mOSEntities;
loadOSEntitiesAsyncTask(OperatingSystemDao operatingSystemDao, HashMap<UUID, OperatingSystemEntity> osEntities) {
mOperatingSystemDao = operatingSystemDao;
mOSEntities = osEntities;
}
protected HashMap<UUID, OperatingSystemEntity> doInBackground(final Void... voids) {
for (OperatingSystemEntity operatingSystemEntity : mOperatingSystemDao.get())
{
mOSEntities.put(operatingSystemEntity.Id, operatingSystemEntity);
}
return mOSEntities;
}
}
private static class loadSystemOSEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, List<SystemOSEntity>>> {
private SystemOSDao mSystemOSDao;
private HashMap<UUID, List<SystemOSEntity>> mSystemOSEntities;
loadSystemOSEntitiesAsyncTask(SystemOSDao systemOSDao, HashMap<UUID, List<SystemOSEntity>> systemOSEntities) {
mSystemOSDao = systemOSDao;
mSystemOSEntities = systemOSEntities;
}
protected HashMap<UUID, List<SystemOSEntity>> doInBackground(final Void... voids) {
for (SystemOSEntity systemOSEntity : mSystemOSDao.get())
{
List<SystemOSEntity> OSEntities = mSystemOSEntities.get(systemOSEntity.SystemId);
if (OSEntities == null)
{
OSEntities = new LinkedList<>();
}
OSEntities.add(systemOSEntity);
mSystemOSEntities.put(systemOSEntity.SystemId, OSEntities);
}
return mSystemOSEntities;
}
}
private static class upsertOSAsyncTask extends AsyncTask<Void , Void, Void> {
private OperatingSystemDao mOperatingSystemDao;
private UUID mSystemId;
private List<OperatingSystemEntity> mOperatingSystemEntities;
upsertOSAsyncTask(OperatingSystemDao operatingSystemDao, UUID systemId, List<OperatingSystemEntity> operatingSystemEntities) {
mOperatingSystemDao = operatingSystemDao;
mSystemId = systemId;
mOperatingSystemEntities = operatingSystemEntities;
}
protected Void doInBackground(final Void... voids) {
for (OperatingSystemEntity operatingSystemEntity: mOperatingSystemEntities) {
mOperatingSystemDao.upsert(operatingSystemEntity);
}
return null;
}
}
private static class upsertSystemOSAsyncTask extends AsyncTask<Void , Void, Void> {
private SystemOSDao mSystemOSDao;
private UUID mSystemId;
private List<SystemOSEntity> mSystemCPUEntities;
upsertSystemOSAsyncTask(SystemOSDao systemOSDao, UUID systemId, List<SystemOSEntity> systemOSEntities) {
mSystemOSDao = systemOSDao;
mSystemId = systemId;
mSystemCPUEntities = systemOSEntities;
}
protected Void doInBackground(final Void... voids) {
mSystemOSDao.deleteBySystemId(mSystemId);
for (SystemOSEntity systemOSEntity: mSystemCPUEntities) {
mSystemOSDao.insert(systemOSEntity);
}
return null;
}
}
}

View File

@@ -0,0 +1,220 @@
package uk.co.syski.client.android.model.repository;
import android.arch.core.util.Function;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.Transformations;
import android.content.Context;
import android.os.AsyncTask;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import uk.co.syski.client.android.model.api.VolleySingleton;
import uk.co.syski.client.android.model.api.requests.system.APISystemRAMRequest;
import uk.co.syski.client.android.model.database.SyskiCache;
import uk.co.syski.client.android.model.database.dao.RAMDao;
import uk.co.syski.client.android.model.database.dao.linking.SystemRAMDao;
import uk.co.syski.client.android.model.database.entity.RAMEntity;
import uk.co.syski.client.android.model.database.entity.linking.SystemRAMEntity;
import uk.co.syski.client.android.model.viewmodel.SystemRAMModel;
public enum RAMRepository {
INSTANCE;
// Database DAO's
private RAMDao mRAMDao;
private SystemRAMDao mSystemRAMDao;
// RAM Cache in Memory
private HashMap<UUID, RAMEntity> mRAMEntities;
private HashMap<UUID, List<SystemRAMEntity>> mSystemRAMEntities;
private HashMap<UUID, List<SystemRAMModel>> mSystemRAMModels;
// LiveData
private MutableLiveData<HashMap<UUID, List<SystemRAMModel>>> mLiveDataSystemRAMEntities;
RAMRepository() {
mRAMDao = SyskiCache.GetDatabase().RAMDao();
mSystemRAMDao = SyskiCache.GetDatabase().SystemRAMDao();
mRAMEntities = new HashMap<>();
mSystemRAMEntities = new HashMap<>();
mSystemRAMModels = new HashMap<>();
mLiveDataSystemRAMEntities = new MutableLiveData<>();
loadFromDatabase();
}
private void loadFromDatabase()
{
try {
// Load data from Database for RAM's
mRAMEntities = new loadRAMEntitiesAsyncTask(mRAMDao, mRAMEntities).execute().get();
// Load data from Database for System RAM's
mSystemRAMEntities = new loadSystemRAMEntitiesAsyncTask(mSystemRAMDao, mSystemRAMEntities).execute().get();
// Set Data in LiveData
for (Map.Entry<UUID, List<SystemRAMEntity>> entry : mSystemRAMEntities.entrySet())
{
List<SystemRAMModel> RAMModels = mSystemRAMModels.get(entry.getKey());
if (RAMModels == null)
{
RAMModels = new LinkedList<>();
}
for (SystemRAMEntity systemRAMEntity : entry.getValue())
{
RAMEntity ramEntity = mRAMEntities.get(systemRAMEntity.RAMId);
RAMModels.add(new SystemRAMModel(ramEntity.ModelName, ramEntity.ManufacturerName, ramEntity.MemoryTypeName, ramEntity.MemoryBytes));
}
mSystemRAMModels.put(entry.getKey(), RAMModels);
}
mLiveDataSystemRAMEntities.postValue(mSystemRAMModels);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
private void loadFromAPI(final Context context, final UUID systemId)
{
//TODO Load from API every user defined time.
VolleySingleton.getInstance(context).addToRequestQueue(new APISystemRAMRequest(context, systemId));
}
public LiveData<List<SystemRAMModel>> getSystemRAMsLiveData(final UUID systemId, Context context)
{
loadFromAPI(context, systemId);
return Transformations.map(mLiveDataSystemRAMEntities, new Function<HashMap<UUID, List<SystemRAMModel>>, List<SystemRAMModel>>() {
@Override
public List<SystemRAMModel> apply(HashMap<UUID, List<SystemRAMModel>> input) {
List<SystemRAMModel> ramModelList = input.get(systemId);
if (ramModelList == null)
{
ramModelList = new LinkedList<>();
}
if (ramModelList.isEmpty())
{
ramModelList.add(new SystemRAMModel());
}
return ramModelList;
}
});
}
public RAMEntity get(UUID id)
{
return mRAMEntities.get(id);
}
public void upsert(UUID systemId, List<SystemRAMEntity> systemRAMEntities, List<RAMEntity> ramEntities)
{
try {
new upsertRAMAsyncTask(mRAMDao, ramEntities).execute().get();
new upsertSystemRAMAsyncTask(mSystemRAMDao, systemId, systemRAMEntities).execute().get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
List<SystemRAMModel> systemRAMModels = new LinkedList<>();
for (RAMEntity ramEntity : ramEntities)
{
mRAMEntities.put(ramEntity.Id, ramEntity);
systemRAMModels.add(new SystemRAMModel(ramEntity.ModelName, ramEntity.ManufacturerName, ramEntity.MemoryTypeName, ramEntity.MemoryBytes));
}
mSystemRAMModels.put(systemId, systemRAMModels);
mLiveDataSystemRAMEntities.postValue(mSystemRAMModels);
}
private static class loadRAMEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, RAMEntity>> {
private RAMDao mRAMDao;
private HashMap<UUID, RAMEntity> mRAMEntities;
loadRAMEntitiesAsyncTask(RAMDao ramDao, HashMap<UUID, RAMEntity> RAMEntities) {
mRAMDao = ramDao;
mRAMEntities = RAMEntities;
}
protected HashMap<UUID, RAMEntity> doInBackground(final Void... voids) {
for (RAMEntity ramEntity : mRAMDao.get())
{
mRAMEntities.put(ramEntity.Id, ramEntity);
}
return mRAMEntities;
}
}
private static class loadSystemRAMEntitiesAsyncTask extends AsyncTask<Void, Void, HashMap<UUID, List<SystemRAMEntity>>> {
private SystemRAMDao mSystemRAMDao;
private HashMap<UUID, List<SystemRAMEntity>> mSystemRAMEntities;
loadSystemRAMEntitiesAsyncTask(SystemRAMDao systemRAMDao, HashMap<UUID, List<SystemRAMEntity>> systemRAMEntities) {
mSystemRAMDao = systemRAMDao;
mSystemRAMEntities = systemRAMEntities;
}
protected HashMap<UUID, List<SystemRAMEntity>> doInBackground(final Void... voids) {
for (SystemRAMEntity SystemRAMEntity : mSystemRAMDao.get())
{
List<SystemRAMEntity> RAMEntities = mSystemRAMEntities.get(SystemRAMEntity.SystemId);
if (RAMEntities == null)
{
RAMEntities = new LinkedList<>();
}
RAMEntities.add(SystemRAMEntity);
mSystemRAMEntities.put(SystemRAMEntity.SystemId, RAMEntities);
}
return mSystemRAMEntities;
}
}
private static class upsertRAMAsyncTask extends AsyncTask<Void , Void, Void> {
private RAMDao mRAMDao;
private List<RAMEntity> mRAMEntities;
upsertRAMAsyncTask(RAMDao ramDao, List<RAMEntity> ramEntities) {
mRAMDao = ramDao;
mRAMEntities = ramEntities;
}
protected Void doInBackground(final Void... voids) {
for (RAMEntity ramEntity: mRAMEntities) {
mRAMDao.upsert(ramEntity);
}
return null;
}
}
private static class upsertSystemRAMAsyncTask extends AsyncTask<Void , Void, Void> {
private SystemRAMDao mSystemRAMDao;
private UUID mSystemId;
private List<SystemRAMEntity> mSystemRAMEntities;
upsertSystemRAMAsyncTask(SystemRAMDao systemRAMDao, UUID systemId, List<SystemRAMEntity> systemRAMEntities) {
mSystemRAMDao = systemRAMDao;
mSystemId = systemId;
mSystemRAMEntities = systemRAMEntities;
}
protected Void doInBackground(final Void... voids) {
mSystemRAMDao.deleteBySystemId(mSystemId);
for (SystemRAMEntity systemRAMEntity: mSystemRAMEntities) {
mSystemRAMDao.insert(systemRAMEntity);
}
return null;
}
}
}

Some files were not shown because too many files have changed in this diff Show More