001/**
002 * Copyright 2005-2015 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.rice.krms.impl.ui;
017
018import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
019import org.kuali.rice.core.impl.cache.DistributedCacheManagerDecorator;
020import org.kuali.rice.krad.maintenance.MaintainableImpl;
021import org.kuali.rice.krad.maintenance.MaintenanceDocument;
022import org.kuali.rice.krad.service.KRADServiceLocator;
023import org.kuali.rice.krad.service.SequenceAccessorService;
024import org.kuali.rice.krad.util.KRADConstants;
025import org.kuali.rice.krms.api.KrmsConstants;
026import org.kuali.rice.krms.api.repository.context.ContextDefinition;
027import org.kuali.rice.krms.impl.repository.ContextBo;
028
029import java.util.Map;
030
031/**
032 * {@link org.kuali.rice.krad.maintenance.Maintainable} for the {@link ContextBo}
033 *
034 * @author Kuali Rice Team (rice.collab@kuali.org)
035 * */
036public class ContextMaintainable extends MaintainableImpl {
037
038    private transient SequenceAccessorService sequenceAccessorService;
039
040    @Override
041    public void processAfterNew(MaintenanceDocument document, Map<String, String[]> requestParameters) {
042        ContextBo newContext = (ContextBo) document.getNewMaintainableObject().getDataObject();
043
044        String nextId = getSequenceAccessorService().getNextAvailableSequenceNumber(KrmsMaintenanceConstants.Sequences.CONTEXT, ContextBo.class).toString();
045        newContext.setId(nextId);
046
047        super.processAfterNew(document, requestParameters);    
048    }
049
050    @Override
051    public void processAfterCopy(MaintenanceDocument document, Map<String, String[]> requestParameters) {
052        ContextBo context = (ContextBo) document.getNewMaintainableObject().getDataObject();
053
054        String nextId = getSequenceAccessorService().getNextAvailableSequenceNumber(KrmsMaintenanceConstants.Sequences.CONTEXT, ContextBo.class).toString();
055        context.setId(nextId);
056
057        super.processAfterCopy(document,
058                requestParameters);
059    }
060
061    @Override
062    public void saveDataObject() {
063        super.saveDataObject();
064
065        //flush context cache
066        DistributedCacheManagerDecorator distributedCacheManagerDecorator =
067                GlobalResourceLoader.getService(KrmsConstants.KRMS_DISTRIBUTED_CACHE);
068        distributedCacheManagerDecorator.getCache(ContextDefinition.Cache.NAME).clear();
069    }
070
071    @Override
072    public Object retrieveObjectForEditOrCopy(MaintenanceDocument document, Map<String, String> dataObjectKeys) {
073
074        ContextBo contextBo = (ContextBo) super.retrieveObjectForEditOrCopy(document, dataObjectKeys);
075
076        if (KRADConstants.MAINTENANCE_COPY_ACTION.equals(getMaintenanceAction())) {
077            document.getDocumentHeader().setDocumentDescription("New Context Document");
078
079            contextBo = contextBo.copyContext(" Copy " + System.currentTimeMillis());
080        }
081
082        return contextBo;
083    }
084
085    /**
086     *  Returns the sequenceAssessorService
087     * @return {@link SequenceAccessorService}
088     */
089    private SequenceAccessorService getSequenceAccessorService() {
090        if ( sequenceAccessorService == null ) {
091            sequenceAccessorService = KRADServiceLocator.getSequenceAccessorService();
092        }
093        return sequenceAccessorService;
094    }
095
096}