/*
* Copyright 2012-2014 the original author or authors.
*
* 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.lightadmin.core.view.tags.form;
import org.lightadmin.core.persistence.metamodel.PersistentPropertyType;
import org.lightadmin.core.view.editor.JspFragmentFieldControl;
import org.springframework.data.mapping.PersistentProperty;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
public class EditControlDispatcherTag extends SimpleTagSupport {
private static final String DISABLED = "disabled";
private PersistentProperty persistentProperty;
private JspFragmentFieldControl customControl;
private JspFragment simpleEditControl;
private JspFragment numberEditControl;
private JspFragment booleanEditControl;
private JspFragment fileEditControl;
private JspFragment dateEditControl;
private JspFragment timeEditControl;
private JspFragment dateTimeEditControl;
private JspFragment n2oneEditControl;
private JspFragment n2manyEditControl;
private JspFragment mapEditControl;
@Override
public void doTag() throws JspException, IOException {
if (customControl == null) {
doWithStandardControl();
} else {
customControl.setParent(this);
customControl.setPersistentProperty(persistentProperty);
customControl.setJspContext(getJspContext());
customControl.doTag();
}
}
private void doWithStandardControl() throws JspException, IOException {
JspContext context = getJspContext();
JspFragment worker;
switch (PersistentPropertyType.forPersistentProperty(persistentProperty)) {
case ASSOC_MULTI:
worker = n2manyEditControl;
break;
case ASSOC:
worker = n2oneEditControl;
break;
case EMBEDDED:
worker = simpleEditControl;
break;
case MAP:
worker = mapEditControl;
break;
case BOOL:
worker = booleanEditControl;
break;
case DATE:
worker = dateEditControl;
break;
case TIME:
worker = timeEditControl;
break;
case DATE_TIME:
worker = dateTimeEditControl;
break;
case NUMBER_INTEGER:
worker = numberEditControl;
break;
case NUMBER_FLOAT:
worker = numberEditControl;
break;
case STRING:
worker = simpleEditControl;
break;
case FILE:
worker = fileEditControl;
break;
default:
worker = simpleEditControl;
break;
}
try {
worker.invoke(null);
} finally {
context.removeAttribute(DISABLED);
}
}
public void setPersistentProperty(PersistentProperty persistentProperty) {
this.persistentProperty = persistentProperty;
}
public void setSimpleEditControl(JspFragment control) {
this.simpleEditControl = control;
}
public void setCustomControl(JspFragmentFieldControl customControl) {
this.customControl = customControl;
}
public void setNumberEditControl(JspFragment control) {
this.numberEditControl = control;
}
public void setBooleanEditControl(JspFragment control) {
this.booleanEditControl = control;
}
public void setDateEditControl(JspFragment control) {
this.dateEditControl = control;
}
public void setN2oneEditControl(JspFragment control) {
this.n2oneEditControl = control;
}
public void setN2manyEditControl(JspFragment control) {
this.n2manyEditControl = control;
}
public void setMapEditControl(JspFragment control) {
this.mapEditControl = control;
}
public void setFileEditControl(final JspFragment fileEditControl) {
this.fileEditControl = fileEditControl;
}
public void setTimeEditControl(JspFragment timeEditControl) {
this.timeEditControl = timeEditControl;
}
public void setDateTimeEditControl(JspFragment dateTimeEditControl) {
this.dateTimeEditControl = dateTimeEditControl;
}
}