Как переименовать ресурсы в Apache Sling, сохранив при этом их свойства и потомков?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как переименовать ресурсы в Apache Sling, сохранив при этом их свойства и потомков?

Сообщение Anonymous »

Из-за некоторых изменений в стиле компонентов и порядке элементов в макете столбцов мне нужны два ресурса для обмена местами в дереве содержимого моего сайта.
Структура рассматриваемого компонента выглядит следующим образом:

[*]

Код: Выделить всё

col2 (sling:resourceType=myapp/container, cq:styleIds=[4, 5, 6, 7], other properties)



Я хочу программно поменять местами содержимое и свойства col1 и col2, чтобы была достигнута следующая структура: [*]

Код: Выделить всё

col2 (sling:resourceType=myapp/container, cq:styleIds=[1, 2, 3], other properties)





На самом деле это сводится к переименованию и изменению порядка ресурсов. Я хочу использовать этот код в сценарии Groovy, чтобы автоматически вносить изменения в несколько ветвей контента.
Похоже, что в Sling API нет метода переименования (хотя о его существовании предположили второй пилот и ChatGPT). Я хочу добиться того же эффекта, перемещая эти ресурсы.
В документации Apache Sling есть раздел о перемещении ресурсов с использованием либо сервлета Sling POST, либо API Sling Java.

Код: Выделить всё

Resource myResource2 = resourceResolver.getResource("/myresource2");
Map properties = myResource2.adaptTo(ValueMap.class);
Resource myResource3 = resourceResolver.create(null, "myresource3", properties);
resourceResolver.delete(myResource2);
resourceResolver.commit();
Похоже, что это игнорирует дочерние ресурсы, и хотя свойства будут сохранены, я потеряю дочерние ресурсы.
Я считаю, что этот фрагмент предназначен для иллюстрации эффект вызова сервлета Sling POST с определенными параметрами, а не предложение правильного способа перемещения ресурса.
В Javadoc для класса ResourceResolver указан ход > метод, который принимает два параметра: исходный путь и путь назначения, но при попытке его выполнить не удается

Код: Выделить всё

Resource col1 = parentResource.getChild('col1')
Resource col2 = parentResource.getChild('col2')
def tempResourcePath = parentResource.path + "/col1_temp"
resourceResolver.move(col1.path, tempResourcePath)
выдается следующее исключение:

Код: Выделить всё

org.apache.sling.api.resource.PersistenceException: Destination resource does not exist.
Javadoc для ResourceResolver объясняет, что этого следует ожидать.

Ресурс destAbsPath должен существовать, если не генерируется PersistenceException. Если дочерний ресурс с таким же именем уже существует в destAbsPath, генерируется PersistenceException.

Это противоречит цели использования перемещения

Это противоречит цели использования перемещения

code> для существенного переименования ресурса, сохраняя его под тем же родителем. Технически я мог бы использовать этот API для индивидуального перемещения всех потомков col1 и col2 во вновь созданный ресурс, но для этого потребуется немного больше кода, чем я ожидал бы в этой ситуации.
Есть ли более простой способ сделать это с помощью Sling API?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -and-desce
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»