package myapp; import static com.googlecode.objectify.ObjectifyService.ofy; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.google.apphosting.api.ApiProxy; import com.googlecode.objectify.ObjectifyService; import com.googlecode.objectify.annotation.Entity; import com.googlecode.objectify.annotation.Id; import com.googlecode.objectify.annotation.Ignore; /** * The @Entity tells Objectify about our entity. We also register it in {@link OfyHelper} * Our primary key @Id is set automatically by the Google Datastore for us. * * We add a @Parent to tell the object about its ancestor. We are doing this to support many * guestbooks. Objectify, unlike the AppEngine library requires that you specify the fields you * want to index using @Index. Only indexing the fields you need can lead to substantial gains in * performance -- though if not indexing your data from the start will require indexing it later. * * NOTE - all the properties are PUBLIC so that can keep the code simple. **/ @Entity public class ItemStatus { @Id public String text; public Boolean worthTryingToRenew; @Ignore boolean justCreated = false; public ItemStatus() { } public ItemStatus(String text, Boolean worthTryingToRenew) { this.text = text; this.worthTryingToRenew = worthTryingToRenew; this.justCreated = true; } static { ObjectifyService.register(ItemStatus.class); } public static ItemStatus findOrCreate(String text, Boolean worthTryingToRenew) { return findOrCreate(text, worthTryingToRenew, null); } public static ItemStatus findOrCreate(String text, HtmlPage page) { return findOrCreate(text, true, page); } public static ItemStatus findOrCreate(String text, Boolean worthTryingToRenew, HtmlPage page) { ItemStatus status = ofy().load().type(ItemStatus.class).id(text).now(); if(status == null) { status = new ItemStatus(text, worthTryingToRenew); ofy().save().entity(status).now(); if(page != null) LibraryRenewer.email(null, "New item status created", String.format("The new item status '%s' https://console.developers.google.com/datastore/query?queryType=KindQuery&namespace=&kind=ItemStatus&project=%s has been created and is defaulting to triggering additional renew attempts.\n\n\n%s", text, ((String)ApiProxy.getCurrentEnvironment().getAttributes().get("com.google.appengine.runtime.default_version_hostname")). replaceFirst("\\.appspot\\.com$", ""), page.asXml())); } return status; } }