Package org.jboss.as.console.mbui.marshall

Source Code of org.jboss.as.console.mbui.marshall.Marshaller

package org.jboss.as.console.mbui.marshall;

import org.jboss.as.console.mbui.model.mapping.DMRMapping;
import org.jboss.dmr.client.ModelNode;
import org.useware.kernel.model.Dialog;
import org.useware.kernel.model.mapping.MappingType;
import org.useware.kernel.model.structure.Container;
import org.useware.kernel.model.structure.InteractionUnit;
import org.useware.kernel.model.structure.builder.InteractionUnitVisitor;

import java.util.Date;
import java.util.Stack;

/**
* @author Heiko Braun
* @date 6/13/13
*/
public class Marshaller {

    public ModelNode marshall(Dialog dialog) {

        DMRMarshallRoutine marshaller = new DMRMarshallRoutine(dialog);
        dialog.getInterfaceModel().accept(marshaller);
        return marshaller.getResult();
    }

    class DMRMarshallRoutine implements InteractionUnitVisitor
    {

        private ModelNode result;
        private ModelNode currentNode = null;

        Stack<ModelNode> stack = new Stack<ModelNode>();

        DMRMarshallRoutine(Dialog dialog) {
            result = new ModelNode();
            result.get("dialog").set(dialog.getId().toString());
            result.get("rev").set(new Date().toString());
        }

        ModelNode getResult() {
            return result;
        }

        @Override
        public void startVisit(Container container) {
            ModelNode containerNode = new ModelNode();
            containerNode.get("type").set("container");

            if(container.getStereotype()!=null)
                containerNode.get("stereo-type").set(container.getStereotype().toString());


            if(container.getTemporalOperator()!=null) {
                containerNode.get("operator").set(container.getTemporalOperator().toString());
            }

            marshallMapping(container, containerNode);

            stack.push(containerNode);
        }

        @Override
        public void visit(InteractionUnit unit) {
            ModelNode item = new ModelNode();
            item.get("type").set(resolveType(unit));

            if(unit.getStereotype()!=null)
                item.get("stereo-type").set(unit.getStereotype().toString());

            marshallMapping(unit, item);

            if(!stack.isEmpty())
            {
                stack.peek().get("child:"+unit.getId().getLocalPart()).set(item);
            }
        }

        @Override
        public void endVisit(Container container) {
            if(stack.size()>1){
                ModelNode containerNode = stack.pop();
               stack.peek().get("unit:"+container.getId().getLocalPart()).set(containerNode);
            }
            else if(stack.size()==1)
            {
                ModelNode containerNode = stack.pop();
                result.get("structure").set(containerNode);
            }
        }
    }

    private String resolveType(InteractionUnit interactionUnit) {
        return interactionUnit.getClass().getName().toLowerCase();
    }

    private void marshallMapping(InteractionUnit unit, ModelNode target)
    {
        if(unit.hasMapping(MappingType.DMR))
        {
            ModelNode mappingNode = new ModelNode();
            DMRMapping mapping = (DMRMapping) unit.getMapping(MappingType.DMR);
            mappingNode.get("type").set("dmr");

            if(mapping.getAddress()!=null)
                mappingNode.get("address").set(mapping.getAddress());

            target.get("mapping").set(mappingNode);
        }
    }
}
TOP

Related Classes of org.jboss.as.console.mbui.marshall.Marshaller

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.