/**
*
* 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.surface.tasks;
import org.qi4j.api.injection.scope.Structure;
import org.qi4j.api.mixin.Mixins;
import org.qi4j.api.structure.Module;
import org.qi4j.api.unitofwork.UnitOfWork;
import org.qi4j.api.value.ValueBuilder;
import se.streamsource.dci.api.Context;
import se.streamsource.dci.api.IndexContext;
import se.streamsource.streamflow.api.workspace.cases.form.FieldDTO;
import se.streamsource.streamflow.api.workspace.cases.form.SubmittedFormDTO;
import se.streamsource.streamflow.api.workspace.cases.form.SubmittedPageDTO;
import se.streamsource.streamflow.web.domain.Describable;
import se.streamsource.streamflow.web.domain.structure.SubmittedFieldValue;
import se.streamsource.streamflow.web.domain.structure.form.FieldValueDefinition;
import se.streamsource.streamflow.web.domain.structure.form.SubmittedFormValue;
import se.streamsource.streamflow.web.domain.structure.form.SubmittedPageValue;
import static se.streamsource.dci.api.RoleMap.*;
/**
*
* */
@Mixins( TaskSubmittedFormSummaryContext.Mixin.class )
public interface TaskSubmittedFormSummaryContext
extends Context, IndexContext<SubmittedFormDTO>
{
abstract class Mixin
implements TaskSubmittedFormSummaryContext
{
@Structure
Module module;
public SubmittedFormDTO index()
{
SubmittedFormValue form = role( SubmittedFormValue.class );
UnitOfWork uow = module.unitOfWorkFactory().currentUnitOfWork();
ValueBuilder<SubmittedFormDTO> formBuilder = module.valueBuilderFactory().newValueBuilder(SubmittedFormDTO.class);
SubmittedFormDTO formDTO = formBuilder.prototype();
formDTO.submissionDate().set( form.submissionDate().get() );
formDTO.href().set(form.form().get().identity());
formDTO.id().set(form.form().get().identity());
Describable.Data submitter = uow.get( Describable.Data.class, form.submitter().get().identity() );
formDTO.submitter().set( submitter.description().get() );
Describable.Data formName = uow.get( Describable.Data.class, form.form().get().identity() );
formDTO.form().set( formName.description().get() );
ValueBuilder<FieldDTO> fieldBuilder = module.valueBuilderFactory().newValueBuilder(FieldDTO.class);
FieldDTO fieldDTO = fieldBuilder.prototype();
for (SubmittedPageValue submittedPageValue : form.pages().get())
{
ValueBuilder<SubmittedPageDTO> pageBuilder = module.valueBuilderFactory().newValueBuilder(SubmittedPageDTO.class);
SubmittedPageDTO pageDTO = pageBuilder.prototype();
Describable.Data page = uow.get(Describable.Data.class, submittedPageValue.page().get().identity());
pageDTO.name().set(page.description().get());
for (SubmittedFieldValue fieldValue : submittedPageValue.fields().get())
{
Describable.Data field = uow.get( Describable.Data.class, fieldValue.field().get().identity() );
fieldDTO.field().set( field.description().get() );
fieldDTO.value().set( fieldValue.value().get() );
FieldValueDefinition.Data fieldDefinition = uow.get( FieldValueDefinition.Data.class, fieldValue.field().get().identity() );
fieldDTO.fieldType().set( fieldDefinition.fieldValue().get().type().getName() );
pageDTO.fields().get().add( fieldBuilder.newInstance() );
}
formDTO.pages().get().add(pageBuilder.newInstance());
}
formDTO.signatures().get().addAll(form.signatures().get());
return formBuilder.newInstance();
}
}
}