com.intropro.prairie.unit.common.DependencyResolver Maven / Gradle / Ivy
/**
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intropro.prairie.unit.common;
import com.intropro.prairie.unit.common.annotation.PrairieUnit;
import com.intropro.prairie.unit.common.exception.PrairieException;
import com.intropro.prairie.unit.common.exception.DestroyUnitException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by presidentio on 04.09.15.
*/
public class DependencyResolver {
private Map units = new HashMap();
private Map> dependencies = new HashMap>();
public void resolve(Object object) throws PrairieException {
resolve(object, object.getClass());
}
private void resolve(Object object, Class clazz) throws PrairieException {
Class parentClass = clazz.getSuperclass();
if(parentClass != null && !parentClass.equals(Object.class)) {
resolve(object, parentClass);
}
for (Field field : clazz.getDeclaredFields()) {
PrairieUnit prairieUnit = field.getAnnotation(PrairieUnit.class);
if (prairieUnit != null && !Modifier.isStatic(field.getModifiers())) {
resolveDependency(field, object);
}
}
}
public void resolveStatic(Class clazz) throws PrairieException {
for (Field field : clazz.getDeclaredFields()) {
PrairieUnit prairieUnit = field.getAnnotation(PrairieUnit.class);
if (prairieUnit != null && Modifier.isStatic(field.getModifiers())) {
resolveDependency(field, clazz);
}
}
}
private void resolveDependency(Field field, Object ref) throws PrairieException {
Class bigDataComponentClass = field.getType();
if (Unit.class.isAssignableFrom(bigDataComponentClass)) {
Unit unit = getUnit(bigDataComponentClass);
setDependency(ref, field, unit);
} else {
throw new PrairieException(
String.format("%s doesn't implements EmbeddedComponent interface",
bigDataComponentClass.getSimpleName()));
}
}
public void destroy(Object object) throws DestroyUnitException {
destroy(object, object.getClass());
garbageCollector();
}
private void destroy(Object object, Class clazz) throws DestroyUnitException {
for (Field field : clazz.getDeclaredFields()) {
PrairieUnit prairieUnit = field.getAnnotation(PrairieUnit.class);
if (prairieUnit != null && !Modifier.isStatic(field.getModifiers())) {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy