Java tutorial
/******************************************************************************* * Copyright (c) 2013, All Rights Reserved. * * Generation Challenge Programme (GCP) * * * This software is licensed for use under the terms of the GNU General Public * License (http://bit.ly/8Ztv8M) and the provisions of Part F of the Generation * Challenge Programme Amended Consortium Agreement (http://bit.ly/KQX1nL) * *******************************************************************************/ package com.efficio.fieldbook.web.nursery.controller; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import org.generationcp.middleware.exceptions.MiddlewareQueryException; import org.generationcp.middleware.manager.GermplasmNameType; import org.generationcp.middleware.pojos.Germplasm; import org.generationcp.middleware.pojos.GermplasmList; import org.generationcp.middleware.pojos.GermplasmListData; import org.generationcp.middleware.pojos.Name; import org.generationcp.middleware.service.api.FieldbookService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.NoSuchMessageException; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.efficio.fieldbook.service.api.WorkbenchService; import com.efficio.fieldbook.web.nursery.bean.AdvancingNursery; import com.efficio.fieldbook.web.nursery.bean.ImportedGermplasm; import com.efficio.fieldbook.web.nursery.bean.UserSelection; import com.efficio.fieldbook.web.nursery.form.AdvancingNurseryForm; import com.efficio.fieldbook.web.util.AppConstants; import com.efficio.fieldbook.web.util.DateUtil; import com.efficio.fieldbook.web.AbstractBaseFieldbookController; /** * The Class SaveAdvanceNurseryController. */ @Controller @RequestMapping(SaveAdvanceNurseryController.URL) public class SaveAdvanceNurseryController extends AbstractBaseFieldbookController { /** The Constant URL. */ public static final String URL = "/NurseryManager/saveAdvanceNursery"; public static final String PAGINATION_TEMPLATE = "/NurseryManager/showSaveAdvanceNurseryPagination"; /** The Constant LOG. */ private static final Logger LOG = LoggerFactory.getLogger(SaveAdvanceNurseryController.class); /** The user selection. */ @Resource private AdvancingNursery advancingNursery; /** The fieldbook service. */ @Resource private com.efficio.fieldbook.service.api.FieldbookService fieldbookService; /** The fieldbook middleware service. */ @Resource private FieldbookService fieldbookMiddlewareService; /** The workbench data manager. */ @Resource private WorkbenchService workbenchService; /** The message source. */ @Resource private ResourceBundleMessageSource messageSource; /** The imported germplasm list. */ private List<ImportedGermplasm> importedGermplasmList; @Resource private UserSelection userSelection; /* (non-Javadoc) * @see com.efficio.fieldbook.web.AbstractBaseFieldbookController#getContentName() */ @Override public String getContentName() { return "NurseryManager/saveAdvanceNursery"; } /** * Shows the screen. * * @param form the form * @param model the model * @param session the session * @return the string * @throws MiddlewareQueryException the middleware query exception */ @RequestMapping(method = RequestMethod.GET) public String show(@ModelAttribute("advancingNurseryform") AdvancingNurseryForm form, Model model, HttpSession session) throws MiddlewareQueryException { //long start = System.currentTimeMillis(); importedGermplasmList = fieldbookService.advanceNursery(advancingNursery, userSelection.getWorkbook()); //System.out.println("end show : "+(System.currentTimeMillis()-start)); userSelection.setImportedAdvancedGermplasmList(importedGermplasmList); form.setGermplasmList(importedGermplasmList); form.setEntries(importedGermplasmList.size()); form.changePage(1); return super.show(model); } /** * Post advance nursery. * * @param form the form * @param model the model * @param session the session * @return the map * @throws MiddlewareQueryException the middleware query exception */ @ResponseBody @RequestMapping(method = RequestMethod.POST) public Map<String, String> postAdvanceNursery(@ModelAttribute("advancingNurseryform") AdvancingNurseryForm form, Model model, HttpSession session) throws MiddlewareQueryException { Map<String, String> resultMap = new HashMap<String, String>(); try { String errorMessages = validate(form); if (errorMessages != null) { resultMap.put("status", "-1"); resultMap.put("errorMessage", errorMessages); return resultMap; } Map<Germplasm, List<Name>> germplasms = new HashMap<Germplasm, List<Name>>(); Map<Germplasm, GermplasmListData> listDataItems = new HashMap<Germplasm, GermplasmListData>(); GermplasmList germplasmList = createNurseryAdvanceGermplasmList(form, germplasms, listDataItems); fieldbookMiddlewareService.saveNurseryAdvanceGermplasmList(germplasms, listDataItems, germplasmList); resultMap.put("status", "1"); } catch (Exception e) { LOG.error(e.getMessage(), e); resultMap.put("status", "-1"); resultMap.put("errorMessage", e.getMessage()); } return resultMap; } /** * Gets the paginated list. * * @param pageNum the page num * @param previewPageNum the preview page num * @param form the form * @param model the model * @return the paginated list */ @RequestMapping(value = "/page/{pageNum}", method = RequestMethod.GET) public String getPaginatedList(@PathVariable int pageNum, @ModelAttribute("advancingNurseryform") AdvancingNurseryForm form, Model model) { List<ImportedGermplasm> importedAdvanceGermplasmList = userSelection.getImportedAdvancedGermplasmList(); if (importedAdvanceGermplasmList != null) { form.setGermplasmList(importedGermplasmList); form.setEntries(importedGermplasmList.size()); form.changePage(pageNum); } return super.showAjaxPage(model, PAGINATION_TEMPLATE); } /** * Validate. * * @param form the form * @return the string */ private String validate(AdvancingNurseryForm form) { Locale locale = LocaleContextHolder.getLocale(); StringBuilder errorMessages = null; //Required Field Checks StringBuilder requiredFields = null; // Advance list name and description are required if (StringUtils.isBlank(form.getNurseryAdvanceName())) { requiredFields = requiredFields == null ? new StringBuilder() : requiredFields.append(", "); requiredFields.append( messageSource.getMessage("nursery.save.advance.nursery.nursery.advance.name", null, locale)); } if (StringUtils.isBlank(form.getNurseryAdvanceDescription())) { requiredFields = requiredFields == null ? new StringBuilder() : requiredFields.append(", "); requiredFields .append(messageSource.getMessage("nursery.save.advance.nursery.description", null, locale)); } if (requiredFields != null) { errorMessages = errorMessages == null ? new StringBuilder() : errorMessages.append("<br />"); errorMessages.append(messageSource.getMessage("error.mandatory.field", new String[] { requiredFields.toString() }, locale)); } // Advance list name must not exist in listnms try { if (fieldbookMiddlewareService.getGermplasmListByName(form.getNurseryAdvanceName()) != null) { if (errorMessages == null) { errorMessages = new StringBuilder(); } if (!errorMessages.toString().contains(messageSource .getMessage("nursery.save.advance.nursery.nursery.advance.name", null, locale))) { errorMessages.append("<br />"); errorMessages.append(messageSource .getMessage("nursery.save.advance.error.advance.nursery.exists", null, locale)); } } } catch (NoSuchMessageException e) { LOG.error(e.getMessage(), e); } catch (MiddlewareQueryException e) { LOG.error(e.getMessage(), e); } // Advance list table should not be empty if (importedGermplasmList == null || importedGermplasmList.isEmpty()) { errorMessages = errorMessages == null ? new StringBuilder() : errorMessages.append("<br />"); errorMessages .append(messageSource.getMessage("nursery.save.advance.error.row.list.empty", null, locale)); } return errorMessages != null ? errorMessages.toString() : null; } /** * Creates the nursery advance germplasm list. * * @param form the form * @param germplasms the germplasms * @param listDataItems the list data items * @return the germplasm list */ private GermplasmList createNurseryAdvanceGermplasmList(AdvancingNurseryForm form, Map<Germplasm, List<Name>> germplasms, Map<Germplasm, GermplasmListData> listDataItems) { // Create germplasm list String listName = form.getNurseryAdvanceName(); String harvestDate = advancingNursery.getHarvestDate(); String listType = AppConstants.GERMPLASM_LIST_TYPE_HARVEST.getString(); Integer userId = 0; try { userId = workbenchService.getCurrentIbdbUserId(getCurrentProjectId()); if (userId == null) { userId = 0; } } catch (MiddlewareQueryException e) { LOG.error(e.getMessage(), e); } String description = form.getNurseryAdvanceDescription(); GermplasmList parent = null; //lhierarchy = 0 Integer status = 1; GermplasmList germplasmList = new GermplasmList(null, listName, Long.valueOf(harvestDate), listType, userId, description, parent, status); //Common germplasm fields Integer lgid = 0; Integer locationId = 0; String harvestLocationId = advancingNursery.getHarvestLocationId(); if (harvestLocationId != null && !harvestLocationId.equals("")) { locationId = Integer.valueOf(harvestLocationId); } Integer gDate = Integer.valueOf(DateUtil.getCurrentDate()); //Common germplasm list data fields Integer listDataId = null; Integer listDataStatus = 0; //lrstatus = 0 Integer localRecordId = 0; //llrecid = 0 //Common name fields Integer nDate = gDate; Integer nRef = 0; // Create germplasms to save - Map<Germplasm, List<Name>> for (ImportedGermplasm importedGermplasm : importedGermplasmList) { Integer gid = null; if (importedGermplasm.getGid() != null) { gid = Integer.valueOf(importedGermplasm.getGid()); } Integer methodId = importedGermplasm.getBreedingMethodId(); Integer gnpgs = importedGermplasm.getGnpgs(); Integer gpid1 = importedGermplasm.getGpid1(); Integer gpid2 = importedGermplasm.getGpid2(); List<Name> names = importedGermplasm.getNames(); Name preferredName = names.get(0); for (Name name : names) { name.setLocationId(locationId); name.setNdate(nDate); name.setUserId(userId); name.setReferenceId(nRef); // If crop == CIMMYT WHEAT (crop with more than one name saved) // Germplasm name is the Names entry with NType = 1027, NVal = table.desig, NStat = 0 if (names.size() > 0 && name.getNstat() == 0 && name.getTypeId() == GermplasmNameType.UNRESOLVED_NAME.getUserDefinedFieldID()) { preferredName = name; } } if (names.size() > 1) { for (Name name : names) { if (name.getTypeId() == GermplasmNameType.UNRESOLVED_NAME.getUserDefinedFieldID() && name.getNstat() == 0) { preferredName = name; break; } } } Germplasm germplasm = new Germplasm(gid, methodId, gnpgs, gpid1, gpid2, userId, lgid, locationId, gDate, preferredName); germplasms.put(germplasm, names); // Create list data items to save - Map<Germplasm, GermplasmListData> Integer entryId = importedGermplasm.getEntryId(); String entryCode = importedGermplasm.getEntryCode(); String seedSource = importedGermplasm.getSource(); String designation = importedGermplasm.getDesig(); String groupName = importedGermplasm.getCross(); if (groupName == null) { groupName = "-"; // Default value if null } GermplasmListData listData = new GermplasmListData(listDataId, germplasmList, gid, entryId, entryCode, seedSource, designation, groupName, listDataStatus, localRecordId); listDataItems.put(germplasm, listData); } return germplasmList; } }