public MacroDefinition migrate(MacroDefinition macroDefinition, ConversionContext conversionContext) { Map<String, String> macroParameters = macroDefinition.getParameters(); if (macroParameters.containsKey("reverseSort")) { Map<String, String> modifiedMacroParameters = new HashMap<>(macroDefinition.getParameters()); modifiedMacroParameters.remove("reverseSort"); modifiedMacroParameters.put("reverse", "true"); final MacroDefinitionBuilder builder = MacroDefinition.builder(macroDefinition.getName()) .withMacroBody(macroDefinition.getBody()) .withParameters(modifiedMacroParameters); builder.setDefaultParameterValue(macroDefinition.getDefaultParameterValue()); return builder.build(); } return macroDefinition; } }
public void handle(MacroDefinition macroDefinition) { if (StringUtils.equals("bookmark", macroDefinition.getName())) { parameters.putAll( macroDefinition.getParameters() ); parameters.put("description", macroDefinition.getBodyText()); // TODO: Decide if we really need descriptionExcerpt // parameters.put("descriptionExcerpt", macroDefinition.get); } } }
public MacroDefinition migrate(MacroDefinition macroDefinition, ConversionContext conversionContext) { final String bodyText = macroDefinition.getBodyText(); if (StringUtils.isNotBlank(bodyText)) { macroDefinition.setParameters( new HashMap<String, String>(macroDefinition.getParameters()) { { put("url", StringUtils.strip(bodyText)); } } ); } return macroDefinition; } }
/** * @param macroDefinition macro definition * @return task list name or empty string if no name specified */ public static String getTaskListName(MacroDefinition macroDefinition) { String result = macroDefinition.getParameters().get("title"); if (result == null) result = macroDefinition.getDefaultParameterValue(); return defaultString(result); }
@Override public MacroDefinition migrate(MacroDefinition macro, ConversionContext context) { String oldValue = macro.getParameter("excerpt"); if (StringUtils.isNotBlank(oldValue)) { ExcerptType excerptParam = ExcerptType.fromOldValue(oldValue); macro.setParameter("excerptType", excerptParam.getValue()); macro.setTypedParameter("excerptType", excerptParam); } macro.setSchemaVersion(macro.getSchemaVersion() + 1); return macro; }
public MacroDefinition migrate(MacroDefinition macroDefinition, ConversionContext conversionContext) String bodyText = StringUtils.defaultString(macroDefinition.getBodyText()); List<RuntimeException> conversionErrors = new ArrayList<RuntimeException>(); macroDefinition.setParameters( new HashMap<String, String>(macroDefinition.getParameters()) macroDefinition.setBody(new PlainTextMacroBody(""));
public MacroDefinition migrate(MacroDefinition macroDefinition, ConversionContext conversionContext) String bodyText = StringUtils.defaultString(macroDefinition.getBodyText()); List<RuntimeException> conversionErrors = new ArrayList<RuntimeException>(); String xhtml = BooleanUtils.toBoolean(macroDefinition.getParameters().get("htmlbody")) // Parameter 'htmlbody' is passed via UpdateBookmarkAction ? htmlToXmlConverter.convert(bodyText) : xhtmlContent.convertWikiToStorage(bodyText, conversionContext, conversionErrors); macroDefinition.setBody(new RichTextMacroBody(xhtml));
public MacroDefinition migrate(MacroDefinition macroDefinition, ConversionContext context) { macroDefinition = richTextMacroMigration.migrate(macroDefinition, context); Map<String,String> params = macroDefinition.getParameters(); String paramValue = params.get(AbstractTOCMacro.INCLUDE_PARAM); if (StringUtils.isNotBlank(paramValue)) params.put(AbstractTOCMacro.INCLUDE_PARAM, convertRegex(paramValue)); paramValue = params.get(AbstractTOCMacro.EXCLUDE_PARAM); if (StringUtils.isNotBlank(paramValue)) params.put(AbstractTOCMacro.EXCLUDE_PARAM, convertRegex(paramValue)); macroDefinition.setParameters(params); return macroDefinition; }
public void handle(MacroDefinition macroDefinition) { if (!"details".equals(macroDefinition.getName())) return; String bodyText = macroDefinition.getBodyText(); String detailsId = StringUtils.trim(macroDefinition.getParameter(DetailsSummaryMacro.PARAM_ID)); if (detailsId == null) detailsId = ""; if (StringUtils.isBlank(bodyText)) { addToDetails(detailsId, ImmutableMap.<String, PageProperty>of()); return; } try { metrics.detailsExtractionStart(); ImmutableMap<String, PageProperty> extractedDetails = extractDetails(bodyText); metrics.detailsExtractionFinish(extractedDetails.size()); addToDetails(detailsId, extractedDetails); } catch (Exception e) { LOG.error(String.format("Unable to parse detailsById in detailsById macro\n%s", bodyText), e); } }
public MacroDefinition migrate(MacroDefinition macroDefinition, ConversionContext conversionContext) { final PageContext pageContext = conversionContext.getPageContext(); if (pageContext == null) return macroDefinition; final ContentEntityObject content = conversionContext.getEntity(); if (content == null) return macroDefinition; TaskList upgradedTaskList = null; String listName = TaskListUtil.getTaskListName(macroDefinition); if (legacyXmlDataFormatInContentPropertyUpgrader.hasXmlDataFormattedListWithName(content, listName)) { upgradedTaskList = legacyXmlDataFormatInContentPropertyUpgrader.upgradeAndGet(content, listName, DUMMY_OCCURRENCE); } else if (legacyTextDataFormatUpgrader.hasLegacyTextDataFormattedTaskList(macroDefinition.getBodyText())) { upgradedTaskList = legacyTextDataFormatUpgrader.upgradeAndGet(content, listName, DUMMY_OCCURRENCE, macroDefinition.getBodyText()); } if (upgradedTaskList != null) { macroDefinition.setName(TaskListMacro.MACRO_NAME); // to keep things simple, use one macro name macroDefinition.setBody(new PlainTextMacroBody(taskListSerializer.serialize(upgradedTaskList))); } return macroDefinition; } }
public MacroDefinition migrate(MacroDefinition macro, ConversionContext context) { // convert default url parameters into explicit url parameters to avoid // confusion when there is JQL query with an '=' character (see https://jira.atlassian.com/browse/CONFDEV-5886) Map<String, String> parameters = macro.getParameters(); if (parameters != null) { Set<String> keySet = parameters.keySet(); for (String key : keySet) { if (key.startsWith("http://") || key.startsWith("https://")) { String val = parameters.remove(key); String url = key + '=' + val; parameters.put("url", url); break; } } } return macro; }
public MacroDefinition migrate(MacroDefinition macroDefinition, ConversionContext conversionContext) String macroBodyText = StringUtils.defaultString(macroDefinition.getBodyText()); Matcher detailsPairMatchers = DETAILS_PAIR_PATTERN.matcher(macroBodyText); try macroDefinition.setBody(new RichTextMacroBody(bodyBuilder.append("</tbody></table>").toString()));
public static String getParameter(String paramKey, MacroDefinition macro) { String value = macro.getParameter(paramKey); return value != null ? value.trim() : null; } }
private boolean linkingToSelf(final Link link, final ConversionContext conversionContext) { if (conversionContext == null) { return true; } if (isGlobalObject(conversionContext)) { return false; } final ResourceIdentifier resourceIdentifier = link.getDestinationResourceIdentifier(); // If linking to same page then the confluence macro linking mechanism does not // include a resourceIdentifier in the macroDefinition. There could still be a link // input via the storage format though, which is why we still do the checks. if (resourceIdentifier == null) { if (conversionContext.getProperty(MACRO_DEFINITION) != null) { String linkedPageName = ((MacroDefinition) conversionContext.getProperty(MACRO_DEFINITION)) .getDefaultParameterValue(); return isSamePageTitle(conversionContext, linkedPageName); } return true; } // Note that we check content type before we check if it's the same space // because the same space check relies on a page/blog post content type. return isSameContentType(conversionContext, resourceIdentifier) && isSamePageTitle(conversionContext, resourceIdentifier) && isSameSpace(conversionContext, resourceIdentifier) && isSamePostingDateForBlog(conversionContext, resourceIdentifier); }
@Override public MacroDefinition migrate(MacroDefinition macroDefinition, ConversionContext context) { macroDefinition = richTextMacroMigration.migrate(macroDefinition, context); Map<String,String> params = macroDefinition.getParameters(); String paramValue = params.get(AbstractTOCMacro.INCLUDE_PARAM); if (StringUtils.isNotBlank(paramValue)) params.put(AbstractTOCMacro.INCLUDE_PARAM, convertRegex(paramValue)); paramValue = params.get(AbstractTOCMacro.EXCLUDE_PARAM); if (StringUtils.isNotBlank(paramValue)) params.put(AbstractTOCMacro.EXCLUDE_PARAM, convertRegex(paramValue)); macroDefinition.setParameters(params); return macroDefinition; }
@Override public MacroDefinition migrate(MacroDefinition macro, ConversionContext context) { // Shouldn't need to check existing cql if schema version is being checked - just being a bit defensive while // Confluence core catches up. if (Strings.isNullOrEmpty(macro.getParameter("cql"))) { String cql = getCql(macro); macro.setParameter("cql", cql); macro.setTypedParameter("cql", cql); log.debug("CQL parameter set to '{}'", cql); } macro.setSchemaVersion(2); return macro; }
private String getCql(MacroDefinition macro, ConversionContext context) { LabelParameter labelParam = new LabelParameter(); labelParam.setValidate(false); labelParam.addParameterAlias(""); // the unnamed parameter - very legacy. ContentTypeParameter contentTypeParam = new ContentTypeParameter(); // The space param must have the same settings as the old one in LabelledContentMacro. SpaceKeyParameter spaceKeyParam = new SpaceKeyParameter(); spaceKeyParam.addParameterAlias("key"); spaceKeyParam.setDefaultValue("@all"); AuthorParameter authorParam = new AuthorParameter(); LegacyParameterConverter converter = new LegacyParameterConverter(getI18nBeanFactory().getI18NBean(), spaceKeyParam, labelParam, authorParam, contentTypeParam); PageContext pageContext = context.getPageContext(); Map<String, String> parameters = macro.getParameters(); MacroExecutionContext macroContext = new MacroExecutionContext(parameters, null, pageContext); try { return converter.buildQueryStringFromLegacyParameters(parameters, macroContext); } catch (MacroException e) { // Will only happen if no label param saved - this will be pointed out in the e message. log.debug("Exception thrown when migrating parameters to CQL", e); throw new IllegalArgumentException("Unable to migrate contentbylabel parameters", e); } }
public MacroDefinition update(MacroDefinition macroDefinition) { taskListMacroDefinitionHandler.handle(macroDefinition); if (!taskListUpdated && taskListMacroDefinitionHandler.getMatchingTaskList() != null) { MacroBody macroBody = new PlainTextMacroBody(taskListSerializer.serialize(updatedTaskList)); MacroDefinitionBuilder updatedMacroDefinition = MacroDefinition.builder(macroDefinition.getName()) .withMacroBody(macroBody) .withParameters(macroDefinition.getParameters()); updatedMacroDefinition.setDefaultParameterValue(macroDefinition.getDefaultParameterValue()); taskListUpdated = true; return updatedMacroDefinition.build(); } return macroDefinition; } }
public void handle(MacroDefinition macroDefinition) { if (result != null) return; if (TaskListMacro.MACRO_NAME.equals(macroDefinition.getName())) { String taskListName = TaskListUtil.getTaskListName(macroDefinition); /** * Check name match first */ if (!taskListId.getListName().equals(taskListName)) return; /** * If name matches, check if its the correct occurrence of the task list (if there are multiple task lists on the page with the same name) */ Integer occurrence = taskListNameToOccurrence.get(taskListName); if (occurrence == null) { occurrence = 1; taskListNameToOccurrence.put(taskListName, occurrence); } else { occurrence += 1; taskListNameToOccurrence.put(taskListName, occurrence); } if (taskListId.getOccurrence() != occurrence) return; TaskList taskListResult = taskListDeserializer.deserialize(taskListId.getListName(), taskListId.getOccurrence(), macroDefinition.getParameters(), macroDefinition.getBodyText()); taskListResult.setSourceMacro(TaskListMacro.MACRO_NAME); result = taskListResult; } }