/* todo(pm): move function away from this controller */ private RemoteTenant initializeView(HttpServletRequest request, ModelAndView mav) { RemoteTenant remoteTenant = null; String operatorId = ServletUtils.getSafeParameter(request, "operatorId", ""); String tenantId = ServletUtils.getSafeParameter(request, "tenantId", ""); String signedInOperatorId = Security.signedInOperatorId(request); Operator signedInOperator = Security.signedInOperator(request); if (signedInOperator != null) { if (Security.isDeveloper(request) && !Strings.isNullOrEmpty(operatorId)) remoteTenant = remoteTenantDAO.get(operatorId, tenantId); else remoteTenant = remoteTenantDAO.get(signedInOperator.getOperatorId(), tenantId); if (remoteTenant != null) mav.addObject("remoteTenant", remoteTenant); } if (Security.isDeveloper(request) && !Strings.isNullOrEmpty(operatorId)) mav.addObject("operatorId", operatorId); else mav.addObject("operatorId", signedInOperatorId); mav.addObject("tenantId", tenantId); mav.addObject("tenants", remoteTenantDAO.getTenantsFromOperator(operatorId)); String apiKey = Operator.DEFAULT_API_KEY; if (signedInOperator != null) { apiKey = signedInOperator.getApiKey(); } if (remoteTenant != null) { Set<String> itemTypes = itemTypeDAO.getTypes(remoteTenant.getId(), true); mav.addObject("availableItemTypes", itemTypes); Set<String> assocTypes = assocTypeDAO.getTypes(remoteTenant.getId(), true); assocTypes.add(""); mav.addObject("availableAssocTypes", assocTypes); } mav.addObject("apiKey", apiKey); mav.addObject("signedIn", Security.isSignedIn(request)); return remoteTenant; }
@Override protected ModelAndView onSubmit( HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { ModelAndView mav = new ModelAndView("page"); RemoteTenant remoteTenant = viewInitializationService.initializeView(request, mav); FileUploadBean bean = (FileUploadBean) command; // cast the bean if (bean == null || bean.getFile() == null || bean.getFile().isEmpty()) { logger.info("no file or empty file was uploaded, aborting"); // well, let's do nothing with the bean for now and return return super.onSubmit(request, response, command, errors); } // check if there's content there MultipartFile file = bean.getFile(); CsvInput csvInput = new CsvInput(";", null); csvInput.setSource(file.getInputStream(), "UTF-8"); List<String> validationErrors = new ArrayList<String>(); List<String> touchedClusters = new ArrayList<String>(); int lineNumber = 0; int numberOfItems = 0; int numberOfTouchedClusters = 0; int tenantId = 0; while (csvInput.hasNext()) { lineNumber++; List<String> fields = null; try { fields = csvInput.next(); // read one line } catch (InconsistentFieldCountException e) { validationErrors.add( "ERROR in line number " + lineNumber + ": column numbers don't equal headerline columns!"); continue; } if (lineNumber == 1) { continue; } // header line boolean lineError = false; if (fields.size() < 3) { validationErrors.add( "ERROR in line number " + lineNumber + ": column numbers smaller then 3!"); continue; } // init the CSV Columns to Java Variables String clusterName = fields.get(0); String itemId = fields.get(1); String itemType = fields.get(2); // the following code is used to validate the CSV line ... if (clusterName.equals("")) { validationErrors.add("ERROR in line number " + lineNumber + ": clusterName is missing."); lineError = true; } if (itemId.equals("")) { validationErrors.add("ERROR in line number " + lineNumber + ": itemId is missing."); lineError = true; } if (itemType.equals("")) { validationErrors.add("ERROR in line number " + lineNumber + ": itemType is missing."); lineError = true; } ClusterVO cluster = clusterService.loadCluster(remoteTenant.getId(), clusterName); if (cluster == null) { validationErrors.add( "ERROR in line number " + lineNumber + ": cluster with name'" + clusterName + "' does not exist. Please create before importing!"); lineError = true; } Integer itemTypeId = itemTypeDAO.getIdOfType(remoteTenant.getId(), itemType); Item item = itemDAO.get(remoteTenant, itemId, itemType); if (null == item) { validationErrors.add( "ERROR in line number " + lineNumber + ": item with id '" + itemId + "' and type '" + itemType + "' does not exist."); lineError = true; } if (lineError) { continue; } Integer itemIdInt = idMappingDAO.lookup(item.getItemId()); try { clusterService.addItemToCluster(remoteTenant.getId(), clusterName, itemIdInt, itemTypeId); } catch (ClusterException ex) { validationErrors.add("ERROR in line number " + lineNumber + ": " + ex.getMessage()); continue; } numberOfItems++; if (!touchedClusters.contains(clusterName)) { numberOfTouchedClusters++; touchedClusters.add(clusterName); } } mav.addObject("tenant", remoteTenant); mav.addObject("page", "clustermanager/import/importResult"); mav.addObject("numberOfItems", numberOfItems); mav.addObject("numberOfTouchedClusters", numberOfTouchedClusters); mav.addObject("validationErrors", validationErrors); return mav; }