@Override protected void onInitialize() { super.onInitialize(); InjectorHolder.getInjector().inject(this); modelName.setObject(_user.getName()); addFeedback(this, "feedback"); Form<String> form = new Form<String>("form") { @Override protected void onSubmit() { onSubmitForm(); } }; Button cancel = new Button("cancel") { public void onSubmit() { setResponsePage(UserOverviewPage.class); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); addTextInputField(form, "username", modelName, true); form.add(new PasswordTextField("password1", modelPassword1)); form.add(new PasswordTextField("password2", modelPassword2)); form.add(new Button("submit")); List<UserRoles> current = new ArrayList<UserRoles>(); current.add(UserRoles.NONE); modelRoles = new MyModel(current); List<? extends UserRoles> choices = UserRoles.asList(); ListMultipleChoice<UserRoles> roleSelect = new ListMultipleChoice<UserRoles>("roleSelect", modelRoles, choices); form.add(roleSelect); List<String> providers = facade.availableProviders(); selectedProvider = providers.get(0); ListChoice<String> providerSelect = new ListChoice<String>( "providerSelect", new PropertyModel<String>(this, "selectedProvider"), providers); form.add(providerSelect); add(form); }
public void initialiseDetailForm() { customFieldGroupTxtFld = new TextField<String>("customFieldGroup.name"); description = new TextArea<String>("customFieldGroup.description"); publishedStatusCb = new CheckBox("customFieldGroup.published"); publishedStatusCb.add( new AjaxFormComponentUpdatingBehavior("onChange") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { // Check what was selected and then toggle if (publishedStatusCb.getModelObject().booleanValue()) { error("Custom Fields may not be added or removed once the Data Set is published."); target.add(feedBackPanel); } else { target.add(feedBackPanel); } } }); fileUploadField = new FileUploadField("customFieldFileUploadField"); fileUploadButton = new Button("uploadCustomFieldField") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setSelectedCustomFieldsFromFile(); } }; fileUploadButton.setDefaultFormProcessing(false); if (addCustomFieldDisplayList) { initCustomFieldDataListPanel(); } else { arkCrudContainerVO .getWmcForCustomFieldDisplayListPanel() .addOrReplace(new EmptyPanel("cfdListPanel")); } initCustomFieldPalette(); addDetailFormComponents(); attachValidators(); }
private Button novoBotaoConsultar() { Button btnConsultar = new Button("btnConsultar") { @Override public void onSubmit() { if (edtDataDeReferencia.getValue().isEmpty()) { error("A data de referência deve ser informada."); } else { try { transacoes = AutorizadorAdapter.get() .consultaTransacoes(UtilHelper.getData(edtDataDeReferencia.getValue())); } catch (Exception e) { error(e.getMessage()); } } } }; btnConsultar.setDefaultFormProcessing(false); return btnConsultar; }
@Override protected void onInitialize() { super.onInitialize(); add(new FeedbackPanel("feedback").setOutputMarkupId(true)); _form = new Form<String>("form") { @Override protected void onSubmit() { onSubmitForm(); } }; Button cancel = new Button("cancel") { public void onSubmit() { onCancel(); } }; cancel.setDefaultFormProcessing(false); _form.add(cancel); _form.add(new Button("submit")); initForm(_form); add(_form); }
@Override public void onInitialize() { super.onInitialize(); // get settings data final GradebookInformation settings = this.businessService.getGradebookSettings(); // setup page model final GbSettings gbSettings = new GbSettings(settings); final CompoundPropertyModel<GbSettings> formModel = new CompoundPropertyModel<GbSettings>(gbSettings); final SettingsGradeEntryPanel gradeEntryPanel = new SettingsGradeEntryPanel("gradeEntryPanel", formModel, gradeEntryExpanded); final SettingsGradeReleasePanel gradeReleasePanel = new SettingsGradeReleasePanel("gradeReleasePanel", formModel, gradeReleaseExpanded); final SettingsCategoryPanel categoryPanel = new SettingsCategoryPanel("categoryPanel", formModel, categoryExpanded); final SettingsGradingSchemaPanel gradingSchemaPanel = new SettingsGradingSchemaPanel("gradingSchemaPanel", formModel, gradingSchemaExpanded); // form final Form<GbSettings> form = new Form<GbSettings>("form", formModel) { private static final long serialVersionUID = 1L; @Override public void onValidate() { super.onValidate(); final GbSettings model = getModelObject(); final List<CategoryDefinition> categories = model.getGradebookInformation().getCategories(); // validate the categories if (model.getGradebookInformation().getCategoryType() == GbCategoryType.WEIGHTED_CATEGORY.getValue()) { BigDecimal totalWeight = BigDecimal.ZERO; for (final CategoryDefinition cat : categories) { if (cat.getWeight() == null) { error(getString("settingspage.update.failure.categorymissingweight")); } else { // extra credit items do not participate in the weightings, so exclude from the // tally if (!cat.isExtraCredit()) { totalWeight = totalWeight.add(BigDecimal.valueOf(cat.getWeight())); } } } if (totalWeight.compareTo(BigDecimal.ONE) != 0) { error(getString("settingspage.update.failure.categoryweighttotals")); } } // if categories and weighting selected AND if course grade display points was selected, // give error message if (model.getGradebookInformation().getCategoryType() == GbCategoryType.WEIGHTED_CATEGORY.getValue() && model.getGradebookInformation().isCourseGradeDisplayed() && model.getGradebookInformation().isCoursePointsDisplayed()) { error(getString("settingspage.displaycoursegrade.incompatible")); } // validate the course grade display settings if (model.getGradebookInformation().isCourseGradeDisplayed()) { int displayOptions = 0; if (model.getGradebookInformation().isCourseLetterGradeDisplayed()) { displayOptions++; } if (model.getGradebookInformation().isCourseAverageDisplayed()) { displayOptions++; } if (model.getGradebookInformation().isCoursePointsDisplayed()) { displayOptions++; } if (displayOptions == 0) { error(getString("settingspage.displaycoursegrade.notenough")); } } } @Override public void onSubmit() { final GbSettings model = getModelObject(); Page responsePage = new SettingsPage( gradeEntryPanel.isExpanded(), gradeReleasePanel.isExpanded(), categoryPanel.isExpanded(), gradingSchemaPanel.isExpanded()); // update settings try { SettingsPage.this.businessService.updateGradebookSettings( model.getGradebookInformation()); getSession().info(getString("settingspage.update.success")); } catch (ConflictingCategoryNameException e) { getSession().error(getString("settingspage.update.failure.categorynameconflict")); responsePage = this.getPage(); } catch (IllegalArgumentException e) { getSession().error(e.getMessage()); responsePage = this.getPage(); } setResponsePage(responsePage); } }; // cancel button final Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setResponsePage(new GradebookPage()); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); // panels form.add(gradeEntryPanel); form.add(gradeReleasePanel); form.add(categoryPanel); form.add(gradingSchemaPanel); add(form); // expand/collapse panel actions add( new AjaxLink<String>("expandAll") { private static final long serialVersionUID = 1L; @Override public void onClick(final AjaxRequestTarget target) { target.appendJavaScript("$('#settingsAccordion .panel-collapse').collapse('show');"); } }); add( new AjaxLink<String>("collapseAll") { private static final long serialVersionUID = 1L; @Override public void onClick(final AjaxRequestTarget target) { target.appendJavaScript("$('#settingsAccordion .panel-collapse').collapse('hide');"); } }); }
public TemplateForm(String id, final String section, boolean custom, UserData u) { super(id); this.user = u; this.section = section; final com.rectang.xsm.site.Site site = user.getSite(); Button create = new Button("create") { public void onSubmit() { InputStream in = null; OutputStream out = null; try { in = getDefault(section, user.getSite()); out = new FileOutputStream(getCustomFile(section)); IOUtil.copyStream(in, out); if (section.equals("layout")) { site.setLayout("custom"); site.save(); } else if (section.equals("style")) { site.setStylesheet("custom"); site.save(); } // Here we need to redirect back to this page to refresh the models - not sure // why... setResponsePage(EditTemplate.class, getPageParameters()); } catch (IOException e) { error("Unable to create custom copy of template " + section); } finally { if (in != null) { IOUtil.close(in); } if (out != null) { IOUtil.close(out); } } } }; create.setDefaultFormProcessing(false); add(create); Button save = new Button("save"); add(save); Button revert = new Button("revert"); add(revert); Button delete = new Button("delete") { public void onSubmit() { if (getCustomFile(section).delete()) { if (section.equals("layout")) { site.setLayout("menu-left"); site.save(); } else if (section.equals("style")) { site.setStylesheet("grey"); site.getPublishedDoc("style.css").delete(); site.save(); } if (section.equals("template")) { site.publish(user); } else { site.publishTheme(); } // Here we need to redirect back to this page to refresh the models - not sure // why... setResponsePage(EditTemplate.class, getPageParameters()); } else { error("Unable to delete custom template " + section); } } }; delete.setDefaultFormProcessing(false); add(delete); if (custom) { add(new TextArea("customise", new StringFileModel(getCustomFile(section)))); create.setVisible(false); } else { StringBuffer content = new StringBuffer(); BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(getDefault(section, site))); String line = reader.readLine(); while (line != null) { content.append(line); content.append('\n'); line = reader.readLine(); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { IOUtil.close(reader); } } TextArea area = new TextArea("customise", new Model(content.toString())); area.setEnabled(false); add(area); save.setVisible(false); revert.setVisible(false); delete.setVisible(false); } BookmarkablePageLink back; back = new BookmarkablePageLink("back", Theme.class); back.add(new Label("back-label", "Back to Theme page")); add(back); }
protected void setupPage(final TeamModel teamModel) { if (isCreate) { super.setupPage(getString("gb.newTeam"), ""); } else { super.setupPage(getString("gb.edit"), teamModel.name); } CompoundPropertyModel<TeamModel> model = new CompoundPropertyModel<TeamModel>(teamModel); List<String> repos = getAccessRestrictedRepositoryList(true, null); List<String> teamUsers = new ArrayList<String>(teamModel.users); List<String> preReceiveScripts = new ArrayList<String>(); List<String> postReceiveScripts = new ArrayList<String>(); final String oldName = teamModel.name; final List<RegistrantAccessPermission> permissions = teamModel.getRepositoryPermissions(); // users palette final Palette<UserChoice> users = new Palette<UserChoice>( "users", new ListModel<UserChoice>(getTeamUsers(teamUsers)), new CollectionModel<UserChoice>( sortByDisplayName(getTeamUsers(app().users().getAllUsernames()))), new ChoiceRenderer<UserChoice>(null, "userId"), 10, false); // pre-receive palette if (teamModel.preReceiveScripts != null) { preReceiveScripts.addAll(teamModel.preReceiveScripts); } final Palette<String> preReceivePalette = new Palette<String>( "preReceiveScripts", new ListModel<String>(preReceiveScripts), new CollectionModel<String>(app().repositories().getPreReceiveScriptsUnused(null)), new StringChoiceRenderer(), 12, true); // post-receive palette if (teamModel.postReceiveScripts != null) { postReceiveScripts.addAll(teamModel.postReceiveScripts); } final Palette<String> postReceivePalette = new Palette<String>( "postReceiveScripts", new ListModel<String>(postReceiveScripts), new CollectionModel<String>(app().repositories().getPostReceiveScriptsUnused(null)), new StringChoiceRenderer(), 12, true); Form<TeamModel> form = new Form<TeamModel>("editForm", model) { private static final long serialVersionUID = 1L; /* * (non-Javadoc) * * @see org.apache.wicket.markup.html.form.Form#onSubmit() */ @Override protected void onSubmit() { String teamname = teamModel.name; if (StringUtils.isEmpty(teamname)) { error(getString("gb.pleaseSetTeamName")); return; } if (isCreate) { TeamModel model = app().users().getTeamModel(teamname); if (model != null) { error(MessageFormat.format(getString("gb.teamNameUnavailable"), teamname)); return; } } // update team permissions for (RegistrantAccessPermission repositoryPermission : permissions) { teamModel.setRepositoryPermission( repositoryPermission.registrant, repositoryPermission.permission); } Iterator<UserChoice> selectedUsers = users.getSelectedChoices(); List<String> members = new ArrayList<String>(); while (selectedUsers.hasNext()) { members.add(selectedUsers.next().getUserId().toLowerCase()); } teamModel.users.clear(); teamModel.users.addAll(members); // set mailing lists String ml = mailingLists.getObject(); if (!StringUtils.isEmpty(ml)) { Set<String> list = new HashSet<String>(); for (String address : ml.split("(,|\\s)")) { if (StringUtils.isEmpty(address)) { continue; } list.add(address.toLowerCase()); } teamModel.mailingLists.clear(); teamModel.mailingLists.addAll(list); } // pre-receive scripts List<String> preReceiveScripts = new ArrayList<String>(); Iterator<String> pres = preReceivePalette.getSelectedChoices(); while (pres.hasNext()) { preReceiveScripts.add(pres.next()); } teamModel.preReceiveScripts.clear(); teamModel.preReceiveScripts.addAll(preReceiveScripts); // post-receive scripts List<String> postReceiveScripts = new ArrayList<String>(); Iterator<String> post = postReceivePalette.getSelectedChoices(); while (post.hasNext()) { postReceiveScripts.add(post.next()); } teamModel.postReceiveScripts.clear(); teamModel.postReceiveScripts.addAll(postReceiveScripts); try { if (isCreate) { app().gitblit().addTeam(teamModel); } else { app().gitblit().reviseTeam(oldName, teamModel); } } catch (GitBlitException e) { error(e.getMessage()); return; } setRedirect(false); if (isCreate) { // create another team info(MessageFormat.format(getString("gb.teamCreated"), teamModel.name)); } // back to users page setResponsePage(UsersPage.class); } }; // do not let the browser pre-populate these fields form.add(new SimpleAttributeModifier("autocomplete", "off")); // not all user services support manipulating team memberships boolean editMemberships = app().authentication().supportsTeamMembershipChanges(teamModel); // field names reflective match TeamModel fields form.add(new TextField<String>("name")); form.add(new CheckBox("canAdmin")); form.add( new CheckBox("canFork") .setEnabled(app().settings().getBoolean(Keys.web.allowForking, true))); form.add(new CheckBox("canCreate")); form.add(users.setEnabled(editMemberships)); mailingLists = new Model<String>( teamModel.mailingLists == null ? "" : StringUtils.flattenStrings(teamModel.mailingLists, " ")); form.add(new TextField<String>("mailingLists", mailingLists)); form.add( new RegistrantPermissionsPanel( "repositories", RegistrantType.REPOSITORY, repos, permissions, getAccessPermissions())); form.add(preReceivePalette); form.add( new BulletListPanel( "inheritedPreReceive", "inherited", app().repositories().getPreReceiveScriptsInherited(null))); form.add(postReceivePalette); form.add( new BulletListPanel( "inheritedPostReceive", "inherited", app().repositories().getPostReceiveScriptsInherited(null))); form.add(new Button("save")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setResponsePage(UsersPage.class); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); add(form); }
@SuppressWarnings("serial") public IncluirUsuarioPage(final PageParameters parameters) { super(parameters, "Usuário", "Incluir usuário"); @SuppressWarnings("rawtypes") Form form = new Form("form"); add(form); form.add(new FeedbackPanel("mensagem")); TextField<String> textFieldNome = new TextField<String>("nome", new PropertyModel<String>(this, "usuario.nome")); textFieldNome.setRequired(true); form.add(textFieldNome); TextField<String> textFieldLogin = new TextField<String>("login", new PropertyModel<String>(this, "usuario.login")); textFieldLogin.setRequired(true); form.add(textFieldLogin); form.add(new PasswordTextField("senha", new PropertyModel<String>(this, "usuario.senha"))); form.add( new PasswordTextField( "confirmarSenha", new PropertyModel<String>(this, "senhaConfirmada"))); List<Permissao> permissoes = (List<Permissao>) new PermissaoBO().getListaTodasPermissoes(); @SuppressWarnings("rawtypes") IChoiceRenderer renderer = new ChoiceRenderer("descricao", "codigo"); @SuppressWarnings({"rawtypes", "unchecked"}) final Palette palette = new Palette( "palette", new ListModel<Permissao>(new ArrayList<Permissao>()), new CollectionModel<Permissao>(permissoes), renderer, 10, true); form.add(palette); form.add( new Button("btnSalvar") { @Override public void onSubmit() { // Verifica se o login já foi cadastrado UsuarioBO usuarioBO = new UsuarioBO(); if (isSenhaValida()) { usuario.setLogin(usuario.getLogin().toLowerCase()); if (!usuarioBO.isLoginCadastrado(usuario)) { @SuppressWarnings("unchecked") ListModel<Permissao> modelPermissao = (ListModel<Permissao>) palette.getDefaultModel(); usuario.setListaPermissao(modelPermissao.getObject()); usuarioBO.inserir(usuario); setResponsePage(new ListarUsuarioPage(usuario.getId())); } else { error("Login já cadastrado."); } } else { error("A Senha confirmada é diferente da Senha informada."); } } }); Button btnVoltar = new Button("btnVoltar") { @Override public void onSubmit() { setResponsePage(ListarUsuarioPage.class); } }; btnVoltar.setDefaultFormProcessing(false); form.add(btnVoltar); }
protected void setupPage(final RepositoryModel repositoryModel) { // ensure this user can create or edit this repository checkPermissions(repositoryModel); List<String> federationSets = new ArrayList<String>(); List<String> repositoryUsers = new ArrayList<String>(); if (isCreate) { super.setupPage(getString("gb.newRepository"), ""); } else { super.setupPage(getString("gb.edit"), repositoryModel.name); if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)) { repositoryUsers.addAll(GitBlit.self().getRepositoryUsers(repositoryModel)); Collections.sort(repositoryUsers); } federationSets.addAll(repositoryModel.federationSets); } final String oldName = repositoryModel.name; // users palette final Palette<String> usersPalette = new Palette<String>( "users", new ListModel<String>(repositoryUsers), new CollectionModel<String>(GitBlit.self().getAllUsernames()), new ChoiceRenderer<String>("", ""), 10, false); // federation sets palette List<String> sets = GitBlit.getStrings(Keys.federation.sets); final Palette<String> federationSetsPalette = new Palette<String>( "federationSets", new ListModel<String>(federationSets), new CollectionModel<String>(sets), new ChoiceRenderer<String>("", ""), 10, false); CompoundPropertyModel<RepositoryModel> model = new CompoundPropertyModel<RepositoryModel>(repositoryModel); Form<RepositoryModel> form = new Form<RepositoryModel>("editForm", model) { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { try { // confirm a repository name was entered if (StringUtils.isEmpty(repositoryModel.name)) { error("Please set repository name!"); return; } // automatically convert backslashes to forward slashes repositoryModel.name = repositoryModel.name.replace('\\', '/'); // Automatically replace // with / repositoryModel.name = repositoryModel.name.replace("//", "/"); // prohibit folder paths if (repositoryModel.name.startsWith("/")) { error("Leading root folder references (/) are prohibited."); return; } if (repositoryModel.name.startsWith("../")) { error("Relative folder references (../) are prohibited."); return; } if (repositoryModel.name.contains("/../")) { error("Relative folder references (../) are prohibited."); return; } // confirm valid characters in repository name Character c = StringUtils.findInvalidCharacter(repositoryModel.name); if (c != null) { error(MessageFormat.format("Illegal character ''{0}'' in repository name!", c)); return; } // confirm access restriction selection if (repositoryModel.accessRestriction == null) { error("Please select access restriction!"); return; } // save federation set preferences if (repositoryModel.federationStrategy.exceeds(FederationStrategy.EXCLUDE)) { repositoryModel.federationSets.clear(); Iterator<String> sets = federationSetsPalette.getSelectedChoices(); while (sets.hasNext()) { repositoryModel.federationSets.add(sets.next()); } } // save the repository GitBlit.self().updateRepositoryModel(oldName, repositoryModel, isCreate); // save the repository access list if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)) { Iterator<String> users = usersPalette.getSelectedChoices(); List<String> repositoryUsers = new ArrayList<String>(); while (users.hasNext()) { repositoryUsers.add(users.next()); } // ensure the owner is added to the user list if (repositoryModel.owner != null && !repositoryUsers.contains(repositoryModel.owner)) { repositoryUsers.add(repositoryModel.owner); } GitBlit.self().setRepositoryUsers(repositoryModel, repositoryUsers); } } catch (GitBlitException e) { error(e.getMessage()); return; } setRedirect(false); setResponsePage(RepositoriesPage.class); } }; // field names reflective match RepositoryModel fields form.add(new TextField<String>("name").setEnabled(isCreate || isAdmin)); form.add(new TextField<String>("description")); form.add( new DropDownChoice<String>("owner", GitBlit.self().getAllUsernames()) .setEnabled(GitBlitWebSession.get().canAdmin())); form.add( new DropDownChoice<AccessRestrictionType>( "accessRestriction", Arrays.asList(AccessRestrictionType.values()), new AccessRestrictionRenderer())); form.add(new CheckBox("isFrozen")); // TODO enable origin definition form.add(new TextField<String>("origin").setEnabled(false /* isCreate */)); // federation strategies - remove ORIGIN choice if this repository has // no origin. List<FederationStrategy> federationStrategies = new ArrayList<FederationStrategy>(Arrays.asList(FederationStrategy.values())); if (StringUtils.isEmpty(repositoryModel.origin)) { federationStrategies.remove(FederationStrategy.FEDERATE_ORIGIN); } form.add( new DropDownChoice<FederationStrategy>( "federationStrategy", federationStrategies, new FederationTypeRenderer())); form.add(new CheckBox("useTickets")); form.add(new CheckBox("useDocs")); form.add(new CheckBox("showRemoteBranches")); form.add(new CheckBox("showReadme")); form.add(usersPalette); form.add(federationSetsPalette); form.add(new Button("save")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setResponsePage(RepositoriesPage.class); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); add(form); }
public SaveCancelFormPanel(String id, boolean ajax) { super(id); form = new Form("form"); form.add(new SetFocusBehavior(form)); feedbackPanel = new FeedbackPanel("feedback"); feedbackPanel.setOutputMarkupId(true); titleLabel = new Label("title", getTitleModel()); if (ajax) { submitButton = new AjaxButton("submitButton") { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { onSave(target); if (!Session.get() .getFeedbackMessages() .hasMessage(new ErrorLevelFeedbackMessageFilter(FeedbackMessage.ERROR))) { defaultReturnAction(target); } } @Override protected void onError(AjaxRequestTarget target, Form form) { target.addComponent(feedbackPanel); } }; cancelButton = new AjaxButton("cancelButton") { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { onCancel(target); defaultReturnAction(target); } }; } else { submitButton = new Button("submitButton") { @Override public void onSubmit() { onSave(null); if (!Session.get() .getFeedbackMessages() .hasMessage(new ErrorLevelFeedbackMessageFilter(FeedbackMessage.ERROR))) { defaultReturnAction(); } } }; cancelButton = new Button("cancelButton") { @Override public void onSubmit() { onCancel(null); defaultReturnAction(); } }; } cancelButton.setDefaultFormProcessing(false); add(form); form.add(feedbackPanel); form.add(titleLabel); form.add(submitButton); form.add(cancelButton); }
protected void setupPage(final UserModel userModel) { if (isCreate) { super.setupPage(getString("gb.newUser"), ""); } else { super.setupPage(getString("gb.edit"), userModel.username); } final Model<String> confirmPassword = new Model<String>(StringUtils.isEmpty(userModel.password) ? "" : userModel.password); CompoundPropertyModel<UserModel> model = new CompoundPropertyModel<UserModel>(userModel); // build list of projects including all repositories wildcards List<String> repos = getAccessRestrictedRepositoryList(true, userModel); List<String> userTeams = new ArrayList<String>(); for (TeamModel team : userModel.getTeams()) { userTeams.add(team.name); } Collections.sort(userTeams); final String oldName = userModel.username; final List<RegistrantAccessPermission> permissions = app().repositories().getUserAccessPermissions(userModel); final Palette<String> teams = new Palette<String>( "teams", new ListModel<String>(new ArrayList<String>(userTeams)), new CollectionModel<String>(app().users().getAllTeamNames()), new StringChoiceRenderer(), 10, false); Form<UserModel> form = new Form<UserModel>("editForm", model) { private static final long serialVersionUID = 1L; /* * (non-Javadoc) * * @see org.apache.wicket.markup.html.form.Form#onSubmit() */ @Override protected void onSubmit() { if (StringUtils.isEmpty(userModel.username)) { error(getString("gb.pleaseSetUsername")); return; } // force username to lower-case userModel.username = userModel.username.toLowerCase(); String username = userModel.username; if (isCreate) { UserModel model = app().users().getUserModel(username); if (model != null) { error(MessageFormat.format(getString("gb.usernameUnavailable"), username)); return; } } boolean rename = !StringUtils.isEmpty(oldName) && !oldName.equalsIgnoreCase(username); if (app().authentication().supportsCredentialChanges(userModel)) { if (!userModel.password.equals(confirmPassword.getObject())) { error(getString("gb.passwordsDoNotMatch")); return; } String password = userModel.password; if (!password.toUpperCase().startsWith(StringUtils.MD5_TYPE) && !password.toUpperCase().startsWith(StringUtils.COMBINED_MD5_TYPE)) { // This is a plain text password. // Check length. int minLength = app().settings().getInteger(Keys.realm.minPasswordLength, 5); if (minLength < 4) { minLength = 4; } if (password.trim().length() < minLength) { error(MessageFormat.format(getString("gb.passwordTooShort"), minLength)); return; } // change the cookie userModel.cookie = StringUtils.getSHA1(userModel.username + password); // Optionally store the password MD5 digest. String type = app().settings().getString(Keys.realm.passwordStorage, "md5"); if (type.equalsIgnoreCase("md5")) { // store MD5 digest of password userModel.password = StringUtils.MD5_TYPE + StringUtils.getMD5(userModel.password); } else if (type.equalsIgnoreCase("combined-md5")) { // store MD5 digest of username+password userModel.password = StringUtils.COMBINED_MD5_TYPE + StringUtils.getMD5(username + userModel.password); } } else if (rename && password.toUpperCase().startsWith(StringUtils.COMBINED_MD5_TYPE)) { error(getString("gb.combinedMd5Rename")); return; } } // update user permissions for (RegistrantAccessPermission repositoryPermission : permissions) { if (repositoryPermission.mutable) { userModel.setRepositoryPermission( repositoryPermission.registrant, repositoryPermission.permission); } } Iterator<String> selectedTeams = teams.getSelectedChoices(); userModel.removeAllTeams(); while (selectedTeams.hasNext()) { TeamModel team = app().users().getTeamModel(selectedTeams.next()); if (team == null) { continue; } userModel.addTeam(team); } try { if (isCreate) { app().gitblit().addUser(userModel); } else { app().gitblit().reviseUser(oldName, userModel); } } catch (GitBlitException e) { error(e.getMessage()); return; } setRedirect(false); if (isCreate) { // create another user info(MessageFormat.format(getString("gb.userCreated"), userModel.username)); setResponsePage(EditUserPage.class); } else { // back to users page setResponsePage(UsersPage.class); } } }; // do not let the browser pre-populate these fields form.add(new SimpleAttributeModifier("autocomplete", "off")); // not all user providers support manipulating username and password boolean editCredentials = app().authentication().supportsCredentialChanges(userModel); // not all user providers support manipulating display name boolean editDisplayName = app().authentication().supportsDisplayNameChanges(userModel); // not all user providers support manipulating email address boolean editEmailAddress = app().authentication().supportsEmailAddressChanges(userModel); // not all user providers support manipulating team memberships boolean editTeams = app().authentication().supportsTeamMembershipChanges(userModel); // not all user providers support manipulating the admin role boolean changeAdminRole = app().authentication().supportsRoleChanges(userModel, Role.ADMIN); // not all user providers support manipulating the create role boolean changeCreateRole = app().authentication().supportsRoleChanges(userModel, Role.CREATE); // not all user providers support manipulating the fork role boolean changeForkRole = app().authentication().supportsRoleChanges(userModel, Role.FORK); // field names reflective match UserModel fields form.add(new TextField<String>("username").setEnabled(editCredentials)); NonTrimmedPasswordTextField passwordField = new NonTrimmedPasswordTextField("password"); passwordField.setResetPassword(false); form.add(passwordField.setEnabled(editCredentials)); NonTrimmedPasswordTextField confirmPasswordField = new NonTrimmedPasswordTextField("confirmPassword", confirmPassword); confirmPasswordField.setResetPassword(false); form.add(confirmPasswordField.setEnabled(editCredentials)); form.add(new TextField<String>("displayName").setEnabled(editDisplayName)); form.add(new TextField<String>("emailAddress").setEnabled(editEmailAddress)); if (userModel.canAdmin() && !userModel.canAdmin) { // user inherits Admin permission // display a disabled-yet-checked checkbox form.add(new CheckBox("canAdmin", Model.of(true)).setEnabled(false)); } else { form.add(new CheckBox("canAdmin").setEnabled(changeAdminRole)); } if (userModel.canFork() && !userModel.canFork) { // user inherits Fork permission // display a disabled-yet-checked checkbox form.add(new CheckBox("canFork", Model.of(true)).setEnabled(false)); } else { final boolean forkingAllowed = app().settings().getBoolean(Keys.web.allowForking, true); form.add(new CheckBox("canFork").setEnabled(forkingAllowed && changeForkRole)); } if (userModel.canCreate() && !userModel.canCreate) { // user inherits Create permission // display a disabled-yet-checked checkbox form.add(new CheckBox("canCreate", Model.of(true)).setEnabled(false)); } else { form.add(new CheckBox("canCreate").setEnabled(changeCreateRole)); } form.add(new CheckBox("excludeFromFederation")); form.add(new CheckBox("disabled")); form.add( new RegistrantPermissionsPanel( "repositories", RegistrantType.REPOSITORY, repos, permissions, getAccessPermissions())); form.add(teams.setEnabled(editTeams)); form.add(new TextField<String>("organizationalUnit").setEnabled(editDisplayName)); form.add(new TextField<String>("organization").setEnabled(editDisplayName)); form.add(new TextField<String>("locality").setEnabled(editDisplayName)); form.add(new TextField<String>("stateProvince").setEnabled(editDisplayName)); form.add(new TextField<String>("countryCode").setEnabled(editDisplayName)); form.add(new Button("save")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setResponsePage(UsersPage.class); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); add(form); }
@Override public void onInitialize() { super.onInitialize(); // unpack model final ImportWizardModel importWizardModel = this.model.getObject(); final List<ProcessedGradeItem> itemsToCreate = importWizardModel.getItemsToCreate(); final List<ProcessedGradeItem> itemsToUpdate = importWizardModel.getItemsToUpdate(); final List<Assignment> assignmentsToCreate = importWizardModel.getAssignmentsToCreate(); final Form<?> form = new Form("form") { private static final long serialVersionUID = 1L; boolean errors = false; @Override protected void onSubmit() { final Map<String, Long> assignmentMap = new HashMap<>(); // Create new GB items assignmentsToCreate.forEach( assignment -> { final Long assignmentId = GradeImportConfirmationStep.this.businessService.addAssignment(assignment); assignmentMap.put(StringUtils.trim(assignment.getName()), assignmentId); }); final List<ProcessedGradeItem> itemsToSave = new ArrayList<ProcessedGradeItem>(); itemsToSave.addAll(itemsToUpdate); itemsToSave.addAll(itemsToCreate); itemsToSave.forEach( processedGradeItem -> { log.debug("Looping through items to save"); List<ProcessedGradeItemDetail> processedGradeItemDetails = processedGradeItem.getProcessedGradeItemDetails(); processedGradeItemDetails.forEach( processedGradeItemDetail -> { log.debug("Looping through detail items to save"); // get data Long assignmentId = processedGradeItem.getItemId(); String assignmentTitle = StringUtils.trim( processedGradeItem .getItemTitle()); // trim to match the gbservice behaviour if (assignmentId == null) { // Should be a newly created GB item assignmentId = assignmentMap.get(assignmentTitle); } final GradeSaveResponse saved = GradeImportConfirmationStep.this.businessService.saveGrade( assignmentId, processedGradeItemDetail.getStudentUuid(), processedGradeItemDetail.getGrade(), processedGradeItemDetail.getComment()); // if no change, try just the comment if (saved == GradeSaveResponse.NO_CHANGE) { // Check for changed comments final String currentComment = StringUtils.trimToNull( GradeImportConfirmationStep.this.businessService .getAssignmentGradeComment( assignmentId, processedGradeItemDetail.getStudentUuid())); final String newComment = StringUtils.trimToNull(processedGradeItemDetail.getComment()); if (!StringUtils.equals(currentComment, newComment)) { final boolean success = GradeImportConfirmationStep.this.businessService .updateAssignmentGradeComment( assignmentId, processedGradeItemDetail.getStudentUuid(), newComment); log.info( "Saving comment: " + success + ", " + assignmentId + ", " + processedGradeItemDetail.getStudentEid() + ", " + processedGradeItemDetail.getComment()); if (!success) { errors = true; } } } else if (saved != GradeSaveResponse.OK) { // Anything other than OK is bad errors = true; } log.info( "Saving grade: " + saved + ", " + assignmentId + ", " + processedGradeItemDetail.getStudentEid() + ", " + processedGradeItemDetail.getGrade() + ", " + processedGradeItemDetail.getComment()); }); }); if (!errors) { getSession().success(getString("importExport.confirmation.success")); setResponsePage(new GradebookPage()); } else { getSession().error(getString("importExport.confirmation.failure")); } } }; add(form); // back button final Button backButton = new Button("backbutton") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { log.debug("Clicking back button..."); Component newPanel = null; if (assignmentsToCreate.size() > 0) { newPanel = new CreateGradeItemStep( GradeImportConfirmationStep.this.panelId, Model.of(importWizardModel)); } else { newPanel = new GradeItemImportSelectionStep( GradeImportConfirmationStep.this.panelId, Model.of(importWizardModel)); } newPanel.setOutputMarkupId(true); GradeImportConfirmationStep.this.replaceWith(newPanel); } }; backButton.setDefaultFormProcessing(false); form.add(backButton); // finish button form.add(new Button("finishbutton")); // items to be updated final boolean hasItemsToUpdate = !itemsToUpdate.isEmpty(); final WebMarkupContainer gradesUpdateContainer = new WebMarkupContainer("grades_update_container") { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return hasItemsToUpdate; } }; add(gradesUpdateContainer); if (hasItemsToUpdate) { final ListView<ProcessedGradeItem> updateList = makeListView("grades_update", itemsToUpdate); updateList.setReuseItems(true); gradesUpdateContainer.add(updateList); } // items to be created final boolean hasItemsToCreate = !itemsToCreate.isEmpty(); final WebMarkupContainer gradesCreateContainer = new WebMarkupContainer("grades_create_container") { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return hasItemsToCreate; } }; add(gradesCreateContainer); if (hasItemsToCreate) { final ListView<ProcessedGradeItem> createList = makeListView("grades_create", itemsToCreate); createList.setReuseItems(true); gradesCreateContainer.add(createList); } }
@Override public void onInitialize() { super.onInitialize(); // unpack model final ImportWizardModel importWizardModel = this.model.getObject(); final CheckGroup<ProcessedGradeItem> group = new CheckGroup<ProcessedGradeItem>("group", new ArrayList<ProcessedGradeItem>()); final Form<?> form = new Form("form") { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { boolean validated = true; final List<ProcessedGradeItem> selectedGradeItems = (List<ProcessedGradeItem>) group.getModelObject(); log.debug("Processed items: " + selectedGradeItems.size()); // this has an odd model so we need to have the validation in the onSubmit. if (selectedGradeItems.size() == 0) { validated = false; error(getString("importExport.selection.noneselected")); } if (validated) { // clear any previous errors final ImportExportPage page = (ImportExportPage) getPage(); page.clearFeedback(); // Process the selected items into the create/update lists final List<ProcessedGradeItem> itemsToUpdate = filterListByStatus( selectedGradeItems, Arrays.asList( ProcessedGradeItemStatus.STATUS_UPDATE, ProcessedGradeItemStatus.STATUS_NA)); final List<ProcessedGradeItem> itemsToCreate = filterListByStatus( selectedGradeItems, Arrays.asList(ProcessedGradeItemStatus.STATUS_NEW)); log.debug("Filtered Update items: " + itemsToUpdate.size()); log.debug("Filtered Create items: " + itemsToCreate.size()); final List<ProcessedGradeItem> gbItemsToCreate = new ArrayList<ProcessedGradeItem>(); itemsToCreate.forEach( item -> { // Don't want comment items here if (!"N/A".equals(item.getItemPointValue())) { gbItemsToCreate.add(item); } }); log.debug("Actual items to create: " + gbItemsToCreate.size()); // repaint panel Component newPanel = null; importWizardModel.setSelectedGradeItems(selectedGradeItems); importWizardModel.setGbItemsToCreate(gbItemsToCreate); importWizardModel.setItemsToCreate(itemsToCreate); importWizardModel.setItemsToUpdate(itemsToUpdate); if (gbItemsToCreate.size() > 0) { importWizardModel.setStep(1); importWizardModel.setTotalSteps(gbItemsToCreate.size()); newPanel = new CreateGradeItemStep( GradeItemImportSelectionStep.this.panelId, Model.of(importWizardModel)); } else { newPanel = new GradeImportConfirmationStep( GradeItemImportSelectionStep.this.panelId, Model.of(importWizardModel)); } newPanel.setOutputMarkupId(true); GradeItemImportSelectionStep.this.replaceWith(newPanel); } } }; add(form); form.add(group); final Button backButton = new Button("backbutton") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { // clear any previous errors final ImportExportPage page = (ImportExportPage) getPage(); page.clearFeedback(); final Component newPanel = new GradeImportUploadStep(GradeItemImportSelectionStep.this.panelId); newPanel.setOutputMarkupId(true); GradeItemImportSelectionStep.this.replaceWith(newPanel); } }; backButton.setDefaultFormProcessing(false); group.add(backButton); group.add(new Button("nextbutton")); group.add(new CheckGroupSelector("groupselector")); final ListView<ProcessedGradeItem> gradeList = new ListView<ProcessedGradeItem>("grades", importWizardModel.getProcessedGradeItems()) { private static final long serialVersionUID = 1L; @Override protected void populateItem(final ListItem<ProcessedGradeItem> item) { final Check<ProcessedGradeItem> checkbox = new Check<>("checkbox", item.getModel()); final Label itemTitle = new Label( "itemTitle", new PropertyModel<String>(item.getDefaultModel(), "itemTitle")); final Label itemPointValue = new Label( "itemPointValue", new PropertyModel<String>(item.getDefaultModel(), "itemPointValue")); final Label itemStatus = new Label("itemStatus"); item.add(checkbox); item.add(itemTitle); item.add(itemPointValue); item.add(itemStatus); // Use the status code to look up the text representation final PropertyModel<ProcessedGradeItemStatus> statusProp = new PropertyModel<ProcessedGradeItemStatus>(item.getDefaultModel(), "status"); final ProcessedGradeItemStatus status = statusProp.getObject(); // For external items, set a different label and disable the control if (status.getStatusCode() == ProcessedGradeItemStatus.STATUS_EXTERNAL) { itemStatus.setDefaultModel( new StringResourceModel( "importExport.status." + status.getStatusCode(), statusProp, null, status.getStatusValue())); item.setEnabled(false); item.add(new AttributeModifier("class", "external")); } else { itemStatus.setDefaultModel( new ResourceModel("importExport.status." + status.getStatusCode())); // if no changes, grey it out and remove checkbox if (status.getStatusCode() == ProcessedGradeItemStatus.STATUS_NA) { checkbox.setVisible(false); item.add(new AttributeAppender("class", Model.of("no_changes"), " ")); } } final String naString = getString("importExport.selection.pointValue.na", new Model(), "N/A"); if (naString.equals(item.getModelObject().getItemPointValue())) { item.add(new AttributeAppender("class", Model.of("comment"), " ")); } // add an additional row for the comments for each final PropertyModel<String> commentLabelProp = new PropertyModel<String>(item.getDefaultModel(), "commentLabel"); final PropertyModel<ProcessedGradeItemStatus> commentStatusProp = new PropertyModel<ProcessedGradeItemStatus>( item.getDefaultModel(), "commentStatus"); final String commentLabel = commentLabelProp.getObject(); final ProcessedGradeItemStatus commentStatus = commentStatusProp.getObject(); item.add( new Behavior() { private static final long serialVersionUID = 1L; @Override public void afterRender(final Component component) { super.afterRender(component); if (commentLabel != null) { String rowClass = "comment"; String statusValue = getString("importExport.status." + commentStatus.getStatusCode()); if (commentStatus.getStatusCode() == ProcessedGradeItemStatus.STATUS_EXTERNAL) { rowClass += " external"; statusValue = new StringResourceModel( "importExport.status." + commentStatus.getStatusCode(), commentStatusProp, null, commentStatus.getStatusValue()) .getString(); } if (commentStatus.getStatusCode() == ProcessedGradeItemStatus.STATUS_NA) { rowClass += " no_changes"; } component .getResponse() .write( "<tr class=\"" + rowClass + "\">" + "<td></td>" + "<td class=\"item_title\">" + commentLabel + "</td>" + "<td class=\"item_points\">" + naString + "</td>" + "<td class=\"item_status\">" + statusValue + "</td>" + "</tr>"); } } }); } }; gradeList.setReuseItems(true); group.add(gradeList); }
protected void setupPage(RepositoryModel model) { this.repositoryModel = model; // ensure this user can create or edit this repository checkPermissions(repositoryModel); List<String> indexedBranches = new ArrayList<String>(); List<String> federationSets = new ArrayList<String>(); final List<RegistrantAccessPermission> repositoryUsers = new ArrayList<RegistrantAccessPermission>(); final List<RegistrantAccessPermission> repositoryTeams = new ArrayList<RegistrantAccessPermission>(); List<String> preReceiveScripts = new ArrayList<String>(); List<String> postReceiveScripts = new ArrayList<String>(); GitBlitWebSession session = GitBlitWebSession.get(); final UserModel user = session.getUser() == null ? UserModel.ANONYMOUS : session.getUser(); final boolean allowEditName = isCreate || isAdmin || repositoryModel.isUsersPersonalRepository(user.username); if (isCreate) { if (user.canAdmin()) { super.setupPage(getString("gb.newRepository"), ""); } else { super.setupPage(getString("gb.newRepository"), user.getDisplayName()); } } else { super.setupPage(getString("gb.edit"), repositoryModel.name); repositoryUsers.addAll(GitBlit.self().getUserAccessPermissions(repositoryModel)); repositoryTeams.addAll(GitBlit.self().getTeamAccessPermissions(repositoryModel)); Collections.sort(repositoryUsers); Collections.sort(repositoryTeams); federationSets.addAll(repositoryModel.federationSets); if (!ArrayUtils.isEmpty(repositoryModel.indexedBranches)) { indexedBranches.addAll(repositoryModel.indexedBranches); } } final String oldName = repositoryModel.name; final RegistrantPermissionsPanel usersPalette = new RegistrantPermissionsPanel( "users", RegistrantType.USER, GitBlit.self().getAllUsernames(), repositoryUsers, getAccessPermissions()); final RegistrantPermissionsPanel teamsPalette = new RegistrantPermissionsPanel( "teams", RegistrantType.TEAM, GitBlit.self().getAllTeamnames(), repositoryTeams, getAccessPermissions()); // owners palette List<String> owners = new ArrayList<String>(repositoryModel.owners); List<String> persons = GitBlit.self().getAllUsernames(); final Palette<String> ownersPalette = new Palette<String>( "owners", new ListModel<String>(owners), new CollectionModel<String>(persons), new StringChoiceRenderer(), 12, true); // indexed local branches palette List<String> allLocalBranches = new ArrayList<String>(); allLocalBranches.add(Constants.DEFAULT_BRANCH); allLocalBranches.addAll(repositoryModel.getLocalBranches()); boolean luceneEnabled = GitBlit.getBoolean(Keys.web.allowLuceneIndexing, true); final Palette<String> indexedBranchesPalette = new Palette<String>( "indexedBranches", new ListModel<String>(indexedBranches), new CollectionModel<String>(allLocalBranches), new StringChoiceRenderer(), 8, false); indexedBranchesPalette.setEnabled(luceneEnabled); // federation sets palette List<String> sets = GitBlit.getStrings(Keys.federation.sets); final Palette<String> federationSetsPalette = new Palette<String>( "federationSets", new ListModel<String>(federationSets), new CollectionModel<String>(sets), new StringChoiceRenderer(), 8, false); // pre-receive palette if (!ArrayUtils.isEmpty(repositoryModel.preReceiveScripts)) { preReceiveScripts.addAll(repositoryModel.preReceiveScripts); } final Palette<String> preReceivePalette = new Palette<String>( "preReceiveScripts", new ListModel<String>(preReceiveScripts), new CollectionModel<String>(GitBlit.self().getPreReceiveScriptsUnused(repositoryModel)), new StringChoiceRenderer(), 12, true); // post-receive palette if (!ArrayUtils.isEmpty(repositoryModel.postReceiveScripts)) { postReceiveScripts.addAll(repositoryModel.postReceiveScripts); } final Palette<String> postReceivePalette = new Palette<String>( "postReceiveScripts", new ListModel<String>(postReceiveScripts), new CollectionModel<String>( GitBlit.self().getPostReceiveScriptsUnused(repositoryModel)), new StringChoiceRenderer(), 12, true); // custom fields final Map<String, String> customFieldsMap = GitBlit.getMap(Keys.groovy.customFields); List<String> customKeys = new ArrayList<String>(customFieldsMap.keySet()); final ListView<String> customFieldsListView = new ListView<String>("customFieldsListView", customKeys) { private static final long serialVersionUID = 1L; @Override protected void populateItem(ListItem<String> item) { String key = item.getModelObject(); item.add(new Label("customFieldLabel", customFieldsMap.get(key))); String value = ""; if (repositoryModel.customFields != null && repositoryModel.customFields.containsKey(key)) { value = repositoryModel.customFields.get(key); } TextField<String> field = new TextField<String>("customFieldValue", new Model<String>(value)); item.add(field); } }; customFieldsListView.setReuseItems(true); CompoundPropertyModel<RepositoryModel> rModel = new CompoundPropertyModel<RepositoryModel>(repositoryModel); Form<RepositoryModel> form = new Form<RepositoryModel>("editForm", rModel) { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { try { // confirm a repository name was entered if (repositoryModel.name == null && StringUtils.isEmpty(repositoryModel.name)) { error(getString("gb.pleaseSetRepositoryName")); return; } // ensure name is trimmed repositoryModel.name = repositoryModel.name.trim(); // automatically convert backslashes to forward slashes repositoryModel.name = repositoryModel.name.replace('\\', '/'); // Automatically replace // with / repositoryModel.name = repositoryModel.name.replace("//", "/"); // prohibit folder paths if (repositoryModel.name.startsWith("/")) { error(getString("gb.illegalLeadingSlash")); return; } if (repositoryModel.name.startsWith("../")) { error(getString("gb.illegalRelativeSlash")); return; } if (repositoryModel.name.contains("/../")) { error(getString("gb.illegalRelativeSlash")); return; } if (repositoryModel.name.endsWith("/")) { repositoryModel.name = repositoryModel.name.substring(0, repositoryModel.name.length() - 1); } // confirm valid characters in repository name Character c = StringUtils.findInvalidCharacter(repositoryModel.name); if (c != null) { error(MessageFormat.format(getString("gb.illegalCharacterRepositoryName"), c)); return; } if (user.canCreate() && !user.canAdmin() && allowEditName) { // ensure repository name begins with the user's path if (!repositoryModel.name.startsWith(user.getPersonalPath())) { error( MessageFormat.format( getString("gb.illegalPersonalRepositoryLocation"), user.getPersonalPath())); return; } if (repositoryModel.name.equals(user.getPersonalPath())) { // reset path prefix and show error repositoryModel.name = user.getPersonalPath() + "/"; error(getString("gb.pleaseSetRepositoryName")); return; } } // confirm access restriction selection if (repositoryModel.accessRestriction == null) { error(getString("gb.selectAccessRestriction")); return; } // confirm federation strategy selection if (repositoryModel.federationStrategy == null) { error(getString("gb.selectFederationStrategy")); return; } // save federation set preferences if (repositoryModel.federationStrategy.exceeds(FederationStrategy.EXCLUDE)) { repositoryModel.federationSets.clear(); Iterator<String> sets = federationSetsPalette.getSelectedChoices(); while (sets.hasNext()) { repositoryModel.federationSets.add(sets.next()); } } // set author metric exclusions String ax = metricAuthorExclusions.getObject(); if (!StringUtils.isEmpty(ax)) { Set<String> list = new HashSet<String>(); for (String exclusion : StringUtils.getStringsFromValue(ax, " ")) { if (StringUtils.isEmpty(exclusion)) { continue; } if (exclusion.indexOf(' ') > -1) { list.add("\"" + exclusion + "\""); } else { list.add(exclusion); } } repositoryModel.metricAuthorExclusions = new ArrayList<String>(list); } // set mailing lists String ml = mailingLists.getObject(); if (!StringUtils.isEmpty(ml)) { Set<String> list = new HashSet<String>(); for (String address : ml.split("(,|\\s)")) { if (StringUtils.isEmpty(address)) { continue; } list.add(address.toLowerCase()); } repositoryModel.mailingLists = new ArrayList<String>(list); } // indexed branches List<String> indexedBranches = new ArrayList<String>(); Iterator<String> branches = indexedBranchesPalette.getSelectedChoices(); while (branches.hasNext()) { indexedBranches.add(branches.next()); } repositoryModel.indexedBranches = indexedBranches; // owners repositoryModel.owners.clear(); Iterator<String> owners = ownersPalette.getSelectedChoices(); while (owners.hasNext()) { repositoryModel.addOwner(owners.next()); } // pre-receive scripts List<String> preReceiveScripts = new ArrayList<String>(); Iterator<String> pres = preReceivePalette.getSelectedChoices(); while (pres.hasNext()) { preReceiveScripts.add(pres.next()); } repositoryModel.preReceiveScripts = preReceiveScripts; // post-receive scripts List<String> postReceiveScripts = new ArrayList<String>(); Iterator<String> post = postReceivePalette.getSelectedChoices(); while (post.hasNext()) { postReceiveScripts.add(post.next()); } repositoryModel.postReceiveScripts = postReceiveScripts; // custom fields repositoryModel.customFields = new LinkedHashMap<String, String>(); for (int i = 0; i < customFieldsListView.size(); i++) { ListItem<String> child = (ListItem<String>) customFieldsListView.get(i); String key = child.getModelObject(); TextField<String> field = (TextField<String>) child.get("customFieldValue"); String value = field.getValue(); repositoryModel.customFields.put(key, value); } // save the repository GitBlit.self().updateRepositoryModel(oldName, repositoryModel, isCreate); // repository access permissions if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)) { GitBlit.self().setUserAccessPermissions(repositoryModel, repositoryUsers); GitBlit.self().setTeamAccessPermissions(repositoryModel, repositoryTeams); } } catch (GitBlitException e) { error(e.getMessage()); return; } setRedirect(false); setResponsePage(RepositoriesPage.class); } }; // do not let the browser pre-populate these fields form.add(new SimpleAttributeModifier("autocomplete", "off")); // field names reflective match RepositoryModel fields form.add(new TextField<String>("name").setEnabled(allowEditName)); form.add(new TextField<String>("description")); form.add(ownersPalette); form.add( new CheckBox("allowForks").setEnabled(GitBlit.getBoolean(Keys.web.allowForking, true))); DropDownChoice<AccessRestrictionType> accessRestriction = new DropDownChoice<AccessRestrictionType>( "accessRestriction", Arrays.asList(AccessRestrictionType.values()), new AccessRestrictionRenderer()); form.add(accessRestriction); form.add(new CheckBox("isFrozen")); // TODO enable origin definition form.add(new TextField<String>("origin").setEnabled(false /* isCreate */)); // allow relinking HEAD to a branch or tag other than master on edit repository List<String> availableRefs = new ArrayList<String>(); if (!ArrayUtils.isEmpty(repositoryModel.availableRefs)) { availableRefs.addAll(repositoryModel.availableRefs); } form.add( new DropDownChoice<String>("HEAD", availableRefs).setEnabled(availableRefs.size() > 0)); boolean gcEnabled = GitBlit.getBoolean(Keys.git.enableGarbageCollection, false); List<Integer> gcPeriods = Arrays.asList(1, 2, 3, 4, 5, 7, 10, 14); form.add( new DropDownChoice<Integer>("gcPeriod", gcPeriods, new GCPeriodRenderer()) .setEnabled(gcEnabled)); form.add(new TextField<String>("gcThreshold").setEnabled(gcEnabled)); // federation strategies - remove ORIGIN choice if this repository has // no origin. List<FederationStrategy> federationStrategies = new ArrayList<FederationStrategy>(Arrays.asList(FederationStrategy.values())); if (StringUtils.isEmpty(repositoryModel.origin)) { federationStrategies.remove(FederationStrategy.FEDERATE_ORIGIN); } form.add( new DropDownChoice<FederationStrategy>( "federationStrategy", federationStrategies, new FederationTypeRenderer())); form.add(new CheckBox("useTickets")); form.add(new CheckBox("useDocs")); form.add(new CheckBox("useIncrementalPushTags")); form.add(new CheckBox("showRemoteBranches")); form.add(new CheckBox("showReadme")); form.add(new CheckBox("skipSizeCalculation")); form.add(new CheckBox("skipSummaryMetrics")); List<Integer> maxActivityCommits = Arrays.asList(-1, 0, 25, 50, 75, 100, 150, 200, 250, 500); form.add( new DropDownChoice<Integer>( "maxActivityCommits", maxActivityCommits, new MaxActivityCommitsRenderer())); metricAuthorExclusions = new Model<String>( ArrayUtils.isEmpty(repositoryModel.metricAuthorExclusions) ? "" : StringUtils.flattenStrings(repositoryModel.metricAuthorExclusions, " ")); form.add(new TextField<String>("metricAuthorExclusions", metricAuthorExclusions)); mailingLists = new Model<String>( ArrayUtils.isEmpty(repositoryModel.mailingLists) ? "" : StringUtils.flattenStrings(repositoryModel.mailingLists, " ")); form.add(new TextField<String>("mailingLists", mailingLists)); form.add(indexedBranchesPalette); List<AuthorizationControl> acList = Arrays.asList(AuthorizationControl.values()); final RadioChoice<AuthorizationControl> authorizationControl = new RadioChoice<Constants.AuthorizationControl>( "authorizationControl", acList, new AuthorizationControlRenderer()); form.add(authorizationControl); final CheckBox verifyCommitter = new CheckBox("verifyCommitter"); verifyCommitter.setOutputMarkupId(true); form.add(verifyCommitter); form.add(usersPalette); form.add(teamsPalette); form.add(federationSetsPalette); form.add(preReceivePalette); form.add( new BulletListPanel( "inheritedPreReceive", getString("gb.inherited"), GitBlit.self().getPreReceiveScriptsInherited(repositoryModel))); form.add(postReceivePalette); form.add( new BulletListPanel( "inheritedPostReceive", getString("gb.inherited"), GitBlit.self().getPostReceiveScriptsInherited(repositoryModel))); WebMarkupContainer customFieldsSection = new WebMarkupContainer("customFieldsSection"); customFieldsSection.add(customFieldsListView); form.add( customFieldsSection.setVisible(!GitBlit.getString(Keys.groovy.customFields, "").isEmpty())); // initial enable/disable of permission controls if (repositoryModel.accessRestriction.equals(AccessRestrictionType.NONE)) { // anonymous everything, disable all controls usersPalette.setEnabled(false); teamsPalette.setEnabled(false); authorizationControl.setEnabled(false); verifyCommitter.setEnabled(false); } else { // authenticated something // enable authorization controls authorizationControl.setEnabled(true); verifyCommitter.setEnabled(true); boolean allowFineGrainedControls = repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED); usersPalette.setEnabled(allowFineGrainedControls); teamsPalette.setEnabled(allowFineGrainedControls); } accessRestriction.add( new AjaxFormComponentUpdatingBehavior("onchange") { private static final long serialVersionUID = 1L; protected void onUpdate(AjaxRequestTarget target) { // enable/disable permissions panel based on access restriction boolean allowAuthorizationControl = repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE); authorizationControl.setEnabled(allowAuthorizationControl); verifyCommitter.setEnabled(allowAuthorizationControl); boolean allowFineGrainedControls = allowAuthorizationControl && repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED); usersPalette.setEnabled(allowFineGrainedControls); teamsPalette.setEnabled(allowFineGrainedControls); if (allowFineGrainedControls) { repositoryModel.authorizationControl = AuthorizationControl.NAMED; } target.addComponent(authorizationControl); target.addComponent(verifyCommitter); target.addComponent(usersPalette); target.addComponent(teamsPalette); } }); authorizationControl.add( new AjaxFormChoiceComponentUpdatingBehavior() { private static final long serialVersionUID = 1L; protected void onUpdate(AjaxRequestTarget target) { // enable/disable permissions panel based on access restriction boolean allowAuthorizationControl = repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE); authorizationControl.setEnabled(allowAuthorizationControl); boolean allowFineGrainedControls = allowAuthorizationControl && repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED); usersPalette.setEnabled(allowFineGrainedControls); teamsPalette.setEnabled(allowFineGrainedControls); if (allowFineGrainedControls) { repositoryModel.authorizationControl = AuthorizationControl.NAMED; } target.addComponent(authorizationControl); target.addComponent(usersPalette); target.addComponent(teamsPalette); } }); form.add(new Button("save")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setResponsePage(RepositoriesPage.class); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); add(form); }