0N/A/*
553N/A * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
553N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
553N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
553N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
553N/A * or visit www.oracle.com if you need additional information or have any
553N/A * questions.
0N/A */
0N/A
0N/Apackage com.sun.tools.doclets.internal.toolkit.util;
0N/A
0N/Aimport com.sun.tools.doclets.internal.toolkit.*;
0N/Aimport com.sun.javadoc.*;
0N/Aimport java.util.*;
0N/A
0N/A/**
0N/A * Provides methods for creating an array of class, method and
0N/A * field names to be included as meta keywords in the HTML header
0N/A * of class pages. These keywords improve search results
0N/A * on browsers that look for keywords.
0N/A *
0N/A * This code is not part of an API.
0N/A * It is implementation that is subject to change.
0N/A * Do not use it as an API
0N/A *
0N/A * @author Doug Kramer
0N/A */
0N/Apublic class MetaKeywords {
0N/A
0N/A /**
0N/A * The global configuration information for this run.
0N/A */
0N/A private final Configuration configuration;
0N/A
0N/A /**
0N/A * Constructor
0N/A */
139N/A public MetaKeywords(Configuration configuration) {
0N/A this.configuration = configuration;
0N/A }
0N/A
0N/A /**
0N/A * Returns an array of strings where each element
0N/A * is a class, method or field name. This array is
0N/A * used to create one meta keyword tag for each element.
0N/A * Method parameter lists are converted to "()" and
0N/A * overloads are combined.
0N/A *
0N/A * Constructors are not included because they have the same
0N/A * name as the class, which is already included.
0N/A * Nested class members are not included because their
0N/A * definitions are on separate pages.
0N/A */
0N/A public String[] getMetaKeywords(ClassDoc classdoc) {
73N/A ArrayList<String> results = new ArrayList<String>();
0N/A
0N/A // Add field and method keywords only if -keywords option is used
0N/A if( configuration.keywords ) {
0N/A results.addAll(getClassKeyword(classdoc));
0N/A results.addAll(getMemberKeywords(classdoc.fields()));
0N/A results.addAll(getMemberKeywords(classdoc.methods()));
0N/A }
73N/A return results.toArray(new String[]{});
0N/A }
0N/A
0N/A /**
0N/A * Get the current class for a meta tag keyword, as the first
0N/A * and only element of an array list.
0N/A */
73N/A protected ArrayList<String> getClassKeyword(ClassDoc classdoc) {
0N/A String cltypelower = classdoc.isInterface() ? "interface" : "class";
73N/A ArrayList<String> metakeywords = new ArrayList<String>(1);
0N/A metakeywords.add(classdoc.qualifiedName() + " " + cltypelower);
0N/A return metakeywords;
0N/A }
0N/A
0N/A /**
0N/A * Get the package keywords.
0N/A */
0N/A public String[] getMetaKeywords(PackageDoc packageDoc) {
0N/A if( configuration.keywords ) {
0N/A String pkgName = Util.getPackageName(packageDoc);
0N/A return new String[] { pkgName + " " + "package" };
0N/A } else {
0N/A return new String[] {};
0N/A }
0N/A }
0N/A
0N/A /**
0N/A * Get the overview keywords.
0N/A */
0N/A public String[] getOverviewMetaKeywords(String title, String docTitle) {
0N/A if( configuration.keywords ) {
0N/A String windowOverview = configuration.getText(title);
0N/A String[] metakeywords = { windowOverview };
0N/A if (docTitle.length() > 0 ) {
0N/A metakeywords[0] += ", " + docTitle;
0N/A }
0N/A return metakeywords;
0N/A } else {
0N/A return new String[] {};
0N/A }
0N/A }
0N/A
0N/A /**
0N/A * Get members for meta tag keywords as an array,
0N/A * where each member name is a string element of the array.
0N/A * The parameter lists are not included in the keywords;
0N/A * therefore all overloaded methods are combined.<br>
0N/A * Example: getValue(Object) is returned in array as getValue()
0N/A *
0N/A * @param memberdocs array of MemberDoc objects to be added to keywords
0N/A */
73N/A protected ArrayList<String> getMemberKeywords(MemberDoc[] memberdocs) {
73N/A ArrayList<String> results = new ArrayList<String>();
0N/A String membername;
0N/A for (int i=0; i < memberdocs.length; i++) {
0N/A membername = memberdocs[i].name()
0N/A + (memberdocs[i].isMethod() ? "()" : "");
0N/A if ( ! results.contains(membername) ) {
0N/A results.add(membername);
0N/A }
0N/A }
0N/A return results;
0N/A }
0N/A}