[Title] Fix bug for template in CLI
authorBon-Yong Lee <bonyong.lee@samsung.com>
Fri, 7 Dec 2012 08:10:14 +0000 (17:10 +0900)
committerBon-Yong Lee <bonyong.lee@samsung.com>
Fri, 7 Dec 2012 08:10:14 +0000 (17:10 +0900)
[Desc.]
[Issue] Redmine-5681

org.tizen.cli/src/org/tizen/cli/command/CreateTemplate.java
org.tizen.cli/src/org/tizen/cli/command/SearchTemplate.java
org.tizen.cli/src/org/tizen/cli/exec/AbstractLauncher.java
org.tizen.cli/src/org/tizen/cli/exec/ConsolePrompter.java
org.tizen.cli/src/org/tizen/cli/exec/template/ClientMain.java
org.tizen.cli/src/org/tizen/cli/util/TemplateModelProvider.java
org.tizen.cli/test/src/org/tizen/cli/exec/template/ClientMainTest.java
org.tizen.cli/test/src/org/tizen/cli/exec/wgt/MainTest.java

index 002edef..b789316 100755 (executable)
@@ -1,16 +1,18 @@
 package org.tizen.cli.command;\r
 \r
 import java.io.IOException;\r
-import java.net.URL;\r
+import java.util.HashMap;\r
 \r
 import org.tizen.cli.util.TemplateModelProvider;\r
 import org.tizen.common.core.command.ExecutionContext;\r
 import org.tizen.common.verrari.Realm;\r
-import org.tizen.common.verrari.RealmFactory;\r
+import org.tizen.common.verrari.Storage;\r
 import org.tizen.common.verrari.Template;\r
 import org.tizen.common.verrari.TemplateContext;\r
 import org.tizen.common.verrari.TemplateException;\r
+import org.tizen.common.verrari.realm.StandardRealm;\r
 import org.tizen.common.verrari.storage.FileStorage;\r
+import org.tizen.common.verrari.template.TemplateConstants;\r
 \r
 public class CreateTemplate\r
 extends AbstractCommand\r
@@ -28,31 +30,17 @@ implements CommandWithParameter
             context.getPrompter().error( "One more template id required" );\r
             return ;\r
         }\r
-        Realm realm = (Realm) context.getValue( PluginConstants.REALM );\r
-        \r
-        if ( null == realm )\r
-        {\r
-            final URL url = new URL( "file:///home/bylee/.install/tizen-cli/template/config.json" );\r
-            realm = RealmFactory.getInstance().create( url );\r
-        }\r
+        final Realm realm = (Realm) context.getValue( PluginConstants.REALM );\r
         \r
         final FileStorage storage = new FileStorage( context.getFileHandler() );\r
         \r
         final TemplateModelProvider models = new TemplateModelProvider( context );\r
         \r
-        TemplateContext.set( models );\r
+        TemplateContext.getInstance().setModelProvider( models );\r
+        \r
         try\r
         {\r
-            for ( final String arg : args )\r
-            {\r
-                logger.debug( "Arg :{}", arg );\r
-                final Template template = realm.getTemplate( arg );\r
-                \r
-                logger.debug( "Template :{}", template );\r
-                \r
-                template.template( models, storage );\r
-                \r
-            }\r
+            template( realm, args, models, storage );\r
         }\r
         finally\r
         {\r
@@ -61,4 +49,50 @@ implements CommandWithParameter
         \r
     }\r
 \r
+    protected void\r
+    template(\r
+        final Realm realm,\r
+        final String[] names,\r
+        final TemplateModelProvider models,\r
+        final Storage storage\r
+    ) throws IOException, TemplateException\r
+    {\r
+        final HashMap<String, Template> ret = new HashMap<String, Template>();\r
+        \r
+        template( realm, names, models, storage, ret );\r
+    }\r
+\r
+    protected\r
+    void\r
+    template(\r
+        final Realm realm,\r
+        final String[] names,\r
+        final TemplateModelProvider models,\r
+        final Storage storage,\r
+        final HashMap<String, Template> cache\r
+    )\r
+    throws IOException, TemplateException\r
+    {\r
+        for ( final String name : names )\r
+        {\r
+            logger.trace( "Template name :{}", name );\r
+            Template template = cache.get( name );\r
+            if ( null == template )\r
+            {\r
+                logger.debug( "{} alread cached", name );\r
+                template = realm.getTemplate( name );\r
+            }\r
+            cache.put( name, template );\r
+            template.template( models, storage );\r
+            final String[] dependencies = StandardRealm.separate( template.getAttribute( TemplateConstants.ATTR_DEPENDENCY ) );\r
+            if ( null == dependencies )\r
+            {\r
+                continue;\r
+            }\r
+            \r
+            template( realm, dependencies, models, storage, cache );\r
+        }\r
+        \r
+    }\r
+\r
 }\r
