blob: 5da30d11ddaaca6a35055907feaaffcf0f63a5d9 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.ofbiz.widget.model;
import java.util.Collection;
import org.apache.ofbiz.widget.model.AbstractModelCondition.And;
import org.apache.ofbiz.widget.model.AbstractModelCondition.IfCompare;
import org.apache.ofbiz.widget.model.AbstractModelCondition.IfCompareField;
import org.apache.ofbiz.widget.model.AbstractModelCondition.IfEmpty;
import org.apache.ofbiz.widget.model.AbstractModelCondition.IfEntityPermission;
import org.apache.ofbiz.widget.model.AbstractModelCondition.IfHasPermission;
import org.apache.ofbiz.widget.model.AbstractModelCondition.IfRegexp;
import org.apache.ofbiz.widget.model.AbstractModelCondition.IfServicePermission;
import org.apache.ofbiz.widget.model.AbstractModelCondition.IfValidateMethod;
import org.apache.ofbiz.widget.model.AbstractModelCondition.Not;
import org.apache.ofbiz.widget.model.AbstractModelCondition.Or;
import org.apache.ofbiz.widget.model.AbstractModelCondition.Xor;
import org.apache.ofbiz.widget.model.ModelScreenCondition.IfEmptySection;
/**
* An object that generates XML from widget models.
* The generated XML is unformatted - if you want to
* "pretty print" the XML, then use a transformer.
*
*/
public class XmlWidgetConditionVisitor extends XmlAbstractWidgetVisitor implements ModelConditionVisitor {
public XmlWidgetConditionVisitor(Appendable writer) {
super(writer);
}
@Override
public void visit(And and) throws Exception {
writer.append("<and>");
visitSubConditions(and.getSubConditions());
writer.append("</and>");
}
@Override
public void visit(IfCompare ifCompare) throws Exception {
writer.append("<if-compare");
visitAttribute("field", ifCompare.getFieldAcsr());
visitAttribute("operator", ifCompare.getOperator());
visitAttribute("value", ifCompare.getValueExdr());
visitAttribute("type", ifCompare.getType());
visitAttribute("format", ifCompare.getFormatExdr());
writer.append("/>");
}
@Override
public void visit(IfCompareField ifCompareField) throws Exception {
writer.append("<if-compare-field");
visitAttribute("field", ifCompareField.getFieldAcsr());
visitAttribute("operator", ifCompareField.getOperator());
visitAttribute("to-field", ifCompareField.getToFieldAcsr());
visitAttribute("type", ifCompareField.getType());
visitAttribute("format", ifCompareField.getFormatExdr());
writer.append("/>");
}
@Override
public void visit(IfEmpty ifEmpty) throws Exception {
writer.append("<if-empty");
visitAttribute("field", ifEmpty.getFieldAcsr());
writer.append("/>");
}
@Override
public void visit(IfEmptySection ifEmptySection) throws Exception {
writer.append("<if-empty-section");
visitAttribute("section-name", ifEmptySection.getSectionExdr());
writer.append("/>");
}
@Override
public void visit(IfEntityPermission ifEntityPermission) throws Exception {
writer.append("<if-entity-permission");
// TODO: Create EntityPermissionChecker visitor
writer.append("/>");
}
@Override
public void visit(IfHasPermission ifHasPermission) throws Exception {
writer.append("<if-has-permission");
visitAttribute("permission", ifHasPermission.getPermissionExdr());
visitAttribute("action", ifHasPermission.getActionExdr());
writer.append("/>");
}
@Override
public void visit(IfRegexp ifRegexp) throws Exception {
writer.append("<if-regexp");
visitAttribute("field", ifRegexp.getFieldAcsr());
visitAttribute("expr", ifRegexp.getExprExdr());
writer.append("/>");
}
@Override
public void visit(IfServicePermission ifServicePermission) throws Exception {
writer.append("<if-service-permission");
visitAttribute("service-name", ifServicePermission.getServiceExdr());
visitAttribute("main-action", ifServicePermission.getActionExdr());
visitAttribute("context-map", ifServicePermission.getCtxMapExdr());
visitAttribute("resource-description", ifServicePermission.getResExdr());
writer.append("/>");
}
@Override
public void visit(IfValidateMethod ifValidateMethod) throws Exception {
writer.append("<if-validate-method");
visitAttribute("field", ifValidateMethod.getFieldAcsr());
visitAttribute("method", ifValidateMethod.getMethodExdr());
visitAttribute("class", ifValidateMethod.getClassExdr());
writer.append("/>");
}
@Override
public void visit(ModelMenuCondition modelMenuCondition) throws Exception {
writer.append("<condition");
visitAttribute("pass-style", modelMenuCondition.getPassStyleExdr());
visitAttribute("disabled-style", modelMenuCondition.getFailStyleExdr());
writer.append("/>");
modelMenuCondition.getCondition().accept(this);
;
writer.append("</condition>");
}
@Override
public void visit(ModelTreeCondition modelTreeCondition) throws Exception {
writer.append("<condition>");
modelTreeCondition.getCondition().accept(this);
writer.append("</condition>");
}
@Override
public void visit(Not not) throws Exception {
writer.append("<not>");
not.getSubCondition().accept(this);
writer.append("</not>");
}
@Override
public void visit(Or or) throws Exception {
writer.append("<or>");
visitSubConditions(or.getSubConditions());
writer.append("</or>");
}
@Override
public void visit(Xor xor) throws Exception {
writer.append("<xor>");
visitSubConditions(xor.getSubConditions());
writer.append("</xor>");
}
private void visitSubConditions(Collection<ModelCondition> subConditions) throws Exception {
for (ModelCondition subCondition : subConditions) {
subCondition.accept(this);
}
}
}