diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/AbstractEncapsulatedData.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/AbstractEncapsulatedData.java index 8be1275..16df706 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/AbstractEncapsulatedData.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/AbstractEncapsulatedData.java @@ -58,14 +58,14 @@ public Set getDirectReferences() } @Override - public void addWeakReference(IBean pBean, IField pField) + public void addWeakReference(IBean pBean, IField pField) { final IEncapsulatedBeanData encapsulatedData = requestEncapsulatedDataForField(pBean, pField); weakReferencesMapping.computeIfAbsent(encapsulatedData, pKey -> new HashSet<>()).add(new BeanReference(pBean, pField)); } @Override - public void removeReference(IBean pBean, IField pField) + public void removeReference(IBean pBean, IField pField) { final IEncapsulatedBeanData encapsulatedData = requestEncapsulatedDataForField(pBean, pField); boolean removed = false; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanContainer.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanContainer.java index 974570f..159b5a3 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanContainer.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanContainer.java @@ -15,7 +15,7 @@ * @author Simon Danner, 23.08.2016 */ @RequiresEncapsulatedAccess -public class BeanContainer> implements IBeanContainer +public class BeanContainer implements IBeanContainer { private final IEncapsulatedBeanContainerData encapsulatedData; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanCopies.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanCopies.java index 9e8c712..a0cffdb 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanCopies.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanCopies.java @@ -44,14 +44,15 @@ private BeanCopies() * @param pCustomCopies a collection of custom copy mechanisms for specific bean fields * @return a copy of the bean */ - static > BEAN doCreateCopy(BEAN pOriginal, ECopyMode pMode, CustomFieldCopy... pCustomCopies) + static IBean doCreateCopy(IBean pOriginal, ECopyMode pMode, CustomFieldCopy... pCustomCopies) { requestEncapsulatedData(pOriginal); //Check if the data core is present - //noinspection unchecked - final Class beanType = (Class) BeanReflector.requiresDeclaredBeanType(pOriginal.getClass()); + final Class beanType = BeanReflector.requiresDeclaredBeanType(pOriginal.getClass()); final List> fieldOrder = pOriginal.streamFields().collect(Collectors.toList()); - final BEAN copyInstance = _createBeanPerDefaultConstructorAndSetDataSource(beanType, fieldOrder) + + final IBean copyInstance = _createBeanPerDefaultConstructorAndSetDataSource(beanType) .orElse(_createBeanSneakyAndInjectEncapsulatedData(beanType, fieldOrder)); + return _setValues(pOriginal, copyInstance, pMode, pCustomCopies); } @@ -67,26 +68,25 @@ static > BEAN doCreateCopy(BEAN pOriginal, ECopyMode pM * @param pCustomCopies a collection of custom copy mechanisms for specific bean fields * @return a copy of the bean */ - static > BEAN doCreateCopy(BEAN pOriginal, ECopyMode pMode, UnaryOperator pCustomConstructorCall, - CustomFieldCopy... pCustomCopies) + static BEAN doCreateCopy(BEAN pOriginal, ECopyMode pMode, UnaryOperator pCustomConstructorCall, + CustomFieldCopy... pCustomCopies) { requestEncapsulatedData(pOriginal); //Check if the data core is present - return _setValues(pOriginal, pCustomConstructorCall.apply(pOriginal), pMode, pCustomCopies); + //noinspection unchecked + return (BEAN) _setValues(pOriginal, pCustomConstructorCall.apply(pOriginal), pMode, pCustomCopies); } /** * Tries to create the bean copy per default constructor call. * * @param pBeanType the bean type to copy - * @param the generic bean type * @return an optional instance of the copied bean */ - private static > Optional _createBeanPerDefaultConstructorAndSetDataSource(Class pBeanType, - List> pFieldOrder) + private static Optional _createBeanPerDefaultConstructorAndSetDataSource(Class pBeanType) { try { - final BEAN bean = pBeanType.getDeclaredConstructor().newInstance(); + final IBean bean = pBeanType.getDeclaredConstructor().newInstance(); return Optional.of(bean); } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException pE) @@ -101,12 +101,11 @@ private static > Optional _createBeanPerDefaultCo * * @param pBeanType the type of the bean to create * @param pFieldOrder the ordered fields of the bean - * @param the generic type of the bean * @return the created bean instance */ - private static > BEAN _createBeanSneakyAndInjectEncapsulatedData(Class pBeanType, List> pFieldOrder) + private static IBean _createBeanSneakyAndInjectEncapsulatedData(Class pBeanType, List> pFieldOrder) { - final BEAN bean = COPY_CREATOR.newInstance(pBeanType); + final IBean bean = COPY_CREATOR.newInstance(pBeanType); final IBeanDataSource dataSource = new MapBasedBeanDataSource(pFieldOrder); final EncapsulatedBeanData encapsulatedData = new EncapsulatedBeanData(dataSource, pFieldOrder); try @@ -133,15 +132,15 @@ private static > BEAN _createBeanSneakyAndInjectEncapsu * @param pCopy the copied bean * @param pMode the copy mode * @param pCustomCopies a collection of custom copy mechanisms for specific bean fields - * @param the type of the bean to set the values * @return the copy of the bean */ - private static > BEAN _setValues(BEAN pOriginal, BEAN pCopy, ECopyMode pMode, CustomFieldCopy[] pCustomCopies) + private static IBean _setValues(IBean pOriginal, IBean pCopy, ECopyMode pMode, CustomFieldCopy[] pCustomCopies) { final _BeanValueCopyCreator beanValueCopyCreator = new _BeanValueCopyCreator(pMode, pCustomCopies); //noinspection unchecked,RedundantCast requestEncapsulatedData(pOriginal).streamFields() .forEach(pField -> pCopy.setValue((IField) pField, beanValueCopyCreator.copyFieldValue((IField) pField, pOriginal.getValue(pField)))); + //If required set non bean values as well if (pMode.shouldCopyAllFields()) { @@ -160,6 +159,7 @@ private static > BEAN _setValues(BEAN pOriginal, BEAN p } }); } + return pCopy; } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanCreationEvents.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanCreationEvents.java index 68b0571..380ccf3 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanCreationEvents.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanCreationEvents.java @@ -22,7 +22,7 @@ */ public final class BeanCreationEvents { - private static final Map, PublishSubject>> PUBLISHERS_BY_TYPE = new ConcurrentHashMap<>(); + private static final Map, PublishSubject> PUBLISHERS_BY_TYPE = new ConcurrentHashMap<>(); private static final Map, PublishSubject>> PUBLISHERS_BY_ANNOTATION = new ConcurrentHashMap<>(); private BeanCreationEvents() @@ -35,7 +35,7 @@ private BeanCreationEvents() * @param pBeanType the bean's type to observe creations of * @param the generic runtime type of the bean */ - public static > Observable observeCreationByBeanType(Class pBeanType) + public static Observable observeCreationByBeanType(Class pBeanType) { _getObservableAnnotation(pBeanType); //check, if annotation is present //noinspection unchecked @@ -64,7 +64,7 @@ public static Observable pCreatedBean) + static void fireCreationIfAnnotationPresent(IBean pCreatedBean) { if (_observersPresent() && hasObservableAnnotation(pCreatedBean.getClass())) fireCreation(pCreatedBean); @@ -75,7 +75,7 @@ static void fireCreationIfAnnotationPresent(IBean pCreatedBean) * * @param pCreatedBean the created bean */ - static void fireCreation(IBean pCreatedBean) + static void fireCreation(IBean pCreatedBean) { if (!_observersPresent()) return; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanFieldAdder.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanFieldAdder.java index cddaa13..b444719 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanFieldAdder.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanFieldAdder.java @@ -7,22 +7,23 @@ import java.util.*; import java.util.function.*; +import static de.adito.ojcms.beans.BeanFieldFactory.createField; + /** * Utility to add bean fields. * - * @param the runtime type of the bean the field is for * @param the data type of the field to add * @param the runtime type of the field to add/create * @author Simon Danner, 25.12.2018 */ -public final class BeanFieldAdder, VALUE, FIELD extends IField> +public final class BeanFieldAdder> { private final ObjIntConsumer addFunction; private final IntSupplier fieldCountSupplier; private final Class beanFieldType; private final String fieldName; private final Collection annotations; - private Optional> activeCondition = Optional.empty(); + private BiPredicate activeCondition; private Class genericType; /** @@ -51,7 +52,7 @@ public final class BeanFieldAdder, VALUE, FIELD extends * @param pGenericType the generic type of the field to add * @return the bean field adder itself to enable a pipelining mechanism */ - public BeanFieldAdder withGenericType(Class pGenericType) + public BeanFieldAdder withGenericType(Class pGenericType) { genericType = pGenericType; return this; @@ -63,9 +64,9 @@ public BeanFieldAdder withGenericType(Class pGenericType) * @param pActiveCondition the condition to determine the active state of the field * @return the bean field adder itself to enable a pipelining mechanism */ - public BeanFieldAdder optionalField(BiPredicate pActiveCondition) + public BeanFieldAdder optionalField(BiPredicate pActiveCondition) { - activeCondition = Optional.of(pActiveCondition); + activeCondition = pActiveCondition; return this; } @@ -87,7 +88,7 @@ public FIELD addAtTheEnd() */ public FIELD addAtIndex(int pIndex) { - final FIELD field = BeanFieldFactory.createField(beanFieldType, () -> genericType, fieldName, false, annotations, activeCondition); + final FIELD field = createField(beanFieldType, () -> genericType, fieldName, false, annotations, activeCondition); addFunction.accept(field, pIndex); return field; } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanFieldFactory.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanFieldFactory.java index f6d5ff6..fd2459f 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanFieldFactory.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanFieldFactory.java @@ -4,6 +4,7 @@ import de.adito.ojcms.beans.exceptions.OJInternalException; import de.adito.ojcms.beans.literals.IAdditionalMemberInfo; import de.adito.ojcms.beans.literals.fields.IField; +import org.jetbrains.annotations.Nullable; import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -37,9 +38,9 @@ private BeanFieldFactory() * @param the generic field type * @return the newly created field */ - static , VALUE, FIELD extends IField> FIELD createField(Class pFieldType, String pName, - boolean pIsPrivate, Collection pAnnotations, - Optional> pActiveCondition) + static > FIELD createField(Class pFieldType, String pName, boolean pIsPrivate, + Collection pAnnotations, + @Nullable BiPredicate pActiveCondition) { return createField(pFieldType, () -> null, pName, pIsPrivate, pAnnotations, pActiveCondition); } @@ -56,36 +57,38 @@ static , VALUE, FIELD extends IField> FIELD crea * @param pIsPrivate determines if the field is declared privately * @param pAnnotations the field's annotations * @param pActiveCondition an optional condition for optional bean fields (determines the active state of the field) - * @param the generic type of the bean the field is for * @param the data type of the field to create * @param the generic field type * @return the newly created field */ - static , VALUE, FIELD extends IField> FIELD createField(Class pFieldType, - Supplier> pGenericTypeSupplier, - String pName, boolean pIsPrivate, - Collection pAnnotations, - Optional> pActiveCondition) + static > FIELD createField(Class pFieldType, Supplier> pGenericTypeSupplier, + String pName, boolean pIsPrivate, Collection pAnnotations, + @Nullable BiPredicate pActiveCondition) { try { final Optional> optionalGenericType = _getGenericType(pFieldType, pGenericTypeSupplier); - final boolean isOptional = pActiveCondition.isPresent(); + final boolean isOptional = pActiveCondition != null; //Constructor argument distinction between generic and non generic values (generic types provide their type additionally) final Class[] constructorArgumentTypes = optionalGenericType .map(pType -> new Class[]{Class.class, String.class, Collection.class, boolean.class, boolean.class}) .orElseGet(() -> new Class[]{String.class, Collection.class, boolean.class, boolean.class}); + final Object[] constructorArguments = optionalGenericType .map(pClass -> new Object[]{pClass, pName, pAnnotations, isOptional, pIsPrivate}) .orElseGet(() -> new Object[]{pName, pAnnotations, isOptional, pIsPrivate}); + //Create the field by using the reflected constructor final Constructor constructor = pFieldType.getDeclaredConstructor(constructorArgumentTypes); if (!constructor.isAccessible()) constructor.setAccessible(true); + final FIELD field = constructor.newInstance(constructorArguments); + //Add the optional condition as field info to determine the state of the field later on if (isOptional) - field.addAdditionalInformation(OPTIONAL_FIELD_INFO, pActiveCondition.get()); + field.addAdditionalInformation(OPTIONAL_FIELD_INFO, pActiveCondition); + return field; } catch (NoSuchMethodException | InstantiationException | InvocationTargetException | IllegalAccessException pE) diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanInternalEvents.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanInternalEvents.java index f54277d..2acc585 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanInternalEvents.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/BeanInternalEvents.java @@ -59,7 +59,7 @@ static > * @return the encapsulated data core of the bean * @throws BeanFieldDoesNotExistException if the bean field is not present */ - static IEncapsulatedBeanData requestEncapsulatedDataForField(IBean pBean, IField pField) + static IEncapsulatedBeanData requestEncapsulatedDataForField(IBean pBean, IField pField) { final IEncapsulatedBeanData encapsulatedBeanData = requestEncapsulatedData(pBean); if (!encapsulatedBeanData.containsField(requireNonNull(pField))) @@ -77,7 +77,7 @@ static IEncapsulatedBeanData requestEncapsulatedDataForField(IBean pBean, IFi * @throws BeanFieldDoesNotExistException if the bean field does not exist at the bean * @throws NullValueForbiddenException if a null value would have been returned, but the field is marked as {@link NeverNull} */ - static VALUE requestValue(IBean pBean, IField pField) + static VALUE requestValue(IBean pBean, IField pField) { final VALUE value = requestEncapsulatedDataForField(pBean, pField).getValue(pField); @@ -96,13 +96,12 @@ static VALUE requestValue(IBean pBean, IField pField) * @param pBean the bean from which a value has been changed * @param pField the bean field from which the value has been changed * @param pNewValue the new value to set - * @param the generic bean type * @param the data type of the bean field * @throws BeanFieldDoesNotExistException if the bean field does not exist at the bean * @throws NullValueForbiddenException if a null value would have been returned, but the field is marked as {@link NeverNull} */ @SuppressWarnings("unchecked") - static , VALUE> void setValueAndPropagate(BEAN pBean, IField pField, VALUE pNewValue) + static void setValueAndPropagate(IBean pBean, IField pField, VALUE pNewValue) { if (pNewValue == null && pField.mustNeverBeNull()) throw new NullValueForbiddenException(pField); @@ -113,7 +112,7 @@ static , VALUE> void setValueAndPropagate(BEAN pBean, I throw new FieldIsFinalException(pField); //We have to check the states of the optional fields and then change the value with a following propagation of the change - final IBeanFieldActivePredicate fieldActiveSupplier = pBean.getFieldActivePredicate(); + final IBeanFieldActivePredicate fieldActiveSupplier = pBean.getFieldActivePredicate(); //Store before active optional fields to detect differences later on final List> optionalActiveFields = encapsulatedData.streamFields() .filter(pBeanField -> pBeanField.isOptional() && fieldActiveSupplier.isOptionalActive(pBeanField)) @@ -170,7 +169,7 @@ static , VALUE> void setValueAndPropagate(BEAN pBean, I * @param pBean the added bean * @param the generic type of the bean */ - static > void beanAdded(IBeanContainer pContainer, BEAN pBean) + static void beanAdded(IBeanContainer pContainer, BEAN pBean) { //Pass the references of the container to the beans as well final IEncapsulatedBeanData beanEncapsulated = requestEncapsulatedData(pBean); @@ -189,7 +188,7 @@ static > void beanAdded(IBeanContainer pContainer * @param pBean the removed bean * @param the generic type of the bean */ - static > void beanRemoved(IBeanContainer pContainer, BEAN pBean) + static void beanRemoved(IBeanContainer pContainer, BEAN pBean) { //Remove the references from the bean, which were created through the container final IEncapsulatedBeanData beanEncapsulated = requestEncapsulatedData(pBean); @@ -210,8 +209,8 @@ static > void beanRemoved(IBeanContainer pContain * @param the type of the beans in the container * @return the optionally removed bean */ - static > Optional removeFromContainer(IBeanContainer pContainer, - Function, BEAN> pDeleteFunction) + static Optional removeFromContainer(IBeanContainer pContainer, + Function, BEAN> pDeleteFunction) { final BEAN removedBean = pDeleteFunction.apply(requestEncapsulatedData(pContainer)); if (removedBean != null) @@ -230,7 +229,7 @@ static > Optional removeFromContainer(IBeanContai * @param the type of the beans in the container * @return true if at least one bean has been removed */ - static > boolean doRemoveBeanIf(IBeanContainer pContainer, Predicate pPredicate, boolean pBreak) + static boolean doRemoveBeanIf(IBeanContainer pContainer, Predicate pPredicate, boolean pBreak) { final Iterator it = requestEncapsulatedData(pContainer).iterator(); boolean removed = false; @@ -259,19 +258,6 @@ static void propagateChange(AbstractChangeEvent pEvent) pEvent.publishEventToSource(); } - /** - * Helper to use a bean in its runtime type. - * - * @param pBean the bean to cast - * @param the runtime type of the bean - * @return the bean in its runtime type - */ - static > BEAN toRuntimeBean(IBean pBean) - { - //noinspection unchecked - return (BEAN) pBean; - } - /** * Tries to add a statistic entry for a bean container. * This method should be called, if a bean has been added or removed. @@ -279,7 +265,7 @@ static > BEAN toRuntimeBean(IBean pBean) * @param pContainer the container, for which an entry may be added * @param the type of the beans in the container */ - private static > void _tryAddStatisticEntry(IBeanContainer pContainer) + private static void _tryAddStatisticEntry(IBeanContainer pContainer) { pContainer.getStatisticData().ifPresent(pData -> pData.addEntry(pContainer.size())); } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/EncapsulatedBeanContainerData.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/EncapsulatedBeanContainerData.java index 646ef19..8bc0070 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/EncapsulatedBeanContainerData.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/EncapsulatedBeanContainerData.java @@ -22,7 +22,7 @@ * @author Simon Danner, 08.12.2018 */ @EncapsulatedData -class EncapsulatedBeanContainerData> extends AbstractEncapsulatedData> +class EncapsulatedBeanContainerData extends AbstractEncapsulatedData> implements IEncapsulatedBeanContainerData { private final Class beanType; @@ -177,11 +177,11 @@ private Optional> _tryCreateStatisticData() */ private BEAN _observeBean(BEAN pBean) { - final Observable> combinedObservables = Observable.concat(pBean.observeValues(), pBean.observeFieldAdditions(), - pBean.observeFieldRemovals()); + final Observable> combinedObservables = Observable.concat(pBean.observeValues(), pBean.observeFieldAdditions(), + pBean.observeFieldRemovals()); //noinspection unchecked final Disposable disposable = combinedObservables - .subscribe(pChangeEvent -> getEventObserverFromType((Class>) pChangeEvent.getClass()).onNext(pChangeEvent)); + .subscribe(pChangeEvent -> getEventObserverFromType((Class>) pChangeEvent.getClass()).onNext(pChangeEvent)); beanDisposableMapping.put(pBean, disposable); return pBean; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBean.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBean.java index 9421193..7556e52 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBean.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBean.java @@ -11,7 +11,6 @@ import de.adito.ojcms.beans.statistics.IStatisticData; import de.adito.ojcms.beans.util.ECopyMode; import de.adito.ojcms.utils.StringUtility; -import de.adito.ojcms.utils.readonly.*; import org.jetbrains.annotations.*; import java.util.*; @@ -38,12 +37,10 @@ * This might seem like a solution to the not available multi inheritance in Java, but only the base interface type * is transferred to the extending class. Methods and static field definitions stay at the concrete bean type. * - * @param the concrete runtime type of the bean * @author Simon Danner, 23.08.2016 */ @RequiresEncapsulatedAccess -public interface IBean> - extends IBeanEventPublisher, BEAN, IBeanDataSource, IEncapsulatedBeanData>, IReferenceProvider +public interface IBean extends IBeanEventPublisher, IBeanDataSource, IEncapsulatedBeanData>, IReferenceProvider { /** * The value for a bean field. @@ -110,10 +107,9 @@ default TARGET getValueConverted(IField pField, Class void setValue(IField pField, VALUE pValue) { - setValueAndPropagate(toRuntimeBean(this), pField, pValue); + setValueAndPropagate(this, pField, pValue); } /** @@ -131,7 +127,6 @@ default void setValue(IField pField, VALUE pValue) * @throws NullValueForbiddenException if a null value would have been returned, but the field is marked as {@link NeverNull} * @throws ValueConversionUnsupportedException if the conversion is not possible */ - @WriteOperation @SuppressWarnings("unchecked") default void setValueConverted(IField pField, SOURCE pValueToConvert) { @@ -151,7 +146,6 @@ default void setValueConverted(IField pField, SOURCE pVal * Clears the values of all public field's of this bean back to the initial value of every field. * The clear operation ignores final fields and fields with a null initial value and annotated by {@link NeverNull}. */ - @WriteOperation default void clear() { //noinspection unchecked,rawtypes @@ -167,9 +161,9 @@ default void clear() * * @see IBeanFieldActivePredicate */ - default IBeanFieldActivePredicate getFieldActivePredicate() + default IBeanFieldActivePredicate getFieldActivePredicate() { - return () -> toRuntimeBean(this); + return () -> this; } /** @@ -240,9 +234,10 @@ default IField getFieldByName(String pFieldName) * @param pCustomFieldCopies a collection of custom copy mechanisms for specific bean fields * @return a copy of this bean */ - default BEAN createCopy(ECopyMode pMode, CustomFieldCopy... pCustomFieldCopies) + default BEAN createCopy(ECopyMode pMode, CustomFieldCopy... pCustomFieldCopies) { - return doCreateCopy(toRuntimeBean(this), pMode, pCustomFieldCopies); + //noinspection unchecked + return (BEAN) doCreateCopy(this, pMode, pCustomFieldCopies); } /** @@ -256,9 +251,10 @@ default BEAN createCopy(ECopyMode pMode, CustomFieldCopy... pCustomFieldCopie * @param pCustomFieldCopies a collection of custom copy mechanisms for specific bean fields * @return a copy of this bean */ - default BEAN createCopy(ECopyMode pMode, UnaryOperator pCustomConstructorCall, CustomFieldCopy... pCustomFieldCopies) + default BEAN createCopy(ECopyMode pMode, UnaryOperator pCustomConstructorCall, CustomFieldCopy... pCustomFieldCopies) { - return doCreateCopy(toRuntimeBean(this), pMode, pCustomConstructorCall, pCustomFieldCopies); + //noinspection unchecked + return doCreateCopy((BEAN) this, pMode, pCustomConstructorCall, pCustomFieldCopies); } /** @@ -297,7 +293,7 @@ default Set> getIdentifiers() * @return the deep bean within this bean's children */ @NotNull - default IBean resolveDeepBean(IField... pChain) + default IBean resolveDeepBean(IField... pChain) { return resolveDeepBean(Arrays.asList(pChain)); } @@ -310,9 +306,9 @@ default IBean resolveDeepBean(IField... pChain) * @return the deep bean within this bean's children */ @NotNull - default IBean resolveDeepBean(List> pChain) + default IBean resolveDeepBean(List> pChain) { - IBean current = this; + IBean current = this; for (IField field : requireNonNull(pChain)) { if (!current.hasField(field)) @@ -320,7 +316,7 @@ default IBean resolveDeepBean(List> pChain) final Object value = current.getValue(field); if (!(value instanceof IBean)) throw new InvalidChainException(field); - current = (IBean) value; + current = (IBean) value; } return current; @@ -353,24 +349,12 @@ default VALUE resolveDeepValue(IField pDeepField, IField... pC @Nullable default VALUE resolveDeepValue(IField pDeepField, List> pChain) { - final IBean deepBean = resolveDeepBean(pChain); + final IBean deepBean = resolveDeepBean(pChain); if (!deepBean.hasField(pDeepField)) throw new InvalidChainException(deepBean, pDeepField); return deepBean.getValue(pDeepField); } - /** - * This bean as a read only version. - * This will be a new instance, but the data core stays the same. - * - * @return this bean as a read only version - */ - default IBean asReadOnly() - { - //noinspection unchecked - return ReadOnlyInvocationHandler.createReadOnlyInstance(IBean.class, this); - } - /** * Converts this bean to a map containing its values mapped by bean fields. * @@ -415,11 +399,11 @@ default Stream> stream() * * @return the bean itself */ - @WriteOperation - default BEAN useDefaultEncapsulatedDataSource() + default BEAN useDefaultEncapsulatedDataSource() { setEncapsulatedDataSource(new MapBasedBeanDataSource(this)); - return toRuntimeBean(this); + //noinspection unchecked + return (BEAN) this; } @Override diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanContainer.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanContainer.java index fa6e4dd..998a3f6 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanContainer.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanContainer.java @@ -46,8 +46,8 @@ * @author Simon Danner, 23.08.2016 */ @RequiresEncapsulatedAccess -public interface IBeanContainer> - extends IBeanEventPublisher, IEncapsulatedBeanContainerData>, IReferenceProvider +public interface IBeanContainer + extends IBeanEventPublisher, IEncapsulatedBeanContainerData>, IReferenceProvider { /** * Creates an empty bean container. @@ -56,7 +56,7 @@ public interface IBeanContainer> * @param the generic type of the beans in the container * @return an empty bean container */ - static > IBeanContainer empty(Class pBeanType) + static IBeanContainer empty(Class pBeanType) { return new BeanContainer<>(pBeanType); } @@ -68,7 +68,7 @@ static > IBeanContainer empty(Class pBeanTy * @param the generic type of the beans in the container * @return a new bean container with one initial bean */ - static > IBeanContainer ofSingleBean(BEAN pBean) + static IBeanContainer ofSingleBean(BEAN pBean) { return ofVariableNotEmpty(pBean); } @@ -81,7 +81,7 @@ static > IBeanContainer ofSingleBean(BEAN pBean) * @param the generic type of the beans in the container * @return a new bean container with multiple initial beans */ - static > IBeanContainer ofStreamNotEmpty(Stream pBeans) + static IBeanContainer ofStreamNotEmpty(Stream pBeans) { return ofIterableNotEmpty(pBeans.collect(Collectors.toList())); } @@ -95,7 +95,7 @@ static > IBeanContainer ofStreamNotEmpty(Stream the generic type of the beans in the container * @return a new bean container with multiple initial beans */ - static > IBeanContainer ofStream(Class pBeanType, Stream pBeans) + static IBeanContainer ofStream(Class pBeanType, Stream pBeans) { final IBeanContainer container = empty(pBeanType); container.addMultiple(pBeans); @@ -111,7 +111,7 @@ static > IBeanContainer ofStream(Class pBea * @return a new bean container with multiple initial beans */ @SafeVarargs - static > IBeanContainer ofVariableNotEmpty(BEAN... pBeans) + static IBeanContainer ofVariableNotEmpty(BEAN... pBeans) { if (pBeans.length == 0) throw new OJRuntimeException("Unable to infer bean type! Empty varargs argument not allowed here!"); @@ -129,7 +129,7 @@ static > IBeanContainer ofVariableNotEmpty(BEAN.. * @return a new bean container with multiple initial beans */ @SafeVarargs - static > IBeanContainer ofVariable(Class pBeanType, BEAN... pBeans) + static IBeanContainer ofVariable(Class pBeanType, BEAN... pBeans) { return ofIterable(pBeanType, Arrays.asList(pBeans)); } @@ -142,7 +142,7 @@ static > IBeanContainer ofVariable(Class pB * @param the generic type of the beans in the container * @return a new bean container with multiple initial beans */ - static > IBeanContainer ofIterableNotEmpty(Iterable pBeans) + static IBeanContainer ofIterableNotEmpty(Iterable pBeans) { final Iterator it = pBeans.iterator(); if (!it.hasNext()) @@ -161,7 +161,7 @@ static > IBeanContainer ofIterableNotEmpty(Iterab * @param the generic type of the beans in the container * @return a new bean container with multiple initial beans */ - static > IBeanContainer ofIterable(Class pBeanType, Iterable pBeans) + static IBeanContainer ofIterable(Class pBeanType, Iterable pBeans) { return new BeanContainer<>(pBeanType, pBeans); } @@ -175,8 +175,8 @@ static > IBeanContainer ofIterable(Class pB * @param the generic bean type of the container * @return an bean container with the custom data source */ - static > IBeanContainer withCustomDataSource(Class pBeanType, - IBeanContainerDataSource pDataSource) + static IBeanContainer withCustomDataSource(Class pBeanType, + IBeanContainerDataSource pDataSource) { return new BeanContainer<>(pBeanType, pDataSource); } @@ -618,7 +618,7 @@ default Set getDirectReferences() * @param the type of the beans in the container */ @SuppressWarnings("squid:S2160") - final class BeanContainerListProxy> extends AbstractList + final class BeanContainerListProxy extends AbstractList { private final IBeanContainer container; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanEventPublisher.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanEventPublisher.java index 68a8d32..7fa81b0 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanEventPublisher.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanEventPublisher.java @@ -15,12 +15,11 @@ * A type implementing this interface must hold an {@link IEncapsulatedData} data core which acts as an internal {@link IEventPublisher}. * * @param the type of the elements in the encapsulated data core - * @param the type of the observed beans * @param the type of the encapsulated data core held by the type implementing this interface * @author Simon Danner, 07.12.2018 */ @EncapsulatedData -interface IBeanEventPublisher, DATASOURCE extends IDataSource, +interface IBeanEventPublisher> extends IEncapsulatedDataHolder { /** @@ -28,11 +27,10 @@ interface IBeanEventPublisher, DATASOURCE exte * * @return an observable that publishes {@link BeanValueChange} events */ - default Observable> observeValues() + default Observable> observeValues() { - //noinspection unchecked return requestEncapsulatedData(this).observeByType(BeanValueChange.class) - .map(pChange -> (BeanValueChange) pChange); + .map(pChange -> (BeanValueChange) pChange); } /** @@ -40,13 +38,13 @@ interface IBeanEventPublisher, DATASOURCE exte * * @return an observable that publishes {@link BeanValueChange} events of the specific field */ - default Observable> observeFieldValue(IField pField) + default Observable> observeFieldValue(IField pField) { Objects.requireNonNull(pField); //noinspection unchecked return observeValues() .filter(pChange -> pChange.getField() == pField) - .map(pChange -> (BeanValueChange) pChange); + .map(pChange -> (BeanValueChange) pChange); } /** @@ -54,11 +52,10 @@ default Observable> observeFieldValue(IFiel * * @return an observable that publishes {@link BeanFieldAddition} events */ - default Observable> observeFieldAdditions() + default Observable> observeFieldAdditions() { - //noinspection unchecked return requestEncapsulatedData(this).observeByType(BeanFieldAddition.class) - .map(pChange -> (BeanFieldAddition) pChange); + .map(pChange -> (BeanFieldAddition) pChange); } /** @@ -66,10 +63,9 @@ default Observable> observeFieldValue(IFiel * * @return an observable that publishes {@link BeanFieldRemoval} events */ - default Observable> observeFieldRemovals() + default Observable> observeFieldRemovals() { - //noinspection unchecked return requestEncapsulatedData(this).observeByType(BeanFieldRemoval.class) - .map(pChange -> (BeanFieldRemoval) pChange); + .map(pChange -> (BeanFieldRemoval) pChange); } } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanFieldActivePredicate.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanFieldActivePredicate.java index 509b643..8ef4114 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanFieldActivePredicate.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IBeanFieldActivePredicate.java @@ -12,17 +12,16 @@ * This leads to a very comfortable way to use this interface, especially if implemented as lambda expression. * For example, the bean interface may simply implement this interface as the following: "return () -> (BEAN) this;" * - * @param the runtime type of the bean this field active condition is for * @author Simon Danner, 18.08.2017 */ -interface IBeanFieldActivePredicate> +interface IBeanFieldActivePredicate { /** * The bean for which the active status of a certain field should be checked. * * @return the bean to check */ - BEAN getBean(); + IBean getBean(); /** * Determines, if an optional bean field is active at this moment. @@ -38,9 +37,9 @@ default boolean isOptionalActive(IField pField) return true; //noinspection unchecked - final BiPredicate condition = pField.getAdditionalInformationOrThrow(BeanFieldFactory.OPTIONAL_FIELD_INFO); + final BiPredicate condition = pField.getAdditionalInformationOrThrow(BeanFieldFactory.OPTIONAL_FIELD_INFO); assert condition != null; - final BEAN bean = getBean(); + final IBean bean = getBean(); return condition.test(bean, bean.getValue(pField)); } } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IEncapsulatedBeanContainerData.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IEncapsulatedBeanContainerData.java index 4b02dda..be70a09 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IEncapsulatedBeanContainerData.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IEncapsulatedBeanContainerData.java @@ -14,7 +14,7 @@ * @author Simon Danner, 25.01.2017 */ @EncapsulatedData -interface IEncapsulatedBeanContainerData> extends IEncapsulatedData> +interface IEncapsulatedBeanContainerData extends IEncapsulatedData> { /** * The type of the beans in this data core. diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IMapBean.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IMapBean.java index b2588d6..6583c90 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IMapBean.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IMapBean.java @@ -16,7 +16,7 @@ * @param the map's value type * @author Simon Danner, 22.12.2018 */ -public interface IMapBean extends Map, IBean> +public interface IMapBean extends Map, IBean { /** * Creates a new map bean from an existing map. diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IModifiableBean.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IModifiableBean.java index e397f56..fcb2799 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IModifiableBean.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IModifiableBean.java @@ -16,11 +16,10 @@ * A modifiable bean with dynamical fields. * Allows the extension and removal of bean fields. * - * @param the runtime type of the concrete bean * @author Simon Danner, 01.02.2017 */ @RequiresEncapsulatedAccess -public interface IModifiableBean> extends IBean +public interface IModifiableBean extends IBean { /** * Extends this bean by one field. @@ -33,8 +32,8 @@ public interface IModifiableBean> extends IBe * @param the runtime type of the field to add/create * @return the created field instance */ - default > BeanFieldAdder fieldAdder(Class pFieldType, String pName, - Collection pAnnotations) + default > BeanFieldAdder fieldAdder(Class pFieldType, String pName, + Collection pAnnotations) { final IEncapsulatedBeanData encapsulated = requestEncapsulatedData(this); if (encapsulated.streamFields().anyMatch(pField -> pField.getName().equals(pName))) @@ -63,12 +62,13 @@ default void addField(IField pField) default void addFieldAtIndex(IField pField, int pIndex) { final IEncapsulatedBeanData encapsulated = requestEncapsulatedData(this); + if (encapsulated.containsField(pField)) throw new BeanFieldDuplicateException(pField.getName()); encapsulated.addField(pField, pIndex); + if (getFieldActivePredicate().isOptionalActive(pField)) - //noinspection unchecked - propagateChange(new BeanFieldAddition<>((BEAN) this, pField)); + propagateChange(new BeanFieldAddition<>(this, pField)); } /** @@ -82,9 +82,9 @@ default VALUE removeField(IField pField) { final IEncapsulatedBeanData encapsulated = requestEncapsulatedDataForField(this, pField); final VALUE oldValue = encapsulated.getValue(pField); + encapsulated.removeField(pField); - //noinspection unchecked - propagateChange(new BeanFieldRemoval<>((BEAN) this, pField, oldValue)); + propagateChange(new BeanFieldRemoval<>(this, pField, oldValue)); return oldValue; } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IReferable.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IReferable.java index 4b44456..dd6be55 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/IReferable.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/IReferable.java @@ -18,7 +18,7 @@ interface IReferable extends IReferenceProvider * @param pBean the bean holding the reference * @param pField the bean field holding reference */ - void addWeakReference(IBean pBean, IField pField); + void addWeakReference(IBean pBean, IField pField); /** * Removes a reference from this bean element. @@ -26,5 +26,5 @@ interface IReferable extends IReferenceProvider * @param pBean the bean that held the reference * @param pField the bean field that held the reference */ - void removeReference(IBean pBean, IField pField); + void removeReference(IBean pBean, IField pField); } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/MapBean.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/MapBean.java index 3dd7d15..ea58574 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/MapBean.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/MapBean.java @@ -137,8 +137,8 @@ private IField _createField(KEY pKey) .orElseGet(() -> { //noinspection unchecked,RedundantCast - final IField field = BeanFieldFactory.createField((Class) fieldType, genericFieldTypeSupplier, Objects.toString(pKey), - false, annotationsForField, Optional.empty()); + final IField field = BeanFieldFactory.createField((Class) fieldType, genericFieldTypeSupplier, + Objects.toString(pKey), false, annotationsForField, null); fieldCacheCallback.accept(pKey, field); return field; }); @@ -189,7 +189,7 @@ public boolean equals(Object pObject) public int hashCode() { final FieldValueTuple[] tuples = encapsulated.stream().toArray(FieldValueTuple[]::new); - return Objects.hash(tuples); + return Arrays.hashCode(tuples); } /** diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/OJBean.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/OJBean.java index 36362bb..4cf2c04 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/OJBean.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/OJBean.java @@ -31,12 +31,11 @@ * This bean has implementations for {@link #equals(Object)} and {@link #hashCode()}. * They include all fields marked as {@link de.adito.ojcms.beans.annotations.Identifier}. * - * @param the runtime type of this bean * @author Simon Danner, 23.08.2016 * @see BeanFieldFactory */ @RequiresEncapsulatedAccess -public abstract class OJBean> implements IBean +public abstract class OJBean implements IBean { static final String ENCAPSULATED_DATA_FIELD_NAME = "encapsulatedData"; private final IEncapsulatedBeanData encapsulatedData; @@ -112,7 +111,6 @@ public String toString() .collect(Collectors.joining(", ")) + "}"; } - @SuppressWarnings("unchecked") @Override public boolean equals(Object pOther) { @@ -124,7 +122,7 @@ public boolean equals(Object pOther) if (identifiers.isEmpty()) return false; - final OJBean other = (OJBean) pOther; + final OJBean other = (OJBean) pOther; return identifiers.stream() .allMatch(pIdentifier -> Objects.equals(pIdentifier.getValue(), other.getValue(pIdentifier.getField()))); } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/OJFields.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/OJFields.java index a613b86..55b9bfe 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/OJFields.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/OJFields.java @@ -5,6 +5,7 @@ import de.adito.ojcms.beans.exceptions.field.BeanFieldCreationException; import de.adito.ojcms.beans.literals.fields.IField; import de.adito.ojcms.beans.util.BeanReflector; +import org.jetbrains.annotations.Nullable; import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -31,15 +32,13 @@ private OJFields() * This method takes care about the whole initialization of the fields. (name, type, annotations, etc.) * * @param pBeanType the bean type to which the created field should belong to - * @param the generic type of the bean the field is for - * (is here based on {@link OJBean} rather than on the interface, so it can not be a transformed bean type) * @param the data type of the field to create * @param the generic type of the field that will be created * @return the newly created field instance */ - public static , VALUE, FIELD extends IField> FIELD create(Class pBeanType) + public static > FIELD create(Class pBeanType) { - return _createField(pBeanType, Optional.empty()); + return _createField(pBeanType, null); } /** @@ -58,10 +57,10 @@ public static , VALUE, FIELD extends IField> FIELD * @param the generic type of the field that will be created * @return the newly created field instance */ - public static , VALUE, FIELD extends IField> FIELD createOptional(Class pBeanType, - BiPredicate pActiveCondition) + public static > FIELD createOptional(Class pBeanType, + @Nullable BiPredicate pActiveCondition) { - return _createField(pBeanType, Optional.of(pActiveCondition)); + return _createField(pBeanType, pActiveCondition); } /** @@ -69,14 +68,12 @@ public static , VALUE, FIELD extends IField> FIELD * * @param pBeanType the bean type to which the created field should belong to * @param pActiveCondition an optional active condition determining the active state of the bean field - * @param the generic type of the bean the field is for - * (is here based on {@link OJBean} rather than on the interface, so it can not be a transformed bean type) * @param the data type of the field to create * @param the generic type of the field that will be created * @return the newly created field instance */ - private static , VALUE, FIELD extends IField> FIELD _createField(Class pBeanType, - Optional> pActiveCondition) + private static > FIELD _createField(Class pBeanType, + @Nullable BiPredicate pActiveCondition) { final Field declaredFieldToCreate = BeanReflector.reflectDeclaredBeanFields(pBeanType).stream() .filter(pField -> { diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/IBeanContainerDataSource.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/IBeanContainerDataSource.java index e49d435..fbc7f7f 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/IBeanContainerDataSource.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/IBeanContainerDataSource.java @@ -11,7 +11,7 @@ * @param the type of the beans of this data source * @author Simon Danner, 08.12.2018 */ -public interface IBeanContainerDataSource> extends IDataSource, Iterable +public interface IBeanContainerDataSource extends IDataSource, Iterable { /** * Adds a bean at a certain index. diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/ListBasedBeanContainerDataSource.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/ListBasedBeanContainerDataSource.java index 653811e..e430184 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/ListBasedBeanContainerDataSource.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/ListBasedBeanContainerDataSource.java @@ -13,7 +13,7 @@ * @param the type of the beans in the data source * @author Simon Danner, 08.12.2018 */ -public final class ListBasedBeanContainerDataSource> implements IBeanContainerDataSource +public final class ListBasedBeanContainerDataSource implements IBeanContainerDataSource { private final List beanList; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/MapBasedBeanDataSource.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/MapBasedBeanDataSource.java index 0a83b3e..c7fea24 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/MapBasedBeanDataSource.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/datasource/MapBasedBeanDataSource.java @@ -35,11 +35,10 @@ public MapBasedBeanDataSource(List> pFields) * * @param pBean the bean to take the initial fields and values from */ - public MapBasedBeanDataSource(IBean pBean) + public MapBasedBeanDataSource(IBean pBean) { - values = pBean.stream() - .collect(toMap(FieldValueTuple::getField, - pTuple -> pTuple.getValue() == null ? pTuple.getField().getInitialValue() : pTuple.getValue())); + values = pBean.stream().collect(toMap(FieldValueTuple::getField, + pTuple -> pTuple.getValue() == null ? pTuple.getField().getInitialValue() : pTuple.getValue())); } @Override diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/exceptions/bean/InvalidChainException.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/exceptions/bean/InvalidChainException.java index 2812571..83fa0ad 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/exceptions/bean/InvalidChainException.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/exceptions/bean/InvalidChainException.java @@ -20,7 +20,7 @@ public class InvalidChainException extends OJRuntimeException * @param pParentBean the parent bean not containing the specific field * @param pNotPresentField the missing bean field */ - public InvalidChainException(IBean pParentBean, IField pNotPresentField) + public InvalidChainException(IBean pParentBean, IField pNotPresentField) { this("The parent bean " + pParentBean + " does not contain a field " + pNotPresentField.getName() + "!"); } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/exceptions/field/BeanFieldDoesNotExistException.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/exceptions/field/BeanFieldDoesNotExistException.java index bda1254..c0d9d3e 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/exceptions/field/BeanFieldDoesNotExistException.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/exceptions/field/BeanFieldDoesNotExistException.java @@ -17,7 +17,7 @@ public class BeanFieldDoesNotExistException extends OJRuntimeException * @param pBean the bean missing the field * @param pField the missing field */ - public BeanFieldDoesNotExistException(IBean pBean, IField pField) + public BeanFieldDoesNotExistException(IBean pBean, IField pField) { super("Missing bean field: bean-type: " + pBean.getClass().getSimpleName() + " field: " + pField.getName() + ". Consider field filters!"); } @@ -38,7 +38,7 @@ public BeanFieldDoesNotExistException(IField pField) * @param pBean the bean missing the field * @param pFieldName the missing field's name */ - public BeanFieldDoesNotExistException(IBean pBean, String pFieldName) + public BeanFieldDoesNotExistException(IBean pBean, String pFieldName) { super("A bean field with the name '" + pFieldName + "' is not existing at bean type " + pBean.getClass().getName()); } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/BeanField.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/BeanField.java index b11d166..bd619bb 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/BeanField.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/BeanField.java @@ -19,7 +19,7 @@ @TypeDefaultField(types = IBean.class) @ReferenceField(resolverType = EReferableResolver.SINGLE) @GenericBeanField -public class BeanField> extends AbstractField +public class BeanField extends AbstractField { protected BeanField(Class pType, @NotNull String pName, Collection pAnnotations, boolean pIsOptional, boolean pIsPrivate) diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/ContainerField.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/ContainerField.java index dcff260..49f5db6 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/ContainerField.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/ContainerField.java @@ -20,7 +20,7 @@ @TypeDefaultField(types = IBeanContainer.class) @ReferenceField(resolverType = EReferableResolver.MULTI) @GenericBeanField(genericWrapperType = IBeanContainer.class) -public class ContainerField> extends AbstractField> +public class ContainerField extends AbstractField> { protected ContainerField(Class> pType, @NotNull String pName, Collection pAnnotations, boolean pIsOptional, boolean pIsPrivate) diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/MapField.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/MapField.java index 636cf67..92520ab 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/MapField.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/literals/fields/types/MapField.java @@ -55,7 +55,7 @@ public IMapBean createBeanFromMap(Map pMap, Class * @param pBean the bean that this field belongs to * @return the original map that was represented by the bean (new instance of the map) */ - public Map createMapFromBean(IBean pBean) + public Map createMapFromBean(IBean pBean) { return new LinkedHashMap<>(pBean.getValue(this)); } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/AbstractContainerChangeEvent.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/AbstractContainerChangeEvent.java index 660c2df..1bbdb7b 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/AbstractContainerChangeEvent.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/AbstractContainerChangeEvent.java @@ -9,7 +9,7 @@ * @param the actual runtime type of this event * @author Simon Danner, 18.11.2018 */ -public abstract class AbstractContainerChangeEvent, EVENT extends AbstractContainerChangeEvent> +public abstract class AbstractContainerChangeEvent> extends AbstractChangeEvent, EVENT> { private final BEAN bean; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/AbstractFieldBasedChangeEvent.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/AbstractFieldBasedChangeEvent.java index 9ed7628..87567f4 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/AbstractFieldBasedChangeEvent.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/AbstractFieldBasedChangeEvent.java @@ -6,13 +6,12 @@ /** * An abstract change event that is based on a bean and an associated field. * - * @param the type of the changed bean * @param the value type of the field that is associated with the field * @param the actual runtime type of this event * @author Simon Danner, 18.11.2018 */ -public abstract class AbstractFieldBasedChangeEvent, VALUE, EVENT extends AbstractFieldBasedChangeEvent> - extends AbstractChangeEvent +public abstract class AbstractFieldBasedChangeEvent> + extends AbstractChangeEvent { private final IField field; @@ -22,7 +21,7 @@ public abstract class AbstractFieldBasedChangeEvent, VA * @param pSource the bean that is the source which triggered this event * @param pField the field associated with the change */ - protected AbstractFieldBasedChangeEvent(BEAN pSource, IField pField) + protected AbstractFieldBasedChangeEvent(IBean pSource, IField pField) { super(pSource); field = pField; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanContainerAddition.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanContainerAddition.java index 1b2c848..71375af 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanContainerAddition.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanContainerAddition.java @@ -9,7 +9,7 @@ * @param the type of the added bean * @author Simon Danner, 22.11.2018 */ -public final class BeanContainerAddition> extends AbstractContainerChangeEvent> +public final class BeanContainerAddition extends AbstractContainerChangeEvent> { /** * Creates the addition event. diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanContainerRemoval.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanContainerRemoval.java index ef5c646..8e9e26d 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanContainerRemoval.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanContainerRemoval.java @@ -9,7 +9,7 @@ * @param the type of the removed bean * @author Simon Danner, 22.11.2018 */ -public final class BeanContainerRemoval> extends AbstractContainerChangeEvent> +public final class BeanContainerRemoval extends AbstractContainerChangeEvent> { /** * Creates the removal event. diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanCreationEvent.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanCreationEvent.java index 040f6c1..a9a5850 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanCreationEvent.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanCreationEvent.java @@ -1,6 +1,7 @@ package de.adito.ojcms.beans.reactive.events; import de.adito.ojcms.beans.*; +import de.adito.ojcms.beans.annotations.ObserveCreation; import java.lang.annotation.Annotation; @@ -14,16 +15,16 @@ */ public class BeanCreationEvent { - private final IBean createdBean; + private final IBean createdBean; private final ANNOTATION annotation; /** * Creates a new creation event. * * @param pCreatedBean the created bean instance - * @param pAnnotation the creation observer annotation of the bean type, see {@link de.adito.ojcms.beans.annotations.ObserveCreation} + * @param pAnnotation the creation observer annotation of the bean type, see {@link ObserveCreation} */ - public BeanCreationEvent(IBean pCreatedBean, ANNOTATION pAnnotation) + public BeanCreationEvent(IBean pCreatedBean, ANNOTATION pAnnotation) { createdBean = pCreatedBean; annotation = pAnnotation; @@ -34,7 +35,7 @@ public BeanCreationEvent(IBean pCreatedBean, ANNOTATION pAnnotation) * * @return a bean instance */ - public IBean getCreatedBean() + public IBean getCreatedBean() { return createdBean; } @@ -42,7 +43,7 @@ public IBean getCreatedBean() /** * The annotation instance that led to the observation. * - * @return an annotation instance based on {@link de.adito.ojcms.beans.annotations.ObserveCreation}. + * @return an annotation instance based on {@link ObserveCreation}. */ public ANNOTATION getCreationAnnotation() { diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanFieldAddition.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanFieldAddition.java index 0ff9fb9..b959b51 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanFieldAddition.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanFieldAddition.java @@ -7,12 +7,10 @@ /** * A field has been added to a bean. * - * @param the type of the bean the field has been added to * @param the value type of the added field * @author Simon Danner, 18.11.2018 */ -public final class BeanFieldAddition, VALUE> extends AbstractFieldBasedChangeEvent> +public final class BeanFieldAddition extends AbstractFieldBasedChangeEvent> { /** * Creates the field addition event. @@ -20,7 +18,7 @@ public final class BeanFieldAddition, VALUE> extends Ab * @param pSource the bean the field has been added to * @param pField the added field */ - public BeanFieldAddition(BEAN pSource, IField pField) + public BeanFieldAddition(IBean pSource, IField pField) { super(pSource, pField); } diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanFieldRemoval.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanFieldRemoval.java index b9db268..fb7e7b3 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanFieldRemoval.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanFieldRemoval.java @@ -7,12 +7,10 @@ /** * A field has been removed from a bean. * - * @param the type of the bean the field has been removed from * @param the value type of the removed field * @author Simon Danner, 18.11.2018 */ -public final class BeanFieldRemoval, VALUE> - extends AbstractFieldBasedChangeEvent> +public final class BeanFieldRemoval extends AbstractFieldBasedChangeEvent> { private final VALUE fieldValue; @@ -23,7 +21,7 @@ public final class BeanFieldRemoval, VALUE> * @param pField the removed field * @param pFieldValue the value of the removed field */ - public BeanFieldRemoval(BEAN pSource, IField pField, VALUE pFieldValue) + public BeanFieldRemoval(IBean pSource, IField pField, VALUE pFieldValue) { super(pSource, pField); fieldValue = pFieldValue; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanValueChange.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanValueChange.java index f131293..6f76d84 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanValueChange.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/reactive/events/BeanValueChange.java @@ -7,12 +7,10 @@ /** * A bean's value has been changed. * - * @param the type of the changed bean * @param the type of the changed value * @author Simon Danner, 16.11.2018 */ -public final class BeanValueChange, VALUE> extends AbstractFieldBasedChangeEvent> +public final class BeanValueChange extends AbstractFieldBasedChangeEvent> { private final VALUE oldValue; private final VALUE newValue; @@ -25,7 +23,7 @@ public final class BeanValueChange, VALUE> extends Abst * @param pOldValue the old value of the field * @param pNewValue the new changed value */ - public BeanValueChange(BEAN pSource, IField pField, VALUE pOldValue, VALUE pNewValue) + public BeanValueChange(IBean pSource, IField pField, VALUE pOldValue, VALUE pNewValue) { super(pSource, pField); oldValue = pOldValue; diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/references/BeanReference.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/references/BeanReference.java index d8c72a8..d194ab7 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/references/BeanReference.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/references/BeanReference.java @@ -16,7 +16,7 @@ * * @author Simon Danner, 24.11.2018 */ -public final class BeanReference extends WeakReference> implements Iterable +public final class BeanReference extends WeakReference implements Iterable { private final IField field; @@ -26,7 +26,7 @@ public final class BeanReference extends WeakReference> implements Iter * @param pBean the bean that holds to reference * @param pField the field that holds the reference */ - public BeanReference(IBean pBean, IField pField) + public BeanReference(IBean pBean, IField pField) { super(Objects.requireNonNull(pBean)); field = pField; @@ -37,7 +37,7 @@ public BeanReference(IBean pBean, IField pField) * * @return a bean holding the reference */ - public IBean getBean() + public IBean getBean() { return _requiresExistingReference(); } @@ -102,7 +102,7 @@ public int hashCode() * @return the bean holding the reference * @throws OJRuntimeException if the reference does not exist anymore */ - private IBean _requiresExistingReference() + private IBean _requiresExistingReference() { return Optional.ofNullable(get()) .orElseThrow(() -> new OJRuntimeException("This bean reference is not existing anymore!")); diff --git a/ojcms-beans/src/main/java/de/adito/ojcms/beans/references/IReferenceProvider.java b/ojcms-beans/src/main/java/de/adito/ojcms/beans/references/IReferenceProvider.java index f8a3cc4..48c581a 100644 --- a/ojcms-beans/src/main/java/de/adito/ojcms/beans/references/IReferenceProvider.java +++ b/ojcms-beans/src/main/java/de/adito/ojcms/beans/references/IReferenceProvider.java @@ -53,7 +53,7 @@ default Set getAllReferences() * @param pBean the bean that holds the reference * @return a collection of bean fields referring to this bean */ - default Set> getAllReferencesByBean(IBean pBean) + default Set> getAllReferencesByBean(IBean pBean) { return getAllReferences().stream() .filter(pNode -> pNode.getBean() == pBean) @@ -68,7 +68,7 @@ default Set> getAllReferencesByBean(IBean pBean) * @param pField the bean field that holds the reference * @return a collection of beans referring to this bean */ - default Set> getAllReferencesByField(IField pField) + default Set getAllReferencesByField(IField pField) { return getAllReferences().stream() .filter(pNode -> pNode.getField() == pField) diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanContainerTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanContainerTest.java index 5386c66..7192799 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanContainerTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanContainerTest.java @@ -376,10 +376,22 @@ public void testFindByFieldValues() assertSame(thirdBean, twoResultsTwoTuple.get(1)); } + @Test + public void testInheritance() + { + final IBeanContainer baseTypeContainer = IBeanContainer.empty(SomeBean.class); + + baseTypeContainer.addBean(new SomeSpecialBean(34, 12)); + baseTypeContainer.addBean(new SomeBean(1)); + + assertEquals(2, baseTypeContainer.size()); + assertSame(baseTypeContainer.getBean(0).getClass(), SomeSpecialBean.class); + } + /** * Some bean for the container. */ - public static class SomeBean extends OJBean implements Comparable + public static class SomeBean extends OJBean implements Comparable { @Identifier public static final IntegerField SOME_FIELD = OJFields.create(SomeBean.class); @@ -402,4 +414,18 @@ public int compareTo(@NotNull SomeBean pBean) return getValue(SOME_FIELD) - pBean.getValue(SOME_FIELD); } } + + /** + * Some special bean extending {@link SomeBean} + */ + public static class SomeSpecialBean extends SomeBean + { + public static final IntegerField SOME_SPECIAL_FIELD = OJFields.create(SomeSpecialBean.class); + + public SomeSpecialBean(int pValue, int pSpecialValue) + { + super(pValue); + setValue(SOME_SPECIAL_FIELD, pSpecialValue); + } + } } \ No newline at end of file diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanCopyTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanCopyTest.java index fc470fd..84749c8 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanCopyTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanCopyTest.java @@ -92,7 +92,7 @@ public void testCopyWithOptionalField() /** * Some data POJO that manages a person registry. */ - public static class Data extends OJBean + public static class Data extends OJBean { public static final BeanField person1 = OJFields.create(Data.class); public static final BeanField person2 = OJFields.create(Data.class); @@ -108,7 +108,7 @@ public Data(Person pPerson1, Person pPerson2) /** * Bean for a person with an address property (reference). */ - public static class Person extends OJBean + public static class Person extends OJBean { public static final TextField name = OJFields.create(Person.class); public static final BeanField
address = OJFields.create(Person.class); @@ -123,7 +123,7 @@ public Person() /** * Bean for an address. */ - public static class Address extends OJBean
+ public static class Address extends OJBean { public static final TextField city = OJFields.create(Address.class); public static final IntegerField postalCode = OJFields.create(Address.class); @@ -136,7 +136,7 @@ public Address() } } - public static class House extends OJBean + public static class House extends OJBean { public static final BooleanField hasBasement = OJFields.create(House.class); @OptionalField diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanCreationEventsTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanCreationEventsTest.java index 9c21c6b..76d4ba7 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanCreationEventsTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanCreationEventsTest.java @@ -64,7 +64,7 @@ public void testObserveCreationIsAfterBeanConstruction() * A bean type using {@link ObserveCreation} directly. */ @ObserveCreation - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { public static final IntegerField SOME_FIELD = OJFields.create(SomeBean.class); @@ -78,14 +78,14 @@ public SomeBean() * A bean type using the annotation annotated by {@link ObserveCreation}. */ @SomeAnnotation - public static class AnotherBean extends OJBean + public static class AnotherBean extends OJBean { } /** * A regular bean without any annotation. */ - public static class BeanWithoutAnnotation extends OJBean + public static class BeanWithoutAnnotation extends OJBean { } diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanFieldConverterTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanFieldConverterTest.java index d9b87b3..9f59f14 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanFieldConverterTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanFieldConverterTest.java @@ -58,7 +58,7 @@ public void testConverters(_TypeValueWrapper pWra /** * Some bean with fields for all converters. */ - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { public static final DateField dateField = OJFields.create(SomeBean.class); } diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanFieldCopyTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanFieldCopyTest.java index 098ef5e..1886713 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanFieldCopyTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanFieldCopyTest.java @@ -67,7 +67,7 @@ public void testFieldCopyMechanisms(_FieldValueWrapper pFieldValu { assertNotNull(pFieldValueWrapper.value); final IField field = BeanFieldFactory.createField(pFieldValueWrapper.fieldType, pFieldValueWrapper::getGenericFieldType, - "test", false, Collections.emptySet(), Optional.empty()); + "test", false, Collections.emptySet(), null); try { final VALUE copiedValue = field.copyValue(pFieldValueWrapper.value, ECopyMode.DEEP_ONLY_BEAN_FIELDS); @@ -85,7 +85,7 @@ public void testFieldCopyMechanisms(_FieldValueWrapper pFieldValu /** * Some bean. */ - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { public static final TextField someField = OJFields.create(SomeBean.class); public static final TextField anotherField = OJFields.create(SomeBean.class); diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanObserverTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanObserverTest.java index c9d5b32..f22a88b 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanObserverTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanObserverTest.java @@ -8,7 +8,7 @@ import org.junit.jupiter.api.*; import java.lang.annotation.Annotation; -import java.util.*; +import java.util.Collections; import java.util.function.*; import java.util.stream.IntStream; @@ -194,7 +194,7 @@ public void removeField(IField pField) private void _testAddition(BiConsumer, SomeBean> pAdder, int pExpectedIndex) { final DecimalField fieldToAdd = BeanFieldFactory.createField(DecimalField.class, "fieldX", false, - Collections.emptyList(), Optional.empty()); + Collections.emptyList(), null); observe(bean, IBean::observeFieldAdditions) .assertCallCount(1) @@ -231,7 +231,7 @@ else if (pChange.getField() == SomeBean.field2) * Some bean to add listeners to. * Has to be a modifiable bean to test the creation and removal events. */ - public static class SomeBean extends OJBean implements IModifiableBean + public static class SomeBean extends OJBean implements IModifiableBean { public SomeBean(String pValue1, int pValue2) { diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanOptionalFieldTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanOptionalFieldTest.java index fee9bed..9cfa670 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanOptionalFieldTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanOptionalFieldTest.java @@ -60,7 +60,7 @@ public void testFieldObservers() /** * Some bean with optional fields. */ - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { public static final TextField normalField = OJFields.create(SomeBean.class); @OptionalField diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanTest.java index 52350f5..4469249 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/BeanTest.java @@ -172,7 +172,7 @@ public void testFindFieldByNameSuccess() @Test public void testResolveDeepBean() { - final IBean deepBean = bean.resolveDeepBean(SomeBean.deepField, DeepBean.deeperField); + final IBean deepBean = bean.resolveDeepBean(SomeBean.deepField, DeepBean.deeperField); assertSame(DeepBean.DEEPER_BEAN, deepBean); } @@ -216,13 +216,13 @@ public void testBeanInheritance() */ private static TextField _createTextField() { - return BeanFieldFactory.createField(TextField.class, TEXT_FIELD_NAME, false, Collections.emptySet(), Optional.empty()); + return BeanFieldFactory.createField(TextField.class, TEXT_FIELD_NAME, false, Collections.emptySet(), null); } /** * Some bean. */ - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { @Identifier public static final SpecialTextField specialTextField = OJFields.create(SomeBean.class); @@ -253,7 +253,7 @@ public SomeBean() /** * A deep bean that holds a reference to another bean. */ - public static class DeepBean extends OJBean + public static class DeepBean extends OJBean { public static final DeeperBean DEEPER_BEAN = new DeeperBean(); public static final BeanField deeperField = OJFields.create(DeepBean.class); @@ -267,7 +267,7 @@ public DeepBean() /** * An even deeper bean that holds a very deep value. */ - public static class DeeperBean extends OJBean + public static class DeeperBean extends OJBean { public static final int DEEP_VALUE = 42; public static final IntegerField deepValue = OJFields.create(DeeperBean.class); @@ -308,7 +308,7 @@ public String getInitialValue() /** * A bean with one privately declared field. */ - public static class BeanWithPrivateField extends OJBean + public static class BeanWithPrivateField extends OJBean { static final int EXPECTED_VALUE = 5; private static final IntegerField privateField = OJFields.create(BeanWithPrivateField.class); @@ -324,12 +324,18 @@ public int getPrivateValue() } } - public static abstract class AbstractBaseBeanType> extends OJBean + /** + * Abstract base type for a bean with one field. + */ + public static abstract class AbstractBaseBeanType extends OJBean { public static final IntegerField SOME_BASE_FIELD = OJFields.create(AbstractBaseBeanType.class); } - public static class ConcreteBeanType extends AbstractBaseBeanType + /** + * Some concrete bean based on the abstract bean. + */ + public static class ConcreteBeanType extends AbstractBaseBeanType { public static final IntegerField SOME_SPECIAL_FIELD = OJFields.create(ConcreteBeanType.class); } diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/EncapsulatedWeakReferencesTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/EncapsulatedWeakReferencesTest.java index eec603e..f3e425b 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/EncapsulatedWeakReferencesTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/EncapsulatedWeakReferencesTest.java @@ -62,14 +62,14 @@ public void testWeakness() /** * Some bean to take the encapsulated data core from to check the references. */ - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { } /** * Some bean that will establish a reference to {@link SomeBean}. */ - public static class ReferringBean extends OJBean + public static class ReferringBean extends OJBean { public static final BeanField refField = OJFields.create(ReferringBean.class); public static final BeanField anotherRefField = OJFields.create(ReferringBean.class); diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/literals/fields/types/GenericFieldReplacementTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/literals/fields/types/GenericFieldReplacementTest.java index f33614c..1f7f6f0 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/literals/fields/types/GenericFieldReplacementTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/literals/fields/types/GenericFieldReplacementTest.java @@ -65,7 +65,7 @@ private void _checkLogging(Class pGenericType, boolean pShouldLog) /** * Some bean type. */ - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { } diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/literals/fields/types/MapFieldTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/literals/fields/types/MapFieldTest.java index 248d8bf..b308365 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/literals/fields/types/MapFieldTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/literals/fields/types/MapFieldTest.java @@ -93,7 +93,7 @@ public void testWithSubTypesOfDefaultFields() * * @param pBean the bean to test */ - private static void _testFieldTuples(IBean pBean) + private static void _testFieldTuples(IBean pBean) { final AtomicInteger index = new AtomicInteger(); //Test in order and proper to bean transformation @@ -107,7 +107,7 @@ private static void _testFieldTuples(IBean pBean) /** * Some bean with a map field. */ - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { public static final MapField mapField = OJFields.create(SomeBean.class); public static final MapField mapField2 = OJFields.create(SomeBean.class); diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/references/BeanReferenceTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/references/BeanReferenceTest.java index e1ff229..6ba0862 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/references/BeanReferenceTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/references/BeanReferenceTest.java @@ -58,7 +58,7 @@ public void testAllParentReferencesByField() { final Data data = new Data(); final Address deepAddress = data.getValue(Data.registry).getValue(PersonRegistry.persons).getBean(0).getValue(Person.address); - final Set> referencesByField = deepAddress.getAllReferencesByField(Data.registry); + final Set referencesByField = deepAddress.getAllReferencesByField(Data.registry); assertEquals(1, referencesByField.size()); assertTrue(referencesByField.contains(data)); } @@ -66,7 +66,7 @@ public void testAllParentReferencesByField() /** * Some data POJO that manages a person registry. */ - public static class Data extends OJBean + public static class Data extends OJBean { public static final BeanField registry = OJFields.create(Data.class); @@ -79,7 +79,7 @@ public Data() /** * A bean that holds multiple persons through a bean container field. */ - public static class PersonRegistry extends OJBean + public static class PersonRegistry extends OJBean { public static final ContainerField persons = OJFields.create(PersonRegistry.class); @@ -92,7 +92,7 @@ public PersonRegistry() /** * Bean for a person with an address property (reference). */ - public static class Person extends OJBean + public static class Person extends OJBean { public static final TextField name = OJFields.create(Person.class); public static final BeanField
address = OJFields.create(Person.class); @@ -107,7 +107,7 @@ public Person() /** * Bean for an address. */ - public static class Address extends OJBean
+ public static class Address extends OJBean { public static final TextField city = OJFields.create(Address.class); public static final IntegerField postalCode = OJFields.create(Address.class); diff --git a/ojcms-beans/src/test/java/de/adito/ojcms/beans/statistics/BeanStatisticsTest.java b/ojcms-beans/src/test/java/de/adito/ojcms/beans/statistics/BeanStatisticsTest.java index ea9e3d2..ce7698f 100644 --- a/ojcms-beans/src/test/java/de/adito/ojcms/beans/statistics/BeanStatisticsTest.java +++ b/ojcms-beans/src/test/java/de/adito/ojcms/beans/statistics/BeanStatisticsTest.java @@ -148,7 +148,7 @@ private void _setupTestStatistics(int pSize) throws InterruptedException * A bean type that collects statistics. */ @Statistics(capacity = 100) - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { @Statistics(capacity = FIELD_STATISTICS_LIMIT) public static final TextField field = OJFields.create(SomeBean.class); diff --git a/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/BeanPersistenceUtil.java b/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/BeanPersistenceUtil.java index f06cd4e..3dfa5fb 100644 --- a/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/BeanPersistenceUtil.java +++ b/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/BeanPersistenceUtil.java @@ -28,7 +28,7 @@ private BeanPersistenceUtil() * @return the created bean instance * @throws OJPersistenceException if the persistence annotation is missing */ - static > BEAN newPersistentBeanInstance(Class pBeanType, IBeanDataSource pDataSource) + static BEAN newPersistentBeanInstance(Class pBeanType, IBeanDataSource pDataSource) { try { diff --git a/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/BeanProducerExtension.java b/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/BeanProducerExtension.java index 22f6f6b..65be37c 100644 --- a/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/BeanProducerExtension.java +++ b/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/BeanProducerExtension.java @@ -22,8 +22,8 @@ */ class BeanProducerExtension implements Extension { - static final Map>, String> CONTAINER_BEAN_TYPES = new HashMap<>(); - static final Map>, String> SINGLE_BEAN_TYPES = new HashMap<>(); + static final Map, String> CONTAINER_BEAN_TYPES = new HashMap<>(); + static final Map, String> SINGLE_BEAN_TYPES = new HashMap<>(); /** * Scans every {@link AnnotatedType} for persistent bean types. @@ -31,7 +31,7 @@ class BeanProducerExtension implements Extension * * @param pProcessedBean a processed bean type */ - void findPersistentBeans(@Observes ProcessAnnotatedType> pProcessedBean) + void findPersistentBeans(@Observes ProcessAnnotatedType pProcessedBean) { final Persist persistenceAnnotation = pProcessedBean.getAnnotatedType().getAnnotation(Persist.class); @@ -39,7 +39,7 @@ void findPersistentBeans(@Observes ProcessAnnotatedType> pPro return; //noinspection unchecked - final Class> beanType = (Class>) pProcessedBean.getAnnotatedType().getBaseType(); + final Class beanType = (Class) pProcessedBean.getAnnotatedType().getBaseType(); if (persistenceAnnotation.mode() == EPersistenceMode.CONTAINER) CONTAINER_BEAN_TYPES.put(beanType, persistenceAnnotation.containerId()); @@ -70,7 +70,7 @@ void afterBeanDiscovery(@Observes AfterBeanDiscovery pAfterBeanDiscovery) * @param pBeanType the bean type of the persistent container * @param pContainerId the id of the persistent bean container */ - private static void _addContainerCdiBeans(AfterBeanDiscovery pAfterBeanDiscovery, Class> pBeanType, String pContainerId) + private static void _addContainerCdiBeans(AfterBeanDiscovery pAfterBeanDiscovery, Class pBeanType, String pContainerId) { final ContainerQualifier literal = ContainerQualifier.Literal.forContainerId(pContainerId); @@ -97,7 +97,7 @@ private static void _addContainerCdiBeans(AfterBeanDiscovery pAfterBeanDiscovery * @param pBeanType the bean type of the persistent single bean * @param pBeanId the id of the persistent single bean */ - private static void _addSingleBeanCdiBeans(AfterBeanDiscovery pAfterBeanDiscovery, Class> pBeanType, String pBeanId) + private static void _addSingleBeanCdiBeans(AfterBeanDiscovery pAfterBeanDiscovery, Class pBeanType, String pBeanId) { final ContainerQualifier literal = ContainerQualifier.Literal.forContainerId(pBeanId); @@ -122,8 +122,8 @@ private static void _addSingleBeanCdiBeans(AfterBeanDiscovery pAfterBeanDiscover * @param pLiteral a qualifier annotation literal to identify the persistent container * @return the created bean container instance */ - private static > IBeanContainer _createBeanContainer(Instance pEnvironment, Class pBeanType, - ContainerQualifier pLiteral) + private static IBeanContainer _createBeanContainer(Instance pEnvironment, Class pBeanType, + ContainerQualifier pLiteral) { //noinspection unchecked final ContainerContent content = pEnvironment.select(ContainerContent.class, pLiteral).get(); @@ -139,8 +139,8 @@ private static > IBeanContainer _createBeanContai * @param pBeanType the bean type of the bean container * @return the created instance managing the persistent container's content */ - private static > ContainerContent _createContainerContent(Instance pEnvironment, - String pContainerId, Class pBeanType) + private static ContainerContent _createContainerContent(Instance pEnvironment, String pContainerId, + Class pBeanType) { return new ContainerContent<>(pContainerId, pBeanType, pEnvironment.select(ITransaction.class).get()); } @@ -153,8 +153,7 @@ private static > ContainerContent _createContaine * @param pLiteral a qualifier annotation literal to identify the single persistent bean * @return the created single bean instance */ - private static > BEAN _createSingleBean(Instance pEnvironment, Class pBeanType, - ContainerQualifier pLiteral) + private static BEAN _createSingleBean(Instance pEnvironment, Class pBeanType, ContainerQualifier pLiteral) { final SingleBeanContent content = pEnvironment.select(SingleBeanContent.class, pLiteral).get(); final PersistentBeanDatasource datasource = new PersistentBeanDatasource(content); diff --git a/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/ContainerContent.java b/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/ContainerContent.java index d52b671..d6ccd25 100644 --- a/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/ContainerContent.java +++ b/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/ContainerContent.java @@ -16,9 +16,10 @@ /** * Manages the content of a persistent bean container within one {@link ITransaction}. * + * @param the type of the beans in the container * @author Simon Danner, 30.12.2019 */ -class ContainerContent> +class ContainerContent { private final String containerId; private final Class beanType; diff --git a/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/PersistentContainerDatasource.java b/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/PersistentContainerDatasource.java index ae08bbf..9e31234 100644 --- a/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/PersistentContainerDatasource.java +++ b/ojcms-persistence/src/main/java/de/adito/ojcms/persistence/datasource/PersistentContainerDatasource.java @@ -12,9 +12,10 @@ * A {@link IBeanContainerDataSource} for persistent bean containers. * The actual persistent beans within the container are provided by a {@link TransactionalScoped} {@link ContainerContent}. * + * @param the type of the beans in the container source * @author Simon Danner, 30.12.2019 */ -class PersistentContainerDatasource> implements IBeanContainerDataSource +class PersistentContainerDatasource implements IBeanContainerDataSource { private final ContainerContent content; //Transactional scoped diff --git a/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/BeanStorageForTest.java b/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/BeanStorageForTest.java index 1b555f7..e9a08cb 100644 --- a/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/BeanStorageForTest.java +++ b/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/BeanStorageForTest.java @@ -24,13 +24,13 @@ class BeanStorageForTest implements IBeanDataStorage private BeanTestData data; @Override - public void registerPersistentContainerBean(Class> pBeanType, String pContainerId) + public void registerPersistentContainerBean(Class pBeanType, String pContainerId) { registeredBeans.registerContainerType(pContainerId); } @Override - public void registerPersistentSingleBean(Class> pBeanType, String pBeanId) + public void registerPersistentSingleBean(Class pBeanType, String pBeanId) { registeredBeans.registerSingleBeanType(pBeanId, pBeanType); } diff --git a/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/PersistentContainerTest.java b/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/PersistentContainerTest.java index ea47f34..b3435e2 100644 --- a/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/PersistentContainerTest.java +++ b/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/PersistentContainerTest.java @@ -110,7 +110,7 @@ public void testContainerWithPresetContent() } @Persist(containerId = "TEST") - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { @Identifier public static final IntegerField NUMBER_FIELD = OJFields.create(SomeBean.class); diff --git a/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/PersistentSingleBeanTest.java b/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/PersistentSingleBeanTest.java index 6bc1677..5c9ac2d 100644 --- a/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/PersistentSingleBeanTest.java +++ b/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/PersistentSingleBeanTest.java @@ -47,7 +47,7 @@ public void testSetAndGetValue() } @Persist(containerId = "SINGLE_TEST", mode = EPersistenceMode.SINGLE) - public static class SomeSingleBean extends OJBean implements IModifiableBean + public static class SomeSingleBean extends OJBean implements IModifiableBean { public static final IntegerField NUMBER_FIELD = OJFields.create(SomeSingleBean.class); public static final DateField DATE_FIELD = OJFields.create(SomeSingleBean.class); diff --git a/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/RegisteredBeans.java b/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/RegisteredBeans.java index e47137f..659a3e6 100644 --- a/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/RegisteredBeans.java +++ b/ojcms-persistence/src/test/java/de/adito/ojcms/persistence/RegisteredBeans.java @@ -55,7 +55,7 @@ void registerContainerType(String pContainerId) * @param pBeanId the id of the single bean * @param pBeanType the bean type of the persistent single bean */ - void registerSingleBeanType(String pBeanId, Class> pBeanType) + void registerSingleBeanType(String pBeanId, Class pBeanType) { final Map, Object> initialContent = BeanReflector.reflectBeanFields(pBeanType).stream() .collect(HashMap::new, (pMap, pField) -> pMap.put(pField, pField.getInitialValue()), HashMap::putAll); diff --git a/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/ContainerPersistenceModel.java b/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/ContainerPersistenceModel.java index 131cc23..75af7bd 100644 --- a/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/ContainerPersistenceModel.java +++ b/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/ContainerPersistenceModel.java @@ -51,7 +51,7 @@ public class ContainerPersistenceModel implements IPersistenceModel * @param pContainerId the container id of the persistent container * @param pBeanType the type of beans within the bean container */ - ContainerPersistenceModel(String pContainerId, Class> pBeanType) + ContainerPersistenceModel(String pContainerId, Class pBeanType) { containerId = StringUtility.requireNotEmpty(pContainerId, "container id"); final List> beanFields = BeanReflector.reflectBeanFields(pBeanType); diff --git a/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/PersistenceModels.java b/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/PersistenceModels.java index 6f36280..f3a3e20 100644 --- a/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/PersistenceModels.java +++ b/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/PersistenceModels.java @@ -24,7 +24,7 @@ public class PersistenceModels * @param pBeanType the bean type of the persistent bean * @param pContainerId the id of the persistent container */ - public void registerPersistentContainerBean(Class> pBeanType, String pContainerId) + public void registerPersistentContainerBean(Class pBeanType, String pContainerId) { containerModels.putIfAbsent(pContainerId, new ContainerPersistenceModel(pContainerId, pBeanType)); } @@ -35,7 +35,7 @@ public void registerPersistentContainerBean(Class> pBeanType, * @param pBeanType the bean type of the persistent bean * @param pBeanId the id of the persistent single bean */ - public void registerPersistentSingleBean(Class> pBeanType, String pBeanId) + public void registerPersistentSingleBean(Class pBeanType, String pBeanId) { singleBeanModels.putIfAbsent(pBeanId, new SingleBeanPersistenceModel(pBeanId, pBeanType)); } diff --git a/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/SingleBeanPersistenceModel.java b/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/SingleBeanPersistenceModel.java index a83edaf..6e8b2d9 100644 --- a/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/SingleBeanPersistenceModel.java +++ b/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/model/SingleBeanPersistenceModel.java @@ -68,7 +68,7 @@ public static void createSingleBeanTableIfNecessary(OJSQLBuilder pBuilder) * @param pBeanId the id of the single bean, identifies the row within the database table * @param pBeanType the bean type of the single bean */ - SingleBeanPersistenceModel(String pBeanId, Class> pBeanType) + SingleBeanPersistenceModel(String pBeanId, Class pBeanType) { beanId = StringUtility.requireNotEmpty(pBeanId, "single bean id"); fieldNameMapping = BeanReflector.reflectBeanFields(pBeanType).stream() diff --git a/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/persistence/SQLBeanDataStorage.java b/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/persistence/SQLBeanDataStorage.java index 0a82dd2..cc3f119 100644 --- a/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/persistence/SQLBeanDataStorage.java +++ b/ojcms-sqldatasource/src/main/java/de/adito/ojcms/sql/datasource/persistence/SQLBeanDataStorage.java @@ -30,13 +30,13 @@ public class SQLBeanDataStorage implements IBeanDataStorage private Connection connection; @Override - public void registerPersistentContainerBean(Class> pBeanType, String pContainerId) + public void registerPersistentContainerBean(Class pBeanType, String pContainerId) { models.registerPersistentContainerBean(pBeanType, pContainerId); } @Override - public void registerPersistentSingleBean(Class> pBeanType, String pBeanId) + public void registerPersistentSingleBean(Class pBeanType, String pBeanId) { models.registerPersistentSingleBean(pBeanType, pBeanId); } diff --git a/ojcms-sqldatasource/src/test/java/de/adito/ojcms/sql/datasource/model/AbstractDatabaseTest.java b/ojcms-sqldatasource/src/test/java/de/adito/ojcms/sql/datasource/model/AbstractDatabaseTest.java index 4f69451..7861795 100644 --- a/ojcms-sqldatasource/src/test/java/de/adito/ojcms/sql/datasource/model/AbstractDatabaseTest.java +++ b/ojcms-sqldatasource/src/test/java/de/adito/ojcms/sql/datasource/model/AbstractDatabaseTest.java @@ -132,7 +132,7 @@ else if (modelType == SingleBeanPersistenceModel.class) /** * Some bean to use for the persistence models and the tests. */ - public static class SomeBean extends OJBean + public static class SomeBean extends OJBean { @Identifier public static final IntegerField FIELD1 = OJFields.create(SomeBean.class); diff --git a/ojcms-transactions/src/main/java/de/adito/ojcms/transactions/spi/IBeanDataStorage.java b/ojcms-transactions/src/main/java/de/adito/ojcms/transactions/spi/IBeanDataStorage.java index 08c5e6e..5193b32 100644 --- a/ojcms-transactions/src/main/java/de/adito/ojcms/transactions/spi/IBeanDataStorage.java +++ b/ojcms-transactions/src/main/java/de/adito/ojcms/transactions/spi/IBeanDataStorage.java @@ -19,7 +19,7 @@ public interface IBeanDataStorage * @param pBeanType the bean type to register * @param pContainerId the id of the persistent container */ - void registerPersistentContainerBean(Class> pBeanType, String pContainerId); + void registerPersistentContainerBean(Class pBeanType, String pContainerId); /** * Registers a persistent single bean type. This may be used by the storage system to initialize required structures. @@ -27,7 +27,7 @@ public interface IBeanDataStorage * @param pBeanType the bean type to register * @param pBeanId the id of the persistent single bean */ - void registerPersistentSingleBean(Class> pBeanType, String pBeanId); + void registerPersistentSingleBean(Class pBeanType, String pBeanId); /** * Processes value changes for a persistent bean within a container. diff --git a/ojcms-utils/src/main/java/de/adito/ojcms/utils/readonly/ReadOnlyInvocationHandler.java b/ojcms-utils/src/main/java/de/adito/ojcms/utils/readonly/ReadOnlyInvocationHandler.java index 7bf588a..af479e3 100644 --- a/ojcms-utils/src/main/java/de/adito/ojcms/utils/readonly/ReadOnlyInvocationHandler.java +++ b/ojcms-utils/src/main/java/de/adito/ojcms/utils/readonly/ReadOnlyInvocationHandler.java @@ -45,6 +45,7 @@ public Object invoke(Object pProxy, Method pMethod, Object[] pArgs) throws Throw if (pMethod.isAnnotationPresent(WriteOperation.class)) throw new UnsupportedOperationException("This element of type " + source.getClass().getName() + " is read-only! " + "The content can not be modified!"); + final Object result = pMethod.invoke(source, pArgs); if (result instanceof List) return Collections.unmodifiableList((List) result);