You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by mr...@apache.org on 2017/10/25 22:39:12 UTC

[incubator-openwhisk-wskdeploy] branch master updated: Adding support for project (#627)

This is an automated email from the ASF dual-hosted git repository.

mrutkowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-wskdeploy.git


The following commit(s) were added to refs/heads/master by this push:
     new ced8f43  Adding support for project (#627)
ced8f43 is described below

commit ced8f43f4de2f121b3e63d302ae50eba1f14b5bb
Author: Priti Desai <pd...@us.ibm.com>
AuthorDate: Wed Oct 25 15:39:10 2017 -0700

    Adding support for project (#627)
---
 deployers/deploymentreader.go                      |  90 ++--
 deployers/deploymentreader_test.go                 |   2 +-
 deployers/servicedeployer.go                       | 182 ++++----
 deployers/verifier.go                              |  14 +-
 deployers/whiskclient.go                           |   6 +-
 ...eployment_hello_world_triggerrule_bindings.yaml |   2 +-
 ...deployment_hello_world_triggerrule_unbound.yaml |   2 +-
 parsers/deploy_parser.go                           |   4 +-
 parsers/deploy_parser_test.go                      | 384 ++++++++--------
 parsers/manifest_parser.go                         |  14 +-
 parsers/yamlparser.go                              | 122 ++---
 parsers/yamlparser_test.go                         |  27 +-
 tests/dat/deployment_compose_trigger.yaml          |   2 +-
 ...plication.yaml => deployment_data_project.yaml} |   2 +-
 ...e.yaml => deployment_data_project_package.yaml} |   2 +-
 ...> deployment_data_project_package_env_var.yaml} |   2 +-
 ...ployment_data_project_package_env_var_con.yaml} |   2 +-
 ... deployment_data_project_packages_env_var.yaml} |   2 +-
 ...loyment_data_project_packages_env_var_con.yaml} |   2 +-
 tests/dat/deployment_validate_credentials.yaml     |   2 +-
 .../dat/deployment_validate_deployment_reader.yaml |   2 +-
 tests/src/integration/alarmtrigger/deployment.yaml |   2 +-
 tests/src/integration/common/wskdeploy.go          |   2 +-
 tests/src/integration/helloworld/deployment.yaml   |   2 +-
 tests/src/integration/message-hub/deployment.yaml  |   2 +-
 .../actions/hello.js                               |  26 ++
 .../deployment-with-application.yaml}              |   6 +-
 .../deployment-with-project.yaml}                  |   8 +-
 .../manifest-with-application.yaml                 |  18 +
 .../manifest-with-project.yaml                     |  18 +
 .../validate-application-and-project_test.go       |  50 ++
 .../deployment.yaml                                |   2 +-
 .../deployment.yaml                                |   2 +-
 .../not-standard-deployment.yaml                   |   2 +-
 .../random-name-2.yaml                             |   2 +-
 .../yaml-deployment-with-yml-manifest.yaml         |   2 +-
 .../validate-package-in-manifest/deployment.yaml   |   2 +-
 .../validate-packages-in-manifest/deployment.yaml  |   2 +-
 .../validatePackageInDeployment/deployment.yaml    |   2 +-
 .../validatePackagesInDeployment/deployment.yaml   |   2 +-
 tests/usecases/github/deployment.yaml              |   2 +-
 tests/usecases/slack/deployment.yaml               |   2 +-
 utils/misc.go                                      |   2 +-
 wski18n/i18n_resources.go                          | 510 ++++++++++-----------
 wski18n/resources/en_US.all.json                   |   8 +
 45 files changed, 851 insertions(+), 692 deletions(-)

