/* 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.gdata.data.webmastertools; import com.google.gdata.util.common.xml.XmlWriter; import com.google.gdata.data.ExtensionDescription; import com.google.gdata.data.ExtensionPoint; import com.google.gdata.data.ExtensionProfile; import com.google.gdata.data.ValueConstruct; import com.google.gdata.util.ParseException; import com.google.gdata.util.XmlParser; import org.xml.sax.Attributes; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; /** * Represents list of available markup languages for mobile sitemap. The idea is * that this class lists all the available options for a given site and user * picks one of the options when submitting mobile sitemap. * * Example: * <pre class="code"> * <feed ...> * ... * <wt:sitemap-mobile> * <wt:markup-language>HTML</wt:markup-language> * <wt:markup-language>WAP</wt:markup-language> * </wt:sitemap-mobile> * </feed> * </pre> * * */ @ExtensionDescription.Default( nsAlias = Namespaces.WT_ALIAS, nsUri = Namespaces.WT, localName = SitemapMobile.SITEMAP_MOBILE) public class SitemapMobile extends ExtensionPoint { public static final String SITEMAP_MOBILE = "sitemap-mobile"; private static final String SITEMAP_MARKUP_LANG = "markup-language"; public SitemapMobile() { } /** Add another language to the markup language list. */ public void addMarkupLanguage(String markupLanguage) { MarkupLanguageConstruct val = new MarkupLanguageConstruct(); val.setValue(markupLanguage); this.addRepeatingExtension(val); } /** Get all the markup languages. */ public Collection<String> getMarkupLanguages() { Collection<MarkupLanguageConstruct> langs; langs = this.getRepeatingExtension(MarkupLanguageConstruct.class); ArrayList<String> ret = new ArrayList<String>(langs.size()); for (MarkupLanguageConstruct l : langs) { ret.add(l.getValue()); } return ret; } @Override public void generate(XmlWriter writer, ExtensionProfile profile) throws IOException { ExtensionDescription desc; desc = ExtensionDescription.getDefaultDescription(this.getClass()); writer.startElement(desc.getNamespace(), desc.getLocalName(), null, null); generateExtensions(writer, profile); writer.endElement(); } @Override public XmlParser.ElementHandler getHandler( ExtensionProfile extProfile, String namespace, String localName, Attributes attrs) { return new Handler(extProfile); } /** <wt:sitemap-mobile> parser. */ public class Handler extends ExtensionPoint.ExtensionHandler { public Handler(ExtensionProfile profile) { super(profile, SitemapMobile.class); } @Override public XmlParser.ElementHandler getChildHandler( String namespace, String localName, Attributes attrs) throws ParseException, IOException { // Based on the node name invoke one of the node handlers. if (localName == SITEMAP_MARKUP_LANG) { MarkupLanguageConstruct lang = new MarkupLanguageConstruct(); addRepeatingExtension(lang); return lang.getHandler(null, namespace, localName, attrs); } // Handle the exceptional case, should never happen return super.getChildHandler(namespace, localName, attrs); // COV_NF_LINE } } /** * Represents a single GData XML node, that is a markup language enumeration * for mobile sitemap. * * */ @ExtensionDescription.Default( nsAlias = Namespaces.WT_ALIAS, nsUri = Namespaces.WT, localName = SITEMAP_MARKUP_LANG) static class MarkupLanguageConstruct extends ValueConstruct { public MarkupLanguageConstruct() { super(Namespaces.WT_NAMESPACE, SITEMAP_MARKUP_LANG, null); } } }