/* Copyright (c) 2008 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 com.google.api.gbase.client; import com.google.gdata.util.common.xml.XmlWriter; import com.google.gdata.data.Extension; import com.google.gdata.data.ExtensionDescription; import com.google.gdata.data.ExtensionProfile; import com.google.gdata.util.ParseException; import com.google.gdata.util.XmlParser; import com.google.gdata.util.XmlParser.ElementHandler; import org.xml.sax.Attributes; import java.io.IOException; /** * Object representation of the gm:publishing_priority tag. */ public class GmPublishingPriority implements Extension { /** GData attribute name under which to expose the publishing priority. */ private static final String ATTRIBUTE_NAME = "publishing_priority"; /** * Possible values for the indexing element. */ public enum Value { /** The item has a high priority for getting published. Using this value * should result in the item getting published (available for search) * in a very short time (less than a minute, most of the time). */ HIGH("high"), /** * The item has a low priority for getting published. Using this value * should result in the item getting published (available for search) * in less than a day. */ LOW("low"); private final String value; private Value(String value) { this.value = value; } /** * Returns the text value, as represented in the entry. */ public String getTextValue() { return value; } /** * Returns the priority value based on the {@code textValue} * parameter, or {@code null} if no such value exists. * * @param textValue text representation of the value * @return the priority value, or {@code null} if not found */ public static Value getByText(String textValue) { for (Value pipeline : Value.values()) { if (pipeline.getTextValue().equals(textValue)) { return pipeline; } } return null; } } /** The publishing priority for the entry. */ private Value value; /** * Creates a gm:publishing_priority tag. */ public GmPublishingPriority() { } /** * Returns a description for this extension. */ public static ExtensionDescription getDefaultDescription() { ExtensionDescription desc = new ExtensionDescription(); desc.setExtensionClass(GmPublishingPriority.class); desc.setNamespace(GoogleBaseNamespaces.GM); desc.setLocalName(ATTRIBUTE_NAME); desc.setRepeatable(false); return desc; } public Value getValue() { return value; } public void setValue(Value value) { this.value = value; } public void generate(XmlWriter w, ExtensionProfile extProfile) throws IOException { w.simpleElement(GoogleBaseNamespaces.GM, ATTRIBUTE_NAME, null, value.getTextValue()); } public ElementHandler getHandler(ExtensionProfile extProfile, String namespace, String localName, Attributes attrs) { return new XmlParser.ElementHandler() { @Override public void processEndElement() throws ParseException { if (value == null) { throw new ParseException("No value specified for " + ATTRIBUTE_NAME + " element."); } String text = value.trim().toLowerCase(); Value parsedValue = Value.getByText(text); if (parsedValue == null) { throw new ParseException("Invalid value specified for " + ATTRIBUTE_NAME + " element: '" + text + "'"); } GmPublishingPriority.this.value = parsedValue; } }; } }