All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.drools.compiler.kproject.models.QualifierModelImpl Maven / Gradle / Ivy

There is a newer version: 10.0.0
Show newest version
package org.drools.compiler.kproject.models;

import java.util.HashMap;
import java.util.Map;

import org.drools.core.util.AbstractXStreamConverter;
import org.kie.api.builder.model.QualifierModel;

import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

public class QualifierModelImpl implements QualifierModel {
    private String type;
    private String value;
    private Map arguments = new HashMap();

    public QualifierModelImpl() { }

    public QualifierModelImpl(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    private void setType(String type) {
        this.type = type;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public QualifierModel addArgument(String key, String value) {
        arguments.put(key, value);
        return this;
    }

    public Map getArguments() {
        return arguments;
    }

    boolean isSimple() {
        return value == null && arguments.isEmpty();
    }

    public static class QualifierConverter extends AbstractXStreamConverter {

        public QualifierConverter() {
            super(QualifierModelImpl.class);
        }

        public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
            QualifierModelImpl qualifier = (QualifierModelImpl) value;
            writer.addAttribute("type", qualifier.getType());
            if (qualifier.getValue() != null) {
                writer.addAttribute("value", qualifier.getValue());
            } else {
                for (Map.Entry entry : qualifier.getArguments().entrySet()) {
                    writer.startNode("arg");
                    writer.addAttribute("key", entry.getKey());
                    writer.addAttribute("value", entry.getValue());
                    writer.endNode();
                }
            }
        }

        public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
            final QualifierModelImpl qualifier = new QualifierModelImpl();
            qualifier.setType(reader.getAttribute("type"));
            String value = reader.getAttribute("value");

            if (value != null) {
                qualifier.setValue(value);
            } else {
                readNodes( reader, new AbstractXStreamConverter.NodeReader() {
                    public void onNode(HierarchicalStreamReader reader,
                                       String name,
                                       String value) {
                        if ( "arg".equals( name ) ) {
                            qualifier.addArgument(reader.getAttribute("key"), reader.getAttribute("value"));
                        }
                    }
                } );
            }

            return qualifier;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy