001    /**
002     * Copyright 2005-2014 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.edl.impl;
017    
018    import org.apache.log4j.Logger;
019    import org.kuali.rice.core.api.util.xml.XmlJotter;
020    import org.kuali.rice.edl.impl.bo.EDocLiteAssociation;
021    import org.kuali.rice.kew.api.WorkflowRuntimeException;
022    import org.w3c.dom.Document;
023    import org.w3c.dom.Element;
024    
025    import javax.xml.transform.Templates;
026    import java.util.Iterator;
027    import java.util.Map;
028    
029    
030    /**
031     * Responsible for notifying components associated with a particular EDL definition.
032     * 
033     * @author Kuali Rice Team (rice.collab@kuali.org)
034     */
035    public class EDLController {
036            
037            private static final Logger LOG = Logger.getLogger(EDLController.class);
038    
039            private EDocLiteAssociation edocLiteAssociation;
040            private Templates style;
041            private Map configProcessors;
042            private Map preProcessors;
043            private Map postProcessors;
044            private Map stateComponents;
045            private EDLGlobalConfig edlGlobalConfig;
046            private Document defaultDOM;
047            private EDLContext edlContext;
048    
049            public Document notifyComponents() {
050                    
051                    try {
052                            updateDOMWithProcessors(defaultDOM, preProcessors);
053                            updateDOMWithProcessors(defaultDOM, stateComponents);
054                            updateDOMWithProcessors(defaultDOM, configProcessors);
055                            updateDOMWithProcessors(defaultDOM, stateComponents);
056                            updateDOMWithProcessors(defaultDOM, postProcessors);    
057                    } catch (Exception e) {
058                            throw new WorkflowRuntimeException(e);
059                    }
060                    
061                    
062                    return defaultDOM;
063            }
064            
065            private void updateDOMWithProcessors(Document dom, Map processors) throws Exception {
066                    
067                    for (Iterator iter = processors.entrySet().iterator(); iter.hasNext();) {
068                            Map.Entry processorEntry = (Map.Entry) iter.next();
069                            Element configElement = (Element)processorEntry.getKey();
070                            EDLModelComponent eldModelComp = (EDLModelComponent)((Class)processorEntry.getValue()).newInstance();
071                            eldModelComp.updateDOM(dom, configElement, edlContext);
072                            if (LOG.isDebugEnabled()) {
073                                    LOG.debug("Just completed notification to component " + eldModelComp + " doc content looks like. " + XmlJotter.jotNode(dom));
074                            }
075                            
076                    }
077            }
078    
079            public Map getConfigProcessors() {
080                    return configProcessors;
081            }
082            public void setConfigProcessors(Map configProcessors) {
083                    this.configProcessors = configProcessors;
084            }
085            public EDLGlobalConfig getEdlGlobalConfig() {
086                    return edlGlobalConfig;
087            }
088            public void setEdlGlobalConfig(EDLGlobalConfig edlConfig) {
089                    this.edlGlobalConfig = edlConfig;
090            }
091            public Templates getStyle() {
092                    return style;
093            }
094            public void setStyle(Templates style) {
095                    this.style = style;
096            }
097            public EDocLiteAssociation getEdocLiteAssociation() {
098                    return edocLiteAssociation;
099            }
100            public void setEdocLiteAssociation(EDocLiteAssociation edocLiteAssociation) {
101                    this.edocLiteAssociation = edocLiteAssociation;
102            }
103            public Document getDefaultDOM() {
104                    return defaultDOM;
105            }
106            public void setDefaultDOM(Document defaultDOM) {
107                    this.defaultDOM = defaultDOM;
108            }
109            public EDLContext getEdlContext() {
110                    return edlContext;
111            }
112            public void setEdlContext(EDLContext edlContext) {
113                    this.edlContext = edlContext;
114            }
115    
116            public Map getPostProcessors() {
117                    return postProcessors;
118            }
119    
120            public void setPostProcessors(Map postProcessors) {
121                    this.postProcessors = postProcessors;
122            }
123    
124            public Map getPreProcessors() {
125                    return preProcessors;
126            }
127    
128            public void setPreProcessors(Map preProcessors) {
129                    this.preProcessors = preProcessors;
130            }
131    
132            public Map getStateComponents() {
133                    return stateComponents;
134            }
135    
136            public void setStateComponents(Map stateComponents) {
137                    this.stateComponents = stateComponents;
138            }
139    }