summaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api')
-rw-r--r--openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/api/AbstractFactory.java52
-rw-r--r--openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/AbstractFactoryBase.java38
-rw-r--r--openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/FactoryManager.java33
3 files changed, 50 insertions, 73 deletions
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/api/AbstractFactory.java b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/api/AbstractFactory.java
index 12956417dd..87da8fc6e4 100644
--- a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/api/AbstractFactory.java
+++ b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/api/AbstractFactory.java
@@ -7,9 +7,9 @@
* Licensed 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.
@@ -17,20 +17,15 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-
package org.openecomp.core.factory.api;
import org.openecomp.core.factory.impl.AbstractFactoryBase;
/**
- * This class provides generic implementation of an abstract factory. Components exposed as Java
- * interfaces should have their own concrete factories derived from the given class. This assures
- * code alignment and consistency across all Service Management components.
- * The class actually
- * uses singleton pattern to instantiate and reuse just one instance of a factory. Therefore, each
- * factory implementation has to be <i>thread-safe</i>.
- * In a general case, the hierarchy of
- * factory objects for an Java interface <tt>IUknown</tt> may look as follows:
+ * This class provides generic implementation of an abstract factory. Components exposed as Java interfaces should have their own concrete factories
+ * derived from the given class. This assures code alignment and consistency across all Service Management components. The class actually uses
+ * singleton pattern to instantiate and reuse just one instance of a factory. Therefore, each factory implementation has to be <i>thread-safe</i>. In
+ * a general case, the hierarchy of factory objects for an Java interface <tt>IUknown</tt> may look as follows:
* <pre>
* AbstractFactory&lt;IUnknown&gt;
* ^
@@ -42,12 +37,10 @@ import org.openecomp.core.factory.impl.AbstractFactoryBase;
* | |
* BaselineFactoryImpl CustomFactoryImpl
* </pre>
- * Where the classes responsibility is: <ul> <li>Abstract factory - common logic to retrieve the
- * implementation class name from a central repository.</li> <li>Concrete factory - abstract class
- * that only exposes to application layer the type specific API such as: <ul> <li><tt>public static
- * ConcreteFactory getInstance()</tt></li> </ul> <li>Baseline factory - out of the box
- * implementation of concrete factory (that can be replaced by a custom one depending on customer
- * needs) which actually implements method: <ul> <li><tt>public IUnknown createInterface()</tt></li>
+ * Where the classes responsibility is: <ul> <li>Abstract factory - common logic to retrieve the implementation class name from a central
+ * repository.</li> <li>Concrete factory - abstract class that only exposes to application layer the type specific API such as: <ul> <li><tt>public
+ * static ConcreteFactory getInstance()</tt></li> </ul> <li>Baseline factory - out of the box implementation of concrete factory (that can be replaced
+ * by a custom one depending on customer needs) which actually implements method: <ul> <li><tt>public IUnknown createInterface()</tt></li>
* </ul> </ul> The normal concrete factory class may look like:
* <pre>
* public abstract class ConcreteFactory extends AbstractFactory&lt;IUnknown&gt; {
@@ -64,18 +57,15 @@ import org.openecomp.core.factory.impl.AbstractFactoryBase;
*/
public abstract class AbstractFactory<I> extends AbstractFactoryBase {
-
- /**
- * Returns the interface implementor instance.
- * <b>Note</b>: It's up to the concrete factory to decide on the actual
- * implementation of the returned interface. Therefore, the call can get the
- * same instance per each call in case of singleton implementation or new
- * instance otherwise. However, the API consumer may not assume anything
- * regarding the underlying logic and has always go through the factory to
- * obtain the reference.
- *
- * @return Implementor of the exposed Java interface.
- */
- public abstract I createInterface();
-
+ /**
+ * Returns the interface implementor instance.
+ * <b>Note</b>: It's up to the concrete factory to decide on the actual
+ * implementation of the returned interface. Therefore, the call can get the same instance per each call in case of singleton implementation or
+ * new instance otherwise. However, the API consumer may not assume anything regarding the underlying logic and has always go through the factory
+ * to obtain the reference.
+ *
+ * @return Implementor of the exposed Java interface.
+ */
+ public abstract I createInterface();
} // End of class
+
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/AbstractFactoryBase.java b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/AbstractFactoryBase.java
index 3a117ef063..41bfeab826 100644
--- a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/AbstractFactoryBase.java
+++ b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/AbstractFactoryBase.java
@@ -13,30 +13,30 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.openecomp.core.factory.impl;
public abstract class AbstractFactoryBase {
- /**
- * Instantiates the configured implementation of an abstract factory.
- *
- * @param <F> Type specific abstract factory for concrete Java interface
- * @param factoryType Java class of type specific abstract factory
- * @return Instance of implementation class
- */
- public static <F extends AbstractFactoryBase> F getInstance(Class<F> factoryType) {
- return FactoryManager.getInstance().getFactoryInstance(factoryType);
- }
+ /**
+ * Instantiates the configured implementation of an abstract factory.
+ *
+ * @param <F> Type specific abstract factory for concrete Java interface
+ * @param factoryType Java class of type specific abstract factory
+ * @return Instance of implementation class
+ */
+ public static <F extends AbstractFactoryBase> F getInstance(Class<F> factoryType) {
+ return FactoryManager.getInstance().getFactoryInstance(factoryType);
+ }
+
+ protected void init() {
+ // allows custom initialization
- protected void init() {
- // allows custom initialization
- // noop by default
- }
+ // noop by default
+ }
- protected void stop() {
- // allows custom shutdown
- // noop by default
- }
+ protected void stop() {
+ // allows custom shutdown
+ // noop by default
+ }
}
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/FactoryManager.java b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/FactoryManager.java
index ec2d93f35b..26816aaafe 100644
--- a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/FactoryManager.java
+++ b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/src/main/java/org/openecomp/core/factory/impl/FactoryManager.java
@@ -16,7 +16,6 @@
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-
package org.openecomp.core.factory.impl;
import com.amdocs.zusammen.utils.facade.impl.FactoryConfig;
@@ -33,9 +32,8 @@ public class FactoryManager {
private static final FactoryManager instance = new FactoryManager();
private static final String ERROR_CODE_E0001 = "E0001";
/**
- * Temporary registry of default implementations. The map keeps class names rather then class
- * types to allow unloading of those classes from memory by garbage collector if factory is not
- * actually used.
+ * Temporary registry of default implementations. The map keeps class names rather then class types to allow unloading of those classes from
+ * memory by garbage collector if factory is not actually used.
*/
private final Map<String, String> factoryRegistry = new ConcurrentHashMap<>();
/**
@@ -43,7 +41,6 @@ public class FactoryManager {
*/
private final Map<String, AbstractFactoryBase> factoryInstanceMap = new ConcurrentHashMap<>();
-
private FactoryManager() {
initializeFactoryRegistry();
}
@@ -54,17 +51,13 @@ public class FactoryManager {
private void initializeFactoryRegistry() {
final Map<String, String> factoryMap = FactoryConfig.getFactoriesMap();
-
for (final Map.Entry<String, String> entry : factoryMap.entrySet()) {
final String abstractClassName = entry.getKey();
final String concreteTypeName = entry.getValue();
-
if (StringUtils.isEmpty(concreteTypeName)) {
throw new CoreException(
- new ErrorCode.ErrorCodeBuilder().withId("E0003")
- .withMessage("Missing configuration value:" + concreteTypeName + ".")
+ new ErrorCode.ErrorCodeBuilder().withId("E0003").withMessage("Missing configuration value:" + concreteTypeName + ".")
.withCategory(ErrorCategory.SYSTEM).build());
-
}
registerFactory(abstractClassName, concreteTypeName);
}
@@ -80,32 +73,26 @@ public class FactoryManager {
@SuppressWarnings("unchecked")
public <F extends AbstractFactoryBase> F getFactoryInstance(Class<F> factoryType) {
if (factoryType == null) {
- throw new CoreException(
- new ErrorCode.ErrorCodeBuilder().withId(ERROR_CODE_E0001)
- .withMessage("Mandatory input factory type.").withCategory(ErrorCategory.SYSTEM)
- .build());
-
+ throw new CoreException(new ErrorCode.ErrorCodeBuilder().withId(ERROR_CODE_E0001).withMessage("Mandatory input factory type.")
+ .withCategory(ErrorCategory.SYSTEM).build());
}
final String factoryTypeName = factoryType.getName();
// Check if the factory is already cached
if (factoryInstanceMap.get(factoryTypeName) == null) {
//if not, create a new one and cache it
+
// Get the implementation class name
final String implName = factoryRegistry.get(factoryTypeName);
-
if (StringUtils.isEmpty(implName)) {
throw new CoreException(
- new ErrorCode.ErrorCodeBuilder().withId(ERROR_CODE_E0001)
- .withMessage("Mandatory input factory implementation.")
+ new ErrorCode.ErrorCodeBuilder().withId(ERROR_CODE_E0001).withMessage("Mandatory input factory implementation.")
.withCategory(ErrorCategory.SYSTEM).build());
}
-
F factory = CommonMethods.newInstance(implName, factoryType);
factory.init();
// Cache the instantiated singleton
factoryInstanceMap.putIfAbsent(factoryTypeName, factory);
}
-
return (F) factoryInstanceMap.get(factoryTypeName);
}
@@ -115,6 +102,7 @@ public class FactoryManager {
/**
* Unregister factory and removes the cached instance if any.
+ *
* @param factoryName the factory name to unregister
*/
public void unregisterFactory(final String factoryName) {
@@ -134,10 +122,9 @@ public class FactoryManager {
public <F extends AbstractFactoryBase> void removeFactoryInstance(Class<F> factory) {
if (factory == null) {
throw new CoreException(
- new ErrorCode.ErrorCodeBuilder().withId(ERROR_CODE_E0001).withMessage("Mandatory input factory.")
- .withCategory(ErrorCategory.SYSTEM).build());
+ new ErrorCode.ErrorCodeBuilder().withId(ERROR_CODE_E0001).withMessage("Mandatory input factory.").withCategory(ErrorCategory.SYSTEM)
+ .build());
}
-
factoryInstanceMap.remove(factory.getName());
}