/// <summary> /// Aktualisiert den Nutzernamen des lokalen Nutzers der Anwendung, falls eine Änderung /// gegenüber dem aktuellen Nutzernamen vorliegt. Die Aktualisierung erfolgt sowohl lokal, /// als auch auf dem REST Server. /// </summary> /// <param name="username">Der neue Nutzername des lokalen Nutzers.</param> /// <exception cref="ClientException">Wirft ClientException, wenn Aktualisierung nicht durchgeführt werden konnte.</exception> public async Task<bool> UpdateLocalUsernameAsync(string username) { User currentLocalUser = base.getLocalUser(); // Prüfe, ob der Name aktualisiert werden muss. if(String.Compare(currentLocalUser.Name, username) != 0) { // Setze neuen Namen in ein Nutzer Objekt und führe Eingabevalidierung durch. User tmpLocalUser = new User(); tmpLocalUser.Name = username; tmpLocalUser.ValidateNameProperty(); if(tmpLocalUser.HasValidationError("Name")) { // Melde Validationsfehler und breche ab. base.reportValidationErrors(tmpLocalUser.GetValidationErrors()); return false; } else { tmpLocalUser.ClearValidationErrors(); base.clearValidationErrorForProperty("Name"); } // Verwende Funktionalität im LocalUserController, um die Aktualisierung des Namens durchzuführen. await localUserController.UpdateLocalUserAsync(username, null); } return true; }
/// <summary> /// Erstelle einen lokalen Nutzeraccount. /// </summary> /// <param name="name">Der Name für den Nutzer.</param> /// <returns>Liefert true zurück, wenn der Account erfolgreich angelegt wurde. False, wenn die Validierung fehlgeschlagen hat.</returns> /// <exception cref="ClientException">Wirft eine ClientException, wenn die Erstellung des Nutzeraccounts wegen eines aufgetretenen Fehlers fehlschlägt.</exception> public async Task<bool> CreateLocalUserAsync(string name) { Debug.WriteLine("Starting createLocalUser()."); // TODO: Platziere diesen Code woanders und gebe ihn über einen Parameter an diese Methode. // Frage eine Kanal-URI vom WNS ab, die dann als PushAccessToken für diesen Nutzer dient. PushNotificationChannel pushChannel = null; try { pushChannel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); Debug.WriteLine("Received a channel URI: " + pushChannel.Uri); } catch (Exception ex) { Debug.WriteLine("Exception occurred in CreateLocalUserAsync during WNS initialization. The message is: {0}.", ex.Message); // Abbilden auf ClientException. throw new ClientException(ErrorCodes.WnsChannelInitializationFailed, "Initialization of channel to WNS has failed."); } User localUser = new User(); localUser.Name = name; localUser.PushAccessToken = pushChannel.Uri; localUser.Platform = DataHandlingLayer.DataModel.Enums.Platform.WINDOWS; // Führe Datenvalidierung auf Property Name aus. localUser.ClearValidationErrors(); clearValidationErrorForProperty("Name"); localUser.ValidateNameProperty(); if(localUser.HasValidationError("Name")) { reportValidationErrors(localUser.GetValidationErrors()); return false; } // Generiere Json String aus dem Objekt. string jsonContent = jsonParser.ParseUserToJsonString(localUser); Debug.WriteLine("The json String is: " + jsonContent); if (jsonContent == null) { Debug.WriteLine("Error during serialization to json. Cannot continue."); throw new ClientException(ErrorCodes.JsonParserError, "Creation of user account has failed."); } // Sende einen Request zum Erstellen eines Nutzeraccounts. string responseString; try { responseString = await userAPI.SendCreateUserRequestAsync(jsonContent); } catch (APIException e) { Debug.WriteLine("Error occured. The creation of the user account has failed."); Debug.WriteLine("The error code is: " + e.ErrorCode + " and the status code of the response is: " + e.ResponseStatusCode); // Abbilden des aufgetretenen Fehlers auf eine ClientException. throw new ClientException(e.ErrorCode, "Creation of user account has failed."); } // Deserialisiere den Antwort String des Servers. localUser = jsonParser.ParseUserFromJson(responseString); // Speichere den erstellten Nutzeraccount in der Datenbank ab. if (localUser != null) { try { localUserDB.StoreLocalUser(localUser); } catch (DatabaseException ex) { Debug.WriteLine("A exception occurred in the local database. Exception message is: " + ex.Message); // Abbilden des aufgetretenen Fehlers auf eine ClientException. throw new ClientException(ErrorCodes.LocalDatabaseException, "Creation of user account has failed."); } } else { // Abbilden des aufgetretenen Fehlers auf eine ClientException. throw new ClientException(ErrorCodes.JsonParserError, "Creation of user account has failed."); } Debug.WriteLine("Finished createLocalUser()."); return true; }