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.kew.useroptions;
017    
018    import java.util.ArrayList;
019    import java.util.Collection;
020    import java.util.List;
021    import java.util.Map;
022    import java.util.Properties;
023    import java.util.Map.Entry;
024    
025    import org.kuali.rice.kew.useroptions.dao.ReloadActionListDAO;
026    import org.kuali.rice.kew.useroptions.dao.UserOptionsDAO;
027    import org.kuali.rice.kew.api.KewApiConstants;
028    import org.springframework.transaction.annotation.Transactional;
029    
030    @Transactional
031    public class UserOptionsServiceImpl implements UserOptionsService {
032    
033        private UserOptionsDAO userOptionsDAO;
034        private ReloadActionListDAO reloadActionListDAO;
035    
036        private static final Properties defaultProperties = new Properties();
037    
038        static {
039            defaultProperties.setProperty(KewApiConstants.EMAIL_RMNDR_KEY, KewApiConstants.EMAIL_RMNDR_WEEK_VAL);
040        }
041    
042        private Long getNewOptionIdForActionList() {
043                    return getUserOptionsDAO().getNewOptionIdForActionList();
044            }
045    
046        public List<UserOptions> findByUserQualified(String principalId, String likeString) {
047            if ((principalId == null)) {
048                return new ArrayList<UserOptions>(0);
049            }
050            return this.getUserOptionsDAO().findByUserQualified(principalId, likeString);
051        }
052    
053        public UserOptions findByOptionId(String optionId, String principalId) {
054            if (optionId == null || "".equals(optionId) || principalId == null || "".equals(principalId)) {
055                return null;
056            }
057            return this.getUserOptionsDAO().findByOptionId(optionId, principalId);
058        }
059    
060        public Collection<UserOptions> findByOptionValue(String optionId, String optionValue){
061            return this.getUserOptionsDAO().findByOptionValue(optionId, optionValue);
062        }
063    
064        public Collection<UserOptions> findByWorkflowUser(String principalId) {
065            return this.getUserOptionsDAO().findByWorkflowUser(principalId);
066        }
067    
068        public void save(UserOptions userOptions) {
069            this.getUserOptionsDAO().save(userOptions);
070        }
071        
072        /**
073         * This overridden method saves an option for each optionsMap entry, all for the given principalId
074         * 
075         * @see org.kuali.rice.kew.useroptions.UserOptionsService#save(java.lang.String, java.util.Map)
076         */
077        public void save(String principalId, Map<String,String> optionsMap) {
078            // create a collection of UserOptions and save it
079            if (optionsMap != null && optionsMap.size() > 0) {
080                    List<UserOptions> toSave = new ArrayList<UserOptions>();
081                    for (Entry<String, String> entry : optionsMap.entrySet()) {
082                            UserOptions option = findByOptionId(entry.getKey(), principalId);
083                            if (option == null) {
084                                    option = new UserOptions();
085                                    option.setWorkflowId(principalId);
086                            }
087                            option.setOptionId(entry.getKey());
088                            option.setOptionVal(entry.getValue());
089                            toSave.add(option);
090                    }
091                            getUserOptionsDAO().save(toSave);
092            }
093        }
094        
095        public void deleteUserOptions(UserOptions userOptions) {
096            this.getUserOptionsDAO().deleteUserOptions(userOptions);
097        }
098    
099        public void save(String principalId, String optionId, String optionValue) {
100            UserOptions option = findByOptionId(optionId, principalId);
101            if (option == null) {
102                option = new UserOptions();
103                option.setWorkflowId(principalId);
104            }
105            option.setOptionId(optionId);
106            option.setOptionVal(optionValue);
107            getUserOptionsDAO().save(option);
108        }
109    
110        public boolean refreshActionList(String principalId) {
111            return getReloadActionListDAO().checkAndResetReloadActionListFlag(principalId);
112        }
113    
114        public void saveRefreshUserOption(String principalId) {
115            getReloadActionListDAO().setReloadActionListFlag(principalId);
116        }
117    
118        public UserOptionsDAO getUserOptionsDAO() {
119            return userOptionsDAO;
120        }
121    
122        public void setUserOptionsDAO(UserOptionsDAO optionsDAO) {
123            userOptionsDAO = optionsDAO;
124        }
125        
126        /**
127             * @return the reloadActionListDAO
128             */
129            public ReloadActionListDAO getReloadActionListDAO() {
130                    return this.reloadActionListDAO;
131            }
132            
133            public void setReloadActionListDAO(ReloadActionListDAO rald) {
134                    this.reloadActionListDAO = rald;
135            }
136    
137        @Override
138        public List<UserOptions> retrieveEmailPreferenceUserOptions(String emailSetting) {
139            return this.getUserOptionsDAO().findEmailUserOptionsByType(emailSetting);
140        }
141    }