List of usage examples for org.apache.wicket.markup.html.form Button setDefaultFormProcessing
@Override public final Button setDefaultFormProcessing(boolean defaultFormProcessing)
From source file:at.ac.tuwien.ifs.tita.ui.administration.project.ProjectAdministrationPanel.java
License:Apache License
/** * Method for displaying the details site of a specific Project. Also hides the list page. * * @param project the specific Project to show. *///from www . j a va2 s. c om private void displayDetailsPage(final TiTAProject project) { currentProject = project; // hide list container listContainer.setVisible(false); detailContainer.setVisible(true); issueTrackerContainer.setVisible(false); form = new ProjectForm("projectForm", this, projectStati, project); form.add(new Button("save") { @Override public void onSubmit() { log.debug("Submitting Form."); form.setSubmitMode(ProjectForm.C_PERMANENT_SUBMIT); } }); Button addIssueTrackerProjectButton = new Button("addIssueTrackerProjectButton") { @Override public void onSubmit() { log.debug("Opening Panel to Add IssueTrackerProject"); form.setSubmitMode(ProjectForm.C_TEMPORARY_SUBMIT_THEN_SHOW_ISSUE_TRACKER_PROJECT_FORM); } }; form.add(addIssueTrackerProjectButton); Button cancelButton = new Button("cancelAddProjectButton") { @Override public void onSubmit() { loadListEntities(); } }; cancelButton.setDefaultFormProcessing(false); form.add(cancelButton); detailContainer.addOrReplace(form); addOrReplace(detailContainer); }
From source file:at.ac.tuwien.ifs.tita.ui.administration.project.ProjectAdministrationPanel.java
License:Apache License
/** * displays the Panel to add IssueTrackerProjects. * * @param issTProject the project to update *//* ww w .j av a2 s. c o m*/ public void displayIssueTrackerProjectForm(IssueTrackerProject issTProject) { listContainer.setVisible(false); issueTrackerContainer.setVisible(true); detailContainer.setVisible(true); if (issTProject == null) { issueTrackerForm = new IssueTrackerProjectForm("issueTrackerProjectForm", new IssueTrackerProject(), issueTracker, currentProject); } issueTrackerForm = new IssueTrackerProjectForm("issueTrackerProjectForm", issTProject, issueTracker, currentProject); issueTrackerForm.add(new Button("saveIssueTrackerProjectForm") { @Override public void onSubmit() { log.debug("Saving IssueTrackerProjectForm"); Set<IssueTrackerProject> tmpSet = currentProject.getIssueTrackerProjects(); IssueTrackerProject issTProjectToAdd = issueTrackerForm.getIssueTrackerProject(); if (issueTrackerLoginMap == null) { issueTrackerService = new IssueTrackerService( issueTrackerLoginMap.get(issTProjectToAdd.getIssueTracker().getDescription())); issTProjectToAdd.setIsstProjectId( issueTrackerService.getProjectByProjectName(issTProjectToAdd.getProjectName()).getId()); } tmpSet.add(issTProjectToAdd); currentProject.setIssueTrackerProjects(tmpSet); displayDetailsPage(currentProject); } }); Button cancelIssueTrackerProjectForm = new Button("cancelIssueTrackerProjectForm") { @Override public void onSubmit() { displayDetailsPage(form.getProject()); } }; cancelIssueTrackerProjectForm.setDefaultFormProcessing(false); issueTrackerForm.add(cancelIssueTrackerProjectForm); issueTrackerContainer.addOrReplace(issueTrackerForm); addOrReplace(issueTrackerContainer); }
From source file:at.ac.tuwien.ifs.tita.ui.administration.user.UserAdministrationPanel.java
License:Apache License
/** * adds necessary buttons to the details page. *//* ww w.j a v a2s . c om*/ private void addButtonsForDetailsPage() { form.addOrReplace(new Button("save") { @Override public void onSubmit() { form.setSubmitMode(UserForm.C_PERMANENT_SUBMIT); } }); Button cancelButton = new Button("cancel") { @Override public void onSubmit() { log.debug("Cancel the Form"); loadListEntities(); } }; cancelButton.setDefaultFormProcessing(false); form.addOrReplace(cancelButton); Button addProjectButton = new Button("addProjectButton") { @Override public void onSubmit() { log.debug("Opening ProjectPanel to Add Project to User"); form.setSubmitMode(UserForm.C_TEMPORARY_SUBMIT_THEN_SHOW_PROJECT_PANEL); } }; addProjectButton.setDefaultFormProcessing(true); Button addLoginButton = new Button("addLoginButton") { @Override public void onSubmit() { log.debug("Opening IssueTrackerLoginPanel to Add IssueTrackerLogin to User"); form.setSubmitMode(UserForm.C_TEMPORARY_SUBMIT_THEN_SHOW_LOGIN_PANEL); } }; addLoginButton.setDefaultFormProcessing(true); form.addOrReplace(addProjectButton); form.addOrReplace(addLoginButton); }
From source file:at.ac.tuwien.ifs.tita.ui.administration.user.UserIssueTrackerLoginPanel.java
License:Apache License
/** * shows the details page for IssueTrackerLogin. * // www. ja va 2s .co m * @param login the login */ public void displayDetailsPage(IssueTrackerLogin login) { if (login == null) { form = new IssueTrackerLoginForm("userIssueTrackerLoginForm", parent.getAvailableIssueTracker(), this); } else { form = new IssueTrackerLoginForm("userIssueTrackerLoginForm", parent.getAvailableIssueTracker(), login, this); } form.addOrReplace(new Button("userIssueTrackerLoginAddButton")); Button userIssueTrackerLoginSaveButton = new Button("userIssueTrackerLoginSaveButton") { @Override public void onSubmit() { log.info("Returning to UserForm."); parent.displayDetailsPage(getUser()); } }; userIssueTrackerLoginSaveButton.setDefaultFormProcessing(false); form.addOrReplace(userIssueTrackerLoginSaveButton); container.addOrReplace(form); }
From source file:com.fdorigo.rmfly.wicket.RecordPage.java
private void init() { add(new FeedbackPanel("feedback")); final DateTextField dateTextField = new DateTextField("arrivalDate"); dateTextField.setRequired(true);//from ww w. j a v a 2s . c o m DatePicker datePicker = new DatePicker() { @Override protected String getAdditionalJavaScript() { return "${calendar}.cfg.setProperty(\"navigator\",true,false); ${calendar}.render();"; } }; datePicker.setShowOnFieldClick(true); datePicker.setAutoHide(true); dateTextField.add(datePicker); final TextField<String> nNumberField = new TextField<>("nnumber"); nNumberField.setRequired(true); if (validNnumber) { nNumberField.add(AttributeModifier.append("readonly", "true")); } else { nNumberField.add(AttributeModifier.append("placeholder", "Not Found")); } DropDownChoice<AirplaneType> listCategories = new DropDownChoice<>("category", new PropertyModel<>(this, "selected"), Arrays.asList(AirplaneType.values())); listCategories.setRequired(true); final TextField<String> firstNameField = new TextField<>("firstName"); final TextField<String> lastNameField = new TextField<>("lastName"); final TextField<String> primaryPhoneField = new TextField<>("primaryPhone"); primaryPhoneField.setRequired(true); final TextField<String> secondaryPhoneField = new TextField<>("secondaryPhone"); final TextField<String> addressOneField = new TextField<>("addressOne"); final TextField<String> addressStateField = new TextField<>("addressState"); final TextField<String> addressCityField = new TextField<>("addressCity"); final TextField<String> addressZipField = new TextField<>("addressZip"); final TextField<String> emailAddressField = new TextField<>("emailAddress"); emailAddressField.add(EmailAddressValidator.getInstance()); emailAddressField.setRequired(true); final TextField<String> airplaneMakeField = new TextField<>("airplaneMake"); final TextField<String> airplaneModelField = new TextField<>("airplaneModel"); final NumberTextField<Integer> manufactureYearField = new NumberTextField<>("manufactureYear"); manufactureYearField.setType(Integer.class); int year = Calendar.getInstance().get(Calendar.YEAR); manufactureYearField.setMinimum(1903).setMaximum(year); RadioGroup<String> group = new RadioGroup<>("needJudging"); group.setRequired(true); add(group); ListView<Boolean> radios = new ListView<Boolean>("radios", TRUE_FALSE) { @Override protected void populateItem(ListItem<Boolean> item) { Radio<Boolean> radio = new Radio<>("radio", item.getModel()); radio.setLabel(new Model(item.getModelObject())); item.add(radio); item.add(new SimpleFormComponentLabel("boolval", radio)); } }.setReuseItems(true); group.add(radios); Model<Record> recordModel = new Model<>(record); Form<Record> recordForm = new Form<>("recordForm", new CompoundPropertyModel<>(recordModel)); final Button saveRecordButton = new Button("save") { @Override public void onSubmit() { record.setCategory(selected.toString()); if (manufactureYearField.getInput() != null) { record.setManufactureYear(manufactureYearField.getInput()); } recordFacade.edit(record); setResponsePage(HomePage.class); } }; if (formControlsEnabled != true) { saveRecordButton.setVisible(false); } recordForm.add(saveRecordButton); final Button deleteRecordButton = new Button("delete") { @Override public void onSubmit() { recordFacade.remove(record); setResponsePage(HomePage.class); } }; deleteRecordButton.setDefaultFormProcessing(false); if (formControlsEnabled != true) { deleteRecordButton.setVisible(false); } recordForm.add(deleteRecordButton); add(recordForm); recordForm.add(nNumberField); recordForm.add(firstNameField); recordForm.add(lastNameField); recordForm.add(secondaryPhoneField); recordForm.add(addressOneField); recordForm.add(addressStateField); recordForm.add(addressCityField); recordForm.add(addressZipField); recordForm.add(emailAddressField); recordForm.add(airplaneMakeField); recordForm.add(airplaneModelField); recordForm.add(manufactureYearField); /* Mandatory Fields */ recordForm.add(dateTextField); recordForm.add(primaryPhoneField); recordForm.add(group); recordForm.add(listCategories); // recordForm.add(new FormComponentFeedbackBorder("arrivalDateBorder").add(dateTextField)); // recordForm.add(new FormComponentFeedbackBorder("primaryPhoneBorder").add(primaryPhoneField)); // recordForm.add(new FormComponentFeedbackBorder("needJudgingBorder").add(group)); // recordForm.add(new FormComponentFeedbackBorder("categoryBorder").add(listCategories)); }
From source file:com.gitblit.wicket.pages.ChangePasswordPage.java
License:Apache License
public ChangePasswordPage() { super();//from w w w . j a v a2 s.c o m if (!GitBlitWebSession.get().isLoggedIn()) { // Change password requires a login throw new RestartResponseException(getApplication().getHomePage()); } if (!app().settings().getBoolean(Keys.web.authenticateAdminPages, true) && !app().settings().getBoolean(Keys.web.authenticateViewPages, false)) { // no authentication enabled throw new RestartResponseException(getApplication().getHomePage()); } UserModel user = GitBlitWebSession.get().getUser(); if (!app().authentication().supportsCredentialChanges(user)) { error(MessageFormat.format(getString("gb.userServiceDoesNotPermitPasswordChanges"), app().settings().getString(Keys.realm.userService, "${baseFolder}/users.conf")), true); } setupPage(getString("gb.changePassword"), user.username); StatelessForm<Void> form = new StatelessForm<Void>("passwordForm") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { String password = ChangePasswordPage.this.password.getObject(); String confirmPassword = ChangePasswordPage.this.confirmPassword.getObject(); // ensure passwords match if (!password.equals(confirmPassword)) { error(getString("gb.passwordsDoNotMatch")); return; } // ensure password satisfies minimum length requirement int minLength = app().settings().getInteger(Keys.realm.minPasswordLength, 5); if (minLength < 4) { minLength = 4; } if (password.length() < minLength) { error(MessageFormat.format(getString("gb.passwordTooShort"), minLength)); return; } UserModel user = GitBlitWebSession.get().getUser(); // convert to MD5 digest, if appropriate String type = app().settings().getString(Keys.realm.passwordStorage, "md5"); if (type.equalsIgnoreCase("md5")) { // store MD5 digest of password password = StringUtils.MD5_TYPE + StringUtils.getMD5(password); } else if (type.equalsIgnoreCase("combined-md5")) { // store MD5 digest of username+password password = StringUtils.COMBINED_MD5_TYPE + StringUtils.getMD5(user.username.toLowerCase() + password); } user.password = password; try { app().gitblit().reviseUser(user.username, user); if (app().settings().getBoolean(Keys.web.allowCookieAuthentication, false)) { app().authentication().setCookie(GitBlitRequestUtils.getServletRequest(), GitBlitRequestUtils.getServletResponse(), user); } } catch (GitBlitException e) { error(e.getMessage()); return; } info(getString("gb.passwordChanged")); setResponsePage(RepositoriesPage.class); } }; NonTrimmedPasswordTextField passwordField = new NonTrimmedPasswordTextField("password", password); passwordField.setResetPassword(false); form.add(passwordField); NonTrimmedPasswordTextField confirmPasswordField = new NonTrimmedPasswordTextField("confirmPassword", confirmPassword); confirmPasswordField.setResetPassword(false); form.add(confirmPasswordField); form.add(new Button("save")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { error(getString("gb.passwordChangeAborted")); setResponsePage(RepositoriesPage.class); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); add(form); }
From source file:com.gitblit.wicket.pages.EditMilestonePage.java
License:Apache License
public EditMilestonePage(PageParameters params) { super(params); RepositoryModel model = getRepositoryModel(); if (!app().tickets().isAcceptingTicketUpdates(model)) { // ticket service is read-only throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); }/*from w w w.jav a 2 s.c om*/ UserModel currentUser = GitBlitWebSession.get().getUser(); if (currentUser == null) { currentUser = UserModel.ANONYMOUS; } if (!currentUser.isAuthenticated || !currentUser.canAdmin(model)) { // administration prohibited throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); } oldName = WicketUtils.getObject(params); if (StringUtils.isEmpty(oldName)) { // milestone not specified throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); } TicketMilestone tm = app().tickets().getMilestone(getRepositoryModel(), oldName); if (tm == null) { // milestone does not exist throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); } setStatelessHint(false); setOutputMarkupId(true); Form<Void> form = new Form<Void>("editForm"); add(form); nameModel = Model.of(tm.name); dueModel = Model.of(tm.due); statusModel = Model.of(tm.status); notificationModel = Model.of(true); form.add(new TextField<String>("name", nameModel)); form.add(new Html5DateField("due", dueModel, "yyyy-MM-dd")); form.add(new Label("dueFormat", "yyyy-MM-dd")); form.add(new CheckBox("notify", notificationModel)); addBottomScriptInline( "{var e=document.createElement('input');e.type='date';if(e.type=='date'){$('[name=\"due\"]~.help-inline').hide()}}"); addBottomScript("scripts/wicketHtml5Patch.js"); List<Status> statusChoices = Arrays.asList(Status.Open, Status.Closed); form.add(new DropDownChoice<TicketModel.Status>("status", statusModel, statusChoices)); form.add(new AjaxButton("save") { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target) { String name = nameModel.getObject(); if (StringUtils.isEmpty(name)) { return; } Date due = dueModel.getObject(); Status status = statusModel.getObject(); boolean rename = !name.equals(oldName); boolean notify = notificationModel.getObject(); UserModel currentUser = GitBlitWebSession.get().getUser(); String createdBy = currentUser.username; TicketMilestone tm = app().tickets().getMilestone(getRepositoryModel(), oldName); tm.setName(name); tm.setDue(due); tm.status = status; boolean success = true; if (rename) { success = app().tickets().renameMilestone(getRepositoryModel(), oldName, name, createdBy, notify); } if (success && app().tickets().updateMilestone(getRepositoryModel(), tm, createdBy)) { redirectTo(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); } else { // TODO error } } }); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setResponsePage(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); Link<Void> delete = new Link<Void>("delete") { private static final long serialVersionUID = 1L; @Override public void onClick() { UserModel currentUser = GitBlitWebSession.get().getUser(); String createdBy = currentUser.username; boolean notify = notificationModel.getObject(); if (app().tickets().deleteMilestone(getRepositoryModel(), oldName, createdBy, notify)) { setResponsePage(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); } else { error(MessageFormat.format(getString("gb.milestoneDeleteFailed"), oldName)); } } }; delete.add(new JavascriptEventConfirmation("click", MessageFormat.format(getString("gb.deleteMilestone"), oldName))); form.add(delete); }
From source file:com.gitblit.wicket.pages.EditRepositoryPage.java
License:Apache License
protected void setupPage(RepositoryModel model) { this.repositoryModel = model; // ensure this user can create or edit this repository checkPermissions(repositoryModel);// w w w . j a v a2 s . c o m 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(app().repositories().getUserAccessPermissions(repositoryModel)); repositoryTeams.addAll(app().repositories().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, app().users().getAllUsernames(), repositoryUsers, getAccessPermissions()); final RegistrantPermissionsPanel teamsPalette = new RegistrantPermissionsPanel("teams", RegistrantType.TEAM, app().users().getAllTeamNames(), repositoryTeams, getAccessPermissions()); // owners palette List<UserChoice> owners = new ArrayList<UserChoice>(); List<UserChoice> persons = new ArrayList<UserChoice>(); for (String owner : repositoryModel.owners) { UserModel o = app().users().getUserModel(owner); if (o != null) { owners.add(new UserChoice(o.getDisplayName(), o.username, o.emailAddress)); } else { UserChoice userChoice = new UserChoice(owner); owners.add(userChoice); persons.add(userChoice); } } for (String person : app().users().getAllUsernames()) { UserModel o = app().users().getUserModel(person); if (o != null) { persons.add(new UserChoice(o.getDisplayName(), o.username, o.emailAddress)); } else { persons.add(new UserChoice(person)); } } final Palette<UserChoice> ownersPalette = new Palette<UserChoice>("owners", new ListModel<UserChoice>(owners), new CollectionModel<UserChoice>(persons), new ChoiceRenderer<UserChoice>(null, "userId"), 12, false); // indexed local branches palette List<String> allLocalBranches = new ArrayList<String>(); allLocalBranches.add(Constants.DEFAULT_BRANCH); allLocalBranches.addAll(repositoryModel.getLocalBranches()); boolean luceneEnabled = app().settings().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 = app().settings().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>(app().repositories().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>(app().repositories().getPostReceiveScriptsUnused(repositoryModel)), new StringChoiceRenderer(), 12, true); // custom fields final Map<String, String> customFieldsMap = app().settings().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 { if (!namePanel.updateModel(repositoryModel)) { 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)) { repositoryModel.metricAuthorExclusions = new ArrayList<String>(); } else { 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)) { repositoryModel.mailingLists = new ArrayList<String>(); } else { 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<UserChoice> owners = ownersPalette.getSelectedChoices(); while (owners.hasNext()) { repositoryModel.addOwner(owners.next().getUserId()); } // 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>(); Iterator<Component> customFieldsListViewIterator = customFieldsListView.iterator(); while (customFieldsListViewIterator.hasNext()) { ListItem<String> child = (ListItem<String>) customFieldsListViewIterator.next(); String key = child.getModelObject(); TextField<String> field = (TextField<String>) child.get("customFieldValue"); String value = field.getValue(); repositoryModel.customFields.put(key, value); } // save the repository app().gitblit().updateRepositoryModel(oldName, repositoryModel, isCreate); // repository access permissions if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)) { app().gitblit().setUserAccessPermissions(repositoryModel, repositoryUsers); app().gitblit().setTeamAccessPermissions(repositoryModel, repositoryTeams); } } catch (GitBlitException e) { error(e.getMessage()); return; } setResponsePage(SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryModel.name)); } }; // Determine available refs & branches List<String> availableRefs = new ArrayList<String>(); List<String> availableBranches = new ArrayList<String>(); if (!ArrayUtils.isEmpty(repositoryModel.availableRefs)) { for (String ref : repositoryModel.availableRefs) { if (!ref.startsWith(Constants.R_TICKET)) { availableRefs.add(ref); if (ref.startsWith(Constants.R_HEADS)) { availableBranches.add(Repository.shortenRefName(ref)); } } } } // do not let the browser pre-populate these fields form.add(new AttributeModifier("autocomplete", "off")); // // // GENERAL // namePanel = new RepositoryNamePanel("namePanel", repositoryModel); namePanel.setEditable(allowEditName); form.add(namePanel); // XXX AccessPolicyPanel is defined later. form.add(new ChoiceOption<String>("head", getString("gb.headRef"), getString("gb.headRefDescription"), new PropertyModel<String>(repositoryModel, "HEAD"), availableRefs)); // // PERMISSIONS // form.add(ownersPalette); form.add(usersPalette); form.add(teamsPalette); // // TICKETS // form.add(new BooleanOption("acceptNewPatchsets", getString("gb.acceptNewPatchsets"), getString("gb.acceptNewPatchsetsDescription"), new PropertyModel<Boolean>(repositoryModel, "acceptNewPatchsets"))); form.add(new BooleanOption("acceptNewTickets", getString("gb.acceptNewTickets"), getString("gb.acceptNewTicketsDescription"), new PropertyModel<Boolean>(repositoryModel, "acceptNewTickets"))); form.add(new BooleanOption("requireApproval", getString("gb.requireApproval"), getString("gb.requireApprovalDescription"), new PropertyModel<Boolean>(repositoryModel, "requireApproval"))); form.add(new ChoiceOption<String>("mergeTo", getString("gb.mergeTo"), getString("gb.mergeToDescription"), new PropertyModel<String>(repositoryModel, "mergeTo"), availableBranches)); form.add(new ChoiceOption<MergeType>("mergeType", getString("gb.mergeType"), getString("gb.mergeTypeDescription"), new PropertyModel<MergeType>(repositoryModel, "mergeType"), Arrays.asList(MergeType.values()))); // // RECEIVE // form.add(new BooleanOption("isFrozen", getString("gb.isFrozen"), getString("gb.isFrozenDescription"), new PropertyModel<Boolean>(repositoryModel, "isFrozen"))); form.add(new BooleanOption("incrementalPushTags", getString("gb.enableIncrementalPushTags"), getString("gb.useIncrementalPushTagsDescription"), new PropertyModel<Boolean>(repositoryModel, "useIncrementalPushTags"))); final CheckBox verifyCommitter = new CheckBox("checkbox", new PropertyModel<Boolean>(repositoryModel, "verifyCommitter")); verifyCommitter.setOutputMarkupId(true); form.add(new BooleanOption("verifyCommitter", getString("gb.verifyCommitter"), getString("gb.verifyCommitterDescription") + "<br/>" + getString("gb.verifyCommitterNote"), verifyCommitter).setIsHtmlDescription(true)); form.add(preReceivePalette); form.add(new BulletListPanel("inheritedPreReceive", getString("gb.inherited"), app().repositories().getPreReceiveScriptsInherited(repositoryModel))); form.add(postReceivePalette); form.add(new BulletListPanel("inheritedPostReceive", getString("gb.inherited"), app().repositories().getPostReceiveScriptsInherited(repositoryModel))); WebMarkupContainer customFieldsSection = new WebMarkupContainer("customFieldsSection"); customFieldsSection.add(customFieldsListView); form.add(customFieldsSection .setVisible(!app().settings().getString(Keys.groovy.customFields, "").isEmpty())); // // FEDERATION // List<FederationStrategy> federationStrategies = new ArrayList<FederationStrategy>( Arrays.asList(FederationStrategy.values())); // federation strategies - remove ORIGIN choice if this repository has no origin. if (StringUtils.isEmpty(repositoryModel.origin)) { federationStrategies.remove(FederationStrategy.FEDERATE_ORIGIN); } form.add(new ChoiceOption<FederationStrategy>("federationStrategy", getString("gb.federationStrategy"), getString("gb.federationStrategyDescription"), new DropDownChoice<FederationStrategy>("choice", new PropertyModel<FederationStrategy>(repositoryModel, "federationStrategy"), federationStrategies, new FederationTypeRenderer()))); form.add(federationSetsPalette); // // SEARCH // form.add(indexedBranchesPalette); // // GARBAGE COLLECTION // boolean gcEnabled = app().settings().getBoolean(Keys.git.enableGarbageCollection, false); int defaultGcPeriod = app().settings().getInteger(Keys.git.defaultGarbageCollectionPeriod, 7); if (repositoryModel.gcPeriod == 0) { repositoryModel.gcPeriod = defaultGcPeriod; } List<Integer> gcPeriods = Arrays.asList(1, 2, 3, 4, 5, 7, 10, 14); form.add(new ChoiceOption<Integer>("gcPeriod", getString("gb.gcPeriod"), getString("gb.gcPeriodDescription"), new DropDownChoice<Integer>("choice", new PropertyModel<Integer>(repositoryModel, "gcPeriod"), gcPeriods, new GCPeriodRenderer())) .setEnabled(gcEnabled)); form.add(new TextOption("gcThreshold", getString("gb.gcThreshold"), getString("gb.gcThresholdDescription"), "span1", new PropertyModel<String>(repositoryModel, "gcThreshold")).setEnabled(gcEnabled)); // // MISCELLANEOUS // form.add(new TextOption("origin", getString("gb.origin"), getString("gb.originDescription"), "span6", new PropertyModel<String>(repositoryModel, "origin")).setEnabled(false)); form.add(new BooleanOption("showRemoteBranches", getString("gb.showRemoteBranches"), getString("gb.showRemoteBranchesDescription"), new PropertyModel<Boolean>(repositoryModel, "showRemoteBranches"))); form.add(new BooleanOption("skipSizeCalculation", getString("gb.skipSizeCalculation"), getString("gb.skipSizeCalculationDescription"), new PropertyModel<Boolean>(repositoryModel, "skipSizeCalculation"))); form.add(new BooleanOption("skipSummaryMetrics", getString("gb.skipSummaryMetrics"), getString("gb.skipSummaryMetricsDescription"), new PropertyModel<Boolean>(repositoryModel, "skipSummaryMetrics"))); List<Integer> maxActivityCommits = Arrays.asList(-1, 0, 25, 50, 75, 100, 150, 200, 250, 500); form.add(new ChoiceOption<Integer>("maxActivityCommits", getString("gb.maxActivityCommits"), getString("gb.maxActivityCommitsDescription"), new DropDownChoice<Integer>("choice", new PropertyModel<Integer>(repositoryModel, "maxActivityCommits"), maxActivityCommits, new MaxActivityCommitsRenderer()))); List<CommitMessageRenderer> renderers = Arrays.asList(CommitMessageRenderer.values()); form.add(new ChoiceOption<CommitMessageRenderer>("commitMessageRenderer", getString("gb.commitMessageRenderer"), getString("gb.commitMessageRendererDescription"), new DropDownChoice<CommitMessageRenderer>("choice", new PropertyModel<CommitMessageRenderer>(repositoryModel, "commitMessageRenderer"), renderers))); metricAuthorExclusions = new Model<String>(ArrayUtils.isEmpty(repositoryModel.metricAuthorExclusions) ? "" : StringUtils.flattenStrings(repositoryModel.metricAuthorExclusions, " ")); form.add(new TextOption("metricAuthorExclusions", getString("gb.metricAuthorExclusions"), getString("gb.metricAuthorExclusions"), "span6", metricAuthorExclusions)); mailingLists = new Model<String>(ArrayUtils.isEmpty(repositoryModel.mailingLists) ? "" : StringUtils.flattenStrings(repositoryModel.mailingLists, " ")); form.add(new TextOption("mailingLists", getString("gb.mailingLists"), getString("gb.mailingLists"), "span6", mailingLists)); // initial enable/disable of permission controls if (repositoryModel.accessRestriction.equals(AccessRestrictionType.NONE)) { // anonymous everything, disable all controls usersPalette.setEnabled(false); teamsPalette.setEnabled(false); verifyCommitter.setEnabled(false); } else { // authenticated something // enable authorization controls verifyCommitter.setEnabled(true); boolean allowFineGrainedControls = repositoryModel.authorizationControl .equals(AuthorizationControl.NAMED); usersPalette.setEnabled(allowFineGrainedControls); teamsPalette.setEnabled(allowFineGrainedControls); } // // ACCESS POLICY PANEL (GENERAL) // AjaxFormChoiceComponentUpdatingBehavior callback = new AjaxFormChoiceComponentUpdatingBehavior() { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { accessPolicyPanel.updateModel(repositoryModel); boolean allowAuthorizationControl = repositoryModel.accessRestriction .exceeds(AccessRestrictionType.NONE); verifyCommitter.setEnabled(allowAuthorizationControl); boolean allowFineGrainedControls = allowAuthorizationControl && repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED); usersPalette.setEnabled(allowFineGrainedControls); teamsPalette.setEnabled(allowFineGrainedControls); if (allowFineGrainedControls) { repositoryModel.authorizationControl = AuthorizationControl.NAMED; } target.add(verifyCommitter); target.add(usersPalette); target.add(teamsPalette); } }; accessPolicyPanel = new AccessPolicyPanel("accessPolicyPanel", repositoryModel, callback); form.add(accessPolicyPanel); // // FORM CONTROLS // form.add(new Button("save")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { if (isCreate) { setResponsePage(RepositoriesPage.class); } else { setResponsePage(SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryModel.name)); } } }; cancel.setDefaultFormProcessing(false); form.add(cancel); // the user can delete if deletions are allowed AND the user is an admin or the personal owner // assigned ownership is not sufficient to allow deletion boolean canDelete = !isCreate && app().repositories().canDelete(repositoryModel) && (user.canAdmin() || user.isMyPersonalRepository(repositoryModel.name)); Link<Void> delete = new Link<Void>("delete") { private static final long serialVersionUID = 1L; @Override public void onClick() { RepositoryModel latestModel = app().repositories().getRepositoryModel(repositoryModel.name); boolean canDelete = app().repositories().canDelete(latestModel); if (canDelete) { if (app().gitblit().deleteRepositoryModel(latestModel)) { info(MessageFormat.format(getString("gb.repositoryDeleted"), latestModel)); if (latestModel.isPersonalRepository()) { // redirect to user's profile page String prefix = app().settings().getString(Keys.git.userRepositoryPrefix, "~"); String username = latestModel.projectPath.substring(prefix.length()); setResponsePage(UserPage.class, WicketUtils.newUsernameParameter(username)); } else { // redirect to server repositories page setResponsePage(RepositoriesPage.class); } } else { error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), latestModel)); } } else { error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), latestModel)); } } }; if (canDelete) { delete.add(new JavascriptEventConfirmation("click", MessageFormat.format(getString("gb.deleteRepository"), repositoryModel))); } form.add(delete.setVisible(canDelete)); add(form); }
From source file:com.gitblit.wicket.pages.EditTeamPage.java
License:Apache License
protected void setupPage(final TeamModel teamModel) { if (isCreate) { super.setupPage(getString("gb.newTeam"), ""); } else {// w ww. j ava 2 s . c o m 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; } if (isCreate) { // create another team info(MessageFormat.format(getString("gb.teamCreated"), teamModel.name)); } // back to users page setResponsePage(TeamsPage.class); } }; // do not let the browser pre-populate these fields form.add(new AttributeModifier("autocomplete", "off")); // not all user providers support manipulating team memberships boolean editMemberships = app().authentication().supportsTeamMembershipChanges(teamModel); // not all user providers support manipulating the admin role boolean changeAdminRole = app().authentication().supportsRoleChanges(teamModel, Role.ADMIN); // not all user providers support manipulating the create role boolean changeCreateRole = app().authentication().supportsRoleChanges(teamModel, Role.CREATE); // not all user providers support manipulating the fork role boolean changeForkRole = app().authentication().supportsRoleChanges(teamModel, Role.FORK); // field names reflective match TeamModel fields form.add(new TextField<String>("name")); form.add(new CheckBox("canAdmin").setEnabled(changeAdminRole)); form.add(new CheckBox("canFork") .setEnabled(app().settings().getBoolean(Keys.web.allowForking, true) && changeForkRole)); form.add(new CheckBox("canCreate").setEnabled(changeCreateRole)); 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(TeamsPage.class); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); add(form); }
From source file:com.gitblit.wicket.pages.EditTicketPage.java
License:Apache License
public EditTicketPage(PageParameters params) { super(params); UserModel currentUser = GitBlitWebSession.get().getUser(); if (currentUser == null) { currentUser = UserModel.ANONYMOUS; }//from w w w. j a v a2 s. c om long ticketId = 0L; try { String h = WicketUtils.getObject(params); ticketId = Long.parseLong(h); } catch (Exception e) { setResponsePage(TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)); } TicketModel ticket = app().tickets().getTicket(getRepositoryModel(), ticketId); if (ticket == null || !currentUser.canEdit(ticket, getRepositoryModel()) || !app().tickets().isAcceptingTicketUpdates(getRepositoryModel())) { setResponsePage(TicketsPage.class, WicketUtils.newObjectParameter(repositoryName, "" + ticketId)); // create a placeholder object so we don't trigger NPEs ticket = new TicketModel(); } typeModel = Model.of(ticket.type); titleModel = Model.of(ticket.title); topicModel = Model.of(ticket.topic == null ? "" : ticket.topic); responsibleModel = Model.of(); milestoneModel = Model.of(); mergeToModel = Model.of(ticket.mergeTo == null ? getRepositoryModel().mergeTo : ticket.mergeTo); statusModel = Model.of(ticket.status); priorityModel = Model.of(ticket.priority); severityModel = Model.of(ticket.severity); setStatelessHint(false); setOutputMarkupId(true); Form<Void> form = new Form<Void>("editForm"); add(form); List<Type> typeChoices; if (ticket.isProposal()) { typeChoices = Arrays.asList(Type.Proposal); } else { typeChoices = Arrays.asList(TicketModel.Type.choices()); } form.add(new DropDownChoice<TicketModel.Type>("type", typeModel, typeChoices)); form.add(new TextField<String>("title", titleModel)); form.add(new TextField<String>("topic", topicModel)); final IModel<String> markdownPreviewModel = Model.of(ticket.body == null ? "" : ticket.body); descriptionPreview = new Label("descriptionPreview", markdownPreviewModel); descriptionPreview.setEscapeModelStrings(false); descriptionPreview.setOutputMarkupId(true); form.add(descriptionPreview); descriptionEditor = new MarkdownTextArea("description", markdownPreviewModel, descriptionPreview); descriptionEditor.setRepository(repositoryName); descriptionEditor.setText(ticket.body); form.add(descriptionEditor); // status List<Status> statusChoices; if (ticket.isClosed()) { statusChoices = Arrays.asList(ticket.status, Status.Open); } else if (ticket.isProposal()) { statusChoices = Arrays.asList(TicketModel.Status.proposalWorkflow); } else if (ticket.isBug()) { statusChoices = Arrays.asList(TicketModel.Status.bugWorkflow); } else { statusChoices = Arrays.asList(TicketModel.Status.requestWorkflow); } Fragment status = new Fragment("status", "statusFragment", EditTicketPage.this); status.add(new DropDownChoice<TicketModel.Status>("status", statusModel, statusChoices)); form.add(status); List<TicketModel.Severity> severityChoices = Arrays.asList(TicketModel.Severity.choices()); form.add(new DropDownChoice<TicketModel.Severity>("severity", severityModel, severityChoices)); if (currentUser.canAdmin(ticket, getRepositoryModel())) { // responsible Set<String> userlist = new TreeSet<String>(ticket.getParticipants()); if (UserModel.ANONYMOUS.canPush(getRepositoryModel()) || AuthorizationControl.AUTHENTICATED == getRepositoryModel().authorizationControl) { // authorization is ANONYMOUS or AUTHENTICATED (i.e. all users can be set responsible) userlist.addAll(app().users().getAllUsernames()); } else { // authorization is by NAMED users (users with PUSH permission can be set responsible) for (RegistrantAccessPermission rp : app().repositories() .getUserAccessPermissions(getRepositoryModel())) { if (rp.permission.atLeast(AccessPermission.PUSH)) { userlist.add(rp.registrant); } } } List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>(); for (String username : userlist) { UserModel user = app().users().getUserModel(username); if (user != null && !user.disabled) { TicketResponsible responsible = new TicketResponsible(user); responsibles.add(responsible); if (user.username.equals(ticket.responsible)) { responsibleModel.setObject(responsible); } } } Collections.sort(responsibles); responsibles.add(new TicketResponsible(NIL, "", "")); Fragment responsible = new Fragment("responsible", "responsibleFragment", EditTicketPage.this); responsible.add(new DropDownChoice<TicketResponsible>("responsible", responsibleModel, responsibles)); form.add(responsible.setVisible(!responsibles.isEmpty())); // milestone List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open); for (TicketMilestone milestone : milestones) { if (milestone.name.equals(ticket.milestone)) { milestoneModel.setObject(milestone); break; } } if (milestoneModel.getObject() == null && !StringUtils.isEmpty(ticket.milestone)) { // ensure that this unrecognized milestone is listed // so that we get the <nil> selection. TicketMilestone tms = new TicketMilestone(ticket.milestone); milestones.add(tms); milestoneModel.setObject(tms); } if (!milestones.isEmpty()) { milestones.add(new TicketMilestone(NIL)); } // milestone Fragment milestone = new Fragment("milestone", "milestoneFragment", EditTicketPage.this); milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones)); form.add(milestone.setVisible(!milestones.isEmpty())); // priority Fragment priority = new Fragment("priority", "priorityFragment", EditTicketPage.this); List<TicketModel.Priority> priorityChoices = Arrays.asList(TicketModel.Priority.choices()); priority.add(new DropDownChoice<TicketModel.Priority>("priority", priorityModel, priorityChoices)); form.add(priority); // mergeTo (integration branch) List<String> branches = new ArrayList<String>(); for (String branch : getRepositoryModel().getLocalBranches()) { // exclude ticket branches if (!branch.startsWith(Constants.R_TICKET)) { branches.add(Repository.shortenRefName(branch)); } } branches.remove(Repository.shortenRefName(getRepositoryModel().mergeTo)); branches.add(0, Repository.shortenRefName(getRepositoryModel().mergeTo)); Fragment mergeto = new Fragment("mergeto", "mergeToFragment", EditTicketPage.this); mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches)); form.add(mergeto.setVisible(!branches.isEmpty())); } else { // user can not admin this ticket form.add(new Label("responsible").setVisible(false)); form.add(new Label("milestone").setVisible(false)); form.add(new Label("mergeto").setVisible(false)); form.add(new Label("priority").setVisible(false)); } form.add(new AjaxButton("update") { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target) { long ticketId = 0L; try { String h = WicketUtils.getObject(getPageParameters()); ticketId = Long.parseLong(h); } catch (Exception e) { setResponsePage(TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)); } TicketModel ticket = app().tickets().getTicket(getRepositoryModel(), ticketId); String createdBy = GitBlitWebSession.get().getUsername(); Change change = new Change(createdBy); String title = titleModel.getObject(); if (StringUtils.isEmpty(title)) { return; } if (!ticket.title.equals(title)) { // title change change.setField(Field.title, title); } String description = Optional.fromNullable(descriptionEditor.getText()).or(""); if ((StringUtils.isEmpty(ticket.body) && !StringUtils.isEmpty(description)) || (!StringUtils.isEmpty(ticket.body) && !ticket.body.equals(description))) { // description change change.setField(Field.body, description); } Status status = statusModel.getObject(); if (!ticket.status.equals(status)) { // status change change.setField(Field.status, status); } Type type = typeModel.getObject(); if (!ticket.type.equals(type)) { // type change change.setField(Field.type, type); } String topic = Optional.fromNullable(topicModel.getObject()).or(""); if ((StringUtils.isEmpty(ticket.topic) && !StringUtils.isEmpty(topic)) || (!StringUtils.isEmpty(ticket.topic) && !ticket.topic.equals(topic))) { // topic change change.setField(Field.topic, topic); } TicketResponsible responsible = responsibleModel == null ? null : responsibleModel.getObject(); if (responsible != null && !responsible.username.equals(ticket.responsible)) { // responsible change change.setField(Field.responsible, responsible.username); if (!StringUtils.isEmpty(responsible.username)) { if (!ticket.isWatching(responsible.username)) { change.watch(responsible.username); } } } TicketMilestone milestone = milestoneModel == null ? null : milestoneModel.getObject(); if (milestone != null && !milestone.name.equals(ticket.milestone)) { // milestone change if (NIL.equals(milestone.name)) { change.setField(Field.milestone, ""); } else { change.setField(Field.milestone, milestone.name); } } TicketModel.Priority priority = priorityModel.getObject(); if (!ticket.priority.equals(priority)) { change.setField(Field.priority, priority); } TicketModel.Severity severity = severityModel.getObject(); if (!ticket.severity.equals(severity)) { change.setField(Field.severity, severity); } String mergeTo = mergeToModel.getObject(); if ((StringUtils.isEmpty(ticket.mergeTo) && !StringUtils.isEmpty(mergeTo)) || (!StringUtils.isEmpty(mergeTo) && !mergeTo.equals(ticket.mergeTo))) { // integration branch change change.setField(Field.mergeTo, mergeTo); } if (change.hasFieldChanges()) { if (!ticket.isWatching(createdBy)) { change.watch(createdBy); } ticket = app().tickets().updateTicket(getRepositoryModel(), ticket.number, change); if (ticket != null) { TicketNotifier notifier = app().tickets().createNotifier(); notifier.sendMailing(ticket); redirectTo(TicketsPage.class, WicketUtils.newObjectParameter(getRepositoryModel().name, "" + ticket.number)); } else { // TODO error } } else { // nothing to change?! redirectTo(TicketsPage.class, WicketUtils.newObjectParameter(getRepositoryModel().name, "" + ticket.number)); } } }); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setResponsePage(TicketsPage.class, getPageParameters()); } }; cancel.setDefaultFormProcessing(false); form.add(cancel); }