2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 var gulp, replace, rename, fs, prompt, Promise;
23 function mergePromptOptions(options) {
25 return new Promise(function(resolve, reject) {
26 var lang = options.lang;
27 var warDir = options.warDir;
31 description: 'Enter war directory',
36 description: 'Enter locale.json parent directory name',
40 ], function (err, result) {
43 reject(new Error('mergePromptOptions::>\n ' + err));
47 var warDir = result.warDir;
48 var lang = result.lang;
50 console.log('\nlocale.json parent directory name> "' + lang + '"');
51 console.log('war director>"' + warDir + '"');
61 function isBundleExists(path) {
62 return new Promise(function(resolve) {
63 fs.stat(path, function(err) {
65 /*if null == err then file exists.*/
70 function copyEnglishBundle(enBundlePath, lang) {
71 return new Promise(function(resolve, reject) {
72 gulp.src(enBundlePath, {base: './'})
73 .pipe(rename({basename: 'bundle_' + lang}))
74 .pipe(gulp.dest('./'))
75 .on('end', function() {
78 .on('error', function(err) {
79 reject(new Error('copyEnglishBundle::>\n ' + err));
84 function getLocaleContent(localePath) {
86 return new Promise(function(resolve, reject) {
87 fs.readFile(localePath, {encoding: 'utf-8'}, function(err,data){
89 reject('getLocaleContent()::>\n ' + err);
98 function extractLocaleJsonContent(localeDataStr) {
100 var localeJsonStrI18nStartIdx = localeDataStr.indexOf('I18N_IDENTIFIER_START');
101 var localeJsonStrI18nEndIdx = localeDataStr.indexOf('I18N_IDENTIFIER_END');
103 if(-1 === localeJsonStrI18nStartIdx || -1 === localeJsonStrI18nEndIdx) {
104 return Promise.reject(new Error('extractLocaleJsonContent::> localeDataStr must contain %I18N_IDENTIFIER_START% and %I18N_IDENTIFIER_END%'));
107 var localeJsonStr = localeDataStr.substring(
108 localeDataStr.indexOf('{', localeJsonStrI18nStartIdx),
109 localeDataStr.lastIndexOf('}', localeJsonStrI18nEndIdx) + 1
113 JSON.parse(localeJsonStr);
115 return Promise.reject(new Error('extractLocaleJsonContent::> localeDataStr must contain a valid json between %I18N_IDENTIFIER_START% and %I18N_IDENTIFIER_END%=>' + e));
118 return Promise.resolve(localeJsonStr);
121 function setBundleLocaleContent(bundlePath, localeJsonStr) {
122 return new Promise(function(resolve, reject) {
123 gulp.src(bundlePath, {base: './'})
124 .pipe(replace(/I18N_IDENTIFIER_START(.|[\r\n])*?I18N_IDENTIFIER_END/i, function(expr) {
125 return expr.substring(0, expr.indexOf('{')) + localeJsonStr + expr.substring(expr.lastIndexOf('}') + 1);
127 .pipe(gulp.dest('./'))
128 .on('end', function() {
131 .on('error', function(err) {
132 reject(new Error('setBundleLocaleContent::>\n ' + err));
138 function update(options) {
140 gulp = require('gulp');
141 replace = require('gulp-replace');
142 rename = require('gulp-rename');
144 prompt = require('prompt');
145 Promise = require('bluebird');
147 return mergePromptOptions(options).then(function(mergedOptions) {
148 var lang = mergedOptions.lang;
149 var warDir = mergedOptions.warDir;
151 var bundlePath = warDir + '/js/bundle_' + lang + '.js';
152 var localePath = warDir + '/i18n/' + lang + '/locale.json';
154 return isBundleExists(bundlePath)
155 .then(function(isBundleExist) {
156 var englishBundlePath;
158 englishBundlePath = warDir + '/js/bundle_en.js';
159 return copyEnglishBundle(englishBundlePath, lang);
162 .then(getLocaleContent.bind(null, localePath))
163 .then(extractLocaleJsonContent)
164 .then(setBundleLocaleContent.bind(null, bundlePath));
171 module.exports = update;