/*
* Copyright 2011-2012 PrimeFaces Extensions.
*
* 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.
*
* $Id$
*/
package org.primefaces.extensions.showcase.controller.dynaform;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.apache.commons.lang3.StringUtils;
import org.primefaces.context.RequestContext;
import org.primefaces.extensions.model.dynaform.DynaFormControl;
import org.primefaces.extensions.model.dynaform.DynaFormLabel;
import org.primefaces.extensions.model.dynaform.DynaFormModel;
import org.primefaces.extensions.model.dynaform.DynaFormRow;
import org.primefaces.extensions.showcase.model.dynaform.FormField;
/**
* AnotherDynaFormController
*
* @author Oleg Varaksin / last modified by $Author$
* @version $Revision$
*/
@ManagedBean
@ViewScoped
public class AnotherDynaFormController implements Serializable {
private static final long serialVersionUID = 20120423L;
private DynaFormModel modelOne;
private DynaFormModel modelTwo;
private boolean showModelOne = true;
public DynaFormModel getModel() {
return (showModelOne ? getModelOne() : getModelTwo());
}
public DynaFormModel getModelOne() {
if (modelOne != null) {
return modelOne;
}
modelOne = new DynaFormModel();
// add rows, labels and editable controls
// set relationship between label and editable controls to support outputLabel with "for" attribute
// 1. regular row
DynaFormRow row = modelOne.createRegularRow();
DynaFormLabel label11 = row.addLabel("Short Name", 1, 1);
DynaFormLabel label12 = row.addLabel("Street", 2, 1);
// 2. regular row
row = modelOne.createRegularRow();
DynaFormControl control21 = row.addControl(new FormField(true), "name", 1, 1);
DynaFormControl control22 = row.addControl(new FormField(false), "address", 2, 1);
label11.setForControl(control21);
label12.setForControl(control22);
// 3. regular row
row = modelOne.createRegularRow();
DynaFormLabel label31 = row.addLabel("Long Name", 1, 1);
DynaFormLabel label32 = row.addLabel("Zip code, city", 2, 1);
// 4. regular row
row = modelOne.createRegularRow();
DynaFormControl control41 = row.addControl(new FormField(true), "name", 1, 1);
DynaFormControl control42 = row.addControl(new FormField(false), "address", 2, 1);
label31.setForControl(control41);
label32.setForControl(control42);
// 5. regular row
row = modelOne.createRegularRow();
row.addControl("Make choice", "separator", 3, 1);
// 6. regular row
row = modelOne.createRegularRow();
row.addControl("PrimeFaces fan?", 1, 1);
row.addControl("Married?", 1, 1);
row.addControl("Children", 1, 1);
// 7. regular row
row = modelOne.createRegularRow();
List<SelectItem> pffan = new ArrayList<SelectItem>();
pffan.add(new SelectItem("Sure", "Sure"));
pffan.add(new SelectItem("Don't know", "Don't know"));
row.addControl(new FormField("Sure", false, pffan), "radiochoice", 1, 1);
row.addControl(new FormField(false, false), "booleanchoice", 1, 1);
List<SelectItem> children = new ArrayList<SelectItem>();
children.add(new SelectItem("No", "No"));
children.add(new SelectItem("1", "1"));
children.add(new SelectItem("2", "2"));
children.add(new SelectItem("More", "More"));
row.addControl(new FormField("No", false, children), "radiochoice", 1, 1);
// 1. extended row
row = modelOne.createExtendedRow();
row.addControl("Notes", 3, 1);
// 2. extended row
row = modelOne.createExtendedRow();
row.addControl(new FormField("Hallo DynaForm!", false), "editor", 3, 1);
return modelOne;
}
public DynaFormModel getModelTwo() {
if (modelTwo != null) {
return modelTwo;
}
modelTwo = new DynaFormModel();
// add rows, labels and editable controls
// set relationship between label and editable controls to support outputLabel with "for" attribute
// 1. regular row
DynaFormRow row = modelTwo.createRegularRow();
row.addControl("Audio Analog Output Volume", "separator", 3, 1);
// 2. regular row
row = modelTwo.createRegularRow();
row.addControl("Port 1", 1, 1);
row.addControl("Port 2", 1, 1);
row.addControl("Port 3", 1, 1);
// 3. regular row
row = modelTwo.createRegularRow();
row.addControl(new FormField(60, false), "audioslider", 1, 1);
row.addControl(new FormField(0, false), "audioslider", 1, 1);
row.addControl(new FormField(0, false), "audioslider", 1, 1);
// 4. regular row
row = modelTwo.createRegularRow();
row.addControl("Audio Digital Output Volume", "separator", 3, 1);
// 5. regular row
row = modelTwo.createRegularRow();
row.addControl("Port 4", 1, 1);
row.addControl("Port 5", 1, 1);
row.addControl("Port 6", 1, 1);
// 6. regular row
row = modelTwo.createRegularRow();
row.addControl(new FormField(10, false), "audioslider", 1, 1);
row.addControl(new FormField(50, false), "audioslider", 1, 1);
row.addControl(new FormField(50, false), "audioslider", 1, 1);
// 7. regular row
row = modelTwo.createRegularRow();
row.addControl("HDMI Output Volume", "separator", 3, 1);
// 8. regular row
row = modelTwo.createRegularRow();
row.addControl("Port 1", 1, 1);
row.addControl("Port 2", 1, 1);
row.addControl("Port 3", 1, 1);
// 9. regular row
row = modelTwo.createRegularRow();
row.addControl(new FormField(20, false), "audioslider", 1, 1);
row.addControl(new FormField(80, false), "audioslider", 1, 1);
row.addControl(new FormField(40, false), "audioslider", 1, 1);
return modelTwo;
}
public String switchModel() {
showModelOne = !showModelOne;
// reset models (simulate new loading)
if (showModelOne) {
modelOne = null;
} else {
modelTwo = null;
}
return null;
}
public List<String> complete(String query) {
List<String> results = new ArrayList<String>();
char letter;
for (letter = 'a'; letter <= 'm'; letter++) {
results.add(query + letter);
}
return results;
}
public String getFormFields() {
DynaFormModel model = (showModelOne ? getModelOne() : getModelTwo());
if (model == null) {
return null;
}
StringBuilder sb = new StringBuilder();
for (DynaFormControl dynaFormControl : model.getControls()) {
if (dynaFormControl.getData() instanceof FormField) {
FormField ff = (FormField) dynaFormControl.getData();
if (ff.getValue() != null && StringUtils.isNotBlank(ff.getValue().toString())) {
sb.append(ff.getValue());
sb.append("<br/>");
}
}
}
return sb.toString();
}
public String submitForm() {
FacesMessage.Severity sev = FacesContext.getCurrentInstance().getMaximumSeverity();
boolean hasErrors = (sev != null && (FacesMessage.SEVERITY_ERROR.compareTo(sev) >= 0));
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.addCallbackParam("isValid", !hasErrors);
return null;
}
}