/* * Copyright (c) 2012, Paul Merlin. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.qi4j.runtime.property; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import org.qi4j.api.common.UseDefaults; import org.qi4j.api.property.Property; import org.qi4j.api.value.ValueBuilder; import org.qi4j.api.value.ValueComposite; import org.qi4j.bootstrap.AssemblyException; import org.qi4j.bootstrap.ModuleAssembly; import org.qi4j.test.AbstractQi4jTest; public class ValueNestedBuilderTest extends AbstractQi4jTest { static interface InnerValue extends ValueComposite { Property<List<String>> listProp(); Property<Map<String, String>> mapProp(); } static interface InnerDefaultedValue extends ValueComposite { @UseDefaults Property<List<String>> listPropDefault(); @UseDefaults Property<Map<String, String>> mapPropDefault(); } static interface OuterValue extends ValueComposite { Property<List<InnerValue>> innerListProp(); } static interface OuterDefaultedValue extends ValueComposite { @UseDefaults Property<List<InnerDefaultedValue>> innerListPropDefault(); } @Override public void assemble( ModuleAssembly module ) throws AssemblyException { module.values( InnerValue.class, InnerDefaultedValue.class, OuterValue.class, OuterDefaultedValue.class ); } @Test public void testInner() { ValueBuilder<InnerValue> innerBuilder = module.newValueBuilder( InnerValue.class ); InnerValue inner = innerBuilder.prototype(); inner.listProp().set( new ArrayList<String>() ); inner.mapProp().set( new HashMap<String, String>() ); inner = innerBuilder.newInstance(); // If we reach this point, value creation went well } @Test public void testOuter() { ValueBuilder<InnerValue> innerBuilder = module.newValueBuilder( InnerValue.class ); InnerValue inner = innerBuilder.prototype(); inner.listProp().set( new ArrayList<String>() ); inner.mapProp().set( new HashMap<String, String>() ); inner = innerBuilder.newInstance(); ValueBuilder<OuterValue> outerBuilder = module.newValueBuilder( OuterValue.class ); OuterValue outer = outerBuilder.prototype(); List<InnerValue> inners = new ArrayList<InnerValue>(); inners.add( inner ); outer.innerListProp().set( inners ); outer = outerBuilder.newInstance(); System.out.println( outer.toString() ); // If we reach this point, value creation went well } @Test public void testDefaultedInner() { ValueBuilder<InnerDefaultedValue> innerBuilder = module.newValueBuilder( InnerDefaultedValue.class ); InnerDefaultedValue inner = innerBuilder.newInstance(); // If we reach this point, value creation went well } @Test public void testDefaultedOuter() { ValueBuilder<InnerDefaultedValue> innerBuilder = module.newValueBuilder( InnerDefaultedValue.class ); InnerDefaultedValue inner = innerBuilder.newInstance(); ValueBuilder<OuterDefaultedValue> outerBuilder = module.newValueBuilder( OuterDefaultedValue.class ); OuterDefaultedValue outer = outerBuilder.prototype(); List<InnerDefaultedValue> inners = new ArrayList<InnerDefaultedValue>(); inners.add( inner ); outer.innerListPropDefault().set( inners ); outer = outerBuilder.newInstance(); System.out.println( outer.toString() ); // If we reach this point, value creation went well } }