1 package org.jahia.clipbuilder.html.web.html.Impl.ExtractorFilter; 2 3 import org.jahia.clipbuilder.html.web.Constant.*; 4 import org.jahia.clipbuilder.html.web.html.*; 5 import org.htmlparser.*; 6 import org.htmlparser.util.*; 7 import org.jahia.clipbuilder.html.util.*; 8 import org.htmlparser.tags.*; 9 import org.jahia.clipbuilder.html.web.html.Impl.ExtractorFilter.util.*; 10 import org.apache.log4j.Logger; 11 import org.htmlparser.filters.*; 12 import org.htmlparser.util.NodeList; 13 import org.htmlparser.scanners.ScriptScanner; 14 import org.htmlparser.visitors.NodeVisitor; 15 16 21 public class ChewExtractorFilter extends AbsctractExtractoreFilter { 22 23 26 public static final String NAME = "ChewExtractorFilter"; 27 30 public static final String CHEW_HASH = "chewId"; 31 34 public static final String CHEW_TAG_NAME = "chewTagName"; 35 38 public static final String NAME_INPUT_PARAM = "chewId"; 39 private static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(ChewExtractorFilter.class); 40 41 42 45 public ChewExtractorFilter() { 46 super("chewTagName"); 47 ScriptScanner.STRICT = false; 48 } 49 50 51 52 57 public void setHashKey(String hashKey) { 58 addKeyPart(ChewExtractorFilter.CHEW_HASH, hashKey); 59 } 60 61 62 67 public void setTagNameKey(String tagNameKey) { 68 addKeyPart(ChewExtractorFilter.CHEW_TAG_NAME, tagNameKey); 69 } 70 71 72 73 80 public String getSelectedPart(HTMLDocument doc, int action) { 81 String selectedPart = ""; 82 String html = ""; 83 if (action == ACTION_BUILD_KEY_PART) { 84 html = doc.getTransformedDocumentAsString(); 86 } 87 else if (action == ACTION_RETRIEVE_SELECTED_PART) { 88 html = doc.getUserDocumentAsString(); 90 } 91 92 try { 93 Parser parser = ParserUtils.createParserParsingAnInputString(html); 94 switch (getMode()) { 95 case MODE_CSS: 96 TagNameFilter linkFilter = new TagNameFilter("style"); 98 TagNameFilter styleFilter = new TagNameFilter("link"); 99 OrFilter cssFilter = new OrFilter(linkFilter, styleFilter); 100 NodeList listCss = parser.parse(cssFilter); 101 for (int i = 0; i < listCss.size(); i++) { 103 selectedPart = selectedPart + listCss.elementAt(i).toHtml(); 104 } 105 106 case MODE_WHITOUT_CSS: 107 109 default: 110 logger.debug("build selected part"); 112 parser.reset(); 113 ChewBuilderVisitor chewVisitor = new ChewBuilderVisitor(); 114 parser.visitAllNodesWith(chewVisitor); 115 selectedPart = selectedPart + chewVisitor.getFirstNode().toHtml(); 116 logger.debug(selectedPart); 117 logger.debug("end build selected part"); 118 119 } 120 121 } 122 catch (Exception ex) { 123 ex.printStackTrace(); 124 logger.error("buldKeySelectedPart error " + ex.getMessage()); 125 } 126 127 return selectedPart; 128 } 129 130 131 132 137 public String getHashKey() { 138 return getKeyPart(CHEW_HASH); 139 } 140 141 142 147 public String getTagNameKey() { 148 return getKeyPart(CHEW_TAG_NAME); 149 } 150 151 152 157 public static String getHashParamName() { 158 return NAME_INPUT_PARAM; 159 } 160 161 162 163 168 class ChewBuilderVisitor extends NodeVisitor { 169 private int countChewTag = 0; 170 private Node firstNode; 171 172 173 176 public ChewBuilderVisitor() { 177 ScriptScanner.STRICT = false; 178 } 179 180 181 186 public void visitTag(Tag tag) { 187 try { 188 processViewMode(tag); 189 } 190 catch (Exception ex) { 191 logger.error("Error during extarction"); 192 ex.printStackTrace(); 193 } 194 } 195 196 197 202 public void visitStringNode(Text string) { 203 } 205 206 207 212 private void setFirstNode(Node node) { 213 this.firstNode = node; 214 } 215 216 217 222 private Node getFirstNode() { 223 return firstNode; 224 } 225 226 227 233 private void processViewMode(Tag tag) throws Exception { 234 String tagName = getTagNameKey(); 235 236 if (tag.getTagName().equalsIgnoreCase(tagName)) { 238 String idAtt = tag.getAttribute("id"); 239 String hash = HashUtilities.buildTagHash(idAtt, countChewTag); 240 if (hash.equalsIgnoreCase(getHashKey())) { 241 setFirstNode(tag); 242 } 243 countChewTag++; 244 } 245 246 } 247 248 } 249 250 } 251 | Popular Tags |