package org.wahlzeit.model;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Work;
import org.wahlzeit.services.ObjectManager;
import org.wahlzeit.servlets.AbstractServlet;
import java.util.logging.Logger;
import static org.wahlzeit.services.OfyService.ofy;
/**
* Manager that cares about the global variables. It is used from the outside by the following two methods:
*
* @see #loadGlobals()
* @see #saveGlobals()
*
* @review
*/
public class GlobalsManager extends ObjectManager {
private static final Logger log = Logger.getLogger(GlobalsManager.class.getName());
/**
*
*/
private static GlobalsManager instance = new GlobalsManager();
/**
* @methodtype command Loads all global variables and stores them in their corresponding classes.
*/
public void loadGlobals() {
initGlobals();
Globals globals = ObjectifyService.run(new Work<Globals>() {
@Override
public Globals run() {
return readObject(Globals.class, Globals.DEAULT_ID);
}
});
log.info(globals.asString());
UserManager.getInstance().setLastClientId(globals.getLastUserId());
PhotoId.setCurrentIdFromInt(globals.getLastPhotoId());
Case.setLastCaseId(new CaseId(globals.getLastCaseId()));
AbstractServlet.setLastSessionId(globals.getLastSessionId());
}
/**
* @methodtype wrapper
*/
private void initGlobals() {
if (!GlobalsManager.getInstance().hasGlobals()) {
createDefaultGlobals();
}
}
/**
* @methodtype boolean querry
*/
private boolean hasGlobals() {
return ObjectifyService.run(new Work<Boolean>() {
@Override
public Boolean run() {
return ofy().load().type(Globals.class).first().now() != null;
}
});
}
/**
* @methodtype get
*/
public static GlobalsManager getInstance() {
return instance;
}
/**
* @methodtype command
*/
private void createDefaultGlobals() {
ObjectifyService.run(new Work<Boolean>() {
@Override
public Boolean run() {
Globals globals = new Globals();
globals.setLastUserId(Globals.DEAULT_ID);
globals.setLastPhotoId(0);
globals.setLastCaseId(0);
globals.setLastSessionId(0);
ofy().save().entity(globals).now();
return null;
}
});
}
/**
* @methodtype command Saves all global variables.
*/
public synchronized void saveGlobals() {
final Globals globals = new Globals();
globals.setLastUserId(UserManager.getInstance().getLastClientId());
globals.setLastPhotoId(PhotoId.getCurrentIdAsInt());
globals.setLastCaseId(Case.getLastCaseId().asInt());
globals.setLastSessionId(AbstractServlet.getLastSessionId());
log.info(globals.asString());
ObjectifyService.run(new Work<Void>() {
@Override
public Void run() {
writeObject(globals);
return null;
}
});
}
}