/*
* Copyright (C) 2015 Red Hat, Inc. and/or its affiliates.
*
* 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 org.jboss.errai.demo.todo.client.local.shadow;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import org.jboss.errai.bus.client.api.BusLifecycleAdapter;
import org.jboss.errai.bus.client.api.BusLifecycleEvent;
import org.jboss.errai.bus.client.api.ClientMessageBus;
import org.jboss.errai.bus.server.annotations.ShadowService;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.demo.todo.shared.RegistrationException;
import org.jboss.errai.demo.todo.shared.SignupService;
import org.jboss.errai.demo.todo.shared.TodoListUser;
/**
* ShadowService implementation of the SignupService this service will get invoked automatically when the bus
* is disconnected. It registers a listener when the bus is back online and will then register the user
* in the background.
* @author edewit@redhat.com
*/
@ShadowService
public class SignupServiceShadow implements SignupService {
@Inject
private EntityManager entityManager;
@Inject
private ClientMessageBus bus;
@Inject
private Caller<SignupService> signupService;
@PostConstruct
private void init() {
bus.addLifecycleListener(new BusLifecycleAdapter() {
@Override
public void busOnline(BusLifecycleEvent event) {
final List<TempUser> tempUsers = entityManager.createNamedQuery("allTempUsers", TempUser.class).getResultList();
for (TempUser tempUser : tempUsers) {
try {
signupService.call().register(tempUser.asUser(), tempUser.getPassword());
entityManager.remove(tempUser);
} catch (RegistrationException e) {
//TODO maybe here we want to take the user back to the signup page?
throw new RuntimeException(e);
}
}
}
});
}
@Override
public TodoListUser register(TodoListUser newUserObject, String password) throws RegistrationException {
entityManager.persist(new TempUser(newUserObject, password));
return newUserObject;
}
}