private ListModel<String> createListModel(IModel<ProjectVersion> parent) { ProjectVersion projectVersion = parent.getObject(); EList<ProjectLocale> children = projectVersion.getChildren(); List<String> list = new ArrayList<String>(children.size()); for (ProjectLocale projectLocale : children) { if(projectLocale.isMaster()) //don't allow to delete the template continue; list.add(projectLocale.getName()); } return new ListModel<String>(list); }
/** * calculates a diff between existing locales and selected ones. * Deletes and adds ProjectLocales as needed * @param object * @param input */ protected void applyLocaleList(List<String> object, IModel<ProjectVersion> input) { Set<String> locales = new HashSet<String>(object); ProjectVersion version = input.getObject(); List<ProjectLocale> projectLocales = version.getChildren(); List<ProjectLocale> toDelete = new ArrayList<>(); for (Iterator<ProjectLocale> iterator = projectLocales.iterator(); iterator.hasNext();) { ProjectLocale projectLocale = iterator.next(); if(projectLocale.isMaster()) continue; if(!locales.remove(projectLocale.getName())) { toDelete.add(projectLocale); } } for (ProjectLocale projectLocale : toDelete) { LOGGER.info("Deleting ProjectLocale {} from {}",projectLocale.getName(), version.fullPath()); EcoreUtil.delete(projectLocale, true); } for (String locale : locales) { ProjectLocale projectLocale = PropertiesFactory.eINSTANCE.createProjectLocale(); projectLocale.setLocale((Locale) PropertiesFactory.eINSTANCE.createFromString(PropertiesPackage.Literals.LOCALE, locale)); LOGGER.info("Adding ProjectLocale {} to {}",projectLocale.getName(), version.fullPath()); PropertyResourceUtil.addNewLocale(projectLocale, input.getObject()); } }