Java tutorial
/** * Copyright 2004-2014 The Kuali Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ecl2.php * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kuali.kpme.pm.classification.web; import java.util.List; import java.util.Map; import org.apache.commons.collections.CollectionUtils; import org.joda.time.LocalDate; import org.kuali.kpme.core.bo.HrBusinessObject; import org.kuali.kpme.core.bo.HrDataObjectMaintainableImpl; import org.kuali.kpme.core.bo.HrKeyedSetBusinessObject; import org.kuali.kpme.core.bo.HrKeyedSetBusinessObjectMaintainableImpl; import org.kuali.kpme.pm.api.positionflag.PositionFlagContract; import org.kuali.kpme.pm.api.pstnqlfrtype.PstnQlfrTypeContract; import org.kuali.kpme.pm.classification.ClassificationBo; import org.kuali.kpme.pm.classification.ClassificationGroupKeyBo; import org.kuali.kpme.pm.classification.duty.ClassificationDutyBo; import org.kuali.kpme.pm.classification.flag.ClassificationFlagBo; import org.kuali.kpme.pm.classification.qual.ClassificationQualificationBo; import org.kuali.kpme.pm.service.base.PmServiceLocator; import org.kuali.rice.kew.api.document.DocumentStatus; import org.kuali.rice.kew.api.exception.WorkflowException; import org.kuali.rice.krad.bo.DocumentHeader; import org.kuali.rice.krad.maintenance.MaintenanceDocument; import org.kuali.rice.krad.service.KRADServiceLocatorWeb; import org.kuali.rice.krad.uif.container.CollectionGroup; import org.kuali.rice.krad.uif.view.View; import org.kuali.rice.krad.uif.view.ViewModel; import org.kuali.rice.krad.util.GlobalVariables; import org.kuali.rice.krad.web.form.MaintenanceDocumentForm; //public class PositionTypeMaintainableImpl extends HrKeyedSetBusinessObjectMaintainableImpl<PositionTypeBo, PositionTypeGroupKeyBo> { public class ClassificationMaintainableImpl extends HrKeyedSetBusinessObjectMaintainableImpl<ClassificationBo, ClassificationGroupKeyBo> { private static final long serialVersionUID = 1L; @Override public HrBusinessObject getObjectById(String id) { return (HrBusinessObject) PmServiceLocator.getClassificationService().getClassificationById(id); } @Override public void customInactiveSaveLogicNewEffective(HrBusinessObject oldHrObj) { super.customInactiveSaveLogicNewEffective(oldHrObj); ClassificationBo bo = (ClassificationBo) oldHrObj; bo.setQualificationList(null); bo.setDutyList(null); bo.setFlagList(null); } @Override public void customSaveLogic(HrBusinessObject hrObj) { ClassificationBo aClss = (ClassificationBo) hrObj; for (ClassificationQualificationBo aQual : aClss.getQualificationList()) { aQual.setPmPositionClassId(aClss.getPmPositionClassId()); aQual.setPmClassificationQualificationId(null); } for (ClassificationDutyBo aDuty : aClss.getDutyList()) { aDuty.setPmPositionClassId(aClss.getPmPositionClassId()); aDuty.setPmDutyId(null); } for (ClassificationFlagBo aFlag : aClss.getFlagList()) { aFlag.setPmPositionClassId(aClss.getPmPositionClassId()); aFlag.setPmFlagId(null); } super.customSaveLogic(hrObj); } @Override protected boolean performAddLineValidation(ViewModel viewModel, Object newLine, String collectionId, String collectionPath) { boolean isValid = super.performAddLineValidation(viewModel, newLine, collectionId, collectionPath); if (viewModel instanceof MaintenanceDocumentForm) { MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) viewModel; MaintenanceDocument document = maintenanceForm.getDocument(); LocalDate asOfDate = LocalDate.now(); if (document.getNewMaintainableObject().getDataObject() instanceof ClassificationBo) { ClassificationBo classificationObj = (ClassificationBo) document.getNewMaintainableObject() .getDataObject(); if (classificationObj.getEffectiveDate() != null) { asOfDate = classificationObj.getEffectiveLocalDate(); } if (newLine instanceof ClassificationQualificationBo) { ClassificationQualificationBo cQualification = (ClassificationQualificationBo) newLine; PstnQlfrTypeContract qType = PmServiceLocator.getPstnQlfrTypeService() .getPstnQlfrTypeById(cQualification.getQualificationType()); if (qType == null || !qType.isActive()) { GlobalVariables.getMessageMap().putError( "newCollectionLines['document.newMaintainableObject.dataObject.qualificationList'].qualificationType", "error.existence", "Qualification Type '" + cQualification.getQualificationValue() + "'"); isValid = false; return isValid; } } else if (newLine instanceof ClassificationFlagBo) { ClassificationFlagBo classificationFlag = (ClassificationFlagBo) newLine; List<String> flagNames = classificationFlag.getNames(); String categoryNm = classificationFlag.getCategory(); for (String flagName : flagNames) { List<? extends PositionFlagContract> pFlags = PmServiceLocator.getPositionFlagService() .getAllActivePositionFlags(categoryNm, flagName, asOfDate); if (pFlags == null || CollectionUtils.isEmpty(pFlags)) { GlobalVariables.getMessageMap().putError( "newCollectionLines['document.newMaintainableObject.dataObject.flagList'].names", "error.existence", "Flag '" + flagName + "'"); isValid = false; return isValid; } } } } } return isValid; } @Override public void processAfterEdit(MaintenanceDocument document, Map<String, String[]> requestParameters) { document.getDocumentHeader().setDocumentDescription("Edit Classifcation"); super.processAfterEdit(document, requestParameters); } @Override public void processAfterNew(MaintenanceDocument document, Map<String, String[]> requestParameters) { document.getDocumentHeader().setDocumentDescription("New Classifcation"); super.processAfterNew(document, requestParameters); } @Override public void processAfterCopy(MaintenanceDocument document, Map<String, String[]> parameters) { document.getDocumentHeader().setDocumentDescription("New Classifcation"); super.processAfterCopy(document, parameters); } @Override public void doRouteStatusChange(DocumentHeader documentHeader) { ClassificationBo classification = (ClassificationBo) this.getDataObject(); DocumentStatus documentStatus = documentHeader.getWorkflowDocument().getStatus(); //Set document description for real here String docDescription = classification.getPositionClass() + ": " + classification.getClassificationTitle(); if (DocumentStatus.ENROUTE.equals(documentStatus)) { try { MaintenanceDocument md = (MaintenanceDocument) KRADServiceLocatorWeb.getDocumentService() .getByDocumentHeaderId(documentHeader.getDocumentNumber()); md.getDocumentHeader().setDocumentDescription(docDescription); md.getNewMaintainableObject().setDataObject(classification); KRADServiceLocatorWeb.getDocumentService().saveDocument(md); } catch (WorkflowException e) { LOG.error( "caught exception while handling doRouteStatusChange -> documentService.getByDocumentHeaderId(" + documentHeader.getDocumentNumber() + "). ", e); throw new RuntimeException( "caught exception while handling doRouteStatusChange -> documentService.getByDocumentHeaderId(" + documentHeader.getDocumentNumber() + "). ", e); } } } }