/*******************************************************************************
* Copyright 2013-2015 alladin-IT GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package at.alladin.rmbt.android.util;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.util.Log;
import at.alladin.rmbt.android.main.RMBTMainActivity;
/**
*
* @author
*
*/
public class CheckSettingsTask extends AsyncTask<Void, Void, JSONArray>
{
/**
*
*/
private static final String DEBUG_TAG = "CheckSettingsTask";
/**
*
*/
private final RMBTMainActivity activity;
/**
*
*/
private ControlServerConnection serverConn;
/**
*
*/
private EndTaskListener endTaskListener;
/**
*
*/
private boolean hasError = false;
/**
*
* @param activity
*/
public CheckSettingsTask(final RMBTMainActivity activity)
{
this.activity = activity;
}
/**
*
*/
@Override
protected JSONArray doInBackground(final Void... params)
{
JSONArray resultList = null;
serverConn = new ControlServerConnection(activity.getApplicationContext());
resultList = serverConn.requestSettings();
return resultList;
}
/**
*
*/
@Override
protected void onPostExecute(final JSONArray resultList)
{
System.err.println("\n\n\n" + resultList + "\n\n\n");
try
{
if (serverConn.hasError())
hasError = true;
else if (resultList != null && resultList.length() > 0)
{
JSONObject resultListItem;
try
{
resultListItem = resultList.getJSONObject(0);
/* UUID */
final String uuid = resultListItem.optString("uuid", "");
if (uuid != null && uuid.length() != 0)
ConfigHelper.setUUID(activity.getApplicationContext(), uuid);
/* urls */
final ConcurrentMap<String, String> volatileSettings = ConfigHelper.getVolatileSettings();
final JSONObject urls = resultListItem.optJSONObject("urls");
if (urls != null)
{
final Iterator<String> keys = urls.keys();
while (keys.hasNext())
{
final String key = keys.next();
final String value = urls.optString(key, null);
if (value != null) {
volatileSettings.put("url_" + key, value);
if ("statistics".equals(key)) {
ConfigHelper.setCachedStatisticsUrl(value, activity);
}
else if ("control_ipv4_only".equals(key)) {
ConfigHelper.setCachedControlServerNameIpv4(value, activity);
}
else if ("control_ipv6_only".equals(key)) {
ConfigHelper.setCachedControlServerNameIpv6(value, activity);
}
else if ("url_ipv4_check".equals(key)) {
ConfigHelper.setCachedIpv4CheckUrl(value, activity);
}
else if ("url_ipv6_check".equals(key)) {
ConfigHelper.setCachedIpv6CheckUrl(value, activity);
}
}
}
}
/* qos names */
final JSONArray qosNames = resultListItem.optJSONArray("qostesttype_desc");
if (qosNames != null) {
final Map<String, String> qosNamesMap = new HashMap<String, String>();
for (int i = 0; i < qosNames.length(); i++) {
JSONObject json = qosNames.getJSONObject(i);
qosNamesMap.put(json.optString("test_type"), json.optString("name"));
}
ConfigHelper.setCachedQoSNames(qosNamesMap, activity);
}
/* map server */
final JSONObject mapServer = resultListItem.optJSONObject("map_server");
if (mapServer != null)
{
final String host = mapServer.optString("host");
final int port = mapServer.optInt("port");
final boolean ssl = mapServer.optBoolean("ssl");
if (host != null && port > 0)
ConfigHelper.setMapServer(activity, host, port, ssl);
}
/* control server version */
final JSONObject versions = resultListItem.optJSONObject("versions");
if (versions != null)
{
if (versions.has("control_server_version")) {
ConfigHelper.setControlServerVersion(activity, versions.optString("control_server_version"));
}
}
// ///////////////////////////////////////////////////////
// HISTORY / FILTER
final JSONObject historyObject = resultListItem.getJSONObject("history");
final JSONArray deviceArray = historyObject.getJSONArray("devices");
final JSONArray networkArray = historyObject.getJSONArray("networks");
final String historyDevices[] = new String[deviceArray.length()];
for (int i = 0; i < deviceArray.length(); i++)
historyDevices[i] = deviceArray.getString(i);
final String historyNetworks[] = new String[networkArray.length()];
for (int i = 0; i < networkArray.length(); i++)
historyNetworks[i] = networkArray.getString(i);
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
activity.setSettings(historyDevices, historyNetworks);
activity.setHistoryDirty(true);
// /////
///////// servers
final Set<String> serverSet;
final JSONArray servers = resultListItem.optJSONArray("servers");
if (servers == null)
serverSet = null;
else
{
serverSet = new TreeSet<String>();
for (int i = 0; i < servers.length(); i++)
{
final JSONObject serverObj = (JSONObject) servers.get(i);
final String serverName = serverObj.getString("name");
final String serverUuid = serverObj.getString("uuid");
final Server server = new Server(serverName, serverUuid);
serverSet.add(server.encode());
System.out.println("server: " + serverName + " " + serverUuid);
}
}
ConfigHelper.setServers(activity, serverSet);
///////// permissions
final JSONArray permissions = resultListItem.optJSONArray("request_android_permissions");
if (permissions != null)
PermissionHelper.setRequestPermissions(permissions);
}
catch (final JSONException e)
{
e.printStackTrace();
}
}
else
Log.i(DEBUG_TAG, "LEERE LISTE");
}
finally
{
if (endTaskListener != null)
endTaskListener.taskEnded(resultList);
}
}
/**
*
* @param endTaskListener
*/
public void setEndTaskListener(final EndTaskListener endTaskListener)
{
this.endTaskListener = endTaskListener;
}
/**
*
* @return
*/
public boolean hasError()
{
return hasError;
}
}