/* * Copyright 2011-2013 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. */ package org.primefaces.extensions.showcase.controller.dynaform; import javax.el.ELContext; import javax.el.ValueExpression; import javax.faces.component.EditableValueHolder; import javax.faces.component.UIComponent; import javax.faces.component.UIInput; import javax.faces.component.visit.VisitResult; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.primefaces.context.RequestContext; import org.primefaces.extensions.util.visitcallback.VisitTaskExecutor; /** * Executor to clear all input values of one row in pe:dynaForm. * * @author Oleg Varaksin / last modified by $Author: $ * @version $Revision: 1.0 $ */ public class ClearInputsExecutor implements VisitTaskExecutor { private static final String INDEX_ATTR = "rcIndex"; private ELContext elContext; private RequestContext requestContext; private String[] ids; private int index; public ClearInputsExecutor(ELContext elContext, RequestContext requestContext, String[] ids, int index) { this.elContext = elContext; this.requestContext = requestContext; this.ids = ids; this.index = index; } /** * @see org.primefaces.extensions.util.visitcallback.VisitTaskExecutor */ public VisitResult execute(UIComponent component) { UIInput input = (UIInput) component; String id = input.getId(); // reset UI input.resetValue(); // reset value in bean if ("tableColumn".equals(id) || "inputValue".equals(id)) { ValueExpression ve = input.getValueExpression("value"); if (ve != null) { ve.setValue(elContext, StringUtils.EMPTY); } } else if ("inputOffset".equals(id)) { ValueExpression ve = input.getValueExpression("value"); if (ve != null) { ve.setValue(elContext, 0); } } else if ("valueOperator".equals(id)) { ValueExpression ve = input.getValueExpression("value"); if (ve != null) { ve.setValue(elContext, "eq"); } } // update the corresponding input during response requestContext.update(input.getClientId()); // delete handled id from the list, so that similar inputs should not be executed again ArrayUtils.removeElement(ids, id); return (ids.length != 0) ? VisitResult.REJECT : VisitResult.COMPLETE; } /** * @see org.primefaces.extensions.util.visitcallback.VisitTaskExecutor */ public boolean shouldExecute(UIComponent component) { if ((component instanceof EditableValueHolder) && ArrayUtils.contains(ids, component.getId())) { Integer idx = (Integer) component.getAttributes().get(INDEX_ATTR); if ((idx != null) && (index == idx)) { return true; } } return false; } }