/**
*
* Copyright
* 2009-2015 Jayway Products AB
* 2016-2017 Föreningen Sambruk
*
* Licensed under AGPL, Version 3.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.gnu.org/licenses/agpl.txt
*
* 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 se.streamsource.streamflow.web.context.administration.forms.definition;
import org.qi4j.api.injection.scope.Structure;
import org.qi4j.api.structure.Module;
import org.qi4j.api.value.ValueBuilder;
import org.qi4j.api.value.ValueBuilderFactory;
import se.streamsource.dci.api.IndexContext;
import se.streamsource.dci.api.RoleMap;
import se.streamsource.dci.value.link.LinksValue;
import se.streamsource.streamflow.api.administration.form.AttachmentFieldValue;
import se.streamsource.streamflow.api.administration.form.CheckboxesFieldValue;
import se.streamsource.streamflow.api.administration.form.ComboBoxFieldValue;
import se.streamsource.streamflow.api.administration.form.CommentFieldValue;
import se.streamsource.streamflow.api.administration.form.CreateFieldDTO;
import se.streamsource.streamflow.api.administration.form.DateFieldValue;
import se.streamsource.streamflow.api.administration.form.FieldTypes;
import se.streamsource.streamflow.api.administration.form.FieldValue;
import se.streamsource.streamflow.api.administration.form.ListBoxFieldValue;
import se.streamsource.streamflow.api.administration.form.NumberFieldValue;
import se.streamsource.streamflow.api.administration.form.OpenSelectionFieldValue;
import se.streamsource.streamflow.api.administration.form.OptionButtonsFieldValue;
import se.streamsource.streamflow.api.administration.form.TextAreaFieldValue;
import se.streamsource.streamflow.api.administration.form.TextFieldValue;
import se.streamsource.streamflow.web.context.LinksBuilder;
import se.streamsource.streamflow.web.domain.structure.form.Field;
import se.streamsource.streamflow.web.domain.structure.form.FieldGroup;
import se.streamsource.streamflow.web.domain.structure.form.FieldGroups;
import se.streamsource.streamflow.web.domain.structure.form.Fields;
/**
* JAVADOC
*/
public class FieldGroupContext
implements IndexContext<LinksValue>
{
@Structure
Module module;
public LinksValue index()
{
LinksBuilder linksBuilder = new LinksBuilder( module.valueBuilderFactory() );
FieldGroup fieldGroup = RoleMap.role( FieldGroup.class );
for (Field field : ((Fields.Data)fieldGroup).fields())
{
linksBuilder.rel( "field" );
linksBuilder.addDescribable( field );
linksBuilder.path( null );
}
return linksBuilder.newLinks();
}
public void delete()
{
FieldGroup fieldGroup = RoleMap.role( FieldGroup.class );
FieldGroups fieldGroups = RoleMap.role( FieldGroups.class );
fieldGroups.removeFieldGroup( fieldGroup );
}
public void create( CreateFieldDTO createFieldDTO )
{
Fields fields = RoleMap.role( Fields.class );
fields.createField( createFieldDTO.name().get(), getFieldValue( createFieldDTO.fieldType().get() ) );
}
private FieldValue getFieldValue( FieldTypes fieldType )
{
FieldValue value = null;
ValueBuilderFactory vbf = module.valueBuilderFactory();
switch (fieldType)
{
case attachment:
value = vbf.newValue( AttachmentFieldValue.class );
break;
case checkboxes:
value = vbf.newValue( CheckboxesFieldValue.class );
break;
case combobox:
value = vbf.newValue( ComboBoxFieldValue.class );
break;
case comment:
value = vbf.newValue( CommentFieldValue.class );
break;
case date:
value = vbf.newValue( DateFieldValue.class );
break;
case listbox:
value = vbf.newValue( ListBoxFieldValue.class );
break;
case number:
ValueBuilder<NumberFieldValue> numberBuilder = vbf.newValueBuilder( NumberFieldValue.class );
numberBuilder.prototype().integer().set( true );
value = numberBuilder.newInstance();
break;
case optionbuttons:
value = vbf.newValue( OptionButtonsFieldValue.class );
break;
case openselection:
ValueBuilder<OpenSelectionFieldValue> valueBuilder = vbf.newValueBuilder( OpenSelectionFieldValue.class );
valueBuilder.prototype().openSelectionName().set( "" );
value = valueBuilder.newInstance();
break;
case textarea:
ValueBuilder<TextAreaFieldValue> builder = vbf.newValueBuilder( TextAreaFieldValue.class );
builder.prototype().cols().set( 30 );
builder.prototype().rows().set( 5 );
value = builder.newInstance();
break;
case text:
ValueBuilder<TextFieldValue> textBuilder = vbf.newValueBuilder( TextFieldValue.class );
textBuilder.prototype().width().set( 30 );
value = textBuilder.newInstance();
break;
}
return value;
}
}