blob: af6d8f1269d4d95e551a1b7745ce7c327b25af13 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.sling.feature.cpconverter.vltpkg;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
import org.apache.jackrabbit.vault.packaging.Dependency;
import org.apache.jackrabbit.vault.packaging.PackageProperties;
import org.apache.jackrabbit.vault.packaging.PackageType;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
public class VaultPackageUtils {
private static final String DEPENDENCIES_DELIMITER = ",";
private VaultPackageUtils() {
// this class must not be instantiated from outside
}
public static PackageType detectPackageType(VaultPackage vaultPackage) {
PackageType packageType = vaultPackage.getPackageType();
if (packageType != null) {
return packageType;
}
// borrowed from org.apache.jackrabbit.vault.fs.io.AbstractExporter
WorkspaceFilter filter = vaultPackage.getMetaInf().getFilter();
boolean hasApps = false;
boolean hasOther = false;
if (filter != null) {
for (PathFilterSet p : filter.getFilterSets()) {
if ("cleanup".equals(p.getType())) {
continue;
}
String root = p.getRoot();
if ("/apps".equals(root)
|| root.startsWith("/apps/")
|| "/libs".equals(root)
|| root.startsWith("/libs/")) {
hasApps = true;
} else {
hasOther = true;
}
}
if (hasApps && !hasOther) {
return PackageType.APPLICATION;
} else if (hasOther && !hasApps) {
return PackageType.CONTENT;
}
}
return PackageType.MIXED;
}
public static Set<Dependency> getDependencies(VaultPackage vaultPackage) {
Dependency[] originalDepenencies = vaultPackage.getDependencies();
Set<Dependency> dependencies = new HashSet<>();
if (originalDepenencies != null && originalDepenencies.length > 0) {
dependencies.addAll(Arrays.asList(originalDepenencies));
}
return dependencies;
}
public static void setDependencies(Set<Dependency> dependencies, Properties properties) {
if (dependencies == null || dependencies.isEmpty()) {
return;
}
String dependenciesString = dependencies.stream().map(d -> d.toString()).collect(Collectors.joining(DEPENDENCIES_DELIMITER));
properties.setProperty(PackageProperties.NAME_DEPENDENCIES, dependenciesString);
}
}