001    /**
002     * Copyright 2005-2012 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.krad.rules.rule.event;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.apache.log4j.Logger;
020    import org.kuali.rice.krad.document.Document;
021    import org.kuali.rice.krad.util.KRADPropertyConstants;
022    
023    import java.util.ArrayList;
024    import java.util.List;
025    
026    /**
027     * Abstract superclass for document-related events.
028     */
029    abstract public class KualiDocumentEventBase implements KualiDocumentEvent {
030        private static final Logger LOG = Logger.getLogger(KualiDocumentEventBase.class);
031    
032        private final String description;
033        private final String errorPathPrefix;
034        protected Document document;
035    
036        /**
037         * 
038         * As a general rule, business rule classes should not change the original object. This constructor was created so that
039         * PreRulesCheckEvent, a UI level rule checker, can make changes.
040         * 
041         * @param description
042         * @param errorPathPrefix
043         */
044        protected KualiDocumentEventBase(String description, String errorPathPrefix) {
045            this.description = description;
046            this.errorPathPrefix = errorPathPrefix;
047        }
048    
049        /**
050         * Constructs a KualiEvent with the given description and errorPathPrefix for the given document.
051         * 
052         * @param errorPathPrefix
053         * @param document
054         * @param description
055         */
056        public KualiDocumentEventBase(String description, String errorPathPrefix, Document document) {
057            this.description = description;
058            this.errorPathPrefix = errorPathPrefix;
059            this.document = document;
060    
061            LOG.debug(description);
062        }
063    
064    
065        /**
066         * @see org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent#getDocument()
067         */
068        public final Document getDocument() {
069            return document;
070        }
071    
072        /**
073         * @see org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent#getName()
074         */
075        public final String getName() {
076            return this.getClass().getName();
077        }
078    
079        /**
080         * @return a description of this event
081         */
082        public final String getDescription() {
083            return description;
084        }
085    
086        /**
087         * @see org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent#getErrorPathPrefix()
088         */
089        public String getErrorPathPrefix() {
090            return errorPathPrefix;
091        }
092    
093    
094        /**
095         * @see java.lang.Object#toString()
096         */
097        @Override
098        public String toString() {
099            return getName();
100        }
101    
102        /**
103         * @see org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent#validate()
104         */
105        public void validate() {
106            if (getDocument() == null) {
107                throw new IllegalArgumentException("invalid (null) event document");
108            }
109        }
110    
111        /**
112         * @see org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent#generateEvents()
113         */
114        public List<KualiDocumentEvent> generateEvents() {
115            return new ArrayList<KualiDocumentEvent>();
116        }
117    
118        /**
119         * Provides null-safe access to the documentNumber of the given document.
120         * 
121         * @param document
122         * @return String containing the documentNumber of the given document, or some indication of why the documentNumber isn't
123         *         accessible
124         */
125        protected static String getDocumentId(Document document) {
126            String docId = "(null document)";
127    
128            if (document != null) {
129                String documentNumber = document.getDocumentNumber();
130                if (StringUtils.isBlank(documentNumber)) {
131                    docId = "(blank " + KRADPropertyConstants.DOCUMENT_NUMBER + ")";
132                }
133                else {
134                    docId = documentNumber;
135                }
136            }
137    
138            return docId;
139        }
140    }