001/*
002 * Copyright 2006 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 */
016package org.kuali.ole.coa.document.validation.impl;
017
018import org.kuali.ole.coa.businessobject.ProjectCode;
019import org.kuali.rice.kns.document.MaintenanceDocument;
020import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
021/**
022 * This class implements the business rules specific to the {@link ProjectCode} Maintenance Document.
023 */
024public class ProjectCodeRule extends MaintenanceDocumentRuleBase {
025
026    protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ProjectCodeRule.class);
027
028    protected ProjectCode oldProjectCode;
029    protected ProjectCode newProjectCode;
030
031    public ProjectCodeRule() {
032        super();
033    }
034
035    /**
036     * This performs rules checks on document approve
037     * <ul>
038     * <li>{@link ProjectCodeRule#checkExistenceAndActive()}</li>
039     * </ul>
040     * This rule fails on business rule failures
041     * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomApproveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
042     */
043    protected boolean processCustomApproveDocumentBusinessRules(MaintenanceDocument document) {
044
045        LOG.debug("Entering processCustomApproveDocumentBusinessRules()");
046
047        // check that all sub-objects whose keys are specified have matching objects in the db
048        checkExistenceAndActive();
049
050        return true;
051    }
052
053    /**
054     * This performs rules checks on document route
055     * <ul>
056     * <li>{@link ProjectCodeRule#checkExistenceAndActive()}</li>
057     * </ul>
058     * This rule fails on business rule failures
059     * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
060     */
061    protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
062
063        boolean success = true;
064
065        LOG.debug("Entering processCustomRouteDocumentBusinessRules()");
066
067        // check that all sub-objects whose keys are specified have matching objects in the db
068        success &= checkExistenceAndActive();
069
070        return success;
071    }
072
073    /**
074     * This performs rules checks on document save
075     * <ul>
076     * <li>{@link ProjectCodeRule#checkExistenceAndActive()}</li>
077     * </ul>
078     * This rule does not fail on business rule failures
079     * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomSaveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
080     */
081    protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
082
083        boolean success = true;
084
085        LOG.debug("Entering processCustomSaveDocumentBusinessRules()");
086
087        // check that all sub-objects whose keys are specified have matching objects in the db
088        success &= checkExistenceAndActive();
089
090        return success;
091    }
092
093    /**
094     * This method sets the convenience objects like newProjectCode and oldProjectCode, so you have short and easy handles to the new and
095     * old objects contained in the maintenance document. It also calls the BusinessObjectBase.refresh(), which will attempt to load
096     * all sub-objects from the DB by their primary keys, if available.
097     * 
098     * @param document - the maintenanceDocument being evaluated
099     */
100    public void setupConvenienceObjects() {
101
102        // setup oldAccount convenience objects, make sure all possible sub-objects are populated
103        oldProjectCode = (ProjectCode) super.getOldBo();
104
105        // setup newAccount convenience objects, make sure all possible sub-objects are populated
106        newProjectCode = (ProjectCode) super.getNewBo();
107    }
108
109    /**
110     * 
111     * This method currently doesn't do anything
112     * @return true
113     */
114    protected boolean checkExistenceAndActive() {
115
116        LOG.debug("Entering checkExistenceAndActive()");
117        boolean success = true;
118
119        return success;
120    }
121
122}