⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recipe.java

📁 google的gdata api包
💻 JAVA
字号:
/* Copyright (c) 2006 Google Inc. * * 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 sample.gbase.recipe;import com.google.api.gbase.client.GoogleBaseEntry;import com.google.api.gbase.client.NumberUnit;import com.google.gdata.data.Content;import com.google.gdata.data.DateTime;import com.google.gdata.data.OtherContent;import com.google.gdata.data.Person;import com.google.gdata.data.TextConstruct;import com.google.gdata.data.TextContent;import java.net.MalformedURLException;import java.net.URL;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Collection;import java.util.Date;import java.util.HashSet;import java.util.List;import java.util.Set;/** * One recipe, ready to be displayed.  * Just a data holding object. */public class Recipe {  public final static String RECIPE_ITEMTYPE = "recipes";    public final static String MAIN_INGREDIENT_ATTRIBUTE = "main ingredient";  public final static String CUISINE_ATTRIBUTE = "cuisine";  public final static String COOKING_TIME_ATTRIBUTE = "cooking time";  public final static String AUTHOR_UNKNOWN = "";    private final String id;  private final DateTime postedOn;  private final String postedBy;  private final NumberUnit<Integer> cookingTime;  private final String url;  private final String title;  private final String description;  /** A never-null list that contains the main ingredients. */  private final Set<String> mainIngredient;  /** A never-null list that contains the cuisines. */  private final Set<String> cuisine;  /**   * Creates a recipe. The parameters can be null.   *    * @param id id generated by the GoogleBase server   * @param title    * @param url alternate url of the recipe;    *            if null, when the recipe is used to insert or to update   *            it is generated by the GoogleBase server   * @param description   * @param mainIngredient   * @param cuisine   * @param cookingTime   */  public Recipe(String id, String title, String url,       String description, Set<String> mainIngredient, Set<String> cuisine,       NumberUnit<Integer> cookingTime) {    if (mainIngredient == null) {      mainIngredient = new HashSet<String>();    }    if (cuisine == null) {      cuisine = new HashSet<String>();    }    this.id = id;        this.title = title;    this.url = url;    this.description = description;    this.mainIngredient = mainIngredient;    this.cuisine = cuisine;    this.cookingTime = cookingTime;        this.postedOn = null;    this.postedBy = null;  }    /**   * Creates a recipe out of a GoogleBaseEntry.   *    * @param entry an entry that represents a recipe   */  public Recipe(GoogleBaseEntry entry) {    id = extractIdFromUrl(entry.getId());    title = entry.getTitle().getPlainText();    url = entry.getHtmlLink().getHref();    String description = null;    if (entry.getContent() != null) {      Content content = entry.getContent();      if (content instanceof TextContent) {        description = ((TextContent)content).getContent().getPlainText();      } else if (content instanceof OtherContent) {        description = ((OtherContent)content).getText();      }    }    this.description = description;    mainIngredient = new HashSet<String>(entry.getGoogleBaseAttributes().        getTextAttributeValues(MAIN_INGREDIENT_ATTRIBUTE));    cuisine = new HashSet<String>(entry.getGoogleBaseAttributes().        getTextAttributeValues(CUISINE_ATTRIBUTE));    cookingTime = entry.getGoogleBaseAttributes().        getIntUnitAttribute(COOKING_TIME_ATTRIBUTE);    postedOn = entry.getPublished();    // if an entry has no author specified, will set it to empty string    List<Person> authors = entry.getAuthors();    postedBy = (authors.isEmpty() ? AUTHOR_UNKNOWN : authors.get(0).getName());  }  /**   * Creates an empty recipe, the values are null or empty Sets.   */  public Recipe() {    this(null, null, null, null, null, null, null);  }  public GoogleBaseEntry toGoogleBaseEntry(String idUrl)  {    GoogleBaseEntry entry = new GoogleBaseEntry();    entry.getGoogleBaseAttributes().setItemType(RECIPE_ITEMTYPE);    if (idUrl != null) {      entry.setId(idUrl);    }    entry.setTitle(TextConstruct.create(TextConstruct.Type.TEXT, title, null));    if (url != null) {      entry.addHtmlLink(url, null, null);    }    if (description != null) {      // If the original content was not TEXT, the formatting is lost      entry.setContent(          TextConstruct.create(TextConstruct.Type.TEXT, description, null));    }    for (String ingredient : mainIngredient) {      entry.getGoogleBaseAttributes().addTextAttribute(          MAIN_INGREDIENT_ATTRIBUTE, ingredient);    }    for (String cuisineItem : cuisine) {      entry.getGoogleBaseAttributes().addTextAttribute(          CUISINE_ATTRIBUTE, cuisineItem);    }    if (cookingTime != null) {      entry.getGoogleBaseAttributes().addIntUnitAttribute(          COOKING_TIME_ATTRIBUTE, cookingTime);    }    return entry;  }    /**   * Extracts the id of the item from the given url.   *    * The id found in GoogleBaseEntry is a URL that contains the real, numerical   * id of the item in Google Base. Parsing the URL is unfortunately the   * only way of getting a numerical id given a GoogleBaseEntry.   *   * @param url a URL that ends with "/" [N] number   */  private static String extractIdFromUrl(String url) {    int lastSlash = url.lastIndexOf('/');    if (lastSlash == -1 || lastSlash == (url.length()-1)) {      throw new IllegalArgumentException("Id is in a strange format. " + url);    }    String oid = url.substring(lastSlash + 1);    return oid;  }  /** Checks whether there is a description for the recipe. */  public boolean hasDescription() {    return description != null;  }  /** Checks whether there is a cooking time for the recipe. */  public boolean hasCookingTime() {    return cookingTime != null;  }  /** Checks whether there are some cuisines for the recipe. */  public boolean hasCuisine() {    return cuisine.size() > 0;  }  /** Checks whether there are some main ingredients for the recipe. */  public boolean hasMainIngredient() {    return mainIngredient.size() > 0;  }  /**    * Gets the date at which the recipe was posted, as a string.    *    * @param detailed set to true to get a full date and time   */  public String getPostedOnAsString(boolean detailed) {    Date date = new Date(postedOn.getValue());    String template = detailed ? "MMMMM d, yyyy HH:mm z" : "MMM d";    DateFormat format = new SimpleDateFormat(template);    return format.format(date);  }  /** Gets the host and protocol from the recipe URL. */  public String getHostAndProtocol() throws MalformedURLException {    URL urlObject = new URL(getUrl());    return urlObject.getProtocol() + "://" + urlObject.getHost();  }  /**    * Returns true when the title, description, mainIngredient and cuisine    * attributes are not null nor empty.    */  public boolean isComplete() {    return title != null &&        description != null &&        mainIngredient.size() > 0 &&        cuisine.size() > 0;  }  @Override  public String toString() {    StringBuffer sb = new StringBuffer();    sb.append("Recipe[");    appendNamedParameter(sb, "title", title);    appendNamedParameter(sb, "id", id);    appendNamedParameter(sb, "url", url);    appendNamedParameter(sb, "description", description);    appendNamedParameter(sb, "cookingTime", cookingTime);    appendNamedParameter(sb, "postedOn", postedOn);    appendNamedParameter(sb, "postedBy", postedBy);    appendNamedCollection(sb, "mainIngredient", mainIngredient);    appendNamedCollection(sb, "cuisine", cuisine);    sb.append("]");    return sb.toString();  }    /**   * Appends the name and the value of an Object to a StringBuffer.   *    * @param sb   * @param name   * @param value   */  private static void appendNamedParameter(StringBuffer sb,                                      String name,                                      Object value) {    if (value != null) {      sb.append(name).append("=\"").append(value).append("\" ");    }  }  /**   * Appends the name and the elements of a Collection to a StringBuffer.   *    * @param sb   * @param name   * @param collection   */  private static void appendNamedCollection(      StringBuffer sb,       String name,      Collection<String> collection) {    if (collection.size() > 0) {      sb.append(name).append("=(");      for (String value : collection) {        sb.append("\"").append(value).append("\", ");      }      sb.append(") ");    }  }  /** Gets the id generated by the server. */  public String getId() {    return id;  }  /** Gets the user assigned title. */  public String getTitle() {    return title;  }  /**   * Gets the url of the recipe, as set by the customer.    * If the customer sets no url, the server will generate one.   */  public String getUrl() {    return url;  }  /** Gets the user assigned description. */  public String getDescription() {    return description;  }  /** Returns a never-null Set with the main ingredients of the recipe. */  public Set<String> getMainIngredient() {    return mainIngredient;  }  /** Returns a never-null Set with the cuisines the recipe belongs to. */  public Set<String> getCuisine() {    return cuisine;  }  /** Gets the user assigned cooking time. */  public NumberUnit<Integer> getCookingTime() {    return cookingTime;  }  /** Gets the server generated owner attribute of the recipe. */  public String getPostedBy() {    return postedBy;  }  /** Gets the server generated date at which the recipe was posted. */  public DateTime getPostedOn() {    return postedOn;  }  /** Returns true when the Recipe doesn't have an id. */  public boolean isNew() {    return id == null;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -