ucs-intranet-magnolia-updates/src/main/java/at/ucs/magnolia/updates/util/UcsBootstrapUtil.java
2024-11-22 17:20:04 +01:00

60 lines
2.6 KiB
Java

package at.ucs.magnolia.updates.util;
import info.magnolia.cms.util.StringLengthComparator;
import info.magnolia.importexport.BootstrapUtil;
import info.magnolia.init.MagnoliaConfigurationProperties;
import info.magnolia.objectfactory.Components;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
/**
* This class is exactly working like the original BootstrapUtil class of Magnolia,
* with the only difference, that it substitutes Magnolia Property placeholders
* with their actual value, since this is not implemented for bootstrap yamls by Magnolia
*/
public class UcsBootstrapUtil {
private static final Logger log = LoggerFactory.getLogger(BootstrapUtil.class);
public static void bootstrap(String[] resourceNames, int importUUIDBehavior) throws IOException, RepositoryException {
// sort by length --> import parent node firstsubPath
List<String> list = new ArrayList<>(Arrays.asList(resourceNames));
if (list.contains(null)) {
throw new IllegalArgumentException("Resource names contain a <null> entry that cannot be processed.");
}
Collections.sort(list, new StringLengthComparator());
for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) {
bootstrap(iter.next(), null, importUUIDBehavior);
}
}
public static void bootstrap(String resourceName, String subPath, int importUUIDBehavior) throws IOException, RepositoryException {
final InputStream stream = BootstrapUtil.class.getResourceAsStream(resourceName);
if (stream == null) {
throw new IOException("Can't find resource to bootstrap at " + resourceName);
}
MagnoliaConfigurationProperties magnoliaConfiguration = Components.getComponent(MagnoliaConfigurationProperties.class);
InputStream resolvedStream = MagnoliaPropertyResolver.resolve(magnoliaConfiguration, stream);
// Verify if the node already exists and execute jcr import command
bootstrap(resourceName, subPath, resolvedStream, importUUIDBehavior);
}
public static void bootstrap(String resourceName, String subPath, InputStream stream, int importUUIDBehavior) throws RepositoryException {
BootstrapUtil.bootstrap(resourceName, subPath, stream, importUUIDBehavior);
}
public static void export(Node content, File directory) throws IOException, RepositoryException {
BootstrapUtil.export(content, directory);
}
}