index 614be66..5b4abde 100755 (executable)
@@ -41,7 +41,7 @@ implements CommandWithParameter
         final SearchableRealm searchable = (SearchableRealm) realm;\r
         final String keyword = args[0];\r
         final Collection<AttributeContainer> templates = searchable.search(\r
-            new Condition( Operation.Contains, "keyword", keyword )\r
+            new Condition( Operation.CaseInsensitiveContains, "keyword", keyword )\r
         );\r
 \r
         if ( isEmpty( templates ) )\r
index e48e8ee..1eac558 100755 (executable)
@@ -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();
+           }
        }
 
        /**
index 7af263b..471bc91 100755 (executable)
@@ -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;
 
 /**
  * <p>
@@ -168,12 +166,6 @@ implements Prompter
        )
        {
                out.print( question );
-               if ( !ArrayUtil.isEmpty( options ) )
-               {
-                       out.print( "( " );
-                       out.print( CollectionUtil.concatenate( options, " / " ) );
-                       out.print( " )" );
-               }
        }
        
        /* (non-Javadoc)
index 28952dd..823cf77 100755 (executable)
@@ -104,7 +104,7 @@ implements ILaunchOptions
     )\r
     throws Exception\r
     {\r
-        final String urlStr = nvl( Preference.getValue( "tizen.template.realm", null ) );\r
+        String urlStr = nvl( Preference.getValue( "tizen.template.realm", cmdLine.getOptionValue( OPT_REALM ) ) );\r
         logger.info( "Realm url :{}", urlStr );\r
         if ( isEmpty( urlStr ) )\r
         {\r
index d11b20c..27b07b7 100755 (executable)
@@ -1,5 +1,8 @@
 package org.tizen.cli.util;\r
 \r
+import static org.tizen.common.util.ObjectUtil.nvl;\r
+import static org.tizen.common.util.StringUtil.nvl;\r
+\r
 import java.util.Collection;\r
 \r
 import org.tizen.common.config.Preference;\r
@@ -7,13 +10,17 @@ import org.tizen.common.core.command.ExecutionContext;
 import org.tizen.common.core.command.Prompter;\r
 import org.tizen.common.core.command.prompter.GenericOption;\r
 import org.tizen.common.verrari.IModelProvider;\r
+import org.tizen.common.verrari.template.StandardTemplate;\r
 \r
 public class\r
 TemplateModelProvider\r
 implements IModelProvider\r
 {\r
+    protected static final Object NULL = new Object();\r
+    \r
     protected final ExecutionContext context;\r
     \r
+    \r
     public\r
     TemplateModelProvider(\r
         final ExecutionContext context\r
@@ -42,7 +49,10 @@ implements IModelProvider
     )\r
     {\r
         Object obj = context.getValue( key );\r
-        if ( null != obj )\r
+        if ( NULL.equals( obj ) )\r
+        {\r
+            return null;\r
+        } else if ( null != obj )\r
         {\r
             return obj;\r
         }\r
@@ -55,7 +65,7 @@ implements IModelProvider
         \r
         obj = inputFromUser( key );\r
         \r
-        this.context.setValue( key, obj );\r
+        this.context.setValue( key, nvl( obj, NULL ) );\r
         \r
         return obj;\r
     }\r
@@ -64,8 +74,14 @@ implements IModelProvider
     {\r
         final Prompter prompter = this.context.getPrompter();\r
         final GenericOption opt = new GenericOption();\r
-        \r
-        prompter.interact( "Input " + key + " ?", opt );\r
+\r
+        StandardTemplate current = StandardTemplate.getCurrentTemplate();\r
+        String message = "Input " + key + " ?";\r
+        if ( null != current )\r
+        {\r
+            message = nvl( current.getMessage( key ), message );\r
+        }\r
+        prompter.interact( message, opt );\r
         \r
         return opt.getAnswer();\r
     }\r
index e711aa6..eb1536a 100755 (executable)
@@ -32,7 +32,6 @@ import org.apache.commons.cli.Options;
 import org.apache.commons.cli.PosixParser;\r
 import org.junit.Test;\r
 import org.tizen.cli.exec.CommandLineExecutor;\r
-import org.tizen.cli.exec.sign.Main;\r
 import org.tizen.common.core.command.Executor;\r
 import org.tizen.common.core.command.Prompter;\r
 \r
index 3e27223..b41e528 100755 (executable)
@@ -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 );
                        }