diff --git a/deployers/deploymentreader.go b/deployers/deploymentreader.go
index 9141adb..d9e5759 100644
--- a/deployers/deploymentreader.go
+++ b/deployers/deploymentreader.go
@@ -63,23 +63,23 @@ func (reader *DeploymentReader) bindPackageInputsAndAnnotations() {
 
 	packMap := make(map[string]parsers.Package)
 
-    if reader.DeploymentDescriptor.Application.Packages == nil {
+	if reader.DeploymentDescriptor.GetProject().Packages == nil {
 		// a single package is specified in deployment YAML file with "package" key
-        if len(reader.DeploymentDescriptor.Application.Package.Packagename) != 0 {
-            packMap[reader.DeploymentDescriptor.Application.Package.Packagename] = reader.DeploymentDescriptor.Application.Package
-            utils.PrintOpenWhiskOutputln("WARNING: The package YAML key in deployment file will soon be deprecated. Please use packages instead as described in specifications.")
-        } else {
-            if reader.DeploymentDescriptor.Packages != nil {
-                for packName, depPacks := range reader.DeploymentDescriptor.Packages {
-                    depPacks.Packagename = packName
-                    packMap[packName] = depPacks
-                }
-            } else {
-                packMap[reader.DeploymentDescriptor.Package.Packagename] = reader.DeploymentDescriptor.Package
-            }
-        }
+		if len(reader.DeploymentDescriptor.GetProject().Package.Packagename) != 0 {
+			packMap[reader.DeploymentDescriptor.GetProject().Package.Packagename] = reader.DeploymentDescriptor.GetProject().Package
+			utils.PrintOpenWhiskOutputln("WARNING: The package YAML key in deployment file will soon be deprecated. Please use packages instead as described in specifications.")
+		} else {
+			if reader.DeploymentDescriptor.Packages != nil {
+				for packName, depPacks := range reader.DeploymentDescriptor.Packages {
+					depPacks.Packagename = packName
+					packMap[packName] = depPacks
+				}
+			} else {
+				packMap[reader.DeploymentDescriptor.Package.Packagename] = reader.DeploymentDescriptor.Package
+			}
+		}
 	} else {
-		for packName, depPacks := range reader.DeploymentDescriptor.Application.Packages {
+		for packName, depPacks := range reader.DeploymentDescriptor.GetProject().Packages {
 			depPacks.Packagename = packName
 			packMap[packName] = depPacks
 		}
@@ -90,7 +90,7 @@ func (reader *DeploymentReader) bindPackageInputsAndAnnotations() {
 		serviceDeployPack := reader.serviceDeployer.Deployment.Packages[packName]
 
 		if serviceDeployPack == nil {
-            utils.PrintOpenWhiskOutputln("WARNING: Package name in deployment file " + packName + " does not match with manifest file.")
+			utils.PrintOpenWhiskOutputln("WARNING: Package name in deployment file " + packName + " does not match with manifest file.")
 			break
 		}
 
@@ -143,22 +143,22 @@ func (reader *DeploymentReader) bindActionInputsAndAnnotations() {
 
 	packMap := make(map[string]parsers.Package)
 
-	if reader.DeploymentDescriptor.Application.Packages == nil {
+	if reader.DeploymentDescriptor.GetProject().Packages == nil {
 		// a single package is specified in deployment YAML file with "package" key
-        if len(reader.DeploymentDescriptor.Application.Package.Packagename) != 0 {
-            packMap[reader.DeploymentDescriptor.Application.Package.Packagename] = reader.DeploymentDescriptor.Application.Package
-        } else {
-            if reader.DeploymentDescriptor.Packages != nil {
-                for packName, depPacks := range reader.DeploymentDescriptor.Packages {
-                    depPacks.Packagename = packName
-                    packMap[packName] = depPacks
-                }
-            } else {
-                packMap[reader.DeploymentDescriptor.Package.Packagename] = reader.DeploymentDescriptor.Package
-            }
-        }
+		if len(reader.DeploymentDescriptor.GetProject().Package.Packagename) != 0 {
+			packMap[reader.DeploymentDescriptor.GetProject().Package.Packagename] = reader.DeploymentDescriptor.GetProject().Package
+		} else {
+			if reader.DeploymentDescriptor.Packages != nil {
+				for packName, depPacks := range reader.DeploymentDescriptor.Packages {
+					depPacks.Packagename = packName
+					packMap[packName] = depPacks
+				}
+			} else {
+				packMap[reader.DeploymentDescriptor.Package.Packagename] = reader.DeploymentDescriptor.Package
+			}
+		}
 	} else {
-		for packName, depPacks := range reader.DeploymentDescriptor.Application.Packages {
+		for packName, depPacks := range reader.DeploymentDescriptor.GetProject().Packages {
 			depPacks.Packagename = packName
 			packMap[packName] = depPacks
 		}
@@ -227,21 +227,21 @@ func (reader *DeploymentReader) bindTriggerInputsAndAnnotations() {
 
 	packMap := make(map[string]parsers.Package)
 
-	if reader.DeploymentDescriptor.Application.Packages == nil {
-        if len(reader.DeploymentDescriptor.Application.Package.Packagename) != 0 {
-            packMap[reader.DeploymentDescriptor.Application.Package.Packagename] = reader.DeploymentDescriptor.Application.Package
-        } else {
-            if reader.DeploymentDescriptor.Packages != nil {
-                for packName, depPacks := range reader.DeploymentDescriptor.Packages {
-                    depPacks.Packagename = packName
-                    packMap[packName] = depPacks
-                }
-            } else {
-                packMap[reader.DeploymentDescriptor.Package.Packagename] = reader.DeploymentDescriptor.Package
-            }
-        }
+	if reader.DeploymentDescriptor.GetProject().Packages == nil {
+		if len(reader.DeploymentDescriptor.GetProject().Package.Packagename) != 0 {
+			packMap[reader.DeploymentDescriptor.GetProject().Package.Packagename] = reader.DeploymentDescriptor.GetProject().Package
+		} else {
+			if reader.DeploymentDescriptor.Packages != nil {
+				for packName, depPacks := range reader.DeploymentDescriptor.Packages {
+					depPacks.Packagename = packName
+					packMap[packName] = depPacks
+				}
+			} else {
+				packMap[reader.DeploymentDescriptor.Package.Packagename] = reader.DeploymentDescriptor.Package
+			}
+		}
 	} else {
-		for packName, depPacks := range reader.DeploymentDescriptor.Application.Packages {
+		for packName, depPacks := range reader.DeploymentDescriptor.GetProject().Packages {
 			depPacks.Packagename = packName
 			packMap[packName] = depPacks
 		}
@@ -273,7 +273,7 @@ func (reader *DeploymentReader) bindTriggerInputsAndAnnotations() {
 					}
 
 					for _, keyVal := range wskTrigger.Parameters {
-                        utils.PrintOpenWhiskOutputln("Checking key " + keyVal.Key)
+						utils.PrintOpenWhiskOutputln("Checking key " + keyVal.Key)
 						if _, exists := depParams[keyVal.Key]; !exists {
 							keyValArr = append(keyValArr, keyVal)
 						}
diff --git a/deployers/deploymentreader_test.go b/deployers/deploymentreader_test.go
index 458ebe2..53e326b 100644
--- a/deployers/deploymentreader_test.go
+++ b/deployers/deploymentreader_test.go
@@ -41,7 +41,7 @@ func init() {
 // Check DeploymentReader could handle deployment yaml successfully.
 func TestDeploymentReader_HandleYaml(t *testing.T) {
 	dr.HandleYaml()
-	assert.NotNil(t, dr.DeploymentDescriptor.Application.Packages["GitHubCommits"], "DeploymentReader handle deployment yaml failed.")
+	assert.NotNil(t, dr.DeploymentDescriptor.GetProject().Packages["GitHubCommits"], "DeploymentReader handle deployment yaml failed.")
 }
 
 func TestDeployerCheck(t *testing.T) {
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index c340a3e..8bc8b64 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -33,15 +33,15 @@ import (
 	"reflect"
 )
 
-type DeploymentApplication struct {
+type DeploymentProject struct {
 	Packages map[string]*DeploymentPackage
 	Triggers map[string]*whisk.Trigger
 	Rules    map[string]*whisk.Rule
 	Apis     map[string]*whisk.ApiCreateRequest
 }
 
-func NewDeploymentApplication() *DeploymentApplication {
-	var dep DeploymentApplication
+func NewDeploymentProject() *DeploymentProject {
+	var dep DeploymentProject
 	dep.Packages = make(map[string]*DeploymentPackage)
 	dep.Triggers = make(map[string]*whisk.Trigger)
 	dep.Rules = make(map[string]*whisk.Rule)
@@ -71,7 +71,7 @@ func NewDeploymentPackage() *DeploymentPackage {
 //   3. Collect information about the source code files in the working directory
 //   4. Create a deployment plan to create OpenWhisk service
 type ServiceDeployer struct {
-	Deployment      *DeploymentApplication
+	Deployment      *DeploymentProject
 	Client          *whisk.Client
 	mt              sync.RWMutex
 	RootPackageName string
@@ -90,7 +90,7 @@ type ServiceDeployer struct {
 // NewServiceDeployer is a Factory to create a new ServiceDeployer
 func NewServiceDeployer() *ServiceDeployer {
 	var dep ServiceDeployer
-	dep.Deployment = NewDeploymentApplication()
+	dep.Deployment = NewDeploymentProject()
 	dep.IsInteractive = true
 	dep.DeployActionInPackage = true
 	dep.DependencyMaster = make(map[string]utils.DependencyRecord)
@@ -139,9 +139,15 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
 		return err
 	}
 
-	applicationName := ""
-	if len(manifest.Application.Packages) != 0 {
-		applicationName = manifest.Application.Name
+	projectName := ""
+	if len(manifest.GetProject().Packages) != 0 {
+		projectName = manifest.GetProject().Name
+	}
+
+	// (TODO) delete this warning after deprecating application in manifest file
+	if manifest.Application.Name != "" {
+		warningString := wski18n.T("WARNING: application in manifest file will soon be deprecated, please use project instead.\n")
+		whisk.Debug(whisk.DbgWarn, warningString)
 	}
 
 	// process deployment file
@@ -152,24 +158,30 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
 		if err != nil {
 			return err
 		}
-		// compare the name of the application
-		if len(deploymentReader.DeploymentDescriptor.Application.Packages) != 0 && len(applicationName) != 0 {
-			appNameDeploy := deploymentReader.DeploymentDescriptor.Application.Name
-			if appNameDeploy != applicationName {
-				errorString := wski18n.T("The name of the application {{.appNameDeploy}} in deployment file at [{{.deploymentFile}}] does not match the name of the application {{.appNameManifest}}} in manifest file at [{{.manifestFile}}].",
-				    map[string]interface{}{"appNameDeploy": appNameDeploy, "deploymentFile": deployer.DeploymentPath,
-					"appNameManifest": applicationName,  "manifestFile": deployer.ManifestPath })
+
+		// (TODO) delete this warning after deprecating application in deployment file
+		if deploymentReader.DeploymentDescriptor.Application.Name != "" {
+			warningString := wski18n.T("WARNING: application in deployment file will soon be deprecated, please use project instead.\n")
+			whisk.Debug(whisk.DbgWarn, warningString)
+		}
+
+		// compare the name of the project/application
+		if len(deploymentReader.DeploymentDescriptor.GetProject().Packages) != 0 && len(projectName) != 0 {
+			projectNameDeploy := deploymentReader.DeploymentDescriptor.GetProject().Name
+			if projectNameDeploy != projectName {
+				errorString := wski18n.T("The name of the project/application {{.projectNameDeploy}} in deployment file at [{{.deploymentFile}}] does not match the name of the project/application {{.projectNameManifest}}} in manifest file at [{{.manifestFile}}].",
+					map[string]interface{}{"projectNameDeploy": projectNameDeploy, "deploymentFile": deployer.DeploymentPath,
+						"projectNameManifest": projectName, "manifestFile": deployer.ManifestPath})
 				return utils.NewInputYamlFormatError(errorString)
 			}
 		}
-
 		deploymentReader.BindAssets()
 	}
 
 	return err
 }
 
-func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentApplication, error) {
+func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentProject, error) {
 
 	var manifestReader = NewManfiestReader(deployer)
 	manifestReader.IsUndeploy = true
@@ -203,10 +215,16 @@ func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentApplica
 		return deployer.Deployment, err
 	}
 
-    applicationName := ""
-    if len(manifest.Application.Packages) != 0 {
-        applicationName = manifest.Application.Name
-    }
+	projectName := ""
+	if len(manifest.GetProject().Packages) != 0 {
+		projectName = manifest.GetProject().Name
+	}
+
+	// (TODO) delete this warning after deprecating application in manifest file
+	if manifest.Application.Name != "" {
+		warningString := wski18n.T("WARNING: application in manifest file will soon be deprecated, please use project instead.\n")
+		whisk.Debug(whisk.DbgWarn, warningString)
+	}
 
 	// process deployment file
 	if utils.FileExists(deployer.DeploymentPath) {
@@ -215,16 +233,21 @@ func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentApplica
 		if err != nil {
 			return deployer.Deployment, err
 		}
-        // compare the name of the application
-        if len(deploymentReader.DeploymentDescriptor.Application.Packages) != 0 && len(applicationName) != 0 {
-            appNameDeploy := deploymentReader.DeploymentDescriptor.Application.Name
-            if appNameDeploy != applicationName {
-                errorString := wski18n.T("The name of the application {{.appNameDeploy}} in deployment file at [{{.deploymentFile}}] does not match the name of the application {{.appNameManifest}}} in manifest file at [{{.manifestFile}}].",
-                    map[string]interface{}{"appNameDeploy": appNameDeploy, "deploymentFile": deployer.DeploymentPath,
-                        "appNameManifest": applicationName,  "manifestFile": deployer.ManifestPath })
-                return deployer.Deployment, utils.NewInputYamlFormatError(errorString)
-            }
-        }
+		// (TODO) delete this warning after deprecating application in deployment file
+		if deploymentReader.DeploymentDescriptor.Application.Name != "" {
+			warningString := wski18n.T("WARNING: application in deployment file will soon be deprecated, please use project instead.\n")
+			whisk.Debug(whisk.DbgWarn, warningString)
+		}
+		// compare the name of the application
+		if len(deploymentReader.DeploymentDescriptor.GetProject().Packages) != 0 && len(projectName) != 0 {
+			projectNameDeploy := deploymentReader.DeploymentDescriptor.GetProject().Name
+			if projectNameDeploy != projectName {
+				errorString := wski18n.T("The name of the project/application {{.projectNameDeploy}} in deployment file at [{{.deploymentFile}}] does not match the name of the application {{.projectNameManifest}}} in manifest file at [{{.manifestFile}}].",
+					map[string]interface{}{"projectNameDeploy": projectNameDeploy, "deploymentFile": deployer.DeploymentPath,
+						"projectNameManifest": projectName, "manifestFile": deployer.ManifestPath})
+				return deployer.Deployment, utils.NewInputYamlFormatError(errorString)
+			}
+		}
 		deploymentReader.BindAssets()
 	}
 
@@ -590,8 +613,8 @@ func (deployer *ServiceDeployer) createFeedAction(trigger *whisk.Trigger, feedNa
 		deployer.Client.Namespace = namespace
 
 		if err != nil {
-            // Remove the created trigger
-            deployer.Client.Triggers.Delete(trigger.Name)
+			// Remove the created trigger
+			deployer.Client.Triggers.Delete(trigger.Name)
 			wskErr := err.(*whisk.WskError)
 			errString := wski18n.T("Got error creating trigger feed with error message: {{.err}} and error code: {{.code}}.\n",
 				map[string]interface{}{"err": wskErr.Error(), "code": strconv.Itoa(wskErr.ExitCode)})
@@ -685,7 +708,7 @@ func (deployer *ServiceDeployer) createApi(api *whisk.ApiCreateRequest) error {
 	return nil
 }
 
-func (deployer *ServiceDeployer) UnDeploy(verifiedPlan *DeploymentApplication) error {
+func (deployer *ServiceDeployer) UnDeploy(verifiedPlan *DeploymentProject) error {
 	if deployer.IsInteractive == true {
 		deployer.printDeploymentAssets(verifiedPlan)
 		reader := bufio.NewReader(os.Stdin)
@@ -729,7 +752,7 @@ func (deployer *ServiceDeployer) UnDeploy(verifiedPlan *DeploymentApplication) e
 
 }
 
-func (deployer *ServiceDeployer) unDeployAssets(verifiedPlan *DeploymentApplication) error {
+func (deployer *ServiceDeployer) unDeployAssets(verifiedPlan *DeploymentProject) error {
 
 	if err := deployer.UnDeployActions(verifiedPlan); err != nil {
 		return err
@@ -813,7 +836,7 @@ func (deployer *ServiceDeployer) UnDeployDependencies() error {
 	return nil
 }
 
-func (deployer *ServiceDeployer) UnDeployPackages(deployment *DeploymentApplication) error {
+func (deployer *ServiceDeployer) UnDeployPackages(deployment *DeploymentProject) error {
 	for _, pack := range deployment.Packages {
 		err := deployer.deletePackage(pack.Package)
 		if err != nil {
@@ -823,7 +846,7 @@ func (deployer *ServiceDeployer) UnDeployPackages(deployment *DeploymentApplicat
 	return nil
 }
 
-func (deployer *ServiceDeployer) UnDeploySequences(deployment *DeploymentApplication) error {
+func (deployer *ServiceDeployer) UnDeploySequences(deployment *DeploymentProject) error {
 
 	for _, pack := range deployment.Packages {
 		for _, action := range pack.Sequences {
@@ -837,7 +860,7 @@ func (deployer *ServiceDeployer) UnDeploySequences(deployment *DeploymentApplica
 }
 
 // DeployActions into OpenWhisk
-func (deployer *ServiceDeployer) UnDeployActions(deployment *DeploymentApplication) error {
+func (deployer *ServiceDeployer) UnDeployActions(deployment *DeploymentProject) error {
 
 	for _, pack := range deployment.Packages {
 		for _, action := range pack.Actions {
@@ -851,7 +874,7 @@ func (deployer *ServiceDeployer) UnDeployActions(deployment *DeploymentApplicati
 }
 
 // Deploy Triggers into OpenWhisk
-func (deployer *ServiceDeployer) UnDeployTriggers(deployment *DeploymentApplication) error {
+func (deployer *ServiceDeployer) UnDeployTriggers(deployment *DeploymentProject) error {
 
 	for _, trigger := range deployment.Triggers {
 		if feedname, isFeed := utils.IsFeedAction(trigger); isFeed {
@@ -872,7 +895,7 @@ func (deployer *ServiceDeployer) UnDeployTriggers(deployment *DeploymentApplicat
 }
 
 // Deploy Rules into OpenWhisk
-func (deployer *ServiceDeployer) UnDeployRules(deployment *DeploymentApplication) error {
+func (deployer *ServiceDeployer) UnDeployRules(deployment *DeploymentProject) error {
 
 	for _, rule := range deployment.Rules {
 		err := deployer.deleteRule(rule)
@@ -926,40 +949,40 @@ func (deployer *ServiceDeployer) deleteFeedAction(trigger *whisk.Trigger, feedNa
 	params = append(params, whisk.KeyValue{Key: "lifecycleEvent", Value: "DELETE"})
 	params = append(params, whisk.KeyValue{Key: "triggerName", Value: "/" + deployer.Client.Namespace + "/" + trigger.Name})
 
-    parameters := make(map[string]interface{})
-    for _, keyVal := range params {
-        parameters[keyVal.Key] = keyVal.Value
-    }
-
-    qName, err := utils.ParseQualifiedName(feedName, deployer.ClientConfig.Namespace)
-    if err != nil {
-        return err
-    }
-
-    namespace := deployer.Client.Namespace
-    deployer.Client.Namespace = qName.Namespace
-    _, _, err = deployer.Client.Actions.Invoke(qName.EntityName, parameters, true, true)
-    deployer.Client.Namespace = namespace
-
-    if err != nil {
-        wskErr := err.(*whisk.WskError)
-        errString := wski18n.T("Failed to invoke the feed when deleting trigger feed with error message: {{.err}} and error code: {{.code}}.\n",
-            map[string]interface{}{"err": wskErr.Error(), "code": strconv.Itoa(wskErr.ExitCode)})
-        whisk.Debug(whisk.DbgError, errString)
-        return utils.NewWhiskClientError(wskErr.Error(), wskErr.ExitCode)
-
-    } else {
-        trigger.Parameters = nil
-
-        _, _, err := deployer.Client.Triggers.Delete(trigger.Name)
-        if err != nil {
-            wskErr := err.(*whisk.WskError)
-            errString := wski18n.T("Got error deleting trigger with error message: {{.err}} and error code: {{.code}}.\n",
-                map[string]interface{}{"err": wskErr.Error(), "code": strconv.Itoa(wskErr.ExitCode)})
-            whisk.Debug(whisk.DbgError, errString)
-            return utils.NewWhiskClientError(wskErr.Error(), wskErr.ExitCode)
-        }
-    }
+	parameters := make(map[string]interface{})
+	for _, keyVal := range params {
+		parameters[keyVal.Key] = keyVal.Value
+	}
+
+	qName, err := utils.ParseQualifiedName(feedName, deployer.ClientConfig.Namespace)
+	if err != nil {
+		return err
+	}
+
+	namespace := deployer.Client.Namespace
+	deployer.Client.Namespace = qName.Namespace
+	_, _, err = deployer.Client.Actions.Invoke(qName.EntityName, parameters, true, true)
+	deployer.Client.Namespace = namespace
+
+	if err != nil {
+		wskErr := err.(*whisk.WskError)
+		errString := wski18n.T("Failed to invoke the feed when deleting trigger feed with error message: {{.err}} and error code: {{.code}}.\n",
+			map[string]interface{}{"err": wskErr.Error(), "code": strconv.Itoa(wskErr.ExitCode)})
+		whisk.Debug(whisk.DbgError, errString)
+		return utils.NewWhiskClientError(wskErr.Error(), wskErr.ExitCode)
+
+	} else {
+		trigger.Parameters = nil
+
+		_, _, err := deployer.Client.Triggers.Delete(trigger.Name)
+		if err != nil {
+			wskErr := err.(*whisk.WskError)
+			errString := wski18n.T("Got error deleting trigger with error message: {{.err}} and error code: {{.code}}.\n",
+				map[string]interface{}{"err": wskErr.Error(), "code": strconv.Itoa(wskErr.ExitCode)})
+			whisk.Debug(whisk.DbgError, errString)
+			return utils.NewWhiskClientError(wskErr.Error(), wskErr.ExitCode)
+		}
+	}
 
 	return nil
 }
@@ -1037,7 +1060,7 @@ func (deployer *ServiceDeployer) getQualifiedName(name string, namespace string)
 	}
 }
 
-func (deployer *ServiceDeployer) printDeploymentAssets(assets *DeploymentApplication) {
+func (deployer *ServiceDeployer) printDeploymentAssets(assets *DeploymentProject) {
 
 	// pretty ASCII OpenWhisk graphic
 	utils.PrintOpenWhiskOutputln("         ____      ___                   _    _ _     _     _\n        /\\   \\    / _ \\ _ __   ___ _ __ | |  | | |__ (_)___| | __\n   /\\  /__\\   \\  | | | | '_ \\ / _ \\ '_ \\| |  | | '_ \\| / __| |/ /\n  /  \\____ \\  /  | |_| | |_) |  __/ | | | |/\\| | | | | \\__ \\   <\n  \\   \\  /  \\/    \\___/| .__/ \\___|_| |_|__/\\__|_| |_|_|___/_|\\_\\ \n   \\___\\/              |_|\n")
@@ -1070,13 +1093,12 @@ func (deployer *ServiceDeployer) printDeploymentAssets(assets *DeploymentApplica
 			utils.PrintOpenWhiskOutputln("    bindings: ")
 			for _, p := range action.Action.Parameters {
 
-				if( reflect.TypeOf(p.Value).Kind() == reflect.Map ) {
-                                        if _, ok := p.Value.(map[interface{}]interface{}); ok {
-						var temp map[string]interface{} =
-							utils.ConvertInterfaceMap(p.Value.(map[interface{}]interface{}))
+				if reflect.TypeOf(p.Value).Kind() == reflect.Map {
+					if _, ok := p.Value.(map[interface{}]interface{}); ok {
+						var temp map[string]interface{} = utils.ConvertInterfaceMap(p.Value.(map[interface{}]interface{}))
 						fmt.Printf("        - %s : %v\n", p.Key, temp)
 					} else {
-						jsonValue,err := utils.PrettyJSON(p.Value)
+						jsonValue, err := utils.PrettyJSON(p.Value)
 						if err != nil {
 							fmt.Printf("        - %s : %s\n", p.Key, utils.UNKNOWN_VALUE)
 						} else {
diff --git a/deployers/verifier.go b/deployers/verifier.go
index cdc6f8a..116453f 100644
--- a/deployers/verifier.go
+++ b/deployers/verifier.go
@@ -23,7 +23,7 @@ import (
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
 )
 
-// The verifier will filter the deployer against the target DeploymentApplication
+// The verifier will filter the deployer against the target DeploymentProject
 // the deployer will query the OpenWhisk platform for already deployed entities.
 // We assume the deployer and the manifest are targeted for the same namespace.
 type Verifier struct {
@@ -31,16 +31,16 @@ type Verifier struct {
 
 type Filter interface {
 	// Perform some filter.
-	Filter(deployer *ServiceDeployer, target *DeploymentApplication) (filtered *DeploymentApplication, err error)
+	Filter(deployer *ServiceDeployer, target *DeploymentProject) (filtered *DeploymentProject, err error)
 	// Perform some queries.
-	Query(deployer *ServiceDeployer) (da *DeploymentApplication, err error)
+	Query(deployer *ServiceDeployer) (da *DeploymentProject, err error)
 }
 
-func (vf *Verifier) Query(deployer *ServiceDeployer) (da *DeploymentApplication, err error) {
+func (vf *Verifier) Query(deployer *ServiceDeployer) (da *DeploymentProject, err error) {
 	pkgoptions := &whisk.PackageListOptions{false, 0, 0, 0, false}
 	packages, _, err := deployer.Client.Packages.List(pkgoptions)
 
-	da = NewDeploymentApplication()
+	da = NewDeploymentProject()
 	for _, pa := range packages {
 		deppack := NewDeploymentPackage()
 		deppack.Package, _ = convert(&pa)
@@ -49,7 +49,7 @@ func (vf *Verifier) Query(deployer *ServiceDeployer) (da *DeploymentApplication,
 	return da, nil
 }
 
-func (vf *Verifier) Filter(deployer *ServiceDeployer, target *DeploymentApplication) (rs *DeploymentApplication, err error) {
+func (vf *Verifier) Filter(deployer *ServiceDeployer, target *DeploymentProject) (rs *DeploymentProject, err error) {
 	//substract
 	for _, pa := range target.Packages {
 		for _, dpa := range deployer.Deployment.Packages {
@@ -59,7 +59,7 @@ func (vf *Verifier) Filter(deployer *ServiceDeployer, target *DeploymentApplicat
 		}
 	}
 
-	depApp := NewDeploymentApplication()
+	depApp := NewDeploymentProject()
 	fmt.Printf("Target Packages are %#v\n", target.Packages)
 	depApp.Packages = target.Packages
 	return depApp, nil
diff --git a/deployers/whiskclient.go b/deployers/whiskclient.go
index 702f8b9..b0eac7c 100644
--- a/deployers/whiskclient.go
+++ b/deployers/whiskclient.go
@@ -98,9 +98,9 @@ func NewWhiskConfig(proppath string, deploymentPath string, manifestPath string,
 		if utils.FileExists(deploymentPath) {
 			mm := parsers.NewYAMLParser()
 			deployment, _ := mm.ParseDeployment(deploymentPath)
-			credential = GetPropertyValue(credential, deployment.Application.Credential, path.Base(deploymentPath))
-			namespace = GetPropertyValue(namespace, deployment.Application.Namespace, path.Base(deploymentPath))
-			apiHost = GetPropertyValue(apiHost, deployment.Application.ApiHost, path.Base(deploymentPath))
+			credential = GetPropertyValue(credential, deployment.GetProject().Credential, path.Base(deploymentPath))
+			namespace = GetPropertyValue(namespace, deployment.GetProject().Namespace, path.Base(deploymentPath))
+			apiHost = GetPropertyValue(apiHost, deployment.GetProject().ApiHost, path.Base(deploymentPath))
 		}
 	}
 
diff --git a/docs/examples/deployment_hello_world_triggerrule_bindings.yaml b/docs/examples/deployment_hello_world_triggerrule_bindings.yaml
index b35b778..51a1018 100644
--- a/docs/examples/deployment_hello_world_triggerrule_bindings.yaml
+++ b/docs/examples/deployment_hello_world_triggerrule_bindings.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   packages:
       hello_world_package:
         triggers:
diff --git a/docs/examples/deployment_hello_world_triggerrule_unbound.yaml b/docs/examples/deployment_hello_world_triggerrule_unbound.yaml
index f325753..714f17d 100644
--- a/docs/examples/deployment_hello_world_triggerrule_unbound.yaml
+++ b/docs/examples/deployment_hello_world_triggerrule_unbound.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   package:
     hello_world_package:
       triggers:
diff --git a/parsers/deploy_parser.go b/parsers/deploy_parser.go
index ee9e041..31ad115 100644
--- a/parsers/deploy_parser.go
+++ b/parsers/deploy_parser.go
@@ -72,9 +72,9 @@ func (dm *YAMLParser) convertErrorToLinesMsgs(errorString string) (lines []strin
     return
 }
 
-//********************Application functions*************************//
+//********************Project functions*************************//
 //This is for parse the deployment yaml file.
-func (app *Application) GetPackageList() []Package {
+func (app *Project) GetPackageList() []Package {
 	var s1 []Package = make([]Package, 0)
 	for _, pkg := range app.Packages {
 		pkg.Packagename = pkg.Packagename
diff --git a/parsers/deploy_parser_test.go b/parsers/deploy_parser_test.go
index 30992b9..7d0bfae 100644
--- a/parsers/deploy_parser_test.go
+++ b/parsers/deploy_parser_test.go
@@ -21,100 +21,100 @@ package parsers
 
 import (
 	"github.com/stretchr/testify/assert"
+	"io/ioutil"
 	"os"
 	"testing"
-    "io/ioutil"
 )
 
 func createTmpfile(data string, filename string) (f *os.File, err error) {
-    dir, _ := os.Getwd()
-    tmpfile, err := ioutil.TempFile(dir, filename)
-    if err != nil {
-        return nil, err
-    }
-    _, err = tmpfile.Write([]byte(data))
-    if err != nil {
-        return tmpfile, err
-    }
-    return tmpfile, nil
+	dir, _ := os.Getwd()
+	tmpfile, err := ioutil.TempFile(dir, filename)
+	if err != nil {
+		return nil, err
+	}
+	_, err = tmpfile.Write([]byte(data))
+	if err != nil {
+		return tmpfile, err
+	}
+	return tmpfile, nil
 }
 
 func TestInvalidKeyDeploymentYaml(t *testing.T) {
-    data :=`application:
+	data := `project:
   name: wskdeploy-samples
   invalidKey: test`
-    tmpfile, err := createTmpfile(data, "deployment_parser_test_")
-    if err != nil {
-        assert.Fail(t, "Failed to create temp file")
-    }
-    defer func() {
-        tmpfile.Close()
-        os.Remove(tmpfile.Name())
-    }()
-    p := NewYAMLParser()
-    _, err = p.ParseDeployment(tmpfile.Name())
-    assert.NotNil(t, err)
-    // go-yaml/yaml prints the wrong line number for mapping values. It should be 3.
-    assert.Contains(t, err.Error(), "line 2: field invalidKey not found in struct parsers.Application")
+	tmpfile, err := createTmpfile(data, "deployment_parser_test_")
+	if err != nil {
+		assert.Fail(t, "Failed to create temp file")
+	}
+	defer func() {
+		tmpfile.Close()
+		os.Remove(tmpfile.Name())
+	}()
+	p := NewYAMLParser()
+	_, err = p.ParseDeployment(tmpfile.Name())
+	assert.NotNil(t, err)
+	// go-yaml/yaml prints the wrong line number for mapping values. It should be 3.
+	assert.Contains(t, err.Error(), "line 2: field invalidKey not found in struct parsers.Project")
 }
 
 func TestMappingValueDeploymentYaml(t *testing.T) {
-    data :=`application:
+	data := `project:
   name: wskdeploy-samples
     packages: test`
-    tmpfile, err := createTmpfile(data, "deployment_parser_test_")
-    if err != nil {
-        assert.Fail(t, "Failed to create temp file")
-    }
-    defer func() {
-        tmpfile.Close()
-        os.Remove(tmpfile.Name())
-    }()
-    p := NewYAMLParser()
-    _, err = p.ParseDeployment(tmpfile.Name())
-    assert.NotNil(t, err)
-    // go-yaml/yaml prints the wrong line number for mapping values. It should be 3.
-    assert.Contains(t, err.Error(), "line 2: mapping values are not allowed in this context")
+	tmpfile, err := createTmpfile(data, "deployment_parser_test_")
+	if err != nil {
+		assert.Fail(t, "Failed to create temp file")
+	}
+	defer func() {
+		tmpfile.Close()
+		os.Remove(tmpfile.Name())
+	}()
+	p := NewYAMLParser()
+	_, err = p.ParseDeployment(tmpfile.Name())
+	assert.NotNil(t, err)
+	// go-yaml/yaml prints the wrong line number for mapping values. It should be 3.
+	assert.Contains(t, err.Error(), "line 2: mapping values are not allowed in this context")
 }
 
 func TestMissingRootNodeDeploymentYaml(t *testing.T) {
-    data :=`name: wskdeploy-samples`
-    tmpfile, err := createTmpfile(data, "deployment_parser_test_")
-    if err != nil {
-        assert.Fail(t, "Failed to create temp file")
-    }
-    defer func() {
-        tmpfile.Close()
-        os.Remove(tmpfile.Name())
-    }()
-    p := NewYAMLParser()
-    _, err = p.ParseDeployment(tmpfile.Name())
-    assert.NotNil(t, err)
-    // go-yaml/yaml prints the wrong line number for mapping values. It should be 3.
-    assert.Contains(t, err.Error(), "line 1: field name not found in struct parsers.YAML")
+	data := `name: wskdeploy-samples`
+	tmpfile, err := createTmpfile(data, "deployment_parser_test_")
+	if err != nil {
+		assert.Fail(t, "Failed to create temp file")
+	}
+	defer func() {
+		tmpfile.Close()
+		os.Remove(tmpfile.Name())
+	}()
+	p := NewYAMLParser()
+	_, err = p.ParseDeployment(tmpfile.Name())
+	assert.NotNil(t, err)
+	// go-yaml/yaml prints the wrong line number for mapping values. It should be 3.
+	assert.Contains(t, err.Error(), "line 1: field name not found in struct parsers.YAML")
 }
 
-func TestParseDeploymentYAML_Application(t *testing.T) {
+func TestParseDeploymentYAML_Project(t *testing.T) {
 	//var deployment utils.DeploymentYAML
 	mm := NewYAMLParser()
-	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_application.yaml")
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_project.yaml")
 
-	//get and verify application name
-	assert.Equal(t, "wskdeploy-samples", deployment.Application.Name, "Get application name failed.")
-	assert.Equal(t, "/wskdeploy/samples/", deployment.Application.Namespace, "Get application namespace failed.")
-	assert.Equal(t, "user-credential", deployment.Application.Credential, "Get application credential failed.")
-	assert.Equal(t, "172.17.0.1", deployment.Application.ApiHost, "Get application api host failed.")
+	//get and verify project name
+	assert.Equal(t, "wskdeploy-samples", deployment.GetProject().Name, "Get project name failed.")
+	assert.Equal(t, "/wskdeploy/samples/", deployment.GetProject().Namespace, "Get project namespace failed.")
+	assert.Equal(t, "user-credential", deployment.GetProject().Credential, "Get project credential failed.")
+	assert.Equal(t, "172.17.0.1", deployment.GetProject().ApiHost, "Get project api host failed.")
 }
 
-func TestParseDeploymentYAML_Application_Package(t *testing.T) {
+func TestParseDeploymentYAML_Project_Package(t *testing.T) {
 	//var deployment utils.DeploymentYAML
 	mm := NewYAMLParser()
-	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_application_package.yaml")
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_project_package.yaml")
 
-	assert.Equal(t, 1, len(deployment.Application.Packages), "Get package list failed.")
-	for pkg_name := range deployment.Application.Packages {
+	assert.Equal(t, 1, len(deployment.GetProject().Packages), "Get package list failed.")
+	for pkg_name := range deployment.GetProject().Packages {
 		assert.Equal(t, "test_package", pkg_name, "Get package name failed.")
-		var pkg = deployment.Application.Packages[pkg_name]
+		var pkg = deployment.GetProject().Packages[pkg_name]
 		assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
 		assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
 		assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
@@ -127,53 +127,53 @@ func TestParseDeploymentYAML_Application_Package(t *testing.T) {
 }
 
 func TestParseDeploymentYAML_Packages(t *testing.T) {
-    //var deployment utils.DeploymentYAML
-    mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_packages.yaml")
+	//var deployment utils.DeploymentYAML
+	mm := NewYAMLParser()
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_packages.yaml")
 
-    assert.Equal(t, 0, len(deployment.Application.Packages), "Packages under application are empty.")
-    assert.Equal(t, 0, len(deployment.Application.Package.Packagename), "Package name is empty.")
-    assert.Equal(t, 1, len(deployment.Packages), "Packages are available.")
-    for pkg_name := range deployment.Packages {
-        assert.Equal(t, "test_package", pkg_name, "Get package name failed.")
-        var pkg = deployment.Packages[pkg_name]
-        assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
-        assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
-        assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
-        //get and verify inputs
-        for param_name, param := range pkg.Inputs {
-            assert.Equal(t, "value", param.Value, "Get input value failed.")
-            assert.Equal(t, "param", param_name, "Get input param name failed.")
-        }
-    }
+	assert.Equal(t, 0, len(deployment.GetProject().Packages), "Packages under project are empty.")
+	assert.Equal(t, 0, len(deployment.GetProject().Package.Packagename), "Package name is empty.")
+	assert.Equal(t, 1, len(deployment.Packages), "Packages are available.")
+	for pkg_name := range deployment.Packages {
+		assert.Equal(t, "test_package", pkg_name, "Get package name failed.")
+		var pkg = deployment.Packages[pkg_name]
+		assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
+		assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
+		assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
+		//get and verify inputs
+		for param_name, param := range pkg.Inputs {
+			assert.Equal(t, "value", param.Value, "Get input value failed.")
+			assert.Equal(t, "param", param_name, "Get input param name failed.")
+		}
+	}
 }
 
 func TestParseDeploymentYAML_Package(t *testing.T) {
-    //var deployment utils.DeploymentYAML
-    mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_package.yaml")
+	//var deployment utils.DeploymentYAML
+	mm := NewYAMLParser()
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_package.yaml")
 
-    assert.Equal(t, 0, len(deployment.Application.Packages), "Get package list failed.")
-    assert.Equal(t, 0, len(deployment.Application.Package.Packagename), "Package name is empty.")
-    assert.Equal(t, 0, len(deployment.Packages), "Get package list failed.")
-    assert.Equal(t, "test_package", deployment.Package.Packagename, "Get package name failed.")
-    assert.Equal(t, "/wskdeploy/samples/test", deployment.Package.Namespace, "Get package namespace failed.")
-    assert.Equal(t, "12345678ABCDEF", deployment.Package.Credential, "Get package credential failed.")
-    assert.Equal(t, 1, len(deployment.Package.Inputs), "Get package input list failed.")
-    //get and verify inputs
-    for param_name, param := range deployment.Package.Inputs {
-        assert.Equal(t, "value", param.Value, "Get input value failed.")
-        assert.Equal(t, "param", param_name, "Get input param name failed.")
-    }
+	assert.Equal(t, 0, len(deployment.GetProject().Packages), "Get package list failed.")
+	assert.Equal(t, 0, len(deployment.GetProject().Package.Packagename), "Package name is empty.")
+	assert.Equal(t, 0, len(deployment.Packages), "Get package list failed.")
+	assert.Equal(t, "test_package", deployment.Package.Packagename, "Get package name failed.")
+	assert.Equal(t, "/wskdeploy/samples/test", deployment.Package.Namespace, "Get package namespace failed.")
+	assert.Equal(t, "12345678ABCDEF", deployment.Package.Credential, "Get package credential failed.")
+	assert.Equal(t, 1, len(deployment.Package.Inputs), "Get package input list failed.")
+	//get and verify inputs
+	for param_name, param := range deployment.Package.Inputs {
+		assert.Equal(t, "value", param.Value, "Get input value failed.")
+		assert.Equal(t, "param", param_name, "Get input param name failed.")
+	}
 }
 
 func TestParseDeploymentYAML_Action(t *testing.T) {
 	mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_application_package.yaml")
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_project_package.yaml")
 
-	for pkg_name := range deployment.Application.Packages {
+	for pkg_name := range deployment.GetProject().Packages {
 
-		var pkg = deployment.Application.Packages[pkg_name]
+		var pkg = deployment.GetProject().Packages[pkg_name]
 		for action_name := range pkg.Actions {
 			assert.Equal(t, "hello", action_name, "Get action name failed.")
 			var action = pkg.Actions[action_name]
@@ -195,106 +195,108 @@ func TestParseDeploymentYAML_Action(t *testing.T) {
 }
 
 func TestParseDeploymentYAML_Packages_Env(t *testing.T) {
-    testPackage := "test_package"
-    os.Setenv("package_name", testPackage)
-    assert.Equal(t, testPackage, os.Getenv("package_name"))
-    //var deployment utils.DeploymentYAML
-    mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_packages_env_var.yaml")
+	testPackage := "test_package"
+	os.Setenv("package_name", testPackage)
+	assert.Equal(t, testPackage, os.Getenv("package_name"))
+	//var deployment utils.DeploymentYAML
+	mm := NewYAMLParser()
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_packages_env_var.yaml")
 
-    assert.Equal(t, 0, len(deployment.Application.Packages), "Packages under application are empty.")
-    assert.Equal(t, 0, len(deployment.Application.Package.Packagename), "Package name is empty.")
-    assert.Equal(t, 1, len(deployment.Packages), "Packages are available.")
-    for pkg_name := range deployment.Packages {
-        assert.Equal(t, testPackage, pkg_name, "Get package name failed.")
-        var pkg = deployment.Packages[pkg_name]
-        assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
-        assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
-        assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
-        //get and verify inputs
-        for param_name, param := range pkg.Inputs {
-            assert.Equal(t, "value", param.Value, "Get input value failed.")
-            assert.Equal(t, "param", param_name, "Get input param name failed.")
-        }
-    }
+	assert.Equal(t, 0, len(deployment.GetProject().Packages), "Packages under project are empty.")
+	assert.Equal(t, 0, len(deployment.GetProject().Package.Packagename), "Package name is empty.")
+	assert.Equal(t, 1, len(deployment.Packages), "Packages are available.")
+	for pkg_name := range deployment.Packages {
+		assert.Equal(t, testPackage, pkg_name, "Get package name failed.")
+		var pkg = deployment.Packages[pkg_name]
+		assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
+		assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
+		assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
+		//get and verify inputs
+		for param_name, param := range pkg.Inputs {
+			assert.Equal(t, "value", param.Value, "Get input value failed.")
+			assert.Equal(t, "param", param_name, "Get input param name failed.")
+		}
+	}
 }
 
 func TestParseDeploymentYAML_Package_Env(t *testing.T) {
-    testPackage := "test_package"
-    os.Setenv("package_name", testPackage)
-    assert.Equal(t, testPackage, os.Getenv("package_name"))
-    //var deployment utils.DeploymentYAML
-    mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_package_env_var.yaml")
+	testPackage := "test_package"
+	os.Setenv("package_name", testPackage)
+	assert.Equal(t, testPackage, os.Getenv("package_name"))
+	//var deployment utils.DeploymentYAML
+	mm := NewYAMLParser()
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_package_env_var.yaml")
 
-    assert.Equal(t, 0, len(deployment.Application.Packages), "Get package list failed.")
-    assert.Equal(t, 0, len(deployment.Application.Package.Packagename), "Package name is empty.")
-    assert.Equal(t, 0, len(deployment.Packages), "Get package list failed.")
-    assert.Equal(t, testPackage, deployment.Package.Packagename, "Get package name failed.")
-    assert.Equal(t, "/wskdeploy/samples/test", deployment.Package.Namespace, "Get package namespace failed.")
-    assert.Equal(t, "12345678ABCDEF", deployment.Package.Credential, "Get package credential failed.")
-    assert.Equal(t, 1, len(deployment.Package.Inputs), "Get package input list failed.")
-    //get and verify inputs
-    for param_name, param := range deployment.Package.Inputs {
-        assert.Equal(t, "value", param.Value, "Get input value failed.")
-        assert.Equal(t, "param", param_name, "Get input param name failed.")
-    }
+	assert.Equal(t, 0, len(deployment.GetProject().Packages), "Get package list failed.")
+	assert.Equal(t, 0, len(deployment.GetProject().Package.Packagename), "Package name is empty.")
+	assert.Equal(t, 0, len(deployment.Packages), "Get package list failed.")
+	assert.Equal(t, testPackage, deployment.Package.Packagename, "Get package name failed.")
+	assert.Equal(t, "/wskdeploy/samples/test", deployment.Package.Namespace, "Get package namespace failed.")
+	assert.Equal(t, "12345678ABCDEF", deployment.Package.Credential, "Get package credential failed.")
+	assert.Equal(t, 1, len(deployment.Package.Inputs), "Get package input list failed.")
+	//get and verify inputs
+	for param_name, param := range deployment.Package.Inputs {
+		assert.Equal(t, "value", param.Value, "Get input value failed.")
+		assert.Equal(t, "param", param_name, "Get input param name failed.")
+	}
 }
 
-func TestParseDeploymentYAML_Application_Package_Env(t *testing.T) {
-    testPackage := "test_package"
-    os.Setenv("package_name", testPackage)
-    assert.Equal(t, testPackage, os.Getenv("package_name"))
-    mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_application_package_env_var.yaml")
-    assert.Equal(t, testPackage, deployment.Application.Package.Packagename, "Get package name failed.")
-    assert.Equal(t, "/wskdeploy/samples/test", deployment.Application.Package.Namespace, "Get package namespace failed.")
-    assert.Equal(t, "12345678ABCDEF", deployment.Application.Package.Credential, "Get package credential failed.")
-    assert.Equal(t, 1, len(deployment.Application.Package.Inputs), "Get package input list failed.")
+func TestParseDeploymentYAML_Project_Package_Env(t *testing.T) {
+	testPackage := "test_package"
+	os.Setenv("package_name", testPackage)
+	assert.Equal(t, testPackage, os.Getenv("package_name"))
+	mm := NewYAMLParser()
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_project_package_env_var.yaml")
+	assert.Equal(t, testPackage, deployment.GetProject().Package.Packagename, "Get package name failed.")
+	assert.Equal(t, "/wskdeploy/samples/test", deployment.GetProject().Package.Namespace, "Get package namespace failed.")
+	assert.Equal(t, "12345678ABCDEF", deployment.GetProject().Package.Credential, "Get package credential failed.")
+	assert.Equal(t, 1, len(deployment.GetProject().Package.Inputs), "Get package input list failed.")
 
-    // Verify the case of using concatenation.
-    deployment, _ = mm.ParseDeployment("../tests/dat/deployment_data_application_package_env_var_con.yaml")
-    assert.Equal(t, "test_package-test_package", deployment.Application.Package.Packagename, "Get package name failed.")
+	// Verify the case of using concatenation.
+	deployment, _ = mm.ParseDeployment("../tests/dat/deployment_data_project_package_env_var_con.yaml")
+	assert.Equal(t, "test_package-test_package", deployment.GetProject().Package.Packagename, "Get package name failed.")
 }
 
-func TestParseDeploymentYAML_Application_Packages_Env(t *testing.T) {
-    testPackage := "test_package"
-    os.Setenv("package_name", testPackage)
-    testPackageSec := "test_package_second"
-    os.Setenv("package_name_second", testPackageSec)
-    assert.Equal(t, testPackage, os.Getenv("package_name"))
-    mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_application_packages_env_var.yaml")
+func TestParseDeploymentYAML_Project_Packages_Env(t *testing.T) {
+	testPackage := "test_package"
+	os.Setenv("package_name", testPackage)
+	testPackageSec := "test_package_second"
+	os.Setenv("package_name_second", testPackageSec)
+	assert.Equal(t, testPackage, os.Getenv("package_name"))
+	mm := NewYAMLParser()
+	deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_project_packages_env_var.yaml")
 
-    expectedPackages := [2]string{testPackage, testPackageSec}
-    assert.Equal(t, 2, len(deployment.Application.Packages), "Get package list failed.")
-    for _, pkg_name := range expectedPackages {
-        var pkg = deployment.Application.Packages[pkg_name]
-        assert.Equal(t, pkg_name, pkg.Packagename, "Get package package name failed.")
-        assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
-        assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
-        assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
-        //get and verify inputs
-        for param_name, param := range pkg.Inputs {
-            assert.Equal(t, "value", param.Value, "Get input value failed.")
-            assert.Equal(t, "param", param_name, "Get input param name failed.")
-        }
-    }
+	expectedPackages := [2]string{testPackage, testPackageSec}
+	dep := deployment.GetProject()
+	assert.Equal(t, 2, len(dep.Packages), "Get package list failed.")
+	for _, pkg_name := range expectedPackages {
+		var pkg = dep.Packages[pkg_name]
+		assert.Equal(t, pkg_name, pkg.Packagename, "Get package package name failed.")
+		assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
+		assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
+		assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
+		//get and verify inputs
+		for param_name, param := range pkg.Inputs {
+			assert.Equal(t, "value", param.Value, "Get input value failed.")
+			assert.Equal(t, "param", param_name, "Get input param name failed.")
+		}
+	}
 
-    // Verify the case of using concatenation.
-    expectedPackages = [2]string{testPackage + "suffix", testPackageSec + "suffix"}
-    deployment, _ = mm.ParseDeployment("../tests/dat/deployment_data_application_packages_env_var_con.yaml")
-    assert.Equal(t, 2, len(deployment.Application.Packages), "Get package list failed.")
-    for _, pkg_name := range expectedPackages {
-        var pkg = deployment.Application.Packages[pkg_name]
-        assert.Equal(t, pkg_name, pkg.Packagename, "Get package package name failed.")
-        assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
-        assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
-        assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
-        //get and verify inputs
-        for param_name, param := range pkg.Inputs {
-            assert.Equal(t, "value", param.Value, "Get input value failed.")
-            assert.Equal(t, "param", param_name, "Get input param name failed.")
-        }
-    }
+	// Verify the case of using concatenation.
+	expectedPackages = [2]string{testPackage + "suffix", testPackageSec + "suffix"}
+	deployment, _ = mm.ParseDeployment("../tests/dat/deployment_data_project_packages_env_var_con.yaml")
+	dep = deployment.GetProject()
+	assert.Equal(t, 2, len(dep.Packages), "Get package list failed.")
+	for _, pkg_name := range expectedPackages {
+		var pkg = dep.Packages[pkg_name]
+		assert.Equal(t, pkg_name, pkg.Packagename, "Get package package name failed.")
+		assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
+		assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
+		assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
+		//get and verify inputs
+		for param_name, param := range pkg.Inputs {
+			assert.Equal(t, "value", param.Value, "Get input value failed.")
+			assert.Equal(t, "param", param_name, "Get input param name failed.")
+		}
+	}
 }
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index c38eaaa..5aa98e7 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -110,7 +110,7 @@ func (dm *YAMLParser) ComposeDependenciesFromAllPackages(manifest *YAML, project
 		if manifest.Packages != nil {
 			packages = manifest.Packages
 		} else {
-			packages = manifest.Application.Packages
+			packages = manifest.GetProject().Packages
 		}
 	}
 
@@ -207,7 +207,7 @@ func (dm *YAMLParser) ComposeAllPackages(manifest *YAML, filePath string) (map[s
 		if manifest.Packages != nil {
 			manifestPackages = manifest.Packages
 		} else {
-			manifestPackages = manifest.Application.Packages
+			manifestPackages = manifest.GetProject().Packages
 		}
 	}
 
@@ -291,7 +291,7 @@ func (dm *YAMLParser) ComposeSequencesFromAllPackages(namespace string, mani *YA
 		if mani.Packages != nil {
 			manifestPackages = mani.Packages
 		} else {
-			manifestPackages = mani.Application.Packages
+			manifestPackages = mani.GetProject().Packages
 		}
 	}
 
@@ -359,7 +359,7 @@ func (dm *YAMLParser) ComposeActionsFromAllPackages(manifest *YAML, filePath str
 		if manifest.Packages != nil {
 			manifestPackages = manifest.Packages
 		} else {
-			manifestPackages = manifest.Application.Packages
+			manifestPackages = manifest.GetProject().Packages
 		}
     	}
     	for n, p := range manifestPackages {
@@ -602,7 +602,7 @@ func (dm *YAMLParser) ComposeTriggersFromAllPackages(manifest *YAML, filePath st
 		if manifest.Packages != nil {
 			manifestPackages = manifest.Packages
 		} else {
-			manifestPackages = manifest.Application.Packages
+			manifestPackages = manifest.GetProject().Packages
 		}
 	}
 	for _, p := range manifestPackages {
@@ -683,7 +683,7 @@ func (dm *YAMLParser) ComposeRulesFromAllPackages(manifest *YAML) ([]*whisk.Rule
 		if manifest.Packages != nil {
 			manifestPackages = manifest.Packages
 		} else {
-			manifestPackages = manifest.Application.Packages
+			manifestPackages = manifest.GetProject().Packages
 		}
 	}
 
@@ -724,7 +724,7 @@ func (dm *YAMLParser) ComposeApiRecordsFromAllPackages(manifest *YAML) ([]*whisk
 		if manifest.Packages != nil {
 			manifestPackages = manifest.Packages
 		} else {
-			manifestPackages = manifest.Application.Packages
+			manifestPackages = manifest.GetProject().Packages
 		}
 	}
 
diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go
index 006e1cb..172fa2c 100644
--- a/parsers/yamlparser.go
+++ b/parsers/yamlparser.go
@@ -19,7 +19,7 @@ package parsers
 
 import (
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
-    "github.com/apache/incubator-openwhisk-wskdeploy/utils"
+	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 )
 
 // structs that denotes the sample manifest.yaml, wrapped yaml.v2
@@ -51,34 +51,33 @@ type YAMLParser struct {
 
 type Action struct {
 	//mapping to wsk.Action.Version
-	Version  string `yaml:"version"`  //used in manifest.yaml
-	Location string `yaml:"location"` //deprecated, used in manifest.yaml
-	Function string `yaml:"function"` //used in manifest.yaml
-	Runtime  string `yaml:"runtime,omitempty"`  //used in manifest.yaml
+	Version  string `yaml:"version"`           //used in manifest.yaml
+	Location string `yaml:"location"`          //deprecated, used in manifest.yaml
+	Function string `yaml:"function"`          //used in manifest.yaml
+	Runtime  string `yaml:"runtime,omitempty"` //used in manifest.yaml
 	//mapping to wsk.Action.Namespace
-	Namespace  string                 `yaml:"namespace"`  //used in deployment.yaml
-	Credential string                 `yaml:"credential"` //used in deployment.yaml
-	Inputs     map[string]Parameter   `yaml:"inputs"`     //used in both manifest.yaml and deployment.yaml
-	Outputs    map[string]Parameter   `yaml:"outputs"`    //used in manifest.yaml
+	Namespace  string               `yaml:"namespace"`  //used in deployment.yaml
+	Credential string               `yaml:"credential"` //used in deployment.yaml
+	Inputs     map[string]Parameter `yaml:"inputs"`     //used in both manifest.yaml and deployment.yaml
+	Outputs    map[string]Parameter `yaml:"outputs"`    //used in manifest.yaml
 	//mapping to wsk.Action.Name
 	Name        string
 	Annotations map[string]interface{} `yaml:"annotations,omitempty"`
 	//Parameters  map[string]interface{} `yaml:parameters` // used in manifest.yaml
-	ExposedUrl string `yaml:"exposedUrl"` // used in manifest.yaml
-	Webexport  string `yaml:"web-export"` // used in manifest.yaml
-	Main       string `yaml:"main"`       // used in manifest.yaml
-	Limits     *Limits `yaml:"limits"`       // used in manifest.yaml
+	ExposedUrl string  `yaml:"exposedUrl"` // used in manifest.yaml
+	Webexport  string  `yaml:"web-export"` // used in manifest.yaml
+	Main       string  `yaml:"main"`       // used in manifest.yaml
+	Limits     *Limits `yaml:"limits"`     // used in manifest.yaml
 }
 
-
 type Limits struct {
-	Timeout *int `yaml:"timeout,omitempty"` //in ms, [100 ms,300000ms]
-	Memory  *int `yaml:"memorySize,omitempty"`//in MB, [128 MB,512 MB]
-	Logsize *int `yaml:"logSize,omitempty"`//in MB, [0MB,10MB]
+	Timeout               *int `yaml:"timeout,omitempty"`               //in ms, [100 ms,300000ms]
+	Memory                *int `yaml:"memorySize,omitempty"`            //in MB, [128 MB,512 MB]
+	Logsize               *int `yaml:"logSize,omitempty"`               //in MB, [0MB,10MB]
 	ConcurrentActivations *int `yaml:"concurrentActivations,omitempty"` //not changeable via APIs
-	UserInvocationRate *int `yaml:"userInvocationRate,omitempty"` //not changeable via APIs
-	CodeSize *int `yaml:"codeSize,omitempty"` //not changeable via APIs
-	ParameterSize *int `yaml:"parameterSize,omitempty"` //not changeable via APIs
+	UserInvocationRate    *int `yaml:"userInvocationRate,omitempty"`    //not changeable via APIs
+	CodeSize              *int `yaml:"codeSize,omitempty"`              //not changeable via APIs
+	ParameterSize         *int `yaml:"parameterSize,omitempty"`         //not changeable via APIs
 }
 
 type Sequence struct {
@@ -106,15 +105,15 @@ type Parameter struct {
 
 type Trigger struct {
 	//mapping to ????
-	Feed	   string `yaml:"feed"` //used in manifest.yaml
+	Feed string `yaml:"feed"` //used in manifest.yaml
 	//mapping to wsk.Trigger.Namespace
 	Namespace  string               `yaml:"namespace"`  //used in deployment.yaml
 	Credential string               `yaml:"credential"` //used in deployment.yaml
 	Inputs     map[string]Parameter `yaml:"inputs"`     //used in deployment.yaml
 	//mapping to wsk.Trigger.Name
-	Name       string
+	Name        string
 	Annotations map[string]interface{} `yaml:"annotations,omitempty"`
-	Source     string                 `yaml:source` // deprecated, used in manifest.yaml
+	Source      string                 `yaml:source` // deprecated, used in manifest.yaml
 	//Parameters  map[string]interface{} `yaml:parameters` // used in manifest.yaml
 }
 
@@ -168,7 +167,7 @@ type Package struct {
 	Apis map[string]map[string]map[string]map[string]string `yaml:"apis"` //used in manifest.yaml
 }
 
-type Application struct {
+type Project struct {
 	Name       string             `yaml:"name"`      //used in deployment.yaml
 	Namespace  string             `yaml:"namespace"` //used in deployment.yaml
 	Credential string             `yaml:"credential"`
@@ -179,45 +178,60 @@ type Application struct {
 }
 
 type YAML struct {
-    Application Application       `yaml:"application"` //used in deployment.yaml
-    Packages   map[string]Package `yaml:"packages"` //used in deployment.yaml
-    Package    Package            `yaml:"package"`
-    Filepath    string      //file path of the yaml file
+	Application Project            `yaml:"application"` //used in deployment.yaml (being deprecated)
+	Project     Project            `yaml:"project"`     //used in deployment.yaml
+	Packages    map[string]Package `yaml:"packages"`    //used in deployment.yaml
+	Package     Package            `yaml:"package"`
+	Filepath    string             //file path of the yaml file
+}
+
+// function to return Project or Application depending on what is specified in
+// manifest and deployment files
+func (yaml *YAML) GetProject() Project {
+	if yaml.Application.Name == "" {
+		return yaml.Project
+	}
+	return yaml.Application
 }
 
 func convertSinglePackageName(packageName string) string {
-    if len(packageName) != 0 {
-        packageNameEnv := utils.GetEnvVar(packageName)
-        if str, ok := packageNameEnv.(string); ok {
-            return str
-        } else {
-            return packageName
-        }
-    }
-    return packageName
+	if len(packageName) != 0 {
+		packageNameEnv := utils.GetEnvVar(packageName)
+		if str, ok := packageNameEnv.(string); ok {
+			return str
+		} else {
+			return packageName
+		}
+	}
+	return packageName
 }
 
 func convertPackageName(packageMap map[string]Package) map[string]Package {
-    packages := make(map[string]Package)
-    for packName, depPacks := range packageMap {
-        name := packName
-        packageName := utils.GetEnvVar(packName)
-        if str, ok := packageName.(string); ok {
-            name = str
-        }
-        depPacks.Packagename = convertSinglePackageName(depPacks.Packagename)
-        packages[name] = depPacks
-    }
-    return packages
+	packages := make(map[string]Package)
+	for packName, depPacks := range packageMap {
+		name := packName
+		packageName := utils.GetEnvVar(packName)
+		if str, ok := packageName.(string); ok {
+			name = str
+		}
+		depPacks.Packagename = convertSinglePackageName(depPacks.Packagename)
+		packages[name] = depPacks
+	}
+	return packages
 }
 
 func ReadEnvVariable(yaml *YAML) *YAML {
-    yaml.Application.Package.Packagename = convertSinglePackageName(yaml.Application.Package.Packagename)
-    yaml.Package.Packagename = convertSinglePackageName(yaml.Package.Packagename)
-    yaml.Application.Packages = convertPackageName(yaml.Application.Packages)
-    yaml.Packages = convertPackageName(yaml.Packages)
-
-    return yaml
+	if yaml.Application.Name != "" {
+		yaml.Application.Package.Packagename = convertSinglePackageName(yaml.Application.Package.Packagename)
+		yaml.Package.Packagename = convertSinglePackageName(yaml.Package.Packagename)
+		yaml.Application.Packages = convertPackageName(yaml.Application.Packages)
+	} else {
+		yaml.Project.Package.Packagename = convertSinglePackageName(yaml.Project.Package.Packagename)
+		yaml.Package.Packagename = convertSinglePackageName(yaml.Package.Packagename)
+		yaml.Project.Packages = convertPackageName(yaml.Project.Packages)
+	}
+	yaml.Packages = convertPackageName(yaml.Packages)
+	return yaml
 }
 
 //********************Trigger functions*************************//
diff --git a/parsers/yamlparser_test.go b/parsers/yamlparser_test.go
index 3cc58c7..ad206f3 100644
--- a/parsers/yamlparser_test.go
+++ b/parsers/yamlparser_test.go
@@ -28,24 +28,24 @@ var manifestfile_val_pkg = "../tests/dat/manifest_validate_package_grammar.yaml"
 var manifestfile_val_tar = "../tests/dat/manifest_validate_trigger_action_rule_grammar.yaml"
 var manifest_validate_triggerfeed = "../tests/dat/manifest_validate_triggerfeed.yaml"
 var manifest_validate_rule = "../tests/dat/manifest_validate_rule.yaml"
-var deploymentfile_data_app = "../tests/dat/deployment_data_application.yaml"
-var deploymentfile_data_app_pkg = "../tests/dat/deployment_data_application_package.yaml"
+var deploymentfile_data_app = "../tests/dat/deployment_data_project.yaml"
+var deploymentfile_data_app_pkg = "../tests/dat/deployment_data_project_package.yaml"
 var deployment_compose_trigger = "../tests/dat/deployment_compose_trigger.yaml"
 
-
 func TestComposeWskPackage(t *testing.T) {
 	mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment(deploymentfile_data_app_pkg)
+	deployment, _ := mm.ParseDeployment(deploymentfile_data_app_pkg)
 	manifest, _ := mm.ParseManifest(manifestfile_val_pkg)
 
-	pkglist := deployment.Application.GetPackageList()
+	dep := deployment.GetProject()
+	pkglist := dep.GetPackageList()
 	for _, pkg := range pkglist {
 		wskpkg := pkg.ComposeWskPackage()
 		assert.Equal(t, "test_package", wskpkg.Name, "Get package name failed.")
 		assert.Equal(t, "/wskdeploy/samples/test", wskpkg.Namespace, "Get package namespace failed.")
 	}
 
-	for n, p := range manifest.Packages{
+	for n, p := range manifest.Packages {
 		wskpkg := p.ComposeWskPackage()
 		assert.Equal(t, "helloworld", n, "Get package name failed.")
 		assert.Equal(t, "1.0", wskpkg.Version, "Get package version failed.")
@@ -54,10 +54,11 @@ func TestComposeWskPackage(t *testing.T) {
 
 func TestComposeWskTrigger(t *testing.T) {
 	mm := NewYAMLParser()
-    deployment, _ := mm.ParseDeployment(deployment_compose_trigger)
+	deployment, _ := mm.ParseDeployment(deployment_compose_trigger)
 	manifest, _ := mm.ParseManifest(manifest_validate_triggerfeed)
 
-	pkg := deployment.Application.GetPackageList()[0]
+	dep := deployment.GetProject()
+	pkg := dep.GetPackageList()[0]
 	for _, trigger := range pkg.GetTriggerList() {
 		//temporarily add the nil to make test pass, as we plan refactor the parser as well as test codes.
 		wsktrigger := trigger.ComposeWskTrigger(nil)
@@ -100,7 +101,7 @@ func TestGetActionList(t *testing.T) {
 	manifest, _ := mm.ParseManifest(manifestfile_val_tar)
 	pkg := manifest.Packages["manifest2"]
 	actions := pkg.GetActionList()
-	assert.Equal(t,3, len(actions), "Get action list failed.")
+	assert.Equal(t, 3, len(actions), "Get action list failed.")
 }
 
 func TestGetTriggerList(t *testing.T) {
@@ -108,7 +109,7 @@ func TestGetTriggerList(t *testing.T) {
 	manifest, _ := mm.ParseManifest(manifestfile_val_tar)
 	pkg := manifest.Packages["manifest2"]
 	triggers := pkg.GetTriggerList()
-	assert.Equal(t,2, len(triggers), "Get trigger list failed.")
+	assert.Equal(t, 2, len(triggers), "Get trigger list failed.")
 }
 
 func TestGetRuleList(t *testing.T) {
@@ -116,7 +117,7 @@ func TestGetRuleList(t *testing.T) {
 	manifest, _ := mm.ParseManifest(manifestfile_val_tar)
 	pkg := manifest.Packages["manifest2"]
 	rules := pkg.GetRuleList()
-	assert.Equal(t,3, len(rules), "Get trigger list failed.")
+	assert.Equal(t, 3, len(rules), "Get trigger list failed.")
 }
 
 func TestGetFeedList(t *testing.T) {
@@ -124,7 +125,7 @@ func TestGetFeedList(t *testing.T) {
 	manifest, _ := mm.ParseManifest(manifestfile_val_tar)
 	pkg := manifest.Packages["manifest2"]
 	feeds := pkg.GetFeedList()
-	assert.Equal(t,4, len(feeds), "Get feed list failed.")
+	assert.Equal(t, 4, len(feeds), "Get feed list failed.")
 }
 
 func TestGetApisList(t *testing.T) {
@@ -132,5 +133,5 @@ func TestGetApisList(t *testing.T) {
 	manifest, _ := mm.ParseManifest(manifestfile_val_tar)
 	pkg := manifest.Packages["manifest2"]
 	apis := pkg.GetApis()
-	assert.Equal(t,5, len(apis), "Get api list failed.")
+	assert.Equal(t, 5, len(apis), "Get api list failed.")
 }
diff --git a/tests/dat/deployment_compose_trigger.yaml b/tests/dat/deployment_compose_trigger.yaml
index 300ef54..d3aea20 100644
--- a/tests/dat/deployment_compose_trigger.yaml
+++ b/tests/dat/deployment_compose_trigger.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: wskdeploy-samples
   namespace: /wskdeploy/samples/
 
diff --git a/tests/dat/deployment_data_application.yaml b/tests/dat/deployment_data_project.yaml
similarity index 89%
rename from tests/dat/deployment_data_application.yaml
rename to tests/dat/deployment_data_project.yaml
index bee413e..9a80e49 100644
--- a/tests/dat/deployment_data_application.yaml
+++ b/tests/dat/deployment_data_project.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: wskdeploy-samples
   namespace: /wskdeploy/samples/
   credential: user-credential
diff --git a/tests/dat/deployment_data_application_package.yaml b/tests/dat/deployment_data_project_package.yaml
similarity index 94%
rename from tests/dat/deployment_data_application_package.yaml
rename to tests/dat/deployment_data_project_package.yaml
index e2904e4..2bd705e 100644
--- a/tests/dat/deployment_data_application_package.yaml
+++ b/tests/dat/deployment_data_project_package.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: wskdeploy-samples
   namespace: /wskdeploy/samples/
 
diff --git a/tests/dat/deployment_data_application_package_env_var.yaml b/tests/dat/deployment_data_project_package_env_var.yaml
similarity index 94%
rename from tests/dat/deployment_data_application_package_env_var.yaml
rename to tests/dat/deployment_data_project_package_env_var.yaml
index eb987a5..97d9b56 100644
--- a/tests/dat/deployment_data_application_package_env_var.yaml
+++ b/tests/dat/deployment_data_project_package_env_var.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: wskdeploy-samples
   namespace: /wskdeploy/samples/
 
diff --git a/tests/dat/deployment_data_application_package_env_var_con.yaml b/tests/dat/deployment_data_project_package_env_var_con.yaml
similarity index 94%
rename from tests/dat/deployment_data_application_package_env_var_con.yaml
rename to tests/dat/deployment_data_project_package_env_var_con.yaml
index 8372140..30b698a 100644
--- a/tests/dat/deployment_data_application_package_env_var_con.yaml
+++ b/tests/dat/deployment_data_project_package_env_var_con.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: wskdeploy-samples
   namespace: /wskdeploy/samples/
 
diff --git a/tests/dat/deployment_data_application_packages_env_var.yaml b/tests/dat/deployment_data_project_packages_env_var.yaml
similarity index 96%
rename from tests/dat/deployment_data_application_packages_env_var.yaml
rename to tests/dat/deployment_data_project_packages_env_var.yaml
index 55546fc..a92ab2f 100644
--- a/tests/dat/deployment_data_application_packages_env_var.yaml
+++ b/tests/dat/deployment_data_project_packages_env_var.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: wskdeploy-samples
   namespace: /wskdeploy/samples/
 
diff --git a/tests/dat/deployment_data_application_packages_env_var_con.yaml b/tests/dat/deployment_data_project_packages_env_var_con.yaml
similarity index 97%
rename from tests/dat/deployment_data_application_packages_env_var_con.yaml
rename to tests/dat/deployment_data_project_packages_env_var_con.yaml
index 9366928..92cce6e 100644
--- a/tests/dat/deployment_data_application_packages_env_var_con.yaml
+++ b/tests/dat/deployment_data_project_packages_env_var_con.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: wskdeploy-samples
   namespace: /wskdeploy/samples/
 
diff --git a/tests/dat/deployment_validate_credentials.yaml b/tests/dat/deployment_validate_credentials.yaml
index 6026572..e44868d 100644
--- a/tests/dat/deployment_validate_credentials.yaml
+++ b/tests/dat/deployment_validate_credentials.yaml
@@ -1,6 +1,6 @@
 # do not change or delete this file without changing deployers/whiskclient_test.go
 # this is used for testing whiskclient functionality
-application:
+project:
   name: UnitTestCredentials
   apiHost: sample.deployment.openwhisk.org
   credential: sample-deployment-credential
diff --git a/tests/dat/deployment_validate_deployment_reader.yaml b/tests/dat/deployment_validate_deployment_reader.yaml
index fd18d2b..2e20ea0 100644
--- a/tests/dat/deployment_validate_deployment_reader.yaml
+++ b/tests/dat/deployment_validate_deployment_reader.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: UnitTestDeployers
   packages:
     ValidateDeploymentReader:
diff --git a/tests/src/integration/alarmtrigger/deployment.yaml b/tests/src/integration/alarmtrigger/deployment.yaml
index 77b8ffc..4d983e3 100644
--- a/tests/src/integration/alarmtrigger/deployment.yaml
+++ b/tests/src/integration/alarmtrigger/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
     name: HelloWorldEvery12Hours
     packages:
       helloworld:
diff --git a/tests/src/integration/common/wskdeploy.go b/tests/src/integration/common/wskdeploy.go
index 190353a..5245d3e 100644
--- a/tests/src/integration/common/wskdeploy.go
+++ b/tests/src/integration/common/wskdeploy.go
@@ -172,7 +172,7 @@ func (wskdeploy *Wskdeploy) UndeployManifestPathOnly(manifestpath string) (strin
 // This method will mock a construction of deployment plan, creating all the memory objects
 // This method CANNOT be used for real deployment!
 // Param manifestPath & deploymentPath MUST be the absolute path.
-func (wskdeploy *Wskdeploy) GetDeploymentObjects(manifestPath string, deploymentPath string) (*deployers.DeploymentApplication, error) {
+func (wskdeploy *Wskdeploy) GetDeploymentObjects(manifestPath string, deploymentPath string) (*deployers.DeploymentProject, error) {
 	//create ServiceDeployer and set default values
 	deployer := deployers.NewServiceDeployer()
 	deployer.ProjectPath = filepath.Dir(manifestPath)
diff --git a/tests/src/integration/helloworld/deployment.yaml b/tests/src/integration/helloworld/deployment.yaml
index 9d102c6..a228171 100644
--- a/tests/src/integration/helloworld/deployment.yaml
+++ b/tests/src/integration/helloworld/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTest
   packages:
     IntegrationTestHelloWorld:
diff --git a/tests/src/integration/message-hub/deployment.yaml b/tests/src/integration/message-hub/deployment.yaml
index 5f6413a..e300229 100644
--- a/tests/src/integration/message-hub/deployment.yaml
+++ b/tests/src/integration/message-hub/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
     name: DataProcessingApp
     packages:
         data-processing-with-messagehub:
diff --git a/tests/src/integration/validate-application-and-project/actions/hello.js b/tests/src/integration/validate-application-and-project/actions/hello.js
new file mode 100644
index 0000000..25fdafb
--- /dev/null
+++ b/tests/src/integration/validate-application-and-project/actions/hello.js
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/*
+ * Return a simple greeting message for the whole world.
+ */
+function main(params) {
+    msg = "Hello, " + params.name + " from " + params.place;
+    console.log(msg)
+    return { payload:  msg };
+}
+
diff --git a/tests/dat/deployment_validate_deployment_reader.yaml b/tests/src/integration/validate-application-and-project/deployment-with-application.yaml
similarity index 57%
copy from tests/dat/deployment_validate_deployment_reader.yaml
copy to tests/src/integration/validate-application-and-project/deployment-with-application.yaml
index fd18d2b..1f600f9 100644
--- a/tests/dat/deployment_validate_deployment_reader.yaml
+++ b/tests/src/integration/validate-application-and-project/deployment-with-application.yaml
@@ -1,9 +1,9 @@
 application:
-  name: UnitTestDeployers
+  name: IntegrationTest
   packages:
-    ValidateDeploymentReader:
+    packageValidatingApplication:
       actions:
-        helloNodejs:
+        hello:
           inputs:
             name: Amy
             place: Paris
diff --git a/tests/dat/deployment_validate_deployment_reader.yaml b/tests/src/integration/validate-application-and-project/deployment-with-project.yaml
similarity index 50%
copy from tests/dat/deployment_validate_deployment_reader.yaml
copy to tests/src/integration/validate-application-and-project/deployment-with-project.yaml
index fd18d2b..4c3c54f 100644
--- a/tests/dat/deployment_validate_deployment_reader.yaml
+++ b/tests/src/integration/validate-application-and-project/deployment-with-project.yaml
@@ -1,9 +1,9 @@
-application:
-  name: UnitTestDeployers
+project:
+  name: IntegrationTest
   packages:
-    ValidateDeploymentReader:
+    packageValidatingProject:
       actions:
-        helloNodejs:
+        hello:
           inputs:
             name: Amy
             place: Paris
diff --git a/tests/src/integration/validate-application-and-project/manifest-with-application.yaml b/tests/src/integration/validate-application-and-project/manifest-with-application.yaml
new file mode 100644
index 0000000..1abc629
--- /dev/null
+++ b/tests/src/integration/validate-application-and-project/manifest-with-application.yaml
@@ -0,0 +1,18 @@
+packages:
+    packageValidatingApplication:
+        actions:
+            hello:
+                function: actions/hello.js
+                runtime: nodejs:6
+                inputs:
+                    name:
+                        type: string
+                        description: name of a person
+                    place:
+                        type: string
+                        description: location of a person
+                outputs:
+                    payload:
+                        type: string
+                        description: a simple greeting message, Hello World!
+
diff --git a/tests/src/integration/validate-application-and-project/manifest-with-project.yaml b/tests/src/integration/validate-application-and-project/manifest-with-project.yaml
new file mode 100644
index 0000000..3e4c5b7
--- /dev/null
+++ b/tests/src/integration/validate-application-and-project/manifest-with-project.yaml
@@ -0,0 +1,18 @@
+packages:
+    packageValidatingProject:
+        actions:
+            hello:
+                function: actions/hello.js
+                runtime: nodejs:6
+                inputs:
+                    name:
+                        type: string
+                        description: name of a person
+                    place:
+                        type: string
+                        description: location of a person
+                outputs:
+                    payload:
+                        type: string
+                        description: a simple greeting message, Hello World!
+
diff --git a/tests/src/integration/validate-application-and-project/validate-application-and-project_test.go b/tests/src/integration/validate-application-and-project/validate-application-and-project_test.go
new file mode 100644
index 0000000..a110ef2
--- /dev/null
+++ b/tests/src/integration/validate-application-and-project/validate-application-and-project_test.go
@@ -0,0 +1,50 @@
+// +build integration
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package tests
+
+import (
+	"github.com/apache/incubator-openwhisk-wskdeploy/tests/src/integration/common"
+	"github.com/stretchr/testify/assert"
+	"os"
+	"testing"
+)
+
+var path = "/src/github.com/apache/incubator-openwhisk-wskdeploy/tests/src/integration/validate-application-and-project/"
+
+func TestApplicationInDeployment(t *testing.T) {
+	manifestPath   := os.Getenv("GOPATH") + path + "manifest-with-application.yaml"
+	deploymentPath := os.Getenv("GOPATH") + path + "deployment-with-application.yaml"
+	wskdeploy := common.NewWskdeploy()
+	_, err := wskdeploy.Deploy(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest and deployment files.")
+	_, err = wskdeploy.Undeploy(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to undeploy based on the manifest and deployment files.")
+}
+
+func TestProjectInDeployment(t *testing.T) {
+	manifestPath   := os.Getenv("GOPATH") + path + "manifest-with-project.yaml"
+	deploymentPath := os.Getenv("GOPATH") + path + "deployment-with-project.yaml"
+	wskdeploy := common.NewWskdeploy()
+	_, err := wskdeploy.Deploy(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest and deployment files.")
+	_, err = wskdeploy.Undeploy(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to undeploy based on the manifest and deployment files.")
+}
+
diff --git a/tests/src/integration/validate-binding-inputs-annotations/deployment.yaml b/tests/src/integration/validate-binding-inputs-annotations/deployment.yaml
index 81d1988..ec0526d 100644
--- a/tests/src/integration/validate-binding-inputs-annotations/deployment.yaml
+++ b/tests/src/integration/validate-binding-inputs-annotations/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: BindingTest
   packages:
     packagebinding:
diff --git a/tests/src/integration/validate-manifest-deployment-file-extensions/deployment.yaml b/tests/src/integration/validate-manifest-deployment-file-extensions/deployment.yaml
index 65252dc..1c2770a 100644
--- a/tests/src/integration/validate-manifest-deployment-file-extensions/deployment.yaml
+++ b/tests/src/integration/validate-manifest-deployment-file-extensions/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTest
   packages:
     ValidateYAMLExtension:
diff --git a/tests/src/integration/validate-manifest-deployment-file-extensions/not-standard-deployment.yaml b/tests/src/integration/validate-manifest-deployment-file-extensions/not-standard-deployment.yaml
index df79358..2df5d88 100644
--- a/tests/src/integration/validate-manifest-deployment-file-extensions/not-standard-deployment.yaml
+++ b/tests/src/integration/validate-manifest-deployment-file-extensions/not-standard-deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTest
   packages:
     ValidateNotStandardFileNames:
diff --git a/tests/src/integration/validate-manifest-deployment-file-extensions/random-name-2.yaml b/tests/src/integration/validate-manifest-deployment-file-extensions/random-name-2.yaml
index 1dc4f2d..f6f9307 100644
--- a/tests/src/integration/validate-manifest-deployment-file-extensions/random-name-2.yaml
+++ b/tests/src/integration/validate-manifest-deployment-file-extensions/random-name-2.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTest
   packages:
     ValidateRandomFileNames:
diff --git a/tests/src/integration/validate-manifest-deployment-file-extensions/yaml-deployment-with-yml-manifest.yaml b/tests/src/integration/validate-manifest-deployment-file-extensions/yaml-deployment-with-yml-manifest.yaml
index 82d6086..6176747 100644
--- a/tests/src/integration/validate-manifest-deployment-file-extensions/yaml-deployment-with-yml-manifest.yaml
+++ b/tests/src/integration/validate-manifest-deployment-file-extensions/yaml-deployment-with-yml-manifest.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTest
   packages:
     ValidateYMLManifestWithYAMLDeployment:
diff --git a/tests/src/integration/validate-package-in-manifest/deployment.yaml b/tests/src/integration/validate-package-in-manifest/deployment.yaml
index 7200329..024ee7b 100644
--- a/tests/src/integration/validate-package-in-manifest/deployment.yaml
+++ b/tests/src/integration/validate-package-in-manifest/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTest
   packages:
     usingPackageInManifest:
diff --git a/tests/src/integration/validate-packages-in-manifest/deployment.yaml b/tests/src/integration/validate-packages-in-manifest/deployment.yaml
index 5ee0f75..ef0cb5e 100644
--- a/tests/src/integration/validate-packages-in-manifest/deployment.yaml
+++ b/tests/src/integration/validate-packages-in-manifest/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTest
   packages:
     packageNodeJS:
diff --git a/tests/src/integration/validatePackageInDeployment/deployment.yaml b/tests/src/integration/validatePackageInDeployment/deployment.yaml
index 7242d68..c4174d4 100644
--- a/tests/src/integration/validatePackageInDeployment/deployment.yaml
+++ b/tests/src/integration/validatePackageInDeployment/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTestPackageInDeployment
   package:
     name: TestPackageInDeploymentFile
diff --git a/tests/src/integration/validatePackagesInDeployment/deployment.yaml b/tests/src/integration/validatePackagesInDeployment/deployment.yaml
index 541e0cb..4f3aec9 100644
--- a/tests/src/integration/validatePackagesInDeployment/deployment.yaml
+++ b/tests/src/integration/validatePackagesInDeployment/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
   name: IntegrationTestPackagesInDeployment
   packages:
     TestPackagesInDeploymentFile:
diff --git a/tests/usecases/github/deployment.yaml b/tests/usecases/github/deployment.yaml
index a4f88e5..76b80cc 100644
--- a/tests/usecases/github/deployment.yaml
+++ b/tests/usecases/github/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
     name: AppToPrintGitHubCommits
     packages:
         GitHubCommits:
diff --git a/tests/usecases/slack/deployment.yaml b/tests/usecases/slack/deployment.yaml
index d8fb8cd..c9a4832 100644
--- a/tests/usecases/slack/deployment.yaml
+++ b/tests/usecases/slack/deployment.yaml
@@ -1,4 +1,4 @@
-application:
+project:
     name: AppToPostToSlack
     packages:
         SlackPackage:
diff --git a/utils/misc.go b/utils/misc.go
index 5775872..b37b059 100644
--- a/utils/misc.go
+++ b/utils/misc.go
@@ -78,7 +78,7 @@ func GetHomeDirectory() string {
 	return usr.HomeDir
 }
 
-// Potentially complex structures(such as DeploymentApplication, DeploymentPackage)
+// Potentially complex structures(such as DeploymentProject, DeploymentPackage)
 // could implement those interface which is convenient for put, get subtract in
 // containers etc.
 type Comparable interface {
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index d3c127f..76bb34e 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -32,330 +32,330 @@
 package wski18n
 
 import (
-    "bytes"
-    "compress/gzip"
-    "fmt"
-    "io"
-    "io/ioutil"
-    "os"
-    "path/filepath"
-    "strings"
-    "time"
+	"bytes"
+	"compress/gzip"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"os"
+	"path/filepath"
+	"strings"
+	"time"
 )
 
 func bindataRead(data []byte, name string) ([]byte, error) {
-    gz, err := gzip.NewReader(bytes.NewBuffer(data))
-    if err != nil {
-        return nil, fmt.Errorf("Read %q: %v", name, err)
-    }
+	gz, err := gzip.NewReader(bytes.NewBuffer(data))
+	if err != nil {
+		return nil, fmt.Errorf("Read %q: %v", name, err)
+	}
 
-    var buf bytes.Buffer
-    _, err = io.Copy(&buf, gz)
-    clErr := gz.Close()
+	var buf bytes.Buffer
+	_, err = io.Copy(&buf, gz)
+	clErr := gz.Close()
 
-    if err != nil {
-        return nil, fmt.Errorf("Read %q: %v", name, err)
-    }
-    if clErr != nil {
-        return nil, err
-    }
+	if err != nil {
+		return nil, fmt.Errorf("Read %q: %v", name, err)
+	}
+	if clErr != nil {
+		return nil, err
+	}
 
-    return buf.Bytes(), nil
+	return buf.Bytes(), nil
 }
 
 type asset struct {
-    bytes []byte
-    info  os.FileInfo
+	bytes []byte
+	info  os.FileInfo
 }
 
 type bindataFileInfo struct {
-    name    string
-    size    int64
-    mode    os.FileMode
-    modTime time.Time
+	name    string
+	size    int64
+	mode    os.FileMode
+	modTime time.Time
 }
 
 func (fi bindataFileInfo) Name() string {
-    return fi.name
+	return fi.name
 }
 func (fi bindataFileInfo) Size() int64 {
-    return fi.size
+	return fi.size
 }
 func (fi bindataFileInfo) Mode() os.FileMode {
-    return fi.mode
+	return fi.mode
 }
 func (fi bindataFileInfo) ModTime() time.Time {
-    return fi.modTime
+	return fi.modTime
 }
 func (fi bindataFileInfo) IsDir() bool {
-    return false
+	return false
 }
 func (fi bindataFileInfo) Sys() interface{} {
-    return nil
+	return nil
 }
 
 var _wski18nResourcesDe_deAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
 
 func wski18nResourcesDe_deAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesDe_deAllJson,
-        "wski18n/resources/de_DE.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesDe_deAllJson,
+		"wski18n/resources/de_DE.all.json",
+	)
 }
 
 func wski18nResourcesDe_deAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesDe_deAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesDe_deAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x5d\x6f\xdb\x3a\x12\x7d\xcf\xaf\x18\xe4\xc5\x2f\x81\xb6\xbd\x8b\x05\x16\x7d\x0b\x6e\xbf\x82\xb6\x69\x90\x64\x5b\x14\xdd\x02\x61\xc4\xb1\xc5\x9a\x22\x05\x92\x72\xe0\x1a\xfe\xef\x0b\x8a\x92\xed\x24\x14\x45\xc9\xb2\xb7\xbb\xb8\x7d\x72\x6c\xce\x39\x67\x86\xe4\x70\x46\x62\xbf\x9f\x00\xac\x4e\x00\x00\x4e\x19\x3d\x7d\x05\xa7\xef\x91\x73\x79\x7a\xe6\xbe\x32\x8a\x08\xcd\x89\x61\x52\xd8\xdf\xce\x05\x9c\x5f [...]
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x5d\x6f\xdb\x3a\x12\x7d\xcf\xaf\x18\xe4\xc5\x2f\x81\xb6\xbd\x8b\x05\x16\x7d\x0b\x6e\xbf\x82\xb6\x69\x90\x64\x5b\x14\xdd\x02\x61\xc4\xb1\xc5\x9a\x22\x05\x92\x72\xe0\x1a\xfe\xef\x0b\x8a\x92\xed\x24\x14\x45\xc9\xb2\xb7\xbb\xb8\x79\x72\x64\xce\x39\x67\x86\x5f\x33\x14\xfd\xfd\x04\x60\x75\x02\x00\x70\xca\xe8\xe9\x2b\x38\x7d\x8f\x9c\xcb\xd3\x33\xf7\xc8\x28\x22\x34\x27\x86\x49\x61\xbf\x3b\x17\x70\x7e\x75 [...]
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesEn_usAllJson,
-        "wski18n/resources/en_US.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesEn_usAllJson,
+		"wski18n/resources/en_US.all.json",
+	)
 }
 
 func wski18nResourcesEn_usAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesEn_usAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesEn_usAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 13627, mode: os.FileMode(420), modTime: time.Unix(1507040831, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 14089, mode: os.FileMode(420), modTime: time.Unix(1508886382, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 var _wski18nResourcesEs_esAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
 
 func wski18nResourcesEs_esAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesEs_esAllJson,
-        "wski18n/resources/es_ES.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesEs_esAllJson,
+		"wski18n/resources/es_ES.all.json",
+	)
 }
 
 func wski18nResourcesEs_esAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesEs_esAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesEs_esAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 var _wski18nResourcesFr_frAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8a\xe6\x52\x50\xa8\xe6\x52\x50\x50\x50\x50\xca\x4c\x51\xb2\x52\x50\x4a\xaa\x2c\x48\x2c\x2e\x56\x48\x4e\x2d\x2a\xc9\x4c\xcb\x4c\x4e\x2c\x49\x55\x48\xce\x48\x4d\xce\xce\xcc\x4b\x57\xd2\x81\x28\x2c\x29\x4a\xcc\x2b\xce\x49\x2c\xc9\xcc\xcf\x03\xe9\x08\xce\xcf\x4d\x55\x40\x12\x53\xc8\xcc\x53\x70\x2b\x4a\xcd\x4b\xce\x50\xe2\x52\x50\xa8\xe5\x8a\xe5\x02\x04\x00\x00\xff\xff\x45\xa4\xe9\x62\x65\x00\x00\x00")
 
 func wski18nResourcesFr_frAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesFr_frAllJson,
-        "wski18n/resources/fr_FR.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesFr_frAllJson,
+		"wski18n/resources/fr_FR.all.json",
+	)
 }
 
 func wski18nResourcesFr_frAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesFr_frAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesFr_frAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 var _wski18nResourcesIt_itAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
 
 func wski18nResourcesIt_itAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesIt_itAllJson,
-        "wski18n/resources/it_IT.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesIt_itAllJson,
+		"wski18n/resources/it_IT.all.json",
+	)
 }
 
 func wski18nResourcesIt_itAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesIt_itAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesIt_itAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 var _wski18nResourcesJa_jaAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
 
 func wski18nResourcesJa_jaAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesJa_jaAllJson,
-        "wski18n/resources/ja_JA.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesJa_jaAllJson,
+		"wski18n/resources/ja_JA.all.json",
+	)
 }
 
 func wski18nResourcesJa_jaAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesJa_jaAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesJa_jaAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 var _wski18nResourcesKo_krAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
 
 func wski18nResourcesKo_krAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesKo_krAllJson,
-        "wski18n/resources/ko_KR.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesKo_krAllJson,
+		"wski18n/resources/ko_KR.all.json",
+	)
 }
 
 func wski18nResourcesKo_krAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesKo_krAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesKo_krAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 var _wski18nResourcesPt_brAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
 
 func wski18nResourcesPt_brAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesPt_brAllJson,
-        "wski18n/resources/pt_BR.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesPt_brAllJson,
+		"wski18n/resources/pt_BR.all.json",
+	)
 }
 
 func wski18nResourcesPt_brAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesPt_brAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesPt_brAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 var _wski18nResourcesZh_hansAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
 
 func wski18nResourcesZh_hansAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesZh_hansAllJson,
-        "wski18n/resources/zh_Hans.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesZh_hansAllJson,
+		"wski18n/resources/zh_Hans.all.json",
+	)
 }
 
 func wski18nResourcesZh_hansAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesZh_hansAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesZh_hansAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 var _wski18nResourcesZh_hantAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
 
 func wski18nResourcesZh_hantAllJsonBytes() ([]byte, error) {
-    return bindataRead(
-        _wski18nResourcesZh_hantAllJson,
-        "wski18n/resources/zh_Hant.all.json",
-    )
+	return bindataRead(
+		_wski18nResourcesZh_hantAllJson,
+		"wski18n/resources/zh_Hant.all.json",
+	)
 }
 
 func wski18nResourcesZh_hantAllJson() (*asset, error) {
-    bytes, err := wski18nResourcesZh_hantAllJsonBytes()
-    if err != nil {
-        return nil, err
-    }
+	bytes, err := wski18nResourcesZh_hantAllJsonBytes()
+	if err != nil {
+		return nil, err
+	}
 
-    info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500653295, 0)}
-    a := &asset{bytes: bytes, info: info}
-    return a, nil
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
+	a := &asset{bytes: bytes, info: info}
+	return a, nil
 }
 
 // Asset loads and returns the asset for the given name.
 // It returns an error if the asset could not be found or
 // could not be loaded.
 func Asset(name string) ([]byte, error) {
-    cannonicalName := strings.Replace(name, "\\", "/", -1)
-    if f, ok := _bindata[cannonicalName]; ok {
-        a, err := f()
-        if err != nil {
-            return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
-        }
-        return a.bytes, nil
-    }
-    return nil, fmt.Errorf("Asset %s not found", name)
+	cannonicalName := strings.Replace(name, "\\", "/", -1)
+	if f, ok := _bindata[cannonicalName]; ok {
+		a, err := f()
+		if err != nil {
+			return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
+		}
+		return a.bytes, nil
+	}
+	return nil, fmt.Errorf("Asset %s not found", name)
 }
 
 // MustAsset is like Asset but panics when Asset would return an error.
 // It simplifies safe initialization of global variables.
 func MustAsset(name string) []byte {
-    a, err := Asset(name)
-    if err != nil {
-        panic("asset: Asset(" + name + "): " + err.Error())
-    }
+	a, err := Asset(name)
+	if err != nil {
+		panic("asset: Asset(" + name + "): " + err.Error())
+	}
 
-    return a
+	return a
 }
 
 // AssetInfo loads and returns the asset info for the given name.
 // It returns an error if the asset could not be found or
 // could not be loaded.
 func AssetInfo(name string) (os.FileInfo, error) {
-    cannonicalName := strings.Replace(name, "\\", "/", -1)
-    if f, ok := _bindata[cannonicalName]; ok {
-        a, err := f()
-        if err != nil {
-            return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
-        }
-        return a.info, nil
-    }
-    return nil, fmt.Errorf("AssetInfo %s not found", name)
+	cannonicalName := strings.Replace(name, "\\", "/", -1)
+	if f, ok := _bindata[cannonicalName]; ok {
+		a, err := f()
+		if err != nil {
+			return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
+		}
+		return a.info, nil
+	}
+	return nil, fmt.Errorf("AssetInfo %s not found", name)
 }
 
 // AssetNames returns the names of the assets.
 func AssetNames() []string {
-    names := make([]string, 0, len(_bindata))
-    for name := range _bindata {
-        names = append(names, name)
-    }
-    return names
+	names := make([]string, 0, len(_bindata))
+	for name := range _bindata {
+		names = append(names, name)
+	}
+	return names
 }
 
 // _bindata is a table, holding each asset generator, mapped to its name.
 var _bindata = map[string]func() (*asset, error){
-    "wski18n/resources/de_DE.all.json": wski18nResourcesDe_deAllJson,
-    "wski18n/resources/en_US.all.json": wski18nResourcesEn_usAllJson,
-    "wski18n/resources/es_ES.all.json": wski18nResourcesEs_esAllJson,
-    "wski18n/resources/fr_FR.all.json": wski18nResourcesFr_frAllJson,
-    "wski18n/resources/it_IT.all.json": wski18nResourcesIt_itAllJson,
-    "wski18n/resources/ja_JA.all.json": wski18nResourcesJa_jaAllJson,
-    "wski18n/resources/ko_KR.all.json": wski18nResourcesKo_krAllJson,
-    "wski18n/resources/pt_BR.all.json": wski18nResourcesPt_brAllJson,
-    "wski18n/resources/zh_Hans.all.json": wski18nResourcesZh_hansAllJson,
-    "wski18n/resources/zh_Hant.all.json": wski18nResourcesZh_hantAllJson,
+	"wski18n/resources/de_DE.all.json": wski18nResourcesDe_deAllJson,
+	"wski18n/resources/en_US.all.json": wski18nResourcesEn_usAllJson,
+	"wski18n/resources/es_ES.all.json": wski18nResourcesEs_esAllJson,
+	"wski18n/resources/fr_FR.all.json": wski18nResourcesFr_frAllJson,
+	"wski18n/resources/it_IT.all.json": wski18nResourcesIt_itAllJson,
+	"wski18n/resources/ja_JA.all.json": wski18nResourcesJa_jaAllJson,
+	"wski18n/resources/ko_KR.all.json": wski18nResourcesKo_krAllJson,
+	"wski18n/resources/pt_BR.all.json": wski18nResourcesPt_brAllJson,
+	"wski18n/resources/zh_Hans.all.json": wski18nResourcesZh_hansAllJson,
+	"wski18n/resources/zh_Hant.all.json": wski18nResourcesZh_hantAllJson,
 }
 
 // AssetDir returns the file names below a certain
@@ -372,92 +372,92 @@ var _bindata = map[string]func() (*asset, error){
 // AssetDir("foo.txt") and AssetDir("notexist") would return an error
 // AssetDir("") will return []string{"data"}.
 func AssetDir(name string) ([]string, error) {
-    node := _bintree
-    if len(name) != 0 {
-        cannonicalName := strings.Replace(name, "\\", "/", -1)
-        pathList := strings.Split(cannonicalName, "/")
-        for _, p := range pathList {
-            node = node.Children[p]
-            if node == nil {
-                return nil, fmt.Errorf("Asset %s not found", name)
-            }
-        }
-    }
-    if node.Func != nil {
-        return nil, fmt.Errorf("Asset %s not found", name)
-    }
-    rv := make([]string, 0, len(node.Children))
-    for childName := range node.Children {
-        rv = append(rv, childName)
-    }
-    return rv, nil
+	node := _bintree
+	if len(name) != 0 {
+		cannonicalName := strings.Replace(name, "\\", "/", -1)
+		pathList := strings.Split(cannonicalName, "/")
+		for _, p := range pathList {
+			node = node.Children[p]
+			if node == nil {
+				return nil, fmt.Errorf("Asset %s not found", name)
+			}
+		}
+	}
+	if node.Func != nil {
+		return nil, fmt.Errorf("Asset %s not found", name)
+	}
+	rv := make([]string, 0, len(node.Children))
+	for childName := range node.Children {
+		rv = append(rv, childName)
+	}
+	return rv, nil
 }
 
 type bintree struct {
-    Func     func() (*asset, error)
-    Children map[string]*bintree
+	Func     func() (*asset, error)
+	Children map[string]*bintree
 }
 var _bintree = &bintree{nil, map[string]*bintree{
-    "wski18n": &bintree{nil, map[string]*bintree{
-        "resources": &bintree{nil, map[string]*bintree{
-            "de_DE.all.json": &bintree{wski18nResourcesDe_deAllJson, map[string]*bintree{}},
-            "en_US.all.json": &bintree{wski18nResourcesEn_usAllJson, map[string]*bintree{}},
-            "es_ES.all.json": &bintree{wski18nResourcesEs_esAllJson, map[string]*bintree{}},
-            "fr_FR.all.json": &bintree{wski18nResourcesFr_frAllJson, map[string]*bintree{}},
-            "it_IT.all.json": &bintree{wski18nResourcesIt_itAllJson, map[string]*bintree{}},
-            "ja_JA.all.json": &bintree{wski18nResourcesJa_jaAllJson, map[string]*bintree{}},
-            "ko_KR.all.json": &bintree{wski18nResourcesKo_krAllJson, map[string]*bintree{}},
-            "pt_BR.all.json": &bintree{wski18nResourcesPt_brAllJson, map[string]*bintree{}},
-            "zh_Hans.all.json": &bintree{wski18nResourcesZh_hansAllJson, map[string]*bintree{}},
-            "zh_Hant.all.json": &bintree{wski18nResourcesZh_hantAllJson, map[string]*bintree{}},
-        }},
-    }},
+	"wski18n": &bintree{nil, map[string]*bintree{
+		"resources": &bintree{nil, map[string]*bintree{
+			"de_DE.all.json": &bintree{wski18nResourcesDe_deAllJson, map[string]*bintree{}},
+			"en_US.all.json": &bintree{wski18nResourcesEn_usAllJson, map[string]*bintree{}},
+			"es_ES.all.json": &bintree{wski18nResourcesEs_esAllJson, map[string]*bintree{}},
+			"fr_FR.all.json": &bintree{wski18nResourcesFr_frAllJson, map[string]*bintree{}},
+			"it_IT.all.json": &bintree{wski18nResourcesIt_itAllJson, map[string]*bintree{}},
+			"ja_JA.all.json": &bintree{wski18nResourcesJa_jaAllJson, map[string]*bintree{}},
+			"ko_KR.all.json": &bintree{wski18nResourcesKo_krAllJson, map[string]*bintree{}},
+			"pt_BR.all.json": &bintree{wski18nResourcesPt_brAllJson, map[string]*bintree{}},
+			"zh_Hans.all.json": &bintree{wski18nResourcesZh_hansAllJson, map[string]*bintree{}},
+			"zh_Hant.all.json": &bintree{wski18nResourcesZh_hantAllJson, map[string]*bintree{}},
+		}},
+	}},
 }}
 
 // RestoreAsset restores an asset under the given directory
 func RestoreAsset(dir, name string) error {
-    data, err := Asset(name)
-    if err != nil {
-        return err
-    }
-    info, err := AssetInfo(name)
-    if err != nil {
-        return err
-    }
-    err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
-    if err != nil {
-        return err
-    }
-    err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
-    if err != nil {
-        return err
-    }
-    err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
-    if err != nil {
-        return err
-    }
-    return nil
+	data, err := Asset(name)
+	if err != nil {
+		return err
+	}
+	info, err := AssetInfo(name)
+	if err != nil {
+		return err
+	}
+	err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
+	if err != nil {
+		return err
+	}
+	err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
+	if err != nil {
+		return err
+	}
+	err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
+	if err != nil {
+		return err
+	}
+	return nil
 }
 
 // RestoreAssets restores an asset under the given directory recursively
 func RestoreAssets(dir, name string) error {
-    children, err := AssetDir(name)
-    // File
-    if err != nil {
-        return RestoreAsset(dir, name)
-    }
-    // Dir
-    for _, child := range children {
-        err = RestoreAssets(dir, filepath.Join(name, child))
-        if err != nil {
-            return err
-        }
-    }
-    return nil
+	children, err := AssetDir(name)
+	// File
+	if err != nil {
+		return RestoreAsset(dir, name)
+	}
+	// Dir
+	for _, child := range children {
+		err = RestoreAssets(dir, filepath.Join(name, child))
+		if err != nil {
+			return err
+		}
+	}
+	return nil
 }
 
 func _filePath(dir, name string) string {
-    cannonicalName := strings.Replace(name, "\\", "/", -1)
-    return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
+	cannonicalName := strings.Replace(name, "\\", "/", -1)
+	return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
 }
 
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index 34a6be1..8cfb67c 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -334,6 +334,14 @@
   {
     "id": "The name of the application {{.appNameDeploy}} in deployment file at [{{.deploymentFile}}] does not match the name of the application {{.appNameManifest}}} in manifest file at [{{.manifestFile}}].",
     "translation": "The name of the application {{.appNameDeploy}} in deployment file at [{{.deploymentFile}}] does not match the name of the application {{.appNameManifest}}} in manifest file at [{{.manifestFile}}]."
+  },
+  {
+    "id": "WARNING: application in deployment file will soon be deprecated, please use project instead.\n",
+    "translation": "WARNING: application in deployment file will soon be deprecated, please use project instead.\n"
+  },
+  {
+    "id": "WARNING: application in manifest file will soon be deprecated, please use project instead.\n",
+    "translation": "WARNING: application in manifest file will soon be deprecated, please use project instead.\n"
   }
 
 ]

-- 
To stop receiving notification emails like this one, please contact
['"commits@openwhisk.apache.org" <co...@openwhisk.apache.org>'].