001 /**
002 * Copyright 2004-2013 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.hr.time.clock.location.service;
017
018 import java.util.List;
019 import java.util.Map;
020
021 import org.apache.commons.lang.StringUtils;
022 import org.kuali.hr.core.cache.CacheUtils;
023 import org.kuali.hr.time.HrBusinessObject;
024 import org.kuali.hr.time.clock.location.ClockLocationRule;
025 import org.kuali.hr.time.clock.location.ClockLocationRuleIpAddress;
026 import org.kuali.hr.time.clock.location.validation.ClockLocationRuleRule;
027 import org.kuali.hr.time.service.base.TkServiceLocator;
028 import org.kuali.hr.time.util.HrBusinessObjectMaintainableImpl;
029 import org.kuali.rice.kns.document.MaintenanceDocument;
030 import org.kuali.rice.krad.service.KRADServiceLocator;
031 import org.kuali.rice.krad.util.GlobalVariables;
032 import org.kuali.rice.krad.util.KRADConstants;
033
034 /**
035 *
036 * Used to modify behavior of Clock Location Maintenance page
037 *
038 */
039 public class ClockLocationMaintainableImpl extends HrBusinessObjectMaintainableImpl {
040
041 /**
042 *
043 */
044 private static final long serialVersionUID = 1L;
045
046 /**
047 * Used to swap out wildcard values for numeric types
048 */
049 @Override
050 public Map populateBusinessObject(Map<String, String> fieldValues,
051 MaintenanceDocument maintenanceDocument, String methodToCall) {
052 if (fieldValues.containsKey("workArea")
053 && StringUtils.equals(fieldValues.get("workArea"), "%")) {
054 fieldValues.put("workArea", "-1");
055 }
056 if (fieldValues.containsKey("jobNumber")
057 && StringUtils.equals(fieldValues.get("jobNumber"), "%")) {
058 fieldValues.put("jobNumber", "-1");
059 }
060 return super.populateBusinessObject(fieldValues, maintenanceDocument,
061 methodToCall);
062 }
063
064 @Override
065 public void processAfterEdit(MaintenanceDocument document,
066 Map<String, String[]> parameters) {
067 ClockLocationRule clockLocationRule = (ClockLocationRule) this
068 .getBusinessObject();
069 List<ClockLocationRule> clockLocationRuleList = TkServiceLocator
070 .getClockLocationRuleService()
071 .getNewerVersionClockLocationRule(clockLocationRule.getDept(),
072 clockLocationRule.getWorkArea(),
073 clockLocationRule.getPrincipalId(),
074 clockLocationRule.getJobNumber(),
075 clockLocationRule.getEffectiveDate());
076 if (clockLocationRuleList.size() > 0) {
077 GlobalVariables.getMessageMap().putWarningForSectionId(
078 "Clock Location Rule Maintenance",
079 "clocklocationrule.newer.exists", null);
080 }
081 super.processAfterEdit(document, parameters);
082 }
083
084 @Override
085 public HrBusinessObject getObjectById(String id) {
086 return TkServiceLocator.getClockLocationRuleService().getClockLocationRule(id);
087 }
088
089 @Override
090 public void addNewLineToCollection( String collectionName ) {
091 // need to validate each new ipAddress
092 if (collectionName.equals("ipAddresses")) {
093 ClockLocationRuleIpAddress anIP = (ClockLocationRuleIpAddress)newCollectionLines.get(collectionName );
094 if(!ClockLocationRuleRule.validateIpAddress(anIP.getIpAddress())) {
095 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.MAINTENANCE_NEW_MAINTAINABLE +"ipAddresses",
096 "ipaddress.invalid.format",anIP.getIpAddress());
097 return;
098 }
099 }
100 super.addNewLineToCollection(collectionName);
101 }
102
103 @Override
104 public void saveBusinessObject() {
105 ClockLocationRule clr = (ClockLocationRule) this.getBusinessObject();
106 List<ClockLocationRuleIpAddress> ips = clr.getIpAddresses();
107 super.saveBusinessObject();
108 if(!ips.isEmpty()) {
109 for(ClockLocationRuleIpAddress ipAddress : ips) {
110 ipAddress.setTkClockLocationRuleId(clr.getTkClockLocationRuleId());
111 KRADServiceLocator.getBusinessObjectService().save(ipAddress);
112 }
113 CacheUtils.flushCache(ClockLocationRule.CACHE_NAME);
114 }
115
116 }
117 }