This is an automated email from the ASF dual-hosted git repository. cschneider pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-api.git
The following commit(s) were added to refs/heads/master by this push: new 12ee31f SLING-12274 - Introduce pre-processor hook. (#13) 12ee31f is described below commit 12ee31f2d59c33cc35ca25bfefacb42c77fc6bd8 Author: Danilo Banjac <53165717+daniloban...@users.noreply.github.com> AuthorDate: Wed Mar 27 11:00:56 2024 +0100 SLING-12274 - Introduce pre-processor hook. (#13) Co-authored-by: Danilo Banjac <dban...@adobe.com> --- .../distribution/ImportPreProcessException.java | 74 ++++++++++++++++++++++ .../sling/distribution/ImportPreProcessor.java | 43 +++++++++++++ 2 files changed, 117 insertions(+) diff --git a/src/main/java/org/apache/sling/distribution/ImportPreProcessException.java b/src/main/java/org/apache/sling/distribution/ImportPreProcessException.java new file mode 100644 index 0000000..0baa15f --- /dev/null +++ b/src/main/java/org/apache/sling/distribution/ImportPreProcessException.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.distribution; + +/** + * Exception thrown to indicate an issue that prevents the content from being + * imported successfully during the pre-import processing phase. This exception + * is used within the {@link ImportPreProcessor} to signal failures in pre-import + * checks, validations, or any other preparatory operations required before the + * content import begins. + */ +public class ImportPreProcessException extends Exception { + + /** + * Constructs a new ImportPreProcessException with the specified detail + * message. The cause is not initialized, and may subsequently be + * initialized by a call to {@link #initCause}. + * + * @param message the detail message. The detail message is saved for + * later retrieval by the {@link #getMessage()} method. + */ + public ImportPreProcessException(String message) { + super(message); + } + + /** + * Constructs a new ImportPreProcessException with the specified detail + * message and cause. + * <p>Note that the detail message associated with {@code cause} is + * not automatically incorporated in this exception's detail message.</p> + * + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A {@code null} value is + * permitted, and indicates that the cause is nonexistent + * or unknown.) + */ + public ImportPreProcessException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Constructs a new ImportPreProcessException with the specified cause and a + * detail message of {@code (cause==null ? null : cause.toString())} (which + * typically contains the class and detail message of {@code cause}). + * This constructor is useful for exceptions that are little more than + * wrappers for other throwables (for example, {@link java.security.PrivilegedActionException}). + * + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A {@code null} value is + * permitted, and indicates that the cause is nonexistent + * or unknown.) + */ + public ImportPreProcessException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/org/apache/sling/distribution/ImportPreProcessor.java b/src/main/java/org/apache/sling/distribution/ImportPreProcessor.java new file mode 100644 index 0000000..79b8f5f --- /dev/null +++ b/src/main/java/org/apache/sling/distribution/ImportPreProcessor.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.distribution; + +import java.util.Map; + +/** + * Interface for executing operations before the import of distribution content. + * This acts as a hook for performing any necessary pre-import operations, such as + * validation or initial setup, without modifying the properties of the content directly. + * Implementations of this interface can carry out checks or other preparatory tasks + * required before the content import process begins. + */ +public interface ImportPreProcessor { + /** + * Performs operations before the import of content. This method serves as a hook + * for any pre-import tasks, like validation or setup, that need to be completed + * prior to importing. It does not modify the input properties directly but can + * throw an {@link ImportPreProcessException} to indicate any issues that would + * prevent the content from being imported successfully. + * + * @param props properties defining the content to be imported + * @throws ImportPreProcessException if there is an issue that prevents + * the content from being imported successfully + */ + void process(Map<String, Object> props) throws ImportPreProcessException; +}