private Class type(final String typeString) throws FrameworkException { Class type = null; final ConfigurationProvider config = StructrApp.getConfiguration(); if (typeString != null) { type = config.getNodeEntityClass(typeString); } if (type == null) { throw new FrameworkException(422, "Unknown type '" + typeString + "'"); } return type; }
private void extractAndSetValue( final NodeInterface obj, final Document doc, final String selector, final String mappedType, final String mappedAttribute, final String mappedAttributeFormat, final SourcePage subPage) throws FrameworkException { // If the sub pattern has a mapped attribute, set the extracted value if (StringUtils.isNotEmpty(mappedAttribute)) { // Extract the value for this sub pattern's selector final String ex = doc.select(selector).text(); final ConfigurationProvider config = StructrApp.getConfiguration(); final PropertyKey key = config.getPropertyKeyForJSONName(type(mappedType), mappedAttribute); if (key != null) { Object convertedValue = ex; final PropertyConverter inputConverter = key.inputConverter(securityContext); if (inputConverter != null) { final String locale = getProperty(mappedAttributeLocaleProperty); DecimalFormat decimalFormat = null; if (key instanceof DoubleProperty) { if (StringUtils.isNotBlank(locale)) { decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(new Locale(locale)); } else if (StringUtils.isNotBlank(mappedAttributeFormat)) { decimalFormat = new DecimalFormat(mappedAttributeFormat); } if (decimalFormat != null) { convertedValue = decimalFormat.format(convertedValue); } } else { convertedValue = inputConverter.convert(ex); } } obj.setProperty(key, convertedValue); } // If the sub pattern has no mapped attribute but a sub page defined, query the patterns of // the sub page } else if (subPage != null) { final String pageUrl = subPage.getProperty(SourcePage.url); final URI uri; try { uri = new URI(pageUrl); } catch (URISyntaxException ex) { throw new FrameworkException(422, "Unable to parse sub page url: " + pageUrl); } // This is the URL of the linked page derived from the enclosing selector final String subUrl = uri.getScheme() + "://" + uri.getAuthority() + doc.select(selector).attr("href"); // Extract the content of the linked page final String subContent = getContent(subUrl); // Parse the content into a document final Document subDoc = Jsoup.parse(subContent); final List<SourcePattern> subPagePatterns = subPage.getProperty(SourcePage.patterns); // Loop through all patterns of the sub page for (final SourcePattern subPagePattern : subPagePatterns) { final Map<String, Object> params = new HashMap<>(); params.put("document", subDoc); params.put("object", obj); subPagePattern.extract(params); // final String subPagePatternSelector = // subPagePattern.getProperty(SourcePattern.selectorProperty); // // // // Extract // final String subEx = subDoc.select(subPagePatternSelector).text(); // final String subPagePatternType = // subPagePattern.getProperty(SourcePattern.mappedTypeProperty); // // if (subPagePatternType != null) { // // // final Elements subParts = subDoc.select(subPagePatternSelector); // // final Long j = 1L; // // for (final Element subPart : subParts) { // // final NodeInterface subObj = create(subPagePatternType); // // final List<SourcePattern> subPagePatternPatterns = // subPagePattern.getProperty(SourcePattern.subPatternsProperty); // // for (final SourcePattern subPageSubPattern : subPagePatternPatterns) { // // // final String subPagePatternSelector = // subPageSubPattern.getProperty(SourcePattern.selectorProperty); // // // // final String subPageSubPatternSelector = subPagePatternSelector + ":nth-child(" + j // + ") > " + subPagePatternSelector; // // extractAndSetValue(subObj, subDoc, subSelector, mappedType, // subPatternMappedAttribute); // // // final String subSubEx = subDoc.select(subPageSubPatternSelector).text(); // // if (subSubEx != null && subSubEx != = '' && subPageSubPattern.mappedAttribute != // null) { // // final PropertyKey key = config.getPropertyKeyForJSONName(type(mappedType), // subPatternMappedAttribute); // if (key != null) { // // subObj.setProperty(key, subSubEx); // } // // } // // final String subPagePatternMappedAttribute = // subPagePattern.getProperty(SourcePattern.mappedAttributeProperty); // // final PropertyKey key = config.getPropertyKeyForJSONName(type(mappedType), // subPagePatternMappedAttribute); // if (key != null) { // // obj.setProperty(key, subSubEx); // } // // } // // } else { // // if (subEx != null && subEx != = '' && subPagePattern.mappedAttribute != null) { // obj[subPagePattern.mappedAttribute] = subEx; // } } } }