/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jabylon.team.git.config; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.IValidator; import org.apache.wicket.validation.ValidationError; import org.eclipse.jgit.transport.RefSpec; import org.jabylon.properties.Project; import org.jabylon.properties.ProjectVersion; import org.jabylon.rest.ui.model.AttachableModel; import org.jabylon.rest.ui.model.BooleanPreferencesPropertyModel; import org.jabylon.rest.ui.model.PreferencesPropertyModel; import org.jabylon.rest.ui.wicket.BasicPanel; import org.jabylon.rest.ui.wicket.components.ControlGroup; import org.jabylon.rest.ui.wicket.config.AbstractConfigSection; import org.jabylon.security.CommonPermissions; import org.jabylon.team.git.GitConstants; import org.osgi.service.prefs.Preferences; public class GitVersionConfigPanel extends BasicPanel<ProjectVersion> { private static final long serialVersionUID = 1L; public GitVersionConfigPanel(String id, IModel<ProjectVersion> model, Preferences config) { super(id, model); PreferencesPropertyModel pushRefspecModel = new PreferencesPropertyModel(config, GitConstants.KEY_PUSH_REFSPEC, ""); ControlGroup pushRefspecGroup = new ControlGroup("push-refspec-group", nls("push.refspec.label"),nls("push.refspec.help")); TextField<String> refspecTextField = new TextField<String>("push-refspec",pushRefspecModel); refspecTextField.add(new RefspecValidator()); refspecTextField.setRequired(false); refspecTextField.setConvertEmptyInputStringToNull(false); pushRefspecGroup.add(refspecTextField); add(pushRefspecGroup); BooleanPreferencesPropertyModel rebase = new BooleanPreferencesPropertyModel(config, GitConstants.KEY_REBASE, true); ControlGroup rebaseGroup = new ControlGroup("rebase-group", nls("rebase.label"),nls("rebase.help")); CheckBox rebaseCheckbox = new CheckBox("rebase",rebase); rebaseGroup.add(rebaseCheckbox); add(rebaseGroup); } public static class GitVersionConfigSection extends AbstractConfigSection<ProjectVersion>{ private static final long serialVersionUID = 1L; private boolean gitSelected(IModel<ProjectVersion> model) { return "Git".equals(getProject(model).getTeamProvider()); } Project getProject(IModel<ProjectVersion> model) { if (model instanceof AttachableModel) { AttachableModel<ProjectVersion> m = (AttachableModel<ProjectVersion>) model; return (Project) m.getParent().getObject(); } return model.getObject().getParent(); } @Override public WebMarkupContainer doCreateContents(String id, IModel<ProjectVersion> input, Preferences config) { GitVersionConfigPanel panel = new GitVersionConfigPanel(id, input, config); panel.setVisible(gitSelected(input)); return panel; } @Override public boolean isVisible(IModel<ProjectVersion> input, Preferences config) { return gitSelected(input) && super.isVisible(input, config); } @Override public void commit(IModel<ProjectVersion> input, Preferences config) { // nothing to do } @Override public String getRequiredPermission() { Project project = getProject(getModel()); String projectName = null; if(project!=null) projectName = project.getName(); return CommonPermissions.constructPermission(CommonPermissions.PROJECT,projectName,CommonPermissions.ACTION_CONFIG); } } private static class RefspecValidator implements IValidator<String> { private static final long serialVersionUID = 1L; @Override public void validate(IValidatable<String> validatable) { String value = validatable.getValue(); try { new RefSpec(value); } catch (Exception e) { validatable.error(new ValidationError(e.getMessage())); } } } }