This is an automated email from the ASF dual-hosted git repository.
pauls pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git
The following commit(s) were added to refs/heads/master by this push:
new a21667f SLING-9974: add nullability annotations (#46)
a21667f is described below
commit a21667f65a2bd503bd752c3cc6fb842caac90d90
Author: Karl Pauls <[email protected]>
AuthorDate: Wed Jan 13 10:10:38 2021 +0100
SLING-9974: add nullability annotations (#46)
* SLING-9974: add nullability annotations
---
.../ContentPackage2FeatureModelConverter.java | 66 +++++++++----------
.../accesscontrol/AccessControlEntry.java | 14 +++--
.../accesscontrol/DefaultAclManager.java | 73 ++++++++++------------
.../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 | 21 ++++---
.../handlers/AbstractContentPackageHandler.java | 6 +-
.../cpconverter/handlers/AbstractPolicyParser.java | 6 +-
.../handlers/AbstractRegexEntryHandler.java | 9 +--
.../cpconverter/handlers/BundleEntryHandler.java | 32 +++++-----
.../handlers/ConfigurationEntryHandler.java | 3 +-
.../handlers/ContentPackageEntryHandler.java | 12 ++--
.../handlers/DefaultEntryHandlersManager.java | 13 ++--
.../feature/cpconverter/handlers/EntryHandler.java | 5 +-
.../cpconverter/handlers/EntryHandlersManager.java | 7 ++-
.../handlers/JsonConfigurationEntryHandler.java | 3 +-
.../handlers/NodeTypesEntryHandler.java | 12 ++--
.../cpconverter/handlers/PrivilegesHandler.java | 7 ++-
.../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 | 73 +++++++++++-----------
.../cpconverter/vltpkg/VaultPackageUtils.java | 8 ++-
.../handlers/ConfigEntryHandlerTest.java | 3 +-
46 files changed, 359 insertions(+), 302 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..95151c4 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, @NotNull 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 @NotNull 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 2975e90..c1f8925 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
@@ -26,6 +26,7 @@ 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 javax.jcr.NamespaceException;
import java.io.File;
@@ -60,18 +61,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 PrivilegeDefinitions privilegeDefinitions;
+ private volatile PrivilegeDefinitions privilegeDefinitions;
- 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;
@@ -79,7 +80,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);
}
@@ -90,10 +91,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 (privilegeDefinitions != null) {
registerPrivileges(privilegeDefinitions, formatter);
@@ -117,7 +116,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
@@ -127,8 +128,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);
+ }
}
}
@@ -137,26 +139,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();
}
}
@@ -169,7 +165,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);
@@ -178,20 +174,19 @@ 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 addPrivilegeDefinitions(@NotNull PrivilegeDefinitions
privilegeDefinitions) {
this.privilegeDefinitions = privilegeDefinitions;
}
@@ -203,8 +198,8 @@ public final class DefaultAclManager implements AclManager {
privilegeDefinitions = null;
}
- private void addPaths(List<AccessControlEntry> authorizations,
List<VaultPackageAssembler> packageAssemblers, Formatter formatter) {
- if (areEmpty(authorizations)) {
+ private void addPaths(@NotNull List<AccessControlEntry> authorizations,
@NotNull List<VaultPackageAssembler> packageAssemblers, @NotNull Formatter
formatter) {
+ if (authorizations.isEmpty()) {
return;
}
@@ -220,7 +215,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) {
@@ -244,8 +239,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 (authorizations.isEmpty()) {
return;
}
@@ -259,7 +254,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");
@@ -268,10 +263,6 @@ public final class DefaultAclManager implements AclManager
{
formatter.format("end%n");
}
- private static boolean areEmpty(List<AccessControlEntry> authorizations) {
- return authorizations == null || authorizations.isEmpty();
- }
-
private static void registerPrivileges(@NotNull PrivilegeDefinitions
definitions, @NotNull Formatter formatter) {
NameResolver nameResolver = new
DefaultNamePathResolver(definitions.getNamespaceMapping());
for (PrivilegeDefinition privilege : definitions.getDefinitions()) {
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..8be1241 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
@@ -18,11 +18,14 @@ package org.apache.sling.feature.cpconverter.handlers;
import java.io.InputStream;
import java.util.Dictionary;
+import java.util.Objects;
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,16 +34,16 @@ 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);
- String runMode = null;
+ String runMode;
// we are pretty sure it matches, here
if (matcher.matches()) {
@@ -66,13 +69,13 @@ abstract class AbstractConfigurationEntryHandler extends
AbstractRegexEntryHandl
logger.info("Processing configuration '{}'.", id);
Dictionary<String, Object> configurationProperties;
- try (InputStream input = archive.openInputStream(entry)) {
+ try (InputStream input =
Objects.requireNonNull(archive.openInputStream(entry))) {
configurationProperties = parseConfiguration(id, input);
}
if (configurationProperties == null) {
logger.info("{} entry does not contain a valid OSGi
configuration, treating it as a regular resource", path);
- converter.getMainPackageAssembler().addEntry(path, archive,
entry);
+
Objects.requireNonNull(converter.getMainPackageAssembler()).addEntry(path,
archive, entry);
return;
}
// there is a specified RunMode
@@ -83,7 +86,7 @@ abstract class AbstractConfigurationEntryHandler extends
AbstractRegexEntryHandl
if (scripts != null && scripts.length > 0 ) {
for(final String text : scripts) {
if ( text != null && !text.trim().isEmpty() ) {
-
converter.getFeaturesManager().addOrAppendRepoInitExtension(text, runMode);
+
Objects.requireNonNull(converter.getFeaturesManager()).addOrAppendRepoInitExtension(text,
runMode);
}
}
}
@@ -92,7 +95,7 @@ abstract class AbstractConfigurationEntryHandler extends
AbstractRegexEntryHandl
checkReferences(configurationProperties, pid);
} else {
- converter.getFeaturesManager().addConfiguration(runMode, id,
configurationProperties);
+
Objects.requireNonNull(converter.getFeaturesManager()).addConfiguration(runMode,
id, configurationProperties);
}
} else {
throw new IllegalStateException("Something went terribly wrong:
pattern '"
@@ -103,7 +106,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 +117,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..fd68b31 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,10 +21,12 @@ 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;
import javax.xml.transform.sax.TransformerHandler;
+import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -54,7 +56,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;
}
@@ -78,7 +80,7 @@ abstract class AbstractPolicyParser extends
AbstractJcrNodeParser<Boolean> {
}
AccessControlEntry createEntry(boolean isAllow, @NotNull Attributes
attributes) {
- return new AccessControlEntry(isAllow,
extractValue(attributes.getValue(REP_PRIVILEGES)), repositoryPath);
+ return new AccessControlEntry(isAllow,
Objects.requireNonNull(extractValue(attributes.getValue(REP_PRIVILEGES))),
repositoryPath);
}
@Override
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..9c20896 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,7 +16,9 @@
*/
package org.apache.sling.feature.cpconverter.handlers;
-import java.util.Iterator;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
import java.util.LinkedList;
import java.util.List;
import java.util.ServiceLoader;
@@ -27,23 +29,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 c26308f..329a394 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
@@ -20,6 +20,9 @@ import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
import org.apache.jackrabbit.vault.fs.spi.PrivilegeDefinitions;
import
org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
public class PrivilegesHandler extends AbstractRegexEntryHandler {
@@ -28,10 +31,10 @@ 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) {
PrivilegeDefinitions privileges = archive.getMetaInf().getPrivileges();
if (privileges != null) {
- converter.getAclManager().addPrivilegeDefinitions(privileges);
+
Objects.requireNonNull(converter.getAclManager()).addPrivilegeDefinitions(privileges);
}
}
}
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..6c0c22b 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
@@ -34,11 +34,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
+import java.util.*;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
@@ -58,6 +54,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 +69,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) {
- return create(vaultPackage, vaultPackage.getMetaInf().getFilter());
+ public static @NotNull VaultPackageAssembler create(@NotNull VaultPackage
vaultPackage) {
+ return create(vaultPackage,
Objects.requireNonNull(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 +83,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");
@@ -98,7 +96,9 @@ public class VaultPackageAssembler implements EntryHandler,
FileFilter {
}
// avoid any possible Stream is not a content package. Missing
'jcr_root' error
File jcrRootDirectory = new File(storingDirectory, ROOT_DIR);
- jcrRootDirectory.mkdirs();
+ if (!jcrRootDirectory.mkdirs() && jcrRootDirectory.isDirectory()) {
+ throw new IllegalStateException("Unable to create jcr root dir: "
+ jcrRootDirectory);
+ }
PackageProperties packageProperties = vaultPackage.getProperties();
@@ -140,12 +140,12 @@ public class VaultPackageAssembler implements
EntryHandler, FileFilter {
private final Properties properties;
@Override
- public boolean matches(String path) {
+ public boolean matches(@NotNull String path) {
return true;
}
@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 {
addEntry(path, archive, entry);
}
@@ -153,17 +153,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 +171,33 @@ public class VaultPackageAssembler implements
EntryHandler, FileFilter {
}
}
- public void addEntry(String path, Archive archive, Entry entry) throws
IOException {
- try (InputStream input = archive.openInputStream(entry)) {
+ public void addEntry(@NotNull String path, @NotNull Archive archive,
@NotNull Entry entry) throws IOException {
+ try (InputStream input =
Objects.requireNonNull(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();
+ if (!target.getParentFile().mkdirs() &&
!target.getParentFile().isDirectory()) {
+ throw new IOException("Could not create parent directory: " +
target.getParentFile());
+ }
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,20 +221,20 @@ 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);
- if (!metaDir.exists()) {
- metaDir.mkdirs();
+ if (!metaDir.exists() && !metaDir.mkdirs()) {
+ throw new IOException("Could not create meta Dir: " + metaDir);
}
setDependencies(dependencies, properties);
@@ -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;
}
diff --git
a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
index 400b4fe..9fcacd4 100644
---
a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
+++
b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
@@ -45,6 +45,7 @@ import
org.apache.sling.feature.cpconverter.features.DefaultFeaturesManager;
import org.apache.sling.feature.cpconverter.features.FeaturesManager;
import org.apache.sling.feature.io.json.FeatureJSONReader;
import org.apache.sling.feature.io.json.FeatureJSONWriter;
+import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import org.mockito.Mockito;
@@ -109,7 +110,7 @@ public class ConfigEntryHandlerTest {
AbstractConfigurationEntryHandler handler = new
AbstractConfigurationEntryHandler("cfg") {
@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 {
return new Hashtable(){{put("foo", "bar");}};
}
};