/* * Copyright 2014 astamuse company,Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.astamuse.asta4d.sample.handler.form.splittedinput; import com.astamuse.asta4d.sample.handler.form.PersonForm; import com.astamuse.asta4d.sample.handler.form.multiinput.CascadeJobForm; import com.astamuse.asta4d.web.form.annotation.CascadeFormField; import com.astamuse.asta4d.web.form.annotation.Form; import com.astamuse.asta4d.web.form.annotation.renderable.AvailableWhenEditOnly; import com.astamuse.asta4d.web.form.flow.base.StepAwaredValidationTarget; import com.astamuse.asta4d.web.form.flow.base.StepRepresentableForm; import com.astamuse.asta4d.web.form.flow.classical.ClassicalFormFlowConstant; import com.astamuse.asta4d.web.form.flow.ext.ExcludingFieldRetrievableForm; import com.astamuse.asta4d.web.form.flow.ext.IncludingFieldRetrievableForm; import com.astamuse.asta4d.web.form.flow.ext.MultiInputStepForm; //@ShowCode:showSplittedFormStart /** * Declares four form instances to represent the steps: input-1, input-2, input-3, confirm(and complete). * * @author e-ryu * */ @Form public class SplittedInputForm implements MultiInputStepForm { /** * Implements {@link ExcludingFieldRetrievableForm} to declare fields to be excluded in validation and rendering. Implements * {@link StepRepresentableForm} to declare whether this form instance should be rendered. * * @author e-ryu * */ @Form public static class PersonFormStep1 extends PersonForm implements ExcludingFieldRetrievableForm, StepRepresentableForm { @Override public String[] retrieveRepresentingSteps() { return new String[] { "input-1" }; } @Override public String[] getExcludeFields() { return new String[] { "language", "memo" }; } } /** * Use {@link IncludingFieldRetrievableForm} instead of {@link ExcludingFieldRetrievableForm} to simplify fields declaration. * * @author e-ryu * */ @Form public static class PersonFormStep2 extends PersonForm implements IncludingFieldRetrievableForm, StepRepresentableForm { @Override public String[] retrieveRepresentingSteps() { return new String[] { "input-2" }; } @Override public String[] getIncludeFields() { return new String[] { "language", "memo" }; } } @Form public static class CascadeJobFormStep3 extends CascadeJobForm implements StepRepresentableForm { @Override public String[] retrieveRepresentingSteps() { return new String[] { "input-3" }; } } @Form public static class ConfirmStepForm implements StepRepresentableForm { @CascadeFormField private PersonForm personForm = new PersonForm(); @CascadeFormField private CascadeJobForm cascadeJobForm = new CascadeJobForm(); @Override public String[] retrieveRepresentingSteps() { return new String[] { ClassicalFormFlowConstant.STEP_CONFIRM, ClassicalFormFlowConstant.STEP_COMPLETE }; } public PersonForm getPersonForm() { return personForm; } public CascadeJobForm getCascadeJobForm() { return cascadeJobForm; } } // private // show the input comments only when edit mode @AvailableWhenEditOnly(selector = "#input-comment") private String inputComment; /** * {@link StepAwaredValidationTarget} to suggest the validation target for certain step. */ @CascadeFormField @StepAwaredValidationTarget(inputStep1) private PersonFormStep1 personFormStep1; @CascadeFormField @StepAwaredValidationTarget(inputStep2) private PersonFormStep2 personFormStep2; @CascadeFormField @StepAwaredValidationTarget(inputStep3) private CascadeJobFormStep3 cascadeJobFormStep3; @CascadeFormField private ConfirmStepForm confirmStepForm; public static final String inputStep1 = "input-1"; public static final String inputStep2 = "input-2"; public static final String inputStep3 = "input-3"; public SplittedInputForm() { this.personFormStep1 = new PersonFormStep1(); this.personFormStep2 = new PersonFormStep2(); this.cascadeJobFormStep3 = new CascadeJobFormStep3(); this.confirmStepForm = new ConfirmStepForm(); } // getter/setter public void setForms(PersonForm personForm, CascadeJobForm cascadeJobForm) { this.personFormStep1.copyPropertiesFrom(personForm); this.personFormStep2.copyPropertiesFrom(personForm); this.cascadeJobFormStep3.copyPropertiesFrom(cascadeJobForm); } public ConfirmStepForm getForms() { return this.confirmStepForm; } @Override public void mergeInputDataForConfirm(String step, Object inputForm) { SplittedInputForm form = (SplittedInputForm) inputForm; switch (step) { case inputStep1: form.personFormStep1.copyIncludingFieldsTo(this.confirmStepForm.personForm); break; case inputStep2: form.personFormStep2.copyIncludingFieldsTo(this.confirmStepForm.personForm); break; case inputStep3: form.cascadeJobFormStep3.copyPropertiesTo(this.confirmStepForm.cascadeJobForm); break; default: // } } } // @ShowCode:showSplittedFormEnd