From 69c7cd5d761e41bbe1cf6cb468b8a0032964a909 Mon Sep 17 00:00:00 2001 From: Bon-Yong Lee Date: Fri, 7 Dec 2012 17:10:14 +0900 Subject: [PATCH] [Title] Fix bug for template in CLI [Desc.] [Issue] Redmine-5681 --- .../src/org/tizen/cli/command/CreateTemplate.java | 74 ++++++++++++++++------ .../src/org/tizen/cli/command/SearchTemplate.java | 2 +- .../src/org/tizen/cli/exec/AbstractLauncher.java | 53 +++++++++------- .../src/org/tizen/cli/exec/ConsolePrompter.java | 8 --- .../org/tizen/cli/exec/template/ClientMain.java | 2 +- .../org/tizen/cli/util/TemplateModelProvider.java | 24 +++++-- .../tizen/cli/exec/template/ClientMainTest.java | 1 - .../test/src/org/tizen/cli/exec/wgt/MainTest.java | 2 +- 8 files changed, 108 insertions(+), 58 deletions(-) diff --git a/org.tizen.cli/src/org/tizen/cli/command/CreateTemplate.java b/org.tizen.cli/src/org/tizen/cli/command/CreateTemplate.java index 002edef..b789316 100755 --- a/org.tizen.cli/src/org/tizen/cli/command/CreateTemplate.java +++ b/org.tizen.cli/src/org/tizen/cli/command/CreateTemplate.java @@ -1,16 +1,18 @@ package org.tizen.cli.command; import java.io.IOException; -import java.net.URL; +import java.util.HashMap; import org.tizen.cli.util.TemplateModelProvider; import org.tizen.common.core.command.ExecutionContext; import org.tizen.common.verrari.Realm; -import org.tizen.common.verrari.RealmFactory; +import org.tizen.common.verrari.Storage; import org.tizen.common.verrari.Template; import org.tizen.common.verrari.TemplateContext; import org.tizen.common.verrari.TemplateException; +import org.tizen.common.verrari.realm.StandardRealm; import org.tizen.common.verrari.storage.FileStorage; +import org.tizen.common.verrari.template.TemplateConstants; public class CreateTemplate extends AbstractCommand @@ -28,31 +30,17 @@ implements CommandWithParameter context.getPrompter().error( "One more template id required" ); return ; } - Realm realm = (Realm) context.getValue( PluginConstants.REALM ); - - if ( null == realm ) - { - final URL url = new URL( "file:///home/bylee/.install/tizen-cli/template/config.json" ); - realm = RealmFactory.getInstance().create( url ); - } + final Realm realm = (Realm) context.getValue( PluginConstants.REALM ); final FileStorage storage = new FileStorage( context.getFileHandler() ); final TemplateModelProvider models = new TemplateModelProvider( context ); - TemplateContext.set( models ); + TemplateContext.getInstance().setModelProvider( models ); + try { - for ( final String arg : args ) - { - logger.debug( "Arg :{}", arg ); - final Template template = realm.getTemplate( arg ); - - logger.debug( "Template :{}", template ); - - template.template( models, storage ); - - } + template( realm, args, models, storage ); } finally { @@ -61,4 +49,50 @@ implements CommandWithParameter } + protected void + template( + final Realm realm, + final String[] names, + final TemplateModelProvider models, + final Storage storage + ) throws IOException, TemplateException + { + final HashMap ret = new HashMap(); + + template( realm, names, models, storage, ret ); + } + + protected + void + template( + final Realm realm, + final String[] names, + final TemplateModelProvider models, + final Storage storage, + final HashMap cache + ) + throws IOException, TemplateException + { + for ( final String name : names ) + { + logger.trace( "Template name :{}", name ); + Template template = cache.get( name ); + if ( null == template ) + { + logger.debug( "{} alread cached", name ); + template = realm.getTemplate( name ); + } + cache.put( name, template ); + template.template( models, storage ); + final String[] dependencies = StandardRealm.separate( template.getAttribute( TemplateConstants.ATTR_DEPENDENCY ) ); + if ( null == dependencies ) + { + continue; + } + + template( realm, dependencies, models, storage, cache ); + } + + } + } diff --git a/org.tizen.cli/src/org/tizen/cli/command/SearchTemplate.java b/org.tizen.cli/src/org/tizen/cli/command/SearchTemplate.java index 614be66..5b4abde 100755 --- a/org.tizen.cli/src/org/tizen/cli/command/SearchTemplate.java +++ b/org.tizen.cli/src/org/tizen/cli/command/SearchTemplate.java @@ -41,7 +41,7 @@ implements CommandWithParameter final SearchableRealm searchable = (SearchableRealm) realm; final String keyword = args[0]; final Collection templates = searchable.search( - new Condition( Operation.Contains, "keyword", keyword ) + new Condition( Operation.CaseInsensitiveContains, "keyword", keyword ) ); if ( isEmpty( templates ) ) diff --git a/org.tizen.cli/src/org/tizen/cli/exec/AbstractLauncher.java b/org.tizen.cli/src/org/tizen/cli/exec/AbstractLauncher.java index e48e8ee..1eac558 100755 --- a/org.tizen.cli/src/org/tizen/cli/exec/AbstractLauncher.java +++ b/org.tizen.cli/src/org/tizen/cli/exec/AbstractLauncher.java @@ -43,9 +43,13 @@ import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.tizen.common.config.Preference; +import org.tizen.common.config.provider.EnvironmentProvider; +import org.tizen.common.config.provider.SystemPropertiesProvider; import org.tizen.common.core.command.ExecutionContext; import org.tizen.common.core.command.Executor; import org.tizen.common.core.command.Prompter; +import org.tizen.common.core.command.UntrackedException; import org.tizen.common.core.command.policy.PolicyRegistry; import org.tizen.common.file.FileHandler; import org.tizen.common.file.FileHandler.Attribute; @@ -304,6 +308,8 @@ AbstractLauncher ) throws Exception { + Preference.register( "", new EnvironmentProvider() ); + Preference.register( "", new SystemPropertiesProvider() ); executor = new CommandLineExecutor( new ConsolePrompter( System.out, new InputStreamReader( System.in ) ) ); @@ -360,7 +366,7 @@ AbstractLauncher } } - catch ( final Exception e ) + catch ( final Throwable e ) { handleException( e ); } @@ -374,30 +380,33 @@ AbstractLauncher protected void handleException( - final Exception e + final Throwable e ) { - logger.error( "Command stop because of exception", e ); - - Throwable iter = e; - while ( null != iter ) - { - final String localMessage = iter.getLocalizedMessage(); - if ( null != localMessage ) - { - logger.error( localMessage ); - return ; - } - - final String message = iter.getMessage(); - if ( null != message ) - { - logger.error( message ); - return ; - } - iter = iter.getCause(); - } + if ( e instanceof UntrackedException ) + { + getPrompter().error( e.getMessage() ); + return ; + } + logger.error( "Command stop because of exception", e ); + Throwable iter = e; + while ( null != iter ) + { + final String localMessage = iter.getLocalizedMessage(); + if ( null != localMessage ) + { + logger.error( localMessage ); + return ; + } + final String message = iter.getMessage(); + if ( null != message ) + { + logger.error( message ); + return ; + } + iter = iter.getCause(); + } } /** diff --git a/org.tizen.cli/src/org/tizen/cli/exec/ConsolePrompter.java b/org.tizen.cli/src/org/tizen/cli/exec/ConsolePrompter.java index 7af263b..471bc91 100755 --- a/org.tizen.cli/src/org/tizen/cli/exec/ConsolePrompter.java +++ b/org.tizen.cli/src/org/tizen/cli/exec/ConsolePrompter.java @@ -46,9 +46,7 @@ import org.tizen.common.core.command.prompter.AbstractPrompter; import org.tizen.common.core.command.prompter.ChoiceOption; import org.tizen.common.core.command.prompter.GenericOption; import org.tizen.common.core.command.prompter.Option; -import org.tizen.common.util.ArrayUtil; import org.tizen.common.util.Assert; -import org.tizen.common.util.CollectionUtil; /** *

@@ -168,12 +166,6 @@ implements Prompter ) { out.print( question ); - if ( !ArrayUtil.isEmpty( options ) ) - { - out.print( "( " ); - out.print( CollectionUtil.concatenate( options, " / " ) ); - out.print( " )" ); - } } /* (non-Javadoc) diff --git a/org.tizen.cli/src/org/tizen/cli/exec/template/ClientMain.java b/org.tizen.cli/src/org/tizen/cli/exec/template/ClientMain.java index 28952dd..823cf77 100755 --- a/org.tizen.cli/src/org/tizen/cli/exec/template/ClientMain.java +++ b/org.tizen.cli/src/org/tizen/cli/exec/template/ClientMain.java @@ -104,7 +104,7 @@ implements ILaunchOptions ) throws Exception { - final String urlStr = nvl( Preference.getValue( "tizen.template.realm", null ) ); + String urlStr = nvl( Preference.getValue( "tizen.template.realm", cmdLine.getOptionValue( OPT_REALM ) ) ); logger.info( "Realm url :{}", urlStr ); if ( isEmpty( urlStr ) ) { diff --git a/org.tizen.cli/src/org/tizen/cli/util/TemplateModelProvider.java b/org.tizen.cli/src/org/tizen/cli/util/TemplateModelProvider.java index d11b20c..27b07b7 100755 --- a/org.tizen.cli/src/org/tizen/cli/util/TemplateModelProvider.java +++ b/org.tizen.cli/src/org/tizen/cli/util/TemplateModelProvider.java @@ -1,5 +1,8 @@ package org.tizen.cli.util; +import static org.tizen.common.util.ObjectUtil.nvl; +import static org.tizen.common.util.StringUtil.nvl; + import java.util.Collection; import org.tizen.common.config.Preference; @@ -7,13 +10,17 @@ import org.tizen.common.core.command.ExecutionContext; import org.tizen.common.core.command.Prompter; import org.tizen.common.core.command.prompter.GenericOption; import org.tizen.common.verrari.IModelProvider; +import org.tizen.common.verrari.template.StandardTemplate; public class TemplateModelProvider implements IModelProvider { + protected static final Object NULL = new Object(); + protected final ExecutionContext context; + public TemplateModelProvider( final ExecutionContext context @@ -42,7 +49,10 @@ implements IModelProvider ) { Object obj = context.getValue( key ); - if ( null != obj ) + if ( NULL.equals( obj ) ) + { + return null; + } else if ( null != obj ) { return obj; } @@ -55,7 +65,7 @@ implements IModelProvider obj = inputFromUser( key ); - this.context.setValue( key, obj ); + this.context.setValue( key, nvl( obj, NULL ) ); return obj; } @@ -64,8 +74,14 @@ implements IModelProvider { final Prompter prompter = this.context.getPrompter(); final GenericOption opt = new GenericOption(); - - prompter.interact( "Input " + key + " ?", opt ); + + StandardTemplate current = StandardTemplate.getCurrentTemplate(); + String message = "Input " + key + " ?"; + if ( null != current ) + { + message = nvl( current.getMessage( key ), message ); + } + prompter.interact( message, opt ); return opt.getAnswer(); } diff --git a/org.tizen.cli/test/src/org/tizen/cli/exec/template/ClientMainTest.java b/org.tizen.cli/test/src/org/tizen/cli/exec/template/ClientMainTest.java index e711aa6..eb1536a 100755 --- a/org.tizen.cli/test/src/org/tizen/cli/exec/template/ClientMainTest.java +++ b/org.tizen.cli/test/src/org/tizen/cli/exec/template/ClientMainTest.java @@ -32,7 +32,6 @@ import org.apache.commons.cli.Options; import org.apache.commons.cli.PosixParser; import org.junit.Test; import org.tizen.cli.exec.CommandLineExecutor; -import org.tizen.cli.exec.sign.Main; import org.tizen.common.core.command.Executor; import org.tizen.common.core.command.Prompter; diff --git a/org.tizen.cli/test/src/org/tizen/cli/exec/wgt/MainTest.java b/org.tizen.cli/test/src/org/tizen/cli/exec/wgt/MainTest.java index 3e27223..b41e528 100755 --- a/org.tizen.cli/test/src/org/tizen/cli/exec/wgt/MainTest.java +++ b/org.tizen.cli/test/src/org/tizen/cli/exec/wgt/MainTest.java @@ -234,7 +234,7 @@ extends AbstractMainTest { final Main testTarget = new Main() { @Override - protected void handleException( Exception e ) + protected void handleException( Throwable e ) { throw new IllegalStateException( e ); } -- 2.7.4