/*-------------------------------------------------------------------------- * Copyright 2008 utgenome.org * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *--------------------------------------------------------------------------*/ //-------------------------------------- // utgb-shell Project // // Create.java // Since: Jan 9, 2008 // // $URL$ // $Author$ //-------------------------------------- package org.utgenome.shell; import java.io.File; import java.io.IOException; import org.xerial.util.StringUtil; import org.xerial.util.cui.OptionHandler; import org.xerial.util.cui.OptionParser; import org.xerial.util.cui.OptionParserException; import org.xerial.util.log.Logger; /** * Create sub command * * @author leo * */ public class Create extends UTGBShellSubCommandBase { private static Logger _logger = Logger.getLogger(Create.class); public static enum Opt { PROGRAM_LANGUAGE, OUTPUT_FOLDER, PACKAGE_NAME, GROUP } private OptionParser optionParser = new OptionParser(); private String lang = "java"; private String packageName = null; private String projectName = "default"; private String group = "org.utgenome.track"; public static enum OverwriteMode { INTERACTIVE, YES_TO_ALL, NO_TO_ALL } public Create() { // setup options /* * optionParser.addOptionWithArgument(Opt.PROGRAM_LANGUAGE, "l", "lang", "PROGRAM_TYPE", "output project type * (java, ruby). default=java", new OptionHandler() { public void handle(OptionParser parser) throws * OptionParserException { lang = parser.getValue(Opt.PROGRAM_LANGUAGE); } }); */ optionParser.addOptionWithArgument(Opt.PACKAGE_NAME, "p", "package", "PACKAGE_NAME", "specify the package name, e.g. org.yourdomain.track", new OptionHandler() { public void handle(OptionParser parser) throws OptionParserException { packageName = parser.getValue(Opt.PACKAGE_NAME); } }); optionParser.addOptionWithArgument(Opt.GROUP, "g", "group", "GROUP_NAME", "specify the maven group name of this project. default = org.utgenome.track", new OptionHandler() { public void handle(OptionParser parser) throws OptionParserException { group = parser.getValue(Opt.GROUP); } }); } public void execute(String[] args) throws UTGBShellException { // initialize the parameters try { optionParser.parse(args); if (optionParser.getArgumentLength() <= 0) { System.err.println("no project name is given."); return; } else projectName = optionParser.getArgument(0); for (int i = 0; i < projectName.length(); i++) { if (StringUtil.isWhiteSpace(projectName.substring(i, i + 1))) { System.err.println("project name must not contain white spaces: " + projectName); return; } } if (packageName == null) packageName = projectName; String outputFolder = globalOption.projectDir; if (outputFolder == null || outputFolder.length() <= 0) outputFolder = projectName; else { if (!outputFolder.endsWith("/")) outputFolder = outputFolder + "/"; outputFolder = outputFolder + projectName; } // create the scaffold createScaffold(projectName, packageName, group, outputFolder, new CreateAllScaffoldFileFilter()); } catch (Exception e) { throw new UTGBShellException(e); } } public static interface ScaffoldFileFilter { public boolean accept(String logicalPathName); } public static class CreateAllScaffoldFileFilter implements ScaffoldFileFilter { public boolean accept(String pathname) { return true; } } public static void createScaffold(String projectName, String packageName, String group, String outputFolder, ScaffoldFileFilter generateFileFilter) throws IOException, UTGBShellException { ScaffoldGenerator scaffoldGenerator = new ScaffoldGenerator(outputFolder, generateFileFilter); scaffoldGenerator.createProjectScaffold(projectName, packageName, group); // scaffoldGenerator.createGWTModuleScaffold(projectName, packageName); } /** * Create directories including its parent folders if not exist * * @param dir */ public static void mkdirs(File dir) { if (!dir.exists()) { _logger.info("create a directory: " + getPath(dir)); dir.mkdirs(); } } @Override public String name() { return "create"; } public String getDetailedDescription() { return loadUsage("help-create.txt"); } public String getOneLinerDescription() { return "create a new project for implmenting your own track."; } public String getOptionList() { return optionParser.helpMessage(); } }