package com.android.iliConnect.dataproviders;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.concurrent.locks.ReentrantLock;
import org.xmlpull.v1.XmlPullParser;
import android.content.res.XmlResourceParser;
import android.widget.Toast;
import com.android.iliConnect.MainActivity;
import com.android.iliConnect.MainTabView;
import com.android.iliConnect.MessageBuilder;
import com.android.iliConnect.R;
import com.android.iliConnect.models.Authentification;
import com.android.iliConnect.models.Current;
import com.android.iliConnect.models.Desktop;
import com.android.iliConnect.models.Item;
import com.android.iliConnect.models.LocalData;
import com.android.iliConnect.models.Notification;
import com.android.iliConnect.models.Notifications;
import com.android.iliConnect.models.RemoteData;
import com.android.iliConnect.models.Results;
import com.android.iliConnect.models.Settings;
import com.android.iliConnect.models.modification.AppData;
public class LocalDataProvider {
private static LocalDataProvider instance;
public Settings settings = new Settings();
public Notifications notifications = new Notifications();
public LocalData localdata = new LocalData();
public RemoteData remoteData = new RemoteData();
public AppData appData = new AppData();
public Desktop desktopItems = new Desktop();
public Authentification auth = new Authentification();;
public Results results = new Results();
public String appDataFileName = "AppData.xml";
public String searchDataFileName = "SearchData.xml";
public String remoteDataFileName = "RemoteData.xml";
public String localDataFilename = "LocalData.xml";
public static boolean isAvaiable = false;
public boolean isUpdating = false;
public ReentrantLock syncObject;
public static LocalDataProvider getInstance() {
if (instance == null) {
instance = new LocalDataProvider();
}
return instance;
}
public void init(int xmlRes) {
syncObject = new ReentrantLock();
String dataFile = "";
if (xmlRes == R.xml.config) {
dataFile = localDataFilename;
} else {
dataFile = appDataFileName;
}
File config = new File(MainActivity.instance.getFilesDir() + "/" + dataFile);
if (!config.exists()) {
XmlResourceParser xpp = MainActivity.currentActivity.getResources().getXml(xmlRes);
StringBuffer stringBuffer = new StringBuffer();
try {
xpp.next();
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
stringBuffer.append("<" + xpp.getName() + ">");
} else if (eventType == XmlPullParser.END_TAG) {
stringBuffer.append("</" + xpp.getName() + ">");
} else if (eventType == XmlPullParser.TEXT) {
stringBuffer.append(xpp.getText());
}
eventType = xpp.next();
}
OutputStream output = new FileOutputStream(MainActivity.instance.getFilesDir() + "/" + dataFile);
output.write(stringBuffer.toString().getBytes());
} catch (Exception e) {
Toast t = Toast.makeText(MainActivity.instance, "Fehler beim Erstellen der lokalen Konfigurationsdatei.", Toast.LENGTH_LONG);
t.show();
}
}
}
public boolean updateLocalData() {
try {
remoteData.load();
appData.load();
if (remoteData.Current != null) {
Current current = remoteData.Current;
if (current.Desktop != null && current.Desktop.DesktopItem != null) {
desktopItems.DesktopItem = current.Desktop.DesktopItem;
} else {
ArrayList<Item> items = new ArrayList<Item>();
desktopItems.DesktopItem = items;
}
if (current.Notifications != null) {
notifications.Notifications = remoteData.Current.Notifications;
} else {
ArrayList<Notification> notis = new ArrayList<Notification>();
notifications.Notifications = notis;
}
}
if (new File(MainActivity.instance.getFilesDir() + "/" + appDataFileName).exists()) {
appData.load();
}
isUpdating = false;
if (new File(MainActivity.instance.getFilesDir() + "/" + searchDataFileName).exists())
results.load();
synchronized (MainActivity.syncObject) {
MainActivity.syncObject.notifyAll();
}
if (MainTabView.getInstance() != null)
MainTabView.getInstance().update();
} catch (Exception e) {
MessageBuilder.exception_message(MainTabView.instance, "Es ist ein Fehler während der Synchronisation aufgetreten.");
// Datei löschen, falls beim Erzeugen ein Fehler aufgetreten ist.
File remoteDataFile = new File(MainActivity.instance.getFilesDir() + "/" + MainActivity.instance.localDataProvider.remoteDataFileName);
remoteDataFile.delete();
//MainActivity.instance.logout();
return false;
}
isAvaiable = true;
return true;
}
public void deleteAuthentication() {
MainActivity.instance.localDataProvider.auth.setLogin(false, "", "", "http://swe.k3mp.de/ilias/");
MainActivity.instance.localDataProvider.localdata.save();
}
}