1 31 32 package org.opencms.search.documents; 33 34 import org.opencms.file.CmsFile; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsResource; 37 import org.opencms.file.types.CmsResourceTypeXmlContent; 38 import org.opencms.file.types.I_CmsResourceType; 39 import org.opencms.i18n.CmsLocaleManager; 40 import org.opencms.main.CmsException; 41 import org.opencms.main.OpenCms; 42 import org.opencms.search.A_CmsIndexResource; 43 import org.opencms.search.CmsIndexException; 44 import org.opencms.search.extractors.CmsExtractionResult; 45 import org.opencms.search.extractors.I_CmsExtractionResult; 46 import org.opencms.xml.A_CmsXmlDocument; 47 import org.opencms.xml.content.CmsXmlContentFactory; 48 import org.opencms.xml.types.I_CmsXmlContentValue; 49 50 import java.util.ArrayList ; 51 import java.util.Iterator ; 52 import java.util.List ; 53 import java.util.Locale ; 54 55 65 public class CmsDocumentXmlContent extends A_CmsVfsDocument { 66 67 72 public CmsDocumentXmlContent(String name) { 73 74 super(name); 75 } 76 77 82 public I_CmsExtractionResult extractContent(CmsObject cms, A_CmsIndexResource indexResource, String language) 83 throws CmsException { 84 85 CmsResource resource = (CmsResource)indexResource.getData(); 86 String result = null; 87 88 try { 89 CmsFile file = CmsFile.upgrade(resource, cms); 90 String absolutePath = cms.getSitePath(file); 91 A_CmsXmlDocument xmlContent = CmsXmlContentFactory.unmarshal(cms, file); 92 93 List locales = xmlContent.getLocales(); 94 if (locales.size() == 0) { 95 locales = OpenCms.getLocaleManager().getDefaultLocales(cms, absolutePath); 96 } 97 Locale locale = OpenCms.getLocaleManager().getBestMatchingLocale( 98 CmsLocaleManager.getLocale(language), 99 OpenCms.getLocaleManager().getDefaultLocales(cms, absolutePath), 100 locales); 101 102 List elements = xmlContent.getNames(locale); 103 StringBuffer content = new StringBuffer (); 104 for (Iterator i = elements.iterator(); i.hasNext();) { 105 I_CmsXmlContentValue value = xmlContent.getValue((String )i.next(), locale); 106 String plainText = value.getPlainText(cms); 107 if (plainText != null) { 108 content.append(plainText); 109 content.append('\n'); 110 } 111 } 112 113 result = content.toString(); 114 117 } catch (Exception e) { 118 throw new CmsIndexException( 119 Messages.get().container(Messages.ERR_TEXT_EXTRACTION_1, resource.getRootPath()), 120 e); 121 } 122 123 return new CmsExtractionResult(result); 124 } 125 126 129 public List getDocumentKeys(List resourceTypes, List mimeTypes) throws CmsException { 130 131 if (resourceTypes.contains("*")) { 132 ArrayList allTypes = new ArrayList (); 133 for (Iterator i = OpenCms.getResourceManager().getResourceTypes().iterator(); i.hasNext();) { 134 I_CmsResourceType resourceType = (I_CmsResourceType)i.next(); 135 if (resourceType instanceof CmsResourceTypeXmlContent 136 && ((CmsResourceTypeXmlContent)resourceType).getConfiguration().containsKey( 137 CmsResourceTypeXmlContent.CONFIGURATION_SCHEMA)) { 138 allTypes.add(resourceType.getTypeName()); 139 } 140 } 141 resourceTypes = allTypes; 142 } 143 144 return super.getDocumentKeys(resourceTypes, mimeTypes); 145 } 146 } | Popular Tags |