/* * Jabox Open Source Version * Copyright (C) 2009-2010 Dimitris Kapanidis * * This file is part of Jabox * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package org.jabox.webapp.pages.project; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.maven.MavenExecutionException; import org.apache.maven.artifact.InvalidRepositoryException; import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.apache.wicket.persistence.provider.ProjectXstreamDao; import org.apache.wicket.validation.validator.PatternValidator; import org.apache.wicket.validation.validator.StringValidator; import org.jabox.apis.scm.SCMException; import org.jabox.application.ICreateProjectUtil; import org.jabox.model.Project; import org.jabox.webapp.pages.BaseProjectsPage; import org.jabox.webapp.panels.JaboxFeedbackPanel; import org.jabox.webapp.validation.ShinyForm; import org.xml.sax.SAXException; import com.google.inject.Inject; @AuthorizeInstantiation("ADMIN") public class CreateProject extends BaseProjectsPage { private static final long serialVersionUID = -6051173629887691918L; @Inject private ICreateProjectUtil _createProjectUtil; public CreateProject() { final Project _project = new Project(); // Add a form with an onSumbit implementation that sets a message Form<Project> form = new ShinyForm<Project>("form") { private static final long serialVersionUID = -662744155604166387L; @Override protected void onSubmit() { // We need to persist twice because the id is necessary for the // creation of the project. if (_project.getMavenArchetype() == null) { error("Archetype is invalid"); return; } ProjectXstreamDao.persist(_project); try { _createProjectUtil.createProject(_project); } catch (InvalidRepositoryException e) { error("Error creating project!"); return; } catch (SAXException e) { error("Error creating project!"); return; } catch (SCMException e) { error("Error creating project!"); return; } catch (IOException e) { error("Error creating project!"); return; } catch (MavenExecutionException e) { error("Error creating project!"); return; } catch (RuntimeException e) { error("Error creating project! Maybe the Container is not started yet?"); return; } ProjectXstreamDao.persist(_project); success("Project \"" + _project.getName() + "\" Created."); } }; form.setModel(new CompoundPropertyModel<Project>(_project)); add(form); // Add a FeedbackPanel for displaying form messages // create feedback panel to show errors final JaboxFeedbackPanel fb = new JaboxFeedbackPanel("feedback"); fb.setOutputMarkupId(true); add(fb); // Name FormComponent<String> name = new RequiredTextField<String>("name"); form.add(name); name.add(new CreateProjectValidator()); name.add(new PatternValidator("[a-z0-9-]*")); name.add(new StringValidator.MaximumLengthValidator(24)); // Description RequiredTextField<Project> description = new RequiredTextField<Project>("description"); form.add(description); RequiredTextField<String> archetype = new RequiredTextField<String>("archetype"); String dataSource = generateDataSource(); archetype.add(new AttributeAppender("data-source", new Model<String>(dataSource), " ")); form.add(archetype); // Description // RequiredTextField<Project> mavenArchetype = // new RequiredTextField<Project>("mavenArchetype"); // form.add(mavenArchetype); form.add(new TextField<Project>("sourceEncoding")); form.add(new CheckBox("signArtifactReleases")); } private String generateDataSource() { StringBuffer data = new StringBuffer(); data.append("["); List<String> archetypes = new ArrayList<String>(); InputStream is = CreateProject.class .getResourceAsStream("/org/jabox/webapp/pages/project/archetypes.csv"); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String thisLine; try { while ((thisLine = reader.readLine()) != null) { archetypes.add(thisLine); } } catch (IOException e) { e.printStackTrace(); } boolean addComma = false; for (String archetype : archetypes) { if (!addComma) { addComma = true; } else { data.append(","); } data.append("\""); data.append(archetype); data.append("\""); } data.append("]"); return data.toString(); } }