Copilot commented on code in PR #4077: URL: https://github.com/apache/streampipes/pull/4077#discussion_r2650965791
########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbAuthUtils.java: ########## @@ -0,0 +1,39 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.commons.environment.Environment; + +import org.apache.commons.codec.binary.Base64; + + +public class CouchDbAuthUtils { + + private final Environment environment; + + public CouchDbAuthUtils(Environment environment) { + this.environment = environment; + } + + public String getBasicAuthHeaderValue() { + String auth = environment.getCouchDbUsername().getValueOrDefault() + + ":" + environment.getCouchDbPassword().getValueOrDefault(); + return new String(Base64.encodeBase64(auth.getBytes())); + } +} Review Comment: The new CouchDbAuthUtils class lacks test coverage. Since this module has existing tests and this class contains security-critical authentication logic (Base64 encoding of credentials), consider adding unit tests to verify the getBasicAuthHeaderValue method works correctly. ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbAuthUtils.java: ########## @@ -0,0 +1,39 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.commons.environment.Environment; + +import org.apache.commons.codec.binary.Base64; + + +public class CouchDbAuthUtils { Review Comment: The CouchDbAuthUtils class should be marked as final since it's not designed for inheritance. This helps prevent unintended extension and clearly signals the design intent. ```suggestion public final class CouchDbAuthUtils { ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbPropertiesFactory.java: ########## @@ -0,0 +1,48 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.commons.environment.Environment; + +import org.lightcouch.CouchDbProperties; + + +public class CouchDbPropertiesFactory { Review Comment: The CouchDbPropertiesFactory class should be marked as final since it's not designed for inheritance. This helps prevent unintended extension and clearly signals the design intent. ```suggestion public final class CouchDbPropertiesFactory { ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbUrlUtils.java: ########## @@ -0,0 +1,40 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.commons.environment.Environment; + +import com.google.common.net.UrlEscapers; + + + +public final class CouchDbUrlUtils { + + private CouchDbUrlUtils() {} + + public static String escapePathSegment(String segment) { + return UrlEscapers.urlPathSegmentEscaper().escape(segment); + } + + public static String buildDatabaseRoute(Environment env, String dbName) { + return env.getCouchDbProtocol().getValueOrDefault() + + "://" + env.getCouchDbHost().getValueOrDefault() + + ":" + env.getCouchDbPort().getValueOrDefault() + + "/" + dbName; + } +} Review Comment: The new CouchDbUrlUtils class lacks test coverage. Since this module has existing tests (e.g., TestUrlEscapers) and this class contains core URL building and escaping logic that was previously tested, consider adding unit tests to verify the behavior of escapePathSegment and buildDatabaseRoute methods. ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbClientFactory.java: ########## @@ -0,0 +1,56 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.storage.couchdb.serializer.GsonSerializer; + +import org.lightcouch.CouchDbClient; + + + +public class CouchDbClientFactory { + + private final CouchDbPropertiesFactory propertiesFactory; + + public CouchDbClientFactory(CouchDbPropertiesFactory propertiesFactory) { + this.propertiesFactory = propertiesFactory; + } + + public CouchDbClient createGsonClient(String dbName) { + CouchDbClient client = new CouchDbClient(propertiesFactory.create(dbName)); + client.setGsonBuilder(GsonSerializer.getGsonBuilder()); + return client; + } + + public CouchDbClient createPrincipalClient(String dbName) { + CouchDbClient client = new CouchDbClient(propertiesFactory.create(dbName)); + client.setGsonBuilder(GsonSerializer.getPrincipalGsonBuilder()); + return client; + } + + public CouchDbClient createAdapterClient(String dbName) { + CouchDbClient client = new CouchDbClient(propertiesFactory.create(dbName)); + client.setGsonBuilder(GsonSerializer.getAdapterGsonBuilder()); + return client; + } + + public CouchDbClient createDefaultClient(String dbName) { + return new CouchDbClient(propertiesFactory.create(dbName)); + } +} Review Comment: The new CouchDbClientFactory class lacks test coverage. Since this module has existing tests and this class is responsible for creating various types of CouchDB clients with different serialization strategies, consider adding unit tests to verify the factory methods create clients with the correct configurations. ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbConstants.java: ########## @@ -0,0 +1,25 @@ +/* + * 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.streampipes.storage.couchdb.utils; + Review Comment: The CouchDbConstants class is missing class-level documentation. Consider adding a Javadoc comment that explains the purpose of this class and describes what constants it contains (e.g., "Constants for CouchDB database names used throughout the storage layer"). ```suggestion /** * Constants for CouchDB database names used throughout the storage layer. * <p> * Currently contains database names for user data and data lake data. */ ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbConstants.java: ########## @@ -0,0 +1,25 @@ +/* + * 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.streampipes.storage.couchdb.utils; + +public final class CouchDbConstants { Review Comment: The utility class CouchDbConstants is missing a private constructor to prevent instantiation. Since this class only contains static constants, it should have a private constructor to enforce the non-instantiability pattern, similar to CouchDbUrlUtils. ```suggestion public final class CouchDbConstants { private CouchDbConstants() { // utility class } ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbClientFactory.java: ########## @@ -0,0 +1,56 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.storage.couchdb.serializer.GsonSerializer; + +import org.lightcouch.CouchDbClient; + + + +public class CouchDbClientFactory { Review Comment: The CouchDbClientFactory class should be marked as final since it's not designed for inheritance. This helps prevent unintended extension and clearly signals the design intent. ```suggestion public final class CouchDbClientFactory { ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbUrlUtils.java: ########## @@ -0,0 +1,40 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.commons.environment.Environment; + +import com.google.common.net.UrlEscapers; + + + Review Comment: The CouchDbUrlUtils class is missing class-level documentation. Consider adding a Javadoc comment that explains the purpose of this utility class and its responsibilities (e.g., "Utility class for building CouchDB URLs and escaping URL path segments"). ```suggestion /** * Utility class for working with CouchDB URLs. * <p> * Provides helper methods to escape URL path segments and to construct * CouchDB database routes from the configured {@link Environment}. */ ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbPropertiesFactory.java: ########## @@ -0,0 +1,48 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.commons.environment.Environment; + +import org.lightcouch.CouchDbProperties; + + +public class CouchDbPropertiesFactory { + + private final Environment environment; + + public CouchDbPropertiesFactory(Environment environment) { + this.environment = environment; + } + + public CouchDbProperties create(String dbName, boolean createIfNotExists) { + return new CouchDbProperties( + dbName, + createIfNotExists, + environment.getCouchDbProtocol().getValueOrDefault(), + environment.getCouchDbHost().getValueOrDefault(), + environment.getCouchDbPort().getValueOrDefault(), + environment.getCouchDbUsername().getValueOrDefault(), + environment.getCouchDbPassword().getValueOrDefault()); + } + + public CouchDbProperties create(String dbName) { + return create(dbName, true); + } +} Review Comment: The new CouchDbPropertiesFactory class lacks test coverage. Since this module has existing tests and this class is responsible for creating CouchDbProperties objects with environment-based configuration, consider adding unit tests to verify the factory methods create properties correctly. ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbRequestFactory.java: ########## @@ -0,0 +1,58 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.http.HttpHeaders; +import org.apache.http.client.fluent.Request; +import org.apache.http.entity.ContentType; + + +public class CouchDbRequestFactory { + + private final CouchDbAuthUtils authUtils; + + public CouchDbRequestFactory(CouchDbAuthUtils authUtils) { + this.authUtils = authUtils; + } + + public Request get(String route) { + return append(Request.Get(route)); + } + + public Request post(String route, String payload) { + return append(Request.Post(route) + .bodyString(payload, ContentType.APPLICATION_JSON)); + } + + public Request put(String route, String payload) { + return append(Request.Put(route) + .bodyString(payload, ContentType.APPLICATION_JSON)); + } + + public Request delete(String route) { + return append(Request.Delete(route)); + } + + private Request append(Request req) { + req.setHeader(HttpHeaders.AUTHORIZATION, + "Basic " + authUtils.getBasicAuthHeaderValue()) + .connectTimeout(1000) + .socketTimeout(100000); + return req; + } +} Review Comment: The new CouchDbRequestFactory class lacks test coverage. Since this module has existing tests and this class is responsible for creating HTTP requests with authentication headers and timeouts, consider adding unit tests to verify the request factory methods create requests with the correct configurations. ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbPropertiesFactory.java: ########## @@ -0,0 +1,48 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.commons.environment.Environment; + +import org.lightcouch.CouchDbProperties; + + Review Comment: The CouchDbPropertiesFactory class is missing class-level documentation. Consider adding a Javadoc comment that explains the purpose of this factory class and its responsibilities (e.g., "Factory class for creating CouchDbProperties instances from environment configuration"). ```suggestion /** * Factory class for creating {@link CouchDbProperties} instances based on * CouchDB configuration provided by the {@link Environment}. * * <p>The factory reads protocol, host, port, username and password from the * environment and uses these values to create {@code CouchDbProperties} * for a given database name. It can optionally mark the database to be * created if it does not already exist.</p> */ ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbRequestFactory.java: ########## @@ -0,0 +1,58 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.http.HttpHeaders; +import org.apache.http.client.fluent.Request; +import org.apache.http.entity.ContentType; + + Review Comment: The CouchDbRequestFactory class is missing class-level documentation. Consider adding a Javadoc comment that explains the purpose of this factory class and its responsibilities (e.g., "Factory class for creating authenticated HTTP requests to CouchDB with configured timeouts"). ```suggestion /** * Factory class for creating authenticated HTTP requests to CouchDB. * <p> * This utility centralizes the creation of {@link Request} instances with a * preconfigured Basic Authorization header and connection/socket timeouts. * It uses {@link CouchDbAuthUtils} to obtain the credentials for CouchDB. */ ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbAuthUtils.java: ########## @@ -0,0 +1,39 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.commons.environment.Environment; + +import org.apache.commons.codec.binary.Base64; + + Review Comment: The CouchDbAuthUtils class is missing class-level documentation. Consider adding a Javadoc comment that explains the purpose of this class and its responsibilities (e.g., "Utility class for handling CouchDB authentication, including generation of Basic Auth headers"). ```suggestion /** * Utility class for handling CouchDB authentication. * <p> * Provides helper methods to construct authentication information, including * generation of the value for HTTP Basic Authentication headers based on * CouchDB credentials obtained from the {@link Environment}. */ ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbClientFactory.java: ########## @@ -0,0 +1,56 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.streampipes.storage.couchdb.serializer.GsonSerializer; + +import org.lightcouch.CouchDbClient; + + + Review Comment: The CouchDbClientFactory class is missing class-level documentation. Consider adding a Javadoc comment that explains the purpose of this factory class and its responsibilities (e.g., "Factory class for creating CouchDbClient instances with different serialization strategies (Gson, Principal, Adapter)"). ```suggestion /** * Factory class for creating {@link CouchDbClient} instances configured with different * Gson serialization strategies. * <p> * Uses a {@link CouchDbPropertiesFactory} to build the connection properties for the * given database name and then configures the corresponding {@link CouchDbClient}. * The factory provides specialized clients for: * <ul> * <li>generic Gson serialization ({@link #createGsonClient(String)})</li> * <li>principal-aware serialization ({@link #createPrincipalClient(String)})</li> * <li>adapter-specific serialization ({@link #createAdapterClient(String)})</li> * <li>the default CouchDbClient configuration ({@link #createDefaultClient(String)})</li> * </ul> */ ``` ########## streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/CouchDbRequestFactory.java: ########## @@ -0,0 +1,58 @@ +/* + * 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.streampipes.storage.couchdb.utils; +import org.apache.http.HttpHeaders; +import org.apache.http.client.fluent.Request; +import org.apache.http.entity.ContentType; + + +public class CouchDbRequestFactory { Review Comment: The CouchDbRequestFactory class should be marked as final since it's not designed for inheritance. This helps prevent unintended extension and clearly signals the design intent. ```suggestion public final class CouchDbRequestFactory { ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
