This is an automated email from the ASF dual-hosted git repository. pauls pushed a commit to branch issues/SLING-9974 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git
commit 13832549fe0173350a395d361f9088c7976dba37 Author: Karl Pauls <[email protected]> AuthorDate: Tue Jan 12 16:43:48 2021 +0100 SLING-9974: add nullability annotations --- .../ContentPackage2FeatureModelConverter.java | 66 ++++++++++---------- .../accesscontrol/AccessControlEntry.java | 14 +++-- .../accesscontrol/DefaultAclManager.java | 71 ++++++++++----------- .../accesscontrol/PrimaryTypeParser.java | 3 +- .../cpconverter/accesscontrol/SystemUser.java | 9 +-- .../cpconverter/artifacts/ArtifactWriter.java | 4 +- .../cpconverter/artifacts/ArtifactsDeployer.java | 5 +- .../artifacts/DefaultArtifactsDeployer.java | 7 ++- .../cpconverter/artifacts/FileArtifactWriter.java | 6 +- .../artifacts/InputStreamArtifactWriter.java | 5 +- .../artifacts/MavenPomSupplierWriter.java | 5 +- ...ntentPackage2FeatureModelConverterLauncher.java | 7 ++- .../feature/cpconverter/cli/ShutDownHook.java | 3 +- .../features/DefaultFeaturesManager.java | 36 ++++++----- .../cpconverter/features/FeaturesManager.java | 18 +++--- .../cpconverter/features/RunmodeMapper.java | 9 ++- .../filtering/RegexBasedResourceFilter.java | 5 +- .../cpconverter/filtering/ResourceFilter.java | 4 +- .../AbstractConfigurationEntryHandler.java | 10 +-- .../handlers/AbstractContentPackageHandler.java | 6 +- .../cpconverter/handlers/AbstractPolicyParser.java | 3 +- .../handlers/AbstractRegexEntryHandler.java | 9 +-- .../cpconverter/handlers/BundleEntryHandler.java | 32 +++++----- .../handlers/ConfigurationEntryHandler.java | 3 +- .../handlers/ContentPackageEntryHandler.java | 12 ++-- .../handlers/DefaultEntryHandlersManager.java | 12 ++-- .../feature/cpconverter/handlers/EntryHandler.java | 5 +- .../cpconverter/handlers/EntryHandlersManager.java | 7 ++- .../handlers/JsonConfigurationEntryHandler.java | 3 +- .../handlers/NodeTypesEntryHandler.java | 12 ++-- .../cpconverter/handlers/PrivilegesHandler.java | 5 +- .../PropertiesConfigurationEntryHandler.java | 4 +- .../handlers/SystemUsersEntryHandler.java | 5 +- .../VersionResolverContentPackageEntryHandler.java | 10 +-- .../handlers/XmlConfigurationEntryHandler.java | 72 ++++++++++------------ .../interpolator/SimpleVariablesInterpolator.java | 5 +- .../interpolator/VariablesInterpolator.java | 5 +- .../cpconverter/shared/AbstractJcrNodeParser.java | 5 +- .../sling/feature/cpconverter/shared/RepoPath.java | 11 ++-- .../vltpkg/BaseVaultPackageScanner.java | 20 +++--- .../vltpkg/DefaultPackagesEventsEmitter.java | 13 ++-- .../cpconverter/vltpkg/PackagesEventsEmitter.java | 5 +- .../vltpkg/RecollectorVaultPackageScanner.java | 7 ++- .../cpconverter/vltpkg/VaultPackageAssembler.java | 47 +++++++------- .../cpconverter/vltpkg/VaultPackageUtils.java | 8 ++- 45 files changed, 336 insertions(+), 277 deletions(-) diff --git a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java index ee41228..d9a3ef7 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java @@ -54,6 +54,8 @@ import org.apache.sling.feature.cpconverter.vltpkg.BaseVaultPackageScanner; import org.apache.sling.feature.cpconverter.vltpkg.PackagesEventsEmitter; import org.apache.sling.feature.cpconverter.vltpkg.RecollectorVaultPackageScanner; import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanner { @@ -79,9 +81,9 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne private ArtifactsDeployer artifactsDeployer; - private VaultPackageAssembler mainPackageAssembler = null; + private VaultPackageAssembler mainPackageAssembler; - private RecollectorVaultPackageScanner recollectorVaultPackageScanner; + private final RecollectorVaultPackageScanner recollectorVaultPackageScanner; private PackagesEventsEmitter emitter; @@ -98,68 +100,68 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne this.recollectorVaultPackageScanner = new RecollectorVaultPackageScanner(this, this.packageManager, strictValidation, subContentPackages); } - public ContentPackage2FeatureModelConverter setEntryHandlersManager(EntryHandlersManager handlersManager) { + public @NotNull ContentPackage2FeatureModelConverter setEntryHandlersManager(@Nullable EntryHandlersManager handlersManager) { this.handlersManager = handlersManager; return this; } - public FeaturesManager getFeaturesManager() { + public @Nullable FeaturesManager getFeaturesManager() { return featuresManager; } - public ContentPackage2FeatureModelConverter setFeaturesManager(FeaturesManager featuresManager) { + public @NotNull ContentPackage2FeatureModelConverter setFeaturesManager(@Nullable FeaturesManager featuresManager) { this.featuresManager = featuresManager; return this; } - public ContentPackage2FeatureModelConverter setResourceFilter(ResourceFilter resourceFilter) { + public @NotNull ContentPackage2FeatureModelConverter setResourceFilter(@Nullable ResourceFilter resourceFilter) { this.resourceFilter = resourceFilter; return this; } - public ArtifactsDeployer getArtifactsDeployer() { + public @Nullable ArtifactsDeployer getArtifactsDeployer() { return artifactsDeployer; } - public ContentPackage2FeatureModelConverter setBundlesDeployer(ArtifactsDeployer bundlesDeployer) { + public @NotNull ContentPackage2FeatureModelConverter setBundlesDeployer(@Nullable ArtifactsDeployer bundlesDeployer) { this.artifactsDeployer = bundlesDeployer; return this; } - public AclManager getAclManager() { + public @Nullable AclManager getAclManager() { return aclManager; } - public ContentPackage2FeatureModelConverter setAclManager(AclManager aclManager) { + public @NotNull ContentPackage2FeatureModelConverter setAclManager(@Nullable AclManager aclManager) { this.aclManager = aclManager; return this; } - public VaultPackageAssembler getMainPackageAssembler() { + public @Nullable VaultPackageAssembler getMainPackageAssembler() { return mainPackageAssembler; } - public ContentPackage2FeatureModelConverter setEmitter(PackagesEventsEmitter emitter) { + public @NotNull ContentPackage2FeatureModelConverter setEmitter(@Nullable PackagesEventsEmitter emitter) { this.emitter = emitter; return this; } - public ContentPackage2FeatureModelConverter setDropContent(boolean dropContent) { + public @NotNull ContentPackage2FeatureModelConverter setDropContent(boolean dropContent) { this.dropContent = dropContent; return this; } - public ContentPackage2FeatureModelConverter setFailOnMixedPackages(boolean failOnMixedPackages) { + public @NotNull ContentPackage2FeatureModelConverter setFailOnMixedPackages(boolean failOnMixedPackages) { this.failOnMixedPackages = failOnMixedPackages; return this; } - public void convert(File...contentPackages) throws Exception { + public void convert(@NotNull File...contentPackages) throws Exception { requireNonNull(contentPackages , "Null content-package(s) can not be converted."); secondPass(firstPass(contentPackages)); } - protected Collection<VaultPackage> firstPass(File...contentPackages) throws Exception { + protected @NotNull Collection<VaultPackage> firstPass(@NotNull File...contentPackages) throws Exception { Map<PackageId, VaultPackage> idFileMap = new LinkedHashMap<>(); Map<PackageId, VaultPackage> idPackageMapping = new ConcurrentHashMap<>(); @@ -185,7 +187,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne logger.info("Ordering input content-package(s) {}...", idPackageMapping.keySet()); for (VaultPackage pack : idPackageMapping.values()) { - orderDependencies(idFileMap, idPackageMapping, pack, new HashSet<PackageId>()); + orderDependencies(idFileMap, idPackageMapping, pack, new HashSet<>()); } logger.info("New content-package(s) order: {}", idFileMap.keySet()); @@ -193,7 +195,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne return idFileMap.values(); } - protected void secondPass(Collection<VaultPackage> orderedContentPackages) throws Exception { + protected void secondPass(@NotNull Collection<VaultPackage> orderedContentPackages) throws Exception { emitter.start(); for (VaultPackage vaultPackage : orderedContentPackages) { @@ -210,7 +212,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne traverse(vaultPackage); - // make sure + // make sure mainPackageAssembler.updateDependencies(mutableContentsIds); @@ -247,10 +249,10 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne emitter.end(); } - private void orderDependencies(Map<PackageId, VaultPackage> idFileMap, - Map<PackageId, VaultPackage> idPackageMapping, - VaultPackage pack, - Set<PackageId> visited) throws CyclicDependencyException { + private void orderDependencies(@NotNull Map<PackageId, VaultPackage> idFileMap, + @NotNull Map<PackageId, VaultPackage> idPackageMapping, + @NotNull VaultPackage pack, + @NotNull Set<PackageId> visited) throws CyclicDependencyException { if (!visited.add(pack.getId())) { throw new CyclicDependencyException("Cyclic dependency detected, " + pack.getId() + " was previously visited already"); } @@ -268,7 +270,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne idPackageMapping.remove(pack.getId()); } - public void processSubPackage(String path, String runMode, VaultPackage vaultPackage, boolean isEmbeddedPackage) throws Exception { + public void processSubPackage(@NotNull String path, @Nullable String runMode, @NotNull VaultPackage vaultPackage, boolean isEmbeddedPackage) throws Exception { requireNonNull(path, "Impossible to process a null vault package"); requireNonNull(vaultPackage, "Impossible to process a null vault package"); @@ -315,10 +317,10 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne emitter.endSubPackage(); } - private void processContentPackageArchive(File contentPackageArchive, - String runMode, - ArtifactId mvnPackageId, - PackageId originalPackageId) throws Exception { + private void processContentPackageArchive(@NotNull File contentPackageArchive, + @Nullable String runMode, + @NotNull ArtifactId mvnPackageId, + @NotNull PackageId originalPackageId) throws Exception { try (VaultPackage vaultPackage = open(contentPackageArchive)) { PackageType packageType = detectPackageType(vaultPackage); @@ -344,12 +346,12 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne } } - protected boolean isSubContentPackageIncluded(String path) { + protected boolean isSubContentPackageIncluded(@NotNull String path) { return subContentPackages.containsValue(path); } @Override - protected void onFile(String entryPath, Archive archive, Entry entry) throws Exception { + protected void onFile(@NotNull String entryPath, @NotNull Archive archive, @NotNull Entry entry) throws Exception { if (resourceFilter != null && resourceFilter.isFilteredOut(entryPath)) { throw new IllegalArgumentException("Path '" + entryPath @@ -366,7 +368,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne entryHandler.handle(entryPath, archive, entry, this); } - private static ArtifactId toArtifactId(VaultPackage vaultPackage) { + private static @NotNull ArtifactId toArtifactId(@NotNull VaultPackage vaultPackage) { PackageId packageId = vaultPackage.getId(); String groupId = requireNonNull(packageId.getGroup(), PackageProperties.NAME_GROUP @@ -393,7 +395,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne } @Override - protected void addCdnPattern(Pattern cndPattern) { + protected void addCdnPattern(@NotNull Pattern cndPattern) { handlersManager.addEntryHandler(new NodeTypesEntryHandler(cndPattern)); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/AccessControlEntry.java b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/AccessControlEntry.java index f07eef7..6e05162 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/AccessControlEntry.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/AccessControlEntry.java @@ -17,6 +17,8 @@ package org.apache.sling.feature.cpconverter.accesscontrol; import org.apache.sling.feature.cpconverter.shared.RepoPath; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.LinkedList; import java.util.List; @@ -34,31 +36,31 @@ public final class AccessControlEntry { private final List<String> restrictions = new LinkedList<>(); - public AccessControlEntry(boolean isAllow, String privileges, RepoPath repositoryPath) { + public AccessControlEntry(boolean isAllow, @Nullable String privileges, @NotNull RepoPath repositoryPath) { this.isAllow = isAllow; this.privileges = privileges; this.repositoryPath = repositoryPath; } - public void addRestriction(String restriction) { + public void addRestriction(@Nullable String restriction) { if (restriction != null && !restriction.isEmpty()) { restrictions.add(restriction); } } - public String getOperation() { + public @NotNull String getOperation() { return isAllow ? "allow" : "deny"; } - public String getPrivileges() { + public @Nullable String getPrivileges() { return privileges; } - public RepoPath getRepositoryPath() { + public @NotNull RepoPath getRepositoryPath() { return repositoryPath; } - public List<String> getRestrictions() { + public @NotNull List<String> getRestrictions() { return restrictions; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java index f348c02..2bc6e06 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java @@ -20,6 +20,8 @@ import org.apache.jackrabbit.vault.util.PlatformNameFormat; import org.apache.sling.feature.cpconverter.features.FeaturesManager; import org.apache.sling.feature.cpconverter.shared.RepoPath; import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.FileInputStream; @@ -53,18 +55,18 @@ public final class DefaultAclManager implements AclManager { private final Map<String, List<AccessControlEntry>> acls = new HashMap<>(); - private List<String> nodetypeRegistrationSentences = new LinkedList<>(); + private final List<String> nodetypeRegistrationSentences = new LinkedList<>(); - private Set<String> privileges = new LinkedHashSet<>(); + private final Set<String> privileges = new LinkedHashSet<>(); - public boolean addSystemUser(SystemUser systemUser) { + public boolean addSystemUser(@NotNull SystemUser systemUser) { if (preProvidedSystemUsers.add(systemUser)) { return systemUsers.add(systemUser); } return false; } - public boolean addAcl(String systemUser, AccessControlEntry acl) { + public boolean addAcl(@NotNull String systemUser, @NotNull AccessControlEntry acl) { if (getSystemUser(systemUser).isPresent()) { acls.computeIfAbsent(systemUser, k -> new LinkedList<>()).add(acl); return true; @@ -72,7 +74,7 @@ public final class DefaultAclManager implements AclManager { return false; } - private void addPath(RepoPath path, Set<RepoPath> paths) { + private void addPath(@NotNull RepoPath path, @NotNull Set<RepoPath> paths) { if (preProvidedPaths.add(path)) { paths.add(path); } @@ -83,10 +85,8 @@ public final class DefaultAclManager implements AclManager { } } - public void addRepoinitExtension(List<VaultPackageAssembler> packageAssemblers, FeaturesManager featureManager) { - Formatter formatter = null; - try { - formatter = new Formatter(); + public void addRepoinitExtension(@NotNull List<VaultPackageAssembler> packageAssemblers, @NotNull FeaturesManager featureManager) { + try (Formatter formatter = new Formatter()) { if (!privileges.isEmpty()) { for (String privilege : privileges) { @@ -112,7 +112,9 @@ public final class DefaultAclManager implements AclManager { List<AccessControlEntry> authorizations = acls.remove(systemUser.getId()); - addStatements(systemUser, authorizations, packageAssemblers, formatter); + if (authorizations != null) { + addStatements(systemUser, authorizations, packageAssemblers, formatter); + } } // all the resting ACLs can now be set @@ -122,8 +124,9 @@ public final class DefaultAclManager implements AclManager { if (systemUser.isPresent()) { List<AccessControlEntry> authorizations = currentAcls.getValue(); - - addStatements(systemUser.get(), authorizations, packageAssemblers, formatter); + if (authorizations != null) { + addStatements(systemUser.get(), authorizations, packageAssemblers, formatter); + } } } @@ -132,26 +135,20 @@ public final class DefaultAclManager implements AclManager { if (!text.isEmpty()) { featureManager.addOrAppendRepoInitExtension(text, null); } - } finally { - if (formatter != null) { - formatter.close(); - } } } - private void addStatements(SystemUser systemUser, - List<AccessControlEntry> authorizations, - List<VaultPackageAssembler> packageAssemblers, - Formatter formatter) { + private void addStatements(@NotNull SystemUser systemUser, + @NotNull List<AccessControlEntry> authorizations, + @NotNull List<VaultPackageAssembler> packageAssemblers, + @NotNull Formatter formatter) { // clean the unneeded ACLs, see SLING-8561 - if (authorizations != null) { - Iterator<AccessControlEntry> authorizationsIterator = authorizations.iterator(); - while (authorizationsIterator.hasNext()) { - AccessControlEntry acl = authorizationsIterator.next(); + Iterator<AccessControlEntry> authorizationsIterator = authorizations.iterator(); + while (authorizationsIterator.hasNext()) { + AccessControlEntry acl = authorizationsIterator.next(); - if (acl.getRepositoryPath().startsWith(systemUser.getIntermediatePath())) { - authorizationsIterator.remove(); - } + if (acl.getRepositoryPath().startsWith(systemUser.getIntermediatePath())) { + authorizationsIterator.remove(); } } @@ -164,7 +161,7 @@ public final class DefaultAclManager implements AclManager { addAclStatement(formatter, systemUser.getId(), authorizations); } - private Optional<SystemUser> getSystemUser(String id) { + private @NotNull Optional<SystemUser> getSystemUser(@NotNull String id) { for (SystemUser systemUser : preProvidedSystemUsers) { if (id.equals(systemUser.getId())) { return Optional.of(systemUser); @@ -173,21 +170,21 @@ public final class DefaultAclManager implements AclManager { return Optional.empty(); } - private final void addSystemUserPath(Formatter formatter, RepoPath path) { + private void addSystemUserPath(@NotNull Formatter formatter, @NotNull RepoPath path) { if (preProvidedSystemPaths.add(path)) { formatter.format("create path (rep:AuthorizableFolder) %s%n", path); } } @Override - public void addNodetypeRegistrationSentence(String nodetypeRegistrationSentence) { + public void addNodetypeRegistrationSentence(@Nullable String nodetypeRegistrationSentence) { if (nodetypeRegistrationSentence != null) { nodetypeRegistrationSentences.add(nodetypeRegistrationSentence); } } @Override - public void addPrivilege(String privilege) { + public void addPrivilege(@NotNull String privilege) { privileges.add(privilege); } @@ -198,7 +195,7 @@ public final class DefaultAclManager implements AclManager { privileges.clear(); } - private void addPaths(List<AccessControlEntry> authorizations, List<VaultPackageAssembler> packageAssemblers, Formatter formatter) { + private void addPaths(@NotNull List<AccessControlEntry> authorizations, @NotNull List<VaultPackageAssembler> packageAssemblers, @NotNull Formatter formatter) { if (areEmpty(authorizations)) { return; } @@ -215,7 +212,7 @@ public final class DefaultAclManager implements AclManager { } } - private static String computePathType(RepoPath path, List<VaultPackageAssembler> packageAssemblers) { + private static @NotNull String computePathType(@NotNull RepoPath path, @NotNull List<VaultPackageAssembler> packageAssemblers) { path = new RepoPath(PlatformNameFormat.getPlatformPath(path.toString())); for (VaultPackageAssembler packageAssembler: packageAssemblers) { @@ -239,8 +236,8 @@ public final class DefaultAclManager implements AclManager { return DEFAULT_TYPE; } - private static void addAclStatement(Formatter formatter, String systemUser, List<AccessControlEntry> authorizations) { - if (authorizations == null || areEmpty(authorizations)) { + private static void addAclStatement(@NotNull Formatter formatter, @NotNull String systemUser, @NotNull List<AccessControlEntry> authorizations) { + if (areEmpty(authorizations)) { return; } @@ -254,7 +251,7 @@ public final class DefaultAclManager implements AclManager { if (!authorization.getRestrictions().isEmpty()) { formatter.format(" restriction(%s)", - authorization.getRestrictions().stream().collect(Collectors.joining(","))); + String.join(",", authorization.getRestrictions())); } formatter.format("%n"); @@ -263,7 +260,7 @@ public final class DefaultAclManager implements AclManager { formatter.format("end%n"); } - private static boolean areEmpty(List<AccessControlEntry> authorizations) { + private static boolean areEmpty(@Nullable List<AccessControlEntry> authorizations) { return authorizations == null || authorizations.isEmpty(); } } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/PrimaryTypeParser.java b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/PrimaryTypeParser.java index 2208cd9..ce600c2 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/PrimaryTypeParser.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/PrimaryTypeParser.java @@ -17,6 +17,7 @@ package org.apache.sling.feature.cpconverter.accesscontrol; import org.apache.sling.feature.cpconverter.shared.AbstractJcrNodeParser; +import org.jetbrains.annotations.NotNull; import org.xml.sax.Attributes; import org.xml.sax.SAXException; @@ -24,7 +25,7 @@ final class PrimaryTypeParser extends AbstractJcrNodeParser<String> { private String detectedPrimaryType; - public PrimaryTypeParser(String primaryType) { + public PrimaryTypeParser(@NotNull String primaryType) { super(primaryType); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/SystemUser.java b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/SystemUser.java index d467259..6cce9f4 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/SystemUser.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/SystemUser.java @@ -17,6 +17,7 @@ package org.apache.sling.feature.cpconverter.accesscontrol; import org.apache.sling.feature.cpconverter.shared.RepoPath; +import org.jetbrains.annotations.NotNull; import java.util.Objects; @@ -32,21 +33,21 @@ public class SystemUser { * @param path - the original repository path of the user in the content-package. * @param intermediatePath - the intermediate path the user should have - most likely the (direct) parent of the path. */ - public SystemUser(String id, RepoPath path, RepoPath intermediatePath) { + public SystemUser(@NotNull String id, @NotNull RepoPath path, @NotNull RepoPath intermediatePath) { this.id = id; this.path = path; this.intermediatePath = intermediatePath; } - public String getId() { + public @NotNull String getId() { return id; } - public RepoPath getPath() { + public @NotNull RepoPath getPath() { return path; } - public RepoPath getIntermediatePath() { + public @NotNull RepoPath getIntermediatePath() { return intermediatePath; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactWriter.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactWriter.java index 61de667..b36aadd 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactWriter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactWriter.java @@ -16,11 +16,13 @@ */ package org.apache.sling.feature.cpconverter.artifacts; +import org.jetbrains.annotations.NotNull; + import java.io.IOException; import java.io.OutputStream; public interface ArtifactWriter { - void write(OutputStream output) throws IOException; + void write(@NotNull OutputStream output) throws IOException; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java index 3e189fd..c94dfe9 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java @@ -20,11 +20,12 @@ import java.io.File; import java.io.IOException; import org.apache.sling.feature.ArtifactId; +import org.jetbrains.annotations.NotNull; public interface ArtifactsDeployer { - File getBundlesDirectory(); + @NotNull File getBundlesDirectory(); - void deploy(ArtifactWriter artifactWriter, ArtifactId id) throws IOException; + void deploy(@NotNull ArtifactWriter artifactWriter, @NotNull ArtifactId id) throws IOException; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java index c1dda4c..eaec649 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.util.StringTokenizer; import org.apache.sling.feature.ArtifactId; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,7 +34,7 @@ public final class DefaultArtifactsDeployer implements ArtifactsDeployer { private final File artifactsDirectory; - public DefaultArtifactsDeployer(File outputDirectory) { + public DefaultArtifactsDeployer(@NotNull File outputDirectory) { artifactsDirectory = outputDirectory; if (!artifactsDirectory.exists()) { artifactsDirectory.mkdirs(); @@ -41,12 +42,12 @@ public final class DefaultArtifactsDeployer implements ArtifactsDeployer { } @Override - public File getBundlesDirectory() { + public @NotNull File getBundlesDirectory() { return artifactsDirectory; } @Override - public void deploy(ArtifactWriter artifactWriter, ArtifactId id) throws IOException { + public void deploy(@NotNull ArtifactWriter artifactWriter, @NotNull ArtifactId id) throws IOException { requireNonNull(artifactWriter, "Null ArtifactWriter can not install an artifact to a Maven repository."); requireNonNull(id, "Bundle can not be installed to a Maven repository without specifying a valid id."); diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/FileArtifactWriter.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/FileArtifactWriter.java index f876866..558ea10 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/FileArtifactWriter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/FileArtifactWriter.java @@ -16,6 +16,8 @@ */ package org.apache.sling.feature.cpconverter.artifacts; +import org.jetbrains.annotations.NotNull; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -26,12 +28,12 @@ public final class FileArtifactWriter implements ArtifactWriter { private final File fileArtifact; - public FileArtifactWriter(File fileArtifact) { + public FileArtifactWriter(@NotNull File fileArtifact) { this.fileArtifact = fileArtifact; } @Override - public void write(OutputStream output) throws IOException { + public void write(@NotNull OutputStream output) throws IOException { try (InputStream input = new FileInputStream(fileArtifact)) { new InputStreamArtifactWriter(input).write(output); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/InputStreamArtifactWriter.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/InputStreamArtifactWriter.java index 1f975a5..eba539e 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/InputStreamArtifactWriter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/InputStreamArtifactWriter.java @@ -21,17 +21,18 @@ import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.io.IOUtils; +import org.jetbrains.annotations.NotNull; public class InputStreamArtifactWriter implements ArtifactWriter { private final InputStream input; - public InputStreamArtifactWriter(InputStream input) { + public InputStreamArtifactWriter(@NotNull InputStream input) { this.input = input; } @Override - public void write(OutputStream output) throws IOException { + public void write(@NotNull OutputStream output) throws IOException { IOUtils.copy(input, output); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/MavenPomSupplierWriter.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/MavenPomSupplierWriter.java index f1f03f4..9ff7348 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/MavenPomSupplierWriter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/MavenPomSupplierWriter.java @@ -22,17 +22,18 @@ import java.io.OutputStream; import org.apache.maven.model.Model; import org.apache.maven.model.io.xpp3.MavenXpp3Writer; import org.apache.sling.feature.ArtifactId; +import org.jetbrains.annotations.NotNull; public final class MavenPomSupplierWriter implements ArtifactWriter { private final ArtifactId id; - public MavenPomSupplierWriter(ArtifactId id) { + public MavenPomSupplierWriter(@NotNull ArtifactId id) { this.id = id; } @Override - public void write(OutputStream outputStream) throws IOException { + public void write(@NotNull OutputStream outputStream) throws IOException { Model model = new Model(); // Maven complains if Model Version is not set model.setModelVersion("4.0.0"); diff --git a/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java b/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java index 055ca2e..bc2d44b 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java @@ -29,6 +29,7 @@ import org.apache.sling.feature.cpconverter.features.DefaultFeaturesManager; import org.apache.sling.feature.cpconverter.filtering.RegexBasedResourceFilter; import org.apache.sling.feature.cpconverter.handlers.DefaultEntryHandlersManager; import org.apache.sling.feature.cpconverter.vltpkg.DefaultPackagesEventsEmitter; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -178,7 +179,7 @@ public final class ContentPackage2FeatureModelConverterLauncher implements Runna } } - private static void printVersion(final Logger logger) { + private static void printVersion(@NotNull final Logger logger) { logger.info("{} v{} (built on {})", System.getProperty("project.artifactId"), System.getProperty("project.version"), @@ -200,7 +201,7 @@ public final class ContentPackage2FeatureModelConverterLauncher implements Runna logger.info("+-----------------------------------------------------+"); } - private static final String getOsFamily() { + private static final @NotNull String getOsFamily() { String osName = System.getProperty("os.name").toLowerCase(); String pathSep = System.getProperty("path.separator"); @@ -230,7 +231,7 @@ public final class ContentPackage2FeatureModelConverterLauncher implements Runna return "undefined"; } - public static void main(String[] args) { + public static void main(@NotNull String[] args) { CommandLine.run(new ContentPackage2FeatureModelConverterLauncher(), args); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/cli/ShutDownHook.java b/src/main/java/org/apache/sling/feature/cpconverter/cli/ShutDownHook.java index 6674d11..3f60e14 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/cli/ShutDownHook.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/cli/ShutDownHook.java @@ -22,6 +22,7 @@ import java.util.Date; import java.util.Formatter; import org.apache.commons.io.FileUtils; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; final class ShutDownHook extends Thread { @@ -30,7 +31,7 @@ final class ShutDownHook extends Thread { private final Logger logger; - public ShutDownHook(Logger logger) { + public ShutDownHook(@NotNull Logger logger) { this.logger = logger; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java index c1f93df..202189e 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java @@ -47,6 +47,8 @@ import org.apache.sling.feature.extension.apiregions.api.ApiExport; import org.apache.sling.feature.extension.apiregions.api.ApiRegion; import org.apache.sling.feature.extension.apiregions.api.ApiRegions; import org.apache.sling.feature.io.json.FeatureJSONWriter; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.osgi.framework.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -89,16 +91,16 @@ public class DefaultFeaturesManager implements FeaturesManager { this(null); } - public DefaultFeaturesManager(File tempDir) { + public DefaultFeaturesManager(@NotNull File tempDir) { this(true, 20, tempDir, null, null, null); } public DefaultFeaturesManager(boolean mergeConfigurations, int bundlesStartOrder, - File featureModelsOutputDirectory, - String artifactIdOverride, - String prefix, - Map<String, String> properties) { + @NotNull File featureModelsOutputDirectory, + @Nullable String artifactIdOverride, + @Nullable String prefix, + @NotNull Map<String, String> properties) { this.mergeConfigurations = mergeConfigurations; this.bundlesStartOrder = bundlesStartOrder; this.featureModelsOutputDirectory = featureModelsOutputDirectory; @@ -108,19 +110,19 @@ public class DefaultFeaturesManager implements FeaturesManager { } @Override - public void init(String groupId, String artifactId, String version) { + public void init(@NotNull String groupId, @NotNull String artifactId, @NotNull String version) { targetFeature = new Feature(new ArtifactId(groupId, artifactId, version, null, SLING_OSGI_FEATURE_TILE_TYPE)); runModes.clear(); } @Override - public Feature getTargetFeature() { + public @Nullable Feature getTargetFeature() { return targetFeature; } @Override - public Feature getRunMode(String runMode) { + public @NotNull Feature getRunMode(@Nullable String runMode) { if (getTargetFeature() == null) { throw new IllegalStateException("Target Feature not initialized yet, please make sure convert() method was invoked first."); } @@ -138,12 +140,12 @@ public class DefaultFeaturesManager implements FeaturesManager { } @Override - public void addArtifact(String runMode, ArtifactId id) { + public void addArtifact(@Nullable String runMode, @NotNull ArtifactId id) { addArtifact(runMode, id, null); } @Override - public void addArtifact(String runMode, ArtifactId id, Integer startOrder) { + public void addArtifact(@Nullable String runMode, @NotNull ArtifactId id, @Nullable Integer startOrder) { requireNonNull(id, "Artifact can not be attached to a feature without specifying a valid ArtifactId."); Artifact artifact = new Artifact(id); @@ -170,7 +172,7 @@ public class DefaultFeaturesManager implements FeaturesManager { artifacts.add(artifact); } - private ArtifactId appendRunmode(ArtifactId id, String runMode) { + private @NotNull ArtifactId appendRunmode(@NotNull ArtifactId id, @Nullable String runMode) { ArtifactId newId; if (runMode == null) { newId = id; @@ -188,7 +190,7 @@ public class DefaultFeaturesManager implements FeaturesManager { } @Override - public void addAPIRegionExport(String runMode, String exportedPackage) { + public void addAPIRegionExport(@Nullable String runMode, @NotNull String exportedPackage) { if (exportsToAPIRegion == null) return; // Ignore if we're not exporting to an API region @@ -200,7 +202,7 @@ public class DefaultFeaturesManager implements FeaturesManager { } @Override - public void addConfiguration(String runMode, String pid, Dictionary<String, Object> configurationProperties) { + public void addConfiguration(@Nullable String runMode, @NotNull String pid, @Nullable Dictionary<String, Object> configurationProperties) { Feature feature = getRunMode(runMode); Configuration configuration = feature.getConfigurations().getConfiguration(pid); @@ -232,7 +234,7 @@ public class DefaultFeaturesManager implements FeaturesManager { configuration.getProperties().remove("service.factoryPid"); } - private void addAPIRegions(Feature feature, List<String> exportedPackages) throws IOException { + private void addAPIRegions(@NotNull Feature feature, @Nullable List<String> exportedPackages) throws IOException { if (exportedPackages == null) exportedPackages = Collections.emptyList(); @@ -315,19 +317,19 @@ public class DefaultFeaturesManager implements FeaturesManager { } } - public synchronized DefaultFeaturesManager setAPIRegions(List<String> regions) { + public synchronized @NotNull DefaultFeaturesManager setAPIRegions(@NotNull List<String> regions) { targetAPIRegions.clear(); targetAPIRegions.addAll(regions); return this; } - public synchronized DefaultFeaturesManager setExportToAPIRegion(String region) { + public synchronized @NotNull DefaultFeaturesManager setExportToAPIRegion(@NotNull String region) { exportsToAPIRegion = region; return this; } @Override - public void addOrAppendRepoInitExtension(String text, String runMode) { + public void addOrAppendRepoInitExtension(@NotNull String text, @Nullable String runMode) { logger.info("Adding/Appending RepoInitExtension for runMode: {}", runMode ); Extension repoInitExtension = getRunMode(runMode).getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT); diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java index 8a8f642..c771cdb 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java @@ -20,25 +20,27 @@ import java.util.Dictionary; import org.apache.sling.feature.ArtifactId; import org.apache.sling.feature.Feature; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public interface FeaturesManager { - void init(String groupId, String artifactId, String version); + void init(@NotNull String groupId, @NotNull String artifactId, @NotNull String version); - Feature getTargetFeature(); + @Nullable Feature getTargetFeature(); - Feature getRunMode(String runMode); + @NotNull Feature getRunMode(@Nullable String runMode); - void addArtifact(String runMode, ArtifactId id); + void addArtifact(@Nullable String runMode, @NotNull ArtifactId id); - void addArtifact(String runMode, ArtifactId id, Integer startOrder); + void addArtifact(@Nullable String runMode, @NotNull ArtifactId id, @Nullable Integer startOrder); - void addAPIRegionExport(String runMode, String exportedPackage); + void addAPIRegionExport(@Nullable String runMode, @NotNull String exportedPackage); - void addConfiguration(String runMode, String pid, Dictionary<String, Object> configurationProperties); + void addConfiguration(@Nullable String runMode, @NotNull String pid, @Nullable Dictionary<String, Object> configurationProperties); void serialize() throws Exception; - void addOrAppendRepoInitExtension(String text, String runMode); + void addOrAppendRepoInitExtension(@NotNull String text, @Nullable String runMode); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/RunmodeMapper.java b/src/main/java/org/apache/sling/feature/cpconverter/features/RunmodeMapper.java index 23d1347..e10ef67 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/features/RunmodeMapper.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/features/RunmodeMapper.java @@ -16,6 +16,9 @@ */ package org.apache.sling.feature.cpconverter.features; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -26,7 +29,7 @@ final class RunmodeMapper { private static final String FILENAME = "runmode.mapping"; - public static RunmodeMapper open(File featureModelsOutputDirectory) throws IOException { + public static @NotNull RunmodeMapper open(@NotNull File featureModelsOutputDirectory) throws IOException { Properties properties = new Properties(); File runmodeMappingFile = new File(featureModelsOutputDirectory, FILENAME); @@ -45,12 +48,12 @@ final class RunmodeMapper { private final Properties properties; - private RunmodeMapper(File runmodeMappingFile, Properties properties) { + private RunmodeMapper(@NotNull File runmodeMappingFile, @NotNull Properties properties) { this.runmodeMappingFile = runmodeMappingFile; this.properties = properties; } - public void addOrUpdate(String runMode, String jsonFileName) { + public void addOrUpdate(@Nullable String runMode, @NotNull String jsonFileName) { if (runMode == null) { runMode = DEFAULT; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/filtering/RegexBasedResourceFilter.java b/src/main/java/org/apache/sling/feature/cpconverter/filtering/RegexBasedResourceFilter.java index d6fd02a..4ac864d 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/filtering/RegexBasedResourceFilter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/filtering/RegexBasedResourceFilter.java @@ -22,6 +22,7 @@ import java.util.LinkedList; import java.util.List; import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,7 +32,7 @@ public final class RegexBasedResourceFilter implements ResourceFilter { private final List<Pattern> patterns = new LinkedList<>(); - public void addFilteringPattern(String filteringPattern) { + public void addFilteringPattern(@NotNull String filteringPattern) { requireNonNull(filteringPattern, "Null pattern to filter resources out is not a valid filtering pattern"); if (filteringPattern.isEmpty()) { @@ -41,7 +42,7 @@ public final class RegexBasedResourceFilter implements ResourceFilter { patterns.add(Pattern.compile(filteringPattern)); } - public boolean isFilteredOut(String path) { + public boolean isFilteredOut(@NotNull String path) { for (Pattern pattern : patterns) { logger.debug("Checking if path '{}' matches against '{}' pattern...", path, pattern); diff --git a/src/main/java/org/apache/sling/feature/cpconverter/filtering/ResourceFilter.java b/src/main/java/org/apache/sling/feature/cpconverter/filtering/ResourceFilter.java index 2959efc..7992345 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/filtering/ResourceFilter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/filtering/ResourceFilter.java @@ -16,8 +16,10 @@ */ package org.apache.sling.feature.cpconverter.filtering; +import org.jetbrains.annotations.NotNull; + public interface ResourceFilter { - boolean isFilteredOut(String path); + boolean isFilteredOut(@NotNull String path); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java index a0a94c7..0507ea3 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java @@ -23,6 +23,8 @@ import java.util.regex.Matcher; import org.apache.jackrabbit.vault.fs.io.Archive; import org.apache.jackrabbit.vault.fs.io.Archive.Entry; import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.osgi.util.converter.Converters; abstract class AbstractConfigurationEntryHandler extends AbstractRegexEntryHandler { @@ -31,12 +33,12 @@ abstract class AbstractConfigurationEntryHandler extends AbstractRegexEntryHandl private static final String REPOINIT_PID = "org.apache.sling.jcr.repoinit.impl.RepositoryInitializer"; - public AbstractConfigurationEntryHandler(String extension) { + public AbstractConfigurationEntryHandler(@NotNull String extension) { super("/jcr_root/(?:apps|libs)/.+/config(\\.(?<runmode>[^/]+))?/(?<pid>.*)\\." + extension); } @Override - public final void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception { + public final void handle(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry, @NotNull ContentPackage2FeatureModelConverter converter) throws Exception { Matcher matcher = getPattern().matcher(path); @@ -103,7 +105,7 @@ abstract class AbstractConfigurationEntryHandler extends AbstractRegexEntryHandl } } - private void checkReferences(final Dictionary<String, Object> configurationProperties, final String pid) { + private void checkReferences(@NotNull final Dictionary<String, Object> configurationProperties, @NotNull final String pid) { final String[] references = Converters.standardConverter().convert(configurationProperties.get("references")).to(String[].class); if ( references != null && references.length > 0 ) { for(final String r : references ) { @@ -114,6 +116,6 @@ abstract class AbstractConfigurationEntryHandler extends AbstractRegexEntryHandl } } - protected abstract Dictionary<String, Object> parseConfiguration(String name, InputStream input) throws Exception; + protected abstract @Nullable Dictionary<String, Object> parseConfiguration(@NotNull String name, @NotNull InputStream input) throws Exception; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java index 8d65e29..d0d2a50 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java @@ -29,6 +29,8 @@ import org.apache.jackrabbit.vault.fs.io.Archive.Entry; import org.apache.jackrabbit.vault.packaging.VaultPackage; import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter; import org.codehaus.plexus.util.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public abstract class AbstractContentPackageHandler extends AbstractRegexEntryHandler { @@ -44,7 +46,7 @@ public abstract class AbstractContentPackageHandler extends AbstractRegexEntryHa } @Override - public final void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) + public final void handle(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry, @NotNull ContentPackage2FeatureModelConverter converter) throws Exception { logger.info("Processing sub-content package '{}'...", entry.getName()); @@ -96,6 +98,6 @@ public abstract class AbstractContentPackageHandler extends AbstractRegexEntryHa logger.info("Sub-content package '{}' processing is over", entry.getName()); } - protected abstract void processSubPackage(String path, String runMode, VaultPackage contentPackage, ContentPackage2FeatureModelConverter converter, boolean isEmbeddedPackage) throws Exception; + protected abstract void processSubPackage(@NotNull String path, @Nullable String runMode, @NotNull VaultPackage contentPackage, @NotNull ContentPackage2FeatureModelConverter converter, boolean isEmbeddedPackage) throws Exception; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractPolicyParser.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractPolicyParser.java index c36479a..e50029b 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractPolicyParser.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractPolicyParser.java @@ -21,6 +21,7 @@ import org.apache.sling.feature.cpconverter.accesscontrol.AclManager; import org.apache.sling.feature.cpconverter.shared.AbstractJcrNodeParser; import org.apache.sling.feature.cpconverter.shared.RepoPath; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.xml.sax.Attributes; import org.xml.sax.SAXException; @@ -54,7 +55,7 @@ abstract class AbstractPolicyParser extends AbstractJcrNodeParser<Boolean> { this.aclManager = aclManager; } - private static String extractValue(String expression) { + private static @Nullable String extractValue(@Nullable String expression) { if (expression == null || expression.isEmpty()) { return expression; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractRegexEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractRegexEntryHandler.java index 6b06023..7552908 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractRegexEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractRegexEntryHandler.java @@ -18,6 +18,7 @@ package org.apache.sling.feature.cpconverter.handlers; import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,20 +28,20 @@ abstract class AbstractRegexEntryHandler implements EntryHandler { private final Pattern pattern; - public AbstractRegexEntryHandler(String regex) { + public AbstractRegexEntryHandler(@NotNull String regex) { this(Pattern.compile(regex)); } - public AbstractRegexEntryHandler(Pattern pattern) { + public AbstractRegexEntryHandler(@NotNull Pattern pattern) { this.pattern = pattern; } @Override - public final boolean matches(String path) { + public final boolean matches(@NotNull String path) { return pattern.matcher(path).matches(); } - protected final Pattern getPattern() { + protected final @NotNull Pattern getPattern() { return pattern; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java index 54a943a..13a8fa0 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java @@ -21,6 +21,7 @@ import static org.apache.jackrabbit.vault.packaging.PackageProperties.NAME_VERSI import java.io.IOException; import java.io.InputStream; +import java.util.Objects; import java.util.Properties; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; @@ -36,6 +37,7 @@ import org.apache.sling.feature.ArtifactId; import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter; import org.apache.sling.feature.cpconverter.artifacts.InputStreamArtifactWriter; import org.codehaus.plexus.util.StringUtils; +import org.jetbrains.annotations.NotNull; import org.osgi.framework.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,7 +67,7 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler { } @Override - public void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception { + public void handle(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry, @NotNull ContentPackage2FeatureModelConverter converter) throws Exception { logger.info("Processing bundle {}...", entry.getName()); String groupId; @@ -74,7 +76,7 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler { String classifier = null; Manifest manifest; - try (JarInputStream jarInput = new JarInputStream(archive.openInputStream(entry))) { + try (JarInputStream jarInput = new JarInputStream(Objects.requireNonNull(archive.openInputStream(entry)))) { Properties properties = readGav(entry.getName(), jarInput); manifest = jarInput.getManifest(); @@ -119,23 +121,25 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler { } try (InputStream input = archive.openInputStream(entry)) { - ArtifactId id = new ArtifactId(groupId, artifactId, version, classifier, JAR_TYPE); + if (input != null) { + ArtifactId id = new ArtifactId(groupId, artifactId, version, classifier, JAR_TYPE); - converter.getArtifactsDeployer().deploy(new InputStreamArtifactWriter(input), id); + Objects.requireNonNull(converter.getArtifactsDeployer()).deploy(new InputStreamArtifactWriter(input), id); - converter.getFeaturesManager().addArtifact(runMode, id, startLevel); + Objects.requireNonNull(converter.getFeaturesManager()).addArtifact(runMode, id, startLevel); - String epHeader = manifest.getMainAttributes().getValue(Constants.EXPORT_PACKAGE); - if (epHeader != null) { - for (Clause clause : Parser.parseHeader(epHeader)) { - converter.getFeaturesManager().addAPIRegionExport(runMode, clause.getName()); + String epHeader = manifest.getMainAttributes().getValue(Constants.EXPORT_PACKAGE); + if (epHeader != null) { + for (Clause clause : Parser.parseHeader(epHeader)) { + converter.getFeaturesManager().addAPIRegionExport(runMode, clause.getName()); + } } } } } // method visibility set to 'protected' fot testing purposes - protected Properties readGav(String entryName, JarInputStream jarInput) throws IOException { + protected @NotNull Properties readGav(@NotNull String entryName, @NotNull JarInputStream jarInput) throws IOException { Properties properties = new Properties(); String bundleName = entryName; @@ -151,7 +155,7 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler { } JarEntry jarEntry; - dance : while ((jarEntry = jarInput.getNextJarEntry()) != null) { + while ((jarEntry = jarInput.getNextJarEntry()) != null) { String nextEntryName = jarEntry.getName(); if (pomPropertiesPattern.matcher(nextEntryName).matches()) { @@ -188,7 +192,7 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler { } } - break dance; + break; } } } @@ -196,14 +200,14 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler { return properties; } - private static String getCheckedProperty(Manifest manifest, String name) { + private static @NotNull String getCheckedProperty(@NotNull Manifest manifest, @NotNull String name) { String property = manifest.getMainAttributes().getValue(name).trim(); return requireNonNull(property, "Jar file can not be defined as a valid OSGi bundle without specifying a valid '" + name + "' property."); } - private static String getCheckedProperty(Properties properties, String name) { + private static String getCheckedProperty(@NotNull Properties properties, @NotNull String name) { String property = properties.getProperty(name).trim(); return requireNonNull(property, "Jar file can not be defined as a valid Maven artifact without specifying a valid '" + name diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandler.java index 64c8647..a32e71a 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandler.java @@ -20,6 +20,7 @@ import java.io.InputStream; import java.util.Dictionary; import org.apache.felix.cm.file.ConfigurationHandler; +import org.jetbrains.annotations.NotNull; public final class ConfigurationEntryHandler extends AbstractConfigurationEntryHandler { @@ -29,7 +30,7 @@ public final class ConfigurationEntryHandler extends AbstractConfigurationEntryH @Override @SuppressWarnings("unchecked") - protected Dictionary<String, Object> parseConfiguration(String name, InputStream input) throws Exception { + protected @NotNull Dictionary<String, Object> parseConfiguration(@NotNull String name, @NotNull InputStream input) throws Exception { return ConfigurationHandler.read(input); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java index c1d4c2d..59b435a 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java @@ -18,15 +18,17 @@ package org.apache.sling.feature.cpconverter.handlers; import org.apache.jackrabbit.vault.packaging.VaultPackage; import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public final class ContentPackageEntryHandler extends AbstractContentPackageHandler { @Override - protected void processSubPackage(String path, String runMode, - VaultPackage contentPackage, - ContentPackage2FeatureModelConverter converter, - boolean isEmbeddedPackage) throws Exception { - converter.processSubPackage(path, runMode, contentPackage, isEmbeddedPackage); + protected void processSubPackage(@NotNull String path, @Nullable String runMode, + @NotNull VaultPackage contentPackage, + @NotNull ContentPackage2FeatureModelConverter converter, + boolean isEmbeddedPackage) throws Exception { + converter.processSubPackage(path, runMode, contentPackage, isEmbeddedPackage); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/DefaultEntryHandlersManager.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/DefaultEntryHandlersManager.java index f7c4472..a2ba894 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/DefaultEntryHandlersManager.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/DefaultEntryHandlersManager.java @@ -16,6 +16,9 @@ */ package org.apache.sling.feature.cpconverter.handlers; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -27,23 +30,20 @@ public class DefaultEntryHandlersManager implements EntryHandlersManager { public DefaultEntryHandlersManager() { ServiceLoader<EntryHandler> entryHandlersLoader = ServiceLoader.load(EntryHandler.class); - Iterator<EntryHandler> entryHandlersIterator = entryHandlersLoader.iterator(); - while (entryHandlersIterator.hasNext()) { - EntryHandler entryHandler = entryHandlersIterator.next(); - + for (EntryHandler entryHandler : entryHandlersLoader) { addEntryHandler(entryHandler); } } @Override - public void addEntryHandler(EntryHandler handler) { + public void addEntryHandler(@NotNull EntryHandler handler) { if (handler != null) { entryHandlers.add(handler); } } @Override - public EntryHandler getEntryHandlerByEntryPath(String path) { + public @Nullable EntryHandler getEntryHandlerByEntryPath(@NotNull String path) { for (EntryHandler entryHandler : entryHandlers) { if (entryHandler.matches(path)) { return entryHandler; diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/EntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/EntryHandler.java index 5518313..1160ad3 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/EntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/EntryHandler.java @@ -19,11 +19,12 @@ package org.apache.sling.feature.cpconverter.handlers; import org.apache.jackrabbit.vault.fs.io.Archive; import org.apache.jackrabbit.vault.fs.io.Archive.Entry; import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter; +import org.jetbrains.annotations.NotNull; public interface EntryHandler { - boolean matches(String path); + boolean matches(@NotNull String path); - void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception; + void handle(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry, @NotNull ContentPackage2FeatureModelConverter converter) throws Exception; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/EntryHandlersManager.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/EntryHandlersManager.java index f6b0f42..430ba81 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/EntryHandlersManager.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/EntryHandlersManager.java @@ -16,10 +16,13 @@ */ package org.apache.sling.feature.cpconverter.handlers; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + public interface EntryHandlersManager { - EntryHandler getEntryHandlerByEntryPath(String path); + @Nullable EntryHandler getEntryHandlerByEntryPath(@NotNull String path); - void addEntryHandler(EntryHandler handler); + void addEntryHandler(@NotNull EntryHandler handler); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java index a3f095a..d60a3a9 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java @@ -23,6 +23,7 @@ import java.util.Dictionary; import java.util.Hashtable; import org.apache.felix.cm.json.Configurations; +import org.jetbrains.annotations.NotNull; public final class JsonConfigurationEntryHandler extends AbstractConfigurationEntryHandler { @@ -31,7 +32,7 @@ public final class JsonConfigurationEntryHandler extends AbstractConfigurationEn } @Override - protected Dictionary<String, Object> parseConfiguration(String name, InputStream input) throws Exception { + protected @NotNull Dictionary<String, Object> parseConfiguration(@NotNull String name, @NotNull InputStream input) throws Exception { final Hashtable<String, Object> props = Configurations.buildReader() .withIdentifier(name) .build(new InputStreamReader(input, StandardCharsets.UTF_8)) diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/NodeTypesEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/NodeTypesEntryHandler.java index 54032dd..d653a2f 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/NodeTypesEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/NodeTypesEntryHandler.java @@ -18,11 +18,13 @@ package org.apache.sling.feature.cpconverter.handlers; import java.io.BufferedReader; import java.io.InputStreamReader; +import java.util.Objects; import java.util.regex.Pattern; import org.apache.jackrabbit.vault.fs.io.Archive; import org.apache.jackrabbit.vault.fs.io.Archive.Entry; import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter; +import org.jetbrains.annotations.NotNull; public class NodeTypesEntryHandler extends AbstractRegexEntryHandler { @@ -30,16 +32,16 @@ public class NodeTypesEntryHandler extends AbstractRegexEntryHandler { super("/META-INF/vault/nodetypes\\.cnd"); } - public NodeTypesEntryHandler(Pattern pattern) { + public NodeTypesEntryHandler(@NotNull Pattern pattern) { super(pattern); } @Override - public void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) + public void handle(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry, @NotNull ContentPackage2FeatureModelConverter converter) throws Exception { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(archive.openInputStream(entry)))) { - converter.getAclManager().addNodetypeRegistrationSentence("register nodetypes"); - converter.getAclManager().addNodetypeRegistrationSentence("<<==="); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(Objects.requireNonNull(archive.openInputStream(entry))))) { + Objects.requireNonNull(converter.getAclManager()).addNodetypeRegistrationSentence("register nodetypes"); + Objects.requireNonNull(converter.getAclManager()).addNodetypeRegistrationSentence("<<==="); String nodetypeRegistrationSentence; while ((nodetypeRegistrationSentence = reader.readLine()) != null) { diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandler.java index 00c7c40..866abbd 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandler.java @@ -23,6 +23,7 @@ import org.apache.jackrabbit.vault.fs.io.Archive; import org.apache.jackrabbit.vault.fs.io.Archive.Entry; import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter; import org.apache.sling.feature.cpconverter.accesscontrol.AclManager; +import org.jetbrains.annotations.NotNull; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; @@ -40,7 +41,7 @@ public class PrivilegesHandler extends AbstractRegexEntryHandler { } @Override - public void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) + public void handle(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry, @NotNull ContentPackage2FeatureModelConverter converter) throws Exception { SAXParser saxParser = saxParserFactory.newSAXParser(); AclManager aclManager = converter.getAclManager(); @@ -52,7 +53,7 @@ public class PrivilegesHandler extends AbstractRegexEntryHandler { private final AclManager aclManager; - public PrivilegeHandler(AclManager aclManager) { + public PrivilegeHandler(@NotNull AclManager aclManager) { this.aclManager = aclManager; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/PropertiesConfigurationEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/PropertiesConfigurationEntryHandler.java index faa0dac..95c0160 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/PropertiesConfigurationEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/PropertiesConfigurationEntryHandler.java @@ -16,6 +16,8 @@ */ package org.apache.sling.feature.cpconverter.handlers; +import org.jetbrains.annotations.NotNull; + import java.io.BufferedInputStream; import java.io.InputStream; import java.util.Dictionary; @@ -30,7 +32,7 @@ public final class PropertiesConfigurationEntryHandler extends AbstractConfigura } @Override - protected Dictionary<String, Object> parseConfiguration(String name, InputStream input) throws Exception { + protected @NotNull Dictionary<String, Object> parseConfiguration(@NotNull String name, @NotNull InputStream input) throws Exception { final Properties properties = new Properties(); try (final BufferedInputStream in = new BufferedInputStream(input)) { diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java index 4162b16..3785a2c 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java @@ -17,6 +17,7 @@ package org.apache.sling.feature.cpconverter.handlers; import org.apache.jackrabbit.vault.util.PlatformNameFormat; +import org.jetbrains.annotations.NotNull; import org.xml.sax.Attributes; import org.apache.jackrabbit.vault.fs.io.Archive; @@ -36,7 +37,7 @@ public final class SystemUsersEntryHandler extends AbstractRegexEntryHandler { } @Override - public void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) + public void handle(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry, @NotNull ContentPackage2FeatureModelConverter converter) throws Exception { Matcher matcher = getPattern().matcher(path); if (matcher.matches()) { @@ -69,7 +70,7 @@ public final class SystemUsersEntryHandler extends AbstractRegexEntryHandler { * @param path - the original repository path of the user in the content-package. * @param intermediatePath - the intermediate path the user should have - most likely the (direct) parent of the path. */ - public SystemUserParser(ContentPackage2FeatureModelConverter converter, RepoPath path, RepoPath intermediatePath) { + public SystemUserParser(@NotNull ContentPackage2FeatureModelConverter converter, @NotNull RepoPath path, @NotNull RepoPath intermediatePath) { super(REP_SYSTEM_USER); this.converter = converter; this.path = path; diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/VersionResolverContentPackageEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/VersionResolverContentPackageEntryHandler.java index ac143cb..c5e9223 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/VersionResolverContentPackageEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/VersionResolverContentPackageEntryHandler.java @@ -22,6 +22,8 @@ import org.apache.jackrabbit.vault.packaging.PackageId; import org.apache.jackrabbit.vault.packaging.VaultPackage; import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter; import org.apache.sling.feature.cpconverter.vltpkg.RecollectorVaultPackageScanner; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,16 +35,16 @@ public final class VersionResolverContentPackageEntryHandler extends AbstractCon private final Map<PackageId, String> subContentPackages; - public VersionResolverContentPackageEntryHandler(RecollectorVaultPackageScanner scanner, Map<PackageId, String> subContentPackages) { + public VersionResolverContentPackageEntryHandler(@NotNull RecollectorVaultPackageScanner scanner, @NotNull Map<PackageId, String> subContentPackages) { this.scanner = scanner; this.subContentPackages = subContentPackages; } @Override - protected void processSubPackage(String path, String runMode, VaultPackage contentPackage, ContentPackage2FeatureModelConverter converter, boolean isEmbeddedPackage) + protected void processSubPackage(@NotNull String path, @Nullable String runMode, @NotNull VaultPackage contentPackage, @NotNull ContentPackage2FeatureModelConverter converter, boolean isEmbeddedPackage) throws Exception { - boolean addPackage = false; + boolean addPackage; PackageId currentId = contentPackage.getId(); logger.info("Checking if other {}:{} content-package versions were handled already", currentId.getGroup(), currentId.getName()); @@ -75,7 +77,7 @@ public final class VersionResolverContentPackageEntryHandler extends AbstractCon } } - private PackageId getPackage(PackageId expectedId) { + private @Nullable PackageId getPackage(@NotNull PackageId expectedId) { for (PackageId currentId : subContentPackages.keySet()) { if (expectedId.getGroup().equals(currentId.getGroup()) && expectedId.getName().equals(currentId.getName())) { diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/XmlConfigurationEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/XmlConfigurationEntryHandler.java index 5ee290e..3500c6d 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/XmlConfigurationEntryHandler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/XmlConfigurationEntryHandler.java @@ -29,11 +29,9 @@ import org.apache.jackrabbit.util.ISO8601; import org.apache.jackrabbit.vault.util.DocViewProperty; import org.apache.sling.feature.cpconverter.shared.AbstractJcrNodeParser; import org.codehaus.plexus.util.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -import com.google.common.base.Function; -import com.google.common.collect.Lists; public final class XmlConfigurationEntryHandler extends AbstractConfigurationEntryHandler { @@ -42,7 +40,7 @@ public final class XmlConfigurationEntryHandler extends AbstractConfigurationEnt } @Override - protected Dictionary<String, Object> parseConfiguration(String name, InputStream input) throws Exception { + protected @Nullable Dictionary<String, Object> parseConfiguration(@NotNull String name, @NotNull InputStream input) { JcrConfigurationHandler configurationHandler = new JcrConfigurationHandler(); try { return configurationHandler.parse(input); @@ -63,7 +61,7 @@ public final class XmlConfigurationEntryHandler extends AbstractConfigurationEnt } @Override - protected void onJcrRootElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + protected void onJcrRootElement(String uri, String localName, String qName, Attributes attributes) { configuration = Configurations.newConfiguration(); for (int i = 0; i < attributes.getLength(); i++) { @@ -81,51 +79,43 @@ public final class XmlConfigurationEntryHandler extends AbstractConfigurationEnt case PropertyType.DATE: // Date was never properly supported as osgi configs don't support dates so converting to millis // Scenario should just be theoretical - value = Lists.transform(strValues, new Function<String, Long>() { - public Long apply(String s) { - Long res = null; - if (s != null) { - Calendar cal = ISO8601.parse(s); - if (cal != null) { - res = cal.getTimeInMillis(); - } - } - return res; - } + value = strValues.stream().map(s -> { + Long res = null; + if (s != null) { + Calendar cal = ISO8601.parse(s); + if (cal != null) { + res = cal.getTimeInMillis(); + } + } + return res; }).toArray(); break; case PropertyType.DOUBLE: - value = Lists.transform(strValues, new Function<String, Double>() { - public Double apply(String s) { - Double res = null; - if (StringUtils.isNotEmpty(s)) { - res = Double.parseDouble(s); - } - return res; - } + value = strValues.stream().map(s -> { + Double res = null; + if (StringUtils.isNotEmpty(s)) { + res = Double.parseDouble(s); + } + return res; }).toArray(); break; case PropertyType.LONG: - value = Lists.transform(strValues, new Function<String, Long>() { - public Long apply(String s) { - Long res = null; - if (StringUtils.isNotEmpty(s)) { - res = Long.parseLong(s); - } - return res; + value = strValues.stream().map(s -> { + Long res = null; + if (StringUtils.isNotEmpty(s)) { + res = Long.parseLong(s); } - }).toArray(); + return res; + }).toArray(); break; case PropertyType.BOOLEAN: - value = Lists.transform(strValues, new Function<String, Boolean>() { - public Boolean apply(String s) { - Boolean res = null; - if (s != null) { - res = Boolean.valueOf(s); - } - return res; + value = strValues.stream().map(s -> { + Boolean res = null; + if (s != null) { + res = Boolean.valueOf(s); } - }).toArray(); + return res; + }).toArray(); break; } if (!property.isMulti) { diff --git a/src/main/java/org/apache/sling/feature/cpconverter/interpolator/SimpleVariablesInterpolator.java b/src/main/java/org/apache/sling/feature/cpconverter/interpolator/SimpleVariablesInterpolator.java index 0513bd6..dc07337 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/interpolator/SimpleVariablesInterpolator.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/interpolator/SimpleVariablesInterpolator.java @@ -16,6 +16,9 @@ */ package org.apache.sling.feature.cpconverter.interpolator; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import static java.util.Objects.requireNonNull; import java.util.Map; @@ -26,7 +29,7 @@ public final class SimpleVariablesInterpolator implements VariablesInterpolator private final Pattern replacementPattern = Pattern.compile("\\$\\{\\{(.+?)\\}\\}"); - public String interpolate(String format, Map<String, String> properties) { + public @NotNull String interpolate(@NotNull String format, @Nullable Map<String, String> properties) { requireNonNull(format, "Input string format must be not null"); if (properties == null || properties.isEmpty()) { diff --git a/src/main/java/org/apache/sling/feature/cpconverter/interpolator/VariablesInterpolator.java b/src/main/java/org/apache/sling/feature/cpconverter/interpolator/VariablesInterpolator.java index f2e13a8..14e9f1b 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/interpolator/VariablesInterpolator.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/interpolator/VariablesInterpolator.java @@ -16,10 +16,13 @@ */ package org.apache.sling.feature.cpconverter.interpolator; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.util.Map; public interface VariablesInterpolator { - String interpolate(String format, Map<String, String> properties); + @NotNull String interpolate(@NotNull String format, @Nullable Map<String, String> properties); } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/shared/AbstractJcrNodeParser.java b/src/main/java/org/apache/sling/feature/cpconverter/shared/AbstractJcrNodeParser.java index 5fc42ec..79caf44 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/shared/AbstractJcrNodeParser.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/shared/AbstractJcrNodeParser.java @@ -23,6 +23,7 @@ import java.io.InputStream; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.jetbrains.annotations.NotNull; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; @@ -35,7 +36,7 @@ public abstract class AbstractJcrNodeParser<O> extends DefaultHandler { private final String primaryType; - public AbstractJcrNodeParser(String primaryType) { + public AbstractJcrNodeParser(@NotNull String primaryType) { this.primaryType = primaryType; } @@ -53,7 +54,7 @@ public abstract class AbstractJcrNodeParser<O> extends DefaultHandler { } } - protected final String getPrimaryType() { + protected final @NotNull String getPrimaryType() { return primaryType; } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/shared/RepoPath.java b/src/main/java/org/apache/sling/feature/cpconverter/shared/RepoPath.java index 6253de3..6f4be68 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/shared/RepoPath.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/shared/RepoPath.java @@ -16,6 +16,9 @@ */ package org.apache.sling.feature.cpconverter.shared; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -39,7 +42,7 @@ public class RepoPath implements Comparable<RepoPath>{ * @param path The string representation of the path. If the initial leading forward * slash is missing it will be assumed to be there. */ - public RepoPath(String path) { + public RepoPath(@NotNull String path) { path = path.trim(); if (path.startsWith("/")) path = path.substring(1); @@ -53,12 +56,12 @@ public class RepoPath implements Comparable<RepoPath>{ * @param list The list to create the repo path from. The list should not have * any separators. */ - public RepoPath(List<String> list) { + public RepoPath(@NotNull List<String> list) { this.path = new ArrayList<>(list); } @Override - public int compareTo(RepoPath o) { + public int compareTo(@NotNull RepoPath o) { String me = toString(); String them = o.toString(); return me.compareTo(them); @@ -70,7 +73,7 @@ public class RepoPath implements Comparable<RepoPath>{ * @return The parent path, or {@code null} if we are at the root and there is no * further parent. */ - public RepoPath getParent() { + public @Nullable RepoPath getParent() { if (path.isEmpty()) return null; diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/BaseVaultPackageScanner.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/BaseVaultPackageScanner.java index 608b166..1df8c2b 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/BaseVaultPackageScanner.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/BaseVaultPackageScanner.java @@ -29,6 +29,8 @@ import org.apache.jackrabbit.vault.packaging.PackageManager; import org.apache.jackrabbit.vault.packaging.PackageProperties; import org.apache.jackrabbit.vault.packaging.VaultPackage; import org.apache.jackrabbit.vault.packaging.impl.PackageManagerImpl; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,17 +46,17 @@ public abstract class BaseVaultPackageScanner { this(new PackageManagerImpl(), strictValidation); } - public BaseVaultPackageScanner(PackageManager packageManager, boolean strictValidation) { + public BaseVaultPackageScanner(@NotNull PackageManager packageManager, boolean strictValidation) { this.packageManager = packageManager; this.strictValidation = strictValidation; } - public VaultPackage open(File vaultPackage) throws Exception { + public @NotNull VaultPackage open(@NotNull File vaultPackage) throws Exception { requireNonNull(vaultPackage, "Impossible to process a null vault package"); return packageManager.open(vaultPackage, strictValidation); } - public final void traverse(File vaultPackageFile, boolean closeOnTraversed) throws Exception { + public final void traverse(@NotNull File vaultPackageFile, boolean closeOnTraversed) throws Exception { VaultPackage vaultPackage = null; try { vaultPackage = open(vaultPackageFile); @@ -68,7 +70,7 @@ public abstract class BaseVaultPackageScanner { } } - public final void traverse(VaultPackage vaultPackage) throws Exception { + public final void traverse(@NotNull VaultPackage vaultPackage) throws Exception { requireNonNull(vaultPackage, "Impossible to process a null vault package"); PackageProperties properties = vaultPackage.getProperties(); @@ -90,7 +92,7 @@ public abstract class BaseVaultPackageScanner { } } - private void traverse(String path, Archive archive, Entry entry) throws Exception { + private void traverse(@Nullable String path, @NotNull Archive archive, @NotNull Entry entry) throws Exception { String entryPath = newPath(path, entry.getName()); if (entry.isDirectory()) { @@ -110,7 +112,7 @@ public abstract class BaseVaultPackageScanner { logger.debug("Entry {} successfully processed.", entryPath); } - private static String newPath(String path, String entryName) { + private static @NotNull String newPath(@Nullable String path, @NotNull String entryName) { if (path == null) { return entryName; } @@ -118,15 +120,15 @@ public abstract class BaseVaultPackageScanner { return path + '/' + entryName; } - protected void onDirectory(String path, Archive archive, Entry entry) throws Exception { + protected void onDirectory(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry) { // do nothing by default } - protected void onFile(String path, Archive archive, Entry entry) throws Exception { + protected void onFile(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry) throws Exception { // do nothing by default } - protected void addCdnPattern(Pattern cndPattern) { + protected void addCdnPattern(@NotNull Pattern cndPattern) { // do nothing by default } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java index 9993bc3..58ee22a 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java @@ -48,6 +48,7 @@ import org.apache.jackrabbit.vault.packaging.PackageProperties; import org.apache.jackrabbit.vault.packaging.PackageType; import org.apache.jackrabbit.vault.packaging.SubPackageHandling; import org.apache.jackrabbit.vault.packaging.VaultPackage; +import org.jetbrains.annotations.NotNull; /** * Writes a CSV file <code>containerFile,packageId,packageType[,parentId,pathInParent]</code> @@ -58,7 +59,7 @@ public final class DefaultPackagesEventsEmitter implements PackagesEventsEmitter private static final String PATH_SEPARATOR_CHAR = "!"; - public static DefaultPackagesEventsEmitter open(File featureModelsOutputDirectory) throws IOException { + public static @NotNull DefaultPackagesEventsEmitter open(@NotNull File featureModelsOutputDirectory) throws IOException { if (!featureModelsOutputDirectory.exists()) { featureModelsOutputDirectory.mkdirs(); } @@ -79,7 +80,7 @@ public final class DefaultPackagesEventsEmitter implements PackagesEventsEmitter private VaultPackage current; - protected DefaultPackagesEventsEmitter(Writer writer) { + protected DefaultPackagesEventsEmitter(@NotNull Writer writer) { this.writer = new PrintWriter(writer, true); } @@ -109,7 +110,7 @@ public final class DefaultPackagesEventsEmitter implements PackagesEventsEmitter } @Override - public void startPackage(VaultPackage vaultPackage) { + public void startPackage(@NotNull VaultPackage vaultPackage) { PackageId id = vaultPackage.getId(); Dependency[] dependencies = vaultPackage.getDependencies(); paths.add(vaultPackage.getFile().getAbsolutePath()); @@ -132,7 +133,7 @@ public final class DefaultPackagesEventsEmitter implements PackagesEventsEmitter } @Override - public void startSubPackage(String path, VaultPackage vaultPackage) { + public void startSubPackage(@NotNull String path, @NotNull VaultPackage vaultPackage) { PackageId id = vaultPackage.getId(); Dependency[] dependencies = vaultPackage.getDependencies(); paths.add(path); @@ -155,8 +156,8 @@ public final class DefaultPackagesEventsEmitter implements PackagesEventsEmitter endPackage(); } - static VaultPackage getDepOnlyPackage(PackageId id, - Dependency[] dependencies) { + static @NotNull VaultPackage getDepOnlyPackage(@NotNull PackageId id, + @NotNull Dependency[] dependencies) { return new VaultPackage() { diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java index a854b06..b8488ca 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java @@ -17,6 +17,7 @@ package org.apache.sling.feature.cpconverter.vltpkg; import org.apache.jackrabbit.vault.packaging.VaultPackage; +import org.jetbrains.annotations.NotNull; public interface PackagesEventsEmitter { @@ -24,11 +25,11 @@ public interface PackagesEventsEmitter { void end(); - void startPackage(VaultPackage vaultPackage); + void startPackage(@NotNull VaultPackage vaultPackage); void endPackage(); - void startSubPackage(String path, VaultPackage vaultPackage); + void startSubPackage(@NotNull String path, @NotNull VaultPackage vaultPackage); void endSubPackage(); diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/RecollectorVaultPackageScanner.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/RecollectorVaultPackageScanner.java index 4284e1b..8e9f290 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/RecollectorVaultPackageScanner.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/RecollectorVaultPackageScanner.java @@ -26,6 +26,7 @@ import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter import org.apache.sling.feature.cpconverter.handlers.EntryHandler; import org.apache.sling.feature.cpconverter.handlers.SystemUsersEntryHandler; import org.apache.sling.feature.cpconverter.handlers.VersionResolverContentPackageEntryHandler; +import org.jetbrains.annotations.NotNull; public final class RecollectorVaultPackageScanner extends BaseVaultPackageScanner { @@ -33,10 +34,10 @@ public final class RecollectorVaultPackageScanner extends BaseVaultPackageScanne private final EntryHandler[] handlers; - public RecollectorVaultPackageScanner(ContentPackage2FeatureModelConverter converter, - PackageManager packageManager, + public RecollectorVaultPackageScanner(@NotNull ContentPackage2FeatureModelConverter converter, + @NotNull PackageManager packageManager, boolean strictValidation, - Map<PackageId, String> subContentPackages) { + @NotNull Map<PackageId, String> subContentPackages) { super(packageManager, strictValidation); this.converter = converter; handlers = new EntryHandler[] { diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java index eaff712..3c7f96e 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java @@ -58,6 +58,8 @@ import org.apache.sling.feature.cpconverter.handlers.EntryHandler; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.codehaus.plexus.archiver.zip.ZipArchiver; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class VaultPackageAssembler implements EntryHandler, FileFilter { @@ -71,11 +73,11 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { private static final Pattern OSGI_BUNDLE_PATTERN = Pattern.compile("(jcr_root)?/apps/[^/]+/install(\\.([^/]+))?/.+\\.jar"); - public static VaultPackageAssembler create(VaultPackage vaultPackage) { + public static @NotNull VaultPackageAssembler create(@NotNull VaultPackage vaultPackage) { return create(vaultPackage, vaultPackage.getMetaInf().getFilter()); } - public static File createSynthetic(VaultPackage vaultPackage) throws Exception { + public static @NotNull File createSynthetic(@NotNull VaultPackage vaultPackage) throws Exception { DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter(); PathFilterSet filterSet = new PathFilterSet(); SyntheticPathFilter pathFilter = new SyntheticPathFilter(); @@ -85,7 +87,7 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { return create(vaultPackage, filter).createPackage(); } - private static VaultPackageAssembler create(VaultPackage vaultPackage, WorkspaceFilter filter) { + private static @NotNull VaultPackageAssembler create(@NotNull VaultPackage vaultPackage, @NotNull WorkspaceFilter filter) { PackageId packageId = vaultPackage.getId(); String fileName = packageId.toString().replaceAll("/", "-").replaceAll(":", "-") + "-" + vaultPackage.getFile().getName(); File storingDirectory = new File(TMP_DIR, fileName + "-deflated"); @@ -153,17 +155,17 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { /** * This class can not be instantiated from outside */ - private VaultPackageAssembler(File storingDirectory, Properties properties, Set<Dependency> dependencies) { + private VaultPackageAssembler(@NotNull File storingDirectory, @NotNull Properties properties, @NotNull Set<Dependency> dependencies) { this.storingDirectory = storingDirectory; this.properties = properties; this.dependencies = dependencies; } - public Properties getPackageProperties() { + public @NotNull Properties getPackageProperties() { return this.properties; } - public void mergeFilters(WorkspaceFilter filter) { + public void mergeFilters(@NotNull WorkspaceFilter filter) { for (PathFilterSet pathFilterSet : filter.getFilterSets()) { if (!OSGI_BUNDLE_PATTERN.matcher(pathFilterSet.getRoot()).matches()) { this.filter.add(pathFilterSet); @@ -171,31 +173,31 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { } } - public void addEntry(String path, Archive archive, Entry entry) throws IOException { + public void addEntry(@NotNull String path, @NotNull Archive archive, @NotNull Entry entry) throws IOException { try (InputStream input = archive.openInputStream(entry)) { addEntry(path, input); } } - public void addEntry(String path, File file) throws IOException { + public void addEntry(@NotNull String path, @NotNull File file) throws IOException { try (InputStream input = new FileInputStream(file)) { addEntry(path, input); } } - public void addEntry(String path, InputStream input) throws IOException { + public void addEntry(@NotNull String path, @NotNull InputStream input) throws IOException { try (OutputStream output = createEntry(path)) { IOUtils.copy(input, output); } } - public OutputStream createEntry(String path) throws IOException { + public @NotNull OutputStream createEntry(@NotNull String path) throws IOException { File target = new File(storingDirectory, path); target.getParentFile().mkdirs(); return new FileOutputStream(target); } - public File getEntry(String path) { + public @NotNull File getEntry(@NotNull String path) { if (!path.startsWith(ROOT_DIR)) { path = ROOT_DIR + path; } @@ -203,7 +205,7 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { return new File(storingDirectory, path); } - public void updateDependencies(Map<PackageId, Set<Dependency>> mutableContentsIds) { + public void updateDependencies(@NotNull Map<PackageId, Set<Dependency>> mutableContentsIds) { Map<Dependency, Set<Dependency>> matches = new HashMap<>(); for (Dependency dependency : dependencies) { for (java.util.Map.Entry<PackageId, Set<Dependency>> mutableContentId : mutableContentsIds.entrySet()) { @@ -219,15 +221,15 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { } - public void addDependency(Dependency dependency) { + public void addDependency(@NotNull Dependency dependency) { dependencies.add(dependency); } - public File createPackage() throws IOException { + public @NotNull File createPackage() throws IOException { return createPackage(TMP_DIR); } - public File createPackage(File outputDirectory) throws IOException { + public @NotNull File createPackage(@NotNull File outputDirectory) throws IOException { // generate the Vault properties XML file File metaDir = new File(storingDirectory, META_DIR); @@ -274,12 +276,13 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { return destFile; } - private void computeFilters(File outputDirectory) { + private void computeFilters(@NotNull File outputDirectory) { File jcrRootDir = new File(outputDirectory, JCR_ROOT_DIR); if (jcrRootDir.exists() && jcrRootDir.isDirectory()) { for (File child : jcrRootDir.listFiles(this)) { - File lowestCommonAncestor = lowestCommonAncestor(new TreeNode(child)).val; + TreeNode node = lowestCommonAncestor(new TreeNode(child)); + File lowestCommonAncestor = node != null ? node.val : null; if (lowestCommonAncestor != null) { String root = outputDirectory.toURI().relativize(lowestCommonAncestor.toURI()).getPath(); @@ -290,11 +293,11 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { } @Override - public boolean accept(File pathname) { + public boolean accept(@NotNull File pathname) { return pathname.isDirectory(); } - private TreeNode lowestCommonAncestor(TreeNode root) { + private @Nullable TreeNode lowestCommonAncestor(@NotNull TreeNode root) { int currMaxDepth = 0;//curr tree's deepest leaf depth int countMaxDepth = 0;//num of deepest leaves TreeNode node = null; @@ -337,7 +340,7 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { int maxDepth;//this means the maxDepth of curr treenode-rooted (sub)tree - TreeNode(File x) { + TreeNode(@NotNull File x) { val = x; maxDepth = 0; } @@ -345,11 +348,11 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter { } public static class FolderDeletionException extends RuntimeException { - public FolderDeletionException(String message) { + public FolderDeletionException(@NotNull String message) { super(message); } - public FolderDeletionException(String message, Throwable cause) { + public FolderDeletionException(@NotNull String message, @NotNull Throwable cause) { super(message, cause); } } diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java index af6d8f1..4662f74 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java @@ -28,6 +28,8 @@ 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; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class VaultPackageUtils { @@ -37,7 +39,7 @@ public class VaultPackageUtils { // this class must not be instantiated from outside } - public static PackageType detectPackageType(VaultPackage vaultPackage) { + public static @NotNull PackageType detectPackageType(@NotNull VaultPackage vaultPackage) { PackageType packageType = vaultPackage.getPackageType(); if (packageType != null) { return packageType; @@ -72,7 +74,7 @@ public class VaultPackageUtils { return PackageType.MIXED; } - public static Set<Dependency> getDependencies(VaultPackage vaultPackage) { + public static @NotNull Set<Dependency> getDependencies(@NotNull VaultPackage vaultPackage) { Dependency[] originalDepenencies = vaultPackage.getDependencies(); Set<Dependency> dependencies = new HashSet<>(); @@ -84,7 +86,7 @@ public class VaultPackageUtils { return dependencies; } - public static void setDependencies(Set<Dependency> dependencies, Properties properties) { + public static void setDependencies(@Nullable Set<Dependency> dependencies, @NotNull Properties properties) { if (dependencies == null || dependencies.isEmpty()) { return; }
