001package org.nuxeo.apidoc.introspection; 002 003import java.io.IOException; 004import java.io.InputStream; 005import java.util.Enumeration; 006import java.util.HashMap; 007import java.util.Map; 008import java.util.zip.ZipEntry; 009import java.util.zip.ZipFile; 010 011import org.nuxeo.apidoc.documentation.DefaultDocumentationType; 012import org.nuxeo.apidoc.documentation.ResourceDocumentationItem; 013import org.nuxeo.common.utils.FileUtils; 014import org.nuxeo.common.utils.Path; 015 016public class EmbeddedDocExtractor { 017 018 public static final String DOC_PREFIX = "doc/"; 019 020 public static final String PARENT_DOC_PREFIX = "doc-parent/"; 021 022 public static void extractEmbeddedDoc(ZipFile jarFile, BundleInfoImpl bi) throws IOException { 023 024 Enumeration<? extends ZipEntry> entries = jarFile.entries(); 025 026 Map<String, ResourceDocumentationItem> localDocs = new HashMap<String, ResourceDocumentationItem>(); 027 Map<String, ResourceDocumentationItem> parentDocs = new HashMap<String, ResourceDocumentationItem>(); 028 while (entries.hasMoreElements()) { 029 ZipEntry entry = entries.nextElement(); 030 031 if (entry.getName().startsWith(PARENT_DOC_PREFIX) && !entry.isDirectory()) { 032 InputStream is = jarFile.getInputStream(entry); 033 String content = FileUtils.read(is); 034 is.close(); 035 String name = new Path(entry.getName()).lastSegment(); 036 if (name.length() >= 6 && name.substring(0, 6).equalsIgnoreCase("readme")) { 037 038 ResourceDocumentationItem docItem = new ResourceDocumentationItem(name, content, bi, 039 DefaultDocumentationType.DESCRIPTION.toString()); 040 041 parentDocs.put(DefaultDocumentationType.DESCRIPTION.toString(), docItem); 042 } else { 043 ResourceDocumentationItem docItem = new ResourceDocumentationItem(name, content, bi, 044 DefaultDocumentationType.HOW_TO.toString()); 045 parentDocs.put(DefaultDocumentationType.HOW_TO.toString(), docItem); 046 } 047 } 048 if (entry.getName().startsWith(DOC_PREFIX) && !entry.isDirectory()) { 049 InputStream is = jarFile.getInputStream(entry); 050 String content = FileUtils.read(is); 051 is.close(); 052 String name = new Path(entry.getName()).lastSegment(); 053 if (name.length() >= 6 && name.substring(0, 6).equalsIgnoreCase("readme")) { 054 055 ResourceDocumentationItem docItem = new ResourceDocumentationItem(name, content, bi, 056 DefaultDocumentationType.DESCRIPTION.toString()); 057 localDocs.put(DefaultDocumentationType.DESCRIPTION.toString(), docItem); 058 } else { 059 ResourceDocumentationItem docItem = new ResourceDocumentationItem(name, content, bi, 060 DefaultDocumentationType.HOW_TO.toString()); 061 localDocs.put(DefaultDocumentationType.HOW_TO.toString(), docItem); 062 } 063 } 064 } 065 bi.setLiveDoc(localDocs); 066 bi.setParentLiveDoc(parentDocs); 067 } 068}