diff options
author | Dirk Dougherty <ddougherty@google.com> | 2016-10-01 01:11:30 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-10-01 01:11:30 +0000 |
commit | 42bd543aaba948ef0e44513b81d280bee14c3eef (patch) | |
tree | 045d817b6094bb2b8ade8dddc83363589a413dce | |
parent | eaec48c8641843b8b75370ef6f41b32c5bc8bfbf (diff) | |
parent | b5c89dccb22484eb3f23431f3839f24853ffed7b (diff) | |
download | platform_external_doclava-42bd543aaba948ef0e44513b81d280bee14c3eef.tar.gz platform_external_doclava-42bd543aaba948ef0e44513b81d280bee14c3eef.tar.bz2 platform_external_doclava-42bd543aaba948ef0e44513b81d280bee14c3eef.zip |
For ds builds only, emit a separate metadata file for samples only. am: d3a6874647
am: b5c89dccb2
Change-Id: I893a5d966d9223724bcb4e7d93dc835c96bda960
-rw-r--r-- | src/com/google/doclava/Doclava.java | 6 | ||||
-rw-r--r-- | src/com/google/doclava/PageMetadata.java | 120 |
2 files changed, 123 insertions, 3 deletions
diff --git a/src/com/google/doclava/Doclava.java b/src/com/google/doclava/Doclava.java index 48d8ddb..385b2f7 100644 --- a/src/com/google/doclava/Doclava.java +++ b/src/com/google/doclava/Doclava.java @@ -452,9 +452,13 @@ public class Doclava { writeSdkValues(sdkValuePath); } } - // Write metadata for all processed files to jd_lists_unified.js in out dir + // Write metadata for all processed files to jd_lists_unified in out dir if (!sTaglist.isEmpty()) { PageMetadata.WriteListByLang(sTaglist); + // For devsite (ds) reference only, write samples_metadata to out dir + if ((USE_DEVSITE_LOCALE_OUTPUT_PATHS) && (!DEVSITE_STATIC_ONLY)) { + PageMetadata.WriteSamplesListByLang(sTaglist); + } } } diff --git a/src/com/google/doclava/PageMetadata.java b/src/com/google/doclava/PageMetadata.java index 1096f1d..8774d48 100644 --- a/src/com/google/doclava/PageMetadata.java +++ b/src/com/google/doclava/PageMetadata.java @@ -92,9 +92,9 @@ public class PageMetadata { * * @param rootTypeNodesList A list of root metadata nodes, each * representing a type and it's member child pages. + * @deprecated */ public static void WriteList(List<Node> rootTypeNodesList) { - Collections.sort(rootTypeNodesList, BY_TYPE_NAME); Node pageMeta = new Node.Builder().setLabel("TOP").setChildren(rootTypeNodesList).build(); @@ -105,7 +105,7 @@ public class PageMetadata { // write the taglist to js file Data data = Doclava.makeHDF(); data.setValue("reference_tree", buf.toString()); - ClearPage.write(data, "jd_lists_unified.cs", "jd_lists_unified.js"); + ClearPage.write(data, "jd_lists_unified.cs", "jd_lists_unified.js"); } /** @@ -143,6 +143,42 @@ public class PageMetadata { } /** + * Given a list of metadata nodes organized by lang, sort the + * root nodes by type name and render the types and their child + * samples metadata nodes only to separate lang-specific json files + * in the out dir. Only used by devsite (ds) builds. + * + * @param rootNodesList A list of root metadata nodes, each + * representing a type and it's member child pages. + */ + public static void WriteSamplesListByLang(List<Node> rootNodesList) { + Collections.sort(rootNodesList, BY_LANG_NAME); + for (Node n : rootNodesList) { + boolean langHasSamples = false; + String langFilename = ""; + String langname = n.getLang(); + langFilename = "_" + langname; + Collections.sort(n.getChildren(), BY_TYPE_NAME); + Node pageMeta = new Node.Builder().setLabel("TOP").setChildren(n.getChildren()).build(); + + StringBuilder buf = new StringBuilder(); + // write the taglist to string format + langHasSamples = pageMeta.renderSamplesResources(buf,langname); + // write the taglist to js file + Data data = Doclava.makeHDF(); + data.setValue("reference_tree", buf.toString()); + data.setValue("metadata.lang", langname); + + if (langHasSamples) { + data.setValue("samples_only", "1"); + // write out jd_lists_unified for each lang + String unifiedFilename = "android_samples_metadata" + langFilename + ".js"; + ClearPage.write(data, "jd_lists_unified.cs", unifiedFilename); + } + } + } + + /** * Extract supported metadata values from a page and add them as * a child node of a root node based on type. Some metadata values * are normalized. Unsupported metadata fields are ignored. See @@ -745,6 +781,31 @@ public class PageMetadata { } } } + + /** + * Render a tree of metadata nodes of type 'develop' to extract + * samples metadata. Only used by devsite (ds) builds. + * @param buf Output buffer to render to. + * @return true if samples were rendered to buf + */ + boolean renderSamplesResources(StringBuilder buf, String langname) { + boolean langHasSamples = false; + List<Node> list = mChildren; //list of type rootnodes + if (list == null || list.size() == 0) { + buf.append("null"); + } else { + final int n = list.size(); + for (int i = 0; i < n; i++) { + //samples are always in type 'develop', so restrict + if ("develop".equals(list.get(i).mType)) { + //render this type's children + langHasSamples = list.get(i).renderTypeForSamples(buf); + } + } + } + return langHasSamples; + } + /** * Render all metadata nodes for a specific type. * @param buf Output buffer to render to. @@ -793,6 +854,61 @@ public class PageMetadata { } /** + * Render all metadata nodes for samples only. + * Only used by devsite (ds) builds. + * @param buf Output buffer to render to. + * @return whether any samples were rendered to buf + */ + boolean renderTypeForSamples(StringBuilder buf) { + boolean typeHasSamples = false; + List<Node> list = mChildren; + if (list == null || list.size() == 0) { + buf.append("nulltype"); + } else { + final int n = list.size(); + for (int i = 0; i < n; i++) { + // valid samples must have category 'samples' + if ("samples".equals(list.get(i).mCategory)) { + typeHasSamples = true; + buf.append("\n {\n"); + buf.append(" \"title\":\""); + renderStrWithUcs(buf, list.get(i).mLabel); + buf.append("\",\n" ); + buf.append(" \"summary\":\""); + renderStrWithUcs(buf, list.get(i).mSummary); + buf.append("\",\n" ); + buf.append(" \"url\":\"" + list.get(i).mLink + "\",\n" ); + if (!"".equals(list.get(i).mImage)) { + buf.append(" \"image\":\"" + list.get(i).mImage + "\",\n" ); + } + if (!"".equals(list.get(i).mGroup)) { + buf.append(" \"group\":\""); + renderStrWithUcs(buf, list.get(i).mGroup); + buf.append("\",\n" ); + } + if (!"".equals(list.get(i).mCategory)) { + buf.append(" \"category\":\"" + list.get(i).mCategory + "\",\n" ); + } + if ((list.get(i).mType != null) && (list.get(i).mType != "")) { + buf.append(" \"type\":\"" + list.get(i).mType + "\",\n"); + } + list.get(i).renderArrayType(buf, list.get(i).mKeywords, "keywords"); + list.get(i).renderArrayType(buf, list.get(i).mTags, "tags"); + if (!"".equals(list.get(i).mTimestamp)) { + buf.append(" \"timestamp\":\"" + list.get(i).mTimestamp + "\",\n"); + } + buf.append(" \"lang\":\"" + list.get(i).mLang + "\"" ); + buf.append("\n }"); + if (i != n - 1) { + buf.append(", "); + } + } + } + } + return typeHasSamples; + } + + /** * Build and render a list of tags associated with each type. * @param buf Output buffer to render to. */ |